ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDIyZmI4ZmEuLjhkMTQ1MzEgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTIsNiArMTIsNyBAQAogKi5zCiAqLmtvCiAqLnNvCisqLnNvLmRiZwogKi5tb2QuYwogKi5pCiAqLmxzdApkaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFMKaW5kZXggOTk1NjZiMS4uZWU5MDlmMiAxMDA2NDQKLS0tIGEvQ1JFRElUUworKysgYi9DUkVESVRTCkBAIC05NTksNyArOTU5LDcgQEAKIFM6IEJvdWxkZXIsIENvbG9yYWRvIDgwMzAyCiBTOiBVU0EKIAotTjogSGVpa28gRWlzc2ZlbGR0CitOOiBIZWlrbyBFacOfZmVsZHQKIEU6IGhlaWtvQGNvbG9zc3VzLmVzY2FwZS5kZSBoZWlrb0B1bmlmaXguZGUKIEQ6IHZlcmlmeV9hcmVhIHN0dWZmLCBnZW5lcmljIFNDU0kgZml4ZXMKIEQ6IFNDU0kgUHJvZ3JhbW1pbmcgSE9XVE8KQEAgLTE5ODgsOCArMTk4OCw4IEBACiBFOiB2bEBra2kub3JnCiBEOiBLZXJuZWwgc21iZnMgKHRvIG1vdW50IFdmVywgTlQgYW5kIE9TLzIgbmV0d29yayBkcml2ZXMuKQogRDogTkNQIGZpbGVzeXN0ZW0gc3VwcG9ydCAodG8gbW91bnQgTmV0V2FyZSB2b2x1bWVzKQotUzogVm9uIE9zc2lldHpreSBTdHIuIDEyCi1TOiAzNzA4NSBHb2V0dGluZ2VuCitTOiBWb24tT3NzaWV0emt5LVN0ci4gMTIKK1M6IDM3MDg1IEfDtnR0aW5nZW4KIFM6IEdlcm1hbnkKIAogTjogS2V2aW4gTGVudGluCkBAIC0yNDMxLDExICsyNDMxLDExIEBACiBTOiBCZWF2ZXJ0b24sIE9yZWdvbiA5NzAwNQogUzogVVNBCiAKLU46IEViZXJoYXJkIE1vZW5rZWJlcmcKK046IEViZXJoYXJkIE3Dtm5rZWJlcmcKIEU6IGVtb2Vua2VAZ3dkZy5kZQogRDogQ0RST00gZHJpdmVyICJzYnBjZCIgKE1hdHN1c2hpdGEvUGFuYXNvbmljL1NvdW5kYmxhc3RlcikKLVM6IFJ1aHN0cmF0aG9laGUgMiBiLgotUzogRC0zNzA4NSBHb2V0dGluZ2VuCitTOiBSdWhzdHJhdGjDtmhlIDIgYi4KK1M6IEQtMzcwODUgR8O2dHRpbmdlbgogUzogR2VybWFueQogCiBOOiBUaG9tYXMgTW9saW5hCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svTWFrZWZpbGUKaW5kZXggMWE3ZjUzMC4uMDU0YTdlYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9NYWtlZmlsZQpAQCAtMTY1LDcgKzE2NSw3IEBACiAJQHRvdWNoICRACiAKICMjIwotIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0cyBhbmQgUE5HIGltZ2FnZXMgZnJvbSAuZmlnIGZvcm1hdCBmaWxlcworIyBSdWxlcyB0byBnZW5lcmF0ZSBwb3N0c2NyaXB0cyBhbmQgUE5HIGltYWdlcyBmcm9tIC5maWcgZm9ybWF0IGZpbGVzCiBxdWlldF9jbWRfZmlnMmVwcyA9IEZJRzJFUFMgJEAKICAgICAgIGNtZF9maWcyZXBzID0gZmlnMmRldiAtTGVwcyAkPCAkQAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAppbmRleCBkMzI5MGM0Li5hYTM4Y2M1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKQEAgLTQ2LDcgKzQ2LDcgQEAKIAogICAgICA8c2VjdDE+PHRpdGxlPkF0b21pYyBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb248L3RpdGxlPgogIUlpbmNsdWRlL2FzbS14ODYvYXRvbWljXzMyLmgKLSFJaW5jbHVkZS9hc20teDg2L3VuYWxpZ25lZF8zMi5oCishSWluY2x1ZGUvYXNtLXg4Ni91bmFsaWduZWQuaAogICAgICA8L3NlY3QxPgogCiAgICAgIDxzZWN0MT48dGl0bGU+RGVsYXlpbmcsIHNjaGVkdWxpbmcsIGFuZCB0aW1lciByb3V0aW5lczwvdGl0bGU+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbAppbmRleCA2ZmJjNDFkLi45NTdjZjVjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKQEAgLTI4Miw3ICsyODIsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCisJLyogbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAliYXNlYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvcmVtYXAoQ0hJUF9QSFlTSUNBTF9BRERSRVNTLCAxMDI0KTsKIAlpZighYmFzZWFkZHIpewogCQlwcmludGsoIklvcmVtYXAgdG8gYWNjZXNzIE5BTkQgY2hpcCBmYWlsZWRcbiIpOwpAQCAtMzA2LDcgKzMwNiw3IEBACiAJdGhpcy0+ZGV2X3JlYWR5ID0gYm9hcmRfZGV2X3JlYWR5OwogCXRoaXMtPmVjY21vZGUgPSBOQU5EX0VDQ19TT0ZUOwogCi0JLyogU2NhbiB0byBmaW5kIGV4aXN0YW5jZSBvZiB0aGUgZGV2aWNlICovCisJLyogU2NhbiB0byBmaW5kIGV4aXN0ZW5jZSBvZiB0aGUgZGV2aWNlICovCiAJaWYgKG5hbmRfc2NhbiAoYm9hcmRfbXRkLCAxKSkgewogCQllcnIgPSAtRU5YSU87CiAJCWdvdG8gb3V0X2lvcjsKQEAgLTM0MCw3ICszNDAsNyBAQAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZSAoYm9hcmRfbXRkKTsKIAotCS8qIHVubWFwIHBoeXNpY2FsIGFkcmVzcyAqLworCS8qIHVubWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlpb3VubWFwKCh2b2lkICopYmFzZWFkZHIpOwogCQogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lQTUkudHh0IGIvRG9jdW1lbnRhdGlvbi9JUE1JLnR4dAppbmRleCAyNGRjM2ZjLi5iYzM4MjgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vSVBNSS50eHQKQEAgLTQ0MSwxNyArNDQxLDIwIEBACiAweGNhMi4gIElmIHlvdSB3YW50IHRvIHR1cm4gdGhpcyBvZmYsIHNldCB0aGUgInRyeWRlZmF1bHRzIiBvcHRpb24gdG8KIGZhbHNlLgogCi1JZiB5b3UgaGF2ZSBoaWdoLXJlcyB0aW1lcnMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwKLXVzZSB0aGVtIHRvIHByb3ZpZGUgbXVjaCBiZXR0ZXIgcGVyZm9ybWFuY2UuICBOb3RlIHRoYXQgaWYgeW91IGRvIG5vdAotaGF2ZSBoaWdoLXJlcyB0aW1lcnMgZW5hYmxlZCBpbiB0aGUga2VybmVsIGFuZCB5b3UgZG9uJ3QgaGF2ZQotaW50ZXJydXB0cyBlbmFibGVkLCB0aGUgZHJpdmVyIHdpbGwgcnVuIFZFUlkgc2xvd2x5LiAgRG9uJ3QgYmxhbWUgbWUsCitJZiB5b3VyIElQTUkgaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgaW50ZXJydXB0cyBhbmQgaXMgYSBLQ1Mgb3IKK1NNSUMgaW50ZXJmYWNlLCB0aGUgSVBNSSBkcml2ZXIgd2lsbCBzdGFydCBhIGtlcm5lbCB0aHJlYWQgZm9yIHRoZQoraW50ZXJmYWNlIHRvIGhlbHAgc3BlZWQgdGhpbmdzIHVwLiAgVGhpcyBpcyBhIGxvdy1wcmlvcml0eSBrZXJuZWwKK3RocmVhZCB0aGF0IGNvbnN0YW50bHkgcG9sbHMgdGhlIElQTUkgZHJpdmVyIHdoaWxlIGFuIElQTUkgb3BlcmF0aW9uCitpcyBpbiBwcm9ncmVzcy4gIFRoZSBmb3JjZV9raXBtaWQgbW9kdWxlIHBhcmFtZXRlciB3aWxsIGFsbCB0aGUgdXNlciB0bworZm9yY2UgdGhpcyB0aHJlYWQgb24gb3Igb2ZmLiAgSWYgeW91IGZvcmNlIGl0IG9mZiBhbmQgZG9uJ3QgaGF2ZQoraW50ZXJydXB0cywgdGhlIGRyaXZlciB3aWxsIHJ1biBWRVJZIHNsb3dseS4gIERvbid0IGJsYW1lIG1lLAogdGhlc2UgaW50ZXJmYWNlcyBzdWNrLgogCiBUaGUgZHJpdmVyIHN1cHBvcnRzIGEgaG90IGFkZCBhbmQgcmVtb3ZlIG9mIGludGVyZmFjZXMuICBUaGlzIHdheSwKIGludGVyZmFjZXMgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgYWZ0ZXIgdGhlIGtlcm5lbCBpcyB1cCBhbmQgcnVubmluZy4KLVRoaXMgaXMgZG9uZSB1c2luZyAvc3lzL21vZHVsZXMvaXBtaV9zaS9ob3Rtb2QsIHdoaWNoIGlzIGEgd3JpdGUtb25seQotcGFyYW1ldGVyLiAgWW91IHdyaXRlIGEgc3RyaW5nIHRvIHRoaXMgaW50ZXJmYWNlLiAgVGhlIHN0cmluZyBoYXMgdGhlCi1mb3JtYXQ6CitUaGlzIGlzIGRvbmUgdXNpbmcgL3N5cy9tb2R1bGVzL2lwbWlfc2kvcGFyYW1ldGVycy9ob3Rtb2QsIHdoaWNoIGlzIGEKK3dyaXRlLW9ubHkgcGFyYW1ldGVyLiAgWW91IHdyaXRlIGEgc3RyaW5nIHRvIHRoaXMgaW50ZXJmYWNlLiAgVGhlIHN0cmluZworaGFzIHRoZSBmb3JtYXQ6CiAgICA8b3AxPls6b3AyWzpvcDMuLi5dXQogVGhlICJvcCJzIGFyZToKICAgIGFkZHxyZW1vdmUsa2NzfGJ0fHNtaWMsbWVtfGkvbyw8YWRkcmVzcz5bLDxvcHQxPlssPG9wdDI+WywuLi5dXV0KQEAgLTU4MSw5ICs1ODQsMTEgQEAKIGdldHMgYSBwcmUtYWN0aW9uLiAgRHVyaW5nIGEgcGFuaWMgb3IgYSByZWJvb3QsIHRoZSB3YXRjaGRvZyB3aWxsCiBzdGFydCBhIDEyMCB0aW1lciBpZiBpdCBpcyBydW5uaW5nIHRvIG1ha2Ugc3VyZSB0aGUgcmVib290IG9jY3Vycy4KIAotTm90ZSB0aGF0IGlmIHlvdSB1c2UgdGhlIE5NSSBwcmVhY3Rpb24gZm9yIHRoZSB3YXRjaGRvZywgeW91IE1VU1QKLU5PVCB1c2Ugbm1pIHdhdGNoZG9nIG1vZGUgMS4gIElmIHlvdSB1c2UgdGhlIE5NSSB3YXRjaGRvZywgeW91Ci1tdXN0IHVzZSBtb2RlIDIuCitOb3RlIHRoYXQgaWYgeW91IHVzZSB0aGUgTk1JIHByZWFjdGlvbiBmb3IgdGhlIHdhdGNoZG9nLCB5b3UgTVVTVCBOT1QKK3VzZSB0aGUgbm1pIHdhdGNoZG9nLiAgVGhlcmUgaXMgbm8gcmVhc29uYWJsZSB3YXkgdG8gdGVsbCBpZiBhbiBOTUkKK2NvbWVzIGZyb20gdGhlIElQTUkgY29udHJvbGxlciwgc28gaXQgbXVzdCBhc3N1bWUgdGhhdCBpZiBpdCBnZXRzIGFuCitvdGhlcndpc2UgdW5oYW5kbGVkIE5NSSwgaXQgbXVzdCBiZSBmcm9tIElQTUkgYW5kIGl0IHdpbGwgcGFuaWMKK2ltbWVkaWF0ZWx5LgogCiBPbmNlIHlvdSBvcGVuIHRoZSB3YXRjaGRvZyB0aW1lciwgeW91IG11c3Qgd3JpdGUgYSAnVicgY2hhcmFjdGVyIHRvIHRoZQogZGV2aWNlIHRvIGNsb3NlIGl0LCBvciB0aGUgdGltZXIgd2lsbCBub3Qgc3RvcC4gIFRoaXMgaXMgYSBuZXcgc2VtYW50aWMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0IGIvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKaW5kZXggMTllN2Y2NS4uMzRlMDZkMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKQEAgLTY3LDcgKzY3LDcgQEAKIDIwOiBDaGVjayB0aGF0IGl0IGFsbCBwYXNzZXMgYG1ha2UgaGVhZGVyc19jaGVjaycuCiAKIDIxOiBIYXMgYmVlbiBjaGVja2VkIHdpdGggaW5qZWN0aW9uIG9mIGF0IGxlYXN0IHNsYWIgYW5kIHBhZ2UtYWxsb2NhdGlvbgotICAgIGZhdWlsdXJlcy4gIFNlZSBEb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi8uCisgICAgZmFpbHVyZXMuICBTZWUgRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vLgogCiAgICAgSWYgdGhlIG5ldyBjb2RlIGlzIHN1YnN0YW50aWFsLCBhZGRpdGlvbiBvZiBzdWJzeXN0ZW0tc3BlY2lmaWMgZmF1bHQKICAgICBpbmplY3Rpb24gbWlnaHQgYmUgYXBwcm9wcmlhdGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCBkN2UyNjQyLi4yNGYyZWI0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTM2LDggKzM2LDcgQEAKIAlJZiB0aGUgY29kZSBhcmVhIGhhcyBhIGdlbmVyYWwgbWFpbnRhaW5lciB0aGVuIHBsZWFzZSBzdWJtaXQgaXQgdG8KIAl0aGUgbWFpbnRhaW5lciBsaXN0ZWQgaW4gTUFJTlRBSU5FUlMgaW4gdGhlIGtlcm5lbCBmaWxlLiBJZiB0aGUKIAltYWludGFpbmVyIGRvZXMgbm90IHJlc3BvbmQgb3IgeW91IGNhbm5vdCBmaW5kIHRoZSBhcHByb3ByaWF0ZQotCW1haW50YWluZXIgdGhlbiBwbGVhc2UgY29udGFjdCBNYXJjZWxvIFRvc2F0dGkKLQk8bWFyY2Vsby50b3NhdHRpQGN5Y2xhZGVzLmNvbT4uCisJbWFpbnRhaW5lciB0aGVuIHBsZWFzZSBjb250YWN0IFdpbGx5IFRhcnJlYXUgPHdAMXd0LmV1Pi4KIAogTGludXggMi42OgogCVRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIDIuNCBleGNlcHQgdGhhdCB5b3Ugc2hvdWxkIGZvbGxvdyBsaW51eC1rZXJuZWwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9jZ3JvdXBzdGF0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvY2dyb3Vwc3RhdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTQwZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvY2dyb3Vwc3RhdHMudHh0CkBAIC0wLDAgKzEsMjcgQEAKK0NvbnRyb2wgR3JvdXBzdGF0cyBpcyBpbnNwaXJlZCBieSB0aGUgZGlzY3Vzc2lvbiBhdAoraHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy80LzExLzE4NyBhbmQgaW1wbGVtZW50cyBwZXIgY2dyb3VwIHN0YXRpc3RpY3MgYXMKK3N1Z2dlc3RlZCBieSBBbmRyZXcgTW9ydG9uIGluIGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDcvNC8xMS8yNjMuCisKK1BlciBjZ3JvdXAgc3RhdGlzdGljcyBpbmZyYXN0cnVjdHVyZSByZS11c2VzIGNvZGUgZnJvbSB0aGUgdGFza3N0YXRzCitpbnRlcmZhY2UuIEEgbmV3IHNldCBvZiBjZ3JvdXAgb3BlcmF0aW9ucyBhcmUgcmVnaXN0ZXJlZCB3aXRoIGNvbW1hbmRzCithbmQgYXR0cmlidXRlcyBzcGVjaWZpYyB0byBjZ3JvdXBzLiBJdCBzaG91bGQgYmUgdmVyeSBlYXN5IHRvCitleHRlbmQgcGVyIGNncm91cCBzdGF0aXN0aWNzLCBieSBhZGRpbmcgbWVtYmVycyB0byB0aGUgY2dyb3Vwc3RhdHMKK3N0cnVjdHVyZS4KKworVGhlIGN1cnJlbnQgbW9kZWwgZm9yIGNncm91cHN0YXRzIGlzIGEgcHVsbCwgYSBwdXNoIG1vZGVsICh0byBwb3N0CitzdGF0aXN0aWNzIG9uIGludGVyZXN0aW5nIGV2ZW50cyksIHNob3VsZCBiZSB2ZXJ5IGVhc3kgdG8gYWRkLiBDdXJyZW50bHkKK3VzZXIgc3BhY2UgcmVxdWVzdHMgZm9yIHN0YXRpc3RpY3MgYnkgcGFzc2luZyB0aGUgY2dyb3VwIHBhdGguCitTdGF0aXN0aWNzIGFib3V0IHRoZSBzdGF0ZSBvZiBhbGwgdGhlIHRhc2tzIGluIHRoZSBjZ3JvdXAgaXMgcmV0dXJuZWQgdG8KK3VzZXIgc3BhY2UuCisKK05PVEU6IFdlIGN1cnJlbnRseSByZWx5IG9uIGRlbGF5IGFjY291bnRpbmcgZm9yIGV4dHJhY3RpbmcgaW5mb3JtYXRpb24KK2Fib3V0IHRhc2tzIGJsb2NrZWQgb24gSS9PLiBJZiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUIGlzIGRpc2FibGVkLCB0aGlzCitpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBhdmFpbGFibGUuCisKK1RvIGV4dHJhY3QgY2dyb3VwIHN0YXRpc3RpY3MgYSB1dGlsaXR5IHZlcnkgc2ltaWxhciB0byBnZXRkZWxheXMuYworaGFzIGJlZW4gZGV2ZWxvcGVkLCB0aGUgc2FtcGxlIG91dHB1dCBvZiB0aGUgdXRpbGl0eSBpcyBzaG93biBiZWxvdworCit+L2JhbGJpci9jZ3JvdXBzdGF0cyAjIC4vZ2V0ZGVsYXlzICAtQyAiL2Nncm91cC9hIgorc2xlZXBpbmcgMSwgYmxvY2tlZCAwLCBydW5uaW5nIDEsIHN0b3BwZWQgMCwgdW5pbnRlcnJ1cHRpYmxlIDAKK34vYmFsYmlyL2Nncm91cHN0YXRzICMgLi9nZXRkZWxheXMgIC1DICIvY2dyb3VwIgorc2xlZXBpbmcgMTU1LCBibG9ja2VkIDAsIHJ1bm5pbmcgMSwgc3RvcHBlZCAwLCB1bmludGVycnVwdGlibGUgMgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0RNQS50eHQgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvRE1BLnR4dAppbmRleCAzN2Y0ZWRjLi4zZWQ4MjM4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvRE1BLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvRE1BLnR4dApAQCAtNSw3ICs1LDcgQEAKIC0tLS0tLS0tLS0tLQogCiAgICBUaGUga2VybmVsIHByb3ZpZGVzIGFuIGludGVyZmFjZSB0byBtYW5hZ2UgRE1BIHRyYW5zZmVycwotICAgdXNpbmcgdGhlIERNQSBjaGFubmVscyBpbiB0aGUgY3B1LCBzbyB0aGF0IHRoZSBjZW50cmFsCisgICB1c2luZyB0aGUgRE1BIGNoYW5uZWxzIGluIHRoZSBDUFUsIHNvIHRoYXQgdGhlIGNlbnRyYWwKICAgIGR1dHkgb2YgbWFuYWdpbmcgY2hhbm5lbCBtYXBwaW5ncywgYW5kIHByb2dyYW1taW5nIHRoZQogICAgY2hhbm5lbCBnZW5lcmF0b3JzIGlzIGluIG9uZSBwbGFjZS4KIApAQCAtMTcsMjQgKzE3LDI0IEBACiAgICBjaGFubmVscyB0byBhbGwgc291cmNlcywgd2hpY2ggbWVhbnMgdGhhdCBzb21lIGRldmljZXMKICAgIGhhdmUgYSByZXN0cmljdGVkIG51bWJlciBvZiBjaGFubmVscyB0aGF0IGNhbiBiZSB1c2VkLgogCi0gICBUbyBhbGxvdyBmbGV4aWJpbHR5IGZvciBlYWNoIGNwdSB0eXBlIGFuZCBib2FyZCwgdGhlCi0gICBkbWEgY29kZSBjYW4gYmUgZ2l2ZW4gYW4gZG1hIG9yZGVyaW5nIHN0cnVjdHVyZSB3aGljaAorICAgVG8gYWxsb3cgZmxleGliaWxpdHkgZm9yIGVhY2ggQ1BVIHR5cGUgYW5kIGJvYXJkLCB0aGUKKyAgIERNQSBjb2RlIGNhbiBiZSBnaXZlbiBhIERNQSBvcmRlcmluZyBzdHJ1Y3R1cmUgd2hpY2gKICAgIGFsbG93cyB0aGUgb3JkZXIgb2YgY2hhbm5lbCBzZWFyY2ggdG8gYmUgc3BlY2lmaWVkLCBhcwogICAgd2VsbCBhcyBhbGxvd2luZyB0aGUgcHJvaGliaXRpb24gb2YgY2VydGFpbiBjbGFpbXMuCiAKICAgIHN0cnVjdCBzM2MyNHh4X2RtYV9vcmRlciBoYXMgYSBsaXN0IG9mIGNoYW5uZWxzLCBhbmQKLSAgIGVhY2ggY2hhbm5lbCB3aXRoaW4gaGFzIGEgc2xvdCBmb3IgYSBsaXN0IG9mIGRtYQotICAgY2hhbm5lbCBudW1iZXJzLiBUaGUgc2xvdHMgYXJlIHNlYXJjaGVkIGluIG9yZGVyLCBmb3IKLSAgIHRoZSBwcmVzZW5jZSBvZiBhIGRtYSBjaGFubmVsIG51bWJlciB3aXRoIERNQV9DSF9WQUxJRAotICAgb3JyZWQgaW4uCisgICBlYWNoIGNoYW5uZWwgd2l0aGluIGhhcyBhIHNsb3QgZm9yIGEgbGlzdCBvZiBETUEKKyAgIGNoYW5uZWwgbnVtYmVycy4gVGhlIHNsb3RzIGFyZSBzZWFyY2hlZCBpbiBvcmRlciBmb3IKKyAgIHRoZSBwcmVzZW5jZSBvZiBhIERNQSBjaGFubmVsIG51bWJlciB3aXRoIERNQV9DSF9WQUxJRAorICAgb3ItZWQgaW4uCiAKICAgIElmIHRoZSBvcmRlciBoYXMgdGhlIGZsYWcgRE1BX0NIX05FVkVSIHNldCwgdGhlbiBhZnRlcgogICAgY2hlY2tpbmcgdGhlIGNoYW5uZWwgbGlzdCwgdGhlIHN5c3RlbSB3aWxsIHJldHVybiBubwogICAgZm91bmQgY2hhbm5lbCwgdGh1cyBkZW55aW5nIHRoZSByZXF1ZXN0LgogCiAgICBBIGJvYXJkIHN1cHBvcnQgZmlsZSBjYW4gY2FsbCBzM2MyNHh4X2RtYV9vcmRlcl9zZXQoKQotICAgdG8gcmVnaXN0ZXIgYW4gY29tcGxldGUgb3JkZXJpbmcgc2V0LiBUaGUgcm91dGluZSB3aWxsCi0gICBjb3B5IHRoZSBkYXRhLCBzbyB0aGUgb3JpZ2luYWwgY2FuIGJlIGRpc2NhcmVkIHdpdGgKKyAgIHRvIHJlZ2lzdGVyIGEgY29tcGxldGUgb3JkZXJpbmcgc2V0LiBUaGUgcm91dGluZSB3aWxsCisgICBjb3B5IHRoZSBkYXRhLCBzbyB0aGUgb3JpZ2luYWwgY2FuIGJlIGRpc2NhcmRlZCB3aXRoCiAgICBfX2luaXRkYXRhLgogCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQgYi9Eb2N1bWVudGF0aW9uL2F0b21pY19vcHMudHh0CmluZGV4IGQ0NjMwNmYuLmYyMGMxMGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXRvbWljX29wcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hdG9taWNfb3BzLnR4dApAQCAtNDE4LDYgKzQxOCwyMCBAQAogCSAqLwogCSBzbXBfbWJfX2FmdGVyX2NsZWFyX2JpdCgpOwogCitUaGVyZSBhcmUgdHdvIHNwZWNpYWwgYml0b3BzIHdpdGggbG9jayBiYXJyaWVyIHNlbWFudGljcyAoYWNxdWlyZS9yZWxlYXNlLAorc2FtZSBhcyBzcGlubG9ja3MpLiBUaGVzZSBvcGVyYXRlIGluIHRoZSBzYW1lIHdheSBhcyB0aGVpciBub24tX2xvY2svdW5sb2NrCitwb3N0Zml4ZWQgdmFyaWFudHMsIGV4Y2VwdCB0aGF0IHRoZXkgYXJlIHRvIHByb3ZpZGUgYWNxdWlyZS9yZWxlYXNlIHNlbWFudGljcywKK3Jlc3BlY3RpdmVseS4gVGhpcyBtZWFucyB0aGV5IGNhbiBiZSB1c2VkIGZvciBiaXRfc3Bpbl90cnlsb2NrIGFuZAorYml0X3NwaW5fdW5sb2NrIHR5cGUgb3BlcmF0aW9ucyB3aXRob3V0IHNwZWNpZnlpbmcgYW55IG1vcmUgYmFycmllcnMuCisKKwlpbnQgdGVzdF9hbmRfc2V0X2JpdF9sb2NrKHVuc2lnbmVkIGxvbmcgbnIsIHVuc2lnbmVkIGxvbmcgKmFkZHIpOworCXZvaWQgY2xlYXJfYml0X3VubG9jayh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nICphZGRyKTsKKwl2b2lkIF9fY2xlYXJfYml0X3VubG9jayh1bnNpZ25lZCBsb25nIG5yLCB1bnNpZ25lZCBsb25nICphZGRyKTsKKworVGhlIF9fY2xlYXJfYml0X3VubG9jayB2ZXJzaW9uIGlzIG5vbi1hdG9taWMsIGhvd2V2ZXIgaXQgc3RpbGwgaW1wbGVtZW50cwordW5sb2NrIGJhcnJpZXIgc2VtYW50aWNzLiBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgdGhlIGxvY2sgaXRzZWxmIGlzIHByb3RlY3RpbmcKK3RoZSBvdGhlciBiaXRzIGluIHRoZSB3b3JkLgorCiBGaW5hbGx5LCB0aGVyZSBhcmUgbm9uLWF0b21pYyB2ZXJzaW9ucyBvZiB0aGUgYml0bWFzayBvcGVyYXRpb25zCiBwcm92aWRlZC4gIFRoZXkgYXJlIHVzZWQgaW4gY29udGV4dHMgd2hlcmUgc29tZSBvdGhlciBoaWdoZXItbGV2ZWwgU01QCiBsb2NraW5nIHNjaGVtZSBpcyBiZWluZyB1c2VkIHRvIHByb3RlY3QgdGhlIGJpdG1hc2ssIGFuZCB0aHVzIGxlc3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2FjaGV0bGIudHh0IGIvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKaW5kZXggNTUyY2FiYS4uZGE0MmFiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jYWNoZXRsYi50eHQKQEAgLTg3LDMwICs4Nyw3IEBACiAKIAlUaGlzIGlzIHVzZWQgcHJpbWFyaWx5IGR1cmluZyBmYXVsdCBwcm9jZXNzaW5nLgogCi01KSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotCi0gICBUaGUgc29mdHdhcmUgcGFnZSB0YWJsZXMgZm9yIGFkZHJlc3Mgc3BhY2UgJ21tJyBmb3IgdmlydHVhbAotICAgYWRkcmVzc2VzIGluIHRoZSByYW5nZSAnc3RhcnQnIHRvICdlbmQtMScgYXJlIGJlaW5nIHRvcm4gZG93bi4KLQotICAgU29tZSBwbGF0Zm9ybXMgY2FjaGUgdGhlIGxvd2VzdCBsZXZlbCBvZiB0aGUgc29mdHdhcmUgcGFnZSB0YWJsZXMKLSAgIGluIGEgbGluZWFyIHZpcnR1YWxseSBtYXBwZWQgYXJyYXksIHRvIG1ha2UgVExCIG1pc3MgcHJvY2Vzc2luZwotICAgbW9yZSBlZmZpY2llbnQuICBPbiBzdWNoIHBsYXRmb3Jtcywgc2luY2UgdGhlIFRMQiBpcyBjYWNoaW5nIHRoZQotICAgc29mdHdhcmUgcGFnZSB0YWJsZSBzdHJ1Y3R1cmUsIGl0IG5lZWRzIHRvIGJlIGZsdXNoZWQgd2hlbiBwYXJ0cwotICAgb2YgdGhlIHNvZnR3YXJlIHBhZ2UgdGFibGUgdHJlZSBhcmUgdW5saW5rZWQvZnJlZWQuCi0KLSAgIFNwYXJjNjQgaXMgb25lIGV4YW1wbGUgb2YgYSBwbGF0Zm9ybSB3aGljaCBkb2VzIHRoaXMuCi0KLSAgIFVzdWFsbHksIHdoZW4gbXVubWFwKCknaW5nIGFuIGFyZWEgb2YgdXNlciB2aXJ0dWFsIGFkZHJlc3MKLSAgIHNwYWNlLCB0aGUga2VybmVsIGxlYXZlcyB0aGUgcGFnZSB0YWJsZSBwYXJ0cyBhcm91bmQgYW5kIGp1c3QKLSAgIG1hcmtzIHRoZSBpbmRpdmlkdWFsIHB0ZSdzIGFzIGludmFsaWQuICBIb3dldmVyLCBpZiB2ZXJ5IGxhcmdlCi0gICBwb3J0aW9ucyBvZiB0aGUgYWRkcmVzcyBzcGFjZSBhcmUgdW5tYXBwZWQsIHRoZSBrZXJuZWwgZnJlZXMgdXAKLSAgIHRob3NlIHBvcnRpb25zIG9mIHRoZSBzb2Z0d2FyZSBwYWdlIHRhYmxlcyB0byBwcmV2ZW50IHBvdGVudGlhbAotICAgZXhjZXNzaXZlIGtlcm5lbCBtZW1vcnkgdXNhZ2UgY2F1c2VkIGJ5IGVycmF0aWMgbW1hcC9tbXVubWFwCi0gICBzZXF1ZW5jZXMuICBJdCBpcyBhdCB0aGVzZSB0aW1lcyB0aGF0IGZsdXNoX3RsYl9wZ3RhYmxlcyB3aWxsCi0gICBiZSBpbnZva2VkLgotCi02KSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCis1KSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCBwdGUpCiAKIAlBdCB0aGUgZW5kIG9mIGV2ZXJ5IHBhZ2UgZmF1bHQsIHRoaXMgcm91dGluZSBpcyBpbnZva2VkIHRvCkBAIC0xMjMsNyArMTAwLDcgQEAKIAl0cmFuc2xhdGlvbnMgZm9yIHNvZnR3YXJlIG1hbmFnZWQgVExCIGNvbmZpZ3VyYXRpb25zLgogCVRoZSBzcGFyYzY0IHBvcnQgY3VycmVudGx5IGRvZXMgdGhpcy4KIAotNykgdm9pZCB0bGJfbWlncmF0ZV9maW5pc2goc3RydWN0IG1tX3N0cnVjdCAqbW0pCis2KSB2b2lkIHRsYl9taWdyYXRlX2ZpbmlzaChzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAogCVRoaXMgaW50ZXJmYWNlIGlzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIGFuIGV4cGxpY2l0CiAJcHJvY2VzcyBtaWdyYXRpb24uIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgaG9vawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jZHJvbS9jZHJvbS1zdGFuZGFyZC50ZXggYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2Nkcm9tLXN0YW5kYXJkLnRleAppbmRleCA5MmY5NGU1Li5jNzEzYWViIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2Nkcm9tLXN0YW5kYXJkLnRleAorKysgYi9Eb2N1bWVudGF0aW9uL2Nkcm9tL2Nkcm9tLXN0YW5kYXJkLnRleApAQCAtMTAwOSw3ICsxMDA5LDcgQEAKIFxjZHJvbS1yZWxhdGVkIGNvZGUgaW4gdGhlIDIuMS1rZXJuZWwuICBUaGFua3MgdG8gU2NvdHQgU255ZGVyIGFuZAogR2VyZCBLbm9yciwgd2hvIHdlcmUgdGhlIGZpcnN0IHRvIGltcGxlbWVudCB0aGlzIGludGVyZmFjZSBmb3IgU0NTSQogYW5kIElERS1DRCBkcml2ZXJzIGFuZCBhZGRlZCBtYW55IGlkZWFzIGZvciBleHRlbnNpb24gb2YgdGhlIGRhdGEKLXN0cnVjdHVyZXMgcmVsYXRpdmUgdG8ga2VybmVsfjIuMC4gIEZ1cnRoZXIgdGhhbmtzIHRvIEhlaWtvIEVpc3NmZWxkdCwKK3N0cnVjdHVyZXMgcmVsYXRpdmUgdG8ga2VybmVsfjIuMC4gIEZ1cnRoZXIgdGhhbmtzIHRvIEhlaWtvIEVpe1xzen1mZWxkdCwKIFRob21hcyBRdWlub3QsIEpvbiBUb21icywgS2VuIFBpenppbmksIEViZXJoYXJkIE1cIm9ua2ViZXJnIGFuZCBBbmRyZXcKIEtyb2xsLCB0aGUgXGxpbnV4XCBcY2Ryb21cIGRldmljZSBkcml2ZXIgZGV2ZWxvcGVycyB3aG8gd2VyZSBraW5kCiBlbm91Z2ggdG8gZ2l2ZSBzdWdnZXN0aW9ucyBhbmQgY3JpdGljaXNtcyBkdXJpbmcgdGhlIHdyaXRpbmcuIEZpbmFsbHkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4YTI2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMudHh0CkBAIC0wLDAgKzEsNTQ1IEBACisJCQkJQ0dST1VQUworCQkJCS0tLS0tLS0KKworV3JpdHRlbiBieSBQYXVsIE1lbmFnZSA8bWVuYWdlQGdvb2dsZS5jb20+IGJhc2VkIG9uIERvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKworT3JpZ2luYWwgY29weXJpZ2h0IHN0YXRlbWVudHMgZnJvbSBjcHVzZXRzLnR4dDoKK1BvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNCBCVUxMIFNBLgorUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgU2lsaWNvbiBHcmFwaGljcywgSW5jLgorTW9kaWZpZWQgYnkgUGF1bCBKYWNrc29uIDxwakBzZ2kuY29tPgorTW9kaWZpZWQgYnkgQ2hyaXN0b3BoIExhbWV0ZXIgPGNsYW1ldGVyQHNnaS5jb20+CisKK0NPTlRFTlRTOgorPT09PT09PT09CisKKzEuIENvbnRyb2wgR3JvdXBzCisgIDEuMSBXaGF0IGFyZSBjZ3JvdXBzID8KKyAgMS4yIFdoeSBhcmUgY2dyb3VwcyBuZWVkZWQgPworICAxLjMgSG93IGFyZSBjZ3JvdXBzIGltcGxlbWVudGVkID8KKyAgMS40IFdoYXQgZG9lcyBub3RpZnlfb25fcmVsZWFzZSBkbyA/CisgIDEuNSBIb3cgZG8gSSB1c2UgY2dyb3VwcyA/CisyLiBVc2FnZSBFeGFtcGxlcyBhbmQgU3ludGF4CisgIDIuMSBCYXNpYyBVc2FnZQorICAyLjIgQXR0YWNoaW5nIHByb2Nlc3NlcworMy4gS2VybmVsIEFQSQorICAzLjEgT3ZlcnZpZXcKKyAgMy4yIFN5bmNocm9uaXphdGlvbgorICAzLjMgU3Vic3lzdGVtIEFQSQorNC4gUXVlc3Rpb25zCisKKzEuIENvbnRyb2wgR3JvdXBzCis9PT09PT09PT09CisKKzEuMSBXaGF0IGFyZSBjZ3JvdXBzID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29udHJvbCBHcm91cHMgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgYWdncmVnYXRpbmcvcGFydGl0aW9uaW5nIHNldHMgb2YKK3Rhc2tzLCBhbmQgYWxsIHRoZWlyIGZ1dHVyZSBjaGlsZHJlbiwgaW50byBoaWVyYXJjaGljYWwgZ3JvdXBzIHdpdGgKK3NwZWNpYWxpemVkIGJlaGF2aW91ci4KKworRGVmaW5pdGlvbnM6CisKK0EgKmNncm91cCogYXNzb2NpYXRlcyBhIHNldCBvZiB0YXNrcyB3aXRoIGEgc2V0IG9mIHBhcmFtZXRlcnMgZm9yIG9uZQorb3IgbW9yZSBzdWJzeXN0ZW1zLgorCitBICpzdWJzeXN0ZW0qIGlzIGEgbW9kdWxlIHRoYXQgbWFrZXMgdXNlIG9mIHRoZSB0YXNrIGdyb3VwaW5nCitmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IGNncm91cHMgdG8gdHJlYXQgZ3JvdXBzIG9mIHRhc2tzIGluCitwYXJ0aWN1bGFyIHdheXMuIEEgc3Vic3lzdGVtIGlzIHR5cGljYWxseSBhICJyZXNvdXJjZSBjb250cm9sbGVyIiB0aGF0CitzY2hlZHVsZXMgYSByZXNvdXJjZSBvciBhcHBsaWVzIHBlci1jZ3JvdXAgbGltaXRzLCBidXQgaXQgbWF5IGJlCithbnl0aGluZyB0aGF0IHdhbnRzIHRvIGFjdCBvbiBhIGdyb3VwIG9mIHByb2Nlc3NlcywgZS5nLiBhCit2aXJ0dWFsaXphdGlvbiBzdWJzeXN0ZW0uCisKK0EgKmhpZXJhcmNoeSogaXMgYSBzZXQgb2YgY2dyb3VwcyBhcnJhbmdlZCBpbiBhIHRyZWUsIHN1Y2ggdGhhdAorZXZlcnkgdGFzayBpbiB0aGUgc3lzdGVtIGlzIGluIGV4YWN0bHkgb25lIG9mIHRoZSBjZ3JvdXBzIGluIHRoZQoraGllcmFyY2h5LCBhbmQgYSBzZXQgb2Ygc3Vic3lzdGVtczsgZWFjaCBzdWJzeXN0ZW0gaGFzIHN5c3RlbS1zcGVjaWZpYworc3RhdGUgYXR0YWNoZWQgdG8gZWFjaCBjZ3JvdXAgaW4gdGhlIGhpZXJhcmNoeS4gIEVhY2ggaGllcmFyY2h5IGhhcworYW4gaW5zdGFuY2Ugb2YgdGhlIGNncm91cCB2aXJ0dWFsIGZpbGVzeXN0ZW0gYXNzb2NpYXRlZCB3aXRoIGl0LgorCitBdCBhbnkgb25lIHRpbWUgdGhlcmUgbWF5IGJlIG11bHRpcGxlIGFjdGl2ZSBoaWVyYWNoaWVzIG9mIHRhc2sKK2Nncm91cHMuIEVhY2ggaGllcmFyY2h5IGlzIGEgcGFydGl0aW9uIG9mIGFsbCB0YXNrcyBpbiB0aGUgc3lzdGVtLgorCitVc2VyIGxldmVsIGNvZGUgbWF5IGNyZWF0ZSBhbmQgZGVzdHJveSBjZ3JvdXBzIGJ5IG5hbWUgaW4gYW4KK2luc3RhbmNlIG9mIHRoZSBjZ3JvdXAgdmlydHVhbCBmaWxlIHN5c3RlbSwgc3BlY2lmeSBhbmQgcXVlcnkgdG8KK3doaWNoIGNncm91cCBhIHRhc2sgaXMgYXNzaWduZWQsIGFuZCBsaXN0IHRoZSB0YXNrIHBpZHMgYXNzaWduZWQgdG8KK2EgY2dyb3VwLiBUaG9zZSBjcmVhdGlvbnMgYW5kIGFzc2lnbm1lbnRzIG9ubHkgYWZmZWN0IHRoZSBoaWVyYXJjaHkKK2Fzc29jaWF0ZWQgd2l0aCB0aGF0IGluc3RhbmNlIG9mIHRoZSBjZ3JvdXAgZmlsZSBzeXN0ZW0uCisKK09uIHRoZWlyIG93biwgdGhlIG9ubHkgdXNlIGZvciBjZ3JvdXBzIGlzIGZvciBzaW1wbGUgam9iCit0cmFja2luZy4gVGhlIGludGVudGlvbiBpcyB0aGF0IG90aGVyIHN1YnN5c3RlbXMgaG9vayBpbnRvIHRoZSBnZW5lcmljCitjZ3JvdXAgc3VwcG9ydCB0byBwcm92aWRlIG5ldyBhdHRyaWJ1dGVzIGZvciBjZ3JvdXBzLCBzdWNoIGFzCithY2NvdW50aW5nL2xpbWl0aW5nIHRoZSByZXNvdXJjZXMgd2hpY2ggcHJvY2Vzc2VzIGluIGEgY2dyb3VwIGNhbgorYWNjZXNzLiBGb3IgZXhhbXBsZSwgY3B1c2V0cyAoc2VlIERvY3VtZW50YXRpb24vY3B1c2V0cy50eHQpIGFsbG93cworeW91IHRvIGFzc29jaWF0ZSBhIHNldCBvZiBDUFVzIGFuZCBhIHNldCBvZiBtZW1vcnkgbm9kZXMgd2l0aCB0aGUKK3Rhc2tzIGluIGVhY2ggY2dyb3VwLgorCisxLjIgV2h5IGFyZSBjZ3JvdXBzIG5lZWRlZCA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGFyZSBtdWx0aXBsZSBlZmZvcnRzIHRvIHByb3ZpZGUgcHJvY2VzcyBhZ2dyZWdhdGlvbnMgaW4gdGhlCitMaW51eCBrZXJuZWwsIG1haW5seSBmb3IgcmVzb3VyY2UgdHJhY2tpbmcgcHVycG9zZXMuIFN1Y2ggZWZmb3J0cworaW5jbHVkZSBjcHVzZXRzLCBDS1JNL1Jlc0dyb3VwcywgVXNlckJlYW5Db3VudGVycywgYW5kIHZpcnR1YWwgc2VydmVyCituYW1lc3BhY2VzLiBUaGVzZSBhbGwgcmVxdWlyZSB0aGUgYmFzaWMgbm90aW9uIG9mIGEKK2dyb3VwaW5nL3BhcnRpdGlvbmluZyBvZiBwcm9jZXNzZXMsIHdpdGggbmV3bHkgZm9ya2VkIHByb2Nlc3NlcyBlbmRpbmcKK2luIHRoZSBzYW1lIGdyb3VwIChjZ3JvdXApIGFzIHRoZWlyIHBhcmVudCBwcm9jZXNzLgorCitUaGUga2VybmVsIGNncm91cCBwYXRjaCBwcm92aWRlcyB0aGUgbWluaW11bSBlc3NlbnRpYWwga2VybmVsCittZWNoYW5pc21zIHJlcXVpcmVkIHRvIGVmZmljaWVudGx5IGltcGxlbWVudCBzdWNoIGdyb3Vwcy4gSXQgaGFzCittaW5pbWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtIGZhc3QgcGF0aHMsIGFuZCBwcm92aWRlcyBob29rcyBmb3IKK3NwZWNpZmljIHN1YnN5c3RlbXMgc3VjaCBhcyBjcHVzZXRzIHRvIHByb3ZpZGUgYWRkaXRpb25hbCBiZWhhdmlvdXIgYXMKK2Rlc2lyZWQuCisKK011bHRpcGxlIGhpZXJhcmNoeSBzdXBwb3J0IGlzIHByb3ZpZGVkIHRvIGFsbG93IGZvciBzaXR1YXRpb25zIHdoZXJlCit0aGUgZGl2aXNpb24gb2YgdGFza3MgaW50byBjZ3JvdXBzIGlzIGRpc3RpbmN0bHkgZGlmZmVyZW50IGZvcgorZGlmZmVyZW50IHN1YnN5c3RlbXMgLSBoYXZpbmcgcGFyYWxsZWwgaGllcmFyY2hpZXMgYWxsb3dzIGVhY2gKK2hpZXJhcmNoeSB0byBiZSBhIG5hdHVyYWwgZGl2aXNpb24gb2YgdGFza3MsIHdpdGhvdXQgaGF2aW5nIHRvIGhhbmRsZQorY29tcGxleCBjb21iaW5hdGlvbnMgb2YgdGFza3MgdGhhdCB3b3VsZCBiZSBwcmVzZW50IGlmIHNldmVyYWwKK3VucmVsYXRlZCBzdWJzeXN0ZW1zIG5lZWRlZCB0byBiZSBmb3JjZWQgaW50byB0aGUgc2FtZSB0cmVlIG9mCitjZ3JvdXBzLgorCitBdCBvbmUgZXh0cmVtZSwgZWFjaCByZXNvdXJjZSBjb250cm9sbGVyIG9yIHN1YnN5c3RlbSBjb3VsZCBiZSBpbiBhCitzZXBhcmF0ZSBoaWVyYXJjaHk7IGF0IHRoZSBvdGhlciBleHRyZW1lLCBhbGwgc3Vic3lzdGVtcword291bGQgYmUgYXR0YWNoZWQgdG8gdGhlIHNhbWUgaGllcmFyY2h5LgorCitBcyBhbiBleGFtcGxlIG9mIGEgc2NlbmFyaW8gKG9yaWdpbmFsbHkgcHJvcG9zZWQgYnkgdmF0c2FAaW4uaWJtLmNvbSkKK3RoYXQgY2FuIGJlbmVmaXQgZnJvbSBtdWx0aXBsZSBoaWVyYXJjaGllcywgY29uc2lkZXIgYSBsYXJnZQordW5pdmVyc2l0eSBzZXJ2ZXIgd2l0aCB2YXJpb3VzIHVzZXJzIC0gc3R1ZGVudHMsIHByb2Zlc3NvcnMsIHN5c3RlbQordGFza3MgZXRjLiBUaGUgcmVzb3VyY2UgcGxhbm5pbmcgZm9yIHRoaXMgc2VydmVyIGNvdWxkIGJlIGFsb25nIHRoZQorZm9sbG93aW5nIGxpbmVzOgorCisgICAgICAgQ1BVIDogICAgICAgICAgIFRvcCBjcHVzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgLyAgICAgICBcCisgICAgICAgICAgICAgICBDUFVTZXQxICAgICAgICAgQ1BVU2V0MgorICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgKFByb2ZzKSAgICAgICAgIChTdHVkZW50cykKKworICAgICAgICAgICAgICAgSW4gYWRkaXRpb24gKHN5c3RlbSB0YXNrcykgYXJlIGF0dGFjaGVkIHRvIHRvcGNwdXNldCAoc28KKyAgICAgICAgICAgICAgIHRoYXQgdGhleSBjYW4gcnVuIGFueXdoZXJlKSB3aXRoIGEgbGltaXQgb2YgMjAlCisKKyAgICAgICBNZW1vcnkgOiBQcm9mZXNzb3JzICg1MCUpLCBzdHVkZW50cyAoMzAlKSwgc3lzdGVtICgyMCUpCisKKyAgICAgICBEaXNrIDogUHJvZiAoNTAlKSwgc3R1ZGVudHMgKDMwJSksIHN5c3RlbSAoMjAlKQorCisgICAgICAgTmV0d29yayA6IFdXVyBicm93c2luZyAoMjAlKSwgTmV0d29yayBGaWxlIFN5c3RlbSAoNjAlKSwgb3RoZXJzICgyMCUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBcCisgICAgICAgICAgICAgICAgICAgICAgIFByb2YgKDE1JSkgc3R1ZGVudHMgKDUlKQorCitCcm93c2VycyBsaWtlIGZpcmVmb3gvbHlueCBnbyBpbnRvIHRoZSBXV1cgbmV0d29yayBjbGFzcywgd2hpbGUgKGspbmZzZCBnbworaW50byBORlMgbmV0d29yayBjbGFzcy4KKworQXQgdGhlIHNhbWUgdGltZSBmaXJlZm94L2x5bnggd2lsbCBzaGFyZSBhbiBhcHByb3ByaWF0ZSBDUFUvTWVtb3J5IGNsYXNzCitkZXBlbmRpbmcgb24gd2hvIGxhdW5jaGVkIGl0IChwcm9mL3N0dWRlbnQpLgorCitXaXRoIHRoZSBhYmlsaXR5IHRvIGNsYXNzaWZ5IHRhc2tzIGRpZmZlcmVudGx5IGZvciBkaWZmZXJlbnQgcmVzb3VyY2VzCisoYnkgcHV0dGluZyB0aG9zZSByZXNvdXJjZSBzdWJzeXN0ZW1zIGluIGRpZmZlcmVudCBoaWVyYXJjaGllcykgdGhlbgordGhlIGFkbWluIGNhbiBlYXNpbHkgc2V0IHVwIGEgc2NyaXB0IHdoaWNoIHJlY2VpdmVzIGV4ZWMgbm90aWZpY2F0aW9ucworYW5kIGRlcGVuZGluZyBvbiB3aG8gaXMgbGF1bmNoaW5nIHRoZSBicm93c2VyIGhlIGNhbgorCisgICAgICAgIyBlY2hvIGJyb3dzZXJfcGlkID4gL21udC88cmVzdHlwZT4vPHVzZXJjbGFzcz4vdGFza3MKKworV2l0aCBvbmx5IGEgc2luZ2xlIGhpZXJhcmNoeSwgaGUgbm93IHdvdWxkIHBvdGVudGlhbGx5IGhhdmUgdG8gY3JlYXRlCithIHNlcGFyYXRlIGNncm91cCBmb3IgZXZlcnkgYnJvd3NlciBsYXVuY2hlZCBhbmQgYXNzb2NpYXRlIGl0IHdpdGgKK2FwcHJvcCBuZXR3b3JrIGFuZCBvdGhlciByZXNvdXJjZSBjbGFzcy4gIFRoaXMgbWF5IGxlYWQgdG8KK3Byb2xpZmVyYXRpb24gb2Ygc3VjaCBjZ3JvdXBzLgorCitBbHNvIGxldHMgc2F5IHRoYXQgdGhlIGFkbWluaXN0cmF0b3Igd291bGQgbGlrZSB0byBnaXZlIGVuaGFuY2VkIG5ldHdvcmsKK2FjY2VzcyB0ZW1wb3JhcmlseSB0byBhIHN0dWRlbnQncyBicm93c2VyIChzaW5jZSBpdCBpcyBuaWdodCBhbmQgdGhlIHVzZXIKK3dhbnRzIHRvIGRvIG9ubGluZSBnYW1pbmcgOikgIE9SIGdpdmUgb25lIG9mIHRoZSBzdHVkZW50cyBzaW11bGF0aW9uCithcHBzIGVuaGFuY2VkIENQVSBwb3dlciwKKworV2l0aCBhYmlsaXR5IHRvIHdyaXRlIHBpZHMgZGlyZWN0bHkgdG8gcmVzb3VyY2UgY2xhc3NlcywgaXRzIGp1c3QgYQorbWF0dGVyIG9mIDoKKworICAgICAgICMgZWNobyBwaWQgPiAvbW50L25ldHdvcmsvPG5ld19jbGFzcz4vdGFza3MKKyAgICAgICAoYWZ0ZXIgc29tZSB0aW1lKQorICAgICAgICMgZWNobyBwaWQgPiAvbW50L25ldHdvcmsvPG9yaWdfY2xhc3M+L3Rhc2tzCisKK1dpdGhvdXQgdGhpcyBhYmlsaXR5LCBoZSB3b3VsZCBoYXZlIHRvIHNwbGl0IHRoZSBjZ3JvdXAgaW50bworbXVsdGlwbGUgc2VwYXJhdGUgb25lcyBhbmQgdGhlbiBhc3NvY2lhdGUgdGhlIG5ldyBjZ3JvdXBzIHdpdGggdGhlCituZXcgcmVzb3VyY2UgY2xhc3Nlcy4KKworCisKKzEuMyBIb3cgYXJlIGNncm91cHMgaW1wbGVtZW50ZWQgPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvbnRyb2wgR3JvdXBzIGV4dGVuZHMgdGhlIGtlcm5lbCBhcyBmb2xsb3dzOgorCisgLSBFYWNoIHRhc2sgaW4gdGhlIHN5c3RlbSBoYXMgYSByZWZlcmVuY2UtY291bnRlZCBwb2ludGVyIHRvIGEKKyAgIGNzc19zZXQuCisKKyAtIEEgY3NzX3NldCBjb250YWlucyBhIHNldCBvZiByZWZlcmVuY2UtY291bnRlZCBwb2ludGVycyB0bworICAgY2dyb3VwX3N1YnN5c19zdGF0ZSBvYmplY3RzLCBvbmUgZm9yIGVhY2ggY2dyb3VwIHN1YnN5c3RlbQorICAgcmVnaXN0ZXJlZCBpbiB0aGUgc3lzdGVtLiBUaGVyZSBpcyBubyBkaXJlY3QgbGluayBmcm9tIGEgdGFzayB0bworICAgdGhlIGNncm91cCBvZiB3aGljaCBpdCdzIGEgbWVtYmVyIGluIGVhY2ggaGllcmFyY2h5LCBidXQgdGhpcworICAgY2FuIGJlIGRldGVybWluZWQgYnkgZm9sbG93aW5nIHBvaW50ZXJzIHRocm91Z2ggdGhlCisgICBjZ3JvdXBfc3Vic3lzX3N0YXRlIG9iamVjdHMuIFRoaXMgaXMgYmVjYXVzZSBhY2Nlc3NpbmcgdGhlCisgICBzdWJzeXN0ZW0gc3RhdGUgaXMgc29tZXRoaW5nIHRoYXQncyBleHBlY3RlZCB0byBoYXBwZW4gZnJlcXVlbnRseQorICAgYW5kIGluIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGNvZGUsIHdoZXJlYXMgb3BlcmF0aW9ucyB0aGF0IHJlcXVpcmUgYQorICAgdGFzaydzIGFjdHVhbCBjZ3JvdXAgYXNzaWdubWVudHMgKGluIHBhcnRpY3VsYXIsIG1vdmluZyBiZXR3ZWVuCisgICBjZ3JvdXBzKSBhcmUgbGVzcyBjb21tb24uIEEgbGlua2VkIGxpc3QgcnVucyB0aHJvdWdoIHRoZSBjZ19saXN0CisgICBmaWVsZCBvZiBlYWNoIHRhc2tfc3RydWN0IHVzaW5nIHRoZSBjc3Nfc2V0LCBhbmNob3JlZCBhdAorICAgY3NzX3NldC0+dGFza3MuCisKKyAtIEEgY2dyb3VwIGhpZXJhcmNoeSBmaWxlc3lzdGVtIGNhbiBiZSBtb3VudGVkICBmb3IgYnJvd3NpbmcgYW5kCisgICBtYW5pcHVsYXRpb24gZnJvbSB1c2VyIHNwYWNlLgorCisgLSBZb3UgY2FuIGxpc3QgYWxsIHRoZSB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byBhbnkgY2dyb3VwLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgY2dyb3VwcyByZXF1aXJlcyBhIGZldywgc2ltcGxlIGhvb2tzCitpbnRvIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIG5vbmUgaW4gcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aHM6CisKKyAtIGluIGluaXQvbWFpbi5jLCB0byBpbml0aWFsaXplIHRoZSByb290IGNncm91cHMgYW5kIGluaXRpYWwKKyAgIGNzc19zZXQgYXQgc3lzdGVtIGJvb3QuCisKKyAtIGluIGZvcmsgYW5kIGV4aXQsIHRvIGF0dGFjaCBhbmQgZGV0YWNoIGEgdGFzayBmcm9tIGl0cyBjc3Nfc2V0LgorCitJbiBhZGRpdGlvbiBhIG5ldyBmaWxlIHN5c3RlbSwgb2YgdHlwZSAiY2dyb3VwIiBtYXkgYmUgbW91bnRlZCwgdG8KK2VuYWJsZSBicm93c2luZyBhbmQgbW9kaWZ5aW5nIHRoZSBjZ3JvdXBzIHByZXNlbnRseSBrbm93biB0byB0aGUKK2tlcm5lbC4gIFdoZW4gbW91bnRpbmcgYSBjZ3JvdXAgaGllcmFyY2h5LCB5b3UgbWF5IHNwZWNpZnkgYQorY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc3Vic3lzdGVtcyB0byBtb3VudCBhcyB0aGUgZmlsZXN5c3RlbSBtb3VudAorb3B0aW9ucy4gIEJ5IGRlZmF1bHQsIG1vdW50aW5nIHRoZSBjZ3JvdXAgZmlsZXN5c3RlbSBhdHRlbXB0cyB0bworbW91bnQgYSBoaWVyYXJjaHkgY29udGFpbmluZyBhbGwgcmVnaXN0ZXJlZCBzdWJzeXN0ZW1zLgorCitJZiBhbiBhY3RpdmUgaGllcmFyY2h5IHdpdGggZXhhY3RseSB0aGUgc2FtZSBzZXQgb2Ygc3Vic3lzdGVtcyBhbHJlYWR5CitleGlzdHMsIGl0IHdpbGwgYmUgcmV1c2VkIGZvciB0aGUgbmV3IG1vdW50LiBJZiBubyBleGlzdGluZyBoaWVyYXJjaHkKK21hdGNoZXMsIGFuZCBhbnkgb2YgdGhlIHJlcXVlc3RlZCBzdWJzeXN0ZW1zIGFyZSBpbiB1c2UgaW4gYW4gZXhpc3RpbmcKK2hpZXJhcmNoeSwgdGhlIG1vdW50IHdpbGwgZmFpbCB3aXRoIC1FQlVTWS4gT3RoZXJ3aXNlLCBhIG5ldyBoaWVyYXJjaHkKK2lzIGFjdGl2YXRlZCwgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXF1ZXN0ZWQgc3Vic3lzdGVtcy4KKworSXQncyBub3QgY3VycmVudGx5IHBvc3NpYmxlIHRvIGJpbmQgYSBuZXcgc3Vic3lzdGVtIHRvIGFuIGFjdGl2ZQorY2dyb3VwIGhpZXJhcmNoeSwgb3IgdG8gdW5iaW5kIGEgc3Vic3lzdGVtIGZyb20gYW4gYWN0aXZlIGNncm91cAoraGllcmFyY2h5LiBUaGlzIG1heSBiZSBwb3NzaWJsZSBpbiBmdXR1cmUsIGJ1dCBpcyBmcmF1Z2h0IHdpdGggbmFzdHkKK2Vycm9yLXJlY292ZXJ5IGlzc3Vlcy4KKworV2hlbiBhIGNncm91cCBmaWxlc3lzdGVtIGlzIHVubW91bnRlZCwgaWYgdGhlcmUgYXJlIGFueQorY2hpbGQgY2dyb3VwcyBjcmVhdGVkIGJlbG93IHRoZSB0b3AtbGV2ZWwgY2dyb3VwLCB0aGF0IGhpZXJhcmNoeQord2lsbCByZW1haW4gYWN0aXZlIGV2ZW4gdGhvdWdoIHVubW91bnRlZDsgaWYgdGhlcmUgYXJlIG5vCitjaGlsZCBjZ3JvdXBzIHRoZW4gdGhlIGhpZXJhcmNoeSB3aWxsIGJlIGRlYWN0aXZhdGVkLgorCitObyBuZXcgc3lzdGVtIGNhbGxzIGFyZSBhZGRlZCBmb3IgY2dyb3VwcyAtIGFsbCBzdXBwb3J0IGZvcgorcXVlcnlpbmcgYW5kIG1vZGlmeWluZyBjZ3JvdXBzIGlzIHZpYSB0aGlzIGNncm91cCBmaWxlIHN5c3RlbS4KKworRWFjaCB0YXNrIHVuZGVyIC9wcm9jIGhhcyBhbiBhZGRlZCBmaWxlIG5hbWVkICdjZ3JvdXAnIGRpc3BsYXlpbmcsCitmb3IgZWFjaCBhY3RpdmUgaGllcmFyY2h5LCB0aGUgc3Vic3lzdGVtIG5hbWVzIGFuZCB0aGUgY2dyb3VwIG5hbWUKK2FzIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IG9mIHRoZSBjZ3JvdXAgZmlsZSBzeXN0ZW0uCisKK0VhY2ggY2dyb3VwIGlzIHJlcHJlc2VudGVkIGJ5IGEgZGlyZWN0b3J5IGluIHRoZSBjZ3JvdXAgZmlsZSBzeXN0ZW0KK2NvbnRhaW5pbmcgdGhlIGZvbGxvd2luZyBmaWxlcyBkZXNjcmliaW5nIHRoYXQgY2dyb3VwOgorCisgLSB0YXNrczogbGlzdCBvZiB0YXNrcyAoYnkgcGlkKSBhdHRhY2hlZCB0byB0aGF0IGNncm91cAorIC0gbm90aWZ5X29uX3JlbGVhc2UgZmxhZzogcnVuIC9zYmluL2Nncm91cF9yZWxlYXNlX2FnZW50IG9uIGV4aXQ/CisKK090aGVyIHN1YnN5c3RlbXMgc3VjaCBhcyBjcHVzZXRzIG1heSBhZGQgYWRkaXRpb25hbCBmaWxlcyBpbiBlYWNoCitjZ3JvdXAgZGlyCisKK05ldyBjZ3JvdXBzIGFyZSBjcmVhdGVkIHVzaW5nIHRoZSBta2RpciBzeXN0ZW0gY2FsbCBvciBzaGVsbAorY29tbWFuZC4gIFRoZSBwcm9wZXJ0aWVzIG9mIGEgY2dyb3VwLCBzdWNoIGFzIGl0cyBmbGFncywgYXJlCittb2RpZmllZCBieSB3cml0aW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBmaWxlIGluIHRoYXQgY2dyb3VwcworZGlyZWN0b3J5LCBhcyBsaXN0ZWQgYWJvdmUuCisKK1RoZSBuYW1lZCBoaWVyYXJjaGljYWwgc3RydWN0dXJlIG9mIG5lc3RlZCBjZ3JvdXBzIGFsbG93cyBwYXJ0aXRpb25pbmcKK2EgbGFyZ2Ugc3lzdGVtIGludG8gbmVzdGVkLCBkeW5hbWljYWxseSBjaGFuZ2VhYmxlLCAic29mdC1wYXJ0aXRpb25zIi4KKworVGhlIGF0dGFjaG1lbnQgb2YgZWFjaCB0YXNrLCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCBhdCBmb3JrIGJ5IGFueQorY2hpbGRyZW4gb2YgdGhhdCB0YXNrLCB0byBhIGNncm91cCBhbGxvd3Mgb3JnYW5pemluZyB0aGUgd29yayBsb2FkCitvbiBhIHN5c3RlbSBpbnRvIHJlbGF0ZWQgc2V0cyBvZiB0YXNrcy4gIEEgdGFzayBtYXkgYmUgcmUtYXR0YWNoZWQgdG8KK2FueSBvdGhlciBjZ3JvdXAsIGlmIGFsbG93ZWQgYnkgdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBuZWNlc3NhcnkKK2Nncm91cCBmaWxlIHN5c3RlbSBkaXJlY3Rvcmllcy4KKworV2hlbiBhIHRhc2sgaXMgbW92ZWQgZnJvbSBvbmUgY2dyb3VwIHRvIGFub3RoZXIsIGl0IGdldHMgYSBuZXcKK2Nzc19zZXQgcG9pbnRlciAtIGlmIHRoZXJlJ3MgYW4gYWxyZWFkeSBleGlzdGluZyBjc3Nfc2V0IHdpdGggdGhlCitkZXNpcmVkIGNvbGxlY3Rpb24gb2YgY2dyb3VwcyB0aGVuIHRoYXQgZ3JvdXAgaXMgcmV1c2VkLCBlbHNlIGEgbmV3Citjc3Nfc2V0IGlzIGFsbG9jYXRlZC4gTm90ZSB0aGF0IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHVzZXMgYQorbGluZWFyIHNlYXJjaCB0byBsb2NhdGUgYW4gYXBwcm9wcmlhdGUgZXhpc3RpbmcgY3NzX3NldCwgc28gaXNuJ3QKK3ZlcnkgZWZmaWNpZW50LiBBIGZ1dHVyZSB2ZXJzaW9uIHdpbGwgdXNlIGEgaGFzaCB0YWJsZSBmb3IgYmV0dGVyCitwZXJmb3JtYW5jZS4KKworVG8gYWxsb3cgYWNjZXNzIGZyb20gYSBjZ3JvdXAgdG8gdGhlIGNzc19zZXRzIChhbmQgaGVuY2UgdGFza3MpCit0aGF0IGNvbXByaXNlIGl0LCBhIHNldCBvZiBjZ19jZ3JvdXBfbGluayBvYmplY3RzIGZvcm0gYSBsYXR0aWNlOworZWFjaCBjZ19jZ3JvdXBfbGluayBpcyBsaW5rZWQgaW50byBhIGxpc3Qgb2YgY2dfY2dyb3VwX2xpbmtzIGZvcgorYSBzaW5nbGUgY2dyb3VwIG9uIGl0cyBjb250X2xpbmtfbGlzdCBmaWVsZCwgYW5kIGEgbGlzdCBvZgorY2dfY2dyb3VwX2xpbmtzIGZvciBhIHNpbmdsZSBjc3Nfc2V0IG9uIGl0cyBjZ19saW5rX2xpc3QuCisKK1RodXMgdGhlIHNldCBvZiB0YXNrcyBpbiBhIGNncm91cCBjYW4gYmUgbGlzdGVkIGJ5IGl0ZXJhdGluZyBvdmVyCitlYWNoIGNzc19zZXQgdGhhdCByZWZlcmVuY2VzIHRoZSBjZ3JvdXAsIGFuZCBzdWItaXRlcmF0aW5nIG92ZXIKK2VhY2ggY3NzX3NldCdzIHRhc2sgc2V0LgorCitUaGUgdXNlIG9mIGEgTGludXggdmlydHVhbCBmaWxlIHN5c3RlbSAodmZzKSB0byByZXByZXNlbnQgdGhlCitjZ3JvdXAgaGllcmFyY2h5IHByb3ZpZGVzIGZvciBhIGZhbWlsaWFyIHBlcm1pc3Npb24gYW5kIG5hbWUgc3BhY2UKK2ZvciBjZ3JvdXBzLCB3aXRoIGEgbWluaW11bSBvZiBhZGRpdGlvbmFsIGtlcm5lbCBjb2RlLgorCisxLjQgV2hhdCBkb2VzIG5vdGlmeV9vbl9yZWxlYXNlIGRvID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqKiogbm90aWZ5X29uX3JlbGVhc2UgaXMgZGlzYWJsZWQgaW4gdGhlIGN1cnJlbnQgcGF0Y2ggc2V0LiBJdCB3aWxsIGJlCisqKiogcmVhY3RpdmF0ZWQgaW4gYSBmdXR1cmUgcGF0Y2ggaW4gYSBsZXNzLWludHJ1c2l2ZSBtYW5uZXIKKworSWYgdGhlIG5vdGlmeV9vbl9yZWxlYXNlIGZsYWcgaXMgZW5hYmxlZCAoMSkgaW4gYSBjZ3JvdXAsIHRoZW4KK3doZW5ldmVyIHRoZSBsYXN0IHRhc2sgaW4gdGhlIGNncm91cCBsZWF2ZXMgKGV4aXRzIG9yIGF0dGFjaGVzIHRvCitzb21lIG90aGVyIGNncm91cCkgYW5kIHRoZSBsYXN0IGNoaWxkIGNncm91cCBvZiB0aGF0IGNncm91cAoraXMgcmVtb3ZlZCwgdGhlbiB0aGUga2VybmVsIHJ1bnMgdGhlIGNvbW1hbmQgc3BlY2lmaWVkIGJ5IHRoZSBjb250ZW50cworb2YgdGhlICJyZWxlYXNlX2FnZW50IiBmaWxlIGluIHRoYXQgaGllcmFyY2h5J3Mgcm9vdCBkaXJlY3RvcnksCitzdXBwbHlpbmcgdGhlIHBhdGhuYW1lIChyZWxhdGl2ZSB0byB0aGUgbW91bnQgcG9pbnQgb2YgdGhlIGNncm91cAorZmlsZSBzeXN0ZW0pIG9mIHRoZSBhYmFuZG9uZWQgY2dyb3VwLiAgVGhpcyBlbmFibGVzIGF1dG9tYXRpYworcmVtb3ZhbCBvZiBhYmFuZG9uZWQgY2dyb3Vwcy4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mCitub3RpZnlfb25fcmVsZWFzZSBpbiB0aGUgcm9vdCBjZ3JvdXAgYXQgc3lzdGVtIGJvb3QgaXMgZGlzYWJsZWQKKygwKS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIG90aGVyIGNncm91cHMgYXQgY3JlYXRpb24gaXMgdGhlIGN1cnJlbnQKK3ZhbHVlIG9mIHRoZWlyIHBhcmVudHMgbm90aWZ5X29uX3JlbGVhc2Ugc2V0dGluZy4gVGhlIGRlZmF1bHQgdmFsdWUgb2YKK2EgY2dyb3VwIGhpZXJhcmNoeSdzIHJlbGVhc2VfYWdlbnQgcGF0aCBpcyBlbXB0eS4KKworMS41IEhvdyBkbyBJIHVzZSBjZ3JvdXBzID8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHN0YXJ0IGEgbmV3IGpvYiB0aGF0IGlzIHRvIGJlIGNvbnRhaW5lZCB3aXRoaW4gYSBjZ3JvdXAsIHVzaW5nCit0aGUgImNwdXNldCIgY2dyb3VwIHN1YnN5c3RlbSwgdGhlIHN0ZXBzIGFyZSBzb21ldGhpbmcgbGlrZToKKworIDEpIG1rZGlyIC9kZXYvY2dyb3VwCisgMikgbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0IGNwdXNldCAvZGV2L2Nncm91cAorIDMpIENyZWF0ZSB0aGUgbmV3IGNncm91cCBieSBkb2luZyBta2RpcidzIGFuZCB3cml0ZSdzIChvciBlY2hvJ3MpIGluCisgICAgdGhlIC9kZXYvY2dyb3VwIHZpcnR1YWwgZmlsZSBzeXN0ZW0uCisgNCkgU3RhcnQgYSB0YXNrIHRoYXQgd2lsbCBiZSB0aGUgImZvdW5kaW5nIGZhdGhlciIgb2YgdGhlIG5ldyBqb2IuCisgNSkgQXR0YWNoIHRoYXQgdGFzayB0byB0aGUgbmV3IGNncm91cCBieSB3cml0aW5nIGl0cyBwaWQgdG8gdGhlCisgICAgL2Rldi9jZ3JvdXAgdGFza3MgZmlsZSBmb3IgdGhhdCBjZ3JvdXAuCisgNikgZm9yaywgZXhlYyBvciBjbG9uZSB0aGUgam9iIHRhc2tzIGZyb20gdGhpcyBmb3VuZGluZyBmYXRoZXIgdGFzay4KKworRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgY29tbWFuZHMgd2lsbCBzZXR1cCBhIGNncm91cAorbmFtZWQgIkNoYXJsaWUiLCBjb250YWluaW5nIGp1c3QgQ1BVcyAyIGFuZCAzLCBhbmQgTWVtb3J5IE5vZGUgMSwKK2FuZCB0aGVuIHN0YXJ0IGEgc3Vic2hlbGwgJ3NoJyBpbiB0aGF0IGNncm91cDoKKworICBtb3VudCAtdCBjZ3JvdXAgY3B1c2V0IC1vY3B1c2V0IC9kZXYvY2dyb3VwCisgIGNkIC9kZXYvY2dyb3VwCisgIG1rZGlyIENoYXJsaWUKKyAgY2QgQ2hhcmxpZQorICAvYmluL2VjaG8gMi0zID4gY3B1cworICAvYmluL2VjaG8gMSA+IG1lbXMKKyAgL2Jpbi9lY2hvICQkID4gdGFza3MKKyAgc2gKKyAgIyBUaGUgc3Vic2hlbGwgJ3NoJyBpcyBub3cgcnVubmluZyBpbiBjZ3JvdXAgQ2hhcmxpZQorICAjIFRoZSBuZXh0IGxpbmUgc2hvdWxkIGRpc3BsYXkgJy9DaGFybGllJworICBjYXQgL3Byb2Mvc2VsZi9jZ3JvdXAKKworMi4gVXNhZ2UgRXhhbXBsZXMgYW5kIFN5bnRheAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisyLjEgQmFzaWMgVXNhZ2UKKy0tLS0tLS0tLS0tLS0tLQorCitDcmVhdGluZywgbW9kaWZ5aW5nLCB1c2luZyB0aGUgY2dyb3VwcyBjYW4gYmUgZG9uZSB0aHJvdWdoIHRoZSBjZ3JvdXAKK3ZpcnR1YWwgZmlsZXN5c3RlbS4KKworVG8gbW91bnQgYSBjZ3JvdXAgaGllcmFyY2h5IHdpbGwgYWxsIGF2YWlsYWJsZSBzdWJzeXN0ZW1zLCB0eXBlOgorIyBtb3VudCAtdCBjZ3JvdXAgeHh4IC9kZXYvY2dyb3VwCisKK1RoZSAieHh4IiBpcyBub3QgaW50ZXJwcmV0ZWQgYnkgdGhlIGNncm91cCBjb2RlLCBidXQgd2lsbCBhcHBlYXIgaW4KKy9wcm9jL21vdW50cyBzbyBtYXkgYmUgYW55IHVzZWZ1bCBpZGVudGlmeWluZyBzdHJpbmcgdGhhdCB5b3UgbGlrZS4KKworVG8gbW91bnQgYSBjZ3JvdXAgaGllcmFyY2h5IHdpdGgganVzdCB0aGUgY3B1c2V0IGFuZCBudW10YXNrcworc3Vic3lzdGVtcywgdHlwZToKKyMgbW91bnQgLXQgY2dyb3VwIC1vIGNwdXNldCxudW10YXNrcyBoaWVyMSAvZGV2L2Nncm91cAorCitUbyBjaGFuZ2UgdGhlIHNldCBvZiBzdWJzeXN0ZW1zIGJvdW5kIHRvIGEgbW91bnRlZCBoaWVyYXJjaHksIGp1c3QKK3JlbW91bnQgd2l0aCBkaWZmZXJlbnQgb3B0aW9uczoKKworIyBtb3VudCAtbyByZW1vdW50LGNwdXNldCxucyAgL2Rldi9jZ3JvdXAKKworTm90ZSB0aGF0IGNoYW5naW5nIHRoZSBzZXQgb2Ygc3Vic3lzdGVtcyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQKK3doZW4gdGhlIGhpZXJhcmNoeSBjb25zaXN0cyBvZiBhIHNpbmdsZSAocm9vdCkgY2dyb3VwLiBTdXBwb3J0aW5nCit0aGUgYWJpbGl0eSB0byBhcmJpdHJhcmlseSBiaW5kL3VuYmluZCBzdWJzeXN0ZW1zIGZyb20gYW4gZXhpc3RpbmcKK2Nncm91cCBoaWVyYXJjaHkgaXMgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgaW4gdGhlIGZ1dHVyZS4KKworVGhlbiB1bmRlciAvZGV2L2Nncm91cCB5b3UgY2FuIGZpbmQgYSB0cmVlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlCit0cmVlIG9mIHRoZSBjZ3JvdXBzIGluIHRoZSBzeXN0ZW0uIEZvciBpbnN0YW5jZSwgL2Rldi9jZ3JvdXAKK2lzIHRoZSBjZ3JvdXAgdGhhdCBob2xkcyB0aGUgd2hvbGUgc3lzdGVtLgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgY2dyb3VwIHVuZGVyIC9kZXYvY2dyb3VwOgorIyBjZCAvZGV2L2Nncm91cAorIyBta2RpciBteV9jZ3JvdXAKKworTm93IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyB3aXRoIHRoaXMgY2dyb3VwLgorIyBjZCBteV9jZ3JvdXAKKworSW4gdGhpcyBkaXJlY3RvcnkgeW91IGNhbiBmaW5kIHNldmVyYWwgZmlsZXM6CisjIGxzCitub3RpZnlfb25fcmVsZWFzZSByZWxlYXNlX2FnZW50IHRhc2tzCisocGx1cyB3aGF0ZXZlciBmaWxlcyBhcmUgYWRkZWQgYnkgdGhlIGF0dGFjaGVkIHN1YnN5c3RlbXMpCisKK05vdyBhdHRhY2ggeW91ciBzaGVsbCB0byB0aGlzIGNncm91cDoKKyMgL2Jpbi9lY2hvICQkID4gdGFza3MKKworWW91IGNhbiBhbHNvIGNyZWF0ZSBjZ3JvdXBzIGluc2lkZSB5b3VyIGNncm91cCBieSB1c2luZyBta2RpciBpbiB0aGlzCitkaXJlY3RvcnkuCisjIG1rZGlyIG15X3N1Yl9jcworCitUbyByZW1vdmUgYSBjZ3JvdXAsIGp1c3QgdXNlIHJtZGlyOgorIyBybWRpciBteV9zdWJfY3MKKworVGhpcyB3aWxsIGZhaWwgaWYgdGhlIGNncm91cCBpcyBpbiB1c2UgKGhhcyBjZ3JvdXBzIGluc2lkZSwgb3IKK2hhcyBwcm9jZXNzZXMgYXR0YWNoZWQsIG9yIGlzIGhlbGQgYWxpdmUgYnkgb3RoZXIgc3Vic3lzdGVtLXNwZWNpZmljCityZWZlcmVuY2UpLgorCisyLjIgQXR0YWNoaW5nIHByb2Nlc3NlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAvYmluL2VjaG8gUElEID4gdGFza3MKKworTm90ZSB0aGF0IGl0IGlzIFBJRCwgbm90IFBJRHMuIFlvdSBjYW4gb25seSBhdHRhY2ggT05FIHRhc2sgYXQgYSB0aW1lLgorSWYgeW91IGhhdmUgc2V2ZXJhbCB0YXNrcyB0byBhdHRhY2gsIHlvdSBoYXZlIHRvIGRvIGl0IG9uZSBhZnRlciBhbm90aGVyOgorCisjIC9iaW4vZWNobyBQSUQxID4gdGFza3MKKyMgL2Jpbi9lY2hvIFBJRDIgPiB0YXNrcworCS4uLgorIyAvYmluL2VjaG8gUElEbiA+IHRhc2tzCisKKzMuIEtlcm5lbCBBUEkKKz09PT09PT09PT09PT0KKworMy4xIE92ZXJ2aWV3CistLS0tLS0tLS0tLS0KKworRWFjaCBrZXJuZWwgc3Vic3lzdGVtIHRoYXQgd2FudHMgdG8gaG9vayBpbnRvIHRoZSBnZW5lcmljIGNncm91cAorc3lzdGVtIG5lZWRzIHRvIGNyZWF0ZSBhIGNncm91cF9zdWJzeXMgb2JqZWN0LiBUaGlzIGNvbnRhaW5zCit2YXJpb3VzIG1ldGhvZHMsIHdoaWNoIGFyZSBjYWxsYmFja3MgZnJvbSB0aGUgY2dyb3VwIHN5c3RlbSwgYWxvbmcKK3dpdGggYSBzdWJzeXN0ZW0gaWQgd2hpY2ggd2lsbCBiZSBhc3NpZ25lZCBieSB0aGUgY2dyb3VwIHN5c3RlbS4KKworT3RoZXIgZmllbGRzIGluIHRoZSBjZ3JvdXBfc3Vic3lzIG9iamVjdCBpbmNsdWRlOgorCistIHN1YnN5c19pZDogYSB1bmlxdWUgYXJyYXkgaW5kZXggZm9yIHRoZSBzdWJzeXN0ZW0sIGluZGljYXRpbmcgd2hpY2gKKyAgZW50cnkgaW4gY2dyb3VwLT5zdWJzeXNbXSB0aGlzIHN1YnN5c3RlbSBzaG91bGQgYmUKKyAgbWFuYWdpbmcuIEluaXRpYWxpemVkIGJ5IGNncm91cF9yZWdpc3Rlcl9zdWJzeXMoKTsgcHJpb3IgdG8gdGhpcworICBpdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gLTEKKworLSBoaWVyYXJjaHk6IGFuIGluZGV4IGluZGljYXRpbmcgd2hpY2ggaGllcmFyY2h5LCBpZiBhbnksIHRoaXMKKyAgc3Vic3lzdGVtIGlzIGN1cnJlbnRseSBhdHRhY2hlZCB0by4gSWYgdGhpcyBpcyAtMSwgdGhlbiB0aGUKKyAgc3Vic3lzdGVtIGlzIG5vdCBhdHRhY2hlZCB0byBhbnkgaGllcmFyY2h5LCBhbmQgYWxsIHRhc2tzIHNob3VsZCBiZQorICBjb25zaWRlcmVkIHRvIGJlIG1lbWJlcnMgb2YgdGhlIHN1YnN5c3RlbSdzIHRvcF9jZ3JvdXAuIEl0IHNob3VsZAorICBiZSBpbml0aWFsaXplZCB0byAtMS4KKworLSBuYW1lOiBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gYSB1bmlxdWUgc3Vic3lzdGVtIG5hbWUgcHJpb3IgdG8KKyAgY2FsbGluZyBjZ3JvdXBfcmVnaXN0ZXJfc3Vic3lzdGVtLiBTaG91bGQgYmUgbm8gbG9uZ2VyIHRoYW4KKyAgTUFYX0NHUk9VUF9UWVBFX05BTUVMRU4KKworRWFjaCBjZ3JvdXAgb2JqZWN0IGNyZWF0ZWQgYnkgdGhlIHN5c3RlbSBoYXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMsCitpbmRleGVkIGJ5IHN1YnN5c3RlbSBpZDsgdGhpcyBwb2ludGVyIGlzIGVudGlyZWx5IG1hbmFnZWQgYnkgdGhlCitzdWJzeXN0ZW07IHRoZSBnZW5lcmljIGNncm91cCBjb2RlIHdpbGwgbmV2ZXIgdG91Y2ggdGhpcyBwb2ludGVyLgorCiszLjIgU3luY2hyb25pemF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIGlzIGEgZ2xvYmFsIG11dGV4LCBjZ3JvdXBfbXV0ZXgsIHVzZWQgYnkgdGhlIGNncm91cAorc3lzdGVtLiBUaGlzIHNob3VsZCBiZSB0YWtlbiBieSBhbnl0aGluZyB0aGF0IHdhbnRzIHRvIG1vZGlmeSBhCitjZ3JvdXAuIEl0IG1heSBhbHNvIGJlIHRha2VuIHRvIHByZXZlbnQgY2dyb3VwcyBmcm9tIGJlaW5nCittb2RpZmllZCwgYnV0IG1vcmUgc3BlY2lmaWMgbG9ja3MgbWF5IGJlIG1vcmUgYXBwcm9wcmlhdGUgaW4gdGhhdAorc2l0dWF0aW9uLgorCitTZWUga2VybmVsL2Nncm91cC5jIGZvciBtb3JlIGRldGFpbHMuCisKK1N1YnN5c3RlbXMgY2FuIHRha2UvcmVsZWFzZSB0aGUgY2dyb3VwX211dGV4IHZpYSB0aGUgZnVuY3Rpb25zCitjZ3JvdXBfbG9jaygpL2Nncm91cF91bmxvY2soKSwgYW5kIGNhbgordGFrZS9yZWxlYXNlIHRoZSBjYWxsYmFja19tdXRleCB2aWEgdGhlIGZ1bmN0aW9ucworY2dyb3VwX2xvY2soKS9jZ3JvdXBfdW5sb2NrKCkuCisKK0FjY2Vzc2luZyBhIHRhc2sncyBjZ3JvdXAgcG9pbnRlciBtYXkgYmUgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHdheXM6CistIHdoaWxlIGhvbGRpbmcgY2dyb3VwX211dGV4CistIHdoaWxlIGhvbGRpbmcgdGhlIHRhc2sncyBhbGxvY19sb2NrICh2aWEgdGFza19sb2NrKCkpCistIGluc2lkZSBhbiByY3VfcmVhZF9sb2NrKCkgc2VjdGlvbiB2aWEgcmN1X2RlcmVmZXJlbmNlKCkKKworMy4zIFN1YnN5c3RlbSBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0VhY2ggc3Vic3lzdGVtIHNob3VsZDoKKworLSBhZGQgYW4gZW50cnkgaW4gbGludXgvY2dyb3VwX3N1YnN5cy5oCistIGRlZmluZSBhIGNncm91cF9zdWJzeXMgb2JqZWN0IGNhbGxlZCA8bmFtZT5fc3Vic3lzCisKK0VhY2ggc3Vic3lzdGVtIG1heSBleHBvcnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLiBUaGUgb25seSBtYW5kYXRvcnkKK21ldGhvZHMgYXJlIGNyZWF0ZS9kZXN0cm95LiBBbnkgb3RoZXJzIHRoYXQgYXJlIG51bGwgYXJlIHByZXN1bWVkIHRvCitiZSBzdWNjZXNzZnVsIG5vLW9wcy4KKworc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNyZWF0ZShzdHJ1Y3QgY2dyb3VwICpjb250KQorTEw9Y2dyb3VwX211dGV4CisKK0NhbGxlZCB0byBjcmVhdGUgYSBzdWJzeXN0ZW0gc3RhdGUgb2JqZWN0IGZvciBhIGNncm91cC4gVGhlCitzdWJzeXN0ZW0gc2hvdWxkIGFsbG9jYXRlIGl0cyBzdWJzeXN0ZW0gc3RhdGUgb2JqZWN0IGZvciB0aGUgcGFzc2VkCitjZ3JvdXAsIHJldHVybmluZyBhIHBvaW50ZXIgdG8gdGhlIG5ldyBvYmplY3Qgb24gc3VjY2VzcyBvciBhCituZWdhdGl2ZSBlcnJvciBjb2RlLiBPbiBzdWNjZXNzLCB0aGUgc3Vic3lzdGVtIHBvaW50ZXIgc2hvdWxkIHBvaW50IHRvCithIHN0cnVjdHVyZSBvZiB0eXBlIGNncm91cF9zdWJzeXNfc3RhdGUgKHR5cGljYWxseSBlbWJlZGRlZCBpbiBhCitsYXJnZXIgc3Vic3lzdGVtLXNwZWNpZmljIG9iamVjdCksIHdoaWNoIHdpbGwgYmUgaW5pdGlhbGl6ZWQgYnkgdGhlCitjZ3JvdXAgc3lzdGVtLiBOb3RlIHRoYXQgdGhpcyB3aWxsIGJlIGNhbGxlZCBhdCBpbml0aWFsaXphdGlvbiB0bworY3JlYXRlIHRoZSByb290IHN1YnN5c3RlbSBzdGF0ZSBmb3IgdGhpcyBzdWJzeXN0ZW07IHRoaXMgY2FzZSBjYW4gYmUKK2lkZW50aWZpZWQgYnkgdGhlIHBhc3NlZCBjZ3JvdXAgb2JqZWN0IGhhdmluZyBhIE5VTEwgcGFyZW50IChzaW5jZQoraXQncyB0aGUgcm9vdCBvZiB0aGUgaGllcmFyY2h5KSBhbmQgbWF5IGJlIGFuIGFwcHJvcHJpYXRlIHBsYWNlIGZvcgoraW5pdGlhbGl6YXRpb24gY29kZS4KKwordm9pZCBkZXN0cm95KHN0cnVjdCBjZ3JvdXAgKmNvbnQpCitMTD1jZ3JvdXBfbXV0ZXgKKworVGhlIGNncm91cCBzeXN0ZW0gaXMgYWJvdXQgdG8gZGVzdHJveSB0aGUgcGFzc2VkIGNncm91cDsgdGhlCitzdWJzeXN0ZW0gc2hvdWxkIGRvIGFueSBuZWNlc3NhcnkgY2xlYW51cAorCitpbnQgY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQsCisJICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK0xMPWNncm91cF9tdXRleAorCitDYWxsZWQgcHJpb3IgdG8gbW92aW5nIGEgdGFzayBpbnRvIGEgY2dyb3VwOyBpZiB0aGUgc3Vic3lzdGVtCityZXR1cm5zIGFuIGVycm9yLCB0aGlzIHdpbGwgYWJvcnQgdGhlIGF0dGFjaCBvcGVyYXRpb24uICBJZiBhIE5VTEwKK3Rhc2sgaXMgcGFzc2VkLCB0aGVuIGEgc3VjY2Vzc2Z1bCByZXN1bHQgaW5kaWNhdGVzIHRoYXQgKmFueSoKK3Vuc3BlY2lmaWVkIHRhc2sgY2FuIGJlIG1vdmVkIGludG8gdGhlIGNncm91cC4gTm90ZSB0aGF0IHRoaXMgaXNuJ3QKK2NhbGxlZCBvbiBhIGZvcmsuIElmIHRoaXMgbWV0aG9kIHJldHVybnMgMCAoc3VjY2VzcykgdGhlbiB0aGlzIHNob3VsZAorcmVtYWluIHZhbGlkIHdoaWxlIHRoZSBjYWxsZXIgaG9sZHMgY2dyb3VwX211dGV4LgorCit2b2lkIGF0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQsCisJICAgIHN0cnVjdCBjZ3JvdXAgKm9sZF9jb250LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitMTD1jZ3JvdXBfbXV0ZXgKKworCitDYWxsZWQgYWZ0ZXIgdGhlIHRhc2sgaGFzIGJlZW4gYXR0YWNoZWQgdG8gdGhlIGNncm91cCwgdG8gYWxsb3cgYW55Citwb3N0LWF0dGFjaG1lbnQgYWN0aXZpdHkgdGhhdCByZXF1aXJlcyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgYmxvY2tpbmcuCisKK3ZvaWQgZm9yayhzdHJ1Y3QgY2dyb3VwX3N1YnN5ICpzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQorTEw9Y2FsbGJhY2tfbXV0ZXgsIG1heWJlIHJlYWRfbG9jayh0YXNrbGlzdF9sb2NrKQorCitDYWxsZWQgd2hlbiBhIHRhc2sgaXMgZm9ya2VkIGludG8gYSBjZ3JvdXAuIEFsc28gY2FsbGVkIGR1cmluZworcmVnaXN0cmF0aW9uIGZvciBhbGwgZXhpc3RpbmcgdGFza3MuCisKK3ZvaWQgZXhpdChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK0xMPWNhbGxiYWNrX211dGV4CisKK0NhbGxlZCBkdXJpbmcgdGFzayBleGl0CisKK2ludCBwb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCitMTD1ub25lCisKK0NhbGxlZCBhZnRlciBjcmVhdGlvbiBvZiBhIGNncm91cCB0byBhbGxvdyBhIHN1YnN5c3RlbSB0byBwb3B1bGF0ZQordGhlIGNncm91cCBkaXJlY3Rvcnkgd2l0aCBmaWxlIGVudHJpZXMuICBUaGUgc3Vic3lzdGVtIHNob3VsZCBtYWtlCitjYWxscyB0byBjZ3JvdXBfYWRkX2ZpbGUoKSB3aXRoIG9iamVjdHMgb2YgdHlwZSBjZnR5cGUgKHNlZQoraW5jbHVkZS9saW51eC9jZ3JvdXAuaCBmb3IgZGV0YWlscykuICBOb3RlIHRoYXQgYWx0aG91Z2ggdGhpcworbWV0aG9kIGNhbiByZXR1cm4gYW4gZXJyb3IgY29kZSwgdGhlIGVycm9yIGNvZGUgaXMgY3VycmVudGx5IG5vdAorYWx3YXlzIGhhbmRsZWQgd2VsbC4KKwordm9pZCBwb3N0X2Nsb25lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCkKKworQ2FsbGVkIGF0IHRoZSBlbmQgb2YgY2dyb3VwX2Nsb25lKCkgdG8gZG8gYW55IHBhcmFtYXRlcgoraW5pdGlhbGl6YXRpb24gd2hpY2ggbWlnaHQgYmUgcmVxdWlyZWQgYmVmb3JlIGEgdGFzayBjb3VsZCBhdHRhY2guICBGb3IKK2V4YW1wbGUgaW4gY3B1c2V0cywgbm8gdGFzayBtYXkgYXR0YWNoIGJlZm9yZSAnY3B1cycgYW5kICdtZW1zJyBhcmUgc2V0Cit1cC4KKwordm9pZCBiaW5kKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqcm9vdCkKK0xMPWNhbGxiYWNrX211dGV4CisKK0NhbGxlZCB3aGVuIGEgY2dyb3VwIHN1YnN5c3RlbSBpcyByZWJvdW5kIHRvIGEgZGlmZmVyZW50IGhpZXJhcmNoeQorYW5kIHJvb3QgY2dyb3VwLiBDdXJyZW50bHkgdGhpcyB3aWxsIG9ubHkgaW52b2x2ZSBtb3ZlbWVudCBiZXR3ZWVuCit0aGUgZGVmYXVsdCBoaWVyYXJjaHkgKHdoaWNoIG5ldmVyIGhhcyBzdWItY2dyb3VwcykgYW5kIGEgaGllcmFyY2h5Cit0aGF0IGlzIGJlaW5nIGNyZWF0ZWQvZGVzdHJveWVkIChhbmQgaGVuY2UgaGFzIG5vIHN1Yi1jZ3JvdXBzKS4KKworNC4gUXVlc3Rpb25zCis9PT09PT09PT09PT0KKworUTogd2hhdCdzIHVwIHdpdGggdGhpcyAnL2Jpbi9lY2hvJyA/CitBOiBiYXNoJ3MgYnVpbHRpbiAnZWNobycgY29tbWFuZCBkb2VzIG5vdCBjaGVjayBjYWxscyB0byB3cml0ZSgpIGFnYWluc3QKKyAgIGVycm9ycy4gSWYgeW91IHVzZSBpdCBpbiB0aGUgY2dyb3VwIGZpbGUgc3lzdGVtLCB5b3Ugd29uJ3QgYmUKKyAgIGFibGUgdG8gdGVsbCB3aGV0aGVyIGEgY29tbWFuZCBzdWNjZWVkZWQgb3IgZmFpbGVkLgorCitROiBXaGVuIEkgYXR0YWNoIHByb2Nlc3Nlcywgb25seSB0aGUgZmlyc3Qgb2YgdGhlIGxpbmUgZ2V0cyByZWFsbHkgYXR0YWNoZWQgIQorQTogV2UgY2FuIG9ubHkgcmV0dXJuIG9uZSBlcnJvciBjb2RlIHBlciBjYWxsIHRvIHdyaXRlKCkuIFNvIHlvdSBzaG91bGQgYWxzbworICAgcHV0IG9ubHkgT05FIHBpZC4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dAppbmRleCBiNmQyNGMyLi5hNzQxZjY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dApAQCAtMjIwLDcgKzIyMCw5IEBACiAgIENQVV9ET1dOX1BSRVBBUkUgb3IgQ1BVX0RPV05fUFJFUEFSRV9GUk9aRU4sIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB0aGUKICAgQ1BVIGlzIGJlaW5nIG9mZmxpbmVkIHdoaWxlIHRhc2tzIGFyZSBmcm96ZW4gZHVlIHRvIGEgc3VzcGVuZCBvcGVyYXRpb24gaW4KICAgcHJvZ3Jlc3MKLS0gQWxsIHByb2Nlc3MgaXMgbWlncmF0ZWQgYXdheSBmcm9tIHRoaXMgb3V0Z29pbmcgQ1BVIHRvIGEgbmV3IENQVQorLSBBbGwgcHJvY2Vzc2VzIGFyZSBtaWdyYXRlZCBhd2F5IGZyb20gdGhpcyBvdXRnb2luZyBDUFUgdG8gbmV3IENQVXMuCisgIFRoZSBuZXcgQ1BVIGlzIGNob3NlbiBmcm9tIGVhY2ggcHJvY2VzcycgY3VycmVudCBjcHVzZXQsIHdoaWNoIG1heSBiZQorICBhIHN1YnNldCBvZiBhbGwgb25saW5lIENQVXMuCiAtIEFsbCBpbnRlcnJ1cHRzIHRhcmdldGVkIHRvIHRoaXMgQ1BVIGlzIG1pZ3JhdGVkIHRvIGEgbmV3IENQVQogLSB0aW1lcnMvYm90dG9tIGhhbGYvdGFzayBsZXRzIGFyZSBhbHNvIG1pZ3JhdGVkIHRvIGEgbmV3IENQVQogLSBPbmNlIGFsbCBzZXJ2aWNlcyBhcmUgbWlncmF0ZWQsIGtlcm5lbCBjYWxscyBhbiBhcmNoIHNwZWNpZmljIHJvdXRpbmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CmluZGV4IGVjOWRlNjkuLjE0MWJlZjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dApAQCAtNyw2ICs3LDcgQEAKIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4KIE1vZGlmaWVkIGJ5IFBhdWwgSmFja3NvbiA8cGpAc2dpLmNvbT4KIE1vZGlmaWVkIGJ5IENocmlzdG9waCBMYW1ldGVyIDxjbGFtZXRlckBzZ2kuY29tPgorTW9kaWZpZWQgYnkgUGF1bCBNZW5hZ2UgPG1lbmFnZUBnb29nbGUuY29tPgogCiBDT05URU5UUzoKID09PT09PT09PQpAQCAtMTYsOSArMTcsOSBAQAogICAxLjIgV2h5IGFyZSBjcHVzZXRzIG5lZWRlZCA/CiAgIDEuMyBIb3cgYXJlIGNwdXNldHMgaW1wbGVtZW50ZWQgPwogICAxLjQgV2hhdCBhcmUgZXhjbHVzaXZlIGNwdXNldHMgPwotICAxLjUgV2hhdCBkb2VzIG5vdGlmeV9vbl9yZWxlYXNlIGRvID8KLSAgMS42IFdoYXQgaXMgbWVtb3J5X3ByZXNzdXJlID8KLSAgMS43IFdoYXQgaXMgbWVtb3J5IHNwcmVhZCA/CisgIDEuNSBXaGF0IGlzIG1lbW9yeV9wcmVzc3VyZSA/CisgIDEuNiBXaGF0IGlzIG1lbW9yeSBzcHJlYWQgPworICAxLjcgV2hhdCBpcyBzY2hlZF9sb2FkX2JhbGFuY2UgPwogICAxLjggSG93IGRvIEkgdXNlIGNwdXNldHMgPwogMi4gVXNhZ2UgRXhhbXBsZXMgYW5kIFN5bnRheAogICAyLjEgQmFzaWMgVXNhZ2UKQEAgLTQ0LDE4ICs0NSwxOSBAQAogaG9va3MsIGJleW9uZCB3aGF0IGlzIGFscmVhZHkgcHJlc2VudCwgcmVxdWlyZWQgdG8gbWFuYWdlIGR5bmFtaWMKIGpvYiBwbGFjZW1lbnQgb24gbGFyZ2Ugc3lzdGVtcy4KIAotRWFjaCB0YXNrIGhhcyBhIHBvaW50ZXIgdG8gYSBjcHVzZXQuICBNdWx0aXBsZSB0YXNrcyBtYXkgcmVmZXJlbmNlCi10aGUgc2FtZSBjcHVzZXQuICBSZXF1ZXN0cyBieSBhIHRhc2ssIHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgyKQotc3lzdGVtIGNhbGwgdG8gaW5jbHVkZSBDUFVzIGluIGl0cyBDUFUgYWZmaW5pdHkgbWFzaywgYW5kIHVzaW5nIHRoZQotbWJpbmQoMikgYW5kIHNldF9tZW1wb2xpY3koMikgc3lzdGVtIGNhbGxzIHRvIGluY2x1ZGUgTWVtb3J5IE5vZGVzCi1pbiBpdHMgbWVtb3J5IHBvbGljeSwgYXJlIGJvdGggZmlsdGVyZWQgdGhyb3VnaCB0aGF0IHRhc2tzIGNwdXNldCwKLWZpbHRlcmluZyBvdXQgYW55IENQVXMgb3IgTWVtb3J5IE5vZGVzIG5vdCBpbiB0aGF0IGNwdXNldC4gIFRoZQotc2NoZWR1bGVyIHdpbGwgbm90IHNjaGVkdWxlIGEgdGFzayBvbiBhIENQVSB0aGF0IGlzIG5vdCBhbGxvd2VkIGluCi1pdHMgY3B1c19hbGxvd2VkIHZlY3RvciwgYW5kIHRoZSBrZXJuZWwgcGFnZSBhbGxvY2F0b3Igd2lsbCBub3QKLWFsbG9jYXRlIGEgcGFnZSBvbiBhIG5vZGUgdGhhdCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgcmVxdWVzdGluZyB0YXNrcwotbWVtc19hbGxvd2VkIHZlY3Rvci4KK0NwdXNldHMgdXNlIHRoZSBnZW5lcmljIGNncm91cCBzdWJzeXN0ZW0gZGVzY3JpYmVkIGluCitEb2N1bWVudGF0aW9uL2Nncm91cC50eHQuCiAKLVVzZXIgbGV2ZWwgY29kZSBtYXkgY3JlYXRlIGFuZCBkZXN0cm95IGNwdXNldHMgYnkgbmFtZSBpbiB0aGUgY3B1c2V0CitSZXF1ZXN0cyBieSBhIHRhc2ssIHVzaW5nIHRoZSBzY2hlZF9zZXRhZmZpbml0eSgyKSBzeXN0ZW0gY2FsbCB0bworaW5jbHVkZSBDUFVzIGluIGl0cyBDUFUgYWZmaW5pdHkgbWFzaywgYW5kIHVzaW5nIHRoZSBtYmluZCgyKSBhbmQKK3NldF9tZW1wb2xpY3koMikgc3lzdGVtIGNhbGxzIHRvIGluY2x1ZGUgTWVtb3J5IE5vZGVzIGluIGl0cyBtZW1vcnkKK3BvbGljeSwgYXJlIGJvdGggZmlsdGVyZWQgdGhyb3VnaCB0aGF0IHRhc2tzIGNwdXNldCwgZmlsdGVyaW5nIG91dCBhbnkKK0NQVXMgb3IgTWVtb3J5IE5vZGVzIG5vdCBpbiB0aGF0IGNwdXNldC4gIFRoZSBzY2hlZHVsZXIgd2lsbCBub3QKK3NjaGVkdWxlIGEgdGFzayBvbiBhIENQVSB0aGF0IGlzIG5vdCBhbGxvd2VkIGluIGl0cyBjcHVzX2FsbG93ZWQKK3ZlY3RvciwgYW5kIHRoZSBrZXJuZWwgcGFnZSBhbGxvY2F0b3Igd2lsbCBub3QgYWxsb2NhdGUgYSBwYWdlIG9uIGEKK25vZGUgdGhhdCBpcyBub3QgYWxsb3dlZCBpbiB0aGUgcmVxdWVzdGluZyB0YXNrcyBtZW1zX2FsbG93ZWQgdmVjdG9yLgorCitVc2VyIGxldmVsIGNvZGUgbWF5IGNyZWF0ZSBhbmQgZGVzdHJveSBjcHVzZXRzIGJ5IG5hbWUgaW4gdGhlIGNncm91cAogdmlydHVhbCBmaWxlIHN5c3RlbSwgbWFuYWdlIHRoZSBhdHRyaWJ1dGVzIGFuZCBwZXJtaXNzaW9ucyBvZiB0aGVzZQogY3B1c2V0cyBhbmQgd2hpY2ggQ1BVcyBhbmQgTWVtb3J5IE5vZGVzIGFyZSBhc3NpZ25lZCB0byBlYWNoIGNwdXNldCwKIHNwZWNpZnkgYW5kIHF1ZXJ5IHRvIHdoaWNoIGNwdXNldCBhIHRhc2sgaXMgYXNzaWduZWQsIGFuZCBsaXN0IHRoZQpAQCAtMTE1LDcgKzExNyw3IEBACiAgLSBDcHVzZXRzIGFyZSBzZXRzIG9mIGFsbG93ZWQgQ1BVcyBhbmQgTWVtb3J5IE5vZGVzLCBrbm93biB0byB0aGUKICAgIGtlcm5lbC4KICAtIEVhY2ggdGFzayBpbiB0aGUgc3lzdGVtIGlzIGF0dGFjaGVkIHRvIGEgY3B1c2V0LCB2aWEgYSBwb2ludGVyCi0gICBpbiB0aGUgdGFzayBzdHJ1Y3R1cmUgdG8gYSByZWZlcmVuY2UgY291bnRlZCBjcHVzZXQgc3RydWN0dXJlLgorICAgaW4gdGhlIHRhc2sgc3RydWN0dXJlIHRvIGEgcmVmZXJlbmNlIGNvdW50ZWQgY2dyb3VwIHN0cnVjdHVyZS4KICAtIENhbGxzIHRvIHNjaGVkX3NldGFmZmluaXR5IGFyZSBmaWx0ZXJlZCB0byBqdXN0IHRob3NlIENQVXMKICAgIGFsbG93ZWQgaW4gdGhhdCB0YXNrcyBjcHVzZXQuCiAgLSBDYWxscyB0byBtYmluZCBhbmQgc2V0X21lbXBvbGljeSBhcmUgZmlsdGVyZWQgdG8ganVzdApAQCAtMTQ1LDE1ICsxNDcsMTAgQEAKICAtIGluIHBhZ2VfYWxsb2MuYywgdG8gcmVzdHJpY3QgbWVtb3J5IHRvIGFsbG93ZWQgbm9kZXMuCiAgLSBpbiB2bXNjYW4uYywgdG8gcmVzdHJpY3QgcGFnZSByZWNvdmVyeSB0byB0aGUgY3VycmVudCBjcHVzZXQuCiAKLUluIGFkZGl0aW9uIGEgbmV3IGZpbGUgc3lzdGVtLCBvZiB0eXBlICJjcHVzZXQiIG1heSBiZSBtb3VudGVkLAotdHlwaWNhbGx5IGF0IC9kZXYvY3B1c2V0LCB0byBlbmFibGUgYnJvd3NpbmcgYW5kIG1vZGlmeWluZyB0aGUgY3B1c2V0cwotcHJlc2VudGx5IGtub3duIHRvIHRoZSBrZXJuZWwuICBObyBuZXcgc3lzdGVtIGNhbGxzIGFyZSBhZGRlZCBmb3IKLWNwdXNldHMgLSBhbGwgc3VwcG9ydCBmb3IgcXVlcnlpbmcgYW5kIG1vZGlmeWluZyBjcHVzZXRzIGlzIHZpYQotdGhpcyBjcHVzZXQgZmlsZSBzeXN0ZW0uCi0KLUVhY2ggdGFzayB1bmRlciAvcHJvYyBoYXMgYW4gYWRkZWQgZmlsZSBuYW1lZCAnY3B1c2V0JywgZGlzcGxheWluZwotdGhlIGNwdXNldCBuYW1lLCBhcyB0aGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiB0aGUgY3B1c2V0IGZpbGUKLXN5c3RlbS4KK1lvdSBzaG91bGQgbW91bnQgdGhlICJjZ3JvdXAiIGZpbGVzeXN0ZW0gdHlwZSBpbiBvcmRlciB0byBlbmFibGUKK2Jyb3dzaW5nIGFuZCBtb2RpZnlpbmcgdGhlIGNwdXNldHMgcHJlc2VudGx5IGtub3duIHRvIHRoZSBrZXJuZWwuICBObworbmV3IHN5c3RlbSBjYWxscyBhcmUgYWRkZWQgZm9yIGNwdXNldHMgLSBhbGwgc3VwcG9ydCBmb3IgcXVlcnlpbmcgYW5kCittb2RpZnlpbmcgY3B1c2V0cyBpcyB2aWEgdGhpcyBjcHVzZXQgZmlsZSBzeXN0ZW0uCiAKIFRoZSAvcHJvYy88cGlkPi9zdGF0dXMgZmlsZSBmb3IgZWFjaCB0YXNrIGhhcyB0d28gYWRkZWQgbGluZXMsCiBkaXNwbGF5aW5nIHRoZSB0YXNrcyBjcHVzX2FsbG93ZWQgKG9uIHdoaWNoIENQVXMgaXQgbWF5IGJlIHNjaGVkdWxlZCkKQEAgLTE2MywxNiArMTYwLDE1IEBACiAgIENwdXNfYWxsb3dlZDogICBmZmZmZmZmZixmZmZmZmZmZixmZmZmZmZmZixmZmZmZmZmZgogICBNZW1zX2FsbG93ZWQ6ICAgZmZmZmZmZmYsZmZmZmZmZmYKIAotRWFjaCBjcHVzZXQgaXMgcmVwcmVzZW50ZWQgYnkgYSBkaXJlY3RvcnkgaW4gdGhlIGNwdXNldCBmaWxlIHN5c3RlbQotY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjcHVzZXQ6CitFYWNoIGNwdXNldCBpcyByZXByZXNlbnRlZCBieSBhIGRpcmVjdG9yeSBpbiB0aGUgY2dyb3VwIGZpbGUgc3lzdGVtCitjb250YWluaW5nIChvbiB0b3Agb2YgdGhlIHN0YW5kYXJkIGNncm91cCBmaWxlcykgdGhlIGZvbGxvd2luZworZmlsZXMgZGVzY3JpYmluZyB0aGF0IGNwdXNldDoKIAogIC0gY3B1czogbGlzdCBvZiBDUFVzIGluIHRoYXQgY3B1c2V0CiAgLSBtZW1zOiBsaXN0IG9mIE1lbW9yeSBOb2RlcyBpbiB0aGF0IGNwdXNldAogIC0gbWVtb3J5X21pZ3JhdGUgZmxhZzogaWYgc2V0LCBtb3ZlIHBhZ2VzIHRvIGNwdXNldHMgbm9kZXMKICAtIGNwdV9leGNsdXNpdmUgZmxhZzogaXMgY3B1IHBsYWNlbWVudCBleGNsdXNpdmU/CiAgLSBtZW1fZXhjbHVzaXZlIGZsYWc6IGlzIG1lbW9yeSBwbGFjZW1lbnQgZXhjbHVzaXZlPwotIC0gdGFza3M6IGxpc3Qgb2YgdGFza3MgKGJ5IHBpZCkgYXR0YWNoZWQgdG8gdGhhdCBjcHVzZXQKLSAtIG5vdGlmeV9vbl9yZWxlYXNlIGZsYWc6IHJ1biAvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCBvbiBleGl0PwogIC0gbWVtb3J5X3ByZXNzdXJlOiBtZWFzdXJlIG9mIGhvdyBtdWNoIHBhZ2luZyBwcmVzc3VyZSBpbiBjcHVzZXQKIAogSW4gYWRkaXRpb24sIHRoZSByb290IGNwdXNldCBvbmx5IGhhcyB0aGUgZm9sbG93aW5nIGZpbGU6CkBAIC0yMzcsMjEgKzIzMyw3IEBACiBvdXRzaWRlIGV2ZW4gYSBtZW1fZXhjbHVzaXZlIGNwdXNldC4KIAogCi0xLjUgV2hhdCBkb2VzIG5vdGlmeV9vbl9yZWxlYXNlIGRvID8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB0aGUgbm90aWZ5X29uX3JlbGVhc2UgZmxhZyBpcyBlbmFibGVkICgxKSBpbiBhIGNwdXNldCwgdGhlbiB3aGVuZXZlcgotdGhlIGxhc3QgdGFzayBpbiB0aGUgY3B1c2V0IGxlYXZlcyAoZXhpdHMgb3IgYXR0YWNoZXMgdG8gc29tZSBvdGhlcgotY3B1c2V0KSBhbmQgdGhlIGxhc3QgY2hpbGQgY3B1c2V0IG9mIHRoYXQgY3B1c2V0IGlzIHJlbW92ZWQsIHRoZW4KLXRoZSBrZXJuZWwgcnVucyB0aGUgY29tbWFuZCAvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCwgc3VwcGx5aW5nIHRoZQotcGF0aG5hbWUgKHJlbGF0aXZlIHRvIHRoZSBtb3VudCBwb2ludCBvZiB0aGUgY3B1c2V0IGZpbGUgc3lzdGVtKSBvZiB0aGUKLWFiYW5kb25lZCBjcHVzZXQuICBUaGlzIGVuYWJsZXMgYXV0b21hdGljIHJlbW92YWwgb2YgYWJhbmRvbmVkIGNwdXNldHMuCi1UaGUgZGVmYXVsdCB2YWx1ZSBvZiBub3RpZnlfb25fcmVsZWFzZSBpbiB0aGUgcm9vdCBjcHVzZXQgYXQgc3lzdGVtCi1ib290IGlzIGRpc2FibGVkICgwKS4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIG90aGVyIGNwdXNldHMgYXQgY3JlYXRpb24KLWlzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZWlyIHBhcmVudHMgbm90aWZ5X29uX3JlbGVhc2Ugc2V0dGluZy4KLQotCi0xLjYgV2hhdCBpcyBtZW1vcnlfcHJlc3N1cmUgPworMS41IFdoYXQgaXMgbWVtb3J5X3ByZXNzdXJlID8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUaGUgbWVtb3J5X3ByZXNzdXJlIG9mIGEgY3B1c2V0IHByb3ZpZGVzIGEgc2ltcGxlIHBlci1jcHVzZXQgbWV0cmljCiBvZiB0aGUgcmF0ZSB0aGF0IHRoZSB0YXNrcyBpbiBhIGNwdXNldCBhcmUgYXR0ZW1wdGluZyB0byBmcmVlIHVwIGluCkBAIC0zMDgsNyArMjkwLDcgQEAKIHRpbWVzIDEwMDAuCiAKIAotMS43IFdoYXQgaXMgbWVtb3J5IHNwcmVhZCA/CisxLjYgV2hhdCBpcyBtZW1vcnkgc3ByZWFkID8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGhlcmUgYXJlIHR3byBib29sZWFuIGZsYWcgZmlsZXMgcGVyIGNwdXNldCB0aGF0IGNvbnRyb2wgd2hlcmUgdGhlCiBrZXJuZWwgYWxsb2NhdGVzIHBhZ2VzIGZvciB0aGUgZmlsZSBzeXN0ZW0gYnVmZmVycyBhbmQgcmVsYXRlZCBpbgpAQCAtMzc4LDYgKzM2MCwxNDIgQEAKIGRhdGEgc2V0LCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYWNyb3NzIHRoZSBub2RlcyBpbiB0aGUgam9icyBjcHVzZXQKIGNhbiBiZWNvbWUgdmVyeSB1bmV2ZW4uCiAKKzEuNyBXaGF0IGlzIHNjaGVkX2xvYWRfYmFsYW5jZSA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUga2VybmVsIHNjaGVkdWxlciAoa2VybmVsL3NjaGVkLmMpIGF1dG9tYXRpY2FsbHkgbG9hZCBiYWxhbmNlcwordGFza3MuICBJZiBvbmUgQ1BVIGlzIHVuZGVydXRpbGl6ZWQsIGtlcm5lbCBjb2RlIHJ1bm5pbmcgb24gdGhhdAorQ1BVIHdpbGwgbG9vayBmb3IgdGFza3Mgb24gb3RoZXIgbW9yZSBvdmVybG9hZGVkIENQVXMgYW5kIG1vdmUgdGhvc2UKK3Rhc2tzIHRvIGl0c2VsZiwgd2l0aGluIHRoZSBjb25zdHJhaW50cyBvZiBzdWNoIHBsYWNlbWVudCBtZWNoYW5pc21zCithcyBjcHVzZXRzIGFuZCBzY2hlZF9zZXRhZmZpbml0eS4KKworVGhlIGFsZ29yaXRobWljIGNvc3Qgb2YgbG9hZCBiYWxhbmNpbmcgYW5kIGl0cyBpbXBhY3Qgb24ga2V5IHNoYXJlZAora2VybmVsIGRhdGEgc3RydWN0dXJlcyBzdWNoIGFzIHRoZSB0YXNrIGxpc3QgaW5jcmVhc2VzIG1vcmUgdGhhbgorbGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mIENQVXMgYmVpbmcgYmFsYW5jZWQuICBTbyB0aGUgc2NoZWR1bGVyCitoYXMgc3VwcG9ydCB0byAgcGFydGl0aW9uIHRoZSBzeXN0ZW1zIENQVXMgaW50byBhIG51bWJlciBvZiBzY2hlZAorZG9tYWlucyBzdWNoIHRoYXQgaXQgb25seSBsb2FkIGJhbGFuY2VzIHdpdGhpbiBlYWNoIHNjaGVkIGRvbWFpbi4KK0VhY2ggc2NoZWQgZG9tYWluIGNvdmVycyBzb21lIHN1YnNldCBvZiB0aGUgQ1BVcyBpbiB0aGUgc3lzdGVtOworbm8gdHdvIHNjaGVkIGRvbWFpbnMgb3ZlcmxhcDsgc29tZSBDUFVzIG1pZ2h0IG5vdCBiZSBpbiBhbnkgc2NoZWQKK2RvbWFpbiBhbmQgaGVuY2Ugd29uJ3QgYmUgbG9hZCBiYWxhbmNlZC4KKworUHV0IHNpbXBseSwgaXQgY29zdHMgbGVzcyB0byBiYWxhbmNlIGJldHdlZW4gdHdvIHNtYWxsZXIgc2NoZWQgZG9tYWlucwordGhhbiBvbmUgYmlnIG9uZSwgYnV0IGRvaW5nIHNvIG1lYW5zIHRoYXQgb3ZlcmxvYWRzIGluIG9uZSBvZiB0aGUKK3R3byBkb21haW5zIHdvbid0IGJlIGxvYWQgYmFsYW5jZWQgdG8gdGhlIG90aGVyIG9uZS4KKworQnkgZGVmYXVsdCwgdGhlcmUgaXMgb25lIHNjaGVkIGRvbWFpbiBjb3ZlcmluZyBhbGwgQ1BVcywgZXhjZXB0IHRob3NlCittYXJrZWQgaXNvbGF0ZWQgdXNpbmcgdGhlIGtlcm5lbCBib290IHRpbWUgImlzb2xjcHVzPSIgYXJndW1lbnQuCisKK1RoaXMgZGVmYXVsdCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgYWxsIENQVXMgaXMgbm90IHdlbGwgc3VpdGVkIGZvcgordGhlIGZvbGxvd2luZyB0d28gc2l0dWF0aW9uczoKKyAxKSBPbiBsYXJnZSBzeXN0ZW1zLCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgbWFueSBDUFVzIGlzIGV4cGVuc2l2ZS4KKyAgICBJZiB0aGUgc3lzdGVtIGlzIG1hbmFnZWQgdXNpbmcgY3B1c2V0cyB0byBwbGFjZSBpbmRlcGVuZGVudCBqb2JzCisgICAgb24gc2VwYXJhdGUgc2V0cyBvZiBDUFVzLCBmdWxsIGxvYWQgYmFsYW5jaW5nIGlzIHVubmVjZXNzYXJ5LgorIDIpIFN5c3RlbXMgc3VwcG9ydGluZyByZWFsdGltZSBvbiBzb21lIENQVXMgbmVlZCB0byBtaW5pbWl6ZQorICAgIHN5c3RlbSBvdmVyaGVhZCBvbiB0aG9zZSBDUFVzLCBpbmNsdWRpbmcgYXZvaWRpbmcgdGFzayBsb2FkCisgICAgYmFsYW5jaW5nIGlmIHRoYXQgaXMgbm90IG5lZWRlZC4KKworV2hlbiB0aGUgcGVyLWNwdXNldCBmbGFnICJzY2hlZF9sb2FkX2JhbGFuY2UiIGlzIGVuYWJsZWQgKHRoZSBkZWZhdWx0CitzZXR0aW5nKSwgaXQgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIENQVXMgaW4gdGhhdCBjcHVzZXRzIGFsbG93ZWQgJ2NwdXMnCitiZSBjb250YWluZWQgaW4gYSBzaW5nbGUgc2NoZWQgZG9tYWluLCBlbnN1cmluZyB0aGF0IGxvYWQgYmFsYW5jaW5nCitjYW4gbW92ZSBhIHRhc2sgKG5vdCBvdGhlcndpc2VkIHBpbm5lZCwgYXMgYnkgc2NoZWRfc2V0YWZmaW5pdHkpCitmcm9tIGFueSBDUFUgaW4gdGhhdCBjcHVzZXQgdG8gYW55IG90aGVyLgorCitXaGVuIHRoZSBwZXItY3B1c2V0IGZsYWcgInNjaGVkX2xvYWRfYmFsYW5jZSIgaXMgZGlzYWJsZWQsIHRoZW4gdGhlCitzY2hlZHVsZXIgd2lsbCBhdm9pZCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgdGhlIENQVXMgaW4gdGhhdCBjcHVzZXQsCistLWV4Y2VwdC0tIGluIHNvIGZhciBhcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzb21lIG92ZXJsYXBwaW5nIGNwdXNldAoraGFzICJzY2hlZF9sb2FkX2JhbGFuY2UiIGVuYWJsZWQuCisKK1NvLCBmb3IgZXhhbXBsZSwgaWYgdGhlIHRvcCBjcHVzZXQgaGFzIHRoZSBmbGFnICJzY2hlZF9sb2FkX2JhbGFuY2UiCitlbmFibGVkLCB0aGVuIHRoZSBzY2hlZHVsZXIgd2lsbCBoYXZlIG9uZSBzY2hlZCBkb21haW4gY292ZXJpbmcgYWxsCitDUFVzLCBhbmQgdGhlIHNldHRpbmcgb2YgdGhlICJzY2hlZF9sb2FkX2JhbGFuY2UiIGZsYWcgaW4gYW55IG90aGVyCitjcHVzZXRzIHdvbid0IG1hdHRlciwgYXMgd2UncmUgYWxyZWFkeSBmdWxseSBsb2FkIGJhbGFuY2luZy4KKworVGhlcmVmb3JlIGluIHRoZSBhYm92ZSB0d28gc2l0dWF0aW9ucywgdGhlIHRvcCBjcHVzZXQgZmxhZworInNjaGVkX2xvYWRfYmFsYW5jZSIgc2hvdWxkIGJlIGRpc2FibGVkLCBhbmQgb25seSBzb21lIG9mIHRoZSBzbWFsbGVyLAorY2hpbGQgY3B1c2V0cyBoYXZlIHRoaXMgZmxhZyBlbmFibGVkLgorCitXaGVuIGRvaW5nIHRoaXMsIHlvdSBkb24ndCB1c3VhbGx5IHdhbnQgdG8gbGVhdmUgYW55IHVucGlubmVkIHRhc2tzIGluCit0aGUgdG9wIGNwdXNldCB0aGF0IG1pZ2h0IHVzZSBub24tdHJpdmlhbCBhbW91bnRzIG9mIENQVSwgYXMgc3VjaCB0YXNrcworbWF5IGJlIGFydGlmaWNpYWxseSBjb25zdHJhaW5lZCB0byBzb21lIHN1YnNldCBvZiBDUFVzLCBkZXBlbmRpbmcgb24KK3RoZSBwYXJ0aWN1bGFycyBvZiB0aGlzIGZsYWcgc2V0dGluZyBpbiBkZXNjZW5kZW50IGNwdXNldHMuICBFdmVuIGlmCitzdWNoIGEgdGFzayBjb3VsZCB1c2Ugc3BhcmUgQ1BVIGN5Y2xlcyBpbiBzb21lIG90aGVyIENQVXMsIHRoZSBrZXJuZWwKK3NjaGVkdWxlciBtaWdodCBub3QgY29uc2lkZXIgdGhlIHBvc3NpYmlsaXR5IG9mIGxvYWQgYmFsYW5jaW5nIHRoYXQKK3Rhc2sgdG8gdGhhdCB1bmRlcnVzZWQgQ1BVLgorCitPZiBjb3Vyc2UsIHRhc2tzIHBpbm5lZCB0byBhIHBhcnRpY3VsYXIgQ1BVIGNhbiBiZSBsZWZ0IGluIGEgY3B1c2V0Cit0aGF0IGRpc2FibGVzICJzY2hlZF9sb2FkX2JhbGFuY2UiIGFzIHRob3NlIHRhc2tzIGFyZW4ndCBnb2luZyBhbnl3aGVyZQorZWxzZSBhbnl3YXkuCisKK1RoZXJlIGlzIGFuIGltcGVkYW5jZSBtaXNtYXRjaCBoZXJlLCBiZXR3ZWVuIGNwdXNldHMgYW5kIHNjaGVkIGRvbWFpbnMuCitDcHVzZXRzIGFyZSBoaWVyYXJjaGljYWwgYW5kIG5lc3QuICBTY2hlZCBkb21haW5zIGFyZSBmbGF0OyB0aGV5IGRvbid0CitvdmVybGFwIGFuZCBlYWNoIENQVSBpcyBpbiBhdCBtb3N0IG9uZSBzY2hlZCBkb21haW4uCisKK0l0IGlzIG5lY2Vzc2FyeSBmb3Igc2NoZWQgZG9tYWlucyB0byBiZSBmbGF0IGJlY2F1c2UgbG9hZCBiYWxhbmNpbmcKK2Fjcm9zcyBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgc2V0cyBvZiBDUFVzIHdvdWxkIHJpc2sgdW5zdGFibGUgZHluYW1pY3MKK3RoYXQgd291bGQgYmUgYmV5b25kIG91ciB1bmRlcnN0YW5kaW5nLiAgU28gaWYgZWFjaCBvZiB0d28gcGFydGlhbGx5CitvdmVybGFwcGluZyBjcHVzZXRzIGVuYWJsZXMgdGhlIGZsYWcgJ3NjaGVkX2xvYWRfYmFsYW5jZScsIHRoZW4gd2UKK2Zvcm0gYSBzaW5nbGUgc2NoZWQgZG9tYWluIHRoYXQgaXMgYSBzdXBlcnNldCBvZiBib3RoLiAgV2Ugd29uJ3QgbW92ZQorYSB0YXNrIHRvIGEgQ1BVIG91dHNpZGUgaXQgY3B1c2V0LCBidXQgdGhlIHNjaGVkdWxlciBsb2FkIGJhbGFuY2luZworY29kZSBtaWdodCB3YXN0ZSBzb21lIGNvbXB1dGUgY3ljbGVzIGNvbnNpZGVyaW5nIHRoYXQgcG9zc2liaWxpdHkuCisKK1RoaXMgbWlzbWF0Y2ggaXMgd2h5IHRoZXJlIGlzIG5vdCBhIHNpbXBsZSBvbmUtdG8tb25lIHJlbGF0aW9uCitiZXR3ZWVuIHdoaWNoIGNwdXNldHMgaGF2ZSB0aGUgZmxhZyAic2NoZWRfbG9hZF9iYWxhbmNlIiBlbmFibGVkLAorYW5kIHRoZSBzY2hlZCBkb21haW4gY29uZmlndXJhdGlvbi4gIElmIGEgY3B1c2V0IGVuYWJsZXMgdGhlIGZsYWcsIGl0Cit3aWxsIGdldCBiYWxhbmNpbmcgYWNyb3NzIGFsbCBpdHMgQ1BVcywgYnV0IGlmIGl0IGRpc2FibGVzIHRoZSBmbGFnLAoraXQgd2lsbCBvbmx5IGJlIGFzc3VyZWQgb2Ygbm8gbG9hZCBiYWxhbmNpbmcgaWYgbm8gb3RoZXIgb3ZlcmxhcHBpbmcKK2NwdXNldCBlbmFibGVzIHRoZSBmbGFnLgorCitJZiB0d28gY3B1c2V0cyBoYXZlIHBhcnRpYWxseSBvdmVybGFwcGluZyAnY3B1cycgYWxsb3dlZCwgYW5kIG9ubHkKK29uZSBvZiB0aGVtIGhhcyB0aGlzIGZsYWcgZW5hYmxlZCwgdGhlbiB0aGUgb3RoZXIgbWF5IGZpbmQgaXRzCit0YXNrcyBvbmx5IHBhcnRpYWxseSBsb2FkIGJhbGFuY2VkLCBqdXN0IG9uIHRoZSBvdmVybGFwcGluZyBDUFVzLgorVGhpcyBpcyBqdXN0IHRoZSBnZW5lcmFsIGNhc2Ugb2YgdGhlIHRvcF9jcHVzZXQgZXhhbXBsZSBnaXZlbiBhIGZldworcGFyYWdyYXBocyBhYm92ZS4gIEluIHRoZSBnZW5lcmFsIGNhc2UsIGFzIGluIHRoZSB0b3AgY3B1c2V0IGNhc2UsCitkb24ndCBsZWF2ZSB0YXNrcyB0aGF0IG1pZ2h0IHVzZSBub24tdHJpdmlhbCBhbW91bnRzIG9mIENQVSBpbgorc3VjaCBwYXJ0aWFsbHkgbG9hZCBiYWxhbmNlZCBjcHVzZXRzLCBhcyB0aGV5IG1heSBiZSBhcnRpZmljaWFsbHkKK2NvbnN0cmFpbmVkIHRvIHNvbWUgc3Vic2V0IG9mIHRoZSBDUFVzIGFsbG93ZWQgdG8gdGhlbSwgZm9yIGxhY2sgb2YKK2xvYWQgYmFsYW5jaW5nIHRvIHRoZSBvdGhlciBDUFVzLgorCisxLjcuMSBzY2hlZF9sb2FkX2JhbGFuY2UgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcGVyLWNwdXNldCBmbGFnICdzY2hlZF9sb2FkX2JhbGFuY2UnIGRlZmF1bHRzIHRvIGVuYWJsZWQgKGNvbnRyYXJ5Cit0byBtb3N0IGNwdXNldCBmbGFncy4pICBXaGVuIGVuYWJsZWQgZm9yIGEgY3B1c2V0LCB0aGUga2VybmVsIHdpbGwKK2Vuc3VyZSB0aGF0IGl0IGNhbiBsb2FkIGJhbGFuY2UgYWNyb3NzIGFsbCB0aGUgQ1BVcyBpbiB0aGF0IGNwdXNldAorKG1ha2VzIHN1cmUgdGhhdCBhbGwgdGhlIENQVXMgaW4gdGhlIGNwdXNfYWxsb3dlZCBvZiB0aGF0IGNwdXNldCBhcmUKK2luIHRoZSBzYW1lIHNjaGVkIGRvbWFpbi4pCisKK0lmIHR3byBvdmVybGFwcGluZyBjcHVzZXRzIGJvdGggaGF2ZSAnc2NoZWRfbG9hZF9iYWxhbmNlJyBlbmFibGVkLAordGhlbiB0aGV5IHdpbGwgYmUgKG11c3QgYmUpIGJvdGggaW4gdGhlIHNhbWUgc2NoZWQgZG9tYWluLgorCitJZiwgYXMgaXMgdGhlIGRlZmF1bHQsIHRoZSB0b3AgY3B1c2V0IGhhcyAnc2NoZWRfbG9hZF9iYWxhbmNlJyBlbmFibGVkLAordGhlbiBieSB0aGUgYWJvdmUgdGhhdCBtZWFucyB0aGVyZSBpcyBhIHNpbmdsZSBzY2hlZCBkb21haW4gY292ZXJpbmcKK3RoZSB3aG9sZSBzeXN0ZW0sIHJlZ2FyZGxlc3Mgb2YgYW55IG90aGVyIGNwdXNldCBzZXR0aW5ncy4KKworVGhlIGtlcm5lbCBjb21taXRzIHRvIHVzZXIgc3BhY2UgdGhhdCBpdCB3aWxsIGF2b2lkIGxvYWQgYmFsYW5jaW5nCit3aGVyZSBpdCBjYW4uICBJdCB3aWxsIHBpY2sgYXMgZmluZSBhIGdyYW51bGFyaXR5IHBhcnRpdGlvbiBvZiBzY2hlZAorZG9tYWlucyBhcyBpdCBjYW4gd2hpbGUgc3RpbGwgcHJvdmlkaW5nIGxvYWQgYmFsYW5jaW5nIGZvciBhbnkgc2V0CitvZiBDUFVzIGFsbG93ZWQgdG8gYSBjcHVzZXQgaGF2aW5nICdzY2hlZF9sb2FkX2JhbGFuY2UnIGVuYWJsZWQuCisKK1RoZSBpbnRlcm5hbCBrZXJuZWwgY3B1c2V0IHRvIHNjaGVkdWxlciBpbnRlcmZhY2UgcGFzc2VzIGZyb20gdGhlCitjcHVzZXQgY29kZSB0byB0aGUgc2NoZWR1bGVyIGNvZGUgYSBwYXJ0aXRpb24gb2YgdGhlIGxvYWQgYmFsYW5jZWQKK0NQVXMgaW4gdGhlIHN5c3RlbS4gVGhpcyBwYXJ0aXRpb24gaXMgYSBzZXQgb2Ygc3Vic2V0cyAocmVwcmVzZW50ZWQKK2FzIGFuIGFycmF5IG9mIGNwdW1hc2tfdCkgb2YgQ1BVcywgcGFpcndpc2UgZGlzam9pbnQsIHRoYXQgY292ZXIgYWxsCit0aGUgQ1BVcyB0aGF0IG11c3QgYmUgbG9hZCBiYWxhbmNlZC4KKworV2hlbmV2ZXIgdGhlICdzY2hlZF9sb2FkX2JhbGFuY2UnIGZsYWcgY2hhbmdlcywgb3IgQ1BVcyBjb21lIG9yIGdvCitmcm9tIGEgY3B1c2V0IHdpdGggdGhpcyBmbGFnIGVuYWJsZWQsIG9yIGEgY3B1c2V0IHdpdGggdGhpcyBmbGFnCitlbmFibGVkIGlzIHJlbW92ZWQsIHRoZSBjcHVzZXQgY29kZSBidWlsZHMgYSBuZXcgc3VjaCBwYXJ0aXRpb24gYW5kCitwYXNzZXMgaXQgdG8gdGhlIHNjaGVkdWxlciBzY2hlZCBkb21haW4gc2V0dXAgY29kZSwgdG8gaGF2ZSB0aGUgc2NoZWQKK2RvbWFpbnMgcmVidWlsdCBhcyBuZWNlc3NhcnkuCisKK1RoaXMgcGFydGl0aW9uIGV4YWN0bHkgZGVmaW5lcyB3aGF0IHNjaGVkIGRvbWFpbnMgdGhlIHNjaGVkdWxlciBzaG91bGQKK3NldHVwIC0gb25lIHNjaGVkIGRvbWFpbiBmb3IgZWFjaCBlbGVtZW50IChjcHVtYXNrX3QpIGluIHRoZSBwYXJ0aXRpb24uCisKK1RoZSBzY2hlZHVsZXIgcmVtZW1iZXJzIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNjaGVkIGRvbWFpbiBwYXJ0aXRpb25zLgorV2hlbiB0aGUgc2NoZWR1bGVyIHJvdXRpbmUgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoKSBpcyBpbnZva2VkIGZyb20KK3RoZSBjcHVzZXQgY29kZSB0byB1cGRhdGUgdGhlc2Ugc2NoZWQgZG9tYWlucywgaXQgY29tcGFyZXMgdGhlIG5ldworcGFydGl0aW9uIHJlcXVlc3RlZCB3aXRoIHRoZSBjdXJyZW50LCBhbmQgdXBkYXRlcyBpdHMgc2NoZWQgZG9tYWlucywKK3JlbW92aW5nIHRoZSBvbGQgYW5kIGFkZGluZyB0aGUgbmV3LCBmb3IgZWFjaCBjaGFuZ2UuCiAKIDEuOCBIb3cgZG8gSSB1c2UgY3B1c2V0cyA/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDY5LDcgKzU4Nyw3IEBACiBUbyBzdGFydCBhIG5ldyBqb2IgdGhhdCBpcyB0byBiZSBjb250YWluZWQgd2l0aGluIGEgY3B1c2V0LCB0aGUgc3RlcHMgYXJlOgogCiAgMSkgbWtkaXIgL2Rldi9jcHVzZXQKLSAyKSBtb3VudCAtdCBjcHVzZXQgbm9uZSAvZGV2L2NwdXNldAorIDIpIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL2Rldi9jcHVzZXQKICAzKSBDcmVhdGUgdGhlIG5ldyBjcHVzZXQgYnkgZG9pbmcgbWtkaXIncyBhbmQgd3JpdGUncyAob3IgZWNobydzKSBpbgogICAgIHRoZSAvZGV2L2NwdXNldCB2aXJ0dWFsIGZpbGUgc3lzdGVtLgogIDQpIFN0YXJ0IGEgdGFzayB0aGF0IHdpbGwgYmUgdGhlICJmb3VuZGluZyBmYXRoZXIiIG9mIHRoZSBuZXcgam9iLgpAQCAtNDgxLDcgKzU5OSw3IEBACiBuYW1lZCAiQ2hhcmxpZSIsIGNvbnRhaW5pbmcganVzdCBDUFVzIDIgYW5kIDMsIGFuZCBNZW1vcnkgTm9kZSAxLAogYW5kIHRoZW4gc3RhcnQgYSBzdWJzaGVsbCAnc2gnIGluIHRoYXQgY3B1c2V0OgogCi0gIG1vdW50IC10IGNwdXNldCBub25lIC9kZXYvY3B1c2V0CisgIG1vdW50IC10IGNncm91cCAtb2NwdXNldCBjcHVzZXQgL2Rldi9jcHVzZXQKICAgY2QgL2Rldi9jcHVzZXQKICAgbWtkaXIgQ2hhcmxpZQogICBjZCBDaGFybGllCkBAIC01MTMsNyArNjMxLDcgQEAKIHZpcnR1YWwgZmlsZXN5c3RlbS4KIAogVG8gbW91bnQgaXQsIHR5cGU6Ci0jIG1vdW50IC10IGNwdXNldCBub25lIC9kZXYvY3B1c2V0CisjIG1vdW50IC10IGNncm91cCAtbyBjcHVzZXQgY3B1c2V0IC9kZXYvY3B1c2V0CiAKIFRoZW4gdW5kZXIgL2Rldi9jcHVzZXQgeW91IGNhbiBmaW5kIGEgdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZQogdHJlZSBvZiB0aGUgY3B1c2V0cyBpbiB0aGUgc3lzdGVtLiBGb3IgaW5zdGFuY2UsIC9kZXYvY3B1c2V0CkBAIC01NTYsNiArNjc0LDE4IEBACiBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgY3B1c2V0IGlzIGluIHVzZSAoaGFzIGNwdXNldHMgaW5zaWRlLCBvciBoYXMKIHByb2Nlc3NlcyBhdHRhY2hlZCkuCiAKK05vdGUgdGhhdCBmb3IgbGVnYWN5IHJlYXNvbnMsIHRoZSAiY3B1c2V0IiBmaWxlc3lzdGVtIGV4aXN0cyBhcyBhCit3cmFwcGVyIGFyb3VuZCB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0uCisKK1RoZSBjb21tYW5kCisKK21vdW50IC10IGNwdXNldCBYIC9kZXYvY3B1c2V0CisKK2lzIGVxdWl2YWxlbnQgdG8KKworbW91bnQgLXQgY2dyb3VwIC1vY3B1c2V0IFggL2Rldi9jcHVzZXQKK2VjaG8gIi9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IiA+IC9kZXYvY3B1c2V0L3JlbGVhc2VfYWdlbnQKKwogMi4yIEFkZGluZy9yZW1vdmluZyBjcHVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXVldmVudC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvZG0tdWV2ZW50LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2VkYmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL2RtLXVldmVudC50eHQKQEAgLTAsMCArMSw5NyBAQAorVGhlIGRldmljZS1tYXBwZXIgdWV2ZW50IGNvZGUgYWRkcyB0aGUgY2FwYWJpbGl0eSB0byBkZXZpY2UtbWFwcGVyIHRvIGNyZWF0ZQorYW5kIHNlbmQga29iamVjdCB1ZXZlbnRzICh1ZXZlbnRzKS4gIFByZXZpb3VzbHkgZGV2aWNlLW1hcHBlciBldmVudHMgd2VyZSBvbmx5CithdmFpbGFibGUgdGhyb3VnaCB0aGUgaW9jdGwgaW50ZXJmYWNlLiAgVGhlIGFkdmFudGFnZSBvZiB0aGUgdWV2ZW50cyBpbnRlcmZhY2UKK2lzIHRoZSBldmVudCBjb250YWlucyBlbnZpcm9ubWVudCBhdHRyaWJ1dGVzIHByb3ZpZGluZyBpbmNyZWFzZWQgY29udGV4dCBmb3IKK3RoZSBldmVudCBhdm9pZGluZyB0aGUgbmVlZCB0byBxdWVyeSB0aGUgc3RhdGUgb2YgdGhlIGRldmljZS1tYXBwZXIgZGV2aWNlIGFmdGVyCit0aGUgZXZlbnQgaXMgcmVjZWl2ZWQuCisKK1RoZXJlIGFyZSB0d28gZnVuY3Rpb25zIGN1cnJlbnRseSBmb3IgZGV2aWNlLW1hcHBlciBldmVudHMuICBUaGUgZmlyc3QgZnVuY3Rpb24KK2xpc3RlZCBjcmVhdGVzIHRoZSBldmVudCBhbmQgdGhlIHNlY29uZCBmdW5jdGlvbiBzZW5kcyB0aGUgZXZlbnQocykuCisKK3ZvaWQgZG1fcGF0aF91ZXZlbnQoZW51bSBkbV91ZXZlbnRfdHlwZSBldmVudF90eXBlLCBzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgbnJfdmFsaWRfcGF0aHMpCisKK3ZvaWQgZG1fc2VuZF91ZXZlbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmV2ZW50cywgc3RydWN0IGtvYmplY3QgKmtvYmopCisKKworVGhlIHZhcmlhYmxlcyBhZGRlZCB0byB0aGUgdWV2ZW50IGVudmlyb25tZW50IGFyZToKKworVmFyaWFibGUgTmFtZTogRE1fVEFSR0VUCitVZXZlbnQgQWN0aW9uKHMpOiBLT0JKX0NIQU5HRQorVHlwZTogc3RyaW5nCitEZXNjcmlwdGlvbjoKK1ZhbHVlOiBOYW1lIG9mIGRldmljZS1tYXBwZXIgdGFyZ2V0IHRoYXQgZ2VuZXJhdGVkIHRoZSBldmVudC4KKworVmFyaWFibGUgTmFtZTogRE1fQUNUSU9OCitVZXZlbnQgQWN0aW9uKHMpOiBLT0JKX0NIQU5HRQorVHlwZTogc3RyaW5nCitEZXNjcmlwdGlvbjoKK1ZhbHVlOiBEZXZpY2UtbWFwcGVyIHNwZWNpZmljIGFjdGlvbiB0aGF0IGNhdXNlZCB0aGUgdWV2ZW50IGFjdGlvbi4KKwlQQVRIX0ZBSUxFRCAtIEEgcGF0aCBoYXMgZmFpbGVkLgorCVBBVEhfUkVJTlNUQVRFRCAtIEEgcGF0aCBoYXMgYmVlbiByZWluc3RhdGVkLgorCitWYXJpYWJsZSBOYW1lOiBETV9TRVFOVU0KK1VldmVudCBBY3Rpb24ocyk6IEtPQkpfQ0hBTkdFCitUeXBlOiB1bnNpZ25lZCBpbnRlZ2VyCitEZXNjcmlwdGlvbjogQSBzZXF1ZW5jZSBudW1iZXIgZm9yIHRoaXMgc3BlY2lmaWMgZGV2aWNlLW1hcHBlciBkZXZpY2UuCitWYWx1ZTogVmFsaWQgdW5zaWduZWQgaW50ZWdlciByYW5nZS4KKworVmFyaWFibGUgTmFtZTogRE1fUEFUSAorVWV2ZW50IEFjdGlvbihzKTogS09CSl9DSEFOR0UKK1R5cGU6IHN0cmluZworRGVzY3JpcHRpb246IE1ham9yIGFuZCBtaW5vciBudW1iZXIgb2YgdGhlIHBhdGggZGV2aWNlIHBlcnRhaW5pbmcgdG8gdGhpcworZXZlbnQuCitWYWx1ZTogUGF0aCBuYW1lIGluIHRoZSBmb3JtIG9mICJNYWpvcjpNaW5vciIKKworVmFyaWFibGUgTmFtZTogRE1fTlJfVkFMSURfUEFUSFMKK1VldmVudCBBY3Rpb24ocyk6IEtPQkpfQ0hBTkdFCitUeXBlOiB1bnNpZ25lZCBpbnRlZ2VyCitEZXNjcmlwdGlvbjoKK1ZhbHVlOiBWYWxpZCB1bnNpZ25lZCBpbnRlZ2VyIHJhbmdlLgorCitWYXJpYWJsZSBOYW1lOiBETV9OQU1FCitVZXZlbnQgQWN0aW9uKHMpOiBLT0JKX0NIQU5HRQorVHlwZTogc3RyaW5nCitEZXNjcmlwdGlvbjogTmFtZSBvZiB0aGUgZGV2aWNlLW1hcHBlciBkZXZpY2UuCitWYWx1ZTogTmFtZQorCitWYXJpYWJsZSBOYW1lOiBETV9VVUlECitVZXZlbnQgQWN0aW9uKHMpOiBLT0JKX0NIQU5HRQorVHlwZTogc3RyaW5nCitEZXNjcmlwdGlvbjogVVVJRCBvZiB0aGUgZGV2aWNlLW1hcHBlciBkZXZpY2UuCitWYWx1ZTogVVVJRC4gKEVtcHR5IHN0cmluZyBpZiB0aGVyZSBpc24ndCBvbmUuKQorCitBbiBleGFtcGxlIG9mIHRoZSB1ZXZlbnRzIGdlbmVyYXRlZCBhcyBjYXB0dXJlZCBieSB1ZGV2bW9uaXRvciBpcyBzaG93bgorYmVsb3cuCisKKzEuKSBQYXRoIGZhaWx1cmUuCitVRVZFTlRbMTE5MjUyMTAwOS43MTEyMTVdIGNoYW5nZUAvYmxvY2svZG0tMworQUNUSU9OPWNoYW5nZQorREVWUEFUSD0vYmxvY2svZG0tMworU1VCU1lTVEVNPWJsb2NrCitETV9UQVJHRVQ9bXVsdGlwYXRoCitETV9BQ1RJT049UEFUSF9GQUlMRUQKK0RNX1NFUU5VTT0xCitETV9QQVRIPTg6MzIKK0RNX05SX1ZBTElEX1BBVEhTPTAKK0RNX05BTUU9bXBhdGgyCitETV9VVUlEPW1wYXRoLTM1MzMzMzMzMDAwMDAyMzI4CitNSU5PUj0zCitNQUpPUj0yNTMKK1NFUU5VTT0xMTMwCisKKzIuKSBQYXRoIHJlaW5zdGF0ZS4KK1VFVkVOVFsxMTkyNTIxMTMyLjk4OTkyN10gY2hhbmdlQC9ibG9jay9kbS0zCitBQ1RJT049Y2hhbmdlCitERVZQQVRIPS9ibG9jay9kbS0zCitTVUJTWVNURU09YmxvY2sKK0RNX1RBUkdFVD1tdWx0aXBhdGgKK0RNX0FDVElPTj1QQVRIX1JFSU5TVEFURUQKK0RNX1NFUU5VTT0yCitETV9QQVRIPTg6MzIKK0RNX05SX1ZBTElEX1BBVEhTPTEKK0RNX05BTUU9bXBhdGgyCitETV9VVUlEPW1wYXRoLTM1MzMzMzMzMDAwMDAyMzI4CitNSU5PUj0zCitNQUpPUj0yNTMKK1NFUU5VTT0xMTMxCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCA2YzQ2NzMwLi5lNjI0NGNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTIxODgsNyArMjE4OCw3IEBACiAKIDEzNi0xNDMgY2hhcglVbml4OTggUFRZIHNsYXZlcwogCQkgIDAgPSAvZGV2L3B0cy8wCUZpcnN0IFVuaXg5OCBwc2V1ZG8tVFRZCi0JCSAgMSA9IC9kZXYvcHRzLzEJU2Vjb25kIFVuaXg5OCBwZXN1ZG8tVFRZCisJCSAgMSA9IC9kZXYvcHRzLzEJU2Vjb25kIFVuaXg5OCBwc2V1ZG8tVFRZCiAJCSAgICAuLi4KIAogCQlUaGVzZSBkZXZpY2Ugbm9kZXMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdpdGgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJlcy50eHQgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9kZXZyZXMudHh0CmluZGV4IDg1NjkwNzIuLjM4N2I4YTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvZGV2cmVzLnR4dApAQCAtMzIsNyArMzIsNyBAQAogCiBGb3Igb25lIHJlYXNvbiBvciBhbm90aGVyLCBsb3cgbGV2ZWwgZHJpdmVycyBkb24ndCByZWNlaXZlIGFzIG11Y2gKIGF0dGVudGlvbiBvciB0ZXN0aW5nIGFzIGNvcmUgY29kZSwgYW5kIGJ1Z3Mgb24gZHJpdmVyIGRldGFjaCBvcgotaW5pdGlsYWl6YXRpb24gZmFpbHVyZSBkb2Vzbid0IGhhcHBlbiBvZnRlbiBlbm91Z2ggdG8gYmUgbm90aWNlYWJsZS4KK2luaXRpYWxpemF0aW9uIGZhaWx1cmUgZG9uJ3QgaGFwcGVuIG9mdGVuIGVub3VnaCB0byBiZSBub3RpY2VhYmxlLgogSW5pdCBmYWlsdXJlIHBhdGggaXMgd29yc2UgYmVjYXVzZSBpdCdzIG11Y2ggbGVzcyB0cmF2ZWxsZWQgd2hpbGUKIG5lZWRzIHRvIGhhbmRsZSBtdWx0aXBsZSBlbnRyeSBwb2ludHMuCiAKQEAgLTE2MCw3ICsxNjAsNyBAQAogICBkZXZyZXNfcmVsZWFzZV9ncm91cChkZXYsIE5VTEwpOwogICByZXR1cm4gZXJyX2NvZGU7CiAKLUFzIHJlc291cmNlIGFjcXVpc2lvbiBmYWlsdXJlIHVzdWFsbHkgbWVhbnMgcHJvYmUgZmFpbHVyZSwgY29uc3RydWN0cworQXMgcmVzb3VyY2UgYWNxdWlzaXRpb24gZmFpbHVyZSB1c3VhbGx5IG1lYW5zIHByb2JlIGZhaWx1cmUsIGNvbnN0cnVjdHMKIGxpa2UgYWJvdmUgYXJlIHVzdWFsbHkgdXNlZnVsIGluIG1pZGxheWVyIGRyaXZlciAoZS5nLiBsaWJhdGEgY29yZQogbGF5ZXIpIHdoZXJlIGludGVyZmFjZSBmdW5jdGlvbiBzaG91bGRuJ3QgaGF2ZSBzaWRlIGVmZmVjdCBvbiBmYWlsdXJlLgogRm9yIExMRHMsIGp1c3QgcmV0dXJuaW5nIGVycm9yIGNvZGUgc3VmZmljZXMgaW4gbW9zdCBjYXNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmIvZGVmZXJyZWRfaW8udHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9kZWZlcnJlZF9pby50eHQKaW5kZXggNzNjZjlmYi4uNjM4ODNhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9mYi9kZWZlcnJlZF9pby50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mYi9kZWZlcnJlZF9pby50eHQKQEAgLTMsNyArMyw3IEBACiAKIERlZmVycmVkIElPIGlzIGEgd2F5IHRvIGRlbGF5IGFuZCByZXB1cnBvc2UgSU8uIEl0IHVzZXMgaG9zdCBtZW1vcnkgYXMgYQogYnVmZmVyIGFuZCB0aGUgTU1VIHBhZ2VmYXVsdCBhcyBhIHByZXRyaWdnZXIgZm9yIHdoZW4gdG8gcGVyZm9ybSB0aGUgZGV2aWNlCi1JTy4gVGhlIGZvbGxvd2luZyBleGFtcGxlIG1heSBiZSBhIHVzZWZ1bCBleHBsYWluYXRpb24gb2YgaG93IG9uZSBzdWNoIHNldHVwCitJTy4gVGhlIGZvbGxvd2luZyBleGFtcGxlIG1heSBiZSBhIHVzZWZ1bCBleHBsYW5hdGlvbiBvZiBob3cgb25lIHN1Y2ggc2V0dXAKIHdvcmtzOgogCiAtIHVzZXJzcGFjZSBhcHAgbGlrZSBYZmJkZXYgbW1hcHMgZnJhbWVidWZmZXIKQEAgLTI4LDcgKzI4LDcgQEAKIAogRm9yIHNvbWUgdHlwZXMgb2Ygbm9udm9sYXRpbGUgaGlnaCBsYXRlbmN5IGRpc3BsYXlzLCB0aGUgZGVzaXJlZCBpbWFnZSBpcwogdGhlIGZpbmFsIGltYWdlIHJhdGhlciB0aGFuIHRoZSBpbnRlcm1lZGlhdGUgc3RhZ2VzIHdoaWNoIGlzIHdoeSBpdCdzIG9rYXkKLXRvIG5vdCB1cGRhdGUgZm9yIGVhY2ggd3JpdGUgdGhhdCBpcyBvY2N1cmluZy4KK3RvIG5vdCB1cGRhdGUgZm9yIGVhY2ggd3JpdGUgdGhhdCBpcyBvY2N1cnJpbmcuCiAKIEl0IG1heSBiZSB0aGUgY2FzZSB0aGF0IHRoaXMgaXMgdXNlZnVsIGluIG90aGVyIHNjZW5hcmlvcyBhcyB3ZWxsLiBQYXVsIE11bmR0CiBoYXMgbWVudGlvbmVkIGEgY2FzZSB3aGVyZSBpdCBpcyBiZW5lZmljaWFsIHRvIHVzZSB0aGUgcGFnZSBjb3VudCB0byBkZWNpZGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCAyODBlYzA2Li42YjBmOTYzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC04Miw2ICs4Miw0MSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJc3lzX3N5c2N0bAorV2hlbjoJU2VwdGVtYmVyIDIwMTAKK09wdGlvbjogQ09ORklHX1NZU0NUTF9TWVNDQUxMCitXaHk6CVRoZSBzYW1lIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBhIG1vcmUgY29udmVuaWVudCBmcm9tCisJL3Byb2Mvc3lzLCBhbmQgbm9uZSBvZiB0aGUgc3lzY3RsIHZhcmlhYmxlcyBhcHBlYXIgdG8gYmUKKwlpbXBvcnRhbnQgcGVyZm9ybWFuY2Ugd2lzZS4KKworCUJpbmFyeSBzeXNjdGxzIGFyZSBhIGxvbmcgc3RhbmRpbmcgc291cmNlIG9mIHN1YnRsZSBrZXJuZWwKKwlidWdzIGFuZCBzZWN1cml0eSBpc3N1ZXMuCisKKwlXaGVuIEkgbG9va2VkIHNldmVyYWwgbW9udGhzIGFnbyBhbGwgSSBjb3VsZCBmaW5kIGFmdGVyCisJc2VhcmNoaW5nIHNldmVyYWwgZGlzdHJpYnV0aW9ucyB3ZXJlIDUgdXNlciBzcGFjZSBwcm9ncmFtcyBhbmQKKwlnbGliYyAod2hpY2ggZmFsbHMgYmFjayB0byAvcHJvYy9zeXMpIHVzaW5nIHRoaXMgc3lzY2FsbC4KKworCVRoZSBtYW4gcGFnZSBmb3Igc3lzY3RsKDIpIGRvY3VtZW50cyBpdCBhcyB1bnVzYWJsZSBmb3IgdXNlcgorCXNwYWNlIHByb2dyYW1zLgorCisJc3lzY3RsKDIpIGlzIG5vdCBnZW5lcmFsbHkgQUJJIGNvbXBhdGlibGUgdG8gYSAzMmJpdCB1c2VyCisJc3BhY2UgYXBwbGljYXRpb24gb24gYSA2NGJpdCBhbmQgYSAzMmJpdCBrZXJuZWwuCisKKwlGb3IgdGhlIGxhc3Qgc2V2ZXJhbCBtb250aHMgdGhlIHBvbGljeSBoYXMgYmVlbiBubyBuZXcgYmluYXJ5CisJc3lzY3RscyBhbmQgbm8gb25lIGhhcyBwdXQgZm9yd2FyZCBhbiBhcmd1bWVudCB0byB1c2UgdGhlbS4KKworCUJpbmFyeSBzeXNjdGxzIGlzc3VlcyBzZWVtIHRvIGtlZXAgaGFwcGVuaW5nIGFwcGVhcmluZyBzbworCXByb3Blcmx5IGRlcHJlY2F0aW5nIHRoZW0gKHdpdGggYSB3YXJuaW5nIHRvIHVzZXIgc3BhY2UpIGFuZCBhCisJMiB5ZWFyIGdyYWNlIHdhcm5pbmcgcGVyaW9kIHdpbGwgbWVhbiBldmVudHVhbGx5IHdlIGNhbiBraWxsCisJdGhlbSBhbmQgZW5kIHRoZSBwYWluLgorCisJSW4gdGhlIG1lYW4gdGltZSBpbmRpdmlkdWFsIGJpbmFyeSBzeXNjdGxzIGNhbiBiZSBkZWFsdCB3aXRoCisJaW4gYSBwaWVjZXdpc2UgZmFzaGlvbi4KKworV2hvOglFcmljIEJpZWRlcm1hbiA8ZWJpZWRlcm1AeG1pc3Npb24uY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogV2hhdDogIGEub3V0IGludGVycHJldGVyIHN1cHBvcnQgZm9yIEVMRiBleGVjdXRhYmxlcwogV2hlbjogIDIuNi4yNQogRmlsZXM6IGZzL2JpbmZtdF9lbGYuYwpAQCAtMTg0LDEzICsyMTksNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDogIGRyaXZlcnMgZGVwZW5kaW5nIG9uIE9CU09MRVRFX09TUwotV2hlbjogIG9wdGlvbnMgaW4gMi42LjIyLCBjb2RlIGluIDIuNi4yNAotV2h5OiAgIE9TUyBkcml2ZXJzIHdpdGggQUxTQSByZXBsYWNlbWVudHMKLVdobzogICBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCiBXaGF0OglBQ1BJIHByb2NmcyBpbnRlcmZhY2UKIFdoZW46CUp1bHkgMjAwOAogV2h5OglBQ1BJIHN5c2ZzIGNvbnZlcnNpb24gc2hvdWxkIGJlIGZpbmlzaGVkIGJ5IEphbnVhcnkgMjAwOC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvOXAudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKaW5kZXggZDZmZDZjNi4uYjkwZjUzNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy85cC50eHQKQEAgLTU0LDcgKzU0LDcgQEAKICAgYW5hbWU9bmFtZQlhbmFtZSBzcGVjaWZpZXMgdGhlIGZpbGUgdHJlZSB0byBhY2Nlc3Mgd2hlbiB0aGUgc2VydmVyIGlzCiAgIAkJb2ZmZXJpbmcgc2V2ZXJhbCBleHBvcnRlZCBmaWxlIHN5c3RlbXMuCiAKLSAgY2FjaGU9bW9kZQlzcGVjaWZpZXMgYSBjYWNoZWluZyBwb2xpY3kuICBCeSBkZWZhdWx0LCBubyBjYWNoZXMgYXJlIHVzZWQuCisgIGNhY2hlPW1vZGUJc3BlY2lmaWVzIGEgY2FjaGluZyBwb2xpY3kuICBCeSBkZWZhdWx0LCBubyBjYWNoZXMgYXJlIHVzZWQuCiAJCQlsb29zZSA9IG5vIGF0dGVtcHRzIGFyZSBtYWRlIGF0IGNvbnNpc3RlbmN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlbmRlZCBmb3IgZXhjbHVzaXZlLCByZWFkLW9ubHkgbW91bnRzCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCBmZTI2Y2M5Li4zN2MxMGNiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC0yMjQsNyArMjI0LDcgQEAKIHJlZGlydHlfcGFnZV9mb3Jfd3JpdGVwYWdlKCksIHRoZW4gdW5sb2NrIHRoZSBwYWdlIGFuZCByZXR1cm4gemVyby4KIFRoaXMgbWF5IGFsc28gYmUgZG9uZSB0byBhdm9pZCBpbnRlcm5hbCBkZWFkbG9ja3MsIGJ1dCByYXJlbHkuCiAKLUlmIHRoZSBmaWxlc3l0ZW0gaXMgY2FsbGVkIGZvciBzeW5jIHRoZW4gaXQgbXVzdCB3YWl0IG9uIGFueQorSWYgdGhlIGZpbGVzeXN0ZW0gaXMgY2FsbGVkIGZvciBzeW5jIHRoZW4gaXQgbXVzdCB3YWl0IG9uIGFueQogaW4tcHJvZ3Jlc3MgSS9PIGFuZCB0aGVuIHN0YXJ0IG5ldyBJL08uCiAKIFRoZSBmaWxlc3lzdGVtIHNob3VsZCB1bmxvY2sgdGhlIHBhZ2Ugc3luY2hyb25vdXNseSwgYmVmb3JlIHJldHVybmluZyB0byB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CmluZGV4IDRhZWNjOWIuLmI0NWYzYzFiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZXh0My50eHQKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAKIEpvdXJuYWxpbmcgQmxvY2sgRGV2aWNlIGxheWVyCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIEpvdXJuYWxpbmcgQmxvY2sgRGV2aWNlIGxheWVyIChKQkQpIGlzbid0IGV4dDMgc3BlY2lmaWMuICBJdCB3YXMgZGVzaWduIHRvCi1hZGQgam91cm5hbGluZyBjYXBhYmlsaXRpZXMgb24gYSBibG9jayBkZXZpY2UuICBUaGUgZXh0MyBmaWxlc3lzdGVtIGNvZGUgd2lsbAotaW5mb3JtIHRoZSBKQkQgb2YgbW9kaWZpY2F0aW9ucyBpdCBpcyBwZXJmb3JtaW5nIChjYWxsZWQgYSB0cmFuc2FjdGlvbikuICBUaGUKLWpvdXJuYWwgc3VwcG9ydHMgdGhlIHRyYW5zYWN0aW9ucyBzdGFydCBhbmQgc3RvcCwgYW5kIGluIGNhc2Ugb2YgY3Jhc2gsIHRoZQotam91cm5hbCBjYW4gcmVwbGF5ZWQgdGhlIHRyYW5zYWN0aW9ucyB0byBwdXQgdGhlIHBhcnRpdGlvbiBiYWNrIGluIGEKLWNvbnNpc3RlbnQgc3RhdGUgZmFzdC4KK1RoZSBKb3VybmFsaW5nIEJsb2NrIERldmljZSBsYXllciAoSkJEKSBpc24ndCBleHQzIHNwZWNpZmljLiAgSXQgd2FzIGRlc2lnbmVkCit0byBhZGQgam91cm5hbGluZyBjYXBhYmlsaXRpZXMgdG8gYSBibG9jayBkZXZpY2UuICBUaGUgZXh0MyBmaWxlc3lzdGVtIGNvZGUKK3dpbGwgaW5mb3JtIHRoZSBKQkQgb2YgbW9kaWZpY2F0aW9ucyBpdCBpcyBwZXJmb3JtaW5nIChjYWxsZWQgYSB0cmFuc2FjdGlvbikuCitUaGUgam91cm5hbCBzdXBwb3J0cyB0aGUgdHJhbnNhY3Rpb25zIHN0YXJ0IGFuZCBzdG9wLCBhbmQgaW4gY2FzZSBvZiBhIGNyYXNoLAordGhlIGpvdXJuYWwgY2FuIHJlcGxheSB0aGUgdHJhbnNhY3Rpb25zIHRvIHF1aWNrbHkgcHV0IHRoZSBwYXJ0aXRpb24gYmFjayBpbnRvCithIGNvbnNpc3RlbnQgc3RhdGUuCiAKIEhhbmRsZXMgcmVwcmVzZW50IGEgc2luZ2xlIGF0b21pYyB1cGRhdGUgdG8gYSBmaWxlc3lzdGVtLiAgSkJEIGNhbiBoYW5kbGUgYW4KIGV4dGVybmFsIGpvdXJuYWwgb24gYSBibG9jayBkZXZpY2UuCkBAIC0xNjQsNyArMTY0LDcgQEAKIEluIHRoZSBldmVudCBvZiBhIGNyYXNoLCB0aGUgam91cm5hbCBjYW4gYmUgcmVwbGF5ZWQsIGJyaW5naW5nIGJvdGggZGF0YSBhbmQKIG1ldGFkYXRhIGludG8gYSBjb25zaXN0ZW50IHN0YXRlLiAgVGhpcyBtb2RlIGlzIHRoZSBzbG93ZXN0IGV4Y2VwdCB3aGVuIGRhdGEKIG5lZWRzIHRvIGJlIHJlYWQgZnJvbSBhbmQgd3JpdHRlbiB0byBkaXNrIGF0IHRoZSBzYW1lIHRpbWUgd2hlcmUgaXQKLW91dHBlcmZvcm1zIGFsbCBvdGhlcnMgbW9kZXMuCitvdXRwZXJmb3JtcyBhbGwgb3RoZXIgbW9kZXMuCiAKIENvbXBhdGliaWxpdHkKIC0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9maWxlcy50eHQKaW5kZXggMTMzZTIxMy4uYmIwMTQyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9maWxlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9maWxlcy50eHQKQEAgLTc2LDEzICs3NiwxMyBAQAogNS4gSGFuZGxpbmcgb2YgdGhlIGZpbGUgc3RydWN0dXJlcyBpcyBzcGVjaWFsLiBTaW5jZSB0aGUgbG9vay11cAogICAgb2YgdGhlIGZkIChmZ2V0KCkvZmdldF9saWdodCgpKSBhcmUgbG9jay1mcmVlLCBpdCBpcyBwb3NzaWJsZQogICAgdGhhdCBsb29rLXVwIG1heSByYWNlIHdpdGggdGhlIGxhc3QgcHV0KCkgb3BlcmF0aW9uIG9uIHRoZQotICAgZmlsZSBzdHJ1Y3R1cmUuIFRoaXMgaXMgYXZvaWRlZCB1c2luZyB0aGUgcmN1cmVmIEFQSXMKKyAgIGZpbGUgc3RydWN0dXJlLiBUaGlzIGlzIGF2b2lkZWQgdXNpbmcgYXRvbWljX2luY19ub3RfemVybygpCiAgICBvbiAtPmZfY291bnQgOgogCiAJcmN1X3JlYWRfbG9jaygpOwogCWZpbGUgPSBmY2hlY2tfZmlsZXMoZmlsZXMsIGZkKTsKIAlpZiAoZmlsZSkgewotCQlpZiAocmN1cmVmX2luY19sZigmZmlsZS0+Zl9jb3VudCkpCisJCWlmIChhdG9taWNfaW5jX25vdF96ZXJvKCZmaWxlLT5mX2NvdW50KSkKIAkJCSpmcHV0X25lZWRlZCA9IDE7CiAJCWVsc2UKIAkJLyogRGlkbid0IGdldCB0aGUgcmVmZXJlbmNlLCBzb21lb25lJ3MgZnJlZWQgKi8KQEAgLTkyLDcgKzkyLDcgQEAKIAkuLi4uCiAJcmV0dXJuIGZpbGU7CiAKLSAgIHJjdXJlZl9pbmNfbGYoKSBkZXRlY3RzIGlmIHJlZmNvdW50cyBpcyBhbHJlYWR5IHplcm8gb3IKKyAgIGF0b21pY19pbmNfbm90X3plcm8oKSBkZXRlY3RzIGlmIHJlZmNvdW50cyBpcyBhbHJlYWR5IHplcm8gb3IKICAgIGdvZXMgdG8gemVybyBkdXJpbmcgaW5jcmVtZW50LiBJZiBpdCBkb2VzLCB3ZSBmYWlsCiAgICBmZ2V0KCkvZmdldF9saWdodCgpLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dAppbmRleCBlNWMxZGY1Li5kZWM5OTQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKQEAgLTgxMyw5ICs4MTMsOSBAQAogc2luY2UgdGhlIHN5c3RlbSBmaXJzdCBib290ZWQuICBGb3IgYSBxdWljayBsb29rLCBzaW1wbHkgY2F0IHRoZSBmaWxlOgogCiAgID4gY2F0IC9wcm9jL3N0YXQKLSAgY3B1ICAyMjU1IDM0IDIyOTAgMjI2MjU1NjMgNjI5MCAxMjcgNDU2Ci0gIGNwdTAgMTEzMiAzNCAxNDQxIDExMzExNzE4IDM2NzUgMTI3IDQzOAotICBjcHUxIDExMjMgMCA4NDkgMTEzMTM4NDUgMjYxNCAwIDE4CisgIGNwdSAgMjI1NSAzNCAyMjkwIDIyNjI1NTYzIDYyOTAgMTI3IDQ1NiAwCisgIGNwdTAgMTEzMiAzNCAxNDQxIDExMzExNzE4IDM2NzUgMTI3IDQzOCAwCisgIGNwdTEgMTEyMyAwIDg0OSAxMTMxMzg0NSAyNjE0IDAgMTggMAogICBpbnRyIDExNDkzMDU0OCAxMTMxOTk3ODggMyAwIDUgMjYzIDAgNCBbLi4uIGxvdHMgbW9yZSBudW1iZXJzIC4uLl0KICAgY3R4dCAxOTkwNDczCiAgIGJ0aW1lIDEwNjIxOTEzNzYKQEAgLTgzNSw2ICs4MzUsNyBAQAogLSBpb3dhaXQ6IHdhaXRpbmcgZm9yIEkvTyB0byBjb21wbGV0ZQogLSBpcnE6IHNlcnZpY2luZyBpbnRlcnJ1cHRzCiAtIHNvZnRpcnE6IHNlcnZpY2luZyBzb2Z0aXJxcworLSBzdGVhbDogaW52b2x1bnRhcnkgd2FpdAogCiBUaGUgImludHIiIGxpbmUgZ2l2ZXMgY291bnRzIG9mIGludGVycnVwdHMgIHNlcnZpY2VkIHNpbmNlIGJvb3QgdGltZSwgZm9yIGVhY2gKIG9mIHRoZSAgcG9zc2libGUgc3lzdGVtIGludGVycnVwdHMuICAgVGhlIGZpcnN0ICBjb2x1bW4gIGlzIHRoZSAgdG90YWwgb2YgIGFsbApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zeXNmcy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dAppbmRleCA0YjVjYTI2Li40NTk4ZWY3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3N5c2ZzLnR4dApAQCAtNTEsNyArNTEsNyBAQAogYXR0cmlidXRlcy4KIAogQXR0cmlidXRlcyBzaG91bGQgYmUgQVNDSUkgdGV4dCBmaWxlcywgcHJlZmVyYWJseSB3aXRoIG9ubHkgb25lIHZhbHVlCi1wZXIgZmlsZS4gSXQgaXMgbm90ZWQgdGhhdCBpdCBtYXkgbm90IGJlIGVmZmljaWVudCB0byBjb250YWluIG9ubHkKK3BlciBmaWxlLiBJdCBpcyBub3RlZCB0aGF0IGl0IG1heSBub3QgYmUgZWZmaWNpZW50IHRvIGNvbnRhaW4gb25seSBvbmUKIHZhbHVlIHBlciBmaWxlLCBzbyBpdCBpcyBzb2NpYWxseSBhY2NlcHRhYmxlIHRvIGV4cHJlc3MgYW4gYXJyYXkgb2YKIHZhbHVlcyBvZiB0aGUgc2FtZSB0eXBlLiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IDZmOGUxNmUuLjlkMDE5ZDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTcwNiw3ICs3MDYsNyBAQAogICAgICAgICB3YW50cyB0byBtYWtlIGl0IGEgZnJlZSBwYWdlLiAgSWYgLT5yZWxlYXNlcGFnZSBzdWNjZWVkcywgdGhlCiAgICAgICAgIHBhZ2Ugd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGFkZHJlc3Nfc3BhY2UgYW5kIGJlY29tZSBmcmVlLgogCi0JVGhlIHNlY29uZCBjYXNlIGlmIHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgdG8gaW52YWxpZGF0ZQorCVRoZSBzZWNvbmQgY2FzZSBpcyB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHRvIGludmFsaWRhdGUKICAgICAgICAgc29tZSBvciBhbGwgcGFnZXMgaW4gYW4gYWRkcmVzc19zcGFjZS4gIFRoaXMgY2FuIGhhcHBlbgogICAgICAgICB0aHJvdWdoIHRoZSBmYWR2aWNlKFBPU0lYX0ZBRFZfRE9OVE5FRUQpIHN5c3RlbSBjYWxsIG9yIGJ5IHRoZQogICAgICAgICBmaWxlc3lzdGVtIGV4cGxpY2l0bHkgcmVxdWVzdGluZyBpdCBhcyBuZnMgYW5kIDlmcyBkbyAod2hlbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvaTJjLXByb3RvY29sIGIvRG9jdW1lbnRhdGlvbi9pMmMvaTJjLXByb3RvY29sCmluZGV4IDU3OWI5MmQuLjEwNTE4ZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2kyYy1wcm90b2NvbAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtcHJvdG9jb2wKQEAgLTY4LDcgKzY4LDcgQEAKIAogICBGbGFncyBJMkNfTV9JR05PUkVfTkFLCiAgICAgTm9ybWFsbHkgbWVzc2FnZSBpcyBpbnRlcnJ1cHRlZCBpbW1lZGlhdGVseSBpZiB0aGVyZSBpcyBbTkFdIGZyb20gdGhlCi0gICAgY2xpZW50LiBTZXR0aW5nIHRoaXMgZmxhZyB0cmVhdHMgYW55IFtOQV0gYXPCoFtBXSwgYW5kIGFsbCBvZgorICAgIGNsaWVudC4gU2V0dGluZyB0aGlzIGZsYWcgdHJlYXRzIGFueSBbTkFdIGFzIFtBXSwgYW5kIGFsbCBvZgogICAgIG1lc3NhZ2UgaXMgc2VudC4KICAgICBUaGVzZSBtZXNzYWdlcyBtYXkgc3RpbGwgZmFpbCB0byBTQ0wgbG8tPmhpIHRpbWVvdXQuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaWE2NC9lcnJfaW5qZWN0LnR4dCBiL0RvY3VtZW50YXRpb24vaWE2NC9lcnJfaW5qZWN0LnR4dAppbmRleCA2NDQ5YTcwLi4yMjNlNGYwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lhNjQvZXJyX2luamVjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pYTY0L2Vycl9pbmplY3QudHh0CkBAIC0yMSwxMCArMjEsMTAgQEAKIAogQmVsb3cgaXMgYSBzYW1wbGUgYXBwbGljYXRpb24gYXMgcGFydCBvZiB0aGUgd2hvbGUgdG9vbC4gVGhlIHNhbXBsZQogY2FuIGJlIHVzZWQgYXMgYSB3b3JraW5nIHRlc3QgdG9vbC4gT3IgaXQgY2FuIGJlIGV4cGFuZGVkIHRvIGluY2x1ZGUKLW1vcmUgZmVhdHVyZXMuIEl0IGFsc28gY2FuIGJlIGEgaW50ZWdyYXRlZCBpbnRvIGEgbGliYXJ5IG9yIG90aGVyIHVzZXIKK21vcmUgZmVhdHVyZXMuIEl0IGFsc28gY2FuIGJlIGEgaW50ZWdyYXRlZCBpbnRvIGEgbGlicmFyeSBvciBvdGhlciB1c2VyCiBhcHBsaWNhdGlvbiB0byBoYXZlIG1vcmUgdGhvcm91Z2ggdGVzdC4KIAotVGhlIHNhbXBsZSBhcHBsaWNhdGlvbiB0YWtlcyBlcnIuY29uZiBhcyBlcnJvciBjb25maWd1YXRpb24gaW5wdXQuIEdjYworVGhlIHNhbXBsZSBhcHBsaWNhdGlvbiB0YWtlcyBlcnIuY29uZiBhcyBlcnJvciBjb25maWd1cmF0aW9uIGlucHV0LiBHQ0MKIGNvbXBpbGVzIHRoZSBjb2RlLiBBZnRlciB5b3UgaW5zdGFsbCBlcnJfaW5qZWN0IGRyaXZlciwgeW91IGNhbiBydW4KIHRoaXMgc2FtcGxlIGFwcGxpY2F0aW9uIHRvIGluamVjdCBlcnJvcnMuCiAKQEAgLTgwOSw3ICs4MDksNyBAQAogCX0KIAogCS8qIENyZWF0ZSBzZW1hcGhvcmU6IElmIG9uZV9sb2NrLCBvbmUgc2VtYXBob3JlIGZvciBhbGwgcHJvY2Vzc29ycy4KLQkgICBPdGhlcndpc2UsIG9uZSBzZW1wYXBob3JlIGZvciBlYWNoIHByb2Nlc3Nvci4gKi8KKwkgICBPdGhlcndpc2UsIG9uZSBzZW1hcGhvcmUgZm9yIGVhY2ggcHJvY2Vzc29yLiAqLwogCWlmIChvbmVfbG9jaykgewogCQlpZiAoY3JlYXRlX3NlbSgwKSkgewogCQkJcHJpbnRmKCJDYW4gbm90IGNyZWF0ZSBzZW1hcGhvcmUuLi5leGl0XG4iKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvYXRhcmlrYmQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKaW5kZXggYWIwNTA2Mi4uZjNhM2JhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9hdGFyaWtiZC50eHQKQEAgLTE3MCw3ICsxNzAsNyBAQAoga2V5cy4gQW55IGtleXMgZG93biBhdCBwb3dlci11cCBhcmUgcHJlc3VtZWQgdG8gYmUgc3R1Y2ssIGFuZCB0aGVpciBCUkVBSwogKHNpYykgY29kZSBpcyByZXR1cm5lZCAod2hpY2ggd2l0aG91dCB0aGUgcHJlY2VkaW5nIE1BS0UgY29kZSBpcyBhIGZsYWcgZm9yIGEKIGtleWJvYXJkIGVycm9yKS4gSWYgdGhlIGNvbnRyb2xsZXIgc2VsZi10ZXN0IGNvbXBsZXRlcyB3aXRob3V0IGVycm9yLCB0aGUgY29kZQotMHhGMCBpcyByZXR1cm5lZC4gKFRoaXMgY29kZSB3aWxsIGJlIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHZlcnNpb24vcmxlYXNlIG9mCisweEYwIGlzIHJldHVybmVkLiAoVGhpcyBjb2RlIHdpbGwgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGUgdmVyc2lvbi9yZWxlYXNlIG9mCiB0aGUgaWtiZCBjb250cm9sbGVyLiBUaGUgZmlyc3QgcmVsZWFzZSBvZiB0aGUgaWtiZCBpcyB2ZXJzaW9uIDB4RjAsIHNob3VsZAogdGhlcmUgYmUgYSBzZWNvbmQgcmVsZWFzZSBpdCB3aWxsIGJlIDB4RjEsIGFuZCBzbyBvbi4pCiBUaGUgaWtiZCBkZWZhdWx0cyB0byBhIG1vdXNlIHBvc2l0aW9uIHJlcG9ydGluZyB3aXRoIHRocmVzaG9sZCBvZiAxIHVuaXQgaW4KQEAgLTQxMyw3ICs0MTMsNyBAQAogICAgICAgICAgICAgJW5ubm5tbW1tICAgOyB3aGVyZSBtIGlzIEpPWVNUSUNLMSBzdGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgbiBpcyBKT1lTVElDSzAgc3RhdGUKIAotU2V0cyB0aGUgaWtiZCB0byBkbyBub3RoaW5nIGJ1dCBtb25pdG9yIHRoZSBzZXJpYWwgY29tbWFuZCBsbmUsIG1haW50YWluIHRoZQorU2V0cyB0aGUgaWtiZCB0byBkbyBub3RoaW5nIGJ1dCBtb25pdG9yIHRoZSBzZXJpYWwgY29tbWFuZCBsaW5lLCBtYWludGFpbiB0aGUKIHRpbWUtb2YtZGF5IGNsb2NrLCBhbmQgbW9uaXRvciB0aGUgam95c3RpY2suIFRoZSByYXRlIHNldHMgdGhlIGludGVydmFsCiBiZXR3ZWVuIGpveXN0aWNrIHNhbXBsZXMuCiBOLkIuIFRoZSB1c2VyIHNob3VsZCBub3Qgc2V0IHRoZSByYXRlIGhpZ2hlciB0aGFuIHRoZSBzZXJpYWwgY29tbXVuaWNhdGlvbnMKQEAgLTQ0NiwxMCArNDQ2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIHZlcnRpY2FsIGN1cnNvciBrZXkgaXMgZ2VuZXJhdGVkIGJlZm9yZSBSWQogICAgICAgICAgICAgICAgICAgICAgICAgOyBoYXMgZWxhcHNlZAogICAgIFZYICAgICAgICAgICAgICAgICAgOyBsZW5ndGggKGluIHRlbnRocyBvZiBzZWNvbmRzKSBvZiBqb3lzdGljayBjbG9zdXJlCi0gICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIGhvcml6b250YWwgY3Vyc29yIGtleXN0b2tlcyBhcmUgZ2VuZXJhdGVkCisgICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIGhvcml6b250YWwgY3Vyc29yIGtleXN0cm9rZXMgYXJlIGdlbmVyYXRlZAogICAgICAgICAgICAgICAgICAgICAgICAgOyBhZnRlciBSWCBoYXMgZWxhcHNlZAogICAgIFZZICAgICAgICAgICAgICAgICAgOyBsZW5ndGggKGluIHRlbnRocyBvZiBzZWNvbmRzKSBvZiBqb3lzdGljayBjbG9zdXJlCi0gICAgICAgICAgICAgICAgICAgICAgICA7IHVudGlsIHZlcnRpY2FsIGN1cnNvciBrZXlzdG9rZXMgYXJlIGdlbmVyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgOyB1bnRpbCB2ZXJ0aWNhbCBjdXJzb3Iga2V5c3Ryb2tlcyBhcmUgZ2VuZXJhdGVkCiAgICAgICAgICAgICAgICAgICAgICAgICA7IGFmdGVyIFJZIGhhcyBlbGFwc2VkCiAKIEluIHRoaXMgbW9kZSwgam95c3RpY2sgMCBpcyBzY2FubmVkIGluIGEgd2F5IHRoYXQgc2ltdWxhdGVzIGN1cnNvciBrZXlzdHJva2VzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9mZi50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dAppbmRleCAwODVlYjE1Li5kZWQ0ZDVmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2ZmLnR4dApAQCAtMSw1ICsxLDUgQEAKIEZvcmNlIGZlZWRiYWNrIGZvciBMaW51eC4KLUJ5IEpvaGFubiBEZW5ldXggPGRlbmV1eEBpZnJhbmNlLmNvbT4gb24gMjAwMS8wNC8yMi4KK0J5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAZ21haWwuY29tPiBvbiAyMDAxLzA0LzIyLgogVXBkYXRlZCBieSBBbnNzaSBIYW5udWxhIDxhbnNzaS5oYW5udWxhQGdtYWlsLmNvbT4gb24gMjAwNi8wNC8wOS4KIFlvdSBtYXkgcmVkaXN0cmlidXRlIHRoaXMgZmlsZS4gUGxlYXNlIHJlbWVtYmVyIHRvIGluY2x1ZGUgc2hhcGUuZmlnIGFuZAogaW50ZXJhY3RpdmUuZmlnIGFzIHdlbGwuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2lmb3JjZS1wcm90b2NvbC50eHQgYi9Eb2N1bWVudGF0aW9uL2lucHV0L2lmb3JjZS1wcm90b2NvbC50eHQKaW5kZXggODc3N2QyZC4uM2FjOTI0MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pZm9yY2UtcHJvdG9jb2wudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvaWZvcmNlLXByb3RvY29sLnR4dApAQCAtNCwxMCArNCwxMCBAQAogZnJvbSBJbW1lcnNlLiBUaGF0J3Mgd2h5IHlvdSBzaG91bGQgbm90IHRydXN0IHdoYXQgaXMgd3JpdHRlbiBpbiB0aGlzCiBkb2N1bWVudC4gVGhpcyBkb2N1bWVudCBpcyBpbnRlbmRlZCB0byBoZWxwIHVuZGVyc3RhbmRpbmcgdGhlIHByb3RvY29sLgogVGhpcyBpcyBub3QgYSByZWZlcmVuY2UuIENvbW1lbnRzIGFuZCBjb3JyZWN0aW9ucyBhcmUgd2VsY29tZS4gIFRvIGNvbnRhY3QgbWUsCi1zZW5kIGFuIGVtYWlsIHRvOiBkZW5ldXhAaWZyYW5jZS5jb20KK3NlbmQgYW4gZW1haWwgdG86IGpvaGFubi5kZW5ldXhAZ21haWwuY29tCiAKICoqIFdBUk5JTkcgKioKLUkgbWF5IG5vdCBiZSBoZWxkIHJlc3BvbnNpYmxlIGZvciBhbnkgZGFtbWFnZSBvciBoYXJtIGNhdXNlZCBpZiB5b3UgdHJ5IHRvCitJIHNoYWxsIG5vdCBiZSBoZWxkIHJlc3BvbnNpYmxlIGZvciBhbnkgZGFtYWdlIG9yIGhhcm0gY2F1c2VkIGlmIHlvdSB0cnkgdG8KIHNlbmQgZGF0YSB0byB5b3VyIEktRm9yY2UgZGV2aWNlIGJhc2VkIG9uIHdoYXQgeW91IHJlYWQgaW4gdGhpcyBkb2N1bWVudC4KIAogKiogUHJlbGltaW5hcnkgTm90ZXM6CkBAIC0xNTEsMTMgKzE1MSwxMyBAQAogUXVlcnkgY29tbWFuZC4gTGVuZ3RoIHZhcmllcyBhY2NvcmRpbmcgdG8gdGhlIHF1ZXJ5IHR5cGUuCiBUaGUgZ2VuZXJhbCBmb3JtYXQgb2YgdGhpcyBwYWNrZXQgaXM6CiBmZiAwMSBRVUVSWSBbSU5ERVhdIENIRUNLU1VNCi1yZXBvbnNlcyBhcmUgb2YgdGhlIHNhbWUgZm9ybToKK3Jlc3BvbnNlcyBhcmUgb2YgdGhlIHNhbWUgZm9ybToKIEZGIExFTiBRVUVSWSBWQUxVRV9RVUVSSUVEIENIRUNLU1VNMgogd2hlcmUgTEVOID0gMSArIGxlbmd0aChWQUxVRV9RVUVSSUVEKQogCiAqKioqIFF1ZXJ5IHJhbSBzaXplICoqKioKIFFVRVJZID0gNDIgKCdCJ3VmZmVyIHNpemUpCi1UaGUgZGV2aWNlIHNob3VsZCByZXBseSB3aXRoIHRoZSBzYW1lIHBhY2tldCBwbHVzIHR3byBhZGRpdGlvbm5hbCBieXRlcworVGhlIGRldmljZSBzaG91bGQgcmVwbHkgd2l0aCB0aGUgc2FtZSBwYWNrZXQgcGx1cyB0d28gYWRkaXRpb25hbCBieXRlcwogY29udGFpbmluZyB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5OgogZmYgMDMgNDIgMDMgZTggQ1Mgd291bGQgbWVhbiB0aGF0IHRoZSBkZXZpY2UgaGFzIDEwMDAgYnl0ZXMgb2YgcmFtIGF2YWlsYWJsZS4KIApAQCAtMjM0LDE5ICsyMzQsMjMgQEAKIAogKiogQXBwZW5kaXg6IEhvdyB0byBzdHVkeSB0aGUgcHJvdG9jb2wgPyAqKgogCi0xLiBHZW5lcmF0ZSBlZmZlY3RzIHVzaW5nIHRoZSBmb3JjZSBlZGl0b3IgcHJvdmlkZWQgd2l0aCB0aGUgRGlyZWN0WCBTREssIG9yIHVzZSBJbW1lcnNpb24gU3R1ZGlvIChmcmVlbHkgYXZhaWxhYmxlIGF0IHRoZWlyIHdlYiBzaXRlIGluIHRoZSBkZXZlbG9wZXIgc2VjdGlvbjogd3d3LmltbWVyc2lvbi5jb20pCi0yLiBTdGFydCBhIHNvZnQgc3B5aW5nIFJTMjMyIG9yIFVTQiAoZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBjb25uZWN0ZWQgeW91ciBqb3lzdGljay93aGVlbCkuIEkgdXNlZCBDb21Qb3J0U3B5IGZyb20gZkNvZGVyIChhbHBoYSB2ZXJzaW9uISkKKzEuIEdlbmVyYXRlIGVmZmVjdHMgdXNpbmcgdGhlIGZvcmNlIGVkaXRvciBwcm92aWRlZCB3aXRoIHRoZSBEaXJlY3RYIFNESywgb3IgCit1c2UgSW1tZXJzaW9uIFN0dWRpbyAoZnJlZWx5IGF2YWlsYWJsZSBhdCB0aGVpciB3ZWIgc2l0ZSBpbiB0aGUgZGV2ZWxvcGVyIHNlY3Rpb246IAord3d3LmltbWVyc2lvbi5jb20pCisyLiBTdGFydCBhIHNvZnQgc3B5aW5nIFJTMjMyIG9yIFVTQiAoZGVwZW5kaW5nIG9uIHdoZXJlIHlvdSBjb25uZWN0ZWQgeW91ciAKK2pveXN0aWNrL3doZWVsKS4gSSB1c2VkIENvbVBvcnRTcHkgZnJvbSBmQ29kZXIgKGFscGhhIHZlcnNpb24hKQogMy4gUGxheSB0aGUgZWZmZWN0LCBhbmQgd2F0Y2ggd2hhdCBoYXBwZW5zIG9uIHRoZSBzcHkgc2NyZWVuLgogCiBBIGZldyB3b3JkcyBhYm91dCBDb21Qb3J0U3B5OgotQXQgZmlyc3QgZ2xhbmNlLCB0aGlzIHNvZnQgc2VlbXMsIGh1bSwgd2VsbC4uLiBidWdneS4gSW4gZmFjdCwgZGF0YSBhcHBlYXIgd2l0aCBhIGZldyBzZWNvbmRzIGxhdGVuY3kuIFBlcnNvbm5hbHksIEkgcmVzdGFydCBpdCBldmVyeSB0aW1lIEkgcGxheSBhbiBlZmZlY3QuCitBdCBmaXJzdCBnbGFuY2UsIHRoaXMgc29mdHdhcmUgc2VlbXMsIGh1bSwgd2VsbC4uLiBidWdneS4gSW4gZmFjdCwgZGF0YSBhcHBlYXIgd2l0aCBhCitmZXcgc2Vjb25kcyBsYXRlbmN5LiBQZXJzb25hbGx5LCBJIHJlc3RhcnQgaXQgZXZlcnkgdGltZSBJIHBsYXkgYW4gZWZmZWN0LgogUmVtZW1iZXIgaXQncyBmcmVlIChhcyBpbiBmcmVlIGJlZXIpIGFuZCBhbHBoYSEKIAogKiogVVJMUyAqKgogQ2hlY2sgd3d3LmltbWVyc2UuY29tIGZvciBJbW1lcnNpb24gU3R1ZGlvLCBhbmQgd3d3LmZjb2Rlci5jb20gZm9yIENvbVBvcnRTcHkuCiAKICoqIEF1dGhvciBvZiB0aGlzIGRvY3VtZW50ICoqCi1Kb2hhbm4gRGVuZXV4IDxkZW5ldXhAaWZyYW5jZS5jb20+CitKb2hhbm4gRGVuZXV4IDxqb2hhbm4uZGVuZXV4QGdtYWlsLmNvbT4KIEhvbWUgcGFnZSBhdCBodHRwOi8vd3d3LmVzaWwudW5pdi1tcnMuZnIvfmpkZW5ldXgvcHJvamVjdHMvZmYvCiAKIEFkZGl0aW9ucyBieSBWb2p0ZWNoIFBhdmxpay4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvaW5wdXQtcHJvZ3JhbW1pbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC1wcm9ncmFtbWluZy50eHQKaW5kZXggZDlkNTIzMC4uNDdmYzg2OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC1wcm9ncmFtbWluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9pbnB1dC1wcm9ncmFtbWluZy50eHQKQEAgLTQyLDggKzQyLDggQEAKIAkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCi0JYnV0dG9uX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKLQlidXR0b25fZGV2LT5rZXliaXRbTE9ORyhCVE5fMCldID0gQklUKEJUTl8wKTsKKwlidXR0b25fZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CisJYnV0dG9uX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl8wKV0gPSBCSVRfTUFTSyhCVE5fMCk7CiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShidXR0b25fZGV2KTsKIAlpZiAoZXJyb3IpIHsKQEAgLTc5LDcgKzc5LDcgQEAKIGJvb3RpbmcgdGhlIGtlcm5lbCwgaXQgZ3JhYnMgdGhlIHJlcXVpcmVkIHJlc291cmNlcyAoaXQgc2hvdWxkIGFsc28gY2hlY2sKIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIGRldmljZSkuCiAKLVRoZW4gaXQgYWxsb2NhdGVzIGEgbmV3IGlucHV0IGRldmljZSBzdHJ1Y3R1cmUgd2l0aCBpbnB1dF9hbG9vY2F0ZV9kZXZpY2UoKQorVGhlbiBpdCBhbGxvY2F0ZXMgYSBuZXcgaW5wdXQgZGV2aWNlIHN0cnVjdHVyZSB3aXRoIGlucHV0X2FsbG9jYXRlX2RldmljZSgpCiBhbmQgc2V0cyB1cCBpbnB1dCBiaXRmaWVsZHMuIFRoaXMgd2F5IHRoZSBkZXZpY2UgZHJpdmVyIHRlbGxzIHRoZSBvdGhlcgogcGFydHMgb2YgdGhlIGlucHV0IHN5c3RlbXMgd2hhdCBpdCBpcyAtIHdoYXQgZXZlbnRzIGNhbiBiZSBnZW5lcmF0ZWQgb3IKIGFjY2VwdGVkIGJ5IHRoaXMgaW5wdXQgZGV2aWNlLiBPdXIgZXhhbXBsZSBkZXZpY2UgY2FuIG9ubHkgZ2VuZXJhdGUgRVZfS0VZCkBAIC0yMTcsMTQgKzIxNywxNSBAQAogdGhhdCB0aGUgdGhpbmcgaXMgcHJlY2lzZSBhbmQgYWx3YXlzIHJldHVybnMgdG8gZXhhY3RseSB0aGUgY2VudGVyIHBvc2l0aW9uCiAoaWYgaXQgaGFzIGFueSkuCiAKLTEuNCBOQklUUygpLCBMT05HKCksIEJJVCgpCisxLjQgQklUU19UT19MT05HUygpLCBCSVRfV09SRCgpLCBCSVRfTUFTSygpCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1UaGVzZSB0aHJlZSBtYWNyb3MgZnJvbSBpbnB1dC5oIGhlbHAgc29tZSBiaXRmaWVsZCBjb21wdXRhdGlvbnM6CitUaGVzZSB0aHJlZSBtYWNyb3MgZnJvbSBiaXRvcHMuaCBoZWxwIHNvbWUgYml0ZmllbGQgY29tcHV0YXRpb25zOgogCi0JTkJJVFMoeCkgLSByZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBiaXRmaWVsZCBhcnJheSBpbiBsb25ncyBmb3IgeCBiaXRzCi0JTE9ORyh4KSAgLSByZXR1cm5zIHRoZSBpbmRleCBpbiB0aGUgYXJyYXkgaW4gbG9uZ3MgZm9yIGJpdCB4Ci0JQklUKHgpICAgLSByZXR1cm5zIHRoZSBpbmRleCBpbiBhIGxvbmcgZm9yIGJpdCB4CisJQklUU19UT19MT05HUyh4KSAtIHJldHVybnMgdGhlIGxlbmd0aCBvZiBhIGJpdGZpZWxkIGFycmF5IGluIGxvbmdzIGZvcgorCQkJICAgeCBiaXRzCisJQklUX1dPUkQoeCkJIC0gcmV0dXJucyB0aGUgaW5kZXggaW4gdGhlIGFycmF5IGluIGxvbmdzIGZvciBiaXQgeAorCUJJVF9NQVNLKHgpCSAtIHJldHVybnMgdGhlIGluZGV4IGluIGEgbG9uZyBmb3IgYml0IHgKIAogMS41IFRoZSBpZCogYW5kIG5hbWUgZmllbGRzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pc2RuL0NSRURJVFMgYi9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUwppbmRleCA3YzE3YzgzLi44Y2FjNmMyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUworKysgYi9Eb2N1bWVudGF0aW9uL2lzZG4vQ1JFRElUUwpAQCAtNDAsNyArNDAsNyBAQAogUGVkcm8gUm9xdWUgTWFycXVlcyAocm9xdWVAZGkuZmMudWwucHQpCiAgIEZvciBsb3Qgb2YgbmV3IGlkZWFzIGFuZCB0aGUgcGNiaXQgZHJpdmVyLgogCi1FYmVyaGFyZCBNb2Vua2ViZXJnIChlbW9lbmtlQGd3ZGcuZGUpCitFYmVyaGFyZCBNw7Zua2ViZXJnIChlbW9lbmtlQGd3ZGcuZGUpCiAgIEZvciB0ZXN0aW5nIGFuZCBoZWxwIHRvIGdldCBpbnRvIGtlcm5lbC4KIAogVGhvbWFzIE5ldW1hbm4gKHRuQHJ1aHIuZGUpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmNvbmNhcCBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuY29uY2FwCmluZGV4IDJmMTE0YmEuLmE3NmQ3NDggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuY29uY2FwCisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuY29uY2FwCkBAIC0xMTEsNyArMTExLDcgQEAKIAlzdHJ1Y3QgY29uY2FwX3Byb3RvICogICgqcHJvdG9fbmV3KSAodm9pZCk7CiAKIAkvKiBkZWxldGUgZW5jYXBzdWxhdGlvbiBwcm90b2NvbCBpbnN0YW5jZSBhbmQgZnJlZSBhbGwgaXRzIHJlc291cmNlcy4KLQkgICBjcHJvdCBtYXkgbm8gbG9nZXIgYmUgcmVmZXJlbmNlZCBhZnRlciBjYWxsaW5nIHRoaXMgKi8KKwkgICBjcHJvdCBtYXkgbm8gbG9uZ2VyIGJlIHJlZmVyZW5jZWQgYWZ0ZXIgY2FsbGluZyB0aGlzICovCiAJdm9pZCAoKnByb3RvX2RlbCkoc3RydWN0IGNvbmNhcF9wcm90byAqY3Byb3QpOwogCiAJLyogaW5pdGlhbGl6ZSB0aGUgcHJvdG9jb2wncyBkYXRhLiBUbyBiZSBjYWxsZWQgYXQgaW50ZXJmYWNlIHN0YXJ0dXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vamF2YS50eHQgYi9Eb2N1bWVudGF0aW9uL2phdmEudHh0CmluZGV4IDNjY2UzZmIuLmU2YTcyMzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vamF2YS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9qYXZhLnR4dApAQCAtMzcsNyArMzcsNyBAQAogICAgb3IgdGhlIGZvbGxvd2luZywgaWYgeW91IHdhbnQgdG8gYmUgbW9yZSBzZWxlY3RpdmU6CiAgICAgICc6QXBwbGV0Ok06OjwhLS1hcHBsZXQ6Oi91c3IvYmluL2FwcGxldHZpZXdlcjonCiAKLSAgIE9mIGNhdXNlIHlvdSBoYXZlIHRvIGZpeCB0aGUgcGF0aCBuYW1lcy4gR2l2ZW4gcGF0aC9maWxlIG5hbWVzIGluIHRoaXMKKyAgIE9mIGNvdXJzZSB5b3UgaGF2ZSB0byBmaXggdGhlIHBhdGggbmFtZXMuIFRoZSBwYXRoL2ZpbGUgbmFtZXMgZ2l2ZW4gaW4gdGhpcwogICAgZG9jdW1lbnQgbWF0Y2ggdGhlIERlYmlhbiAyLjEgc3lzdGVtLiAoaS5lLiBqZGsgaW5zdGFsbGVkIGluIC91c3IsCiAgICBjdXN0b20gd3JhcHBlcnMgZnJvbSB0aGlzIGRvY3VtZW50IGluIC91c3IvbG9jYWwpCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKaW5kZXggZmU4YjBjNC4uNjE2MDQzYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKQEAgLTc3LDcgKzc3LDEyIEBACiAgIE9wdGlvbmFsbHksIGRlcGVuZGVuY2llcyBvbmx5IGZvciB0aGlzIGRlZmF1bHQgdmFsdWUgY2FuIGJlIGFkZGVkIHdpdGgKICAgImlmIi4KIAotLSBkZXBlbmRlbmNpZXM6ICJkZXBlbmRzIG9uIi8icmVxdWlyZXMiIDxleHByPgorLSB0eXBlIGRlZmluaXRpb24gKyBkZWZhdWx0IHZhbHVlOgorCSJkZWZfYm9vbCIvImRlZl90cmlzdGF0ZSIgPGV4cHI+IFsiaWYiIDxleHByPl0KKyAgVGhpcyBpcyBhIHNob3J0aGFuZCBub3RhdGlvbiBmb3IgYSB0eXBlIGRlZmluaXRpb24gcGx1cyBhIHZhbHVlLgorICBPcHRpb25hbGx5IGRlcGVuZGVuY2llcyBmb3IgdGhpcyBkZWZhdWx0IHZhbHVlIGNhbiBiZSBhZGRlZCB3aXRoICJpZiIuCisKKy0gZGVwZW5kZW5jaWVzOiAiZGVwZW5kcyBvbiIgPGV4cHI+CiAgIFRoaXMgZGVmaW5lcyBhIGRlcGVuZGVuY3kgZm9yIHRoaXMgbWVudSBlbnRyeS4gSWYgbXVsdGlwbGUKICAgZGVwZW5kZW5jaWVzIGFyZSBkZWZpbmVkLCB0aGV5IGFyZSBjb25uZWN0ZWQgd2l0aCAnJiYnLiBEZXBlbmRlbmNpZXMKICAgYXJlIGFwcGxpZWQgdG8gYWxsIG90aGVyIG9wdGlvbnMgd2l0aGluIHRoaXMgbWVudSBlbnRyeSAod2hpY2ggYWxzbwpAQCAtMjg5LDMgKzI5NCwxMCBAQAogCSJzb3VyY2UiIDxwcm9tcHQ+CiAKIFRoaXMgcmVhZHMgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIGZpbGUuIFRoaXMgZmlsZSBpcyBhbHdheXMgcGFyc2VkLgorCittYWlubWVudToKKworCSJtYWlubWVudSIgPHByb21wdD4KKworVGhpcyBzZXRzIHRoZSBjb25maWcgcHJvZ3JhbSdzIHRpdGxlIGJhciBpZiB0aGUgY29uZmlnIHByb2dyYW0gY2hvb3NlcwordG8gdXNlIGl0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dCBiL0RvY3VtZW50YXRpb24va2J1aWxkL21ha2VmaWxlcy50eHQKaW5kZXggZjA5OWI4MS4uNjE2NmUyZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CkBAIC01MTgsNiArNTE4LDI4IEBACiAJSW4gdGhpcyBleGFtcGxlIGZvciBhIHNwZWNpZmljIEdDQyB2ZXJzaW9uIHRoZSBidWlsZCB3aWxsIGVycm9yIG91dCBleHBsYWluaW5nCiAJdG8gdGhlIHVzZXIgd2h5IGl0IHN0b3BzLgogCisgICAgY2MtY3Jvc3MtcHJlZml4CisJY2MtY3Jvc3MtcHJlZml4IGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlcmUgZXhpc3QgYSAkKENDKSBpbiBwYXRoIHdpdGgKKwlvbmUgb2YgdGhlIGxpc3RlZCBwcmVmaXhlcy4gVGhlIGZpcnN0IHByZWZpeCB3aGVyZSB0aGVyZSBleGlzdCBhCisJcHJlZml4JChDQykgaW4gdGhlIFBBVEggaXMgcmV0dXJuZWQgLSBhbmQgaWYgbm8gcHJlZml4JChDQykgaXMgZm91bmQKKwl0aGVuIG5vdGhpbmcgaXMgcmV0dXJuZWQuCisJQWRkaXRpb25hbCBwcmVmaXhlcyBhcmUgc2VwYXJhdGVkIGJ5IGEgc2luZ2xlIHNwYWNlIGluIHRoZQorCWNhbGwgb2YgY2MtY3Jvc3MtcHJlZml4LgorCVRoaXMgZnVuY3Rpb25hbGl0eSBpcyB1c2VmdWxsIGZvciBhcmNoaXRlY3R1cmUgTWFrZWZpbGUgdGhhdCB0cnkKKwl0byBzZXQgQ1JPU1NfQ09NUElMRSB0byB3ZWxsIGtub3cgdmFsdWVzIGJ1dCBtYXkgaGF2ZSBzZXZlcmFsCisJdmFsdWVzIHRvIHNlbGVjdCBiZXR3ZWVuLgorCUl0IGlzIHJlY29tbWVuZGVkIG9ubHkgdG8gdHJ5IHRvIHNldCBDUk9TU19DT01QSUxFIGlzIGl0IGlzIGEgY3Jvc3MKKwlidWlsZCAoaG9zdCBhcmNoIGlzIGRpZmZlcmVudCBmcm9tIHRhcmdldCBhcmNoKS4gQW5kIGlzIENST1NTX0NPTVBJTEUKKwlpcyBhbHJlYWR5IHNldCB0aGVuIGxlYXZlIGl0IHdpdGggdGhlIG9sZCB2YWx1ZS4KKworCUV4YW1wbGU6CisJCSNhcmNoL202OGsvTWFrZWZpbGUKKwkJaWZuZXEgKCQoU1VCQVJDSCksJChBUkNIKSkKKwkJICAgICAgICBpZmVxICgkKENST1NTX0NPTVBJTEUpLCkKKwkJICAgICAgICAgICAgICAgQ1JPU1NfQ09NUElMRSA6PSAkKGNhbGwgY2MtY3Jvc3MtcHJlZml4LCBtNjhrLWxpbnV4LWdudS0pCisJCQllbmRpZgorCQllbmRpZgorCiA9PT0gNCBIb3N0IFByb2dyYW0gc3VwcG9ydAogCiBLYnVpbGQgc3VwcG9ydHMgYnVpbGRpbmcgZXhlY3V0YWJsZXMgb24gdGhlIGhvc3QgZm9yIHVzZSBkdXJpbmcgdGhlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tkdW1wL2tkdW1wLnR4dCBiL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CmluZGV4IDFiMzdiMjguLmQwYWM3MmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0CkBAIC0yMzEsNiArMjMxLDMyIEBACiAgIGFueSBzcGFjZSBiZWxvdyB0aGUgYWxpZ25tZW50IHBvaW50IHdpbGwgYmUgd2FzdGVkLgogCiAKK0V4dGVuZGVkIGNyYXNoa2VybmVsIHN5bnRheAorPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1doaWxlIHRoZSAiY3Jhc2hrZXJuZWw9c2l6ZVtAb2Zmc2V0XSIgc3ludGF4IGlzIHN1ZmZpY2llbnQgZm9yIG1vc3QKK2NvbmZpZ3VyYXRpb25zLCBzb21ldGltZXMgaXQncyBoYW5keSB0byBoYXZlIHRoZSByZXNlcnZlZCBtZW1vcnkgZGVwZW5kZW50CitvbiB0aGUgdmFsdWUgb2YgU3lzdGVtIFJBTSAtLSB0aGF0J3MgbW9zdGx5IGZvciBkaXN0cmlidXRvcnMgdGhhdCBwcmUtc2V0dXAKK3RoZSBrZXJuZWwgY29tbWFuZCBsaW5lIHRvIGF2b2lkIGEgdW5ib290YWJsZSBzeXN0ZW0gYWZ0ZXIgc29tZSBtZW1vcnkgaGFzCitiZWVuIHJlbW92ZWQgZnJvbSB0aGUgbWFjaGluZS4KKworVGhlIHN5bnRheCBpczoKKworICAgIGNyYXNoa2VybmVsPTxyYW5nZTE+OjxzaXplMT5bLDxyYW5nZTI+OjxzaXplMj4sLi4uXVtAb2Zmc2V0XQorICAgIHJhbmdlPXN0YXJ0LVtlbmRdCisKK0ZvciBleGFtcGxlOgorCisgICAgY3Jhc2hrZXJuZWw9NTEyTS0yRzo2NE0sMkctOjEyOE0KKworVGhpcyB3b3VsZCBtZWFuOgorCisgICAgMSkgaWYgdGhlIFJBTSBpcyBzbWFsbGVyIHRoYW4gNTEyTSwgdGhlbiBkb24ndCByZXNlcnZlIGFueXRoaW5nCisgICAgICAgKHRoaXMgaXMgdGhlICJyZXNjdWUiIGNhc2UpCisgICAgMikgaWYgdGhlIFJBTSBzaXplIGlzIGJldHdlZW4gNTEyTSBhbmQgMkcsIHRoZW4gcmVzZXJ2ZSA2NE0KKyAgICAzKSBpZiB0aGUgUkFNIHNpemUgaXMgbGFyZ2VyIHRoYW4gMkcsIHRoZW4gcmVzZXJ2ZSAxMjhNCisKKwogQm9vdCBpbnRvIFN5c3RlbSBLZXJuZWwKID09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLWRvY3MudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKaW5kZXggZDllM2IxOS4uNWE0ZWY0OCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtZG9jcy50eHQKQEAgLTc2LDkgKzc2LDkgQEAKICAgICAgKiBUaXRsZTogIkNvbmNlcHR1YWwgQXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBLZXJuZWwiCiAgICAgICAgQXV0aG9yOiBJdmFuIFQuIEJvd21hbi4KICAgICAgICBVUkw6IGh0dHA6Ly9wbGcudXdhdGVybG9vLmNhL35pdGJvd21hbi9wYXBlcnMvQ1M3NDZHLWExLmh0bWwKLSAgICAgICBLZXl3b3JkczogY29uY2VwdHVhbCBzb2Z0d2FyZSBhcnF1aXRlY3R1cmUsIGV4dHJhY3RlZCBkZXNpZ24sCisgICAgICAgS2V5d29yZHM6IGNvbmNlcHR1YWwgc29mdHdhcmUgYXJjaGl0ZWN0dXJlLCBleHRyYWN0ZWQgZGVzaWduLAogICAgICAgIHJldmVyc2UgZW5naW5lZXJpbmcsIHN5c3RlbSBzdHJ1Y3R1cmUuCi0gICAgICAgRGVzY3JpcHRpb246IENvbmNlcHR1YWwgc29mdHdhcmUgYXJxdWl0ZWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwsCisgICAgICAgRGVzY3JpcHRpb246IENvbmNlcHR1YWwgc29mdHdhcmUgYXJjaGl0ZWN0dXJlIG9mIHRoZSBMaW51eCBrZXJuZWwsCiAgICAgICAgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgc291cmNlIGNvZGUuIFZlcnkgZGV0YWlsZWQuIEdvb2QKICAgICAgICBmaWd1cmVzLiBHaXZlcyBnb29kIG92ZXJhbGwga2VybmVsIHVuZGVyc3RhbmRpbmcuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggOThjZjkwZi4uNmFjY2QzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTIyMiw5ICsyMjIsNiBAQAogCQkJV2FybmluZzogTWFueSBvZiB0aGVzZSBvcHRpb25zIGNhbiBwcm9kdWNlIGEgbG90IG9mCiAJCQlvdXRwdXQgYW5kIG1ha2UgeW91ciBzeXN0ZW0gdW51c2FibGUuIEJlIHZlcnkgY2FyZWZ1bC4KIAotCi0JYWNwaV9mYWtlX2VjZHQJW0hXLEFDUEldIFdvcmthcm91bmQgZmFpbHVyZSBkdWUgdG8gQklPUyBsYWNraW5nIEVDRFQKLQogCWFjcGlfcG1fZ29vZAlbWDg2LTMyLFg4Ni02NF0KIAkJCU92ZXJyaWRlIHRoZSBwbXRpbWVyIGJ1ZyBkZXRlY3Rpb246IGZvcmNlIHRoZSBrZXJuZWwKIAkJCXRvIGFzc3VtZSB0aGF0IHRoaXMgbWFjaGluZSdzIHBtdGltZXIgbGF0Y2hlcyBpdHMgdmFsdWUKQEAgLTI5Nyw5ICsyOTQsNiBAQAogCWFwbT0JCVtBUE1dIEFkdmFuY2VkIFBvd2VyIE1hbmFnZW1lbnQKIAkJCVNlZSBoZWFkZXIgb2YgYXJjaC9pMzg2L2tlcm5lbC9hcG0uYy4KIAotCWFwcGxpY29tPQlbSFddCi0JCQlGb3JtYXQ6IDxtZW0+LDxpcnE+Ci0KIAlhcmNyaW1pPQlbSFcsTkVUXSBBUkNuZXQgLSAiUklNIEkiIChlbnRpcmVseSBtZW0tbWFwcGVkKSBjYXJkcwogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxub2RlSUQ+CiAKQEAgLTM0NSwxMiArMzM5LDYgQEAKIAkJCUZvcm1hdDogPGlvPiw8aXJxPiw8bW9kZT4KIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9uZXQvaGFtcmFkaW8vYmF5Y29tX3Nlcl9oZHguYy4KIAotCWJsa210ZF9kZXZpY2U9CVtIVyxNVERdCi0JYmxrbXRkX2VyYXNlc3o9Ci0JYmxrbXRkX3JvPQotCWJsa210ZF9icz0KLQlibGttdGRfY291bnQ9Ci0KIAlib290X2RlbGF5PQlNaWxsaXNlY29uZHMgdG8gZGVsYXkgZWFjaCBwcmludGsgZHVyaW5nIGJvb3QuCiAJCQlWYWx1ZXMgbGFyZ2VyIHRoYW4gMTAgc2Vjb25kcyAoMTAwMDApIGFyZSBjaGFuZ2VkIHRvCiAJCQlubyBkZWxheSAoMCkuCkBAIC00MzEsOCArNDE5LDEwIEBACiAJCQlvdmVyIHRoZSA4MjU0IGluIGFkZGl0aW9uIHRvIG92ZXIgdGhlIElPLUFQSUMuIFRoZQogCQkJa2VybmVsIHRyaWVzIHRvIHNldCBhIHNlbnNpYmxlIGRlZmF1bHQuCiAKLQlocGV0PQkJW1g4Ni0zMixIUEVUXSBvcHRpb24gdG8gZGlzYWJsZSBIUEVUIGFuZCB1c2UgUElULgotCQkJRm9ybWF0OiBkaXNhYmxlCisJaHBldD0JCVtYODYtMzIsSFBFVF0gb3B0aW9uIHRvIGNvbnRyb2wgSFBFVCB1c2FnZQorCQkJRm9ybWF0OiB7IGVuYWJsZSAoZGVmYXVsdCkgfCBkaXNhYmxlIHwgZm9yY2UgfQorCQkJZGlzYWJsZTogZGlzYWJsZSBIUEVUIGFuZCB1c2UgUElUIGluc3RlYWQKKwkJCWZvcmNlOiBhbGxvdyBmb3JjZSBlbmFibGVkIG9mIHVuZG9jdW1lbnRlZCBjaGlwcyAoSUNINCwgVklBKQogCiAJY29tMjAwMjA9CVtIVyxORVRdIEFSQ25ldCAtIENPTTIwMDIwIGNoaXBzZXQKIAkJCUZvcm1hdDoKQEAgLTQ3OSw2ICs0NjksMTYgQEAKIAkJCVVBUlQgYXQgdGhlIHNwZWNpZmllZCBJL08gcG9ydCBvciBNTUlPIGFkZHJlc3MuCiAJCQlUaGUgb3B0aW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yIHR0eVMsIGFib3ZlLgogCisJbm9fY29uc29sZV9zdXNwZW5kCisJCQlbSFddIE5ldmVyIHN1c3BlbmQgdGhlIGNvbnNvbGUKKwkJCURpc2FibGUgc3VzcGVuZGluZyBvZiBjb25zb2xlcyBkdXJpbmcgc3VzcGVuZCBhbmQKKwkJCWhpYmVybmF0ZSBvcGVyYXRpb25zLiAgT25jZSBkaXNhYmxlZCwgZGVidWdnaW5nCisJCQltZXNzYWdlcyBjYW4gcmVhY2ggdmFyaW91cyBjb25zb2xlcyB3aGlsZSB0aGUgcmVzdAorCQkJb2YgdGhlIHN5c3RlbSBpcyBiZWluZyBwdXQgdG8gc2xlZXAgKGllLCB3aGlsZQorCQkJZGVidWdnaW5nIGRyaXZlciBzdXNwZW5kL3Jlc3VtZSBob29rcykuICBUaGlzIG1heQorCQkJbm90IHdvcmsgcmVsaWFibHkgd2l0aCBhbGwgY29uc29sZXMsIGJ1dCBpcyBrbm93bgorCQkJdG8gd29yayB3aXRoIHNlcmlhbCBhbmQgVkdBIGNvbnNvbGVzLgorCiAJY3BjaWhwX2dlbmVyaWM9CVtIVyxQQ0ldIEdlbmVyaWMgcG9ydCBJL08gQ29tcGFjdFBDSSBkcml2ZXIKIAkJCUZvcm1hdDoKIAkJCTxmaXJzdF9zbG90Piw8bGFzdF9zbG90Piw8cG9ydD4sPGVudW1fYml0PlssPGRlYnVnPl0KQEAgLTQ4Nyw2ICs0ODcsMTMgQEAKIAkJCVtLTkxdIFJlc2VydmUgYSBjaHVuayBvZiBwaHlzaWNhbCBtZW1vcnkgdG8KIAkJCWhvbGQgYSBrZXJuZWwgdG8gc3dpdGNoIHRvIHdpdGgga2V4ZWMgb24gcGFuaWMuCiAKKwljcmFzaGtlcm5lbD1yYW5nZTE6c2l6ZTFbLHJhbmdlMjpzaXplMiwuLi5dW0BvZmZzZXRdCisJCQlbS05MXSBTYW1lIGFzIGFib3ZlLCBidXQgZGVwZW5kcyBvbiB0aGUgbWVtb3J5CisJCQlpbiB0aGUgcnVubmluZyBzeXN0ZW0uIFRoZSBzeW50YXggb2YgcmFuZ2UgaXMKKwkJCXN0YXJ0LVtlbmRdIHdoZXJlIHN0YXJ0IGFuZCBlbmQgYXJlIGJvdGgKKwkJCWEgbWVtb3J5IHVuaXQgKGFtb3VudFtLTUddKS4gU2VlIGFsc28KKwkJCURvY3VtZW50YXRpb24va2R1bXAva2R1bXAudHh0IGZvciBhIGV4YW1wbGUuCisKIAljczQyMzI9CQlbSFcsT1NTXQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPiw8bXB1aW8+LDxtcHVpcnE+CiAKQEAgLTQ5Niw4ICs1MDMsNiBAQAogCWNzODl4MF9tZWRpYT0JW0hXLE5FVF0KIAkJCUZvcm1hdDogeyByajQ1IHwgYXVpIHwgYm5jIH0KIAotCWN5Y2xhZGVzPQlbSFcsU0VSSUFMXSBDeWNsYWRlcyBtdWx0aS1zZXJpYWwgcG9ydCBhZGFwdGVyLgotCiAJZGFzZD0JCVtIVyxORVRdCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jLgogCkBAIC01NTUsMTAgKzU2MCw2IEBACiAJCQlTZWUgZHJpdmVycy9jaGFyL1JFQURNRS5lcGNhIGFuZAogCQkJRG9jdW1lbnRhdGlvbi9kaWdpZXBjYS50eHQuCiAKLQlkbWFzY2M9CQlbSFcsQVgyNSxTRVJJQUxdIEFYLjI1IFo4MFNDQyBkcml2ZXIgd2l0aCBETUEKLQkJCXN1cHBvcnQgYXZhaWxhYmxlLgotCQkJRm9ybWF0OiA8aW9fZGV2MD5bLDxpb19kZXYxPlssLi48aW9fZGV2MzI+XV0KLQogCWRtYXNvdW5kPQlbSFcsT1NTXSBTb3VuZCBzdWJzeXN0ZW0gYnVmZmVycwogCiAJZHNjYzQuc2V0dXA9CVtORVRdCkBAIC01ODksMTcgKzU5MCwxMCBAQAogCQkJMDogcG9sbGluZyBtb2RlCiAJCQlub24tMDogaW50ZXJydXB0IG1vZGUgKGRlZmF1bHQpCiAKLQllZGE9CQlbSFcsUFMyXQotCi0JZWRiPQkJW0hXLFBTMl0KLQogCWVkZD0JCVtFRERdCiAJCQlGb3JtYXQ6IHsib2ZbZl0iIHwgInNrW2lwbWJyXSJ9CiAJCQlTZWUgY29tbWVudCBpbiBhcmNoL2kzODYvYm9vdC9lZGQuUwogCi0JZWljb249CQlbSFcsSVNETl0KLQkJCUZvcm1hdDogPGlkPiw8bWVtYmFzZT4sPGlycT4KLQogCWVpc2FfaXJxX2VkZ2U9CVtQQVJJU0MsSFddCiAJCQlTZWUgaGVhZGVyIG9mIGRyaXZlcnMvcGFyaXNjL2Vpc2EuYy4KIApAQCAtODc1LDkgKzg2OSw2IEBACiAJbGFwaWNfdGltZXJfYzJfb2sJW1g4Ni0zMix4ODYtNjQsQVBJQ10gdHJ1c3QgdGhlIGxvY2FsIGFwaWMgdGltZXIgaW4KIAkJCUMyIHBvd2VyIHN0YXRlLgogCi0JbGFzaT0JCVtIVyxTQ1NJXSBQQVJJU0MgTEFTSSBkcml2ZXIgZm9yIHRoZSA1M2M3MDAgY2hpcAotCQkJRm9ybWF0OiBhZGRyOjxpbz4saXJxOjxpcnE+Ci0KIAlsaWJhdGEubm9hY3BpCVtMSUJBVEFdIERpc2FibGVzIHVzZSBvZiBBQ1BJIGluIGxpYmF0YSBzdXNwZW5kL3Jlc3VtZQogCQkJd2hlbiBzZXQuCiAJCQlGb3JtYXQ6IDxpbnQ+CkBAIC0xMTI1LDkgKzExMTYsNiBAQAogCW5vYXBpYwkJW1NNUCxBUElDXSBUZWxscyB0aGUga2VybmVsIHRvIG5vdCBtYWtlIHVzZSBvZiBhbnkKIAkJCUlPQVBJQ3MgdGhhdCBtYXkgYmUgcHJlc2VudCBpbiB0aGUgc3lzdGVtLgogCi0Jbm9hc3luYwkJW0hXLE02OEtdIERpc2FibGVzIGFzeW5jIGFuZCBzeW5jIG5lZ290aWF0aW9uIGZvcgotCQkJYWxsIGRldmljZXMuCi0KIAlub2JhdHMJCVtQUENdIERvIG5vdCB1c2UgQkFUcyBmb3IgbWFwcGluZyBrZXJuZWwgbG93bWVtCiAJCQlvbiAiQ2xhc3NpYyIgUFBDIGNvcmVzLgogCkBAIC0xNDM5LDYgKzE0MjcsNyBAQAogCQkJUGFyYW06IDxudW1iZXI+IC0gc3RlcC9idWNrZXQgc2l6ZSBhcyBhIHBvd2VyIG9mIDIgZm9yCiAJCQkJc3RhdGlzdGljYWwgdGltZSBiYXNlZCBwcm9maWxpbmcuCiAJCQlQYXJhbTogInNsZWVwIiAtIHByb2ZpbGUgRC1zdGF0ZSBzbGVlcGluZyAobWlsbGlzZWNzKQorCQkJUGFyYW06ICJrdm0iIC0gcHJvZmlsZSBWTSBleGl0cy4KIAogCXByb2Nlc3Nvci5tYXhfY3N0YXRlPQlbSFcsQUNQSV0KIAkJCUxpbWl0IHByb2Nlc3NvciB0byBtYXhpbXVtIEMtc3RhdGUKQEAgLTE1NjUsOSArMTU1NCw2IEBACiAJc2ExMTAwaXIJW05FVF0KIAkJCVNlZSBkcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jLgogCi0Jc2I9CQlbSFcsT1NTXQotCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWEyPgotCiAJc2JuaT0JCVtORVRdIEdyYW5jaCBTQk5JMTIgbGVhc2VkIGxpbmUgYWRhcHRlcgogCiAJc2MxMjAwd2R0PQlbSFcsV0RUXSBTQzEyMDAgV0RUICh3YXRjaGRvZykgZHJpdmVyCkBAIC0xNjExLDggKzE1OTcsNiBAQAogCiAJc2VyaWFsbnVtYmVyCVtCVUdTPVg4Ni0zMl0KIAotCXNnX2RlZl9yZXNlcnZlZF9zaXplPQlbU0NTSV0KLQogCXNoYXBlcnM9CVtORVRdCiAJCQlNYXhpbWFsIG51bWJlciBvZiBzaGFwZXJzLgogCkBAIC0yMDAzLDEwICsxOTg3LDYgQEAKIAlub3JhbmRtYXBzCURvbid0IHVzZSBhZGRyZXNzIHNwYWNlIHJhbmRvbWl6YXRpb24KIAkJCUVxdWl2YWxlbnQgdG8gZWNobyAwID4gL3Byb2Mvc3lzL2tlcm5lbC9yYW5kb21pemVfdmFfc3BhY2UKIAotIAl1bndpbmRfZGVidWc9TiAJTiA+IDAgd2lsbCBlbmFibGUgZHdhcmYyIHVud2luZGVyIGRlYnVnZ2luZwotCQkJVGhpcyBpcyB1c2VmdWwgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb24gd2h5Ci0JCQl5b3UgZ290IGEgImR3YXJmMiB1bndpbmRlciBzdHVjayIKLQogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogCiBUT0RPOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tNjhrL2tlcm5lbC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24vbTY4ay9rZXJuZWwtb3B0aW9ucy50eHQKaW5kZXggOGE1MjNmNi4uMjQ4NTg5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tNjhrL2tlcm5lbC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL202OGsva2VybmVsLW9wdGlvbnMudHh0CkBAIC04OTAsMTAgKzg5MCw3IEBACiA1LjUuMikgbm9hc3luYwogLS0tLS0tLS0tLS0tLS0KIAotU3ludGF4OiBub2FzeW5jOjAKLQotICBEaXNhYmxlcyBhc3luYyBhbmQgc3luYyBuZWdvdGlhdGlvbiBmb3IgYWxsIGRldmljZXMuICBBbnkgdmFsdWUKLSAgYWZ0ZXIgdGhlIGNvbG9uIGlzIGFjY2VwdGFibGUgKGFuZCBoYXMgdGhlIHNhbWUgZWZmZWN0KS4KK1tPQlNPTEVURSwgUkVNT1ZFRF0KIAogNS41LjMpIG5vZGlzY29ubmVjdAogLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tYXJrZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vbWFya2Vycy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1YTcxYgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbWFya2Vycy50eHQKQEAgLTAsMCArMSw4MSBAQAorIAkgICAgICAgICAgICAgVXNpbmcgdGhlIExpbnV4IEtlcm5lbCBNYXJrZXJzCisKKwkJCSAgICBNYXRoaWV1IERlc25veWVycworCisKK1RoaXMgZG9jdW1lbnQgaW50cm9kdWNlcyBMaW51eCBLZXJuZWwgTWFya2VycyBhbmQgdGhlaXIgdXNlLiBJdCBwcm92aWRlcworZXhhbXBsZXMgb2YgaG93IHRvIGluc2VydCBtYXJrZXJzIGluIHRoZSBrZXJuZWwgYW5kIGNvbm5lY3QgcHJvYmUgZnVuY3Rpb25zIHRvCit0aGVtIGFuZCBwcm92aWRlcyBzb21lIGV4YW1wbGVzIG9mIHByb2JlIGZ1bmN0aW9ucy4KKworCisqIFB1cnBvc2Ugb2YgbWFya2VycworCitBIG1hcmtlciBwbGFjZWQgaW4gY29kZSBwcm92aWRlcyBhIGhvb2sgdG8gY2FsbCBhIGZ1bmN0aW9uIChwcm9iZSkgdGhhdCB5b3UgY2FuCitwcm92aWRlIGF0IHJ1bnRpbWUuIEEgbWFya2VyIGNhbiBiZSAib24iIChhIHByb2JlIGlzIGNvbm5lY3RlZCB0byBpdCkgb3IgIm9mZiIKKyhubyBwcm9iZSBpcyBhdHRhY2hlZCkuIFdoZW4gYSBtYXJrZXIgaXMgIm9mZiIgaXQgaGFzIG5vIGVmZmVjdCwgZXhjZXB0IGZvcgorYWRkaW5nIGEgdGlueSB0aW1lIHBlbmFsdHkgKGNoZWNraW5nIGEgY29uZGl0aW9uIGZvciBhIGJyYW5jaCkgYW5kIHNwYWNlCitwZW5hbHR5IChhZGRpbmcgYSBmZXcgYnl0ZXMgZm9yIHRoZSBmdW5jdGlvbiBjYWxsIGF0IHRoZSBlbmQgb2YgdGhlCitpbnN0cnVtZW50ZWQgZnVuY3Rpb24gYW5kIGFkZHMgYSBkYXRhIHN0cnVjdHVyZSBpbiBhIHNlcGFyYXRlIHNlY3Rpb24pLiAgV2hlbiBhCittYXJrZXIgaXMgIm9uIiwgdGhlIGZ1bmN0aW9uIHlvdSBwcm92aWRlIGlzIGNhbGxlZCBlYWNoIHRpbWUgdGhlIG1hcmtlciBpcworZXhlY3V0ZWQsIGluIHRoZSBleGVjdXRpb24gY29udGV4dCBvZiB0aGUgY2FsbGVyLiBXaGVuIHRoZSBmdW5jdGlvbiBwcm92aWRlZAorZW5kcyBpdHMgZXhlY3V0aW9uLCBpdCByZXR1cm5zIHRvIHRoZSBjYWxsZXIgKGNvbnRpbnVpbmcgZnJvbSB0aGUgbWFya2VyIHNpdGUpLgorCitZb3UgY2FuIHB1dCBtYXJrZXJzIGF0IGltcG9ydGFudCBsb2NhdGlvbnMgaW4gdGhlIGNvZGUuIE1hcmtlcnMgYXJlCitsaWdodHdlaWdodCBob29rcyB0aGF0IGNhbiBwYXNzIGFuIGFyYml0cmFyeSBudW1iZXIgb2YgcGFyYW1ldGVycywKK2Rlc2NyaWJlZCBpbiBhIHByaW50ay1saWtlIGZvcm1hdCBzdHJpbmcsIHRvIHRoZSBhdHRhY2hlZCBwcm9iZSBmdW5jdGlvbi4KKworVGhleSBjYW4gYmUgdXNlZCBmb3IgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgYWNjb3VudGluZy4KKworCisqIFVzYWdlCisKK0luIG9yZGVyIHRvIHVzZSB0aGUgbWFjcm8gdHJhY2VfbWFyaywgeW91IHNob3VsZCBpbmNsdWRlIGxpbnV4L21hcmtlci5oLgorCisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CisKK0FuZCwKKwordHJhY2VfbWFyayhzdWJzeXN0ZW1fZXZlbnQsICIlZCAlcyIsIHNvbWVpbnQsIHNvbWVzdHJpbmcpOworV2hlcmUgOgorLSBzdWJzeXN0ZW1fZXZlbnQgaXMgYW4gaWRlbnRpZmllciB1bmlxdWUgdG8geW91ciBldmVudAorICAgIC0gc3Vic3lzdGVtIGlzIHRoZSBuYW1lIG9mIHlvdXIgc3Vic3lzdGVtLgorICAgIC0gZXZlbnQgaXMgdGhlIG5hbWUgb2YgdGhlIGV2ZW50IHRvIG1hcmsuCistICIlZCAlcyIgaXMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgZm9yIHRoZSBzZXJpYWxpemVyLgorLSBzb21laW50IGlzIGFuIGludGVnZXIuCistIHNvbWVzdHJpbmcgaXMgYSBjaGFyIHBvaW50ZXIuCisKK0Nvbm5lY3RpbmcgYSBmdW5jdGlvbiAocHJvYmUpIHRvIGEgbWFya2VyIGlzIGRvbmUgYnkgcHJvdmlkaW5nIGEgcHJvYmUgKGZ1bmN0aW9uCit0byBjYWxsKSBmb3IgdGhlIHNwZWNpZmljIG1hcmtlciB0aHJvdWdoIG1hcmtlcl9wcm9iZV9yZWdpc3RlcigpIGFuZCBjYW4gYmUKK2FjdGl2YXRlZCBieSBjYWxsaW5nIG1hcmtlcl9hcm0oKS4gTWFya2VyIGRlYWN0aXZhdGlvbiBjYW4gYmUgZG9uZSBieSBjYWxsaW5nCittYXJrZXJfZGlzYXJtKCkgYXMgbWFueSB0aW1lcyBhcyBtYXJrZXJfYXJtKCkgaGFzIGJlZW4gY2FsbGVkLiBSZW1vdmluZyBhIHByb2JlCitpcyBkb25lIHRocm91Z2ggbWFya2VyX3Byb2JlX3VucmVnaXN0ZXIoKTsgaXQgd2lsbCBkaXNhcm0gdGhlIHByb2JlIGFuZCBtYWtlCitzdXJlIHRoZXJlIGlzIG5vIGNhbGxlciBsZWZ0IHVzaW5nIHRoZSBwcm9iZSB3aGVuIGl0IHJldHVybnMuIFByb2JlIHJlbW92YWwgaXMKK3ByZWVtcHQtc2FmZSBiZWNhdXNlIHByZWVtcHRpb24gaXMgZGlzYWJsZWQgYXJvdW5kIHRoZSBwcm9iZSBjYWxsLiBTZWUgdGhlCisiUHJvYmUgZXhhbXBsZSIgc2VjdGlvbiBiZWxvdyBmb3IgYSBzYW1wbGUgcHJvYmUgbW9kdWxlLgorCitUaGUgbWFya2VyIG1lY2hhbmlzbSBzdXBwb3J0cyBpbnNlcnRpbmcgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIG1hcmtlci4KK01hcmtlcnMgY2FuIGJlIHB1dCBpbiBpbmxpbmUgZnVuY3Rpb25zLCBpbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMsIGFuZAordW5yb2xsZWQgbG9vcHMgYXMgd2VsbCBhcyByZWd1bGFyIGZ1bmN0aW9ucy4KKworVGhlIG5hbWluZyBzY2hlbWUgInN1YnN5c3RlbV9ldmVudCIgaXMgc3VnZ2VzdGVkIGhlcmUgYXMgYSBjb252ZW50aW9uIGludGVuZGVkCit0byBsaW1pdCBjb2xsaXNpb25zLiBNYXJrZXIgbmFtZXMgYXJlIGdsb2JhbCB0byB0aGUga2VybmVsOiB0aGV5IGFyZSBjb25zaWRlcmVkCithcyBiZWluZyB0aGUgc2FtZSB3aGV0aGVyIHRoZXkgYXJlIGluIHRoZSBjb3JlIGtlcm5lbCBpbWFnZSBvciBpbiBtb2R1bGVzLgorQ29uZmxpY3RpbmcgZm9ybWF0IHN0cmluZ3MgZm9yIG1hcmtlcnMgd2l0aCB0aGUgc2FtZSBuYW1lIHdpbGwgY2F1c2UgdGhlIG1hcmtlcnMKK3RvIGJlIGRldGVjdGVkIHRvIGhhdmUgYSBkaWZmZXJlbnQgZm9ybWF0IHN0cmluZyBub3QgdG8gYmUgYXJtZWQgYW5kIHdpbGwgb3V0cHV0CithIHByaW50ayB3YXJuaW5nIHdoaWNoIGlkZW50aWZpZXMgdGhlIGluY29uc2lzdGVuY3k6CisKKyJGb3JtYXQgbWlzbWF0Y2ggZm9yIHByb2JlIHByb2JlX25hbWUgKGZvcm1hdCksIG1hcmtlciAoZm9ybWF0KSIKKworCisqIFByb2JlIC8gbWFya2VyIGV4YW1wbGUKKworU2VlIHRoZSBleGFtcGxlIHByb3ZpZGVkIGluIHNhbXBsZXMvbWFya2Vycy9zcmMKKworQ29tcGlsZSB0aGVtIHdpdGggeW91ciBrZXJuZWwuCisKK1J1biwgYXMgcm9vdCA6Cittb2Rwcm9iZSBtYXJrZXItZXhhbXBsZSAoaW5zbW9kIG9yZGVyIGlzIG5vdCBpbXBvcnRhbnQpCittb2Rwcm9iZSBwcm9iZS1leGFtcGxlCitjYXQgL3Byb2MvbWFya2VyLWV4YW1wbGUgKHJldHVybnMgYW4gZXhwZWN0ZWQgZXJyb3IpCitybW1vZCBtYXJrZXItZXhhbXBsZSBwcm9iZS1leGFtcGxlCitkbWVzZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9tZW1vcnktYmFycmllcnMudHh0CmluZGV4IDY1MDY1N2MuLjRlMTdiZWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWVtb3J5LWJhcnJpZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21lbW9yeS1iYXJyaWVycy50eHQKQEAgLTE0NzksNyArMTQ3OSw4IEBACiAKIEFueSBhdG9taWMgb3BlcmF0aW9uIHRoYXQgbW9kaWZpZXMgc29tZSBzdGF0ZSBpbiBtZW1vcnkgYW5kIHJldHVybnMgaW5mb3JtYXRpb24KIGFib3V0IHRoZSBzdGF0ZSAob2xkIG9yIG5ldykgaW1wbGllcyBhbiBTTVAtY29uZGl0aW9uYWwgZ2VuZXJhbCBtZW1vcnkgYmFycmllcgotKHNtcF9tYigpKSBvbiBlYWNoIHNpZGUgb2YgdGhlIGFjdHVhbCBvcGVyYXRpb24uICBUaGVzZSBpbmNsdWRlOgorKHNtcF9tYigpKSBvbiBlYWNoIHNpZGUgb2YgdGhlIGFjdHVhbCBvcGVyYXRpb24gKHdpdGggdGhlIGV4Y2VwdGlvbiBvZgorZXhwbGljaXQgbG9jayBvcGVyYXRpb25zLCBkZXNjcmliZWQgbGF0ZXIpLiAgVGhlc2UgaW5jbHVkZToKIAogCXhjaGcoKTsKIAljbXB4Y2hnKCk7CkBAIC0xNTM2LDEwICsxNTM3LDE5IEBACiBkbyBuZWVkIG1lbW9yeSBiYXJyaWVycyBhcyBhIGxvY2sgcHJpbWl0aXZlIGdlbmVyYWxseSBoYXMgdG8gZG8gdGhpbmdzIGluIGEKIHNwZWNpZmljIG9yZGVyLgogCi0KIEJhc2ljYWxseSwgZWFjaCB1c2FnZSBjYXNlIGhhcyB0byBiZSBjYXJlZnVsbHkgY29uc2lkZXJlZCBhcyB0byB3aGV0aGVyIG1lbW9yeQogYmFycmllcnMgYXJlIG5lZWRlZCBvciBub3QuCiAKK1RoZSBmb2xsb3dpbmcgb3BlcmF0aW9ucyBhcmUgc3BlY2lhbCBsb2NraW5nIHByaW1pdGl2ZXM6CisKKwl0ZXN0X2FuZF9zZXRfYml0X2xvY2soKTsKKwljbGVhcl9iaXRfdW5sb2NrKCk7CisJX19jbGVhcl9iaXRfdW5sb2NrKCk7CisKK1RoZXNlIGltcGxlbWVudCBMT0NLLWNsYXNzIGFuZCBVTkxPQ0stY2xhc3Mgb3BlcmF0aW9ucy4gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgaW4KK3ByZWZlcmVuY2UgdG8gb3RoZXIgb3BlcmF0aW9ucyB3aGVuIGltcGxlbWVudGluZyBsb2NraW5nIHByaW1pdGl2ZXMsIGJlY2F1c2UKK3RoZWlyIGltcGxlbWVudGF0aW9ucyBjYW4gYmUgb3B0aW1pc2VkIG9uIG1hbnkgYXJjaGl0ZWN0dXJlcy4KKwogWyFdIE5vdGUgdGhhdCBzcGVjaWFsIG1lbW9yeSBiYXJyaWVyIHByaW1pdGl2ZXMgYXJlIGF2YWlsYWJsZSBmb3IgdGhlc2UKIHNpdHVhdGlvbnMgYmVjYXVzZSBvbiBzb21lIENQVXMgdGhlIGF0b21pYyBpbnN0cnVjdGlvbnMgdXNlZCBpbXBseSBmdWxsIG1lbW9yeQogYmFycmllcnMsIGFuZCBzbyBiYXJyaWVyIGluc3RydWN0aW9ucyBhcmUgc3VwZXJmbHVvdXMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVtLApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9taXBzLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9taXBzLzAwLUlOREVYCmluZGV4IDlkZjhhMmUuLjNmMTNiZjggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbWlwcy8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL21pcHMvMDAtSU5ERVgKQEAgLTQsNSArNCwzIEBACiAJLSBSRUFETUUgZm9yIE1JUFMgQVUxWFhYIElERSBkcml2ZXIuCiBHVDY0MTIwLlJFQURNRQogCS0gUkVBRE1FIGZvciBkaXIgd2l0aCBpbmZvIG9uIE1JUFMgYm9hcmRzIHVzaW5nIEdULTY0MTIwIG9yIEdULTY0MTIwQS4KLXRpbWUuUkVBRE1FCi0JLSBSRUFETUUgZm9yIE1JUFMgdGltZSBzZXJ2aWNlcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbWlwcy9BVTF4eHhfSURFLlJFQURNRSBiL0RvY3VtZW50YXRpb24vbWlwcy9BVTF4eHhfSURFLlJFQURNRQppbmRleCBhZmIzMWMxLi41YzgzMzQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21pcHMvQVUxeHh4X0lERS5SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi9taXBzL0FVMXh4eF9JREUuUkVBRE1FCkBAIC01OSw3ICs1OSw3IEBACiAgIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfUElPX0RCRE1BICAgIC0gZW5hYmxlIHRoZSBQSU8rREJETUEgbW9kZQogICBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BICAtIGVuYWJsZSB0aGUgTVdETUEgbW9kZQogICBDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX0JVUlNUQUJMRV9PTiAtIHNldCBCdXJzdGFibGUgRklGTyBpbiBEQkRNQQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIKICAgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9TRVFUU19QRVJfUlEgLSBtYXhpbXVtIHRyYW5zZmVyIHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXIgZGVzY3JpcHRvcgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUgYi9Eb2N1bWVudGF0aW9uL21pcHMvdGltZS5SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0Y2U2MDMuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9taXBzL3RpbWUuUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLVJFQURNRSBmb3IgTUlQUyB0aW1lIHNlcnZpY2VzCi0KLUp1biBTdW4KLWpzdW5AbXZpc3RhLmNvbSBvciBqc3VuQGp1bnN1bi5uZXQKLQotCi1BQk9VVAotLS0tLS0KLVRoaXMgZmlsZSBkZXNjcmliZXMgdGhlIG5ldyBhcmNoL21pcHMva2VybmVsL3RpbWUuYywgcmVsYXRlZCBmaWxlcyBhbmQgdGhlIAotc2VydmljZXMgdGhleSBwcm92aWRlLiAKLQotSWYgeW91IGFyZSBzaG9ydCBpbiBwYXRpZW5jZSBhbmQganVzdCB3YW50IHRvIGtub3cgaG93IHRvIHVzZSB0aW1lLmMgZm9yIGEgCi1uZXcgYm9hcmQgb3IgY29udmVydCBhbiBleGlzdGluZyBib2FyZCwgZ28gdG8gdGhlIGxhc3Qgc2VjdGlvbi4KLQotCi1GSUxFUywgQ09NUEFUQUJJTElUWSBBTkQgQ09ORklHUwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBvbGQgYXJjaC9taXBzL2tlcm5lbC90aW1lLmMgaXMgcmVuYW1lZCB0byBvbGQtdGltZS5jLgotCi1BIG5ldyB0aW1lLmMgaXMgcHV0IHRoZXJlLCB0b2dldGhlciB3aXRoIGluY2x1ZGUvYXNtLW1pcHMvdGltZS5oLgotCi1Ud28gY29uZmlncyB2YXJpYWJsZXMgYXJlIGludHJvZHVjZWQsIENPTkZJR19PTERfVElNRV9DIGFuZCBDT05GSUdfTkVXX1RJTUVfQy4KLVNvIHdlIGFsbG93IGJvYXJkcyB1c2luZyAKLQotCTEpIG9sZCB0aW1lLmMgKENPTkZJR19PTERfVElNRV9DKQotCTIpIG5ldyB0aW1lLmMgKENPTkZJR19ORVdfVElNRV9DKQotCTMpIG5laXRoZXIgKHRoZWlyIG93biBwcml2YXRlIHRpbWUuYykKLQotSG93ZXZlciwgaXQgaXMgZXhwZWN0ZWQgZXZlcnkgYm9hcmQgd2lsbCBtb3ZlIHRvIHRoZSBuZXcgdGltZS5jIGluIHRoZSBuZWFyCi1mdXR1cmUuCi0KLQotV0hBVCBUSEUgTkVXIENPREUgUFJPVklERVM/Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0KLVRoZSBuZXcgdGltZSBjb2RlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBzZXJ2aWNlczoKLQotICBhKSBJbXBsZW1lbnRzIGZ1bmN0aW9ucyByZXF1aXJlZCBieSBMaW51eCBjb21tb24gY29kZToKLQl0aW1lX2luaXQKLQotICBiKSBwcm92aWRlcyBhbiBhYnN0cmFjdGlvbiBvZiBSVEMgYW5kIG51bGwgUlRDIGltcGxlbWVudGF0aW9uIGFzIGRlZmF1bHQuCi0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgKCpydGNfZ2V0X3RpbWUpKHZvaWQpOwotCWV4dGVybiBpbnQgKCpydGNfc2V0X3RpbWUpKHVuc2lnbmVkIGxvbmcpOwotCi0gIGMpIGhpZ2gtbGV2ZWwgYW5kIGxvdy1sZXZlbCB0aW1lciBpbnRlcnJ1cHQgcm91dGluZXMgd2hlcmUgdGhlIHRpbWVyCi0gICAgIGludGVycnVwdCBzb3VyY2UgIG1heSBvciBtYXkgbm90IGJlIHRoZSBDUFUgdGltZXIuICBUaGUgaGlnaC1sZXZlbAotICAgICByb3V0aW5lIGlzIGRpc3BhdGNoZWQgdGhyb3VnaCBkb19JUlEoKSB3aGlsZSB0aGUgbG93LWxldmVsIGlzCi0gICAgIGRpc3BhdGNoZWQgaW4gYXNzZW1hYmx5IGNvZGUgKHVzdWFsbHkgaW50LWhhbmRsZXIuUykKLQotCi1XSEFUIFRIRSBORVcgQ09ERSBSRVFVSVJFUz8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Gb3IgdGhlIG5ldyBjb2RlIHRvIHdvcmsgcHJvcGVybHksIGVhY2ggYm9hcmQgaW1wbGVtZW50YXRpb24gbmVlZHMgdG8gc3VwcGx5Ci10aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBvciB2YWx1ZXM6Ci0KLSAgYSkgYm9hcmRfdGltZV9pbml0IC0gYSBmdW5jdGlvbiBwb2ludGVyLiAgSW52b2tlZCBhdCB0aGUgYmVnaW5uaWcgb2YKLSAgICAgdGltZV9pbml0KCkuICBJdCBpcyBvcHRpb25hbC4KLQkxLiAob3B0aW9uYWwpIHNldCB1cCBSVEMgcm91dGluZXMKLQkyLiAob3B0aW9uYWwpIGNhbGlicmF0ZSBhbmQgc2V0IHRoZSBtaXBzX2hwdF9mcmVxdWVuY3kKLQotICBiKSBwbGF0X3RpbWVyX3NldHVwIC0gYSBmdW5jdGlvbiBwb2ludGVyLiAgSW52b2tlZCBhdCB0aGUgZW5kIG9mIHRpbWVfaW5pdCgpCi0JMS4gKG9wdGlvbmFsKSBvdmVyLXJpZGUgYW55IGRlY2lzaW9ucyBtYWRlIGluIHRpbWVfaW5pdCgpCi0JMi4gc2V0IHVwIHRoZSBpcnFhY3Rpb24gZm9yIHRpbWVyIGludGVycnVwdC4KLQkzLiBlbmFibGUgdGhlIHRpbWVyIGludGVycnVwdAotCi0gIGMpIChvcHRpb25hbCkgYm9hcmQtc3BlY2lmaWMgUlRDIHJvdXRpbmVzLgotCi0gIGQpIChvcHRpb25hbCkgbWlwc19ocHRfZnJlcXVlbmN5IC0gSXQgbXVzdCBiZSBkZWZpbmllZCBpZiB0aGUgYm9hcmQKLSAgICAgaXMgdXNpbmcgQ1BVIGNvdW50ZXIgZm9yIHRpbWVyIGludGVycnVwdC4KLQotCi1QT1JUSU5HIEdVSURFCi0tLS0tLS0tLS0tLS0tCi0KLVN0ZXAgMTogZGVjaWRlIGhvdyB5b3UgbGlrZSB0byBpbXBsZW1lbnQgdGhlIHRpbWUgc2VydmljZXMuCi0KLSAgYSkgZG9lcyB0aGlzIGJvYXJkIGhhdmUgYSBSVEM/ICBJZiB5ZXMsIGltcGxlbWVudCB0aGUgdHdvIFJUQyBmdW5jcy4KLQotICBiKSBkb2VzIHRoZSBDUFUgaGF2ZSBjb3VudGVyL2NvbXBhcmUgcmVnaXN0ZXJzPyAKLQotICAgICBJZiB0aGUgYW5zd2VyIGlzIG5vLCB5b3UgbmVlZCBhIHRpbWVyIHRvIHByb3ZpZGUgdGhlIHRpbWVyIGludGVycnVwdAotICAgICBhdCAxMDAgSFogc3BlZWQuCi0KLSAgYykgVGhlIGZvbGxvd2luZyBzdWIgc3RlcHMgYXNzdW1lIHlvdXIgQ1BVIGhhcyBjb3VudGVyIHJlZ2lzdGVyLgotICAgICBEbyB5b3UgcGxhbiB0byB1c2UgdGhlIENQVSBjb3VudGVyIHJlZ2lzdGVyIGFzIHRoZSB0aW1lciBpbnRlcnJ1cHQKLSAgICAgb3IgdXNlIGFuIGV4bnRlcm5hbCB0aW1lcj8KLQotICAgICBJbiBvcmRlciB0byB1c2UgQ1BVIGNvdW50ZXIgcmVnaXN0ZXIgYXMgdGhlIHRpbWVyIGludGVycnVwdCBzb3VyY2UsIHlvdQotICAgICBtdXN0IGtub3cgdGhlIGNvdW50ZXIgc3BlZWQgKG1pcHNfaHB0X2ZyZXF1ZW5jeSkuICBJdCBpcyB1c3VhbGx5IHRoZQotICAgICBzYW1lIGFzIHRoZSBDUFUgc3BlZWQgb3IgYW4gaW50ZWdyYWwgZGl2aXNvciBvZiBpdC4KLQotICBkKSBkZWNpZGUgb24gd2hldGhlciB5b3Ugd2FudCB0byB1c2UgaGlnaC1sZXZlbCBvciBsb3ctbGV2ZWwgdGltZXIKLSAgICAgaW50ZXJydXB0IHJvdXRpbmVzLiAgVGhlIGxvdy1sZXZlbCBvbmUgaXMgcHJlc3VtYWJseSBmYXN0ZXIsIGJ1dCBzaG91bGQKLSAgICAgbm90IG1ha2UgdG9vIG1jdWggZGlmZmVyZW5jZS4KLQotCi1TdGVwIDI6ICB0aGUgbWFjaGluZSBzZXR1cCgpIGZ1bmN0aW9uCi0KLSAgSWYgeW91IHN1cHBseSBib2FyZF90aW1lX2luaXQoKSwgc2V0IHRoZSBmdW5jdGlvbiBwb29pbnRlci4KLQotCi1TdGVwIDM6IGltcGxlbWVudCBydGMgcm91dGluZXMsIGJvYXJkX3RpbWVfaW5pdCgpIGFuZCBwbGF0X3RpbWVyX3NldHVwKCkKLSAgaWYgbmVlZGVkLgotCi0gIGJvYXJkX3RpbWVfaW5pdCgpIC0KLSAgCWEpIChvcHRpb25hbCkgc2V0IHVwIFJUQyByb3V0aW5lcywKLSAgICAgICAgYikgKG9wdGlvbmFsKSBjYWxpYnJhdGUgYW5kIHNldCB0aGUgbWlwc19ocHRfZnJlcXVlbmN5Ci0gCSAgICAob25seSBuZWVkZWQgaWYgeW91IGludGVuZGVkIHRvIHVzZSBjcHUgY291bnRlciBhcyB0aW1lciBpbnRlcnJ1cHQKLSAJICAgICBzb3VyY2UpCi0KLSAgcGxhdF90aW1lcl9zZXR1cCgpIC0KLSAJYSkgKG9wdGlvbmFsKSBvdmVyLXdyaXRlIGFueSBjaG9pY2VzIG1hZGUgYWJvdmUgYnkgdGltZV9pbml0KCkuCi0gCWIpIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBzaG91bGQgc2V0dXAgdGhlIHRpbWVyIGlycWFjdGlvbi4KLSAJYykgZW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQKLQotCi0gIElmIHRoZSBSVEMgY2hpcCBpcyBhIGNvbW1vbiBjaGlwLCBJIHN1Z2dlc3QgdGhlIHJvdXRpbmVzIGFyZSBwdXQgdW5kZXIKLSAgYXJjaC9taXBzL2xpYnMuICBGb3IgZXhhbXBsZSwgZm9yIERTMTM4NiBjaGlwLCBvbmUgd291bGQgY3JlYXRlCi0gIHJ0Yy1kczEzODYuYyB1bmRlciBhcmNoL21pcHMvbGliIGRpcmVjdG9yeS4gIEFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8KLSAgdGhlIGFyY2gvbWlwcy9saWIvTWFrZWZpbGU6Ci0KLQlvYmotJChDT05GSUdfRERCNTQ3NikgKz0gcnRjLWRzMTM4Ni5vCi0KLVN0ZXAgNDogaWYgeW91IGFyZSB1c2luZyBsb3ctbGV2ZWwgdGltZXIgaW50ZXJydXB0LCBjaGFuZ2UgeW91ciBpbnRlcnJ1cHQKLSAgZGlzcGF0aGNpbmcgY29kZSB0byBjaGVjayBmb3IgdGltZXIgaW50ZXJydXB0IGFuZCBqdW1wIHRvIAotICBsbF90aW1lcl9pbnRlcnJ1cHQoKSBkaXJlY3RseSAgaWYgb25lIGlzIGRldGVjdGVkLgotCi1TdGVwIDU6IE1vZGlmeSBhcmNoL21pcHMvY29uZmlnLmluIGFuZCBhZGQgQ09ORklHX05FV19USU1FX0MgdG8geW91ciBtYWNoaW5lLgotICBNb2RpZnkgdGhlIGFwcHJvcHJpYXRlIGRlZmNvbmZpZyBpZiBhcHBsaWNhYmxlLgotCi1GaW5hbCBub3RlczogCi0KLUZvciBzb21lIHRyaWNreSBjYXNlcywgeW91IG1heSBuZWVkIHRvIGFkZCB5b3VyIG93biB3cmFwcGVyIGZ1bmN0aW9ucyAKLWZvciBzb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGltZS5jLiAgCi0KLUZvciBleGFtcGxlLCB5b3UgbWF5IGRlZmluZSB5b3VyIG93biB0aW1lciBpbnRlcnJ1cHQgcm91dGluZSwgd2hpY2ggZG9lcwotc29tZSBvZiBpdHMgb3duIHByb2Nlc3NpbmcgYW5kIHRoZW4gY2FsbHMgdGltZXJfaW50ZXJydXB0KCkuCi0KLVlvdSBjYW4gYWxzbyBvdmVyLXJpZGUgYW55IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgKFJUQyByb3V0aW5lcwotYW5kL29yIHRpbWVyIGludGVycnVwdCByb3V0aW5lKS4KLQotCi1QT1JUSU5HIE5PVEVTIEZPUiBTTVAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotSWYgeW91IGhhdmUgYSBTTVAgYm94LCB0aGluZ3MgYXJlIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQuCi0KLVRoZSB0aW1lIHNlcnZpY2UgcnVubmluZyBldmVyeSBqaWZmeSBpcyBsb2dpY2FsbHkgZGl2aWRlZCBpbnRvIHR3byBwYXJ0czoKLQotICAxKSB0aGUgb25lIGZvciB0aGUgd2hvbGUgc3lzdGVtICAoZGVmaW5lZCBpbiB0aW1lcl9pbnRlcnJ1cHQoKSkKLSAgMikgdGhlIG9uZSB0aGF0IHNob3VsZCBydW4gZm9yIGVhY2ggQ1BVIChkZWZpbmVkIGluIGxvY2FsX3RpbWVyX2ludGVycnVwdCgpKQotCi1Zb3UgbmVlZCB0byBkZWNpZGUgb24geW91ciB0aW1lciBpbnRlcnJ1cHQgc291cmNlcy4KLQotICBjYXNlIDEpIC0gd2hvbGUgc3lzdGVtIGhhcyBvbmx5IG9uZSB0aW1lciBpbnRlcnJ1cHQgZGVsaXZlcmVkIHRvIG9uZSBDUFUKLQotCUluIHRoaXMgY2FzZSwgeW91IHNldCB1cCB0aW1lciBpbnRlcnJ1cHQgYXMgaW4gVVAgc3lzdGVtcy4gIEluIGFkZHRpb24sCi0JeW91IG5lZWQgdG8gc2V0IGVtdWxhdGVfbG9jYWxfdGltZXJfaW50ZXJydXB0IHRvIDEgc28gdGhhdCBvdGhlcgotCUNQVXMgZ2V0IHRvIGNhbGwgbG9jYWxfdGltZXJfaW50ZXJydXB0KCkuCi0KLQlUSElTIElTIENVUlJFTlRMWSBOT1QgSU1QTEVNTkVURUQuICBIb3dldmVyLCBpdCBpcyByYXRoZXIgZWFzeSB0byB3cml0ZQotCW9uZSBzaG91bGQgc3VjaCBhIG5lZWQgYXJpc2UuICBZb3Ugc2ltcGx5IG1ha2UgYSBJUEkgY2FsbC4KLQotICBjYXNlIDIpIC0gZWFjaCBDUFUgaGFzIGEgc2VwYXJhdGUgdGltZXIgaW50ZXJydXB0Ci0KLQlJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIHNldCB1cCBJUlEgc3VjaCB0aGF0IGVhY2ggb2YgdGhlbSB3aWxsCi0JY2FsbCBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKS4gIEluIGFkZGl0aW9uLCB5b3UgbmVlZCB0byBhcnJhbmdlCi0Jb25lIGFuZCBvbmx5IG9uZSBvZiB0aGVtIHRvIGNhbGwgdGltZXJfaW50ZXJydXB0KCkuCi0KLQlZb3UgY2FuIGFsc28gZG8gdGhlIGxvdy1sZXZlbCB2ZXJzaW9uIG9mIHRob3NlIGludGVycnVwdCByb3V0aW5lcywKLQlmb2xsb3dpbmcgc2ltaWxhciBkaXNwYXRjaGluZyByb3V0ZXMgZGVzY3JpYmVkIGFib3ZlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tdXRleC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9tdXRleC1kZXNpZ24udHh0CmluZGV4IDUxZjkzNTEuLmFhNjBkMWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbXV0ZXgtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL211dGV4LWRlc2lnbi50eHQKQEAgLTEzMyw0ICsxMzMsNiBAQAogIGludCAgbXV0ZXhfdHJ5bG9jayhzdHJ1Y3QgbXV0ZXggKmxvY2spOwogIHZvaWQgbXV0ZXhfdW5sb2NrKHN0cnVjdCBtdXRleCAqbG9jayk7CiAgaW50ICBtdXRleF9pc19sb2NrZWQoc3RydWN0IG11dGV4ICpsb2NrKTsKLQorIHZvaWQgbXV0ZXhfbG9ja19uZXN0ZWQoc3RydWN0IG11dGV4ICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpOworIGludCAgbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzdWJjbGFzcyk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmNtNDN4eC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYmNtNDN4eC50eHQKaW5kZXggYTEzNjcyMS4uZDYwMmM4ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JjbTQzeHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9iY200M3h4LnR4dApAQCAtMzcsNyArMzcsNyBAQAogcmVxdWlyZWQuIFRoZSBmaXJtd2FyZSB1c2VkIGJ5IHRoZSBjaGlwIGlzIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKIG9mIEJyb2FkY29tIGFuZCB0aGV5IGhhdmUgbm90IGdpdmVuIHRoZSBiY200M3h4IHRlYW0gcmVkaXN0cmlidXRpb24KIHJpZ2h0cyB0byB0aGlzIGZpcm13YXJlLiAgU2luY2Ugd2UgY2Fubm90IGxlZ2FsbHkgcmVkaXN0cmlidXRlCi10aGUgZmlyd21hcmUgd2UgY2Fubm90IGluY2x1ZGUgaXQgd2l0aCB0aGUgZHJpdmVyLiBGdXJ0aGVybW9yZSwgaXQKK3RoZSBmaXJtd2FyZSB3ZSBjYW5ub3QgaW5jbHVkZSBpdCB3aXRoIHRoZSBkcml2ZXIuIEZ1cnRoZXJtb3JlLCBpdAogY2Fubm90IGJlIHBsYWNlZCBpbiB0aGUgZG93bmxvYWRhYmxlIGFyY2hpdmVzIG9mIGFueSBkaXN0cmlidXRpbmcKIG9yZ2FuaXphdGlvbjsgdGhlcmVmb3JlLCB0aGUgdXNlciBpcyByZXNwb25zaWJsZSBmb3Igb2J0YWluaW5nIHRoZQogZmlybXdhcmUgYW5kIHBsYWNpbmcgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIGxvY2F0aW9uIHNvIHRoYXQgdGhlIGRyaXZlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwLXN5c2N0bC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAppbmRleCA2YWUyZmVmLi43NDdhNWQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtMjkzLDcgKzI5Myw3IEBACiAJd2hlbiB0aGUgY29ubmVjdGlvbiBjbG9zZXMsIHNvIHRoYXQgY29ubmVjdGlvbnMgZXN0YWJsaXNoZWQgaW4gdGhlCiAJbmVhciBmdXR1cmUgY2FuIHVzZSB0aGVzZSB0byBzZXQgaW5pdGlhbCBjb25kaXRpb25zLiAgVXN1YWxseSwgdGhpcwogCWluY3JlYXNlcyBvdmVyYWxsIHBlcmZvcm1hbmNlLCBidXQgbWF5IHNvbWV0aW1lcyBjYXVzZSBwZXJmb3JtYW5jZQotCWRlZ3JlZGF0aW9uLiAgSWYgc2V0LCBUQ1Agd2lsbCBub3QgY2FjaGUgbWV0cmljcyBvbiBjbG9zaW5nCisJZGVncmFkYXRpb24uICBJZiBzZXQsIFRDUCB3aWxsIG5vdCBjYWNoZSBtZXRyaWNzIG9uIGNsb3NpbmcKIAljb25uZWN0aW9ucy4KIAogdGNwX29ycGhhbl9yZXRyaWVzIC0gSU5URUdFUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yeHJwYy50eHQKaW5kZXggYzM2YjY0Yi4uYzM2NjlhMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3J4cnBjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcnhycGMudHh0CkBAIC02ODksNyArNjg5LDcgQEAKICAgICAgYnVmZmVycyBtYW5pcHVsYXRlZCBkaXJlY3RseS4KIAogVG8gdXNlIHRoZSBSeFJQQyBmYWNpbGl0eSwgYSBrZXJuZWwgdXRpbGl0eSBtdXN0IHN0aWxsIG9wZW4gYW4gQUZfUlhSUEMgc29ja2V0LAotYmluZCBhbiBhZGRlc3MgYXMgYXBwcm9wcmlhdGUgYW5kIGxpc3RlbiBpZiBpdCdzIHRvIGJlIGEgc2VydmVyIHNvY2tldCwgYnV0CitiaW5kIGFuIGFkZHJlc3MgYXMgYXBwcm9wcmlhdGUgYW5kIGxpc3RlbiBpZiBpdCdzIHRvIGJlIGEgc2VydmVyIHNvY2tldCwgYnV0CiB0aGVuIGl0IHBhc3NlcyB0aGlzIHRvIHRoZSBrZXJuZWwgaW50ZXJmYWNlIGZ1bmN0aW9ucy4KIAogVGhlIGtlcm5lbCBpbnRlcmZhY2UgZnVuY3Rpb25zIGFyZSBhcyBmb2xsb3dzOgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3VkcGxpdGUudHh0CmluZGV4IDZiZTA5YmEuLmI2NDA5Y2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy91ZHBsaXRlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdWRwbGl0ZS50eHQKQEAgLTEyLDcgKzEyLDcgQEAKICAgRm9yIGluLWRlcHRoIGluZm9ybWF0aW9uLCB5b3UgY2FuIGNvbnN1bHQ6CiAKICAgIG8gVGhlIFVEUC1MaXRlIEhvbWVwYWdlOiBodHRwOi8vd3d3LmVyZy5hYmRuLmFjLnVrL3VzZXJzL2dlcnJpdC91ZHAtbGl0ZS8KLSAgICAgICBGb20gaGVyZSB5b3UgY2FuIGFsc28gZG93bmxvYWQgc29tZSBleGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlLgorICAgICAgIEZyb20gaGVyZSB5b3UgY2FuIGFsc28gZG93bmxvYWQgc29tZSBleGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlLgogCiAgICBvIFRoZSBVRFAtTGl0ZSBIT1dUTyBvbgogICAgICAgIGh0dHA6Ly93d3cuZXJnLmFiZG4uYWMudWsvdXNlcnMvZ2Vycml0L3VkcC1saXRlL2ZpbGVzL1VEUC1MaXRlLUhPV1RPLnR4dApAQCAtMjIzLDcgKzIyMyw3IEBACiAgIFdoaWxlIGl0IGlzIGltcG9ydGFudCB0aGF0IHN1Y2ggY2FzZXMgYXJlIGRlYWx0IHdpdGggY29ycmVjdGx5LCB0aGV5CiAgIGFyZSAoYW5ub3lpbmdseSkgcmFyZTogVURQLUxpdGUgaXMgZGVzaWduZWQgZm9yIG9wdGltaXNpbmcgbXVsdGltZWRpYQogICBwZXJmb3JtYW5jZSBvdmVyIHdpcmVsZXNzIChvciBnZW5lcmFsbHkgbm9pc3kpIGxpbmtzIGFuZCB0aHVzIHNtYWxsZXIKLSAgY292ZXJhZ2UgbGVuZ2h0cyBhcmUgbGlrZWx5IHRvIGJlIGV4cGVjdGVkLgorICBjb3ZlcmFnZSBsZW5ndGhzIGFyZSBsaWtlbHkgdG8gYmUgZXhwZWN0ZWQuCiAKIAogICBWKSBVRFAtTElURSBSVU5USU1FIFNUQVRJU1RJQ1MgQU5EIFRIRUlSIE1FQU5JTkcKQEAgLTI1OSw3ICsyNTksNyBAQAogICBWSSkgSVBUQUJMRVMKIAogICBUaGVyZSBpcyBwYWNrZXQgbWF0Y2ggc3VwcG9ydCBmb3IgVURQLUxpdGUgYXMgd2VsbCBhcyBzdXBwb3J0IGZvciB0aGUgTE9HIHRhcmdldC4KLSAgSWYgeW91IGNvcHkgYW5kIHBhc3RlIHRoZSBmb2xsb3dpbmcgbGluZSBpbnRvIC9ldGMvcHJvdGNvbHMsCisgIElmIHlvdSBjb3B5IGFuZCBwYXN0ZSB0aGUgZm9sbG93aW5nIGxpbmUgaW50byAvZXRjL3Byb3RvY29scywKIAogICB1ZHBsaXRlIDEzNiAgICAgVURQLUxpdGUgICAgICAgICMgVURQLUxpdGUgW1JGQyAzODI4XQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BhcnBvcnQtbG93bGV2ZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9wYXJwb3J0LWxvd2xldmVsLnR4dAppbmRleCA4ZjIzMDI0Li4yNjVmY2RjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3BhcnBvcnQtbG93bGV2ZWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcGFycG9ydC1sb3dsZXZlbC50eHQKQEAgLTI1LDcgKzI1LDYgQEAKICAgcGFycG9ydF9vcGVuCiAgIHBhcnBvcnRfY2xvc2UKICAgcGFycG9ydF9kZXZpY2VfaWQKLSAgcGFycG9ydF9kZXZpY2VfbnVtCiAgIHBhcnBvcnRfZGV2aWNlX2Nvb3JkcwogICBwYXJwb3J0X2ZpbmRfY2xhc3MKICAgcGFycG9ydF9maW5kX2RldmljZQpAQCAtNzM1LDcgKzczNCw3IEBACiAKIFNFRSBBTFNPCiAKLXBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlLCBwYXJwb3J0X2RldmljZV9udW0KK3BhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlCiAMCiBwYXJwb3J0X2Nsb3NlIC0gdW5yZWdpc3RlciBkZXZpY2UgZm9yIHBhcnRpY3VsYXIgZGV2aWNlIG51bWJlcgogLS0tLS0tLS0tLS0tLQpAQCAtNzg3LDI5ICs3ODYsNyBAQAogCiBTRUUgQUxTTwogCi1wYXJwb3J0X2ZpbmRfY2xhc3MsIHBhcnBvcnRfZmluZF9kZXZpY2UsIHBhcnBvcnRfZGV2aWNlX251bQotDAotcGFycG9ydF9kZXZpY2VfbnVtIC0gY29udmVydCBkZXZpY2UgY29vcmRpbmF0ZXMgdG8gZGV2aWNlIG51bWJlcgotLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVNZTk9QU0lTCi0KLSNpbmNsdWRlIDxsaW51eC9wYXJwb3J0Lmg+Ci0KLWludCBwYXJwb3J0X2RldmljZV9udW0gKGludCBwYXJwb3J0LCBpbnQgbXV4LCBpbnQgZGFpc3kpOwotCi1ERVNDUklQVElPTgotCi1Db252ZXJ0IGJldHdlZW4gZGV2aWNlIGNvb3JkaW5hdGVzIChwb3J0LCBtdWx0aXBsZXhvciwgZGFpc3kgY2hhaW4KLWFkZHJlc3MpIGFuZCBkZXZpY2UgbnVtYmVyICh6ZXJvLWJhc2VkKS4KLQotUkVUVVJOIFZBTFVFCi0KLURldmljZSBudW1iZXIsIG9yIC0xIGlmIG5vIGRldmljZSBhdCBnaXZlbiBjb29yZGluYXRlcy4KLQotU0VFIEFMU08KLQotcGFycG9ydF9kZXZpY2VfY29vcmRzLCBwYXJwb3J0X29wZW4sIHBhcnBvcnRfZGV2aWNlX2lkCitwYXJwb3J0X2ZpbmRfY2xhc3MsIHBhcnBvcnRfZmluZF9kZXZpY2UKIAwKIHBhcnBvcnRfZGV2aWNlX2Nvb3JkcyAtIGNvbnZlcnQgZGV2aWNlIG51bWJlciB0byBkZXZpY2UgY29vcmRpbmF0ZXMKIC0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODMzLDcgKzgxMCw3IEBACiAKIFNFRSBBTFNPCiAKLXBhcnBvcnRfZGV2aWNlX251bSwgcGFycG9ydF9vcGVuLCBwYXJwb3J0X2RldmljZV9pZAorcGFycG9ydF9vcGVuLCBwYXJwb3J0X2RldmljZV9pZAogDAogcGFycG9ydF9maW5kX2NsYXNzIC0gZmluZCBhIGRldmljZSBieSBpdHMgY2xhc3MKIC0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9iYXNpYy1wbS1kZWJ1Z2dpbmcudHh0CmluZGV4IDFhODVlMmIuLjU3YWVmMmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvYmFzaWMtcG0tZGVidWdnaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2Jhc2ljLXBtLWRlYnVnZ2luZy50eHQKQEAgLTc4LDggKzc4LDggQEAKIEluIGNhc2UgdGhlIFNURCBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtIGV2ZW4gaW4gdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbgogYW5kIGNvbXBpbGluZyBtb3JlIGRyaXZlcnMgYXMgbW9kdWxlcyBpcyBub3QgcHJhY3RpY2FsIG9yIHNvbWUgbW9kdWxlcyBjYW5ub3QKIGJlIHVubG9hZGVkLCB5b3UgY2FuIHVzZSBvbmUgb2YgdGhlIG1vcmUgYWR2YW5jZWQgZGVidWdnaW5nIHRlY2huaXF1ZXMgdG8gZmluZAotdGhlIHByb2JsZW0uICBGaXJzdCwgaWYgdGhlcmUgaXMgYSBzZXJpYWwgcG9ydCBpbiB5b3VyIGJveCwgeW91IGNhbiBzZXQgdGhlCi1DT05GSUdfRElTQUJMRV9DT05TT0xFX1NVU1BFTkQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGFuZCB0cnkgdG8gbG9nIGtlcm5lbAordGhlIHByb2JsZW0uICBGaXJzdCwgaWYgdGhlcmUgaXMgYSBzZXJpYWwgcG9ydCBpbiB5b3VyIGJveCwgeW91IGNhbiBib290IHRoZQora2VybmVsIHdpdGggdGhlICdub19jb25zb2xlX3N1c3BlbmQnIHBhcmFtZXRlciBhbmQgdHJ5IHRvIGxvZyBrZXJuZWwKIG1lc3NhZ2VzIHVzaW5nIHRoZSBzZXJpYWwgY29uc29sZS4gIFRoaXMgbWF5IHByb3ZpZGUgeW91IHdpdGggc29tZSBpbmZvcm1hdGlvbgogYWJvdXQgdGhlIHJlYXNvbnMgb2YgdGhlIHN1c3BlbmQgKHJlc3VtZSkgZmFpbHVyZS4gIEFsdGVybmF0aXZlbHksIGl0IG1heSBiZQogcG9zc2libGUgdG8gdXNlIGEgRmlyZVdpcmUgcG9ydCBmb3IgZGVidWdnaW5nIHdpdGggZmlyZXNjb3BlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ZyZWV6aW5nLW9mLXRhc2tzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MudHh0CmluZGV4IDA0ZGMxY2YuLjM4YjU3MjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvZnJlZXppbmctb2YtdGFza3MudHh0CkBAIC0xOSwxMiArMTksMTMgQEAKIE5hbWVseSwgYXMgdGhlIGZpcnN0IHN0ZXAgb2YgdGhlIGhpYmVybmF0aW9uIHByb2NlZHVyZSB0aGUgZnVuY3Rpb24KIGZyZWV6ZV9wcm9jZXNzZXMoKSAoZGVmaW5lZCBpbiBrZXJuZWwvcG93ZXIvcHJvY2Vzcy5jKSBpcyBjYWxsZWQuICBJdCBleGVjdXRlcwogdHJ5X3RvX2ZyZWV6ZV90YXNrcygpIHRoYXQgc2V0cyBUSUZfRlJFRVpFIGZvciBhbGwgb2YgdGhlIGZyZWV6YWJsZSB0YXNrcyBhbmQKLXNlbmRzIGEgZmFrZSBzaWduYWwgdG8gZWFjaCBvZiB0aGVtLiAgQSB0YXNrIHRoYXQgcmVjZWl2ZXMgc3VjaCBhIHNpZ25hbCBhbmQgaGFzCi1USUZfRlJFRVpFIHNldCwgc2hvdWxkIHJlYWN0IHRvIGl0IGJ5IGNhbGxpbmcgdGhlIHJlZnJpZ2VyYXRvcigpIGZ1bmN0aW9uCi0oZGVmaW5lZCBpbiBrZXJuZWwvcG93ZXIvcHJvY2Vzcy5jKSwgd2hpY2ggc2V0cyB0aGUgdGFzaydzIFBGX0ZST1pFTiBmbGFnLAotY2hhbmdlcyBpdHMgc3RhdGUgdG8gVEFTS19VTklOVEVSUlVQVElCTEUgYW5kIG1ha2VzIGl0IGxvb3AgdW50aWwgUEZfRlJPWkVOIGlzCi1jbGVhcmVkIGZvciBpdC4gIFRoZW4sIHdlIHNheSB0aGF0IHRoZSB0YXNrIGlzICdmcm96ZW4nIGFuZCB0aGVyZWZvcmUgdGhlIHNldCBvZgotZnVuY3Rpb25zIGhhbmRsaW5nIHRoaXMgbWVjaGFuaXNtIGlzIGNhbGxlZCAndGhlIGZyZWV6ZXInICh0aGVzZSBmdW5jdGlvbnMgYXJlCitlaXRoZXIgd2FrZXMgdGhlbSB1cCwgaWYgdGhleSBhcmUga2VybmVsIHRocmVhZHMsIG9yIHNlbmRzIGZha2Ugc2lnbmFscyB0byB0aGVtLAoraWYgdGhleSBhcmUgdXNlciBzcGFjZSBwcm9jZXNzZXMuICBBIHRhc2sgdGhhdCBoYXMgVElGX0ZSRUVaRSBzZXQsIHNob3VsZCByZWFjdAordG8gaXQgYnkgY2FsbGluZyB0aGUgZnVuY3Rpb24gY2FsbGVkIHJlZnJpZ2VyYXRvcigpIChkZWZpbmVkIGluCitrZXJuZWwvcG93ZXIvcHJvY2Vzcy5jKSwgd2hpY2ggc2V0cyB0aGUgdGFzaydzIFBGX0ZST1pFTiBmbGFnLCBjaGFuZ2VzIGl0cyBzdGF0ZQordG8gVEFTS19VTklOVEVSUlVQVElCTEUgYW5kIG1ha2VzIGl0IGxvb3AgdW50aWwgUEZfRlJPWkVOIGlzIGNsZWFyZWQgZm9yIGl0LgorVGhlbiwgd2Ugc2F5IHRoYXQgdGhlIHRhc2sgaXMgJ2Zyb3plbicgYW5kIHRoZXJlZm9yZSB0aGUgc2V0IG9mIGZ1bmN0aW9ucworaGFuZGxpbmcgdGhpcyBtZWNoYW5pc20gaXMgcmVmZXJyZWQgdG8gYXMgJ3RoZSBmcmVlemVyJyAodGhlc2UgZnVuY3Rpb25zIGFyZQogZGVmaW5lZCBpbiBrZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGFuZCBpbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaCkuICBVc2VyIHNwYWNlCiBwcm9jZXNzZXMgYXJlIGdlbmVyYWxseSBmcm96ZW4gYmVmb3JlIGtlcm5lbCB0aHJlYWRzLgogCkBAIC0zNSwyMSArMzYsMjcgQEAKIAogRm9yIHVzZXIgc3BhY2UgcHJvY2Vzc2VzIHRyeV90b19mcmVlemUoKSBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZQogc2lnbmFsLWhhbmRsaW5nIGNvZGUsIGJ1dCB0aGUgZnJlZXphYmxlIGtlcm5lbCB0aHJlYWRzIG5lZWQgdG8gY2FsbCBpdAotZXhwbGljaXRseSBpbiBzdWl0YWJsZSBwbGFjZXMuICBUaGUgY29kZSB0byBkbyB0aGlzIG1heSBsb29rIGxpa2UgdGhlIGZvbGxvd2luZzoKK2V4cGxpY2l0bHkgaW4gc3VpdGFibGUgcGxhY2VzIG9yIHVzZSB0aGUgd2FpdF9ldmVudF9mcmVlemFibGUoKSBvcgord2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCgpIG1hY3JvcyAoZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaCkKK3RoYXQgY29tYmluZSBpbnRlcnJ1cHRpYmxlIHNsZWVwIHdpdGggY2hlY2tpbmcgaWYgVElGX0ZSRUVaRSBpcyBzZXQgYW5kIGNhbGxpbmcKK3RyeV90b19mcmVlemUoKS4gIFRoZSBtYWluIGxvb3Agb2YgYSBmcmVlemFibGUga2VybmVsIHRocmVhZCBtYXkgbG9vayBsaWtlIHRoZQorZm9sbG93aW5nIG9uZToKIAorCXNldF9mcmVlemFibGUoKTsKIAlkbyB7CiAJCWh1Yl9ldmVudHMoKTsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGtodWJkX3dhaXQsCi0JCQkJCSFsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpOwotCQl0cnlfdG9fZnJlZXplKCk7Ci0JfSB3aGlsZSAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKTsKKwkJd2FpdF9ldmVudF9mcmVlemFibGUoa2h1YmRfd2FpdCwKKwkJCQkhbGlzdF9lbXB0eSgmaHViX2V2ZW50X2xpc3QpIHx8CisJCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpKTsKKwl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZodWJfZXZlbnRfbGlzdCkpOwogCiAoZnJvbSBkcml2ZXJzL3VzYi9jb3JlL2h1Yi5jOjpodWJfdGhyZWFkKCkpLgogCiBJZiBhIGZyZWV6YWJsZSBrZXJuZWwgdGhyZWFkIGZhaWxzIHRvIGNhbGwgdHJ5X3RvX2ZyZWV6ZSgpIGFmdGVyIHRoZSBmcmVlemVyIGhhcwogc2V0IFRJRl9GUkVFWkUgZm9yIGl0LCB0aGUgZnJlZXppbmcgb2YgdGFza3Mgd2lsbCBmYWlsIGFuZCB0aGUgZW50aXJlCiBoaWJlcm5hdGlvbiBvcGVyYXRpb24gd2lsbCBiZSBjYW5jZWxsZWQuICBGb3IgdGhpcyByZWFzb24sIGZyZWV6YWJsZSBrZXJuZWwKLXRocmVhZHMgbXVzdCBjYWxsIHRyeV90b19mcmVlemUoKSBzb21ld2hlcmUuCit0aHJlYWRzIG11c3QgY2FsbCB0cnlfdG9fZnJlZXplKCkgc29tZXdoZXJlIG9yIHVzZSBvbmUgb2YgdGhlCit3YWl0X2V2ZW50X2ZyZWV6YWJsZSgpIGFuZCB3YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KCkgbWFjcm9zLgogCiBBZnRlciB0aGUgc3lzdGVtIG1lbW9yeSBzdGF0ZSBoYXMgYmVlbiByZXN0b3JlZCBmcm9tIGEgaGliZXJuYXRpb24gaW1hZ2UgYW5kCiBkZXZpY2VzIGhhdmUgYmVlbiByZWluaXRpYWxpemVkLCB0aGUgZnVuY3Rpb24gdGhhd19wcm9jZXNzZXMoKSBpcyBjYWxsZWQgaW4KQEAgLTgxLDcgKzg4LDE2IEBACiBUaGUgbWFqb3JpdHkgb2YgdGhlc2UgYXJlIHVzZXIgc3BhY2UgcHJvY2Vzc2VzLCBidXQgaWYgYW55IG9mIHRoZSBrZXJuZWwgdGhyZWFkcwogbWF5IGNhdXNlIHNvbWV0aGluZyBsaWtlIHRoaXMgdG8gaGFwcGVuLCB0aGV5IGhhdmUgdG8gYmUgZnJlZXphYmxlLgogCi0yLiBUaGUgc2Vjb25kIHJlYXNvbiBpcyB0byBwcmV2ZW50IHVzZXIgc3BhY2UgcHJvY2Vzc2VzIGFuZCBzb21lIGtlcm5lbCB0aHJlYWRzCisyLiBOZXh0LCB0byBjcmVhdGUgdGhlIGhpYmVybmF0aW9uIGltYWdlIHdlIG5lZWQgdG8gZnJlZSBhIHN1ZmZpY2llbnQgYW1vdW50IG9mCittZW1vcnkgKGFwcHJveGltYXRlbHkgNTAlIG9mIGF2YWlsYWJsZSBSQU0pIGFuZCB3ZSBuZWVkIHRvIGRvIHRoYXQgYmVmb3JlCitkZXZpY2VzIGFyZSBkZWFjdGl2YXRlZCwgYmVjYXVzZSB3ZSBnZW5lcmFsbHkgbmVlZCB0aGVtIGZvciBzd2FwcGluZyBvdXQuICBUaGVuLAorYWZ0ZXIgdGhlIG1lbW9yeSBmb3IgdGhlIGltYWdlIGhhcyBiZWVuIGZyZWVkLCB3ZSBkb24ndCB3YW50IHRhc2tzIHRvIGFsbG9jYXRlCithZGRpdGlvbmFsIG1lbW9yeSBhbmQgd2UgcHJldmVudCB0aGVtIGZyb20gZG9pbmcgdGhhdCBieSBmcmVlemluZyB0aGVtIGVhcmxpZXIuCitbT2YgY291cnNlLCB0aGlzIGFsc28gbWVhbnMgdGhhdCBkZXZpY2UgZHJpdmVycyBzaG91bGQgbm90IGFsbG9jYXRlIHN1YnN0YW50aWFsCithbW91bnRzIG9mIG1lbW9yeSBmcm9tIHRoZWlyIC5zdXNwZW5kKCkgY2FsbGJhY2tzIGJlZm9yZSBoaWJlcm5hdGlvbiwgYnV0IHRoaXMKK2lzIGUgc2VwYXJhdGUgaXNzdWUuXQorCiszLiBUaGUgdGhpcmQgcmVhc29uIGlzIHRvIHByZXZlbnQgdXNlciBzcGFjZSBwcm9jZXNzZXMgYW5kIHNvbWUga2VybmVsIHRocmVhZHMKIGZyb20gaW50ZXJmZXJpbmcgd2l0aCB0aGUgc3VzcGVuZGluZyBhbmQgcmVzdW1pbmcgb2YgZGV2aWNlcy4gIEEgdXNlciBzcGFjZQogcHJvY2VzcyBydW5uaW5nIG9uIGEgc2Vjb25kIENQVSB3aGlsZSB3ZSBhcmUgc3VzcGVuZGluZyBkZXZpY2VzIG1heSwgZm9yCiBleGFtcGxlLCBiZSB0cm91Ymxlc29tZSBhbmQgd2l0aG91dCB0aGUgZnJlZXppbmcgb2YgdGFza3Mgd2Ugd291bGQgbmVlZCBzb21lCkBAIC0xMTEsNyArMTI3LDcgQEAKIHRoYXdlZCBhZnRlciB0aGUgZHJpdmVyJ3MgLnJlc3VtZSgpIGNhbGxiYWNrIGhhcyBydW4sIHNvIGl0IHdvbid0IGJlIGFjY2Vzc2luZwogdGhlIGRldmljZSB3aGlsZSBpdCdzIHN1c3BlbmRlZC4KIAotMy4gQW5vdGhlciByZWFzb24gZm9yIGZyZWV6aW5nIHRhc2tzIGlzIHRvIHByZXZlbnQgdXNlciBzcGFjZSBwcm9jZXNzZXMgZnJvbQorNC4gQW5vdGhlciByZWFzb24gZm9yIGZyZWV6aW5nIHRhc2tzIGlzIHRvIHByZXZlbnQgdXNlciBzcGFjZSBwcm9jZXNzZXMgZnJvbQogcmVhbGl6aW5nIHRoYXQgaGliZXJuYXRpb24gKG9yIHN1c3BlbmQpIG9wZXJhdGlvbiB0YWtlcyBwbGFjZS4gIElkZWFsbHksIHVzZXIKIHNwYWNlIHByb2Nlc3NlcyBzaG91bGQgbm90IG5vdGljZSB0aGF0IHN1Y2ggYSBzeXN0ZW0td2lkZSBvcGVyYXRpb24gaGFzIG9jY3VycmVkCiBhbmQgc2hvdWxkIGNvbnRpbnVlIHJ1bm5pbmcgd2l0aG91dCBhbnkgcHJvYmxlbXMgYWZ0ZXIgdGhlIHJlc3RvcmUgKG9yIHJlc3VtZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlci9pbnRlcmZhY2UudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9pbnRlcmZhY2UudHh0CmluZGV4IGZkNTE5MmEuLmU2NzIxMWYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvaW50ZXJmYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL2ludGVyZmFjZS50eHQKQEAgLTIwLDcgKzIwLDcgQEAKIC9zeXMvcG93ZXIvZGlzayBjb250cm9scyB0aGUgb3BlcmF0aW5nIG1vZGUgb2YgdGhlIHN1c3BlbmQtdG8tZGlzawogbWVjaGFuaXNtLiBTdXNwZW5kLXRvLWRpc2sgY2FuIGJlIGhhbmRsZWQgaW4gc2V2ZXJhbCB3YXlzLiBXZSBoYXZlIGEKIGZldyBvcHRpb25zIGZvciBwdXR0aW5nIHRoZSBzeXN0ZW0gdG8gc2xlZXAgLSB1c2luZyB0aGUgcGxhdGZvcm0gZHJpdmVyCi0oZS5nLiBBQ1BJIG9yIG90aGVyIHBtX29wcyksIHBvd2VyaW5nIG9mZiB0aGUgc3lzdGVtIG9yIHJlYm9vdGluZyB0aGUKKyhlLmcuIEFDUEkgb3Igb3RoZXIgc3VzcGVuZF9vcHMpLCBwb3dlcmluZyBvZmYgdGhlIHN5c3RlbSBvciByZWJvb3RpbmcgdGhlCiBzeXN0ZW0gKGZvciB0ZXN0aW5nKS4KIAogQWRkaXRpb25hbGx5LCAvc3lzL3Bvd2VyL2Rpc2sgY2FuIGJlIHVzZWQgdG8gdHVybiBvbiBvbmUgb2YgdGhlIHR3byB0ZXN0aW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC1hbmQtc3dhcC1maWxlcy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC1hbmQtc3dhcC1maWxlcy50eHQKaW5kZXggMDZmOTExYS4uZjI4MTg4NiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlci9zd3N1c3AtYW5kLXN3YXAtZmlsZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvc3dzdXNwLWFuZC1zd2FwLWZpbGVzLnR4dApAQCAtMzksNyArMzksNyBAQAogd2hlcmUgPHN3YXBfZmlsZV9wYXJ0aXRpb24+IGlzIHRoZSBwYXJ0aXRpb24gb24gd2hpY2ggdGhlIHN3YXAgZmlsZSBpcyBsb2NhdGVkCiBhbmQgPHN3YXBfZmlsZV9vZmZzZXQ+IGlzIHRoZSBvZmZzZXQgb2YgdGhlIHN3YXAgaGVhZGVyIGRldGVybWluZWQgYnkgdGhlCiBhcHBsaWNhdGlvbiBpbiAyKSAob2YgY291cnNlLCB0aGlzIHN0ZXAgbWF5IGJlIGNhcnJpZWQgb3V0IGF1dG9tYXRpY2FsbHkKLWJ5IHRoZSBzYW1lIGFwcGxpY2F0aW9uIHRoYXQgZGV0ZXJtaWVzIHRoZSBzd2FwIGZpbGUncyBoZWFkZXIgb2Zmc2V0IHVzaW5nIHRoZQorYnkgdGhlIHNhbWUgYXBwbGljYXRpb24gdGhhdCBkZXRlcm1pbmVzIHRoZSBzd2FwIGZpbGUncyBoZWFkZXIgb2Zmc2V0IHVzaW5nIHRoZQogRklCTUFQIGlvY3RsKQogCiBPUgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2VlaC1wY2ktZXJyb3ItcmVjb3ZlcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2VlaC1wY2ktZXJyb3ItcmVjb3ZlcnkudHh0CmluZGV4IDQ1MzBkMWIuLmRmN2FmZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9lZWgtcGNpLWVycm9yLXJlY292ZXJ5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZWVoLXBjaS1lcnJvci1yZWNvdmVyeS50eHQKQEAgLTM2LDggKzM2LDggQEAKIEVFSCB3YXMgb3JpZ2luYWxseSBkZXNpZ25lZCB0byBndWFyZCBhZ2FpbnN0IGhhcmR3YXJlIGZhaWx1cmUsIHN1Y2gKIGFzIFBDSSBjYXJkcyBkeWluZyBmcm9tIGhlYXQsIGh1bWlkaXR5LCBkdXN0LCB2aWJyYXRpb24gYW5kIGJhZAogZWxlY3RyaWNhbCBjb25uZWN0aW9ucy4gVGhlIHZhc3QgbWFqb3JpdHkgb2YgRUVIIGVycm9ycyBzZWVuIGluCi0icmVhbCBsaWZlIiBhcmUgZHVlIHRvIGVpdGhyIHBvb3JseSBzZWF0ZWQgUENJIGNhcmRzLCBvciwKLXVuZm9ydHVuYXRlbHkgcXVpdGUgY29tbW9ubHksIGR1ZSBkZXZpY2UgZHJpdmVyIGJ1Z3MsIGRldmljZSBmaXJtd2FyZQorInJlYWwgbGlmZSIgYXJlIGR1ZSB0byBlaXRoZXIgcG9vcmx5IHNlYXRlZCBQQ0kgY2FyZHMsIG9yLAordW5mb3J0dW5hdGVseSBxdWl0ZSBjb21tb25seSwgZHVlIHRvIGRldmljZSBkcml2ZXIgYnVncywgZGV2aWNlIGZpcm13YXJlCiBidWdzLCBhbmQgc29tZXRpbWVzIFBDSSBjYXJkIGhhcmR3YXJlIGJ1Z3MuCiAKIFRoZSBtb3N0IGNvbW1vbiBzb2Z0d2FyZSBidWcsIGlzIG9uZSB0aGF0IGNhdXNlcyB0aGUgZGV2aWNlIHRvCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvbXBjNTJ4eC1kZXZpY2UtdHJlZS1iaW5kaW5ncy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvbXBjNTJ4eC1kZXZpY2UtdHJlZS1iaW5kaW5ncy50eHQKaW5kZXggZTU5ZmNiYi4uNWY3ZDUzNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL21wYzUyeHgtZGV2aWNlLXRyZWUtYmluZGluZ3MudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9tcGM1Mnh4LWRldmljZS10cmVlLWJpbmRpbmdzLnR4dApAQCAtMTcsMTIgKzE3LDEyIEBACiBkZXNjcmliZXMgd2hhdCBkZXZpY2VzIGFyZSBwcmVzZW50IG9uIHRoZSBib2FyZCBhbmQgaG93IHRoZXkgYXJlCiBjb25uZWN0ZWQuICBUaGUgZGV2aWNlIHRyZWUgY2FuIGVpdGhlciBiZSBwYXNzZWQgYXMgYSBiaW5hcnkgYmxvYiAoYXMKIGRlc2NyaWJlZCBpbiBEb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dCksIG9yIHBhc3NlZAotYnkgT3BlbiBGaXJtYXJlIChJRUVFIDEyNzUpIGNvbXBhdGlibGUgZmlybXdhcmUgdXNpbmcgYW4gT0YgY29tcGF0aWJsZQorYnkgT3BlbiBGaXJtd2FyZSAoSUVFRSAxMjc1KSBjb21wYXRpYmxlIGZpcm13YXJlIHVzaW5nIGFuIE9GIGNvbXBhdGlibGUKIGNsaWVudCBpbnRlcmZhY2UgQVBJLgogCiBUaGlzIGRvY3VtZW50IHNwZWNpZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9uIHRoZSBkZXZpY2UtdHJlZSBmb3IgbXBjNTIwMAogYmFzZWQgYm9hcmRzLiAgVGhlc2UgcmVxdWlyZW1lbnRzIGFyZSBhYm92ZSBhbmQgYmV5b25kIHRoZSBkZXRhaWxzCi1zcGVjaWZpZWQgaW4gZWl0aGVyIHRoZSBPcGVuRmlybXdhcmUgc3BlYyBvciBib290aW5nLXdpdGhvdXQtb2YudHh0CitzcGVjaWZpZWQgaW4gZWl0aGVyIHRoZSBPcGVuIEZpcm13YXJlIHNwZWMgb3IgYm9vdGluZy13aXRob3V0LW9mLnR4dAogCiBBbGwgbmV3IG1wYzUyMDAtYmFzZWQgYm9hcmRzIGFyZSBleHBlY3RlZCB0byBtYXRjaCB0aGlzIGRvY3VtZW50LiAgSW4KIGNhc2VzIHdoZXJlIHRoaXMgZG9jdW1lbnQgaXMgbm90IHN1ZmZpY2llbnQgdG8gc3VwcG9ydCBhIG5ldyBib2FyZCBwb3J0LApAQCAtNzMsOCArNzMsOCBAQAogc2VsZWN0ZWQuCiAKIFRoZSBzcGxpdCBiZXR3ZWVuIHRoZSBNUEM1MjAwIGFuZCB0aGUgTVBDNTIwMEIgbGVhdmVzIGEgYml0IG9mIGEKLWNvbm51bmRydW0uICBIb3cgc2hvdWxkIHRoZSBjb21wYXRpYmxlIHByb3BlcnR5IGJlIHNldCB1cCB0byBwcm92aWRlCi1tYXhpbXVtIGNvbXBhdGFiaWxpdHkgaW5mb3JtYXRpb247IGJ1dCBzdGlsbCBhY3VyYXRlbHkgZGVzY3JpYmUgdGhlCitjb251bmRydW0uICBIb3cgc2hvdWxkIHRoZSBjb21wYXRpYmxlIHByb3BlcnR5IGJlIHNldCB1cCB0byBwcm92aWRlCittYXhpbXVtIGNvbXBhdGliaWxpdHkgaW5mb3JtYXRpb247IGJ1dCBzdGlsbCBhY2N1cmF0ZWx5IGRlc2NyaWJlIHRoZQogY2hpcD8gIEZvciB0aGUgTVBDNTIwMDsgdGhlIGFuc3dlciBpcyBlYXN5LiAgTW9zdCBvZiB0aGUgU29DIGRldmljZXMKIG9yaWdpbmFsbHkgYXBwZWFyZWQgb24gdGhlIE1QQzUyMDAuICBTaW5jZSB0aGV5IGRpZG4ndCBleGlzdCBhbnl3aGVyZQogZWxzZTsgdGhlIDUyMDAgY29tcGF0aWJsZSBwcm9wZXJ0aWVzIHdpbGwgY29udGFpbiBvbmx5IG9uZSBpdGVtOwpAQCAtODQsNyArODQsNyBAQAogc2lsaWNvbiBidWdzIGFuZCBpdCBhZGRzIGEgc21hbGwgbnVtYmVyIG9mIGVuaGFuY2VtZW50cy4gIE1vc3Qgb2YgdGhlCiBkZXZpY2VzIGVpdGhlciBwcm92aWRlIGV4YWN0bHkgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIG9uIHRoZSA1MjAwLiAgQSBmZXcKIGRldmljZXMgaGF2ZSBleHRyYSBmdW5jdGlvbnMgYnV0IHN0aWxsIGhhdmUgYSBiYWNrd2FyZHMgY29tcGF0aWJsZSBtb2RlLgotVG8gZXhwcmVzcyB0aGlzIGluZm9tYXRpb24gYXMgY29tcGxldGVseSBhcyBwb3NzaWJsZSwgNTIwMEIgZGV2aWNlIHRyZWVzCitUbyBleHByZXNzIHRoaXMgaW5mb3JtYXRpb24gYXMgY29tcGxldGVseSBhcyBwb3NzaWJsZSwgNTIwMEIgZGV2aWNlIHRyZWVzCiBzaG91bGQgaGF2ZSB0d28gaXRlbXMgaW4gdGhlIGNvbXBhdGlibGUgbGlzdDsKICJtcGM1MjAwYi08ZGV2aWNlPlwwbXBjNTIwMC08ZGV2aWNlPiIuICBJdCBpcyAqc3Ryb25nbHkqIHJlY29tbWVuZGVkCiB0aGF0IDUyMDBCIGRldmljZSB0cmVlcyBmb2xsb3cgdGhpcyBjb252ZW50aW9uIChpbnN0ZWFkIG9mIG9ubHkgbGlzdGluZwpAQCAtMTk5LDcgKzE5OSw3IEBACiBhdGFAPGFkZHI+CWF0YQkJbXBjNTIwMC1hdGEJICBJREUgQVRBIGludGVyZmFjZQogaTJjQDxhZGRyPglpMmMJCW1wYzUyMDAtaTJjCSAgSTJDIGNvbnRyb2xsZXIKIHVzYkA8YWRkcj4JdXNiLW9oY2ktYmUJbXBjNTIwMC1vaGNpLG9oY2ktYmUJVVNCIGNvbnRyb2xsZXIKLXhsYkA8YWRkcj4JeGxiCQltcGM1MjAwLXhsYgkgIFhMQiBhcmJyaXRyYXRvcgoreGxiQDxhZGRyPgl4bGIJCW1wYzUyMDAteGxiCSAgWExCIGFyYml0cmF0b3IKIAogSW1wb3J0YW50IGNoaWxkIG5vZGUgcHJvcGVydGllcwogbmFtZQkJdHlwZQkJZGVzY3JpcHRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3OXh4LnR4dAppbmRleCA2YWE5YTg5Li42ODNjY2FlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljNzl4eC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzc5eHgudHh0CkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICAgICAgICBsaXN0IHNpemUgdG8gYXZvaWQgU0NTSSBtYWxsb2MgcG9vbCBmcmFnbWVudGF0aW9uLgogICAgICAgICAtIENsZWFudXAgY2hhbm5lbCBkaXNwbGF5IGluIG91ciAvcHJvYyBvdXRwdXQuCiAgICAgICAgIC0gV29ya2Fyb3VuZCBkdXBsaWNhdGUgZGV2aWNlIGVudHJpZXMgaW4gdGhlIG1pZC1sYXllcgotICAgICAgICAgIGRldmxpY2UgbGlzdCBkdXJpbmcgYWRkLXNpbmdsZS1kZXZpY2UuCisgICAgICAgICAgZGV2aWNlIGxpc3QgZHVyaW5nIGFkZC1zaW5nbGUtZGV2aWNlLgogCiAgICAxLjMuNiAoTWFyY2ggMjh0aCwgMjAwMykKICAgICAgICAgLSBDb3JyZWN0IGEgZG91YmxlIGZyZWUgaW4gdGhlIERvbWFpbiBWYWxpZGF0aW9uIGNvZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eC50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYWljN3h4eC50eHQKaW5kZXggNWYzNGQyYi4uYjdlMjM4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FpYzd4eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2NzaS9haWM3eHh4LnR4dApAQCAtMTU5LDcgKzE1OSw3IEBACiAgICAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIDIuNS5YJ3Mgc2NzaV9yZXBvcnRfZGV2aWNlX3Jlc2V0KCkuCiAKICAgIDYuMi4zNCAoTWF5IDV0aCwgMjAwMykKLSAgICAgICAgLSBGaXggbG9ja2luZyByZWdyZXNzaW9uIGluc3Ryb2R1Y2VkIGluIDYuMi4yOSB0aGF0CisgICAgICAgIC0gRml4IGxvY2tpbmcgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGluIDYuMi4yOSB0aGF0CiAgICAgICAgICAgY291bGQgY2F1c2UgYSBsb2NrIG9yZGVyIHJldmVyc2FsIGJldHdlZW4gdGhlIGlvX3JlcXVlc3RfbG9jawogICAgICAgICAgIGFuZCBvdXIgcGVyLXNvZnRjIGxvY2suICBUaGlzIHdhcyBvbmx5IHBvc3NpYmxlIG9uIFJIOSwKICAgICAgICAgICBTdVNFLCBhbmQga2VybmVsLm9yZyAyLjQuWCBrZXJuZWxzLgpAQCAtMjY0LDcgKzI2NCw3IEBACiAgICAgICAgICAgICAgIE9wdGlvbjogdGFnX2luZm86e3t2YWx1ZVssdmFsdWUuLi5dfVsse3ZhbHVlWyx2YWx1ZS4uLl19Li4uXX0KICAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgdGhlIHBlci10YXJnZXQgdGFnZ2VkIHF1ZXVlIGRlcHRoIG9uIGEKICAgICAgICAgICAgICAgICAgICAgICBwZXIgY29udHJvbGxlciBiYXNpcy4gIEJvdGggY29udHJvbGxlcnMgYW5kIHRhcmdldHMKLSAgICAgICAgICAgICAgICAgICAgICBtYXkgYmUgb21taXR0ZWQgaW5kaWNhdGluZyB0aGF0IHRoZXkgc2hvdWxkIHJldGFpbgorICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdCB0aGV5IHNob3VsZCByZXRhaW4KICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGVmYXVsdCB0YWcgZGVwdGguCiAgICAgICAgICAgICBFeGFtcGxlczogdGFnX2luZm86e3sxNiwzMiwzMiw2NCw4LDgsLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyfQogICAgICAgICAgICAgICAgICAgICAgICAgT24gQ29udHJvbGxlciAwCkBAIC0yOTAsNyArMjkwLDcgQEAKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgIE9wdGlvbjogZHY6IHt2YWx1ZVssdmFsdWUuLi5dfSAKICAgICAgICAgICBEZWZpbml0aW9uOiBTZXQgRG9tYWluIFZhbGlkYXRpb24gUG9saWN5IG9uIGEgcGVyLWNvbnRyb2xsZXIgYmFzaXMuCi0gICAgICAgICAgICAgICAgICAgICAgQ29udHJvbGxlcnMgbWF5IGJlIG9tbWl0dGVkIGluZGljYXRpbmcgdGhhdAorICAgICAgICAgICAgICAgICAgICAgIENvbnRyb2xsZXJzIG1heSBiZSBvbWl0dGVkIGluZGljYXRpbmcgdGhhdAogICAgICAgICAgICAgICAgICAgICAgIHRoZXkgc2hvdWxkIHJldGFpbiB0aGUgZGVmYXVsdCByZWFkIHN0cmVhbWluZyBzZXR0aW5nLgogICAgICAgICAgICAgIEV4YW1wbGU6IGR2OnstMSwwLCwxLDEsMH0KICAgICAgICAgICAgICAgICAgICAgICAgIE9uIENvbnRyb2xsZXIgMCBsZWF2ZSBEViBhdCBpdHMgZGVmYXVsdCBzZXR0aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FyY21zcl9zcGVjLnR4dCBiL0RvY3VtZW50YXRpb24vc2NzaS9hcmNtc3Jfc3BlYy50eHQKaW5kZXggNWUwMDQyMy4uNDVkOTQ4MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zY3NpL2FyY21zcl9zcGVjLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvYXJjbXNyX3NwZWMudHh0CkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKioJVXNhZ2Ugb2YgSU9QMzMxIGFkYXB0ZXIKICoqCShBbGwgSW4vT3V0IGlzIGluIElPUDMzMSdzIHZpZXcpCi0qKgkxLiBNZXNzYWdlIDAgLS0+IEluaXRUaHJlYWQgbWVzc2FnZSBhbmQgcmV0cnVuIGNvZGUKKyoqCTEuIE1lc3NhZ2UgMCAtLT4gSW5pdFRocmVhZCBtZXNzYWdlIGFuZCByZXR1cm4gY29kZQogKioJMi4gRG9vcmJlbGwgaXMgdXNlZCBmb3IgUlMtMjMyIGVtdWxhdGlvbgogKioJCWluRG9vckJlbGwgOiAgICBiaXQwIC0tIGRhdGEgaW4gcmVhZHkKICoqCQkJKERSSVZFUiBEQVRBIFdSSVRFIE9LKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL2libW1jYS50eHQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dAppbmRleCBhMDhlMjI1Li5hODEwNDIxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvaWJtbWNhLnR4dApAQCAtMjEsNyArMjEsNyBAQAogICAgdmVyc2lvbnMgb2xkZXIgdGhhbiA0LjAgZG8gbm90IHdvcmsgd2l0aCBrZXJuZWxzIDIuNC4wIG9yIGxhdGVyISBJZiB5b3UKICAgIHRyeSB0byBjb21waWxlIHlvdXIga2VybmVsIHdpdGggdGhlIHdyb25nIGRyaXZlciBzb3VyY2UsIHRoZSAKICAgIGNvbXBpbGF0aW9uIGlzIGFib3J0ZWQgYW5kIHlvdSBnZXQgYSBjb3JyZXNwb25kaW5nIGVycm9yIG1lc3NhZ2UuIFRoaXMgaXMKLSAgIG5vIGJ1ZyBpbiB0aGUgZHJpdmVyLiBJdCBwcmV2ZW50cyB5b3UgZnJvbSB1c2luZyB0aGUgd3Jvbmcgc291cmNlY29kZQorICAgbm8gYnVnIGluIHRoZSBkcml2ZXI7IGl0IHByZXZlbnRzIHlvdSBmcm9tIHVzaW5nIHRoZSB3cm9uZyBzb3VyY2UgY29kZQogICAgd2l0aCB0aGUgd3Jvbmcga2VybmVsIHZlcnNpb24uCiAKICAgIEF1dGhvcnMgb2YgdGhpcyBEcml2ZXIKQEAgLTU4LDcgKzU4LDcgQEAKICAgIDUgVXNlcnMnIE1hbnVhbAogICAgICA1LjEgQ29tbWFuZGxpbmUgUGFyYW1ldGVycwogICAgICA1LjIgVHJvdWJsZXNob290aW5nCi0gICAgIDUuMyBCdWdyZXBvcnRzCisgICAgIDUuMyBCdWcgcmVwb3J0cwogICAgICA1LjQgU3VwcG9ydCBXV1ctcGFnZQogICAgNiBSZWZlcmVuY2VzCiAgICA3IENyZWRpdHMgdG8KQEAgLTcxLDEzICs3MSwxMyBAQAogCiAgICAxIEFic3RyYWN0CiAgICAtLS0tLS0tLS0tCi0gICBUaGlzIFJFQURNRS1maWxlIGRlc2NyaWJlcyB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIGxvdyBsZXZlbCBkcml2ZXIgZm9yIAotICAgTGludXguIFRoZSBkZXNjcmlwdGlvbnMgd2hpY2ggd2VyZSBmb3JtZXJseSBrZXB0IGluIHRoZSBzb3VyY2UtY29kZSBoYXZlIAotICAgYmVlbiB0YWtlbiBvdXQgdG8gdGhpcyBmaWxlIHRvIGVhc2lmeSB0aGUgY29kZXMnIHJlYWRhYmlsaXR5LiBUaGUgZHJpdmVyIAorICAgVGhpcyBSRUFETUUtZmlsZSBkZXNjcmliZXMgdGhlIElCTSBTQ1NJLXN1YnN5c3RlbSBsb3cgbGV2ZWwgZHJpdmVyIGZvcgorICAgTGludXguIFRoZSBkZXNjcmlwdGlvbnMgd2hpY2ggd2VyZSBmb3JtZXJseSBrZXB0IGluIHRoZSBzb3VyY2UgY29kZSBoYXZlCisgICBiZWVuIHRha2VuIG91dCBvZiB0aGlzIGZpbGUgdG8gc2ltcGxpZnkgdGhlIGNvZGVzIHJlYWRhYmlsaXR5LiBUaGUgZHJpdmVyCiAgICBkZXNjcmlwdGlvbiBoYXMgYmVlbiB1cGRhdGVkLCBhcyBtb3N0IG9mIHRoZSBmb3JtZXIgZGVzY3JpcHRpb24gd2FzIGFscmVhZHkKLSAgIHF1aXRlIG91dGRhdGVkLiBUaGUgaGlzdG9yeSBvZiB0aGUgZHJpdmVyIGRldmVsb3BtZW50IGlzIGFsc28ga2VwdCBpbnNpZGUgCi0gICBoZXJlLiBNdWx0aXBsZSBoaXN0b3JpY2FsIGRldmVsb3BtZW50cyBoYXZlIGJlZW4gc3VtbWFyaXplZCB0byBzaG9ydGVuIHRoZSAKLSAgIHRleHRzaXplIGEgYml0LiBBdCB0aGUgZW5kIG9mIHRoaXMgZmlsZSB5b3UgY2FuIGZpbmQgYSBzbWFsbCBtYW51YWwgZm9yIAorICAgcXVpdGUgb3V0ZGF0ZWQuIFRoZSBoaXN0b3J5IG9mIHRoZSBkcml2ZXIgZGV2ZWxvcG1lbnQgaXMgYWxzbyBrZXB0IGluc2lkZQorICAgaGVyZS4gTXVsdGlwbGUgaGlzdG9yaWNhbCBkZXZlbG9wbWVudHMgaGF2ZSBiZWVuIHN1bW1hcml6ZWQgdG8gc2hvcnRlbiB0aGUKKyAgIHRleHQgc2l6ZSBhIGJpdC4gQXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUgeW91IGNhbiBmaW5kIGEgc21hbGwgbWFudWFsIGZvcgogICAgdGhpcyBkcml2ZXIgYW5kIGhpbnRzIHRvIGdldCBpdCBydW5uaW5nIG9uIHlvdXIgbWFjaGluZS4KIAogICAgMiBEcml2ZXIgRGVzY3JpcHRpb24KQEAgLTE4Niw3ICsxODYsNyBAQAogICAgYmV0d2VlbiAwIGFuZCA3KS4gVGhlIElCTSBTQ1NJLTIgRi9XIGFkYXB0ZXIgb2ZmZXJzIHRoaXMgb24gdXAgdG8gdHdvCiAgICBidXNzZXMgYW5kIHByb3ZpZGVzIHN1cHBvcnQgZm9yIDMwIGxvZ2ljYWwgZGV2aWNlcyBhdCB0aGUgc2FtZSB0aW1lLCB3aGVyZQogICAgaW4gd2lkZS1hZGRyZXNzaW5nIG1vZGUgeW91IGNhbiBoYXZlIDE2IHB1bnMgd2l0aCAzMiBsdW5zIG9uIGVhY2ggZGV2aWNlLgotICAgVGhpcyBzZWN0aW9uIGRleHJpYmVzIHlvdSB0aGUgaGFuZGxpbmcgb2YgZGV2aWNlcyBvbiBub24tRi9XIGFkYXB0ZXJzLgorICAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgaGFuZGxpbmcgb2YgZGV2aWNlcyBvbiBub24tRi9XIGFkYXB0ZXJzLgogICAgSnVzdCBpbWFnaW5lLCB0aGF0IHlvdSBjYW4gaGF2ZSAxNiAqIDMyID0gNTEyIGRldmljZXMgb24gYSBGL1cgYWRhcHRlcgogICAgd2hpY2ggbWVhbnMgYSBsb3Qgb2YgcG9zc2libGUgZGV2aWNlcyBmb3Igc3VjaCBhIHNtYWxsIG1hY2hpbmUuCiAKQEAgLTIwOSwxMCArMjA5LDEwIEBACiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgT25lIGNvbnNlcXVlbmNlIG9mIGluZm9ybWF0aW9uIGhpZGluZyBpcyB0aGF0IHRoZSByZWFsIChwdW4sbHVuKSAgICAKICAgIG51bWJlcnMgYXJlIGFsc28gaGlkZGVuLiBUaGUgdHdvIHBvc3NpYmlsaXRpZXMgdG8gZ2V0IGFyb3VuZCB0aGlzIHByb2JsZW0KLSAgIGlzIHRvIG9mZmVyIGZha2UgcHVuL2x1biBjb21iaW5hdGlvbnMgdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgdG8gCisgICBhcmUgdG8gb2ZmZXIgZmFrZSBwdW4vbHVuIGNvbWJpbmF0aW9ucyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciB0byAKICAgIGRlbGV0ZSB0aGUgd2hvbGUgbWFwcGluZyBvZiB0aGUgYWRhcHRlciBhbmQgdG8gcmVhc3NpZ24gdGhlIGxkbnMsIHVzaW5nCiAgICB0aGUgaW1tZWRpYXRlIGFzc2lnbiBjb21tYW5kIG9mIHRoZSBTQ1NJLXN1YnN5c3RlbSBmb3IgcHJvYmluZyB0aHJvdWdoCi0gICBhbGwgcG9zc2libGUgcHVuL2x1biBjb21iaW5hdGlvbnMuIGEgbGRuIGlzIGEgImxvZ2ljYWwgZGV2aWNlIG51bWJlciIKKyAgIGFsbCBwb3NzaWJsZSBwdW4vbHVuIGNvbWJpbmF0aW9ucy4gIEFuIGxkbiBpcyBhICJsb2dpY2FsIGRldmljZSBudW1iZXIiCiAgICB3aGljaCBpcyB1c2VkIGJ5IElCTSBTQ1NJLXN1YnN5c3RlbXMgdG8gYWNjZXNzIHNvbWUgdmFsaWQgU0NTSS1kZXZpY2UuCiAgICBBdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZXZlbG9wbWVudCBvZiB0aGlzIGRyaXZlciwgdGhlIGZvbGxvd2luZyBhcHByb2FjaCAKICAgIHdhcyB1c2VkOgpAQCAtMjUxLDkgKzI1MSw5IEBACiAgICBsdW4+MCBvciB0byBub24tZXhpc3RpbmcgZGV2aWNlcywgaW4gb3JkZXIgdG8gc2F0aXNmeSB0aGUgc3Vic3lzdGVtLCBpZiAKICAgIHRoZXJlIGFyZSBsZXNzIHRoYW4gMTUgU0NTSS1kZXZpY2VzIGNvbm5lY3RlZC4gSW4gdGhlIGNhc2Ugb2YgbW9yZSB0aGFuIDE1IAogICAgZGV2aWNlcywgdGhlIGR5bmFtaWNhbCBtYXBwaW5nIGdvZXMgYWN0aXZlLiBJZiB0aGUgZ2V0X3Njc2lbXVtdIHJlcG9ydHMgYSAKLSAgIGRldmljZSB0byBiZSBleGlzdGFudCwgYnV0IGl0IGhhcyBubyBsZG4gYXNzaWduZWQsIGl0IGdldHMgYSBsZG4gb3V0IG9mIDcgCi0gICB0byAxNC4gVGhlIG51bWJlcnMgYXJlIGFzc2lnbmVkIGluIGN5Y2xpYyBvcmRlci4gVGhlcmVmb3JlIGl0IHRha2VzIDggCi0gICBkeW5hbWljYWwgcmVhc3NpZ25tZW50cyBvbiB0aGUgU0NTSS1kZXZpY2VzLCB1bnRpbCBhIGNlcnRhaW4gZGV2aWNlIAorICAgZGV2aWNlIHRvIGJlIGV4aXN0ZW50LCBidXQgaXQgaGFzIG5vIGxkbiBhc3NpZ25lZCwgaXQgZ2V0cyBhbiBsZG4gb3V0IG9mIDcKKyAgIHRvIDE0LiBUaGUgbnVtYmVycyBhcmUgYXNzaWduZWQgaW4gY3ljbGljIG9yZGVyLCB0aGVyZWZvcmUgaXQgdGFrZXMgOCAKKyAgIGR5bmFtaWNhbCByZWFzc2lnbm1lbnRzIG9uIHRoZSBTQ1NJLWRldmljZXMgdW50aWwgYSBjZXJ0YWluIGRldmljZSAKICAgIGxvc2VzIGl0cyBsZG4gYWdhaW4uIFRoaXMgYXNzdXJlcyB0aGF0IGR5bmFtaWNhbCByZW1hcHBpbmcgaXMgYXZvaWRlZCAKICAgIGR1cmluZyBpbnRlbnNlIEkvTyBiZXR3ZWVuIHVwIHRvIDE1IFNDU0ktZGV2aWNlcyAobWVhbnMgcHVuLGx1biAKICAgIGNvbWJpbmF0aW9ucykuIEEgZnVydGhlciBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgdGhhdCBwZW9wbGUgd2hvCkBAIC01NTEsNyArNTUxLDcgQEAKICAgICAgIHRoYW4gZGV2aWNlcyBhcmUgYXZhaWxhYmxlLCB0aGV5IGFyZSBhc3NpZ25lZCB0byBub24gZXhpc3RpbmcgcHVuLGx1bgogICAgICAgY29tYmluYXRpb25zIHRvIHNhdGlzZnkgdGhlIGFkYXB0ZXIuIFdpdGggdGhpcywgdGhlIGR5bmFtaWNhbCBtYXBwaW5nCiAgICAgICB3YXMgcG9zc2libGUgdG8gaW1wbGVtZW50LiAoRm9yIGZ1cnRoZXIgaW5mbyBzZWUgdGhlIHRleHQgaW4gdGhlIAotICAgICAgc291cmNlLWNvZGUgYW5kIGluIHRoZSBkZXNjcmlwdGlvbiBiZWxvdy4gUmVhZCB0aGUgZGVzY3JpcHRpb24KKyAgICAgIHNvdXJjZSBjb2RlIGFuZCBpbiB0aGUgZGVzY3JpcHRpb24gYmVsb3cuIFJlYWQgdGhlIGRlc2NyaXB0aW9uCiAgICAgICBiZWxvdyBCRUZPUkUgaW5zdGFsbGluZyB0aGlzIGRyaXZlciBvbiB5b3VyIHN5c3RlbSEpCiAgICAyKSBDaGFuZ2VkIHRoZSBuYW1lIElCTU1DQV9EUklWRVJfVkVSU0lPTiB0byBJQk1NQ0FfU0NTSV9EUklWRVJfVkVSU0lPTi4KICAgIDMpIFRoZSBMRUQtZGlzcGxheSBzaG93cyBvbiBQUy8yLTk1IG5vIGxvbmdlciB0aGUgbGRuLCBidXQgdGhlIFNDU0ktSUQKQEAgLTc2Miw5ICs3NjIsOSBAQAogICAgLSBNaWNoYWVsIExhbmcKIAogICAgQXByIDIzLCAyMDAwICh2My4ycHJlMSkKLSAgIDEpIER1cmluZyBhIHZlcnkgbG9uZyB0aW1lLCBJIGNvbGxlY3RlZCBhIGh1Z2UgYW1vdW50IG9mIGJ1Z3JlcG9ydHMgZnJvbQorICAgMSkgRHVyaW5nIGEgdmVyeSBsb25nIHRpbWUsIEkgY29sbGVjdGVkIGEgaHVnZSBhbW91bnQgb2YgYnVnIHJlcG9ydHMgZnJvbQogICAgICAgdmFyaW91cyBwZW9wbGUsIHRyeWluZyByZWFsbHkgcXVpdGUgZGlmZmVyZW50IHRoaW5ncyBvbiB0aGVpciBTQ1NJLQotICAgICAgUFMvMnMuIFRvZGF5LCBhbGwgdGhlc2UgYnVncmVwb3J0cyBhcmUgdGFrZW4gaW50byBhY2NvdW50IGFuZCBzaG91bGQgYmUKKyAgICAgIFBTLzJzLiBUb2RheSwgYWxsIHRoZXNlIGJ1ZyByZXBvcnRzIGFyZSB0YWtlbiBpbnRvIGFjY291bnQgYW5kIHNob3VsZCBiZQogICAgICAgbW9zdGx5IHNvbHZlZC4gVGhlIG1ham9yIHRvcGljcyB3ZXJlOgogICAgICAgLSBEcml2ZXIgY3Jhc2hlcyBkdXJpbmcgYm9vdHRpbWUgYnkgbm8gb2J2aW91cyByZWFzb24uCiAgICAgICAtIERyaXZlciBwYW5pY3Mgd2hpbGUgdGhlIG1pZGxldmVsLVNDU0ktZHJpdmVyIGlzIHRyeWluZyB0byBpbnF1aXJlCkBAIC04MTksNyArODE5LDcgQEAKICAgIC0gTWljaGFlbCBMYW5nCiAgICAKICAgIEp1bHkgMTcsIDIwMDAgKHYzLjJwcmU4KQotICAgQSBsb25nIHBlcmlvZCBvZiBjb2xsZWN0aW5nIGJ1Z3JlcG9ydHMgZnJvbSBhbGwgY29ybmVycyBvZiB0aGUgd29ybGQKKyAgIEEgbG9uZyBwZXJpb2Qgb2YgY29sbGVjdGluZyBidWcgcmVwb3J0cyBmcm9tIGFsbCBjb3JuZXJzIG9mIHRoZSB3b3JsZAogICAgbm93IGxlYWQgdG8gdGhlIGZvbGxvd2luZyBjb3JyZWN0aW9ucyB0byB0aGUgY29kZToKICAgIDEpIFNDU0ktMiBGL1cgc3VwcG9ydCBjcmFzaGVkIHdpdGggYSBDT01NQU5EIEVSUk9SLiBUaGUgcmVhc29uIGZvciB0aGlzIAogICAgICAgd2FzIHRoYXQgaXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSBGYXN0LVNDU0kgZm9yIHRoZSBleHRlcm5hbCBidXMuCkBAIC04NzMsNyArODczLDcgQEAKICAgIEp1bHkgMjYsIDIwMDAgKHYzLjJwcmUxMSkKICAgIDEpIEkgcGFzc2VkIGEgaG9ycmlibGUgd2Vla2VuZCBnZXR0aW5nIG1hZCB3aXRoIE5NSXMgb24ga2VybmVsIDIuMi4xNCBhbmQKICAgICAgIGEgbW9kZWwgOTU5NS4gQXNraW5nIGFyb3VuZCBpbiB0aGUgY29tbXVuaXR5LCBub2JvZHkgZXhjZXB0IG9mIG1lIGhhcwotICAgICAgc2VlbiBzdWNoIGVycm9ycy4gV2VpcmVkLCBidXQgSSBhbSB0cnlpbmcgdG8gcmVjb21waWxlIGV2ZXJ5dGhpbmcgb24KKyAgICAgIHNlZW4gc3VjaCBlcnJvcnMuIFdlaXJkLCBidXQgSSBhbSB0cnlpbmcgdG8gcmVjb21waWxlIGV2ZXJ5dGhpbmcgb24KICAgICAgIHRoZSBtb2RlbCA5NTk1LiBNYXliZSwgYXMgSSB1c2UgYSBzcGVjaWFsbHkgbW9kaWZpZWQgZ2NjLCB0aGF0IGNvdWxkCiAgICAgICBjYXVzZSBwcm9ibGVtcy4gQnV0LCBpdCB3YXMgbm90IHRoZSByZWFzb24uIFRoZSB0cnVlIGJhY2tncm91bmQgd2FzLAogICAgICAgdGhhdCB0aGUga2VybmVsIHdhcyBjb21waWxlZCBmb3IgaTM4NiBhbmQgdGhlIDk1OTUgaGFzIGEgNDg2RFgtMi4gCkBAIC04ODYsNyArODg2LDcgQEAKICAgICAgIGFsaXZlIHJvdGF0b3IgZHVyaW5nIGJvb3R0aW1lLiBUaGlzIG1ha2VzIHNlbnNlLCB3aGVuIG5vIG1vbml0b3IgaXMgCiAgICAgICBjb25uZWN0ZWQgdG8gdGhlIHN5c3RlbS4gWW91IGNhbiBnZXQgcmlkIG9mIGFsbCBkaXNwbGF5IGFjdGl2aXR5LCBpZgogICAgICAgeW91IGRvIG5vdCB1c2UgYW55IHBhcmFtZXRlciBvciBqdXN0IGlibW1jYXNjc2k9YWN0aXZpdHksIGZvciB0aGUgCi0gICAgICBoYXJkZHJpdmUgYWN0aXZpdHkgTEVELCBleGlzdGFudCBvbiBhbGwgUFMvMiwgZXhjZXB0IG1vZGVscyA4NTk1LVhYWC4KKyAgICAgIGhhcmRkcml2ZSBhY3Rpdml0eSBMRUQsIGV4aXN0ZW50IG9uIGFsbCBQUy8yLCBleGNlcHQgbW9kZWxzIDg1OTUtWFhYLgogICAgICAgSWYgbm8gbW9uaXRvciBpcyBhdmFpbGFibGUsIHBsZWFzZSB1c2UgaWJtbWNhc2NzaT1kaXNwbGF5LCB3aGljaCB3b3JrcwogICAgICAgZmluZSB0b2dldGhlciB3aXRoIHRoZSBsaW51eGluZm8gdXRpbGl0eSBmb3IgdGhlIExFRC1wYW5lbC4KICAgIC0gTWljaGFlbCBMYW5nCkBAIC0xMTE1LDcgKzExMTUsNyBAQAogICAgICAgICBJZiB0aGlzIHJlYWxseSBoYXBwZW5zLCBkbyBhbHNvIHNlbmQgZS1tYWlsIHRvIHRoZSBtYWludGFpbmVyLCBhcwogCWZvcmNlZCBkZXRlY3Rpb24gc2hvdWxkIGJlIG5ldmVyIG5lY2Vzc2FyeS4gRm9yY2VkIGRldGVjdGlvbiBpcyBpbgogCXByaW5jaXBhbCBzb21lIGZsYXcgb2YgdGhlIGRyaXZlciBhZGFwdGVyIGRldGVjdGlvbiBhbmQgZ29lcyBpbnRvIAotCWJ1Z3JlcG9ydHMuCisJYnVnIHJlcG9ydHMuCiAgICAgIFE6IFRoZSBkcml2ZXIgc2NyZXdzIHVwLCBpZiBpdCBzdGFydHMgdG8gcHJvYmUgU0NTSS1kZXZpY2VzLCBpcyB0aGVyZQogICAgICAgICBzb21lIHdheSBvdXQgb2YgaXQ/CiAgICAgIEE6IFllcywgdGhhdCB3YXMgc29tZSByZWNvZ25pdGlvbiBwcm9ibGVtIG9mIHRoZSBjb3JyZWN0IFNDU0ktYWRhcHRlcgpAQCAtMTE3Miw3ICsxMTcyLDcgQEAKIAlyZWNvbW1lbmRlZCB2ZXJzaW9uIGlzIDMuMiBvciBsYXRlci4gSGVyZSwgdGhlIEYvVyBzdXBwb3J0IGlzIGluCiAJYSBzdGFibGUgYW5kIHJlbGlhYmxlIGNvbmRpdGlvbi4gV2lkZS1hZGRyZXNzaW5nIGlzIGluIGFkZGl0aW9uIAogCXN1cHBvcnRlZC4KLSAgICAgUTogSSBnZXQgYSBPb29wcyBtZXNzYWdlIGFuZCBzb21ldGhpbmcgbGlrZSAia2lsbGluZyBpbnRlcnJ1cHQiLgorICAgICBROiBJIGdldCBhbiBPb3BzIG1lc3NhZ2UgYW5kIHNvbWV0aGluZyBsaWtlICJraWxsaW5nIGludGVycnVwdCIuCiAgICAgIEE6IFRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGUgSUJNIFNDU0ktc3Vic3lzdGVtIG9ubHkgc2VuZHMgYSAKICAgICAgICAgdGVybWluYXRpb24gc3RhdHVzIGJhY2ssIGlmIHNvbWUgZXJyb3IgYXBwZWFyZWQuIEluIGZvcm1lciByZWxlYXNlcwogCW9mIHRoZSBkcml2ZXIsIGl0IHdhcyBub3QgY2hlY2tlZCwgaWYgdGhlIHRlcm1pbmF0aW9uIHN0YXR1cyBibG9jawpAQCAtMTIxMywyMSArMTIxMywyMSBAQAogCXByb2JsZW0uIE5vdCB5ZXQgdHJpZWQsIGJ1dCBndWVzc2luZyB0aGF0IGl0IGNvdWxkIHdvcmsuIFRvIGdldCB0aGlzLAogCXNldCB1bmNoZWNrZWRfaXNhX2RtYSBhcmd1bWVudCBvZiBpYm1tY2EuaCBmcm9tIDAgdG8gMS4KIAotICAgNS4zIEJ1Z3JlcG9ydHMKKyAgIDUuMyBCdWcgcmVwb3J0cwogICAgLS0tLS0tLS0tLS0tLS0KLSAgIElmIHlvdSByZWFsbHkgZmluZCBidWdzIGluIHRoZSBzb3VyY2Vjb2RlIG9yIHRoZSBkcml2ZXIgd2lsbCBzdWNjZXNzZnVsbHkKKyAgIElmIHlvdSByZWFsbHkgZmluZCBidWdzIGluIHRoZSBzb3VyY2UgY29kZSBvciB0aGUgZHJpdmVyIHdpbGwgc3VjY2Vzc2Z1bGx5CiAgICByZWZ1c2UgdG8gd29yayBvbiB5b3VyIG1hY2hpbmUsIHlvdSBzaG91bGQgc2VuZCBhIGJ1ZyByZXBvcnQgdG8gbWUuIFRoZQogICAgYmVzdCBmb3IgdGhpcyBpcyB0byBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBvbiB0aGUgV1dXLXBhZ2UgZm9yIHRoaXMKICAgIGRyaXZlci4gRmlsbCBvdXQgdGhlIGJ1Zy1yZXBvcnQgZm9ybSwgcGxhY2VkIG9uIHRoZSBXV1ctcGFnZSBhbmQgc2hpcCBpdCwKICAgIHNvIHRoZSBidWdzIGNhbiBiZSB0YWtlbiBpbnRvIGFjY291bnQgd2l0aCBtYXhpbXVtIGVmZm9ydHMuIEJ1dCwgcGxlYXNlCiAgICBkbyBub3Qgc2VuZCBidWcgcmVwb3J0cyBhYm91dCB0aGlzIGRyaXZlciB0byBMaW51cyBUb3J2YWxkcyBvciBMZW9uYXJkCi0gICBadWJrb2ZmLCBhcyBMaW51cyBpcyBidXJyaWVkIGluIEUtTWFpbCBhbmQgTGVvbmFyZCBpcyBzdXBlcnZpc2luZyBhbGwKKyAgIFp1YmtvZmYsIGFzIExpbnVzIGlzIGJ1cmllZCBpbiBFLU1haWwgYW5kIExlb25hcmQgaXMgc3VwZXJ2aXNpbmcgYWxsCiAgICBTQ1NJLWRyaXZlcnMgYW5kIHdvbid0IGhhdmUgdGhlIHRpbWUgbGVmdCB0byBsb29rIGluc2lkZSBldmVyeSBzaW5nbGUKICAgIGRyaXZlciB0byBmaXggYSBidWcgYW5kIGVzcGVjaWFsbHkgRE8gTk9UIHNlbmQgbW9kaWZpZWQgY29kZSB0byBMaW51cwogICAgVG9ydmFsZHMgb3IgQWxhbiBKLiBDb3ggd2hpY2ggaGFzIG5vdCBiZWVuIGNoZWNrZWQgaGVyZSEhISBUaGV5IGFyZSBib3RoCi0gICBxdWl0ZSBidXJyaWVkIGluIEUtbWFpbCAoYXMgbWUsIHNvbWV0aW1lcywgdG9vKSBhbmQgb25lIHNob3VsZCBmaXJzdCBjaGVjaworICAgcXVpdGUgYnVyaWVkIGluIEUtbWFpbCAoYXMgbWUsIHNvbWV0aW1lcywgdG9vKSBhbmQgb25lIHNob3VsZCBmaXJzdCBjaGVjawogICAgZm9yIHByb2JsZW1zIG9uIG15IGxvY2FsIHRlc3RzdGFuZC4gUmVjZW50bHksIEkgZ290IGEgbG90IG9mIAotICAgYnVncmVwb3J0cyBmb3IgZXJyb3JzIGluIHRoZSBpYm1tY2EuYyBjb2RlLCB3aGljaCBJIGNvdWxkIG5vdCBpbWFnaW5lLCBidXQKKyAgIGJ1ZyByZXBvcnRzIGZvciBlcnJvcnMgaW4gdGhlIGlibW1jYS5jIGNvZGUsIHdoaWNoIEkgY291bGQgbm90IGltYWdpbmUsIGJ1dAogICAgYSBsb29rIGluc2lkZSBzb21lIExpbnV4LWRpc3RyaWJ1dGlvbiBzaG93ZWQgbWUgcXVpdGUgb2Z0ZW4gc29tZSBtb2RpZmllZAogICAgY29kZSwgd2hpY2ggZGlkIG5vIGxvbmdlciB3b3JrIG9uIG1vc3Qgb3RoZXIgbWFjaGluZXMgdGhhbiB0aGUgb25lIG9mIHRoZQogICAgbW9kaWZpZXIuIE9rLCBzbyBub3cgdGhhdCB0aGVyZSBpcyBtYWludGVuYW5jZSBzZXJ2aWNlIGF2YWlsYWJsZSBmb3IgdGhpcwpAQCAtMTI2MSw3ICsxMjYxLDcgQEAKICAgIHNvbWUgZS1tYWlsIGRpcmVjdGx5LCBidXQgYXQgbGVhc3Qgd2l0aCB0aGUgc2FtZSBpbmZvcm1hdGlvbiBhcyByZXF1aXJlZCBieQogICAgdGhlIGZvcm11bGFyLgogICAgCi0gICBJZiB5b3UgaGF2ZSBleHRlbnNpdmUgYnVncmVwb3J0cywgaW5jbHVkaW5nIE9vb3BzIG1lc3NhZ2VzIGFuZCAKKyAgIElmIHlvdSBoYXZlIGV4dGVuc2l2ZSBidWcgcmVwb3J0cywgaW5jbHVkaW5nIE9vcHMgbWVzc2FnZXMgYW5kCiAgICBzY3JlZW4tc2hvdHMsIHBsZWFzZSBmZWVsIGZyZWUgdG8gc2VuZCBpdCBkaXJlY3RseSB0byB0aGUgYWRkcmVzcwogICAgb2YgdGhlIG1haW50YWluZXIsIHRvby4gVGhlIGN1cnJlbnQgYWRkcmVzcyBvZiB0aGUgbWFpbnRhaW5lciBpczoKICAgIApAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAkJZGV0YWlsZWQgYnVnIHJlcG9ydHMgYW5kIGlkZWFzIGZvciB0aGlzIGRyaXZlciAoYW5kIGhpcyAKIAkJcGF0aWVuY2UgOy0pKS4KICAgIEFsYW4gSi4gQ294ICAKLSAgICAgICAgICAgICAgICBmb3IgaGlzIGJ1Z3JlcG9ydHMgYW5kIGhpcyBib2xkIGFjdGl2aXRpZXMgaW4gY3Jvc3MtY2hlY2tpbmcKKyAgICAgICAgICAgICAgICBmb3IgaGlzIGJ1ZyByZXBvcnRzIGFuZCBoaXMgYm9sZCBhY3Rpdml0aWVzIGluIGNyb3NzLWNoZWNraW5nCiAJCXRoZSBkcml2ZXItY29kZSB3aXRoIGhpcyB0ZXN0c3RhbmQuCiAJCQogICAgNy4yIFNwb25zb3JzICYgU3VwcG9ydGVycwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zaGFyZWRzdWJ0cmVlLnR4dCBiL0RvY3VtZW50YXRpb24vc2hhcmVkc3VidHJlZS50eHQKaW5kZXggY2NmMWNlYi4uNzM2NTQwMCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zaGFyZWRzdWJ0cmVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NoYXJlZHN1YnRyZWUudHh0CkBAIC0xNTMsNiArMTUzLDcgQEAKIAkjaW5jbHVkZSA8c3RkaW8uaD4KIAkjaW5jbHVkZSA8c3RkbGliLmg+CiAJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCSNpbmNsdWRlIDxzdHJpbmcuaD4KIAkjaW5jbHVkZSA8c3lzL21vdW50Lmg+CiAJI2luY2x1ZGUgPHN5cy9mc3VpZC5oPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL0RBSS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL0RBSS50eHQKaW5kZXggNThjYmZkMC4uM2ZlZWI5ZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9EQUkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvREFJLnR4dApAQCAtMjAsMTIgKzIwLDEyIEBACiA9PT0KIAogIEkyUyBpcyBhIGNvbW1vbiA0IHdpcmUgREFJIHVzZWQgaW4gSGlGaSwgU1RCIGFuZCBwb3J0YWJsZSBkZXZpY2VzLiBUaGUgVHggYW5kCi1SeCBsaW5lcyBhcmUgdXNlZCBmb3IgYXVkaW8gdHJhbnNtaXNpb24sIHdoaWxzdCB0aGUgYml0IGNsb2NrIChCQ0xLKSBhbmQKK1J4IGxpbmVzIGFyZSB1c2VkIGZvciBhdWRpbyB0cmFuc21pc3Npb24sIHdoaWxzdCB0aGUgYml0IGNsb2NrIChCQ0xLKSBhbmQKIGxlZnQvcmlnaHQgY2xvY2sgKExSQykgc3luY2hyb25pc2UgdGhlIGxpbmsuIEkyUyBpcyBmbGV4aWJsZSBpbiB0aGF0IGVpdGhlciB0aGUKIGNvbnRyb2xsZXIgb3IgQ09ERUMgY2FuIGRyaXZlIChtYXN0ZXIpIHRoZSBCQ0xLIGFuZCBMUkMgY2xvY2sgbGluZXMuIEJpdCBjbG9jawogdXN1YWxseSB2YXJpZXMgZGVwZW5kaW5nIG9uIHRoZSBzYW1wbGUgcmF0ZSBhbmQgdGhlIG1hc3RlciBzeXN0ZW0gY2xvY2sKIChTWVNDTEspLiBMUkNMSyBpcyB0aGUgc2FtZSBhcyB0aGUgc2FtcGxlIHJhdGUuIEEgZmV3IGRldmljZXMgc3VwcG9ydCBzZXBhcmF0ZQotQURDIGFuZCBEQUMgTFJDTEsncywgdGhpcyBhbGxvd3MgZm9yIHNpbWlsdGFuaW91cyBjYXB0dXJlIGFuZCBwbGF5YmFjayBhdAorQURDIGFuZCBEQUMgTFJDTEsncywgdGhpcyBhbGxvd3MgZm9yIHNpbXVsdGFuZW91cyBjYXB0dXJlIGFuZCBwbGF5YmFjayBhdAogZGlmZmVyZW50IHNhbXBsZSByYXRlcy4KIAogSTJTIGhhcyBzZXZlcmFsIGRpZmZlcmVudCBvcGVyYXRpbmcgbW9kZXM6LQpAQCAtNDEsMTIgKzQxLDEyIEBACiBQQ00KID09PQogCi1QQ00gaXMgYW5vdGhlciA0IHdpcmUgaW50ZXJmYWNlLCB2ZXJ5IHNpbWlsYXIgdG8gSTJTLCB0aGF0IGNhbiBzdXBwb3J0IGEgbW9yZQorUENNIGlzIGFub3RoZXIgNCB3aXJlIGludGVyZmFjZSwgdmVyeSBzaW1pbGFyIHRvIEkyUywgd2hpY2ggY2FuIHN1cHBvcnQgYSBtb3JlCiBmbGV4aWJsZSBwcm90b2NvbC4gSXQgaGFzIGJpdCBjbG9jayAoQkNMSykgYW5kIHN5bmMgKFNZTkMpIGxpbmVzIHRoYXQgYXJlIHVzZWQKIHRvIHN5bmNocm9uaXNlIHRoZSBsaW5rIHdoaWxzdCB0aGUgVHggYW5kIFJ4IGxpbmVzIGFyZSB1c2VkIHRvIHRyYW5zbWl0IGFuZAogcmVjZWl2ZSB0aGUgYXVkaW8gZGF0YS4gQml0IGNsb2NrIHVzdWFsbHkgdmFyaWVzIGRlcGVuZGluZyBvbiBzYW1wbGUgcmF0ZQogd2hpbHN0IHN5bmMgcnVucyBhdCB0aGUgc2FtcGxlIHJhdGUuIFBDTSBhbHNvIHN1cHBvcnRzIFRpbWUgRGl2aXNpb24KLU11bHRpcGxleGluZyAoVERNKSBpbiB0aGF0IHNldmVyYWwgZGV2aWNlcyBjYW4gdXNlIHRoZSBidXMgc2ltaWx0YW5pdW9zbHkgKFRoaXMKK011bHRpcGxleGluZyAoVERNKSBpbiB0aGF0IHNldmVyYWwgZGV2aWNlcyBjYW4gdXNlIHRoZSBidXMgc2ltdWx0YW5lb3VzbHkgKHRoaXMKIGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBuZXR3b3JrIG1vZGUpLgogCiBDb21tb24gUENNIG9wZXJhdGluZyBtb2RlczotCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2Nsb2NraW5nLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvY2xvY2tpbmcudHh0CmluZGV4IGU5Mzk2MGQuLjE0OTMwODggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvY2xvY2tpbmcudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvY2xvY2tpbmcudHh0CkBAIC0yLDIwICsyLDIwIEBACiA9PT09PT09PT09PT09PQogCiBUaGlzIHRleHQgZGVzY3JpYmVzIHRoZSBhdWRpbyBjbG9ja2luZyB0ZXJtcyBpbiBBU29DIGFuZCBkaWdpdGFsIGF1ZGlvIGluCi1nZW5lcmFsLiBOb3RlOiBBdWRpbyBjbG9ja2luZyBjYW4gYmUgY29tcGxleCAhCitnZW5lcmFsLiBOb3RlOiBBdWRpbyBjbG9ja2luZyBjYW4gYmUgY29tcGxleCEKIAogCiBNYXN0ZXIgQ2xvY2sKIC0tLS0tLS0tLS0tLQogCi1FdmVyeSBhdWRpbyBzdWJzeXN0ZW0gaXMgZHJpdmVuIGJ5IGEgbWFzdGVyIGNsb2NrIChzb21ldGltZXMgcmVmZXJlZCB0byBhcyBNQ0xLCitFdmVyeSBhdWRpbyBzdWJzeXN0ZW0gaXMgZHJpdmVuIGJ5IGEgbWFzdGVyIGNsb2NrIChzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgTUNMSwogb3IgU1lTQ0xLKS4gVGhpcyBhdWRpbyBtYXN0ZXIgY2xvY2sgY2FuIGJlIGRlcml2ZWQgZnJvbSBhIG51bWJlciBvZiBzb3VyY2VzCiAoZS5nLiBjcnlzdGFsLCBQTEwsIENQVSBjbG9jaykgYW5kIGlzIHJlc3BvbnNpYmxlIGZvciBwcm9kdWNpbmcgdGhlIGNvcnJlY3QKIGF1ZGlvIHBsYXliYWNrIGFuZCBjYXB0dXJlIHNhbXBsZSByYXRlcy4KIAotU29tZSBtYXN0ZXIgY2xvY2tzIChlLmcuIFBMTCdzIGFuZCBDUFUgYmFzZWQgY2xvY2tzKSBhcmUgY29uZmlndWFyYmxlIGluIHRoYXQKK1NvbWUgbWFzdGVyIGNsb2NrcyAoZS5nLiBQTEwncyBhbmQgQ1BVIGJhc2VkIGNsb2NrcykgYXJlIGNvbmZpZ3VyYWJsZSBpbiB0aGF0CiB0aGVpciBzcGVlZCBjYW4gYmUgYWx0ZXJlZCBieSBzb2Z0d2FyZSAoZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0gdXNlIGFuZCB0byBzYXZlCi1wb3dlcikuIE90aGVyIG1hc3RlciBjbG9ja3MgYXJlIGZpeGVkIGF0IGF0IHNldCBmcmVxdWVuY3kgKGkuZS4gY3J5c3RhbHMpLgorcG93ZXIpLiBPdGhlciBtYXN0ZXIgY2xvY2tzIGFyZSBmaXhlZCBhdCBhIHNldCBmcmVxdWVuY3kgKGkuZS4gY3J5c3RhbHMpLgogCiAKIERBSSBDbG9ja3MKQEAgLTQ0LDcgKzQ0LDcgQEAKIGl0J3MgYmVzdCB0byBjb25maWd1cmUgQkNMSyB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHNwZWVkIChkZXBlbmRpbmcgb24geW91cgogcmF0ZSwgbnVtYmVyIG9mIGNoYW5uZWxzIGFuZCB3b3Jkc2l6ZSkgdG8gc2F2ZSBvbiBwb3dlci4KIAotSXQncyBhbHNvIGRlc2lyZWFibGUgdG8gdXNlIHRoZSBjb2RlYyAoaWYgcG9zc2libGUpIHRvIGRyaXZlIChvciBtYXN0ZXIpIHRoZQorSXQncyBhbHNvIGRlc2lyYWJsZSB0byB1c2UgdGhlIGNvZGVjIChpZiBwb3NzaWJsZSkgdG8gZHJpdmUgKG9yIG1hc3RlcikgdGhlCiBhdWRpbyBjbG9ja3MgYXMgaXQncyB1c3VhbGx5IGdpdmVzIG1vcmUgYWNjdXJhdGUgc2FtcGxlIHJhdGVzIHRoYW4gdGhlIENQVS4KIAogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2NvZGVjLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvY29kZWMudHh0CmluZGV4IDQ4OTgzYzcuLjFlNzY2YWQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvY29kZWMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvY29kZWMudHh0CkBAIC0xOSw3ICsxOSw3IEBACiAgNikgREFQTSBldmVudCBoYW5kbGVyLgogIDcpIERBQyBEaWdpdGFsIG11dGUgY29udHJvbC4KIAotSXQncyBwcm9iYWJseSBiZXN0IHRvIHVzZSB0aGlzIGd1aWRlIGluIGNvbmp1Y3Rpb24gd2l0aCB0aGUgZXhpc3RpbmcgY29kZWMKK0l0J3MgcHJvYmFibHkgYmVzdCB0byB1c2UgdGhpcyBndWlkZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBleGlzdGluZyBjb2RlYwogZHJpdmVyIGNvZGUgaW4gc291bmQvc29jL2NvZGVjcy8KIAogQVNvQyBDb2RlYyBkcml2ZXIgYnJlYWtkb3duCkBAIC0yOCw3ICsyOCw3IEBACiAxIC0gQ29kZWMgREFJIGFuZCBQQ00gY29uZmlndXJhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEVhY2ggY29kZWMgZHJpdmVyIG11c3QgaGF2ZSBhIHN0cnVjdCBzbmRfc29jX2NvZGVjX2RhaSB0byBkZWZpbmUgaXQncyBEQUkgYW5kCi1QQ00ncyBjYXBhYmxpdGllcyBhbmQgb3BlcmF0aW9ucy4gVGhpcyBzdHJ1Y3QgaXMgZXhwb3J0ZWQgc28gdGhhdCBpdCBjYW4gYmUKK1BDTSdzIGNhcGFiaWxpdGllcyBhbmQgb3BlcmF0aW9ucy4gVGhpcyBzdHJ1Y3QgaXMgZXhwb3J0ZWQgc28gdGhhdCBpdCBjYW4gYmUKIHJlZ2lzdGVyZWQgd2l0aCB0aGUgY29yZSBieSB5b3VyIG1hY2hpbmUgZHJpdmVyLgogCiBlLmcuCkBAIC02Nyw3ICs2Nyw3IEBACiAKIDIgLSBDb2RlYyBjb250cm9sIElPCiAtLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGNvZGVjIGNhbiB1c3VzYWxseSBiZSBjb250cm9sbGVkIHZpYSBhbiBJMkMgb3IgU1BJIHN0eWxlIGludGVyZmFjZSAoQUM5NworVGhlIGNvZGVjIGNhbiB1c3VhbGx5IGJlIGNvbnRyb2xsZWQgdmlhIGFuIEkyQyBvciBTUEkgc3R5bGUgaW50ZXJmYWNlIChBQzk3CiBjb21iaW5lcyBjb250cm9sIHdpdGggZGF0YSBpbiB0aGUgREFJKS4gVGhlIGNvZGVjIGRyaXZlcnMgd2lsbCBoYXZlIHRvIHByb3ZpZGUKIGZ1bmN0aW9ucyB0byByZWFkIGFuZCB3cml0ZSB0aGUgY29kZWMgcmVnaXN0ZXJzIGFsb25nIHdpdGggc3VwcGx5aW5nIGEgcmVnaXN0ZXIKIGNhY2hlOi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL2RhcG0udHh0CmluZGV4IGMxMTg3N2YuLmFiMDc2NmYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvZGFwbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9kYXBtLnR4dApAQCAtMTEsNyArMTEsNyBAQAogCiBEQVBNIGlzIGFsc28gY29tcGxldGVseSB0cmFuc3BhcmVudCB0byBhbGwgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMgYXMgYWxsIHBvd2VyCiBzd2l0Y2hpbmcgaXMgZG9uZSB3aXRoaW4gdGhlIEFTb0MgY29yZS4gTm8gY29kZSBjaGFuZ2VzIG9yIHJlY29tcGlsaW5nIGFyZQotcmVxdWlyZWQgZm9yIHVzZXIgc3BhY2UgYXBwbGljYXRpb25zLiBEQVBNIG1ha2VzIHBvd2VyIHN3aXRjaGluZyBkZXNjaXNpb25zIGJhc2VkCityZXF1aXJlZCBmb3IgdXNlciBzcGFjZSBhcHBsaWNhdGlvbnMuIERBUE0gbWFrZXMgcG93ZXIgc3dpdGNoaW5nIGRlY2lzaW9ucyBiYXNlZAogdXBvbiBhbnkgYXVkaW8gc3RyZWFtIChjYXB0dXJlL3BsYXliYWNrKSBhY3Rpdml0eSBhbmQgYXVkaW8gbWl4ZXIgc2V0dGluZ3MKIHdpdGhpbiB0aGUgZGV2aWNlLgogCkBAIC0zOCw3ICszOCw3IEBACiAgICAgICBFbmFibGVkIGFuZCBkaXNhYmxlZCB3aGVuIHN0cmVhbSBwbGF5YmFjay9jYXB0dXJlIGlzIHN0YXJ0ZWQgYW5kCiAgICAgICBzdG9wcGVkIHJlc3BlY3RpdmVseS4gZS5nLiBhcGxheSwgYXJlY29yZC4KIAotQWxsIERBUE0gcG93ZXIgc3dpdGNoaW5nIGRlc2Npc29ucyBhcmUgbWFkZSBhdXRvbWF0aWNhbGx5IGJ5IGNvbnN1bHRpbmcgYW4gYXVkaW8KK0FsbCBEQVBNIHBvd2VyIHN3aXRjaGluZyBkZWNpc2lvbnMgYXJlIG1hZGUgYXV0b21hdGljYWxseSBieSBjb25zdWx0aW5nIGFuIGF1ZGlvCiByb3V0aW5nIG1hcCBvZiB0aGUgd2hvbGUgbWFjaGluZS4gVGhpcyBtYXAgaXMgc3BlY2lmaWMgdG8gZWFjaCBtYWNoaW5lIGFuZAogY29uc2lzdHMgb2YgdGhlIGludGVyY29ubmVjdGlvbnMgYmV0d2VlbiBldmVyeSBhdWRpbyBjb21wb25lbnQgKGluY2x1ZGluZwogaW50ZXJuYWwgY29kZWMgY29tcG9uZW50cykuIEFsbCBhdWRpbyBjb21wb25lbnRzIHRoYXQgZWZmZWN0IHBvd2VyIGFyZSBjYWxsZWQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2Mvb3ZlcnZpZXcudHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9vdmVydmlldy50eHQKaW5kZXggNzUzYzVjYy4uYzQ3Y2U5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9vdmVydmlldy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9vdmVydmlldy50eHQKQEAgLTIsMTggKzIsMTkgQEAKID09PT09PT09PT09PT09CiAKIFRoZSBvdmVyYWxsIHByb2plY3QgZ29hbCBvZiB0aGUgQUxTQSBTeXN0ZW0gb24gQ2hpcCAoQVNvQykgbGF5ZXIgaXMgdG8gcHJvdmlkZQotYmV0dGVyIEFMU0Egc3VwcG9ydCBmb3IgZW1iZWRkZWQgc3lzdGVtIG9uIGNoaXAgcHJvY2Vzb3JzIChlLmcuIHB4YTJ4eCwgYXUxeDAwLAorYmV0dGVyIEFMU0Egc3VwcG9ydCBmb3IgZW1iZWRkZWQgc3lzdGVtLW9uLWNoaXAgcHJvY2Vzc29ycyAoZS5nLiBweGEyeHgsIGF1MXgwMCwKIGlNWCwgZXRjKSBhbmQgcG9ydGFibGUgYXVkaW8gY29kZWNzLiBDdXJyZW50bHkgdGhlcmUgaXMgc29tZSBzdXBwb3J0IGluIHRoZQoga2VybmVsIGZvciBTb0MgYXVkaW8sIGhvd2V2ZXIgaXQgaGFzIHNvbWUgbGltaXRhdGlvbnM6LQogCiAgICogQ3VycmVudGx5LCBjb2RlYyBkcml2ZXJzIGFyZSBvZnRlbiB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIHVuZGVybHlpbmcgU29DCi0gICAgY3B1LiBUaGlzIGlzIG5vdCBpZGVhbCBhbmQgbGVhZHMgdG8gY29kZSBkdXBsaWNhdGlvbiBpLmUuIExpbnV4IG5vdyBoYXMgNAorICAgIENQVS4gVGhpcyBpcyBub3QgaWRlYWwgYW5kIGxlYWRzIHRvIGNvZGUgZHVwbGljYXRpb24gaS5lLiBMaW51eCBub3cgaGFzIDQKICAgICBkaWZmZXJlbnQgd204NzMxIGRyaXZlcnMgZm9yIDQgZGlmZmVyZW50IFNvQyBwbGF0Zm9ybXMuCiAKLSAgKiBUaGVyZSBpcyBubyBzdGFuZGFyZCBtZXRob2QgdG8gc2lnbmFsIHVzZXIgaW5pdGlhdGVkIGF1ZGlvIGV2ZW50cy4KLSAgICBlLmcuIEhlYWRwaG9uZS9NaWMgaW5zZXJ0aW9uLCBIZWFkcGhvbmUvTWljIGRldGVjdGlvbiBhZnRlciBhbiBpbnNlcnRpb24KLSAgICBldmVudC4gVGhlc2UgYXJlIHF1aXRlIGNvbW1vbiBldmVudHMgb24gcG9ydGFibGUgZGV2aWNlcyBhbmQgb2Z0ZXIgcmVxdWlyZQotICAgIG1hY2hpbmUgc3BlY2lmaWMgY29kZSB0byByZSByb3V0ZSBhdWRpbywgZW5hYmxlIGFtcHMgZXRjIGFmdGVyIHN1Y2ggYW4gZXZlbnQuCisgICogVGhlcmUgaXMgbm8gc3RhbmRhcmQgbWV0aG9kIHRvIHNpZ25hbCB1c2VyIGluaXRpYXRlZCBhdWRpbyBldmVudHMgKGUuZy4KKyAgICBIZWFkcGhvbmUvTWljIGluc2VydGlvbiwgSGVhZHBob25lL01pYyBkZXRlY3Rpb24gYWZ0ZXIgYW4gaW5zZXJ0aW9uCisgICAgZXZlbnQpLiBUaGVzZSBhcmUgcXVpdGUgY29tbW9uIGV2ZW50cyBvbiBwb3J0YWJsZSBkZXZpY2VzIGFuZCBvZnRlbiByZXF1aXJlCisgICAgbWFjaGluZSBzcGVjaWZpYyBjb2RlIHRvIHJlLXJvdXRlIGF1ZGlvLCBlbmFibGUgYW1wcywgZXRjLiwgYWZ0ZXIgc3VjaCBhbgorICAgIGV2ZW50LgogCiAgICogQ3VycmVudCBkcml2ZXJzIHRlbmQgdG8gcG93ZXIgdXAgdGhlIGVudGlyZSBjb2RlYyB3aGVuIHBsYXlpbmcKICAgICAob3IgcmVjb3JkaW5nKSBhdWRpby4gVGhpcyBpcyBmaW5lIGZvciBhIFBDLCBidXQgdGVuZHMgdG8gd2FzdGUgYSBsb3Qgb2YKQEAgLTQ0LDcgKzQ1LDcgQEAKICAgICBzaWduYWxzIHRoZSBjb2RlYyB3aGVuIHRvIGNoYW5nZSBwb3dlciBzdGF0ZXMuCiAKICAgKiBNYWNoaW5lIHNwZWNpZmljIGNvbnRyb2xzOiBBbGxvdyBtYWNoaW5lcyB0byBhZGQgY29udHJvbHMgdG8gdGhlIHNvdW5kIGNhcmQKLSAgICBlLmcuIHZvbHVtZSBjb250cm9sIGZvciBzcGVha2VyIGFtcC4KKyAgICAoZS5nLiB2b2x1bWUgY29udHJvbCBmb3Igc3BlYWtlciBhbXApLgogCiBUbyBhY2hpZXZlIGFsbCB0aGlzLCBBU29DIGJhc2ljYWxseSBzcGxpdHMgYW4gZW1iZWRkZWQgYXVkaW8gc3lzdGVtIGludG8gMwogY29tcG9uZW50cyA6LQpAQCAtNTcsNyArNTgsNyBAQAogICAgIGludGVyZmFjZSBkcml2ZXJzIChlLmcuIEkyUywgQUM5NywgUENNKSBmb3IgdGhhdCBwbGF0Zm9ybS4KIAogICAqIE1hY2hpbmUgZHJpdmVyOiBUaGUgbWFjaGluZSBkcml2ZXIgaGFuZGxlcyBhbnkgbWFjaGluZSBzcGVjaWZpYyBjb250cm9scyBhbmQKLSAgICBhdWRpbyBldmVudHMuIGkuZS4gdHVyaW5nIG9uIGFuIGFtcCBhdCBzdGFydCBvZiBwbGF5YmFjay4KKyAgICBhdWRpbyBldmVudHMgKGUuZy4gdHVybmluZyBvbiBhbiBhbXAgYXQgc3RhcnQgb2YgcGxheWJhY2spLgogCiAKIERvY3VtZW50YXRpb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9zb2MvcGxhdGZvcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9wbGF0Zm9ybS50eHQKaW5kZXggZTk1YjE2ZC4uZDQ2NzhiNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9wbGF0Zm9ybS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9wbGF0Zm9ybS50eHQKQEAgLTIwLDcgKzIwLDcgQEAKIAlpbnQgKCp0cmlnZ2VyKShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiwgaW50KTsKIH07CiAKLVRoZSBwbGF0Zm9ybSBkcml2ZXIgZXhwb3J0cyBpdCdzIERNQSBmdW5jdGlvbmFpbHR5IHZpYSBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybTotCitUaGUgcGxhdGZvcm0gZHJpdmVyIGV4cG9ydHMgaXRzIERNQSBmdW5jdGlvbmFsaXR5IHZpYSBzdHJ1Y3Qgc25kX3NvY19wbGF0Zm9ybTotCiAKIHN0cnVjdCBzbmRfc29jX3BsYXRmb3JtIHsKIAljaGFyICpuYW1lOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL3NvYy9wb3BzX2NsaWNrcy50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL3BvcHNfY2xpY2tzLnR4dAppbmRleCAyY2Y3ZWU1Li4zMzcxYmQ5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL3BvcHNfY2xpY2tzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2Evc29jL3BvcHNfY2xpY2tzLnR4dApAQCAtMiw3ICsyLDcgQEAKID09PT09PT09PT09PT09PT09PT09PQogCiBQb3BzIGFuZCBjbGlja3MgYXJlIHVud2FudGVkIGF1ZGlvIGFydGlmYWN0cyBjYXVzZWQgYnkgdGhlIHBvd2VyaW5nIHVwIGFuZCBkb3duCi1vZiBjb21wb25lbnRzIHdpdGhpbiB0aGUgYXVkaW8gc3Vic3lzdGVtLiBUaGlzIGlzIG5vdGljYWJsZSBvbiBQQydzIHdoZW4gYW4KK29mIGNvbXBvbmVudHMgd2l0aGluIHRoZSBhdWRpbyBzdWJzeXN0ZW0uIFRoaXMgaXMgbm90aWNlYWJsZSBvbiBQQ3Mgd2hlbiBhbgogYXVkaW8gbW9kdWxlIGlzIGVpdGhlciBsb2FkZWQgb3IgdW5sb2FkZWQgKGF0IG1vZHVsZSBsb2FkIHRpbWUgdGhlIHNvdW5kIGNhcmQgaXMKIHBvd2VyZWQgdXAgYW5kIGNhdXNlcyBhIHBvcHBpbmcgbm9pc2Ugb24gdGhlIHNwZWFrZXJzKS4KIApAQCAtMTYsNyArMTYsNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogUGxheWJhY2sgcG9wcyBpbiBwb3J0YWJsZSBhdWRpbyBzdWJzeXN0ZW1zIGNhbm5vdCBiZSBjb21wbGV0ZWx5IGVsaW1pbmF0ZWQgYXRtLAotaG93ZXZlciBmdXR1cmUgYXVkaW8gY29kZWMgaGFyZHdhcmUgd2lsbCBoYXZlIGJldHRlciBwb3AgYW5kIGNsaWNrIHN1cHJlc3Npb24uCitob3dldmVyIGZ1dHVyZSBhdWRpbyBjb2RlYyBoYXJkd2FyZSB3aWxsIGhhdmUgYmV0dGVyIHBvcCBhbmQgY2xpY2sgc3VwcHJlc3Npb24uCiBQb3BzIGNhbiBiZSByZWR1Y2VkIHdpdGhpbiBwbGF5YmFjayBieSBwb3dlcmluZyB0aGUgYXVkaW8gY29tcG9uZW50cyBpbiBhCiBzcGVjaWZpYyBvcmRlci4gVGhpcyBvcmRlciBpcyBkaWZmZXJlbnQgZm9yIHN0YXJ0dXAgYW5kIHNodXRkb3duIGFuZCBmb2xsb3dzCiBzb21lIGJhc2ljIHJ1bGVzOi0KQEAgLTMzLDcgKzMzLDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQ2FwdHVyZSBhcnRpZmFjdHMgYXJlIHNvbWV3aGF0IGVhc2llciB0byBnZXQgcmlkIGFzIHdlIGNhbiBkZWxheSBhY3RpdmF0aW5nIHRoZQotQURDIHVudGlsIGFsbCB0aGUgcG9wcyBoYXZlIG9jY3VyZWQuIFRoaXMgZm9sbG93cyBzaW1pbGFyIHBvd2VyIHJ1bGVzIHRvCitBREMgdW50aWwgYWxsIHRoZSBwb3BzIGhhdmUgb2NjdXJyZWQuIFRoaXMgZm9sbG93cyBzaW1pbGFyIHBvd2VyIHJ1bGVzIHRvCiBwbGF5YmFjayBpbiB0aGF0IGNvbXBvbmVudHMgYXJlIHBvd2VyZWQgaW4gYSBzZXF1ZW5jZSBkZXBlbmRpbmcgdXBvbiBzdHJlYW0KIHN0YXJ0dXAgb3Igc2h1dGRvd24uCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MSBiL0RvY3VtZW50YXRpb24vc291bmQvb3NzL2VzMTM3MQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMxNTEyNi4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL29zcy9lczEzNzEKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vcHJvYy9zb3VuZCwgL2Rldi9zbmRzdGF0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS9wcm9jL3NvdW5kIGFuZCAvZGV2L3NuZHN0YXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUKLWRyaXZlci4gVG8gZmluZCBvdXQgd2hldGhlciB0aGUgZHJpdmVyIHN1Y2NlZWRlZCBsb2FkaW5nLAotY2hlY2sgdGhlIGtlcm5lbCBsb2cgKGRtZXNnKS4KLQotCi1BTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBBTGF3L3VMYXcgc2FtcGxlIGZvcm1hdHMuCi1BTGF3IGlzIHRoZSBkZWZhdWx0IG1vZGUgd2hlbiBvcGVuaW5nIGEgc291bmQgZGV2aWNlCi11c2luZyBPU1MvRnJlZS4gVGhlIHJlYXNvbiBmb3IgdGhlIGxhY2sgb2Ygc3VwcG9ydCBpcwotdGhhdCB0aGUgaGFyZHdhcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzLCBhbmQgYWRkaW5nCi1jb252ZXJzaW9uIHJvdXRpbmVzIHRvIHRoZSBrZXJuZWwgd291bGQgbGVhZCB0byB2ZXJ5IHVnbHkKLWNvZGUgaW4gdGhlIHByZXNlbmNlIG9mIHRoZSBtbWFwIGludGVyZmFjZSB0byB0aGUgZHJpdmVyLgotQW5kIHNpbmNlIHhxdWFrZSB1c2VzIG1tYXAsIG1tYXAgaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQgOi0pCi1hbmQgbm8gc2FuZSBhcHBsaWNhdGlvbiB1c2VzIEFMYXcvdUxhdyB0aGVzZSBkYXlzIGFueXdheS4KLUluIHNob3J0LCBwbGF5aW5nIGEgU3VuIC5hdSBmaWxlIGFzIGZvbGxvd3M6Ci0KLWNhdCBteV9maWxlLmF1ID4gL2Rldi9kc3AKLQotZG9lcyBub3Qgd29yay4gSW5zdGVhZCwgeW91IG1heSB1c2UgdGhlIHBsYXkgc2NyaXB0IGZyb20KLUNocmlzIEJhZ3dlbGwncyBzb3gtMTIuMTQgcGFja2FnZSAoYXZhaWxhYmxlIGZyb20gdGhlIFVSTAotYmVsb3cpIHRvIHBsYXkgbWFueSBkaWZmZXJlbnQgYXVkaW8gZmlsZSBmb3JtYXRzLgotVGhlIHNjcmlwdCBhdXRvbWF0aWNhbGx5IGRldGVybWluZXMgdGhlIGF1ZGlvIGZvcm1hdAotYW5kIGRvZXMgZG8gYXVkaW8gY29udmVyc2lvbnMgaWYgbmVjZXNzYXJ5LgotaHR0cDovL2hvbWUuc3ByeW5ldC5jb20vc3ByeW5ldC9jYmFnd2VsbC9wcm9qZWN0cy5odG1sCi0KLQotQmxvY2tpbmcgdnMuIG5vbmJsb2NraW5nIElPCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVW5saWtlIE9TUy9GcmVlIHRoaXMgZHJpdmVyIGhvbm91cnMgdGhlIE9fTk9OQkxPQ0sgZmlsZSBmbGFnCi1ub3Qgb25seSBkdXJpbmcgb3BlbiwgYnV0IGFsc28gZHVyaW5nIHJlYWQgYW5kIHdyaXRlLgotVGhpcyBpcyBhbiBlZmZvcnQgdG8gbWFrZSB0aGUgc291bmQgZHJpdmVyIGludGVyZmFjZSBtb3JlCi1yZWd1bGFyLiBUaW1pZGl0eSBoYXMgcHJvYmxlbXMgd2l0aCB0aGlzOyBhIHBhdGNoCi1pcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vd3d3LmlmZS5lZS5ldGh6LmNoL35zYWlsZXIvbGludXgvcGNpYXVkaW8uaHRtbC4KLShUaW1pZGl0eSBwYXRjaGVkIHdpbGwgYWxzbyBydW4gb24gT1NTL0ZyZWUpLgotCi0KLU1JREkgVUFSVAotLS0tLS0tLS0tCi0KLVRoZSBkcml2ZXIgc3VwcG9ydHMgYSBzaW1wbGUgTUlESSBVQVJUIGludGVyZmFjZSwgd2l0aAotbm8gaW9jdGwncyBzdXBwb3J0ZWQuCi0KLQotTUlESSBzeW50aGVzaXplcgotLS0tLS0tLS0tLS0tLS0tLQotCi1UaGlzIHNvdW5kY2FyZCBkb2VzIG5vdCBoYXZlIGFueSBoYXJkd2FyZSBNSURJIHN5bnRoZXNpemVyOwotTUlESSBzeW50aGVzaXMgaGFzIHRvIGJlIGRvbmUgaW4gc29mdHdhcmUuIFRvIGFsbG93IHRoaXMKLXRoZSBkcml2ZXIvc291bmRjYXJkIHN1cHBvcnRzIHR3byBQQ00gKC9kZXYvZHNwKSBpbnRlcmZhY2VzLgotCi1UaGVyZSBpcyBhIGZyZWVseSBhdmFpbGFibGUgc29mdHdhcmUgcGFja2FnZSB0aGF0IGFsbG93cwotTUlESSBmaWxlIHBsYXliYWNrIG9uIHRoaXMgc291bmRjYXJkIGNhbGxlZCBUaW1pZGl0eS4KLVNlZSBodHRwOi8vd3d3LmNncy5maS9+dHQvdGltaWRpdHkvLgotCi0KLQotVGhvbWFzIFNhaWxlcgotdC5zYWlsZXJAYWx1bW5pLmV0aHouY2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eCBiL0RvY3VtZW50YXRpb24vc3BpL3B4YTJ4eAppbmRleCAyMTVlM2I4Li5mMzg1M2NjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NwaS9weGEyeHgKKysrIGIvRG9jdW1lbnRhdGlvbi9zcGkvcHhhMnh4CkBAIC0xLDQgKzEsNCBAQAot77u/UFhBMnh4IFNQSSBvbiBTU1AgZHJpdmVyIEhPV1RPCitQWEEyeHggU1BJIG9uIFNTUCBkcml2ZXIgSE9XVE8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogVGhpcyBhIG1pbmkgaG93dG8gb24gdGhlIHB4YTJ4eF9zcGkgZHJpdmVyLiAgVGhlIGRyaXZlciB0dXJucyBhIFBYQTJ4eAogc3luY2hyb25vdXMgc2VyaWFsIHBvcnQgaW50byBhIFNQSSBtYXN0ZXIgY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90aGlua3BhZC1hY3BpLnR4dCBiL0RvY3VtZW50YXRpb24vdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNjA5NTNkNi4uZWM0OTkyNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90aGlua3BhZC1hY3BpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RoaW5rcGFkLWFjcGkudHh0CkBAIC0xMDUsMTAgKzEwNSwxNSBAQAogYXMgYSBkcml2ZXIgYXR0cmlidXRlIChzZWUgYmVsb3cpLgogCiBTeXNmcyBkcml2ZXIgYXR0cmlidXRlcyBhcmUgb24gdGhlIGRyaXZlcidzIHN5c2ZzIGF0dHJpYnV0ZSBzcGFjZSwKLWZvciAyLjYuMjAgdGhpcyBpcyAvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3RoaW5rcGFkX2FjcGkvLgorZm9yIDIuNi4yMyB0aGlzIGlzIC9zeXMvYnVzL3BsYXRmb3JtL2RyaXZlcnMvdGhpbmtwYWRfYWNwaS8gYW5kCisvc3lzL2J1cy9wbGF0Zm9ybS9kcml2ZXJzL3RoaW5rcGFkX2h3bW9uLwogCi1TeXNmcyBkZXZpY2UgYXR0cmlidXRlcyBhcmUgb24gdGhlIGRyaXZlcidzIHN5c2ZzIGF0dHJpYnV0ZSBzcGFjZSwKLWZvciAyLjYuMjAgdGhpcyBpcyAvc3lzL2RldmljZXMvcGxhdGZvcm0vdGhpbmtwYWRfYWNwaS8uCitTeXNmcyBkZXZpY2UgYXR0cmlidXRlcyBhcmUgb24gdGhlIHRoaW5rcGFkX2FjcGkgZGV2aWNlIHN5c2ZzIGF0dHJpYnV0ZQorc3BhY2UsIGZvciAyLjYuMjMgdGhpcyBpcyAvc3lzL2RldmljZXMvcGxhdGZvcm0vdGhpbmtwYWRfYWNwaS8uCisKK1N5c2ZzIGRldmljZSBhdHRyaWJ1dGVzIGZvciB0aGUgc2Vuc29ycyBhbmQgZmFuIGFyZSBvbiB0aGUKK3RoaW5rcGFkX2h3bW9uIGRldmljZSdzIHN5c2ZzIGF0dHJpYnV0ZSBzcGFjZSwgYnV0IHlvdSBzaG91bGQgbG9jYXRlIGl0Citsb29raW5nIGZvciBhIGh3bW9uIGRldmljZSB3aXRoIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiAidGhpbmtwYWQiLgogCiBEcml2ZXIgdmVyc2lvbgogLS0tLS0tLS0tLS0tLS0KQEAgLTc2Niw3ICs3NzEsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBwcm9jZnM6IC9wcm9jL2FjcGkvaWJtL3RoZXJtYWwKLXN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzOiAoaHdtb24pIHRlbXAqX2lucHV0CitzeXNmcyBkZXZpY2UgYXR0cmlidXRlczogKGh3bW9uICJ0aGlua3BhZCIpIHRlbXAqX2lucHV0CiAKIE1vc3QgVGhpbmtQYWRzIGluY2x1ZGUgc2l4IG9yIG1vcmUgc2VwYXJhdGUgdGVtcGVyYXR1cmUgc2Vuc29ycyBidXQgb25seQogZXhwb3NlIHRoZSBDUFUgdGVtcGVyYXR1cmUgdGhyb3VnaCB0aGUgc3RhbmRhcmQgQUNQSSBtZXRob2RzLiAgVGhpcwpAQCAtOTg5LDcgKzk5NCw5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogcHJvY2ZzOiAvcHJvYy9hY3BpL2libS9mYW4KLXN5c2ZzIGRldmljZSBhdHRyaWJ1dGVzOiAoaHdtb24pIGZhbl9pbnB1dCwgcHdtMSwgcHdtMV9lbmFibGUKK3N5c2ZzIGRldmljZSBhdHRyaWJ1dGVzOiAoaHdtb24gInRoaW5rcGFkIikgZmFuMV9pbnB1dCwgcHdtMSwKKwkJCSAgcHdtMV9lbmFibGUKK3N5c2ZzIGh3bW9uIGRyaXZlciBhdHRyaWJ1dGVzOiBmYW5fd2F0Y2hkb2cKIAogTk9URSBOT1RFIE5PVEU6IGZhbiBjb250cm9sIG9wZXJhdGlvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgZm9yCiBzYWZldHkgcmVhc29ucy4gIFRvIGVuYWJsZSB0aGVtLCB0aGUgbW9kdWxlIHBhcmFtZXRlciAiZmFuX2NvbnRyb2w9MSIKQEAgLTEwMjgsNyArMTAzNSw3IEBACiAKIEFuIGVuYWJsZWQgZmFuIGluIGxldmVsICJhdXRvIiBtYXkgc3RvcCBzcGlubmluZyBpZiB0aGUgRUMgZGVjaWRlcyB0aGUKIFRoaW5rUGFkIGlzIGNvb2wgZW5vdWdoIGFuZCBkb2Vzbid0IG5lZWQgdGhlIGV4dHJhIGFpcmZsb3cuICBUaGlzIGlzCi1ub3JtYWwsIGFuZCB0aGUgRUMgd2lsbCBzcGluIHRoZSBmYW4gdXAgaWYgdGhlIHZhcmlvcyB0aGVybWFsIHJlYWRpbmdzCitub3JtYWwsIGFuZCB0aGUgRUMgd2lsbCBzcGluIHRoZSBmYW4gdXAgaWYgdGhlIHZhcmlvdXMgdGhlcm1hbCByZWFkaW5ncwogcmlzZSB0b28gbXVjaC4KIAogT24gdGhlIFg0MCwgdGhpcyBzZWVtcyB0byBkZXBlbmQgb24gdGhlIENQVSBhbmQgSEREIHRlbXBlcmF0dXJlcy4KQEAgLTExMzEsNyArMTEzOCw3IEBACiAJd2hpY2ggY2FuIHRha2UgdXAgdG8gdHdvIG1pbnV0ZXMuICBNYXkgcmV0dXJuIHJ1YmJpc2ggb24gb2xkZXIKIAlUaGlua1BhZHMuCiAKLWRyaXZlciBhdHRyaWJ1dGUgZmFuX3dhdGNoZG9nOgoraHdtb24gZHJpdmVyIGF0dHJpYnV0ZSBmYW5fd2F0Y2hkb2c6CiAJRmFuIHNhZmV0eSB3YXRjaGRvZyB0aW1lciBpbnRlcnZhbCwgaW4gc2Vjb25kcy4gIE1pbmltdW0gaXMKIAkxIHNlY29uZCwgbWF4aW11bSBpcyAxMjAgc2Vjb25kcy4gIDAgZGlzYWJsZXMgdGhlIHdhdGNoZG9nLgogCkBAIC0xMTk2LDcgKzEyMDMsNyBAQAogRW5hYmxpbmcgZGVidWdnaW5nIG91dHB1dAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgbW9kdWxlIHRha2VzIGEgZGVidWcgcGFyYW1hdGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbGVjdGl2ZWx5CitUaGUgbW9kdWxlIHRha2VzIGEgZGVidWcgcGFyYW1ldGVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNlbGVjdGl2ZWx5CiBlbmFibGUgdmFyaW91cyBjbGFzc2VzIG9mIGRlYnVnZ2luZyBvdXRwdXQsIGZvciBleGFtcGxlOgogCiAJIG1vZHByb2JlIGlibV9hY3BpIGRlYnVnPTB4ZmZmZgpAQCAtMTIzMywzICsxMjQwLDkgQEAKIAkJbGF5ZXIsIHRoZSByYWRpbyBzd2l0Y2ggZ2VuZXJhdGVzIGlucHV0IGV2ZW50IEVWX1JBRElPLAogCQlhbmQgdGhlIGRyaXZlciBlbmFibGVzIGhvdCBrZXkgaGFuZGxpbmcgYnkgZGVmYXVsdCBpbgogCQl0aGUgZmlybXdhcmUuCisKKzB4MDIwMDAwOglBQkkgZml4OiBhZGRlZCBhIHNlcGFyYXRlIGh3bW9uIHBsYXRmb3JtIGRldmljZSBhbmQKKwkJZHJpdmVyLCB3aGljaCBtdXN0IGJlIGxvY2F0ZWQgYnkgbmFtZSAodGhpbmtwYWQpCisJCWFuZCB0aGUgaHdtb24gY2xhc3MgZm9yIGxpYnNlbnNvcnM0IChsbS1zZW5zb3JzIDMpCisJCWNvbXBhdGliaWxpdHkuICBNb3ZlZCBhbGwgaHdtb24gYXR0cmlidXRlcyB0byB0aGlzCisJCW5ldyBwbGF0Zm9ybSBkZXZpY2UuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CmluZGV4IDRlMGI2MmIuLjhiMDc3ZTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CkBAIC0zMzgsNyArMzM4LDcgQEAKICAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBNQ1QgVVNCLVJTMjMyIENvbnZlcnRlciAoMjUgcGluLCBNb2RlbCBOby4KICAgVTIzMi1QMjUpIGZyb20gTWFnaWMgQ29udHJvbCBUZWNobm9sb2d5IENvcnAuICh0aGVyZSBpcyBhbHNvIGEgOSBwaW4KICAgTW9kZWwgTm8uIFUyMzItUDkpLiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZGV2aWNlIGNhbiBiZSBmb3VuZCBhdAotICB0aGUgbWFudWZhY3R1cmUncyB3ZWItc2l0ZTogaHR0cDovL3d3dy5tY3QuY29tLnR3LgorICB0aGUgbWFudWZhY3R1cmVyJ3Mgd2ViLXNpdGU6IGh0dHA6Ly93d3cubWN0LmNvbS50dy4KIAogICBUaGUgZHJpdmVyIGlzIGdlbmVyYWxseSB3b3JraW5nLCB0aG91Z2ggaXQgc3RpbGwgbmVlZHMgc29tZSBtb3JlIHRlc3RpbmcuCiAgIEl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgQmVsa2luIFVTQiBTZXJpYWwgQWRhcHRlciBGNVUxMDMgZHJpdmVyIGFuZCBpdHMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggMTBkZWFiZS4uMWZkNmQwMiAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE5NjMsMTEgKzE5NjMsNiBAQAogTDoJbGludXgtZmJkZXYtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQogUzoJTWFpbnRhaW5lZAogCi1JTlRFTCBBUElDL0lPQVBJQywgTE9XTEVWRUwgWDg2IFNNUCBTVVBQT1JUCi1QOglJbmdvIE1vbG5hcgotTToJbWluZ29AcmVkaGF0LmNvbQotUzoJTWFpbnRhaW5lZAotCiBJTlRFTCBJOFhYIFJBTkRPTSBOVU1CRVIgR0VORVJBVE9SIFNVUFBPUlQKIFA6CUplZmYgR2FyemlrCiBNOglqZ2FyemlrQHBvYm94LmNvbQpAQCAtMjE3OCw3ICsyMTczLDcgQEAKIEtDT05GSUcKIFA6CVJvbWFuIFppcHBlbAogTToJemlwcGVsQGxpbnV4LW02OGsub3JnCi1MOglrYnVpbGQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eC1rYnVpbGRAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKIEtEVU1QCkBAIC0yMjA3LDYgKzIyMDIsNyBAQAogUDoJU2FtIFJhdm5ib3JnCiBNOglzYW1AcmF2bmJvcmcub3JnCiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NhbS9rYnVpbGQuZ2l0CitMOglsaW51eC1rYnVpbGRAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKIEtFUk5FTCBKQU5JVE9SUwpAQCAtMjIzNCw3ICsyMjMwLDcgQEAKIEtFWEVDCiBQOglFcmljIEJpZWRlcm1hbgogTToJZWJpZWRlcm1AeG1pc3Npb24uY29tCi1XOglodHRwOi8vd3d3LnhtaXNzaW9uLmNvbS9+ZWJpZWRlcm0vZmlsZXMva2V4ZWMvCitXOglodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvaG9ybXMva2V4ZWMtdG9vbHMvCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBMOglrZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCiBTOglNYWludGFpbmVkCkBAIC0yOTQwLDEzICsyOTM2LDYgQEAKIEw6CWxpbnV4LXBjaUBhdHJleS5rYXJsaW4ubWZmLmN1bmkuY3oKIFM6CVN1cHBvcnRlZAogCi1QQ0kgU09VTkQgRFJJVkVSUyAoRVMxMzcwLCBFUzEzNzEgYW5kIFNPTklDVklCRVMpCi1QOglUaG9tYXMgU2FpbGVyCi1NOglzYWlsZXJAaWZlLmVlLmV0aHouY2gKLUw6CWxpbnV4LXNvdW5kQHZnZXIua2VybmVsLm9yZwotVzoJaHR0cDovL3d3dy5pZmUuZWUuZXRoei5jaC9+c2FpbGVyL2xpbnV4L3BjaWF1ZGlvLmh0bWwKLVM6CU1haW50YWluZWQKLQogUENJIFNVQlNZU1RFTQogUDoJR3JlZyBLcm9haC1IYXJ0bWFuCiBNOglncmVna2hAc3VzZS5kZQpAQCAtNDI3NSw5ICs0MjY0LDE1IEBACiBMOglsaW51eC1zZXJpYWxAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKLVg4NiAzLUxFVkVMIFBBR0lORyAoUEFFKSBTVVBQT1JUCitYODYgQVJDSElURUNUVVJFICgzMi1CSVQgQU5EIDY0LUJJVCkKK1A6CVRob21hcyBHbGVpeG5lcgorTToJdGdseEBsaW51dHJvbml4LmRlCiBQOglJbmdvIE1vbG5hcgogTToJbWluZ29AcmVkaGF0LmNvbQorUDoJSC4gUGV0ZXIgQW52aW4KK006CWhwYUB6eXRvci5jb20KK0w6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CWdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC94ODYvbGludXgtMi42LXg4Ni5naXQKIFM6CU1haW50YWluZWQKIAogWUFNIERSSVZFUiBGT1IgQVguMjUKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggNTI5YjkwNC4uNTBiYjUwZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTc3NCw2ICs3NzQsOSBAQAogaWZkZWYgQ09ORklHX0hFQURFUlNfQ0hFQ0sKIAkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlIGhlYWRlcnNfY2hlY2sKIGVuZGlmCitpZmRlZiBDT05GSUdfU0FNUExFUworCSQoUSkkKE1BS0UpICQoYnVpbGQpPXNhbXBsZXMKK2VuZGlmCiAJJChjYWxsIHZtbGludXgtbW9kcG9zdCkKIAkkKGNhbGwgaWZfY2hhbmdlZF9ydWxlLHZtbGludXhfXykKIAkkKFEpcm0gLWYgLm9sZF92ZXJzaW9uCkBAIC04ODQsMTAgKzg4Nyw3IEBACiAKIHByZXBhcmUxOiBwcmVwYXJlMiBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBpbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCBcCiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS9hc20gaW5jbHVkZS9jb25maWcvYXV0by5jb25mCi1pZm5lcSAoJChLQlVJTERfTU9EVUxFUyksKQotCSQoUSlta2RpciAtcCAkKE1PRFZFUkRJUikKLQkkKFEpcm0gLWYgJChNT0RWRVJESVIpLyoKLWVuZGlmCisJJChjbWRfY3Jtb2R2ZXJkaXIpCiAKIGFyY2hwcmVwYXJlOiBwcmVwYXJlMSBzY3JpcHRzX2Jhc2ljCiAKQEAgLTkwMywxNCArOTAzLDI0IEBACiAKIGV4cG9ydCBDUFBGTEFHU192bWxpbnV4LmxkcyArPSAtUCAtQyAtVSQoQVJDSCkKIAotIyBGSVhNRTogVGhlIGFzbSBzeW1saW5rIGNoYW5nZXMgd2hlbiAkKEFSQ0gpIGNoYW5nZXMuIFRoYXQncwotIyBoYXJkIHRvIGRldGVjdCwgYnV0IEkgc3VwcG9zZSAibWFrZSBtcnByb3BlciIgaXMgYSBnb29kIGlkZWEKLSMgYmVmb3JlIHN3aXRjaGluZyBiZXR3ZWVuIGFyY2hzIGFueXdheS4KKyMgVGhlIGFzbSBzeW1saW5rIGNoYW5nZXMgd2hlbiAkKEFSQ0gpIGNoYW5nZXMuCisjIERldGVjdCB0aGlzIGFuZCBhc2sgdXNlciB0byBydW4gbWFrZSBtcnByb3BlcgogCi1pbmNsdWRlL2FzbToKLQlAZWNobyAnICBTWU1MSU5LICRAIC0+IGluY2x1ZGUvYXNtLSQoU1JDQVJDSCknCi0JJChRKWlmIFsgISAtZCBpbmNsdWRlIF07IHRoZW4gbWtkaXIgLXAgaW5jbHVkZTsgZmk7Ci0JQGxuIC1mc24gYXNtLSQoU1JDQVJDSCkgJEAKK2luY2x1ZGUvYXNtOiBGT1JDRQorCSQoUSlzZXQgLWU7IGFzbWxpbms9YHJlYWRsaW5rIGluY2x1ZGUvYXNtIHwgY3V0IC1kICctJyAtZiAyYDsgICBcCisJaWYgWyAtTCBpbmNsdWRlL2FzbSBdOyB0aGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgWyAiJCRhc21saW5rIiAhPSAiJChTUkNBUkNIKSIgXTsgdGhlbiAgICAgICAgICAgICAgICBcCisJCQllY2hvICJFUlJPUjogdGhlIHN5bWxpbmsgJEAgcG9pbnRzIHRvIGFzbS0kJGFzbWxpbmsgYnV0IGFzbS0kKFNSQ0FSQ0gpIHdhcyBleHBlY3RlZCI7IFwKKwkJCWVjaG8gIiAgICAgICBzZXQgQVJDSCBvciBzYXZlIC5jb25maWcgYW5kIHJ1biAnbWFrZSBtcnByb3BlcicgdG8gZml4IGl0IjsgICAgICAgICAgICAgXAorCQkJZXhpdCAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlmaTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwllbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQllY2hvICcgIFNZTUxJTksgJEAgLT4gaW5jbHVkZS9hc20tJChTUkNBUkNIKSc7ICAgICAgICAgIFwKKwkJaWYgWyAhIC1kIGluY2x1ZGUgXTsgdGhlbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlta2RpciAtcCBpbmNsdWRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWZpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlsbiAtZnNuIGFzbS0kKFNSQ0FSQ0gpICRAOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmaQogCiAjIEdlbmVyYXRlIHNvbWUgZmlsZXMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMDIwLDE5ICsxMDMwLDEyIEBACiAJZmkKIAkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kaW5zdAogCi0jIElmIFN5c3RlbS5tYXAgZXhpc3RzLCBydW4gZGVwbW9kLiAgVGhpcyBkZWxpYmVyYXRlbHkgZG9lcyBub3QgaGF2ZSBhCi0jIGRlcGVuZGVuY3kgb24gU3lzdGVtLm1hcCBzaW5jZSB0aGF0IHdvdWxkIHJ1biB0aGUgZGVwZW5kZW5jeSB0cmVlIG9uCi0jIHZtbGludXguICBUaGlzIGRlcG1vZCBpcyBvbmx5IGZvciBjb252ZW5pZW5jZSB0byBnaXZlIHRoZSBpbml0aWFsCisjIFRoaXMgZGVwbW9kIGlzIG9ubHkgZm9yIGNvbnZlbmllbmNlIHRvIGdpdmUgdGhlIGluaXRpYWwKICMgYm9vdCBhIG1vZHVsZXMuZGVwIGV2ZW4gYmVmb3JlIC8gaXMgbW91bnRlZCByZWFkLXdyaXRlLiAgSG93ZXZlciB0aGUKICMgYm9vdCBzY3JpcHQgZGVwbW9kIGlzIHRoZSBtYXN0ZXIgdmVyc2lvbi4KLWlmZXEgIiQoc3RyaXAgJChJTlNUQUxMX01PRF9QQVRIKSkiICIiCi1kZXBtb2Rfb3B0cwk6PQotZWxzZQotZGVwbW9kX29wdHMJOj0gLWIgJChJTlNUQUxMX01PRF9QQVRIKSAtcgotZW5kaWYKIFBIT05ZICs9IF9tb2RpbnN0X3Bvc3QKIF9tb2RpbnN0X3Bvc3Q6IF9tb2RpbnN0XwotCWlmIFsgLXIgU3lzdGVtLm1hcCAtYSAteCAkKERFUE1PRCkgXTsgdGhlbiAkKERFUE1PRCkgLWFlIC1GIFN5c3RlbS5tYXAgJChkZXBtb2Rfb3B0cykgJChLRVJORUxSRUxFQVNFKTsgZmkKKwkkKGNhbGwgY21kLGRlcG1vZCkKIAogZWxzZSAjIENPTkZJR19NT0RVTEVTCiAKQEAgLTEyMjAsOCArMTIyMyw3IEBACiBLQlVJTERfTU9EVUxFUyA6PSAxCiBQSE9OWSArPSBjcm1vZHZlcmRpcgogY3Jtb2R2ZXJkaXI6Ci0JJChRKW1rZGlyIC1wICQoTU9EVkVSRElSKQotCSQoUSlybSAtZiAkKE1PRFZFUkRJUikvKgorCSQoY21kX2NybW9kdmVyZGlyKQogCiBQSE9OWSArPSAkKG9ianRyZWUpL01vZHVsZS5zeW12ZXJzCiAkKG9ianRyZWUpL01vZHVsZS5zeW12ZXJzOgpAQCAtMTI0OSwxNSArMTI1MSw2IEBACiAJJChRKW1rZGlyIC1wICQoTU9ETElCKS8kKGluc3RhbGwtZGlyKQogCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkvc2NyaXB0cy9NYWtlZmlsZS5tb2RpbnN0CiAKLSMgUnVuIGRlcG1vZCBvbmx5IGlzIHdlIGhhdmUgU3lzdGVtLm1hcCBhbmQgZGVwbW9kIGlzIGV4ZWN1dGFibGUKLXF1aWV0X2NtZF9kZXBtb2QgPSBERVBNT0QgICQoS0VSTkVMUkVMRUFTRSkKLSAgICAgIGNtZF9kZXBtb2QgPSBpZiBbIC1yIFN5c3RlbS5tYXAgLWEgLXggJChERVBNT0QpIF07IHRoZW4gXAotICAgICAgICAgICAgICAgICAgICAgICQoREVQTU9EKSAtYWUgLUYgU3lzdGVtLm1hcCAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgJChpZiAkKHN0cmlwICQoSU5TVEFMTF9NT0RfUEFUSCkpLCAgICAgIFwKLQkJICAgICAgLWIgJChJTlNUQUxMX01PRF9QQVRIKSAtcikgICAgICAgICAgICAgIFwKLQkJICAgICAgJChLRVJORUxSRUxFQVNFKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICBmaQotCiBQSE9OWSArPSBfZW1vZGluc3RfcG9zdAogX2Vtb2RpbnN0X3Bvc3Q6IF9lbW9kaW5zdF8KIAkkKGNhbGwgY21kLGRlcG1vZCkKQEAgLTEzNDEsNyArMTMzNCw3IEBACiAJICBmaW5kICQoX19zcmN0cmVlKWluY2x1ZGUvYXNtLWdlbmVyaWMgJChSQ1NfRklORF9JR05PUkUpIFwKIAkgICAgICAgLW5hbWUgJDEgLXByaW50OyBcCiAJICBmaW5kICQoX19zcmN0cmVlKSAkKFJDU19GSU5EX0lHTk9SRSkgXAotCSAgICAgICBcKCAtbmFtZSBpbmNsdWRlIC1vIC1uYW1lIGFyY2ggXCkgLXBydW5lIC1vIFwKKwkgICAgICAgXCggLW5hbWUgaW5jbHVkZSAtbyAtbmFtZSBhcmNoIC1vIC1uYW1lICcudG1wXyonIFwpIC1wcnVuZSAtbyBcCiAJICAgICAgIC1uYW1lICQxIC1wcmludDsgXAogCSAgKQogZW5kZWYKQEAgLTE0OTAsOSArMTQ4MywxMSBAQAogCiAjIE1vZHVsZXMKIC8gJS86IHByZXBhcmUgc2NyaXB0cyBGT1JDRQorCSQoY21kX2NybW9kdmVyZGlyKQogCSQoUSkkKE1BS0UpIEtCVUlMRF9NT0RVTEVTPSQoaWYgJChDT05GSUdfTU9EVUxFUyksMSkgXAogCSQoYnVpbGQpPSQoYnVpbGQtZGlyKQogJS5rbzogcHJlcGFyZSBzY3JpcHRzIEZPUkNFCisJJChjbWRfY3Jtb2R2ZXJkaXIpCiAJJChRKSQoTUFLRSkgS0JVSUxEX01PRFVMRVM9JChpZiAkKENPTkZJR19NT0RVTEVTKSwxKSAgIFwKIAkkKGJ1aWxkKT0kKGJ1aWxkLWRpcikgJChAOi5rbz0ubykKIAkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdApAQCAtMTUwNiw2ICsxNTAxLDE5IEBACiBxdWlldF9jbWRfcm1maWxlcyA9ICQoaWYgJCh3aWxkY2FyZCAkKHJtLWZpbGVzKSksQ0xFQU4gICAkKHdpbGRjYXJkICQocm0tZmlsZXMpKSkKICAgICAgIGNtZF9ybWZpbGVzID0gcm0gLWYgJChybS1maWxlcykKIAorIyBSdW4gZGVwbW9kIG9ubHkgaXMgd2UgaGF2ZSBTeXN0ZW0ubWFwIGFuZCBkZXBtb2QgaXMgZXhlY3V0YWJsZQorIyBhbmQgd2UgYnVpbGQgZm9yIHRoZSBob3N0IGFyY2gKK3F1aWV0X2NtZF9kZXBtb2QgPSBERVBNT0QgICQoS0VSTkVMUkVMRUFTRSkKKyAgICAgIGNtZF9kZXBtb2QgPSBcCisJaWYgWyAtciBTeXN0ZW0ubWFwIC1hIC14ICQoREVQTU9EKSAtYSAiJChTVUJBUkNIKSIgPSAiJChBUkNIKSIgXTsgdGhlbiBcCisJCSQoREVQTU9EKSAtYWUgLUYgU3lzdGVtLm1hcCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSQoaWYgJChzdHJpcCAkKElOU1RBTExfTU9EX1BBVEgpKSwgLWIgJChJTlNUQUxMX01PRF9QQVRIKSAtcikgICBcCisJCSQoS0VSTkVMUkVMRUFTRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZmkKKworIyBDcmVhdGUgdGVtcG9yYXJ5IGRpciBmb3IgbW9kdWxlIHN1cHBvcnQgZmlsZXMKK2NtZF9jcm1vZHZlcmRpciA9ICQoUSlta2RpciAtcCAkKE1PRFZFUkRJUik7IHJtIC1mICQoTU9EVkVSRElSKS8qCisKIAogYV9mbGFncyA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKEtCVUlMRF9BRkxBR1MpICQoQUZMQUdTX0tFUk5FTCkgXAogCSAgJChOT1NURElOQ19GTEFHUykgJChLQlVJTERfQ1BQRkxBR1MpIFwKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvS2NvbmZpZyBiL2FyY2gvYWxwaGEvS2NvbmZpZwppbmRleCAyYTg1ZGMzLi40YzAwMmJhIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL0tjb25maWcKKysrIGIvYXJjaC9hbHBoYS9LY29uZmlnCkBAIC02NTQsNyArNjU0LDcgQEAKIAogc291cmNlICJmcy9LY29uZmlnIgogCi1zb3VyY2UgImFyY2gvYWxwaGEvb3Byb2ZpbGUvS2NvbmZpZyIKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uIgogCiBzb3VyY2UgImFyY2gvYWxwaGEvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX21hcnZlbC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX21hcnZlbC5jCmluZGV4IGYyOTU2YWMuLjQ5Nzg3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL2Vycl9tYXJ2ZWwuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfbWFydmVsLmMKQEAgLTEwODIsNyArMTA4Miw3IEBACiAJfQkKIAogCS8qCi0JICogQSBzeXN0ZW0gZXZlbnQgb3IgZXJyb3IgaGFzIG9jY3VyZWQsIGhhbmRsZSBpdCBoZXJlLgorCSAqIEEgc3lzdGVtIGV2ZW50IG9yIGVycm9yIGhhcyBvY2N1cnJlZCwgaGFuZGxlIGl0IGhlcmUuCiAJICoKIAkgKiBBbnkgZXJyb3JzIGluIHRoZSBsb2dvdXQgZnJhbWUgaGF2ZSBhbHJlYWR5IGJlZW4gY2xlYXJlZCBieSB0aGUKIAkgKiBQQUxjb2RlLCBzbyBqdXN0IHBhcnNlIGl0LgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX3RpdGFuLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwppbmRleCA1NDNkOTZkLi42ZjM4Njc4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9lcnJfdGl0YW4uYwpAQCAtNTkxLDcgKzU5MSw3IEBACiAJCShzdHJ1Y3QgZWxfUFJJVkFURUVSX2VudmRhdGFfbWNoZWNrICopCiAJCSgodW5zaWduZWQgbG9uZyltY2hrX2hlYWRlciArIG1jaGtfaGVhZGVyLT5zeXNfb2Zmc2V0KTsKIAotCS8qIFRPRE8gLSBjYXRhZ29yaXplIGVycm9ycywgZm9yIG5vdywgbm8gZXJyb3IgKi8KKwkvKiBUT0RPIC0gY2F0ZWdvcml6ZSBlcnJvcnMsIGZvciBub3csIG5vIGVycm9yICovCiAKIAlpZiAoIXByaW50KQogCQlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IGNlODU3MTUuLjY0MTNjNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKQEAgLTcxNSw3ICs3MTUsNyBAQAogCQkvKiAKIAkJICogQWxwaGEgQXJjaGl0ZWN0dXJlIEhhbmRib29rIDQuNy43LjM6CiAJCSAqIFRvIGJlIGZ1bGx5IElFRUUgY29tcGlhbnQsIHdlIG11c3QgdHJhY2sgdGhlIGN1cnJlbnQgSUVFRQotCQkgKiBleGNlcHRpb24gc3RhdGUgaW4gc29mdHdhcmUsIGJlY2F1c2Ugc3B1cnJpb3VzIGJpdHMgY2FuIGJlCisJCSAqIGV4Y2VwdGlvbiBzdGF0ZSBpbiBzb2Z0d2FyZSwgYmVjYXVzZSBzcHVyaW91cyBiaXRzIGNhbiBiZQogCQkgKiBzZXQgaW4gdGhlIHRyYXAgc2hhZG93IG9mIGEgc29mdHdhcmUtY29tcGxldGUgaW5zbi4KIAkJICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2VtYXBob3JlLmMKaW5kZXggOGM4YWFhMi4uOGQyOTgyYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc2VtYXBob3JlLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2VtYXBob3JlLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKIAlwcmludGsoIiVzKCVkKTogZG93biBmYWlsZWQoJXApXG4iLAotCSAgICAgICB0c2stPmNvbW0sIHRzay0+cGlkLCBzZW0pOworCSAgICAgICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHNlbSk7CiAjZW5kaWYKIAogCXRzay0+c3RhdGUgPSBUQVNLX1VOSU5URVJSVVBUSUJMRTsKQEAgLTk4LDcgKzk4LDcgQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKIAlwcmludGsoIiVzKCVkKTogZG93biBhY3F1aXJlZCglcClcbiIsCi0JICAgICAgIHRzay0+Y29tbSwgdHNrLT5waWQsIHNlbSk7CisJICAgICAgIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgc2VtKTsKICNlbmRpZgogfQogCkBAIC0xMTEsNyArMTExLDcgQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKIAlwcmludGsoIiVzKCVkKTogZG93biBmYWlsZWQoJXApXG4iLAotCSAgICAgICB0c2stPmNvbW0sIHRzay0+cGlkLCBzZW0pOworCSAgICAgICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHNlbSk7CiAjZW5kaWYKIAogCXRzay0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CkBAIC0xMzksNyArMTM5LDcgQEAKIAogI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKIAlwcmludGsoIiVzKCVkKTogZG93biAlcyglcClcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksCiAJICAgICAgIChyZXQgPCAwID8gImludGVycnVwdGVkIiA6ICJhY3F1aXJlZCIpLCBzZW0pOwogI2VuZGlmCiAJcmV0dXJuIHJldDsKQEAgLTE2OCw3ICsxNjgsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQogCXByaW50aygiJXMoJWQpOiBkb3duKCVwKSA8Y291bnQ9JWQ+IGZyb20gJXBcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc2VtLAorCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc2VtLAogCSAgICAgICBhdG9taWNfcmVhZCgmc2VtLT5jb3VudCksIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAjZW5kaWYKIAlfX2Rvd24oc2VtKTsKQEAgLTE4Miw3ICsxODIsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQogCXByaW50aygiJXMoJWQpOiBkb3duKCVwKSA8Y291bnQ9JWQ+IGZyb20gJXBcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc2VtLAorCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc2VtLAogCSAgICAgICBhdG9taWNfcmVhZCgmc2VtLT5jb3VudCksIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAjZW5kaWYKIAlyZXR1cm4gX19kb3duX2ludGVycnVwdGlibGUoc2VtKTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1NFTUFQSE9SRQogCXByaW50aygiJXMoJWQpOiBkb3duX3RyeWxvY2sgJXMgZnJvbSAlcFxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkgICAgICAgcmV0ID8gImZhaWxlZCIgOiAiYWNxdWlyZWQiLAogCSAgICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogI2VuZGlmCkBAIC0yMTcsNyArMjE3LDcgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19ERUJVR19TRU1BUEhPUkUKIAlwcmludGsoIiVzKCVkKTogdXAoJXApIDxjb3VudD0lZD4gZnJvbSAlcFxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBzZW0sCisJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzZW0sCiAJICAgICAgIGF0b21pY19yZWFkKCZzZW0tPmNvdW50KSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKICNlbmRpZgogCV9fdXAoc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NtcC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKaW5kZXggYWQxNzY0NC4uZjRhYjIzMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMKQEAgLTQzOSw3ICs0MzksNiBAQAogCQkJCSgoY2hhciAqKWNwdWJhc2UgKyBpKmh3cnBiLT5wcm9jZXNzb3Jfc2l6ZSk7CiAJCQlpZiAoKGNwdS0+ZmxhZ3MgJiAweDFjYykgPT0gMHgxY2MpIHsKIAkJCQlzbXBfbnVtX3Byb2JlZCsrOwotCQkJCS8qIEFzc3VtZSBoZXJlIHRoYXQgIndoYW1pIiA9PSBpbmRleCAqLwogCQkJCWNwdV9zZXQoaSwgY3B1X3ByZXNlbnRfbWFwKTsKIAkJCQljcHUtPnBhbF9yZXZpc2lvbiA9IGJvb3RfY3B1X3BhbHJldjsKIAkJCX0KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c19hbGNvci5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2FsY29yLmMKaW5kZXggNDliZWRmYi4uZDE4N2QwMSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2FsY29yLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX2FsY29yLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAJZm9yIChpID0gMTY7IGkgPCA0ODsgKytpKSB7CiAJCS8qIE9uIEFsY29yLCBhdCBsZWFzdCwgbGluZXMgMjAuLjMwIGFyZSBub3QgY29ubmVjdGVkCi0JCSAgIGFuZCBjYW4gZ2VuZXJhdGUgc3B1cnJpb3VzIGludGVycnVwdHMgaWYgd2UgdHVybiB0aGVtCisJCSAgIGFuZCBjYW4gZ2VuZXJhdGUgc3B1cmlvdXMgaW50ZXJydXB0cyBpZiB3ZSB0dXJuIHRoZW0KIAkJICAgb24gd2hpbGUgSVJRIHByb2JpbmcuICAqLwogCQlpZiAoaSA+PSAxNisyMCAmJiBpIDw9IDE2KzMwKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2lvLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfc2lvLmMKaW5kZXggMTRiNWE3NS4uZWU3YjkwMCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3Npby5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19zaW8uYwpAQCAtNzgsNyArNzgsNyBAQAogICogZXhhbXBsZSwgc291bmQgYm9hcmRzIHNlZW0gdG8gbGlrZSB1c2luZyBJUlEgOS4KICAqCiAgKiBUaGlzIGlzIE5PVCBob3cgd2Ugc2hvdWxkIGRvIGl0LiBQSVJRMC1YIHNob3VsZCBoYXZlCi0gKiB0aGVpciBvd24gSVJRJ3MsIHRoZSB3YXkgaW50ZWwgdXNlcyB0aGUgSU8tQVBJQyBpcnEncy4KKyAqIHRoZWlyIG93biBJUlFzLCB0aGUgd2F5IGludGVsIHVzZXMgdGhlIElPLUFQSUMgSVJRcy4KICAqLwogCiBzdGF0aWMgdm9pZCBfX2luaXQKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC90cmFwcy5jCmluZGV4IGVjMGYwNWUuLjJkYzdmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdHJhcHMuYwpAQCAtMTgyLDcgKzE4Miw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCXByaW50aygiQ1BVICVkICIsIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKICNlbmRpZgotCXByaW50aygiJXMoJWQpOiAlcyAlbGRcbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc3RyLCBlcnIpOworCXByaW50aygiJXMoJWQpOiAlcyAlbGRcbiIsIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzdHIsIGVycik7CiAJZGlrX3Nob3dfcmVncyhyZWdzLCByOV8xNSk7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7CiAJZGlrX3Nob3dfdHJhY2UoKHVuc2lnbmVkIGxvbmcgKikocmVncysxKSk7CkBAIC02NDYsNyArNjQ2LDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCiAJcHJpbnRrKCIlcyglZCk6IHVuaGFuZGxlZCB1bmFsaWduZWQgZXhjZXB0aW9uXG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOworCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlwcmludGsoInBjID0gWzwlMDE2bHg+XSAgcmEgPSBbPCUwMTZseD5dICBwcyA9ICUwNGx4XG4iLAogCSAgICAgICBwYywgdW5hX3JlZygyNiksIHJlZ3MtPnBzKTsKQEAgLTc4Niw3ICs3ODYsNyBAQAogCQl9CiAJCWlmICgrK2NudCA8IDUpIHsKIAkJCXByaW50aygiJXMoJWQpOiB1bmFsaWduZWQgdHJhcCBhdCAlMDE2bHg6ICVwICVseCAlbGRcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAogCQkJICAgICAgIHJlZ3MtPnBjIC0gNCwgdmEsIG9wY29kZSwgcmVnKTsKIAkJfQogCQlsYXN0X3RpbWUgPSBqaWZmaWVzOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvY2hlY2tzdW0uYyBiL2FyY2gvYWxwaGEvbGliL2NoZWNrc3VtLmMKaW5kZXggODY5OGUwNy4uMTk5ZjZlZiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9saWIvY2hlY2tzdW0uYworKysgYi9hcmNoL2FscGhhL2xpYi9jaGVja3N1bS5jCkBAIC01LDcgKzUsNyBAQAogICogaW4gYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIG1hbm5lciBkdWUgdG8gc3BlZWQuLgogICogQ29tbWVudHMgaW4gb3RoZXIgdmVyc2lvbnMgaW5kaWNhdGUgdGhhdCB0aGUgYWxnb3JpdGhtcyBhcmUgZnJvbSBSRkMxMDcxCiAgKgotICogYWNjZWxsZXJhdGVkIHZlcnNpb25zIChhbmQgMjEyNjQgYXNzZW1ibHkgdmVyc2lvbnMgKSBjb250cmlidXRlZCBieQorICogYWNjZWxlcmF0ZWQgdmVyc2lvbnMgKGFuZCAyMTI2NCBhc3NlbWJseSB2ZXJzaW9ucyApIGNvbnRyaWJ1dGVkIGJ5CiAgKglSaWNrIEdvcnRvbgk8cmljay5nb3J0b25AYWxwaGEtcHJvY2Vzc29yLmNvbT4KICAqLwogIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvY3N1bV9wYXJ0aWFsX2NvcHkuYyBiL2FyY2gvYWxwaGEvbGliL2NzdW1fcGFydGlhbF9jb3B5LmMKaW5kZXggNGNhNzVjNy4uNDA3MzZkYSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9saWIvY3N1bV9wYXJ0aWFsX2NvcHkuYworKysgYi9hcmNoL2FscGhhL2xpYi9jc3VtX3BhcnRpYWxfY29weS5jCkBAIC0yLDcgKzIsNyBAQAogICogY3N1bV9wYXJ0aWFsX2NvcHkgLSBkbyBJUCBjaGVja3N1bW1pbmcgYW5kIGNvcHkKICAqCiAgKiAoQykgQ29weXJpZ2h0IDE5OTYgTGludXMgVG9ydmFsZHMKLSAqIGFjY2VsbGVyYXRlZCB2ZXJzaW9ucyAoYW5kIDIxMjY0IGFzc2VtYmx5IHZlcnNpb25zICkgY29udHJpYnV0ZWQgYnkKKyAqIGFjY2VsZXJhdGVkIHZlcnNpb25zIChhbmQgMjEyNjQgYXNzZW1ibHkgdmVyc2lvbnMgKSBjb250cmlidXRlZCBieQogICoJUmljayBHb3J0b24JPHJpY2suZ29ydG9uQGFscGhhLXByb2Nlc3Nvci5jb20+CiAgKgogICogRG9uJ3QgbG9vayBhdCB0aGlzIHRvbyBjbG9zZWx5IC0geW91J2xsIGdvIG1hZC4gVGhlIHRoaW5ncwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9saWIvZmxzLmMgYi9hcmNoL2FscGhhL2xpYi9mbHMuYwppbmRleCA3YWQ4NGVhLi4zMmFmYWEzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2xpYi9mbHMuYworKysgYi9hcmNoL2FscGhhL2xpYi9mbHMuYwpAQCAtMyw3ICszLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAvKiBUaGlzIGlzIGZscyh4KS0xLCBleGNlcHQgemVybyBpcyBoZWxkIHRvIHplcm8uICBUaGlzIGFsbG93cyBtb3N0CiAgICBlZmZpY2VudCBpbnB1dCBpbnRvIGV4dGJsLCBwbHVzIGl0IGFsbG93cyBlYXN5IGhhbmRsaW5nIG9mIGZscygwKT0wLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vZmF1bHQuYyBiL2FyY2gvYWxwaGEvbW0vZmF1bHQuYwppbmRleCAyNTE1NGRmLi40ODI5Zjk2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCkBAIC0xODgsMTMgKzE4OCwxMyBAQAogCS8qIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQKIAkgICBtYWRlIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4gICovCiAgb3V0X29mX21lbW9yeToKLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKIAl9CiAJcHJpbnRrKEtFUk5fQUxFUlQgIlZNOiBraWxsaW5nIHByb2Nlc3MgJXMoJWQpXG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOworCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCWdvdG8gbm9fY29udGV4dDsKIAlkb19ncm91cF9leGl0KFNJR0tJTEwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9pbml0LmMgYi9hcmNoL2FscGhhL21tL2luaXQuYwppbmRleCA1ZTZkYTQ3Li40MGMxNWU3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL21tL2luaXQuYworKysgYi9hcmNoL2FscGhhL21tL2luaXQuYwpAQCAtMjM1LDcgKzIzNSw3IEBACiAJCQl1bnNpZ25lZCBsb25nIHBmbiA9IGNyYi0+bWFwW2ldLnBhID4+IFBBR0VfU0hJRlQ7CiAJCQljcmItPm1hcFtpXS52YSA9IHZhZGRyOwogCQkJZm9yIChqID0gMDsgaiA8IGNyYi0+bWFwW2ldLmNvdW50OyArK2opIHsKLQkJCQkvKiBOZXdlciBjb25zb2xlJ3MgKGVzcGVjaWFsbHkgb24gbGFyZ2VyCisJCQkJLyogTmV3ZXIgY29uc29sZXMgKGVzcGVjaWFsbHkgb24gbGFyZ2VyCiAJCQkJICAgc3lzdGVtcykgbWF5IHJlcXVpcmUgbW9yZSBwYWdlcyBvZgogCQkJCSAgIFBURXMuIEdyYWIgYWRkaXRpb25hbCBwYWdlcyBhcyBuZWVkZWQuICovCiAJCQkJaWYgKHBtZCAhPSBwbWRfb2Zmc2V0KHBnZCwgdmFkZHIpKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL29wcm9maWxlL0tjb25maWcgYi9hcmNoL2FscGhhL29wcm9maWxlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZGUxOTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hbHBoYS9vcHJvZmlsZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotCi1tZW51ICJQcm9maWxpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCi1jb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAotCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCi0JICAKLQotY29uZmlnIE9QUk9GSUxFCi0JdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQUk9GSUxJTkcKLQloZWxwCi0JICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCi0JICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKLQkgIGFuZCBhcHBsaWNhdGlvbnMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWVuZG1lbnUKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9vcHJvZmlsZS9vcF9pbXBsLmggYi9hcmNoL2FscGhhL29wcm9maWxlL29wX2ltcGwuaAppbmRleCA2Yjk3ODkzLi5iMmI4N2FlIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL29wcm9maWxlL29wX2ltcGwuaAorKysgYi9hcmNoL2FscGhhL29wcm9maWxlL29wX2ltcGwuaApAQCAtMzgsNyArMzgsNyBAQAogCXVuc2lnbmVkIGxvbmcgbmVlZF9yZXNldDsKIH07CiAKLS8qIFBlci1hcmNoaXRlY3R1cmUgY29uZmlndXJ5IGFuZCBob29rcy4gICovCisvKiBQZXItYXJjaGl0ZWN0dXJlIGNvbmZpZ3VyYXRpb24gYW5kIGhvb2tzLiAgKi8KIHN0cnVjdCBvcF9heHBfbW9kZWwgewogCXZvaWQgKCpyZWdfc2V0dXApIChzdHJ1Y3Qgb3BfcmVnaXN0ZXJfY29uZmlnICosCiAJCQkgICBzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL0tjb25maWcgYi9hcmNoL2FybS9LY29uZmlnCmluZGV4IDBhMGM4OGQuLmEwY2RhYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL0tjb25maWcKKysrIGIvYXJjaC9hcm0vS2NvbmZpZwpAQCAtODUxLDcgKzg1MSw3IEBACiAJaGVscAogCSAga2V4ZWMgaXMgYSBzeXN0ZW0gY2FsbCB0aGF0IGltcGxlbWVudHMgdGhlIGFiaWxpdHkgdG8gc2h1dGRvd24geW91cgogCSAgY3VycmVudCBrZXJuZWwsIGFuZCB0byBzdGFydCBhbm90aGVyIGtlcm5lbC4gIEl0IGlzIGxpa2UgYSByZWJvb3QKLQkgIGJ1dCBpdCBpcyBpbmRlcGVkZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKKwkgIGJ1dCBpdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3lzdGVtIGZpcm13YXJlLiAgIEFuZCBsaWtlIGEgcmVib290CiAJICB5b3UgY2FuIHN0YXJ0IGFueSBrZXJuZWwgd2l0aCBpdCwgbm90IGp1c3QgTGludXguCiAKIAkgIEl0IGlzIGFuIG9uZ29pbmcgcHJvY2VzcyB0byBiZSBjZXJ0YWluIHRoZSBoYXJkd2FyZSBpbiBhIG1hY2hpbmUKQEAgLTEwNjgsNyArMTA2OCw3IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAotc291cmNlICJhcmNoL2FybS9vcHJvZmlsZS9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCiAKIHNvdXJjZSAiYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKaW5kZXggMTExYTdmYTUuLjViYmE1MjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9hcG0tZW11bGF0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KQEAgLTc2NSw5ICs3NjYsOSBAQAogCWluZm8tPmJhdHRlcnlfbGlmZSA9IHNoYXJwc2xfcG0uYmF0dHN0YXQubWFpbmJhdF9wZXJjZW50OwogfQogCi1zdGF0aWMgc3RydWN0IHBtX29wcyBzaGFycHNsX3BtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgc2hhcnBzbF9wbV9vcHMgPSB7CiAJLmVudGVyCQk9IGNvcmdpX3B4YV9wbV9lbnRlciwKLQkudmFsaWQJCT0gcG1fdmFsaWRfb25seV9tZW0sCisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaGFycHNsX3BtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC03OTksNyArODAwLDcgQEAKIAogCWFwbV9nZXRfcG93ZXJfc3RhdHVzID0gc2hhcnBzbF9hcG1fZ2V0X3Bvd2VyX3N0YXR1czsKIAotCXBtX3NldF9vcHMoJnNoYXJwc2xfcG1fb3BzKTsKKwlzdXNwZW5kX3NldF9vcHMoJnNoYXJwc2xfcG1fb3BzKTsKIAogCW1vZF90aW1lcigmc2hhcnBzbF9wbS5hY190aW1lciwgamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjUwKSk7CiAKQEAgLTgwOCw3ICs4MDksNyBAQAogCiBzdGF0aWMgaW50IHNoYXJwc2xfcG1fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JcG1fc2V0X29wcyhOVUxMKTsKKwlzdXNwZW5kX3NldF9vcHMoTlVMTCk7CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX2JhdHRlcnlfcGVyY2VudGFnZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9iYXR0ZXJ5X3ZvbHRhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggOTNiN2Y4ZS4uNGYxYTAzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yNjUsNyArMjY1LDcgQEAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlwcmludGsoIlxuIik7Ci0JcHJpbnRrKCJQaWQ6ICVkLCBjb21tOiAlMjBzXG4iLCBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0pOworCXByaW50aygiUGlkOiAlZCwgY29tbTogJTIwc1xuIiwgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0pOwogCV9fc2hvd19yZWdzKHJlZ3MpOwogCV9fYmFja3RyYWNlKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNWZlZWU3Mi4uNGIwNWRjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzgyLDE2ICszODIsMTYgQEAKIAogCQlpZiAocmV0ICE9IDIgfHwgb2xkX2luc24udGh1bWIgIT0gQlJFQUtJTlNUX1RIVU1CKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczolZDogY29ycnVwdGVkIFRodW1iIGJyZWFrcG9pbnQgYXQgIgotCQkJCSIweCUwOGx4ICgweCUwNHgpXG4iLCB0YXNrLT5jb21tLCB0YXNrLT5waWQsCi0JCQkJYWRkciwgb2xkX2luc24udGh1bWIpOworCQkJCSIweCUwOGx4ICgweCUwNHgpXG4iLCB0YXNrLT5jb21tLAorCQkJCXRhc2tfcGlkX25yKHRhc2spLCBhZGRyLCBvbGRfaW5zbi50aHVtYik7CiAJfSBlbHNlIHsKIAkJcmV0ID0gc3dhcF9pbnNuKHRhc2ssIGFkZHIgJiB+MywgJm9sZF9pbnNuLmFybSwKIAkJCQkmYnAtPmluc24uYXJtLCA0KTsKIAogCQlpZiAocmV0ICE9IDQgfHwgb2xkX2luc24uYXJtICE9IEJSRUFLSU5TVF9BUk0pCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiVkOiBjb3JydXB0ZWQgQVJNIGJyZWFrcG9pbnQgYXQgIgotCQkJCSIweCUwOGx4ICgweCUwOHgpXG4iLCB0YXNrLT5jb21tLCB0YXNrLT5waWQsCi0JCQkJYWRkciwgb2xkX2luc24uYXJtKTsKKwkJCQkiMHglMDhseCAoMHglMDh4KVxuIiwgdGFzay0+Y29tbSwKKwkJCQl0YXNrX3BpZF9ucih0YXNrKSwgYWRkciwgb2xkX2luc24uYXJtKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKaW5kZXggOGFkNDc2MS4uNDc2NGJkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMKQEAgLTIyMyw3ICsyMjMsNyBAQAogCXByaW50X21vZHVsZXMoKTsKIAlfX3Nob3dfcmVncyhyZWdzKTsKIAlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHN0YWNrIGxpbWl0ID0gMHglcClcbiIsCi0JCXRzay0+Y29tbSwgdHNrLT5waWQsIHRocmVhZCArIDEpOworCQl0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIHRocmVhZCArIDEpOwogCiAJaWYgKCF1c2VyX21vZGUocmVncykgfHwgaW5faW50ZXJydXB0KCkpIHsKIAkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5BUk1fc3AsCkBAIC0zMzcsNyArMzM3LDcgQEAKICNpZmRlZiBDT05GSUdfREVCVUdfVVNFUgogCWlmICh1c2VyX2RlYnVnICYgVURCR19VTkRFRklORUQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgKCVkKTogdW5kZWZpbmVkIGluc3RydWN0aW9uOiBwYz0lcFxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgcGMpOworCQkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHBjKTsKIAkJZHVtcF9pbnN0cihyZWdzKTsKIAl9CiAjZW5kaWYKQEAgLTM4OCw3ICszODgsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19VU0VSCiAJaWYgKHVzZXJfZGVidWcgJiBVREJHX1NZU0NBTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJbJWRdICVzOiBvYnNvbGV0ZSBzeXN0ZW0gY2FsbCAlMDh4LlxuIiwKLQkJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgbik7CisJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbik7CiAJCWR1bXBfaW5zdHIocmVncyk7CiAJfQogI2VuZGlmCkBAIC01NjUsNyArNTY1LDcgQEAKIAkgKi8KIAlpZiAodXNlcl9kZWJ1ZyAmIFVEQkdfU1lTQ0FMTCkgewogCQlwcmludGsoIlslZF0gJXM6IGFybSBzeXNjYWxsICVkXG4iLAotCQkgICAgICAgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBubyk7CisJCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwgbm8pOwogCQlkdW1wX2luc3RyKHJlZ3MpOwogCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAJCQlfX3Nob3dfcmVncyhyZWdzKTsKQEAgLTY0Miw3ICs2NDIsNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19VU0VSCiAJaWYgKHVzZXJfZGVidWcgJiBVREJHX0JBREFCT1JUKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiWyVkXSAlczogYmFkIGRhdGEgYWJvcnQ6IGNvZGUgJWQgaW5zdHIgMHglMDhseFxuIiwKLQkJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwgY29kZSwgaW5zdHIpOworCQkJdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sIGNvZGUsIGluc3RyKTsKIAkJZHVtcF9pbnN0cihyZWdzKTsKIAkJc2hvd19wdGUoY3VycmVudC0+bW0sIGFkZHIpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvZ3Bpby5jCmluZGV4IGJhNGExYmIuLmFhMmQzNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2dwaW8uYwpAQCAtNDM5LDcgKzQzOSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrLCBwaW4rKykgewogCQkJLyoKIAkJCSAqIENhbiB1c2UgdGhlICJzaW1wbGUiIGFuZCBub3QgImVkZ2UiIGhhbmRsZXIgc2luY2UgaXQncwotCQkJICogc2hvcnRlciwgYW5kIHRoZSBBSUMgaGFuZGxlcyBpbnRlcnVwdHMgc2FuZWx5LgorCQkJICogc2hvcnRlciwgYW5kIHRoZSBBSUMgaGFuZGxlcyBpbnRlcnJ1cHRzIHNhbmVseS4KIAkJCSAqLwogCQkJc2V0X2lycV9jaGlwKHBpbiwgJmdwaW9faXJxY2hpcCk7CiAJCQlzZXRfaXJxX2hhbmRsZXIocGluLCBoYW5kbGVfc2ltcGxlX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvcG0uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCmluZGV4IGRkZjkxODQuLjk4Y2I2MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9wbS5jCkBAIC0xMCwxMCArMTAsOSBAQAogICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMTk5LDcgKzE5OCw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwbV9vcHMgYXQ5MV9wbV9vcHMgPXsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgYXQ5MV9wbV9vcHMgPXsKIAkudmFsaWQJCT0gYXQ5MV9wbV92YWxpZF9zdGF0ZSwKIAkuc2V0X3RhcmdldAk9IGF0OTFfcG1fc2V0X3RhcmdldCwKIAkuZW50ZXIJCT0gYXQ5MV9wbV9lbnRlciwKQEAgLTIyMCw3ICsyMTksNyBAQAogCS8qIERpc2FibGUgU0RSQU0gbG93LXBvd2VyIG1vZGUuICBDYW5ub3QgYmUgdXNlZCB3aXRoIHNlbGYtcmVmcmVzaC4gKi8KIAlhdDkxX3N5c193cml0ZShBVDkxX1NEUkFNQ19MUFIsIDApOwogCi0JcG1fc2V0X29wcygmYXQ5MV9wbV9vcHMpOworCXN1c3BlbmRfc2V0X29wcygmYXQ5MV9wbV9vcHMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwppbmRleCAwNzMzMDc4Li4xZGE5ZDU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0IE5va2lhIENvcnBvcmF0aW9uCiAgKiBXcml0dGVuIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+Ci0gKiBNYWpvciBjbGVhbnVwcyBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICogTWFqb3IgY2xlYW51cHMgYnkgSnVoYSBZcmrDtmzDpCA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKICAqIENvbXBsZXRlbHkgcmUtd3JpdHRlbiB0byBzdXBwb3J0IHZhcmlvdXMgT01BUCBjaGlwcyB3aXRoIGJhbmsgc3BlY2lmaWMKICAqIGludGVycnVwdCBoYW5kbGVycy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG0uYwppbmRleCAwODliODIwLi4zYmYwMWUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbS5jCkBAIC0zNSwxMCArMzUsOSBAQAogICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTYwMCwyNyArNTk5LDE1IEBACiAKIC8qCiAgKglvbWFwX3BtX3ByZXBhcmUgLSBEbyBwcmVsaW1pbmFyeSBzdXNwZW5kIHdvcmsuCi0gKglAc3RhdGU6CQlzdXNwZW5kIHN0YXRlIHdlJ3JlIGVudGVyaW5nLgogICoKICAqLwotc3RhdGljIGludCBvbWFwX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQorc3RhdGljIGludCBvbWFwX3BtX3ByZXBhcmUodm9pZCkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCiAJLyogV2UgY2Fubm90IHNsZWVwIGluIGlkbGUgdW50aWwgd2UgaGF2ZSByZXN1bWVkICovCiAJc2F2ZWRfaWRsZSA9IHBtX2lkbGU7CiAJcG1faWRsZSA9IE5VTEw7CiAKLQlzd2l0Y2ggKHN0YXRlKQotCXsKLQljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKLQljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtNjQ4LDE2ICs2MzUsMTQgQEAKIAogLyoqCiAgKglvbWFwX3BtX2ZpbmlzaCAtIEZpbmlzaCB1cCBzdXNwZW5kIHNlcXVlbmNlLgotICoJQHN0YXRlOgkJU3RhdGUgd2UncmUgY29taW5nIG91dCBvZi4KICAqCiAgKglUaGlzIGlzIGNhbGxlZCBhZnRlciB3ZSB3YWtlIGJhY2sgdXAgKG9yIGlmIGVudGVyaW5nIHRoZSBzbGVlcCBzdGF0ZQogICoJZmFpbGVkKS4KICAqLwogCi1zdGF0aWMgaW50IG9tYXBfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3N0YXRpYyB2b2lkIG9tYXBfcG1fZmluaXNoKHZvaWQpCiB7CiAJcG1faWRsZSA9IHNhdmVkX2lkbGU7Ci0JcmV0dXJuIDA7CiB9CiAKIApAQCAtNjc0LDExICs2NTksMTEgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcG1fb3BzIG9tYXBfcG1fb3BzID17CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID17CiAJLnByZXBhcmUJPSBvbWFwX3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IG9tYXBfcG1fZW50ZXIsCiAJLmZpbmlzaAkJPSBvbWFwX3BtX2ZpbmlzaCwKLQkudmFsaWQJCT0gcG1fdmFsaWRfb25seV9tZW0sCisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwX3BtX2luaXQodm9pZCkKQEAgLTczNSw3ICs3MjAsNyBAQAogCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQogCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7CiAKLQlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZvbWFwX3BtX29wcyk7CiAKICNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQogCW9tYXBfcG1faW5pdF9wcm9jKCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKaW5kZXggNmY0YTU0My4uYmFmN2Q4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpAQCAtMTYsMTAgKzE2LDkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC03MSwyOCArNzAsMTIgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBpbnQgb21hcDJfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG9tYXAyX3BtX3ByZXBhcmUodm9pZCkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCiAJLyogV2UgY2Fubm90IHNsZWVwIGluIGlkbGUgdW50aWwgd2UgaGF2ZSByZXN1bWVkICovCiAJc2F2ZWRfaWRsZSA9IHBtX2lkbGU7CiAJcG1faWRsZSA9IE5VTEw7Ci0KLQlzd2l0Y2ggKHN0YXRlKQotCXsKLQljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKLQljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlicmVhazsKLQotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGVycm9yOworCXJldHVybiAwOwogfQogCiAjZGVmaW5lIElOVDBfV0FLRV9NQVNLCShPTUFQX0lSUV9CSVQoSU5UXzI0WFhfR1BJT19CQU5LMSkgfAlcCkBAIC0zNTMsOSArMzM2LDYgQEAKIAljYXNlIFBNX1NVU1BFTkRfTUVNOgogCQlyZXQgPSBvbWFwMl9wbV9zdXNwZW5kKCk7CiAJCWJyZWFrOwotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXQgPSAtRU5PVFNVUFA7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJfQpAQCAtMzYzLDE3ICszNDMsMTYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9tYXAyX3BtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCBvbWFwMl9wbV9maW5pc2godm9pZCkKIHsKIAlwbV9pZGxlID0gc2F2ZWRfaWRsZTsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbV9vcHMgb21hcF9wbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG9tYXBfcG1fb3BzID0gewogCS5wcmVwYXJlCT0gb21hcDJfcG1fcHJlcGFyZSwKIAkuZW50ZXIJCT0gb21hcDJfcG1fZW50ZXIsCiAJLmZpbmlzaAkJPSBvbWFwMl9wbV9maW5pc2gsCi0JLnZhbGlkCQk9IHBtX3ZhbGlkX29ubHlfbWVtLAorCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKIAogaW50IF9faW5pdCBvbWFwMl9wbV9pbml0KHZvaWQpCkBAIC0zOTcsNyArMzc2LDcgQEAKIAlvbWFwMl9zcmFtX3N1c3BlbmQgPSBvbWFwX3NyYW1fcHVzaChvbWFwMjR4eF9jcHVfc3VzcGVuZCwKIAkJCQkJICAgIG9tYXAyNHh4X2NwdV9zdXNwZW5kX3N6KTsKIAotCXBtX3NldF9vcHMoJm9tYXBfcG1fb3BzKTsKKwlzdXNwZW5kX3NldF9vcHMoJm9tYXBfcG1fb3BzKTsKIAlwbV9pZGxlID0gb21hcDJfcG1faWRsZTsKIAogCXBtZG9tYWluX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYwppbmRleCA2MmU4MDFlLi44ZDMyMmMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCkBAIC01LDcgKzUsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBOb2tpYSBDb3Jwb3JhdGlvbgogICogQXV0aG9yOiBQYXVsIE11bmR0IDxwYXVsLm11bmR0QG5va2lhLmNvbT4KLSAqICAgICAgICAgSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqICAgICAgICAgSnVoYSBZcmrDtmzDpCA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICogT01BUCBEdWFsLW1vZGUgdGltZXIgZnJhbWV3b3JrIHN1cHBvcnQgYnkgVGltbyBUZXJhcwogICoKICAqIFNvbWUgcGFydHMgYmFzZWQgb2ZmIG9mIFRJJ3MgMjR4eCBjb2RlOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1wbng0MDA4L3BtLmMgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYwppbmRleCAyYTEzN2YzLi40MDExNmQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXBueDQwMDgvcG0uYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKQEAgLTExNyw3ICsxMTcsNyBAQAogCSAgICAgICAoc3RhdGUgPT0gUE1fU1VTUEVORF9NRU0pOwogfQogCi1zdGF0aWMgc3RydWN0IHBtX29wcyBwbng0MDA4X3BtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgcG54NDAwOF9wbV9vcHMgPSB7CiAJLmVudGVyID0gcG54NDAwOF9wbV9lbnRlciwKIAkudmFsaWQgPSBwbng0MDA4X3BtX3ZhbGlkLAogfTsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlwbV9zZXRfb3BzKCZwbng0MDA4X3BtX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZwbng0MDA4X3BtX29wcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wbS5jCmluZGV4IGI1OWE4MWEuLmE5NDFjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcG0uYwpAQCAtODYsNyArODYsNyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IHBtX29wcyBweGFfcG1fb3BzID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBweGFfcG1fb3BzID0gewogCS52YWxpZAkJPSBweGFfcG1fdmFsaWQsCiAJLmVudGVyCQk9IHB4YV9wbV9lbnRlciwKIH07CkBAIC0xMDQsNyArMTA0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcG1fc2V0X29wcygmcHhhX3BtX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZweGFfcG1fb3BzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCAwZDZhNzI1Li5kY2Q4MWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KQEAgLTIxNSw3ICsyMTUsNyBAQAogCiBzdGF0aWMgc3RydWN0IHB4YV9jcHVfcG1fZm5zIHB4YTI1eF9jcHVfcG1fZm5zID0gewogCS5zYXZlX3NpemUJPSBTTEVFUF9TQVZFX1NJWkUsCi0JLnZhbGlkCQk9IHBtX3ZhbGlkX29ubHlfbWVtLAorCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogCS5zYXZlCQk9IHB4YTI1eF9jcHVfcG1fc2F2ZSwKIAkucmVzdG9yZQk9IHB4YTI1eF9jcHVfcG1fcmVzdG9yZSwKIAkuZW50ZXIJCT0gcHhhMjV4X2NwdV9wbV9lbnRlciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggMmQ3ZmMzOS4uZDBmMmI1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKaW5kZXggY2FiOWQ2Mi4uMmJmYWE2MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2Nsb2NrLmMKQEAgLTIzOCw3ICsyMzgsNyBAQAogCX0KIAogCS8qIFdlIG11c3QgYmUgY2FyZWZ1bCBkaXNhYmxpbmcgdGhlIGNsb2NrcyB3ZSBhcmUgbm90IGludGVuZGluZyB0bwotCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3l0ZW1zIHN1Y2ggYXMgdGhlIExDRCB3aGljaCBkbworCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3lzdGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KIAkgKiB0aGVpciBvd24gRE1BIHJlcXVlc3RzIHRvIHRoZSBidXMgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gbG9ja3VwCiAJICogaWYgdGhleSB3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHJlcXVlc3RpbmcgYnVzIGFjY2Vzcy4KIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwppbmRleCA4NTQzZGQ2Li40NTg5OTM2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvY2xvY2suYwpAQCAtNjg5LDcgKzY4OSw3IEBACiAJfQogCiAJLyogV2UgbXVzdCBiZSBjYXJlZnVsIGRpc2FibGluZyB0aGUgY2xvY2tzIHdlIGFyZSBub3QgaW50ZW5kaW5nIHRvCi0JICogYmUgdXNpbmcgYXQgYm9vdCB0aW1lLCBhcyBzdWJzeXRlbXMgc3VjaCBhcyB0aGUgTENEIHdoaWNoIGRvCisJICogYmUgdXNpbmcgYXQgYm9vdCB0aW1lLCBhcyBzdWJzeXN0ZW1zIHN1Y2ggYXMgdGhlIExDRCB3aGljaCBkbwogCSAqIHRoZWlyIG93biBETUEgcmVxdWVzdHMgdG8gdGhlIGJ1cyBjYW4gY2F1c2UgdGhlIHN5c3RlbSB0byBsb2NrdXAKIAkgKiBpZiB0aGV5IHdoZXJlIGluIHRoZSBtaWRkbGUgb2YgcmVxdWVzdGluZyBidXMgYWNjZXNzLgogCSAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jCmluZGV4IDU4NDAyOTQuLmI0MmY5NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jCkBAIC0xMDA1LDcgKzEwMDUsNyBAQAogCX0KIAogCS8qIFdlIG11c3QgYmUgY2FyZWZ1bCBkaXNhYmxpbmcgdGhlIGNsb2NrcyB3ZSBhcmUgbm90IGludGVuZGluZyB0bwotCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3l0ZW1zIHN1Y2ggYXMgdGhlIExDRCB3aGljaCBkbworCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3lzdGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KIAkgKiB0aGVpciBvd24gRE1BIHJlcXVlc3RzIHRvIHRoZSBidXMgY2FuIGNhdXNlIHRoZSBzeXN0ZW0gdG8gbG9ja3VwCiAJICogaWYgdGhleSB3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHJlcXVlc3RpbmcgYnVzIGFjY2Vzcy4KIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3BtLmMKaW5kZXggMDFhMzdkMy4uMjQ2YzU3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9wbS5jCkBAIC0xMjIsMTQgKzEyMiwxNCBAQAogCXJldHVybiB2aXJ0X3RvX3BoeXMoc3ApOwogfQogCi1zdGF0aWMgc3RydWN0IHBtX29wcyBzYTExeDBfcG1fb3BzID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzYTExeDBfcG1fb3BzID0gewogCS5lbnRlcgkJPSBzYTExeDBfcG1fZW50ZXIsCi0JLnZhbGlkCQk9IHBtX3ZhbGlkX29ubHlfbWVtLAorCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2ExMXgwX3BtX2luaXQodm9pZCkKIHsKLQlwbV9zZXRfb3BzKCZzYTExeDBfcG1fb3BzKTsKKwlzdXNwZW5kX3NldF9vcHMoJnNhMTF4MF9wbV9vcHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hbGlnbm1lbnQuYyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCmluZGV4IDA3NGI3Y2IuLmUxNjJjY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCisrKyBiL2FyY2gvYXJtL21tL2FsaWdubWVudC5jCkBAIC03NTcsNyArNzU3LDcgQEAKIAlpZiAoYWlfdXNlcm1vZGUgJiAxKQogCQlwcmludGsoIkFsaWdubWVudCB0cmFwOiAlcyAoJWQpIFBDPTB4JTA4bHggSW5zdHI9MHglMCpseCAiCiAJCSAgICAgICAiQWRkcmVzcz0weCUwOGx4IEZTUiAweCUwM3hcbiIsIGN1cnJlbnQtPmNvbW0sCi0JCQljdXJyZW50LT5waWQsIGluc3RycHRyLAorCQkJdGFza19waWRfbnIoY3VycmVudCksIGluc3RycHRyLAogCQkgICAgICAgIHRodW1iX21vZGUocmVncykgPyA0IDogOCwKIAkJICAgICAgICB0aHVtYl9tb2RlKHJlZ3MpID8gdGluc3RyIDogaW5zdHIsCiAJCSAgICAgICAgYWRkciwgZnNyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IDU5ZWQxZDAuLmE4YTdkYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJcmV0dXJuIGZhdWx0OwogCiBvdXRfb2ZfbWVtb3J5OgotCWlmICghaXNfaW5pdCh0c2spKQorCWlmICghaXNfZ2xvYmFsX2luaXQodHNrKSkKIAkJZ290byBvdXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuaCBiL2FyY2gvYXJtL253ZnBlL2Zwb3Bjb2RlLmgKaW5kZXggZWM3OGUzNS4uNzg2ZTRjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbndmcGUvZnBvcGNvZGUuaAorKysgYi9hcmNoL2FybS9ud2ZwZS9mcG9wY29kZS5oCkBAIC03OCwxMSArNzgsMTEgQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgIFByZWNpc2lvbiAgICAgICAgICAgICAgfCB1IHwgdiB8IEZQU1IuRVAgfCBsZW5ndGggIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgU2luZ2xlICAgICAgICAgICAgICAgICAgfCAwIPwgMCB8ICAgIHggICAgfCAxIHdvcmRzIHwKLXwgRG91YmxlICAgICAgICAgICAgICAgICAgfCAxIPwgMSB8ICAgIHggICAgfCAyIHdvcmRzIHwKLXwgRXh0ZW5kZWQgICAgICAgICAgICAgICAgfCAxIPwgMSB8ICAgIHggICAgfCAzIHdvcmRzIHwKLXwgUGFja2VkIGRlY2ltYWwgICAgICAgICAgfCAxIPwgMSB8ICAgIDAgICAgfCAzIHdvcmRzIHwKLXwgRXhwYW5kZWQgcGFja2VkIGRlY2ltYWwgfCAxIPwgMSB8ICAgIDEgICAgfCA0IHdvcmRzIHwKK3wgU2luZ2xlICAgICAgICAgICAgICAgICAgfCAwIHwgMCB8ICAgIHggICAgfCAxIHdvcmRzIHwKK3wgRG91YmxlICAgICAgICAgICAgICAgICAgfCAxIHwgMSB8ICAgIHggICAgfCAyIHdvcmRzIHwKK3wgRXh0ZW5kZWQgICAgICAgICAgICAgICAgfCAxIHwgMSB8ICAgIHggICAgfCAzIHdvcmRzIHwKK3wgUGFja2VkIGRlY2ltYWwgICAgICAgICAgfCAxIHwgMSB8ICAgIDAgICAgfCAzIHdvcmRzIHwKK3wgRXhwYW5kZWQgcGFja2VkIGRlY2ltYWwgfCAxIHwgMSB8ICAgIDEgICAgfCA0IHdvcmRzIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLSstLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSsKIE5vdGU6IHggPSBkb24ndCBjYXJlCiAqLwpAQCAtOTIsMTAgKzkyLDEwIEBACiArLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHcgfCB4IHwgTnVtYmVyIG9mIHJlZ2lzdGVycyB0byB0cmFuc2ZlciB8CiArLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDAg/CAxIHwgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDEg/CAwIHwgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDEg/CAxIHwgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18IDAg/CAwIHwgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAgfCAxIHwgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEgfCAwIHwgIDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDEgfCAxIHwgIDMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IDAgfCAwIHwgIDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tKy0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCkBAIC0xNTYsMTAgKzE1NiwxMCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSsKIHwgIFJvdW5kaW5nIFByZWNpc2lvbiAgICAgfCBlIHwgZiB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0rLS0tKwotfCBJRUVFIFNpbmdsZSBwcmVjaXNpb24gICB8IDAg/CAwIHwKLXwgSUVFRSBEb3VibGUgcHJlY2lzaW9uICAgfCAwIPwgMSB8Ci18IElFRUUgRXh0ZW5kZWQgcHJlY2lzaW9uIHwgMSD8IDAgfAotfCB1bmRlZmluZWQgKHRyYXApICAgICAgICB8IDEg/CAxIHwKK3wgSUVFRSBTaW5nbGUgcHJlY2lzaW9uICAgfCAwIHwgMCB8Cit8IElFRUUgRG91YmxlIHByZWNpc2lvbiAgIHwgMCB8IDEgfAorfCBJRUVFIEV4dGVuZGVkIHByZWNpc2lvbiB8IDEgfCAwIHwKK3wgdW5kZWZpbmVkICh0cmFwKSAgICAgICAgfCAxIHwgMSB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0rLS0tKwogKi8KIApAQCAtMTY4LDEwICsxNjgsMTAgQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSsKIHwgIFJvdW5kaW5nIE1vZGUgICAgICAgICAgICAgICAgICB8IGcgfCBoIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSsKLXwgUm91bmQgdG8gbmVhcmVzdCAoZGVmYXVsdCkgICAgICB8IDAg/CAwIHwKLXwgUm91bmQgdG93YXJkIHBsdXMgaW5maW5pdHkgICAgICB8IDAg/CAxIHwKLXwgUm91bmQgdG93YXJkIG5lZ2F0aXZlIGluZmluaXR5ICB8IDEg/CAwIHwKLXwgUm91bmQgdG93YXJkIHplcm8gICAgICAgICAgICAgICB8IDEg/CAxIHwKK3wgUm91bmQgdG8gbmVhcmVzdCAoZGVmYXVsdCkgICAgICB8IDAgfCAwIHwKK3wgUm91bmQgdG93YXJkIHBsdXMgaW5maW5pdHkgICAgICB8IDAgfCAxIHwKK3wgUm91bmQgdG93YXJkIG5lZ2F0aXZlIGluZmluaXR5ICB8IDEgfCAwIHwKK3wgUm91bmQgdG93YXJkIHplcm8gICAgICAgICAgICAgICB8IDEgfCAxIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tKy0tLSsKICovCiAKQEAgLTM2OSwyMCArMzY5LDIwIEBACiAjZGVmaW5lIGdldFJvdW5kaW5nTW9kZShvcGNvZGUpCQkoKG9wY29kZSAmIE1BU0tfUk9VTkRJTkdfTU9ERSkgPj4gNSkKIAogI2lmZGVmIENPTkZJR19GUEVfTldGUEVfWFAKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfcHVyZV9fIGZsb2F0eDgwIGdldEV4dGVuZGVkQ29uc3RhbnQoY29uc3QgdW5zaWduZWQgaW50IG5JbmRleCkKK3N0YXRpYyBpbmxpbmUgZmxvYXR4ODAgX19wdXJlIGdldEV4dGVuZGVkQ29uc3RhbnQoY29uc3QgdW5zaWduZWQgaW50IG5JbmRleCkKIHsKIAlleHRlcm4gY29uc3QgZmxvYXR4ODAgZmxvYXR4ODBDb25zdGFudFtdOwogCXJldHVybiBmbG9hdHg4MENvbnN0YW50W25JbmRleF07CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9wdXJlX18gZmxvYXQ2NCBnZXREb3VibGVDb25zdGFudChjb25zdCB1bnNpZ25lZCBpbnQgbkluZGV4KQorc3RhdGljIGlubGluZSBmbG9hdDY0IF9fcHVyZSBnZXREb3VibGVDb25zdGFudChjb25zdCB1bnNpZ25lZCBpbnQgbkluZGV4KQogewogCWV4dGVybiBjb25zdCBmbG9hdDY0IGZsb2F0NjRDb25zdGFudFtdOwogCXJldHVybiBmbG9hdDY0Q29uc3RhbnRbbkluZGV4XTsKIH0KIAotc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9wdXJlX18gZmxvYXQzMiBnZXRTaW5nbGVDb25zdGFudChjb25zdCB1bnNpZ25lZCBpbnQgbkluZGV4KQorc3RhdGljIGlubGluZSBmbG9hdDMyIF9fcHVyZSBnZXRTaW5nbGVDb25zdGFudChjb25zdCB1bnNpZ25lZCBpbnQgbkluZGV4KQogewogCWV4dGVybiBjb25zdCBmbG9hdDMyIGZsb2F0MzJDb25zdGFudFtdOwogCXJldHVybiBmbG9hdDMyQ29uc3RhbnRbbkluZGV4XTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL0tjb25maWcgYi9hcmNoL2FybS9vcHJvZmlsZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmQ5M2FkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL29wcm9maWxlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0KLW1lbnUgIlByb2ZpbGluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0KLWNvbmZpZyBQUk9GSUxJTkcKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCi0JICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KLQotCi1jb25maWcgT1BST0ZJTEUKLQl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFBST0ZJTElORwotCWhlbHAKLQkgIE9Qcm9maWxlIGlzIGEgcHJvZmlsaW5nIHN5c3RlbSBjYXBhYmxlIG9mIHByb2ZpbGluZyB0aGUKLQkgIHdob2xlIHN5c3RlbSwgaW5jbHVkZSB0aGUga2VybmVsLCBrZXJuZWwgbW9kdWxlcywgbGlicmFyaWVzLAotCSAgYW5kIGFwcGxpY2F0aW9ucy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotaWYgT1BST0ZJTEUKLQotY29uZmlnIE9QUk9GSUxFX0FSTVY2Ci0JYm9vbAotCWRlcGVuZHMgb24gQ1BVX1Y2ICYmICFTTVAKLQlkZWZhdWx0IHkKLQlzZWxlY3QgT1BST0ZJTEVfQVJNMTFfQ09SRQotCi1jb25maWcgT1BST0ZJTEVfTVBDT1JFCi0JYm9vbAotCWRlcGVuZHMgb24gQ1BVX1Y2ICYmIFNNUAotCWRlZmF1bHQgeQotCXNlbGVjdCBPUFJPRklMRV9BUk0xMV9DT1JFCi0KLWNvbmZpZyBPUFJPRklMRV9BUk0xMV9DT1JFCi0JYm9vbAotCi1lbmRpZgotCi1lbmRtZW51Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCAwNWEzODQ5Li5kY2JiYTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0yLDcgKzIsNyBAQAogICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCi0gKiBBdXRob3I6IEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKiBBdXRob3I6IEp1aGEgWXJqw7Zsw6QgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KICAqIERNQSBjaGFubmVsIGxpbmtpbmcgZm9yIDE2MTAgYnkgU2FtdWVsIE9ydGl6IDxzYW11ZWwub3J0aXpAbm9raWEuY29tPgogICogR3JhcGhpY3MgRE1BIGFuZCBMQ0QgRE1BIGdyYXBoaWNzIHRyYW5mb3JtYXRpb25zCiAgKiBieSBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCAzMzc0NTVkLi42MDk3NzUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTQsNyArNCw3IEBACiAgKiBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgT01BUCBHUElPCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIFdyaXR0ZW4gYnkgSnVoYSBZcmr2bOQgPGp1aGEueXJqb2xhQG5va2lhLmNvbT4KKyAqIFdyaXR0ZW4gYnkgSnVoYSBZcmrDtmzDpCA8anVoYS55cmpvbGFAbm9raWEuY29tPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYwppbmRleCBlYWIxODUwLi40ZmRiMzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcG0uYwpAQCAtNjEyLDkgKzYxMiw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcG1fb3BzIHMzYzI0MTBfcG1fb3BzID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBzM2MyNDEwX3BtX29wcyA9IHsKIAkuZW50ZXIJCT0gczNjMjQxMF9wbV9lbnRlciwKLQkudmFsaWQJCT0gcG1fdmFsaWRfb25seV9tZW0sCisJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCiB9OwogCiAvKiBzM2MyNDEwX3BtX2luaXQKQEAgLTYyOCw2ICs2MjgsNiBAQAogewogCXByaW50aygiUzNDMjQxMCBQb3dlciBNYW5hZ2VtZW50LCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOwogCi0JcG1fc2V0X29wcygmczNjMjQxMF9wbV9vcHMpOworCXN1c3BlbmRfc2V0X29wcygmczNjMjQxMF9wbV9vcHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9LY29uZmlnIGIvYXJjaC9hdnIzMi9LY29uZmlnCmluZGV4IGQxMjM0NmEuLmJiZWNiZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvS2NvbmZpZworKysgYi9hcmNoL2F2cjMyL0tjb25maWcKQEAgLTE4OSw3ICsxODksNyBAQAogCiBlbmRtZW51CiAKLW1lbnUgIlBvd2VyIG1hbmFnbWVudCBvcHRpb25zIgorbWVudSAiUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIgogCiBtZW51ICJDUFUgRnJlcXVlbmN5IHNjYWxpbmciCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMgYi9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jCmluZGV4IDlhNzNjZTcuLjhhN2NhZjhlIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3RyYXBzLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkgKiBnZW5lcmF0ZSB0aGUgc2FtZSBleGNlcHRpb24gb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgd2UgZ2V0CiAJICogbm93aGVyZS4gIEJldHRlciB0byBraWxsIGl0IGFuZCBsZXQgdGhlIGtlcm5lbCBwYW5pYy4KIAkgKi8KLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQlfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyOwogCiAJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tbS9mYXVsdC5jIGIvYXJjaC9hdnIzMi9tbS9mYXVsdC5jCmluZGV4IDExNDcyZjguLjY1NjBjYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvbW0vZmF1bHQuYworKysgYi9hcmNoL2F2cjMyL21tL2ZhdWx0LmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCQlpZiAoZXhjZXB0aW9uX3RyYWNlICYmIHByaW50a19yYXRlbGltaXQoKSkKIAkJCXByaW50aygiJXMlc1slZF06IHNlZ2ZhdWx0IGF0ICUwOGx4IHBjICUwOGx4ICIKIAkJCSAgICAgICAic3AgJTA4bHggZWNyICVsdVxuIiwKLQkJCSAgICAgICBpc19pbml0KHRzaykgPyBLRVJOX0VNRVJHIDogS0VSTl9JTkZPLAorCQkJICAgICAgIGlzX2dsb2JhbF9pbml0KHRzaykgPyBLRVJOX0VNRVJHIDogS0VSTl9JTkZPLAogCQkJICAgICAgIHRzay0+Y29tbSwgdHNrLT5waWQsIGFkZHJlc3MsIHJlZ3MtPnBjLAogCQkJICAgICAgIHJlZ3MtPnNwLCBlY3IpOwogCQlfZXhjZXB0aW9uKFNJR1NFR1YsIHJlZ3MsIGNvZGUsIGFkZHJlc3MpOwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGlzX2luaXQoY3VycmVudCkpIHsKKwlpZiAoaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CkBAIC0yMzEsNyArMjMxLDcgQEAKIAlpZiAoZXhjZXB0aW9uX3RyYWNlKQogCQlwcmludGsoIiVzJXNbJWRdOiBidXMgZXJyb3IgYXQgJTA4bHggcGMgJTA4bHggIgogCQkgICAgICAgInNwICUwOGx4IGVjciAlbHVcbiIsCi0JCSAgICAgICBpc19pbml0KHRzaykgPyBLRVJOX0VNRVJHIDogS0VSTl9JTkZPLAorCQkgICAgICAgaXNfZ2xvYmFsX2luaXQodHNrKSA/IEtFUk5fRU1FUkcgOiBLRVJOX0lORk8sCiAJCSAgICAgICB0c2stPmNvbW0sIHRzay0+cGlkLCBhZGRyZXNzLCByZWdzLT5wYywKIAkJICAgICAgIHJlZ3MtPnNwLCBlY3IpOwogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL0tjb25maWcKaW5kZXggYWE5ZGIzMC4uYWQyOGRjNyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9LY29uZmlnCisrKyBiL2FyY2gvYmxhY2tmaW4vS2NvbmZpZwpAQCAtNjEzLDg1ICs2MTMsODYgQEAKIAlib29sICJMb2NhdGUgaW50ZXJydXB0IGVudHJ5IGNvZGUgaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIGVuYWJsZWQgaW50ZXJydXB0IGVudHJ5IGNvZGUgKFNUT1JFL1JFU1RPUkUgQ09OVEVYVCkgaXMgbGlua2VkCi0JICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4obGVzcyBsYXRlbmN5KQorCSAgSWYgZW5hYmxlZCwgaW50ZXJydXB0IGVudHJ5IGNvZGUgKFNUT1JFL1JFU1RPUkUgQ09OVEVYVCkgaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIEVYQ1BUX0lSUV9TWVNDX0wxCi0JYm9vbCAiTG9jYXRlIGVudGlyZSBBU00gbG93bGV2ZWwgZXhjZXBldGlvbiAvIGludGVycnVwdCAtIFN5c2NhbGwgYW5kIENQTEIgaGFuZGxlciBjb2RlIGluIEwxIE1lbW9yeSIKKwlib29sICJMb2NhdGUgZW50aXJlIEFTTSBsb3dsZXZlbCBleGNlcHRpb24gLyBpbnRlcnJ1cHQgLSBTeXNjYWxsIGFuZCBDUExCIGhhbmRsZXIgY29kZSBpbiBMMSBNZW1vcnkiCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgSWYgZW5hYmxlZCBlbnRpcmUgQVNNIGxvd2xldmVsIGV4Y2VwdGlvbiBhbmQgaW50ZXJydXB0IGVudHJ5IGNvZGUgKFNUT1JFL1JFU1RPUkUgQ09OVEVYVCkgaXMgbGlua2VkCi0JICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4obGVzcyBsYXRlbmN5KQorCSAgSWYgZW5hYmxlZCwgdGhlIGVudGlyZSBBU00gbG93bGV2ZWwgZXhjZXB0aW9uIGFuZCBpbnRlcnJ1cHQgZW50cnkgY29kZQorCSAgKFNUT1JFL1JFU1RPUkUgQ09OVEVYVCkgaXMgbGlua2VkIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LiAKKwkgIChsZXNzIGxhdGVuY3kpCiAKIGNvbmZpZyBET19JUlFfTDEKIAlib29sICJMb2NhdGUgZnJlcXVlbnRseSBjYWxsZWQgZG9faXJxIGRpc3BhdGNoZXIgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIGVuYWJsZWQgZnJlcXVlbnRseSBjYWxsZWQgZG9faXJxIGRpc3BhdGNoZXIgZnVuY3Rpb24gaXMgbGlua2VkCi0JICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4obGVzcyBsYXRlbmN5KQorCSAgSWYgZW5hYmxlZCwgdGhlIGZyZXF1ZW50bHkgY2FsbGVkIGRvX2lycSBkaXNwYXRjaGVyIGZ1bmN0aW9uIGlzIGxpbmtlZAorCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCiAKIGNvbmZpZyBDT1JFX1RJTUVSX0lSUV9MMQogCWJvb2wgIkxvY2F0ZSBmcmVxdWVudGx5IGNhbGxlZCB0aW1lcl9pbnRlcnJ1cHQoKSBmdW5jdGlvbiBpbiBMMSBNZW1vcnkiCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgSWYgZW5hYmxlZCBmcmVxdWVudGx5IGNhbGxlZCB0aW1lcl9pbnRlcnJ1cHQoKSBmdW5jdGlvbiBpcyBsaW5rZWQKLQkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LihsZXNzIGxhdGVuY3kpCisJICBJZiBlbmFibGVkLCB0aGUgZnJlcXVlbnRseSBjYWxsZWQgdGltZXJfaW50ZXJydXB0KCkgZnVuY3Rpb24gaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIElETEVfTDEKIAlib29sICJMb2NhdGUgZnJlcXVlbnRseSBpZGxlIGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBJZiBlbmFibGVkIGZyZXF1ZW50bHkgY2FsbGVkIGlkbGUgZnVuY3Rpb24gaXMgbGlua2VkCi0JICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4obGVzcyBsYXRlbmN5KQorCSAgSWYgZW5hYmxlZCwgdGhlIGZyZXF1ZW50bHkgY2FsbGVkIGlkbGUgZnVuY3Rpb24gaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIFNDSEVEVUxFX0wxCiAJYm9vbCAiTG9jYXRlIGtlcm5lbCBzY2hlZHVsZSBmdW5jdGlvbiBpbiBMMSBNZW1vcnkiCiAJZGVmYXVsdCB5CiAJaGVscAotCSAgSWYgZW5hYmxlZCBmcmVxdWVudGx5IGNhbGxlZCBrZXJuZWwgc2NoZWR1bGUgaXMgbGlua2VkCi0JICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4obGVzcyBsYXRlbmN5KQorCSAgSWYgZW5hYmxlZCwgdGhlIGZyZXF1ZW50bHkgY2FsbGVkIGtlcm5lbCBzY2hlZHVsZSBpcyBsaW5rZWQKKwkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LiAobGVzcyBsYXRlbmN5KQogCiBjb25maWcgQVJJVEhNRVRJQ19PUFNfTDEKIAlib29sICJMb2NhdGUga2VybmVsIG93bmVkIGFyaXRobWV0aWMgZnVuY3Rpb25zIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBJZiBlbmFibGVkIGFyaXRobWV0aWMgZnVuY3Rpb25zIGFyZSBsaW5rZWQKLQkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LihsZXNzIGxhdGVuY3kpCisJICBJZiBlbmFibGVkLCBhcml0aG1ldGljIGZ1bmN0aW9ucyBhcmUgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIEFDQ0VTU19PS19MMQogCWJvb2wgIkxvY2F0ZSBhY2Nlc3Nfb2sgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIGVuYWJsZWQgYWNjZXNzX29rIGZ1bmN0aW9uIGlzIGxpbmtlZAotCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIHRoZSBhY2Nlc3Nfb2sgZnVuY3Rpb24gaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIE1FTVNFVF9MMQogCWJvb2wgIkxvY2F0ZSBtZW1zZXQgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIGVuYWJsZWQgbWVtc2V0IGZ1bmN0aW9uIGlzIGxpbmtlZAotCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIHRoZSBtZW1zZXQgZnVuY3Rpb24gaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIE1FTUNQWV9MMQogCWJvb2wgIkxvY2F0ZSBtZW1jcHkgZnVuY3Rpb24gaW4gTDEgTWVtb3J5IgogCWRlZmF1bHQgeQogCWhlbHAKLQkgIElmIGVuYWJsZWQgbWVtY3B5IGZ1bmN0aW9uIGlzIGxpbmtlZAotCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIHRoZSBtZW1jcHkgZnVuY3Rpb24gaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIFNZU19CRklOX1NQSU5MT0NLX0wxCiAJYm9vbCAiTG9jYXRlIHN5c19iZmluX3NwaW5sb2NrIGZ1bmN0aW9uIGluIEwxIE1lbW9yeSIKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBJZiBlbmFibGVkIHN5c19iZmluX3NwaW5sb2NrIGZ1bmN0aW9uIGlzIGxpbmtlZAotCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIHN5c19iZmluX3NwaW5sb2NrIGZ1bmN0aW9uIGlzIGxpbmtlZAorCSAgaW50byBMMSBpbnN0cnVjdGlvbiBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCiAKIGNvbmZpZyBJUF9DSEVDS1NVTV9MMQogCWJvb2wgIkxvY2F0ZSBJUCBDaGVja3N1bSBmdW5jdGlvbiBpbiBMMSBNZW1vcnkiCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgSWYgZW5hYmxlZCBJUCBDaGVja3N1bSBmdW5jdGlvbiBpcyBsaW5rZWQKLQkgIGludG8gTDEgaW5zdHJ1Y3Rpb24gbWVtb3J5LihsZXNzIGxhdGVuY3kpCisJICBJZiBlbmFibGVkLCB0aGUgSVAgQ2hlY2tzdW0gZnVuY3Rpb24gaXMgbGlua2VkCisJICBpbnRvIEwxIGluc3RydWN0aW9uIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIENBQ0hFTElORV9BTElHTkVEX0wxCiAJYm9vbCAiTG9jYXRlIGNhY2hlbGluZV9hbGlnbmVkIGRhdGEgdG8gTDEgRGF0YSBNZW1vcnkiCkBAIC02OTksMjQgKzcwMCwyNCBAQAogCWRlZmF1bHQgbiBpZiBCRjU0eAogCWRlcGVuZHMgb24gIUJGNTMxCiAJaGVscAotCSAgSWYgZW5hYmxlZCBjYWNoZWxpbmVfYW5saWduZWQgZGF0YSBpcyBsaW5rZWQKLQkgIGludG8gTDEgZGF0YSBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIGNhY2hlbGluZV9hbmxpZ25lZCBkYXRhIGlzIGxpbmtlZAorCSAgaW50byBMMSBkYXRhIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogY29uZmlnIFNZU0NBTExfVEFCX0wxCiAJYm9vbCAiTG9jYXRlIFN5c2NhbGwgVGFibGUgTDEgRGF0YSBNZW1vcnkiCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiAhQkY1MzEKIAloZWxwCi0JICBJZiBlbmFibGVkIHRoZSBTeXNjYWxsIExVVCBpcyBsaW5rZWQKLQkgIGludG8gTDEgZGF0YSBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIHRoZSBTeXNjYWxsIExVVCBpcyBsaW5rZWQKKwkgIGludG8gTDEgZGF0YSBtZW1vcnkuIChsZXNzIGxhdGVuY3kpCiAKIGNvbmZpZyBDUExCX1NXSVRDSF9UQUJfTDEKIAlib29sICJMb2NhdGUgQ1BMQiBTd2l0Y2ggVGFibGVzIEwxIERhdGEgTWVtb3J5IgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gIUJGNTMxCiAJaGVscAotCSAgSWYgZW5hYmxlZCB0aGUgQ1BMQiBTd2l0Y2ggVGFibGVzIGFyZSBsaW5rZWQKLQkgIGludG8gTDEgZGF0YSBtZW1vcnkuKGxlc3MgbGF0ZW5jeSkKKwkgIElmIGVuYWJsZWQsIHRoZSBDUExCIFN3aXRjaCBUYWJsZXMgYXJlIGxpbmtlZAorCSAgaW50byBMMSBkYXRhIG1lbW9yeS4gKGxlc3MgbGF0ZW5jeSkKIAogZW5kbWVudQogCkBAIC0xMDEyLDcgKzEwMTMsNyBAQAogCiBzb3VyY2UgImZzL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9ibGFja2Zpbi9vcHJvZmlsZS9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCiAKIG1lbnUgIktlcm5lbCBoYWNraW5nIgogCkBAIC0xMDI5LDEzICsxMDMwLDEzIEBACiAJICBmcm9tLgogCiBjb25maWcgREVCVUdfSUNBQ0hFX0NIRUNLCi0JYm9vbCAiQ2hlY2sgSW5zdHJ1Y3Rpb24gY2FjaGUgY29oZXJhbmN5IgorCWJvb2wgIkNoZWNrIEluc3RydWN0aW9uIGNhY2hlIGNvaGVyZW5jeSIKIAlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTAogCWRlcGVuZHMgb24gREVCVUdfSFdFUlIKIAloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgZ2V0dGluZyB3aWVyZCB1bmV4cGxhaW5lZCBlcnJvcnMuIFRoaXMgd2lsbAotCSAgZW5zdXJlIHRoYXQgaWNhY2hlIGlzIHdoYXQgU0RSQU0gc2F5cyBpdCBzaG91bGQgYmUsIGJ5IGRvaW5nIGEKLQkgIGJ5dGUgd2lzZSBjb21wYXJpc2lvbiBiZXR3ZWVuIFNEUkFNIGFuZCBpbnN0cnVjdGlvbiBjYWNoZS4gVGhpcworCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIGdldHRpbmcgd2VpcmQgdW5leHBsYWluZWQgZXJyb3JzLiBUaGlzIHdpbGwKKwkgIGVuc3VyZSB0aGF0IGljYWNoZSBpcyB3aGF0IFNEUkFNIHNheXMgaXQgc2hvdWxkIGJlIGJ5IGRvaW5nIGEKKwkgIGJ5dGUgd2lzZSBjb21wYXJpc29uIGJldHdlZW4gU0RSQU0gYW5kIGluc3RydWN0aW9uIGNhY2hlLiBUaGlzCiAJICBhbHNvIHJlbG9jYXRlcyB0aGUgaXJxX3BhbmljKCkgZnVuY3Rpb24gdG8gTDEgbWVtb3J5LCAod2hpY2ggaXMKIAkgIHVuLWNhY2hlZCkuCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vcG0uYwppbmRleCBiMTAzMDI3Li5kYWM1MWZiIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3BtLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9wbS5jCkBAIC0zMiw3ICszMiw3IEBACiAgKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAKLSNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtODksMjggKzg5LDE1IEBACiAjZW5kaWYJCQkJLyogQ09ORklHX1BNX1dBS0VVUF9HUElPX0JZX1NJQ19JV1IgKi8KIH0KIAotCiAvKgotICoJYmZpbl9wbV9wcmVwYXJlIC0gRG8gcHJlbGltaW5hcnkgc3VzcGVuZCB3b3JrLgotICoJQHN0YXRlOgkJc3VzcGVuZCBzdGF0ZSB3ZSdyZSBlbnRlcmluZy4KKyAqCWJmaW5fcG1fdmFsaWQgLSBUZWxsIHRoZSBQTSBjb3JlIHRoYXQgd2Ugb25seSBzdXBwb3J0IHRoZSBzdGFuZGJ5IHNsZWVwCisgKgkJCXN0YXRlCisgKglAc3RhdGU6CQlzdXNwZW5kIHN0YXRlIHdlJ3JlIGNoZWNraW5nLgogICoKICAqLwotc3RhdGljIGludCBiZmluX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQorc3RhdGljIGludCBiZmluX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKLQlpbnQgZXJyb3IgPSAwOwotCi0Jc3dpdGNoIChzdGF0ZSkgewotCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgotCQlicmVhazsKLQotCWNhc2UgUE1fU1VTUEVORF9NRU06Ci0JCXJldHVybiAtRU5PVFNVUFA7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIChzdGF0ZSA9PSBQTV9TVVNQRU5EX1NUQU5EQlkpOwogfQogCiAvKgpAQCAtMTM1LDQ0ICsxMjIsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqCWJmaW5fcG1fZmluaXNoIC0gRmluaXNoIHVwIHN1c3BlbmQgc2VxdWVuY2UuCi0gKglAc3RhdGU6CQlTdGF0ZSB3ZSdyZSBjb21pbmcgb3V0IG9mLgotICoKLSAqCVRoaXMgaXMgY2FsbGVkIGFmdGVyIHdlIHdha2UgYmFjayB1cCAob3IgaWYgZW50ZXJpbmcgdGhlIHNsZWVwIHN0YXRlCi0gKglmYWlsZWQpLgotICovCi1zdGF0aWMgaW50IGJmaW5fcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKLXsKLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSBQTV9TVVNQRU5EX1NUQU5EQlk6Ci0JCWJyZWFrOwotCi0JY2FzZSBQTV9TVVNQRU5EX01FTToKLQkJcmV0dXJuIC1FTk9UU1VQUDsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJmaW5fcG1fdmFsaWQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCXJldHVybiAoc3RhdGUgPT0gUE1fU1VTUEVORF9TVEFOREJZKTsKLX0KLQotc3RydWN0IHBtX29wcyBiZmluX3BtX29wcyA9IHsKLQkucHJlcGFyZSA9IGJmaW5fcG1fcHJlcGFyZSwKK3N0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBiZmluX3BtX29wcyA9IHsKIAkuZW50ZXIgPSBiZmluX3BtX2VudGVyLAotCS5maW5pc2ggPSBiZmluX3BtX2ZpbmlzaCwKIAkudmFsaWQJPSBiZmluX3BtX3ZhbGlkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYmZpbl9wbV9pbml0KHZvaWQpCiB7Ci0JcG1fc2V0X29wcygmYmZpbl9wbV9vcHMpOworCXN1c3BlbmRfc2V0X29wcygmYmZpbl9wbV9vcHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL29wcm9maWxlL0tjb25maWcgYi9hcmNoL2JsYWNrZmluL29wcm9maWxlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBhMmZkOTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9ibGFja2Zpbi9vcHJvZmlsZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotbWVudSAiUHJvZmlsaW5nIHN1cHBvcnQiCi1kZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCi1jb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAotCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCi0KLWNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFJPRklMSU5HCi0JaGVscAotCSAgT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGNhcGFibGUgb2YgcHJvZmlsaW5nIHRoZQotCSAgd2hvbGUgc3lzdGVtLCBpbmNsdWRlIHRoZSBrZXJuZWwsIGtlcm5lbCBtb2R1bGVzLCBsaWJyYXJpZXMsCi0JICBhbmQgYXBwbGljYXRpb25zLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1jb25maWcgSEFSRFdBUkVfUE0KLQl0cmlzdGF0ZSAiSGFyZHdhcmUgUGVyZm9ybWFuY2UgTW9uaXRvciBQcm9maWxpbmciCi0JZGVwZW5kcyBvbiBQUk9GSUxJTkcKLQloZWxwCi0JICB0YWtlIHVzZSBvZiBoYXJkd2FyZSBwZXJmb3JtYW5jZSBtb25pdG9yIHRvIHByb2ZpbGluZyB0aGUga2VybmVsCi0JICBhbmQgYXBwbGljYXRpb24uCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9LY29uZmlnIGIvYXJjaC9jcmlzL0tjb25maWcKaW5kZXggNmI0ZDAyNi4uMjE5MDBhOSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL0tjb25maWcKKysrIGIvYXJjaC9jcmlzL0tjb25maWcKQEAgLTE5Niw2ICsxOTYsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvdXNiL0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uIgorCiBzb3VyY2UgImFyY2gvY3Jpcy9LY29uZmlnLmRlYnVnIgogCiBzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvS2NvbmZpZyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9LY29uZmlnCmluZGV4IGM3ZWE5ZWYuLmYxY2U2ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9LY29uZmlnCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9LY29uZmlnCkBAIC0xODIsNyArMTgyLDcgQEAKIAkgIHNldCB0aGlzIHRvIHNhbWUgYXMgQ09ORklHX0VUUkFYX0xFRDFHIChub3JtYWxseSAyKS4KIAogY29uZmlnIEVUUkFYX0xFRDhZCi0JaW50ICJFaWd0aCB5ZWxsb3cgTEVEIGJpdCIKKwlpbnQgIkVpZ2h0aCB5ZWxsb3cgTEVEIGJpdCIKIAlkZXBlbmRzIG9uIEVUUkFYX0NTUDBfTEVEUwogCWRlZmF1bHQgIjIiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCBmZmI4ZDIxLi5lMjA1ZDJlIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBtYWxsb2MgYnkgSGFubnUgU2F2b2xhaW5lbiAxOTkzIGFuZCBNYXR0aGlhcyBVcmxpY2hzIDE5OTQKICAqIHB1dHMgYnkgTmljayBIb2xsb3dheSAxOTkzLCBiZXR0ZXIgcHV0cyBieSBNYXJ0aW4gTWFyZXMgMTk5NQotICogYWRvcHRhdGlvbiBmb3IgTGludXgvQ1JJUyBBeGlzIENvbW11bmljYXRpb25zIEFCLCAxOTk5CisgKiBhZGFwdGF0aW9uIGZvciBMaW51eC9DUklTIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIsIDE5OTkKICAqIAogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9kcml2ZXJzL3BjZjg1NjMuYwppbmRleCAxZGUwMDI2Li5jMjYzYjgyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvZHJpdmVycy9wY2Y4NTYzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2RyaXZlcnMvcGNmODU2My5jCkBAIC00LDcgKzQsNyBAQAogICogRnJvbSBQaGlsbGlwcycgZGF0YXNoZWV0OgogICoKICAqIFRoZSBQQ0Y4NTYzIGlzIGEgQ01PUyByZWFsLXRpbWUgY2xvY2svY2FsZW5kYXIgb3B0aW1pemVkIGZvciBsb3cgcG93ZXIKLSAqIGNvbnN1bXB0aW9uLiBBIHByb2dyYW1tYWJsZSBjbG9jayBvdXRwdXQsIGludGVydXB0IG91dHB1dCBhbmQgdm9sdGFnZQorICogY29uc3VtcHRpb24uIEEgcHJvZ3JhbW1hYmxlIGNsb2NrIG91dHB1dCwgaW50ZXJydXB0IG91dHB1dCBhbmQgdm9sdGFnZQogICogbG93IGRldGVjdG9yIGFyZSBhbHNvIHByb3ZpZGVkLiBBbGwgYWRkcmVzcyBhbmQgZGF0YSBhcmUgdHJhbnNmZXJyZWQKICAqIHNlcmlhbGx5IHZpYSB0d28tbGluZSBiaWRpcmVjdGlvbmFsIEkyQy1idXMuIE1heGltdW0gYnVzIHNwZWVkIGlzCiAgKiA0MDAga2JpdHMvcy4gVGhlIGJ1aWx0LWluIHdvcmQgYWRkcmVzcyByZWdpc3RlciBpcyBpbmNyZW1lbnRlZApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9kZWJ1Z3BvcnQuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZGVidWdwb3J0LmMKaW5kZXggMmI1MzZjYS4uOTM2NzlhNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9kZWJ1Z3BvcnQuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2RlYnVncG9ydC5jCkBAIC04Myw3ICs4Myw3IEBACiAgKgogICogUmV2aXNpb24gMS40ICAyMDAyLzExLzE5IDE0OjM1OjI0ICBzdGFydmlrCiAgKiBDaGFuZ2VzIGZyb20gbGludXggMi40Ci0gKiBDaGFuZ2VkIHN0cnVjdCBpbml0aWFsaXplciBzeW50YXggdG8gdGhlIGN1cnJlbnRseSBwcmVmZXJlZCBub3RhdGlvbgorICogQ2hhbmdlZCBzdHJ1Y3QgaW5pdGlhbGl6ZXIgc3ludGF4IHRvIHRoZSBjdXJyZW50bHkgcHJlZmVycmVkIG5vdGF0aW9uCiAgKgogICogUmV2aXNpb24gMS4zICAyMDAyLzExLzA2IDA5OjQ3OjAzICBzdGFydmlrCiAgKiBNb2RpZmllZCBmb3IgbmV3IGludGVycnVwdCBtYWNyb3MKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUwppbmRleCBhZTQ1ZDQ1Li5jNTg0NGNiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9lbnRyeS5TCkBAIC05Nyw3ICs5Nyw3IEBACiAgKgogICogIFJldmlzaW9uIDEuMzYgIDIwMDEvMTEvMjIgMTM6MzY6MzYgIGJqb3JudwogICogICogSW4gcmV0X2Zyb21faW50ciwgY2hlY2sgcmVncy0+ZGNjciBmb3IgdXNlcm1vZGUgcmVlbnRyYW5jZSBpbnN0ZWFkIG9mCi0gKiAgICBEQ0NSIGV4cGxpY2l0ZWx5IChiZWNhdXNlIHRoZSBsYXR0ZXIgbWlnaHQgbm90IHJlZmxlY3QgY3VycmVudCByZWFsaXR5KQorICogICAgRENDUiBleHBsaWNpdGx5IChiZWNhdXNlIHRoZSBsYXR0ZXIgbWlnaHQgbm90IHJlZmxlY3QgY3VycmVudCByZWFsaXR5KQogICogICogSW4gbW11X2J1c19mYXVsdCwgc2V0ICRyOSBfYWZ0ZXJfIGNhbGxpbmcgdGhlIEMtY29kZSBpbnN0ZWFkIG9mIGJlZm9yZQogICogICAgc2luY2UgJHI5IGlzIGNhbGwtY2xvYmJlcmVkIGFuZCBpcyBwb3RlbnRpYWxseSBuZWVkZWQgYWZ0ZXJ3YXJkcwogICoKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZmFzdHRpbWVyLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2Zhc3R0aW1lci5jCmluZGV4IDhjYmRmNTkuLmQzZWEwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZmFzdHRpbWVyLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9mYXN0dGltZXIuYwpAQCAtODQsNyArODQsNyBAQAogICogd2l0aCB0aW1lIGJhc2VkIG9uIGppZmZpZXMgYW5kICpSX1RJTUVSMF9EQVRBLCB1c2VzIGEgdGFibGUKICAqIGZvciBmYXN0IGNvbnZlcnNpb24gb2YgdGltZXIgdmFsdWUgdG8gbWljcm9zZWNvbmRzLgogICogKE11Y2ggZmFzdGVyIHRoZSBzdGFuZGFyZCBkb19nZXR0aW1lb2ZkYXkoKSBhbmQgd2UgZG9uJ3QgcmVhbGx5Ci0gKiB3YW4ndCB0byB1c2UgdGhlIHRydWUgdGltZSAtIHdlIHdhbid0IHRoZSAidXB0aW1lIiBzbyB0aW1lcnMgZG9uJ3Qgc2NyZXcgdXAKKyAqIHdhbnQgdG8gdXNlIHRoZSB0cnVlIHRpbWUgLSB3ZSB3YW50IHRoZSAidXB0aW1lIiBzbyB0aW1lcnMgZG9uJ3Qgc2NyZXcgdXAKICAqIHdoZW4gd2UgY2hhbmdlIHRoZSB0aW1lLgogICogVE9ETzogQWRkIGVmZmljaWVudCBzdXBwb3J0IGZvciBjb250aW51b3VzIHRpbWVycyBhcyB3ZWxsLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2lycS5jCmluZGV4IDk2MDk0Y2IuLjg0NWM5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9pcnEuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgICAgICAgICAgIGV0cmF4X2lydi0+dltpXSA9IHdlaXJkX2lycTsKIAotCS8qIEluaXRpYWxpemUgSVJRIGhhbmRsZXIgZGVzY3JpcHRpb3JzLiAqLworCS8qIEluaXRpYWxpemUgSVJRIGhhbmRsZXIgZGVzY3JpcHRvcnMuICovCiAJZm9yKGkgPSAyOyBpIDwgTlJfSVJRUzsgaSsrKSB7CiAJCWlycV9kZXNjW2ldLmNoaXAgPSAmY3Jpc3YxMF9pcnFfdHlwZTsKIAkJc2V0X2ludF92ZWN0b3IoaSwgaW50ZXJydXB0W2ldKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwva2dkYi5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9rZ2RiLmMKaW5kZXggMDc2MjhhMS4uNzdmNGIxNCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9rZ2RiLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9rZ2RiLmMKQEAgLTk1OSw3ICs5NTksNyBAQAogCiAJLyogU2VuZCByZWdpc3RlciBjb250ZW50cy4gV2UgcHJvYmFibHkgb25seSBuZWVkIHRvIHNlbmQgdGhlCiAJICogUEMsIGZyYW1lIHBvaW50ZXIgYW5kIHN0YWNrIHBvaW50ZXIgaGVyZS4gT3RoZXIgcmVnaXN0ZXJzIHdpbGwgYmUKLQkgKiBleHBsaWNpdGVseSBhc2tlZCBmb3IuIEJ1dCBmb3Igbm93LCBzZW5kIGFsbC4gCisJICogZXhwbGljaXRseSBhc2tlZCBmb3IuIEJ1dCBmb3Igbm93LCBzZW5kIGFsbC4KIAkgKi8KIAkKIAlmb3IgKHJlZ25vID0gUjA7IHJlZ25vIDw9IFVTUDsgcmVnbm8rKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiNjgzMWNlLi4xYTM3NjBjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtNjQsNyArNjQsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0VUUkFYX1dBVENIRE9HKSAmJiAhZGVmaW5lZChDT05GSUdfU1ZJTlRPX1NJTSkKIAljYXVzZV9vZl9kZWF0aCA9IDB4YmVkZWFkOwogI2Vsc2UKLQkvKiBTaW5jZSB3ZSBkb250IHBsYW4gdG8ga2VlcCBvbiByZXNldGluZyB0aGUgd2F0Y2hkb2csCisJLyogU2luY2Ugd2UgZG9udCBwbGFuIHRvIGtlZXAgb24gcmVzZXR0aW5nIHRoZSB3YXRjaGRvZywKIAkgICB0aGUga2V5IGNhbiBiZSBhcmJpdHJhcnkgaGVuY2UgdGhyZWUgKi8KIAkqUl9XQVRDSERPRyA9IElPX0ZJRUxEKFJfV0FUQ0hET0csIGtleSwgMykgfAogCQlJT19TVEFURShSX1dBVENIRE9HLCBlbmFibGUsIHN0YXJ0KTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvc2hhZG93cy5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9zaGFkb3dzLmMKaW5kZXggMzhmZDQ0ZC4uMzI2MTc4YSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9zaGFkb3dzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9zaGFkb3dzLmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFRoZXNlIGFyZSBvbmx5IHVzYWJsZSBpZiB0aGVyZSBhY3R1YWxseSBJUyBhIGxhdGNoIGNvbm5lY3RlZAogICogdG8gdGhlIGNvcnJlc3BvbmRpbmcgZXh0ZXJuYWwgY2hpcC1zZWxlY3QgcGluLgogICoKLSAqIEEgY29tbW9uIHVzYWdlIGlzIHRoYXQgQ1NQMCBjb250cm9scyBMRUQncyBhbmQgQ1NQNCB2aWRlbyBjaGlwcy4KKyAqIEEgY29tbW9uIHVzYWdlIGlzIHRoYXQgQ1NQMCBjb250cm9scyBMRURzIGFuZCBDU1A0IHZpZGVvIGNoaXBzLgogICovCiAKIHVuc2lnbmVkIGxvbmcgcG9ydF9jc2UxX3NoYWRvdzsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvZHJhbV9pbml0LlMgYi9hcmNoL2NyaXMvYXJjaC12MTAvbGliL2RyYW1faW5pdC5TCmluZGV4IDljZjgzOTMuLjZhNmJkZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvZHJhbV9pbml0LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9kcmFtX2luaXQuUwpAQCAtNDAsNyArNDAsNyBAQAogICogQ29weSB3YXJuaW5nIGZyb20gaGVhZC5TIGFib3V0IHI4IGFuZCByOQogICoKICAqIFJldmlzaW9uIDEuNyAgMjAwMS8wNC8xOCAxMjowNTozOSAgYmpvcm53Ci0gKiBGaXhlZCBjb21tZW50cywgYW5kIGV4cGxpY2l0ZWx5IGluY2x1ZGUgY29uZmlnLmggdG8gYmUgc3VyZSBpdHMgdGhlcmUKKyAqIEZpeGVkIGNvbW1lbnRzLCBhbmQgZXhwbGljaXRseSBpbmNsdWRlIGNvbmZpZy5oIHRvIGJlIHN1cmUgaXRzIHRoZXJlCiAgKgogICogUmV2aXNpb24gMS42ICAyMDAxLzA0LzEwIDA2OjIwOjE2ICBzdGFydmlrCiAgKiBEZWxheSBzaG91bGQgYmUgMjAwdXMsIG5vdCAyMDBucwpAQCAtNjYsNyArNjYsNyBAQAogICovCiAKIC8qIEp1c3QgdG8gYmUgY2VydGFpbiB0aGUgY29uZmlnIGZpbGUgaXMgaW5jbHVkZWQsIHdlIGluY2x1ZGUgaXQgaGVyZQotICogZXhwbGljaXRlbHkgaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gaXQgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGZpbGUgdGhhdAorICogZXhwbGljaXRseSBpbnN0ZWFkIG9mIGRlcGVuZGluZyBvbiBpdCBiZWluZyBpbmNsdWRlZCBpbiB0aGUgZmlsZSB0aGF0CiAgKiB1c2VzIHRoaXMgY29kZS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvbGliL3N0cmluZy5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9zdHJpbmcuYwppbmRleCA4ZmZkZTQ5Li4xNWQ2NjYyIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvbGliL3N0cmluZy5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvc3RyaW5nLmMKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgTWFrZSBzdXJlIHRoZSBjb21waWxlciBpcyBhYmxlIHRvIG1ha2Ugc29tZXRoaW5nIHVzZWZ1bCBvZiB0aGlzLgogICAgICAgQXMgaXQgaXMgbm93OiByMTAgLT4gcjEzOyByMTEgLT4gcjExIChub3ApOyByMTIgLT4gcjEyIChub3ApLgogCi0gICAgIElmIGdjYyB3YXMgYWxscmlnaHQsIGl0IHJlYWxseSB3b3VsZCBuZWVkIG5vIHRlbXBvcmFyaWVzLCBhbmQgbm8KKyAgICAgSWYgZ2NjIHdhcyBhbHJpZ2h0LCBpdCByZWFsbHkgd291bGQgbmVlZCBubyB0ZW1wb3JhcmllcywgYW5kIG5vCiAgICAgIHN0YWNrIHNwYWNlIHRvIHNhdmUgc3R1ZmYgb24uICovCiAKICAgcmVnaXN0ZXIgdm9pZCAqcmV0dXJuX2RzdCBfX2FzbV9fICgicjEwIikgPSBwZHN0OwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi91c2VyY29weS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi91c2VyY29weS5jCmluZGV4IDQzNzc4ZDUuLmExMmM3MDggMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvdXNlcmNvcHkuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MTAvbGliL3VzZXJjb3B5LmMKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgQXMgaXQgaXMgbm93OiByMTAgLT4gcjEzOyByMTEgLT4gcjExIChub3ApOyByMTIgLT4gcjEyIChub3ApLgogCiAgICAgIEZJWE1FOiBDb21tZW50IGZvciBvbGQgZ2NjIHZlcnNpb24uICBDaGVjay4KLSAgICAgSWYgZ2NjIHdhcyBhbGxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubworICAgICBJZiBnY2Mgd2FzIGFscmlnaHQsIGl0IHJlYWxseSB3b3VsZCBuZWVkIG5vIHRlbXBvcmFyaWVzLCBhbmQgbm8KICAgICAgc3RhY2sgc3BhY2UgdG8gc2F2ZSBzdHVmZiBvbi4gKi8KIAogICByZWdpc3RlciBjaGFyICpkc3QgX19hc21fXyAoInIxMyIpID0gcGRzdDsKQEAgLTIwMCw3ICsyMDAsNyBAQAogICAgICBBcyBpdCBpcyBub3c6IHIxMCAtPiByMTM7IHIxMSAtPiByMTEgKG5vcCk7IHIxMiAtPiByMTIgKG5vcCkuCiAKICAgICAgRklYTUU6IENvbW1lbnQgZm9yIG9sZCBnY2MgdmVyc2lvbi4gIENoZWNrLgotICAgICBJZiBnY2Mgd2FzIGFsbHJpZ2h0LCBpdCByZWFsbHkgd291bGQgbmVlZCBubyB0ZW1wb3JhcmllcywgYW5kIG5vCisgICAgIElmIGdjYyB3YXMgYWxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubwogICAgICBzdGFjayBzcGFjZSB0byBzYXZlIHN0dWZmIG9uLiAgKi8KIAogICByZWdpc3RlciBjaGFyICpkc3QgX19hc21fXyAoInIxMyIpID0gcGRzdDsKQEAgLTM4MCw3ICszODAsNyBAQAogICAgICAgQXMgaXQgaXMgbm93OiByMTAgLT4gcjEzOyByMTEgLT4gcjExIChub3ApOyByMTIgLT4gcjEyIChub3ApLgogCiAgICAgIEZJWE1FOiBDb21tZW50IGZvciBvbGQgZ2NjIHZlcnNpb24uICBDaGVjay4KLSAgICAgSWYgZ2NjIHdhcyBhbGxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubworICAgICBJZiBnY2Mgd2FzIGFscmlnaHQsIGl0IHJlYWxseSB3b3VsZCBuZWVkIG5vIHRlbXBvcmFyaWVzLCBhbmQgbm8KICAgICAgc3RhY2sgc3BhY2UgdG8gc2F2ZSBzdHVmZiBvbi4gKi8KIAogICByZWdpc3RlciBjaGFyICpkc3QgX19hc21fXyAoInIxMyIpID0gcHRvOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwppbmRleCAxMTkwMjY5Li4wMTY5YmExIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL21pc2MuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtOCw3ICs4LDcgQEAKICAqCiAgKiBtYWxsb2MgYnkgSGFubnUgU2F2b2xhaW5lbiAxOTkzIGFuZCBNYXR0aGlhcyBVcmxpY2hzIDE5OTQKICAqIHB1dHMgYnkgTmljayBIb2xsb3dheSAxOTkzLCBiZXR0ZXIgcHV0cyBieSBNYXJ0aW4gTWFyZXMgMTk5NQotICogYWRvcHRhdGlvbiBmb3IgTGludXgvQ1JJUyBBeGlzIENvbW11bmljYXRpb25zIEFCLCAxOTk5CisgKiBhZGFwdGF0aW9uIGZvciBMaW51eC9DUklTIEF4aXMgQ29tbXVuaWNhdGlvbnMgQUIsIDE5OTkKICAqCiAgKi8KIApAQCAtMTUxLDcgKzE1MSw3IEBACiAJZG8gewogCQlycyA9IFJFR19SRChzZXIsIHJlZ2lfc2VyLCByc19zdGF0X2Rpbik7CiAJfQotCXdoaWxlICghcnMudHJfcmR5KTsvKiBXYWl0IGZvciB0cmFuY2VpdmVyLiAqLworCXdoaWxlICghcnMudHJfcmR5KTsvKiBXYWl0IGZvciB0cmFuc2NlaXZlci4gKi8KIAogCVJFR19XUihzZXIsIHJlZ2lfc2VyLCByd19kb3V0LCBkb3V0KTsKIH0KQEAgLTI2NCw3ICsyNjQsNyBAQAogCXRyX2N0cmwuc3RvcF9iaXRzID0gMTsJLyogMiBzdG9wIGJpdHMuICovCiAKIAkvKgotCSAqIFRoZSBiYXVkcmF0ZSBzZXR1cCBpcyBhIGJpdCBmaXNoeSwgYnV0IGluIHRoZSBlbmQgdGhlIHRyYW5jZWl2ZXIgaXMKKwkgKiBUaGUgYmF1ZHJhdGUgc2V0dXAgaXMgYSBiaXQgZmlzaHksIGJ1dCBpbiB0aGUgZW5kIHRoZSB0cmFuc2NlaXZlciBpcwogCSAqIHNldCB0byA0ODAwIGFuZCB0aGUgcmVjZWl2ZXIgdG8gMTE1MjAwLiBUaGUgbWFnaWMgdmFsdWUgaXMKIAkgKiAyOS40OTMgTUh6LgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvYXhpc2ZsYXNobWFwLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYwppbmRleCA1MTgwZDQ1Li4zZWMxMmVhIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9heGlzZmxhc2htYXAuYwpAQCAtMjA1LDcgKzIwNSw3IEBACiAvKgogICogUHJvYmUgZWFjaCBjaGlwIHNlbGVjdCBpbmRpdmlkdWFsbHkgZm9yIGZsYXNoIGNoaXBzLiBJZiB0aGVyZSBhcmUgY2hpcHMgb24KICAqIGJvdGggY3NlMCBhbmQgY3NlMSwgdGhlIG10ZF9pbmZvIHN0cnVjdHMgd2lsbCBiZSBjb25jYXRlbmF0ZWQgdG8gb25lIHN0cnVjdAotICogc28gdGhhdCBNVEQgcGFydGl0aW9ucyBjYW4gY3Jvc3MgY2hpcCBib3VuZHJpZXMuCisgKiBzbyB0aGF0IE1URCBwYXJ0aXRpb25zIGNhbiBjcm9zcyBjaGlwIGJvdW5kYXJpZXMuCiAgKgogICogVGhlIG9ubHkga25vd24gcmVzdHJpY3Rpb24gdG8gaG93IHlvdSBjYW4gbW91bnQgeW91ciBjaGlwcyBpcyB0aGF0IGVhY2gKICAqIGNoaXAgc2VsZWN0IG11c3QgaG9sZCBzaW1pbGFyIGZsYXNoIGNoaXBzLiBCdXQgeW91IG5lZWQgZXh0ZXJuYWwgaGFyZHdhcmUKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL2kyYy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvaTJjLmMKaW5kZXggZTEyZjZjYy4uZjFlZGQyZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvaTJjLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvaTJjLmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCQlhY2sgPSAwOwogCWkyY19kZWxheShDTE9DS19ISUdIX1RJTUUvMik7CiAJaWYoIWFjayl7Ci0JCWlmKCFpMmNfZ2V0Yml0KCkpIC8qIHJlY2VpdmVyIHB1bGxkIFNEQSBsb3cgKi8KKwkJaWYoIWkyY19nZXRiaXQoKSkgLyogcmVjZWl2ZXIgcHVsbGVkIFNEQSBsb3cgKi8KIAkJCWFjayA9IDE7CiAJCWkyY19kZWxheShDTE9DS19ISUdIX1RJTUUvMik7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbmFuZGZsYXNoLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9uYW5kZmxhc2guYwppbmRleCA5M2RkZWE0ZC4uNWNlMDE1YyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbmFuZGZsYXNoLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvbmFuZGZsYXNoLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCS8qIEVuYWJsZSB0aGUgZm9sbG93aW5nIGZvciBhIGZsYXNoIGJhc2VkIGJhZCBibG9jayB0YWJsZSAqLwogCXRoaXMtPm9wdGlvbnMgPSBOQU5EX1VTRV9GTEFTSF9CQlQ7CiAKLQkvKiBTY2FuIHRvIGZpbmQgZXhpc3RhbmNlIG9mIHRoZSBkZXZpY2UgKi8KKwkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKi8KIAlpZiAobmFuZF9zY2FuIChjcmlzdjMyX210ZCwgMSkpIHsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIG91dF9pb3I7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9wY2Y4NTYzLmMKaW5kZXggZGE0NzlhMS4uNmRiZDcwMCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvcGNmODU2My5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9kcml2ZXJzL3BjZjg1NjMuYwpAQCAtNCw3ICs0LDcgQEAKICAqIEZyb20gUGhpbGxpcHMnIGRhdGFzaGVldDoKICAqCiAgKiBUaGUgUENGODU2MyBpcyBhIENNT1MgcmVhbC10aW1lIGNsb2NrL2NhbGVuZGFyIG9wdGltaXplZCBmb3IgbG93IHBvd2VyCi0gKiBjb25zdW1wdGlvbi4gQSBwcm9ncmFtbWFibGUgY2xvY2sgb3V0cHV0LCBpbnRlcnVwdCBvdXRwdXQgYW5kIHZvbHRhZ2UKKyAqIGNvbnN1bXB0aW9uLiBBIHByb2dyYW1tYWJsZSBjbG9jayBvdXRwdXQsIGludGVycnVwdCBvdXRwdXQgYW5kIHZvbHRhZ2UKICAqIGxvdyBkZXRlY3RvciBhcmUgYWxzbyBwcm92aWRlZC4gQWxsIGFkZHJlc3MgYW5kIGRhdGEgYXJlIHRyYW5zZmVycmVkCiAgKiBzZXJpYWxseSB2aWEgdHdvLWxpbmUgYmlkaXJlY3Rpb25hbCBJMkMtYnVzLiBNYXhpbXVtIGJ1cyBzcGVlZCBpcwogICogNDAwIGtiaXRzL3MuIFRoZSBidWlsdC1pbiB3b3JkIGFkZHJlc3MgcmVnaXN0ZXIgaXMgaW5jcmVtZW50ZWQKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZmFzdHRpbWVyLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2Zhc3R0aW1lci5jCmluZGV4IDc5ZTFlNGMuLmI0MDU1MWYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZmFzdHRpbWVyLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9mYXN0dGltZXIuYwpAQCAtOTcsNyArOTcsNyBAQAogICogd2l0aCB0aW1lIGJhc2VkIG9uIGppZmZpZXMgYW5kICpSX1RJTUVSMF9EQVRBLCB1c2VzIGEgdGFibGUKICAqIGZvciBmYXN0IGNvbnZlcnNpb24gb2YgdGltZXIgdmFsdWUgdG8gbWljcm9zZWNvbmRzLgogICogKE11Y2ggZmFzdGVyIHRoZSBzdGFuZGFyZCBkb19nZXR0aW1lb2ZkYXkoKSBhbmQgd2UgZG9uJ3QgcmVhbGx5Ci0gKiB3YW4ndCB0byB1c2UgdGhlIHRydWUgdGltZSAtIHdlIHdhbid0IHRoZSAidXB0aW1lIiBzbyB0aW1lcnMgZG9uJ3Qgc2NyZXcgdXAKKyAqIHdhbnQgdG8gdXNlIHRoZSB0cnVlIHRpbWUgLSB3ZSB3YW50IHRoZSAidXB0aW1lIiBzbyB0aW1lcnMgZG9uJ3Qgc2NyZXcgdXAKICAqIHdoZW4gd2UgY2hhbmdlIHRoZSB0aW1lLgogICogVE9ETzogQWRkIGVmZmljaWVudCBzdXBwb3J0IGZvciBjb250aW51b3VzIHRpbWVycyBhcyB3ZWxsLgogICoKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCmluZGV4IGNjMzYxYmYuLmE5YWNhYTI3IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvaXJxLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2xvY2ssIGZsYWdzKTsKICAgICAgICAgaW50cl9tYXNrID0gUkVHX1JEX0lOVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sIHJ3X21hc2spOwogCi0JLyogUmVtZW1iZXI7IDEgbGV0IHRocnUsIDAgYmxvY2suICovCisJLyogUmVtZW1iZXI7IDEgbGV0IHRocm91Z2gsIDAgYmxvY2suICovCiAJaW50cl9tYXNrICY9IH4oMSA8PCAoaXJxIC0gRklSU1RfSVJRKSk7CiAKIAlSRUdfV1JfSU5UKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwgcndfbWFzaywgaW50cl9tYXNrKTsKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2xvY2ssIGZsYWdzKTsKICAgICAgICAgaW50cl9tYXNrID0gUkVHX1JEX0lOVChpbnRyX3ZlY3QsIGlycV9yZWdzW2NwdV0sIHJ3X21hc2spOwogCi0JLyogUmVtZW1iZXI7IDEgbGV0IHRocnUsIDAgYmxvY2suICovCisJLyogUmVtZW1iZXI7IDEgbGV0IHRocm91Z2gsIDAgYmxvY2suICovCiAJaW50cl9tYXNrIHw9ICgxIDw8IChpcnEgLSBGSVJTVF9JUlEpKTsKIAogCVJFR19XUl9JTlQoaW50cl92ZWN0LCBpcnFfcmVnc1tjcHVdLCByd19tYXNrLCBpbnRyX21hc2spOwpAQCAtMzA4LDcgKzMwOCw3IEBACiAJICovCiAJaXJxX2VudGVyKCk7CiAKLQkvKiBHZXQgd2hpY2ggSVJRcyB0aGF0IGhhcHBlbmQuICovCisJLyogR2V0IHdoaWNoIElSUXMgdGhhdCBoYXBwZW5lZC4gKi8KIAltYXNrZWQgPSBSRUdfUkRfSU5UKGludHJfdmVjdCwgaXJxX3JlZ3NbY3B1XSwgcl9tYXNrZWRfdmVjdCk7CiAKIAkvKiBDYWxjdWxhdGUgbmV3IElSUSBtYXNrIHdpdGggdGhlc2UgSVJRcyBkaXNhYmxlZC4gKi8KQEAgLTM2Niw3ICszNjYsNyBAQAogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKIAkJZXRyYXhfaXJ2LT52W2ldID0gd2VpcmRfaXJxOwogCi0JLyogUG9pbnQgYWxsIElSUSdzIHRvIGJhZCBoYW5kbGVycy4gKi8KKwkvKiBQb2ludCBhbGwgSVJRcyB0byBiYWQgaGFuZGxlcnMuICovCiAJZm9yIChpID0gRklSU1RfSVJRLCBqID0gMDsgaiA8IE5SX0lSUVM7IGkrKywgaisrKSB7CiAJCWlycV9kZXNjW2pdLmNoaXAgPSAmY3Jpc3YzMl9pcnFfdHlwZTsKIAkJc2V0X2V4Y2VwdGlvbl92ZWN0b3IoaSwgaW50ZXJydXB0W2pdKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNjMyNjM1MS4uYjcyYTE1NSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTE2Miw3ICsxNjIsNyBAQAogCS8qIFB1dCB0aGUgc3dpdGNoIHN0YWNrIHJpZ2h0IGJlbG93IHRoZSBwdF9yZWdzLiAqLwogCXN3c3RhY2sgPSAoKHN0cnVjdCBzd2l0Y2hfc3RhY2sgKikgY2hpbGRyZWdzKSAtIDE7CiAKLQkvKiBQYXJhbWF0ZXIgdG8gcmV0X2Zyb21fc3lzX2NhbGwuIDAgaXMgZG9uJ3QgcmVzdGFydCB0aGUgc3lzY2FsbC4gKi8KKwkvKiBQYXJhbWV0ZXIgdG8gcmV0X2Zyb21fc3lzX2NhbGwuIDAgaXMgZG9uJ3QgcmVzdGFydCB0aGUgc3lzY2FsbC4gKi8KIAlzd3N0YWNrLT5yOSA9IDA7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc2lnbmFsLmMKaW5kZXggN2NkNmFjOC4uMDI0Y2M2OSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NpZ25hbC5jCkBAIC0zNDcsNyArMzQ3LDcgQEAKIC8qIEdyYWIgYW5kIHNldHVwIGEgc2lnbmFsIGZyYW1lLgogICoKICAqIEJhc2ljYWxseSBhIGxvdCBvZiBzdGF0ZS1pbmZvIGlzIHN0YWNrZWQsIGFuZCBhcnJhbmdlZCBmb3IgdGhlCi0gKiB1c2VyLW1vZGUgcHJvZ3JhbSB0byByZXR1cm4gdG8gdGhlIGtlcm5lbCB1c2luZyBlaXRoZXIgYSB0cmFtcGlsaW5lCisgKiB1c2VyLW1vZGUgcHJvZ3JhbSB0byByZXR1cm4gdG8gdGhlIGtlcm5lbCB1c2luZyBlaXRoZXIgYSB0cmFtcG9saW5lCiAgKiB3aGljaCBwZXJmb3JtcyB0aGUgc3lzY2FsbCBzaWdyZXR1cm4oKSwgb3IgYSBwcm92aWRlZCB1c2VyLW1vZGUKICAqIHRyYW1wb2xpbmUuCiAgICovCkBAIC02NDEsNyArNjQxLDcgQEAKIAkJdXNlcl9yZWdzKHRpKS0+c3BjID0gMDsKIAl9CiAJLyogRklYTUU6IEZpbHRlciBvdXQgZmFsc2UgaC93IGJyZWFrcG9pbnQgaGl0cyAoaS5lLiBFREEKLQkgICBub3Qgd2l0aGluZyBhbnkgY29uZmlndXJlZCBoL3cgYnJlYWtwb2ludCByYW5nZSkuIFN5bmNocm9uaXplIHdpdGgKKwkgICBub3Qgd2l0aGluIGFueSBjb25maWd1cmVkIGgvdyBicmVha3BvaW50IHJhbmdlKS4gU3luY2hyb25pemUgd2l0aAogCSAgIHdoYXQgYWxyZWFkeSBleGlzdHMgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcuICAqLwogCWlmICgoKHVzZXJfcmVncyh0aSktPmV4cyAmIDB4ZmYwMCkgPj4gOCkgPT0gQlJFQUtfOF9JTlRSX1ZFQ1QpIHsKIAkJLyogQnJlYWsgODogc3VidHJhY3QgMiBmcm9tIEVSUCB1bmxlc3MgaW4gYSBkZWxheSBzbG90LiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKaW5kZXggNjk3NDk0Yi4uMTcxYzk2ZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLS8qIFNlY29uZGFyeSBDUFVzIHN0YXJ0cyB1aW5nIEMgaGVyZS4gSGVyZSB3ZSBuZWVkIHRvIHNldHVwIENQVQorLyogU2Vjb25kYXJ5IENQVXMgc3RhcnRzIHVzaW5nIEMgaGVyZS4gSGVyZSB3ZSBuZWVkIHRvIHNldHVwIENQVQogICogc3BlY2lmaWMgc3R1ZmYgc3VjaCBhcyB0aGUgbG9jYWwgdGltZXIgYW5kIHRoZSBNTVUuICovCiB2b2lkIF9faW5pdCBzbXBfY2FsbGluKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCmluZGV4IGJlMGEwMTYuLjJmN2U4ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCkBAIC05OSw3ICs5OSw3IEBACiAvKiBGcm9tIHRpbWVyIE1EUyBkZXNjcmliaW5nIHRoZSBoYXJkd2FyZSB3YXRjaGRvZzoKICAqIDQuMy4xIFdhdGNoZG9nIE9wZXJhdGlvbgogICogVGhlIHdhdGNoZG9nIHRpbWVyIGlzIGFuIDgtYml0IHRpbWVyIHdpdGggYSBjb25maWd1cmFibGUgc3RhcnQgdmFsdWUuCi0gKiBPbmNlIHN0YXJ0ZWQgdGhlIHdoYXRjaGRvZyBjb3VudHMgZG93bndhcmRzIHdpdGggYSBmcmVxdWVuY3kgb2YgNzYzIEh6CisgKiBPbmNlIHN0YXJ0ZWQgdGhlIHdhdGNoZG9nIGNvdW50cyBkb3dud2FyZHMgd2l0aCBhIGZyZXF1ZW5jeSBvZiA3NjMgSHoKICAqICgxMDAvMTMxMDcyIE1IeikuIFdoZW4gdGhlIHdhdGNoZG9nIGNvdW50cyBkb3duIHRvIDEsIGl0IGdlbmVyYXRlcyBhbgogICogTk1JIChOb24gTWFza2FibGUgSW50ZXJydXB0KSwgYW5kIHdoZW4gaXQgY291bnRzIGRvd24gdG8gMCwgaXQgcmVzZXRzIHRoZQogICogY2hpcC4KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdHJhcHMuYwppbmRleCAyNDYyYjFlLi4xN2ZkM2RiIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC90cmFwcy5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogLyoKICAqIFRoaXMgZ2V0cyBjYWxsZWQgZnJvbSBlbnRyeS5TIHdoZW4gdGhlIHdhdGNoZG9nIGhhcyBiaXR0ZW4uIFNob3cgc29tZXRoaW5nCi0gKiBzaW1pbGlhciB0byBhbiBPb3BzIGR1bXAsIGFuZCBpZiB0aGUga2VybmVsIGlmIGNvbmZpZ3VyZWQgdG8gYmUgYSBuaWNlIGRvZ2d5OworICogc2ltaWxhciB0byBhbiBPb3BzIGR1bXAsIGFuZCBpZiB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgdG8gYmUgYSBuaWNlIGRvZ2d5OwogICogaGFsdCBpbnN0ZWFkIG9mIHJlYm9vdC4KICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9kcmFtX2luaXQuUyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvZHJhbV9pbml0LlMKaW5kZXggMTU4YjNkYi4uMjE4ZmJlMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9kcmFtX2luaXQuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL2RyYW1faW5pdC5TCkBAIC0xMiw3ICsxMiw3IEBACiAgKi8KIAogLyogSnVzdCB0byBiZSBjZXJ0YWluIHRoZSBjb25maWcgZmlsZSBpcyBpbmNsdWRlZCwgd2UgaW5jbHVkZSBpdCBoZXJlCi0gKiBleHBsaWNpdGVseSBpbnN0ZWFkIG9mIGRlcGVuZGluZyBvbiBpdCBiZWluZyBpbmNsdWRlZCBpbiB0aGUgZmlsZSB0aGF0CisgKiBleHBsaWNpdGx5IGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIGl0IGJlaW5nIGluY2x1ZGVkIGluIHRoZSBmaWxlIHRoYXQKICAqIHVzZXMgdGhpcyBjb2RlLgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvc3RyaW5nLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL3N0cmluZy5jCmluZGV4IDk4ZTI4MmEuLjY3NDBiMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvc3RyaW5nLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi9zdHJpbmcuYwpAQCAtNDEsNyArNDEsNyBAQAogICAgICBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGlzIGFibGUgdG8gbWFrZSBzb21ldGhpbmcgdXNlZnVsIG9mIHRoaXMuCiAgICAgICBBcyBpdCBpcyBub3c6IHIxMCAtPiByMTM7IHIxMSAtPiByMTEgKG5vcCk7IHIxMiAtPiByMTIgKG5vcCkuCiAKLSAgICAgSWYgZ2NjIHdhcyBhbGxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubworICAgICBJZiBnY2Mgd2FzIGFscmlnaHQsIGl0IHJlYWxseSB3b3VsZCBuZWVkIG5vIHRlbXBvcmFyaWVzLCBhbmQgbm8KICAgICAgc3RhY2sgc3BhY2UgdG8gc2F2ZSBzdHVmZiBvbi4gKi8KIAogICByZWdpc3RlciB2b2lkICpyZXR1cm5fZHN0IF9fYXNtX18gKCJyMTAiKSA9IHBkc3Q7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbGliL3VzZXJjb3B5LmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbGliL3VzZXJjb3B5LmMKaW5kZXggZjBiMDg0Ni4uMDRkMGNmMyAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL2xpYi91c2VyY29weS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9saWIvdXNlcmNvcHkuYwpAQCAtMzQsNyArMzQsNyBAQAogICAgICBBcyBpdCBpcyBub3c6IHIxMCAtPiByMTM7IHIxMSAtPiByMTEgKG5vcCk7IHIxMiAtPiByMTIgKG5vcCkuCiAKICAgICAgRklYTUU6IENvbW1lbnQgZm9yIG9sZCBnY2MgdmVyc2lvbi4gIENoZWNrLgotICAgICBJZiBnY2Mgd2FzIGFsbHJpZ2h0LCBpdCByZWFsbHkgd291bGQgbmVlZCBubyB0ZW1wb3JhcmllcywgYW5kIG5vCisgICAgIElmIGdjYyB3YXMgYWxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubwogICAgICBzdGFjayBzcGFjZSB0byBzYXZlIHN0dWZmIG9uLiAqLwogCiAgIHJlZ2lzdGVyIGNoYXIgKmRzdCBfX2FzbV9fICgicjEzIikgPSBwZHN0OwpAQCAtMTY4LDcgKzE2OCw3IEBACiAgICAgIEFzIGl0IGlzIG5vdzogcjEwIC0+IHIxMzsgcjExIC0+IHIxMSAobm9wKTsgcjEyIC0+IHIxMiAobm9wKS4KIAogICAgICBGSVhNRTogQ29tbWVudCBmb3Igb2xkIGdjYyB2ZXJzaW9uLiAgQ2hlY2suCi0gICAgIElmIGdjYyB3YXMgYWxscmlnaHQsIGl0IHJlYWxseSB3b3VsZCBuZWVkIG5vIHRlbXBvcmFyaWVzLCBhbmQgbm8KKyAgICAgSWYgZ2NjIHdhcyBhbHJpZ2h0LCBpdCByZWFsbHkgd291bGQgbmVlZCBubyB0ZW1wb3JhcmllcywgYW5kIG5vCiAgICAgIHN0YWNrIHNwYWNlIHRvIHNhdmUgc3R1ZmYgb24uICAqLwogCiAgIHJlZ2lzdGVyIGNoYXIgKmRzdCBfX2FzbV9fICgicjEzIikgPSBwZHN0OwpAQCAtMzMyLDcgKzMzMiw3IEBACiAgICAgICBBcyBpdCBpcyBub3c6IHIxMCAtPiByMTM7IHIxMSAtPiByMTEgKG5vcCk7IHIxMiAtPiByMTIgKG5vcCkuCiAKICAgICAgRklYTUU6IENvbW1lbnQgZm9yIG9sZCBnY2MgdmVyc2lvbi4gIENoZWNrLgotICAgICBJZiBnY2Mgd2FzIGFsbHJpZ2h0LCBpdCByZWFsbHkgd291bGQgbmVlZCBubyB0ZW1wb3JhcmllcywgYW5kIG5vCisgICAgIElmIGdjYyB3YXMgYWxyaWdodCwgaXQgcmVhbGx5IHdvdWxkIG5lZWQgbm8gdGVtcG9yYXJpZXMsIGFuZCBubwogICAgICBzdGFjayBzcGFjZSB0byBzYXZlIHN0dWZmIG9uLiAqLwogCiAgIHJlZ2lzdGVyIGNoYXIgKmRzdCBfX2FzbV9fICgicjEzIikgPSBwdG87CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbW0vdGxiLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vdGxiLmMKaW5kZXggYzJkMTJlOS4uYTA3NmVmNiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL3RsYi5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS90bGIuYwpAQCAtMzAsOCArMzAsOCBAQAogICogVGhlIFRMQiBjYW4gaG9zdCB1cCB0byAyNTYgZGlmZmVyZW50IG1tIGNvbnRleHRzIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBydW5uaW5nCiAgKiBjb250ZXh0IGlzIGZvdW5kIGluIHRoZSBQSUQgcmVnaXN0ZXIuIEVhY2ggVExCIGVudHJ5IGNvbnRhaW5zIGEgcGFnZV9pZCB0aGF0CiAgKiBoYXMgdG8gbWF0Y2ggdGhlIFBJRCByZWdpc3RlciB0byBnaXZlIGEgaGl0LiBwYWdlX2lkX21hcCBrZWVwcyB0cmFjayBvZiB3aGljaAotICogbW0ncyBpcyBhc3NpZ25lZCB0byB3aGljaCBwYWdlX2lkJ3MsIG1ha2luZyBzdXJlIGl0J3Mga25vd24gd2hlbiB0bwotICogaW52YWxpZGF0ZSBUTEIgZW50cmllcy4KKyAqIG1tIGlzIGFzc2lnbmVkIHRvIHdoaWNoIHBhZ2VfaWQsIG1ha2luZyBzdXJlIGl0J3Mga25vd24gd2hlbiB0byBpbnZhbGlkYXRlIFRMQgorICogZW50cmllcy4KICAqCiAgKiBUaGUgbGFzdCBwYWdlX2lkIGlzIG5ldmVyIHJ1bm5pbmcsIGl0IGlzIHVzZWQgYXMgYW4gaW52YWxpZCBwYWdlX2lkIHNvIHRoYXQKICAqIGl0J3MgcG9zc2libGUgdG8gbWFrZSBUTEIgZW50cmllcyB0aGF0IHdpbGwgbmVydmVyIG1hdGNoLgpAQCAtMTg4LDcgKzE4OCw3IEBACiAJc3Bpbl91bmxvY2soJm1tdV9jb250ZXh0X2xvY2spOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0aGUgcGdkIGZvciB0aGUgZmF1bHQgaGFuZGxlcnMuIEtlZXAgYSBzZXBlcmF0ZSBjb3B5IG9mIGl0CisJICogUmVtZW1iZXIgdGhlIHBnZCBmb3IgdGhlIGZhdWx0IGhhbmRsZXJzLiBLZWVwIGEgc2VwYXJhdGUgY29weSBvZiBpdAogCSAqIGJlY2F1c2UgY3VycmVudCBhbmQgYWN0aXZlX21tIG1pZ2h0IGJlIGludmFsaWQgYXQgcG9pbnRzIHdoZXJlCiAJICogdGhlcmUncyBzdGlsbCBhIG5lZWQgdG8gZGVyZWZlciB0aGUgcGdkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYyBiL2FyY2gvY3Jpcy9rZXJuZWwvaXJxLmMKaW5kZXggOTAzZWE2Mi4uNWMyN2ZmOCAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2NyaXMva2VybmVsL2lycS5jCkBAIC03LDcgKzcsNyBAQAogICogICAgICBBdXRob3JzOiBCam9ybiBXZXNlbiAoYmpvcm53QGF4aXMuY29tKQogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgY29kZSB1c2VkIGJ5IHZhcmlvdXMgSVJRIGhhbmRsaW5nIHJvdXRpbmVzOgotICogYXNraW5nIGZvciBkaWZmZXJlbnQgSVJRJ3Mgc2hvdWxkIGJlIGRvbmUgdGhyb3VnaCB0aGVzZSByb3V0aW5lcworICogYXNraW5nIGZvciBkaWZmZXJlbnQgSVJRcyBzaG91bGQgYmUgZG9uZSB0aHJvdWdoIHRoZXNlIHJvdXRpbmVzCiAgKiBpbnN0ZWFkIG9mIGp1c3QgZ3JhYmJpbmcgdGhlbS4gVGh1cyBzZXR1cHMgd2l0aCBkaWZmZXJlbnQgSVJRIG51bWJlcnMKICAqIHNob3VsZG4ndCByZXN1bHQgaW4gYW55IHdlaXJkIHN1cnByaXNlcywgYW5kIGluc3RhbGxpbmcgbmV3IGhhbmRsZXJzCiAgKiBzaG91bGQgYmUgZWFzaWVyLgpAQCAtMTUsNyArMTUsNyBAQAogICovCiAKIC8qCi0gKiBJUlEncyBhcmUgaW4gZmFjdCBpbXBsZW1lbnRlZCBhIGJpdCBsaWtlIHNpZ25hbCBoYW5kbGVycyBmb3IgdGhlIGtlcm5lbC4KKyAqIElSUXMgYXJlIGluIGZhY3QgaW1wbGVtZW50ZWQgYSBiaXQgbGlrZSBzaWduYWwgaGFuZGxlcnMgZm9yIHRoZSBrZXJuZWwuCiAgKiBOYXR1cmFsbHkgaXQncyBub3QgYSAxOjEgcmVsYXRpb24sIGJ1dCB0aGVyZSBhcmUgc2ltaWxhcml0aWVzLgogICovCiAKQEAgLTgzLDkgKzgzLDkgQEAKIAogCiAvKiBjYWxsZWQgYnkgdGhlIGFzc2VtYmxlciBJUlEgZW50cnkgZnVuY3Rpb25zIGRlZmluZWQgaW4gaXJxLmgKLSAqIHRvIGRpc3BhdGNoIHRoZSBpbnRlcnJ1cHRzIHRvIHJlZ2lzdHJlZCBoYW5kbGVycworICogdG8gZGlzcGF0Y2ggdGhlIGludGVycnVwdHMgdG8gcmVnaXN0ZXJlZCBoYW5kbGVycwogICogaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdXBvbiBlbnRyeSAtIGRlcGVuZGluZyBvbiBpZiB0aGUKLSAqIGludGVycnVwdCB3YXMgcmVnaXN0cmVkIHdpdGggSVJRRl9ESVNBQkxFRCBvciBub3QsIGludGVycnVwdHMKKyAqIGludGVycnVwdCB3YXMgcmVnaXN0ZXJlZCB3aXRoIElSUUZfRElTQUJMRUQgb3Igbm90LCBpbnRlcnJ1cHRzCiAgKiBhcmUgcmUtZW5hYmxlZCBvciBub3QuCiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL21tL2ZhdWx0LmMgYi9hcmNoL2NyaXMvbW0vZmF1bHQuYwppbmRleCA4YWFiODE0Li4zMDM0ZjNmIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvbW0vZmF1bHQuYworKysgYi9hcmNoL2NyaXMvbW0vZmF1bHQuYwpAQCAtMTMsNyArMTMsNyBAQAogICogIEZpeGVkIHdhcm5pbmcuCiAgKgogICogIFJldmlzaW9uIDEuMTggIDIwMDUvMDEvMTIgMDg6MTA6MTQgIHN0YXJ2aWsKLSAqICBSZWFkZGVkIHRoZSBjaGFuZ2Ugb2YgZnJhbWV0eXBlIHdoZW4gaGFuZGxpbmcga2VybmVsIHBhZ2UgZmF1bHQgZml4dXAKKyAqICBSZS1hZGRlZCB0aGUgY2hhbmdlIG9mIGZyYW1ldHlwZSB3aGVuIGhhbmRsaW5nIGtlcm5lbCBwYWdlIGZhdWx0IGZpeHVwCiAgKiAgZm9yIHYxMC4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgdGhhdCB0aGUgQ1BVIHJlbWFrZXMgdGhlIGZhdWx0aW5nCiAgKiAgYWNjZXNzLgogICoKQEAgLTQ5LDcgKzQ5LDcgQEAKICAqCiAgKiAgUmV2aXNpb24gMS44ICAyMDAzLzA3LzA0IDEzOjAyOjQ4ICB0b2JpYXNhCiAgKiAgTW92ZWQgY29kZSBzbmlwcGV0IGZyb20gYXJjaC9jcmlzL21tL2ZhdWx0LmMgdGhhdCBzZWFyY2hlcyBmb3IgZml4dXAgY29kZQotICogIHRvIHNlcGVyYXRlIGZ1bmN0aW9uIGluIGFyY2gtc3BlY2lmaWMgZmlsZXMuCisgKiAgdG8gc2VwYXJhdGUgZnVuY3Rpb24gaW4gYXJjaC1zcGVjaWZpYyBmaWxlcy4KICAqCiAgKiAgUmV2aXNpb24gMS43ICAyMDAzLzAxLzIyIDA2OjQ4OjM4ICBzdGFydmlrCiAgKiAgRml4ZWQgd2FybmluZ3MgaXNzdWVkIGJ5IEdDQyAzLjIuMQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL21tL2luaXQuYyBiL2FyY2gvY3Jpcy9tbS9pbml0LmMKaW5kZXggYjc4NDJmZi4uMGM4MzNkMSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL21tL2luaXQuYworKysgYi9hcmNoL2NyaXMvbW0vaW5pdC5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqICAkTG9nOiBpbml0LmMsdiAkCiAgKiAgUmV2aXNpb24gMS4xMSAgMjAwNC8wNS8yOCAwOToyODo1NiAgc3RhcnZpawotICogIENhbGN1bGF0aW9uIG9mIGxvb3BzX3Blcl91c2VjIG1vdmVkIGJlY2F1c2UgaW5pdGFsaXphdGlvbiBvcmRlciBoYXMgY2hhbmdlZAorICogIENhbGN1bGF0aW9uIG9mIGxvb3BzX3Blcl91c2VjIG1vdmVkIGJlY2F1c2UgaW5pdGlhbGl6YXRpb24gb3JkZXIgaGFzIGNoYW5nZWQKICAqICBpbiBMaW51eCAyLjYuCiAgKgogICogIFJldmlzaW9uIDEuMTAgIDIwMDQvMDUvMTQgMDc6NTg6MDUgIHN0YXJ2aWsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9tbS90bGIuYyBiL2FyY2gvY3Jpcy9tbS90bGIuYwppbmRleCBjNGE5OGUyLi5iN2Y4ZGU1IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvbW0vdGxiLmMKKysrIGIvYXJjaC9jcmlzL21tL3RsYi5jCkBAIC0xNiw3ICsxNiw3IEBACiAvKiBUaGUgVExCIGNhbiBob3N0IHVwIHRvIDY0IGRpZmZlcmVudCBtbSBjb250ZXh0cyBhdCB0aGUgc2FtZSB0aW1lLgogICogVGhlIHJ1bm5pbmcgY29udGV4dCBpcyBSX01NVV9DT05URVhULCBhbmQgZWFjaCBUTEIgZW50cnkgY29udGFpbnMgYQogICogcGFnZV9pZCB0aGF0IGhhcyB0byBtYXRjaCB0byBnaXZlIGEgaGl0LiBJbiBwYWdlX2lkX21hcCwgd2Uga2VlcCB0cmFjawotICogb2Ygd2hpY2ggbW0ncyB3ZSBoYXZlIGFzc2lnbmVkIHdoaWNoIHBhZ2VfaWQncywgc28gdGhhdCB3ZSBrbm93IHdoZW4KKyAqIG9mIHdoaWNoIG1tIHdlIGhhdmUgYXNzaWduZWQgdG8gd2hpY2ggcGFnZV9pZCwgc28gdGhhdCB3ZSBrbm93IHdoZW4KICAqIHRvIGludmFsaWRhdGUgVExCIGVudHJpZXMuCiAgKgogICogVGhlIGxhc3QgcGFnZV9pZCBpcyBuZXZlciBydW5uaW5nIC0gaXQgaXMgdXNlZCBhcyBhbiBpbnZhbGlkIHBhZ2VfaWQKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L0tjb25maWcgYi9hcmNoL2Zydi9LY29uZmlnCmluZGV4IDc0ZWVmNzEuLjQzMTUzZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L0tjb25maWcKKysrIGIvYXJjaC9mcnYvS2NvbmZpZwpAQCAtMzc1LDYgKzM3NSw4IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCisKIHNvdXJjZSAiYXJjaC9mcnYvS2NvbmZpZy5kZWJ1ZyIKIAogc291cmNlICJzZWN1cml0eS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzMDkxLmMgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTEuYwppbmRleCBhZDc1M2MxLi45ZTM4Zjk5IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTEuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTEuYwpAQCAtMTcsMTAgKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lyYy1yZWdzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9rZXJuZWwvaXJxLW1iOTMwOTMuYyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5My5jCmluZGV4IGUwOTgzZjYuLjNjMjc1MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5My5jCisrKyBiL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzA5My5jCkBAIC0xNywxMCArMTcsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaXJjLXJlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEtbWI5MzQ5My5jIGIvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzNDkzLmMKaW5kZXggYzE1N2VlZi4uNzc1NGM3MyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzNDkzLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL2lycS1tYjkzNDkzLmMKQEAgLTE3LDEwICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pcmMtcmVncy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL2lycS5jIGIvYXJjaC9mcnYva2VybmVsL2lycS5jCmluZGV4IGM3ZTU5ZGMuLjczYWJhZTcgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvaXJxLmMKQEAgLTI0LDEyICsyNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KQEAgLTEzNCw3ICsxMzQsNyBAQAogfTsKIAogLyoKLSAqIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MKKyAqIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRcwogICogLSByZWdpc3RlcnMgYXJlIHJlZmVycmVkIHRvIGJ5IHRoZSBfX2ZyYW1lIHZhcmlhYmxlIChHUjI4KQogICogLSBJUlEgZGlzdHJpYnV0aW9uIGlzIGNvbXBsaWNhdGVkIGluIHRoaXMgYXJjaCBiZWNhdXNlIG9mIHRoZSBtYW55IFBJQ3MsIHRoZQogICogICB3YXkgdGhleSB3b3JrIGFuZCB0aGUgd2F5IHRoZXkgY2FzY2FkZQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3NlbWFwaG9yZS5jIGIvYXJjaC9mcnYva2VybmVsL3NlbWFwaG9yZS5jCmluZGV4IDhlMTgyY2UuLjdlZTNhMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc2VtYXBob3JlLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCXdhaXRlciA9IGxpc3RfZW50cnkoc2VtLT53YWl0X2xpc3QubmV4dCwgc3RydWN0IHNlbV93YWl0ZXIsIGxpc3QpOwogCiAJLyogV2UgbXVzdCBiZSBjYXJlZnVsIG5vdCB0byB0b3VjaCAnd2FpdGVyJyBhZnRlciB3ZSBzZXQgLT50YXNrID0gTlVMTC4KLQkgKiBJdCBpcyBhbiBhbGxvY2F0ZWQgb24gdGhlIHdhaXRlcidzIHN0YWNrIGFuZCBtYXkgYmVjb21lIGludmFsaWQgYXQKKwkgKiBJdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHdhaXRlcidzIHN0YWNrIGFuZCBtYXkgYmVjb21lIGludmFsaWQgYXQKIAkgKiBhbnkgdGltZSBhZnRlciB0aGF0IHBvaW50IChkdWUgdG8gYSB3YWtldXAgZnJvbSBhbm90aGVyIHNvdXJjZSkuCiAJICovCiAJbGlzdF9kZWxfaW5pdCgmd2FpdGVyLT5saXN0KTsKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2Zydi9rZXJuZWwvdGltZS5jCmluZGV4IGU4M2UwYmMuLjkyNWZiMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3RpbWUuYwpAQCAtNjYsNyArNjYsNyBAQAogCS8qCiAJICogSGVyZSB3ZSBhcmUgaW4gdGhlIHRpbWVyIGlycSBoYW5kbGVyLiBXZSBqdXN0IGhhdmUgaXJxcyBsb2NhbGx5CiAJICogZGlzYWJsZWQgYnV0IHdlIGRvbid0IGtub3cgaWYgdGhlIHRpbWVyX2JoIGlzIHJ1bm5pbmcgb24gdGhlIG90aGVyCi0JICogQ1BVLiBXZSBuZWVkIHRvIGF2b2lkIHRvIFNNUCByYWNlIHdpdGggaXQuIE5PVEU6IHdlIGRvbicgdCBuZWVkCisJICogQ1BVLiBXZSBuZWVkIHRvIGF2b2lkIHRvIFNNUCByYWNlIHdpdGggaXQuIE5PVEU6IHdlIGRvbid0IG5lZWQKIAkgKiB0aGUgaXJxIHZlcnNpb24gb2Ygd3JpdGVfbG9jayBiZWNhdXNlIGFzIGp1c3Qgc2FpZCB3ZSBoYXZlIGlycQogCSAqIGxvY2FsbHkgZGlzYWJsZWQuIC1hcmNhCiAJICovCkBAIC0xMjYsNyArMTI2LDcgQEAKIAogCS8qIEZJWCBieSBkcWcgOiBTZXQgdG8gemVybyBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3QgaGF2ZSB0b2QgKi8KIAkvKiB3aXRob3V0IHRoaXMgdGltZSBpcyB1bmRlZmluZWQgYW5kIGNhbiBvdmVyZmxvdyB0aW1lX3QsIGNhdXNpbmcgICovCi0JLyogdmVyeSBzdGFuZ2UgZXJyb3JzICovCisJLyogdmVyeSBzdHJhbmdlIGVycm9ycyAqLwogCXllYXIgPSAxOTgwOwogCW1vbiA9IGRheSA9IDE7CiAJaG91ciA9IG1pbiA9IHNlYyA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL0tjb25maWcgYi9hcmNoL2g4MzAwL0tjb25maWcKaW5kZXggZTM1Zjc0ZS4uZTJlOWY1NyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnCisrKyBiL2FyY2gvaDgzMDAvS2NvbmZpZwpAQCAtMjIzLDYgKzIyMyw4IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCisKIHNvdXJjZSAiYXJjaC9oODMwMC9LY29uZmlnLmRlYnVnIgogCiBzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL0tjb25maWcuZGVidWcgYi9hcmNoL2g4MzAwL0tjb25maWcuZGVidWcKaW5kZXggOTk2ZDk3ZS4uZWU2NzFjMyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvaDgzMDAvS2NvbmZpZy5kZWJ1ZwpAQCAtNDIsMTYgKzQyLDE2IEBACiAJICBSZXF1aXJlIGVDb3MvUmVkQm9vdAogCiBjb25maWcgREVGQVVMVF9DTURMSU5FCi0JYm9vbCAiVXNlIGJ1aWxkaW4gY29tbWFuZGxpbmUiCisJYm9vbCAiVXNlIGJ1aWx0aW4gY29tbWFuZGxpbmUiCiAJZGVmYXVsdCBuCiAJaGVscAotCSAgYnVpbGRpbiBrZXJuZWwgY29tbWFuZGxpbmUgZW5hYmxlZC4KKwkgIGJ1aWx0aW4ga2VybmVsIGNvbW1hbmRsaW5lIGVuYWJsZWQuCiAKIGNvbmZpZyBLRVJORUxfQ09NTUFORAogCXN0cmluZyAiQnVpbGRpbiBjb21tbWFuZCBzdHJpbmciCiAJZGVwZW5kcyBvbiBERUZBVUxUX0NNRExJTkUKIAloZWxwCi0JICBidWlsZGluIGtlcm5lbCBjb21tYW5kbGluZSBzdHJpbmdzLgorCSAgYnVpbHRpbiBrZXJuZWwgY29tbWFuZGxpbmUgc3RyaW5ncy4KIAogY29uZmlnIEJMS0RFVl9SRVNFUlZFCiAJYm9vbCAiQkxLREVWIFJlc2VydmVkIE1lbW9yeSIKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL2lycS5jIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKaW5kZXggNDNkMjFlOS4uOGRlYzRkZCAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvaXJxLmMKQEAgLTY4LDcgKzY4LDcgQEAKIH0KIAogLyoKLSAqIGg4MzAwIGludGVycnVwdCBjb250cm9sZXIgaW1wbGVtZW50YXRpb24KKyAqIGg4MzAwIGludGVycnVwdCBjb250cm9sbGVyIGltcGxlbWVudGF0aW9uCiAgKi8KIHN0cnVjdCBpcnFfY2hpcCBoODMwMGlycV9jaGlwID0gewogCS5uYW1lCQk9ICJIODMwMC1JTlRDIiwKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYwppbmRleCAzMzA2MzgyLi5lMzdjODM1IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZS5jCkBAIC01Myw3ICs1Myw3IEBACiAKIAkvKiBGSVggYnkgZHFnIDogU2V0IHRvIHplcm8gZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgdG9kICovCiAJLyogd2l0aG91dCB0aGlzIHRpbWUgaXMgdW5kZWZpbmVkIGFuZCBjYW4gb3ZlcmZsb3cgdGltZV90LCBjYXVzaW5nICAqLwotCS8qIHZlcnkgc3RhbmdlIGVycm9ycyAqLworCS8qIHZlcnkgc3RyYW5nZSBlcnJvcnMgKi8KIAl5ZWFyID0gMTk4MDsKIAltb24gPSBkYXkgPSAxOwogCWhvdXIgPSBtaW4gPSBzZWMgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKaW5kZXggZjk3MTgzMC4uZjhmN2Q3ZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdHJhcHMuYwpAQCAtNSw3ICs1LDcgQEAKICAqIENsb25lZCBmcm9tIExpbnV4L202OGsuCiAgKgogICogTm8gb3JpZ2luYWwgQ29weXJpZ2h0IGhvbGRlciBsaXN0ZWQsCi0gKiBQcm9iYWJpbHkgb3JpZ2luYWwgKEMpIFJvbWFuIFppcHBlbCAoYXNzaWduZWQgREpELCAxOTk5KQorICogUHJvYmFibGUgb3JpZ2luYWwgKEMpIFJvbWFuIFppcHBlbCAoYXNzaWduZWQgREpELCAxOTk5KQogICoKICAqIENvcHlyaWdodCAxOTk5LTIwMDAgRC4gSmVmZiBEaW9ubmUsIDxqZWZmQHJ0LWNvbnRyb2wuY29tPgogICoKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHMuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHMuYwppbmRleCBhNzFkNmUyLi41NTFmZDVmIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50cy5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAlpZiAodXNlX2ttYWxsb2MpCiAJCWlycV9oYW5kbGUgPSBrbWFsbG9jKHNpemVvZihpcnFfaGFuZGxlcl90KSwgR0ZQX0FUT01JQyk7CiAJZWxzZSB7Ci0JCS8qIHVzZSBib290bWVtIGFsbG9jYXRlciAqLworCQkvKiB1c2UgYm9vdG1lbSBhbGxvY2F0b3IgKi8KIAkJaXJxX2hhbmRsZSA9IChpcnFfaGFuZGxlcl90ICopYWxsb2NfYm9vdG1lbShzaXplb2YoaXJxX2hhbmRsZXJfdCkpOwogCQlpcnFfaGFuZGxlID0gKGlycV9oYW5kbGVyX3QgKikoKHVuc2lnbmVkIGxvbmcpaXJxX2hhbmRsZSB8IDB4ODAwMDAwMDApOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHNfaDhzLmMgYi9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9pbnRzX2g4cy5jCmluZGV4IDkzMzk1ZDIuLmZhYThhNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL2ludHNfaDhzLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvaW50c19oOHMuYwpAQCAtNjMsNyArNjMsNyBAQAogCXtIODMwMF9HUElPX1AyLEg4MzAwX0dQSU9fQjZ9LHtIODMwMF9HUElPX1AyLEg4MzAwX0dQSU9fQjd9LAogfTsKIAotLyogSVJRIHRvIEdQSU8gcGlubm8gdHJhbnNyYXRlICovCisvKiBJUlEgdG8gR1BJTyBwaW4gdHJhbnNsYXRpb24gKi8KICNkZWZpbmUgSVJRX0dQSU9fTUFQKGlycWJpdCxpcnEscG9ydCxiaXQpCQkJICBcCiBkbyB7CQkJCQkJCQkgIFwKIAlpZiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUlUU1IgJiBpcnFiaXQpIHsJICBcCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZyBiL2FyY2gvaTM4Ni9LY29uZmlnCmluZGV4IGI4NGQ1MDUuLmY2ZTQ0ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnCkBAIC0zOTIsNyArMzkyLDcgQEAKIAkgIHdpbGwgbG9vayBhdCB0aGUgbWFjaGluZSBjaGVjayByZWdpc3RlcnMgdG8gc2VlIGlmIGFueXRoaW5nIGhhcHBlbmVkLgogCSAgTm9uLWZhdGFsIHByb2JsZW1zIGF1dG9tYXRpY2FsbHkgZ2V0IGNvcnJlY3RlZCAoYnV0IHN0aWxsIGxvZ2dlZCkuCiAJICBEaXNhYmxlIHRoaXMgaWYgeW91IGRvbid0IHdhbnQgdG8gc2VlIHRoZXNlIG1lc3NhZ2VzLgotCSAgU2VlaW5nIHRoZSBtZXNzYWdlcyB0aGlzIG9wdGlvbiBwcmludHMgb3V0IG1heSBiZSBpbmRpY2F0aXZlIG9mIGR5aW5nIGhhcmR3YXJlLAorCSAgU2VlaW5nIHRoZSBtZXNzYWdlcyB0aGlzIG9wdGlvbiBwcmludHMgb3V0IG1heSBiZSBpbmRpY2F0aXZlIG9mIGR5aW5nCiAJICBvciBvdXQtb2Ytc3BlYyAoaWUsIG92ZXJjbG9ja2VkKSBoYXJkd2FyZS4KIAkgIFRoaXMgb3B0aW9uIG9ubHkgZG9lcyBzb21ldGhpbmcgb24gY2VydGFpbiBDUFVzLgogCSAgKEFNRCBBdGhsb24vRHVyb24gYW5kIEludGVsIFBlbnRpdW0gNCkKQEAgLTYzMSw3ICs2MzEsNyBAQAogCWRlZmF1bHQgbiBpZiBYODZfUEMKIAlkZWZhdWx0IHkgaWYgKFg4Nl9OVU1BUSB8fCBYODZfU1VNTUlUKQogCWhlbHAKLQkgIE5VTUEgc3VwcG9ydCBmb3IgaTM4Ni4gVGhpcyBpcyBjdXJyZW50bHkgaGlnaCBleHBlcmltZW50YWwKKwkgIE5VTUEgc3VwcG9ydCBmb3IgaTM4Ni4gVGhpcyBpcyBjdXJyZW50bHkgaGlnaGx5IGV4cGVyaW1lbnRhbAogCSAgYW5kIHNob3VsZCBiZSBvbmx5IHVzZWQgZm9yIGtlcm5lbCBkZXZlbG9wbWVudC4gSXQgbWlnaHQgYWxzbwogCSAgY2F1c2UgYm9vdCBmYWlsdXJlcy4KIApAQCAtMTA4MCw3ICsxMDgwLDkgQEAKIAogZW5kaWYgIyBBUE0KIAotc291cmNlICJhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWdfMzIiCisKK3NvdXJjZSAiZHJpdmVycy9jcHVpZGxlL0tjb25maWciCiAKIGVuZG1lbnUKIApAQCAtMTI1NiwzMSArMTI1OCw2IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAotbWVudWNvbmZpZyBJTlNUUlVNRU5UQVRJT04KLQlib29sICJJbnN0cnVtZW50YXRpb24gU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIHRvIGdldCB0byBzZWUgb3B0aW9ucyByZWxhdGVkIHRvIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50LAotCSAgZGVidWdnaW5nLCBhbmQgdGVzdGluZy4gVGhpcyBvcHRpb24gYWxvbmUgZG9lcyBub3QgYWRkIGFueSBrZXJuZWwgY29kZS4KLQotCSAgSWYgeW91IHNheSBOLCBhbGwgb3B0aW9ucyBpbiB0aGlzIHN1Ym1lbnUgd2lsbCBiZSBza2lwcGVkIGFuZCBkaXNhYmxlZC4KLQotaWYgSU5TVFJVTUVOVEFUSU9OCi0KLXNvdXJjZSAiYXJjaC94ODYvb3Byb2ZpbGUvS2NvbmZpZyIKLQotY29uZmlnIEtQUk9CRVMKLQlib29sICJLcHJvYmVzIgotCWRlcGVuZHMgb24gS0FMTFNZTVMgJiYgTU9EVUxFUwotCWhlbHAKLQkgIEtwcm9iZXMgYWxsb3dzIHlvdSB0byB0cmFwIGF0IGFsbW9zdCBhbnkga2VybmVsIGFkZHJlc3MgYW5kCi0JICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlcwotCSAgYSBwcm9iZXBvaW50IGFuZCBzcGVjaWZpZXMgdGhlIGNhbGxiYWNrLiAgS3Byb2JlcyBpcyB1c2VmdWwKLQkgIGZvciBrZXJuZWwgZGVidWdnaW5nLCBub24taW50cnVzaXZlIGluc3RydW1lbnRhdGlvbiBhbmQgdGVzdGluZy4KLQkgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgotCi1lbmRpZiAjIElOU1RSVU1FTlRBVElPTgotCiBzb3VyY2UgImFyY2gvaTM4Ni9LY29uZmlnLmRlYnVnIgogCiBzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvTWFrZWZpbGUgYi9hcmNoL2kzODYvTWFrZWZpbGUKaW5kZXggZjAzNmQyZC4uYjg4ZTQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvaTM4Ni9NYWtlZmlsZQpAQCAtMTAyLDcgKzEwMiw3IEBACiAjIGRlZmF1bHQgc3ViYXJjaCAuaCBmaWxlcwogbWZsYWdzLXkgKz0gLUlpbmNsdWRlL2FzbS14ODYvbWFjaC1kZWZhdWx0CiAKLWhlYWQteSA6PSBhcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5vIGFyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2tfMzIubworaGVhZC15IDo9IGFyY2gveDg2L2tlcm5lbC9oZWFkXzMyLm8gYXJjaC94ODYva2VybmVsL2luaXRfdGFzay5vCiAKIGxpYnMteSAJCQkJCSs9IGFyY2gveDg2L2xpYi8KIGNvcmUteQkJCQkJKz0gYXJjaC94ODYva2VybmVsLyBcCkBAIC0xMzEsOSArMTMxLDkgQEAKIHpJbWFnZSB6bGlsbyB6ZGlzazogS0JVSUxEX0lNQUdFIDo9IGFyY2gveDg2L2Jvb3QvekltYWdlCiAKIHpJbWFnZSBiekltYWdlOiB2bWxpbnV4Ci0JJChRKW1rZGlyIC1wICQob2JqdHJlZSkvYXJjaC9pMzg2L2Jvb3QKLQkkKFEpbG4gLWZzbiAkKG9ianRyZWUpL2FyY2gveDg2L2Jvb3QvYnpJbWFnZSAkKG9ianRyZWUpL2FyY2gvaTM4Ni9ib290L2J6SW1hZ2UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoS0JVSUxEX0lNQUdFKQorCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2FyY2gvaTM4Ni9ib290CisJJChRKWxuIC1mc24gLi4vLi4veDg2L2Jvb3QvYnpJbWFnZSAkKG9ianRyZWUpL2FyY2gvaTM4Ni9ib290L2J6SW1hZ2UKIAogY29tcHJlc3NlZDogekltYWdlCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggYzYwNTMyZC4uYmVmNDc3MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTQ1Miw5ICs0NTIsOSBAQAogY29uZmlnIElBNjRfTUNfRVJSX0lOSkVDVAogCXRyaXN0YXRlICJNQyBlcnJvciBpbmplY3Rpb24gc3VwcG9ydCIKIAloZWxwCi0JICBTZWxldHMgd2hldGhlciBzdXBwb3J0IGZvciBNQyBlcnJvciBpbmplY3Rpb24uIEJ5IGVuYWJsaW5nIHRoZQotCSAgc3VwcG9ydCwga2VybmVsIHByb3ZpZGUgc3lzZnMgaW50ZXJmYWNlIGZvciB1c2VyIGFwcGxpY2F0aW9uIHRvCi0JICBjYWxsIE1DIGVycm9yIGluamVjdGlvbiBQQUwgcHJvY2VkdXJlIHRvIGluamVjdCB2YXJpb3VzIGVycm9ycy4KKwkgIEFkZHMgc3VwcG9ydCBmb3IgTUMgZXJyb3IgaW5qZWN0aW9uLiBJZiBlbmFibGVkLCB0aGUga2VybmVsIAorCSAgd2lsbCBwcm92aWRlIGEgc3lzZnMgaW50ZXJmYWNlIGZvciB1c2VyIGFwcGxpY2F0aW9ucyB0bworCSAgY2FsbCBNQyBlcnJvciBpbmplY3Rpb24gUEFMIHByb2NlZHVyZXMgdG8gaW5qZWN0IHZhcmlvdXMgZXJyb3JzLgogCSAgVGhpcyBpcyBhIHVzZWZ1bCB0b29sIGZvciBNQ0EgdGVzdGluZy4KIAogCSAgSWYgeW91J3JlIHVuc3VyZSwgZG8gbm90IHNlbGVjdCB0aGlzIG9wdGlvbi4KQEAgLTQ5MSw3ICs0OTEsNyBAQAogCSAgYnV0IGl0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBzeXN0ZW0gZmlybXdhcmUuICAgQW5kIGxpa2UgYSByZWJvb3QKIAkgIHlvdSBjYW4gc3RhcnQgYW55IGtlcm5lbCB3aXRoIGl0LCBub3QganVzdCBMaW51eC4KIAotCSAgVGhlIG5hbWUgY29tZXMgZnJvbSB0aGUgc2ltaWxpYXJpdHkgdG8gdGhlIGV4ZWMgc3lzdGVtIGNhbGwuCisJICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBzaW1pbGFyaXR5IHRvIHRoZSBleGVjIHN5c3RlbSBjYWxsLgogCiAJICBJdCBpcyBhbiBvbmdvaW5nIHByb2Nlc3MgdG8gYmUgY2VydGFpbiB0aGUgaGFyZHdhcmUgaW4gYSBtYWNoaW5lCiAJICBpcyBwcm9wZXJseSBzaHV0ZG93biwgc28gZG8gbm90IGJlIHN1cnByaXNlZCBpZiB0aGlzIGNvZGUgZG9lcyBub3QKQEAgLTU5MiwyMCArNTkyLDcgQEAKIAogc291cmNlICJhcmNoL2lhNjQvaHAvc2ltL0tjb25maWciCiAKLW1lbnUgIkluc3RydW1lbnRhdGlvbiBTdXBwb3J0IgotCi1zb3VyY2UgImFyY2gvaWE2NC9vcHJvZmlsZS9LY29uZmlnIgotCi1jb25maWcgS1BST0JFUwotCWJvb2wgIktwcm9iZXMiCi0JZGVwZW5kcyBvbiBLQUxMU1lNUyAmJiBNT0RVTEVTCi0JaGVscAotCSAgS3Byb2JlcyBhbGxvd3MgeW91IHRvIHRyYXAgYXQgYWxtb3N0IGFueSBrZXJuZWwgYWRkcmVzcyBhbmQKLQkgIGV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbi4gIHJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCi0JICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bAotCSAgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcsIG5vbi1pbnRydXNpdmUgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLgotCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCi1lbmRtZW51Citzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL2lhNjQvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZyBiL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKaW5kZXggNDQ5ZDNlNy4uNzVmZDkwZCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZworKysgYi9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCkBAIC0yNiw2ICsyNiw3IEBACiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0yMAorQ09ORklHX0NHUk9VUFM9eQogQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMgYi9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCmluZGV4IGEzNDA1YjMuLmQwMjVhMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwpAQCAtNzczLDcgKzc3Myw3IEBACiAJCQlpZiAoZmxhZ3MgJiBNQVBfU0hBUkVEKQogCQkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkgICAgICAgIiVzKCVkKTogZW11bGF0ZV9tbWFwKCkgY2FuJ3Qgc2hhcmUgaGVhZCAoYWRkcj0weCVseClcbiIsCi0JCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc3RhcnQpOworCQkJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3RhcnQpOwogCQkJcmV0ID0gbW1hcF9zdWJwYWdlKGZpbGUsIHN0YXJ0LCBtaW4oUEFHRV9BTElHTihzdGFydCksIGVuZCksIHByb3QsIGZsYWdzLAogCQkJCQkgICBvZmYpOwogCQkJaWYgKElTX0VSUigodm9pZCAqKSByZXQpKQpAQCAtNzg2LDcgKzc4Niw3IEBACiAJCQlpZiAoZmxhZ3MgJiBNQVBfU0hBUkVEKQogCQkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkgICAgICAgIiVzKCVkKTogZW11bGF0ZV9tbWFwKCkgY2FuJ3Qgc2hhcmUgdGFpbCAoZW5kPTB4JWx4KVxuIiwKLQkJCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBlbmQpOworCQkJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZW5kKTsKIAkJCXJldCA9IG1tYXBfc3VicGFnZShmaWxlLCBtYXgoc3RhcnQsIFBBR0VfU1RBUlQoZW5kKSksIGVuZCwgcHJvdCwgZmxhZ3MsCiAJCQkJCSAgIChvZmYgKyBsZW4pIC0gb2Zmc2V0X2luX3BhZ2UoZW5kKSk7CiAJCQlpZiAoSVNfRVJSKCh2b2lkICopIHJldCkpCkBAIC04MTYsNyArODE2LDcgQEAKIAogCWlmICgoZmxhZ3MgJiBNQVBfU0hBUkVEKSAmJiAhaXNfY29uZ3J1ZW50KQogCQlwcmludGsoS0VSTl9JTkZPICIlcyglZCk6IGVtdWxhdGVfbW1hcCgpIGNhbid0IHNoYXJlIGNvbnRlbnRzIG9mIGluY29uZ3J1ZW50IG1tYXAgIgotCQkgICAgICAgIihhZGRyPTB4JWx4LG9mZj0weCVsbHgpXG4iLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHN0YXJ0LCBvZmYpOworCQkgICAgICAgIihhZGRyPTB4JWx4LG9mZj0weCVsbHgpXG4iLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3RhcnQsIG9mZik7CiAKIAlEQkcoIm1tYXBfYm9keTogbWFwcGluZyBbMHglbHgtMHglbHgpICVzIHdpdGggcG9mZiAweCVsbHhcbiIsIHBzdGFydCwgcGVuZCwKIAkgICAgaXNfY29uZ3J1ZW50ID8gImNvbmdydWVudCIgOiAibm90IGNvbmdydWVudCIsIHBvZmYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKaW5kZXggNzNjYTg2ZC4uOGU0ODk0YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCkBAIC05NjcsNyArOTY3LDcgQEAKICAqIHRvIHVzZS4gIFdlIGNhbiBhbGxvY2F0ZSBwYXJ0aWFsIGdyYW51bGVzIG9ubHkgaWYgdGhlIHVuYXZhaWxhYmxlCiAgKiBwYXJ0cyBleGlzdCwgYW5kIGFyZSBXQi4KICAqLwotdm9pZAordW5zaWduZWQgbG9uZwogZWZpX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgKnMsIHVuc2lnbmVkIGxvbmcgKmUpCiB7CiAJc3RydWN0IGtlcm5fbWVtZGVzYyAqaywgKnByZXYgPSBOVUxMOwpAQCAtMTA4NCw2ICsxMDg0LDggQEAKIAkvKiByZXNlcnZlIHRoZSBtZW1vcnkgd2UgYXJlIHVzaW5nIGZvciBrZXJuX21lbW1hcCAqLwogCSpzID0gKHU2NClrZXJuX21lbW1hcDsKIAkqZSA9ICh1NjQpKytrOworCisJcmV0dXJuIHRvdGFsX21lbTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCBmNTVmYTA3Li41OTE2OWJmNyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKQEAgLTE1OCwxNCArMTU4LDE0IEBACiAgKi8KICNkZWZpbmUgUFJPVEVDVF9DVFgoYywgZikgXAogCWRvIHsgIFwKLQkJRFBSSU5UKCgic3BpbmxvY2tfaXJxX3NhdmUgY3R4ICVwIGJ5IFslZF1cbiIsIGMsIGN1cnJlbnQtPnBpZCkpOyBcCisJCURQUklOVCgoInNwaW5sb2NrX2lycV9zYXZlIGN0eCAlcCBieSBbJWRdXG4iLCBjLCB0YXNrX3BpZF9ucihjdXJyZW50KSkpOyBcCiAJCXNwaW5fbG9ja19pcnFzYXZlKCYoYyktPmN0eF9sb2NrLCBmKTsgXAotCQlEUFJJTlQoKCJzcGlubG9ja2VkIGN0eCAlcCAgYnkgWyVkXVxuIiwgYywgY3VycmVudC0+cGlkKSk7IFwKKwkJRFBSSU5UKCgic3BpbmxvY2tlZCBjdHggJXAgIGJ5IFslZF1cbiIsIGMsIHRhc2tfcGlkX25yKGN1cnJlbnQpKSk7IFwKIAl9IHdoaWxlKDApCiAKICNkZWZpbmUgVU5QUk9URUNUX0NUWChjLCBmKSBcCiAJZG8geyBcCi0JCURQUklOVCgoInNwaW5sb2NrX2lycV9yZXN0b3JlIGN0eCAlcCBieSBbJWRdXG4iLCBjLCBjdXJyZW50LT5waWQpKTsgXAorCQlEUFJJTlQoKCJzcGlubG9ja19pcnFfcmVzdG9yZSBjdHggJXAgYnkgWyVkXVxuIiwgYywgdGFza19waWRfbnIoY3VycmVudCkpKTsgXAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoYyktPmN0eF9sb2NrLCBmKTsgXAogCX0gd2hpbGUoMCkKIApAQCAtMjI3LDEyICsyMjcsMTIgQEAKICNpZmRlZiBQRk1fREVCVUdHSU5HCiAjZGVmaW5lIERQUklOVChhKSBcCiAJZG8geyBcCi0JCWlmICh1bmxpa2VseShwZm1fc3lzY3RsLmRlYnVnID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCBbJWRdICIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY3VycmVudC0+cGlkKTsgcHJpbnRrIGE7IH0gXAorCQlpZiAodW5saWtlbHkocGZtX3N5c2N0bC5kZWJ1ZyA+MCkpIHsgcHJpbnRrKCIlcy4lZDogQ1BVJWQgWyVkXSAiLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCBzbXBfcHJvY2Vzc29yX2lkKCksIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsgcHJpbnRrIGE7IH0gXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgRFBSSU5UX292ZmwoYSkgXAogCWRvIHsgXAotCQlpZiAodW5saWtlbHkocGZtX3N5c2N0bC5kZWJ1ZyA+IDAgJiYgcGZtX3N5c2N0bC5kZWJ1Z19vdmZsID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCBbJWRdICIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgY3VycmVudC0+cGlkKTsgcHJpbnRrIGE7IH0gXAorCQlpZiAodW5saWtlbHkocGZtX3N5c2N0bC5kZWJ1ZyA+IDAgJiYgcGZtX3N5c2N0bC5kZWJ1Z19vdmZsID4wKSkgeyBwcmludGsoIiVzLiVkOiBDUFUlZCBbJWRdICIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18sIHNtcF9wcm9jZXNzb3JfaWQoKSwgdGFza19waWRfbnIoY3VycmVudCkpOyBwcmludGsgYTsgfSBcCiAJfSB3aGlsZSAoMCkKICNlbmRpZgogCkBAIC05MTMsNyArOTEzLDcgQEAKIAl1bnNpZ25lZCBsb25nIG1hc2ssIHZhbCwgb3ZmbF9tYXNrOwogCWludCBpOwogCi0JRFBSSU5UX292ZmwoKCJtYXNraW5nIG1vbml0b3JpbmcgZm9yIFslZF1cbiIsIHRhc2stPnBpZCkpOworCURQUklOVF9vdmZsKCgibWFza2luZyBtb25pdG9yaW5nIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJb3ZmbF9tYXNrID0gcG11X2NvbmYtPm92ZmxfdmFsOwogCS8qCkBAIC05OTIsMTIgKzk5MiwxMiBAQAogCW92ZmxfbWFzayA9IHBtdV9jb25mLT5vdmZsX3ZhbDsKIAogCWlmICh0YXNrICE9IGN1cnJlbnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uLiVkOiBpbnZhbGlkIHRhc2tbJWRdIGN1cnJlbnRbJWRdXG4iLCBfX0xJTkVfXywgdGFzay0+cGlkLCBjdXJyZW50LT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb24uJWQ6IGludmFsaWQgdGFza1slZF0gY3VycmVudFslZF1cbiIsIF9fTElORV9fLCB0YXNrX3BpZF9ucih0YXNrKSwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm47CiAJfQogCWlmIChjdHgtPmN0eF9zdGF0ZSAhPSBQRk1fQ1RYX01BU0tFRCkgewogCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb24uJWQ6IHRhc2tbJWRdIGN1cnJlbnRbJWRdIGludmFsaWQgc3RhdGU9JWRcbiIsIF9fTElORV9fLAotCQkJdGFzay0+cGlkLCBjdXJyZW50LT5waWQsIGN0eC0+Y3R4X3N0YXRlKTsKKwkJCXRhc2tfcGlkX25yKHRhc2spLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3R4LT5jdHhfc3RhdGUpOwogCQlyZXR1cm47CiAJfQogCXBzciA9IHBmbV9nZXRfcHNyKCk7CkBAIC0xMDUxLDcgKzEwNTEsOCBAQAogCQlpZiAoKG1hc2sgJiAweDEpID09IDBVTCkgY29udGludWU7CiAJCWN0eC0+dGhfcG1jc1tpXSA9IGN0eC0+Y3R4X3BtY3NbaV07CiAJCWlhNjRfc2V0X3BtYyhpLCBjdHgtPnRoX3BtY3NbaV0pOwotCQlEUFJJTlQoKCJbJWRdIHBtY1slZF09MHglbHhcbiIsIHRhc2stPnBpZCwgaSwgY3R4LT50aF9wbWNzW2ldKSk7CisJCURQUklOVCgoIlslZF0gcG1jWyVkXT0weCVseFxuIiwKKwkJCQkJdGFza19waWRfbnIodGFzayksIGksIGN0eC0+dGhfcG1jc1tpXSkpOwogCX0KIAlpYTY0X3NybHpfZCgpOwogCkBAIC0xMzcwLDcgKzEzNzEsNyBAQAogCiBlcnJvcl9jb25mbGljdDoKIAlEUFJJTlQoKCJzeXN0ZW0gd2lkZSBub3QgcG9zc2libGUsIGNvbmZsaWN0aW5nIHNlc3Npb24gWyVkXSBvbiBDUFUlZFxuIiwKLSAgCQlwZm1fc2Vzc2lvbnMucGZzX3N5c19zZXNzaW9uW2NwdV0tPnBpZCwKKyAgCQl0YXNrX3BpZF9ucihwZm1fc2Vzc2lvbnMucGZzX3N5c19zZXNzaW9uW2NwdV0pLAogCQljcHUpKTsKIGFib3J0OgogCVVOTE9DS19QRlMoZmxhZ3MpOwpAQCAtMTQ0Miw3ICsxNDQzLDcgQEAKIAogCS8qIHNhbml0eSBjaGVja3MgKi8KIAlpZiAodGFzay0+bW0gPT0gTlVMTCB8fCBzaXplID09IDBVTCB8fCB2YWRkciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX3JlbW92ZV9zbXBsX21hcHBpbmcgWyVkXSBpbnZhbGlkIGNvbnRleHQgbW09JXBcbiIsIHRhc2stPnBpZCwgdGFzay0+bW0pOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9yZW1vdmVfc21wbF9tYXBwaW5nIFslZF0gaW52YWxpZCBjb250ZXh0IG1tPSVwXG4iLCB0YXNrX3BpZF9ucih0YXNrKSwgdGFzay0+bW0pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE0NTksNyArMTQ2MCw3IEBACiAKIAl1cF93cml0ZSgmdGFzay0+bW0tPm1tYXBfc2VtKTsKIAlpZiAociAhPTApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBbJWRdIHVuYWJsZSB0byB1bm1hcCBzYW1wbGluZyBidWZmZXIgQCVwIHNpemU9JWx1XG4iLCB0YXNrLT5waWQsIHZhZGRyLCBzaXplKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBbJWRdIHVuYWJsZSB0byB1bm1hcCBzYW1wbGluZyBidWZmZXIgQCVwIHNpemU9JWx1XG4iLCB0YXNrX3BpZF9ucih0YXNrKSwgdmFkZHIsIHNpemUpOwogCX0KIAogCURQUklOVCgoImRvX3VubWFwKCVwLCAlbHUpPSVkXG4iLCB2YWRkciwgc2l6ZSwgcikpOwpAQCAtMTUwMSw3ICsxNTAyLDcgQEAKIAlyZXR1cm4gMDsKIAogaW52YWxpZF9mcmVlOgotCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2ZyZWVfc21wbF9idWZmZXIgWyVkXSBubyBidWZmZXJcbiIsIGN1cnJlbnQtPnBpZCk7CisJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fZnJlZV9zbXBsX2J1ZmZlciBbJWRdIG5vIGJ1ZmZlclxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCXJldHVybiAtRUlOVkFMOwogfQogI2VuZGlmCkBAIC0xNTQ3LDEzICsxNTQ4LDEzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKICAgCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCWlmIChQRk1fSVNfRklMRShmaWxwKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX3BvbGw6IGJhZCBtYWdpYyBbJWRdXG4iLCBjdXJyZW50LT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9wb2xsOiBiYWQgbWFnaWMgWyVkXVxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAljdHggPSAocGZtX2NvbnRleHRfdCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKIAlpZiAoY3R4ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fcmVhZDogTlVMTCBjdHggWyVkXVxuIiwgY3VycmVudC0+cGlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fcmVhZDogTlVMTCBjdHggWyVkXVxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE2MDcsNyArMTYwOCw3IEBACiAKIAkJUFJPVEVDVF9DVFgoY3R4LCBmbGFncyk7CiAJfQotCURQUklOVCgoIlslZF0gYmFjayB0byBydW5uaW5nIHJldD0lbGRcbiIsIGN1cnJlbnQtPnBpZCwgcmV0KSk7CisJRFBSSU5UKCgiWyVkXSBiYWNrIHRvIHJ1bm5pbmcgcmV0PSVsZFxuIiwgdGFza19waWRfbnIoY3VycmVudCksIHJldCkpOwogICAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmY3R4LT5jdHhfbXNncV93YWl0LCAmd2FpdCk7CiAKQEAgLTE2MTYsNyArMTYxNyw3IEBACiAJcmV0ID0gLUVJTlZBTDsKIAltc2cgPSBwZm1fZ2V0X25leHRfbXNnKGN0eCk7CiAJaWYgKG1zZyA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX3JlYWQgbm8gbXNnIGZvciBjdHg9JXAgWyVkXVxuIiwgY3R4LCBjdXJyZW50LT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9yZWFkIG5vIG1zZyBmb3IgY3R4PSVwIFslZF1cbiIsIGN0eCwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQlnb3RvIGFib3J0X2xvY2tlZDsKIAl9CiAKQEAgLTE2NDcsMTMgKzE2NDgsMTMgQEAKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKIAlpZiAoUEZNX0lTX0ZJTEUoZmlscCkgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9wb2xsOiBiYWQgbWFnaWMgWyVkXVxuIiwgY3VycmVudC0+cGlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fcG9sbDogYmFkIG1hZ2ljIFslZF1cbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJY3R4ID0gKHBmbV9jb250ZXh0X3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CiAJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX3BvbGw6IE5VTEwgY3R4IFslZF1cbiIsIGN1cnJlbnQtPnBpZCk7CisJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX3BvbGw6IE5VTEwgY3R4IFslZF1cbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNjkyLDcgKzE2OTMsNyBAQAogCXJldCA9IGZhc3luY19oZWxwZXIgKGZkLCBmaWxwLCBvbiwgJmN0eC0+Y3R4X2FzeW5jX3F1ZXVlKTsKIAogCURQUklOVCgoInBmbV9mYXN5bmMgY2FsbGVkIGJ5IFslZF0gb24gY3R4X2ZkPSVkIG9uPSVkIGFzeW5jX3F1ZXVlPSVwIHJldD0lZFxuIiwKLQkJY3VycmVudC0+cGlkLAorCQl0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJZmQsCiAJCW9uLAogCQljdHgtPmN0eF9hc3luY19xdWV1ZSwgcmV0KSk7CkBAIC0xNzA3LDEzICsxNzA4LDEzIEBACiAJaW50IHJldDsKIAogCWlmIChQRk1fSVNfRklMRShmaWxwKSA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2Zhc3luYyBiYWQgbWFnaWMgWyVkXVxuIiwgY3VycmVudC0+cGlkKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fZmFzeW5jIGJhZCBtYWdpYyBbJWRdXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybiAtRUJBREY7CiAJfQogCiAJY3R4ID0gKHBmbV9jb250ZXh0X3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CiAJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2Zhc3luYyBOVUxMIGN0eCBbJWRdXG4iLCBjdXJyZW50LT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9mYXN5bmMgTlVMTCBjdHggWyVkXVxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KIAkvKgpAQCAtMTc1OSw3ICsxNzYwLDcgQEAKIAlpZiAob3duZXIgIT0gY3R4LT5jdHhfdGFzaykgewogCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9zeXN3aWRlX2ZvcmNlX3N0b3AgQ1BVJWQgdW5leHBlY3RlZCBvd25lciBbJWRdIGluc3RlYWQgb2YgWyVkXVxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwKLQkJCW93bmVyLT5waWQsIGN0eC0+Y3R4X3Rhc2stPnBpZCk7CisJCQl0YXNrX3BpZF9ucihvd25lciksIHRhc2tfcGlkX25yKGN0eC0+Y3R4X3Rhc2spKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoR0VUX1BNVV9DVFgoKSAhPSBjdHgpIHsKQEAgLTE3NjksNyArMTc3MCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlEUFJJTlQoKCJvbiBDUFUlZCBmb3JjaW5nIHN5c3RlbSB3aWRlIHN0b3AgZm9yIFslZF1cbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgY3R4LT5jdHhfdGFzay0+cGlkKSk7CQorCURQUklOVCgoIm9uIENQVSVkIGZvcmNpbmcgc3lzdGVtIHdpZGUgc3RvcCBmb3IgWyVkXVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCB0YXNrX3BpZF9ucihjdHgtPmN0eF90YXNrKSkpOwogCS8qCiAJICogdGhlIGNvbnRleHQgaXMgYWxyZWFkeSBwcm90ZWN0ZWQgaW4gcGZtX2Nsb3NlKCksIHdlIHNpbXBseQogCSAqIG5lZWQgdG8gbWFzayBpbnRlcnJ1cHRzIHRvIGF2b2lkIGEgUE1VIGludGVycnVwdCByYWNlIG9uCkBAIC0xODIxLDcgKzE4MjIsNyBAQAogCiAJY3R4ID0gKHBmbV9jb250ZXh0X3QgKilmaWxwLT5wcml2YXRlX2RhdGE7CiAJaWYgKGN0eCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2ZsdXNoOiBOVUxMIGN0eCBbJWRdXG4iLCBjdXJyZW50LT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9mbHVzaDogTlVMTCBjdHggWyVkXVxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm4gLUVCQURGOwogCX0KIApAQCAtMTk2OSw3ICsxOTcwLDcgQEAKIAkKIAljdHggPSAocGZtX2NvbnRleHRfdCAqKWZpbHAtPnByaXZhdGVfZGF0YTsKIAlpZiAoY3R4ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fY2xvc2U6IE5VTEwgY3R4IFslZF1cbiIsIGN1cnJlbnQtPnBpZCk7CisJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2Nsb3NlOiBOVUxMIGN0eCBbJWRdXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybiAtRUJBREY7CiAJfQogCkBAIC0yMDY2LDcgKzIwNjcsNyBAQAogCSAJICovCiAJCWN0eC0+Y3R4X3N0YXRlID0gUEZNX0NUWF9aT01CSUU7CiAKLQkJRFBSSU5UKCgiem9tYmllIGN0eCBmb3IgWyVkXVxuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoInpvbWJpZSBjdHggZm9yIFslZF1cbiIsIHRhc2tfcGlkX25yKHRhc2spKSk7CiAJCS8qCiAJCSAqIGNhbm5vdCBmcmVlIHRoZSBjb250ZXh0IG9uIHRoZSBzcG90LiBkZWZlcnJlZCB1bnRpbAogCQkgKiB0aGUgdGFzayBub3RpY2VzIHRoZSBaT01CSUUgc3RhdGUKQEAgLTI0NzIsNyArMjQ3Myw3IEBACiAJLyogaW52b2tlIGFuZCBsb2NrIGJ1ZmZlciBmb3JtYXQsIGlmIGZvdW5kICovCiAJZm10ID0gcGZtX2ZpbmRfYnVmZmVyX2ZtdChhcmctPmN0eF9zbXBsX2J1Zl9pZCk7CiAJaWYgKGZtdCA9PSBOVUxMKSB7Ci0JCURQUklOVCgoIlslZF0gY2Fubm90IGZpbmQgYnVmZmVyIGZvcm1hdFxuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoIlslZF0gY2Fubm90IGZpbmQgYnVmZmVyIGZvcm1hdFxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yNDgzLDcgKzI0ODQsNyBAQAogCiAJcmV0ID0gcGZtX2J1Zl9mbXRfdmFsaWRhdGUoZm10LCB0YXNrLCBjdHhfZmxhZ3MsIGNwdSwgZm10X2FyZyk7CiAKLQlEUFJJTlQoKCJbJWRdIGFmdGVyIHZhbGlkYXRlKDB4JXgsJWQsJXApPSVkXG4iLCB0YXNrLT5waWQsIGN0eF9mbGFncywgY3B1LCBmbXRfYXJnLCByZXQpKTsKKwlEUFJJTlQoKCJbJWRdIGFmdGVyIHZhbGlkYXRlKDB4JXgsJWQsJXApPSVkXG4iLCB0YXNrX3BpZF9ucih0YXNrKSwgY3R4X2ZsYWdzLCBjcHUsIGZtdF9hcmcsIHJldCkpOwogCiAJaWYgKHJldCkgZ290byBlcnJvcjsKIApAQCAtMjYwNSwyMyArMjYwNiwyMyBAQAogCSAqIG5vIGtlcm5lbCB0YXNrIG9yIHRhc2sgbm90IG93bmVyIGJ5IGNhbGxlcgogCSAqLwogCWlmICh0YXNrLT5tbSA9PSBOVUxMKSB7Ci0JCURQUklOVCgoInRhc2sgWyVkXSBoYXMgbm90IG1lbW9yeSBjb250ZXh0IChrZXJuZWwgdGhyZWFkKVxuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoInRhc2sgWyVkXSBoYXMgbm90IG1lbW9yeSBjb250ZXh0IChrZXJuZWwgdGhyZWFkKVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAJaWYgKHBmbV9iYWRfcGVybWlzc2lvbnModGFzaykpIHsKLQkJRFBSSU5UKCgibm8gcGVybWlzc2lvbiB0byBhdHRhY2ggdG8gIFslZF1cbiIsIHRhc2stPnBpZCkpOworCQlEUFJJTlQoKCJubyBwZXJtaXNzaW9uIHRvIGF0dGFjaCB0byAgWyVkXVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAJLyoKIAkgKiBjYW5ub3QgYmxvY2sgaW4gc2VsZi1tb25pdG9yaW5nIG1vZGUKIAkgKi8KIAlpZiAoQ1RYX09WRkxfTk9CTE9DSyhjdHgpID09IDAgJiYgdGFzayA9PSBjdXJyZW50KSB7Ci0JCURQUklOVCgoImNhbm5vdCBsb2FkIGEgYmxvY2tpbmcgY29udGV4dCBvbiBzZWxmIGZvciBbJWRdXG4iLCB0YXNrLT5waWQpKTsKKwkJRFBSSU5UKCgiY2Fubm90IGxvYWQgYSBibG9ja2luZyBjb250ZXh0IG9uIHNlbGYgZm9yIFslZF1cbiIsIHRhc2tfcGlkX25yKHRhc2spKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICh0YXNrLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSB7Ci0JCURQUklOVCgoImNhbm5vdCBhdHRhY2ggdG8gIHpvbWJpZSB0YXNrIFslZF1cbiIsIHRhc2stPnBpZCkpOworCQlEUFJJTlQoKCJjYW5ub3QgYXR0YWNoIHRvICB6b21iaWUgdGFzayBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMjYzMSw3ICsyNjMyLDcgQEAKIAlpZiAodGFzayA9PSBjdXJyZW50KSByZXR1cm4gMDsKIAogCWlmICgodGFzay0+c3RhdGUgIT0gVEFTS19TVE9QUEVEKSAmJiAodGFzay0+c3RhdGUgIT0gVEFTS19UUkFDRUQpKSB7Ci0JCURQUklOVCgoImNhbm5vdCBhdHRhY2ggdG8gbm9uLXN0b3BwZWQgdGFzayBbJWRdIHN0YXRlPSVsZFxuIiwgdGFzay0+cGlkLCB0YXNrLT5zdGF0ZSkpOworCQlEUFJJTlQoKCJjYW5ub3QgYXR0YWNoIHRvIG5vbi1zdG9wcGVkIHRhc2sgWyVkXSBzdGF0ZT0lbGRcbiIsIHRhc2tfcGlkX25yKHRhc2spLCB0YXNrLT5zdGF0ZSkpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAkvKgpAQCAtMzUxMiw3ICszNTEzLDcgQEAKIAogCWlmIChwbXVfY29uZi0+dXNlX3JyX2RicmVncyA9PSAwKSByZXR1cm4gMDsKIAotCURQUklOVCgoImNhbGxlZCBmb3IgWyVkXVxuIiwgdGFzay0+cGlkKSk7CisJRFBSSU5UKCgiY2FsbGVkIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJLyoKIAkgKiBkbyBpdCBvbmx5IG9uY2UKQEAgLTM1NDMsNyArMzU0NCw3IEBACiAJRFBSSU5UKCgicHRyYWNlX3VzZV9kYnJlZ3M9JXUgIHN5c191c2VfZGJyZWdzPSV1IGJ5IFslZF0gcmV0ID0gJWRcbiIsCiAJCSAgcGZtX3Nlc3Npb25zLnBmc19wdHJhY2VfdXNlX2RicmVncywKIAkJICBwZm1fc2Vzc2lvbnMucGZzX3N5c191c2VfZGJyZWdzLAotCQkgIHRhc2stPnBpZCwgcmV0KSk7CisJCSAgdGFza19waWRfbnIodGFzayksIHJldCkpOwogCiAJVU5MT0NLX1BGUyhmbGFncyk7CiAKQEAgLTM1NjgsNyArMzU2OSw3IEBACiAKIAlMT0NLX1BGUyhmbGFncyk7CiAJaWYgKHBmbV9zZXNzaW9ucy5wZnNfcHRyYWNlX3VzZV9kYnJlZ3MgPT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IGludmFsaWQgcmVsZWFzZSBmb3IgWyVkXSBwdHJhY2VfdXNlX2RicmVncz0wXG4iLCB0YXNrLT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IGludmFsaWQgcmVsZWFzZSBmb3IgWyVkXSBwdHJhY2VfdXNlX2RicmVncz0wXG4iLCB0YXNrX3BpZF9ucih0YXNrKSk7CiAJCXJldCA9IC0xOwogCX0gIGVsc2UgewogCQlwZm1fc2Vzc2lvbnMucGZzX3B0cmFjZV91c2VfZGJyZWdzLS07CkBAIC0zNjIwLDcgKzM2MjEsNyBAQAogCiAJLyogc2FuaXR5IGNoZWNrICovCiAJaWYgKHVubGlrZWx5KHRhc2sgPT0gTlVMTCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBbJWRdIHBmbV9yZXN0YXJ0IG5vIHRhc2tcbiIsIGN1cnJlbnQtPnBpZCk7CisJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogWyVkXSBwZm1fcmVzdGFydCBubyB0YXNrXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzYyOSw3ICszNjMwLDcgQEAKIAkJZm10ID0gY3R4LT5jdHhfYnVmX2ZtdDsKIAogCQlEUFJJTlQoKCJyZXN0YXJ0aW5nIHNlbGYgJWQgb3ZmbD0weCVseFxuIiwKLQkJCXRhc2stPnBpZCwKKwkJCXRhc2tfcGlkX25yKHRhc2spLAogCQkJY3R4LT5jdHhfb3ZmbF9yZWdzWzBdKSk7CiAKIAkJaWYgKENUWF9IQVNfU01QTChjdHgpKSB7CkBAIC0zNjUzLDExICszNjU0LDExIEBACiAJCQkJcGZtX3Jlc2V0X3JlZ3MoY3R4LCBjdHgtPmN0eF9vdmZsX3JlZ3MsIFBGTV9QTURfTE9OR19SRVNFVCk7CiAKIAkJCWlmIChyc3RfY3RybC5iaXRzLm1hc2tfbW9uaXRvcmluZyA9PSAwKSB7Ci0JCQkJRFBSSU5UKCgicmVzdW1pbmcgbW9uaXRvcmluZyBmb3IgWyVkXVxuIiwgdGFzay0+cGlkKSk7CisJCQkJRFBSSU5UKCgicmVzdW1pbmcgbW9uaXRvcmluZyBmb3IgWyVkXVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAogCQkJCWlmIChzdGF0ZSA9PSBQRk1fQ1RYX01BU0tFRCkgcGZtX3Jlc3RvcmVfbW9uaXRvcmluZyh0YXNrKTsKIAkJCX0gZWxzZSB7Ci0JCQkJRFBSSU5UKCgia2VlcGluZyBtb25pdG9yaW5nIHN0b3BwZWQgZm9yIFslZF1cbiIsIHRhc2stPnBpZCkpOworCQkJCURQUklOVCgoImtlZXBpbmcgbW9uaXRvcmluZyBzdG9wcGVkIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJCQkJLy8gY2Fubm90IHVzZSBwZm1fc3RvcF9tb25pdG9yaW5nKHRhc2ssIHJlZ3MpOwogCQkJfQpAQCAtMzcxNCwxMCArMzcxNSwxMCBAQAogCSAqICJzZWxmLW1vbml0b3JpbmciLgogCSAqLwogCWlmIChDVFhfT1ZGTF9OT0JMT0NLKGN0eCkgPT0gMCAmJiBzdGF0ZSA9PSBQRk1fQ1RYX01BU0tFRCkgewotCQlEUFJJTlQoKCJ1bmJsb2NraW5nIFslZF0gXG4iLCB0YXNrLT5waWQpKTsKKwkJRFBSSU5UKCgidW5ibG9ja2luZyBbJWRdIFxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJY29tcGxldGUoJmN0eC0+Y3R4X3Jlc3RhcnRfZG9uZSk7CiAJfSBlbHNlIHsKLQkJRFBSSU5UKCgiWyVkXSBhcm1lZCBleGl0IHRyYXBcbiIsIHRhc2stPnBpZCkpOworCQlEUFJJTlQoKCJbJWRdIGFybWVkIGV4aXQgdHJhcFxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAogCQljdHgtPmN0eF9mbF90cmFwX3JlYXNvbiA9IFBGTV9UUkFQX1JFQVNPTl9SRVNFVDsKIApAQCAtMzgwNSw3ICszODA2LDcgQEAKIAkgKiBkb24ndCBib3RoZXIgaWYgd2UgYXJlIGxvYWRlZCBhbmQgdGFzayBpcyBiZWluZyBkZWJ1Z2dlZAogCSAqLwogCWlmIChpc19sb2FkZWQgJiYgKHRocmVhZC0+ZmxhZ3MgJiBJQTY0X1RIUkVBRF9EQkdfVkFMSUQpICE9IDApIHsKLQkJRFBSSU5UKCgiZGVidWcgcmVnaXN0ZXJzIGFscmVhZHkgaW4gdXNlIGZvciBbJWRdXG4iLCB0YXNrLT5waWQpKTsKKwkJRFBSSU5UKCgiZGVidWcgcmVnaXN0ZXJzIGFscmVhZHkgaW4gdXNlIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMzg0Niw3ICszODQ3LDcgQEAKIAkgKiBpcyBzaGFyZWQgYnkgYWxsIHByb2Nlc3NlcyBydW5uaW5nIG9uIGl0CiAgCSAqLwogCWlmIChmaXJzdF90aW1lICYmIGNhbl9hY2Nlc3NfcG11KSB7Ci0JCURQUklOVCgoIlslZF0gY2xlYXJpbmcgaWJycywgZGJyc1xuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoIlslZF0gY2xlYXJpbmcgaWJycywgZGJyc1xuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJZm9yIChpPTA7IGkgPCBwbXVfY29uZi0+bnVtX2licnM7IGkrKykgewogCQkJaWE2NF9zZXRfaWJyKGksIDBVTCk7CiAJCQlpYTY0X2R2X3NlcmlhbGl6ZV9pbnN0cnVjdGlvbigpOwpAQCAtNDAzNSw3ICs0MDM2LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJRFBSSU5UKCgidGFzayBbJWRdIGN0eF9zdGF0ZT0lZCBpc19zeXN0ZW09JWRcbiIsCi0JCVBGTV9DVFhfVEFTSyhjdHgpLT5waWQsCisJCXRhc2tfcGlkX25yKFBGTV9DVFhfVEFTSyhjdHgpKSwKIAkJc3RhdGUsCiAJCWlzX3N5c3RlbSkpOwogCS8qCkBAIC00MDkzLDcgKzQwOTQsNyBAQAogCQkgKiBtb25pdG9yaW5nIGRpc2FibGVkIGluIGtlcm5lbCBhdCBuZXh0IHJlc2NoZWR1bGUKIAkJICovCiAJCWN0eC0+Y3R4X3NhdmVkX3Bzcl91cCA9IDA7Ci0JCURQUklOVCgoInRhc2s9WyVkXVxuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoInRhc2s9WyVkXVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00Mjk4LDExICs0Mjk5LDEyIEBACiAKIAkJaWYgKGlzX3N5c3RlbSkgewogCQkJaWYgKHBmbV9zZXNzaW9ucy5wZnNfcHRyYWNlX3VzZV9kYnJlZ3MpIHsKLQkJCQlEUFJJTlQoKCJjYW5ub3QgbG9hZCBbJWRdIGRicmVncyBpbiB1c2VcbiIsIHRhc2stPnBpZCkpOworCQkJCURQUklOVCgoImNhbm5vdCBsb2FkIFslZF0gZGJyZWdzIGluIHVzZVxuIiwKKwkJCQkJCQl0YXNrX3BpZF9ucih0YXNrKSkpOwogCQkJCXJldCA9IC1FQlVTWTsKIAkJCX0gZWxzZSB7CiAJCQkJcGZtX3Nlc3Npb25zLnBmc19zeXNfdXNlX2RicmVncysrOwotCQkJCURQUklOVCgoImxvYWQgWyVkXSBpbmNyZWFzZWQgc3lzX3VzZV9kYnJlZz0ldVxuIiwgdGFzay0+cGlkLCBwZm1fc2Vzc2lvbnMucGZzX3N5c191c2VfZGJyZWdzKSk7CisJCQkJRFBSSU5UKCgibG9hZCBbJWRdIGluY3JlYXNlZCBzeXNfdXNlX2RicmVnPSV1XG4iLCB0YXNrX3BpZF9ucih0YXNrKSwgcGZtX3Nlc3Npb25zLnBmc19zeXNfdXNlX2RicmVncykpOwogCQkJCXNldF9kYnJlZ3MgPSAxOwogCQkJfQogCQl9CkBAIC00Mzk0LDcgKzQzOTYsNyBAQAogCiAJCQkvKiBhbGxvdyB1c2VyIGxldmVsIGNvbnRyb2wgKi8KIAkJCWlhNjRfcHNyKHJlZ3MpLT5zcCA9IDA7Ci0JCQlEUFJJTlQoKCJjbGVhcmluZyBwc3Iuc3AgZm9yIFslZF1cbiIsIHRhc2stPnBpZCkpOworCQkJRFBSSU5UKCgiY2xlYXJpbmcgcHNyLnNwIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJCQlTRVRfTEFTVF9DUFUoY3R4LCBzbXBfcHJvY2Vzc29yX2lkKCkpOwogCQkJSU5DX0FDVElWQVRJT04oKTsKQEAgLTQ0MjksNyArNDQzMSw3IEBACiAJCSAqLwogCQlTRVRfUE1VX09XTkVSKHRhc2ssIGN0eCk7CiAKLQkJRFBSSU5UKCgiY29udGV4dCBsb2FkZWQgb24gUE1VIGZvciBbJWRdXG4iLCB0YXNrLT5waWQpKTsKKwkJRFBSSU5UKCgiY29udGV4dCBsb2FkZWQgb24gUE1VIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIHdoZW4gbm90IGN1cnJlbnQsIHRhc2sgTVVTVCBiZSBzdG9wcGVkLCBzbyB0aGlzIGlzIHNhZmUKQEAgLTQ0OTMsNyArNDQ5NSw3IEBACiAJaW50IHByZXZfc3RhdGUsIGlzX3N5c3RlbTsKIAlpbnQgcmV0OwogCi0JRFBSSU5UKCgiY3R4X3N0YXRlPSVkIHRhc2sgWyVkXVxuIiwgY3R4LT5jdHhfc3RhdGUsIHRhc2sgPyB0YXNrLT5waWQgOiAtMSkpOworCURQUklOVCgoImN0eF9zdGF0ZT0lZCB0YXNrIFslZF1cbiIsIGN0eC0+Y3R4X3N0YXRlLCB0YXNrID8gdGFza19waWRfbnIodGFzaykgOiAtMSkpOwogCiAJcHJldl9zdGF0ZSA9IGN0eC0+Y3R4X3N0YXRlOwogCWlzX3N5c3RlbSAgPSBjdHgtPmN0eF9mbF9zeXN0ZW07CkBAIC00NTY4LDcgKzQ1NzAsNyBAQAogCQkgKi8KIAkJaWE2NF9wc3IocmVncyktPnNwID0gMTsKIAotCQlEUFJJTlQoKCJzZXR0aW5nIHBzci5zcCBmb3IgWyVkXVxuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoInNldHRpbmcgcHNyLnNwIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCX0KIAkvKgogCSAqIHNhdmUgUE1EcyB0byBjb250ZXh0CkBAIC00NjA4LDcgKzQ2MTAsNyBAQAogCWN0eC0+Y3R4X2ZsX2Nhbl9yZXN0YXJ0ICA9IDA7CiAJY3R4LT5jdHhfZmxfZ29pbmdfem9tYmllID0gMDsKIAotCURQUklOVCgoImRpc2Nvbm5lY3RlZCBbJWRdIGZyb20gY29udGV4dFxuIiwgdGFzay0+cGlkKSk7CisJRFBSSU5UKCgiZGlzY29ubmVjdGVkIFslZF0gZnJvbSBjb250ZXh0XG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NjMxLDcgKzQ2MzMsNyBAQAogCiAJUFJPVEVDVF9DVFgoY3R4LCBmbGFncyk7CiAKLQlEUFJJTlQoKCJzdGF0ZT0lZCB0YXNrIFslZF1cbiIsIGN0eC0+Y3R4X3N0YXRlLCB0YXNrLT5waWQpKTsKKwlEUFJJTlQoKCJzdGF0ZT0lZCB0YXNrIFslZF1cbiIsIGN0eC0+Y3R4X3N0YXRlLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJc3RhdGUgPSBjdHgtPmN0eF9zdGF0ZTsKIAlzd2l0Y2goc3RhdGUpIHsKQEAgLTQ2NDAsMTMgKzQ2NDIsMTMgQEAKIAkgCQkgKiBvbmx5IGNvbWVzIHRvIHRoaXMgZnVuY3Rpb24gaWYgcGZtX2NvbnRleHQgaXMgbm90IE5VTEwsIGkuZS4sIGNhbm5vdAogCQkJICogYmUgaW4gdW5sb2FkZWQgc3RhdGUKIAkgCQkgKi8KLQkJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2V4aXRfdGhyZWFkIFslZF0gY3R4IHVubG9hZGVkXG4iLCB0YXNrLT5waWQpOworCQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fZXhpdF90aHJlYWQgWyVkXSBjdHggdW5sb2FkZWRcbiIsIHRhc2tfcGlkX25yKHRhc2spKTsKIAkJCWJyZWFrOwogCQljYXNlIFBGTV9DVFhfTE9BREVEOgogCQljYXNlIFBGTV9DVFhfTUFTS0VEOgogCQkJcmV0ID0gcGZtX2NvbnRleHRfdW5sb2FkKGN0eCwgTlVMTCwgMCwgcmVncyk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fZXhpdF90aHJlYWQgWyVkXSBzdGF0ZT0lZCB1bmxvYWQgZmFpbGVkICVkXG4iLCB0YXNrLT5waWQsIHN0YXRlLCByZXQpOworCQkJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2V4aXRfdGhyZWFkIFslZF0gc3RhdGU9JWQgdW5sb2FkIGZhaWxlZCAlZFxuIiwgdGFza19waWRfbnIodGFzayksIHN0YXRlLCByZXQpOwogCQkJfQogCQkJRFBSSU5UKCgiY3R4IHVubG9hZGVkIGZvciBjdXJyZW50IHN0YXRlIHdhcyAlZFxuIiwgc3RhdGUpKTsKIApAQCAtNDY1NSwxMiArNDY1NywxMiBAQAogCQljYXNlIFBGTV9DVFhfWk9NQklFOgogCQkJcmV0ID0gcGZtX2NvbnRleHRfdW5sb2FkKGN0eCwgTlVMTCwgMCwgcmVncyk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBwZm1fZXhpdF90aHJlYWQgWyVkXSBzdGF0ZT0lZCB1bmxvYWQgZmFpbGVkICVkXG4iLCB0YXNrLT5waWQsIHN0YXRlLCByZXQpOworCQkJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2V4aXRfdGhyZWFkIFslZF0gc3RhdGU9JWQgdW5sb2FkIGZhaWxlZCAlZFxuIiwgdGFza19waWRfbnIodGFzayksIHN0YXRlLCByZXQpOwogCQkJfQogCQkJZnJlZV9vayA9IDE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0VSUiAicGVyZm1vbjogcGZtX2V4aXRfdGhyZWFkIFslZF0gdW5leHBlY3RlZCBzdGF0ZT0lZFxuIiwgdGFzay0+cGlkLCBzdGF0ZSk7CisJCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IHBmbV9leGl0X3RocmVhZCBbJWRdIHVuZXhwZWN0ZWQgc3RhdGU9JWRcbiIsIHRhc2tfcGlkX25yKHRhc2spLCBzdGF0ZSk7CiAJCQlicmVhazsKIAl9CiAJVU5QUk9URUNUX0NUWChjdHgsIGZsYWdzKTsKQEAgLTQ3NDQsNyArNDc0Niw3IEBACiAJRFBSSU5UKCgiY29udGV4dCAlZCBzdGF0ZT0lZCBbJWRdIHRhc2tfc3RhdGU9JWxkIG11c3Rfc3RvcD0lZFxuIiwKIAkJY3R4LT5jdHhfZmQsCiAJCXN0YXRlLAotCQl0YXNrLT5waWQsCisJCXRhc2tfcGlkX25yKHRhc2spLAogCQl0YXNrLT5zdGF0ZSwgUEZNX0NNRF9TVE9QUEVEKGNtZCkpKTsKIAogCS8qCkBAIC00NzkxLDcgKzQ3OTMsNyBAQAogCSAqLwogCWlmIChQRk1fQ01EX1NUT1BQRUQoY21kKSkgewogCQlpZiAoKHRhc2stPnN0YXRlICE9IFRBU0tfU1RPUFBFRCkgJiYgKHRhc2stPnN0YXRlICE9IFRBU0tfVFJBQ0VEKSkgewotCQkJRFBSSU5UKCgiWyVkXSB0YXNrIG5vdCBpbiBzdG9wcGVkIHN0YXRlXG4iLCB0YXNrLT5waWQpKTsKKwkJCURQUklOVCgoIlslZF0gdGFzayBub3QgaW4gc3RvcHBlZCBzdGF0ZVxuIiwgdGFza19waWRfbnIodGFzaykpKTsKIAkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAkJLyoKQEAgLTQ4ODQsNyArNDg4Niw3IEBACiAJICogbGltaXQgYWJ1c2UgdG8gbWluIHBhZ2Ugc2l6ZQogCSAqLwogCWlmICh1bmxpa2VseShzeiA+IFBGTV9NQVhfQVJHU0laRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBbJWRdIGFyZ3VtZW50IHRvbyBiaWcgJWx1XG4iLCBjdXJyZW50LT5waWQsIHN6KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBbJWRdIGFyZ3VtZW50IHRvbyBiaWcgJWx1XG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3opOwogCQlyZXR1cm4gLUUyQklHOwogCX0KIApAQCAtNTAzMSwxMSArNTAzMywxMSBAQAogewogCWludCByZXQ7CiAKLQlEUFJJTlQoKCJlbnRlcmluZyBmb3IgWyVkXVxuIiwgY3VycmVudC0+cGlkKSk7CisJRFBSSU5UKCgiZW50ZXJpbmcgZm9yIFslZF1cbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpKSk7CiAKIAlyZXQgPSBwZm1fY29udGV4dF91bmxvYWQoY3R4LCBOVUxMLCAwLCByZWdzKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicGZtX2NvbnRleHRfZm9yY2VfdGVybWluYXRlOiBbJWRdIHVubG9hZGVkIGZhaWxlZCB3aXRoICVkXG4iLCBjdXJyZW50LT5waWQsIHJldCk7CisJCXByaW50ayhLRVJOX0VSUiAicGZtX2NvbnRleHRfZm9yY2VfdGVybWluYXRlOiBbJWRdIHVubG9hZGVkIGZhaWxlZCB3aXRoICVkXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgcmV0KTsKIAl9CiAKIAkvKgpAQCAtNTA3Miw3ICs1MDc0LDcgQEAKIAogCWN0eCA9IFBGTV9HRVRfQ1RYKGN1cnJlbnQpOwogCWlmIChjdHggPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IFslZF0gaGFzIG5vIFBGTSBjb250ZXh0XG4iLCBjdXJyZW50LT5waWQpOworCQlwcmludGsoS0VSTl9FUlIgInBlcmZtb246IFslZF0gaGFzIG5vIFBGTSBjb250ZXh0XG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUyNjksNyArNTI3MSw3IEBACiAJRFBSSU5UX292ZmwoKCJwbWMwPTB4JWx4IHBpZD0lZCBpaXA9MHglbHgsICVzICIKIAkJICAgICAidXNlZF9wbWRzPTB4JWx4XG4iLAogCQkJcG1jMCwKLQkJCXRhc2sgPyB0YXNrLT5waWQ6IC0xLAorCQkJdGFzayA/IHRhc2tfcGlkX25yKHRhc2spOiAtMSwKIAkJCShyZWdzID8gcmVncy0+Y3JfaWlwIDogMCksCiAJCQlDVFhfT1ZGTF9OT0JMT0NLKGN0eCkgPyAibm9uYmxvY2tpbmciIDogImJsb2NraW5nIiwKIAkJCWN0eC0+Y3R4X3VzZWRfcG1kc1swXSkpOwpAQCAtNTQ1OCw3ICs1NDYwLDcgQEAKIAl9CiAKIAlEUFJJTlRfb3ZmbCgoIm93bmVyIFslZF0gcGVuZGluZz0lbGQgcmVhc29uPSV1IG92ZmxfcG1kcz0weCVseCBvdmZsX25vdGlmeT0weCVseCBtYXNrZWQ9JWRcbiIsCi0JCQlHRVRfUE1VX09XTkVSKCkgPyBHRVRfUE1VX09XTkVSKCktPnBpZCA6IC0xLAorCQkJR0VUX1BNVV9PV05FUigpID8gdGFza19waWRfbnIoR0VUX1BNVV9PV05FUigpKSA6IC0xLAogCQkJUEZNX0dFVF9XT1JLX1BFTkRJTkcodGFzayksCiAJCQljdHgtPmN0eF9mbF90cmFwX3JlYXNvbiwKIAkJCW92ZmxfcG1kcywKQEAgLTU0ODMsNyArNTQ4NSw3IEBACiBzYW5pdHlfY2hlY2s6CiAJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBDUFUlZCBvdmVyZmxvdyBoYW5kbGVyIFslZF0gcG1jMD0weCVseFxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSwKLQkJCXRhc2sgPyB0YXNrLT5waWQgOiAtMSwKKwkJCXRhc2sgPyB0YXNrX3BpZF9ucih0YXNrKSA6IC0xLAogCQkJcG1jMCk7CiAJcmV0dXJuOwogCkBAIC01NTE2LDcgKzU1MTgsNyBAQAogCSAqCiAJICogT3ZlcmFsbCBwcmV0dHkgaGFpcnkgc3R1ZmYuLi4uCiAJICovCi0JRFBSSU5UKCgiY3R4IGlzIHpvbWJpZSBmb3IgWyVkXSwgY29udmVydGVkIHRvIHNwdXJpb3VzXG4iLCB0YXNrID8gdGFzay0+cGlkOiAtMSkpOworCURQUklOVCgoImN0eCBpcyB6b21iaWUgZm9yIFslZF0sIGNvbnZlcnRlZCB0byBzcHVyaW91c1xuIiwgdGFzayA/IHRhc2tfcGlkX25yKHRhc2spOiAtMSkpOwogCXBmbV9jbGVhcl9wc3JfdXAoKTsKIAlpYTY0X3BzcihyZWdzKS0+dXAgPSAwOwogCWlhNjRfcHNyKHJlZ3MpLT5zcCA9IDE7CkBAIC01NTc3LDEzICs1NTc5LDEzIEBACiAKIHJlcG9ydF9zcHVyaW91czE6CiAJcHJpbnRrKEtFUk5fSU5GTyAicGVyZm1vbjogc3B1cmlvdXMgb3ZlcmZsb3cgaW50ZXJydXB0IG9uIENQVSVkOiBwcm9jZXNzICVkIGhhcyBubyBQRk0gY29udGV4dFxuIiwKLQkJdGhpc19jcHUsIHRhc2stPnBpZCk7CisJCXRoaXNfY3B1LCB0YXNrX3BpZF9ucih0YXNrKSk7CiAJcGZtX3VuZnJlZXplX3BtdSgpOwogCXJldHVybiAtMTsKIHJlcG9ydF9zcHVyaW91czI6CiAJcHJpbnRrKEtFUk5fSU5GTyAicGVyZm1vbjogc3B1cmlvdXMgb3ZlcmZsb3cgaW50ZXJydXB0IG9uIENQVSVkOiBwcm9jZXNzICVkLCBpbnZhbGlkIGZsYWdcbiIsIAogCQl0aGlzX2NwdSwgCi0JCXRhc2stPnBpZCk7CisJCXRhc2tfcGlkX25yKHRhc2spKTsKIAlwZm1fdW5mcmVlemVfcG11KCk7CiAJcmV0dXJuIC0xOwogfQpAQCAtNTg3MCw3ICs1ODcyLDggQEAKIAlpYTY0X3BzcihyZWdzKS0+c3AgPSAxOwogCiAJaWYgKEdFVF9QTVVfT1dORVIoKSA9PSB0YXNrKSB7Ci0JCURQUklOVCgoImNsZWFyZWQgb3duZXJzaGlwIGZvciBbJWRdXG4iLCBjdHgtPmN0eF90YXNrLT5waWQpKTsKKwkJRFBSSU5UKCgiY2xlYXJlZCBvd25lcnNoaXAgZm9yIFslZF1cbiIsCisJCQkJCXRhc2tfcGlkX25yKGN0eC0+Y3R4X3Rhc2spKSk7CiAJCVNFVF9QTVVfT1dORVIoTlVMTCwgTlVMTCk7CiAJfQogCkBAIC01ODgyLDcgKzU4ODUsNyBAQAogCXRhc2stPnRocmVhZC5wZm1fY29udGV4dCAgPSBOVUxMOwogCXRhc2stPnRocmVhZC5mbGFncyAgICAgICAmPSB+SUE2NF9USFJFQURfUE1fVkFMSUQ7CiAKLQlEUFJJTlQoKCJmb3JjZSBjbGVhbnVwIGZvciBbJWRdXG4iLCAgdGFzay0+cGlkKSk7CisJRFBSSU5UKCgiZm9yY2UgY2xlYW51cCBmb3IgWyVkXVxuIiwgIHRhc2tfcGlkX25yKHRhc2spKSk7CiB9CiAKIApAQCAtNjQyNiw3ICs2NDI5LDcgQEAKIAogCQlpZiAoUE1EX0lTX0NPVU5USU5HKGkpKSB7CiAJCQlEUFJJTlQoKCJbJWRdIHBtZFslZF0gY3R4X3BtZD0weCVseCBod19wbWQ9MHglbHhcbiIsCi0JCQkJdGFzay0+cGlkLAorCQkJCXRhc2tfcGlkX25yKHRhc2spLAogCQkJCWksCiAJCQkJY3R4LT5jdHhfcG1kc1tpXS52YWwsCiAJCQkJdmFsICYgb3ZmbF92YWwpKTsKQEAgLTY0NDgsMTEgKzY0NTEsMTEgQEAKIAkJCSAqLwogCQkJaWYgKHBtYzAgJiAoMVVMIDw8IGkpKSB7CiAJCQkJdmFsICs9IDEgKyBvdmZsX3ZhbDsKLQkJCQlEUFJJTlQoKCJbJWRdIHBtZFslZF0gb3ZlcmZsb3dlZFxuIiwgdGFzay0+cGlkLCBpKSk7CisJCQkJRFBSSU5UKCgiWyVkXSBwbWRbJWRdIG92ZXJmbG93ZWRcbiIsIHRhc2tfcGlkX25yKHRhc2spLCBpKSk7CiAJCQl9CiAJCX0KIAotCQlEUFJJTlQoKCJbJWRdIGN0eF9wbWRbJWRdPTB4JWx4ICBwbWRfdmFsPTB4JWx4XG4iLCB0YXNrLT5waWQsIGksIHZhbCwgcG1kX3ZhbCkpOworCQlEUFJJTlQoKCJbJWRdIGN0eF9wbWRbJWRdPTB4JWx4ICBwbWRfdmFsPTB4JWx4XG4iLCB0YXNrX3BpZF9ucih0YXNrKSwgaSwgdmFsLCBwbWRfdmFsKSk7CiAKIAkJaWYgKGlzX3NlbGYpIGN0eC0+dGhfcG1kc1tpXSA9IHBtZF92YWw7CiAKQEAgLTY3OTMsMTQgKzY3OTYsMTQgQEAKIAlwcmludGsoIkNQVSVkIGZyb20gJXMoKSBjdXJyZW50IFslZF0gaWlwPTB4JWx4ICVzXG4iLCAKIAkJdGhpc19jcHUsIAogCQlmcm9tLCAKLQkJY3VycmVudC0+cGlkLCAKKwkJdGFza19waWRfbnIoY3VycmVudCksCiAJCXJlZ3MtPmNyX2lpcCwKIAkJY3VycmVudC0+Y29tbSk7CiAKIAl0YXNrID0gR0VUX1BNVV9PV05FUigpOwogCWN0eCAgPSBHRVRfUE1VX0NUWCgpOwogCi0JcHJpbnRrKCItPkNQVSVkIG93bmVyIFslZF0gY3R4PSVwXG4iLCB0aGlzX2NwdSwgdGFzayA/IHRhc2stPnBpZCA6IC0xLCBjdHgpOworCXByaW50aygiLT5DUFUlZCBvd25lciBbJWRdIGN0eD0lcFxuIiwgdGhpc19jcHUsIHRhc2sgPyB0YXNrX3BpZF9ucih0YXNrKSA6IC0xLCBjdHgpOwogCiAJcHNyID0gcGZtX2dldF9wc3IoKTsKIApAQCAtNjg0OCw3ICs2ODUxLDcgQEAKIHsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkOwogCi0JRFBSSU5UKCgicGVyZm1vbjogcGZtX2luaGVyaXQgY2xlYXJpbmcgc3RhdGUgZm9yIFslZF1cbiIsIHRhc2stPnBpZCkpOworCURQUklOVCgoInBlcmZtb246IHBmbV9pbmhlcml0IGNsZWFyaW5nIHN0YXRlIGZvciBbJWRdXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCiAJdGhyZWFkID0gJnRhc2stPnRocmVhZDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uX2RlZmF1bHRfc21wbC5jCmluZGV4IGZmODBlYWIuLmE3YWYxY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbl9kZWZhdWx0X3NtcGwuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb25fZGVmYXVsdF9zbXBsLmMKQEAgLTQ0LDExICs0NCwxMSBAQAogCWludCByZXQgPSAwOwogCiAJaWYgKGRhdGEgPT0gTlVMTCkgewotCQlEUFJJTlQoKCJbJWRdIG5vIGFyZ3VtZW50IHBhc3NlZFxuIiwgdGFzay0+cGlkKSk7CisJCURQUklOVCgoIlslZF0gbm8gYXJndW1lbnQgcGFzc2VkXG4iLCB0YXNrX3BpZF9ucih0YXNrKSkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlEUFJJTlQoKCJbJWRdIHZhbGlkYXRlIGZsYWdzPTB4JXggQ1BVJWRcbiIsIHRhc2stPnBpZCwgZmxhZ3MsIGNwdSkpOworCURQUklOVCgoIlslZF0gdmFsaWRhdGUgZmxhZ3M9MHgleCBDUFUlZFxuIiwgdGFza19waWRfbnIodGFzayksIGZsYWdzLCBjcHUpKTsKIAogCS8qCiAJICogbXVzdCBob2xkIGF0IGxlYXN0IHRoZSBidWZmZXIgaGVhZGVyICsgb25lIG1pbmltYWxseSBzaXplZCBlbnRyeQpAQCAtODgsNyArODgsNyBAQAogCWhkci0+aGRyX2NvdW50ICAgICAgICA9IDBVTDsKIAogCURQUklOVCgoIlslZF0gYnVmZmVyPSVwIGJ1Zl9zaXplPSVsdSBoZHJfc2l6ZT0lbHUgaGRyX3ZlcnNpb249JXUgY3VyX29mZnM9JWx1XG4iLAotCQl0YXNrLT5waWQsCisJCXRhc2tfcGlkX25yKHRhc2spLAogCQlidWYsCiAJCWhkci0+aGRyX2J1Zl9zaXplLAogCQlzaXplb2YoKmhkciksCkBAIC0yNDUsNyArMjQ1LDcgQEAKIHN0YXRpYyBpbnQKIGRlZmF1bHRfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHZvaWQgKmJ1Ziwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JRFBSSU5UKCgiWyVkXSBleGl0KCVwKVxuIiwgdGFzay0+cGlkLCBidWYpKTsKKwlEUFJJTlQoKCJbJWRdIGV4aXQoJXApXG4iLCB0YXNrX3BpZF9ucih0YXNrKSwgYnVmKSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggYzYxM2ZjMC4uMjQxODI4OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEwNSw3ICsxMDUsOCBAQAogCXVuc2lnbmVkIGxvbmcgaXAgPSByZWdzLT5jcl9paXAgKyBpYTY0X3BzcihyZWdzKS0+cmk7CiAKIAlwcmludF9tb2R1bGVzKCk7Ci0JcHJpbnRrKCJcblBpZDogJWQsIENQVSAlZCwgY29tbTogJTIwc1xuIiwgY3VycmVudC0+cGlkLCBzbXBfcHJvY2Vzc29yX2lkKCksIGN1cnJlbnQtPmNvbW0pOworCXByaW50aygiXG5QaWQ6ICVkLCBDUFUgJWQsIGNvbW06ICUyMHNcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBjdXJyZW50LT5jb21tKTsKIAlwcmludGsoInBzciA6ICUwMTZseCBpZnMgOiAlMDE2bHggaXAgIDogWzwlMDE2bHg+XSAgICAlc1xuIiwKIAkgICAgICAgcmVncy0+Y3JfaXBzciwgcmVncy0+Y3JfaWZzLCBpcCwgcHJpbnRfdGFpbnRlZCgpKTsKIAlwcmludF9zeW1ib2woImlwIGlzIGF0ICVzXG4iLCBpcCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKaW5kZXggYzVjZmNmYS4uY2JmNjdmMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwpAQCAtMjA4LDYgKzIwOCw0OCBAQAogCiBfX2luaXRjYWxsKHJlZ2lzdGVyX21lbW9yeSk7CiAKKworI2lmZGVmIENPTkZJR19LRVhFQworc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NyYXNoa2VybmVsKHVuc2lnbmVkIGxvbmcgdG90YWwsIGludCAqbikKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSA9IDAsIHNpemUgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBwYXJzZV9jcmFzaGtlcm5lbChib290X2NvbW1hbmRfbGluZSwgdG90YWwsCisJCQkmc2l6ZSwgJmJhc2UpOworCWlmIChyZXQgPT0gMCAmJiBzaXplID4gMCkgeworCQlpZiAoIWJhc2UpIHsKKwkJCXNvcnRfcmVnaW9ucyhyc3ZkX3JlZ2lvbiwgKm4pOworCQkJYmFzZSA9IGtkdW1wX2ZpbmRfcnN2ZF9yZWdpb24oc2l6ZSwKKwkJCQkJcnN2ZF9yZWdpb24sICpuKTsKKwkJfQorCQlpZiAoYmFzZSAhPSB+MFVMKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJSZXNlcnZpbmcgJWxkTUIgb2YgbWVtb3J5IGF0ICVsZE1CICIKKwkJCQkJImZvciBjcmFzaGtlcm5lbCAoU3lzdGVtIFJBTTogJWxkTUIpXG4iLAorCQkJCQkodW5zaWduZWQgbG9uZykoc2l6ZSA+PiAyMCksCisJCQkJCSh1bnNpZ25lZCBsb25nKShiYXNlID4+IDIwKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKHRvdGFsID4+IDIwKSk7CisJCQlyc3ZkX3JlZ2lvblsqbl0uc3RhcnQgPQorCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEoYmFzZSk7CisJCQlyc3ZkX3JlZ2lvblsqbl0uZW5kID0KKwkJCQkodW5zaWduZWQgbG9uZylfX3ZhKGJhc2UgKyBzaXplKTsKKwkJCSgqbikrKzsKKwkJCWNyYXNoa19yZXMuc3RhcnQgPSBiYXNlOworCQkJY3Jhc2hrX3Jlcy5lbmQgPSBiYXNlICsgc2l6ZSAtIDE7CisJCX0KKwl9CisJZWZpX21lbW1hcF9yZXMuc3RhcnQgPSBpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXA7CisJZWZpX21lbW1hcF9yZXMuZW5kID0gZWZpX21lbW1hcF9yZXMuc3RhcnQgKworCQlpYTY0X2Jvb3RfcGFyYW0tPmVmaV9tZW1tYXBfc2l6ZTsKKwlib290X3BhcmFtX3Jlcy5zdGFydCA9IF9fcGEoaWE2NF9ib290X3BhcmFtKTsKKwlib290X3BhcmFtX3Jlcy5lbmQgPSBib290X3BhcmFtX3Jlcy5zdGFydCArCisJCXNpemVvZigqaWE2NF9ib290X3BhcmFtKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHNldHVwX2NyYXNoa2VybmVsKHVuc2lnbmVkIGxvbmcgdG90YWwsIGludCAqbikKK3t9CisjZW5kaWYKKwogLyoqCiAgKiByZXNlcnZlX21lbW9yeSAtIHNldHVwIHJlc2VydmVkIG1lbW9yeSBhcmVhcwogICoKQEAgLTIxOSw2ICsyNjEsNyBAQAogcmVzZXJ2ZV9tZW1vcnkgKHZvaWQpCiB7CiAJaW50IG4gPSAwOworCXVuc2lnbmVkIGxvbmcgdG90YWxfbWVtb3J5OwogCiAJLyoKIAkgKiBub25lIG9mIHRoZSBlbnRyaWVzIGluIHRoaXMgdGFibGUgb3ZlcmxhcApAQCAtMjU0LDUwICsyOTcsMTEgQEAKIAkJbisrOwogI2VuZGlmCiAKLQllZmlfbWVtbWFwX2luaXQoJnJzdmRfcmVnaW9uW25dLnN0YXJ0LCAmcnN2ZF9yZWdpb25bbl0uZW5kKTsKKwl0b3RhbF9tZW1vcnkgPSBlZmlfbWVtbWFwX2luaXQoJnJzdmRfcmVnaW9uW25dLnN0YXJ0LCAmcnN2ZF9yZWdpb25bbl0uZW5kKTsKIAluKys7CiAKLSNpZmRlZiBDT05GSUdfS0VYRUMKLQkvKiBjcmFzaGtlcm5lbD1zaXplQG9mZnNldCBzcGVjaWZpZXMgdGhlIHNpemUgdG8gcmVzZXJ2ZSBmb3IgYSBjcmFzaAotCSAqIGtlcm5lbC4gSWYgb2Zmc2V0IGlzIDAsIHRoZW4gaXQgaXMgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LgotCSAqIEJ5IHJlc2VydmluZyB0aGlzIG1lbW9yeSB3ZSBndWFyYW50ZWUgdGhhdCBsaW51eCBuZXZlciBzZXQncyBpdAotCSAqIHVwIGFzIGEgRE1BIHRhcmdldC5Vc2VmdWwgZm9yIGhvbGRpbmcgY29kZSB0byBkbyBzb21ldGhpbmcKLQkgKiBhcHByb3ByaWF0ZSBhZnRlciBhIGtlcm5lbCBwYW5pYy4KLQkgKi8KLQl7Ci0JCWNoYXIgKmZyb20gPSBzdHJzdHIoYm9vdF9jb21tYW5kX2xpbmUsICJjcmFzaGtlcm5lbD0iKTsKLQkJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplOwotCQlpZiAoZnJvbSkgewotCQkJc2l6ZSA9IG1lbXBhcnNlKGZyb20gKyAxMiwgJmZyb20pOwotCQkJaWYgKCpmcm9tID09ICdAJykKLQkJCQliYXNlID0gbWVtcGFyc2UoZnJvbSsxLCAmZnJvbSk7Ci0JCQllbHNlCi0JCQkJYmFzZSA9IDA7Ci0JCQlpZiAoc2l6ZSkgewotCQkJCWlmICghYmFzZSkgewotCQkJCQlzb3J0X3JlZ2lvbnMocnN2ZF9yZWdpb24sIG4pOwotCQkJCQliYXNlID0ga2R1bXBfZmluZF9yc3ZkX3JlZ2lvbihzaXplLAotCQkJCQkJCSAgICAgIAlyc3ZkX3JlZ2lvbiwgbik7Ci0JCQkJCX0KLQkJCQlpZiAoYmFzZSAhPSB+MFVMKSB7Ci0JCQkJCXJzdmRfcmVnaW9uW25dLnN0YXJ0ID0KLQkJCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEoYmFzZSk7Ci0JCQkJCXJzdmRfcmVnaW9uW25dLmVuZCA9Ci0JCQkJCQkodW5zaWduZWQgbG9uZylfX3ZhKGJhc2UgKyBzaXplKTsKLQkJCQkJbisrOwotCQkJCQljcmFzaGtfcmVzLnN0YXJ0ID0gYmFzZTsKLQkJCQkJY3Jhc2hrX3Jlcy5lbmQgPSBiYXNlICsgc2l6ZSAtIDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWVmaV9tZW1tYXBfcmVzLnN0YXJ0ID0gaWE2NF9ib290X3BhcmFtLT5lZmlfbWVtbWFwOwotICAgICAgICAgICAgICAgIGVmaV9tZW1tYXBfcmVzLmVuZCA9IGVmaV9tZW1tYXBfcmVzLnN0YXJ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlhNjRfYm9vdF9wYXJhbS0+ZWZpX21lbW1hcF9zaXplOwotICAgICAgICAgICAgICAgIGJvb3RfcGFyYW1fcmVzLnN0YXJ0ID0gX19wYShpYTY0X2Jvb3RfcGFyYW0pOwotICAgICAgICAgICAgICAgIGJvb3RfcGFyYW1fcmVzLmVuZCA9IGJvb3RfcGFyYW1fcmVzLnN0YXJ0ICsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqaWE2NF9ib290X3BhcmFtKTsKLQl9Ci0jZW5kaWYKKwlzZXR1cF9jcmFzaGtlcm5lbCh0b3RhbF9tZW1vcnksICZuKTsKKwogCS8qIGVuZCBvZiBtZW1vcnkgbWFya2VyICovCiAJcnN2ZF9yZWdpb25bbl0uc3RhcnQgPSB+MFVMOwogCXJzdmRfcmVnaW9uW25dLmVuZCAgID0gfjBVTDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL2lhNjQva2VybmVsL3NpZ25hbC5jCmluZGV4IGFlZWM4MTguLmNkYjY0Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zaWduYWwuYwpAQCAtMjI3LDcgKzIyNyw3IEBACiAJc2kuc2lfc2lnbm8gPSBTSUdTRUdWOwogCXNpLnNpX2Vycm5vID0gMDsKIAlzaS5zaV9jb2RlID0gU0lfS0VSTkVMOwotCXNpLnNpX3BpZCA9IGN1cnJlbnQtPnBpZDsKKwlzaS5zaV9waWQgPSB0YXNrX3BpZF92bnIoY3VycmVudCk7CiAJc2kuc2lfdWlkID0gY3VycmVudC0+dWlkOwogCXNpLnNpX2FkZHIgPSBzYzsKIAlmb3JjZV9zaWdfaW5mbyhTSUdTRUdWLCAmc2ksIGN1cnJlbnQpOwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJc2kuc2lfc2lnbm8gPSBTSUdTRUdWOwogCXNpLnNpX2Vycm5vID0gMDsKIAlzaS5zaV9jb2RlID0gU0lfS0VSTkVMOwotCXNpLnNpX3BpZCA9IGN1cnJlbnQtPnBpZDsKKwlzaS5zaV9waWQgPSB0YXNrX3BpZF92bnIoY3VycmVudCk7CiAJc2kuc2lfdWlkID0gY3VycmVudC0+dWlkOwogCXNpLnNpX2FkZHIgPSBhZGRyOwogCWZvcmNlX3NpZ19pbmZvKFNJR1NFR1YsICZzaSwgY3VycmVudCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCmluZGV4IDk4Y2ZjOTAuLjJiYjg0MjEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCkBAIC0zNzEsNiArMzcxLDExIEBACiAJCWlhNjRfcHJpbnRrX2Nsb2NrID0gaWE2NF9pdGNfcHJpbnRrX2Nsb2NrOwogfQogCisvKiBJQTY0IGRvZXNuJ3QgY2FjaGUgdGhlIHRpbWV6b25lICovCit2b2lkIHVwZGF0ZV92c3lzY2FsbF90eih2b2lkKQoreworfQorCiB2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGwsIHN0cnVjdCBjbG9ja3NvdXJjZSAqYykKIHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwppbmRleCAzYWVhZjE1Li43OGQ2NWNiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCkBAIC02MSw3ICs2MSw3IEBACiAKIAlpZiAoKytkaWUubG9ja19vd25lcl9kZXB0aCA8IDMpIHsKIAkJcHJpbnRrKCIlc1slZF06ICVzICVsZCBbJWRdXG4iLAotCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBzdHIsIGVyciwgKytkaWVfY291bnRlcik7CisJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzdHIsIGVyciwgKytkaWVfY291bnRlcik7CiAJCSh2b2lkKSBub3RpZnlfZGllKERJRV9PT1BTLCAoY2hhciAqKXN0ciwgcmVncywgZXJyLCAyNTUsIFNJR1NFR1YpOwogCQlzaG93X3JlZ3MocmVncyk7CiAgIAl9IGVsc2UKQEAgLTMxNSw3ICszMTUsNyBAQAogCQkJCWxhc3QudGltZSA9IGN1cnJlbnRfamlmZmllcyArIDUgKiBIWjsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAJCQkiJXMoJWQpOiBmbG9hdGluZy1wb2ludCBhc3Npc3QgZmF1bHQgYXQgaXAgJTAxNmx4LCBpc3IgJTAxNmx4XG4iLAotCQkgICAgICAgCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCByZWdzLT5jcl9paXAgKyBpYTY0X3BzcihyZWdzKS0+cmksIGlzcik7CisJCSAgICAgICAJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgcmVncy0+Y3JfaWlwICsgaWE2NF9wc3IocmVncyktPnJpLCBpc3IpOwogCQkJfQogCQl9CiAJfQpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJCWlmIChjb2RlID09IDgpIHsKICMgaWZkZWYgQ09ORklHX0lBNjRfUFJJTlRfSEFaQVJEUwogCQkJcHJpbnRrKCIlc1slZF06IHBvc3NpYmxlIGhhemFyZCBAIGlwPSUwMTZseCAocHIgPSAlMDE2bHgpXG4iLAotCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJCSAgICAgICByZWdzLmNyX2lpcCArIGlhNjRfcHNyKCZyZWdzKS0+cmksIHJlZ3MucHIpOwogIyBlbmRpZgogCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggZmU2YWE1YS4uMjE3M2RlOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3VuYWxpZ25lZC5jCkBAIC0xMzQwLDcgKzEzNDAsOCBAQAogCQkJc2l6ZV90IGxlbjsKIAogCQkJbGVuID0gc3ByaW50ZihidWYsICIlcyglZCk6IHVuYWxpZ25lZCBhY2Nlc3MgdG8gMHglMDE2bHgsICIKLQkJCQkgICAgICAiaXA9MHglMDE2bHhcblxyIiwgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCSAgICAgICJpcD0weCUwMTZseFxuXHIiLCBjdXJyZW50LT5jb21tLAorCQkJCSAgICAgIHRhc2tfcGlkX25yKGN1cnJlbnQpLAogCQkJCSAgICAgIGlmYSwgcmVncy0+Y3JfaWlwICsgaXBzci0+cmkpOwogCQkJLyoKIAkJCSAqIERvbid0IGNhbGwgdHR5X3dyaXRlX21lc3NhZ2UoKSBpZiB3ZSdyZSBpbiB0aGUga2VybmVsOyB3ZSBtaWdodApAQCAtMTM2Myw3ICsxMzY0LDcgQEAKIAkJCQkgICAgICAgImFkbWluaXN0cmF0b3JcbiIKIAkJCQkgICAgICAgImVjaG8gMCA+IC9wcm9jL3N5cy9rZXJuZWwvaWdub3JlLSIKIAkJCQkgICAgICAgInVuYWxpZ25lZC11c2VydHJhcCB0byByZS1lbmFibGVcbiIsCi0JCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IDMyZjI2MjUuLjc1NzEwNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAogICBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGlzX2luaXQoY3VycmVudCkpIHsKKwlpZiAoaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW5pdC5jIGIvYXJjaC9pYTY0L21tL2luaXQuYwppbmRleCAzZTEwMTUyLi5jNmMxOWJmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKQEAgLTEyNyw4ICsxMjcsOCBAQAogCQl2bWEtPnZtX21tID0gY3VycmVudC0+bW07CiAJCXZtYS0+dm1fc3RhcnQgPSBjdXJyZW50LT50aHJlYWQucmJzX2JvdCAmIFBBR0VfTUFTSzsKIAkJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgUEFHRV9TSVpFOwotCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW1ZNX0RBVEFfREVGQVVMVF9GTEFHUyAmIDB4N107CiAJCXZtYS0+dm1fZmxhZ3MgPSBWTV9EQVRBX0RFRkFVTFRfRkxBR1N8Vk1fR1JPV1NVUHxWTV9BQ0NPVU5UOworCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyk7CiAJCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCWlmIChpbnNlcnRfdm1fc3RydWN0KGN1cnJlbnQtPm1tLCB2bWEpKSB7CiAJCQl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9vcHJvZmlsZS9LY29uZmlnIGIvYXJjaC9pYTY0L29wcm9maWxlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MjcxYWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9pYTY0L29wcm9maWxlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1jb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAotCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCi0KLWNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFJPRklMSU5HCi0JaGVscAotCSAgT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGNhcGFibGUgb2YgcHJvZmlsaW5nIHRoZQotCSAgd2hvbGUgc3lzdGVtLCBpbmNsdWRlIHRoZSBrZXJuZWwsIGtlcm5lbCBtb2R1bGVzLCBsaWJyYXJpZXMsCi0JICBhbmQgYXBwbGljYXRpb25zLgotCi0JICBEdWUgdG8gZmlybXdhcmUgYnVncywgeW91IG1heSBuZWVkIHRvIHVzZSB0aGUgIm5vaGFsdCIgYm9vdAotCSAgb3B0aW9uIGlmIHlvdSdyZSB1c2luZyBPUHJvZmlsZSB3aXRoIHRoZSBoYXJkd2FyZSBwZXJmb3JtYW5jZQotCSAgY291bnRlcnMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBuZXQuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBuZXQuYwppbmRleCBlNThmY2FkLi5hNWRmNjcyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwbmV0LmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cG5ldC5jCkBAIC0yNjksOCArMjY5LDkgQEAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCB4cG5ldF9kZXZpY2UpOwogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CiAKLQlkZXZfZGJnKHhwbmV0LCAicGFzc2luZyBza2IgdG8gbmV0d29yayBsYXllcjsgXG5cdHNrYi0+aGVhZD0weCVwICIKLQkJInNrYi0+ZGF0YT0weCVwIHNrYi0+dGFpbD0weCVwIHNrYi0+ZW5kPTB4JXAgc2tiLT5sZW49JWRcbiIsCisJZGV2X2RiZyh4cG5ldCwgInBhc3Npbmcgc2tiIHRvIG5ldHdvcmsgbGF5ZXJcbiIKKwkJS0VSTl9ERUJVRyAiXHRza2ItPmhlYWQ9MHglcCBza2ItPmRhdGE9MHglcCBza2ItPnRhaWw9MHglcCAiCisJCSJza2ItPmVuZD0weCVwIHNrYi0+bGVuPSVkXG4iLAogCQkodm9pZCAqKXNrYi0+aGVhZCwgKHZvaWQgKilza2ItPmRhdGEsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKIAkJc2tiX2VuZF9wb2ludGVyKHNrYiksIHNrYi0+bGVuKTsKIApAQCAtNTc2LDEwICs1NzcsMTAgQEAKIAkJbXNnLT50YWlsb3V0X2lnbm9yZSA9IGVuZF9hZGRyIC0gKHU2NClza2JfdGFpbF9wb2ludGVyKHNrYik7CiAJCW1zZy0+YnVmX3BhID0gX19wYShzdGFydF9hZGRyKTsKIAotCQlkZXZfZGJnKHhwbmV0LCAic2VuZGluZyBYUEMgbWVzc2FnZSB0byAlZDolZFxubXNnLT5idWZfcGE9IgotCQkJIjB4JWx4LCBtc2ctPnNpemU9JXUsIG1zZy0+bGVhZGluX2lnbm9yZT0ldSwgIgotCQkJIm1zZy0+dGFpbG91dF9pZ25vcmU9JXVcbiIsIGRlc3RfcGFydGlkLAotCQkJWFBDX05FVF9DSEFOTkVMLCBtc2ctPmJ1Zl9wYSwgbXNnLT5zaXplLAorCQlkZXZfZGJnKHhwbmV0LCAic2VuZGluZyBYUEMgbWVzc2FnZSB0byAlZDolZFxuIgorCQkJS0VSTl9ERUJVRyAibXNnLT5idWZfcGE9MHglbHgsIG1zZy0+c2l6ZT0ldSwgIgorCQkJIm1zZy0+bGVhZGluX2lnbm9yZT0ldSwgbXNnLT50YWlsb3V0X2lnbm9yZT0ldVxuIiwKKwkJCWRlc3RfcGFydGlkLCBYUENfTkVUX0NIQU5ORUwsIG1zZy0+YnVmX3BhLCBtc2ctPnNpemUsCiAJCQltc2ctPmxlYWRpbl9pZ25vcmUsIG1zZy0+dGFpbG91dF9pZ25vcmUpOwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9LY29uZmlnIGIvYXJjaC9tMzJyL0tjb25maWcKaW5kZXggYmQ1ZmU3Ni4uYWI5YTI2NCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL0tjb25maWcKKysrIGIvYXJjaC9tMzJyL0tjb25maWcKQEAgLTQyNiw3ICs0MjYsNyBAQAogCiBzb3VyY2UgImZzL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9tMzJyL29wcm9maWxlL0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL20zMnIvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYyBiL2FyY2gvbTMyci9rZXJuZWwvaXJxLmMKaW5kZXggZjhkODY1MC4uZDBjNWIwYiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL20zMnIva2VybmVsL2lycS5jCkBAIC03MSw3ICs3MSw3IEBACiB9CiAKIC8qCi0gKiBkb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlEncyAodGhlIHNwZWNpYWwKKyAqIGRvX0lSUSBoYW5kbGVzIGFsbCBub3JtYWwgZGV2aWNlIElSUXMgKHRoZSBzcGVjaWFsCiAgKiBTTVAgY3Jvc3MtQ1BVIGludGVycnVwdHMgaGF2ZSB0aGVpciBvd24gc3BlY2lmaWMKICAqIGhhbmRsZXJzKS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbTMyci9rZXJuZWwvc2lnbmFsLmMKaW5kZXggOTE2ZmFmNi4uYTc1M2Q3OSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL20zMnIva2VybmVsL3NpZ25hbC5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIAogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOwogCWlmIChzaWduciA+IDApIHsKLQkJLyogUmVlbmFibGUgYW55IHdhdGNocG9pbnRzIGJlZm9yZSBkZWxpdmVyaW5nIHRoZQorCQkvKiBSZS1lbmFibGUgYW55IHdhdGNocG9pbnRzIGJlZm9yZSBkZWxpdmVyaW5nIHRoZQogCQkgKiBzaWduYWwgdG8gdXNlciBzcGFjZS4gVGhlIHByb2Nlc3NvciByZWdpc3RlciB3aWxsCiAJCSAqIGhhdmUgYmVlbiBjbGVhcmVkIGlmIHRoZSB3YXRjaHBvaW50IHRyaWdnZXJlZAogCQkgKiBpbnNpZGUgdGhlIGtlcm5lbC4KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IDM2MDEyOTEuLmM4MzdiYzEzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogfQogCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCi0vKiBUTEIgZmx1c2ggcmVxdWVzdCBSb3V0aW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBUTEIgZmx1c2ggcmVxdWVzdCBSb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qCkBAIC0zNzgsNyArMzc4LDcgQEAKICAqIE5hbWU6ICAgICAgICAgZmx1c2hfdGxiX290aGVycwogICoKICAqIERlc2NyaXB0aW9uOiAgVGhpcyByb3V0aW5lIHJlcXVlc3RzIG90aGVyIENQVSB0byBleGVjdXRlIGZsdXNoIFRMQi4KLSAqICAgICAgICAgICAgICAgMS5TZXR1cCBwYXJtZXRlcnMuCisgKiAgICAgICAgICAgICAgIDEuU2V0dXAgcGFyYW1ldGVycy4KICAqICAgICAgICAgICAgICAgMi5TZW5kICdJTlZBTElEQVRFX1RMQl9JUEknIHRvIG90aGVyIENQVS4KICAqICAgICAgICAgICAgICAgICBSZXF1ZXN0IG90aGVyIENQVSB0byBleGVjdXRlICdzbXBfaW52YWxpZGF0ZV9pbnRlcnJ1cHQoKScuCiAgKiAgICAgICAgICAgICAgIDMuV2FpdCBmb3Igb3RoZXIgQ1BVcyBvcGVyYXRpb24gZmluaXNoZWQuCkBAIC01MDIsNyArNTAyLDcgQEAKIH0KIAogLyo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qLwotLyogU3RvcCBDUFUgcmVxdWVzdCBSb3V0aW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBTdG9wIENQVSByZXF1ZXN0IFJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qCkBAIC01NjYsNyArNTY2LDcgQEAKIH0KIAogLyo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qLwotLyogQ2FsbCBmdW5jdGlvbiBSb3V0aW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogQ2FsbCBmdW5jdGlvbiBSb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qLwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KgpAQCAtNjkwLDcgKzY5MCw3IEBACiB9CiAKIC8qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Ki8KLS8qIFRpbWVyIFJvdXRpbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIFRpbWVyIFJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Ki8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSoKQEAgLTgwMiw3ICs4MDIsNyBAQAogfQogCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCi0vKiBTZW5kIElQSSBSb3V0aW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBTZW5kIElQSSBSb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qCkBAIC04MTQsNyArODE0LDcgQEAKICAqCiAgKiBBcmd1bWVudHM6ICAgIGlwaV9udW0gLSBOdW1iZXIgb2YgSVBJCiAgKiAgICAgICAgICAgICAgIHRyeSAtICAwIDogU2VuZCBJUEkgY2VydGFpbmx5LgotICogICAgICAgICAgICAgICAgICAgICAhMCA6IFRoZSBmb2xsb3dpbmcgSVBJIGlzIG5vdCBzZW5kZWQgd2hlbiBUYXJnZXQgQ1BVCisgKiAgICAgICAgICAgICAgICAgICAgICEwIDogVGhlIGZvbGxvd2luZyBJUEkgaXMgbm90IHNlbnQgd2hlbiBUYXJnZXQgQ1BVCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzIG5vdCByZWNlaXZlZCB0aGUgYmVmb3JlIElQSS4KICAqCiAgKiBSZXR1cm5zOiAgICAgIHZvaWQgKGNhbm5vdCBmYWlsKQpAQCAtODQ0LDcgKzg0NCw3IEBACiAgKiBBcmd1bWVudHM6ICAgIGNwdV9tYXNrIC0gQml0bWFwIG9mIHRhcmdldCBDUFVzIGxvZ2ljYWwgSUQKICAqICAgICAgICAgICAgICAgaXBpX251bSAtIE51bWJlciBvZiBJUEkKICAqICAgICAgICAgICAgICAgdHJ5IC0gIDAgOiBTZW5kIElQSSBjZXJ0YWlubHkuCi0gKiAgICAgICAgICAgICAgICAgICAgICEwIDogVGhlIGZvbGxvd2luZyBJUEkgaXMgbm90IHNlbmRlZCB3aGVuIFRhcmdldCBDUFUKKyAqICAgICAgICAgICAgICAgICAgICAgITAgOiBUaGUgZm9sbG93aW5nIElQSSBpcyBub3Qgc2VudCB3aGVuIFRhcmdldCBDUFUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgbm90IHJlY2VpdmVkIHRoZSBiZWZvcmUgSVBJLgogICoKICAqIFJldHVybnM6ICAgICAgdm9pZCAoY2Fubm90IGZhaWwpCkBAIC04ODUsNyArODg1LDcgQEAKICAqIEFyZ3VtZW50czogICAgY3B1X21hc2sgLSBCaXRtYXAgb2YgdGFyZ2V0IENQVXMgcGh5c2ljYWwgSUQKICAqICAgICAgICAgICAgICAgaXBpX251bSAtIE51bWJlciBvZiBJUEkKICAqICAgICAgICAgICAgICAgdHJ5IC0gIDAgOiBTZW5kIElQSSBjZXJ0YWlubHkuCi0gKiAgICAgICAgICAgICAgICAgICAgICEwIDogVGhlIGZvbGxvd2luZyBJUEkgaXMgbm90IHNlbmRlZCB3aGVuIFRhcmdldCBDUFUKKyAqICAgICAgICAgICAgICAgICAgICAgITAgOiBUaGUgZm9sbG93aW5nIElQSSBpcyBub3Qgc2VudCB3aGVuIFRhcmdldCBDUFUKICAqICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgbm90IHJlY2VpdmVkIHRoZSBiZWZvcmUgSVBJLgogICoKICAqIFJldHVybnM6ICAgICAgSVBJQ1JpIHJlZ3N0ZXIgdmFsdWUuCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDlkYWU0MTAuLjBlMzgzZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIHN0YXRpYyB2b2lkIHVubWFwX2NwdV90b19waHlzaWQoaW50LCBpbnQpOwogCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCi0vKiBCb290IHVwIEFQcyBSb3V0aW5zIDogQlNQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBCb290IHVwIEFQcyBSb3V0aW5lcyA6IEJTUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCiB2b2lkIF9fZGV2aW5pdCBzbXBfcHJlcGFyZV9ib290X2NwdSh2b2lkKQogewpAQCAtNDA0LDcgKzQwNCw3IEBACiB9CiAKIC8qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Ki8KLS8qIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3NvciBSb3V0aW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIEFjdGl2YXRlIGEgc2Vjb25kYXJ5IHByb2Nlc3NvciBSb3V0aW5lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIC8qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Ki8KIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSoKQEAgLTUwOSw3ICs1MDksNyBAQAogfQogCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCi0vKiBCb290IHVwIENQVXMgY29tbW9uIFJvdXRpbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiBCb290IHVwIENQVXMgY29tbW9uIFJvdXRpbmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSo9Kj0qPSovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2hvd19tcF9pbmZvKGludCBucl9jcHUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMgYi9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMKaW5kZXggMGZjMmVmZS4uNmQ3YTgwZiAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2tlcm5lbC9zeXNfbTMyci5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYwpAQCAtMjE0LDcgKzIxNCw3IEBACiAKIGFzbWxpbmthZ2UgaW50IHN5c19jYWNoZWZsdXNoKHZvaWQgKmFkZHIsIGludCBieXRlcywgaW50IGNhY2hlKQogewotCS8qIFRoaXMgc2hvdWxkIGZsdXNoIG1vcmUgc2VsZWN0aXZseSAuLi4gICovCisJLyogVGhpcyBzaG91bGQgZmx1c2ggbW9yZSBzZWxlY3RpdmVseSAuLi4gICovCiAJX2ZsdXNoX2NhY2hlX2FsbCgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tMzJyL2tlcm5lbC90cmFwcy5jCmluZGV4IDk3ZTBiMWMuLjg5YmE0YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL20zMnIva2VybmVsL3RyYXBzLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQlwcmludGsoIlNQSTogJTA4bHhcbiIsIHNwKTsKIAl9CiAJcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCBwcm9jZXNzIG5yOiAlZCwgc3RhY2twYWdlPSUwOGx4KSIsCi0JCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgMHhmZmZmICYgaSwgNDA5NisodW5zaWduZWQgbG9uZyljdXJyZW50KTsKKwkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIDB4ZmZmZiAmIGksIDQwOTYrKHVuc2lnbmVkIGxvbmcpY3VycmVudCk7CiAKIAkvKgogCSAqIFdoZW4gaW4ta2VybmVsLCB3ZSBhbHNvIHByaW50IG91dCB0aGUgc3RhY2sgYW5kIGNvZGUgYXQgdGhlCmRpZmYgLS1naXQgYS9hcmNoL20zMnIvbW0vZmF1bHQuYyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCmluZGV4IDcwYTc2NmEuLjRhNzFkZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9tbS9mYXVsdC5jCisrKyBiL2FyY2gvbTMyci9tbS9mYXVsdC5jCkBAIC0yNzEsNyArMjcxLDcgQEAKICAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19pbml0KHRzaykpIHsKKwlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9vcHJvZmlsZS9LY29uZmlnIGIvYXJjaC9tMzJyL29wcm9maWxlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5ZDM3NzMuLjAwMDAwMDAKLS0tIGEvYXJjaC9tMzJyL29wcm9maWxlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0KLW1lbnUgIlByb2ZpbGluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0KLWNvbmZpZyBQUk9GSUxJTkcKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCi0JICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KLQotCi1jb25maWcgT1BST0ZJTEUKLQl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFBST0ZJTElORwotCWhlbHAKLQkgIE9Qcm9maWxlIGlzIGEgcHJvZmlsaW5nIHN5c3RlbSBjYXBhYmxlIG9mIHByb2ZpbGluZyB0aGUKLQkgIHdob2xlIHN5c3RlbSwgaW5jbHVkZSB0aGUga2VybmVsLCBrZXJuZWwgbW9kdWxlcywgbGlicmFyaWVzLAotCSAgYW5kIGFwcGxpY2F0aW9ucy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotZW5kbWVudQotCmRpZmYgLS1naXQgYS9hcmNoL202OGsvS2NvbmZpZyBiL2FyY2gvbTY4ay9LY29uZmlnCmluZGV4IDIwYTljMDguLjAxZGVlODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9LY29uZmlnCisrKyBiL2FyY2gvbTY4ay9LY29uZmlnCkBAIC02ODMsNiArNjgzLDggQEAKIAogc291cmNlICJmcy9LY29uZmlnIgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKKwogc291cmNlICJhcmNoL202OGsvS2NvbmZpZy5kZWJ1ZyIKIAogc291cmNlICJzZWN1cml0eS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2FtaWdhL3BjbWNpYS5jIGIvYXJjaC9tNjhrL2FtaWdhL3BjbWNpYS5jCmluZGV4IGZjNTdjNmUuLjE4NjY2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hbWlnYS9wY21jaWEuYworKysgYi9hcmNoL202OGsvYW1pZ2EvcGNtY2lhLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogCiAvKiBjb3B5IGEgdHVwbGUsIGluY2x1ZGluZyB0dXBsZSBoZWFkZXIuIHJldHVybiBuYiBieXRlcyBjb3BpZWQgKi8KLS8qIGJlIGNhcmVmdWxsIGFzIHRoaXMgbWF5IHRyaWdnZXIgYSBHQVlMRV9JUlFfV1IgaW50ZXJydXB0ICEgKi8KKy8qIGJlIGNhcmVmdWwgYXMgdGhpcyBtYXkgdHJpZ2dlciBhIEdBWUxFX0lSUV9XUiBpbnRlcnJ1cHQgISAqLwogCiBpbnQgcGNtY2lhX2NvcHlfdHVwbGUodW5zaWduZWQgY2hhciB0dXBsZV9pZCwgdm9pZCAqdHVwbGUsIGludCBtYXhfbGVuKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL0NIQU5HRVMgYi9hcmNoL202OGsvaWZwc3AwNjAvQ0hBTkdFUwppbmRleCBjMWU3MTJkLi5iYTk2NTk2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvQ0hBTkdFUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvQ0hBTkdFUwpAQCAtNCw3ICs0LDcgQEAKIE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCiBQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAogCi1NNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgwqkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KIFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvTUlTQyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9NSVNDCmluZGV4IGI3ZTY0NGIuLjFhNjM5MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9NSVNDCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9NSVNDCkBAIC00LDcgKzQsNyBAQAogTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKIFByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CiAKLU02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCDCqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFRIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgogVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9SRUFETUUgYi9hcmNoL202OGsvaWZwc3AwNjAvUkVBRE1FCmluZGV4IGUzYmNlZDQuLmY2ZjhmNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9SRUFETUUKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL1JFQURNRQpAQCAtNCw3ICs0LDcgQEAKIE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCiBQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAogCi1NNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgwqkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KIFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvVEVTVC5ET0MgYi9hcmNoL202OGsvaWZwc3AwNjAvVEVTVC5ET0MKaW5kZXggNWU1OTAwYy4uMWJhM2FlZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL1RFU1QuRE9DCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9URVNULkRPQwpAQCAtNCw3ICs0LDcgQEAKIE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCiBQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAogCi1NNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgwqkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KIFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvZnBsc3AuZG9jIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2ZwbHNwLmRvYwppbmRleCBmYjYzN2M0Li44OTczMGE5IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvZnBsc3AuZG9jCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9mcGxzcC5kb2MKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3AuZG9jIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zwc3AuZG9jCmluZGV4IDQwODMxNTIuLjIzZDUxM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9mcHNwLmRvYworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnBzcC5kb2MKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL2Zza2VsZXRvbi5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2Zza2VsZXRvbi5TCmluZGV4IGE0NWE0ZmYuLjBhMWFlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9mc2tlbGV0b24uUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvZnNrZWxldG9uLlMKQEAgLTQsNyArNCw3IEBACiB8TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKIHxQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAogfAotfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK3xNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgwqkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogfAogfFRIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgogfFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaWxzcC5kb2MgYi9hcmNoL202OGsvaWZwc3AwNjAvaWxzcC5kb2MKaW5kZXggZjZmYWU2ZC4uNGU2MjkyZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL2lsc3AuZG9jCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pbHNwLmRvYwpAQCAtNCw3ICs0LDcgQEAKIE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCiBQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAogCi1NNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgwqkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KIFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvaXNrZWxldG9uLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvaXNrZWxldG9uLlMKaW5kZXggYjJkYmRmNS4uOTFhOWM2NSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL2lza2VsZXRvbi5TCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9pc2tlbGV0b24uUwpAQCAtNCw3ICs0LDcgQEAKIHxNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogfFByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CiB8Ci18TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCDCqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiB8CiB8VEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiB8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9pc3AuZG9jIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5kb2MKaW5kZXggNWE5MGZkZS4uOWRhZGQ3MiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5kb2MKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL2lzcC5kb2MKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL29zLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvb3MuUwppbmRleCBhYTRkZjg3Li43YTBkNmU0IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvb3MuUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvb3MuUwpAQCAtNCw3ICs0LDcgQEAKIHxNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogfFByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CiB8Ci18TTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorfE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCDCqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiB8CiB8VEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiB8VG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBsc3AuUyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBsc3AuUwppbmRleCBmZGI3OWI5Li4zYjdlYTJkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2ZwbHNwLlMKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcGxzcC5TCkBAIC00LDcgKzQsNyBAQAogTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UKIFByb2R1Y3Rpb24gUmVsZWFzZSBQMS4wMCAtLSBPY3RvYmVyIDEwLCAxOTk0CiAKLU02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCCpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK002ODA2MCBTb2Z0d2FyZSBQYWNrYWdlIENvcHlyaWdodCDCqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAKIFRIRSBTT0ZUV0FSRSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzIGFuZCB3aXRob3V0IHdhcnJhbnR5LgogVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnBzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKaW5kZXggM2I1OTdhOS4uNmMxYTlhMiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKKysrIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mcHNwLlMKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mdGVzdC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9mdGVzdC5TCmluZGV4IDJlZGNiYWUuLjFmOTQ3OTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvZnRlc3QuUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2Z0ZXN0LlMKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pbHNwLlMgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lsc3AuUwppbmRleCBhZmE3NDIyLi45NzBhYmFmIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lsc3AuUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lsc3AuUwpAQCAtNCw3ICs0LDcgQEAKIE02ODA2MCBTb2Z0d2FyZSBQYWNrYWdlCiBQcm9kdWN0aW9uIFJlbGVhc2UgUDEuMDAgLS0gT2N0b2JlciAxMCwgMTk5NAogCi1NNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgqSAxOTkzLCAxOTk0IE1vdG9yb2xhIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitNNjgwNjAgU29mdHdhcmUgUGFja2FnZSBDb3B5cmlnaHQgwqkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiBUSEUgU09GVFdBUkUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcyBhbmQgd2l0aG91dCB3YXJyYW50eS4KIFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pc3AuUwppbmRleCBiMjY5MDkxLi42ZGNjZGE3IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2lzcC5TCisrKyBiL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvaXNwLlMKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pdGVzdC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9pdGVzdC5TCmluZGV4IGJhNGEzMGMuLmJlY2E0N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvaXRlc3QuUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL2l0ZXN0LlMKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9wZnBzcC5TIGIvYXJjaC9tNjhrL2lmcHNwMDYwL3NyYy9wZnBzcC5TCmluZGV4IDBjOTk3YzQuLjUxYjlmN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pZnBzcDA2MC9zcmMvcGZwc3AuUworKysgYi9hcmNoL202OGsvaWZwc3AwNjAvc3JjL3BmcHNwLlMKQEAgLTQsNyArNCw3IEBACiBNNjgwNjAgU29mdHdhcmUgUGFja2FnZQogUHJvZHVjdGlvbiBSZWxlYXNlIFAxLjAwIC0tIE9jdG9iZXIgMTAsIDE5OTQKIAotTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IKkgMTk5MywgMTk5NCBNb3Rvcm9sYSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorTTY4MDYwIFNvZnR3YXJlIFBhY2thZ2UgQ29weXJpZ2h0IMKpIDE5OTMsIDE5OTQgTW90b3JvbGEgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KIAogVEhFIFNPRlRXQVJFIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMgYW5kIHdpdGhvdXQgd2FycmFudHkuCiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9tNjhrL2tlcm5lbC90cmFwcy5jCmluZGV4IDRlMjc1MmEuLjk3ZjU1NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL202OGsva2VybmVsL3RyYXBzLmMKQEAgLTkwMCw3ICs5MDAsNyBAQAogCSAgICAgICByZWdzLT5kNCwgcmVncy0+ZDUsIHJlZ3MtPmEwLCByZWdzLT5hMSk7CiAKIAlwcmludGsoIlByb2Nlc3MgJXMgKHBpZDogJWQsIHRhc2s9JXApXG4iLAotCQljdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGN1cnJlbnQpOworCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudCk7CiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSZmcC0+dW47CiAJcHJpbnRrKCJGcmFtZSBmb3JtYXQ9JVggIiwgcmVncy0+Zm9ybWF0KTsKIAlzd2l0Y2ggKHJlZ3MtPmZvcm1hdCkgewpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIAkJCQlmcC0+dW4uZm10Yi5kYWRkciwgc3BhY2VfbmFtZXNbc3N3ICYgREZDXSwKIAkJCQlmcC0+cHRyZWdzLnBjKTsKIAl9Ci0JcHJpbnRrICgiQ3VycmVudCBwcm9jZXNzIGlkIGlzICVkXG4iLCBjdXJyZW50LT5waWQpOworCXByaW50ayAoIkN1cnJlbnQgcHJvY2VzcyBpZCBpcyAlZFxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCWRpZV9pZl9rZXJuZWwoIkJBRCBLRVJORUwgVFJBUCIsICZmcC0+cHRyZWdzLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9jb25maWcuYyBiL2FyY2gvbTY4ay9tYWMvY29uZmlnLmMKaW5kZXggODU0N2RiYy4uMDFiNDY4YiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9jb25maWcuYworKysgYi9hcmNoL202OGsvbWFjL2NvbmZpZy5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAl9LAogCiAJLyoKLQkgKglXZWlyZGlmaWVkIE1hY0lJIGhhcmR3YXJlIC0gYWxsIHN1YnRsZXkgZGlmZmVyZW50LiBHZWUgdGhhbmtzCisJICoJV2VpcmRpZmllZCBNYWNJSSBoYXJkd2FyZSAtIGFsbCBzdWJ0bHkgZGlmZmVyZW50LiBHZWUgdGhhbmtzCiAJICoJQXBwbGUuIEFsbCB0aGVzZSBib3hlcyBzZWVtIHRvIGhhdmUgVklBMiBpbiBhIGRpZmZlcmVudCBwbGFjZSB0bwogCSAqCXRoZSBNYWNJSSAoKzFBMDAwIHJhdGhlciB0aGFuICs0MDAwKQogCSAqIENTQTogc2VlIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3RlY2hub3Rlcy9ody9od18wOS5odG1sCkBAIC03MDcsNyArNzA3LDcgQEAKIAkgKiBBbGwgb2YgdGhlc2UgcHJvYmFibHkgaGF2ZSBvbmJvYXJkIFNPTklDIGluIHRoZSBEb2NrIHdoaWNoCiAJICogbWVhbnMgd2UnbGwgaGF2ZSB0byBwcm9iZSBmb3IgaXQgZXZlbnR1YWxseS4KIAkgKgotCSAqIEFyZSB0aGVzZSByZWFsbGx5IE1BQ19WSUFfSUljaT8gVGhlIGRldmVsb3BlciBub3RlcyBmb3IgdGhlCisJICogQXJlIHRoZXNlIHJlYWxseSBNQUNfVklBX0lJY2k/IFRoZSBkZXZlbG9wZXIgbm90ZXMgZm9yIHRoZQogCSAqIER1b3Mgc2hvdyBwcmV0dHkgbXVjaCB0aGUgc2FtZSBjdXN0b20gcGFydHMgYXMgaW4gbW9zdCBvZgogCSAqIHRoZSBvdGhlciBQb3dlckJvb2tzIHdoaWNoIHdvdWxkIGltcGx5IE1BQ19WSUFfUVVBRFJBLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9pb3AuYyBiL2FyY2gvbTY4ay9tYWMvaW9wLmMKaW5kZXggMGNlYTIxZi4uNWIyNzk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9pb3AuYworKysgYi9hcmNoL202OGsvbWFjL2lvcC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKICAqIGZpbmlzaGVkOyB0aGlzIGZ1bmN0aW9uIG1vdmVzIHRoZSBtZXNzYWdlIHN0YXRlIHRvIE1TR19DT01QTEVURSBhbmQgc2lnbmFscwogICogdGhlIElPUC4gVGhpcyB0d28tc3RlcCBwcm9jZXNzIGlzIHByb3ZpZGVkIHRvIGFsbG93IHRoZSBoYW5kbGVyIHRvIGRlZmVyCiAgKiBtZXNzYWdlIHByb2Nlc3NpbmcgdG8gYSBib3R0b20taGFsZiBoYW5kbGVyIGlmIHRoZSBwcm9jZXNzaW5nIHdpbGwgdGFrZQotICogYSBzaWduaWZpZ2FudCBhbW91bnQgb2YgdGltZSAoaGFuZGxlcnMgYXJlIGNhbGxlZCBhdCBpbnRlcnJ1cHQgdGltZSBzbyB0aGV5CisgKiBhIHNpZ25pZmljYW50IGFtb3VudCBvZiB0aW1lIChoYW5kbGVycyBhcmUgY2FsbGVkIGF0IGludGVycnVwdCB0aW1lIHNvIHRoZXkKICAqIHNob3VsZCBleGVjdXRlIHF1aWNrbHkuKQogICovCiAKQEAgLTEyMCw3ICsxMjAsNyBAQAogCiAvKiNkZWZpbmUgREVCVUdfSU9QKi8KIAotLyogU2V0IHRvIG5vbmV6ZXJvIGlmIHRoZSBJT1BzIGFyZSBwcmVzZW50LiBTZXQgYnkgaW9wX2luaXQoKSAqLworLyogU2V0IHRvIG5vbi16ZXJvIGlmIHRoZSBJT1BzIGFyZSBwcmVzZW50LiBTZXQgYnkgaW9wX2luaXQoKSAqLwogCiBpbnQgaW9wX3NjY19wcmVzZW50LGlvcF9pc21fcHJlc2VudDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy9vc3MuYyBiL2FyY2gvbTY4ay9tYWMvb3NzLmMKaW5kZXggZDdiZTE2OS4uNTA2MDNkMyAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy9vc3MuYworKysgYi9hcmNoL202OGsvbWFjL29zcy5jCkBAIC04LDcgKzgsNyBAQAogICoKICAqIDk5MDUwMiAoam10KSAtIE1ham9yIHJld3JpdGUgZm9yIG5ldyBpbnRlcnJ1cHQgYXJjaGl0ZWN0dXJlIGFzIHdlbGwgYXMgc29tZQogICoJCSAgcmVjZW50IGluc2lnaHRzIGludG8gT1NTIG9wZXJhdGlvbmFsIGRldGFpbHMuCi0gKiA5OTA2MTAgKGptdCkgLSBOb3cgdGFraW5nIGZ1bGxsIGFkdmFudGFnZSBvZiB0aGUgT1NTLiBJbnRlcnJ1cHRzIGFyZSBtYXBwZWQKKyAqIDk5MDYxMCAoam10KSAtIE5vdyB0YWtpbmcgZnVsbCBhZHZhbnRhZ2Ugb2YgdGhlIE9TUy4gSW50ZXJydXB0cyBhcmUgbWFwcGVkCiAgKgkJICB0byBtb3N0bHkgbWF0Y2ggdGhlIEEvVVggaW50ZXJydXB0IHNjaGVtZSBzdXBwb3J0ZWQgb24gdGhlCiAgKgkJICBWSUEgc2lkZS4gQWxzbyBhZGRlZCBzdXBwb3J0IGZvciBlbmFibGluZyB0aGUgSVNNIGlycSBhZ2FpbgogICoJCSAgc2luY2Ugd2Ugbm93IGhhdmUgYSBmdW5jdGlvbmFsIElPUCBtYW5hZ2VyLgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hYy92aWEuYyBiL2FyY2gvbTY4ay9tYWMvdmlhLmMKaW5kZXggZDVjYWM3Mi4uOGRmMjcwZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL21hYy92aWEuYworKysgYi9hcmNoL202OGsvbWFjL3ZpYS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqCTY1MjIgVmVyc2F0aWxlIEludGVyZmFjZSBBZGFwdGVyIChWSUEpCiAgKgotICoJVGhlcmUgYXJlIHR3byBvZiB0aGVzZSBvbiB0aGUgTWFjIElJLiBTb21lIElSUSdzIGFyZSB2ZWN0b3JlZAorICoJVGhlcmUgYXJlIHR3byBvZiB0aGVzZSBvbiB0aGUgTWFjIElJLiBTb21lIElSUXMgYXJlIHZlY3RvcmVkCiAgKgl2aWEgdGhlbSBhcyBhcmUgYXNzb3J0ZWQgYml0cyBhbmQgYm9icyAtIGVnIFJUQywgQURCLgogICoKICAqIENTQTogTW90b3JvbGEgc2VlbXMgdG8gaGF2ZSByZW1vdmVkIGRvY3VtZW50YXRpb24gb24gdGhlIDY1MjIgZnJvbQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2xvZy5jIGIvYXJjaC9tNjhrL21hdGgtZW11L2ZwX2xvZy5jCmluZGV4IDg3YjRmMDEuLmIxMDMzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9tYXRoLWVtdS9mcF9sb2cuYworKysgYi9hcmNoL202OGsvbWF0aC1lbXUvZnBfbG9nLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAlmcF9jb3B5X2V4dCgmc3JjMiwgZGVzdCk7CiAKIAkvKgotCSAqIFRoZSB0YXlsb3Igcm93IGFycm91bmQgYSBmb3Igc3FydCh4KSBpczoKKwkgKiBUaGUgdGF5bG9yIHJvdyBhcm91bmQgYSBmb3Igc3FydCh4KSBpczoKIAkgKglzcXJ0KHgpID0gc3FydChhKSArIDEvKDIqc3FydChhKSkqKHgtYSkgKyBSCiAJICogV2l0aCBhPTEgdGhpcyBnaXZlczoKIAkgKglzcXJ0KHgpID0gMSArIDEvMiooeC0xKQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ZhdWx0LmMgYi9hcmNoL202OGsvbW0vZmF1bHQuYwppbmRleCBlYWE2MTg2Li5mNDkzZjAzIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vZmF1bHQuYworKysgYi9hcmNoL202OGsvbW0vZmF1bHQuYwpAQCAtMTgwLDcgKzE4MCw3IEBACiAgKi8KIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9xNDAvcTQwaW50cy5jIGIvYXJjaC9tNjhrL3E0MC9xNDBpbnRzLmMKaW5kZXggYWQzZWQxZi4uNDYxNjFjZSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL3E0MC9xNDBpbnRzLmMKKysrIGIvYXJjaC9tNjhrL3E0MC9xNDBpbnRzLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogfTsKIAogLyogY29tcGxhaW4gb25seSB0aGlzIG1hbnkgdGltZXMgYWJvdXQgc3B1cmlvdXMgaW50cyA6ICovCi1zdGF0aWMgaW50IGNjbGVpcnE9NjA7ICAgIC8qIElTQSBkZXYgSVJRJ3MqLworc3RhdGljIGludCBjY2xlaXJxPTYwOyAgICAvKiBJU0EgZGV2IElSUXMqLwogLypzdGF0aWMgaW50IGNjbGlycT02MDsqLyAgICAgLyogaW50ZXJuYWwgKi8KIAogLyogRklYTUU6IGFkZCBzaGFyZWQgaW50cyxtYXNrLHVubWFzayxwcm9iaW5nLi4uLiAqLwpAQCAtMjM0LDcgKzIzNCw3IEBACiAgKiBUaGVyZSBpcyBhIGxpdHRsZSBtZXNzIHdydCB3aGljaCBJUlEgcmVhbGx5IGNhdXNlZCB0aGlzIGlycSByZXF1ZXN0LiBUaGUKICAqIG1haW4gcHJvYmxlbSBpcyB0aGF0IElJUlFfUkVHIGFuZCBFSVJRX1JFRyByZWZsZWN0IHRoZSBzdGF0ZSB3aGVuIHRoZXkKICAqIGFyZSByZWFkIC0gd2hpY2ggaXMgbG9uZyBhZnRlciB0aGUgcmVxdWVzdCBjYW1lIGluLiBJbiB0aGVvcnkgSVJRcyBzaG91bGQKLSAqIG5vdCBqdXN0IGdvIGF3YXkgYnV0IHRoZXkgb2NjYXNzaW9uYWxseSBkbworICogbm90IGp1c3QgZ28gYXdheSBidXQgdGhleSBvY2Nhc2lvbmFsbHkgZG8KICAqLwogCQkJCWlmIChpcnEgPiA0ICYmIGlycSA8PSAxNSAmJiBtZXh0X2Rpc2FibGVkKSB7CiAJCQkJCS8qYWxpYXNlZF9pcnErKzsqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL3N1bjMvbW11X2VtdS5jIGIvYXJjaC9tNjhrL3N1bjMvbW11X2VtdS5jCmluZGV4IDdhMGUzYTIuLmZiMGY2YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9zdW4zL21tdV9lbXUuYworKysgYi9hcmNoL202OGsvc3VuMy9tbXVfZW11LmMKQEAgLTIzOSw3ICsyMzksNyBAQAogLyogZ2V0cyBhbiBlbXB0eSBjb250ZXh0LiAgaWYgZnVsbCwga2lsbHMgdGhlIG5leHQgY29udGV4dCBsaXN0ZWQgdG8KICAgIGRpZSBmaXJzdCAqLwogLyogVGhpcyBjb250ZXh0IGludmFsaWRhdGlvbiBzY2hlbWUgaXMsIHdlbGwsIHRvdGFsbHkgYXJiaXRyYXJ5LCBJJ20KLSAgIHN1cmUgaXQgY291bGQgYmUgbXVjaCBtb3JlIGludGVsbGVnZW50Li4uICBidXQgaXQgZ2V0cyB0aGUgam9iIGRvbmUKKyAgIHN1cmUgaXQgY291bGQgYmUgbXVjaCBtb3JlIGludGVsbGlnZW50Li4uICBidXQgaXQgZ2V0cyB0aGUgam9iIGRvbmUKICAgIGZvciBub3cgd2l0aG91dCBtdWNoIG92ZXJoZWFkIGluIG1ha2luZyBpdCdzIGRlY2lzaW9uLiAqLwogLyogdG9kbzogY29tZSB1cCB3aXRoIG9wdGltaXplZCBzY2hlbWUgZm9yIGZsdXNoaW5nIGNvbnRleHRzICovCiB1bnNpZ25lZCBsb25nIGdldF9mcmVlX2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCmRpZmYgLS1naXQgYS9hcmNoL202OGsvdG9vbHMvYW1pZ2EvZG1lc2cuYyBiL2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jCmluZGV4IGU4OTI3NDguLjczNDBmNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jCisrKyBiL2FyY2gvbTY4ay90b29scy9hbWlnYS9kbWVzZy5jCkBAIC0zLDcgKzMsNyBAQAogICoJCQkJCSAgIGluIENoaXAgUkFNIHdpdGggdGhlIGtlcm5lbCBjb21tYW5kCiAgKgkJCQkJICAgbGluZSBvcHRpb24gYGRlYnVnPW1lbScuCiAgKgotICogIKkgQ29weXJpZ2h0IDE5OTYgYnkgR2VlcnQgVXl0dGVyaG9ldmVuIDxnZWVydEBsaW51eC1tNjhrLm9yZz4KKyAqICDCqSBDb3B5cmlnaHQgMTk5NiBieSBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgogICoKICAqCiAgKiAgVXNhZ2U6CmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9LY29uZmlnIGIvYXJjaC9tNjhrbm9tbXUvS2NvbmZpZwppbmRleCAxODU5MDZiLi5mNTJjNjI3IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9LY29uZmlnCisrKyBiL2FyY2gvbTY4a25vbW11L0tjb25maWcKQEAgLTY5Niw2ICs2OTYsOCBAQAogCiBzb3VyY2UgImZzL0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uIgorCiBzb3VyY2UgImFyY2gvbTY4a25vbW11L0tjb25maWcuZGVidWciCiAKIHNvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvcGl0LmMgYi9hcmNoL202OGtub21tdS9wbGF0Zm9ybS81MzA3L3BpdC5jCmluZGV4IGU1M2M0NDYuLmYxODM1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4a25vbW11L3BsYXRmb3JtLzUzMDcvcGl0LmMKKysrIGIvYXJjaC9tNjhrbm9tbXUvcGxhdGZvcm0vNTMwNy9waXQuYwpAQCAtODMsNyArODMsNyBAQAogCiAJLyoKIAkgKiBJZiB3ZSBhcmUgc3RpbGwgaW4gdGhlIGZpcnN0IGhhbGYgb2YgdGhlIHVwY291bnQgYW5kIGEKLQkgKiB0aW1lciBpbnRlcnVwdCBpcyBwZW5kaW5nLCB0aGVuIGFkZCBvbiBhIHRpY2tzIHdvcnRoIG9mIHRpbWUuCisJICogdGltZXIgaW50ZXJydXB0IGlzIHBlbmRpbmcsIHRoZW4gYWRkIG9uIGEgdGlja3Mgd29ydGggb2YgdGltZS4KIAkgKi8KIAlvZmZzZXQgPSAoKHBtciAtIHBjbnRyKSAqICgxMDAwMDAwIC8gSFopKSAvIHBtcjsKIAlpZiAoKG9mZnNldCA8ICgxMDAwMDAwIC8gSFogLyAyKSkgJiYgKCppcHIgJiBNQ0ZQSVRfSU1SX0lCSVQpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCAyMzVkNDUxLi4zZWNmZjVlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMjEsNiArMjEsNyBAQAogCiBjb25maWcgQkFTTEVSX0VYQ0lURQogCWJvb2wgIkJhc2xlciBlWGNpdGUgc21hcnQgY2FtZXJhIgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBETUFfQ09IRVJFTlQKIAlzZWxlY3QgSFdfSEFTX1BDSQogCXNlbGVjdCBJUlFfQ1BVCkBAIC00Nyw2ICs0OCw3IEBACiAKIGNvbmZpZyBCQ000N1hYCiAJYm9vbCAiQkNNNDdYWCBiYXNlZCBib2FyZHMiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKQEAgLTYzLDYgKzY1LDcgQEAKIAogY29uZmlnIE1JUFNfQ09CQUxUCiAJYm9vbCAiQ29iYWx0IFNlcnZlciIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSTgyNTMKQEAgLTgwLDYgKzgzLDcgQEAKIGNvbmZpZyBNQUNIX0RFQ1NUQVRJT04KIAlib29sICJERUNzdGF0aW9ucyIKIAlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgTk9fSU9QT1JUCiAJc2VsZWN0IElSUV9DUFUKQEAgLTExMSw2ICsxMTUsNyBAQAogCXNlbGVjdCBBUkMKIAlzZWxlY3QgQVJDMzIKIAlzZWxlY3QgQVJDSF9NQVlfSEFWRV9QQ19GREMKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgR0VORVJJQ19JU0FfRE1BCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgSTgyNTMKQEAgLTEzMCw2ICsxMzUsNyBAQAogCiBjb25maWcgTEFTQVQKIAlib29sICJMQVNBVCBOZXR3b3JrcyBwbGF0Zm9ybXMiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwogCXNlbGVjdCBIV19IQVNfUENJCkBAIC0xNDYsNiArMTUyLDcgQEAKIGNvbmZpZyBMRU1PVEVfRlVMT05HCiAJYm9vbCAiTGVtb3RlIEZ1bG9uZyBtaW5pLVBDIgogCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgU1lTX0hBU19DUFVfTE9PTkdTT04yCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBCT09UX0VMRjMyCkBAIC0xNzAsNiArMTc3LDcgQEAKIGNvbmZpZyBNSVBTX0FUTEFTCiAJYm9vbCAiTUlQUyBBdGxhcyBib2FyZCIKIAlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgU1lTX0hBU19FQVJMWV9QUklOVEsKIAlzZWxlY3QgSVJRX0NQVQpAQCAtMjAwLDYgKzIwOCw3IEBACiAJYm9vbCAiTUlQUyBNYWx0YSBib2FyZCIKIAlzZWxlY3QgQVJDSF9NQVlfSEFWRV9QQ19GREMKIAlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgR0VORVJJQ19JU0FfRE1BCiAJc2VsZWN0IElSUV9DUFUKQEAgLTIzMCw2ICsyMzksNyBAQAogCiBjb25maWcgTUlQU19TRUFECiAJYm9vbCAiTUlQUyBTRUFEIGJvYXJkIgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USwpAQCAtMjQ4LDYgKzI1OCw3IEBACiAKIGNvbmZpZyBNSVBTX1NJTQogCWJvb2wgJ01JUFMgc2ltdWxhdG9yIChNSVBTc2ltKScKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAJc2VsZWN0IElSUV9DUFUKQEAgLTI2NSw2ICsyNzYsNyBAQAogCiBjb25maWcgTUFSS0VJTlMKIAlib29sICJORUMgRU1NQTJSSCBNYXJrLWVpbnMiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKQEAgLTI3OSw2ICsyOTEsNyBAQAogCiBjb25maWcgTUFDSF9WUjQxWFgKIAlib29sICJORUMgVlI0MTAwIHNlcmllcyBiYXNlZCBtYWNoaW5lcyIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgU1lTX0hBU19DUFVfVlI0MVhYCiAJc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCkBAIC0zMTUsNiArMzI4LDcgQEAKIAogY29uZmlnIFBNQ19ZT1NFTUlURQogCWJvb2wgIlBNQy1TaWVycmEgWW9zZW1pdGUgZXZhbCBib2FyZCIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEhXX0hBU19QQ0kKIAlzZWxlY3QgSVJRX0NQVQpAQCAtMzM1LDYgKzM0OSw3IEBACiAKIGNvbmZpZyBRRU1VCiAJYm9vbCAiUWVtdSIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX0NPSEVSRU5UCiAJc2VsZWN0IEdFTkVSSUNfSVNBX0RNQQogCXNlbGVjdCBIQVZFX1NURF9QQ19TRVJJQUxfUE9SVApAQCAtMzY1LDYgKzM4MCw3IEBACiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgogCXNlbGVjdCBCT09UX0VMRjMyCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfRUlTQQogCXNlbGVjdCBJODI1MwpAQCAtNDA5LDYgKzQyNSw3IEBACiAJc2VsZWN0IEFSQwogCXNlbGVjdCBBUkMzMgogCXNlbGVjdCBCT09UX0VMRjMyCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKQEAgLTUzNiw2ICs1NTMsNyBAQAogCXNlbGVjdCBBUkMzMiBpZiBDUFVfTElUVExFX0VORElBTgogCXNlbGVjdCBBUkNIX01BWV9IQVZFX1BDX0ZEQwogCXNlbGVjdCBCT09UX0VMRjMyCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBHRU5FUklDX0lTQV9ETUEKIAlzZWxlY3QgSFdfSEFTX0VJU0EKQEAgLTU3Nyw2ICs1OTUsNyBAQAogCiBjb25maWcgVE9TSElCQV9SQlRYNDkyNwogCWJvb2wgIlRvc2hpYmEgUkJUWDQ5WzIzXTcgYm9hcmQiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBIQVNfVFhYOV9TRVJJQUwKIAlzZWxlY3QgSFdfSEFTX1BDSQpAQCAtNTk3LDYgKzYxNiw3IEBACiAKIGNvbmZpZyBUT1NISUJBX1JCVFg0OTM4CiAJYm9vbCAiVG9zaGliYSBSQlRYNDkzOCBib2FyZCIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IEhBU19UWFg5X1NFUklBTAogCXNlbGVjdCBIV19IQVNfUENJCkBAIC02MTYsNiArNjM2LDcgQEAKIAogY29uZmlnIFdSX1BQTUMKIAlib29sICJXaW5kIFJpdmVyIFBQTUMgYm9hcmQiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgQk9PVF9FTEYzMgogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKQEAgLTcwOCw2ICs3MjksOSBAQAogY29uZmlnIEJPT1RfUkFXCiAJYm9vbAogCitjb25maWcgQ0VWVF9SNEsKKwlib29sCisKIGNvbmZpZyBDRkUKIAlib29sCiAKQEAgLTE3ODgsNyArMTgxMiw3IEBACiAJICBidXQgaXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5c3RlbSBmaXJtd2FyZS4gICBBbmQgbGlrZSBhIHJlYm9vdAogCSAgeW91IGNhbiBzdGFydCBhbnkga2VybmVsIHdpdGggaXQsIG5vdCBqdXN0IExpbnV4LgogCi0JICBUaGUgbmFtZSBjb21lcyBmcm9tIHRoZSBzaW1pbGlhcml0eSB0byB0aGUgZXhlYyBzeXN0ZW0gY2FsbC4KKwkgIFRoZSBuYW1lIGNvbWVzIGZyb20gdGhlIHNpbWlsYXJpdHkgdG8gdGhlIGV4ZWMgc3lzdGVtIGNhbGwuCiAKIAkgIEl0IGlzIGFuIG9uZ29pbmcgcHJvY2VzcyB0byBiZSBjZXJ0YWluIHRoZSBoYXJkd2FyZSBpbiBhIG1hY2hpbmUKIAkgIGlzIHByb3Blcmx5IHNodXRkb3duLCBzbyBkbyBub3QgYmUgc3VycHJpc2VkIGlmIHRoaXMgY29kZSBkb2VzIG5vdApAQCAtMTk4MSw3ICsyMDA1LDcgQEAKIAogc291cmNlICJmcy9LY29uZmlnIgogCi1zb3VyY2UgImFyY2gvbWlwcy9vcHJvZmlsZS9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCiAKIHNvdXJjZSAiYXJjaC9taXBzL0tjb25maWcuZGVidWciCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvS2NvbmZpZyBiL2FyY2gvbWlwcy9hdTEwMDAvS2NvbmZpZwppbmRleCBhMjNkNDE1Li5iMzZjZWM1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy9hdTEwMDAvS2NvbmZpZwpAQCAtMTM3LDYgKzEzNyw3IEBACiBjb25maWcgU09DX0FVMVgwMAogCWJvb2wKIAlzZWxlY3QgNjRCSVRfUEhZU19BRERSCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvcGIxMjAwL2lycW1hcC5jIGIvYXJjaC9taXBzL2F1MTAwMC9wYjEyMDAvaXJxbWFwLmMKaW5kZXggNWY0OGIwNi4uYmRmMDBlMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9wYjEyMDAvaXJxbWFwLmMKKysrIGIvYXJjaC9taXBzL2F1MTAwMC9wYjEyMDAvaXJxbWFwLmMKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pcnEuYyBiL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9pcnEuYwppbmRleCAxZWNhYjYzLi40OTAzZTA2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfaXJxLmMKKysrIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2lycS5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L3RpbWUuYyBiL2FyY2gvbWlwcy9iY200N3h4L3RpbWUuYwppbmRleCAwYWI0Njc2Li4wYzZmNDdiIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvdGltZS5jCkBAIC00NiwxMCArNDYsMyBAQAogCS8qIFNldCBNSVBTIGNvdW50ZXIgZnJlcXVlbmN5IGZvciBmaXhlZF9yYXRlX2dldHRpbWVvZmZzZXQoKSAqLwogCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGh6OwogfQotCi12b2lkIF9faW5pdAotcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0JLyogRW5hYmxlIHRoZSB0aW1lciBpbnRlcnJ1cHQgKi8KLQlzZXR1cF9pcnEoNywgaXJxKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKaW5kZXggNDliY2M1OC4uODkyZDRjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcKQEAgLTE3NSw2ICsxNzUsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CitDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfUkVMQVk9eQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwppbmRleCA4NmRjYjc0Li42MWI3MmY1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9taXBzc2ltX2RlZmNvbmZpZwpAQCAtMSw3MSArMSw2OCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIwCi0jIFR1ZSBGZWIgMjAgMjE6NDc6MzUgMjAwNworIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjIzCisjIFRodSBPY3QgMTggMjI6NDU6NTIgMjAwNwogIwogQ09ORklHX01JUFM9eQogCiAjCiAjIE1hY2hpbmUgc2VsZWN0aW9uCiAjCi1DT05GSUdfWk9ORV9ETUE9eQotIyBDT05GSUdfTUlQU19NVFgxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQk9TUE9SVVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19QQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjExMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1MDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjE1NTAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19EQjEyMDAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NSVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BTENIRU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBU0xFUl9FWENJVEUgaXMgbm90IHNldAorIyBDT05GSUdfQkNNNDdYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFTU9URV9GVUxPTkcgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19BVExBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX01BTFRBIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfU0VBRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX1NJTT15Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFSU5TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfSkJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BOWDg1NTBfU1RCODEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfVlI0MVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNQ19NU1AgaXMgbm90IHNldAogIyBDT05GSUdfUE1DX1lPU0VNSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1FFTVUgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VJTlMgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjIgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMjcgaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1JIT05FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0xJVFRMRVNVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSUJZVEVfQ1JISU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9DQVJNRUwgaXMgbm90IHNldAogIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NXQVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJQllURV9MSVRUTEVTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1NFTlRPU0EgaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX1BUU1dBUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0lCWVRFX0JJR1NVUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTklfUk0gaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9KTVIzOTI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MjcgaXMgbm90IHNldAogIyBDT05GSUdfVE9TSElCQV9SQlRYNDkzOCBpcyBub3Qgc2V0CisjIENPTkZJR19XUl9QUE1DIGlzIG5vdCBzZXQKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKICMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NNT1NfVVBEQVRFPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQogIyBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UX1JBVz15CitDT05GSUdfQ0VWVF9SNEs9eQogQ09ORklHX0RNQV9OT05DT0hFUkVOVD15CiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURT15CitDT05GSUdfRUFSTFlfUFJJTlRLPXkKK0NPTkZJR19TWVNfSEFTX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19IT1RQTFVHX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0JJR19FTkRJQU4gaXMgbm90IHNldAogQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15CkBAIC03Niw2ICs3MywxMSBAQAogIwogIyBDUFUgc2VsZWN0aW9uCiAjCisjIENPTkZJR19USUNLX09ORVNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSFogaXMgbm90IHNldAorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0NQVV9MT09OR1NPTjIgaXMgbm90IHNldAogQ09ORklHX0NQVV9NSVBTMzJfUjE9eQogIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKQEAgLTExNSw4ICsxMTcsOCBAQAogQ09ORklHX01JUFNfTVRfRElTQUJMRUQ9eQogIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19NVF9TTVRDIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNfU1VQUE9SVFNfTVVMVElUSFJFQURJTkc9eQogIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX0hBU19MTFNDPXkKIENPTkZJR19DUFVfSEFTX1NZTkM9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQpAQCAtMTMwLDUwICsxMzIsNTIgQEAKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQX0VOQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAogIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKLUNPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CiAjIENPTkZJR19IWl80OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzEwMD15CiAjIENPTkZJR19IWl8xMjggaXMgbm90IHNldAogIyBDT05GSUdfSFpfMjUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzI1NiBpcyBub3Qgc2V0Ci1DT05GSUdfSFpfMTAwMD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAogQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAorQ09ORklHX0haPTEwMAogQ09ORklHX1BSRUVNUFRfTk9ORT15CiAjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15Ci1DT05GSUdfU1dBUD15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKIENPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAogIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9VU0VSX1NDSEVEPXkKIENPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0VNQkVEREVEPXkKQEAgLTE4NywzMSArMTkxLDI5IEBACiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19TTEFCPXkKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogQ09ORklHX1JUX01VVEVYRVM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15Ci0KLSMKLSMgQmxvY2sgbGF5ZXIKLSMKIENPTkZJR19CTE9DSz15CiAjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19MU0YgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogCiAjCiAjIElPIFNjaGVkdWxlcnMKQEAgLTIyOSwxOCArMjMxLDExIEBACiAjCiAjIEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBLCBUQykKICMKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKIENPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKICMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwotCi0jCiAjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCiAjCiBDT05GSUdfQklORk1UX0VMRj15CkBAIC0yNTAsOSArMjQ1LDggQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCi1DT05GSUdfUE09eQotIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19TVVNQRU5EX1VQX1BPU1NJQkxFPXkKIAogIwogIyBOZXR3b3JraW5nCkBAIC0yNjIsNzUgKzI1Niw1MCBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKIENPTkZJR19VTklYPXkKLUNPTkZJR19YRlJNPXkKLSMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAotQ09ORklHX1hGUk1fTUlHUkFURT15Ci1DT05GSUdfTkVUX0tFWT15Ci1DT05GSUdfTkVUX0tFWV9NSUdSQVRFPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKIENPTkZJR19BU0tfSVBfRklCX0hBU0g9eQogIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAogQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQotQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15Ci0jIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CiBDT05GSUdfSVBfUE5QPXkKIENPTkZJR19JUF9QTlBfREhDUD15CiBDT05GSUdfSVBfUE5QX0JPT1RQPXkKICMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfTVJPVVRFPXkKLUNPTkZJR19JUF9QSU1TTV9WMT15Ci1DT05GSUdfSVBfUElNU01fVjI9eQorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSUEQgaXMgbm90IHNldAotQ09ORklHX1NZTl9DT09LSUVTPXkKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPW0KLUNPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9bQotQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9bQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0NVQklDPXkKIENPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKLUNPTkZJR19UQ1BfTUQ1U0lHPXkKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX05FVFdPUktfU0VDTUFSSz15CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAotCi0jCi0jIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotQ09ORklHX0lQX1NDVFA9bQotIyBDT05GSUdfU0NUUF9EQkdfTVNHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDVFBfREJHX09CSkNOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfTk9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1RQX0hNQUNfU0hBMSBpcyBub3Qgc2V0Ci1DT05GSUdfU0NUUF9ITUFDX01ENT15Ci0KLSMKLSMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDcsNDQgKzMxNiw3IEBACiAjCiAjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwogIwotQ09ORklHX05FVF9TQ0hFRD15Ci1DT05GSUdfTkVUX1NDSF9GSUZPPXkKLUNPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTPXkKLSMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldAotCi0jCi0jIFF1ZXVlaW5nL1NjaGVkdWxpbmcKLSMKLUNPTkZJR19ORVRfU0NIX0NCUT1tCi1DT05GSUdfTkVUX1NDSF9IVEI9bQotQ09ORklHX05FVF9TQ0hfSEZTQz1tCi1DT05GSUdfTkVUX1NDSF9QUklPPW0KLUNPTkZJR19ORVRfU0NIX1JFRD1tCi1DT05GSUdfTkVUX1NDSF9TRlE9bQotQ09ORklHX05FVF9TQ0hfVEVRTD1tCi1DT05GSUdfTkVUX1NDSF9UQkY9bQotQ09ORklHX05FVF9TQ0hfR1JFRD1tCi1DT05GSUdfTkVUX1NDSF9EU01BUks9bQotQ09ORklHX05FVF9TQ0hfTkVURU09bQotQ09ORklHX05FVF9TQ0hfSU5HUkVTUz1tCi0KLSMKLSMgQ2xhc3NpZmljYXRpb24KLSMKLUNPTkZJR19ORVRfQ0xTPXkKLUNPTkZJR19ORVRfQ0xTX0JBU0lDPW0KLUNPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQotQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KLUNPTkZJR19ORVRfQ0xTX1JPVVRFPXkKLSMgQ09ORklHX05FVF9DTFNfRlcgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19VMzIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19SU1ZQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9DTFNfUlNWUDYgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0VNQVRDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX0FDVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1BPTElDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX0VTVElNQVRPUj15CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgdGVzdGluZwpAQCAtMzkzLDggKzMyNSwxNyBAQAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisKKyMKKyMgV2lyZWxlc3MKKyMKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAotQ09ORklHX0ZJQl9SVUxFUz15CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIAogIwogIyBEZXZpY2UgRHJpdmVycwpAQCAtNDAzLDUyICszNDQsMjUgQEAKICMKICMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwogIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKICMgQ09ORklHX1NUQU5EQUxPTkUgaXMgbm90IHNldAogIyBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRCBpcyBub3Qgc2V0CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgotIwogIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCiAjIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QTlBBQ1BJIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCitDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0Ci0jCisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKIAogIwpAQCAtNDU2LDQ4ICszNzAsMjkgQEAKICMKICMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycwotIwogIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQotIwogIyBDT05GSUdfTUQgaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKLSMKIENPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CiAjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAogIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKICMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX1NJTV9ORVQ9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKIApAQCAtNTEzLDQ5ICs0MDgsMTggQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKICMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAogIwotQ09ORklHX0lOUFVUPXkKLSMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIEkvTyBwb3J0cwogIwotQ09ORklHX1NFUklPPXkKLSMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKLUNPTkZJR19TRVJJT19TRVJQT1JUPXkKLSMgQ09ORklHX1NFUklPX0xJQlBTMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC01ODEsMzEgKzQ0NSwxMyBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKICMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CiAKICMKQEAgLTYxMywxMTggKzQ1OSw2MCBAQAogIwogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogCiAjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCi0jIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZAogIwogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIEhJRCBEZXZpY2VzCi0jCi0jIENPTkZJR19ISUQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfQVJDSF9IQVNfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19PSENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKLQotIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCi0jCi0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkZXZpY2VzCi0jCiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTEVEIGRyaXZlcnMKLSMKLQotIwotIyBMRUQgVHJpZ2dlcnMKLSMKLQotIwotIyBJbmZpbmlCYW5kIHN1cHBvcnQKLSMKLQotIwotIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKLSMKLQotIwotIyBSZWFsIFRpbWUgQ2xvY2sKLSMKK0NPTkZJR19SVENfTElCPXkKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAKICMKLSMgRE1BIEVuZ2luZSBzdXBwb3J0CisjIFVzZXJzcGFjZSBJL08KICMKLSMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAotCi0jCi0jIERNQSBDbGllbnRzCi0jCi0KLSMKLSMgRE1BIERldmljZXMKLSMKLQotIwotIyBBdXhpbGlhcnkgRGlzcGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgVmlydHVhbGl6YXRpb24KLSMKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCiAjCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKQEAgLTczMiw2ICs1MjAsNyBAQAogIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CiAjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKQEAgLTc2MCwxMCArNTQ5LDExIEBACiBDT05GSUdfUFJPQ19GUz15CiAjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX1NZU0NUTD15Ci0jIENPTkZJR19TWVNGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCkBAIC03ODEsMTAgKzU3MSw3IEBACiAjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQogIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CkBAIC03OTYsNiArNTgzLDcgQEAKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfTkZTX0NPTU1PTj15CiBDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1NVTlJQQ19CSU5EMzQgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKQEAgLTgwMywyMiArNTkxLDE0IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwogIwogIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19NU0RPU19QQVJUSVRJT049eQotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCiAjIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIERpc3RyaWJ1dGVkIExvY2sgTWFuYWdlcgotIworIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKIAogIwogIyBQcm9maWxpbmcgc3VwcG9ydApAQCAtODMzLDIwICs2MTMsMjIgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldApAQCAtODU0LDcgKzYzNiw5IEBACiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKIENPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15CiBDT05GSUdfQ01ETElORT0ibmZzcm9vdD0xOTIuMTY4LjE5Mi4xNjk6L3UxL21pcHNlbCx0aW1lbz0yMCBpcD1kaGNwIgogIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldApAQCAtODY1LDYwICs2NDksMjAgQEAKICMgU2VjdXJpdHkgb3B0aW9ucwogIwogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fQUxHQVBJPXkKLUNPTkZJR19DUllQVE9fQkxLQ0lQSEVSPW0KLUNPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQotQ09ORklHX0NSWVBUT19ITUFDPXkKLUNPTkZJR19DUllQVE9fWENCQz1tCi0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fTUQ1PXkKLSMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KLUNPTkZJR19DUllQVE9fRUNCPW0KLUNPTkZJR19DUllQVE9fQ0JDPW0KLUNPTkZJR19DUllQVE9fUENCQz1tCi1DT05GSUdfQ1JZUFRPX0xSVz1tCi0jIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fRkNSWVBUPW0KLSMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DUkMzMkMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19DQU1FTExJQT1tCi0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwotQ09ORklHX0JJVFJFVkVSU0U9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj15Ci1DT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCmluZGV4IDNlZDk5MWEuLjQ5ZGZjZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwpAQCAtMTk2LDYgKzE5Niw3IEBACiAjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0NHUk9VUFM9eQogQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3NldHVwLmMgYi9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9zZXR1cC5jCmluZGV4IDVlMWRhNTMuLjgyZjllOTAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZW1tYTJyaC9tYXJrZWlucy9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9lbW1hMnJoL21hcmtlaW5zL3NldHVwLmMKQEAgLTEwNCwxMiArMTA0LDYgQEAKIAltaXBzX2hwdF9mcmVxdWVuY3kgPSAoYnVzX2ZyZXF1ZW5jeSAqICg0ICsgcmVnKSkgLyA0IC8gMjsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0JLyogd2UgYXJlIHVzaW5nIHRoZSBjcHUgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0cyAqLwotCXNldHVwX2lycShDUFVfSVJRX0JBU0UgKyA3LCBpcnEpOwotfQotCiBzdGF0aWMgdm9pZCBtYXJrZWluc19ib2FyZF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFya2VpbnNfaXJxX3NldHVwKHZvaWQpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9pcnEuYyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCmluZGV4IDgzNWIwNTYuLmFlMjViNDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qYXp6L2lycS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2lycS5jCkBAIC00LDcgKzQsNyBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTIgTGludXMgVG9ydmFsZHMKLSAqIENvcHlyaWdodCAoQykgMTk5NCAtIDIwMDEsIDIwMDMgUmFsZiBCYWVjaGxlCisgKiBDb3B5cmlnaHQgKEMpIDE5OTQgLSAyMDAxLCAyMDAzLCAwNyBSYWxmIEJhZWNobGUKICAqLwogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CisjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CiAjaW5jbHVkZSA8YXNtL2k4MjU5Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2phenouaD4KQEAgLTEzNiw3ICsxMzcsNyBAQAogCS5uYW1lCQk9ICJ0aW1lciIsCiB9OwogCi12b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlnbm9yZWQpCit2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQogewogCXN0cnVjdCBpcnFhY3Rpb24gKmlycSA9ICZyNDAzMF90aW1lcl9pcnFhY3Rpb247CiAKQEAgLTE1Miw0ICsxNTMsNSBAQAogCXNldHVwX2lycShKQVpaX1RJTUVSX0lSUSwgaXJxKTsKIAogCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmcjQwMzBfY2xvY2tldmVudCk7CisJc2V0dXBfcGl0X3RpbWVyKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9zZXR1cC5jIGIvYXJjaC9taXBzL2phenovc2V0dXAuYwppbmRleCBjZmM3ZGNlLi5hNzg1Nzk3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvamF6ei9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L3NldHVwLmMKQEAgLTUsNyArNSw3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKLSAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwMSBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMjAwMSwgMDcgYnkgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwNyBieSBUaG9tYXMgQm9nZW5kb2VyZmVyCiAgKi8KQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogCiAjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2k4MjUzLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9qYXp6Lmg+CiAjaW5jbHVkZSA8YXNtL2phenpkbWEuaD4KQEAgLTY0LDExICs2Myw2IEBACiAJfQogfTsKIAotdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKLXsKLQlzZXR1cF9waXRfdGltZXIoKTsKLX0KLQogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9qbXIzOTI3L3JiaG1hMzEwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKaW5kZXggMGM3YWVlMS4uZWRiOWU1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2ptcjM5MjcvcmJobWEzMTAwL3NldHVwLmMKQEAgLTEsMTUgKzEsNCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgICAgICBhaGVubmVzc3lAbXZpc3RhLmNvbQotICoKLSAqIEJhc2VkIG9uIGFyY2gvbWlwcy9kZGI1eHh4L2RkYjU0Nzcvc2V0dXAuYwotICoKLSAqICAgICBTZXR1cCBmaWxlIGZvciBKTVIzOTI3LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMC0yMDAxIFRvc2hpYmEgQ29ycG9yYXRpb24KLSAqCisvKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgpAQCAtMzAsOSArMTksMTUgQEAKICAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKICAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiAgICAgICAgICAgICAgYWhlbm5lc3N5QG12aXN0YS5jb20KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBUb3NoaWJhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQogICovCiAKKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgpAQCAtMTA0LDI3ICs5OSw2MCBAQAogCXJldHVybiBqaWZmaWVzICogKEpNUjM5MjdfVElNRVJfQ0xLIC8gSFopICsgam1yMzkyN190bXJwdHItPnRycjsKIH0KIAotc3RhdGljIHZvaWQgam1yMzkyN190aW1lcl9hY2sodm9pZCkKK3N0YXRpYyB2b2lkIGptcjM5Mjdfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQogewotCWptcjM5MjdfdG1ycHRyLT50aXNyID0gMDsgICAgICAgLyogYWNrIGludGVycnVwdCAqLworCS8qIE5vdGhpbmcgdG8gZG8gaGVyZSAqLwogfQogCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIGptcjM5MjdfY2xvY2tfZXZlbnRfZGV2aWNlID0geworCS5uYW1lCQk9ICJNSVBTIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKKwkuc2hpZnQJCT0gMzIsCisJLnJhdGluZwkJPSAzMDAsCisJLmNwdW1hc2sJPSBDUFVfTUFTS19DUFUwLAorCS5pcnEJCT0gSk1SMzkyN19JUlFfVElDSywKKwkuc2V0X21vZGUJPSBqbXIzOTI3X3NldF9tb2RlLAorfTsKKworc3RhdGljIGlycXJldHVybl90IGptcjM5MjdfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9ICZqbXIzOTI3X2Nsb2NrX2V2ZW50X2RldmljZTsKKworCWptcjM5MjdfdG1ycHRyLT50aXNyID0gMDsgICAgICAgLyogYWNrIGludGVycnVwdCAqLworCisJY2QtPmV2ZW50X2hhbmRsZXIoY2QpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBqbXIzOTI3X3RpbWVyX2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlcgk9IGptcjM5MjdfdGltZXJfaW50ZXJydXB0LAorCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisJLm5hbWUJCT0gImptcjM5MjctdGltZXIiLAorfTsKKwogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKLQljbG9ja3NvdXJjZV9taXBzLnJlYWQgPSBqbXIzOTI3X2hwdF9yZWFkOwotCW1pcHNfdGltZXJfYWNrID0gam1yMzkyN190aW1lcl9hY2s7Ci0JbWlwc19ocHRfZnJlcXVlbmN5ID0gSk1SMzkyN19USU1FUl9DTEs7Ci19CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7CiAKLXZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQoteworCWNsb2Nrc291cmNlX21pcHMucmVhZCA9IGptcjM5MjdfaHB0X3JlYWQ7CisJbWlwc19ocHRfZnJlcXVlbmN5ID0gSk1SMzkyN19USU1FUl9DTEs7CisKIAlqbXIzOTI3X3RtcnB0ci0+Y3ByYSA9IEpNUjM5MjdfVElNRVJfQ0xLIC8gSFo7CiAJam1yMzkyN190bXJwdHItPml0bXIgPSBUWHg5MjdfVE1USVRNUl9USUlFIHwgVFh4OTI3X1RNVElUTVJfVFpDRTsKIAlqbXIzOTI3X3RtcnB0ci0+Y2NkciA9IEpNUjM5MjdfVElNRVJfQ0NEOwogCWptcjM5MjdfdG1ycHRyLT50Y3IgPQogCQlUWHg5MjdfVE1UQ1JfVENFIHwgVFh4OTI3X1RNVENSX0NDREUgfCBUWHg5MjdfVE1UQ1JfVE1PREVfSVRWTDsKIAotCXNldHVwX2lycShKTVIzOTI3X0lSUV9USUNLLCBpcnEpOworCWNkID0gJmptcjM5MjdfY2xvY2tfZXZlbnRfZGV2aWNlOworCS8qIENhbGN1bGF0ZSB0aGUgbWluIC8gbWF4IGRlbHRhICovCisJY2QtPm11bHQgPSBkaXZfc2MoKHVuc2lnbmVkIGxvbmcpIEpNUjM5MjdfSU1DTEssIE5TRUNfUEVSX1NFQywgMzIpOworCWNkLT5tYXhfZGVsdGFfbnMJPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmYsIGNkKTsKKwljZC0+bWluX2RlbHRhX25zCT0gY2xvY2tldmVudF9kZWx0YTJucygweDMwMCwgY2QpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZCk7CisKKwlzZXR1cF9pcnEoSk1SMzkyN19JUlFfVElDSywgJmptcjM5MjdfdGltZXJfaXJxYWN0aW9uKTsKIH0KIAogI2RlZmluZSBET19XUklURV9USFJPVUdICmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQppbmRleCA5NWEzNTZlLi5hM2FmYTM5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsNiArOCw4IEBACiAJCSAgIHB0cmFjZS5vIHJlc2V0Lm8gc2VtYXBob3JlLm8gc2V0dXAubyBzaWduYWwubyBzeXNjYWxsLm8gXAogCQkgICB0aW1lLm8gdG9wb2xvZ3kubyB0cmFwcy5vIHVuYWxpZ25lZC5vCiAKK29iai0kKENPTkZJR19DRVZUX1I0SykJCSs9IGNldnQtcjRrLm8KKwogYmluZm10X2lyaXgtb2Jqcwk6PSBpcml4ZWxmLm8gaXJpeGludi5vIGlyaXhpb2N0bC5vIGlyaXhzaWcubwlcCiAJCQkgICBpcml4NXN5cy5vIHN5c2lyaXgubwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMgYi9hcmNoL21pcHMva2VybmVsL2NldnQtcjRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkxNWU1NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC1yNGsuYwpAQCAtMCwwICsxLDI3MyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBNSVBTIFRlY2hub2xvZ2llcywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2luY2x1ZGUgPGFzbS9zbXRjX2lwaS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKK3N0YXRpYyBpbnQgbWlwc19uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgaW50IGNudDsKKwlpbnQgcmVzOworCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworCXsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCB2cGZsYWdzOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2cGZsYWdzID0gZHZwZSgpOworI2VuZGlmCisJY250ID0gcmVhZF9jMF9jb3VudCgpOworCWNudCArPSBkZWx0YTsKKwl3cml0ZV9jMF9jb21wYXJlKGNudCk7CisJcmVzID0gKChsb25nKShyZWFkX2MwX2NvdW50KCkgLSBjbnQgKSA+IDApID8gLUVUSU1FIDogMDsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJZXZwZSh2cGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorI2VuZGlmCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgbWlwc19zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQoreworCS8qIE5vdGhpbmcgdG8gZG8gLi4uICAqLworfQorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgbWlwc19jbG9ja2V2ZW50X2RldmljZSk7CitzdGF0aWMgaW50IGNwMF90aW1lcl9pcnFfaW5zdGFsbGVkOworCisvKgorICogVGltZXIgYWNrIGZvciBhbiBSNGstY29tcGF0aWJsZSB0aW1lciBvZiBhIGtub3duIGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIHZvaWQgYzBfdGltZXJfYWNrKHZvaWQpCit7CisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvbXBhcmUoKSk7Cit9CisKKy8qCisgKiBQb3NzaWJseSBoYW5kbGUgYSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdC4KKyAqIFJldHVybiB0cnVlIGlmIHRoZSB0aW1lciBpbnRlcnJ1cHQgc2hvdWxkIG5vdCBiZSBjaGVja2VkCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGhhbmRsZV9wZXJmX2lycShpbnQgcjIpCit7CisJLyoKKwkgKiBUaGUgcGVyZm9ybWFuY2UgY291bnRlciBvdmVyZmxvdyBpbnRlcnJ1cHQgbWF5IGJlIHNoYXJlZCB3aXRoIHRoZQorCSAqIHRpbWVyIGludGVycnVwdCAoY3AwX3BlcmZjb3VudF9pcnEgPCAwKS4gSWYgaXQgaXMgYW5kIGEKKwkgKiBwZXJmb3JtYW5jZSBjb3VudGVyIGhhcyBvdmVyZmxvd2VkIChwZXJmX2lycSgpID09IElSUV9IQU5ETEVEKQorCSAqIGFuZCB3ZSBjYW4ndCByZWxpYWJseSBkZXRlcm1pbmUgaWYgYSBjb3VudGVyIGludGVycnVwdCBoYXMgYWxzbworCSAqIGhhcHBlbmVkICghcjIpIHRoZW4gZG9uJ3QgY2hlY2sgZm9yIGEgdGltZXIgaW50ZXJydXB0LgorCSAqLworCXJldHVybiAoY3AwX3BlcmZjb3VudF9pcnEgPCAwKSAmJgorCQlwZXJmX2lycSgpID09IElSUV9IQU5ETEVEICYmCisJCSFyMjsKK30KKworc3RhdGljIGlycXJldHVybl90IGMwX2NvbXBhcmVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwljb25zdCBpbnQgcjIgPSBjcHVfaGFzX21pcHNfcjI7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2Q7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCS8qCisJICogU3Vja2FnZSBhbGVydDoKKwkgKiBCZWZvcmUgUjIgb2YgdGhlIGFyY2hpdGVjdHVyZSB0aGVyZSB3YXMgbm8gd2F5IHRvIHNlZSBpZiBhCisJICogcGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcsIHNvIHdlIGhhdmUgdG8gcnVuCisJICogdGhlIHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0IGhhbmRsZXIgYW55d2F5LgorCSAqLworCWlmIChoYW5kbGVfcGVyZl9pcnEocjIpKQorCQlnb3RvIG91dDsKKworCS8qCisJICogVGhlIHNhbWUgYXBwbGllcyB0byBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHMuICBCdXQgd2l0aCB0aGUKKwkgKiBhYm92ZSB3ZSBub3cga25vdyB0aGF0IHRoZSByZWFzb24gd2UgZ290IGhlcmUgbXVzdCBiZSBhIHRpbWVyCisJICogaW50ZXJydXB0LiAgQmVpbmcgdGhlIHBhcmFub2lhY3Mgd2UgYXJlIHdlIGNoZWNrIGFueXdheS4KKwkgKi8KKwlpZiAoIXIyIHx8IChyZWFkX2MwX2NhdXNlKCkgJiAoMSA8PCAzMCkpKSB7CisJCWMwX3RpbWVyX2FjaygpOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkJaWYgKGNwdV9kYXRhW2NwdV0udnBlX2lkKQorCQkJZ290byBvdXQ7CisJCWNwdSA9IDA7CisjZW5kaWYKKwkJY2QgPSAmcGVyX2NwdShtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOworCQljZC0+ZXZlbnRfaGFuZGxlcihjZCk7CisJfQorCitvdXQ6CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjMF9jb21wYXJlX2lycWFjdGlvbiA9IHsKKwkuaGFuZGxlciA9IGMwX2NvbXBhcmVfaW50ZXJydXB0LAorI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVELAorI2Vsc2UKKwkuZmxhZ3MgPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCisjZW5kaWYKKwkubmFtZSA9ICJ0aW1lciIsCit9OworCisjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQworREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgc210Y19kdW1teV9jbG9ja2V2ZW50X2RldmljZSk7CisKK3N0YXRpYyB2b2lkIHNtdGNfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKK30KKworc3RhdGljIHZvaWQgbWlwc19icm9hZGNhc3QoY3B1bWFza190IG1hc2spCit7CisJdW5zaWduZWQgaW50IGNwdTsKKworCWZvcl9lYWNoX2NwdV9tYXNrKGNwdSwgbWFzaykKKwkJc210Y19zZW5kX2lwaShjcHUsIFNNVENfQ0xPQ0tfVElDSywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3NtdGNfZHVtbXlfY2xvY2tldmVudF9kZXZpY2Uodm9pZCkKK3sKKwkvL3VpbnQ2NF90IG1pcHNfZnJlcSA9IG1pcHNfaHB0X15mcmVxdWVuY3k7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKKworCWNkID0gJnBlcl9jcHUoc210Y19kdW1teV9jbG9ja2V2ZW50X2RldmljZSwgY3B1KTsKKworCWNkLT5uYW1lCQk9ICJTTVRDIjsKKwljZC0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfRFVNTVk7CisKKwkvKiBDYWxjdWxhdGUgdGhlIG1pbiAvIG1heCBkZWx0YSAqLworCWNkLT5tdWx0CT0gMDsgLy9kaXZfc2MoKHVuc2lnbmVkIGxvbmcpIG1pcHNfZnJlcSwgTlNFQ19QRVJfU0VDLCAzMik7CisJY2QtPnNoaWZ0CQk9IDA7IC8vMzI7CisJY2QtPm1heF9kZWx0YV9ucwk9IDA7IC8vY2xvY2tldmVudF9kZWx0YTJucygweDdmZmZmZmZmLCBjZCk7CisJY2QtPm1pbl9kZWx0YV9ucwk9IDA7IC8vY2xvY2tldmVudF9kZWx0YTJucygweDMwLCBjZCk7CisKKwljZC0+cmF0aW5nCQk9IDIwMDsKKwljZC0+aXJxCQkJPSAxNzsgLy8tMTsKKy8vCWlmIChjcHUpCisvLwkJY2QtPmNwdW1hc2sJPSBDUFVfTUFTS19BTEw7IC8vIGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisvLwllbHNlCisJCWNkLT5jcHVtYXNrCT0gY3B1bWFza19vZl9jcHUoY3B1KTsKKworCWNkLT5zZXRfbW9kZQkJPSBzbXRjX3NldF9tb2RlOworCisJY2QtPmJyb2FkY2FzdAkJPSBtaXBzX2Jyb2FkY2FzdDsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZCk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgbWlwc19ldmVudF9oYW5kbGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldikKK3sKK30KKworLyoKKyAqIEZJWE1FOiBUaGlzIGRvZXNuJ3QgaG9sZCBmb3IgdGhlIHJlbG9jYXRlZCBFOTAwMCBjb21wYXJlIGludGVycnVwdC4KKyAqLworc3RhdGljIGludCBjMF9jb21wYXJlX2ludF9wZW5kaW5nKHZvaWQpCit7CisJcmV0dXJuIChyZWFkX2MwX2NhdXNlKCkgPj4gY3AwX2NvbXBhcmVfaXJxKSAmIDB4MTAwOworfQorCitzdGF0aWMgaW50IGMwX2NvbXBhcmVfaW50X3VzYWJsZSh2b2lkKQoreworCWNvbnN0IHVuc2lnbmVkIGludCBkZWx0YSA9IDB4MzAwMDAwOworCXVuc2lnbmVkIGludCBjbnQ7CisKKwkvKgorCSAqIElQNyBhbHJlYWR5IHBlbmRpbmc/ICBUcnkgdG8gY2xlYXIgaXQgYnkgYWNraW5nIHRoZSB0aW1lci4KKwkgKi8KKwlpZiAoYzBfY29tcGFyZV9pbnRfcGVuZGluZygpKSB7CisJCXdyaXRlX2MwX2NvbXBhcmUocmVhZF9jMF9jb21wYXJlKCkpOworCQlpcnFfZGlzYWJsZV9oYXphcmQoKTsKKwkJaWYgKGMwX2NvbXBhcmVfaW50X3BlbmRpbmcoKSkKKwkJCXJldHVybiAwOworCX0KKworCWNudCA9IHJlYWRfYzBfY291bnQoKTsKKwljbnQgKz0gZGVsdGE7CisJd3JpdGVfYzBfY29tcGFyZShjbnQpOworCisJd2hpbGUgKChsb25nKShyZWFkX2MwX2NvdW50KCkgLSBjbnQpIDw9IDApCisJCTsJLyogV2FpdCBmb3IgZXhwaXJ5ICAqLworCisJaWYgKCFjMF9jb21wYXJlX2ludF9wZW5kaW5nKCkpCisJCXJldHVybiAwOworCisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvbXBhcmUoKSk7CisJaXJxX2Rpc2FibGVfaGF6YXJkKCk7CisJaWYgKGMwX2NvbXBhcmVfaW50X3BlbmRpbmcoKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIEZlZWxzIGxpa2UgYSByZWFsIGNvdW50IC8gY29tcGFyZSB0aW1lci4KKwkgKi8KKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2NwdWluaXQgbWlwc19jbG9ja2V2ZW50X2luaXQodm9pZCkKK3sKKwl1aW50NjRfdCBtaXBzX2ZyZXEgPSBtaXBzX2hwdF9mcmVxdWVuY3k7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKKwl1bnNpZ25lZCBpbnQgaXJxID0gTUlQU19DUFVfSVJRX0JBU0UgKyA3OworCisJaWYgKCFjcHVfaGFzX2NvdW50ZXIpCisJCXJldHVybjsKKworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwlzZXR1cF9zbXRjX2R1bW15X2Nsb2NrZXZlbnRfZGV2aWNlKCk7CisKKwkvKgorCSAqIE9uIFNNVEMgd2Ugb25seSByZWdpc3RlciBWUEUwJ3MgY29tcGFyZSBpbnRlcnJ1cHQgYXMgY2xvY2tldmVudAorCSAqIGRldmljZS4KKwkgKi8KKwlpZiAoY3B1KQorCQlyZXR1cm47CisjZW5kaWYKKworCWlmICghYzBfY29tcGFyZV9pbnRfdXNhYmxlKCkpCisJCXJldHVybjsKKworCWNkID0gJnBlcl9jcHUobWlwc19jbG9ja2V2ZW50X2RldmljZSwgY3B1KTsKKworCWNkLT5uYW1lCQk9ICJNSVBTIjsKKwljZC0+ZmVhdHVyZXMJCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVDsKKworCS8qIENhbGN1bGF0ZSB0aGUgbWluIC8gbWF4IGRlbHRhICovCisJY2QtPm11bHQJPSBkaXZfc2MoKHVuc2lnbmVkIGxvbmcpIG1pcHNfZnJlcSwgTlNFQ19QRVJfU0VDLCAzMik7CisJY2QtPnNoaWZ0CQk9IDMyOworCWNkLT5tYXhfZGVsdGFfbnMJPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmYsIGNkKTsKKwljZC0+bWluX2RlbHRhX25zCT0gY2xvY2tldmVudF9kZWx0YTJucygweDMwMCwgY2QpOworCisJY2QtPnJhdGluZwkJPSAzMDA7CisJY2QtPmlycQkJCT0gaXJxOworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKwljZC0+Y3B1bWFzawkJPSBDUFVfTUFTS19BTEw7CisjZWxzZQorCWNkLT5jcHVtYXNrCQk9IGNwdW1hc2tfb2ZfY3B1KGNwdSk7CisjZW5kaWYKKwljZC0+c2V0X25leHRfZXZlbnQJPSBtaXBzX25leHRfZXZlbnQ7CisJY2QtPnNldF9tb2RlCQk9IG1pcHNfc2V0X21vZGU7CisJY2QtPmV2ZW50X2hhbmRsZXIJPSBtaXBzX2V2ZW50X2hhbmRsZXI7CisKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2QpOworCisJaWYgKCFjcDBfdGltZXJfaXJxX2luc3RhbGxlZCkgeworI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKKyNkZWZpbmUgQ1BVQ1RSX0lNQVNLQklUICgweDEwMCA8PCBjcDBfY29tcGFyZV9pcnEpCisJCXNldHVwX2lycV9zbXRjKGlycSwgJmMwX2NvbXBhcmVfaXJxYWN0aW9uLCBDUFVDVFJfSU1BU0tCSVQpOworI2Vsc2UKKwkJc2V0dXBfaXJxKGlycSwgJmMwX2NvbXBhcmVfaXJxYWN0aW9uKTsKKyNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJCWNwMF90aW1lcl9pcnFfaW5zdGFsbGVkID0gMTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2hlYWQuUyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCmluZGV4IGJmMTY0YTUuLjIzNjc2ODcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaGVhZC5TCkBAIC0yNywxNiArMjcsNiBAQAogCiAjaW5jbHVkZSA8a2VybmVsLWVudHJ5LWluaXQuaD4KIAotCS5tYWNybwlBUkM2NF9UV0lERExFX1BDCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDNjQpIHx8IGRlZmluZWQoQ09ORklHX01BUFBFRF9LRVJORUwpCi0JLyogV2UgZ2V0IGxhdW5jaGVkIGF0IGEgWEtQSFlTIGFkZHJlc3MgYnV0IHRoZSBrZXJuZWwgaXMgbGlua2VkIHRvCi0JICAgcnVuIGF0IGEgS1NFRzAgYWRkcmVzcywgc28ganVtcCB0aGVyZS4gICovCi0JUFRSX0xBCXQwLCBcQGYKLQlqcgl0MAotXEA6Ci0jZW5kaWYKLQkuZW5kbQotCiAJLyoKIAkgKiBpbnB1dHMgYXJlIHRoZSB0ZXh0IG5hc2lkIGluIHQxLCBkYXRhIG5hc2lkIGluIHQyLgogCSAqLwpAQCAtMTU3LDcgKzE0NywxMSBAQAogCiAJc2V0dXBfYzBfc3RhdHVzX3ByaQogCi0JQVJDNjRfVFdJRERMRV9QQworCS8qIFdlIG1pZ2h0IG5vdCBnZXQgbGF1bmNoZWQgYXQgdGhlIGFkZHJlc3MgdGhlIGtlcm5lbCBpcyBsaW5rZWQgdG8sCisJICAgc28gd2UganVtcCB0aGVyZS4gICovCisJUFRSX0xBCXQwLCAwZgorCWpyCXQwCiswOgogCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lyaXhlbGYuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCmluZGV4IGI5OTdhZjcuLjc4NTJjN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeGVsZi5jCkBAIC0xMTcyLDggKzExNzIsOCBAQAogCXByc3RhdHVzLnByX3NpZ2hvbGQgPSBjdXJyZW50LT5ibG9ja2VkLnNpZ1swXTsKIAlwc2luZm8ucHJfcGlkID0gcHJzdGF0dXMucHJfcGlkID0gY3VycmVudC0+cGlkOwogCXBzaW5mby5wcl9wcGlkID0gcHJzdGF0dXMucHJfcHBpZCA9IGN1cnJlbnQtPnBhcmVudC0+cGlkOwotCXBzaW5mby5wcl9wZ3JwID0gcHJzdGF0dXMucHJfcGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7Ci0JcHNpbmZvLnByX3NpZCA9IHByc3RhdHVzLnByX3NpZCA9IHByb2Nlc3Nfc2Vzc2lvbihjdXJyZW50KTsKKwlwc2luZm8ucHJfcGdycCA9IHByc3RhdHVzLnByX3BncnAgPSB0YXNrX3BncnBfbnIoY3VycmVudCk7CisJcHNpbmZvLnByX3NpZCA9IHByc3RhdHVzLnByX3NpZCA9IHRhc2tfc2Vzc2lvbl9ucihjdXJyZW50KTsKIAlpZiAoY3VycmVudC0+cGlkID09IGN1cnJlbnQtPnRnaWQpIHsKIAkJLyoKIAkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgQWRkIGluIHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcml4c2lnLmMgYi9hcmNoL21pcHMva2VybmVsL2lyaXhzaWcuYwppbmRleCA4NWMyZTM4Li5hMGE5MTA1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2lyaXhzaWcuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lyaXhzaWcuYwpAQCAtNjA5LDcgKzYwOSw3IEBACiAJCXAgPSBsaXN0X2VudHJ5KF9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QsIHNpYmxpbmcpOwogCQlpZiAoKHR5cGUgPT0gSVJJWF9QX1BJRCkgJiYgcC0+cGlkICE9IHBpZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKHR5cGUgPT0gSVJJWF9QX1BHSUQpICYmIHByb2Nlc3NfZ3JvdXAocCkgIT0gcGlkKQorCQlpZiAoKHR5cGUgPT0gSVJJWF9QX1BHSUQpICYmIHRhc2tfcGdycF9ucihwKSAhPSBwaWQpCiAJCQljb250aW51ZTsKIAkJaWYgKChwLT5leGl0X3NpZ25hbCAhPSBTSUdDSExEKSkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggY2IwODAxNC4uZTdlZDBhYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL21pcHMva2VybmVsL21vZHVsZS5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAlyZXR1cm4gZTsKIH0KIAotLyogUHV0IGluIGRiZSBsaXN0IGlmIG5lY2Nlc3NhcnkuICovCisvKiBQdXQgaW4gZGJlIGxpc3QgaWYgbmVjZXNzYXJ5LiAqLwogaW50IG1vZHVsZV9maW5hbGl6ZShjb25zdCBFbGZfRWhkciAqaGRyLAogCQkgICAgY29uc3QgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCSAgICBzdHJ1Y3QgbW9kdWxlICptZSkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzaXJpeC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNpcml4LmMKaW5kZXggZWU3NzkwZC4uNGM0NzdjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNpcml4LmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNpcml4LmMKQEAgLTc2MywxMSArNzYzLDExIEBACiAJcHJpbnRrKCJbJXM6JWRdIHNldHBncnAoJWQpICIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZmxhZ3MpOwogI2VuZGlmCiAJaWYoIWZsYWdzKQotCQllcnJvciA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisJCWVycm9yID0gdGFza19wZ3JwX25yKGN1cnJlbnQpOwogCWVsc2UKIAkJZXJyb3IgPSBzeXNfc2V0c2lkKCk7CiAjaWZkZWYgREVCVUdfUFJPQ0dSUFMKLQlwcmludGsoInJldHVybmluZyAlZFxuIiwgcHJvY2Vzc19ncm91cChjdXJyZW50KSk7CisJcHJpbnRrKCJyZXR1cm5pbmcgJWRcbiIsIHRhc2tfcGdycF9ucihjdXJyZW50KSk7CiAjZW5kaWYKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggZTRiNWU2NC4uYzRlNjg2NiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKQEAgLTQwLDE3ICs0MCw2IEBACiAjaW5jbHVkZSA8aXJxLmg+CiAKIC8qCi0gKiBUaGUgaW50ZWdlciBwYXJ0IG9mIHRoZSBudW1iZXIgb2YgdXNlY3MgcGVyIGppZmZ5IGlzIHRha2VuIGZyb20gdGljaywKLSAqIGJ1dCB0aGUgZnJhY3Rpb25hbCBwYXJ0IGlzIG5vdCByZWNvcmRlZCwgc28gd2UgY2FsY3VsYXRlIGl0IHVzaW5nIHRoZQotICogaW5pdGlhbCB2YWx1ZSBvZiBIWi4gIFRoaXMgYWlkcyBzeXN0ZW1zIHdoZXJlIHRpY2sgaXNuJ3QgcmVhbGx5IGFuCi0gKiBpbnRlZ2VyIChlLmcuIGZvciBIWiA9IDEyOCkuCi0gKi8KLSNkZWZpbmUgVVNFQ1NfUEVSX0pJRkZZCQlUSUNLX1NJWkUKLSNkZWZpbmUgVVNFQ1NfUEVSX0pJRkZZX0ZSQUMJKCh1bnNpZ25lZCBsb25nKSh1MzIpKCgxMDAwMDAwVUxMIDw8IDMyKSAvIEhaKSkKLQotI2RlZmluZSBUSUNLX1NJWkUJKHRpY2tfbnNlYyAvIDEwMDApCi0KLS8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZQogICovCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwpAQCAtNzIsMTQgKzYxLDYgQEAKIAlyZXR1cm4gcnRjX21pcHNfc2V0X21tc3Mobm93LnR2X3NlYyk7CiB9CiAKLS8qIGhvdyBtYW55IGNvdW50ZXIgY3ljbGVzIGluIGEgamlmZnkgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN5Y2xlc19wZXJfamlmZnkgX19yZWFkX21vc3RseTsKLQotLyoKLSAqIE51bGwgdGltZXIgYWNrIGZvciBzeXN0ZW1zIG5vdCBuZWVkaW5nIG9uZSAoZS5nLiBpODI1NCkuCi0gKi8KLXN0YXRpYyB2b2lkIG51bGxfdGltZXJfYWNrKHZvaWQpIHsgLyogbm90aGluZyAqLyB9Ci0KIC8qCiAgKiBOdWxsIGhpZ2ggcHJlY2lzaW9uIHRpbWVyIGZ1bmN0aW9ucyBmb3Igc3lzdGVtcyBsYWNraW5nIG9uZS4KICAqLwpAQCAtODksMTQgKzcwLDYgQEAKIH0KIAogLyoKLSAqIFRpbWVyIGFjayBmb3IgYW4gUjRrLWNvbXBhdGlibGUgdGltZXIgb2YgYSBrbm93biBmcmVxdWVuY3kuCi0gKi8KLXN0YXRpYyB2b2lkIGMwX3RpbWVyX2Fjayh2b2lkKQotewotCXdyaXRlX2MwX2NvbXBhcmUocmVhZF9jMF9jb21wYXJlKCkpOwotfQotCi0vKgogICogSGlnaCBwcmVjaXNpb24gdGltZXIgZnVuY3Rpb25zIGZvciBhIFI0ay1jb21wYXRpYmxlIHRpbWVyLgogICovCiBzdGF0aWMgY3ljbGVfdCBjMF9ocHRfcmVhZCh2b2lkKQpAQCAtMTA1LDcgKzc4LDYgQEAKIH0KIAogaW50ICgqbWlwc190aW1lcl9zdGF0ZSkodm9pZCk7Ci12b2lkICgqbWlwc190aW1lcl9hY2spKHZvaWQpOwogCiAvKgogICogbG9jYWxfdGltZXJfaW50ZXJydXB0KCkgZG9lcyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZwpAQCAtMTM1LDM1ICsxMDcsNiBAQAogRVhQT1JUX1NZTUJPTChwZXJmX2lycSk7CiAKIC8qCi0gKiBUaW1lciBpbnRlcnJ1cHQKLSAqLwotaW50IGNwMF9jb21wYXJlX2lycTsKLQotLyoKLSAqIFBlcmZvcm1hbmNlIGNvdW50ZXIgSVJRIG9yIC0xIGlmIHNoYXJlZCB3aXRoIHRpbWVyCi0gKi8KLWludCBjcDBfcGVyZmNvdW50X2lycTsKLUVYUE9SVF9TWU1CT0xfR1BMKGNwMF9wZXJmY291bnRfaXJxKTsKLQotLyoKLSAqIFBvc3NpYmx5IGhhbmRsZSBhIHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0LgotICogUmV0dXJuIHRydWUgaWYgdGhlIHRpbWVyIGludGVycnVwdCBzaG91bGQgbm90IGJlIGNoZWNrZWQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3BlcmZfaXJxKGludCByMikKLXsKLQkvKgotCSAqIFRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIG92ZXJmbG93IGludGVycnVwdCBtYXkgYmUgc2hhcmVkIHdpdGggdGhlCi0JICogdGltZXIgaW50ZXJydXB0IChjcDBfcGVyZmNvdW50X2lycSA8IDApLiBJZiBpdCBpcyBhbmQgYQotCSAqIHBlcmZvcm1hbmNlIGNvdW50ZXIgaGFzIG92ZXJmbG93ZWQgKHBlcmZfaXJxKCkgPT0gSVJRX0hBTkRMRUQpCi0JICogYW5kIHdlIGNhbid0IHJlbGlhYmx5IGRldGVybWluZSBpZiBhIGNvdW50ZXIgaW50ZXJydXB0IGhhcyBhbHNvCi0JICogaGFwcGVuZWQgKCFyMikgdGhlbiBkb24ndCBjaGVjayBmb3IgYSB0aW1lciBpbnRlcnJ1cHQuCi0JICovCi0JcmV0dXJuIChjcDBfcGVyZmNvdW50X2lycSA8IDApICYmCi0JCXBlcmZfaXJxKCkgPT0gSVJRX0hBTkRMRUQgJiYKLQkJIXIyOwotfQotCi0vKgogICogdGltZV9pbml0KCkgLSBpdCBkb2VzIHRoZSBmb2xsb3dpbmcgdGhpbmdzLgogICoKICAqIDEpIHBsYXRfdGltZV9pbml0KCkgLQpAQCAtMjI4LDEwMyArMTcxLDQ4IEBACiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIAotc3RhdGljIGludCBtaXBzX25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1bnNpZ25lZCBpbnQgY250OwotCWludCByZXM7Ci0KLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZwZmxhZ3M7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXZwZmxhZ3MgPSBkdnBlKCk7Ci0jZW5kaWYKLQljbnQgPSByZWFkX2MwX2NvdW50KCk7Ci0JY250ICs9IGRlbHRhOwotCXdyaXRlX2MwX2NvbXBhcmUoY250KTsKLQlyZXMgPSAoKGxvbmcpKHJlYWRfYzBfY291bnQoKSAtIGNudCApID4gMCkgPyAtRVRJTUUgOiAwOwotI2lmZGVmIENPTkZJR19NSVBTX01UX1NNVEMKLQlldnBlKHZwZmxhZ3MpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZCBtaXBzX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCi17Ci0JLyogTm90aGluZyB0byBkbyAuLi4gICovCi19Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlKTsKLXN0YXRpYyBpbnQgY3AwX3RpbWVyX2lycV9pbnN0YWxsZWQ7Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWNvbnN0IGludCByMiA9IGNwdV9oYXNfbWlwc19yMjsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZDsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCi0JLyoKLQkgKiBTdWNrYWdlIGFsZXJ0OgotCSAqIEJlZm9yZSBSMiBvZiB0aGUgYXJjaGl0ZWN0dXJlIHRoZXJlIHdhcyBubyB3YXkgdG8gc2VlIGlmIGEKLQkgKiBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdCB3YXMgcGVuZGluZywgc28gd2UgaGF2ZSB0byBydW4KLQkgKiB0aGUgcGVyZm9ybWFuY2UgY291bnRlciBpbnRlcnJ1cHQgaGFuZGxlciBhbnl3YXkuCi0JICovCi0JaWYgKGhhbmRsZV9wZXJmX2lycShyMikpCi0JCWdvdG8gb3V0OwotCi0JLyoKLQkgKiBUaGUgc2FtZSBhcHBsaWVzIHRvIHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0cy4gIEJ1dCB3aXRoIHRoZQotCSAqIGFib3ZlIHdlIG5vdyBrbm93IHRoYXQgdGhlIHJlYXNvbiB3ZSBnb3QgaGVyZSBtdXN0IGJlIGEgdGltZXIKLQkgKiBpbnRlcnJ1cHQuICBCZWluZyB0aGUgcGFyYW5vaWFjcyB3ZSBhcmUgd2UgY2hlY2sgYW55d2F5LgotCSAqLwotCWlmICghcjIgfHwgKHJlYWRfYzBfY2F1c2UoKSAmICgxIDw8IDMwKSkpIHsKLQkJYzBfdGltZXJfYWNrKCk7Ci0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCQlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQpCi0JCQlnb3RvIG91dDsKLQkJY3B1ID0gMDsKLSNlbmRpZgotCQljZCA9ICZwZXJfY3B1KG1pcHNfY2xvY2tldmVudF9kZXZpY2UsIGNwdSk7Ci0JCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKLQl9Ci0KLW91dDoKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHRpbWVyX2lycWFjdGlvbiA9IHsKLQkuaGFuZGxlciA9IHRpbWVyX2ludGVycnVwdCwKLSNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCwKLSNlbHNlCi0JLmZsYWdzID0gSVJRRl9ESVNBQkxFRCB8IElSUUZfUEVSQ1BVLAotI2VuZGlmCi0JLm5hbWUgPSAidGltZXIiLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfbWlwc19jbG9ja3NvdXJjZSh2b2lkKQordm9pZCBfX2luaXQgY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHVuc2lnbmVkIGludCBjbG9jaykKIHsKIAl1NjQgdGVtcDsKIAl1MzIgc2hpZnQ7CiAKKwkvKiBGaW5kIGEgc2hpZnQgdmFsdWUgKi8KKwlmb3IgKHNoaWZ0ID0gMzI7IHNoaWZ0ID4gMDsgc2hpZnQtLSkgeworCQl0ZW1wID0gKHU2NCkgTlNFQ19QRVJfU0VDIDw8IHNoaWZ0OworCQlkb19kaXYodGVtcCwgY2xvY2spOworCQlpZiAoKHRlbXAgPj4gMzIpID09IDApCisJCQlicmVhazsKKwl9CisJY3MtPnNoaWZ0ID0gc2hpZnQ7CisJY3MtPm11bHQgPSAodTMyKSB0ZW1wOworfQorCit2b2lkIF9fY3B1aW5pdCBjbG9ja2V2ZW50X3NldF9jbG9jayhzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCwKKwl1bnNpZ25lZCBpbnQgY2xvY2spCit7CisJdTY0IHRlbXA7CisJdTMyIHNoaWZ0OworCisJLyogRmluZCBhIHNoaWZ0IHZhbHVlICovCisJZm9yIChzaGlmdCA9IDMyOyBzaGlmdCA+IDA7IHNoaWZ0LS0pIHsKKwkJdGVtcCA9ICh1NjQpIE5TRUNfUEVSX1NFQyA8PCBzaGlmdDsKKwkJZG9fZGl2KHRlbXAsIGNsb2NrKTsKKwkJaWYgKCh0ZW1wID4+IDMyKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWNkLT5zaGlmdCA9IHNoaWZ0OworCWNkLT5tdWx0ID0gKHUzMikgdGVtcDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGluaXRfbWlwc19jbG9ja3NvdXJjZSh2b2lkKQorewogCWlmICghbWlwc19ocHRfZnJlcXVlbmN5IHx8IGNsb2Nrc291cmNlX21pcHMucmVhZCA9PSBudWxsX2hwdF9yZWFkKQogCQlyZXR1cm47CiAKIAkvKiBDYWxjbGF0ZSBhIHNvbWV3aGF0IHJlYXNvbmFibGUgcmF0aW5nIHZhbHVlICovCiAJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAyMDAgKyBtaXBzX2hwdF9mcmVxdWVuY3kgLyAxMDAwMDAwMDsKLQkvKiBGaW5kIGEgc2hpZnQgdmFsdWUgKi8KLQlmb3IgKHNoaWZ0ID0gMzI7IHNoaWZ0ID4gMDsgc2hpZnQtLSkgewotCQl0ZW1wID0gKHU2NCkgTlNFQ19QRVJfU0VDIDw8IHNoaWZ0OwotCQlkb19kaXYodGVtcCwgbWlwc19ocHRfZnJlcXVlbmN5KTsKLQkJaWYgKCh0ZW1wID4+IDMyKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCWNsb2Nrc291cmNlX21pcHMuc2hpZnQgPSBzaGlmdDsKLQljbG9ja3NvdXJjZV9taXBzLm11bHQgPSAodTMyKXRlbXA7CisKKwljbG9ja3NvdXJjZV9zZXRfY2xvY2soJmNsb2Nrc291cmNlX21pcHMsIG1pcHNfaHB0X2ZyZXF1ZW5jeSk7CiAKIAljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbWlwcyk7CiB9CkBAIC0zMzcsMTYzICsyMjUsNiBAQAogewogfQogCi0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotREVGSU5FX1BFUl9DUFUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSwgc210Y19kdW1teV9jbG9ja2V2ZW50X2RldmljZSk7Ci0KLXN0YXRpYyB2b2lkIHNtdGNfc2V0X21vZGUoZW51bSBjbG9ja19ldmVudF9tb2RlIG1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLX0KLQotaW50IGR1bW15Y250W05SX0NQVVNdOwotCi1zdGF0aWMgdm9pZCBtaXBzX2Jyb2FkY2FzdChjcHVtYXNrX3QgbWFzaykKLXsKLQl1bnNpZ25lZCBpbnQgY3B1OwotCi0JZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKQotCQlzbXRjX3NlbmRfaXBpKGNwdSwgU01UQ19DTE9DS19USUNLLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBfc210Y19kdW1teV9jbG9ja2V2ZW50X2RldmljZSh2b2lkKQotewotCS8vdWludDY0X3QgbWlwc19mcmVxID0gbWlwc19ocHRfXmZyZXF1ZW5jeTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkOwotCi0JY2QgPSAmcGVyX2NwdShzbXRjX2R1bW15X2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOwotCi0JY2QtPm5hbWUJCT0gIlNNVEMiOwotCWNkLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9EVU1NWTsKLQotCS8qIENhbGN1bGF0ZSB0aGUgbWluIC8gbWF4IGRlbHRhICovCi0JY2QtPm11bHQJPSAwOyAvL2Rpdl9zYygodW5zaWduZWQgbG9uZykgbWlwc19mcmVxLCBOU0VDX1BFUl9TRUMsIDMyKTsKLQljZC0+c2hpZnQJCT0gMDsgLy8zMjsKLQljZC0+bWF4X2RlbHRhX25zCT0gMDsgLy9jbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmYsIGNkKTsKLQljZC0+bWluX2RlbHRhX25zCT0gMDsgLy9jbG9ja2V2ZW50X2RlbHRhMm5zKDB4MzAsIGNkKTsKLQotCWNkLT5yYXRpbmcJCT0gMjAwOwotCWNkLT5pcnEJCQk9IDE3OyAvLy0xOwotLy8JaWYgKGNwdSkKLS8vCQljZC0+Y3B1bWFzawk9IENQVV9NQVNLX0FMTDsgLy8gY3B1bWFza19vZl9jcHUoY3B1KTsKLS8vCWVsc2UKLQkJY2QtPmNwdW1hc2sJPSBjcHVtYXNrX29mX2NwdShjcHUpOwotCi0JY2QtPnNldF9tb2RlCQk9IHNtdGNfc2V0X21vZGU7Ci0KLQljZC0+YnJvYWRjYXN0CQk9IG1pcHNfYnJvYWRjYXN0OwotCi0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBtaXBzX2V2ZW50X2hhbmRsZXIoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQotewotfQotCi0vKgotICogRklYTUU6IFRoaXMgZG9lc24ndCBob2xkIGZvciB0aGUgcmVsb2NhdGVkIEU5MDAwIGNvbXBhcmUgaW50ZXJydXB0LgotICovCi1zdGF0aWMgaW50IGMwX2NvbXBhcmVfaW50X3BlbmRpbmcodm9pZCkKLXsKLQlyZXR1cm4gKHJlYWRfYzBfY2F1c2UoKSA+PiBjcDBfY29tcGFyZV9pcnEpICYgMHgxMDA7Ci19Ci0KLXN0YXRpYyBpbnQgYzBfY29tcGFyZV9pbnRfdXNhYmxlKHZvaWQpCi17Ci0JY29uc3QgdW5zaWduZWQgaW50IGRlbHRhID0gMHgzMDAwMDA7Ci0JdW5zaWduZWQgaW50IGNudDsKLQotCS8qCi0JICogSVA3IGFscmVhZHkgcGVuZGluZz8gIFRyeSB0byBjbGVhciBpdCBieSBhY2tpbmcgdGhlIHRpbWVyLgotCSAqLwotCWlmIChjMF9jb21wYXJlX2ludF9wZW5kaW5nKCkpIHsKLQkJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvbXBhcmUoKSk7Ci0JCWlycV9kaXNhYmxlX2hhemFyZCgpOwotCQlpZiAoYzBfY29tcGFyZV9pbnRfcGVuZGluZygpKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0JY250ID0gcmVhZF9jMF9jb3VudCgpOwotCWNudCArPSBkZWx0YTsKLQl3cml0ZV9jMF9jb21wYXJlKGNudCk7Ci0KLQl3aGlsZSAoKGxvbmcpKHJlYWRfYzBfY291bnQoKSAtIGNudCkgPD0gMCkKLQkJOwkvKiBXYWl0IGZvciBleHBpcnkgICovCi0KLQlpZiAoIWMwX2NvbXBhcmVfaW50X3BlbmRpbmcoKSkKLQkJcmV0dXJuIDA7Ci0KLQl3cml0ZV9jMF9jb21wYXJlKHJlYWRfYzBfY29tcGFyZSgpKTsKLQlpcnFfZGlzYWJsZV9oYXphcmQoKTsKLQlpZiAoYzBfY29tcGFyZV9pbnRfcGVuZGluZygpKQotCQlyZXR1cm4gMDsKLQotCS8qCi0JICogRmVlbHMgbGlrZSBhIHJlYWwgY291bnQgLyBjb21wYXJlIHRpbWVyLgotCSAqLwotCXJldHVybiAxOwotfQotCi12b2lkIF9fY3B1aW5pdCBtaXBzX2Nsb2NrZXZlbnRfaW5pdCh2b2lkKQotewotCXVpbnQ2NF90IG1pcHNfZnJlcSA9IG1pcHNfaHB0X2ZyZXF1ZW5jeTsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkOwotCXVuc2lnbmVkIGludCBpcnEgPSBNSVBTX0NQVV9JUlFfQkFTRSArIDc7Ci0KLQlpZiAoIWNwdV9oYXNfY291bnRlcikKLQkJcmV0dXJuOwotCi0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCXNldHVwX3NtdGNfZHVtbXlfY2xvY2tldmVudF9kZXZpY2UoKTsKLQotCS8qCi0JICogT24gU01UQyB3ZSBvbmx5IHJlZ2lzdGVyIFZQRTAncyBjb21wYXJlIGludGVycnVwdCBhcyBjbG9ja2V2ZW50Ci0JICogZGV2aWNlLgotCSAqLwotCWlmIChjcHUpCi0JCXJldHVybjsKLSNlbmRpZgotCi0JaWYgKCFjMF9jb21wYXJlX2ludF91c2FibGUoKSkKLQkJcmV0dXJuOwotCi0JY2QgPSAmcGVyX2NwdShtaXBzX2Nsb2NrZXZlbnRfZGV2aWNlLCBjcHUpOwotCi0JY2QtPm5hbWUJCT0gIk1JUFMiOwotCWNkLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9UOwotCi0JLyogQ2FsY3VsYXRlIHRoZSBtaW4gLyBtYXggZGVsdGEgKi8KLQljZC0+bXVsdAk9IGRpdl9zYygodW5zaWduZWQgbG9uZykgbWlwc19mcmVxLCBOU0VDX1BFUl9TRUMsIDMyKTsKLQljZC0+c2hpZnQJCT0gMzI7Ci0JY2QtPm1heF9kZWx0YV9ucwk9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3ZmZmZmZmZiwgY2QpOwotCWNkLT5taW5fZGVsdGFfbnMJPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4MzAwLCBjZCk7Ci0KLQljZC0+cmF0aW5nCQk9IDMwMDsKLQljZC0+aXJxCQkJPSBpcnE7Ci0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotCWNkLT5jcHVtYXNrCQk9IENQVV9NQVNLX0FMTDsKLSNlbHNlCi0JY2QtPmNwdW1hc2sJCT0gY3B1bWFza19vZl9jcHUoY3B1KTsKLSNlbmRpZgotCWNkLT5zZXRfbmV4dF9ldmVudAk9IG1pcHNfbmV4dF9ldmVudDsKLQljZC0+c2V0X21vZGUJCT0gbWlwc19zZXRfbW9kZTsKLQljZC0+ZXZlbnRfaGFuZGxlcgk9IG1pcHNfZXZlbnRfaGFuZGxlcjsKLQotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZCk7Ci0KLQlpZiAoIWNwMF90aW1lcl9pcnFfaW5zdGFsbGVkKSB7Ci0jaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwotI2RlZmluZSBDUFVDVFJfSU1BU0tCSVQgKDB4MTAwIDw8IGNwMF9jb21wYXJlX2lycSkKLQkJc2V0dXBfaXJxX3NtdGMoaXJxLCAmdGltZXJfaXJxYWN0aW9uLCBDUFVDVFJfSU1BU0tCSVQpOwotI2Vsc2UKLQkJc2V0dXBfaXJxKGlycSwgJnRpbWVyX2lycWFjdGlvbik7Ci0jZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwotCQljcDBfdGltZXJfaXJxX2luc3RhbGxlZCA9IDE7Ci0JfQotfQotCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKIAlwbGF0X3RpbWVfaW5pdCgpOwpAQCAtNTEyLDE0ICsyNDMsNiBAQAogCQlpZiAoIWNsb2Nrc291cmNlX21pcHMucmVhZCkgewogCQkJLyogTm8gZXh0ZXJuYWwgaGlnaCBwcmVjaXNpb24gdGltZXIgLS0gdXNlIFI0ay4gICovCiAJCQljbG9ja3NvdXJjZV9taXBzLnJlYWQgPSBjMF9ocHRfcmVhZDsKLQotCQkJaWYgKCFtaXBzX3RpbWVyX3N0YXRlKSB7Ci0JCQkJLyogTm8gZXh0ZXJuYWwgdGltZXIgaW50ZXJydXB0IC0tIHVzZSBSNGsuICAqLwotCQkJCW1pcHNfdGltZXJfYWNrID0gYzBfdGltZXJfYWNrOwotCQkJCS8qIENhbGN1bGF0ZSBjYWNoZSBwYXJhbWV0ZXJzLiAgKi8KLQkJCQljeWNsZXNfcGVyX2ppZmZ5ID0KLQkJCQkJKG1pcHNfaHB0X2ZyZXF1ZW5jeSArIEhaIC8gMikgLyBIWjsKLQkJCX0KIAkJfQogCQlpZiAoIW1pcHNfaHB0X2ZyZXF1ZW5jeSkKIAkJCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IGNhbGlicmF0ZV9ocHQoKTsKQEAgLTUyOCwyOSArMjUxLDggQEAKIAkJcHJpbnRrKCJVc2luZyAldS4lMDN1IE1IeiBoaWdoIHByZWNpc2lvbiB0aW1lci5cbiIsCiAJCSAgICAgICAoKG1pcHNfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAvIDEwMDAsCiAJCSAgICAgICAoKG1pcHNfaHB0X2ZyZXF1ZW5jeSArIDUwMCkgLyAxMDAwKSAlIDEwMDApOwotCi0jaWZkZWYgQ09ORklHX0lSUV9DUFUKLQkJc2V0dXBfaXJxKE1JUFNfQ1BVX0lSUV9CQVNFICsgNywgJnRpbWVyX2lycWFjdGlvbik7Ci0jZW5kaWYKIAl9CiAKLQlpZiAoIW1pcHNfdGltZXJfYWNrKQotCQkvKiBObyB0aW1lciBpbnRlcnJ1cHQgYWNrIChlLmcuIGk4MjU0KS4gICovCi0JCW1pcHNfdGltZXJfYWNrID0gbnVsbF90aW1lcl9hY2s7Ci0KLQkvKgotCSAqIENhbGwgYm9hcmQgc3BlY2lmaWMgdGltZXIgaW50ZXJydXB0IHNldHVwLgotCSAqCi0JICogdGhpcyBwb2ludGVyIG11c3QgYmUgc2V0dXAgaW4gbWFjaGluZSBzZXR1cCByb3V0aW5lLgotCSAqCi0JICogRXZlbiBpZiBhIG1hY2hpbmUgY2hvb3NlcyB0byB1c2UgYSBsb3ctbGV2ZWwgdGltZXIgaW50ZXJydXB0LAotCSAqIGl0IHN0aWxsIG5lZWRzIHRvIHNldHVwIHRoZSB0aW1lcl9pcnFhY3Rpb24uCi0JICogSW4gdGhhdCBjYXNlLCBpdCBtaWdodCBiZSBiZXR0ZXIgdG8gc2V0IHRpbWVyX2lycWFjdGlvbi5oYW5kbGVyCi0JICogdG8gYmUgTlVMTCBmdW5jdGlvbiBzbyB0aGF0IHdlIGFyZSBzdXJlIHRoZSBoaWdoLWxldmVsIGNvZGUKLQkgKiBpcyBub3QgaW52b2tlZCBhY2NpZGVudGFsbHkuCi0JICovCi0JcGxhdF90aW1lcl9zZXR1cCgmdGltZXJfaXJxYWN0aW9uKTsKLQogCWluaXRfbWlwc19jbG9ja3NvdXJjZSgpOwogCW1pcHNfY2xvY2tldmVudF9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggYmJmMDFiOC4uZmE1MDA3OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMzE0LDcgKzMxNCw3IEBACiAJX19zaG93X3JlZ3MocmVncyk7CiAJcHJpbnRfbW9kdWxlcygpOwogCXByaW50aygiUHJvY2VzcyAlcyAocGlkOiAlZCwgdGhyZWFkaW5mbz0lcCwgdGFzaz0lcClcbiIsCi0JICAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGN1cnJlbnRfdGhyZWFkX2luZm8oKSwgY3VycmVudCk7CisJICAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudF90aHJlYWRfaW5mbygpLCBjdXJyZW50KTsKIAlzaG93X3N0YWNrdHJhY2UoY3VycmVudCwgcmVncyk7CiAJc2hvd19jb2RlKCh1bnNpZ25lZCBpbnQgX191c2VyICopIHJlZ3MtPmNwMF9lcGMpOwogCXByaW50aygiXG4iKTsKQEAgLTEzMzYsNiArMTMzNiwxNyBAQAogZXh0ZXJuIHZvaWQgdGxiX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBmbHVzaF90bGJfaGFuZGxlcnModm9pZCk7CiAKKy8qCisgKiBUaW1lciBpbnRlcnJ1cHQKKyAqLworaW50IGNwMF9jb21wYXJlX2lycTsKKworLyoKKyAqIFBlcmZvcm1hbmNlIGNvdW50ZXIgSVJRIG9yIC0xIGlmIHNoYXJlZCB3aXRoIHRpbWVyCisgKi8KK2ludCBjcDBfcGVyZmNvdW50X2lycTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNwMF9wZXJmY291bnRfaXJxKTsKKwogdm9pZCBfX2luaXQgcGVyX2NwdV90cmFwX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xlbW90ZS9sbTJlL3NldHVwLmMgYi9hcmNoL21pcHMvbGVtb3RlL2xtMmUvc2V0dXAuYwppbmRleCAwOTMxNGEyLi4yY2M2NzQ1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbGVtb3RlL2xtMmUvc2V0dXAuYworKysgYi9hcmNoL21pcHMvbGVtb3RlL2xtMmUvc2V0dXAuYwpAQCAtNTMsMTEgKzUzLDYgQEAKIHVuc2lnbmVkIGludCBtZW1zaXplOwogdW5zaWduZWQgaW50IGhpZ2htZW1zaXplID0gMDsKIAotdm9pZCBfX2luaXQgcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0Jc2V0dXBfaXJxKE1JUFNfQ1BVX0lSUV9CQVNFICsgNywgaXJxKTsKLX0KLQogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKIAkvKiBzZXR1cCBtaXBzIHI0ayB0aW1lciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCA1Njk5Yzc3Li5mYTYzNmZjIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAgKi8KIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfaW5pdCh0c2spKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvb3Byb2ZpbGUvS2NvbmZpZyBiL2FyY2gvbWlwcy9vcHJvZmlsZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYjZmMjM1Li4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9vcHJvZmlsZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotCi1tZW51ICJQcm9maWxpbmcgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCi1jb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAotCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCi0KLQotY29uZmlnIE9QUk9GSUxFCi0JdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQUk9GSUxJTkcgJiYgIU1JUFNfTVRfU01UQyAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCi0JICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKLQkgIGFuZCBhcHBsaWNhdGlvbnMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWVuZG1lbnUKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2ktZXhjaXRlLmMgYi9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYwppbmRleCAzYzg2Yzc3Li44YTU2ODc2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYworKysgYi9hcmNoL21pcHMvcGNpL3BjaS1leGNpdGUuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJCW9jZF93cml0ZWwoMHgwMDAwMDAwMCwgYmFyICsgMHgxMDApOwogCX0KIAotCS8qIEZpbmFsbHksIGVuYWJsZSB0aGUgUENJIGludGVydXB0ICovCisJLyogRmluYWxseSwgZW5hYmxlIHRoZSBQQ0kgaW50ZXJydXB0ICovCiAjaWYgVVNCX0lSUSA+IDcKIAlzZXRfYzBfaW50Y29udHJvbCgxIDw8IFVTQl9JUlEpOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL0tjb25maWcgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9LY29uZmlnCmluZGV4IGFiYmQwYmIuLjZiMjkzY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL0tjb25maWcKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvS2NvbmZpZwpAQCAtNCwxMSArNCwxMyBAQAogCiBjb25maWcgUE1DX01TUDQyMDBfRVZBTAogCWJvb2wgIlBNQy1TaWVycmEgTVNQNDIwMCBFdmFsIEJvYXJkIgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBJUlFfTVNQX1NMUAogCXNlbGVjdCBIV19IQVNfUENJCiAKIGNvbmZpZyBQTUNfTVNQNDIwMF9HVwogCWJvb2wgIlBNQy1TaWVycmEgTVNQNDIwMCBWb0lQIEdhdGV3YXkiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IElSUV9NU1BfU0xQCiAJc2VsZWN0IEhXX0hBU19QQ0kKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfdGltZS5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfdGltZS5jCmluZGV4IGYyMjFkNDcuLjdjZmVkYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX3RpbWUuYworKysgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF90aW1lLmMKQEAgLTg2LDggKzg2LDUgQEAKICNpZmRlZiBDT05GSUdfSVJRX01TUF9DSUMKIAkvKiB3ZSBhcmUgdXNpbmcgdGhlIHZwZTAgY291bnRlciBmb3IgdGltZXIgaW50ZXJydXB0cyAqLwogCXNldHVwX2lycShNU1BfSU5UX1ZQRTBfVElNRVIsIGlycSk7Ci0jZWxzZQotCS8qIHdlIGFyZSB1c2luZyB0aGUgbWlwcyBjb3VudGVyIGZvciB0aW1lciBpbnRlcnJ1cHRzICovCi0Jc2V0dXBfaXJxKE1TUF9JTlRfVElNRVIsIGlycSk7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMgYi9hcmNoL21pcHMvcG1jLXNpZXJyYS95b3NlbWl0ZS9zZXR1cC5jCmluZGV4IDAxNWZjYzMuLjg1NTk3N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc2V0dXAuYwpAQCAtMTM3LDExICsxMzcsNiBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKLXsKLQlzZXR1cF9pcnEoNywgaXJxKTsKLX0KLQogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKIHsKIAltaXBzX2hwdF9mcmVxdWVuY3kgPSBjcHVfY2xvY2tfZnJlcSAvIDI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCmluZGV4IDg1NjY0OWMuLjFiYjY5MmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jCkBAIC0zNzQsMTQgKzM3NCwxMyBAQAogCXJldHVybiBpcnE7CiB9CiAKLWV4dGVybiB2b2lkIGlwMjdfcnRfdGltZXJfaW50ZXJydXB0KHZvaWQpOwotCiBhc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpOworCWV4dGVybiB1bnNpZ25lZCBpbnQgcnRfdGltZXJfaXJxOwogCiAJaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA0KQotCQlpcDI3X3J0X3RpbWVyX2ludGVycnVwdCgpOworCQlkb19JUlEocnRfdGltZXJfaXJxKTsKIAllbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMikJLyogUElfSU5UX1BFTkRfMCBvciBDQ19QRU5EX3tBfEJ9ICovCiAJCWlwMjdfZG9faXJxX21hc2swKCk7CiAJZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDMpCS8qIFBJX0lOVF9QRU5EXzEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IGI3YjM0NzkuLmQ0NjdiZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtMyw2ICszLDcgQEAKICAqIENvcHl0aWdodCAoQykgMTk5OSwgMjAwMCBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9iY2QuaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC0yNSwyMiArMjYsOCBAQAogI2luY2x1ZGUgPGFzbS9zbi9zbjAvaXAyNy5oPgogI2luY2x1ZGUgPGFzbS9zbi9zbjAvaHViLmg+CiAKLS8qCi0gKiBUaGlzIGlzIGEgaGFjazsgd2UgcmVhbGx5IG5lZWQgdG8gZmlndXJlIHRoZXNlIHZhbHVlcyBvdXQgZHluYW1pY2FsbHkKLSAqCi0gKiBTaW5jZSA4MDAgbnMgd29ya3MgdmVyeSB3ZWxsIHdpdGggdmFyaW91cyBIVUIgZnJlcXVlbmNpZXMsIHN1Y2ggYXMKLSAqIDM2MCwgMzgwLCAzOTAgYW5kIDQwMCBNSFosIHdlIHVzZSA4MDAgbnMgcnRjIGN5Y2xlIHRpbWUuCi0gKgotICogUmFsZjogd2hpY2ggY2xvY2sgcmF0ZSBpcyB1c2VkIHRvIGZlZWQgdGhlIGNvdW50ZXI/Ci0gKi8KLSNkZWZpbmUgTlNFQ19QRVJfQ1lDTEUJCTgwMAotI2RlZmluZSBDWUNMRVNfUEVSX1NFQwkJKE5TRUNfUEVSX1NFQy9OU0VDX1BFUl9DWUNMRSkKLSNkZWZpbmUgQ1lDTEVTX1BFUl9KSUZGWQkoQ1lDTEVTX1BFUl9TRUMvSFopCi0KICNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjdF9jdXJbTlJfQ1BVU107CS8qIFdoYXQgY291bnRlciBzaG91bGQgYmUgYXQgbmV4dCB0aW1lciBpcnEgKi8KLQogI2lmIDAKIHN0YXRpYyBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKIHsKQEAgLTg2LDM2ICs3Myw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGludCBydF90aW1lcl9pcnE7Ci0KLXZvaWQgaXAyN19ydF90aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBjcHVBID0gY3B1dG9zbGljZShjcHUpID09IDA7Ci0JdW5zaWduZWQgaW50IGlycSA9IHJ0X3RpbWVyX2lycTsKLQotCWlycV9lbnRlcigpOwotCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwotCi1hZ2FpbjoKLQlMT0NBTF9IVUJfUyhjcHVBID8gUElfUlRfUEVORF9BIDogUElfUlRfUEVORF9CLCAwKTsJLyogQWNrICAqLwotCWN0X2N1cltjcHVdICs9IENZQ0xFU19QRVJfSklGRlk7Ci0JTE9DQUxfSFVCX1MoY3B1QSA/IFBJX1JUX0NPTVBBUkVfQSA6IFBJX1JUX0NPTVBBUkVfQiwgY3RfY3VyW2NwdV0pOwotCi0JaWYgKExPQ0FMX0hVQl9MKFBJX1JUX0NPVU5UKSA+PSBjdF9jdXJbY3B1XSkKLQkJZ290byBhZ2FpbjsKLQotCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOwkJLyoga3N0YXQgb25seSBmb3IgYm9vdGNwdT8gKi8KLQotCWlmIChjcHUgPT0gMCkKLQkJZG9fdGltZXIoMSk7Ci0KLQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUoZ2V0X2lycV9yZWdzKCkpKTsKLQotCXdyaXRlX3NlcXVubG9jaygmeHRpbWVfbG9jayk7Ci0JaXJxX2V4aXQoKTsKLX0KLQogLyogSW5jbHVkZXMgZm9yIGlvYzNfaW5pdCgpLiAgKi8KICNpbmNsdWRlIDxhc20vc24vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vc24vc24wL2FkZHJzLmg+CkBAIC0xNTQsNiArMTExLDQ2IEBACiAgICAgICAgIHJldHVybiBta3RpbWUoeWVhciwgbW9udGgsIGRhdGUsIGhvdXIsIG1pbiwgc2VjKTsKIH0KIAorc3RhdGljIGludCBydF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgc2xpY2UgPSBjcHV0b3NsaWNlKGNwdSkgPT0gMDsKKwl1bnNpZ25lZCBsb25nIGNudDsKKworCWNudCA9IExPQ0FMX0hVQl9MKFBJX1JUX0NPVU5UKTsKKwljbnQgKz0gZGVsdGE7CisJTE9DQUxfSFVCX1Moc2xpY2UgPyBQSV9SVF9DT01QQVJFX0EgOiBQSV9SVF9DT01QQVJFX0IsIGNudCk7CisKKwlyZXR1cm4gTE9DQUxfSFVCX0woUElfUlRfQ09VTlQpID49IGNudCA/IC1FVElNRSA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIHJ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQzoKKwkJLyogVGhlIG9ubHkgbW9kZSBzdXBwb3J0ZWQgKi8KKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJLyogTm90aGluZyB0byBkbyAgKi8KKwkJYnJlYWs7CisJfQorfQorCitzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHJ0X2Nsb2NrX2V2ZW50X2RldmljZSA9IHsKKwkubmFtZQkJPSAiSFVCLVJUIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAorCisJLnJhdGluZwkJPSAzMDAsCisJLnNldF9uZXh0X2V2ZW50CT0gcnRfc2V0X25leHRfZXZlbnQsCisJLnNldF9tb2RlCT0gcnRfc2V0X21vZGUsCit9OworCiBzdGF0aWMgdm9pZCBlbmFibGVfcnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiB9CkBAIC0xNzEsNiArMTY4LDIwIEBACiAJLmVvaQkJPSBlbmFibGVfcnRfaXJxLAogfTsKIAordW5zaWduZWQgaW50IHJ0X3RpbWVyX2lycTsKKworc3RhdGljIGlycXJldHVybl90IGlwMjdfcnRfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9ICZydF9jbG9ja19ldmVudF9kZXZpY2U7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgc2xpY2UgPSBjcHV0b3NsaWNlKGNwdSkgPT0gMDsKKworCUxPQ0FMX0hVQl9TKHNsaWNlID8gUElfUlRfUEVORF9BIDogUElfUlRfUEVORF9CLCAwKTsJLyogQWNrICAqLworCWNkLT5ldmVudF9oYW5kbGVyKGNkKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gcnRfaXJxYWN0aW9uID0gewogCS5oYW5kbGVyCT0gKGlycV9oYW5kbGVyX3QpIGlwMjdfcnRfdGltZXJfaW50ZXJydXB0LAogCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVELApAQCAtMTc4LDI2ICsxODksNDMgQEAKIAkubmFtZQkJPSAidGltZXIiCiB9OwogCi12b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKLXsKLQlpbnQgaXJxbm8gID0gYWxsb2NhdGVfaXJxbm8oKTsKKy8qCisgKiBUaGlzIGlzIGEgaGFjazsgd2UgcmVhbGx5IG5lZWQgdG8gZmlndXJlIHRoZXNlIHZhbHVlcyBvdXQgZHluYW1pY2FsbHkKKyAqCisgKiBTaW5jZSA4MDAgbnMgd29ya3MgdmVyeSB3ZWxsIHdpdGggdmFyaW91cyBIVUIgZnJlcXVlbmNpZXMsIHN1Y2ggYXMKKyAqIDM2MCwgMzgwLCAzOTAgYW5kIDQwMCBNSFosIHdlIHVzZSA4MDAgbnMgcnRjIGN5Y2xlIHRpbWUuCisgKgorICogUmFsZjogd2hpY2ggY2xvY2sgcmF0ZSBpcyB1c2VkIHRvIGZlZWQgdGhlIGNvdW50ZXI/CisgKi8KKyNkZWZpbmUgTlNFQ19QRVJfQ1lDTEUJCTgwMAorI2RlZmluZSBDWUNMRVNfUEVSX1NFQwkJKE5TRUNfUEVSX1NFQyAvIE5TRUNfUEVSX0NZQ0xFKQogCi0JaWYgKGlycW5vIDwgMCkKK3N0YXRpYyB2b2lkIF9faW5pdCBpcDI3X3J0X2Nsb2NrX2V2ZW50X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9ICZydF9jbG9ja19ldmVudF9kZXZpY2U7CisJdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgaXJxID0gYWxsb2NhdGVfaXJxbm8oKTsKKworCWlmIChpcnEgPCAwKQogCQlwYW5pYygiQ2FuJ3QgYWxsb2NhdGUgaW50ZXJydXB0IG51bWJlciBmb3IgdGltZXIgaW50ZXJydXB0Iik7CiAKLQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaXJxbm8sICZydF9pcnFfdHlwZSwgaGFuZGxlX3BlcmNwdV9pcnEpOworCXJ0X3RpbWVyX2lycSA9IGlycTsKIAotCS8qIG92ZXItd3JpdGUgdGhlIGhhbmRsZXIsIHdlIHVzZSBvdXIgb3duIHdheSAqLwotCWlycS0+aGFuZGxlciA9IG5vX2FjdGlvbjsKKwljZC0+aXJxCQkJPSBpcnEsCisJY2QtPmNwdW1hc2sJCT0gY3B1bWFza19vZl9jcHUoY3B1KSwKIAotCS8qIHNldHVwIGlycWFjdGlvbiAqLwotCWlycV9kZXNjW2lycW5vXS5zdGF0dXMgfD0gSVJRX1BFUl9DUFU7Ci0KLQlydF90aW1lcl9pcnEgPSBpcnFubzsKIAkvKgotCSAqIE9ubHkgbmVlZGVkIHRvIGdldCAvcHJvYy9pbnRlcnJ1cHQgdG8gZGlzcGxheSB0aW1lciBpcnEgc3RhdHMKKwkgKiBDYWxjdWxhdGUgdGhlIG1pbiAvIG1heCBkZWx0YQogCSAqLwotCXNldHVwX2lycShpcnFubywgJnJ0X2lycWFjdGlvbik7CisJY2QtPm11bHQgICAgICAgIAk9CisJCWRpdl9zYygodW5zaWduZWQgbG9uZykgQ1lDTEVTX1BFUl9TRUMsIE5TRUNfUEVSX1NFQywgMzIpOworCWNkLT5zaGlmdCAgICAgICAgICAgICAgID0gMzI7CisJY2QtPm1heF9kZWx0YV9ucyAgICAgICAgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N2ZmZmZmZmYsIGNkKTsKKwljZC0+bWluX2RlbHRhX25zICAgICAgICA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHgzMDAsIGNkKTsKKwljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoY2QpOworCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnJ0X2lycV90eXBlLCBoYW5kbGVfcGVyY3B1X2lycSk7CisJc2V0dXBfaXJxKGlycSwgJnJ0X2lycWFjdGlvbik7CiB9CiAKIHN0YXRpYyBjeWNsZV90IGh1Yl9ydF9yZWFkKHZvaWQpCkBAIC0yMDYsNyArMjM0LDcgQEAKIH0KIAogc3RydWN0IGNsb2Nrc291cmNlIGh0X3J0X2Nsb2Nrc291cmNlID0gewotCS5uYW1lCT0gIkhVQiIsCisJLm5hbWUJPSAiSFVCLVJUIiwKIAkucmF0aW5nCT0gMjAwLAogCS5yZWFkCT0gaHViX3J0X3JlYWQsCiAJLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDUyKSwKQEAgLTIxNCwxMSArMjQyLDE3IEBACiAJLmZsYWdzCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCi12b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGlwMjdfcnRfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZodF9ydF9jbG9ja3NvdXJjZSk7CiB9CiAKK3ZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCit7CisJaXAyN19ydF9jbG9ja19ldmVudF9pbml0KCk7CisJaXAyN19ydF9jbG9ja3NvdXJjZV9pbml0KCk7Cit9CisKIHZvaWQgX19pbml0IGNwdV90aW1lX2luaXQodm9pZCkKIHsKIAlsYm9hcmRfdCAqYm9hcmQ7CkBAIC0yNDgsMTcgKzI4MiwxMiBAQAogCSAqIG5vZGUgYW5kIHRpbWVvdXRzIHdpbGwgbm90IGhhcHBlbiB0aGVyZS4KIAkgKi8KIAlpZiAoZ2V0X2NvbXBhY3Rfbm9kZWlkKCkgPT0gY25vZGUpIHsKLQkJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJTE9DQUxfSFVCX1MoUElfUlRfRU5fQSwgMSk7CiAJCUxPQ0FMX0hVQl9TKFBJX1JUX0VOX0IsIDEpOwogCQlMT0NBTF9IVUJfUyhQSV9QUk9GX0VOX0EsIDApOwogCQlMT0NBTF9IVUJfUyhQSV9QUk9GX0VOX0IsIDApOwotCQljdF9jdXJbY3B1XSA9IENZQ0xFU19QRVJfSklGRlk7Ci0JCUxPQ0FMX0hVQl9TKFBJX1JUX0NPTVBBUkVfQSwgY3RfY3VyW2NwdV0pOwogCQlMT0NBTF9IVUJfUyhQSV9SVF9DT1VOVCwgMCk7CiAJCUxPQ0FMX0hVQl9TKFBJX1JUX1BFTkRfQSwgMCk7Ci0JCUxPQ0FMX0hVQl9TKFBJX1JUX0NPTVBBUkVfQiwgY3RfY3VyW2NwdV0pOwotCQlMT0NBTF9IVUJfUyhQSV9SVF9DT1VOVCwgMCk7CiAJCUxPQ0FMX0hVQl9TKFBJX1JUX1BFTkRfQiwgMCk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLXNldHVwLmMKaW5kZXggZmM3NWJmYy4uMTAyNGJmNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1zZXR1cC5jCkBAIC04MCwxMiArODAsNiBAQAogCXByaW50aygiJWQgTUh6IENQVSBkZXRlY3RlZFxuIiwgbWlwc19ocHRfZnJlcXVlbmN5ICogMiAvIDEwMDAwMDApOwogfQogCi12b2lkIF9faW5pdCBwbGF0X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKLXsKLQlpcnEtPmhhbmRsZXIgPSBub19hY3Rpb247Ci0Jc2V0dXBfaXJxKE1JUFNfQ1BVX0lSUV9CQVNFICsgNywgaXJxKTsKLX0KLQogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlib2FyZF9iZV9pbml0ID0gaXAzMl9iZV9pbml0OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NtcC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NtcC5jCmluZGV4IDZlYWMzNmQuLjAyYjI2NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvc21wLmMKQEAgLTY5LDggKzY5LDkgQEAKIAogdm9pZCBiY20xNDgwX3NtcF9maW5pc2godm9pZCkKIHsKLQlleHRlcm4gdm9pZCBiY20xNDgwX3RpbWVfaW5pdCh2b2lkKTsKLQliY20xNDgwX3RpbWVfaW5pdCgpOworCWV4dGVybiB2b2lkIHNiMTQ4MF9jbG9ja2V2ZW50X2luaXQodm9pZCk7CisKKwlzYjE0ODBfY2xvY2tldmVudF9pbml0KCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3RpbWUuYwppbmRleCA1YjRiZmJiLi5jNzMwNzQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC90aW1lLmMKQEAgLTI3LDkgKzI3LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CkBAIC0xMDEsMjUgKzEwMCwzNiBAQAogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgkvKiBzaHVkZHVwIGdjYyAqLworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgogCQk7CiAJfQogfQogCi1zdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHNpYnl0ZV9ocHRfY2xvY2tldmVudCA9IHsKLQkubmFtZQkJPSAiYmNtMTQ4MC1jb3VudGVyIiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKLQkuc2V0X21vZGUJPSBzaWJ5dGVfc2V0X21vZGUsCi0JLnNoaWZ0CQk9IDMyLAotCS5pcnEJCT0gMCwKLX07CitzdGF0aWMgaW50IHNpYnl0ZV9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkKQoreworCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdm9pZCBfX2lvbWVtICp0aW1lcl9pbml0OworCXVuc2lnbmVkIGludCBjbnQ7CisJaW50IHJlczsKKworCXRpbWVyX2luaXQgPSBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoY3B1LCBSX1NDRF9USU1FUl9JTklUKSk7CisJY250ID0gX19yYXdfcmVhZHEodGltZXJfaW5pdCk7CisJY250ICs9IGRlbHRhOworCV9fcmF3X3dyaXRlcShjbnQsIHRpbWVyX2luaXQpOworCXJlcyA9ICgobG9uZykoX19yYXdfcmVhZHEodGltZXJfaW5pdCkgLSBjbnQgKSA+IDApID8gLUVUSU1FIDogMDsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlLCBzaWJ5dGVfaHB0X2Nsb2NrZXZlbnQpOwogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2lieXRlX2NvdW50ZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QgPSAmc2lieXRlX2hwdF9jbG9ja2V2ZW50OwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QgPSAmcGVyX2NwdShzaWJ5dGVfaHB0X2Nsb2NrZXZlbnQsIGNwdSk7CiAKIAkvKiBSZXNldCB0aGUgdGltZXIgKi8KLQlfX3Jhd193cml0ZXEoTV9TQ0RfVElNRVJfRU5BQkxFfE1fU0NEX1RJTUVSX01PREVfQ09OVElOVU9VUywKKwlfX3Jhd193cml0ZXEoTV9TQ0RfVElNRVJfRU5BQkxFIHwgTV9TQ0RfVElNRVJfTU9ERV9DT05USU5VT1VTLAogCSAgICAgICAgICAgICBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoY3B1LCBSX1NDRF9USU1FUl9DRkcpKSk7CiAJY2QtPmV2ZW50X2hhbmRsZXIoY2QpOwogCkBAIC0xNDAsMjYgKzE1MCwyMyBAQAogICogY2FsbGVkIGRpcmVjdGx5IGZyb20gaXJxX2hhbmRsZXIuUyB3aGVuIElQWzRdIGlzIHNldCBkdXJpbmcgYW4KICAqIGludGVycnVwdAogICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2IxNDgwX2Nsb2NrZXZlbnRfaW5pdCh2b2lkKQordm9pZCBfX2NwdWluaXQgc2IxNDgwX2Nsb2NrZXZlbnRfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgaW50IGlycSA9IEtfQkNNMTQ4MF9JTlRfVElNRVJfMCArIGNwdTsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9ICZwZXJfY3B1KHNpYnl0ZV9ocHRfY2xvY2tldmVudCwgY3B1KTsKKworCWNkLT5uYW1lCQk9ICJiY20xNDgwLWNvdW50ZXIiOworCWNkLT5mZWF0dXJlcwkJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8CisJCQkJICBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOworCWNkLT5zZXRfbmV4dF9ldmVudAk9IHNpYnl0ZV9uZXh0X2V2ZW50OworCWNkLT5zZXRfbW9kZQkJPSBzaWJ5dGVfc2V0X21vZGU7CisJY2QtPmlycQkJCT0gaXJxOworCWNsb2NrZXZlbnRfc2V0X2Nsb2NrKGNkLCBCQ00xNDgwX0hQVF9WQUxVRSk7CiAKIAlzZXR1cF9pcnEoaXJxLCAmc2lieXRlX2NvdW50ZXJfaXJxYWN0aW9uKTsKIH0KIAotdm9pZCBiY20xNDgwX3RpbWVyX2ludGVycnVwdCh2b2lkKQotewotCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JaW50IGlycSA9IEtfQkNNMTQ4MF9JTlRfVElNRVJfMCArIGNwdTsKLQotCS8qIFJlc2V0IHRoZSB0aW1lciAqLwotCV9fcmF3X3dyaXRlcShNX1NDRF9USU1FUl9FTkFCTEV8TV9TQ0RfVElNRVJfTU9ERV9DT05USU5VT1VTLAotCSAgICAgIElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUihjcHUsIFJfU0NEX1RJTUVSX0NGRykpKTsKLQotCWxsX3RpbWVyX2ludGVycnVwdChpcnEpOwotfQotCiBzdGF0aWMgY3ljbGVfdCBiY20xNDgwX2hwdF9yZWFkKHZvaWQpCiB7CiAJLyogV2UgYXNzdW1lIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHh0aW1lX2xvY2sgaGVsZC4gKi8KQEAgLTE2OCw5ICsxNzUsMjYgQEAKIAlyZXR1cm4gKGppZmZpZXMgKyAxKSAqIChCQ00xNDgwX0hQVF9WQUxVRSAvIEhaKSAtIGNvdW50OwogfQogCitzdHJ1Y3QgY2xvY2tzb3VyY2UgYmNtMTQ4MF9jbG9ja3NvdXJjZSA9IHsKKwkubmFtZQk9ICJNSVBTIiwKKwkucmF0aW5nCT0gMjAwLAorCS5yZWFkCT0gYmNtMTQ4MF9ocHRfcmVhZCwKKwkubWFzawk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdAk9IDMyLAorCS5mbGFncwk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorfTsKKwordm9pZCBfX2luaXQgc2IxNDgwX2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzID0gJmJjbTE0ODBfY2xvY2tzb3VyY2U7CisKKwljbG9ja3NvdXJjZV9zZXRfY2xvY2soY3MsIEJDTTE0ODBfSFBUX1ZBTFVFKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcihjcyk7Cit9CisKIHZvaWQgX19pbml0IGJjbTE0ODBfaHB0X3NldHVwKHZvaWQpCiB7Ci0JY2xvY2tzb3VyY2VfbWlwcy5yZWFkID0gYmNtMTQ4MF9ocHRfcmVhZDsKIAltaXBzX2hwdF9mcmVxdWVuY3kgPSBCQ00xNDgwX0hQVF9WQUxVRTsKKwlzYjE0ODBfY2xvY2tzb3VyY2VfaW5pdCgpOwogCXNiMTQ4MF9jbG9ja2V2ZW50X2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggNzY1OTE3NC4uNTAwZDE3ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTQwMCw0MyArNDAwLDExIEBACiAKICNlbmRpZiAJLyogQ09ORklHX0tHREIgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIHNiMTI1MF90aW1lcl9pbnRlcnJ1cHQodm9pZCkKLXsKLQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCBpcnEgPSBLX0lOVF9USU1FUl8wICsgY3B1OwotCi0JaXJxX2VudGVyKCk7Ci0Ja3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7Ci0KLQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQotCS8qIEFDSyBpbnRlcnJ1cHQgKi8KLQlfX19fcmF3X3dyaXRlcShNX1NDRF9USU1FUl9FTkFCTEUgfCBNX1NDRF9USU1FUl9NT0RFX0NPTlRJTlVPVVMsCi0JCSAgICAgICBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoY3B1LCBSX1NDRF9USU1FUl9DRkcpKSk7Ci0KLQkvKgotCSAqIGNhbGwgdGhlIGdlbmVyaWMgdGltZXIgaW50ZXJydXB0IGhhbmRsaW5nCi0JICovCi0JZG9fdGltZXIoMSk7Ci0KLQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotCi0JLyoKLQkgKiBJbiBVUCBtb2RlLCB3ZSBjYWxsIGxvY2FsX3RpbWVyX2ludGVycnVwdCgpIHRvIGRvIHByb2ZpbGluZwotCSAqIGFuZCBwcm9jZXNzIGFjY291dGluZy4KLQkgKgotCSAqIEluIFNNUCBtb2RlLCBsb2NhbF90aW1lcl9pbnRlcnJ1cHQoKSBpcyBpbnZva2VkIGJ5IGFwcHJvcHJpYXRlCi0JICogbG93LWxldmVsIGxvY2FsIHRpbWVyIGludGVycnVwdCBoYW5kbGVyLgotCSAqLwotCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEpOwotCi0JaXJxX2V4aXQoKTsKLX0KLQogZXh0ZXJuIHZvaWQgc2IxMjUwX21haWxib3hfaW50ZXJydXB0KHZvaWQpOwogCiBhc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2godm9pZCkKIHsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGludCBwZW5kaW5nOwogCiAJLyoKQEAgLTQ1NCw3ICs0MjIsNyBAQAogCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykgLyogQ1BVIHBlcmZvcm1hbmNlIGNvdW50ZXIgaW50ZXJydXB0ICovCiAJCWRvX0lSUShNSVBTX0NQVV9JUlFfQkFTRSArIDcpOwogCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA0KQotCQlzYjEyNTBfdGltZXJfaW50ZXJydXB0KCk7CisJCWRvX0lSUShLX0lOVF9USU1FUl8wICsgY3B1KTsgCS8qIHNiMTI1MF90aW1lcl9pbnRlcnJ1cHQoKSAqLwogCiAjaWZkZWYgQ09ORklHX1NNUAogCWVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYwppbmRleCBjMzhlMWYzLi5hYWE0ZjMwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9zbXAuYwpAQCAtNTcsOCArNTcsOSBAQAogCiB2b2lkIHNiMTI1MF9zbXBfZmluaXNoKHZvaWQpCiB7Ci0JZXh0ZXJuIHZvaWQgc2IxMjUwX3RpbWVfaW5pdCh2b2lkKTsKLQlzYjEyNTBfdGltZV9pbml0KCk7CisJZXh0ZXJuIHZvaWQgc2IxMjUwX2Nsb2NrZXZlbnRfaW5pdCh2b2lkKTsKKworCXNiMTI1MF9jbG9ja2V2ZW50X2luaXQoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3RpbWUuYwppbmRleCBmZTExZmVkLi45ZWY1NDYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC90aW1lLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvdGltZS5jCkBAIC0xMDAsNiArMTAwLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoJLyogc2h1ZGR1cCBnY2MgKi8KKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKIAkJOwogCX0KIH0KQEAgLTE0NCw3OSArMTQ1LDcgQEAKIAkubmFtZQkJPSAidGltZXIiLAogfTsKIAotLyoKLSAqIFRoZSBnZW5lcmFsIHB1cnBvc2UgdGltZXIgdGlja3MgYXQgMSBNaHogaW5kZXBlbmRlbnQgaWYKLSAqIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0KLSAqLwotc3RhdGljIHZvaWQgc2lieXRlX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQotewotCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0Jdm9pZCBfX2lvbWVtICp0aW1lcl9jZmcsICp0aW1lcl9pbml0OwotCi0JdGltZXJfY2ZnID0gSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKGNwdSwgUl9TQ0RfVElNRVJfQ0ZHKSk7Ci0JdGltZXJfaW5pdCA9IElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUihjcHUsIFJfU0NEX1RJTUVSX0lOSVQpKTsKLQotCXN3aXRjaCAobW9kZSkgewotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6Ci0JCV9fcmF3X3dyaXRlcSgwLCB0aW1lcl9jZmcpOwotCQlfX3Jhd193cml0ZXEoKFZfU0NEX1RJTUVSX0ZSRVEgLyBIWikgLSAxLCB0aW1lcl9pbml0KTsKLQkJX19yYXdfd3JpdGVxKE1fU0NEX1RJTUVSX0VOQUJMRSB8IE1fU0NEX1RJTUVSX01PREVfQ09OVElOVU9VUywKLQkJCSAgICAgdGltZXJfY2ZnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6Ci0JCS8qIFN0b3AgdGhlIHRpbWVyIHVudGlsIHdlIGFjdHVhbGx5IHByb2dyYW0gYSBzaG90ICovCi0JY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQkJX19yYXdfd3JpdGVxKDAsIHRpbWVyX2NmZyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CS8qIHNodWRkdXAgZ2NjICovCi0JCTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXNpYnl0ZV9uZXh0X2V2ZW50KHVuc2lnbmVkIGxvbmcgZGVsdGEsIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKLXsKLQl1bnNpZ25lZCBpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZvaWQgX19pb21lbSAqdGltZXJfY2ZnLCAqdGltZXJfaW5pdDsKLQotCXRpbWVyX2NmZyA9IElPQUREUihBX1NDRF9USU1FUl9SRUdJU1RFUihjcHUsIFJfU0NEX1RJTUVSX0NGRykpOwotCXRpbWVyX2luaXQgPSBJT0FERFIoQV9TQ0RfVElNRVJfUkVHSVNURVIoY3B1LCBSX1NDRF9USU1FUl9JTklUKSk7Ci0KLQlfX3Jhd193cml0ZXEoMCwgdGltZXJfY2ZnKTsKLQlfX3Jhd193cml0ZXEoZGVsdGEsIHRpbWVyX2luaXQpOwotCV9fcmF3X3dyaXRlcShNX1NDRF9USU1FUl9FTkFCTEUsIHRpbWVyX2NmZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBzaWJ5dGVfaHB0X2Nsb2NrZXZlbnQgPSB7Ci0JLm5hbWUJCT0gInNiMTI1MC1jb3VudGVyIiwKLQkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQywKLQkuc2V0X21vZGUJPSBzaWJ5dGVfc2V0X21vZGUsCi0JLnNldF9uZXh0X2V2ZW50CT0gc2lieXRlX25leHRfZXZlbnQsCi0JLnNoaWZ0CQk9IDMyLAotCS5pcnEJCT0gMCwKLX07Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBzaWJ5dGVfY291bnRlcl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCA9ICZzaWJ5dGVfaHB0X2Nsb2NrZXZlbnQ7Ci0KLQljZC0+ZXZlbnRfaGFuZGxlcihjZCk7Ci0KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHNpYnl0ZV9pcnFhY3Rpb24gPSB7Ci0JLmhhbmRsZXIJPSBzaWJ5dGVfY291bnRlcl9oYW5kbGVyLAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9QRVJDUFUsCi0JLm5hbWUJCT0gInRpbWVyIiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzYjEyNTBfY2xvY2tldmVudF9pbml0KHZvaWQpCit2b2lkIF9fY3B1aW5pdCBzYjEyNTBfY2xvY2tldmVudF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2QgPSAmc2lieXRlX2hwdF9jbG9ja2V2ZW50OwogCXVuc2lnbmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CkBAIC0yNDksMTIgKzE3OCw2IEBACiAJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGNkKTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKLXsKLQlzYjEyNTBfY2xvY2tzb3VyY2VfaW5pdCgpOwotCXNiMTI1MF9jbG9ja2V2ZW50X2luaXQoKTsKLX0KLQogLyoKICAqIFRoZSBIUFQgaXMgZnJlZSBydW5uaW5nIGZyb20gU0IxMjUwX0hQVF9WQUxVRSBkb3duIHRvIDAgdGhlbiBzdGFydHMgb3ZlcgogICogYWdhaW4uCkBAIC0yNjcsMyArMTkwLDI2IEBACiAKIAlyZXR1cm4gU0IxMjUwX0hQVF9WQUxVRSAtIGNvdW50OwogfQorCitzdHJ1Y3QgY2xvY2tzb3VyY2UgYmNtMTI1MF9jbG9ja3NvdXJjZSA9IHsKKwkubmFtZQk9ICJNSVBTIiwKKwkucmF0aW5nCT0gMjAwLAorCS5yZWFkCT0gc2IxMjUwX2hwdF9yZWFkLAorCS5tYXNrCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCisJLnNoaWZ0CT0gMzIsCisJLmZsYWdzCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCit2b2lkIF9faW5pdCBzYjEyNTBfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQoreworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3MgPSAmYmNtMTI1MF9jbG9ja3NvdXJjZTsKKworCWNsb2Nrc291cmNlX3NldF9jbG9jayhjcywgVl9TQ0RfVElNRVJfRlJFUSk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoY3MpOworfQorCit2b2lkIF9faW5pdCBwbGF0X3RpbWVfaW5pdCh2b2lkKQoreworCXNiMTI1MF9jbG9ja3NvdXJjZV9pbml0KCk7CisJc2IxMjUwX2Nsb2NrZXZlbnRfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zd2FybS9zZXR1cC5jCmluZGV4IDhiM2VmMGUuLjA4MGM5NjYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc3dhcm0vc2V0dXAuYworKysgYi9hcmNoL21pcHMvc2lieXRlL3N3YXJtL3NldHVwLmMKQEAgLTY5LDMxICs2OSw2IEBACiAJcmV0dXJuICJTaUJ5dGUgIiBTSUJZVEVfQk9BUkRfTkFNRTsKIH0KIAotdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKLXsKLSNpZiBkZWZpbmVkKENPTkZJR19TSUJZVEVfU0IxMjUwKSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMTEyWCkKLQkvKiBTZXR1cCBIUFQgKi8KLQlzYjEyNTBfaHB0X3NldHVwKCk7Ci0jZW5kaWYKLX0KLQotdm9pZCBfX2luaXQgcGxhdF90aW1lcl9zZXR1cChzdHJ1Y3QgaXJxYWN0aW9uICppcnEpCi17Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlIGRvbid0IHNldCB1cCBpcnFhY3Rpb24sIGJlY2F1c2Ugd2Ugd2lsbCBkZWxpdmVyIHRpbWVyCi0gICAgICAgICAqIGludGVycnVwdHMgdGhyb3VnaCBsb3ctbGV2ZWwgKGRpcmVjdCkgbWVhY2hhbmlzbS4KLSAgICAgICAgICovCi0KLSAgICAgICAgLyogV2Ugb25seSBuZWVkIHRvIHNldHVwIHRoZSBnZW5lcmljIHRpbWVyICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0lCWVRFX0JDTTF4NTUpIHx8IGRlZmluZWQoQ09ORklHX1NJQllURV9CQ00xeDgwKQotCWJjbTE0ODBfdGltZV9pbml0KCk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TSUJZVEVfU0IxMjUwKSB8fCBkZWZpbmVkKENPTkZJR19TSUJZVEVfQkNNMTEyWCkKLQlzYjEyNTBfdGltZV9pbml0KCk7Ci0jZWxzZQotI2Vycm9yIGludmFsaWQgU2lCeXRlIGJvYXJkIGNvbmZpZ3VyYXRpb24KLSNlbmRpZgotfQotCiBpbnQgc3dhcm1fYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzX2ZpeHVwKQogewogCWlmICghaXNfZml4dXAgJiYgKHJlZ3MtPmNwMF9jYXVzZSAmIDQpKSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3BjaW10LmMgYi9hcmNoL21pcHMvc25pL3BjaW10LmMKaW5kZXggMzliYjE1Zi4uNGRmMDcwZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9wY2ltdC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJCS8qCiAJCSAqIE5vdGU6IEFTSUMgUENJJ3MgYnVpbHRpbiBpbnRlcnJ1cHQgYWNoa25vd2xlZGdlIGZlYXR1cmUgaXMKIAkJICogYnJva2VuLiAgVXNpbmcgaXQgbWF5IHJlc3VsdCBpbiBsb3NzIG9mIHNvbWUgb3IgYWxsIGk4MjU5Ci0JCSAqIGludGVydXB0cywgc28gZG9uJ3QgdXNlIFBDSU1UX0lOVF9BQ0tOT1dMRURHRSAuLi4KKwkJICogaW50ZXJydXB0cywgc28gZG9uJ3QgdXNlIFBDSU1UX0lOVF9BQ0tOT1dMRURHRSAuLi4KIAkJICovCiAJCWlycSA9IGk4MjU5X2lycSgpOwogCQlpZiAodW5saWtlbHkoaXJxIDwgMCkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3RpbWUuYyBiL2FyY2gvbWlwcy9zbmkvdGltZS5jCmluZGV4IGI4MDg3NzMuLjA5MTBiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zbmkvdGltZS5jCisrKyBiL2FyY2gvbWlwcy9zbmkvdGltZS5jCkBAIC0xMjEsMTUgKzEyMSw2IEBACiAJc2V0dXBfcGl0X3RpbWVyKCk7CiB9CiAKLS8qCi0gKiBSNGsgY291bnRlciBiYXNlZCB0aW1lciBpbnRlcnJ1cHQuIFdvcmtzIG9uIFJNMjAwLTIyNSBhbmQgcG9zc2libHkKLSAqIG90aGVycyBidXQgbm90IG9uIFJNNDAwCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBzbmlfY3B1X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24gKmlycSkKLXsKLSAgICAgICAgc2V0dXBfaXJxKFNOSV9NSVBTX0lSUV9DUFVfVElNRVIsIGlycSk7Ci19Ci0KIHZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQogewogCXN3aXRjaCAoc25pX2JyZF90eXBlKSB7CkBAIC0xMzksMTUgKzEzMCw2IEBACiAJY2FzZSBTTklfQlJEX01JTklUT1dFUjoKIAkgICAgICAgIHNuaV9hMjByX3RpbWVyX3NldHVwKGlycSk7CiAJICAgICAgICBicmVhazsKLQotCWNhc2UgU05JX0JSRF9QQ0lfVE9XRVI6Ci0JY2FzZSBTTklfQlJEX1JNMjAwOgotCWNhc2UgU05JX0JSRF9QQ0lfTVRPV0VSOgotCWNhc2UgU05JX0JSRF9QQ0lfREVTS1RPUDoKLQljYXNlIFNOSV9CUkRfUENJX1RPV0VSX0NQTFVTOgotCWNhc2UgU05JX0JSRF9QQ0lfTVRPV0VSX0NQTFVTOgotCSAgICAgICAgc25pX2NwdV90aW1lcl9zZXR1cChpcnEpOwotCSAgICAgICAgYnJlYWs7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTI3L2NvbW1vbi90eDQ5Mjdfc2V0dXAuYyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jCmluZGV4IDhjZTA5ODkuLjM2YzVmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MjcvY29tbW9uL3R4NDkyN19zZXR1cC5jCkBAIC03MiwyMiArNzIsNiBAQAogI2VuZGlmCiB9CiAKLXZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotCXNldHVwX2lycShUWDQ5MjdfSVJRX0NQVV9USU1FUiwgaXJxKTsKLQotI2lmZGVmIENPTkZJR19UT1NISUJBX1JCVFg0OTI3Ci0JewotCQlleHRlcm4gdm9pZCB0b3NoaWJhX3JidHg0OTI3X3RpbWVyX3NldHVwKHN0cnVjdCBpcnFhY3Rpb24KLQkJCQkJCQkgKmlycSk7Ci0JCXRvc2hpYmFfcmJ0eDQ5MjdfdGltZXJfc2V0dXAoaXJxKTsKLQl9Ci0jZW5kaWYKLQotCXJldHVybjsKLX0KLQotCiAjaWZkZWYgREVCVUcKIHZvaWQgcHJpbnRfY3AwKGNoYXIgKmtleSwgaW50IG51bSwgY2hhciAqbmFtZSwgdTMyIHZhbCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3NldHVwLmMgYi9hcmNoL21pcHMvdHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5MjcvdG9zaGliYV9yYnR4NDkyN19zZXR1cC5jCmluZGV4IGI5NzEwMmEuLmM3NDcwZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eDQ5MjcvdG9zaGliYV9yYnR4NDkyNy90b3NoaWJhX3JidHg0OTI3X3NldHVwLmMKKysrIGIvYXJjaC9taXBzL3R4NDkyNy90b3NoaWJhX3JidHg0OTI3L3Rvc2hpYmFfcmJ0eDQ5Mjdfc2V0dXAuYwpAQCAtOTQsNyArOTQsNiBAQAogI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX0VGV0ZVICAgICAgICggMSA8PCAgMyApCiAjZGVmaW5lIFRPU0hJQkFfUkJUWDQ5MjdfU0VUVVBfU0VUVVAgICAgICAgKCAxIDw8ICA0ICkKICNkZWZpbmUgVE9TSElCQV9SQlRYNDkyN19TRVRVUF9USU1FX0lOSVQgICAoIDEgPDwgIDUgKQotI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1RJTUVSX1NFVFVQICggMSA8PCAgNiApCiAjZGVmaW5lIFRPU0hJQkFfUkJUWDQ5MjdfU0VUVVBfUENJQklPUyAgICAgKCAxIDw8ICA3ICkKICNkZWZpbmUgVE9TSElCQV9SQlRYNDkyN19TRVRVUF9QQ0kxICAgICAgICAoIDEgPDwgIDggKQogI2RlZmluZSBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1BDSTIgICAgICAgICggMSA8PCAgOSApCkBAIC0xMDgsNyArMTA3LDYgQEAKICAgICAoVE9TSElCQV9SQlRYNDkyN19TRVRVUF9OT05FIHwgVE9TSElCQV9SQlRYNDkyN19TRVRVUF9JTkZPIHwKICAgICAgVE9TSElCQV9SQlRYNDkyN19TRVRVUF9XQVJOIHwgVE9TSElCQV9SQlRYNDkyN19TRVRVUF9FUk9SIHwKICAgICAgVE9TSElCQV9SQlRYNDkyN19TRVRVUF9FRldGVSB8IFRPU0hJQkFfUkJUWDQ5MjdfU0VUVVBfU0VUVVAgfAotICAgICBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1RJTUVfSU5JVCB8IFRPU0hJQkFfUkJUWDQ5MjdfU0VUVVBfVElNRVJfU0VUVVAKICAgICAgfCBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1BDSUJJT1MgfCBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1BDSTEgfAogICAgICBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1BDSTIgfCBUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1BDSTY2KTsKICNlbmRpZgpAQCAtOTQ3LDE0ICs5NDUsNiBAQAogCiB9CiAKLXZvaWQgX19pbml0IHRvc2hpYmFfcmJ0eDQ5MjdfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotCVRPU0hJQkFfUkJUWDQ5MjdfU0VUVVBfRFBSSU5USyhUT1NISUJBX1JCVFg0OTI3X1NFVFVQX1RJTUVSX1NFVFVQLAotCQkJCSAgICAgICAiLVxuIik7Ci0JVE9TSElCQV9SQlRYNDkyN19TRVRVUF9EUFJJTlRLKFRPU0hJQkFfUkJUWDQ5MjdfU0VUVVBfVElNRVJfU0VUVVAsCi0JCQkJICAgICAgICIrXG4iKTsKLX0KLQogc3RhdGljIGludCBfX2luaXQgdG9zaGliYV9yYnR4NDkyN19ydGNfaW5pdCh2b2lkKQogewogCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgX19pbml0ZGF0YSByZXMgPSB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9zZXR1cC5jIGIvYXJjaC9taXBzL3R4NDkzOC9jb21tb24vc2V0dXAuYwppbmRleCBhYjQwODIyLi4zYmE0MTAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHg0OTM4L2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy90eDQ5MzgvY29tbW9uL3NldHVwLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KQEAgLTQzLDggKzQzLDMgQEAKIHsKIAl0b3NoaWJhX3JidHg0OTM4X3NldHVwKCk7CiB9Ci0KLXZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotCXNldHVwX2lycShUWDQ5MzhfSVJRX0NQVV9USU1FUiwgaXJxKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyBiL2FyY2gvbWlwcy92cjQxeHgvS2NvbmZpZwppbmRleCA4ZjRkM2U3Li5lZWIwODlmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdnI0MXh4L0tjb25maWcKKysrIGIvYXJjaC9taXBzL3ZyNDF4eC9LY29uZmlnCkBAIC01LDYgKzUsNyBAQAogCiBjb25maWcgQ0FTSU9fRTU1CiAJYm9vbCAiQ0FTSU8gQ0FTU0lPUEVJQSBFLTEwLzE1LzU1LzY1IgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJU0EKQEAgLTEzLDYgKzE0LDcgQEAKIAogY29uZmlnIElCTV9XT1JLUEFECiAJYm9vbCAiSUJNIFdvcmtQYWQgejUwIgorCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKIAlzZWxlY3QgSVJRX0NQVQogCXNlbGVjdCBJU0EKQEAgLTIxLDYgKzIzLDcgQEAKIAogY29uZmlnIE5FQ19DTUJWUjQxMzMKIAlib29sICJORUMgQ01CLVZSNDEzMyIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgSFdfSEFTX1BDSQpAQCAtMjksNiArMzIsNyBAQAogCiBjb25maWcgVEFOQkFDX1RCMDIyWAogCWJvb2wgIlRBTkJBQyBWUjQxMzEgbXVsdGljaGlwIG1vZHVsZSBhbmQgVEFOQkFDIFZSNDEzMURJTU0iCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IEhXX0hBU19QQ0kKQEAgLTQzLDYgKzQ3LDcgQEAKIAogY29uZmlnIFZJQ1RPUl9NUEMzMFgKIAlib29sICJWaWN0b3IgTVAtQzMwMy8zMDQiCisJc2VsZWN0IENFVlRfUjRLCiAJc2VsZWN0IERNQV9OT05DT0hFUkVOVAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IEhXX0hBU19QQ0kKQEAgLTUyLDYgKzU3LDcgQEAKIAogY29uZmlnIFpBT19DQVBDRUxMQQogCWJvb2wgIlpBTyBOZXR3b3JrcyBDYXBjZWxsYSIKKwlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgSFdfSEFTX1BDSQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jIGIvYXJjaC9taXBzL3ZyNDF4eC9jb21tb24vaW5pdC5jCmluZGV4IDQwN2NlYzIuLjhkNzYwZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy92cjQxeHgvY29tbW9uL2luaXQuYworKysgYi9hcmNoL21pcHMvdnI0MXh4L2NvbW1vbi9pbml0LmMKQEAgLTQ4LDExICs0OCw2IEBACiAJCW1pcHNfaHB0X2ZyZXF1ZW5jeSA9IHRjbG9jayAvIDQ7CiB9CiAKLXZvaWQgX19pbml0IHBsYXRfdGltZXJfc2V0dXAoc3RydWN0IGlycWFjdGlvbiAqaXJxKQotewotCXNldHVwX2lycShUSU1FUl9JUlEsIGlycSk7Ci19Ci0KIHZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCiB7CiAJdnI0MXh4X2NhbGN1bGF0ZV9jbG9ja19mcmVxdWVuY3koKTsKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnCmluZGV4IDNkNzM1NDUuLmI4ZWYxNzggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAotc291cmNlICJhcmNoL3BhcmlzYy9vcHJvZmlsZS9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCiAKIHNvdXJjZSAiYXJjaC9wYXJpc2MvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3NpZ25hbC5jCmluZGV4IGZiMzVlYmMuLjJjZTM4MDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc2lnbmFsLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCXNpLnNpX3NpZ25vID0gU0lHU0VHVjsKIAlzaS5zaV9lcnJubyA9IDA7CiAJc2kuc2lfY29kZSA9IFNJX0tFUk5FTDsKLQlzaS5zaV9waWQgPSBjdXJyZW50LT5waWQ7CisJc2kuc2lfcGlkID0gdGFza19waWRfdm5yKGN1cnJlbnQpOwogCXNpLnNpX3VpZCA9IGN1cnJlbnQtPnVpZDsKIAlzaS5zaV9hZGRyID0gJmZyYW1lLT51YzsKIAlmb3JjZV9zaWdfaW5mbyhTSUdTRUdWLCAmc2ksIGN1cnJlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwppbmRleCBiYmYwMjlhLi45OWZkNTY5IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdHJhcHMuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiAJCQlyZXR1cm47IC8qIFNURlUgKi8KIAogCQlwcmludGsoS0VSTl9DUklUICIlcyAocGlkICVkKTogJXMgKGNvZGUgJWxkKSBhdCAiIFJGTVQgIlxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc3RyLCBlcnIsIHJlZ3MtPmlhb3FbMF0pOworCQkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHN0ciwgZXJyLCByZWdzLT5pYW9xWzBdKTsKICNpZmRlZiBQUklOVF9VU0VSX0ZBVUxUUwogCQkvKiBYWFggZm9yIGRlYnVnZ2luZyBvbmx5ICovCiAJCXNob3dfcmVncyhyZWdzKTsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQogCWlmIChlcnIpCiAJCXByaW50ayhLRVJOX0NSSVQgIiVzIChwaWQgJWQpOiAlcyAoY29kZSAlbGQpXG4iLAotCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBzdHIsIGVycik7CisJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3RyLCBlcnIpOwogCiAJLyogV290J3Mgd3Jvbmcgd2lmIGJlaW4nIHJhY3k/ICovCiAJaWYgKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIFBBUklTQ19LRVJORUxfREVBVEgpIHsKQEAgLTMxNyw3ICszMTcsNyBAQAogCWlmICh1bmxpa2VseShpaXIgIT0gR0RCX0JSRUFLX0lOU04pKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJicmVhayAlZCwlZDogcGlkPSVkIGNvbW1hbmQ9JyVzJ1xuIiwKIAkJCWlpciAmIDMxLCAoaWlyPj4xMykgJiAoKDE8PDEzKS0xKSwKLQkJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSk7CisJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSk7CiAJCXNob3dfcmVncyhyZWdzKTsKIAl9CiAjZW5kaWYKQEAgLTc0Nyw3ICs3NDcsNyBAQAogCQlpZiAodXNlcl9tb2RlKHJlZ3MpKSB7CiAjaWZkZWYgUFJJTlRfVVNFUl9GQVVMVFMKIAkJCXByaW50ayhLRVJOX0RFQlVHICJcbmhhbmRsZV9pbnRlcnJ1cHRpb24oKSBwaWQ9JWQgY29tbWFuZD0nJXMnXG4iLAotCQkJICAgIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSk7CisJCQkgICAgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0pOwogCQkJc2hvd19yZWdzKHJlZ3MpOwogI2VuZGlmCiAJCQkvKiBTSUdCVVMsIGZvciBsYWNrIG9mIGEgYmV0dGVyIG9uZS4gKi8KQEAgLTc3Miw3ICs3NzIsNyBAQAogCQllbHNlCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVXNlciBGYXVsdCAobG9uZyBwb2ludGVyKSAoZmF1bHQgJWQpICIsCiAJCQkgICAgICAgY29kZSk7Ci0JCXByaW50aygicGlkPSVkIGNvbW1hbmQ9JyVzJ1xuIiwgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tKTsKKwkJcHJpbnRrKCJwaWQ9JWQgY29tbWFuZD0nJXMnXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSk7CiAJCXNob3dfcmVncyhyZWdzKTsKICNlbmRpZgogCQlzaS5zaV9zaWdubyA9IFNJR1NFR1Y7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvdW5hbGlnbmVkLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW5hbGlnbmVkLmMKaW5kZXggMzQ3YmI5Mi4uYWViZjNjMSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC91bmFsaWduZWQuYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJCSAgICAmJiArK3VuYWxpZ25lZF9jb3VudCA8IDUpIHsKIAkJCWNoYXIgYnVmWzI1Nl07CiAJCQlzcHJpbnRmKGJ1ZiwgIiVzKCVkKTogdW5hbGlnbmVkIGFjY2VzcyB0byAweCIgUkZNVCAiIGF0IGlwPTB4IiBSRk1UICJcbiIsCi0JCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCByZWdzLT5pb3IsIHJlZ3MtPmlhb3FbMF0pOworCQkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCByZWdzLT5pb3IsIHJlZ3MtPmlhb3FbMF0pOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMiLCBidWYpOwogI2lmZGVmIERFQlVHX1VOQUxJR05FRAogCQkJc2hvd19yZWdzKHJlZ3MpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYyBiL2FyY2gvcGFyaXNjL21tL2ZhdWx0LmMKaW5kZXggMWMwOTFiNC4uYjJlM2U5YSAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvbW0vZmF1bHQuYworKysgYi9hcmNoL3BhcmlzYy9tbS9mYXVsdC5jCkBAIC0yMTEsNyArMjExLDcgQEAKICNpZmRlZiBQUklOVF9VU0VSX0ZBVUxUUwogCQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImRvX3BhZ2VfZmF1bHQoKSBwaWQ9JWQgY29tbWFuZD0nJXMnIHR5cGU9JWx1IGFkZHJlc3M9MHglMDhseFxuIiwKLQkJICAgIHRzay0+cGlkLCB0c2stPmNvbW0sIGNvZGUsIGFkZHJlc3MpOworCQkgICAgdGFza19waWRfbnIodHNrKSwgdHNrLT5jb21tLCBjb2RlLCBhZGRyZXNzKTsKIAkJaWYgKHZtYSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgInZtX3N0YXJ0ID0gMHglMDhseCwgdm1fZW5kID0gMHglMDhseFxuIiwKIAkJCQkJdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mvb3Byb2ZpbGUvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL29wcm9maWxlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZGUxOTguLjAwMDAwMDAKLS0tIGEvYXJjaC9wYXJpc2Mvb3Byb2ZpbGUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQotbWVudSAiUHJvZmlsaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQotY29uZmlnIFBST0ZJTElORwotCWJvb2wgIlByb2ZpbGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBleHRlbmRlZCBwcm9maWxpbmcgc3VwcG9ydCBtZWNoYW5pc21zIHVzZWQKLQkgIGJ5IHByb2ZpbGVycyBzdWNoIGFzIE9Qcm9maWxlLgotCSAgCi0KLWNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFJPRklMSU5HCi0JaGVscAotCSAgT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGNhcGFibGUgb2YgcHJvZmlsaW5nIHRoZQotCSAgd2hvbGUgc3lzdGVtLCBpbmNsdWRlIHRoZSBrZXJuZWwsIGtlcm5lbCBtb2R1bGVzLCBsaWJyYXJpZXMsCi0JICBhbmQgYXBwbGljYXRpb25zLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1lbmRtZW51Ci0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggMzc2M2Y2OC4uMThmMzk3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC02NjksMjAgKzY2OSw3IEBACiAKIHNvdXJjZSAibGliL0tjb25maWciCiAKLW1lbnUgIkluc3RydW1lbnRhdGlvbiBTdXBwb3J0IgotCi1zb3VyY2UgImFyY2gvcG93ZXJwYy9vcHJvZmlsZS9LY29uZmlnIgotCi1jb25maWcgS1BST0JFUwotCWJvb2wgIktwcm9iZXMiCi0JZGVwZW5kcyBvbiAhQk9PS0UgJiYgITR4eCAmJiBLQUxMU1lNUyAmJiBNT0RVTEVTCi0JaGVscAotCSAgS3Byb2JlcyBhbGxvd3MgeW91IHRvIHRyYXAgYXQgYWxtb3N0IGFueSBrZXJuZWwgYWRkcmVzcyBhbmQKLQkgIGV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbi4gIHJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCi0JICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bAotCSAgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcsIG5vbi1pbnRydXNpdmUgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLgotCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCi1lbmRtZW51Citzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2VsbF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwppbmRleCA4YjQ3Yzg0Li5kY2Q3YzAyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZwpAQCAtNjgsNiArNjgsNyBAQAogQ09ORklHX0lLQ09ORklHPXkKIENPTkZJR19JS0NPTkZJR19QUk9DPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CitDT05GSUdfQ0dST1VQUz15CiBDT05GSUdfQ1BVU0VUUz15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwppbmRleCA5NWI4MjNiLi44ZTU5ODhjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKQEAgLTIwOSw3ICsyMDksNiBAQAogIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKIENPTkZJR19QTV9ERUJVRz15CiAjIENPTkZJR19QTV9WRVJCT1NFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RJU0FCTEVfQ09OU09MRV9TVVNQRU5EIGlzIG5vdCBzZXQKIENPTkZJR19QTV9TTEVFUD15CiBDT05GSUdfU1VTUEVORD15CiBDT05GSUdfSElCRVJOQVRJT049eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IGJiOGQ0ZTQuLjA1NTgyYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKQEAgLTcxLDYgKzcxLDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNworQ09ORklHX0NHUk9VUFM9eQogQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1JFTEFZPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKaW5kZXggYzA5ZWI4Yy4uNjJhMzg0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHNlcmllc19kZWZjb25maWcKQEAgLTcxLDYgKzcxLDcgQEAKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNworQ09ORklHX0NHUk9VUFM9eQogQ09ORklHX0NQVVNFVFM9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IDBhZTVkNTcuLjJjOGU3NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogCURFRklORShQQUNBTFBQQUNBUFRSLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIGxwcGFjYV9wdHIpKTsKIAlERUZJTkUoUEFDQUhXQ1BVSUQsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgaHdfY3B1X2lkKSk7CiAJREVGSU5FKFBBQ0FfU1RBUlRQVVJSLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHN0YXJ0cHVycikpOworCURFRklORShQQUNBX1NUQVJUU1BVUlIsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc3RhcnRzcHVycikpOwogCURFRklORShQQUNBX1VTRVJfVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCB1c2VyX3RpbWUpKTsKIAlERUZJTkUoUEFDQV9TWVNURU1fVElNRSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzeXN0ZW1fdGltZSkpOwogCURFRklORShQQUNBX1NMQlNIQURPV1BUUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzbGJfc2hhZG93X3B0cikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwppbmRleCA4YjRhNGVlLi5mMWVlMGIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF82eHguUwpAQCAtMTEzLDcgKzExMyw3IEBACiAgKiBhcm91bmQgIzMgYW5kIHdpdGggdGhlIHNhbWUgZml4IHdlIHVzZS4gV2UgbWF5IHdhbnQgdG8KICAqIGNoZWNrIGlmIHRoZSBDUFUgaXMgdXNpbmcgNjB4IGJ1cyBtb2RlIGluIHdoaWNoIGNhc2UKICAqIHRoZSB3b3JrYXJvdW5kIGZvciBlcnJhdGEgIzQgaXMgdXNlbGVzcy4gQWxzbywgd2UgbWF5Ci0gKiB3YW50IHRvIGV4cGxpY2l0ZWx5IGNsZWFyIEhJRDBfTk9QRFNUIGFzIHRoaXMgaXMgbm90CisgKiB3YW50IHRvIGV4cGxpY2l0bHkgY2xlYXIgSElEMF9OT1BEU1QgYXMgdGhpcyBpcyBub3QKICAqIG5lZWRlZCBvbmNlIHdlIGhhdmUgYXBwbGllZCB3b3JrYXJvdW5kICM1ICh0aG91Z2ggaXQncwogICogbm90IHNldCBieSBBcHBsZSdzIGZpcm13YXJlIGF0IGxlYXN0KS4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKaW5kZXggMjI1MGY5ZS4uYjBlNWRlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCkBAIC00OTEsNyArNDkxLDcgQEAKIAogCQkJLyogTGVnYWN5IGZsYWdzIGFyZSBsZWZ0IHRvIGRlZmF1bHQgYXQgdGhpcyBwb2ludCwKIAkJCSAqIG9uZSBjYW4gdGhlbiB1c2UgaXJxX2NyZWF0ZV9tYXBwaW5nKCkgdG8KLQkJCSAqIGV4cGxpY2l0ZWx5IGNoYW5nZSB0aGVtCisJCQkgKiBleHBsaWNpdGx5IGNoYW5nZSB0aGVtCiAJCQkgKi8KIAkJCW9wcy0+bWFwKGhvc3QsIGksIGkpOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2wyY3JfNnh4LlMKaW5kZXggODU4ZjI4YS4uMmEyZjNjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sMmNyXzZ4eC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbDJjcl82eHguUwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAJTDJDUiBmdW5jdGlvbnMKLQlDb3B5cmlnaHQgqSAxOTk3LTE5OTggYnkgUG93ZXJMb2dpeCBSICYgRCwgSW5jLgorCUNvcHlyaWdodCDCqSAxOTk3LTE5OTggYnkgUG93ZXJMb2dpeCBSICYgRCwgSW5jLgogCiAJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIAlpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwppbmRleCBlNjBhMGM1Li5jMGM4ZThjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtNjEsNDUgKzYxLDM5IEBACiAJZm9yKDs7KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfY3Jhc2hrKGNoYXIgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCi0JaWYgKCFwKQotCQlyZXR1cm4gMTsKLQotCXNpemUgPSBtZW1wYXJzZShwLCAmcCk7Ci0KLQlpZiAoKnAgPT0gJ0AnKQotCQljcmFzaGtfcmVzLnN0YXJ0ID0gbWVtcGFyc2UocCArIDEsICZwKTsKLQllbHNlCi0JCWNyYXNoa19yZXMuc3RhcnQgPSBLRFVNUF9LRVJORUxCQVNFOwotCi0JY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgc2l6ZSAtIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJjcmFzaGtlcm5lbCIsIGVhcmx5X3BhcnNlX2NyYXNoayk7Ci0KIHZvaWQgX19pbml0IHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgbG9uZyBsb25nIGNyYXNoX3NpemUsIGNyYXNoX2Jhc2U7CisJaW50IHJldDsKIAotCWlmIChjcmFzaGtfcmVzLnN0YXJ0ID09IDApCisJLyogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvZiBsbWJfcGh5c19tZW1fc2l6ZSgpICovCisJbG1iX2FuYWx5emUoKTsKKworCS8qIHVzZSBjb21tb24gcGFyc2luZyAqLworCXJldCA9IHBhcnNlX2NyYXNoa2VybmVsKGJvb3RfY29tbWFuZF9saW5lLCBsbWJfcGh5c19tZW1fc2l6ZSgpLAorCQkJJmNyYXNoX3NpemUsICZjcmFzaF9iYXNlKTsKKwlpZiAocmV0ID09IDAgJiYgY3Jhc2hfc2l6ZSA+IDApIHsKKwkJaWYgKGNyYXNoX2Jhc2UgPT0gMCkKKwkJCWNyYXNoX2Jhc2UgPSBLRFVNUF9LRVJORUxCQVNFOworCQljcmFzaGtfcmVzLnN0YXJ0ID0gY3Jhc2hfYmFzZTsKKwl9IGVsc2UgeworCQkvKiBoYW5kbGUgdGhlIGRldmljZSB0cmVlICovCisJCWNyYXNoX3NpemUgPSBjcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxOworCX0KKworCWlmIChjcmFzaF9zaXplID09IDApCiAJCXJldHVybjsKIAogCS8qIFdlIG1pZ2h0IGhhdmUgZ290IHRoZXNlIHZhbHVlcyB2aWEgdGhlIGNvbW1hbmQgbGluZSBvciB0aGUKIAkgKiBkZXZpY2UgdHJlZSwgZWl0aGVyIHdheSBzYW5pdGlzZSB0aGVtIG5vdy4gKi8KIAotCXNpemUgPSBjcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxOwotCiAJaWYgKGNyYXNoa19yZXMuc3RhcnQgIT0gS0RVTVBfS0VSTkVMQkFTRSkKIAkJcHJpbnRrKCJDcmFzaCBrZXJuZWwgbG9jYXRpb24gbXVzdCBiZSAweCV4XG4iLAogCQkJCUtEVU1QX0tFUk5FTEJBU0UpOwogCiAJY3Jhc2hrX3Jlcy5zdGFydCA9IEtEVU1QX0tFUk5FTEJBU0U7Ci0Jc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7Ci0JY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgc2l6ZSAtIDE7CisJY3Jhc2hfc2l6ZSA9IFBBR0VfQUxJR04oY3Jhc2hfc2l6ZSk7CisJY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgY3Jhc2hfc2l6ZSAtIDE7CiAKIAkvKiBDcmFzaCBrZXJuZWwgdHJ1bXBzIG1lbW9yeSBsaW1pdCAqLwogCWlmIChtZW1vcnlfbGltaXQgJiYgbWVtb3J5X2xpbWl0IDw9IGNyYXNoa19yZXMuZW5kKSB7CkBAIC0xMDgsNyArMTAyLDEzIEBACiAJCQkJbWVtb3J5X2xpbWl0KTsKIAl9CiAKLQlsbWJfcmVzZXJ2ZShjcmFzaGtfcmVzLnN0YXJ0LCBzaXplKTsKKwlwcmludGsoS0VSTl9JTkZPICJSZXNlcnZpbmcgJWxkTUIgb2YgbWVtb3J5IGF0ICVsZE1CICIKKwkJCSJmb3IgY3Jhc2hrZXJuZWwgKFN5c3RlbSBSQU06ICVsZE1CKVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKShjcmFzaF9zaXplID4+IDIwKSwKKwkJCSh1bnNpZ25lZCBsb25nKShjcmFzaGtfcmVzLnN0YXJ0ID4+IDIwKSwKKwkJCSh1bnNpZ25lZCBsb25nKShsbWJfcGh5c19tZW1fc2l6ZSgpID4+IDIwKSk7CisKKwlsbWJfcmVzZXJ2ZShjcmFzaGtfcmVzLnN0YXJ0LCBjcmFzaF9zaXplKTsKIH0KIAogaW50IG92ZXJsYXBzX2NyYXNoa2VybmVsKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggZWE2YWQ3YS4uYjlkODgzNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTQ1OSw3ICs0NTksNyBAQAogCQlwcmludGsoIkRBUjogIlJFRyIsIERTSVNSOiAiUkVHIlxuIiwgcmVncy0+ZGFyLCByZWdzLT5kc2lzcik7CiAjZW5kaWYKIAlwcmludGsoIlRBU0sgPSAlcFslZF0gJyVzJyBUSFJFQUQ6ICVwIiwKLQkgICAgICAgY3VycmVudCwgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCB0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpKTsKKwkgICAgICAgY3VycmVudCwgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sIHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCkpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCXByaW50aygiIENQVTogJWQiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA4NjNhNWQ2Li45ZWIzMjg0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjEyLDIzICsyMTIsNDQgQEAKIH0KIAogLyoKKyAqIFJlYWQgdGhlIFNQVVJSIG9uIHN5c3RlbXMgdGhhdCBoYXZlIGl0LCBvdGhlcndpc2UgdGhlIHB1cnIKKyAqLworc3RhdGljIHU2NCByZWFkX3NwdXJyKHU2NCBwdXJyKQoreworCWlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TUFVSUikpCisJCXJldHVybiBtZnNwcihTUFJOX1NQVVJSKTsKKwlyZXR1cm4gcHVycjsKK30KKworLyoKICAqIEFjY291bnQgdGltZSBmb3IgYSB0cmFuc2l0aW9uIGJldHdlZW4gc3lzdGVtLCBoYXJkIGlycQogICogb3Igc29mdCBpcnEgc3RhdGUuCiAgKi8KIHZvaWQgYWNjb3VudF9zeXN0ZW1fdnRpbWUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JdTY0IG5vdywgZGVsdGE7CisJdTY0IG5vdywgbm93c2NhbGVkLCBkZWx0YSwgZGVsdGFzY2FsZWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlub3cgPSByZWFkX3B1cnIoKTsKIAlkZWx0YSA9IG5vdyAtIGdldF9wYWNhKCktPnN0YXJ0cHVycjsKIAlnZXRfcGFjYSgpLT5zdGFydHB1cnIgPSBub3c7CisJbm93c2NhbGVkID0gcmVhZF9zcHVycihub3cpOworCWRlbHRhc2NhbGVkID0gbm93c2NhbGVkIC0gZ2V0X3BhY2EoKS0+c3RhcnRzcHVycjsKKwlnZXRfcGFjYSgpLT5zdGFydHNwdXJyID0gbm93c2NhbGVkOwogCWlmICghaW5faW50ZXJydXB0KCkpIHsKKwkJLyogZGVsdGFzY2FsZWQgaW5jbHVkZXMgYm90aCB1c2VyIGFuZCBzeXN0ZW0gdGltZS4KKwkJICogSGVuY2Ugc2NhbGUgaXQgYmFzZWQgb24gdGhlIHB1cnIgcmF0aW8gdG8gZXN0aW1hdGUKKwkJICogdGhlIHN5c3RlbSB0aW1lICovCisJCWRlbHRhc2NhbGVkID0gZGVsdGFzY2FsZWQgKiBnZXRfcGFjYSgpLT5zeXN0ZW1fdGltZSAvCisJCQkoZ2V0X3BhY2EoKS0+c3lzdGVtX3RpbWUgKyBnZXRfcGFjYSgpLT51c2VyX3RpbWUpOwogCQlkZWx0YSArPSBnZXRfcGFjYSgpLT5zeXN0ZW1fdGltZTsKIAkJZ2V0X3BhY2EoKS0+c3lzdGVtX3RpbWUgPSAwOwogCX0KIAlhY2NvdW50X3N5c3RlbV90aW1lKHRzaywgMCwgZGVsdGEpOworCWdldF9wYWNhKCktPnB1cnJkZWx0YSA9IGRlbHRhOworCWFjY291bnRfc3lzdGVtX3RpbWVfc2NhbGVkKHRzaywgZGVsdGFzY2FsZWQpOworCWdldF9wYWNhKCktPnNwdXJyZGVsdGEgPSBkZWx0YXNjYWxlZDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKQEAgLTI0MCwxMSArMjYxLDE3IEBACiAgKi8KIHZvaWQgYWNjb3VudF9wcm9jZXNzX3Z0aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCWNwdXRpbWVfdCB1dGltZTsKKwljcHV0aW1lX3QgdXRpbWUsIHV0aW1lc2NhbGVkOwogCiAJdXRpbWUgPSBnZXRfcGFjYSgpLT51c2VyX3RpbWU7CiAJZ2V0X3BhY2EoKS0+dXNlcl90aW1lID0gMDsKIAlhY2NvdW50X3VzZXJfdGltZSh0c2ssIHV0aW1lKTsKKworCS8qIEVzdGltYXRlIHRoZSBzY2FsZWQgdXRpbWUgYnkgc2NhbGluZyB0aGUgcmVhbCB1dGltZSBiYXNlZAorCSAqIG9uIHRoZSBsYXN0IHNwdXJyIHRvIHB1cnIgcmF0aW8gKi8KKwl1dGltZXNjYWxlZCA9IHV0aW1lICogZ2V0X3BhY2EoKS0+c3B1cnJkZWx0YSAvIGdldF9wYWNhKCktPnB1cnJkZWx0YTsKKwlnZXRfcGFjYSgpLT5zcHVycmRlbHRhID0gZ2V0X3BhY2EoKS0+cHVycmRlbHRhID0gMDsKKwlhY2NvdW50X3VzZXJfdGltZV9zY2FsZWQodHNrLCB1dGltZXNjYWxlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGFjY291bnRfcHJvY2Vzc190aW1lKHN0cnVjdCBwdF9yZWdzICpyZWdzKQpAQCAtMjY2LDYgKzI5Myw3IEBACiAJaW50CWluaXRpYWxpemVkOwkJCS8qIHRocmVhZCBpcyBydW5uaW5nICovCiAJdTY0CXRiOwkJCS8qIGxhc3QgVEIgdmFsdWUgcmVhZCAqLwogCXU2NAlwdXJyOwkJCS8qIGxhc3QgUFVSUiB2YWx1ZSByZWFkICovCisJdTY0CXNwdXJyOwkJCS8qIGxhc3QgU1BVUlIgdmFsdWUgcmVhZCAqLwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYwppbmRleCBiZjllMzljLi41OWM0NjRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkgKiBnZW5lcmF0ZSB0aGUgc2FtZSBleGNlcHRpb24gb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgd2UgZ2V0CiAJICogbm93aGVyZS4gIEJldHRlciB0byBraWxsIGl0IGFuZCBsZXQgdGhlIGtlcm5lbCBwYW5pYy4KIAkgKi8KLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQlfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyOwogCiAJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpAQCAtODgxLDcgKzg4MSw3IEBACiB2b2lkIHRyYWNlX3N5c2NhbGwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJcHJpbnRrKCJUYXNrOiAlcCglZCksIFBDOiAlMDhsWC8lMDhsWCwgU3lzY2FsbDogJTNsZCwgUmVzdWx0OiAlcyVsZCAgICAlc1xuIiwKLQkgICAgICAgY3VycmVudCwgY3VycmVudC0+cGlkLCByZWdzLT5uaXAsIHJlZ3MtPmxpbmssIHJlZ3MtPmdwclswXSwKKwkgICAgICAgY3VycmVudCwgdGFza19waWRfbnIoY3VycmVudCksIHJlZ3MtPm5pcCwgcmVncy0+bGluaywgcmVncy0+Z3ByWzBdLAogCSAgICAgICByZWdzLT5jY3ImMHgxMDAwMDAwMD8iRXJyb3I9IjoiIiwgcmVncy0+Z3ByWzNdLCBwcmludF90YWludGVkKCkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCmluZGV4IGFiMzU0NmMuLmExOGZkYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9mYXVsdC5jCkBAIC0zNzUsNyArMzc1LDcgQEAKICAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzA4OWU3OS4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLWNvbmZpZyBQUk9GSUxJTkcKLQlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCi0JICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KLQotCi1jb25maWcgT1BST0ZJTEUKLQl0cmlzdGF0ZSAiT1Byb2ZpbGUgc3lzdGVtIHByb2ZpbGluZyAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFBST0ZJTElORwotCWhlbHAKLQkgIE9Qcm9maWxlIGlzIGEgcHJvZmlsaW5nIHN5c3RlbSBjYXBhYmxlIG9mIHByb2ZpbGluZyB0aGUKLQkgIHdob2xlIHN5c3RlbSwgaW5jbHVkZSB0aGUga2VybmVsLCBrZXJuZWwgbW9kdWxlcywgbGlicmFyaWVzLAotCSAgYW5kIGFwcGxpY2F0aW9ucy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIE9QUk9GSUxFX0NFTEwKLQlib29sICJPUHJvZmlsZSBmb3IgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIgotCWRlcGVuZHMgb24gKFNQVV9GUyA9IHkgJiYgT1BST0ZJTEUgPSBtKSB8fCAoU1BVX0ZTID0geSAmJiBPUFJPRklMRSA9IHkpIHx8IChTUFVfRlMgPSBtICYmIE9QUk9GSUxFID0gbSkKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBQcm9maWxpbmcgb2YgQ2VsbCBCRSBTUFVzIHJlcXVpcmVzIHNwZWNpYWwgc3VwcG9ydCBlbmFibGVkCi0JICBieSB0aGlzIG9wdGlvbi4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9saXRlNTIwMF9wbS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwX3BtLmMKaW5kZXggZjI2YWZjZC4uZmZhMTRhZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwX3BtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L2xpdGU1MjAwX3BtLmMKQEAgLTEsNSArMSw1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KQEAgLTE4LDYgKzE4LDggQEAKIHN0YXRpYyBjb25zdCBpbnQgc3JhbV9zaXplID0gMHg0MDAwOwkvKiAxNiBrQnl0ZXMgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKm1iYXI7CiAKK3N0YXRpYyBzdXNwZW5kX3N0YXRlX3QgbGl0ZTUyMDBfcG1fdGFyZ2V0X3N0YXRlOworCiBzdGF0aWMgaW50IGxpdGU1MjAwX3BtX3ZhbGlkKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlzd2l0Y2ggKHN0YXRlKSB7CkBAIC0yOSwxMyArMzEsMjIgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgbGl0ZTUyMDBfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGxpdGU1MjAwX3BtX3NldF90YXJnZXQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoreworCWlmIChsaXRlNTIwMF9wbV92YWxpZChzdGF0ZSkpIHsKKwkJbGl0ZTUyMDBfcG1fdGFyZ2V0X3N0YXRlID0gc3RhdGU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBsaXRlNTIwMF9wbV9wcmVwYXJlKHZvaWQpCiB7CiAJLyogZGVlcCBzbGVlcD8gbGV0IG1wYzUyeHggY29kZSBoYW5kbGUgdGhhdCAqLwotCWlmIChzdGF0ZSA9PSBQTV9TVVNQRU5EX1NUQU5EQlkpCi0JCXJldHVybiBtcGM1Mnh4X3BtX3ByZXBhcmUoc3RhdGUpOworCWlmIChsaXRlNTIwMF9wbV90YXJnZXRfc3RhdGUgPT0gUE1fU1VTUEVORF9TVEFOREJZKQorCQlyZXR1cm4gbXBjNTJ4eF9wbV9wcmVwYXJlKCk7CiAKLQlpZiAoc3RhdGUgIT0gUE1fU1VTUEVORF9NRU0pCisJaWYgKGxpdGU1MjAwX3BtX3RhcmdldF9zdGF0ZSAhPSBQTV9TVVNQRU5EX01FTSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBtYXAgcmVnaXN0ZXJzICovCkBAIC0xOTAsMTcgKzIwMSwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGxpdGU1MjAwX3BtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCBsaXRlNTIwMF9wbV9maW5pc2godm9pZCkKIHsKIAkvKiBkZWVwIHNsZWVwPyBsZXQgbXBjNTJ4eCBjb2RlIGhhbmRsZSB0aGF0ICovCi0JaWYgKHN0YXRlID09IFBNX1NVU1BFTkRfU1RBTkRCWSkgewotCQlyZXR1cm4gbXBjNTJ4eF9wbV9maW5pc2goc3RhdGUpOwotCX0KLQlyZXR1cm4gMDsKKwlpZiAobGl0ZTUyMDBfcG1fdGFyZ2V0X3N0YXRlID09IFBNX1NVU1BFTkRfU1RBTkRCWSkKKwkJbXBjNTJ4eF9wbV9maW5pc2goKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwbV9vcHMgbGl0ZTUyMDBfcG1fb3BzID0geworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyBsaXRlNTIwMF9wbV9vcHMgPSB7CiAJLnZhbGlkCQk9IGxpdGU1MjAwX3BtX3ZhbGlkLAorCS5zZXRfdGFyZ2V0CT0gbGl0ZTUyMDBfcG1fc2V0X3RhcmdldCwKIAkucHJlcGFyZQk9IGxpdGU1MjAwX3BtX3ByZXBhcmUsCiAJLmVudGVyCQk9IGxpdGU1MjAwX3BtX2VudGVyLAogCS5maW5pc2gJCT0gbGl0ZTUyMDBfcG1fZmluaXNoLApAQCAtMjA4LDYgKzIxOCw2IEBACiAKIGludCBfX2luaXQgbGl0ZTUyMDBfcG1faW5pdCh2b2lkKQogewotCXBtX3NldF9vcHMoJmxpdGU1MjAwX3BtX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZsaXRlNTIwMF9wbV9vcHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcG0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X3BtLmMKaW5kZXggZWUyZTc2My4uN2ZmYTdiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcG0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9wbS5jCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTU3LDExICs1Nyw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBtcGM1Mnh4X3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQoraW50IG1wYzUyeHhfcG1fcHJlcGFyZSh2b2lkKQogewotCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX1NUQU5EQlkpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJLyogbWFwIHRoZSB3aG9sZSByZWdpc3RlciBzcGFjZSAqLwogCW1iYXIgPSBtcGM1Mnh4X2ZpbmRfYW5kX21hcCgibXBjNTIwMCIpOwogCWlmICghbWJhcikgewpAQCAtMTY2LDE4ICsxNjMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG1wYzUyeHhfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3ZvaWQgbXBjNTJ4eF9wbV9maW5pc2godm9pZCkKIHsKIAkvKiBjYWxsIGJvYXJkIHJlc3VtZSBjb2RlICovCiAJaWYgKG1wYzUyeHhfc3VzcGVuZC5ib2FyZF9yZXN1bWVfZmluaXNoKQogCQltcGM1Mnh4X3N1c3BlbmQuYm9hcmRfcmVzdW1lX2ZpbmlzaChtYmFyKTsKIAogCWlvdW5tYXAobWJhcik7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbV9vcHMgbXBjNTJ4eF9wbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIG1wYzUyeHhfcG1fb3BzID0gewogCS52YWxpZAkJPSBtcGM1Mnh4X3BtX3ZhbGlkLAogCS5wcmVwYXJlCT0gbXBjNTJ4eF9wbV9wcmVwYXJlLAogCS5lbnRlcgkJPSBtcGM1Mnh4X3BtX2VudGVyLApAQCAtMTg2LDYgKzE4MSw2IEBACiAKIGludCBfX2luaXQgbXBjNTJ4eF9wbV9pbml0KHZvaWQpCiB7Ci0JcG1fc2V0X29wcygmbXBjNTJ4eF9wbV9vcHMpOworCXN1c3BlbmRfc2V0X29wcygmbXBjNTJ4eF9wbV9vcHMpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCmluZGV4IDIyOWQzNTUuLmVhMjJjYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKQEAgLTEyMCw3ICsxMjAsNyBAQAogCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFCiAJaGVscAogCSAgUE1JIChQbGF0Zm9ybSBNYW5hZ2VtZW50IEludGVycnVwdCkgaXMgYSB3YXkgdG8KLQkgIGNvbW11bmljYXRlIHdpdGggdGhlIEJNQyAoQmFzZWJvYXJkIE1hbmdlbWVudCBDb250cm9sbGVyKS4KKwkgIGNvbW11bmljYXRlIHdpdGggdGhlIEJNQyAoQmFzZWJvYXJkIE1hbmFnZW1lbnQgQ29udHJvbGxlcikuCiAJICBJdCBpcyB1c2VkIGluIHNvbWUgSUJNIENlbGwgYmxhZGVzLgogCWRlZmF1bHQgbQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYwppbmRleCBkNzJiMTZkLi5kOWU1NmE1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKQEAgLTc0OCw3ICs3NDgsNyBAQAogCWlmIChjb3VudCkKIAkJZ290byBvdXQ7CiAKLQkvKiB3cml0ZSBh0ZUgbXVjaCBhcyBwb3NzaWJsZSAqLworCS8qIHdyaXRlIGFzIG11Y2ggYXMgcG9zc2libGUgKi8KIAlmb3IgKGNvdW50ID0gNCwgdWRhdGErKzsgKGNvdW50ICsgNCkgPD0gbGVuOyBjb3VudCArPSA0LCB1ZGF0YSsrKSB7CiAJCWludCByZXQ7CiAJCXJldCA9IF9fZ2V0X3VzZXIod2JveF9kYXRhLCB1ZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zY2NfdWhjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGxlYi9zY2NfdWhjLmMKaW5kZXggYTdjNTQ4Yi4uYjU5YzM4YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsZWIvc2NjX3VoYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbGViL3NjY191aGMuYwpAQCAtMzYsNyArMzYsNyBAQAogfQogCiAvKgotICogVUhDKHVzYiBob3N0IGNvbnRyb2xlcikgZW5hYmxlIGZ1bmN0aW9uLgorICogVUhDKHVzYiBob3N0IGNvbnRyb2xsZXIpIGVuYWJsZSBmdW5jdGlvbi4KICAqIGFmZmVjdCB0byBib3RoIG9mIE9IQ0kgYW5kIEVIQ0kgY29yZSBtb2R1bGUuCiAgKi8KIHN0YXRpYyB2b2lkIGVuYWJsZV9zY2NfdWhjKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKaW5kZXggMzU0YzA1OC4uMTQ0MTc3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYwpAQCAtNDEsMTMgKzQxLDEzIEBACiAjaW5jbHVkZSA8bGludXgvcm9vdF9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20va2V4ZWMuaD4KICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCmluZGV4IDNhMzkzYzcuLmExYWIyNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQkgICBlcnItPmRpc3Bvc2l0aW9uID09IFJUQVNfRElTUF9OT1RfUkVDT1ZFUkVEICYmCiAJCSAgIGVyci0+dGFyZ2V0ID09IFJUQVNfVEFSR0VUX01FTU9SWSAmJgogCQkgICBlcnItPnR5cGUgPT0gUlRBU19UWVBFX0VDQ19VTkNPUlIgJiYKLQkJICAgIShjdXJyZW50LT5waWQgPT0gMCB8fCBpc19pbml0KGN1cnJlbnQpKSkgeworCQkgICAhKGN1cnJlbnQtPnBpZCA9PSAwIHx8IGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSkgewogCQkvKiBLaWxsIG9mZiBhIHVzZXIgcHJvY2VzcyB3aXRoIGFuIEVDQyBlcnJvciAqLwogCQlwcmludGsoS0VSTl9FUlIgIk1DRTogdW5jb3JyZWN0YWJsZSBlY2MgZXJyb3IgZm9yIHBpZCAlZFxuIiwKIAkJICAgICAgIGN1cnJlbnQtPnBpZCk7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9LY29uZmlnIGIvYXJjaC9wcGMvS2NvbmZpZwppbmRleCA2MDc5MjVjLi42NDczZmE3IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9LY29uZmlnCisrKyBiL2FyY2gvcHBjL0tjb25maWcKQEAgLTEzMTcsNyArMTMxNyw3IEBACiAKIHNvdXJjZSAibGliL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9wb3dlcnBjL29wcm9maWxlL0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL3BwYy9LY29uZmlnLmRlYnVnIgogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wcGMvYm9vdC9NYWtlZmlsZQppbmRleCA0ODdkYzY2Li41MDA0OTdlIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9ib290L01ha2VmaWxlCisrKyBiL2FyY2gvcHBjL2Jvb3QvTWFrZWZpbGUKQEAgLTEzLDYgKzEzLDggQEAKICMgbW9kaWZpZWQgYnkgQ29ydCAoY29ydEBjcy5ubXQuZWR1KQogIwogCisjIEtCVUlMRF9DRkxBR1MgdXNlZCB3aGVuIGJ1aWxkaW5nIHJlc3Qgb2YgYm9vdCAodGFrZXMgZWZmZWN0IHJlY3Vyc2l2ZWx5KQorS0JVSUxEX0NGTEFHUyAJKz0gLWZuby1idWlsdGluIC1EX19CT09URVJfXyAtSWFyY2gvJChBUkNIKS9ib290L2luY2x1ZGUKIEhPU1RDRkxBR1MJKz0gLUlhcmNoLyQoQVJDSCkvYm9vdC9pbmNsdWRlCiAKIEJPT1RfVEFSR0VUUwk9IHpJbWFnZSB6SW1hZ2UuaW5pdHJkIHpuZXRib290IHpuZXRib290LmluaXRyZApkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3RyYXBzLmMgYi9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwppbmRleCAzZjNiMjkyLi5jNzg1Njg5IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJICogZ2VuZXJhdGUgdGhlIHNhbWUgZXhjZXB0aW9uIG92ZXIgYW5kIG92ZXIgYWdhaW4gYW5kIHdlIGdldAogCSAqIG5vd2hlcmUuICBCZXR0ZXIgdG8ga2lsbCBpdCBhbmQgbGV0IHRoZSBrZXJuZWwgcGFuaWMuCiAJICovCi0JaWYgKGlzX2luaXQoY3VycmVudCkpIHsKKwlpZiAoaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKIAkJX19zaWdoYW5kbGVyX3QgaGFuZGxlcjsKIAogCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL21tL2ZhdWx0LmMgYi9hcmNoL3BwYy9tbS9mYXVsdC5jCmluZGV4IDk0OTEzZGQuLjI1NGMyM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9wcGMvbW0vZmF1bHQuYwpAQCAtMjkwLDcgKzI5MCw3IEBACiAgKi8KIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9jaGVzdG51dC5jIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKaW5kZXggMjQ4Njg0Zi4uZGNkNjA3MCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL2NoZXN0bnV0LmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIGV4dGVybiB2b2lkIGdlbjU1MF9pbml0KGludCwgc3RydWN0IHVhcnRfcG9ydCAqKTsKIGV4dGVybiB2b2lkIG12NjQzNjBfcGNpYmlvc19maXh1cChtdjY0eDYwX2hhbmRsZV90ICpiaCk7CiAKLSNkZWZpbmUgQklUKHgpICgxPDx4KQogI2RlZmluZSBDSEVTVE5VVF9QUkVTRVJWRV9NQVNLIChCSVQoTVY2NHg2MF9DUFUyREVWXzBfV0lOKSB8IFwKIAkJCQlCSVQoTVY2NHg2MF9DUFUyREVWXzFfV0lOKSB8IFwKIAkJCQlCSVQoTVY2NHg2MF9DUFUyREVWXzJfV0lOKSB8IFwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9LY29uZmlnIGIvYXJjaC9zMzkwL0tjb25maWcKaW5kZXggYjcxMTMyMS4uNGVjNzE2ZCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTUyOSwyMSArNTI5LDcgQEAKIAogc291cmNlICJmcy9LY29uZmlnIgogCi1tZW51ICJJbnN0cnVtZW50YXRpb24gU3VwcG9ydCIKLQotc291cmNlICJhcmNoL3MzOTAvb3Byb2ZpbGUvS2NvbmZpZyIKLQotY29uZmlnIEtQUk9CRVMKLQlib29sICJLcHJvYmVzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIE1PRFVMRVMKLQloZWxwCi0JICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZAotCSAgZXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLglyZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlcwotCSAgYSBwcm9iZXBvaW50IGFuZCBzcGVjaWZpZXMgdGhlIGNhbGxiYWNrLiAgS3Byb2JlcyBpcyB1c2VmdWwKLQkgIGZvciBrZXJuZWwgZGVidWdnaW5nLCBub24taW50cnVzaXZlIGluc3RydW1lbnRhdGlvbiBhbmQgdGVzdGluZy4KLQkgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgotCi1lbmRtZW51Citzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBhYmI0NDdhLi43MGM1NzM3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKICAgICAgICAgcHJpbnRrKCJDUFU6ICAgICVkICAgICVzXG4iLCB0YXNrX3RocmVhZF9pbmZvKHRzayktPmNwdSwgcHJpbnRfdGFpbnRlZCgpKTsKICAgICAgICAgcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCB0YXNrOiAlcCwga3NwOiAlcClcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKHZvaWQgKikgdHNrLAorCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgKHZvaWQgKikgdHNrLAogCSAgICAgICAodm9pZCAqKSB0c2stPnRocmVhZC5rc3ApOwogCiAJc2hvd19yZWdpc3RlcnMocmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfcHQuYyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19wdC5jCmluZGV4IDYwNjA0YjIuLmIxNTlhOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19wdC5jCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19wdC5jCkBAIC02NCw3ICs2NCw3IEBACiAKIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKaW5kZXggMTRjMjQxYy4uMjQ1NmI1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmMKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdHNrLT5tbTsKIAogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGlzX2luaXQodHNrKSkgeworCWlmIChpc19nbG9iYWxfaW5pdCh0c2spKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvb3Byb2ZpbGUvS2NvbmZpZyBiL2FyY2gvczM5MC9vcHJvZmlsZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDgyMjBhLi4wMDAwMDAwCi0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotCi1tZW51ICJQcm9maWxpbmcgc3VwcG9ydCIKLQotY29uZmlnIFBST0ZJTElORwotCWJvb2wgIlByb2ZpbGluZyBzdXBwb3J0IgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZCBieQotCSAgcHJvZmlsZXJzIHN1Y2ggYXMgcmVhZHByb2ZpbGUgb3IgT1Byb2ZpbGUuCi0KLQotY29uZmlnIE9QUk9GSUxFCi0JdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmciCi0JZGVwZW5kcyBvbiBQUk9GSUxJTkcKLQloZWxwCi0JICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCi0JICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKLQkgIGFuZCBhcHBsaWNhdGlvbnMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KLWVuZG1lbnUKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDQ0OTgyYzEuLjI0N2Y4YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTc1OCw3ICs3NTgsNyBAQAogCiBzb3VyY2UgImZzL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9zaC9vcHJvZmlsZS9LY29uZmlnIgorc291cmNlICJrZXJuZWwvS2NvbmZpZy5pbnN0cnVtZW50YXRpb24iCiAKIHNvdXJjZSAiYXJjaC9zaC9LY29uZmlnLmRlYnVnIgogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9wbS5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvcG0uYwppbmRleCA4MTQzZDFiLi5kMjJmNmVhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9wbS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3BtLmMKQEAgLTY3LDE0ICs2NywxNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBtX29wcyBocDZ4MF9wbV9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGhwNngwX3BtX29wcyA9IHsKIAkuZW50ZXIJCT0gaHA2eDBfcG1fZW50ZXIsCi0JLnZhbGlkCQk9IHBtX3ZhbGlkX29ubHlfbWVtLAorCS52YWxpZAkJPSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgaHA2eDBfcG1faW5pdCh2b2lkKQogewotCXBtX3NldF9vcHMoJmhwNngwX3BtX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZocDZ4MF9wbV9vcHMpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNzkwZWQ2OS4uNWMxN2RlNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMTA0LDI0ICsxMDQsMyBAQAogCSgqcm5rKShwYWdlX2xpc3QsIHJlYm9vdF9jb2RlX2J1ZmZlciwgaW1hZ2UtPnN0YXJ0LCB2YnJfcmVnKTsKIH0KIAotLyogY3Jhc2hrZXJuZWw9c2l6ZUBhZGRyIHNwZWNpZmllcyB0aGUgbG9jYXRpb24gdG8gcmVzZXJ2ZSBmb3IKLSAqIGEgY3Jhc2gga2VybmVsLiAgQnkgcmVzZXJ2aW5nIHRoaXMgbWVtb3J5IHdlIGd1YXJhbnRlZQotICogdGhhdCBsaW51eCBuZXZlciBzZXRzIGl0IHVwIGFzIGEgRE1BIHRhcmdldC4KLSAqIFVzZWZ1bCBmb3IgaG9sZGluZyBjb2RlIHRvIGRvIHNvbWV0aGluZyBhcHByb3ByaWF0ZQotICogYWZ0ZXIgYSBrZXJuZWwgcGFuaWMuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoa2VybmVsKGNoYXIgKmFyZykKLXsKLQl1bnNpZ25lZCBsb25nIHNpemUsIGJhc2U7Ci0Jc2l6ZSA9IG1lbXBhcnNlKGFyZywgJmFyZyk7Ci0JaWYgKCphcmcgPT0gJ0AnKSB7Ci0JCWJhc2UgPSBtZW1wYXJzZShhcmcrMSwgJmFyZyk7Ci0JCS8qIEZJWE1FOiBEbyBJIHdhbnQgYSBzYW5pdHkgY2hlY2sKLQkJICogdG8gdmFsaWRhdGUgdGhlIG1lbW9yeSByYW5nZT8KLQkJICovCi0JCWNyYXNoa19yZXMuc3RhcnQgPSBiYXNlOwotCQljcmFzaGtfcmVzLmVuZCAgID0gYmFzZSArIHNpemUgLSAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJjcmFzaGtlcm5lbCIsIHBhcnNlX2NyYXNoa2VybmVsKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwppbmRleCBiNDQ2OTk5Li42ZDdmMmIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAlwcmludGsoIlxuIik7Ci0JcHJpbnRrKCJQaWQgOiAlZCwgQ29tbTogJTIwc1xuIiwgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tKTsKKwlwcmludGsoIlBpZCA6ICVkLCBDb21tOiAlMjBzXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSk7CiAJcHJpbnRfc3ltYm9sKCJQQyBpcyBhdCAlc1xuIiwgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSk7CiAJcHJpbnRrKCJQQyAgOiAlMDhseCBTUCAgOiAlMDhseCBTUiAgOiAlMDhseCAiLAogCSAgICAgICByZWdzLT5wYywgcmVncy0+cmVnc1sxNV0sIHJlZ3MtPnNyKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGIzMDI3YTYuLmI3NDk0MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtMTI4LDYgKzEyOCwzNyBAQAogCWZyZWVfYm9vdG1lbShQRk5fUEhZUyhjdXJyX3BmbiksIFBGTl9QSFlTKHBhZ2VzKSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfS0VYRUMKK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGZyZWVfbWVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjcmFzaF9zaXplLCBjcmFzaF9iYXNlOworCWludCByZXQ7CisKKwlmcmVlX21lbSA9ICgodW5zaWduZWQgbG9uZyBsb25nKW1heF9sb3dfcGZuIC0gbWluX2xvd19wZm4pIDw8IFBBR0VfU0hJRlQ7CisKKwlyZXQgPSBwYXJzZV9jcmFzaGtlcm5lbChib290X2NvbW1hbmRfbGluZSwgZnJlZV9tZW0sCisJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOworCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplKSB7CisJCWlmIChjcmFzaF9iYXNlID4gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXJ2aW5nICVsZE1CIG9mIG1lbW9yeSBhdCAlbGRNQiAiCisJCQkJCSJmb3IgY3Jhc2hrZXJuZWwgKFN5c3RlbSBSQU06ICVsZE1CKVxuIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKGNyYXNoX3NpemUgPj4gMjApLAorCQkJCQkodW5zaWduZWQgbG9uZykoY3Jhc2hfYmFzZSA+PiAyMCksCisJCQkJCSh1bnNpZ25lZCBsb25nKShmcmVlX21lbSA+PiAyMCkpOworCQkJY3Jhc2hrX3Jlcy5zdGFydCA9IGNyYXNoX2Jhc2U7CisJCQljcmFzaGtfcmVzLmVuZCAgID0gY3Jhc2hfYmFzZSArIGNyYXNoX3NpemUgLSAxOworCQkJcmVzZXJ2ZV9ib290bWVtKGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUpOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKKwkJCQkJInlvdSBoYXZlIHRvIHNwZWNpZnkgYSBiYXNlIGFkZHJlc3NcbiIpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZCkKK3t9CisjZW5kaWYKKwogdm9pZCBfX2luaXQgc2V0dXBfYm9vdG1lbV9hbGxvY2F0b3IodW5zaWduZWQgbG9uZyBmcmVlX3BmbikKIHsKIAl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZTsKQEAgLTE4OSwxMSArMjIwLDggQEAKIAkJfQogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19LRVhFQwotCWlmIChjcmFzaGtfcmVzLnN0YXJ0ICE9IGNyYXNoa19yZXMuZW5kKQotCQlyZXNlcnZlX2Jvb3RtZW0oY3Jhc2hrX3Jlcy5zdGFydCwKLQkJCWNyYXNoa19yZXMuZW5kIC0gY3Jhc2hrX3Jlcy5zdGFydCArIDEpOwotI2VuZGlmCisKKwlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NpZ25hbC5jIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKaW5kZXggMmY0MjQ0Mi4uY2E3NTRmZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMKQEAgLTM4Miw3ICszODIsNyBAQAogCXNldF9mcyhVU0VSX0RTKTsKIAogCXByX2RlYnVnKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKLQkJIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7CisJCSBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7CiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcChyZWdzLT5wcik7CiAKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXNldF9mcyhVU0VSX0RTKTsKIAogCXByX2RlYnVnKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKLQkJIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7CisJCSBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7CiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcChyZWdzLT5wcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCmluZGV4IGRjYjQ2ZTcuLmNmOTkxMTFjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKQEAgLTk1LDggKzk1LDggQEAKIAlwcmludF9tb2R1bGVzKCk7CiAJc2hvd19yZWdzKHJlZ3MpOwogCi0JcHJpbnRrKCJQcm9jZXNzOiAlcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAlcClcbiIsCi0JICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgdGFza19zdGFja19wYWdlKGN1cnJlbnQpICsgMSk7CisJcHJpbnRrKCJQcm9jZXNzOiAlcyAocGlkOiAlZCwgc3RhY2sgbGltaXQgPSAlcClcbiIsIGN1cnJlbnQtPmNvbW0sCisJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgdGFza19zdGFja19wYWdlKGN1cnJlbnQpICsgMSk7CiAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSB8fCBpbl9pbnRlcnJ1cHQoKSkKIAkJZHVtcF9tZW0oIlN0YWNrOiAiLCByZWdzLT5yZWdzWzE1XSwgVEhSRUFEX1NJWkUgKwpAQCAtMzg2LDcgKzM4Niw4IEBACiAKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJGaXhpbmcgdXAgdW5hbGlnbmVkIHVzZXJzcGFjZSBhY2Nlc3MgIgogCQkgICAgICAgImluIFwiJXNcIiBwaWQ9JWQgcGM9MHglcCBpbnM9MHglMDRoeFxuIiwKLQkJICAgICAgIGN1cnJlbnQtPmNvbW0sY3VycmVudC0+cGlkLCh1MTYqKXJlZ3MtPnBjLGluc3RydWN0aW9uKTsKKwkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQkgICAgICAgKHUxNiAqKXJlZ3MtPnBjLCBpbnN0cnVjdGlvbik7CiAJfQogCiAJcmV0ID0gLUVGQVVMVDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vZmF1bHQuYyBiL2FyY2gvc2gvbW0vZmF1bHQuYwppbmRleCA0NzI5NjY4Li5mMzNjZWRiIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zaC9tbS9mYXVsdC5jCkBAIC0yMDcsNyArMjA3LDcgQEAKICAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9vcHJvZmlsZS9LY29uZmlnIGIvYXJjaC9zaC9vcHJvZmlsZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWRlMTk4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvb3Byb2ZpbGUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQotbWVudSAiUHJvZmlsaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQotY29uZmlnIFBST0ZJTElORwotCWJvb2wgIlByb2ZpbGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBleHRlbmRlZCBwcm9maWxpbmcgc3VwcG9ydCBtZWNoYW5pc21zIHVzZWQKLQkgIGJ5IHByb2ZpbGVycyBzdWNoIGFzIE9Qcm9maWxlLgotCSAgCi0KLWNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFJPRklMSU5HCi0JaGVscAotCSAgT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGNhcGFibGUgb2YgcHJvZmlsaW5nIHRoZQotCSAgd2hvbGUgc3lzdGVtLCBpbmNsdWRlIHRoZSBrZXJuZWwsIGtlcm5lbCBtb2R1bGVzLCBsaWJyYXJpZXMsCi0JICBhbmQgYXBwbGljYXRpb25zLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1lbmRtZW51Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9LY29uZmlnIGIvYXJjaC9zaDY0L0tjb25maWcKaW5kZXggYjMzMjdjZS4uYmEyMDRiYSAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L0tjb25maWcKKysrIGIvYXJjaC9zaDY0L0tjb25maWcKQEAgLTI4NCw3ICsyODQsNyBAQAogCiBzb3VyY2UgImZzL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC9zaDY0L29wcm9maWxlL0tjb25maWciCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL3NoNjQvS2NvbmZpZy5kZWJ1ZyIKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wY2lfc2g1LmMgYi9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYwppbmRleCAzODhiYjcxLi5iNGQ5NTM0IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3BjaV9zaDUuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAgICAgICAgIH0KIAotCS8qIFRoZSBwY2kgc3Vic3l0ZW0gbmVlZHMgdG8ga25vdyB3aGVyZSBtZW1vcnkgaXMgYW5kIGhvdyBtdWNoCisJLyogVGhlIHBjaSBzdWJzeXN0ZW0gbmVlZHMgdG8ga25vdyB3aGVyZSBtZW1vcnkgaXMgYW5kIGhvdyBtdWNoCiAJICogb2YgaXQgdGhlcmUgaXMuIEkndmUgc2ltcGx5IG1hZGUgdGhlc2UgZ2xvYmFscy4gQSBiZXR0ZXIgbWVjaGFuaXNtCiAJICogaXMgcHJvYmFibHkgbmVlZGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zaDY0L2tlcm5lbC90cmFwcy5jCmluZGV4IDlkMGQ1OGYuLmMwMzEwMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3RyYXBzLmMKQEAgLTc2NCw3ICs3NjQsNyBAQAogCQktLXVzZXJfbW9kZV91bmFsaWduZWRfZml4dXBfY291bnQ7CiAJCS8qIE9ubHkgZG8gJ2NvdW50JyB3b3J0aCBvZiB0aGVzZSByZXBvcnRzLCB0byByZW1vdmUgYSBwb3RlbnRpYWwgRG9TIGFnYWluc3Qgc3lzbG9nICovCiAJCXByaW50aygiRml4aW5nIHVwIHVuYWxpZ25lZCB1c2Vyc3BhY2UgYWNjZXNzIGluIFwiJXNcIiBwaWQ9JWQgcGM9MHglMDh4IGlucz0weCUwOGx4XG4iLAotCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAoX191MzIpcmVncy0+cGMsIG9wY29kZSk7CisJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgKF9fdTMyKXJlZ3MtPnBjLCBvcGNvZGUpOwogCX0gZWxzZQogI2VuZGlmCiAJaWYgKCF1c2VyX21vZGUocmVncykgJiYgKGtlcm5lbF9tb2RlX3VuYWxpZ25lZF9maXh1cF9jb3VudCA+IDApKSB7CkBAIC03NzQsNyArNzc0LDcgQEAKIAkJCSAgICAgICAoX191MzIpcmVncy0+cGMsIG9wY29kZSk7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoIkZpeGluZyB1cCB1bmFsaWduZWQga2VybmVsc3BhY2UgYWNjZXNzIGluIFwiJXNcIiBwaWQ9JWQgcGM9MHglMDh4IGlucz0weCUwOGx4XG4iLAotCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgKF9fdTMyKXJlZ3MtPnBjLCBvcGNvZGUpOworCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCAoX191MzIpcmVncy0+cGMsIG9wY29kZSk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tbS9mYXVsdC5jIGIvYXJjaC9zaDY0L21tL2ZhdWx0LmMKaW5kZXggZGQ4MWM2Ni4uN2M3OWExYiAxMDA2NDQKLS0tIGEvYXJjaC9zaDY0L21tL2ZhdWx0LmMKKysrIGIvYXJjaC9zaDY0L21tL2ZhdWx0LmMKQEAgLTgxLDcgKzgxLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHByaW50X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcHJpbnRrKCJUYXNrIHBpZCAlZFxuIiwgdHNrLT5waWQpOworCXByaW50aygiVGFzayBwaWQgJWRcbiIsIHRhc2tfcGlkX25yKHRzaykpOwogfQogCiBzdGF0aWMgcHRlX3QgKmxvb2t1cF9wdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKQEAgLTI3MiwxMyArMjcyLDEzIEBACiAJCQkgKiB1c2VybW9kZSwgc28gb25seSBuZWVkIGEgZmV3ICovCiAJCQljb3VudCsrOwogCQkJcHJpbnRrKCJ1c2VyIG1vZGUgYmFkX2FyZWEgYWRkcmVzcz0lMDhseCBwaWQ9JWQgKCVzKSBwYz0lMDhseFxuIiwKLQkJCQlhZGRyZXNzLCBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sCisJCQkJYWRkcmVzcywgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0sCiAJCQkJKHVuc2lnbmVkIGxvbmcpIHJlZ3MtPnBjKTsKICNpZiAwCiAJCQlzaG93X3JlZ3MocmVncyk7CiAjZW5kaWYKIAkJfQotCQlpZiAoaXNfaW5pdCh0c2spKSB7CisJCWlmIChpc19nbG9iYWxfaW5pdCh0c2spKSB7CiAJCQlwYW5pYygiSU5JVCBoYWQgdXNlciBtb2RlIGJhZF9hcmVhXG4iKTsKIAkJfQogCQl0c2stPnRocmVhZC5hZGRyZXNzID0gYWRkcmVzczsKQEAgLTMyMCwxNCArMzIwLDE0IEBACiAgKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCiAgKi8KIG91dF9vZl9tZW1vcnk6Ci0JaWYgKGlzX2luaXQoY3VycmVudCkpIHsKKwlpZiAoaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKIAkJcGFuaWMoIklOSVQgb3V0IG9mIG1lbW9yeVxuIik7CiAJCXlpZWxkKCk7CiAJCWdvdG8gc3Vydml2ZTsKIAl9CiAJcHJpbnRrKCJmYXVsdDpPdXQgb2YgbWVtb3J5XG4iKTsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L29wcm9maWxlL0tjb25maWcgYi9hcmNoL3NoNjQvb3Byb2ZpbGUvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlkMzc3My4uMDAwMDAwMAotLS0gYS9hcmNoL3NoNjQvb3Byb2ZpbGUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLQotbWVudSAiUHJvZmlsaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQotY29uZmlnIFBST0ZJTElORwotCWJvb2wgIlByb2ZpbGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBleHRlbmRlZCBwcm9maWxpbmcgc3VwcG9ydCBtZWNoYW5pc21zIHVzZWQKLQkgIGJ5IHByb2ZpbGVycyBzdWNoIGFzIE9Qcm9maWxlLgotCi0KLWNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFJPRklMSU5HCi0JaGVscAotCSAgT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGNhcGFibGUgb2YgcHJvZmlsaW5nIHRoZQotCSAgd2hvbGUgc3lzdGVtLCBpbmNsdWRlIHRoZSBrZXJuZWwsIGtlcm5lbCBtb2R1bGVzLCBsaWJyYXJpZXMsCi0JICBhbmQgYXBwbGljYXRpb25zLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCi1lbmRtZW51Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvS2NvbmZpZyBiL2FyY2gvc3BhcmMvS2NvbmZpZwppbmRleCBjMGY0YmExLi41MjdhZGM4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL0tjb25maWcKKysrIGIvYXJjaC9zcGFyYy9LY29uZmlnCkBAIC0zMjAsMTEgKzMyMCw3IEBACiAKIHNvdXJjZSAiZnMvS2NvbmZpZyIKIAotbWVudSAiSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQiCi0KLXNvdXJjZSAiYXJjaC9zcGFyYy9vcHJvZmlsZS9LY29uZmlnIgotCi1lbmRtZW51Citzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKIAogc291cmNlICJhcmNoL3NwYXJjL0tjb25maWcuZGVidWciCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMKaW5kZXggZmIyY2FlZi4uM2VhMDAwZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTU4NSwyNCArNTg1LDYgQEAKIAogX19zZXR1cCgib2ZfZGVidWc9Iiwgb2ZfZGVidWcpOwogCi1pbnQgb2ZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiwgc3RydWN0IGJ1c190eXBlICpidXMpCi17Ci0JLyogaW5pdGlhbGl6ZSBjb21tb24gZHJpdmVyIGZpZWxkcyAqLwotCWlmICghZHJ2LT5kcml2ZXIubmFtZSkKLQkJZHJ2LT5kcml2ZXIubmFtZSA9IGRydi0+bmFtZTsKLQlpZiAoIWRydi0+ZHJpdmVyLm93bmVyKQotCQlkcnYtPmRyaXZlci5vd25lciA9IGRydi0+b3duZXI7Ci0JZHJ2LT5kcml2ZXIuYnVzID0gYnVzOwotCi0JLyogcmVnaXN0ZXIgd2l0aCBjb3JlICovCi0JcmV0dXJuIGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotfQotCi12b2lkIG9mX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydikKLXsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOwotfQotCiBzdHJ1Y3Qgb2ZfZGV2aWNlKiBvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCSAgICBjb25zdCBjaGFyICpidXNfaWQsCiAJCQkJCSAgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCkBAIC02MjgsNiArNjEwLDQgQEAKIAlyZXR1cm4gZGV2OwogfQogCi1FWFBPUlRfU1lNQk9MKG9mX3JlZ2lzdGVyX2RyaXZlcik7Ci1FWFBPUlRfU1lNQk9MKG9mX3VucmVnaXN0ZXJfZHJpdmVyKTsKIEVYUE9SVF9TWU1CT0wob2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvc3BhcmMva2VybmVsL3B0cmFjZS5jCmluZGV4IDAwM2Y4ZWUuLmZlNTYyZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3B0cmFjZS5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJLyogUmVzdCBvZiB0aGVtIGFyZSBjb21wbGV0ZWx5IHVuc3VwcG9ydGVkLiAqLwogCWRlZmF1bHQ6CiAJCXByaW50aygiJXMgWyVkXTogV2FudHMgdG8gcmVhZCB1c2VyIG9mZnNldCAlbGRcbiIsCi0JCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIG9mZnNldCk7CisJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgb2Zmc2V0KTsKIAkJcHRfZXJyb3JfcmV0dXJuKHJlZ3MsIEVJTyk7CiAJCXJldHVybjsKIAl9CkBAIC0yMjIsNyArMjIyLDcgQEAKIAkJLyogUmVzdCBvZiB0aGVtIGFyZSBjb21wbGV0ZWx5IHVuc3VwcG9ydGVkIG9yICJuby10b3VjaCIuICovCiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlcyBbJWRdOiBXYW50cyB0byB3cml0ZSB1c2VyIG9mZnNldCAlbGRcbiIsCi0JCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIG9mZnNldCk7CisJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgb2Zmc2V0KTsKIAkJZ290byBmYWlsdXJlOwogCX0KIHN1Y2Nlc3M6CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYy5jCmluZGV4IDZjMDIyMWUuLjQyYmYwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYy5jCkBAIC0zNTcsNyArMzU3LDcgQEAKIAlpZiAoY291bnQrKyA+IDUpCiAJCXJldHVybiAtRU5PU1lTOwogCXByaW50ayAoIiVzWyVkXTogVW5pbXBsZW1lbnRlZCBTUEFSQyBzeXN0ZW0gY2FsbCAlZFxuIiwKLQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCAoaW50KXJlZ3MtPnVfcmVnc1sxXSk7CisJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCAoaW50KXJlZ3MtPnVfcmVnc1sxXSk7CiAjaWZkZWYgREVCVUdfVU5JTVBfU1lTQ0FMTAkKIAlzaG93X3JlZ3MgKHJlZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3Vub3MuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCmluZGV4IGY4MDcxNzIuLjI4YzE4N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c19zdW5vcy5jCkBAIC04NjYsNyArODY2LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAocGdycCA+IDApCi0JCXJldCA9IGtpbGxfcGdycChmaW5kX3BpZChwZ3JwKSwgc2lnLCAwKTsKKwkJcmV0ID0ga2lsbF9wZ3JwKGZpbmRfdnBpZChwZ3JwKSwgc2lnLCAwKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHMuYwppbmRleCAzYmMzYmZmLi5kNDA0ZTc5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzLmMKQEAgLTM4LDcgKzM4LDcgQEAKIAogdm9pZCBzeXNjYWxsX3RyYWNlX2VudHJ5KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXByaW50aygiJXNbJWRdOiAiLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQpOworCXByaW50aygiJXNbJWRdOiAiLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJcHJpbnRrKCJzY2FsbDwlZD4gKGNvdWxkIGJlICVkKVxuIiwgKGludCkgcmVncy0+dV9yZWdzW1VSRUdfRzFdLAogCSAgICAgICAoaW50KSByZWdzLT51X3JlZ3NbVVJFR19JMF0pOwogfQpAQCAtOTksNyArOTksNyBAQAogIiAgICAgICAgICAgICAgL198IFxcX18vIHxfXFxcbiIKICIgICAgICAgICAgICAgICAgIFxcX19VXy9cbiIpOwogCi0JcHJpbnRrKCIlcyglZCk6ICVzIFsjJWRdXG4iLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHN0ciwgKytkaWVfY291bnRlcik7CisJcHJpbnRrKCIlcyglZCk6ICVzIFsjJWRdXG4iLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgc3RyLCArK2RpZV9jb3VudGVyKTsKIAlzaG93X3JlZ3MocmVncyk7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvb3Byb2ZpbGUvS2NvbmZpZyBiL2FyY2gvc3BhcmMvb3Byb2ZpbGUvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhODQwOC4uMDAwMDAwMAotLS0gYS9hcmNoL3NwYXJjL29wcm9maWxlL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1jb25maWcgUFJPRklMSU5HCi0JYm9vbCAiUHJvZmlsaW5nIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIGV4dGVuZGVkIHByb2ZpbGluZyBzdXBwb3J0IG1lY2hhbmlzbXMgdXNlZAotCSAgYnkgcHJvZmlsZXJzIHN1Y2ggYXMgT1Byb2ZpbGUuCi0JICAKLQotY29uZmlnIE9QUk9GSUxFCi0JdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBQUk9GSUxJTkcKLQloZWxwCi0JICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCi0JICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKLQkgIGFuZCBhcHBsaWNhdGlvbnMuCi0KLQkgIElmIHVuc3VyZSwgc2F5IE4uCi0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9LY29uZmlnIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKaW5kZXggNTljNGQ3NS4uYzdhNzRlMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L0tjb25maWcKKysrIGIvYXJjaC9zcGFyYzY0L0tjb25maWcKQEAgLTQ2MCwyMCArNDYwLDcgQEAKIAogc291cmNlICJmcy9LY29uZmlnIgogCi1tZW51ICJJbnN0cnVtZW50YXRpb24gU3VwcG9ydCIKLQotc291cmNlICJhcmNoL3NwYXJjNjQvb3Byb2ZpbGUvS2NvbmZpZyIKLQotY29uZmlnIEtQUk9CRVMKLQlib29sICJLcHJvYmVzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gS0FMTFNZTVMgJiYgRVhQRVJJTUVOVEFMICYmIE1PRFVMRVMKLQloZWxwCi0JICBLcHJvYmVzIGFsbG93cyB5b3UgdG8gdHJhcCBhdCBhbG1vc3QgYW55IGtlcm5lbCBhZGRyZXNzIGFuZAotCSAgZXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uLiAgcmVnaXN0ZXJfa3Byb2JlKCkgZXN0YWJsaXNoZXMKLQkgIGEgcHJvYmVwb2ludCBhbmQgc3BlY2lmaWVzIHRoZSBjYWxsYmFjay4gIEtwcm9iZXMgaXMgdXNlZnVsCi0JICBmb3Iga2VybmVsIGRlYnVnZ2luZywgbm9uLWludHJ1c2l2ZSBpbnN0cnVtZW50YXRpb24gYW5kIHRlc3RpbmcuCi0JICBJZiBpbiBkb3VidCwgc2F5ICJOIi4KLWVuZG1lbnUKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uIgogCiBzb3VyY2UgImFyY2gvc3BhcmM2NC9LY29uZmlnLmRlYnVnIgogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9pcnEuYwppbmRleCBmMzkyMmU1Li4yYzNiZWEyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL2lycS5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvaXJxLmMKQEAgLTg3Nyw3ICs4NzcsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGFsbG9jX29uZV9tb25kbyh1bnNpZ25lZCBsb25nICpwYV9wdHIsIHVuc2lnbmVkIGxvbmcgcW1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBzaXplID0gUEFHRV9BTElHTihxbWFzayArIDEpOwotCXZvaWQgKnAgPSBfX2FsbG9jX2Jvb3RtZW1fbG93KHNpemUsIHNpemUsIDApOworCXZvaWQgKnAgPSBfX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgc2l6ZSwgMCk7CiAJaWYgKCFwKSB7CiAJCXByb21fcHJpbnRmKCJTVU40VjogRXJyb3IsIGNhbm5vdCBhbGxvY2F0ZSBtb25kbyBxdWV1ZS5cbiIpOwogCQlwcm9tX2hhbHQoKTsKQEAgLTg4OSw3ICs4ODksNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGFsbG9jX29uZV9rYnVmKHVuc2lnbmVkIGxvbmcgKnBhX3B0ciwgdW5zaWduZWQgbG9uZyBxbWFzaykKIHsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSBQQUdFX0FMSUdOKHFtYXNrICsgMSk7Ci0Jdm9pZCAqcCA9IF9fYWxsb2NfYm9vdG1lbV9sb3coc2l6ZSwgc2l6ZSwgMCk7CisJdm9pZCAqcCA9IF9fYWxsb2NfYm9vdG1lbShzaXplLCBzaXplLCAwKTsKIAogCWlmICghcCkgewogCQlwcm9tX3ByaW50ZigiU1VONFY6IEVycm9yLCBjYW5ub3QgYWxsb2NhdGUga2J1ZiBwYWdlLlxuIik7CkBAIC05MDYsNyArOTA2LDcgQEAKIAogCUJVSUxEX0JVR19PTigoTlJfQ1BVUyAqIHNpemVvZih1MTYpKSA+IChQQUdFX1NJWkUgLSA2NCkpOwogCi0JcGFnZSA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJcGFnZSA9IGFsbG9jX2Jvb3RtZW1fcGFnZXMoUEFHRV9TSVpFKTsKIAlpZiAoIXBhZ2UpIHsKIAkJcHJvbV9wcmludGYoIlNVTjRWOiBFcnJvciwgY2Fubm90IGFsbG9jYXRlIGNwdSBtb25kbyBwYWdlLlxuIik7CiAJCXByb21faGFsdCgpOwpAQCAtOTUzLDcgKzk1Myw3IEBACiAJa2lsbF9wcm9tX3RpbWVyKCk7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpbm9fYnVja2V0KSAqIE5VTV9JVkVDUzsKLQlpdmVjdG9yX3RhYmxlID0gYWxsb2NfYm9vdG1lbV9sb3coc2l6ZSk7CisJaXZlY3Rvcl90YWJsZSA9IGFsbG9jX2Jvb3RtZW0oc2l6ZSk7CiAJaWYgKCFpdmVjdG9yX3RhYmxlKSB7CiAJCXByb21fcHJpbnRmKCJGYXRhbCBlcnJvciwgY2Fubm90IGFsbG9jYXRlIGl2ZWN0b3JfdGFibGVcbiIpOwogCQlwcm9tX2hhbHQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL29mX2RldmljZS5jCmluZGV4IDQyZDc3OTguLmZjNWMwY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvb2ZfZGV2aWNlLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9vZl9kZXZpY2UuYwpAQCAtODY5LDI2ICs4NjksNiBAQAogCiBfX3NldHVwKCJvZl9kZWJ1Zz0iLCBvZl9kZWJ1Zyk7CiAKLWludCBvZl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKLXsKLQkvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovCi0JaWYgKCFkcnYtPmRyaXZlci5uYW1lKQotCQlkcnYtPmRyaXZlci5uYW1lID0gZHJ2LT5uYW1lOwotCWlmICghZHJ2LT5kcml2ZXIub3duZXIpCi0JCWRydi0+ZHJpdmVyLm93bmVyID0gZHJ2LT5vd25lcjsKLQlkcnYtPmRyaXZlci5idXMgPSBidXM7Ci0KLQkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KLQlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX3JlZ2lzdGVyX2RyaXZlcik7Ci0KLXZvaWQgb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KQotewotCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Ci19Ci1FWFBPUlRfU1lNQk9MKG9mX3VucmVnaXN0ZXJfZHJpdmVyKTsKLQogc3RydWN0IG9mX2RldmljZSogb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkgICAgY29uc3QgY2hhciAqYnVzX2lkLAogCQkJCQkgICAgc3RydWN0IGRldmljZSAqcGFyZW50LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9wY2lfY29tbW9uLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYwppbmRleCBjNzZiZmJiLi45MjNlMGJjIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3BjaV9jb21tb24uYwpAQCAtMzk2LDYgKzM5NiwxMyBAQAogCiAJc2F3X21lbSA9IHNhd19pbyA9IDA7CiAJcGJtX3JhbmdlcyA9IG9mX2dldF9wcm9wZXJ0eShwYm0tPnByb21fbm9kZSwgInJhbmdlcyIsICZpKTsKKwlpZiAoIXBibV9yYW5nZXMpIHsKKwkJcHJvbV9wcmludGYoIlBDSTogRmF0YWwgZXJyb3IsIG1pc3NpbmcgUEJNIHJhbmdlcyBwcm9wZXJ0eSAiCisJCQkgICAgIiBmb3IgJXNcbiIsCisJCQkgICAgcGJtLT5uYW1lKTsKKwkJcHJvbV9oYWx0KCk7CisJfQorCiAJbnVtX3BibV9yYW5nZXMgPSBpIC8gc2l6ZW9mKCpwYm1fcmFuZ2VzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fcGJtX3JhbmdlczsgaSsrKSB7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zdW5vczMyLmMKaW5kZXggOGY3YTA2ZS4uMTcwZDZjYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3Vub3MzMi5jCisrKyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3N1bm9zMzIuYwpAQCAtODMxLDcgKzgzMSw3IEBACiAJcmN1X3JlYWRfbG9jaygpOwogCXJldCA9IC1FSU5WQUw7CiAJaWYgKHBncnAgPiAwKQotCQlyZXQgPSBraWxsX3BncnAoZmluZF9waWQocGdycCksIHNpZywgMCk7CisJCXJldCA9IGtpbGxfcGdycChmaW5kX3ZwaWQocGdycCksIHNpZywgMCk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90cmFwcy5jCmluZGV4IDM0NTczYTUuLmU5YzdlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3RyYXBzLmMKQEAgLTIyMjUsNyArMjIyNSw3IEBACiAiICAgICAgICAgICAgICAvX3wgXFxfXy8gfF9cXFxuIgogIiAgICAgICAgICAgICAgICAgXFxfX1VfL1xuIik7CiAKLQlwcmludGsoIiVzKCVkKTogJXMgWyMlZF1cbiIsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgc3RyLCArK2RpZV9jb3VudGVyKTsKKwlwcmludGsoIiVzKCVkKTogJXMgWyMlZF1cbiIsIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzdHIsICsrZGllX2NvdW50ZXIpOwogCW5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgMjU1LCBTSUdTRUdWKTsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiZmx1c2h3Iik7CiAJX19zaG93X3JlZ3MocmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2F0b21pYy5TIGIvYXJjaC9zcGFyYzY0L2xpYi9hdG9taWMuUwppbmRleCA5NjMzNzUwLi43MGFjNDE4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2F0b21pYy5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvYXRvbWljLlMKQEAgLTEsMTAgKzEsMTAgQEAKLS8qICRJZDogYXRvbWljLlMsdiAxLjQgMjAwMS8xMS8xOCAwMDoxMjo1NiBkYXZlbSBFeHAgJAotICogYXRvbWljLlM6IFRoZXNlIHRoaW5ncyBhcmUgdG9vIGJpZyB0byBkbyBpbmxpbmUuCisvKiBhdG9taWMuUzogVGhlc2UgdGhpbmdzIGFyZSB0b28gYmlnIHRvIGRvIGlubGluZS4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKQorICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDA3IERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AZGF2ZW1sb2Z0Lm5ldCkKICAqLwogCiAjaW5jbHVkZSA8YXNtL2FzaS5oPgorI2luY2x1ZGUgPGFzbS9iYWNrb2ZmLmg+CiAKIAkudGV4dAogCkBAIC0xNiwyNyArMTYsMzEgQEAKIAkuZ2xvYmwJYXRvbWljX2FkZAogCS50eXBlCWF0b21pY19hZGQsI2Z1bmN0aW9uCiBhdG9taWNfYWRkOiAvKiAlbzAgPSBpbmNyZW1lbnQsICVvMSA9IGF0b21pY19wdHIgKi8KKwlCQUNLT0ZGX1NFVFVQKCVvMikKIDE6CWxkdXcJWyVvMV0sICVnMQogCWFkZAklZzEsICVvMCwgJWc3CiAJY2FzCVslbzFdLCAlZzEsICVnNwogCWNtcAklZzEsICVnNwotCWJuZSxwbgklaWNjLCAxYgorCWJuZSxwbgklaWNjLCAyZgogCSBub3AKIAlyZXRsCiAJIG5vcAorMjoJQkFDS09GRl9TUElOKCVvMiwgJW8zLCAxYikKIAkuc2l6ZQlhdG9taWNfYWRkLCAuLWF0b21pY19hZGQKIAogCS5nbG9ibAlhdG9taWNfc3ViCiAJLnR5cGUJYXRvbWljX3N1YiwjZnVuY3Rpb24KIGF0b21pY19zdWI6IC8qICVvMCA9IGRlY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLworCUJBQ0tPRkZfU0VUVVAoJW8yKQogMToJbGR1dwlbJW8xXSwgJWcxCiAJc3ViCSVnMSwgJW8wLCAlZzcKIAljYXMJWyVvMV0sICVnMSwgJWc3CiAJY21wCSVnMSwgJWc3Ci0JYm5lLHBuCSVpY2MsIDFiCisJYm5lLHBuCSVpY2MsIDJmCiAJIG5vcAogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8yLCAlbzMsIDFiKQogCS5zaXplCWF0b21pY19zdWIsIC4tYXRvbWljX3N1YgogCiAJLyogT24gU01QIHdlIG5lZWQgdG8gdXNlIG1lbW9yeSBiYXJyaWVycyB0byBlbnN1cmUKQEAgLTYwLDg5ICs2NCwxMDEgQEAKIAkuZ2xvYmwJYXRvbWljX2FkZF9yZXQKIAkudHlwZQlhdG9taWNfYWRkX3JldCwjZnVuY3Rpb24KIGF0b21pY19hZGRfcmV0OiAvKiAlbzAgPSBpbmNyZW1lbnQsICVvMSA9IGF0b21pY19wdHIgKi8KKwlCQUNLT0ZGX1NFVFVQKCVvMikKIAlBVE9NSUNfUFJFX0JBUlJJRVIKIDE6CWxkdXcJWyVvMV0sICVnMQogCWFkZAklZzEsICVvMCwgJWc3CiAJY2FzCVslbzFdLCAlZzEsICVnNwogCWNtcAklZzEsICVnNwotCWJuZSxwbgklaWNjLCAxYgorCWJuZSxwbgklaWNjLCAyZgogCSBhZGQJJWc3LCAlbzAsICVnNwogCXNyYQklZzcsIDAsICVvMAogCUFUT01JQ19QT1NUX0JBUlJJRVIKIAlyZXRsCiAJIG5vcAorMjoJQkFDS09GRl9TUElOKCVvMiwgJW8zLCAxYikKIAkuc2l6ZQlhdG9taWNfYWRkX3JldCwgLi1hdG9taWNfYWRkX3JldAogCiAJLmdsb2JsCWF0b21pY19zdWJfcmV0CiAJLnR5cGUJYXRvbWljX3N1Yl9yZXQsI2Z1bmN0aW9uCiBhdG9taWNfc3ViX3JldDogLyogJW8wID0gZGVjcmVtZW50LCAlbzEgPSBhdG9taWNfcHRyICovCisJQkFDS09GRl9TRVRVUCglbzIpCiAJQVRPTUlDX1BSRV9CQVJSSUVSCiAxOglsZHV3CVslbzFdLCAlZzEKIAlzdWIJJWcxLCAlbzAsICVnNwogCWNhcwlbJW8xXSwgJWcxLCAlZzcKIAljbXAJJWcxLCAlZzcKLQlibmUscG4JJWljYywgMWIKKwlibmUscG4JJWljYywgMmYKIAkgc3ViCSVnNywgJW8wLCAlZzcKIAlzcmEJJWc3LCAwLCAlbzAKIAlBVE9NSUNfUE9TVF9CQVJSSUVSCiAJcmV0bAogCSBub3AKKzI6CUJBQ0tPRkZfU1BJTiglbzIsICVvMywgMWIpCiAJLnNpemUJYXRvbWljX3N1Yl9yZXQsIC4tYXRvbWljX3N1Yl9yZXQKIAogCS5nbG9ibAlhdG9taWM2NF9hZGQKIAkudHlwZQlhdG9taWM2NF9hZGQsI2Z1bmN0aW9uCiBhdG9taWM2NF9hZGQ6IC8qICVvMCA9IGluY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLworCUJBQ0tPRkZfU0VUVVAoJW8yKQogMToJbGR4CVslbzFdLCAlZzEKIAlhZGQJJWcxLCAlbzAsICVnNwogCWNhc3gJWyVvMV0sICVnMSwgJWc3CiAJY21wCSVnMSwgJWc3Ci0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIG5vcAogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8yLCAlbzMsIDFiKQogCS5zaXplCWF0b21pYzY0X2FkZCwgLi1hdG9taWM2NF9hZGQKIAogCS5nbG9ibAlhdG9taWM2NF9zdWIKIAkudHlwZQlhdG9taWM2NF9zdWIsI2Z1bmN0aW9uCiBhdG9taWM2NF9zdWI6IC8qICVvMCA9IGRlY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLworCUJBQ0tPRkZfU0VUVVAoJW8yKQogMToJbGR4CVslbzFdLCAlZzEKIAlzdWIJJWcxLCAlbzAsICVnNwogCWNhc3gJWyVvMV0sICVnMSwgJWc3CiAJY21wCSVnMSwgJWc3Ci0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIG5vcAogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8yLCAlbzMsIDFiKQogCS5zaXplCWF0b21pYzY0X3N1YiwgLi1hdG9taWM2NF9zdWIKIAogCS5nbG9ibAlhdG9taWM2NF9hZGRfcmV0CiAJLnR5cGUJYXRvbWljNjRfYWRkX3JldCwjZnVuY3Rpb24KIGF0b21pYzY0X2FkZF9yZXQ6IC8qICVvMCA9IGluY3JlbWVudCwgJW8xID0gYXRvbWljX3B0ciAqLworCUJBQ0tPRkZfU0VUVVAoJW8yKQogCUFUT01JQ19QUkVfQkFSUklFUgogMToJbGR4CVslbzFdLCAlZzEKIAlhZGQJJWcxLCAlbzAsICVnNwogCWNhc3gJWyVvMV0sICVnMSwgJWc3CiAJY21wCSVnMSwgJWc3Ci0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIGFkZAklZzcsICVvMCwgJWc3CiAJbW92CSVnNywgJW8wCiAJQVRPTUlDX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8yLCAlbzMsIDFiKQogCS5zaXplCWF0b21pYzY0X2FkZF9yZXQsIC4tYXRvbWljNjRfYWRkX3JldAogCiAJLmdsb2JsCWF0b21pYzY0X3N1Yl9yZXQKIAkudHlwZQlhdG9taWM2NF9zdWJfcmV0LCNmdW5jdGlvbgogYXRvbWljNjRfc3ViX3JldDogLyogJW8wID0gZGVjcmVtZW50LCAlbzEgPSBhdG9taWNfcHRyICovCisJQkFDS09GRl9TRVRVUCglbzIpCiAJQVRPTUlDX1BSRV9CQVJSSUVSCiAxOglsZHgJWyVvMV0sICVnMQogCXN1YgklZzEsICVvMCwgJWc3CiAJY2FzeAlbJW8xXSwgJWcxLCAlZzcKIAljbXAJJWcxLCAlZzcKLQlibmUscG4JJXhjYywgMWIKKwlibmUscG4JJXhjYywgMmYKIAkgc3ViCSVnNywgJW8wLCAlZzcKIAltb3YJJWc3LCAlbzAKIAlBVE9NSUNfUE9TVF9CQVJSSUVSCiAJcmV0bAogCSBub3AKKzI6CUJBQ0tPRkZfU1BJTiglbzIsICVvMywgMWIpCiAJLnNpemUJYXRvbWljNjRfc3ViX3JldCwgLi1hdG9taWM2NF9zdWJfcmV0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvbGliL2JpdG9wcy5TIGIvYXJjaC9zcGFyYzY0L2xpYi9iaXRvcHMuUwppbmRleCA4OTI0MzFhLi42YjAxNWE2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvbGliL2JpdG9wcy5TCisrKyBiL2FyY2gvc3BhcmM2NC9saWIvYml0b3BzLlMKQEAgLTEsMTAgKzEsMTAgQEAKLS8qICRJZDogYml0b3BzLlMsdiAxLjMgMjAwMS8xMS8xOCAwMDoxMjo1NiBkYXZlbSBFeHAgJAotICogYml0b3BzLlM6IFNwYXJjNjQgYXRvbWljIGJpdCBvcGVyYXRpb25zLgorLyogYml0b3BzLlM6IFNwYXJjNjQgYXRvbWljIGJpdCBvcGVyYXRpb25zLgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIDIwMDcgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBkYXZlbWxvZnQubmV0KQogICovCiAKICNpbmNsdWRlIDxhc20vYXNpLmg+CisjaW5jbHVkZSA8YXNtL2JhY2tvZmYuaD4KIAogCS50ZXh0CiAKQEAgLTI5LDYgKzI5LDcgQEAKIAkuZ2xvYmwJdGVzdF9hbmRfc2V0X2JpdAogCS50eXBlCXRlc3RfYW5kX3NldF9iaXQsI2Z1bmN0aW9uCiB0ZXN0X2FuZF9zZXRfYml0OgkvKiAlbzA9bnIsICVvMT1hZGRyICovCisJQkFDS09GRl9TRVRVUCglbzMpCiAJQklUT1BfUFJFX0JBUlJJRVIKIAlzcmx4CSVvMCwgNiwgJWcxCiAJbW92CTEsICVvMgpAQCAtNDAsMTggKzQxLDIwIEBACiAJb3IJJWc3LCAlbzIsICVnMQogCWNhc3gJWyVvMV0sICVnNywgJWcxCiAJY21wCSVnNywgJWcxCi0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIGFuZAklZzcsICVvMiwgJWcyCiAJY2xyCSVvMAogCW1vdnJuZQklZzIsIDEsICVvMAogCUJJVE9QX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8zLCAlbzQsIDFiKQogCS5zaXplCXRlc3RfYW5kX3NldF9iaXQsIC4tdGVzdF9hbmRfc2V0X2JpdAogCiAJLmdsb2JsCXRlc3RfYW5kX2NsZWFyX2JpdAogCS50eXBlCXRlc3RfYW5kX2NsZWFyX2JpdCwjZnVuY3Rpb24KIHRlc3RfYW5kX2NsZWFyX2JpdDoJLyogJW8wPW5yLCAlbzE9YWRkciAqLworCUJBQ0tPRkZfU0VUVVAoJW8zKQogCUJJVE9QX1BSRV9CQVJSSUVSCiAJc3JseAklbzAsIDYsICVnMQogCW1vdgkxLCAlbzIKQEAgLTYzLDE4ICs2NiwyMCBAQAogCWFuZG4JJWc3LCAlbzIsICVnMQogCWNhc3gJWyVvMV0sICVnNywgJWcxCiAJY21wCSVnNywgJWcxCi0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIGFuZAklZzcsICVvMiwgJWcyCiAJY2xyCSVvMAogCW1vdnJuZQklZzIsIDEsICVvMAogCUJJVE9QX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8zLCAlbzQsIDFiKQogCS5zaXplCXRlc3RfYW5kX2NsZWFyX2JpdCwgLi10ZXN0X2FuZF9jbGVhcl9iaXQKIAogCS5nbG9ibAl0ZXN0X2FuZF9jaGFuZ2VfYml0CiAJLnR5cGUJdGVzdF9hbmRfY2hhbmdlX2JpdCwjZnVuY3Rpb24KIHRlc3RfYW5kX2NoYW5nZV9iaXQ6CS8qICVvMD1uciwgJW8xPWFkZHIgKi8KKwlCQUNLT0ZGX1NFVFVQKCVvMykKIAlCSVRPUF9QUkVfQkFSUklFUgogCXNybHgJJW8wLCA2LCAlZzEKIAltb3YJMSwgJW8yCkBAIC04NiwxOCArOTEsMjAgQEAKIAl4b3IJJWc3LCAlbzIsICVnMQogCWNhc3gJWyVvMV0sICVnNywgJWcxCiAJY21wCSVnNywgJWcxCi0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIGFuZAklZzcsICVvMiwgJWcyCiAJY2xyCSVvMAogCW1vdnJuZQklZzIsIDEsICVvMAogCUJJVE9QX1BPU1RfQkFSUklFUgogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8zLCAlbzQsIDFiKQogCS5zaXplCXRlc3RfYW5kX2NoYW5nZV9iaXQsIC4tdGVzdF9hbmRfY2hhbmdlX2JpdAogCiAJLmdsb2JsCXNldF9iaXQKIAkudHlwZQlzZXRfYml0LCNmdW5jdGlvbgogc2V0X2JpdDoJCS8qICVvMD1uciwgJW8xPWFkZHIgKi8KKwlCQUNLT0ZGX1NFVFVQKCVvMykKIAlzcmx4CSVvMCwgNiwgJWcxCiAJbW92CTEsICVvMgogCXNsbHgJJWcxLCAzLCAlZzMKQEAgLTEwOCwxNSArMTE1LDE3IEBACiAJb3IJJWc3LCAlbzIsICVnMQogCWNhc3gJWyVvMV0sICVnNywgJWcxCiAJY21wCSVnNywgJWcxCi0JYm5lLHBuCSV4Y2MsIDFiCisJYm5lLHBuCSV4Y2MsIDJmCiAJIG5vcAogCXJldGwKIAkgbm9wCisyOglCQUNLT0ZGX1NQSU4oJW8zLCAlbzQsIDFiKQogCS5zaXplCXNldF9iaXQsIC4tc2V0X2JpdAogCiAJLmdsb2JsCWNsZWFyX2JpdAogCS50eXBlCWNsZWFyX2JpdCwjZnVuY3Rpb24KIGNsZWFyX2JpdDoJCS8qICVvMD1uciwgJW8xPWFkZHIgKi8KKwlCQUNLT0ZGX1NFVFVQKCVvMykKIAlzcmx4CSVvMCwgNiwgJWcxCiAJbW92CTEsICVvMgogCXNsbHgJJWcxLCAzLCAlZzMKQEAgLTEyNywxNSArMTM2LDE3IEBACiAJYW5kbgklZzcsICVvMiwgJWcxCiAJY2FzeAlbJW8xXSwgJWc3LCAlZzEKIAljbXAJJWc3LCAlZzEKLQlibmUscG4JJXhjYywgMWIKKwlibmUscG4JJXhjYywgMmYKIAkgbm9wCiAJcmV0bAogCSBub3AKKzI6CUJBQ0tPRkZfU1BJTiglbzMsICVvNCwgMWIpCiAJLnNpemUJY2xlYXJfYml0LCAuLWNsZWFyX2JpdAogCiAJLmdsb2JsCWNoYW5nZV9iaXQKIAkudHlwZQljaGFuZ2VfYml0LCNmdW5jdGlvbgogY2hhbmdlX2JpdDoJCS8qICVvMD1uciwgJW8xPWFkZHIgKi8KKwlCQUNLT0ZGX1NFVFVQKCVvMykKIAlzcmx4CSVvMCwgNiwgJWcxCiAJbW92CTEsICVvMgogCXNsbHgJJWcxLCAzLCAlZzMKQEAgLTE0Niw4ICsxNTcsOSBAQAogCXhvcgklZzcsICVvMiwgJWcxCiAJY2FzeAlbJW8xXSwgJWc3LCAlZzEKIAljbXAJJWc3LCAlZzEKLQlibmUscG4JJXhjYywgMWIKKwlibmUscG4JJXhjYywgMmYKIAkgbm9wCiAJcmV0bAogCSBub3AKKzI6CUJBQ0tPRkZfU1BJTiglbzMsICVvNCwgMWIpCiAJLnNpemUJY2hhbmdlX2JpdCwgLi1jaGFuZ2VfYml0CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvb3Byb2ZpbGUvS2NvbmZpZyBiL2FyY2gvc3BhcmM2NC9vcHJvZmlsZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGE4NDA4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc3BhcmM2NC9vcHJvZmlsZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotY29uZmlnIFBST0ZJTElORwotCWJvb2wgIlByb2ZpbGluZyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWhlbHAKLQkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHRoZSBleHRlbmRlZCBwcm9maWxpbmcgc3VwcG9ydCBtZWNoYW5pc21zIHVzZWQKLQkgIGJ5IHByb2ZpbGVycyBzdWNoIGFzIE9Qcm9maWxlLgotCSAgCi0KLWNvbmZpZyBPUFJPRklMRQotCXRyaXN0YXRlICJPUHJvZmlsZSBzeXN0ZW0gcHJvZmlsaW5nIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gUFJPRklMSU5HCi0JaGVscAotCSAgT1Byb2ZpbGUgaXMgYSBwcm9maWxpbmcgc3lzdGVtIGNhcGFibGUgb2YgcHJvZmlsaW5nIHRoZQotCSAgd2hvbGUgc3lzdGVtLCBpbmNsdWRlIHRoZSBrZXJuZWwsIGtlcm5lbCBtb2R1bGVzLCBsaWJyYXJpZXMsCi0JICBhbmQgYXBwbGljYXRpb25zLgotCi0JICBJZiB1bnN1cmUsIHNheSBOLgotCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKaW5kZXggM2I2N2RlNy4uYzg2Y2IzMCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCisrKyBiL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYwpAQCAtNDE1LDcgKzQxNSw3IEBACiAJCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIDA6IC8qIGdldHBncnAgKi8KLQkJcmV0dXJuIHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisJCXJldHVybiB0YXNrX3BncnBfbnIoY3VycmVudCk7CiAJY2FzZSAxOiAvKiBzZXRwZ3JwICovCiAJCXsKIAkJCWludCAoKnN5c19zZXRwZ2lkKShwaWRfdCxwaWRfdCkgPQpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQlyZXQgPSBzeXNfc2V0cGdpZCgwLCAwKTsKIAkJCWlmIChyZXQpIHJldHVybiByZXQ7CiAJCQlwcm9jX2NsZWFyX3R0eShjdXJyZW50KTsKLQkJCXJldHVybiBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOworCQkJcmV0dXJuIHRhc2tfcGdycF9ucihjdXJyZW50KTsKIAkJfQogCWNhc2UgMjogLyogZ2V0c2lkICovCiAJCXsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vS2NvbmZpZyBiL2FyY2gvdW0vS2NvbmZpZwppbmRleCA3NDBkOGE5Li5kZDE2ODliIDEwMDY0NAotLS0gYS9hcmNoL3VtL0tjb25maWcKKysrIGIvYXJjaC91bS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogCW9wdGlvbiBkZWZjb25maWdfbGlzdAogCWRlZmF1bHQgImFyY2gvJEFSQ0gvZGVmY29uZmlnIgogCi0jIFVNTCB1c2VzIHRoZSBnZW5lcmljIElSUSBzdWdzeXN0ZW0KKyMgVU1MIHVzZXMgdGhlIGdlbmVyaWMgSVJRIHN1YnN5c3RlbQogY29uZmlnIEdFTkVSSUNfSEFSRElSUVMKIAlib29sCiAJZGVmYXVsdCB5CkBAIC0yODksNCArMjg5LDYgQEAKIAlib29sCiAJZGVmYXVsdCBuCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uIgorCiBzb3VyY2UgImFyY2gvdW0vS2NvbmZpZy5kZWJ1ZyIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCmluZGV4IDc2ZmUwYjAuLjgzYmYxNWEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwpAQCAtMzUsNyArMzUsNyBAQAogLyoKICAqIFJldHVybnMgdGhlIGZyZWUgc3BhY2UgaW5zaWRlIHRoZSByaW5nIGJ1ZmZlciBvZiB0aGlzIGxpbmUuCiAgKgotICogU2hvdWxkIGJlIGNhbGxlZCB3aGlsZSBob2xkaW5nIGxpbmUtPmxvY2sgKHRoaXMgZG9lcyBub3QgbW9kaWZ5IGRhdGFzKS4KKyAqIFNob3VsZCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBsaW5lLT5sb2NrICh0aGlzIGRvZXMgbm90IG1vZGlmeSBkYXRhKS4KICAqLwogc3RhdGljIGludCB3cml0ZV9yb29tKHN0cnVjdCBsaW5lICpsaW5lKQogewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL251bGwuYyBiL2FyY2gvdW0vZHJpdmVycy9udWxsLmMKaW5kZXggMjFhZDNkNy4uMmI0NWExNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL251bGwuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbnVsbC5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgImNoYW5fdXNlci5oIgogI2luY2x1ZGUgIm9zLmgiCiAKLS8qIFRoaXMgYWRkcmVzcyBpcyB1c2VkIG9ubHkgYXMgYSB1bmlxdWUgaWRlbnRpZmVyICovCisvKiBUaGlzIGFkZHJlc3MgaXMgdXNlZCBvbmx5IGFzIGEgdW5pcXVlIGlkZW50aWZpZXIgKi8KIHN0YXRpYyBpbnQgbnVsbF9jaGFuOwogCiBzdGF0aWMgdm9pZCAqbnVsbF9pbml0KGNoYXIgKnN0ciwgaW50IGRldmljZSwgY29uc3Qgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zbGlwX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9zbGlwX2tlcm4uYwppbmRleCBhZTY3ZTcxLi42YjRhMGY5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc2xpcF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NsaXBfa2Vybi5jCkBAIC0zMSwxMCArMzEsOCBAQAogCXNsaXBfcHJvdG9faW5pdCgmc3ByaS0+c2xpcCk7CiAKIAlkZXYtPmluaXQgPSBOVUxMOwotCWRldi0+aGVhZGVyX2NhY2hlX3VwZGF0ZSA9IE5VTEw7Ci0JZGV2LT5oYXJkX2hlYWRlcl9jYWNoZSA9IE5VTEw7Ci0JZGV2LT5oYXJkX2hlYWRlciA9IE5VTEw7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOworCWRldi0+aGVhZGVyX29wcyA9IE5VTEw7CiAJZGV2LT5hZGRyX2xlbiA9IDA7CiAJZGV2LT50eXBlID0gQVJQSFJEX1NMSVA7CiAJZGV2LT50eF9xdWV1ZV9sZW4gPSAyNTY7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwX2tlcm4uYwppbmRleCAyNDBlZTY1Li5kOTg3YWYyIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zbGlycF9rZXJuLmMKQEAgLTM0LDkgKzM0LDcgQEAKIAogCWRldi0+aW5pdCA9IE5VTEw7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAwOwotCWRldi0+aGVhZGVyX2NhY2hlX3VwZGF0ZSA9IE5VTEw7Ci0JZGV2LT5oYXJkX2hlYWRlcl9jYWNoZSA9IE5VTEw7Ci0JZGV2LT5oYXJkX2hlYWRlciA9IE5VTEw7CisJZGV2LT5oZWFkZXJfb3BzID0gTlVMTDsKIAlkZXYtPmFkZHJfbGVuID0gMDsKIAlkZXYtPnR5cGUgPSBBUlBIUkRfU0xJUDsKIAlkZXYtPnR4X3F1ZXVlX2xlbiA9IDI1NjsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zdGRlcnJfY29uc29sZS5jIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGVycl9jb25zb2xlLmMKaW5kZXggNDczOWRkNS4uZDA3YTk3ZiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3N0ZGVycl9jb25zb2xlLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGVycl9jb25zb2xlLmMKQEAgLTgsNyArOCw3IEBACiAvKiB0cml2aWFsIGNvbnNvbGUgZHJpdmVyIC0tIHNpbXBseSBkdW1wIGV2ZXJ5dGhpbmcgdG8gc3RkZXJyICAgICAgICAgICAgICAgICAgICAqLwogCiAvKgotICogRG9uJ3QgcmVnaXN0ZXIgYnkgZGVmYXVsdCAtLSBhcyB0aGlzIHJlZ2lzdGVyZXMgdmVyeSBlYXJseSBpbiB0aGUKKyAqIERvbid0IHJlZ2lzdGVyIGJ5IGRlZmF1bHQgLS0gYXMgdGhpcyByZWdpc3RlcnMgdmVyeSBlYXJseSBpbiB0aGUKICAqIGJvb3QgcHJvY2VzcyBpdCBiZWNvbWVzIHRoZSBkZWZhdWx0IGNvbnNvbGUuCiAgKgogICogSW5pdGlhbGl6ZWQgYXQgaW5pdCB0aW1lLgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvZ21vbl9zeW1zLmMgYi9hcmNoL3VtL2tlcm5lbC9nbW9uX3N5bXMuYwppbmRleCAxM2FhMTE1Li43MzRmODczIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9nbW9uX3N5bXMuYworKysgYi9hcmNoL3VtL2tlcm5lbC9nbW9uX3N5bXMuYwpAQCAtMTIsOCArMTIsOCBAQAogICogdmVyc2lvbnMgaW4gbGliZ2Nvdi4KICAqCiAgKiBTaW5jZSBTdVNFIGJhY2twb3J0ZWQgdGhlIGZpeCwgd2UgY2Fubm90IGhhbmRsZSBpdCBkZXBlbmRpbmcgb24gR0NDIHZlcnNpb24uCi0gKiBTbywgdW5jb25kaXRpbmFsbHkgZXhwb3J0IGl0LiBCdXQgYWxzbyBnaXZlIGl0IGEgd2VhayBkZWNsYXJhdGlvbiwgd2hpY2ggd2lsbAotICogYmUgb3ZlcnJpZGVuIGJ5IGFueSBvdGhlciBvbmUuCisgKiBTbywgdW5jb25kaXRpb25hbGx5IGV4cG9ydCBpdC4gQnV0IGFsc28gZ2l2ZSBpdCBhIHdlYWsgZGVjbGFyYXRpb24sIHdoaWNoIHdpbGwKKyAqIGJlIG92ZXJyaWRkZW4gYnkgYW55IG90aGVyIG9uZS4KICAqLwogCiBleHRlcm4gdm9pZCBfX2djb3ZfaW5pdCh2b2lkICopIF9fYXR0cmlidXRlX18oKHdlYWspKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2lycS5jIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKaW5kZXggMjc3ZmNlMS4uNzBjMmQ2MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvaXJxLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogfQogCiAvKgotICogZG9fSVJRIGhhbmRsZXMgYWxsIG5vcm1hbCBkZXZpY2UgSVJRJ3MgKHRoZSBzcGVjaWFsCisgKiBkb19JUlEgaGFuZGxlcyBhbGwgbm9ybWFsIGRldmljZSBJUlFzICh0aGUgc3BlY2lhbAogICogU01QIGNyb3NzLUNQVSBpbnRlcnJ1cHRzIGhhdmUgdGhlaXIgb3duIHNwZWNpZmljCiAgKiBoYW5kbGVycykuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jIGIvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggYTBlYmEwOC4uNDdiNTdiNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvcHRyYWNlLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogCS8qIFVzZXItbW9kZSBlaXA/ICovCiAJaW5mby5zaV9hZGRyID0gVVBUX0lTX1VTRVIocmVncykgPyAodm9pZCBfX3VzZXIgKikgVVBUX0lQKHJlZ3MpIDogTlVMTDsKIAotCS8qIFNlbmQgdXMgdGhlIGZha2V5IFNJR1RSQVAgKi8KKwkvKiBTZW5kIHVzIHRoZSBmYWtlIFNJR1RSQVAgKi8KIAlmb3JjZV9zaWdfaW5mbyhTSUdUUkFQLCAmaW5mbywgdHNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvdHJhcC5jIGIvYXJjaC91bS9rZXJuZWwvdHJhcC5jCmluZGV4IGJkMDYwNTUuLmNiMzMyMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3RyYXAuYworKysgYi9hcmNoL3VtL2tlcm5lbC90cmFwLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogICogdXMgdW5hYmxlIHRvIGhhbmRsZSB0aGUgcGFnZSBmYXVsdCBncmFjZWZ1bGx5LgogICovCiBvdXRfb2ZfbWVtb3J5OgotCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7CiAJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYnVnLmMgYi9hcmNoL3VtL3N5cy1pMzg2L2J1Zy5jCmluZGV4IDIwMGM4YmEuLmE0MzYwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvYnVnLmMKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9idWcuYwpAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIC8qIE1vc3RseSBjb3BpZWQgZnJvbSBpMzg2L3g4Nl84NiAtIGVsaW1pbmF0ZWQgdGhlIGVpcCA8IFBBR0VfT0ZGU0VUIGJlY2F1c2UKLSAqIHRoYXQncyBub3QgcmVsZXZlbnQgaW4gc2thcyBtb2RlLgorICogdGhhdCdzIG5vdCByZWxldmFudCBpbiBza2FzIG1vZGUuCiAgKi8KIAogaW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyBlaXApCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jIGIvYXJjaC91bS9zeXMtaTM4Ni90bHMuYwppbmRleCBiMDIyNjZhLi5mY2FmZjg2IDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L3Rscy5jCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvdGxzLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKICAqIFhYWDogQ29uc2lkZXIgbGVhdmluZyBvbmUgZnJlZSBzbG90IGZvciBnbGliYyB1c2FnZSBhdCBmaXJzdCBwbGFjZS4gVGhpcyBtdXN0CiAgKiBiZSBkb25lIGhlcmUgKGFuZCBieSBjaGFuZ2luZyBHRFRfRU5UUllfVExTXyogbWFjcm9zKSBhbmQgbm93aGVyZSBlbHNlLgogICoKLSAqIEFsc28sIHRoaXMgbXVzdCBiZSB0ZXN0ZWQgd2hlbiBjb21waWxpbmcgaW4gU0tBUyBtb2RlIHdpdGggZGluYW1pYyBsaW5raW5nCisgKiBBbHNvLCB0aGlzIG11c3QgYmUgdGVzdGVkIHdoZW4gY29tcGlsaW5nIGluIFNLQVMgbW9kZSB3aXRoIGR5bmFtaWMgbGlua2luZwogICogYW5kIHJ1bm5pbmcgYWdhaW5zdCBOUFRMLgogICovCiBzdGF0aWMgaW50IGdldF9mcmVlX2lkeChzdHJ1Y3QgdGFza19zdHJ1Y3QqIHRhc2spCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvYnVnLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvYnVnLmMKaW5kZXggMjAwYzhiYS4uYTQzNjBiNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L2J1Zy5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9idWcuYwpAQCAtNiw3ICs2LDcgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKIC8qIE1vc3RseSBjb3BpZWQgZnJvbSBpMzg2L3g4Nl84NiAtIGVsaW1pbmF0ZWQgdGhlIGVpcCA8IFBBR0VfT0ZGU0VUIGJlY2F1c2UKLSAqIHRoYXQncyBub3QgcmVsZXZlbnQgaW4gc2thcyBtb2RlLgorICogdGhhdCdzIG5vdCByZWxldmFudCBpbiBza2FzIG1vZGUuCiAgKi8KIAogaW50IGlzX3ZhbGlkX2J1Z2FkZHIodW5zaWduZWQgbG9uZyBlaXApCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzcnEuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNycS5jCmluZGV4IGNlM2UwN2YuLjc2NTQ0NDAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNycS5jCisrKyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNycS5jCkBAIC0xNSw4ICsxNSw4IEBACiB7CiAJcHJpbnRrKCJcbiIpOwogCXByaW50X21vZHVsZXMoKTsKLQlwcmludGsoIlBpZDogJWQsIGNvbW06ICUuMjBzICVzICVzXG4iLAotCSAgICAgICBjdXJyZW50LT5waWQsIGN1cnJlbnQtPmNvbW0sIHByaW50X3RhaW50ZWQoKSwgaW5pdF91dHNuYW1lKCktPnJlbGVhc2UpOworCXByaW50aygiUGlkOiAlZCwgY29tbTogJS4yMHMgJXMgJXNcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQljdXJyZW50LT5jb21tLCBwcmludF90YWludGVkKCksIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlKTsKIAlwcmludGsoIlJJUDogJTA0bHg6WzwlMDE2bHg+XSAiLCBQVF9SRUdTX0NTKHJlZ3MpICYgMHhmZmZmLAogCSAgICAgICBQVF9SRUdTX1JJUChyZWdzKSk7CiAJcHJpbnRrKCJcblJTUDogJTAxNmx4ICBFRkxBR1M6ICUwOGx4XG4iLCBQVF9SRUdTX1JTUChyZWdzKSwKZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9LY29uZmlnIGIvYXJjaC92ODUwL0tjb25maWcKaW5kZXggYWNlNDc5YS4uYjZhNTBiOCAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL0tjb25maWcKKysrIGIvYXJjaC92ODUwL0tjb25maWcKQEAgLTMzMSw2ICszMzEsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvdXNiL0tjb25maWciCiAKK3NvdXJjZSAia2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uIgorCiBzb3VyY2UgImFyY2gvdjg1MC9LY29uZmlnLmRlYnVnIgogCiBzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL21lMi5jIGIvYXJjaC92ODUwL2tlcm5lbC9tZTIuYwppbmRleCAzOGJlNWMxLi4wMDcxMTVkIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL21lMi5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvbWUyLmMKQEAgLTU4LDEzICs1OCwxMyBAQAogdm9pZCBtZTJfdWFydF9wcmVfY29uZmlndXJlICh1bnNpZ25lZCBjaGFuLCB1bnNpZ25lZCBjZmxhZ3MsIHVuc2lnbmVkIGJhdWQpCiB7CiAJaWYgKGNoYW4gPT0gMCkgewotCQkvKiBTcGVjaWZ5IHRoYXQgdGhlIHJlbGV2ZW50IHBpbnMgb24gdGhlIGNoaXAgc2hvdWxkIGRvCisJCS8qIFNwZWNpZnkgdGhhdCB0aGUgcmVsZXZhbnQgcGlucyBvbiB0aGUgY2hpcCBzaG91bGQgZG8KIAkJICAgc2VyaWFsIEkvTywgbm90IGRpcmVjdCBJL08uICAqLwogCQlNRTJfUE9SVDFfUE1DIHw9IDB4QzsKIAkJLyogU3BlY2lmeSB0aGF0IHdlJ3JlIHVzaW5nIHRoZSBVQVJULCBub3QgdGhlIENTSSBkZXZpY2UuICovCiAJCU1FMl9QT1JUMV9QRkMgfD0gMHhDOwogCX0gZWxzZSBpZiAoY2hhbiA9PSAxKSB7Ci0JCS8qIFNwZWNpZnkgdGhhdCB0aGUgcmVsZXZlbnQgcGlucyBvbiB0aGUgY2hpcCBzaG91bGQgZG8KKwkJLyogU3BlY2lmeSB0aGF0IHRoZSByZWxldmFudCBwaW5zIG9uIHRoZSBjaGlwIHNob3VsZCBkbwogCQkgICBzZXJpYWwgSS9PLCBub3QgZGlyZWN0IEkvTy4gICovCiAJCU1FMl9QT1JUMl9QTUMgfD0gMHg2OwogCQkvKiBTcGVjaWZ5IHRoYXQgd2UncmUgdXNpbmcgdGhlIFVBUlQsIG5vdCB0aGUgQ1NJIGRldmljZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21iX2FfcGNpLmMgYi9hcmNoL3Y4NTAva2VybmVsL3J0ZV9tYl9hX3BjaS5jCmluZGV4IDM1YTRiZDUuLjcxNjU0NzggMTAwNjQ0Ci0tLSBhL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21iX2FfcGNpLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9ydGVfbWJfYV9wY2kuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiAJCSAgIGRlZmF1bHQgdXNlcy4gICovCiAKIAkJLyogU2lnbmlmaWNhbnQgYWRkcmVzcyBiaXRzIHVzZWQgZm9yIGRlY29kaW5nIFBDSSBHQ1M1IHNwYWNlCi0JCSAgIGFjY2Vzc2Vzcy4gICovCisJCSAgIGFjY2Vzc2VzLiAgKi8KIAkJTUJfQV9QQ0lfRE1SUiA9IH4oTUJfQV9QQ0lfTUVNX1NJWkUgLSAxKTsKIAogCQkvKiBJIGRvbid0IHVuZGVyc3RhbmQgdGhpcywgYnV0IHRoZSBTb2x1dGlvbkdlYXIgZXhhbXBsZSBjb2RlCkBAIC03NzUsNyArNzc1LDcgQEAKIC8qIEZyZWUgYW5kIHVubWFwIGEgY29uc2lzdGVudCBETUEgYnVmZmVyLiAgQ1BVX0FERFIgYW5kIERNQV9BRERSIG11c3QKICAgIGJlIHZhbHVlcyB0aGF0IHdlcmUgcmV0dXJuZWQgZnJvbSBwY2lfYWxsb2NfY29uc2lzdGVudC4gIFNJWkUgbXVzdCBiZQogICAgdGhlIHNhbWUgYXMgd2hhdCBhcyBwYXNzZWQgaW50byBwY2lfYWxsb2NfY29uc2lzdGVudC4gIFJlZmVyZW5jZXMgdG8KLSAgIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29zY2lhdGVkIHdpdGggQ1BVX0FERFIgb3IgRE1BX0FERFIgcGFzdAorICAgdGhlIG1lbW9yeSBhbmQgbWFwcGluZ3MgYXNzb2NpYXRlZCB3aXRoIENQVV9BRERSIG9yIERNQV9BRERSIHBhc3QKICAgIHRoaXMgY2FsbCBhcmUgaWxsZWdhbC4gICovCiB2b2lkCiBwY2lfZnJlZV9jb25zaXN0ZW50IChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYyBiL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjXzMyLmMKaW5kZXggYjI4NTA1Yy4uMWRjMWUxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2NfMzIuYworKysgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzY18zMi5jCkBAIC0yNSw3ICsyNSw3IEBACiAKIC8qCiAgKiBHZXR0aW5nIHRvIHByb3ZhYmxlIHNhZmUgaW4gcGxhY2UgZGVjb21wcmVzc2lvbiBpcyBoYXJkLgotICogV29yc3QgY2FzZSBiZWhhdmlvdXJzIG5lZWQgdG8gYmUgYW5hbGl6ZWQuCisgKiBXb3JzdCBjYXNlIGJlaGF2aW91cnMgbmVlZCB0byBiZSBhbmFseXplZC4KICAqIEJhY2tncm91bmQgaW5mb3JtYXRpb246CiAgKgogICogVGhlIGZpbGUgbGF5b3V0IGlzOgpAQCAtOTQsNyArOTQsNyBAQAogICogQWRkaW5nIDMyNzY4IGluc3RlYWQgb2YgMzI3NjcganVzdCBtYWtlcyBmb3Igcm91bmQgbnVtYmVycy4KICAqIEFkZGluZyB0aGUgZGVjb21wcmVzc29yX3NpemUgaXMgbmVjZXNzYXJ5IGFzIGl0IG11c2h0IGxpdmUgYWZ0ZXIgYWxsCiAgKiBvZiB0aGUgZGF0YSBhcyB3ZWxsLiAgTGFzdCBJIG1lYXN1cmVkIHRoZSBkZWNvbXByZXNzb3IgaXMgYWJvdXQgMTRLLgotICogMTBLIG9mIGFjdHVhbGwgZGF0YSBhbmQgNEsgb2YgYnNzLgorICogMTBLIG9mIGFjdHVhbCBkYXRhIGFuZCA0SyBvZiBic3MuCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjXzY0LmMgYi9hcmNoL3g4Ni9ib290L2NvbXByZXNzZWQvbWlzY182NC5jCmluZGV4IGY5MzJiMGUuLjZlYTAxNWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvY29tcHJlc3NlZC9taXNjXzY0LmMKKysrIGIvYXJjaC94ODYvYm9vdC9jb21wcmVzc2VkL21pc2NfNjQuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAvKgogICogR2V0dGluZyB0byBwcm92YWJsZSBzYWZlIGluIHBsYWNlIGRlY29tcHJlc3Npb24gaXMgaGFyZC4KLSAqIFdvcnN0IGNhc2UgYmVoYXZpb3VycyBuZWVkIHRvIGJlIGFuYWxpemVkLgorICogV29yc3QgY2FzZSBiZWhhdmlvdXJzIG5lZWQgdG8gYmUgYW5hbHl6ZWQuCiAgKiBCYWNrZ3JvdW5kIGluZm9ybWF0aW9uOgogICoKICAqIFRoZSBmaWxlIGxheW91dCBpczoKQEAgLTk0LDcgKzk0LDcgQEAKICAqIEFkZGluZyAzMjc2OCBpbnN0ZWFkIG9mIDMyNzY3IGp1c3QgbWFrZXMgZm9yIHJvdW5kIG51bWJlcnMuCiAgKiBBZGRpbmcgdGhlIGRlY29tcHJlc3Nvcl9zaXplIGlzIG5lY2Vzc2FyeSBhcyBpdCBtdXNodCBsaXZlIGFmdGVyIGFsbAogICogb2YgdGhlIGRhdGEgYXMgd2VsbC4gIExhc3QgSSBtZWFzdXJlZCB0aGUgZGVjb21wcmVzc29yIGlzIGFib3V0IDE0Sy4KLSAqIDEwSyBvZiBhY3R1YWxsIGRhdGEgYW5kIDRLIG9mIGJzcy4KKyAqIDEwSyBvZiBhY3R1YWwgZGF0YSBhbmQgNEsgb2YgYnNzLgogICoKICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pYTMyL2lhMzJfYmluZm10LmMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYmluZm10LmMKaW5kZXggMTE4YjlmOS4uNTU4MjJkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyX2JpbmZtdC5jCisrKyBiL2FyY2gveDg2L2lhMzIvaWEzMl9iaW5mbXQuYwpAQCAtNSwxMCArNSw2IEBACiAgKiBUaGlzIHRyaWNrcyBiaW5mbXRfZWxmLmMgaW50byBsb2FkaW5nIDMyYml0IGJpbmFyaWVzIHVzaW5nIGxvdHMgCiAgKiBvZiB1Z2x5IHByZXByb2Nlc3NvciB0cmlja3MuIFRhbGsgYWJvdXQgdmVyeSB2ZXJ5IHBvb3IgbWFuJ3MgaW5oZXJpdGFuY2UuCiAgKi8gCi0jZGVmaW5lIF9fQVNNX1g4Nl82NF9FTEZfSCAxCi0KLSN1bmRlZiBFTEZfQ0xBU1MKLSNkZWZpbmUgRUxGX0NMQVNTIEVMRkNMQVNTMzIKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CkBAIC0xOSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGZjb3JlLWNvbXBhdC5oPgogCiAjaW5jbHVkZSA8YXNtL3NlZ21lbnQuaD4gCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgpAQCAtMzEsNiArMjgsMjAgQEAKICNpbmNsdWRlIDxhc20vaWEzMi5oPgogI2luY2x1ZGUgPGFzbS92c3lzY2FsbDMyLmg+CiAKKyN1bmRlZglFTEZfQVJDSAorI3VuZGVmCUVMRl9DTEFTUworI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfQVJDSAlFTV8zODYKKworI3VuZGVmCWVsZmhkcgorI3VuZGVmCWVsZl9waGRyCisjdW5kZWYJZWxmX25vdGUKKyN1bmRlZgllbGZfYWRkcl90CisjZGVmaW5lIGVsZmhkcgkJZWxmMzJfaGRyCisjZGVmaW5lIGVsZl9waGRyCWVsZjMyX3BoZHIKKyNkZWZpbmUgZWxmX25vdGUJZWxmMzJfbm90ZQorI2RlZmluZSBlbGZfYWRkcl90CUVsZjMyX09mZgorCiAjZGVmaW5lIEVMRl9OQU1FICJlbGYvaTM4NiIKIAogI2RlZmluZSBBVF9TWVNJTkZPIDMyCkBAIC00OCw3NCArNTksMjAgQEAKIH0gd2hpbGUoMCkKIAogc3RydWN0IGZpbGU7Ci1zdHJ1Y3QgZWxmX3BoZHI7IAogCiAjZGVmaW5lIElBMzJfRU1VTEFUT1IgMQogCisjdW5kZWYgRUxGX0VUX0RZTl9CQVNFCisKICNkZWZpbmUgRUxGX0VUX0RZTl9CQVNFCQkoVEFTS19VTk1BUFBFRF9CQVNFICsgMHgxMDAwMDAwKQogCi0jdW5kZWYgRUxGX0FSQ0gKLSNkZWZpbmUgRUxGX0FSQ0ggRU1fMzg2Ci0KLSNkZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKLQotI2RlZmluZSBVU0VfRUxGX0NPUkVfRFVNUCAxCi0KLS8qIE92ZXJyaWRlIGVsZmNvcmUuaCAqLyAKLSNkZWZpbmUgX0xJTlVYX0VMRkNPUkVfSCAxCi10eXBlZGVmIHVuc2lnbmVkIGludCBlbGZfZ3JlZ190OwotCi0jZGVmaW5lIEVMRl9OR1JFRyAoc2l6ZW9mIChzdHJ1Y3QgdXNlcl9yZWdzX3N0cnVjdDMyKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKLXR5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107Ci0KLXN0cnVjdCBlbGZfc2lnaW5mbwotewotCWludAlzaV9zaWdubzsJCQkvKiBzaWduYWwgbnVtYmVyICovCi0JaW50CXNpX2NvZGU7CQkJLyogZXh0cmEgY29kZSAqLwotCWludAlzaV9lcnJubzsJCQkvKiBlcnJubyAqLwotfTsKLQogI2RlZmluZSBqaWZmaWVzX3RvX3RpbWV2YWwoYSxiKSBkbyB7IChiKS0+dHZfdXNlYyA9IDA7IChiKS0+dHZfc2VjID0gKGEpL0haOyB9d2hpbGUoMCkKIAotc3RydWN0IGVsZl9wcnN0YXR1cwotewotCXN0cnVjdCBlbGZfc2lnaW5mbyBwcl9pbmZvOwkvKiBJbmZvIGFzc29jaWF0ZWQgd2l0aCBzaWduYWwgKi8KLQlzaG9ydAlwcl9jdXJzaWc7CQkvKiBDdXJyZW50IHNpZ25hbCAqLwotCXVuc2lnbmVkIGludCBwcl9zaWdwZW5kOwkvKiBTZXQgb2YgcGVuZGluZyBzaWduYWxzICovCi0JdW5zaWduZWQgaW50IHByX3NpZ2hvbGQ7CS8qIFNldCBvZiBoZWxkIHNpZ25hbHMgKi8KLQlwaWRfdAlwcl9waWQ7Ci0JcGlkX3QJcHJfcHBpZDsKLQlwaWRfdAlwcl9wZ3JwOwotCXBpZF90CXByX3NpZDsKLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgcHJfdXRpbWU7CS8qIFVzZXIgdGltZSAqLwotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBwcl9zdGltZTsJLyogU3lzdGVtIHRpbWUgKi8KLQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgcHJfY3V0aW1lOwkvKiBDdW11bGF0aXZlIHVzZXIgdGltZSAqLwotCXN0cnVjdCBjb21wYXRfdGltZXZhbCBwcl9jc3RpbWU7CS8qIEN1bXVsYXRpdmUgc3lzdGVtIHRpbWUgKi8KLQllbGZfZ3JlZ3NldF90IHByX3JlZzsJLyogR1AgcmVnaXN0ZXJzICovCi0JaW50IHByX2ZwdmFsaWQ7CQkvKiBUcnVlIGlmIG1hdGggY28tcHJvY2Vzc29yIGJlaW5nIHVzZWQuICAqLwotfTsKLQotI2RlZmluZSBFTEZfUFJBUkdTWgkoODApCS8qIE51bWJlciBvZiBjaGFycyBmb3IgYXJncyAqLwotCi1zdHJ1Y3QgZWxmX3BycHNpbmZvCi17Ci0JY2hhcglwcl9zdGF0ZTsJLyogbnVtZXJpYyBwcm9jZXNzIHN0YXRlICovCi0JY2hhcglwcl9zbmFtZTsJLyogY2hhciBmb3IgcHJfc3RhdGUgKi8KLQljaGFyCXByX3pvbWI7CS8qIHpvbWJpZSAqLwotCWNoYXIJcHJfbmljZTsJLyogbmljZSB2YWwgKi8KLQl1bnNpZ25lZCBpbnQgcHJfZmxhZzsJLyogZmxhZ3MgKi8KLQlfX3UxNglwcl91aWQ7Ci0JX191MTYJcHJfZ2lkOwotCXBpZF90CXByX3BpZCwgcHJfcHBpZCwgcHJfcGdycCwgcHJfc2lkOwotCS8qIExvdHMgbWlzc2luZyAqLwotCWNoYXIJcHJfZm5hbWVbMTZdOwkvKiBmaWxlbmFtZSBvZiBleGVjdXRhYmxlICovCi0JY2hhcglwcl9wc2FyZ3NbRUxGX1BSQVJHU1pdOwkvKiBpbml0aWFsIHBhcnQgb2YgYXJnIGxpc3QgKi8KLX07Ci0KICNkZWZpbmUgX0dFVF9TRUcoeCkgXAogCSh7IF9fdTMyIHNlZzsgYXNtKCJtb3ZsICUlIiBfX3N0cmluZ2lmeSh4KSAiLCUwIiA6ICI9ciIoc2VnKSk7IHNlZzsgfSkKIAogLyogQXNzdW1lcyBjdXJyZW50PT1wcm9jZXNzIHRvIGJlIGR1bXBlZCAqLworI3VuZGVmCUVMRl9DT1JFX0NPUFlfUkVHUwogI2RlZmluZSBFTEZfQ09SRV9DT1BZX1JFR1MocHJfcmVnLCByZWdzKSAgICAgICAJCVwKIAlwcl9yZWdbMF0gPSByZWdzLT5yYng7CQkJCVwKIAlwcl9yZWdbMV0gPSByZWdzLT5yY3g7CQkJCVwKQEAgLTEzNSwzNiArOTIsNDEgQEAKIAlwcl9yZWdbMTVdID0gcmVncy0+cnNwOwkJCQlcCiAJcHJfcmVnWzE2XSA9IHJlZ3MtPnNzOwogCi0jZGVmaW5lIHVzZXIgdXNlcjMyCisKKyNkZWZpbmUgZWxmX3Byc3RhdHVzCWNvbXBhdF9lbGZfcHJzdGF0dXMKKyNkZWZpbmUgZWxmX3BycHNpbmZvCWNvbXBhdF9lbGZfcHJwc2luZm8KKyNkZWZpbmUgZWxmX2ZwcmVnc2V0X3QJc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdAorI2RlZmluZQllbGZfZnB4cmVnc2V0X3QJc3RydWN0IHVzZXIzMl9meHNyX3N0cnVjdAorI2RlZmluZSB1c2VyCQl1c2VyMzIKIAogI3VuZGVmIGVsZl9yZWFkX2ltcGxpZXNfZXhlYwogI2RlZmluZSBlbGZfcmVhZF9pbXBsaWVzX2V4ZWMoZXgsIGV4ZWN1dGFibGVfc3RhY2spICAgICAoZXhlY3V0YWJsZV9zdGFjayAhPSBFWFNUQUNLX0RJU0FCTEVfWCkKLS8vI2luY2x1ZGUgPGFzbS9pYTMyLmg+Ci0jaW5jbHVkZSA8bGludXgvZWxmLmg+CiAKLXR5cGVkZWYgc3RydWN0IHVzZXJfaTM4N19pYTMyX3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKLXR5cGVkZWYgc3RydWN0IHVzZXIzMl9meHNyX3N0cnVjdCBlbGZfZnB4cmVnc2V0X3Q7Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIGVsZl9jb3JlX2NvcHlfcmVncyhlbGZfZ3JlZ3NldF90ICplbGZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKKyNkZWZpbmUgZWxmX2NvcmVfY29weV9yZWdzCQllbGYzMl9jb3JlX2NvcHlfcmVncworc3RhdGljIGlubGluZSB2b2lkIGVsZjMyX2NvcmVfY29weV9yZWdzKGNvbXBhdF9lbGZfZ3JlZ3NldF90ICplbGZyZWdzLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlFTEZfQ09SRV9DT1BZX1JFR1MoKCplbGZyZWdzKSwgcmVncykKKwlFTEZfQ09SRV9DT1BZX1JFR1MoKCZlbGZyZWdzLT5lYngpLCByZWdzKQogfQogCi1zdGF0aWMgaW5saW5lIGludCBlbGZfY29yZV9jb3B5X3Rhc2tfcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGVsZl9ncmVnc2V0X3QqIGVsZnJlZ3MpCisjZGVmaW5lIGVsZl9jb3JlX2NvcHlfdGFza19yZWdzCQllbGYzMl9jb3JlX2NvcHlfdGFza19yZWdzCitzdGF0aWMgaW5saW5lIGludCBlbGYzMl9jb3JlX2NvcHlfdGFza19yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwKKwkJCQkJICAgIGNvbXBhdF9lbGZfZ3JlZ3NldF90KiBlbGZyZWdzKQogewkKIAlzdHJ1Y3QgcHRfcmVncyAqcHAgPSB0YXNrX3B0X3JlZ3ModCk7Ci0JRUxGX0NPUkVfQ09QWV9SRUdTKCgqZWxmcmVncyksIHBwKTsKKwlFTEZfQ09SRV9DT1BZX1JFR1MoKCZlbGZyZWdzLT5lYngpLCBwcCk7CiAJLyogZml4IHdyb25nIHNlZ21lbnRzICovIAotCSgqZWxmcmVncylbN10gPSB0LT50aHJlYWQuZHM7IAotCSgqZWxmcmVncylbOV0gPSB0LT50aHJlYWQuZnNpbmRleDsgCi0JKCplbGZyZWdzKVsxMF0gPSB0LT50aHJlYWQuZ3NpbmRleDsgCi0JKCplbGZyZWdzKVs4XSA9IHQtPnRocmVhZC5lczsgCQorCWVsZnJlZ3MtPmRzID0gdC0+dGhyZWFkLmRzOworCWVsZnJlZ3MtPmZzID0gdC0+dGhyZWFkLmZzaW5kZXg7CisJZWxmcmVncy0+Z3MgPSB0LT50aHJlYWQuZ3NpbmRleDsKKwllbGZyZWdzLT5lcyA9IHQtPnRocmVhZC5lczsKIAlyZXR1cm4gMTsgCiB9CiAKKyNkZWZpbmUgZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncwllbGYzMl9jb3JlX2NvcHlfdGFza19mcHJlZ3MKIHN0YXRpYyBpbmxpbmUgaW50IAotZWxmX2NvcmVfY29weV90YXNrX2ZwcmVncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGVsZl9mcHJlZ3NldF90ICpmcHUpCitlbGYzMl9jb3JlX2NvcHlfdGFza19mcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJICAgIGVsZl9mcHJlZ3NldF90ICpmcHUpCiB7CiAJc3RydWN0IF9mcHN0YXRlX2lhMzIgKmZwc3RhdGUgPSAodm9pZCopZnB1OyAKIAltbV9zZWdtZW50X3Qgb2xkZnMgPSBnZXRfZnMoKTsKQEAgLTE4Niw4ICsxNDgsOSBAQAogCiAjZGVmaW5lIEVMRl9DT1JFX0NPUFlfWEZQUkVHUyAxCiAjZGVmaW5lIEVMRl9DT1JFX1hGUFJFR19UWVBFIE5UX1BSWEZQUkVHCisjZGVmaW5lIGVsZl9jb3JlX2NvcHlfdGFza194ZnByZWdzCWVsZjMyX2NvcmVfY29weV90YXNrX3hmcHJlZ3MKIHN0YXRpYyBpbmxpbmUgaW50IAotZWxmX2NvcmVfY29weV90YXNrX3hmcHJlZ3Moc3RydWN0IHRhc2tfc3RydWN0ICp0LCBlbGZfZnB4cmVnc2V0X3QgKnhmcHUpCitlbGYzMl9jb3JlX2NvcHlfdGFza194ZnByZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCwgZWxmX2ZweHJlZ3NldF90ICp4ZnB1KQogewogCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKHQpOwogCWlmICghdHNrX3VzZWRfbWF0aCh0KSkKQEAgLTIwNiw2ICsxNjksMTAgQEAKIAogZXh0ZXJuIGludCBmb3JjZV9wZXJzb25hbGl0eTMyOwogCisjdW5kZWYJRUxGX0VYRUNfUEFHRVNJWkUKKyN1bmRlZglFTEZfSFdDQVAKKyN1bmRlZglFTEZfUExBVEZPUk0KKyN1bmRlZglTRVRfUEVSU09OQUxJVFkKICNkZWZpbmUgRUxGX0VYRUNfUEFHRVNJWkUgUEFHRV9TSVpFCiAjZGVmaW5lIEVMRl9IV0NBUCAoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eVswXSkKICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoImk2ODYiKQpAQCAtMjMxLDYgKzE5OCw3IEBACiAKICNkZWZpbmUgbG9hZF9lbGZfYmluYXJ5IGxvYWRfZWxmMzJfYmluYXJ5CiAKKyN1bmRlZglFTEZfUExBVF9JTklUCiAjZGVmaW5lIEVMRl9QTEFUX0lOSVQociwgbG9hZF9hZGRyKQllbGYzMl9pbml0KHIpCiAKICN1bmRlZiBzdGFydF90aHJlYWQKQEAgLTI4OSw3ICsyNTcsNiBAQAogCiBzdGF0aWMgY3RsX3RhYmxlIGFiaV90YWJsZTJbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IDk5LAogCQkucHJvY25hbWUJPSAidnN5c2NhbGwzMiIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfdnN5c2NhbGwzMiwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZV8zMiBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZV8zMgppbmRleCBhM2ZhMTFmLi5jY2VhNTkwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlXzMyCkBAIC0yLDcgKzIsNyBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KICMKIAotZXh0cmEteSA6PSBoZWFkXzMyLm8gaW5pdF90YXNrXzMyLm8gdm1saW51eC5sZHMKK2V4dHJhLXkgOj0gaGVhZF8zMi5vIGluaXRfdGFzay5vIHZtbGludXgubGRzCiAKIG9iai15CTo9IHByb2Nlc3NfMzIubyBzaWduYWxfMzIubyBlbnRyeV8zMi5vIHRyYXBzXzMyLm8gaXJxXzMyLm8gXAogCQlwdHJhY2VfMzIubyB0aW1lXzMyLm8gaW9wb3J0XzMyLm8gbGR0XzMyLm8gc2V0dXBfMzIubyBpODI1OV8zMi5vIHN5c19pMzg2XzMyLm8gXApAQCAtMTcsNiArMTcsNyBAQAogb2JqLSQoQ09ORklHX1g4Nl9NU1IpCQkrPSBtc3Iubwogb2JqLSQoQ09ORklHX1g4Nl9DUFVJRCkJCSs9IGNwdWlkLm8KIG9iai0kKENPTkZJR19NSUNST0NPREUpCQkrPSBtaWNyb2NvZGUubworb2JqLSQoQ09ORklHX1BDSSkJCSs9IGVhcmx5LXF1aXJrcy5vCiBvYmotJChDT05GSUdfQVBNKQkJKz0gYXBtXzMyLm8KIG9iai0kKENPTkZJR19YODZfU01QKQkJKz0gc21wXzMyLm8gc21wYm9vdF8zMi5vIHRzY19zeW5jLm8KIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXBjb21tb25fMzIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlXzY0IGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlXzY0CmluZGV4IDQzZGE2NjIuLmRlYzA2ZTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZV82NAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVfNjQKQEAgLTIsNyArMiw3IEBACiAjIE1ha2VmaWxlIGZvciB0aGUgbGludXgga2VybmVsLgogIwogCi1leHRyYS15IAk6PSBoZWFkXzY0Lm8gaGVhZDY0Lm8gaW5pdF90YXNrXzY0Lm8gdm1saW51eC5sZHMKK2V4dHJhLXkgCTo9IGhlYWRfNjQubyBoZWFkNjQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkcwogRVhUUkFfQUZMQUdTCTo9IC10cmFkaXRpb25hbAogb2JqLXkJOj0gcHJvY2Vzc182NC5vIHNpZ25hbF82NC5vIGVudHJ5XzY0Lm8gdHJhcHNfNjQubyBpcnFfNjQubyBcCiAJCXB0cmFjZV82NC5vIHRpbWVfNjQubyBpb3BvcnRfNjQubyBsZHRfNjQubyBzZXR1cF82NC5vIGk4MjU5XzY0Lm8gc3lzX3g4Nl82NC5vIFwKQEAgLTM5LDcgKzM5LDcgQEAKIG9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0XzY0Lm8KIAogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGVfNjQubwotb2JqLSQoQ09ORklHX1BDSSkJCSs9IGVhcmx5LXF1aXJrc182NC5vCitvYmotJChDT05GSUdfUENJKQkJKz0gZWFybHktcXVpcmtzLm8KIAogb2JqLXkJCQkJKz0gdG9wb2xvZ3kubwogb2JqLXkJCQkJKz0gaW50ZWxfY2FjaGVpbmZvLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL01ha2VmaWxlXzMyIGIvYXJjaC94ODYva2VybmVsL2FjcGkvTWFrZWZpbGVfMzIKaW5kZXggYTQ4NTJhMi4uMDQ1ZGQ1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvTWFrZWZpbGVfMzIKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvTWFrZWZpbGVfMzIKQEAgLTEsNyArMSw0IEBACiBvYmotJChDT05GSUdfQUNQSSkJCSs9IGJvb3QubwotaWZuZXEgKCQoQ09ORklHX1BDSSksKQotb2JqLSQoQ09ORklHX1g4Nl9JT19BUElDKQkrPSBlYXJseXF1aXJrXzMyLm8KLWVuZGlmCiBvYmotJChDT05GSUdfQUNQSV9TTEVFUCkJKz0gc2xlZXBfMzIubyB3YWtldXBfMzIubwogCiBpZm5lcSAoJChDT05GSUdfQUNQSV9QUk9DRVNTT1IpLCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBhZmQyYWZlLi4yODkyNDdkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC05OSw3ICs5OSw3IEBACiAKIC8qCiAgKiBUaGUgZGVmYXVsdCBpbnRlcnJ1cHQgcm91dGluZyBtb2RlbCBpcyBQSUMgKDgyNTkpLiAgVGhpcyBnZXRzCi0gKiBvdmVycmlkZW4gaWYgSU9BUElDcyBhcmUgZW51bWVyYXRlZCAoYmVsb3cpLgorICogb3ZlcnJpZGRlbiBpZiBJT0FQSUNzIGFyZSBlbnVtZXJhdGVkIChiZWxvdykuCiAgKi8KIGVudW0gYWNwaV9pcnFfbW9kZWxfaWQgYWNwaV9pcnFfbW9kZWwgPSBBQ1BJX0lSUV9NT0RFTF9QSUM7CiAKQEAgLTQxNCw4ICs0MTQsOCBAQAogICoKICAqIFBvcnQgMHg0ZDAtNGQxIGFyZSBFQ0xSMSBhbmQgRUNMUjIsIHRoZSBFZGdlL0xldmVsIENvbnRyb2wgUmVnaXN0ZXJzCiAgKiBmb3IgdGhlIDgyNTkgUElDLiAgYml0W25dID0gMSBtZWFucyBpcnFbbl0gaXMgTGV2ZWwsIG90aGVyd2lzZSBFZGdlLgotICogRUNMUjEgaXMgSVJRJ3MgMC03IChJUlEgMCwgMSwgMiBtdXN0IGJlIDApCi0gKiBFQ0xSMiBpcyBJUlEncyA4LTE1IChJUlEgOCwgMTMgbXVzdCBiZSAwKQorICogRUNMUjEgaXMgSVJRcyAwLTcgKElSUSAwLCAxLCAyIG11c3QgYmUgMCkKKyAqIEVDTFIyIGlzIElSUXMgOC0xNSAoSVJRIDgsIDEzIG11c3QgYmUgMCkKICAqLwogCiB2b2lkIF9faW5pdCBhY3BpX3BpY19zY2lfc2V0X3RyaWdnZXIodW5zaWduZWQgaW50IGlycSwgdTE2IHRyaWdnZXIpCkBAIC00MjcsNyArNDI3LDcgQEAKIAlvbGQgPSBpbmIoMHg0ZDApIHwgKGluYigweDRkMSkgPDwgOCk7CiAKIAkvKgotCSAqIElmIHdlIHVzZSBBQ1BJIHRvIHNldCBQQ0kgaXJxJ3MsIHRoZW4gd2Ugc2hvdWxkIGNsZWFyIEVMQ1IKKwkgKiBJZiB3ZSB1c2UgQUNQSSB0byBzZXQgUENJIElSUXMsIHRoZW4gd2Ugc2hvdWxkIGNsZWFyIEVMQ1IKIAkgKiBzaW5jZSB3ZSB3aWxsIHNldCBpdCBjb3JyZWN0bHkgYXMgd2UgZW5hYmxlIHRoZSBQQ0kgaXJxCiAJICogcm91dGluZy4KIAkgKi8KQEAgLTU1NSw3ICs1NTUsNyBAQAogCiBpbnQgYWNwaV91bm1hcF9sc2FwaWMoaW50IGNwdSkKIHsKLQl4ODZfY3B1X3RvX2FwaWNpZFtjcHVdID0gLTE7CisJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IC0xOwogCWNwdV9jbGVhcihjcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJbnVtX3Byb2Nlc3NvcnMtLTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvY3N0YXRlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwppbmRleCAyZDM5ZjU1Li4xMGI2NzE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9jc3RhdGUuYwpAQCAtMjksNyArMjksNyBAQAogdm9pZCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0X2JtX2NoZWNrKHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9mbGFncyAqZmxhZ3MsCiAJCQkJCXVuc2lnbmVkIGludCBjcHUpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEgKyBjcHU7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAKIAlmbGFncy0+Ym1fY2hlY2sgPSAwOwogCWlmIChudW1fb25saW5lX2NwdXMoKSA9PSAxKQpAQCAtNzIsNyArNzIsNyBAQAogCQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4LCBzdHJ1Y3QgYWNwaV9wb3dlcl9yZWdpc3RlciAqcmVnKQogewogCXN0cnVjdCBjc3RhdGVfZW50cnkgKnBlcmNwdV9lbnRyeTsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGNwdTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAogCWNwdW1hc2tfdCBzYXZlZF9tYXNrOwogCWludCByZXR2YWw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9lYXJseXF1aXJrXzMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjc4ZWYuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2FjcGkvZWFybHlxdWlya18zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyogCi0gKiBEbyBlYXJseSBQQ0kgcHJvYmluZyBmb3IgYnVnIGRldGVjdGlvbiB3aGVuIHRoZSBtYWluIFBDSSBzdWJzeXN0ZW0gaXMgCi0gKiBub3QgdXAgeWV0LgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KLQotI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FjcGkuaD4KLSNpbmNsdWRlIDxhc20vYXBpYy5oPgotCi0jaWZkZWYgQ09ORklHX0FDUEkKLQotc3RhdGljIGludCBfX2luaXQgbnZpZGlhX2hwZXRfY2hlY2soc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICpoZWFkZXIpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIGludCBfX2luaXQgY2hlY2tfYnJpZGdlKGludCB2ZW5kb3IsIGludCBkZXZpY2UpCi17Ci0jaWZkZWYgQ09ORklHX0FDUEkKLQlzdGF0aWMgaW50IHdhcm5lZDsKLQkvKiBBY2NvcmRpbmcgdG8gTnZpZGlhIGFsbCB0aW1lciBvdmVycmlkZXMgYXJlIGJvZ3VzIHVubGVzcyBIUEVUCi0JICAgaXMgZW5hYmxlZC4gKi8KLQlpZiAoIWFjcGlfdXNlX3RpbWVyX292ZXJyaWRlICYmIHZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX05WSURJQSkgewotCQlpZiAoIXdhcm5lZCAmJiBhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX0hQRVQsCi0JCQkJCQludmlkaWFfaHBldF9jaGVjaykpIHsKLQkJCXdhcm5lZCA9IDE7Ci0JCQlhY3BpX3NraXBfdGltZXJfb3ZlcnJpZGUgPSAxOwotCQkJICBwcmludGsoS0VSTl9JTkZPICJOdmlkaWEgYm9hcmQgIgotICAgICAgICAgICAgICAgICAgICAgICAiZGV0ZWN0ZWQuIElnbm9yaW5nIEFDUEkgIgotICAgICAgICAgICAgICAgICAgICAgICAidGltZXIgb3ZlcnJpZGUuXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICJJZiB5b3UgZ290IHRpbWVyIHRyb3VibGUgIgotCQkJIAkgInRyeSBhY3BpX3VzZV90aW1lcl9vdmVycmlkZVxuIik7Ci0KLQkJfQotCX0KLSNlbmRpZgotCWlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BVEkgJiYgdGltZXJfb3Zlcl84MjU0ID09IDEpIHsKLQkJdGltZXJfb3Zlcl84MjU0ID0gMDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQVRJIGJvYXJkIGRldGVjdGVkLiBEaXNhYmxpbmcgdGltZXIgcm91dGluZyAiCi0JCQkJIm92ZXIgODI1NC5cbiIpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBfX2luaXQgY2hlY2tfYWNwaV9wY2kodm9pZCkKLXsKLQlpbnQgbnVtLCBzbG90LCBmdW5jOwotCi0JLyogQXNzdW1lIHRoZSBtYWNoaW5lIHN1cHBvcnRzIHR5cGUgMS4gSWYgbm90IGl0IHdpbGwgCi0JICAgYWx3YXlzIHJlYWQgZmZmZmZmZmYgYW5kIHNob3VsZCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QuCi0JICAgQWN0dWFsbHkgYSBmZXcgYnVnZ3kgc3lzdGVtcyBjYW4gbWFjaGluZSBjaGVjay4gQWxsb3cgdGhlIHVzZXIKLQkgICB0byBkaXNhYmxlIGl0IGJ5IGNvbW1hbmQgbGluZSBvcHRpb24gYXQgbGVhc3QgLUFLICovCi0JaWYgKCFlYXJseV9wY2lfYWxsb3dlZCgpKQotCQlyZXR1cm47Ci0KLQkvKiBQb29yIG1hbidzIFBDSSBkaXNjb3ZlcnkgKi8KLQlmb3IgKG51bSA9IDA7IG51bSA8IDMyOyBudW0rKykgewotCQlmb3IgKHNsb3QgPSAwOyBzbG90IDwgMzI7IHNsb3QrKykgewotCQkJZm9yIChmdW5jID0gMDsgZnVuYyA8IDg7IGZ1bmMrKykgewotCQkJCXUzMiBjbGFzczsKLQkJCQl1MzIgdmVuZG9yOwotCQkJCWNsYXNzID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywKLQkJCQkJCQlQQ0lfQ0xBU1NfUkVWSVNJT04pOwotCQkJCWlmIChjbGFzcyA9PSAweGZmZmZmZmZmKQotCQkJCQlicmVhazsKLQotCQkJCWlmICgoY2xhc3MgPj4gMTYpICE9IFBDSV9DTEFTU19CUklER0VfUENJKQotCQkJCQljb250aW51ZTsKLQotCQkJCXZlbmRvciA9IHJlYWRfcGNpX2NvbmZpZyhudW0sIHNsb3QsIGZ1bmMsCi0JCQkJCQkJIFBDSV9WRU5ET1JfSUQpOwotCi0JCQkJaWYgKGNoZWNrX2JyaWRnZSh2ZW5kb3IgJiAweGZmZmYsIHZlbmRvciA+PiAxNikpCi0JCQkJCXJldHVybjsKLQkJCX0KLQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FjcGkvcHJvY2Vzc29yLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYwppbmRleCBiNTRmZGVkLi4yZWQwYTRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9wcm9jZXNzb3IuYwpAQCAtNjMsNyArNjMsNyBAQAogdm9pZCBhcmNoX2FjcGlfcHJvY2Vzc29yX2luaXRfcGRjKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IHByLT5pZDsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGNwdTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAogCXByLT5wZGMgPSBOVUxMOwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF8zMi5TCmluZGV4IGYyMmJhODUuLmE5NzMxM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF8zMi5TCkBAIC0xMSw3ICsxMSw3IEBACiAjCiAjIElmIHBoeXNpY2FsIGFkZHJlc3Mgb2Ygd2FrZXVwX2NvZGUgaXMgMHgxMjM0NSwgQklPUyBzaG91bGQgY2FsbCB1cyB3aXRoCiAjIGNzID0gMHgxMjM0LCBlaXAgPSAweDA1Ci0jIAorIwogCiAjZGVmaW5lIEJFRVAgXAogCWluYgkkOTcsICVhbDsgCVwKQEAgLTUyLDcgKzUyLDYgQEAKIAlCRUVQCiAxOgogCW1vdgkkKHdha2V1cF9zdGFjayAtIHdha2V1cF9jb2RlKSwgJXNwCQkjIFByaXZhdGUgc3RhY2sgaXMgbmVlZGVkIGZvciBBU1VTIGJvYXJkCi0JbW92dwkkMHgwZTAwICsgJ1MnLCAlZnM6KDB4MTIpCiAKIAlwdXNobAkkMAkJCQkJCSMgS2lsbCBhbnkgZGFuZ2Vyb3VzIGZsYWdzCiAJcG9wZmwKQEAgLTkwLDkgKzg5LDYgQEAKIAkjIG1ha2Ugc3VyZSAlY3I0IGlzIHNldCBjb3JyZWN0bHkgKGZlYXR1cmVzLCBldGMpCiAJbW92bAlyZWFsX3NhdmVfY3I0IC0gd2FrZXVwX2NvZGUsICVlYXgKIAltb3ZsCSVlYXgsICVjcjQKLQltb3Z3CSQweGI4MDAsICVheAotCW1vdncJJWF4LCVmcwotCW1vdncJJDB4MGUwMCArICdpJywgJWZzOigweDEyKQogCQogCSMgbmVlZCBhIGdkdCAtLSB1c2UgbGdkdGwgdG8gZm9yY2UgMzItYml0IG9wZXJhbmRzLCBpbiBjYXNlCiAJIyB0aGUgR0RUIGlzIGxvY2F0ZWQgcGFzdCAxNiBtZWdhYnl0ZXMuCkBAIC0xMDIsOCArOTgsNiBAQAogCW1vdmwJJWVheCwgJWNyMAogCWptcCAxZgogMToKLQltb3Z3CSQweDBlMDAgKyAnbicsICVmczooMHgxNCkKLQogCW1vdmwJcmVhbF9tYWdpYyAtIHdha2V1cF9jb2RlLCAlZWF4CiAJY21wbAkkMHgxMjM0NTY3OCwgJWVheAogCWpuZQlib2d1c19yZWFsX21hZ2ljCkBAIC0xMjIsMTMgKzExNiwxMSBAQAogcmVhbF9tYWdpYzoJLmxvbmcgMAogdmlkZW9fbW9kZToJLmxvbmcgMAogcmVhbG1vZGVfZmxhZ3M6CS5sb25nIDAKLWJlZXBfZmxhZ3M6CS5sb25nIDAKIHJlYWxfZWZlcl9zYXZlX3Jlc3RvcmU6CS5sb25nIDAKIHJlYWxfc2F2ZV9lZmVyX2VkeDogCS5sb25nIDAKIHJlYWxfc2F2ZV9lZmVyX2VheDogCS5sb25nIDAKIAogYm9ndXNfcmVhbF9tYWdpYzoKLQltb3Z3CSQweDBlMDAgKyAnQicsICVmczooMHgxMikKIAlqbXAgYm9ndXNfcmVhbF9tYWdpYwogCiAvKiBUaGlzIGNvZGUgdXNlcyBhbiBleHRlbmRlZCBzZXQgb2YgdmlkZW8gbW9kZSBudW1iZXJzLiBUaGVzZSBpbmNsdWRlOgpAQCAtMTk0LDcgKzE4Niw2IEBACiAJbW92dwklYXgsICVlcwogCW1vdncJJWF4LCAlZnMKIAltb3Z3CSVheCwgJWdzCi0JbW92dwkkMHgwZTAwICsgJ3UnLCAweGI4MDE2CiAKIAkjIHJlbG9hZCB0aGUgZ2R0LCBhcyB3ZSBuZWVkIHRoZSBmdWxsIDMyIGJpdCBhZGRyZXNzCiAJbGdkdAlzYXZlZF9nZHQKQEAgLTIxOCw3ICsyMDksNiBAQAogCWptcAkqJWVheAogCiBib2d1c19tYWdpYzoKLQltb3Z3CSQweDBlMDAgKyAnQicsIDB4YjgwMTgKIAlqbXAJYm9ndXNfbWFnaWMKIAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS93YWtldXBfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCmluZGV4IDhiNDM1N2UuLjU1NjA4ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL3dha2V1cF82NC5TCkBAIC00MSw3ICs0MSw2IEBACiAKICMgUnVubmluZyBpbiAqY29weSogb2YgdGhpcyBjb2RlLCBzb21ld2hlcmUgaW4gbG93IDFNQi4KIAotCW1vdmIJJDB4YTEsICVhbAk7ICBvdXRiICVhbCwgJDB4ODAKIAljbGkKIAljbGQKIAkjIHNldHVwIGRhdGEgc2VnbWVudApAQCAtNjUsMTEgKzY0LDYgQEAKIAljbXBsCSQweDEyMzQ1Njc4LCAlZWF4CiAJam5lCWJvZ3VzX3JlYWxfbWFnaWMKIAotICAJY2FsbAl2ZXJpZnlfY3B1CQkJIyBWZXJpZnkgdGhlIGNwdSBzdXBwb3J0cyBsb25nCi0JCQkJCQkjIG1vZGUKLQl0ZXN0bAklZWF4LCAlZWF4Ci0Jam56CW5vX2xvbmdtb2RlCi0KIAl0ZXN0bAkkMSwgcmVhbG1vZGVfZmxhZ3MgLSB3YWtldXBfY29kZQogCWp6CTFmCiAJbGNhbGwgICAkMHhjMDAwLCQzCkBAIC04NCwxMiArNzgsNiBAQAogCWNhbGwJbW9kZV9zZXQKIDE6CiAKLSAJbW92dwkkMHhiODAwLCAlYXgKLQltb3Z3CSVheCwlZnMKLQltb3Z3CSQweDBlMDAgKyAnTCcsICVmczooMHgxMCkKLQotCW1vdmIJJDB4YTIsICVhbAk7ICBvdXRiICVhbCwgJDB4ODAKLQkKIAltb3YJJWRzLCAlYXgJCQkjIEZpbmQgMzJiaXQgd2FrZXVwX2NvZGUgYWRkcgogCW1vdnp4ICAgJWF4LCAlZXNpCQkJIyAoQ29udmVydCAlZHM6Z2R0IHRvIGEgbGluZXIgcHRyKQogCXNobGwgICAgJDQsICVlc2kKQEAgLTExNywxNCArMTA1LDEwIEBACiAJLmNvZGUzMgogd2FrZXVwXzMyOgogIyBSdW5uaW5nIGluIHRoaXMgY29kZSwgYnV0IGF0IGxvdyBhZGRyZXNzOyBwYWdpbmcgaXMgbm90IHlldCB0dXJuZWQgb24uCi0JbW92YgkkMHhhNSwgJWFsCTsgIG91dGIgJWFsLCAkMHg4MAogCiAJbW92bAkkX19LRVJORUxfRFMsICVlYXgKIAltb3ZsCSVlYXgsICVkcwogCi0JbW92dwkkMHgwZTAwICsgJ2knLCAlZHM6KDB4YjgwMTIpCi0JbW92YgkkMHhhOCwgJWFsCTsgIG91dGIgJWFsLCAkMHg4MDsKLQogCS8qCiAJICogUHJlcGFyZSBmb3IgZW50ZXJpbmcgNjRiaXRzIG1vZGUKIAkgKi8KQEAgLTIwMCwxNiArMTg0LDExIEBACiAJICovCiAJbGdkdAljcHVfZ2R0X2Rlc2NyCiAKLQltb3Z3CSQweDBlMDAgKyAnbicsICVkczooMHhiODAxNCkKLQltb3ZiCSQweGE5LCAlYWwJOyAgb3V0YiAlYWwsICQweDgwCi0KIAltb3ZxICAgIHNhdmVkX21hZ2ljLCAlcmF4CiAJbW92cSAgICAkMHgxMjM0NTY3ODlhYmNkZWYwLCAlcmR4CiAJY21wcSAgICAlcmR4LCAlcmF4CiAJam5lICAgICBib2d1c182NF9tYWdpYwogCi0JbW92dwkkMHgwZTAwICsgJ3UnLCAlZHM6KDB4YjgwMTYpCi0JCiAJbm9wCiAJbm9wCiAJbW92dwkkX19LRVJORUxfRFMsICVheApAQCAtMjIwLDEzICsxOTksMTEgQEAKIAltb3Z3CSVheCwgJWdzCiAJbW92cQlzYXZlZF9yc3AsICVyc3AKIAotCW1vdncJJDB4MGUwMCArICd4JywgJWRzOigweGI4MDE4KQogCW1vdnEJc2F2ZWRfcmJ4LCAlcmJ4CiAJbW92cQlzYXZlZF9yZGksICVyZGkKIAltb3ZxCXNhdmVkX3JzaSwgJXJzaQogCW1vdnEJc2F2ZWRfcmJwLCAlcmJwCiAKLQltb3Z3CSQweDBlMDAgKyAnIScsICVkczooMHhiODAxYSkKIAltb3ZxCXNhdmVkX3JpcCwgJXJheAogCWptcAkqJXJheAogCkBAIC0yNTYsMjEgKzIzMywxMiBAQAogCiAuY29kZTE2CiBib2d1c19yZWFsX21hZ2ljOgotCW1vdmIJJDB4YmEsJWFsCTsgIG91dGIgJWFsLCQweDgwCiAJam1wIGJvZ3VzX3JlYWxfbWFnaWMKIAogLmNvZGU2NAogYm9ndXNfNjRfbWFnaWM6Ci0JbW92YgkkMHhiMywlYWwJOyAgb3V0YiAlYWwsJDB4ODAKIAlqbXAgYm9ndXNfNjRfbWFnaWMKIAotLmNvZGUxNgotbm9fbG9uZ21vZGU6Ci0JbW92YiAgICAkMHhiYywlYWwgICAgICAgOyAgb3V0YiAlYWwsJDB4ODAKLQlqbXAgbm9fbG9uZ21vZGUKLQotI2luY2x1ZGUgIi4uL3ZlcmlmeV9jcHVfNjQuUyIKLQkKIC8qIFRoaXMgY29kZSB1c2VzIGFuIGV4dGVuZGVkIHNldCBvZiB2aWRlbyBtb2RlIG51bWJlcnMuIFRoZXNlIGluY2x1ZGU6CiAgKiBBbGlhc2VzIGZvciBzdGFuZGFyZCBtb2RlcwogICoJTk9STUFMX1ZHQSAoLTEpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDNiZDI2ODguLmQ2NDA1ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC0zNTcsMTQgKzM1NywxNCBAQAogCWlmIChzbXApIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIGFsdGVybmF0aXZlczogc3dpdGNoaW5nIHRvIFNNUCBjb2RlXG4iKTsKIAkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1VQLCBib290X2NwdV9kYXRhLng4Nl9jYXBhYmlsaXR5KTsKLQkJY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1VQLCBjcHVfZGF0YVswXS54ODZfY2FwYWJpbGl0eSk7CisJCWNsZWFyX2JpdChYODZfRkVBVFVSRV9VUCwgY3B1X2RhdGEoMCkueDg2X2NhcGFiaWxpdHkpOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vZCwgJnNtcF9hbHRfbW9kdWxlcywgbmV4dCkKIAkJCWFsdGVybmF0aXZlc19zbXBfbG9jayhtb2QtPmxvY2tzLCBtb2QtPmxvY2tzX2VuZCwKIAkJCQkJICAgICAgbW9kLT50ZXh0LCBtb2QtPnRleHRfZW5kKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9JTkZPICJTTVAgYWx0ZXJuYXRpdmVzOiBzd2l0Y2hpbmcgdG8gVVAgY29kZVxuIik7CiAJCXNldF9iaXQoWDg2X0ZFQVRVUkVfVVAsIGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHkpOwotCQlzZXRfYml0KFg4Nl9GRUFUVVJFX1VQLCBjcHVfZGF0YVswXS54ODZfY2FwYWJpbGl0eSk7CisJCXNldF9iaXQoWDg2X0ZFQVRVUkVfVVAsIGNwdV9kYXRhKDApLng4Nl9jYXBhYmlsaXR5KTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZzbXBfYWx0X21vZHVsZXMsIG5leHQpCiAJCQlhbHRlcm5hdGl2ZXNfc21wX3VubG9jayhtb2QtPmxvY2tzLCBtb2QtPmxvY2tzX2VuZCwKIAkJCQkJCW1vZC0+dGV4dCwgbW9kLT50ZXh0X2VuZCk7CkBAIC00MzIsNyArNDMyLDcgQEAKIAkJaWYgKDEgPT0gbnVtX3Bvc3NpYmxlX2NwdXMoKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiU01QIGFsdGVybmF0aXZlczogc3dpdGNoaW5nIHRvIFVQIGNvZGVcbiIpOwogCQkJc2V0X2JpdChYODZfRkVBVFVSRV9VUCwgYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eSk7Ci0JCQlzZXRfYml0KFg4Nl9GRUFUVVJFX1VQLCBjcHVfZGF0YVswXS54ODZfY2FwYWJpbGl0eSk7CisJCQlzZXRfYml0KFg4Nl9GRUFUVVJFX1VQLCBjcHVfZGF0YSgwKS54ODZfY2FwYWJpbGl0eSk7CiAJCQlhbHRlcm5hdGl2ZXNfc21wX3VubG9jayhfX3NtcF9sb2NrcywgX19zbXBfbG9ja3NfZW5kLAogCQkJCQkJX3RleHQsIF9ldGV4dCk7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpY18zMi5jCmluZGV4IDc5MzM0MWYuLjA4YjA3YzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWNfMzIuYwpAQCAtOTQ3LDcgKzk0Nyw3IEBACiAJICogU2V0IHVwIExWVDAsIExWVDE6CiAJICoKIAkgKiBzZXQgdXAgdGhyb3VnaC1sb2NhbC1BUElDIG9uIHRoZSBCUCdzIExJTlQwLiBUaGlzIGlzIG5vdAotCSAqIHN0cmljdGx5IG5lY2Vzc2VyeSBpbiBwdXJlIHN5bW1ldHJpYy1JTyBtb2RlLCBidXQgc29tZXRpbWVzCisJICogc3RyaWN0bHkgbmVjZXNzYXJ5IGluIHB1cmUgc3ltbWV0cmljLUlPIG1vZGUsIGJ1dCBzb21ldGltZXMKIAkgKiB3ZSBkZWxlZ2F0ZSBpbnRlcnJ1cHRzIHRvIHRoZSA4MjU5QS4KIAkgKi8KIAkvKgpAQCAtOTk4LDcgKzk5OCw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKGVzcl9kaXNhYmxlKQogCQkJLyoKLQkJCSAqIFNvbWV0aGluZyB1bnRyYWNlYmxlIGlzIGNyZWF0aW5nIGJhZCBpbnRlcnJ1cHRzIG9uCisJCQkgKiBTb21ldGhpbmcgdW50cmFjZWFibGUgaXMgY3JlYXRpbmcgYmFkIGludGVycnVwdHMgb24KIAkJCSAqIHNlY29uZGFyeSBxdWFkcyAuLi4gZm9yIHRoZSBtb21lbnQsIGp1c3QgbGVhdmUgdGhlCiAJCQkgKiBFU1IgZGlzYWJsZWQgLSB3ZSBjYW4ndCBkbyBhbnl0aGluZyB1c2VmdWwgd2l0aCB0aGUKIAkJCSAqIGVycm9ycyBhbnl3YXkgLSBtYmxpZ2gKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwppbmRleCAzMmYyMzY1Li4xNzA4OWEwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiAgICAgICAgIHNjcmVlbi1ibGFua2luZyBhbmQgZ3BtIChTdGVwaGVuIFJvdGh3ZWxsKTsgTGludXggMS45OS40CiAgKiAgICAxLjJhOlNpbXBsZSBjaGFuZ2UgdG8gc3RvcCBteXN0ZXJpb3VzIGJ1ZyByZXBvcnRzIHdpdGggU01QIGFsc28gYWRkZWQKICAqCSAgIGxldmVscyB0byB0aGUgcHJpbnRrIGNhbGxzLiBBUE0gaXMgbm90IGRlZmluZWQgZm9yIFNNUCBtYWNoaW5lcy4KLSAqICAgICAgICAgVGhlIG5ldyByZXBsYWNtZW50IGZvciBpdCBpcywgYnV0IExpbnV4IGRvZXNuJ3QgeWV0IHN1cHBvcnQgdGhpcy4KKyAqICAgICAgICAgVGhlIG5ldyByZXBsYWNlbWVudCBmb3IgaXQgaXMsIGJ1dCBMaW51eCBkb2Vzbid0IHlldCBzdXBwb3J0IHRoaXMuCiAgKiAgICAgICAgIEFsYW4gQ294IExpbnV4IDIuMS41NQogICogICAgMS4zOiBTZXQgdXAgYSB2YWxpZCBkYXRhIGRlc2NyaXB0b3IgMHg0MCBmb3IgYnVnZ3kgQklPUydzCiAgKiAgICAxLjQ6IFVwZ3JhZGVkIHRvIHN1cHBvcnQgQVBNIDEuMi4gSW50ZWdyYXRlZCBUaGlua1BhZCBzdXNwZW5kIHBhdGNoIGJ5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCA1ZjhhZjg3Li4xZmY4OGM3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTI2Niw3ICsyNjYsNyBAQAogI2lmZGVmIENPTkZJR19YODZfSFQKIAkvKgogCSAqIE9uIGEgQU1EIG11bHRpIGNvcmUgc2V0dXAgdGhlIGxvd2VyIGJpdHMgb2YgdGhlIEFQSUMgaWQKLQkgKiBkaXN0aW5ndXNoIHRoZSBjb3Jlcy4KKwkgKiBkaXN0aW5ndWlzaCB0aGUgY29yZXMuCiAJICovCiAJaWYgKGMtPng4Nl9tYXhfY29yZXMgPiAxKSB7CiAJCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCmluZGV4IDQ3M2VhYzguLjk2ODFmYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1ci5jCkBAIC01Myw3ICs1Myw3IEBACiAJCQljb250aW51ZTsKIAkJLyoKIAkJICoJRG9uJ3QgTUNSIG92ZXIgcmVzZXJ2ZWQgc3BhY2UuIElnbm9yZSB0aGUgSVNBIGhvbGUKLQkJICoJd2UgZnJvYiBhcm91bmQgdGhhdCBjYXRhc3Ryb3BoeSBhbHJlYWR5CisJCSAqCXdlIGZyb2IgYXJvdW5kIHRoYXQgY2F0YXN0cm9waGUgYWxyZWFkeQogCQkgKi8KIAkJIAkJCQogCQlpZiAoZTgyMC5tYXBbaV0udHlwZSA9PSBFODIwX1JFU0VSVkVEKQpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJCWMtPng4Nl9jYXBhYmlsaXR5WzVdID0gY3B1aWRfZWR4KDB4QzAwMDAwMDEpOwogCX0KIAotCS8qIEN5cml4IElJSSBmYW1pbHkgbmVlZHMgQ1g4ICYgUEdFIGV4cGxpY2l0eSBlbmFibGVkLiAqLworCS8qIEN5cml4IElJSSBmYW1pbHkgbmVlZHMgQ1g4ICYgUEdFIGV4cGxpY2l0bHkgZW5hYmxlZC4gKi8KIAlpZiAoYy0+eDg2X21vZGVsID49NiAmJiBjLT54ODZfbW9kZWwgPD0gOSkgewogCQlyZG1zciAoTVNSX1ZJQV9GQ1IsIGxvLCBoaSk7CiAJCWxvIHw9ICgxPDwxIHwgMTw8Nyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwppbmRleCBkNTA2MjAxLi5lMmZjZjIwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB4ODZfZnhzcl9zZXR1cChjaGFyICogcykKIHsKLQkvKiBUZWxsIGFsbCB0aGUgb3RoZXIgQ1BVJ3MgdG8gbm90IHVzZSBpdC4uLiAqLworCS8qIFRlbGwgYWxsIHRoZSBvdGhlciBDUFVzIHRvIG5vdCB1c2UgaXQuLi4gKi8KIAlkaXNhYmxlX3g4Nl9meHNyID0gMTsKIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnXzMyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpyZW5hbWUgdG8gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWdfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHVmcmVxL0tjb25maWcgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZ182NApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZ182NAppbmRleCBhM2ZkNTE5Li45Yzk2OTlmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnXzY0CkBAIC0xOSw3ICsxOSw3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwb3dlcm5vdy1rOC4KIAotCSAgRm9yIGRldGFpbHMsIHRha2UgYSBsb29rIGF0IDxmaWxlOkRvY3VtZW50YXRpb24vY3B1LWZyZXEvPi4gCisJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCAyY2E0M2JhLi5mZWEwYWYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC03Nyw3ICs3Nyw3IEBACiAKIHN0YXRpYyBpbnQgY2hlY2tfZXN0X2NwdSh1bnNpZ25lZCBpbnQgY3B1aWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjcHUgPSAmY3B1X2RhdGFbY3B1aWRdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqY3B1ID0gJmNwdV9kYXRhKGNwdWlkKTsKIAogCWlmIChjcHUtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCB8fAogCSAgICAhY3B1X2hhcyhjcHUsIFg4Nl9GRUFUVVJFX0VTVCkpCkBAIC01NjAsNyArNTYwLDcgQEAKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7CiAJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhOwogCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YVtwb2xpY3ktPmNwdV07CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKHBvbGljeS0+Y3B1KTsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmY7CiAKIAlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2luaXRcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCmluZGV4IDMyZjBiZGEuLmYwM2U5MTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCkBAIC0yNjAsNyArMjYwLDcgQEAKIAogCWZyZXFzLm9sZCA9IG5mb3JjZTJfZ2V0KHBvbGljeS0+Y3B1KTsKIAlmcmVxcy5uZXcgPSB0YXJnZXRfZnNiICogZmlkICogMTAwOwotCWZyZXFzLmNwdSA9IDA7CQkvKiBPbmx5IG9uZSBDUFUgb24gbkZvcmNlMiBwbGF0dGZvcm1zICovCisJZnJlcXMuY3B1ID0gMDsJCS8qIE9ubHkgb25lIENQVSBvbiBuRm9yY2UyIHBsYXRmb3JtcyAqLwogCiAJaWYgKGZyZXFzLm9sZCA9PSBmcmVxcy5uZXcpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCmluZGV4IGMxMWJhYWYuLjMyNmE0YzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKQEAgLTMwNSw3ICszMDUsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBlcHNfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAogCS8qIFRoaXMgZHJpdmVyIHdpbGwgd29yayBvbmx5IG9uIENlbnRhdXIgQzcgcHJvY2Vzc29ycyB3aXRoCiAJICogRW5oYW5jZWQgU3BlZWRTdGVwL1Bvd2VyU2F2ZXIgcmVnaXN0ZXJzICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZWxhbmZyZXEuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCmluZGV4IDFlN2FlN2QuLjk0NjE5YzIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCkBAIC0xOTksNyArMTk5LDcgQEAKIAogc3RhdGljIGludCBlbGFuZnJlcV9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAJdW5zaWduZWQgaW50IGk7CiAJaW50IHJlc3VsdDsKIApAQCAtMjgwLDcgKzI4MCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGVsYW5mcmVxX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAKIAkvKiBUZXN0IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IGhhcmR3YXJlICovCiAJaWYgKChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9neC1zdXNwbW9kLmMKaW5kZXggZWQyYmRhMS4uMmVkN2RiMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCkBAIC0xMiwxMiArMTIsMTIgQEAKICAqICAgICAgb2YgYW55IG5hdHVyZSByZXN1bHRpbmcgZHVlIHRvIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcwogICogICAgICBzb2Z0d2FyZSBpcyBwcm92aWRlZCBBUy1JUyB3aXRoIG5vIHdhcnJhbnRpZXMuCiAgKgotICogVGhlb3JpdGljYWwgbm90ZToKKyAqIFRoZW9yZXRpY2FsIG5vdGU6CiAgKgogICoJKHNlZSBHZW9kZSh0bSkgQ1M1NTMwIG1hbnVhbCAocmV2LjQuMSkgcGFnZS41NikKICAqCiAgKglDUFUgZnJlcXVlbmN5IGNvbnRyb2wgb24gTmF0U2VtaSBHZW9kZSBHWDEvR1hMViBwcm9jZXNzb3IgYW5kIENTNTV4MAotICoJYXJlIGJhc2VkIG9uIFN1c3BlbmQgTW9kdXJhdGlvbi4KKyAqCWFyZSBiYXNlZCBvbiBTdXNwZW5kIE1vZHVsYXRpb24uCiAgKgogICoJU3VzcGVuZCBNb2R1bGF0aW9uIHdvcmtzIGJ5IGFzc2VydGluZyBhbmQgZGUtYXNzZXJ0aW5nIHRoZSBTVVNQIyBwaW4KICAqCXRvIENQVShHWDEvR1hMVikgZm9yIGNvbmZpZ3VyYWJsZSBkdXJhdGlvbnMuIFdoZW4gYXNzZXJ0aW5nIFNVU1AjCkBAIC0xMDEsMTEgKzEwMSwxMSBAQAogCiAvKiBTVVNDRkcgYml0cyAqLwogI2RlZmluZSBTVVNNT0QJCSgxPDwwKQkvKiBlbmFibGUvZGlzYWJsZSBzdXNwZW5kIG1vZHVsYXRpb24gKi8KLS8qIHRoZSBiZWxvd3Mgc3VwcG9ydCBvbmx5IHdpdGggY3M1NTMwIChhZnRlciByZXYuMS4yKS9jczU1MzBBICovCisvKiB0aGUgYmVsb3cgaXMgc3VwcG9ydGVkIG9ubHkgd2l0aCBjczU1MzAgKGFmdGVyIHJldi4xLjIpL2NzNTUzMEEgKi8KICNkZWZpbmUgU01JU1BEVVAJKDE8PDEpCS8qIHNlbGVjdCBob3cgU01JIHJlLWVuYWJsZSBzdXNwZW5kIG1vZHVsYXRpb246ICovCiAJCQkJLyogSVJRVEMgdGltZXIgb3IgcmVhZCBTTUkgc3BlZWR1cCBkaXNhYmxlIHJlZy4oRjFCQVJbMDgtMDloXSkgKi8KICNkZWZpbmUgU1VTQ0ZHCQkoMTw8MikJLyogZW5hYmxlIHBvd2VyaW5nIGRvd24gYSBHWExWIHByb2Nlc3Nvci4gIlNwZWNpYWwgM1ZvbHQgU3VzcGVuZCIgbW9kZSAqLwotLyogdGhlIGJlbG93cyBzdXBwb3J0IG9ubHkgd2l0aCBjczU1MzBBICovCisvKiB0aGUgYmVsb3cgaXMgc3VwcG9ydGVkIG9ubHkgd2l0aCBjczU1MzBBICovCiAjZGVmaW5lIFBXUlNWRV9JU0EJKDE8PDMpCS8qIHN0b3AgSVNBIGNsb2NrICAqLwogI2RlZmluZSBQV1JTVkUJCSgxPDw0KQkvKiBhY3RpdmUgaWRsZSAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IDUwNDVmNWQuLjc0OWQwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCkBAIC03ODAsNyArNzgwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbG9uZ2hhdWxfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCWNoYXIgKmNwdW5hbWU9TlVMTDsKIAlpbnQgcmV0OwogCXUzMiBsbywgaGk7CkBAIC05NTksNyArOTU5LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgbG9uZ2hhdWxfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAogCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQ0VOVEFVUiB8fCBjLT54ODYgIT0gNikKIAkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYwppbmRleCBiMjY4OTUxLi5hZjRhODY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ3J1bi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCXUzMiBzYXZlX2xvLCBzYXZlX2hpOwogCXUzMiBlYXgsIGVieCwgZWN4LCBlZHg7CiAJdTMyIHRyeV9oaTsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAKIAlpZiAoIWxvd19mcmVxIHx8ICFoaWdoX2ZyZXEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjk4LDcgKzI5OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGxvbmdydW5faW5pdCh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAogCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfVFJBTlNNRVRBIHx8CiAJICAgICFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0xPTkdSVU4pKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwppbmRleCA3OTNlYWU4Li4xNDc5MWVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcDQtY2xvY2ttb2QuYwpAQCAtMTk1LDcgKzE5NSw3IEBACiAKIHN0YXRpYyBpbnQgY3B1ZnJlcV9wNF9jcHVfaW5pdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKIHsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGFbcG9saWN5LT5jcHVdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShwb2xpY3ktPmNwdSk7CiAJaW50IGNwdWlkID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtMjc5LDcgKzI3OSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNwdWZyZXFfcDRfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAlpbnQgcmV0OwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKaW5kZXggNmQwMjg1My4uZWI5YjYyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogIFRoaXMgZmlsZSB3YXMgYmFzZWQgdXBvbiBjb2RlIGluIFBvd2VydHdlYWsgTGludXggKGh0dHA6Ly9wb3dlcnR3ZWFrLnNmLm5ldCkKLSAqICAoQykgMjAwMC0yMDAzICBEYXZlIEpvbmVzLCBBcmphbiB2YW4gZGUgVmVuLCBKYW5uZSBQ5G5r5GzkLCBEb21pbmlrIEJyb2Rvd3NraS4KKyAqICAoQykgMjAwMC0yMDAzICBEYXZlIEpvbmVzLCBBcmphbiB2YW4gZGUgVmVuLCBKYW5uZSBQw6Rua8OkbMOkLCBEb21pbmlrIEJyb2Rvd3NraS4KICAqCiAgKiAgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyLgogICoKQEAgLTIxNSw3ICsyMTUsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBwb3dlcm5vd19rNl9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICAgICAgKmMgPSBjcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAKIAlpZiAoKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQpIHx8IChjLT54ODYgIT0gNSkgfHwKIAkJKChjLT54ODZfbW9kZWwgIT0gMTIpICYmIChjLT54ODZfbW9kZWwgIT0gMTMpKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggZjM2ODZhNS4uYjVhOTg2MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCiBzdGF0aWMgaW50IGNoZWNrX3Bvd2Vybm93KHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCXVuc2lnbmVkIGludCBtYXhlaSwgZWF4LCBlYngsIGVjeCwgZWR4OwogCiAJaWYgKChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKSB8fCAoYy0+eDg2ICE9NikpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggYzA2YWM2OC4uOWMzNmE1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXJldHVybjsKIH0KIAotLyogdGhlIHZvbHRhZ2Ugc3RhYmFsaXphdGlvbiB0aW1lICovCisvKiB0aGUgdm9sdGFnZSBzdGFiaWxpemF0aW9uIHRpbWUgKi8KIHN0YXRpYyB2b2lkIGNvdW50X29mZl92c3Qoc3RydWN0IHBvd2Vybm93X2s4X2RhdGEgKmRhdGEpCiB7CiAJdWRlbGF5KGRhdGEtPnZzdGFibGUgKiBWU1RfVU5JVFNfMjBVUyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCmluZGV4IGIwNmM4MTIuLjdjNGY2ZTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCkBAIC0xNDgsMTAgKzE0OCwxMCBAQAogI2RlZmluZSBQTExfTE9DS19DT05WRVJTSU9OICgxMDAwLzUpIC8qIG1zIHRvIG5zLCB0aGVuIGRpdmlkZSBieSBjbG9jayBwZXJpb2QgKi8KIAogI2RlZmluZSBNQVhJTVVNX1ZJRF9TVEVQUyAxICAvKiBDdXJyZW50IGNwdXMgb25seSBhbGxvdyBhIHNpbmdsZSBzdGVwIG9mIDI1bVYgKi8KLSNkZWZpbmUgVlNUX1VOSVRTXzIwVVMgMjAgICAvKiBWb2x0YWdlIFN0YWJhbGl6YXRpb24gVGltZSBpcyBpbiB1bml0cyBvZiAyMHVzICovCisjZGVmaW5lIFZTVF9VTklUU18yMFVTIDIwICAgLyogVm9sdGFnZSBTdGFiaWxpemF0aW9uIFRpbWUgaXMgaW4gdW5pdHMgb2YgMjB1cyAqLwogCiAvKgotICogTW9zdCB2YWx1ZXMgb2YgaW50ZXJlc3QgYXJlIGVub2NvZGVkIGluIGEgc2luZ2xlIGZpZWxkIG9mIHRoZSBfUFNTCisgKiBNb3N0IHZhbHVlcyBvZiBpbnRlcmVzdCBhcmUgZW5jb2RlZCBpbiBhIHNpbmdsZSBmaWVsZCBvZiB0aGUgX1BTUwogICogZW50cmllczogdGhlICJjb250cm9sIiB2YWx1ZS4KICAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NjNTIwX2ZyZXEuYwppbmRleCBkOWYzZTkwLi40MmRhOWJkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKQEAgLTEwMiw3ICsxMDIsNyBAQAogCiBzdGF0aWMgaW50IHNjNTIwX2ZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCWludCByZXN1bHQ7CiAKIAkvKiBjYXBhYmlsaXR5IGNoZWNrICovCkBAIC0xNTEsNyArMTUxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2M1MjBfZnJlcV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKDApOwogCWludCBlcnI7CiAKIAkvKiBUZXN0IGlmIHdlIGhhdmUgdGhlIHJpZ2h0IGhhcmR3YXJlICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKaW5kZXggODExZDQ3NC4uMzAzMWYxMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwpAQCAtMjMwLDcgKzIzMCw3IEBACiAKIHN0YXRpYyBpbnQgY2VudHJpbm9fY3B1X2luaXRfdGFibGUoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjcHUgPSAmY3B1X2RhdGFbcG9saWN5LT5jcHVdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqY3B1ID0gJmNwdV9kYXRhKHBvbGljeS0+Y3B1KTsKIAlzdHJ1Y3QgY3B1X21vZGVsICptb2RlbDsKIAogCWZvcihtb2RlbCA9IG1vZGVsczsgbW9kZWwtPmNwdV9pZCAhPSBOVUxMOyBtb2RlbCsrKQpAQCAtMzQwLDcgKzM0MCw3IEBACiAKIHN0YXRpYyBpbnQgY2VudHJpbm9fY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjcHUgPSAmY3B1X2RhdGFbcG9saWN5LT5jcHVdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqY3B1ID0gJmNwdV9kYXRhKHBvbGljeS0+Y3B1KTsKIAl1bnNpZ25lZCBmcmVxOwogCXVuc2lnbmVkIGwsIGg7CiAJaW50IHJldDsKQEAgLTYxMiw3ICs2MTIsNyBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBjZW50cmlub19pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjcHUgPSBjcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmNwdSA9ICZjcHVfZGF0YSgwKTsKIAogCWlmICghY3B1X2hhcyhjcHUsIFg4Nl9GRUFUVVJFX0VTVCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKaW5kZXggYjFhY2M4Yy4uNzZjM2FiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAogdW5zaWduZWQgaW50IHNwZWVkc3RlcF9kZXRlY3RfcHJvY2Vzc29yICh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1MzIgZWJ4LCBtc3JfbG8sIG1zcl9oaTsKIAogCWRwcmludGsoIng4NjogJXgsIG1vZGVsOiAleFxuIiwgYy0+eDg2LCBjLT54ODZfbW9kZWwpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCmluZGV4IDEyMmQyZDcuLjg4ZDY2ZmIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKQEAgLTkzLDcgKzkzLDcgQEAKIAogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7Ci0JCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY2NyMyAmIDB4MGYpIHwgMHgxMCk7IC8qIGVuYWJsZSBNQVBFTiAgKi8KKwkJc2V0Q3g4NihDWDg2X0NDUjMsIChjY3IzICYgMHgwZikgfCAweDEwKTsgLyogZW5hYmxlIE1BUEVOICovCiAJCWNjcjUgPSBnZXRDeDg2KENYODZfQ0NSNSk7CiAJCWlmIChjY3I1ICYgMikKIAkJCXNldEN4ODYoQ1g4Nl9DQ1I1LCBjY3I1ICYgMHhmZCk7ICAvKiByZXNldCBTTE9QICovCkBAIC0xMTUsOSArMTE1LDkgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBNZW1vcnkgYWNjZXNzIHJlb3JkZXIgb24gQ3lyaXgvTlNDIHByb2Nlc3Nvci5cbiIpOwogCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7Ci0Jc2V0Q3g4NihDWDg2X0NDUjMsIChjY3IzICYgMHgwZikgfCAweDEwKTsgLyogZW5hYmxlIE1BUEVOoCAqLworCXNldEN4ODYoQ1g4Nl9DQ1IzLCAoY2NyMyAmIDB4MGYpIHwgMHgxMCk7IC8qIGVuYWJsZSBNQVBFTiAqLwogCi0JLyogTG9hZC9TdG9yZSBTZXJpYWxpemUgdG8gbWVtIGFjY2VzcyBkaXNhYmxlICg9cmVvcmRlciBpdCmgICovCisJLyogTG9hZC9TdG9yZSBTZXJpYWxpemUgdG8gbWVtIGFjY2VzcyBkaXNhYmxlICg9cmVvcmRlciBpdCkgKi8KIAlzZXRDeDg2KENYODZfUENSMCwgZ2V0Q3g4NihDWDg2X1BDUjApICYgfjB4ODApOwogCS8qIHNldCBsb2FkL3N0b3JlIHNlcmlhbGl6ZSBmcm9tIDFHQiB0byA0R0IgKi8KIAljY3IzIHw9IDB4ZTA7CkBAIC0xNDYsNyArMTQ2LDcgQEAKIAlwcmludGsoS0VSTl9JTkZPICJFbmFibGUgSW5jcmVtZW50b3Igb24gQ3lyaXgvTlNDIHByb2Nlc3Nvci5cbiIpOwogCiAJY2NyMyA9IGdldEN4ODYoQ1g4Nl9DQ1IzKTsKLQlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOyAvKiBlbmFibGUgTUFQRU6gICovCisJc2V0Q3g4NihDWDg2X0NDUjMsIChjY3IzICYgMHgwZikgfCAweDEwKTsgLyogZW5hYmxlIE1BUEVOICovCiAJLyogUENSMSAtLSBQZXJmb3JtYW5jZSBDb250cm9sICovCiAJLyogSW5jcmVtZW50b3Igb24sIHdoYXRldmVyIHRoYXQgaXMgKi8KIAlzZXRDeDg2KENYODZfUENSMSwgZ2V0Q3g4NihDWDg2X1BDUjEpIHwgMHgwMik7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJdTMyIHZlbmRvciwgZGV2aWNlOwogCQkvKiBJdCBpc24ndCByZWFsbHkgYSBQQ0kgcXVpcmsgZGlyZWN0bHksIGJ1dCB0aGUgY3VyZSBpcyB0aGUKIAkJICAgc2FtZS4gVGhlIE1lZGlhR1ggaGFzIGRlZXAgbWFnaWMgU01NIHN0dWZmIHRoYXQgaGFuZGxlcyB0aGUKLQkJICAgU0IgZW11bGF0aW9uLiBJdCB0aG93cyBhd2F5IHRoZSBmaWZvIG9uIGRpc2FibGVfZG1hKCkgd2hpY2gKKwkJICAgU0IgZW11bGF0aW9uLiBJdCB0aHJvd3MgYXdheSB0aGUgZmlmbyBvbiBkaXNhYmxlX2RtYSgpIHdoaWNoCiAJCSAgIGlzIHdyb25nIGFuZCBydWlucyB0aGUgYXVkaW8uIAogCiAJCSAgIEJ1ZzI6IFZTQTEgaGFzIGEgd3JhcCBidWcgc28gdGhhdCB1c2luZyBtYXhpbXVtIHNpemVkIERNQSAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDE4MjYzOTUuLjk5MjFiMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMjk1LDcgKzI5NSw3IEBACiAJdW5zaWduZWQgaW50IG5ld19sMiA9IDAsIG5ld19sMyA9IDAsIGk7IC8qIENhY2hlIHNpemVzIGZyb20gY3B1aWQoNCkgKi8KIAl1bnNpZ25lZCBpbnQgbDJfaWQgPSAwLCBsM19pZCA9IDAsIG51bV90aHJlYWRzX3NoYXJpbmcsIGluZGV4X21zYjsKICNpZmRlZiBDT05GSUdfWDg2X0hUCi0JdW5zaWduZWQgaW50IGNwdSA9IChjID09ICZib290X2NwdV9kYXRhKSA/IDAgOiAoYyAtIGNwdV9kYXRhKTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gYy0+Y3B1X2luZGV4OwogI2VuZGlmCiAKIAlpZiAoYy0+Y3B1aWRfbGV2ZWwgPiAzKSB7CkBAIC00MTcsMTQgKzQxNywxNCBAQAogCWlmIChuZXdfbDIpIHsKIAkJbDIgPSBuZXdfbDI7CiAjaWZkZWYgQ09ORklHX1g4Nl9IVAotCQljcHVfbGxjX2lkW2NwdV0gPSBsMl9pZDsKKwkJcGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpID0gbDJfaWQ7CiAjZW5kaWYKIAl9CiAKIAlpZiAobmV3X2wzKSB7CiAJCWwzID0gbmV3X2wzOwogI2lmZGVmIENPTkZJR19YODZfSFQKLQkJY3B1X2xsY19pZFtjcHVdID0gbDNfaWQ7CisJCXBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSA9IGwzX2lkOwogI2VuZGlmCiAJfQogCkBAIC00NTksNyArNDU5LDcgQEAKIAlzdHJ1Y3QgX2NwdWlkNF9pbmZvCSp0aGlzX2xlYWYsICpzaWJsaW5nX2xlYWY7CiAJdW5zaWduZWQgbG9uZyBudW1fdGhyZWFkc19zaGFyaW5nOwogCWludCBpbmRleF9tc2IsIGk7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAKIAl0aGlzX2xlYWYgPSBDUFVJRDRfSU5GT19JRFgoY3B1LCBpbmRleCk7CiAJbnVtX3RocmVhZHNfc2hhcmluZyA9IDEgKyB0aGlzX2xlYWYtPmVheC5zcGxpdC5udW1fdGhyZWFkc19zaGFyaW5nOwpAQCAtNDcwLDggKzQ3MCw4IEBACiAJCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihudW1fdGhyZWFkc19zaGFyaW5nKTsKIAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJCWlmIChjW2ldLmFwaWNpZCA+PiBpbmRleF9tc2IgPT0KLQkJCSAgICBjW2NwdV0uYXBpY2lkID4+IGluZGV4X21zYikgeworCQkJaWYgKGNwdV9kYXRhKGkpLmFwaWNpZCA+PiBpbmRleF9tc2IgPT0KKwkJCSAgICBjLT5hcGljaWQgPj4gaW5kZXhfbXNiKSB7CiAJCQkJY3B1X3NldChpLCB0aGlzX2xlYWYtPnNoYXJlZF9jcHVfbWFwKTsKIAkJCQlpZiAoaSAhPSBjcHUgJiYgY3B1aWQ0X2luZm9baV0pICB7CiAJCQkJCXNpYmxpbmdfbGVhZiA9IENQVUlENF9JTkZPX0lEWChpLCBpbmRleCk7CkBAIC00OTksNiArNDk5LDExIEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfY2FjaGVfYXR0cmlidXRlcyh1bnNpZ25lZCBpbnQgY3B1KQogeworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9jYWNoZV9sZWF2ZXM7IGkrKykKKwkJY2FjaGVfcmVtb3ZlX3NoYXJlZF9jcHVfbWFwKGNwdSwgaSk7CisKIAlrZnJlZShjcHVpZDRfaW5mb1tjcHVdKTsKIAljcHVpZDRfaW5mb1tjcHVdID0gTlVMTDsKIH0KQEAgLTUwNiw4ICs1MTEsOCBAQAogc3RhdGljIGludCBfX2NwdWluaXQgZGV0ZWN0X2NhY2hlX2F0dHJpYnV0ZXModW5zaWduZWQgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgX2NwdWlkNF9pbmZvCSp0aGlzX2xlYWY7Ci0JdW5zaWduZWQgbG9uZyAJCWo7Ci0JaW50IAkJCXJldHZhbDsKKwl1bnNpZ25lZCBsb25nCQlqOworCWludAkJCXJldHZhbDsKIAljcHVtYXNrX3QJCW9sZG1hc2s7CiAKIAlpZiAobnVtX2NhY2hlX2xlYXZlcyA9PSAwKQpAQCAtNTI0LDE5ICs1MjksMjYgQEAKIAkJZ290byBvdXQ7CiAKIAkvKiBEbyBjcHVpZCBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgKi8KLQlyZXR2YWwgPSAwOwogCWZvciAoaiA9IDA7IGogPCBudW1fY2FjaGVfbGVhdmVzOyBqKyspIHsKIAkJdGhpc19sZWFmID0gQ1BVSUQ0X0lORk9fSURYKGNwdSwgaik7CiAJCXJldHZhbCA9IGNwdWlkNF9jYWNoZV9sb29rdXAoaiwgdGhpc19sZWFmKTsKLQkJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKQorCQlpZiAodW5saWtlbHkocmV0dmFsIDwgMCkpIHsKKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgajsgaSsrKQorCQkJCWNhY2hlX3JlbW92ZV9zaGFyZWRfY3B1X21hcChjcHUsIGkpOwogCQkJYnJlYWs7CisJCX0KIAkJY2FjaGVfc2hhcmVkX2NwdV9tYXBfc2V0dXAoY3B1LCBqKTsKIAl9CiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBvbGRtYXNrKTsKIAogb3V0OgotCWlmIChyZXR2YWwpCi0JCWZyZWVfY2FjaGVfYXR0cmlidXRlcyhjcHUpOworCWlmIChyZXR2YWwpIHsKKwkJa2ZyZWUoY3B1aWQ0X2luZm9bY3B1XSk7CisJCWNwdWlkNF9pbmZvW2NwdV0gPSBOVUxMOworCX0KKwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTY2OSw3ICs2ODEsNyBAQAogCS5zeXNmc19vcHMJPSAmc3lzZnNfb3BzLAogfTsKIAotc3RhdGljIHZvaWQgY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQodW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjcHVpZDRfY2FjaGVfc3lzZnNfZXhpdCh1bnNpZ25lZCBpbnQgY3B1KQogewogCWtmcmVlKGNhY2hlX2tvYmplY3RbY3B1XSk7CiAJa2ZyZWUoaW5kZXhfa29iamVjdFtjcHVdKTsKQEAgLTY4MCwxMyArNjkyLDE0IEBACiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IGNwdWlkNF9jYWNoZV9zeXNmc19pbml0KHVuc2lnbmVkIGludCBjcHUpCiB7CisJaW50IGVycjsKIAogCWlmIChudW1fY2FjaGVfbGVhdmVzID09IDApCiAJCXJldHVybiAtRU5PRU5UOwogCi0JZGV0ZWN0X2NhY2hlX2F0dHJpYnV0ZXMoY3B1KTsKLQlpZiAoY3B1aWQ0X2luZm9bY3B1XSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0VOVDsKKwllcnIgPSBkZXRlY3RfY2FjaGVfYXR0cmlidXRlcyhjcHUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CiAKIAkvKiBBbGxvY2F0ZSBhbGwgcmVxdWlyZWQgbWVtb3J5ICovCiAJY2FjaGVfa29iamVjdFtjcHVdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtvYmplY3QpLCBHRlBfS0VSTkVMKTsKQEAgLTcwNSwxMyArNzE4LDE1IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKK3N0YXRpYyBjcHVtYXNrX3QgY2FjaGVfZGV2X21hcCA9IENQVV9NQVNLX05PTkU7CisKIC8qIEFkZC9SZW1vdmUgY2FjaGUgaW50ZXJmYWNlIGZvciBDUFUgZGV2aWNlICovCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBjYWNoZV9hZGRfZGV2KHN0cnVjdCBzeXNfZGV2aWNlICogc3lzX2RldikKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCXN0cnVjdCBfaW5kZXhfa29iamVjdCAqdGhpc19vYmplY3Q7Ci0JaW50IHJldHZhbCA9IDA7CisJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IGNwdWlkNF9jYWNoZV9zeXNmc19pbml0KGNwdSk7CiAJaWYgKHVubGlrZWx5KHJldHZhbCA8IDApKQpAQCAtNzIxLDYgKzczNiwxMCBAQAogCWtvYmplY3Rfc2V0X25hbWUoY2FjaGVfa29iamVjdFtjcHVdLCAiJXMiLCAiY2FjaGUiKTsKIAljYWNoZV9rb2JqZWN0W2NwdV0tPmt0eXBlID0gJmt0eXBlX3BlcmNwdV9lbnRyeTsKIAlyZXR2YWwgPSBrb2JqZWN0X3JlZ2lzdGVyKGNhY2hlX2tvYmplY3RbY3B1XSk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJY3B1aWQ0X2NhY2hlX3N5c2ZzX2V4aXQoY3B1KTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhY2hlX2xlYXZlczsgaSsrKSB7CiAJCXRoaXNfb2JqZWN0ID0gSU5ERVhfS09CSkVDVF9QVFIoY3B1LGkpOwpAQCAtNzQwLDYgKzc1OSw5IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwlpZiAoIXJldHZhbCkKKwkJY3B1X3NldChjcHUsIGNhY2hlX2Rldl9tYXApOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtNzUwLDEzICs3NzIsMTQgQEAKIAogCWlmIChjcHVpZDRfaW5mb1tjcHVdID09IE5VTEwpCiAJCXJldHVybjsKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NhY2hlX2xlYXZlczsgaSsrKSB7Ci0JCWNhY2hlX3JlbW92ZV9zaGFyZWRfY3B1X21hcChjcHUsIGkpOworCWlmICghY3B1X2lzc2V0KGNwdSwgY2FjaGVfZGV2X21hcCkpCisJCXJldHVybjsKKwljcHVfY2xlYXIoY3B1LCBjYWNoZV9kZXZfbWFwKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY2FjaGVfbGVhdmVzOyBpKyspCiAJCWtvYmplY3RfdW5yZWdpc3RlcigmKElOREVYX0tPQkpFQ1RfUFRSKGNwdSxpKS0+a29iaikpOwotCX0KIAlrb2JqZWN0X3VucmVnaXN0ZXIoY2FjaGVfa29iamVjdFtjcHVdKTsKIAljcHVpZDRfY2FjaGVfc3lzZnNfZXhpdChjcHUpOwotCXJldHVybjsKIH0KIAogc3RhdGljIGludCBfX2NwdWluaXQgY2FjaGVpbmZvX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKQEAgLTc4MSw3ICs4MDQsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgY2FjaGVpbmZvX2NwdV9ub3RpZmllciA9CiB7Ci0gICAgLm5vdGlmaWVyX2NhbGwgPSBjYWNoZWluZm9fY3B1X2NhbGxiYWNrLAorCS5ub3RpZmllcl9jYWxsID0gY2FjaGVpbmZvX2NwdV9jYWxsYmFjaywKIH07CiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IGNhY2hlX3N5c2ZzX2luaXQodm9pZCkKQEAgLTc5MSwxNCArODE0LDE1IEBACiAJaWYgKG51bV9jYWNoZV9sZWF2ZXMgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNhY2hlaW5mb19jcHVfbm90aWZpZXIpOwotCiAJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoKHVuc2lnbmVkIGludClpKTsKKwkJaW50IGVycjsKKwkJc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXYgPSBnZXRfY3B1X3N5c2RldihpKTsKIAotCQljYWNoZV9hZGRfZGV2KHN5c19kZXYpOworCQllcnIgPSBjYWNoZV9hZGRfZGV2KHN5c19kZXYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9Ci0KKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNhY2hlaW5mb19jcHVfbm90aWZpZXIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwppbmRleCA0OTRkMzIwLi4yNDg4NWJlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKQEAgLTEzMSwxNyArMTMxLDE5IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CiAJc3RydWN0IHN5c19kZXZpY2UgKnN5c19kZXY7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCXN5c19kZXYgPSBnZXRfY3B1X3N5c2RldihjcHUpOwogCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfT05MSU5FOgotCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKIAkJbXV0ZXhfbG9jaygmdGhlcm1fY3B1X2xvY2spOwogCQllcnIgPSB0aGVybWFsX3Rocm90dGxlX2FkZF9kZXYoc3lzX2Rldik7CiAJCW11dGV4X3VubG9jaygmdGhlcm1fY3B1X2xvY2spOwogCQlXQVJOX09OKGVycik7CiAJCWJyZWFrOworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKIAljYXNlIENQVV9ERUFEOgogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQltdXRleF9sb2NrKCZ0aGVybV9jcHVfbG9jayk7CkBAIC0xNDksNyArMTUxLDcgQEAKIAkJbXV0ZXhfdW5sb2NrKCZ0aGVybV9jcHVfbG9jayk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gTk9USUZZX09LOworCXJldHVybiBlcnIgPyBOT1RJRllfQkFEIDogTk9USUZZX09LOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRoZXJtYWxfdGhyb3R0bGVfY3B1X25vdGlmaWVyIF9fY3B1aW5pdGRhdGEgPQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwppbmRleCAyMjg3ZDQ4Li45OTY0YmUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY3lyaXguYwpAQCAtMTQ3LDEwICsxNDcsMTAgQEAKIAl3cml0ZV9jcjAoY3IwKTsKIAl3YmludmQoKTsKIAotCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2VyZSBleGNsdWRlZCBhdCB0aGUgdG9wICovCisJLyogQ3lyaXggQVJScyAtIGV2ZXJ5dGhpbmcgZWxzZSB3YXMgZXhjbHVkZWQgYXQgdGhlIHRvcCAqLwogCWNjcjMgPSBnZXRDeDg2KENYODZfQ0NSMyk7CiAKLQkvKiBDeXJpeCBBUlJzIC0gZXZlcnl0aGluZyBlbHNlIHdlcmUgZXhjbHVkZWQgYXQgdGhlIHRvcCAqLworCS8qIEN5cml4IEFSUnMgLSBldmVyeXRoaW5nIGVsc2Ugd2FzIGV4Y2x1ZGVkIGF0IHRoZSB0b3AgKi8KIAlzZXRDeDg2KENYODZfQ0NSMywgKGNjcjMgJiAweDBmKSB8IDB4MTApOwogCiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYwppbmRleCA1NmY2NGUzLi45OTJmMDhkZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC0xODIsNyArMTgyLDcgQEAKIAogLyoqCiAgKiBDaGVja3MgYW5kIHVwZGF0ZXMgYW4gZml4ZWQtcmFuZ2UgTVRSUiBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGl0Ci0gKiBzaG91bGQgaGF2ZS4gSWYgSzggZXh0ZW5zdGlvbnMgYXJlIHdhbnRlZCwgdXBkYXRlIHRoZSBLOCBTWVNDRkcgTVNSIGFsc28uCisgKiBzaG91bGQgaGF2ZS4gSWYgSzggZXh0ZW50aW9ucyBhcmUgd2FudGVkLCB1cGRhdGUgdGhlIEs4IFNZU0NGRyBNU1IgYWxzby4KICAqIHNlZSBBTUQgcHVibGljYXRpb24gbm8uIDI0NTkzLCBjaGFwdGVyIDcuOC4xLCBwYWdlIDIzMyBmb3IgbW9yZSBpbmZvcm1hdGlvbgogICogXHBhcmFtIG1zciBNU1IgYWRkcmVzcyBvZiB0aGUgTVRUUiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhbmQgdXBkYXRlZAogICogXHBhcmFtIGNoYW5nZWQgcG9pbnRlciB3aGljaCBpbmRpY2F0ZXMgd2hldGhlciB0aGUgTVRSUiBuZWVkZWQgdG8gYmUgY2hhbmdlZApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKaW5kZXggNWU0YmUzMC4uOWFiYmRmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCkBAIC03NDgsNyArNzQ4LDcgQEAKIAlpZiAodXNlX2ludGVsKCkpCiAJCW10cnJfc3RhdGVfd2FybigpOwogCWVsc2UgewotCQkvKiBUaGUgQ1BVcyBoYXZlbid0IE1UUlIgYW5kIHNlZW1lcyBub3Qgc3VwcG9ydCBTTVAuIFRoZXkgaGF2ZQorCQkvKiBUaGUgQ1BVcyBoYXZlbid0IE1UUlIgYW5kIHNlZW0gdG8gbm90IHN1cHBvcnQgU01QLiBUaGV5IGhhdmUKIAkJICogc3BlY2lmaWMgZHJpdmVycywgd2UgdXNlIGEgdHJpY2t5IG1ldGhvZCB0byBzdXBwb3J0CiAJCSAqIHN1c3BlbmQvcmVzdW1lIGZvciB0aGVtLgogCQkgKiBUQkQ6IGlzIHRoZXJlIGFueSBzeXN0ZW0gd2l0aCBzdWNoIENQVSB3aGljaCBzdXBwb3J0cwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmY3RyLXdhdGNoZG9nLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwppbmRleCA1NGNkYmYxLi5jMDI1NDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZjdHItd2F0Y2hkb2cuYwpAQCAtMTIwLDcgKzEyMCw5IEBACiAJdW5zaWduZWQgaW50IGNvdW50ZXI7CiAKIAljb3VudGVyID0gbm1pX3BlcmZjdHJfbXNyX3RvX2JpdChtc3IpOwotCUJVR19PTihjb3VudGVyID4gTk1JX01BWF9DT1VOVEVSX0JJVFMpOworCS8qIHJlZ2lzdGVyIG5vdCBtYW5hZ2VkIGJ5IHRoZSBhbGxvY2F0b3I/ICovCisJaWYgKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUykKKwkJcmV0dXJuIDE7CiAKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoY291bnRlciwgcGVyZmN0cl9ubWlfb3duZXIpKQogCQlyZXR1cm4gMTsKQEAgLTEzMiw3ICsxMzQsOSBAQAogCXVuc2lnbmVkIGludCBjb3VudGVyOwogCiAJY291bnRlciA9IG5taV9wZXJmY3RyX21zcl90b19iaXQobXNyKTsKLQlCVUdfT04oY291bnRlciA+IE5NSV9NQVhfQ09VTlRFUl9CSVRTKTsKKwkvKiByZWdpc3RlciBub3QgbWFuYWdlZCBieSB0aGUgYWxsb2NhdG9yPyAqLworCWlmIChjb3VudGVyID4gTk1JX01BWF9DT1VOVEVSX0JJVFMpCisJCXJldHVybjsKIAogCWNsZWFyX2JpdChjb3VudGVyLCBwZXJmY3RyX25taV9vd25lcik7CiB9CkBAIC0xNDIsNyArMTQ2LDkgQEAKIAl1bnNpZ25lZCBpbnQgY291bnRlcjsKIAogCWNvdW50ZXIgPSBubWlfZXZudHNlbF9tc3JfdG9fYml0KG1zcik7Ci0JQlVHX09OKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUyk7CisJLyogcmVnaXN0ZXIgbm90IG1hbmFnZWQgYnkgdGhlIGFsbG9jYXRvcj8gKi8KKwlpZiAoY291bnRlciA+IE5NSV9NQVhfQ09VTlRFUl9CSVRTKQorCQlyZXR1cm4gMTsKIAogCWlmICghdGVzdF9hbmRfc2V0X2JpdChjb3VudGVyLCBldm50c2VsX25taV9vd25lcikpCiAJCXJldHVybiAxOwpAQCAtMTU0LDcgKzE2MCw5IEBACiAJdW5zaWduZWQgaW50IGNvdW50ZXI7CiAKIAljb3VudGVyID0gbm1pX2V2bnRzZWxfbXNyX3RvX2JpdChtc3IpOwotCUJVR19PTihjb3VudGVyID4gTk1JX01BWF9DT1VOVEVSX0JJVFMpOworCS8qIHJlZ2lzdGVyIG5vdCBtYW5hZ2VkIGJ5IHRoZSBhbGxvY2F0b3I/ICovCisJaWYgKGNvdW50ZXIgPiBOTUlfTUFYX0NPVU5URVJfQklUUykKKwkJcmV0dXJuOwogCiAJY2xlYXJfYml0KGNvdW50ZXIsIGV2bnRzZWxfbm1pX293bmVyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcHJvYy5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKaW5kZXggODc5YTBmNy4uMmQ0MmI0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wcm9jLmMKQEAgLTg1LDEyICs4NSwxMyBAQAogCQkvKiBub3RoaW5nICovCiAJfTsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSB2OwotCWludCBpLCBuID0gYyAtIGNwdV9kYXRhOworCWludCBpLCBuID0gMDsKIAlpbnQgZnB1X2V4Y2VwdGlvbjsKIAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoIWNwdV9vbmxpbmUobikpCiAJCXJldHVybiAwOworCW4gPSBjLT5jcHVfaW5kZXg7CiAjZW5kaWYKIAlzZXFfcHJpbnRmKG0sICJwcm9jZXNzb3JcdDogJWRcbiIKIAkJInZlbmRvcl9pZFx0OiAlc1xuIgpAQCAtMTc1LDExICsxNzYsMTUgQEAKIAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IE5SX0NQVVMgPyBjcHVfZGF0YSArICpwb3MgOiBOVUxMOworCWlmICgqcG9zID09IDApCS8qIGp1c3QgaW4gY2FzZSwgY3B1IDAgaXMgbm90IHRoZSBmaXJzdCAqLworCQkqcG9zID0gZmlyc3RfY3B1KGNwdV9wb3NzaWJsZV9tYXApOworCWlmICgoKnBvcykgPCBOUl9DUFVTICYmIGNwdV9wb3NzaWJsZSgqcG9zKSkKKwkJcmV0dXJuICZjcHVfZGF0YSgqcG9zKTsKKwlyZXR1cm4gTlVMTDsKIH0KIHN0YXRpYyB2b2lkICpjX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQkrKypwb3M7CisJKnBvcyA9IG5leHRfY3B1KCpwb3MsIGNwdV9wb3NzaWJsZV9tYXApOwogCXJldHVybiBjX3N0YXJ0KG0sIHBvcyk7CiB9CiBzdGF0aWMgdm9pZCBjX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdWlkLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwppbmRleCA3MGRjZjkxLi4wNWM5OTM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1aWQuYwpAQCAtMTE0LDcgKzExNCw3IEBACiBzdGF0aWMgaW50IGNwdWlkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9IGltaW5vcihmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmKGNwdV9kYXRhKVtjcHVdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwogCiAJaWYgKGNwdSA+PSBOUl9DUFVTIHx8ICFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAtRU5YSU87CS8qIE5vIHN1Y2ggQ1BVICovCkBAIC0xMzQsMTUgKzEzNCwxOCBAQAogCS5vcGVuID0gY3B1aWRfb3BlbiwKIH07CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IGNwdWlkX2RldmljZV9jcmVhdGUoaW50IGkpCitzdGF0aWMgX19jcHVpbml0IGludCBjcHVpZF9kZXZpY2VfY3JlYXRlKGludCBjcHUpCiB7Ci0JaW50IGVyciA9IDA7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCi0JZGV2ID0gZGV2aWNlX2NyZWF0ZShjcHVpZF9jbGFzcywgTlVMTCwgTUtERVYoQ1BVSURfTUFKT1IsIGkpLCAiY3B1JWQiLGkpOwotCWlmIChJU19FUlIoZGV2KSkKLQkJZXJyID0gUFRSX0VSUihkZXYpOwotCXJldHVybiBlcnI7CisJZGV2ID0gZGV2aWNlX2NyZWF0ZShjcHVpZF9jbGFzcywgTlVMTCwgTUtERVYoQ1BVSURfTUFKT1IsIGNwdSksCisJCQkgICAgImNwdSVkIiwgY3B1KTsKKwlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOworfQorCitzdGF0aWMgdm9pZCBjcHVpZF9kZXZpY2VfZGVzdHJveShpbnQgY3B1KQoreworCWRldmljZV9kZXN0cm95KGNwdWlkX2NsYXNzLCBNS0RFVihDUFVJRF9NQUpPUiwgY3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IGNwdWlkX2NsYXNzX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKQEAgLTE1MCwxOCArMTUzLDIxIEBACiAJCQkJCSAgICAgIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJaW50IGVyciA9IDA7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgQ1BVX09OTElORToKLQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQljcHVpZF9kZXZpY2VfY3JlYXRlKGNwdSk7CisJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKKwkJZXJyID0gY3B1aWRfZGV2aWNlX2NyZWF0ZShjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKLQkJZGV2aWNlX2Rlc3Ryb3koY3B1aWRfY2xhc3MsIE1LREVWKENQVUlEX01BSk9SLCBjcHUpKTsKKwkJY3B1aWRfZGV2aWNlX2Rlc3Ryb3koY3B1KTsKIAkJYnJlYWs7CiAJfQotCXJldHVybiBOT1RJRllfT0s7CisJcmV0dXJuIGVyciA/IE5PVElGWV9CQUQgOiBOT1RJRllfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBjcHVpZF9jbGFzc19jcHVfbm90aWZpZXIgPQpAQCAtMTk4LDcgKzIwNCw3IEBACiBvdXRfY2xhc3M6CiAJaSA9IDA7CiAJZm9yX2VhY2hfb25saW5lX2NwdShpKSB7Ci0JCWRldmljZV9kZXN0cm95KGNwdWlkX2NsYXNzLCBNS0RFVihDUFVJRF9NQUpPUiwgaSkpOworCQljcHVpZF9kZXZpY2VfZGVzdHJveShpKTsKIAl9CiAJY2xhc3NfZGVzdHJveShjcHVpZF9jbGFzcyk7CiBvdXRfY2hyZGV2OgpAQCAtMjEyLDcgKzIxOCw3IEBACiAJaW50IGNwdSA9IDA7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJZGV2aWNlX2Rlc3Ryb3koY3B1aWRfY2xhc3MsIE1LREVWKENQVUlEX01BSk9SLCBjcHUpKTsKKwkJY3B1aWRfZGV2aWNlX2Rlc3Ryb3koY3B1KTsKIAljbGFzc19kZXN0cm95KGNwdWlkX2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldihDUFVJRF9NQUpPUiwgImNwdS9jcHVpZCIpOwogCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVpZF9jbGFzc19jcHVfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9jcmFzaF9kdW1wXzMyLmMKaW5kZXggMzJlNzVkMC4uNzJkMGM1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NyYXNoX2R1bXBfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3Jhc2hfZHVtcF8zMi5jCkBAIC00Nyw2ICs0Nyw3IEBACiAJCWlmICgha2R1bXBfYnVmX3BhZ2UpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIktkdW1wOiBLZHVtcCBidWZmZXIgcGFnZSBub3QiCiAJCQkJIiBhbGxvY2F0ZWRcbiIpOworCQkJa3VubWFwX2F0b21pYyh2YWRkciwgS01fUFRFMCk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQogCQljb3B5X3BhZ2Uoa2R1bXBfYnVmX3BhZ2UsIHZhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMF8zMi5jCmluZGV4IDNjODZiOTcuLjU4ZmQ1NGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjBfMzIuYwpAQCAtMjg4LDcgKzI4OCw4IEBACiAJCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgY29kZV9yZXNvdXJjZSk7CiAJCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgZGF0YV9yZXNvdXJjZSk7CiAjaWZkZWYgQ09ORklHX0tFWEVDCi0JCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgJmNyYXNoa19yZXMpOworCQkJaWYgKGNyYXNoa19yZXMuc3RhcnQgIT0gY3Jhc2hrX3Jlcy5lbmQpCisJCQkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZjcmFzaGtfcmVzKTsKICNlbmRpZgogCQl9CiAJfQpAQCAtNzA1LDcgKzcwNiw3IEBACiAJaW50IGk7CiAKIAkvKgotCSAqIFNlYXJjaCBmb3IgdGhlIGJpZ2VzdCBnYXAgaW4gdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBlODIwCisJICogU2VhcmNoIGZvciB0aGUgYmlnZ2VzdCBnYXAgaW4gdGhlIGxvdyAzMiBiaXRzIG9mIHRoZSBlODIwCiAJICogbWVtb3J5IHNwYWNlLgogCSAqLwogCWxhc3QgPSAweDEwMDAwMDAwMHVsbDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMF82NC5jCmluZGV4IGU0MjJiODEuLjU3NjE2ODYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjBfNjQuYwpAQCAtMjI2LDcgKzIyNiw4IEBACiAJCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgJmNvZGVfcmVzb3VyY2UpOwogCQkJcmVxdWVzdF9yZXNvdXJjZShyZXMsICZkYXRhX3Jlc291cmNlKTsKICNpZmRlZiBDT05GSUdfS0VYRUMKLQkJCXJlcXVlc3RfcmVzb3VyY2UocmVzLCAmY3Jhc2hrX3Jlcyk7CisJCQlpZiAoY3Jhc2hrX3Jlcy5zdGFydCAhPSBjcmFzaGtfcmVzLmVuZCkKKwkJCQlyZXF1ZXN0X3Jlc291cmNlKHJlcywgJmNyYXNoa19yZXMpOwogI2VuZGlmCiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKc2ltaWxhcml0eSBpbmRleCA4OCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrc182NC5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvZWFybHktcXVpcmtzLmMKaW5kZXggMTNhYTRmZC4uZGMzNGFjYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Vhcmx5LXF1aXJrc182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lYXJseS1xdWlya3MuYwpAQCAtMTMsOSArMTMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb3RvLmg+Ci0jaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKworI2lmZGVmIENPTkZJR19JT01NVQorI2luY2x1ZGUgPGFzbS9pb21tdS5oPgorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5pdCB2aWFfYnVncyh2b2lkKQogewpAQCAtMjMsNyArMjcsOCBAQAogCWlmICgoZW5kX3BmbiA+IE1BWF9ETUEzMl9QRk4gfHwgIGZvcmNlX2lvbW11KSAmJgogCSAgICAhaW9tbXVfYXBlcnR1cmVfYWxsb3dlZCkgewogCQlwcmludGsoS0VSTl9JTkZPCi0gICJMb29rcyBsaWtlIGEgVklBIGNoaXBzZXQuIERpc2FibGluZyBJT01NVS4gT3ZlcnJpZGUgd2l0aCBpb21tdT1hbGxvd2VkXG4iKTsKKwkJICAgICAgICJMb29rcyBsaWtlIGEgVklBIGNoaXBzZXQuIERpc2FibGluZyBJT01NVS4iCisJCSAgICAgICAiIE92ZXJyaWRlIHdpdGggaW9tbXU9YWxsb3dlZFxuIik7CiAJCWlvbW11X2FwZXJ0dXJlX2Rpc2FibGVkID0gMTsKIAl9CiAjZW5kaWYKQEAgLTQwLDYgKzQ1LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBudmlkaWFfYnVncyh2b2lkKQogewogI2lmZGVmIENPTkZJR19BQ1BJCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJLyoKIAkgKiBBbGwgdGltZXIgb3ZlcnJpZGVzIG9uIE52aWRpYSBhcmUKIAkgKiB3cm9uZyB1bmxlc3MgSFBFVCBpcyBlbmFibGVkLgpAQCAtNTksMTcgKzY1LDIwIEBACiAJCQkidHJ5IGFjcGlfdXNlX3RpbWVyX292ZXJyaWRlXG4iKTsKIAl9CiAjZW5kaWYKKyNlbmRpZgogCS8qIFJFRC1QRU4gc2tpcCB0aGVtIG9uIG1wdGFibGVzIHRvbz8gKi8KIAogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXRpX2J1Z3Modm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKIAlpZiAodGltZXJfb3Zlcl84MjU0ID09IDEpIHsKIAkJdGltZXJfb3Zlcl84MjU0ID0gMDsKIAkJcHJpbnRrKEtFUk5fSU5GTwotCSAJIkFUSSBib2FyZCBkZXRlY3RlZC4gRGlzYWJsaW5nIHRpbWVyIHJvdXRpbmcgb3ZlciA4MjU0LlxuIik7CisJCSJBVEkgYm9hcmQgZGV0ZWN0ZWQuIERpc2FibGluZyB0aW1lciByb3V0aW5nIG92ZXIgODI1NC5cbiIpOwogCX0KKyNlbmRpZgogfQogCiBzdHJ1Y3QgY2hpcHNldCB7CkBAIC0xMDQsNyArMTEzLDcgQEAKIAkJCQlpZiAoY2xhc3MgPT0gMHhmZmZmZmZmZikKIAkJCQkJYnJlYWs7CiAKLQkJICAgICAgIAkJaWYgKChjbGFzcyA+PiAxNikgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCisJCQkJaWYgKChjbGFzcyA+PiAxNikgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kpCiAJCQkJCWNvbnRpbnVlOwogCiAJCQkJdmVuZG9yID0gcmVhZF9wY2lfY29uZmlnKG51bSwgc2xvdCwgZnVuYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY182NC5jCmluZGV4IDRhZTAzZTMuLmNlNzAzZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfNjQuYwpAQCAtMjQsMTAgKzI0LDE5IEBACiAjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgogI2VuZGlmCiAKLS8qIHdoaWNoIGxvZ2ljYWwgQ1BVIG51bWJlciBtYXBzIHRvIHdoaWNoIENQVSAocGh5c2ljYWwgQVBJQyBJRCkgKi8KLXU4IHg4Nl9jcHVfdG9fYXBpY2lkW05SX0NQVVNdIF9fcmVhZF9tb3N0bHkKKy8qCisgKiB3aGljaCBsb2dpY2FsIENQVSBudW1iZXIgbWFwcyB0byB3aGljaCBDUFUgKHBoeXNpY2FsIEFQSUMgSUQpCisgKgorICogVGhlIGZvbGxvd2luZyBzdGF0aWMgYXJyYXkgaXMgdXNlZCBkdXJpbmcga2VybmVsIHN0YXJ0dXAKKyAqIGFuZCB0aGUgeDg2X2NwdV90b19hcGljaWRfcHRyIGNvbnRhaW5zIHRoZSBhZGRyZXNzIG9mIHRoZQorICogYXJyYXkgZHVyaW5nIHRoaXMgdGltZS4gIElzIGl0IHplcm9lZCB3aGVuIHRoZSBwZXJfY3B1CisgKiBkYXRhIGFyZWEgaXMgcmVtb3ZlZC4KKyAqLwordTggeDg2X2NwdV90b19hcGljaWRfaW5pdFtOUl9DUFVTXSBfX2luaXRkYXRhCiAJCQkJCT0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKLUVYUE9SVF9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOwordm9pZCAqeDg2X2NwdV90b19hcGljaWRfcHRyOworREVGSU5FX1BFUl9DUFUodTgsIHg4Nl9jcHVfdG9fYXBpY2lkKSA9IEJBRF9BUElDSUQ7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOwogCiBzdHJ1Y3QgZ2VuYXBpYyBfX3JlYWRfbW9zdGx5ICpnZW5hcGljID0gJmFwaWNfZmxhdDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2dlbmFwaWNfZmxhdF82NC5jCmluZGV4IDkxYzc1MjYuLjA3MzUyYjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9nZW5hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZ2VuYXBpY19mbGF0XzY0LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogCSAqLwogCWNwdSA9IGZpcnN0X2NwdShjcHVtYXNrKTsKIAlpZiAoKHVuc2lnbmVkKWNwdSA8IE5SX0NQVVMpCi0JCXJldHVybiB4ODZfY3B1X3RvX2FwaWNpZFtjcHVdOworCQlyZXR1cm4gcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KTsKIAllbHNlCiAJCXJldHVybiBCQURfQVBJQ0lEOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCmluZGV4IGE3ZWVlMGEuLjZiMzQ2OTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBJRFRfRU5UUklFUzsgaSsrKQogCQlzZXRfaW50cl9nYXRlKGksIGVhcmx5X2lkdF9oYW5kbGVyKTsKLQlhc20gdm9sYXRpbGUoImxpZHQgJTAiIDo6ICJtIiAoaWR0X2Rlc2NyKSk7CisJbG9hZF9pZHQoKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKSZpZHRfZGVzY3IpOwogCiAJZWFybHlfcHJpbnRrKCJLZXJuZWwgYWxpdmVcbiIpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jIGIvYXJjaC94ODYva2VybmVsL2hwZXQuYwppbmRleCBmODM2NzA3Li41MzMwM2YyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKQEAgLTY5LDEyICs2OSwxNSBAQAogICogSFBFVCBjb21tYW5kIGxpbmUgZW5hYmxlIC8gZGlzYWJsZQogICovCiBzdGF0aWMgaW50IGJvb3RfaHBldF9kaXNhYmxlOworaW50IGhwZXRfZm9yY2VfdXNlcjsKIAogc3RhdGljIGludCBfX2luaXQgaHBldF9zZXR1cChjaGFyKiBzdHIpCiB7CiAJaWYgKHN0cikgewogCQlpZiAoIXN0cm5jbXAoImRpc2FibGUiLCBzdHIsIDcpKQogCQkJYm9vdF9ocGV0X2Rpc2FibGUgPSAxOworCQlpZiAoIXN0cm5jbXAoImZvcmNlIiwgc3RyLCA1KSkKKwkJCWhwZXRfZm9yY2VfdXNlciA9IDE7CiAJfQogCXJldHVybiAxOwogfQpAQCAtMzUwLDcgKzM1Myw3IEBACiAJICoKIAkgKiBocGV0IHBlcmlvZCBpcyBpbiBmZW10byBzZWNvbmRzIHBlciBjeWNsZQogCSAqIHNvIHdlIG5lZWQgdG8gY29udmVydCB0aGlzIHRvIG5zL2N5YyB1bml0cwotCSAqIGFwcm94aW1hdGVkIGJ5IG11bHQvMl5zaGlmdAorCSAqIGFwcHJveGltYXRlZCBieSBtdWx0LzJec2hpZnQKIAkgKgogCSAqICBmc2VjL2N5YyAqIDFuc2VjLzEwMDAwMDBmc2VjID0gbnNlYy9jeWMgPSBtdWx0LzJec2hpZnQKIAkgKiAgZnNlYy9jeWMgKiAxbnMvMTAwMDAwMGZzZWMgKiAyXnNoaWZ0ID0gbXVsdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2k4MjUzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYwppbmRleCA1Y2M4ODQxLi5hNDJjODA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTMuYwpAQCAtODYsNyArODYsNyBAQAogICogT24gVVAgdGhlIFBJVCBjYW4gc2VydmUgYWxsIG9mIHRoZSBwb3NzaWJsZSB0aW1lciBmdW5jdGlvbnMuIE9uIFNNUCBzeXN0ZW1zCiAgKiBpdCBjYW4gYmUgc29sZWx5IHVzZWQgZm9yIHRoZSBnbG9iYWwgdGljay4KICAqCi0gKiBUaGUgcHJvZmlsaW5nIGFuZCB1cGRhdGUgY2FwYWJpbGl0ZXMgYXJlIHN3aXRjaGVkIG9mZiBvbmNlIHRoZSBsb2NhbCBhcGljIGlzCisgKiBUaGUgcHJvZmlsaW5nIGFuZCB1cGRhdGUgY2FwYWJpbGl0aWVzIGFyZSBzd2l0Y2hlZCBvZmYgb25jZSB0aGUgbG9jYWwgYXBpYyBpcwogICogcmVnaXN0ZXJlZC4gVGhpcyBtZWNoYW5pc20gcmVwbGFjZXMgdGhlIHByZXZpb3VzICNpZmRlZiBMT0NBTF9BUElDIC0KICAqICF1c2luZ19hcGljX3RpbWVyIGRlY2lzaW9ucyBpbiBkb190aW1lcl9pbnRlcnJ1cHRfaG9vaygpCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1OV8zMi5jIGIvYXJjaC94ODYva2VybmVsL2k4MjU5XzMyLmMKaW5kZXggZDM0YTEwYy4uZjYzNGZjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjU5XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2k4MjU5XzMyLmMKQEAgLTQwMyw3ICs0MDMsOCBAQAogCQlpbnQgdmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SICsgaTsKIAkJaWYgKGkgPj0gTlJfSVJRUykKIAkJCWJyZWFrOwotCQlpZiAodmVjdG9yICE9IFNZU0NBTExfVkVDVE9SKSAKKwkJLyogU1lTQ0FMTF9WRUNUT1Igd2FzIHJlc2VydmVkIGluIHRyYXBfaW5pdC4gKi8KKwkJaWYgKCF0ZXN0X2JpdCh2ZWN0b3IsIHVzZWRfdmVjdG9ycykpCiAJCQlzZXRfaW50cl9nYXRlKHZlY3RvciwgaW50ZXJydXB0W2ldKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2suYwpzaW1pbGFyaXR5IGluZGV4IDc5JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrXzMyLmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2suYwppbmRleCBkMjZmYzA2Li40NjhjOWM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2luaXRfdGFzay5jCkBAIC0xNSw3ICsxNSw2IEBACiBzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0gSU5JVF9TSUdOQUxTKGluaXRfc2lnbmFscyk7CiBzdGF0aWMgc3RydWN0IHNpZ2hhbmRfc3RydWN0IGluaXRfc2lnaGFuZCA9IElOSVRfU0lHSEFORChpbml0X3NpZ2hhbmQpOwogc3RydWN0IG1tX3N0cnVjdCBpbml0X21tID0gSU5JVF9NTShpbml0X21tKTsKLQogRVhQT1JUX1NZTUJPTChpbml0X21tKTsKIAogLyoKQEAgLTI1LDcgKzI0LDcgQEAKICAqIHdheSBwcm9jZXNzIHN0YWNrcyBhcmUgaGFuZGxlZC4gVGhpcyBpcyBkb25lIGJ5IGhhdmluZyBhIHNwZWNpYWwKICAqICJpbml0X3Rhc2siIGxpbmtlciBtYXAgZW50cnkuLgogICovCi11bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24gCit1bmlvbiB0aHJlYWRfdW5pb24gaW5pdF90aHJlYWRfdW5pb24KIAlfX2F0dHJpYnV0ZV9fKChfX3NlY3Rpb25fXygiLmRhdGEuaW5pdF90YXNrIikpKSA9CiAJCXsgSU5JVF9USFJFQURfSU5GTyhpbml0X3Rhc2spIH07CiAKQEAgLTM1LDEyICszNCwxNCBAQAogICogQWxsIG90aGVyIHRhc2sgc3RydWN0cyB3aWxsIGJlIGFsbG9jYXRlZCBvbiBzbGFicyBpbiBmb3JrLmMKICAqLwogc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwotCiBFWFBPUlRfU1lNQk9MKGluaXRfdGFzayk7CiAKIC8qCiAgKiBwZXItQ1BVIFRTUyBzZWdtZW50cy4gVGhyZWFkcyBhcmUgY29tcGxldGVseSAnc29mdCcgb24gTGludXgsCi0gKiBubyBtb3JlIHBlci10YXNrIFRTUydzLgotICovIAorICogbm8gbW9yZSBwZXItdGFzayBUU1Mncy4gVGhlIFRTUyBzaXplIGlzIGtlcHQgY2FjaGVsaW5lLWFsaWduZWQKKyAqIHNvIHRoZXkgYXJlIGFsbG93ZWQgdG8gZW5kIHVwIGluIHRoZSAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZAorICogc2VjdGlvbi4gU2luY2UgVFNTJ3MgYXJlIGNvbXBsZXRlbHkgQ1BVLWxvY2FsLCB3ZSB3YW50IHRoZW0KKyAqIG9uIGV4YWN0IGNhY2hlbGluZSBib3VuZGFyaWVzLCB0byBlbGltaW5hdGUgY2FjaGVsaW5lIHBpbmctcG9uZy4KKyAqLwogREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IHRzc19zdHJ1Y3QsIGluaXRfdHNzKSA9IElOSVRfVFNTOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW5pdF90YXNrXzY0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmZjMzZDQuLjAwMDAwMDAKLS0tIGEvYXJjaC94ODYva2VybmVsL2luaXRfdGFza182NC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9tcXVldWUuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotCi1zdGF0aWMgc3RydWN0IGZzX3N0cnVjdCBpbml0X2ZzID0gSU5JVF9GUzsKLXN0YXRpYyBzdHJ1Y3QgZmlsZXNfc3RydWN0IGluaXRfZmlsZXMgPSBJTklUX0ZJTEVTOwotc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IElOSVRfU0lHTkFMUyhpbml0X3NpZ25hbHMpOwotc3RhdGljIHN0cnVjdCBzaWdoYW5kX3N0cnVjdCBpbml0X3NpZ2hhbmQgPSBJTklUX1NJR0hBTkQoaW5pdF9zaWdoYW5kKTsKLXN0cnVjdCBtbV9zdHJ1Y3QgaW5pdF9tbSA9IElOSVRfTU0oaW5pdF9tbSk7Ci0KLUVYUE9SVF9TWU1CT0woaW5pdF9tbSk7Ci0KLS8qCi0gKiBJbml0aWFsIHRhc2sgc3RydWN0dXJlLgotICoKLSAqIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhpcyBpcyA4MTkyLWJ5dGUgYWxpZ25lZCBkdWUgdG8gdGhlCi0gKiB3YXkgcHJvY2VzcyBzdGFja3MgYXJlIGhhbmRsZWQuIFRoaXMgaXMgZG9uZSBieSBoYXZpbmcgYSBzcGVjaWFsCi0gKiAiaW5pdF90YXNrIiBsaW5rZXIgbWFwIGVudHJ5Li4KLSAqLwotdW5pb24gdGhyZWFkX3VuaW9uIGluaXRfdGhyZWFkX3VuaW9uIAotCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS5pbml0X3Rhc2siKSkpID0KLQkJeyBJTklUX1RIUkVBRF9JTkZPKGluaXRfdGFzaykgfTsKLQotLyoKLSAqIEluaXRpYWwgdGFzayBzdHJ1Y3R1cmUuCi0gKgotICogQWxsIG90aGVyIHRhc2sgc3RydWN0cyB3aWxsIGJlIGFsbG9jYXRlZCBvbiBzbGFicyBpbiBmb3JrLmMKLSAqLwotc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayA9IElOSVRfVEFTSyhpbml0X3Rhc2spOwotCi1FWFBPUlRfU1lNQk9MKGluaXRfdGFzayk7Ci0vKgotICogcGVyLUNQVSBUU1Mgc2VnbWVudHMuIFRocmVhZHMgYXJlIGNvbXBsZXRlbHkgJ3NvZnQnIG9uIExpbnV4LAotICogbm8gbW9yZSBwZXItdGFzayBUU1Mncy4gVGhlIFRTUyBzaXplIGlzIGtlcHQgY2FjaGVsaW5lLWFsaWduZWQKLSAqIHNvIHRoZXkgYXJlIGFsbG93ZWQgdG8gZW5kIHVwIGluIHRoZSAuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZAotICogc2VjdGlvbi4gU2luY2UgVFNTJ3MgYXJlIGNvbXBsZXRlbHkgQ1BVLWxvY2FsLCB3ZSB3YW50IHRoZW0KLSAqIG9uIGV4YWN0IGNhY2hlbGluZSBib3VuZGFyaWVzLCB0byBlbGltaW5hdGUgY2FjaGVsaW5lIHBpbmctcG9uZy4KLSAqLyAKLURFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCB0c3Nfc3RydWN0LCBpbml0X3RzcykgPSBJTklUX1RTUzsKLQotLyogQ29waWVzIG9mIHRoZSBvcmlnaW5hbCBpc3QgdmFsdWVzIGZyb20gdGhlIHRzcyBhcmUgb25seSBhY2Nlc3NlZCBkdXJpbmcKLSAqIGRlYnVnZ2luZywgbm8gc3BlY2lhbCBhbGlnbm1lbnQgcmVxdWlyZWQuCi0gKi8KLURFRklORV9QRVJfQ1BVKHN0cnVjdCBvcmlnX2lzdCwgb3JpZ19pc3QpOwotCi0jZGVmaW5lIEFMSUdOX1RPXzRLIF9fYXR0cmlidXRlX18oKHNlY3Rpb24oIi5kYXRhLmluaXRfdGFzayIpKSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY18zMi5jCmluZGV4IDVmMTBjNzEuLmYzNWM2ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfMzIuYwpAQCAtNTg0LDcgKzU4NCw3IEBACiAKIAlpbWJhbGFuY2UgPSBtb3ZlX3RoaXNfbG9hZDsKIAkKLQkvKiBGb3IgcGh5c2ljYWxfYmFsYW5jZSBjYXNlLCB3ZSBhY2N1bWxhdGVkIGJvdGggbG9hZAorCS8qIEZvciBwaHlzaWNhbF9iYWxhbmNlIGNhc2UsIHdlIGFjY3VtdWxhdGVkIGJvdGggbG9hZAogCSAqIHZhbHVlcyBpbiB0aGUgb25lIG9mIHRoZSBzaWJsaW5ncyBjcHVfaXJxW10sCiAJICogdG8gdXNlIHRoZSBzYW1lIGNvZGUgZm9yIHBoeXNpY2FsIGFuZCBsb2dpY2FsIHByb2Nlc3NvcnMKIAkgKiBhcyBtdWNoIGFzIHBvc3NpYmxlLiAKQEAgLTExOTgsNyArMTE5OCw3IEBACiBzdGF0aWMgaW50IF9fYXNzaWduX2lycV92ZWN0b3IoaW50IGlycSkKIHsKIAlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiwgY3VycmVudF9vZmZzZXQgPSAwOwotCWludCB2ZWN0b3IsIG9mZnNldCwgaTsKKwlpbnQgdmVjdG9yLCBvZmZzZXQ7CiAKIAlCVUdfT04oKHVuc2lnbmVkKWlycSA+PSBOUl9JUlFfVkVDVE9SUyk7CiAKQEAgLTEyMTUsMTEgKzEyMTUsOCBAQAogCX0KIAlpZiAodmVjdG9yID09IGN1cnJlbnRfdmVjdG9yKQogCQlyZXR1cm4gLUVOT1NQQzsKLQlpZiAodmVjdG9yID09IFNZU0NBTExfVkVDVE9SKQorCWlmICh0ZXN0X2FuZF9zZXRfYml0KHZlY3RvciwgdXNlZF92ZWN0b3JzKSkKIAkJZ290byBuZXh0OwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFfVkVDVE9SUzsgaSsrKQotCQlpZiAoaXJxX3ZlY3RvcltpXSA9PSB2ZWN0b3IpCi0JCQlnb3RvIG5leHQ7CiAKIAljdXJyZW50X3ZlY3RvciA9IHZlY3RvcjsKIAljdXJyZW50X29mZnNldCA9IG9mZnNldDsKQEAgLTIyOTUsNiArMjI5MiwxMiBAQAogCiB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDKHZvaWQpCiB7CisJaW50IGk7CisKKwkvKiBSZXNlcnZlIGFsbCB0aGUgc3lzdGVtIHZlY3RvcnMuICovCisJZm9yIChpID0gRklSU1RfU1lTVEVNX1ZFQ1RPUjsgaSA8IE5SX1ZFQ1RPUlM7IGkrKykKKwkJc2V0X2JpdChpLCB1c2VkX3ZlY3RvcnMpOworCiAJZW5hYmxlX0lPX0FQSUMoKTsKIAogCWlmIChhY3BpX2lvYXBpYykKQEAgLTI0NzIsNyArMjQ3NSw3IEBACiB9CiAKIC8qCi0gKiBNU0kgbWVzYWdlIGNvbXBvc2l0aW9uCisgKiBNU0kgbWVzc2FnZSBjb21wb3NpdGlvbgogICovCiAjaWZkZWYgQ09ORklHX1BDSV9NU0kKIHN0YXRpYyBpbnQgbXNpX2NvbXBvc2VfbXNnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9pb19hcGljXzY0LmMKaW5kZXggMWMyYzdiZi4uYjNjMmQyNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lvX2FwaWNfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fYXBpY182NC5jCkBAIC0xNzcwLDcgKzE3NzAsNyBAQAogCiAvKgogICoKLSAqIElSUSdzIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhlIFBJQyBpbiB0aGUgTVBTIElPQVBJQyBjYXNlLgorICogSVJRcyB0aGF0IGFyZSBoYW5kbGVkIGJ5IHRoZSBQSUMgaW4gdGhlIE1QUyBJT0FQSUMgY2FzZS4KICAqIC0gSVJRMiBpcyB0aGUgY2FzY2FkZSBJUlEsIGFuZCBjYW5ub3QgYmUgYSBpby1hcGljIElSUS4KICAqICAgTGludXggZG9lc24ndCByZWFsbHkgY2FyZSwgYXMgaXQncyBub3QgYWN0dWFsbHkgdXNlZAogICogICBmb3IgYW55IGludGVycnVwdCBoYW5kbGluZyBhbnl3YXkuCkBAIC0xOTIxLDcgKzE5MjEsNyBAQAogfQogCiAvKgotICogTVNJIG1lc2FnZSBjb21wb3NpdGlvbgorICogTVNJIG1lc3NhZ2UgY29tcG9zaXRpb24KICAqLwogI2lmZGVmIENPTkZJR19QQ0lfTVNJCiBzdGF0aWMgaW50IG1zaV9jb21wb3NlX21zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGlycSwgc3RydWN0IG1zaV9tc2cgKm1zZykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCmluZGV4IDg0NTljYTYuLjExYjkzNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwpAQCAtMTQ5LDI4ICsxNDksNiBAQAogCQkJaW1hZ2UtPnN0YXJ0LCBjcHVfaGFzX3BhZSk7CiB9CiAKLS8qIGNyYXNoa2VybmVsPXNpemVAYWRkciBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIHRvIHJlc2VydmUgZm9yCi0gKiBhIGNyYXNoIGtlcm5lbC4gIEJ5IHJlc2VydmluZyB0aGlzIG1lbW9yeSB3ZSBndWFyYW50ZWUKLSAqIHRoYXQgbGludXggbmV2ZXIgc2V0cyBpdCB1cCBhcyBhIERNQSB0YXJnZXQuCi0gKiBVc2VmdWwgZm9yIGhvbGRpbmcgY29kZSB0byBkbyBzb21ldGhpbmcgYXBwcm9wcmlhdGUKLSAqIGFmdGVyIGEga2VybmVsIHBhbmljLgotICovCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9jcmFzaGtlcm5lbChjaGFyICphcmcpCi17Ci0JdW5zaWduZWQgbG9uZyBzaXplLCBiYXNlOwotCXNpemUgPSBtZW1wYXJzZShhcmcsICZhcmcpOwotCWlmICgqYXJnID09ICdAJykgewotCQliYXNlID0gbWVtcGFyc2UoYXJnKzEsICZhcmcpOwotCQkvKiBGSVhNRTogRG8gSSB3YW50IGEgc2FuaXR5IGNoZWNrCi0JCSAqIHRvIHZhbGlkYXRlIHRoZSBtZW1vcnkgcmFuZ2U/Ci0JCSAqLwotCQljcmFzaGtfcmVzLnN0YXJ0ID0gYmFzZTsKLQkJY3Jhc2hrX3Jlcy5lbmQgICA9IGJhc2UgKyBzaXplIC0gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiY3Jhc2hrZXJuZWwiLCBwYXJzZV9jcmFzaGtlcm5lbCk7Ci0KIHZvaWQgYXJjaF9jcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwppbmRleCA3NDUwYjY5Li4wZDg1NzdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKQEAgLTIzMSwzMyArMjMxLDYgQEAKIAkJCWltYWdlLT5zdGFydCk7CiB9CiAKLS8qIGNyYXNoa2VybmVsPXNpemVAYWRkciBzcGVjaWZpZXMgdGhlIGxvY2F0aW9uIHRvIHJlc2VydmUgZm9yCi0gKiBhIGNyYXNoIGtlcm5lbC4gIEJ5IHJlc2VydmluZyB0aGlzIG1lbW9yeSB3ZSBndWFyYW50ZWUKLSAqIHRoYXQgbGludXggbmV2ZXIgc2V0J3MgaXQgdXAgYXMgYSBETUEgdGFyZ2V0LgotICogVXNlZnVsIGZvciBob2xkaW5nIGNvZGUgdG8gZG8gc29tZXRoaW5nIGFwcHJvcHJpYXRlCi0gKiBhZnRlciBhIGtlcm5lbCBwYW5pYy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgc2V0dXBfY3Jhc2hrZXJuZWwoY2hhciAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZSwgYmFzZTsKLQljaGFyICpwOwotCWlmICghYXJnKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzaXplID0gbWVtcGFyc2UoYXJnLCAmcCk7Ci0JaWYgKGFyZyA9PSBwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKnAgPT0gJ0AnKSB7Ci0JCWJhc2UgPSBtZW1wYXJzZShwKzEsICZwKTsKLQkJLyogRklYTUU6IERvIEkgd2FudCBhIHNhbml0eSBjaGVjayB0byB2YWxpZGF0ZSB0aGUKLQkJICogbWVtb3J5IHJhbmdlPyAgWWVzIHlvdSBkbywgYnV0IGl0J3MgdG9vIGVhcmx5IGZvcgotCQkgKiBlODIwIC1BSyAqLwotCQljcmFzaGtfcmVzLnN0YXJ0ID0gYmFzZTsKLQkJY3Jhc2hrX3Jlcy5lbmQgICA9IGJhc2UgKyBzaXplIC0gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiY3Jhc2hrZXJuZWwiLCBzZXR1cF9jcmFzaGtlcm5lbCk7Ci0KIHZvaWQgYXJjaF9jcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKIHsKICNpZmRlZiBDT05GSUdfQVJDSF9ESVNDT05USUdNRU1fRU5BQkxFCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWNlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWNlXzY0LmMKaW5kZXggOGNhOGY4Ni4uMDdiYmZlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21jZV82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tY2VfNjQuYwpAQCAtMzIwLDcgKzMyMCw3IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfSU5URUwKIC8qKioKICAqIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQgLSBMb2dzIHRoZSB0aGVybWFsIHRocm90dGxpbmcgZXZlbnQgdG8gbWNlbG9nCi0gKiBAY3B1OiBUaGUgQ1BVIG9uIHdoaWNoIHRoZSBldmVudCBvY2N1cmVkLgorICogQGNwdTogVGhlIENQVSBvbiB3aGljaCB0aGUgZXZlbnQgb2NjdXJyZWQuCiAgKiBAc3RhdHVzOiBFdmVudCBzdGF0dXMgaW5mb3JtYXRpb24KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIHRoZXJtYWwgaW50ZXJydXB0IGFmdGVyIHRoZQpAQCAtNjg4LDcgKzY4OCw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLS8qIG1jZT1vZmYgZGlzYWJsZXMgbWFjaGluZSBjaGVjay4gTm90ZSB5b3UgY2FuIHJlZW5hYmxlIGl0IGxhdGVyCisvKiBtY2U9b2ZmIGRpc2FibGVzIG1hY2hpbmUgY2hlY2suIE5vdGUgeW91IGNhbiByZS1lbmFibGUgaXQgbGF0ZXIKICAgIHVzaW5nIHN5c2ZzLgogICAgbWNlPVRPTEVSQU5DRUxFVkVMIChudW1iZXIsIHNlZSBhYm92ZSkKICAgIG1jZT1ib290bG9nIExvZyBNQ0VzIGZyb20gYmVmb3JlIGJvb3RpbmcuIERpc2FibGVkIGJ5IGRlZmF1bHQgb24gQU1ELgpAQCAtNzk5LDE5ICs3OTksMzMgQEAKIHsKIAlpbnQgZXJyOwogCWludCBpOwotCWlmICghbWNlX2F2YWlsYWJsZSgmY3B1X2RhdGFbY3B1XSkpCisKKwlpZiAoIW1jZV9hdmFpbGFibGUoJmNwdV9kYXRhKGNwdSkpKQogCQlyZXR1cm4gLUVJTzsKIAorCW1lbXNldCgmcGVyX2NwdShkZXZpY2VfbWNlLCBjcHUpLmtvYmosIDAsIHNpemVvZihzdHJ1Y3Qga29iamVjdCkpOwogCXBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLmlkID0gY3B1OwogCXBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLmNscyA9ICZtY2Vfc3lzY2xhc3M7CiAKIAllcnIgPSBzeXNkZXZfcmVnaXN0ZXIoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JaWYgKCFlcnIpIHsKLQkJZm9yIChpID0gMDsgbWNlX2F0dHJpYnV0ZXNbaV07IGkrKykKLQkJCXN5c2Rldl9jcmVhdGVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksCi0JCQkJbWNlX2F0dHJpYnV0ZXNbaV0pOworCWZvciAoaSA9IDA7IG1jZV9hdHRyaWJ1dGVzW2ldOyBpKyspIHsKKwkJZXJyID0gc3lzZGV2X2NyZWF0ZV9maWxlKCZwZXJfY3B1KGRldmljZV9tY2UsY3B1KSwKKwkJCQkJIG1jZV9hdHRyaWJ1dGVzW2ldKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CiAJfQorCisJcmV0dXJuIDA7CitlcnJvcjoKKwl3aGlsZSAoaS0tKSB7CisJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksCisJCQkJICAgbWNlX2F0dHJpYnV0ZXNbaV0pOworCX0KKwlzeXNkZXZfdW5yZWdpc3RlcigmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSkpOworCiAJcmV0dXJuIGVycjsKIH0KIApAQCAtODIzLDcgKzgzNyw2IEBACiAJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksCiAJCQltY2VfYXR0cmlidXRlc1tpXSk7CiAJc3lzZGV2X3VucmVnaXN0ZXIoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpKTsKLQltZW1zZXQoJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KS5rb2JqLCAwLCBzaXplb2Yoc3RydWN0IGtvYmplY3QpKTsKIH0KIAogLyogR2V0IG5vdGlmaWVkIHdoZW4gYSBjcHUgY29tZXMgb24vb2ZmLiBCZSBob3RwbHVnIGZyaWVuZGx5LiAqLwpAQCAtODMxLDE4ICs4NDQsMjEgQEAKIG1jZV9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCWludCBlcnIgPSAwOwogCiAJc3dpdGNoIChhY3Rpb24pIHsKLQljYXNlIENQVV9PTkxJTkU6Ci0JY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKLQkJbWNlX2NyZWF0ZV9kZXZpY2UoY3B1KTsKKwljYXNlIENQVV9VUF9QUkVQQVJFOgorCWNhc2UgQ1BVX1VQX1BSRVBBUkVfRlJPWkVOOgorCQllcnIgPSBtY2VfY3JlYXRlX2RldmljZShjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9VUF9DQU5DRUxFRDoKKwljYXNlIENQVV9VUF9DQU5DRUxFRF9GUk9aRU46CiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKIAkJbWNlX3JlbW92ZV9kZXZpY2UoY3B1KTsKIAkJYnJlYWs7CiAJfQotCXJldHVybiBOT1RJRllfT0s7CisJcmV0dXJuIGVyciA/IE5PVElGWV9CQUQgOiBOT1RJRllfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWNlX2NwdV9ub3RpZmllciA9IHsKQEAgLTg1Nyw5ICs4NzMsMTMgQEAKIAlpZiAoIW1jZV9hdmFpbGFibGUoJmJvb3RfY3B1X2RhdGEpKQogCQlyZXR1cm4gLUVJTzsKIAllcnIgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm1jZV9zeXNjbGFzcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQltY2VfY3JlYXRlX2RldmljZShpKTsKKwkJZXJyID0gbWNlX2NyZWF0ZV9kZXZpY2UoaSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOwogCX0KIAogCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmbWNlX2NwdV9ub3RpZmllcik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWNlX2FtZF82NC5jIGIvYXJjaC94ODYva2VybmVsL21jZV9hbWRfNjQuYwppbmRleCAwZDJhZmQ5Li43NTJmYjE2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tY2VfYW1kXzY0LmMKQEAgLTQ3MiwxMSArNDcyLDExIEBACiAJc3ByaW50ZihuYW1lLCAidGhyZXNob2xkX2JhbmslaSIsIGJhbmspOwogCiAjaWZkZWYgQ09ORklHX1NNUAotCWlmIChjcHVfZGF0YVtjcHVdLmNwdV9jb3JlX2lkICYmIHNoYXJlZF9iYW5rW2JhbmtdKSB7CS8qIHN5bWxpbmsgKi8KKwlpZiAoY3B1X2RhdGEoY3B1KS5jcHVfY29yZV9pZCAmJiBzaGFyZWRfYmFua1tiYW5rXSkgewkvKiBzeW1saW5rICovCiAJCWkgPSBmaXJzdF9jcHUocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpOwogCiAJCS8qIGZpcnN0IGNvcmUgbm90IHVwIHlldCAqLwotCQlpZiAoY3B1X2RhdGFbaV0uY3B1X2NvcmVfaWQpCisJCWlmIChjcHVfZGF0YShpKS5jcHVfY29yZV9pZCkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIGFscmVhZHkgbGlua2VkICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbWljcm9jb2RlLmMKaW5kZXggMDljZjc4MS4uMDljMzE1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21pY3JvY29kZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9taWNyb2NvZGUuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAKIHN0YXRpYyB2b2lkIGNvbGxlY3RfY3B1X2luZm8oaW50IGNwdV9udW0pCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEgKyBjcHVfbnVtOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHVfbnVtKTsKIAlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1X251bTsKIAl1bnNpZ25lZCBpbnQgdmFsWzJdOwogCkBAIC01MjIsNyArNTIyLDcgQEAKIHN0YXRpYyBpbnQgY3B1X3JlcXVlc3RfbWljcm9jb2RlKGludCBjcHUpCiB7CiAJY2hhciBuYW1lWzMwXTsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGNwdTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOwogCXZvaWQgKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC01NzAsNyArNTcwLDcgQEAKIAogc3RhdGljIGludCBhcHBseV9taWNyb2NvZGVfY2hlY2tfY3B1KGludCBjcHUpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEgKyBjcHU7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKIAljcHVtYXNrX3Qgb2xkOwogCXVuc2lnbmVkIGludCB2YWxbMl07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZV8zMi5jIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2VfMzIuYwppbmRleCAxM2FiYjRlLi43YTA1YTdmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlXzMyLmMKQEAgLTEwMDEsNyArMTAwMSw3IEBACiAKIAkvKiAKIAkgKiBVc2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUXMgMC0xNS4gIFVubGVzcwotCSAqIG92ZXJyaWRlbiBieSAoTUFEVCkgaW50ZXJydXB0IHNvdXJjZSBvdmVycmlkZSBlbnRyaWVzLgorCSAqIG92ZXJyaWRkZW4gYnkgKE1BRFQpIGludGVycnVwdCBzb3VyY2Ugb3ZlcnJpZGUgZW50cmllcy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQlpbnQgaWR4OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2VfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlXzY0LmMKaW5kZXggOGJmMGNhMC4uZWY0YWFiMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2VfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZV82NC5jCkBAIC01Nyw2ICs1Nyw4IEBACiAKIC8qIFByb2Nlc3NvciB0aGF0IGlzIGRvaW5nIHRoZSBib290IHVwICovCiB1bnNpZ25lZCBpbnQgYm9vdF9jcHVfaWQgPSAtMVU7CitFWFBPUlRfU1lNQk9MKGJvb3RfY3B1X2lkKTsKKwogLyogSW50ZXJuYWwgcHJvY2Vzc29yIGNvdW50ICovCiB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnMgX19jcHVpbml0ZGF0YSA9IDA7CiAKQEAgLTg2LDcgKzg4LDcgQEAKIAlyZXR1cm4gc3VtICYgMHhGRjsKIH0KIAotc3RhdGljIHZvaWQgX19jcHVpbml0IE1QX3Byb2Nlc3Nvcl9pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19wcm9jZXNzb3IgKm0pCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgTVBfcHJvY2Vzc29yX2luZm8oc3RydWN0IG1wY19jb25maWdfcHJvY2Vzc29yICptKQogewogCWludCBjcHU7CiAJY3B1bWFza190IHRtcF9tYXA7CkBAIC0xMjMsNyArMTI1LDE4IEBACiAJCWNwdSA9IDA7CiAgCX0KIAliaW9zX2NwdV9hcGljaWRbY3B1XSA9IG0tPm1wY19hcGljaWQ7Ci0JeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IG0tPm1wY19hcGljaWQ7CisJLyoKKwkgKiBXZSBnZXQgY2FsbGVkIGVhcmx5IGluIHRoZSB0aGUgc3RhcnRfa2VybmVsIGluaXRpYWxpemF0aW9uCisJICogcHJvY2VzcyB3aGVuIHRoZSBwZXJfY3B1IGRhdGEgYXJlYSBpcyBub3QgeWV0IHNldHVwLCBzbyB3ZQorCSAqIHVzZSBhIHN0YXRpYyBhcnJheSB0aGF0IGlzIHJlbW92ZWQgYWZ0ZXIgdGhlIHBlcl9jcHUgZGF0YQorCSAqIGFyZWEgaXMgY3JlYXRlZC4KKwkgKi8KKwlpZiAoeDg2X2NwdV90b19hcGljaWRfcHRyKSB7CisJCXU4ICp4ODZfY3B1X3RvX2FwaWNpZCA9ICh1OCAqKXg4Nl9jcHVfdG9fYXBpY2lkX3B0cjsKKwkJeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IG0tPm1wY19hcGljaWQ7CisJfSBlbHNlIHsKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IG0tPm1wY19hcGljaWQ7CisJfQogCiAJY3B1X3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApOwogCWNwdV9zZXQoY3B1LCBjcHVfcHJlc2VudF9tYXApOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21zci5jIGIvYXJjaC94ODYva2VybmVsL21zci5jCmluZGV4IGRmODVjOWMuLmVlNmViYTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tc3IuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXNyLmMKQEAgLTExMiw3ICsxMTIsNyBAQAogc3RhdGljIGludCBtc3Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICYoY3B1X2RhdGEpW2NwdV07CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAKIAlpZiAoY3B1ID49IE5SX0NQVVMgfHwgIWNwdV9vbmxpbmUoY3B1KSkKIAkJcmV0dXJuIC1FTlhJTzsJLyogTm8gc3VjaCBDUFUgKi8KQEAgLTEzMywzNyArMTMzLDQyIEBACiAJLm9wZW4gPSBtc3Jfb3BlbiwKIH07CiAKLXN0YXRpYyBpbnQgX19jcHVpbml0IG1zcl9kZXZpY2VfY3JlYXRlKGludCBpKQorc3RhdGljIGludCBfX2NwdWluaXQgbXNyX2RldmljZV9jcmVhdGUoaW50IGNwdSkKIHsKLQlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQlkZXYgPSBkZXZpY2VfY3JlYXRlKG1zcl9jbGFzcywgTlVMTCwgTUtERVYoTVNSX01BSk9SLCBpKSwgIm1zciVkIixpKTsKLQlpZiAoSVNfRVJSKGRldikpCi0JCWVyciA9IFBUUl9FUlIoZGV2KTsKLQlyZXR1cm4gZXJyOworCWRldiA9IGRldmljZV9jcmVhdGUobXNyX2NsYXNzLCBOVUxMLCBNS0RFVihNU1JfTUFKT1IsIGNwdSksCisJCQkgICAgIm1zciVkIiwgY3B1KTsKKwlyZXR1cm4gSVNfRVJSKGRldikgPyBQVFJfRVJSKGRldikgOiAwOworfQorCitzdGF0aWMgdm9pZCBtc3JfZGV2aWNlX2Rlc3Ryb3koaW50IGNwdSkKK3sKKwlkZXZpY2VfZGVzdHJveShtc3JfY2xhc3MsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSk7CiB9CiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IG1zcl9jbGFzc19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJaW50IGVyciA9IDA7CiAKIAlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgQ1BVX09OTElORToKLQljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQltc3JfZGV2aWNlX2NyZWF0ZShjcHUpOworCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46CisJCWVyciA9IG1zcl9kZXZpY2VfY3JlYXRlKGNwdSk7CiAJCWJyZWFrOworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKIAljYXNlIENQVV9ERUFEOgogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgotCQlkZXZpY2VfZGVzdHJveShtc3JfY2xhc3MsIE1LREVWKE1TUl9NQUpPUiwgY3B1KSk7CisJCW1zcl9kZXZpY2VfZGVzdHJveShjcHUpOwogCQlicmVhazsKIAl9Ci0JcmV0dXJuIE5PVElGWV9PSzsKKwlyZXR1cm4gZXJyID8gTk9USUZZX0JBRCA6IE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIG1zcl9jbGFzc19jcHVfbm90aWZpZXIgPQoteworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIG1zcl9jbGFzc19jcHVfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBtc3JfY2xhc3NfY3B1X2NhbGxiYWNrLAogfTsKIApAQCAtMTk2LDcgKzIwMSw3IEBACiBvdXRfY2xhc3M6CiAJaSA9IDA7CiAJZm9yX2VhY2hfb25saW5lX2NwdShpKQotCQlkZXZpY2VfZGVzdHJveShtc3JfY2xhc3MsIE1LREVWKE1TUl9NQUpPUiwgaSkpOworCQltc3JfZGV2aWNlX2Rlc3Ryb3koaSk7CiAJY2xhc3NfZGVzdHJveShtc3JfY2xhc3MpOwogb3V0X2NocmRldjoKIAl1bnJlZ2lzdGVyX2NocmRldihNU1JfTUFKT1IsICJjcHUvbXNyIik7CkBAIC0yMDgsNyArMjEzLDcgQEAKIHsKIAlpbnQgY3B1ID0gMDsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJZGV2aWNlX2Rlc3Ryb3kobXNyX2NsYXNzLCBNS0RFVihNU1JfTUFKT1IsIGNwdSkpOworCQltc3JfZGV2aWNlX2Rlc3Ryb3koY3B1KTsKIAljbGFzc19kZXN0cm95KG1zcl9jbGFzcyk7CiAJdW5yZWdpc3Rlcl9jaHJkZXYoTVNSX01BSk9SLCAiY3B1L21zciIpOwogCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtc3JfY2xhc3NfY3B1X25vdGlmaWVyKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYV82NC5jCmluZGV4IGIyYjQyYmQuLmFmYWY5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWFfNjQuYwpAQCAtMTEsNyArMTEsNyBAQAogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9jYWxnYXJ5Lmg+CiAKLWludCBpb21tdV9tZXJnZSBfX3JlYWRfbW9zdGx5ID0gMDsKK2ludCBpb21tdV9tZXJnZSBfX3JlYWRfbW9zdGx5ID0gMTsKIEVYUE9SVF9TWU1CT0woaW9tbXVfbWVyZ2UpOwogCiBkbWFfYWRkcl90IGJhZF9kbWFfYWRkcmVzcyBfX3JlYWRfbW9zdGx5OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzXzMyLmMKaW5kZXggMDk3YWVhZi4uN2I4OTk1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3NfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzc18zMi5jCkBAIC0yOTUsMzQgKzI5NSw1MiBAQAogfQogZWFybHlfcGFyYW0oImlkbGUiLCBpZGxlX3NldHVwKTsKIAotdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKQordm9pZCBfX3Nob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgYWxsKQogewogCXVuc2lnbmVkIGxvbmcgY3IwID0gMEwsIGNyMiA9IDBMLCBjcjMgPSAwTCwgY3I0ID0gMEw7CiAJdW5zaWduZWQgbG9uZyBkMCwgZDEsIGQyLCBkMywgZDYsIGQ3OworCXVuc2lnbmVkIGxvbmcgZXNwOworCXVuc2lnbmVkIHNob3J0IHNzLCBnczsKKworCWlmICh1c2VyX21vZGVfdm0ocmVncykpIHsKKwkJZXNwID0gcmVncy0+ZXNwOworCQlzcyA9IHJlZ3MtPnhzcyAmIDB4ZmZmZjsKKwkJc2F2ZXNlZ21lbnQoZ3MsIGdzKTsKKwl9IGVsc2UgeworCQllc3AgPSAodW5zaWduZWQgbG9uZykgKCZyZWdzLT5lc3ApOworCQlzYXZlc2VnbWVudChzcywgc3MpOworCQlzYXZlc2VnbWVudChncywgZ3MpOworCX0KIAogCXByaW50aygiXG4iKTsKLQlwcmludGsoIlBpZDogJWQsIGNvbW06ICUyMHNcbiIsIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSk7Ci0JcHJpbnRrKCJFSVA6ICUwNHg6WzwlMDhseD5dIENQVTogJWRcbiIsMHhmZmZmICYgcmVncy0+eGNzLHJlZ3MtPmVpcCwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlwcmludGsoIlBpZDogJWQsIGNvbW06ICVzICVzICglcyAlLipzKVxuIiwKKwkJCXRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tLAorCQkJcHJpbnRfdGFpbnRlZCgpLCBpbml0X3V0c25hbWUoKS0+cmVsZWFzZSwKKwkJCShpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKKwkJCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKKworCXByaW50aygiRUlQOiAlMDR4Ols8JTA4bHg+XSBFRkxBR1M6ICUwOGx4IENQVTogJWRcbiIsCisJCQkweGZmZmYgJiByZWdzLT54Y3MsIHJlZ3MtPmVpcCwgcmVncy0+ZWZsYWdzLAorCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlwcmludF9zeW1ib2woIkVJUCBpcyBhdCAlc1xuIiwgcmVncy0+ZWlwKTsKIAotCWlmICh1c2VyX21vZGVfdm0ocmVncykpCi0JCXByaW50aygiIEVTUDogJTA0eDolMDhseCIsMHhmZmZmICYgcmVncy0+eHNzLHJlZ3MtPmVzcCk7Ci0JcHJpbnRrKCIgRUZMQUdTOiAlMDhseCAgICAlcyAgKCVzICUuKnMpXG4iLAotCSAgICAgICByZWdzLT5lZmxhZ3MsIHByaW50X3RhaW50ZWQoKSwgaW5pdF91dHNuYW1lKCktPnJlbGVhc2UsCi0JICAgICAgIChpbnQpc3RyY3Nwbihpbml0X3V0c25hbWUoKS0+dmVyc2lvbiwgIiAiKSwKLQkgICAgICAgaW5pdF91dHNuYW1lKCktPnZlcnNpb24pOwogCXByaW50aygiRUFYOiAlMDhseCBFQlg6ICUwOGx4IEVDWDogJTA4bHggRURYOiAlMDhseFxuIiwKLQkJcmVncy0+ZWF4LHJlZ3MtPmVieCxyZWdzLT5lY3gscmVncy0+ZWR4KTsKLQlwcmludGsoIkVTSTogJTA4bHggRURJOiAlMDhseCBFQlA6ICUwOGx4IiwKLQkJcmVncy0+ZXNpLCByZWdzLT5lZGksIHJlZ3MtPmVicCk7Ci0JcHJpbnRrKCIgRFM6ICUwNHggRVM6ICUwNHggRlM6ICUwNHhcbiIsCi0JICAgICAgIDB4ZmZmZiAmIHJlZ3MtPnhkcywweGZmZmYgJiByZWdzLT54ZXMsIDB4ZmZmZiAmIHJlZ3MtPnhmcyk7CisJCXJlZ3MtPmVheCwgcmVncy0+ZWJ4LCByZWdzLT5lY3gsIHJlZ3MtPmVkeCk7CisJcHJpbnRrKCJFU0k6ICUwOGx4IEVESTogJTA4bHggRUJQOiAlMDhseCBFU1A6ICUwOGx4XG4iLAorCQlyZWdzLT5lc2ksIHJlZ3MtPmVkaSwgcmVncy0+ZWJwLCBlc3ApOworCXByaW50aygiIERTOiAlMDR4IEVTOiAlMDR4IEZTOiAlMDR4IEdTOiAlMDR4IFNTOiAlMDR4XG4iLAorCSAgICAgICByZWdzLT54ZHMgJiAweGZmZmYsIHJlZ3MtPnhlcyAmIDB4ZmZmZiwKKwkgICAgICAgcmVncy0+eGZzICYgMHhmZmZmLCBncywgc3MpOworCisJaWYgKCFhbGwpCisJCXJldHVybjsKIAogCWNyMCA9IHJlYWRfY3IwKCk7CiAJY3IyID0gcmVhZF9jcjIoKTsKIAljcjMgPSByZWFkX2NyMygpOwogCWNyNCA9IHJlYWRfY3I0X3NhZmUoKTsKLQlwcmludGsoIkNSMDogJTA4bHggQ1IyOiAlMDhseCBDUjM6ICUwOGx4IENSNDogJTA4bHhcbiIsIGNyMCwgY3IyLCBjcjMsIGNyNCk7CisJcHJpbnRrKCJDUjA6ICUwOGx4IENSMjogJTA4bHggQ1IzOiAlMDhseCBDUjQ6ICUwOGx4XG4iLAorCQkJY3IwLCBjcjIsIGNyMywgY3I0KTsKIAogCWdldF9kZWJ1Z3JlZyhkMCwgMCk7CiAJZ2V0X2RlYnVncmVnKGQxLCAxKTsKQEAgLTMzMCwxMCArMzQ4LDE2IEBACiAJZ2V0X2RlYnVncmVnKGQzLCAzKTsKIAlwcmludGsoIkRSMDogJTA4bHggRFIxOiAlMDhseCBEUjI6ICUwOGx4IERSMzogJTA4bHhcbiIsCiAJCQlkMCwgZDEsIGQyLCBkMyk7CisKIAlnZXRfZGVidWdyZWcoZDYsIDYpOwogCWdldF9kZWJ1Z3JlZyhkNywgNyk7Ci0JcHJpbnRrKCJEUjY6ICUwOGx4IERSNzogJTA4bHhcbiIsIGQ2LCBkNyk7CisJcHJpbnRrKCJEUjY6ICUwOGx4IERSNzogJTA4bHhcbiIsCisJCQlkNiwgZDcpOworfQogCit2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlfX3Nob3dfcmVnaXN0ZXJzKHJlZ3MsIDEpOwogCXNob3dfdHJhY2UoTlVMTCwgcmVncywgJnJlZ3MtPmVzcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2VfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2VfMzIuYwppbmRleCA5OTEwMmVjLi5mZjU0MzFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZV8zMi5jCkBAIC02MzIsNyArNjMyLDcgQEAKIAkvKiBVc2VyLW1vZGUgZWlwPyAqLwogCWluZm8uc2lfYWRkciA9IHVzZXJfbW9kZV92bShyZWdzKSA/ICh2b2lkIF9fdXNlciAqKSByZWdzLT5laXAgOiBOVUxMOwogCi0JLyogU2VuZCB1cyB0aGUgZmFrZXkgU0lHVFJBUCAqLworCS8qIFNlbmQgdXMgdGhlIGZha2UgU0lHVFJBUCAqLwogCWZvcmNlX3NpZ19pbmZvKFNJR1RSQVAsICZpbmZvLCB0c2spOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKaW5kZXggZDc2OWUyMC4uYTRjZTE5MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYwpAQCAtNDUsOSArNDUsMTIgQEAKIAlpZiAoIShjb25maWcgJiAweDIpKQogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweGY0LCBjb25maWcpOwogfQotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9FNzMyMF9NQ0gsCXF1aXJrX2ludGVsX2lycWJhbGFuY2UpOwotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9FNzUyNV9NQ0gsCXF1aXJrX2ludGVsX2lycWJhbGFuY2UpOwotREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF9FNzUyMF9NQ0gsCXF1aXJrX2ludGVsX2lycWJhbGFuY2UpOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9FNzMyMF9NQ0gsCisJCQlxdWlya19pbnRlbF9pcnFiYWxhbmNlKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MjVfTUNILAorCQkJcXVpcmtfaW50ZWxfaXJxYmFsYW5jZSk7CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTIwX01DSCwKKwkJCXF1aXJrX2ludGVsX2lycWJhbGFuY2UpOwogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19IUEVUX1RJTUVSKQpAQCAtNTYsNyArNTksOCBAQAogc3RhdGljIGVudW0gewogCU5PTkVfRk9SQ0VfSFBFVF9SRVNVTUUsCiAJT0xEX0lDSF9GT1JDRV9IUEVUX1JFU1VNRSwKLQlJQ0hfRk9SQ0VfSFBFVF9SRVNVTUUKKwlJQ0hfRk9SQ0VfSFBFVF9SRVNVTUUsCisJVlQ4MjM3X0ZPUkNFX0hQRVRfUkVTVU1FCiB9IGZvcmNlX2hwZXRfcmVzdW1lX3R5cGU7CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnJjYmFfYmFzZTsKQEAgLTE0NiwxNyArMTUwLDE3IEBACiB9CiAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOworCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKKwkJCSBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18wLAotICAgICAgICAgICAgICAgICAgICAgICAgIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CisJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOworCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMxLAotICAgICAgICAgICAgICAgICAgICAgICAgIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CisJCQkgaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBpY2hfZm9yY2VfZW5hYmxlX2hwZXQpOworCQkJIGljaF9mb3JjZV9lbmFibGVfaHBldCk7CiAKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICpjYWNoZWRfZGV2OwpAQCAtMjMyLDEwICsyMzYsOTEgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiRmFpbGVkIHRvIGZvcmNlIGVuYWJsZSBIUEVUXG4iKTsKIH0KIAorLyoKKyAqIFVuZG9jdW1lbnRlZCBjaGlwc2V0IGZlYXR1cmVzLiBNYWtlIHN1cmUgdGhhdCB0aGUgdXNlciBlbmZvcmNlZAorICogdGhpcy4KKyAqLworc3RhdGljIHZvaWQgb2xkX2ljaF9mb3JjZV9lbmFibGVfaHBldF91c2VyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKGhwZXRfZm9yY2VfdXNlcikKKwkJb2xkX2ljaF9mb3JjZV9lbmFibGVfaHBldChkZXYpOworfQorCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzAsCisJCQkgb2xkX2ljaF9mb3JjZV9lbmFibGVfaHBldF91c2VyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIsCisJCQkgb2xkX2ljaF9mb3JjZV9lbmFibGVfaHBldF91c2VyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMCwKKwkJCSBvbGRfaWNoX2ZvcmNlX2VuYWJsZV9ocGV0X3VzZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMiwKKwkJCSBvbGRfaWNoX2ZvcmNlX2VuYWJsZV9ocGV0X3VzZXIpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9pY2hfZm9yY2VfZW5hYmxlX2hwZXQpOworCQkJIG9sZF9pY2hfZm9yY2VfZW5hYmxlX2hwZXQpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8xMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKKwkJCSBvbGRfaWNoX2ZvcmNlX2VuYWJsZV9ocGV0KTsKKworCitzdGF0aWMgdm9pZCB2dDgyMzdfZm9yY2VfaHBldF9yZXN1bWUodm9pZCkKK3sKKwl1MzIgdmFsOworCisJaWYgKCFmb3JjZV9ocGV0X2FkZHJlc3MgfHwgIWNhY2hlZF9kZXYpCisJCXJldHVybjsKKworCXZhbCA9IDB4ZmVkMDAwMDAgfCAweDgwOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoY2FjaGVkX2RldiwgMHg2OCwgdmFsKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChjYWNoZWRfZGV2LCAweDY4LCAmdmFsKTsKKwlpZiAodmFsICYgMHg4MCkKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkZvcmNlIGVuYWJsZWQgSFBFVCBhdCByZXN1bWVcbiIpOworCWVsc2UKKwkJQlVHKCk7Cit9CisKK3N0YXRpYyB2b2lkIHZ0ODIzN19mb3JjZV9lbmFibGVfaHBldChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUzMiB1bmluaXRpYWxpemVkX3Zhcih2YWwpOworCisJaWYgKCFocGV0X2ZvcmNlX3VzZXIgfHwgaHBldF9hZGRyZXNzIHx8IGZvcmNlX2hwZXRfYWRkcmVzcykKKwkJcmV0dXJuOworCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg2OCwgJnZhbCk7CisJLyoKKwkgKiBCaXQgNyBpcyBIUEVUIGVuYWJsZSBiaXQuCisJICogQml0IDMxOjEwIGlzIEhQRVQgYmFzZSBhZGRyZXNzIChjb250cmFyeSB0byB3aGF0IGRhdGFzaGVldCBjbGFpbXMpCisJICovCisJaWYgKHZhbCAmIDB4ODApIHsKKwkJZm9yY2VfaHBldF9hZGRyZXNzID0gKHZhbCAmIH4weDNmZik7CisJCXByaW50ayhLRVJOX0RFQlVHICJIUEVUIGF0IGJhc2UgYWRkcmVzcyAweCVseFxuIiwKKwkJCSAgICAgICBmb3JjZV9ocGV0X2FkZHJlc3MpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBIUEVUIGlzIGRpc2FibGVkLiBUcnlpbmcgZW5hYmxpbmcgYXQgRkVEMDAwMDAgYW5kIGNoZWNrCisJICogd2hldGhlciBpdCBzdGlja3MKKwkgKi8KKwl2YWwgPSAweGZlZDAwMDAwIHwgMHg4MDsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgMHg2OCwgdmFsKTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NjgsICZ2YWwpOworCWlmICh2YWwgJiAweDgwKSB7CisJCWZvcmNlX2hwZXRfYWRkcmVzcyA9ICh2YWwgJiB+MHgzZmYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiRm9yY2UgZW5hYmxlZCBIUEVUIGF0IGJhc2UgYWRkcmVzcyAweCVseFxuIiwKKwkJCSAgICAgICBmb3JjZV9ocGV0X2FkZHJlc3MpOworCQljYWNoZWRfZGV2ID0gZGV2OworCQlmb3JjZV9ocGV0X3Jlc3VtZV90eXBlID0gVlQ4MjM3X0ZPUkNFX0hQRVRfUkVTVU1FOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIkZhaWxlZCB0byBmb3JjZSBlbmFibGUgSFBFVFxuIik7Cit9CisKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNSwKKwkJCSB2dDgyMzdfZm9yY2VfZW5hYmxlX2hwZXQpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3LAorCQkJIHZ0ODIzN19mb3JjZV9lbmFibGVfaHBldCk7CisKIAogdm9pZCBmb3JjZV9ocGV0X3Jlc3VtZSh2b2lkKQogewpAQCAtMjQ2LDYgKzMzMSw5IEBACiAJICAgIGNhc2UgT0xEX0lDSF9GT1JDRV9IUEVUX1JFU1VNRToKIAkJcmV0dXJuIG9sZF9pY2hfZm9yY2VfaHBldF9yZXN1bWUoKTsKIAorCSAgICBjYXNlIFZUODIzN19GT1JDRV9IUEVUX1JFU1VNRToKKwkJcmV0dXJuIHZ0ODIzN19mb3JjZV9ocGV0X3Jlc3VtZSgpOworCiAJICAgIGRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfNjQuYwppbmRleCAzNjhkYjJiLi43NzZlYjA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF82NC5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTEzNiw3ICsxMzcsNyBAQAogCQl9CiAKIAkJY2FzZSBCT09UX1RSSVBMRTogCi0JCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGlkdCAoJTApIjogOiJyIiAoJm5vX2lkdCkpOworCQkJbG9hZF9pZHQoKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKSZub19pZHQpOwogCQkJX19hc21fXyBfX3ZvbGF0aWxlX18oImludDMiKTsKIAogCQkJcmVib290X3R5cGUgPSBCT09UX0tCRDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfZml4dXBzXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVib290X2ZpeHVwc18zMi5jCmluZGV4IDhiMzBiMjYuLjFhMDdiYmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfZml4dXBzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF9maXh1cHNfMzIuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGFzbS9yZWJvb3RfZml4dXBzLmg+CiAjaW5jbHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9nZW9kZS5oPgogCiBzdGF0aWMgdm9pZCBjczU1MzBhX3dhcm1fcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTI0LDExICsyNSw4IEBACiAKIHN0YXRpYyB2b2lkIGNzNTUzNl93YXJtX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JLyoKLQkgKiA2LjYuMi4xMiBTb2Z0IFJlc2V0IChESVZJTF9TT0ZUX1JFU0VUKQotCSAqIHdyaXRpbmcgMSB0byB0aGUgTFNCIG9mIHRoaXMgTVNSIGNhdXNlcyBhIGhhcmQgcmVzZXQuCi0JICovCi0Jd3Jtc3JsKDB4NTE0MDAwMTcsIDFVTEwpOworCS8qIHdyaXRpbmcgMSB0byB0aGUgTFNCIG9mIHRoaXMgTVNSIGNhdXNlcyBhIGhhcmQgcmVzZXQgKi8KKwl3cm1zcmwoTVNSX0RJVklMX1NPRlRfUkVTRVQsIDFVTEwpOwogCXVkZWxheSg1MCk7IC8qIHNob3VsZG4ndCBnZXQgaGVyZSBidXQgYmUgc2FmZSBhbmQgc3BpbiBhIHdoaWxlICovCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cDY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXA2NC5jCmluZGV4IGJhOTE4ODIuLjM1NThhYzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cDY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwNjQuYwpAQCAtMTg1LDYgKzE4NSwxMiBAQAogdW5zaWduZWQgbG9uZyBrZXJuZWxfZWZsYWdzOwogCiAvKgorICogQ29waWVzIG9mIHRoZSBvcmlnaW5hbCBpc3QgdmFsdWVzIGZyb20gdGhlIHRzcyBhcmUgb25seSBhY2Nlc3NlZCBkdXJpbmcKKyAqIGRlYnVnZ2luZywgbm8gc3BlY2lhbCBhbGlnbm1lbnQgcmVxdWlyZWQuCisgKi8KK0RFRklORV9QRVJfQ1BVKHN0cnVjdCBvcmlnX2lzdCwgb3JpZ19pc3QpOworCisvKgogICogY3B1X2luaXQoKSBpbml0aWFsaXplcyBzdGF0ZSB0aGF0IGlzIHBlci1DUFUuIFNvbWUgZGF0YSBpcyBhbHJlYWR5CiAgKiBpbml0aWFsaXplZCAobmF0dXJhbGx5KSBpbiB0aGUgYm9vdHN0cmFwIHByb2Nlc3MsIHN1Y2ggYXMgdGhlIEdEVAogICogYW5kIElEVC4gV2UgcmVsb2FkIHRoZW0gbmV2ZXJ0aGVsZXNzLCB0aGlzIGZ1bmN0aW9uIGFjdHMgYXMgYQpAQCAtMjI0LDggKzIzMCw4IEBACiAgCQltZW1jcHkoY3B1X2dkdChjcHUpLCBjcHVfZ2R0X3RhYmxlLCBHRFRfU0laRSk7CiAKIAljcHVfZ2R0X2Rlc2NyW2NwdV0uc2l6ZSA9IEdEVF9TSVpFOwotCWFzbSB2b2xhdGlsZSgibGdkdCAlMCIgOjogIm0iIChjcHVfZ2R0X2Rlc2NyW2NwdV0pKTsKLQlhc20gdm9sYXRpbGUoImxpZHQgJTAiIDo6ICJtIiAoaWR0X2Rlc2NyKSk7CisJbG9hZF9nZHQoKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKSZjcHVfZ2R0X2Rlc2NyW2NwdV0pOworCWxvYWRfaWR0KChjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKikmaWR0X2Rlc2NyKTsKIAogCW1lbXNldChtZS0+dGhyZWFkLnRsc19hcnJheSwgMCwgR0RUX0VOVFJZX1RMU19FTlRSSUVTICogOCk7CiAJc3lzY2FsbF9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF8zMi5jCmluZGV4IGI4N2E2ZmQuLmJhMmUxNjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF8zMi5jCkBAIC0zNzgsNiArMzc4LDQ5IEBACiBleHRlcm4gdm9pZCB6b25lX3NpemVzX2luaXQodm9pZCk7CiAjZW5kaWYgLyogIUNPTkZJR19ORUVEX01VTFRJUExFX05PREVTICovCiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGdldF90b3RhbF9tZW0odm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgdG90YWw7CisKKwl0b3RhbCA9IG1heF9sb3dfcGZuIC0gbWluX2xvd19wZm47CisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwl0b3RhbCArPSBoaWdoZW5kX3BmbiAtIGhpZ2hzdGFydF9wZm47CisjZW5kaWYKKworCXJldHVybiB0b3RhbCA8PCBQQUdFX1NISUZUOworfQorCisjaWZkZWYgQ09ORklHX0tFWEVDCitzdGF0aWMgdm9pZCBfX2luaXQgcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9tZW07CisJdW5zaWduZWQgbG9uZyBsb25nIGNyYXNoX3NpemUsIGNyYXNoX2Jhc2U7CisJaW50IHJldDsKKworCXRvdGFsX21lbSA9IGdldF90b3RhbF9tZW0oKTsKKworCXJldCA9IHBhcnNlX2NyYXNoa2VybmVsKGJvb3RfY29tbWFuZF9saW5lLCB0b3RhbF9tZW0sCisJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOworCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplID4gMCkgeworCQlpZiAoY3Jhc2hfYmFzZSA+IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIlJlc2VydmluZyAlbGRNQiBvZiBtZW1vcnkgYXQgJWxkTUIgIgorCQkJCQkiZm9yIGNyYXNoa2VybmVsIChTeXN0ZW0gUkFNOiAlbGRNQilcbiIsCisJCQkJCSh1bnNpZ25lZCBsb25nKShjcmFzaF9zaXplID4+IDIwKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKGNyYXNoX2Jhc2UgPj4gMjApLAorCQkJCQkodW5zaWduZWQgbG9uZykodG90YWxfbWVtID4+IDIwKSk7CisJCQljcmFzaGtfcmVzLnN0YXJ0ID0gY3Jhc2hfYmFzZTsKKwkJCWNyYXNoa19yZXMuZW5kICAgPSBjcmFzaF9iYXNlICsgY3Jhc2hfc2l6ZSAtIDE7CisJCQlyZXNlcnZlX2Jvb3RtZW0oY3Jhc2hfYmFzZSwgY3Jhc2hfc2l6ZSk7CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3Jhc2hrZXJuZWwgcmVzZXJ2YXRpb24gZmFpbGVkIC0gIgorCQkJCQkieW91IGhhdmUgdG8gc3BlY2lmeSBhIGJhc2UgYWRkcmVzc1xuIik7CisJfQorfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKQore30KKyNlbmRpZgorCiB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtX2FsbG9jYXRvcih2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOwpAQCAtNDUzLDExICs0OTYsNyBAQAogCQl9CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0tFWEVDCi0JaWYgKGNyYXNoa19yZXMuc3RhcnQgIT0gY3Jhc2hrX3Jlcy5lbmQpCi0JCXJlc2VydmVfYm9vdG1lbShjcmFzaGtfcmVzLnN0YXJ0LAotCQkJY3Jhc2hrX3Jlcy5lbmQgLSBjcmFzaGtfcmVzLnN0YXJ0ICsgMSk7Ci0jZW5kaWYKKwlyZXNlcnZlX2NyYXNoa2VybmVsKCk7CiB9CiAKIC8qCkBAIC01ODUsNyArNjI0LDcgQEAKIAkvKgogCSAqIE5PVEU6IGJlZm9yZSB0aGlzIHBvaW50IF9ub2JvZHlfIGlzIGFsbG93ZWQgdG8gYWxsb2NhdGUKIAkgKiBhbnkgbWVtb3J5IHVzaW5nIHRoZSBib290bWVtIGFsbG9jYXRvci4gIEFsdGhvdWdoIHRoZQotCSAqIGFsbG9jdG9yIGlzIG5vdyBpbml0aWFsaXNlZCBvbmx5IHRoZSBmaXJzdCA4TWIgb2YgdGhlIGtlcm5lbAorCSAqIGFsbG9jYXRvciBpcyBub3cgaW5pdGlhbGlzZWQgb25seSB0aGUgZmlyc3QgOE1iIG9mIHRoZSBrZXJuZWwKIAkgKiB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgaGFzIGJlZW4gbWFwcGVkLiAgQWxsIGFsbG9jYXRpb25zIGJlZm9yZQogCSAqIHBhZ2luZ19pbml0KCkgaGFzIGNvbXBsZXRlZCBtdXN0IHVzZSB0aGUgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoKQogCSAqIHZhcmlhbnQgKHdoaWNoIGFsbG9jYXRlcyBETUEnYWJsZSBtZW1vcnkpIGFuZCBjYXJlIG11c3QgYmUgdGFrZW4KQEAgLTYyMiw5ICs2NjEsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUENJCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JY2hlY2tfYWNwaV9wY2koKTsJLyogQ2hlY2tzIG1vcmUgdGhhbiBqdXN0IEFDUEkgYWN0dWFsbHkgKi8KLSNlbmRpZgorCWVhcmx5X3F1aXJrcygpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQUNQSQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCA1YTE5ZjBjLi4zMTMyMmQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMTkxLDYgKzE5MSwzNyBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfS0VYRUMKK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBsb25nIGZyZWVfbWVtOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjcmFzaF9zaXplLCBjcmFzaF9iYXNlOworCWludCByZXQ7CisKKwlmcmVlX21lbSA9ICgodW5zaWduZWQgbG9uZyBsb25nKW1heF9sb3dfcGZuIC0gbWluX2xvd19wZm4pIDw8IFBBR0VfU0hJRlQ7CisKKwlyZXQgPSBwYXJzZV9jcmFzaGtlcm5lbChib290X2NvbW1hbmRfbGluZSwgZnJlZV9tZW0sCisJCQkmY3Jhc2hfc2l6ZSwgJmNyYXNoX2Jhc2UpOworCWlmIChyZXQgPT0gMCAmJiBjcmFzaF9zaXplKSB7CisJCWlmIChjcmFzaF9iYXNlID4gMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiUmVzZXJ2aW5nICVsZE1CIG9mIG1lbW9yeSBhdCAlbGRNQiAiCisJCQkJCSJmb3IgY3Jhc2hrZXJuZWwgKFN5c3RlbSBSQU06ICVsZE1CKVxuIiwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpKGNyYXNoX3NpemUgPj4gMjApLAorCQkJCQkodW5zaWduZWQgbG9uZykoY3Jhc2hfYmFzZSA+PiAyMCksCisJCQkJCSh1bnNpZ25lZCBsb25nKShmcmVlX21lbSA+PiAyMCkpOworCQkJY3Jhc2hrX3Jlcy5zdGFydCA9IGNyYXNoX2Jhc2U7CisJCQljcmFzaGtfcmVzLmVuZCAgID0gY3Jhc2hfYmFzZSArIGNyYXNoX3NpemUgLSAxOworCQkJcmVzZXJ2ZV9ib290bWVtKGNyYXNoX2Jhc2UsIGNyYXNoX3NpemUpOworCQl9IGVsc2UKKwkJCXByaW50ayhLRVJOX0lORk8gImNyYXNoa2VybmVsIHJlc2VydmF0aW9uIGZhaWxlZCAtICIKKwkJCQkJInlvdSBoYXZlIHRvIHNwZWNpZnkgYSBiYXNlIGFkZHJlc3NcbiIpOworCX0KK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHJlc2VydmVfY3Jhc2hrZXJuZWwodm9pZCkKK3t9CisjZW5kaWYKKwogI2RlZmluZSBFQkRBX0FERFJfUE9JTlRFUiAweDQwRQogCiB1bnNpZ25lZCBfX2luaXRkYXRhIGViZGFfYWRkcjsKQEAgLTI3MSw2ICszMDIsMTEgQEAKIAogCWRtaV9zY2FuX21hY2hpbmUoKTsKIAorI2lmZGVmIENPTkZJR19TTVAKKwkvKiBzZXR1cCB0byB1c2UgdGhlIHN0YXRpYyBhcGljaWQgdGFibGUgZHVyaW5nIGtlcm5lbCBzdGFydHVwICovCisJeDg2X2NwdV90b19hcGljaWRfcHRyID0gKHZvaWQgKikmeDg2X2NwdV90b19hcGljaWRfaW5pdDsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0FDUEkKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIEFDUEkgYm9vdC10aW1lIHRhYmxlIHBhcnNlciAoZ2V0cyB0aGUgUlNEUCBhbmQgU0RUKS4KQEAgLTM1NywxMyArMzkzLDcgQEAKIAkJfQogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19LRVhFQwotCWlmIChjcmFzaGtfcmVzLnN0YXJ0ICE9IGNyYXNoa19yZXMuZW5kKSB7Ci0JCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKGNyYXNoa19yZXMuc3RhcnQsCi0JCQljcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxKTsKLQl9Ci0jZW5kaWYKLQorCXJlc2VydmVfY3Jhc2hrZXJuZWwoKTsKIAlwYWdpbmdfaW5pdCgpOwogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtNTI5LDcgKzU1OSw3IEBACiAgCQkgICBidXQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEhUIG5vZGVpZHMuCiAgCQkgICBJZiB0aGF0IGRvZXNuJ3QgcmVzdWx0IGluIGEgdXNhYmxlIG5vZGUgZmFsbCBiYWNrIHRvIHRoZQogIAkJICAgcGF0aCBmb3IgdGhlIHByZXZpb3VzIGNhc2UuICAqLwotIAkJaW50IGh0X25vZGVpZCA9IGFwaWNpZCAtIChjcHVfZGF0YVswXS5waHlzX3Byb2NfaWQgPDwgYml0cyk7CisJCWludCBodF9ub2RlaWQgPSBhcGljaWQgLSAoY3B1X2RhdGEoMCkucGh5c19wcm9jX2lkIDw8IGJpdHMpOwogIAkJaWYgKGh0X25vZGVpZCA+PSAwICYmCiAgCQkgICAgYXBpY2lkX3RvX25vZGVbaHRfbm9kZWlkXSAhPSBOVU1BX05PX05PREUpCiAgCQkJbm9kZSA9IGFwaWNpZF90b19ub2RlW2h0X25vZGVpZF07CkBAIC04NTMsNiArODgzLDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAljLT5waHlzX3Byb2NfaWQgPSAoY3B1aWRfZWJ4KDEpID4+IDI0KSAmIDB4ZmY7CisJYy0+Y3B1X2luZGV4ID0gMDsKICNlbmRpZgogfQogCkBAIC05NTksNiArOTkwLDcgQEAKIHN0YXRpYyBpbnQgc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSB2OworCWludCBjcHUgPSAwOwogCiAJLyogCiAJICogVGhlc2UgZmxhZyBiaXRzIG11c3QgbWF0Y2ggdGhlIGRlZmluaXRpb25zIGluIDxhc20vY3B1ZmVhdHVyZS5oPi4KQEAgLTEwMzcsOCArMTA2OSw5IEBACiAKIAogI2lmZGVmIENPTkZJR19TTVAKLQlpZiAoIWNwdV9vbmxpbmUoYy1jcHVfZGF0YSkpCisJaWYgKCFjcHVfb25saW5lKGMtPmNwdV9pbmRleCkpCiAJCXJldHVybiAwOworCWNwdSA9IGMtPmNwdV9pbmRleDsKICNlbmRpZgogCiAJc2VxX3ByaW50ZihtLCJwcm9jZXNzb3JcdDogJXVcbiIKQEAgLTEwNDYsNyArMTA3OSw3IEBACiAJCSAgICAgImNwdSBmYW1pbHlcdDogJWRcbiIKIAkJICAgICAibW9kZWxcdFx0OiAlZFxuIgogCQkgICAgICJtb2RlbCBuYW1lXHQ6ICVzXG4iLAotCQkgICAgICh1bnNpZ25lZCkoYy1jcHVfZGF0YSksCisJCSAgICAgKHVuc2lnbmVkKWNwdSwKIAkJICAgICBjLT54ODZfdmVuZG9yX2lkWzBdID8gYy0+eDg2X3ZlbmRvcl9pZCA6ICJ1bmtub3duIiwKIAkJICAgICBjLT54ODYsCiAJCSAgICAgKGludCljLT54ODZfbW9kZWwsCkBAIC0xMDU4LDcgKzEwOTEsNyBAQAogCQlzZXFfcHJpbnRmKG0sICJzdGVwcGluZ1x0OiB1bmtub3duXG4iKTsKIAkKIAlpZiAoY3B1X2hhcyhjLFg4Nl9GRUFUVVJFX1RTQykpIHsKLQkJdW5zaWduZWQgaW50IGZyZXEgPSBjcHVmcmVxX3F1aWNrX2dldCgodW5zaWduZWQpKGMtY3B1X2RhdGEpKTsKKwkJdW5zaWduZWQgaW50IGZyZXEgPSBjcHVmcmVxX3F1aWNrX2dldCgodW5zaWduZWQpY3B1KTsKIAkJaWYgKCFmcmVxKQogCQkJZnJlcSA9IGNwdV9raHo7CiAJCXNlcV9wcmludGYobSwgImNwdSBNSHpcdFx0OiAldS4lMDN1XG4iLApAQCAtMTA3MSw3ICsxMTA0LDYgQEAKIAkKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKHNtcF9udW1fc2libGluZ3MgKiBjLT54ODZfbWF4X2NvcmVzID4gMSkgewotCQlpbnQgY3B1ID0gYyAtIGNwdV9kYXRhOwogCQlzZXFfcHJpbnRmKG0sICJwaHlzaWNhbCBpZFx0OiAlZFxuIiwgYy0+cGh5c19wcm9jX2lkKTsKIAkJc2VxX3ByaW50ZihtLCAic2libGluZ3NcdDogJWRcbiIsCiAJCQkgICAgICAgY3B1c193ZWlnaHQocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpKTsKQEAgLTExMjksMTIgKzExNjEsMTYgQEAKIAogc3RhdGljIHZvaWQgKmNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKLQlyZXR1cm4gKnBvcyA8IE5SX0NQVVMgPyBjcHVfZGF0YSArICpwb3MgOiBOVUxMOworCWlmICgqcG9zID09IDApCS8qIGp1c3QgaW4gY2FzZSwgY3B1IDAgaXMgbm90IHRoZSBmaXJzdCAqLworCQkqcG9zID0gZmlyc3RfY3B1KGNwdV9wb3NzaWJsZV9tYXApOworCWlmICgoKnBvcykgPCBOUl9DUFVTICYmIGNwdV9wb3NzaWJsZSgqcG9zKSkKKwkJcmV0dXJuICZjcHVfZGF0YSgqcG9zKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgKmNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCSsrKnBvczsKKwkqcG9zID0gbmV4dF9jcHUoKnBvcywgY3B1X3Bvc3NpYmxlX21hcCk7CiAJcmV0dXJuIGNfc3RhcnQobSwgcG9zKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NpZ25hbF8zMi5jIGIvYXJjaC94ODYva2VybmVsL3NpZ25hbF8zMi5jCmluZGV4IDBkNzlkZjMuLjliZGQ4MzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzMyLmMKQEAgLTIwMCw4ICsyMDAsOCBAQAogCWlmIChzaG93X3VuaGFuZGxlZF9zaWduYWxzICYmIHByaW50a19yYXRlbGltaXQoKSkKIAkJcHJpbnRrKCIlcyVzWyVkXSBiYWQgZnJhbWUgaW4gc2lncmV0dXJuIGZyYW1lOiVwIGVpcDolbHgiCiAJCSAgICAgICAiIGVzcDolbHggb2VheDolbHhcbiIsCi0JCSAgICBjdXJyZW50LT5waWQgPiAxID8gS0VSTl9JTkZPIDogS0VSTl9FTUVSRywKLQkJICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZnJhbWUsIHJlZ3MtPmVpcCwKKwkJICAgIHRhc2tfcGlkX25yKGN1cnJlbnQpID4gMSA/IEtFUk5fSU5GTyA6IEtFUk5fRU1FUkcsCisJCSAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgZnJhbWUsIHJlZ3MtPmVpcCwKIAkJICAgIHJlZ3MtPmVzcCwgcmVncy0+b3JpZ19lYXgpOwogCiAJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwpAQCAtNTk0LDcgKzU5NCw3IEBACiAKIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7Ci0JCS8qIFJlZW5hYmxlIGFueSB3YXRjaHBvaW50cyBiZWZvcmUgZGVsaXZlcmluZyB0aGUKKwkJLyogUmUtZW5hYmxlIGFueSB3YXRjaHBvaW50cyBiZWZvcmUgZGVsaXZlcmluZyB0aGUKIAkJICogc2lnbmFsIHRvIHVzZXIgc3BhY2UuIFRoZSBwcm9jZXNzb3IgcmVnaXN0ZXIgd2lsbAogCQkgKiBoYXZlIGJlZW4gY2xlYXJlZCBpZiB0aGUgd2F0Y2hwb2ludCB0cmlnZ2VyZWQKIAkJICogaW5zaWRlIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsXzY0LmMKaW5kZXggNjgzODAyYi4uYWIwODZiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAKIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7Ci0JCS8qIFJlZW5hYmxlIGFueSB3YXRjaHBvaW50cyBiZWZvcmUgZGVsaXZlcmluZyB0aGUKKwkJLyogUmUtZW5hYmxlIGFueSB3YXRjaHBvaW50cyBiZWZvcmUgZGVsaXZlcmluZyB0aGUKIAkJICogc2lnbmFsIHRvIHVzZXIgc3BhY2UuIFRoZSBwcm9jZXNzb3IgcmVnaXN0ZXIgd2lsbAogCQkgKiBoYXZlIGJlZW4gY2xlYXJlZCBpZiB0aGUgd2F0Y2hwb2ludCB0cmlnZ2VyZWQKIAkJICogaW5zaWRlIHRoZSBrZXJuZWwuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wXzMyLmMKaW5kZXggNzkxZDlmOC4uZjMyMTE1MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBfMzIuYwpAQCAtNjksNyArNjksNyBAQAogICoKICAqCQlCIHN0ZXBwaW5nIENQVXMgbWF5IGhhbmcuIFRoZXJlIGFyZSBoYXJkd2FyZSB3b3JrIGFyb3VuZHMKICAqCWZvciB0aGlzLiBXZSB3YXJuIGFib3V0IGl0IGluIGNhc2UgeW91ciBib2FyZCBkb2Vzbid0IGhhdmUgdGhlIHdvcmsKLSAqCWFyb3VuZHMuIEJhc2ljYWxseSB0aGF0cyBzbyBJIGNhbiB0ZWxsIGFueW9uZSB3aXRoIGEgQiBzdGVwcGluZworICoJYXJvdW5kcy4gQmFzaWNhbGx5IHRoYXQncyBzbyBJIGNhbiB0ZWxsIGFueW9uZSB3aXRoIGEgQiBzdGVwcGluZwogICoJQ1BVIGFuZCBTTVAgcHJvYmxlbXMgInRvdWdoIi4KICAqCiAgKglTcGVjaWZpYyBpdGVtcyBbRnJvbSBQZW50aXVtIFByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIFVwZGF0ZV0KQEAgLTI3Myw3ICsyNzMsNyBAQAogICogMWExKSBjcHVfY2xlYXIoY3B1LCBvbGRfbW0tPmNwdV92bV9tYXNrKTsKICAqIAlTdG9wIGlwaSBkZWxpdmVyeSBmb3IgdGhlIG9sZCBtbS4gVGhpcyBpcyBub3Qgc3luY2hyb25pemVkIHdpdGgKICAqIAl0aGUgb3RoZXIgY3B1cywgYnV0IHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCBpZ25vcmUgZmx1c2ggaXBpcwotICogCWZvciB0aGUgd3JvbmcgbW0sIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBwZXJmb3JtIGEgc3VwZXJmbG91cworICogCWZvciB0aGUgd3JvbmcgbW0sIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB3ZSBwZXJmb3JtIGEgc3VwZXJmbHVvdXMKICAqIAl0bGIgZmx1c2guCiAgKiAxYTIpIHNldCBjcHVfdGxic3RhdGUgdG8gVExCU1RBVEVfT0sKICAqIAlOb3cgdGhlIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCB3b24ndCBjYWxsIGxlYXZlX21tIGlmIGNwdTAKQEAgLTYxMCw3ICs2MTAsNyBAQAogCSAqLwogCWNwdV9jbGVhcihzbXBfcHJvY2Vzc29yX2lkKCksIGNwdV9vbmxpbmVfbWFwKTsKIAlkaXNhYmxlX2xvY2FsX0FQSUMoKTsKLQlpZiAoY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXS5obHRfd29ya3Nfb2spCisJaWYgKGNwdV9kYXRhKHNtcF9wcm9jZXNzb3JfaWQoKSkuaGx0X3dvcmtzX29rKQogCQlmb3IoOzspIGhhbHQoKTsKIAlmb3IgKDs7KTsKIH0KQEAgLTY3Niw3ICs2NzYsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewotCQlpZiAoeDg2X2NwdV90b19hcGljaWRbaV0gPT0gYXBpY19pZCkKKwkJaWYgKHBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGkpID09IGFwaWNfaWQpCiAJCQlyZXR1cm4gaTsKIAl9CiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcF82NC5jIGIvYXJjaC94ODYva2VybmVsL3NtcF82NC5jCmluZGV4IDVjMjk2NDcuLjAzZmE2ZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wXzY0LmMKQEAgLTMyMiwxNyArMzIyLDI3IEBACiB9CiAKIC8qCi0gKiB0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgJ2dlbmVyaWMgY2FsbCBmdW5jdGlvbicgSVBJIHRvIG9uZSBvdGhlciBDUFUKLSAqIGluIHRoZSBzeXN0ZW0uCi0gKgotICogY3B1IGlzIGEgc3RhbmRhcmQgTGludXggbG9naWNhbCBDUFUgbnVtYmVyLgorICogdGhpcyBmdW5jdGlvbiBzZW5kcyBhICdnZW5lcmljIGNhbGwgZnVuY3Rpb24nIElQSSB0byBhbGwgb3RoZXIgQ1BVCisgKiBvZiB0aGUgc3lzdGVtIGRlZmluZWQgaW4gdGhlIG1hc2suCiAgKi8KLXN0YXRpYyB2b2lkCi1fX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShpbnQgY3B1LCB2b2lkICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLAotCQkJCWludCBub25hdG9taWMsIGludCB3YWl0KQorCitzdGF0aWMgaW50CitfX3NtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssCisJCQkgdm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmluZm8sCisJCQkgaW50IHdhaXQpCiB7CiAJc3RydWN0IGNhbGxfZGF0YV9zdHJ1Y3QgZGF0YTsKLQlpbnQgY3B1cyA9IDE7CisJY3B1bWFza190IGFsbGJ1dHNlbGY7CisJaW50IGNwdXM7CisKKwlhbGxidXRzZWxmID0gY3B1X29ubGluZV9tYXA7CisJY3B1X2NsZWFyKHNtcF9wcm9jZXNzb3JfaWQoKSwgYWxsYnV0c2VsZik7CisKKwljcHVzX2FuZChtYXNrLCBtYXNrLCBhbGxidXRzZWxmKTsKKwljcHVzID0gY3B1c193ZWlnaHQobWFzayk7CisKKwlpZiAoIWNwdXMpCisJCXJldHVybiAwOwogCiAJZGF0YS5mdW5jID0gZnVuYzsKIAlkYXRhLmluZm8gPSBpbmZvOwpAQCAtMzQzLDE5ICszNTMsNTUgQEAKIAogCWNhbGxfZGF0YSA9ICZkYXRhOwogCXdtYigpOwotCS8qIFNlbmQgYSBtZXNzYWdlIHRvIGFsbCBvdGhlciBDUFVzIGFuZCB3YWl0IGZvciB0aGVtIHRvIHJlc3BvbmQgKi8KLQlzZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2ZfY3B1KGNwdSksIENBTExfRlVOQ1RJT05fVkVDVE9SKTsKKworCS8qIFNlbmQgYSBtZXNzYWdlIHRvIG90aGVyIENQVXMgKi8KKwlpZiAoY3B1c19lcXVhbChtYXNrLCBhbGxidXRzZWxmKSkKKwkJc2VuZF9JUElfYWxsYnV0c2VsZihDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7CisJZWxzZQorCQlzZW5kX0lQSV9tYXNrKG1hc2ssIENBTExfRlVOQ1RJT05fVkVDVE9SKTsKIAogCS8qIFdhaXQgZm9yIHJlc3BvbnNlICovCiAJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLnN0YXJ0ZWQpICE9IGNwdXMpCiAJCWNwdV9yZWxheCgpOwogCiAJaWYgKCF3YWl0KQotCQlyZXR1cm47CisJCXJldHVybiAwOwogCiAJd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKQogCQljcHVfcmVsYXgoKTsKKworCXJldHVybiAwOwogfQorLyoqCisgKiBzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKCk6IFJ1biBhIGZ1bmN0aW9uIG9uIGEgc2V0IG9mIG90aGVyIENQVXMuCisgKiBAbWFzazogVGhlIHNldCBvZiBjcHVzIHRvIHJ1biBvbi4gIE11c3Qgbm90IGluY2x1ZGUgdGhlIGN1cnJlbnQgY3B1LgorICogQGZ1bmM6IFRoZSBmdW5jdGlvbiB0byBydW4uIFRoaXMgbXVzdCBiZSBmYXN0IGFuZCBub24tYmxvY2tpbmcuCisgKiBAaW5mbzogQW4gYXJiaXRyYXJ5IHBvaW50ZXIgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24uCisgKiBAd2FpdDogSWYgdHJ1ZSwgd2FpdCAoYXRvbWljYWxseSkgdW50aWwgZnVuY3Rpb24gaGFzIGNvbXBsZXRlZCBvbiBvdGhlciBDUFVzLgorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlbHNlIGEgbmVnYXRpdmUgc3RhdHVzIGNvZGUuCisgKgorICogSWYgQHdhaXQgaXMgdHJ1ZSwgdGhlbiByZXR1cm5zIG9uY2UgQGZ1bmMgaGFzIHJldHVybmVkOyBvdGhlcndpc2UKKyAqIGl0IHJldHVybnMganVzdCBiZWZvcmUgdGhlIHRhcmdldCBjcHUgY2FsbHMgQGZ1bmMuCisgKgorICogWW91IG11c3Qgbm90IGNhbGwgdGhpcyBmdW5jdGlvbiB3aXRoIGRpc2FibGVkIGludGVycnVwdHMgb3IgZnJvbSBhCisgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlciBvciBmcm9tIGEgYm90dG9tIGhhbGYgaGFuZGxlci4KKyAqLworaW50IHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1bWFza190IG1hc2ssCisJCQkgICB2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqaW5mbywKKwkJCSAgIGludCB3YWl0KQoreworCWludCByZXQ7CisKKwkvKiBDYW4gZGVhZGxvY2sgd2hlbiBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkICovCisJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOworCisJc3Bpbl9sb2NrKCZjYWxsX2xvY2spOworCXJldCA9IF9fc21wX2NhbGxfZnVuY3Rpb25fbWFzayhtYXNrLCBmdW5jLCBpbmZvLCB3YWl0KTsKKwlzcGluX3VubG9jaygmY2FsbF9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9tYXNrKTsKIAogLyoKICAqIHNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZSAtIFJ1biBhIGZ1bmN0aW9uIG9uIGEgc3BlY2lmaWMgQ1BVCkBAIC0zNzQsNiArNDIwLDcgQEAKIAlpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCkKIHsKIAkvKiBwcmV2ZW50IHByZWVtcHRpb24gYW5kIHJlc2NoZWR1bGUgb24gYW5vdGhlciBwcm9jZXNzb3IgKi8KKwlpbnQgcmV0OwogCWludCBtZSA9IGdldF9jcHUoKTsKIAogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KQEAgLTM4Nyw1MSArNDM0LDE0IEBACiAJCXJldHVybiAwOwogCX0KIAotCXNwaW5fbG9jaygmY2FsbF9sb2NrKTsKLQlfX3NtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIGZ1bmMsIGluZm8sIG5vbmF0b21pYywgd2FpdCk7Ci0Jc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7CisJcmV0ID0gc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVtYXNrX29mX2NwdShjcHUpLCBmdW5jLCBpbmZvLCB3YWl0KTsKKwogCXB1dF9jcHUoKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUpOwogCiAvKgotICogdGhpcyBmdW5jdGlvbiBzZW5kcyBhICdnZW5lcmljIGNhbGwgZnVuY3Rpb24nIElQSSB0byBhbGwgb3RoZXIgQ1BVcwotICogaW4gdGhlIHN5c3RlbS4KLSAqLwotc3RhdGljIHZvaWQgX19zbXBfY2FsbF9mdW5jdGlvbiAodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywKLQkJCQlpbnQgbm9uYXRvbWljLCBpbnQgd2FpdCkKLXsKLQlzdHJ1Y3QgY2FsbF9kYXRhX3N0cnVjdCBkYXRhOwotCWludCBjcHVzID0gbnVtX29ubGluZV9jcHVzKCktMTsKLQotCWlmICghY3B1cykKLQkJcmV0dXJuOwotCi0JZGF0YS5mdW5jID0gZnVuYzsKLQlkYXRhLmluZm8gPSBpbmZvOwotCWF0b21pY19zZXQoJmRhdGEuc3RhcnRlZCwgMCk7Ci0JZGF0YS53YWl0ID0gd2FpdDsKLQlpZiAod2FpdCkKLQkJYXRvbWljX3NldCgmZGF0YS5maW5pc2hlZCwgMCk7Ci0KLQljYWxsX2RhdGEgPSAmZGF0YTsKLQl3bWIoKTsKLQkvKiBTZW5kIGEgbWVzc2FnZSB0byBhbGwgb3RoZXIgQ1BVcyBhbmQgd2FpdCBmb3IgdGhlbSB0byByZXNwb25kICovCi0Jc2VuZF9JUElfYWxsYnV0c2VsZihDQUxMX0ZVTkNUSU9OX1ZFQ1RPUik7Ci0KLQkvKiBXYWl0IGZvciByZXNwb25zZSAqLwotCXdoaWxlIChhdG9taWNfcmVhZCgmZGF0YS5zdGFydGVkKSAhPSBjcHVzKQotCQljcHVfcmVsYXgoKTsKLQotCWlmICghd2FpdCkKLQkJcmV0dXJuOwotCi0Jd2hpbGUgKGF0b21pY19yZWFkKCZkYXRhLmZpbmlzaGVkKSAhPSBjcHVzKQotCQljcHVfcmVsYXgoKTsKLX0KLQotLyoKICAqIHNtcF9jYWxsX2Z1bmN0aW9uIC0gcnVuIGEgZnVuY3Rpb24gb24gYWxsIG90aGVyIENQVXMuCiAgKiBAZnVuYzogVGhlIGZ1bmN0aW9uIHRvIHJ1bi4gVGhpcyBtdXN0IGJlIGZhc3QgYW5kIG5vbi1ibG9ja2luZy4KICAqIEBpbmZvOiBBbiBhcmJpdHJhcnkgcG9pbnRlciB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4KQEAgLTQ0OSwxMCArNDU5LDcgQEAKIGludCBzbXBfY2FsbF9mdW5jdGlvbiAodm9pZCAoKmZ1bmMpICh2b2lkICppbmZvKSwgdm9pZCAqaW5mbywgaW50IG5vbmF0b21pYywKIAkJCWludCB3YWl0KQogewotCXNwaW5fbG9jaygmY2FsbF9sb2NrKTsKLQlfX3NtcF9jYWxsX2Z1bmN0aW9uKGZ1bmMsaW5mbyxub25hdG9taWMsd2FpdCk7Ci0Jc3Bpbl91bmxvY2soJmNhbGxfbG9jayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNtcF9jYWxsX2Z1bmN0aW9uX21hc2soY3B1X29ubGluZV9tYXAsIGZ1bmMsIGluZm8sIHdhaXQpOwogfQogRVhQT1JUX1NZTUJPTChzbXBfY2FsbF9mdW5jdGlvbik7CiAKQEAgLTQ3OSw3ICs0ODYsNyBAQAogCS8qIERvbid0IGRlYWRsb2NrIG9uIHRoZSBjYWxsIGxvY2sgaW4gcGFuaWMgKi8KIAlub2xvY2sgPSAhc3Bpbl90cnlsb2NrKCZjYWxsX2xvY2spOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlfX3NtcF9jYWxsX2Z1bmN0aW9uKHN0b3BfdGhpc19jcHUsIE5VTEwsIDAsIDApOworCV9fc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVfb25saW5lX21hcCwgc3RvcF90aGlzX2NwdSwgTlVMTCwgMCk7CiAJaWYgKCFub2xvY2spCiAJCXNwaW5fdW5sb2NrKCZjYWxsX2xvY2spOwogCWRpc2FibGVfbG9jYWxfQVBJQygpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3RfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290XzMyLmMKaW5kZXggYmUzZmFhYy4uZWYwZjM0ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3RfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdF8zMi5jCkBAIC02Nyw3ICs2Nyw3IEBACiBFWFBPUlRfU1lNQk9MKHNtcF9udW1fc2libGluZ3MpOwogCiAvKiBMYXN0IGxldmVsIGNhY2hlIElEIG9mIGVhY2ggbG9naWNhbCBDUFUgKi8KLWludCBjcHVfbGxjX2lkW05SX0NQVVNdIF9fY3B1aW5pdGRhdGEgPSB7WzAgLi4uIE5SX0NQVVMtMV0gPSBCQURfQVBJQ0lEfTsKK0RFRklORV9QRVJfQ1BVKHU4LCBjcHVfbGxjX2lkKSA9IEJBRF9BUElDSUQ7CiAKIC8qIHJlcHJlc2VudGluZyBIVCBzaWJsaW5ncyBvZiBlYWNoIGxvZ2ljYWwgQ1BVICovCiBERUZJTkVfUEVSX0NQVShjcHVtYXNrX3QsIGNwdV9zaWJsaW5nX21hcCk7CkBAIC04OSwxMiArODksMjAgQEAKIHN0YXRpYyBjcHVtYXNrX3Qgc21wX2NvbW1lbmNlZF9tYXNrOwogCiAvKiBQZXIgQ1BVIGJvZ29taXBzIGFuZCBvdGhlciBwYXJhbWV0ZXJzICovCi1zdHJ1Y3QgY3B1aW5mb194ODYgY3B1X2RhdGFbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKLUVYUE9SVF9TWU1CT0woY3B1X2RhdGEpOworREVGSU5FX1BFUl9DUFVfU0hBUkVEX0FMSUdORUQoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0woY3B1X2luZm8pOwogCi11OCB4ODZfY3B1X3RvX2FwaWNpZFtOUl9DUFVTXSBfX3JlYWRfbW9zdGx5ID0KLQkJCXsgWzAgLi4uIE5SX0NQVVMtMV0gPSAweGZmIH07Ci1FWFBPUlRfU1lNQk9MKHg4Nl9jcHVfdG9fYXBpY2lkKTsKKy8qCisgKiBUaGUgZm9sbG93aW5nIHN0YXRpYyBhcnJheSBpcyB1c2VkIGR1cmluZyBrZXJuZWwgc3RhcnR1cAorICogYW5kIHRoZSB4ODZfY3B1X3RvX2FwaWNpZF9wdHIgY29udGFpbnMgdGhlIGFkZHJlc3Mgb2YgdGhlCisgKiBhcnJheSBkdXJpbmcgdGhpcyB0aW1lLiAgSXMgaXQgemVyb2VkIHdoZW4gdGhlIHBlcl9jcHUKKyAqIGRhdGEgYXJlYSBpcyByZW1vdmVkLgorICovCit1OCB4ODZfY3B1X3RvX2FwaWNpZF9pbml0W05SX0NQVVNdIF9faW5pdGRhdGEgPQorCQkJeyBbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUQgfTsKK3ZvaWQgKng4Nl9jcHVfdG9fYXBpY2lkX3B0cjsKK0RFRklORV9QRVJfQ1BVKHU4LCB4ODZfY3B1X3RvX2FwaWNpZCkgPSBCQURfQVBJQ0lEOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHg4Nl9jcHVfdG9fYXBpY2lkKTsKIAogdTggYXBpY2lkXzJfbm9kZVtNQVhfQVBJQ0lEXTsKIApAQCAtMTUwLDkgKzE1OCwxMCBAQAogCiB2b2lkIF9fY3B1aW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsgaWQ7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGlkKTsKIAogCSpjID0gYm9vdF9jcHVfZGF0YTsKKwljLT5jcHVfaW5kZXggPSBpZDsKIAlpZiAoaWQhPTApCiAJCWlkZW50aWZ5X3NlY29uZGFyeV9jcHUoYyk7CiAJLyoKQEAgLTI5NCw3ICszMDMsNyBAQAogLyogbWFwcyB0aGUgY3B1IHRvIHRoZSBzY2hlZCBkb21haW4gcmVwcmVzZW50aW5nIG11bHRpLWNvcmUgKi8KIGNwdW1hc2tfdCBjcHVfY29yZWdyb3VwX21hcChpbnQgY3B1KQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsgY3B1OworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwogCS8qCiAJICogRm9yIHBlcmYsIHdlIHJldHVybiBsYXN0IGxldmVsIGNhY2hlIHNoYXJlZCBtYXAuCiAJICogQW5kIGZvciBwb3dlciBzYXZpbmdzLCB3ZSByZXR1cm4gY3B1X2NvcmVfbWFwCkBAIC0zMTEsNDEgKzMyMCw0MSBAQAogdm9pZCBfX2NwdWluaXQgc2V0X2NwdV9zaWJsaW5nX21hcChpbnQgY3B1KQogewogCWludCBpOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwogCiAJY3B1X3NldChjcHUsIGNwdV9zaWJsaW5nX3NldHVwX21hcCk7CiAKIAlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEpIHsKIAkJZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKSB7Ci0JCQlpZiAoY1tjcHVdLnBoeXNfcHJvY19pZCA9PSBjW2ldLnBoeXNfcHJvY19pZCAmJgotCQkJICAgIGNbY3B1XS5jcHVfY29yZV9pZCA9PSBjW2ldLmNwdV9jb3JlX2lkKSB7CisJCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IGNwdV9kYXRhKGkpLnBoeXNfcHJvY19pZCAmJgorCQkJICAgIGMtPmNwdV9jb3JlX2lkID09IGNwdV9kYXRhKGkpLmNwdV9jb3JlX2lkKSB7CiAJCQkJY3B1X3NldChpLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSk7CiAJCQkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSk7CiAJCQkJY3B1X3NldChpLCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CiAJCQkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBpKSk7Ci0JCQkJY3B1X3NldChpLCBjW2NwdV0ubGxjX3NoYXJlZF9tYXApOwotCQkJCWNwdV9zZXQoY3B1LCBjW2ldLmxsY19zaGFyZWRfbWFwKTsKKwkJCQljcHVfc2V0KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKKwkJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKIAl9CiAKLQljcHVfc2V0KGNwdSwgY1tjcHVdLmxsY19zaGFyZWRfbWFwKTsKKwljcHVfc2V0KGNwdSwgYy0+bGxjX3NoYXJlZF9tYXApOwogCiAJaWYgKGN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyA9PSAxKSB7CiAJCXBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7Ci0JCWNbY3B1XS5ib290ZWRfY29yZXMgPSAxOworCQljLT5ib290ZWRfY29yZXMgPSAxOwogCQlyZXR1cm47CiAJfQogCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKSB7Ci0JCWlmIChjcHVfbGxjX2lkW2NwdV0gIT0gQkFEX0FQSUNJRCAmJgotCQkgICAgY3B1X2xsY19pZFtjcHVdID09IGNwdV9sbGNfaWRbaV0pIHsKLQkJCWNwdV9zZXQoaSwgY1tjcHVdLmxsY19zaGFyZWRfbWFwKTsKLQkJCWNwdV9zZXQoY3B1LCBjW2ldLmxsY19zaGFyZWRfbWFwKTsKKwkJaWYgKHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSAhPSBCQURfQVBJQ0lEICYmCisJCSAgICBwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPT0gcGVyX2NwdShjcHVfbGxjX2lkLCBpKSkgeworCQkJY3B1X3NldChpLCBjLT5sbGNfc2hhcmVkX21hcCk7CisJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwogCQl9Ci0JCWlmIChjW2NwdV0ucGh5c19wcm9jX2lkID09IGNbaV0ucGh5c19wcm9jX2lkKSB7CisJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkKSB7CiAJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKIAkJCWNwdV9zZXQoY3B1LCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOwogCQkJLyoKQEAgLTM1NywxNSArMzY2LDE1IEBACiAJCQkJICogdGhlIGJvb3RlZF9jb3JlcyBmb3IgdGhpcyBuZXcgY3B1CiAJCQkJICovCiAJCQkJaWYgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSkpID09IGkpCi0JCQkJCWNbY3B1XS5ib290ZWRfY29yZXMrKzsKKwkJCQkJYy0+Ym9vdGVkX2NvcmVzKys7CiAJCQkJLyoKIAkJCQkgKiBpbmNyZW1lbnQgdGhlIGNvcmUgY291bnQgZm9yIGFsbAogCQkJCSAqIHRoZSBvdGhlciBjcHVzIGluIHRoaXMgcGFja2FnZQogCQkJCSAqLwogCQkJCWlmIChpICE9IGNwdSkKLQkJCQkJY1tpXS5ib290ZWRfY29yZXMrKzsKLQkJCX0gZWxzZSBpZiAoaSAhPSBjcHUgJiYgIWNbY3B1XS5ib290ZWRfY29yZXMpCi0JCQkJY1tjcHVdLmJvb3RlZF9jb3JlcyA9IGNbaV0uYm9vdGVkX2NvcmVzOworCQkJCQljcHVfZGF0YShpKS5ib290ZWRfY29yZXMrKzsKKwkJCX0gZWxzZSBpZiAoaSAhPSBjcHUgJiYgIWMtPmJvb3RlZF9jb3JlcykKKwkJCQljLT5ib290ZWRfY29yZXMgPSBjcHVfZGF0YShpKS5ib290ZWRfY29yZXM7CiAJCX0KIAl9CiB9CkBAIC00MTIsNyArNDIxLDcgQEAKIAkvKgogCSAqIFdlIG5lZWQgdG8gaG9sZCBjYWxsX2xvY2ssIHNvIHRoZXJlIGlzIG5vIGluY29uc2lzdGVuY3kKIAkgKiBiZXR3ZWVuIHRoZSB0aW1lIHNtcF9jYWxsX2Z1bmN0aW9uKCkgZGV0ZXJtaW5lcyBudW1iZXIgb2YKLQkgKiBJUEkgcmVjZWlwaWVudHMsIGFuZCB0aGUgdGltZSB3aGVuIHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUKKwkgKiBJUEkgcmVjaXBpZW50cywgYW5kIHRoZSB0aW1lIHdoZW4gdGhlIGRldGVybWluYXRpb24gaXMgbWFkZQogCSAqIGZvciB3aGljaCBjcHVzIHJlY2VpdmUgdGhlIElQSS4gSG9sZGluZyB0aGlzCiAJICogbG9jayBoZWxwcyB1cyB0byBub3QgaW5jbHVkZSB0aGlzIGNwdSBpbiBhIGN1cnJlbnRseSBpbiBwcm9ncmVzcwogCSAqIHNtcF9jYWxsX2Z1bmN0aW9uKCkuCkBAIC04MDQsNyArODEzLDcgQEAKIAogCWlycV9jdHhfaW5pdChjcHUpOwogCi0JeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKKwlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpID0gYXBpY2lkOwogCS8qCiAJICogVGhpcyBncnVuZ2UgcnVucyB0aGUgc3RhcnR1cCBwcm9jZXNzIGZvcgogCSAqIHRoZSB0YXJnZXRlZCBwcm9jZXNzb3IuCkBAIC04NDQsNyArODUzLDcgQEAKIAkJCS8qIG51bWJlciBDUFVzIGxvZ2ljYWxseSwgc3RhcnRpbmcgZnJvbSAxIChCU1AgaXMgMCkgKi8KIAkJCURwcmludGsoIk9LLlxuIik7CiAJCQlwcmludGsoIkNQVSVkOiAiLCBjcHUpOwotCQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhW2NwdV0pOworCQkJcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhKGNwdSkpOwogCQkJRHByaW50aygiQ1BVIGhhcyBib290ZWQuXG4iKTsKIAkJfSBlbHNlIHsKIAkJCWJvb3RfZXJyb3I9IDE7CkBAIC04NjYsNyArODc1LDcgQEAKIAkJY3B1X2NsZWFyKGNwdSwgY3B1X2luaXRpYWxpemVkKTsgLyogd2FzIHNldCBieSBjcHVfaW5pdCgpICovCiAJCWNwdWNvdW50LS07CiAJfSBlbHNlIHsKLQkJeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IGFwaWNpZDsKIAkJY3B1X3NldChjcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJfQogCkBAIC05MTUsNyArOTI0LDcgQEAKIAlzdHJ1Y3Qgd2FybV9ib290X2NwdV9pbmZvIGluZm87CiAJaW50CWFwaWNpZCwgcmV0OwogCi0JYXBpY2lkID0geDg2X2NwdV90b19hcGljaWRbY3B1XTsKKwlhcGljaWQgPSBwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpOwogCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGV4aXQ7CkBAIC05NjEsMTEgKzk3MCwxMSBAQAogCSAqLwogCXNtcF9zdG9yZV9jcHVfaW5mbygwKTsgLyogRmluYWwgZnVsbCB2ZXJzaW9uIG9mIHRoZSBkYXRhICovCiAJcHJpbnRrKCJDUFUlZDogIiwgMCk7Ci0JcHJpbnRfY3B1X2luZm8oJmNwdV9kYXRhWzBdKTsKKwlwcmludF9jcHVfaW5mbygmY3B1X2RhdGEoMCkpOwogCiAJYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkID0gR0VUX0FQSUNfSUQoYXBpY19yZWFkKEFQSUNfSUQpKTsKIAlib290X2NwdV9sb2dpY2FsX2FwaWNpZCA9IGxvZ2ljYWxfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXg4Nl9jcHVfdG9fYXBpY2lkWzBdID0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOworCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIDApID0gYm9vdF9jcHVfcGh5c2ljYWxfYXBpY2lkOwogCiAJY3VycmVudF90aHJlYWRfaW5mbygpLT5jcHUgPSAwOwogCkBAIC0xMDA4LDYgKzEwMTcsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIi4uLiBmb3JjaW5nIHVzZSBvZiBkdW1teSBBUElDIGVtdWxhdGlvbi4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKIAkJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKIAkJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7CisJCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKIAkJY3B1X3NldCgwLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgMCkpOwogCQljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCAwKSk7CiAJCXJldHVybjsKQEAgLTEwMjksNiArMTAzOSw3IEBACiAJCX0KIAkJc21wYm9vdF9jbGVhcl9pb19hcGljX2lycXMoKTsKIAkJcGh5c19jcHVfcHJlc2VudF9tYXAgPSBwaHlzaWRfbWFza19vZl9waHlzaWQoMCk7CisJCW1hcF9jcHVfdG9fbG9naWNhbF9hcGljaWQoKTsKIAkJY3B1X3NldCgwLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgMCkpOwogCQljcHVfc2V0KDAsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCAwKSk7CiAJCXJldHVybjsKQEAgLTEwODIsNyArMTA5Myw3IEBACiAJRHByaW50aygiQmVmb3JlIGJvZ29taXBzLlxuIik7CiAJZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykKIAkJaWYgKGNwdV9pc3NldChjcHUsIGNwdV9jYWxsb3V0X21hcCkpCi0JCQlib2dvc3VtICs9IGNwdV9kYXRhW2NwdV0ubG9vcHNfcGVyX2ppZmZ5OworCQkJYm9nb3N1bSArPSBjcHVfZGF0YShjcHUpLmxvb3BzX3Blcl9qaWZmeTsKIAlwcmludGsoS0VSTl9JTkZPCiAJCSJUb3RhbCBvZiAlZCBwcm9jZXNzb3JzIGFjdGl2YXRlZCAoJWx1LiUwMmx1IEJvZ29NSVBTKS5cbiIsCiAJCWNwdWNvdW50KzEsCkBAIC0xMTUyLDcgKzExNjMsNyBAQAogdm9pZCByZW1vdmVfc2libGluZ2luZm8oaW50IGNwdSkKIHsKIAlpbnQgc2libGluZzsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoY3B1KTsKIAogCWZvcl9lYWNoX2NwdV9tYXNrKHNpYmxpbmcsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKSB7CiAJCWNwdV9jbGVhcihjcHUsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBzaWJsaW5nKSk7CkBAIC0xMTYwLDE1ICsxMTcxLDE1IEBACiAJCSAqIGxhc3QgdGhyZWFkIHNpYmxpbmcgaW4gdGhpcyBjcHUgY29yZSBnb2luZyBkb3duCiAJCSAqLwogCQlpZiAoY3B1c193ZWlnaHQocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpID09IDEpCi0JCQljW3NpYmxpbmddLmJvb3RlZF9jb3Jlcy0tOworCQkJY3B1X2RhdGEoc2libGluZykuYm9vdGVkX2NvcmVzLS07CiAJfQogCQkJCiAJZm9yX2VhY2hfY3B1X21hc2soc2libGluZywgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCiAJCWNwdV9jbGVhcihjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBzaWJsaW5nKSk7CiAJY3B1c19jbGVhcihwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSk7CiAJY3B1c19jbGVhcihwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7Ci0JY1tjcHVdLnBoeXNfcHJvY19pZCA9IDA7Ci0JY1tjcHVdLmNwdV9jb3JlX2lkID0gMDsKKwljLT5waHlzX3Byb2NfaWQgPSAwOworCWMtPmNwdV9jb3JlX2lkID0gMDsKIAljcHVfY2xlYXIoY3B1LCBjcHVfc2libGluZ19zZXR1cF9tYXApOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdF82NC5jIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3RfNjQuYwppbmRleCBlMzUxYWM0Li5iN2U3NjhkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290XzY0LmMKQEAgLTY1LDcgKzY1LDcgQEAKIEVYUE9SVF9TWU1CT0woc21wX251bV9zaWJsaW5ncyk7CiAKIC8qIExhc3QgbGV2ZWwgY2FjaGUgSUQgb2YgZWFjaCBsb2dpY2FsIENQVSAqLwotdTggY3B1X2xsY19pZFtOUl9DUFVTXSBfX2NwdWluaXRkYXRhICA9IHtbMCAuLi4gTlJfQ1BVUy0xXSA9IEJBRF9BUElDSUR9OworREVGSU5FX1BFUl9DUFUodTgsIGNwdV9sbGNfaWQpID0gQkFEX0FQSUNJRDsKIAogLyogQml0bWFzayBvZiBjdXJyZW50bHkgb25saW5lIENQVXMgKi8KIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcCBfX3JlYWRfbW9zdGx5OwpAQCAtODQsOCArODQsOCBAQAogRVhQT1JUX1NZTUJPTChjcHVfcG9zc2libGVfbWFwKTsKIAogLyogUGVyIENQVSBib2dvbWlwcyBhbmQgb3RoZXIgcGFyYW1ldGVycyAqLwotc3RydWN0IGNwdWluZm9feDg2IGNwdV9kYXRhW05SX0NQVVNdIF9fY2FjaGVsaW5lX2FsaWduZWQ7Ci1FWFBPUlRfU1lNQk9MKGNwdV9kYXRhKTsKK0RFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBjcHVpbmZvX3g4NiwgY3B1X2luZm8pOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9pbmZvKTsKIAogLyogU2V0IHdoZW4gdGhlIGlkbGVycyBhcmUgYWxsIGZvcmtlZCAqLwogaW50IHNtcF90aHJlYWRzX3JlYWR5OwpAQCAtMTM4LDkgKzEzOCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX3N0b3JlX2NwdV9pbmZvKGludCBpZCkKIHsKLQlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGlkOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpZCk7CiAKIAkqYyA9IGJvb3RfY3B1X2RhdGE7CisJYy0+Y3B1X2luZGV4ID0gaWQ7CiAJaWRlbnRpZnlfY3B1KGMpOwogCXByaW50X2NwdV9pbmZvKGMpOwogfQpAQCAtMjM3LDcgKzIzOCw3IEBACiAvKiBtYXBzIHRoZSBjcHUgdG8gdGhlIHNjaGVkIGRvbWFpbiByZXByZXNlbnRpbmcgbXVsdGktY29yZSAqLwogY3B1bWFza190IGNwdV9jb3JlZ3JvdXBfbWFwKGludCBjcHUpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGEgKyBjcHU7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAJLyoKIAkgKiBGb3IgcGVyZiwgd2UgcmV0dXJuIGxhc3QgbGV2ZWwgY2FjaGUgc2hhcmVkIG1hcC4KIAkgKiBBbmQgZm9yIHBvd2VyIHNhdmluZ3MsIHdlIHJldHVybiBjcHVfY29yZV9tYXAKQEAgLTI1NCw0MSArMjU1LDQxIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NwdV9zaWJsaW5nX21hcChpbnQgY3B1KQogewogCWludCBpOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShjcHUpOwogCiAJY3B1X3NldChjcHUsIGNwdV9zaWJsaW5nX3NldHVwX21hcCk7CiAKIAlpZiAoc21wX251bV9zaWJsaW5ncyA+IDEpIHsKIAkJZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKSB7Ci0JCQlpZiAoY1tjcHVdLnBoeXNfcHJvY19pZCA9PSBjW2ldLnBoeXNfcHJvY19pZCAmJgotCQkJICAgIGNbY3B1XS5jcHVfY29yZV9pZCA9PSBjW2ldLmNwdV9jb3JlX2lkKSB7CisJCQlpZiAoYy0+cGh5c19wcm9jX2lkID09IGNwdV9kYXRhKGkpLnBoeXNfcHJvY19pZCAmJgorCQkJICAgIGMtPmNwdV9jb3JlX2lkID09IGNwdV9kYXRhKGkpLmNwdV9jb3JlX2lkKSB7CiAJCQkJY3B1X3NldChpLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSk7CiAJCQkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBpKSk7CiAJCQkJY3B1X3NldChpLCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSk7CiAJCQkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBpKSk7Ci0JCQkJY3B1X3NldChpLCBjW2NwdV0ubGxjX3NoYXJlZF9tYXApOwotCQkJCWNwdV9zZXQoY3B1LCBjW2ldLmxsY19zaGFyZWRfbWFwKTsKKwkJCQljcHVfc2V0KGksIGMtPmxsY19zaGFyZWRfbWFwKTsKKwkJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwogCQkJfQogCQl9CiAJfSBlbHNlIHsKIAkJY3B1X3NldChjcHUsIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKIAl9CiAKLQljcHVfc2V0KGNwdSwgY1tjcHVdLmxsY19zaGFyZWRfbWFwKTsKKwljcHVfc2V0KGNwdSwgYy0+bGxjX3NoYXJlZF9tYXApOwogCiAJaWYgKGN1cnJlbnRfY3B1X2RhdGEueDg2X21heF9jb3JlcyA9PSAxKSB7CiAJCXBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpID0gcGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSk7Ci0JCWNbY3B1XS5ib290ZWRfY29yZXMgPSAxOworCQljLT5ib290ZWRfY29yZXMgPSAxOwogCQlyZXR1cm47CiAJfQogCiAJZm9yX2VhY2hfY3B1X21hc2soaSwgY3B1X3NpYmxpbmdfc2V0dXBfbWFwKSB7Ci0JCWlmIChjcHVfbGxjX2lkW2NwdV0gIT0gQkFEX0FQSUNJRCAmJgotCQkgICAgY3B1X2xsY19pZFtjcHVdID09IGNwdV9sbGNfaWRbaV0pIHsKLQkJCWNwdV9zZXQoaSwgY1tjcHVdLmxsY19zaGFyZWRfbWFwKTsKLQkJCWNwdV9zZXQoY3B1LCBjW2ldLmxsY19zaGFyZWRfbWFwKTsKKwkJaWYgKHBlcl9jcHUoY3B1X2xsY19pZCwgY3B1KSAhPSBCQURfQVBJQ0lEICYmCisJCSAgICBwZXJfY3B1KGNwdV9sbGNfaWQsIGNwdSkgPT0gcGVyX2NwdShjcHVfbGxjX2lkLCBpKSkgeworCQkJY3B1X3NldChpLCBjLT5sbGNfc2hhcmVkX21hcCk7CisJCQljcHVfc2V0KGNwdSwgY3B1X2RhdGEoaSkubGxjX3NoYXJlZF9tYXApOwogCQl9Ci0JCWlmIChjW2NwdV0ucGh5c19wcm9jX2lkID09IGNbaV0ucGh5c19wcm9jX2lkKSB7CisJCWlmIChjLT5waHlzX3Byb2NfaWQgPT0gY3B1X2RhdGEoaSkucGh5c19wcm9jX2lkKSB7CiAJCQljcHVfc2V0KGksIHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKIAkJCWNwdV9zZXQoY3B1LCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgaSkpOwogCQkJLyoKQEAgLTMwMCwxNSArMzAxLDE1IEBACiAJCQkJICogdGhlIGJvb3RlZF9jb3JlcyBmb3IgdGhpcyBuZXcgY3B1CiAJCQkJICovCiAJCQkJaWYgKGZpcnN0X2NwdShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgaSkpID09IGkpCi0JCQkJCWNbY3B1XS5ib290ZWRfY29yZXMrKzsKKwkJCQkJYy0+Ym9vdGVkX2NvcmVzKys7CiAJCQkJLyoKIAkJCQkgKiBpbmNyZW1lbnQgdGhlIGNvcmUgY291bnQgZm9yIGFsbAogCQkJCSAqIHRoZSBvdGhlciBjcHVzIGluIHRoaXMgcGFja2FnZQogCQkJCSAqLwogCQkJCWlmIChpICE9IGNwdSkKLQkJCQkJY1tpXS5ib290ZWRfY29yZXMrKzsKLQkJCX0gZWxzZSBpZiAoaSAhPSBjcHUgJiYgIWNbY3B1XS5ib290ZWRfY29yZXMpCi0JCQkJY1tjcHVdLmJvb3RlZF9jb3JlcyA9IGNbaV0uYm9vdGVkX2NvcmVzOworCQkJCQljcHVfZGF0YShpKS5ib290ZWRfY29yZXMrKzsKKwkJCX0gZWxzZSBpZiAoaSAhPSBjcHUgJiYgIWMtPmJvb3RlZF9jb3JlcykKKwkJCQljLT5ib290ZWRfY29yZXMgPSBjcHVfZGF0YShpKS5ib290ZWRfY29yZXM7CiAJCX0KIAl9CiB9CkBAIC0zNTAsNyArMzUxLDcgQEAKIAkvKgogCSAqIFdlIG5lZWQgdG8gaG9sZCBjYWxsX2xvY2ssIHNvIHRoZXJlIGlzIG5vIGluY29uc2lzdGVuY3kKIAkgKiBiZXR3ZWVuIHRoZSB0aW1lIHNtcF9jYWxsX2Z1bmN0aW9uKCkgZGV0ZXJtaW5lcyBudW1iZXIgb2YKLQkgKiBJUEkgcmVjZWlwaWVudHMsIGFuZCB0aGUgdGltZSB3aGVuIHRoZSBkZXRlcm1pbmF0aW9uIGlzIG1hZGUKKwkgKiBJUEkgcmVjaXBpZW50cywgYW5kIHRoZSB0aW1lIHdoZW4gdGhlIGRldGVybWluYXRpb24gaXMgbWFkZQogCSAqIGZvciB3aGljaCBjcHVzIHJlY2VpdmUgdGhlIElQSSBpbiBnZW5hcGljX2ZsYXQuYy4gSG9sZGluZyB0aGlzCiAJICogbG9jayBoZWxwcyB1cyB0byBub3QgaW5jbHVkZSB0aGlzIGNwdSBpbiBhIGN1cnJlbnRseSBpbiBwcm9ncmVzcwogCSAqIHNtcF9jYWxsX2Z1bmN0aW9uKCkuCkBAIC02OTQsNyArNjk1LDcgQEAKIAkJY2xlYXJfbm9kZV9jcHVtYXNrKGNwdSk7IC8qIHdhcyBzZXQgYnkgbnVtYV9hZGRfY3B1ICovCiAJCWNwdV9jbGVhcihjcHUsIGNwdV9wcmVzZW50X21hcCk7CiAJCWNwdV9jbGVhcihjcHUsIGNwdV9wb3NzaWJsZV9tYXApOwotCQl4ODZfY3B1X3RvX2FwaWNpZFtjcHVdID0gQkFEX0FQSUNJRDsKKwkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9IEJBRF9BUElDSUQ7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtODQxLDYgKzg0MiwyNiBAQAogfQogCiAvKgorICogQ29weSBhcGljaWQncyBmb3VuZCBieSBNUF9wcm9jZXNzb3JfaW5mbyBmcm9tIGluaXRpYWwgYXJyYXkgdG8gdGhlIHBlciBjcHUKKyAqIGRhdGEgYXJlYS4gIFRoZSB4ODZfY3B1X3RvX2FwaWNpZF9pbml0IGFycmF5IGlzIHRoZW4gZXhwZW5kYWJsZSBhbmQgdGhlCisgKiB4ODZfY3B1X3RvX2FwaWNpZF9wdHIgaXMgemVyb2VkIGluZGljYXRpbmcgdGhhdCB0aGUgc3RhdGljIGFycmF5IGlzIG5vCisgKiBsb25nZXIgYXZhaWxhYmxlLgorICovCit2b2lkIF9faW5pdCBzbXBfc2V0X2FwaWNpZHModm9pZCkKK3sKKwlpbnQgY3B1OworCisJZm9yX2VhY2hfY3B1X21hc2soY3B1LCBjcHVfcG9zc2libGVfbWFwKSB7CisJCWlmIChwZXJfY3B1X29mZnNldChjcHUpKQorCQkJcGVyX2NwdSh4ODZfY3B1X3RvX2FwaWNpZCwgY3B1KSA9CisJCQkJCQl4ODZfY3B1X3RvX2FwaWNpZF9pbml0W2NwdV07CisJfQorCisJLyogaW5kaWNhdGUgdGhlIHN0YXRpYyBhcnJheSB3aWxsIGJlIGdvaW5nIGF3YXkgc29vbiAqLworCXg4Nl9jcHVfdG9fYXBpY2lkX3B0ciA9IE5VTEw7Cit9CisKKy8qCiAgKiBQcmVwYXJlIGZvciBTTVAgYm9vdHVwLiAgVGhlIE1QIHRhYmxlIG9yIEFDUEkgaGFzIGJlZW4gcmVhZAogICogZWFybGllci4gIEp1c3QgZG8gc29tZSBzYW5pdHkgY2hlY2tpbmcgaGVyZSBhbmQgZW5hYmxlIEFQSUMgbW9kZS4KICAqLwpAQCAtODQ5LDYgKzg3MCw3IEBACiAJbm1pX3dhdGNoZG9nX2RlZmF1bHQoKTsKIAljdXJyZW50X2NwdV9kYXRhID0gYm9vdF9jcHVfZGF0YTsKIAljdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSA9IDA7ICAvKiBuZWVkZWQ/ICovCisJc21wX3NldF9hcGljaWRzKCk7CiAJc2V0X2NwdV9zaWJsaW5nX21hcCgwKTsKIAogCWlmIChzbXBfc2FuaXR5X2NoZWNrKG1heF9jcHVzKSA8IDApIHsKQEAgLTk2OCw3ICs5OTAsNyBAQAogc3RhdGljIHZvaWQgcmVtb3ZlX3NpYmxpbmdpbmZvKGludCBjcHUpCiB7CiAJaW50IHNpYmxpbmc7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjID0gY3B1X2RhdGE7CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGNwdSk7CiAKIAlmb3JfZWFjaF9jcHVfbWFzayhzaWJsaW5nLCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSkgewogCQljcHVfY2xlYXIoY3B1LCBwZXJfY3B1KGNwdV9jb3JlX21hcCwgc2libGluZykpOwpAQCAtOTc2LDE1ICs5OTgsMTUgQEAKIAkJICogbGFzdCB0aHJlYWQgc2libGluZyBpbiB0aGlzIGNwdSBjb3JlIGdvaW5nIGRvd24KIAkJICovCiAJCWlmIChjcHVzX3dlaWdodChwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkgPT0gMSkKLQkJCWNbc2libGluZ10uYm9vdGVkX2NvcmVzLS07CisJCQljcHVfZGF0YShzaWJsaW5nKS5ib290ZWRfY29yZXMtLTsKIAl9CiAJCQkKIAlmb3JfZWFjaF9jcHVfbWFzayhzaWJsaW5nLCBwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKIAkJY3B1X2NsZWFyKGNwdSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsIHNpYmxpbmcpKTsKIAljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFwLCBjcHUpKTsKIAljcHVzX2NsZWFyKHBlcl9jcHUoY3B1X2NvcmVfbWFwLCBjcHUpKTsKLQljW2NwdV0ucGh5c19wcm9jX2lkID0gMDsKLQljW2NwdV0uY3B1X2NvcmVfaWQgPSAwOworCWMtPnBoeXNfcHJvY19pZCA9IDA7CisJYy0+Y3B1X2NvcmVfaWQgPSAwOwogCWNwdV9jbGVhcihjcHUsIGNwdV9zaWJsaW5nX3NldHVwX21hcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zdW1taXRfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9zdW1taXRfMzIuYwppbmRleCA5MWM3YWNjLi43MmY0NjM0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3VtbWl0XzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N1bW1pdF8zMi5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAlzd2l0Y2ggKHJpb19kZXZzW3dwZWdfbnVtXS0+dHlwZSl7CiAJY2FzZSBDb21wYXRXUEVHOgotCQkvKiBUaGUgQ29tcGF0YWJpbGl0eSBXaW5uaXBlZyBjb250cm9scyB0aGUgMiBsZWdhY3kgYnVzZXMsCisJCS8qIFRoZSBDb21wYXRpYmlsaXR5IFdpbm5pcGVnIGNvbnRyb2xzIHRoZSAyIGxlZ2FjeSBidXNlcywKIAkJICogdGhlIDY2TUh6IFBDSSBidXMgWzIgc2xvdHNdIGFuZCB0aGUgMiAiZXh0cmEiIGJ1c2VzIGluIGNhc2UKIAkJICogYSBQQ0ktUENJIGJyaWRnZSBjYXJkIGlzIHVzZWQgaW4gZWl0aGVyIHNsb3Q6IHRvdGFsIDUgYnVzZXMuCiAJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N1c3BlbmRfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zdXNwZW5kXzY0LmMKaW5kZXggNTczYzBhNi4uYmM5ZjU5YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N1c3BlbmRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3VzcGVuZF82NC5jCkBAIC0zMiw5ICszMiw5IEBACiAJLyoKIAkgKiBkZXNjcmlwdG9yIHRhYmxlcwogCSAqLwotCWFzbSB2b2xhdGlsZSAoInNnZHQgJTAiIDogIj1tIiAoY3R4dC0+Z2R0X2xpbWl0KSk7Ci0JYXNtIHZvbGF0aWxlICgic2lkdCAlMCIgOiAiPW0iIChjdHh0LT5pZHRfbGltaXQpKTsKLQlhc20gdm9sYXRpbGUgKCJzdHIgJTAiICA6ICI9bSIgKGN0eHQtPnRyKSk7CisJc3RvcmVfZ2R0KChzdHJ1Y3QgZGVzY19wdHIgKikmY3R4dC0+Z2R0X2xpbWl0KTsKKwlzdG9yZV9pZHQoKHN0cnVjdCBkZXNjX3B0ciAqKSZjdHh0LT5pZHRfbGltaXQpOworCXN0b3JlX3RyKGN0eHQtPnRyKTsKIAogCS8qIFhNTTAuLlhNTTE1IHNob3VsZCBiZSBoYW5kbGVkIGJ5IGtlcm5lbF9mcHVfYmVnaW4oKS4gKi8KIAkvKgpAQCAtOTEsOCArOTEsOSBAQAogCSAqIG5vdyByZXN0b3JlIHRoZSBkZXNjcmlwdG9yIHRhYmxlcyB0byB0aGVpciBwcm9wZXIgdmFsdWVzCiAJICogbHRyIGlzIGRvbmUgaSBmaXhfcHJvY2Vzc29yX2NvbnRleHQoKS4KIAkgKi8KLQlhc20gdm9sYXRpbGUgKCJsZ2R0ICUwIiA6OiAibSIgKGN0eHQtPmdkdF9saW1pdCkpOwotCWFzbSB2b2xhdGlsZSAoImxpZHQgJTAiIDo6ICJtIiAoY3R4dC0+aWR0X2xpbWl0KSk7CisJbG9hZF9nZHQoKGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqKSZjdHh0LT5nZHRfbGltaXQpOworCWxvYWRfaWR0KChjb25zdCBzdHJ1Y3QgZGVzY19wdHIgKikmY3R4dC0+aWR0X2xpbWl0KTsKKwogCiAJLyoKIAkgKiBzZWdtZW50IHJlZ2lzdGVycwpAQCAtMTIzLDcgKzEyNCw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgdHNzX3N0cnVjdCAqdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOwogCi0Jc2V0X3Rzc19kZXNjKGNwdSx0KTsJLyogVGhpcyBqdXN0IG1vZGlmaWVzIG1lbW9yeTsgc2hvdWxkIG5vdCBiZSBuZWNjZXNzYXJ5LiBCdXQuLi4gVGhpcyBpcyBuZWNjZXNzYXJ5LCBiZWNhdXNlIDM4NiBoYXJkd2FyZSBoYXMgY29uY2VwdCBvZiBidXN5IFRTUyBvciBzb21lIHNpbWlsYXIgc3R1cGlkaXR5LiAqLworCXNldF90c3NfZGVzYyhjcHUsdCk7CS8qIFRoaXMganVzdCBtb2RpZmllcyBtZW1vcnk7IHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LiBCdXQuLi4gVGhpcyBpcyBuZWNlc3NhcnksIGJlY2F1c2UgMzg2IGhhcmR3YXJlIGhhcyBjb25jZXB0IG9mIGJ1c3kgVFNTIG9yIHNvbWUgc2ltaWxhciBzdHVwaWRpdHkuICovCiAKIAljcHVfZ2R0KGNwdSlbR0RUX0VOVFJZX1RTU10udHlwZSA9IDk7CiAKQEAgLTE1MCw4ICsxNTEsMjIgQEAKIC8qIERlZmluZWQgaW4gYXJjaC94ODZfNjQva2VybmVsL3N1c3BlbmRfYXNtLlMgKi8KIGV4dGVybiBpbnQgcmVzdG9yZV9pbWFnZSh2b2lkKTsKIAorLyoKKyAqIEFkZHJlc3MgdG8ganVtcCB0byBpbiB0aGUgbGFzdCBwaGFzZSBvZiByZXN0b3JlIGluIG9yZGVyIHRvIGdldCB0byB0aGUgaW1hZ2UKKyAqIGtlcm5lbCdzIHRleHQgKHRoaXMgdmFsdWUgaXMgcGFzc2VkIGluIHRoZSBpbWFnZSBoZWFkZXIpLgorICovCit1bnNpZ25lZCBsb25nIHJlc3RvcmVfanVtcF9hZGRyZXNzOworCisvKgorICogVmFsdWUgb2YgdGhlIGNyMyByZWdpc3RlciBmcm9tIGJlZm9yZSB0aGUgaGliZXJuYXRpb24gKHRoaXMgdmFsdWUgaXMgcGFzc2VkCisgKiBpbiB0aGUgaW1hZ2UgaGVhZGVyKS4KKyAqLwordW5zaWduZWQgbG9uZyByZXN0b3JlX2NyMzsKKwogcGdkX3QgKnRlbXBfbGV2ZWw0X3BndDsKIAordm9pZCAqcmVsb2NhdGVkX3Jlc3RvcmVfY29kZTsKKwogc3RhdGljIGludCByZXNfcGh5c19wdWRfaW5pdChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCWxvbmcgaSwgajsKQEAgLTE3NSw3ICsxOTAsNyBAQAogCiAJCQlpZiAocGFkZHIgPj0gZW5kKQogCQkJCWJyZWFrOwotCQkJcGUgPSBfUEFHRV9OWCB8IF9QQUdFX1BTRSB8IF9LRVJOUEdfVEFCTEUgfCBwYWRkcjsKKwkJCXBlID0gX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDIHwgcGFkZHI7CiAJCQlwZSAmPSBfX3N1cHBvcnRlZF9wdGVfbWFzazsKIAkJCXNldF9wbWQocG1kLCBfX3BtZChwZSkpOwogCQl9CkBAIC0xODMsMjUgKzE5OCw0MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHJlc19rZXJuZWxfdGV4dF9wdWRfaW5pdChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQoreworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKworCXBtZCA9IChwbWRfdCAqKWdldF9zYWZlX3BhZ2UoR0ZQX0FUT01JQyk7CisJaWYgKCFwbWQpCisJCXJldHVybiAtRU5PTUVNOworCXNldF9wdWQocHVkICsgcHVkX2luZGV4KHN0YXJ0KSwgX19wdWQoX19wYShwbWQpIHwgX0tFUk5QR19UQUJMRSkpOworCWZvciAocGFkZHIgPSAwOyBwYWRkciA8IEtFUk5FTF9URVhUX1NJWkU7IHBtZCsrLCBwYWRkciArPSBQTURfU0laRSkgeworCQl1bnNpZ25lZCBsb25nIHBlOworCisJCXBlID0gX19QQUdFX0tFUk5FTF9MQVJHRV9FWEVDIHwgX1BBR0VfR0xPQkFMIHwgcGFkZHI7CisJCXBlICY9IF9fc3VwcG9ydGVkX3B0ZV9tYXNrOworCQlzZXRfcG1kKHBtZCwgX19wbWQocGUpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZXRfdXBfdGVtcG9yYXJ5X21hcHBpbmdzKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBuZXh0OworCXB1ZF90ICpwdWQ7CiAJaW50IGVycm9yOwogCiAJdGVtcF9sZXZlbDRfcGd0ID0gKHBnZF90ICopZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDKTsKIAlpZiAoIXRlbXBfbGV2ZWw0X3BndCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBJdCBpcyBzYWZlIHRvIHJldXNlIHRoZSBvcmlnaW5hbCBrZXJuZWwgbWFwcGluZyAqLwotCXNldF9wZ2QodGVtcF9sZXZlbDRfcGd0ICsgcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCksCi0JCWluaXRfbGV2ZWw0X3BndFtwZ2RfaW5kZXgoX19TVEFSVF9LRVJORUxfbWFwKV0pOwotCiAJLyogU2V0IHVwIHRoZSBkaXJlY3QgbWFwcGluZyBmcm9tIHNjcmF0Y2ggKi8KIAlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBmbl90b19rYWRkcigwKTsKIAllbmQgPSAodW5zaWduZWQgbG9uZylwZm5fdG9fa2FkZHIoZW5kX3Bmbik7CiAKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ID0gbmV4dCkgewotCQlwdWRfdCAqcHVkID0gKHB1ZF90ICopZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDKTsKKwkJcHVkID0gKHB1ZF90ICopZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDKTsKIAkJaWYgKCFwdWQpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbmV4dCA9IHN0YXJ0ICsgUEdESVJfU0laRTsKQEAgLTIxMiw3ICsyNDQsMTcgQEAKIAkJc2V0X3BnZCh0ZW1wX2xldmVsNF9wZ3QgKyBwZ2RfaW5kZXgoc3RhcnQpLAogCQkJbWtfa2VybmVsX3BnZChfX3BhKHB1ZCkpKTsKIAl9Ci0JcmV0dXJuIDA7CisKKwkvKiBTZXQgdXAgdGhlIGtlcm5lbCB0ZXh0IG1hcHBpbmcgZnJvbSBzY3JhdGNoICovCisJcHVkID0gKHB1ZF90ICopZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAoIXB1ZCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZXJyb3IgPSByZXNfa2VybmVsX3RleHRfcHVkX2luaXQocHVkLCBfX1NUQVJUX0tFUk5FTF9tYXApOworCWlmICghZXJyb3IpCisJCXNldF9wZ2QodGVtcF9sZXZlbDRfcGd0ICsgcGdkX2luZGV4KF9fU1RBUlRfS0VSTkVMX21hcCksCisJCQlfX3BnZChfX3BhKHB1ZCkgfCBfUEFHRV9UQUJMRSkpOworCisJcmV0dXJuIGVycm9yOwogfQogCiBpbnQgc3dzdXNwX2FyY2hfcmVzdW1lKHZvaWQpCkBAIC0yMjIsNiArMjY0LDEzIEBACiAJLyogV2UgaGF2ZSBnb3QgZW5vdWdoIG1lbW9yeSBhbmQgZnJvbSBub3cgb24gd2UgY2Fubm90IHJlY292ZXIgKi8KIAlpZiAoKGVycm9yID0gc2V0X3VwX3RlbXBvcmFyeV9tYXBwaW5ncygpKSkKIAkJcmV0dXJuIGVycm9yOworCisJcmVsb2NhdGVkX3Jlc3RvcmVfY29kZSA9ICh2b2lkICopZ2V0X3NhZmVfcGFnZShHRlBfQVRPTUlDKTsKKwlpZiAoIXJlbG9jYXRlZF9yZXN0b3JlX2NvZGUpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShyZWxvY2F0ZWRfcmVzdG9yZV9jb2RlLCAmY29yZV9yZXN0b3JlX2NvZGUsCisJICAgICAgICZyZXN0b3JlX3JlZ2lzdGVycyAtICZjb3JlX3Jlc3RvcmVfY29kZSk7CisKIAlyZXN0b3JlX2ltYWdlKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzYsNCArMjg1LDQzIEBACiAJdW5zaWduZWQgbG9uZyBub3NhdmVfZW5kX3BmbiA9IFBBR0VfQUxJR04oX19wYV9zeW1ib2woJl9fbm9zYXZlX2VuZCkpID4+IFBBR0VfU0hJRlQ7CiAJcmV0dXJuIChwZm4gPj0gbm9zYXZlX2JlZ2luX3BmbikgJiYgKHBmbiA8IG5vc2F2ZV9lbmRfcGZuKTsKIH0KKworc3RydWN0IHJlc3RvcmVfZGF0YV9yZWNvcmQgeworCXVuc2lnbmVkIGxvbmcganVtcF9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgY3IzOworCXVuc2lnbmVkIGxvbmcgbWFnaWM7Cit9OworCisjZGVmaW5lIFJFU1RPUkVfTUFHSUMJMHgwMTIzNDU2Nzg5QUJDREVGVUwKKworLyoqCisgKglhcmNoX2hpYmVybmF0aW9uX2hlYWRlcl9zYXZlIC0gcG9wdWxhdGUgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBwYXJ0CisgKgkJb2YgYSBoaWJlcm5hdGlvbiBpbWFnZSBoZWFkZXIKKyAqCUBhZGRyOiBhZGRyZXNzIHRvIHNhdmUgdGhlIGRhdGEgYXQKKyAqLworaW50IGFyY2hfaGliZXJuYXRpb25faGVhZGVyX3NhdmUodm9pZCAqYWRkciwgdW5zaWduZWQgaW50IG1heF9zaXplKQoreworCXN0cnVjdCByZXN0b3JlX2RhdGFfcmVjb3JkICpyZHIgPSBhZGRyOworCisJaWYgKG1heF9zaXplIDwgc2l6ZW9mKHN0cnVjdCByZXN0b3JlX2RhdGFfcmVjb3JkKSkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisJcmRyLT5qdW1wX2FkZHJlc3MgPSByZXN0b3JlX2p1bXBfYWRkcmVzczsKKwlyZHItPmNyMyA9IHJlc3RvcmVfY3IzOworCXJkci0+bWFnaWMgPSBSRVNUT1JFX01BR0lDOworCXJldHVybiAwOworfQorCisvKioKKyAqCWFyY2hfaGliZXJuYXRpb25faGVhZGVyX3Jlc3RvcmUgLSByZWFkIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZGF0YQorICoJCWZyb20gdGhlIGhpYmVybmF0aW9uIGltYWdlIGhlYWRlcgorICoJQGFkZHI6IGFkZHJlc3MgdG8gcmVhZCB0aGUgZGF0YSBmcm9tCisgKi8KK2ludCBhcmNoX2hpYmVybmF0aW9uX2hlYWRlcl9yZXN0b3JlKHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHJlc3RvcmVfZGF0YV9yZWNvcmQgKnJkciA9IGFkZHI7CisKKwlyZXN0b3JlX2p1bXBfYWRkcmVzcyA9IHJkci0+anVtcF9hZGRyZXNzOworCXJlc3RvcmVfY3IzID0gcmRyLT5jcjM7CisJcmV0dXJuIChyZHItPm1hZ2ljID09IFJFU1RPUkVfTUFHSUMpID8gMCA6IC1FSU5WQUw7Cit9CiAjZW5kaWYgLyogQ09ORklHX0hJQkVSTkFUSU9OICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3VzcGVuZF9hc21fNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9zdXNwZW5kX2FzbV82NC5TCmluZGV4IDE2ZDE4M2YuLjQ4MzQ0YjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zdXNwZW5kX2FzbV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zdXNwZW5kX2FzbV82NC5TCkBAIC0yLDggKzIsOCBAQAogICoKICAqIERpc3RyaWJ1dGUgdW5kZXIgR1BMdjIuCiAgKgotICogc3dzdXNwX2FyY2hfcmVzdW1lIG1heSBub3QgdXNlIGFueSBzdGFjaywgbm9yIGFueSB2YXJpYWJsZSB0aGF0IGlzCi0gKiBub3QgIk5vU2F2ZSIgZHVyaW5nIGNvcHlpbmcgcGFnZXM6CisgKiBzd3N1c3BfYXJjaF9yZXN1bWUgbXVzdCBub3QgdXNlIGFueSBzdGFjayBvciBhbnkgbm9ubG9jYWwgdmFyaWFibGVzIHdoaWxlCisgKiBjb3B5aW5nIHBhZ2VzOgogICoKICAqIEl0cyByZXdyaXRpbmcgb25lIGtlcm5lbCBpbWFnZSB3aXRoIGFub3RoZXIuIFdoYXQgaXMgc3RhY2sgaW4gIm9sZCIKICAqIGltYWdlIGNvdWxkIHZlcnkgd2VsbCBiZSBkYXRhIHBhZ2UgaW4gIm5ldyIgaW1hZ2UsIGFuZCBvdmVyd3JpdGluZwpAQCAtMzYsNiArMzYsMTMgQEAKIAltb3ZxICVyMTUsIHNhdmVkX2NvbnRleHRfcjE1KCVyaXApCiAJcHVzaGZxIDsgcG9wcSBzYXZlZF9jb250ZXh0X2VmbGFncyglcmlwKQogCisJLyogc2F2ZSB0aGUgYWRkcmVzcyBvZiByZXN0b3JlX3JlZ2lzdGVycyAqLworCW1vdnEJJHJlc3RvcmVfcmVnaXN0ZXJzLCAlcmF4CisJbW92cQklcmF4LCByZXN0b3JlX2p1bXBfYWRkcmVzcyglcmlwKQorCS8qIHNhdmUgY3IzICovCisJbW92cQklY3IzLCAlcmF4CisJbW92cQklcmF4LCByZXN0b3JlX2NyMyglcmlwKQorCiAJY2FsbCBzd3N1c3Bfc2F2ZQogCXJldAogCkBAIC01NCw3ICs2MSwxNyBAQAogCW1vdnEJJXJjeCwgJWNyMzsKIAltb3ZxCSVyYXgsICVjcjQ7ICAjIHR1cm4gUEdFIGJhY2sgb24KIAorCS8qIHByZXBhcmUgdG8ganVtcCB0byB0aGUgaW1hZ2Uga2VybmVsICovCisJbW92cQlyZXN0b3JlX2p1bXBfYWRkcmVzcyglcmlwKSwgJXJheAorCW1vdnEJcmVzdG9yZV9jcjMoJXJpcCksICVyYngKKworCS8qIHByZXBhcmUgdG8gY29weSBpbWFnZSBkYXRhIHRvIHRoZWlyIG9yaWdpbmFsIGxvY2F0aW9ucyAqLwogCW1vdnEJcmVzdG9yZV9wYmxpc3QoJXJpcCksICVyZHgKKwltb3ZxCXJlbG9jYXRlZF9yZXN0b3JlX2NvZGUoJXJpcCksICVyY3gKKwlqbXBxCSolcmN4CisKKwkvKiBjb2RlIGJlbG93IGhhcyBiZWVuIHJlbG9jYXRlZCB0byBhIHNhZmUgcGFnZSAqLworRU5UUlkoY29yZV9yZXN0b3JlX2NvZGUpCiBsb29wOgogCXRlc3RxCSVyZHgsICVyZHgKIAlqeglkb25lCkBAIC02Miw3ICs3OSw3IEBACiAJLyogZ2V0IGFkZHJlc3NlcyBmcm9tIHRoZSBwYmUgYW5kIGNvcHkgdGhlIHBhZ2UgKi8KIAltb3ZxCXBiZV9hZGRyZXNzKCVyZHgpLCAlcnNpCiAJbW92cQlwYmVfb3JpZ19hZGRyZXNzKCVyZHgpLCAlcmRpCi0JbW92cQkkNTEyLCAlcmN4CisJbW92cQkkKFBBR0VfU0laRSA+PiAzKSwgJXJjeAogCXJlcAogCW1vdnNxCiAKQEAgLTcwLDEwICs4NywyMiBAQAogCW1vdnEJcGJlX25leHQoJXJkeCksICVyZHgKIAlqbXAJbG9vcAogZG9uZToKKwkvKiBqdW1wIHRvIHRoZSByZXN0b3JlX3JlZ2lzdGVycyBhZGRyZXNzIGZyb20gdGhlIGltYWdlIGhlYWRlciAqLworCWptcHEJKiVyYXgKKwkvKgorCSAqIE5PVEU6IFRoaXMgYXNzdW1lcyB0aGF0IHRoZSBib290IGtlcm5lbCdzIHRleHQgbWFwcGluZyBjb3ZlcnMgdGhlCisJICogaW1hZ2Uga2VybmVsJ3MgcGFnZSBjb250YWluaW5nIHJlc3RvcmVfcmVnaXN0ZXJzIGFuZCB0aGUgYWRkcmVzcyBvZgorCSAqIHRoaXMgcGFnZSBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgaW1hZ2Uga2VybmVsJ3MgdGV4dCBtYXBwaW5nIChpdAorCSAqIHNob3VsZCBhbHdheXMgYmUgdHJ1ZSwgYmVjYXVzZSB0aGUgdGV4dCBtYXBwaW5nIGlzIGxpbmVhciwgc3RhcnRpbmcKKwkgKiBmcm9tIDAsIGFuZCBpcyBzdXBwb3NlZCB0byBjb3ZlciB0aGUgZW50aXJlIGtlcm5lbCB0ZXh0IGZvciBldmVyeQorCSAqIGtlcm5lbCkuCisJICoKKwkgKiBjb2RlIGJlbG93IGJlbG9uZ3MgdG8gdGhlIGltYWdlIGtlcm5lbAorCSAqLworCitFTlRSWShyZXN0b3JlX3JlZ2lzdGVycykKIAkvKiBnbyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwYWdlIHRhYmxlcyAqLwotCW1vdnEgICAgJChpbml0X2xldmVsNF9wZ3QgLSBfX1NUQVJUX0tFUk5FTF9tYXApLCAlcmF4Ci0JYWRkcSAgICBwaHlzX2Jhc2UoJXJpcCksICVyYXgKLQltb3ZxICAgICVyYXgsICVjcjMKKwltb3ZxICAgICVyYngsICVjcjMKIAogCS8qIEZsdXNoIFRMQiwgaW5jbHVkaW5nICJnbG9iYWwiIHRoaW5ncyAodm1hbGxvYykgKi8KIAltb3ZxCW1tdV9jcjRfZmVhdHVyZXMoJXJpcCksICVyYXgKQEAgLTg0LDEyICsxMTMsOSBAQAogCW1vdnEJJXJjeCwgJWNyMwogCW1vdnEJJXJheCwgJWNyNDsgICMgdHVybiBQR0UgYmFjayBvbgogCi0JbW92bAkkMjQsICVlYXgKLQltb3ZsCSVlYXgsICVkcwotCiAJbW92cSBzYXZlZF9jb250ZXh0X2VzcCglcmlwKSwgJXJzcAogCW1vdnEgc2F2ZWRfY29udGV4dF9lYnAoJXJpcCksICVyYnAKLQkvKiBEb24ndCByZXN0b3JlICVyYXgsIGl0IG11c3QgYmUgMCBhbnl3YXkgKi8KKwkvKiByZXN0b3JlIEdQUnMgKHdlIGRvbid0IHJlc3RvcmUgJXJheCwgaXQgbXVzdCBiZSAwIGFueXdheSkgKi8KIAltb3ZxIHNhdmVkX2NvbnRleHRfZWJ4KCVyaXApLCAlcmJ4CiAJbW92cSBzYXZlZF9jb250ZXh0X2VjeCglcmlwKSwgJXJjeAogCW1vdnEgc2F2ZWRfY29udGV4dF9lZHgoJXJpcCksICVyZHgKQEAgLTEwNyw0ICsxMzMsNyBAQAogCiAJeG9ycQklcmF4LCAlcmF4CiAKKwkvKiB0ZWxsIHRoZSBoaWJlcm5hdGlvbiBjb3JlIHRoYXQgd2UndmUganVzdCByZXN0b3JlZCB0aGUgbWVtb3J5ICovCisJbW92cQklcmF4LCBpbl9zdXNwZW5kKCVyaXApCisKIAlyZXQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwc18zMi5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMKaW5kZXggYjEzMmQzOS4uY2M5YWNhYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzMyLmMKQEAgLTYzLDYgKzYzLDkgQEAKIAogaW50IHBhbmljX29uX3VucmVjb3ZlcmVkX25taTsKIAorREVDTEFSRV9CSVRNQVAodXNlZF92ZWN0b3JzLCBOUl9WRUNUT1JTKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzZWRfdmVjdG9ycyk7CisKIGFzbWxpbmthZ2UgaW50IHN5c3RlbV9jYWxsKHZvaWQpOwogCiAvKiBEbyB3ZSBpZ25vcmUgRlBVIGludGVycnVwdHMgPyAqLwpAQCAtMjg4LDQ4ICsyOTEsMjQgQEAKIHZvaWQgc2hvd19yZWdpc3RlcnMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGk7Ci0JaW50IGluX2tlcm5lbCA9IDE7Ci0JdW5zaWduZWQgbG9uZyBlc3A7Ci0JdW5zaWduZWQgc2hvcnQgc3MsIGdzOwogCi0JZXNwID0gKHVuc2lnbmVkIGxvbmcpICgmcmVncy0+ZXNwKTsKLQlzYXZlc2VnbWVudChzcywgc3MpOwotCXNhdmVzZWdtZW50KGdzLCBncyk7Ci0JaWYgKHVzZXJfbW9kZV92bShyZWdzKSkgewotCQlpbl9rZXJuZWwgPSAwOwotCQllc3AgPSByZWdzLT5lc3A7Ci0JCXNzID0gcmVncy0+eHNzICYgMHhmZmZmOwotCX0KIAlwcmludF9tb2R1bGVzKCk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIkNQVTogICAgJWRcbiIKLQkJS0VSTl9FTUVSRyAiRUlQOiAgICAlMDR4Ols8JTA4bHg+XSAgICAlcyBWTElcbiIKLQkJS0VSTl9FTUVSRyAiRUZMQUdTOiAlMDhseCAgICglcyAlLipzKVxuIiwKLQkJc21wX3Byb2Nlc3Nvcl9pZCgpLCAweGZmZmYgJiByZWdzLT54Y3MsIHJlZ3MtPmVpcCwKLQkJcHJpbnRfdGFpbnRlZCgpLCByZWdzLT5lZmxhZ3MsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAotCQkoaW50KXN0cmNzcG4oaW5pdF91dHNuYW1lKCktPnZlcnNpb24sICIgIiksCi0JCWluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKTsKLQlwcmludF9zeW1ib2woS0VSTl9FTUVSRyAiRUlQIGlzIGF0ICVzXG4iLCByZWdzLT5laXApOwotCXByaW50ayhLRVJOX0VNRVJHICJlYXg6ICUwOGx4ICAgZWJ4OiAlMDhseCAgIGVjeDogJTA4bHggICBlZHg6ICUwOGx4XG4iLAotCQlyZWdzLT5lYXgsIHJlZ3MtPmVieCwgcmVncy0+ZWN4LCByZWdzLT5lZHgpOwotCXByaW50ayhLRVJOX0VNRVJHICJlc2k6ICUwOGx4ICAgZWRpOiAlMDhseCAgIGVicDogJTA4bHggICBlc3A6ICUwOGx4XG4iLAotCQlyZWdzLT5lc2ksIHJlZ3MtPmVkaSwgcmVncy0+ZWJwLCBlc3ApOwotCXByaW50ayhLRVJOX0VNRVJHICJkczogJTA0eCAgIGVzOiAlMDR4ICAgZnM6ICUwNHggIGdzOiAlMDR4ICBzczogJTA0eFxuIiwKLQkgICAgICAgcmVncy0+eGRzICYgMHhmZmZmLCByZWdzLT54ZXMgJiAweGZmZmYsIHJlZ3MtPnhmcyAmIDB4ZmZmZiwgZ3MsIHNzKTsKKwlfX3Nob3dfcmVnaXN0ZXJzKHJlZ3MsIDApOwogCXByaW50ayhLRVJOX0VNRVJHICJQcm9jZXNzICUuKnMgKHBpZDogJWQsIHRpPSVwIHRhc2s9JXAgdGFzay50aT0lcCkiLAotCQlUQVNLX0NPTU1fTEVOLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsCisJCVRBU0tfQ09NTV9MRU4sIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAogCQljdXJyZW50X3RocmVhZF9pbmZvKCksIGN1cnJlbnQsIHRhc2tfdGhyZWFkX2luZm8oY3VycmVudCkpOwogCS8qCiAJICogV2hlbiBpbi1rZXJuZWwsIHdlIGFsc28gcHJpbnQgb3V0IHRoZSBzdGFjayBhbmQgY29kZSBhdCB0aGUKIAkgKiB0aW1lIG9mIHRoZSBmYXVsdC4uCiAJICovCi0JaWYgKGluX2tlcm5lbCkgeworCWlmICghdXNlcl9tb2RlX3ZtKHJlZ3MpKSB7CiAJCXU4ICplaXA7CiAJCXVuc2lnbmVkIGludCBjb2RlX3Byb2xvZ3VlID0gY29kZV9ieXRlcyAqIDQzIC8gNjQ7CiAJCXVuc2lnbmVkIGludCBjb2RlX2xlbiA9IGNvZGVfYnl0ZXM7CiAJCXVuc2lnbmVkIGNoYXIgYzsKIAogCQlwcmludGsoIlxuIiBLRVJOX0VNRVJHICJTdGFjazogIik7Ci0JCXNob3dfc3RhY2tfbG9nX2x2bChOVUxMLCByZWdzLCAodW5zaWduZWQgbG9uZyAqKWVzcCwgS0VSTl9FTUVSRyk7CisJCXNob3dfc3RhY2tfbG9nX2x2bChOVUxMLCByZWdzLCAmcmVncy0+ZXNwLCBLRVJOX0VNRVJHKTsKIAogCQlwcmludGsoS0VSTl9FTUVSRyAiQ29kZTogIik7CiAKQEAgLTM3NCwxMSArMzUzLDExIEBACiB2b2lkIGRpZShjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyKQogewogCXN0YXRpYyBzdHJ1Y3QgewotCQlzcGlubG9ja190IGxvY2s7CisJCXJhd19zcGlubG9ja190IGxvY2s7CiAJCXUzMiBsb2NrX293bmVyOwogCQlpbnQgbG9ja19vd25lcl9kZXB0aDsKIAl9IGRpZSA9IHsKLQkJLmxvY2sgPQkJCV9fU1BJTl9MT0NLX1VOTE9DS0VEKGRpZS5sb2NrKSwKKwkJLmxvY2sgPQkJCV9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRCwKIAkJLmxvY2tfb3duZXIgPQkJLTEsCiAJCS5sb2NrX293bmVyX2RlcHRoID0JMAogCX07CkBAIC0zODksMTMgKzM2OCwxNCBAQAogCiAJaWYgKGRpZS5sb2NrX293bmVyICE9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpIHsKIAkJY29uc29sZV92ZXJib3NlKCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkaWUubG9jaywgZmxhZ3MpOworCQlfX3Jhd19zcGluX2xvY2soJmRpZS5sb2NrKTsKKwkJcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCQlkaWUubG9ja19vd25lciA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAkJZGllLmxvY2tfb3duZXJfZGVwdGggPSAwOwogCQlidXN0X3NwaW5sb2NrcygxKTsKIAl9CiAJZWxzZQotCQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwkJcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwogCiAJaWYgKCsrZGllLmxvY2tfb3duZXJfZGVwdGggPCAzKSB7CiAJCXVuc2lnbmVkIGxvbmcgZXNwOwpAQCAtNDM5LDcgKzQxOSw4IEBACiAJYnVzdF9zcGlubG9ja3MoMCk7CiAJZGllLmxvY2tfb3duZXIgPSAtMTsKIAlhZGRfdGFpbnQoVEFJTlRfRElFKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWUubG9jaywgZmxhZ3MpOworCV9fcmF3X3NwaW5fdW5sb2NrKCZkaWUubG9jayk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCWlmICghcmVncykKIAkJcmV0dXJuOwpAQCAtNjIyLDcgKzYwMyw3IEBACiAJICAgIHByaW50a19yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fSU5GTwogCQkgICAgIiVzWyVkXSBnZW5lcmFsIHByb3RlY3Rpb24gZWlwOiVseCBlc3A6JWx4IGVycm9yOiVseFxuIiwKLQkJICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAogCQkgICAgcmVncy0+ZWlwLCByZWdzLT5lc3AsIGVycm9yX2NvZGUpOwogCiAJZm9yY2Vfc2lnKFNJR1NFR1YsIGN1cnJlbnQpOwpAQCAtMTE0Miw2ICsxMTIzLDggQEAKIAogdm9pZCBfX2luaXQgdHJhcF9pbml0KHZvaWQpCiB7CisJaW50IGk7CisKICNpZmRlZiBDT05GSUdfRUlTQQogCXZvaWQgX19pb21lbSAqcCA9IGlvcmVtYXAoMHgwRkZGRDksIDQpOwogCWlmIChyZWFkbChwKSA9PSAnRScrKCdJJzw8OCkrKCdTJzw8MTYpKygnQSc8PDI0KSkgewpAQCAtMTIwMSw2ICsxMTg0LDExIEBACiAKIAlzZXRfc3lzdGVtX2dhdGUoU1lTQ0FMTF9WRUNUT1IsJnN5c3RlbV9jYWxsKTsKIAorCS8qIFJlc2VydmUgYWxsIHRoZSBidWlsdGluIGFuZCB0aGUgc3lzY2FsbCB2ZWN0b3IuICovCisJZm9yIChpID0gMDsgaSA8IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUjsgaSsrKQorCQlzZXRfYml0KGksIHVzZWRfdmVjdG9ycyk7CisJc2V0X2JpdChTWVNDQUxMX1ZFQ1RPUiwgdXNlZF92ZWN0b3JzKTsKKwogCS8qCiAJICogU2hvdWxkIGJlIGEgYmFycmllciBmb3IgYW55IGV4dGVybmFsIENQVSBzdGF0ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90cmFwc182NC5jIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMKaW5kZXggYjRhOWIzZC4uZDBjMmJjNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RyYXBzXzY0LmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogI2RlZmluZSBNU0codHh0KSBvcHMtPndhcm5pbmcoZGF0YSwgdHh0KQogCiAvKgotICogeDg2LTY0IGNhbiBoYXZlIHVwdG8gdGhyZWUga2VybmVsIHN0YWNrczogCisgKiB4ODYtNjQgY2FuIGhhdmUgdXAgdG8gdGhyZWUga2VybmVsIHN0YWNrczogCiAgKiBwcm9jZXNzIHN0YWNrCiAgKiBpbnRlcnJ1cHQgc3RhY2sKICAqIHNldmVyZSBleGNlcHRpb24gKGRvdWJsZSBmYXVsdCwgbm1pLCBzdGFjayBmYXVsdCwgZGVidWcsIG1jZSkgaGFyZHdhcmUgc3RhY2sKQEAgLTQ2Miw3ICs0NjIsNyBAQAogRVhQT1JUX1NZTUJPTChvdXRfb2ZfbGluZV9idWcpOwogI2VuZGlmCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGllX2xvY2spOworc3RhdGljIHJhd19zcGlubG9ja190IGRpZV9sb2NrID0gX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEOwogc3RhdGljIGludCBkaWVfb3duZXIgPSAtMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGllX25lc3RfY291bnQ7CiAKQEAgLTQ3NCwxMyArNDc0LDEzIEBACiAJb29wc19lbnRlcigpOwogCiAJLyogcmFjeSwgYnV0IGJldHRlciB0aGFuIHJpc2tpbmcgZGVhZGxvY2suICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWlmICghc3Bpbl90cnlsb2NrKCZkaWVfbG9jaykpIHsgCisJaWYgKCFfX3Jhd19zcGluX3RyeWxvY2soJmRpZV9sb2NrKSkgewogCQlpZiAoY3B1ID09IGRpZV9vd25lcikgCiAJCQkvKiBuZXN0ZWQgb29wcy4gc2hvdWxkIHN0b3AgZXZlbnR1YWxseSAqLzsKIAkJZWxzZQotCQkJc3Bpbl9sb2NrKCZkaWVfbG9jayk7CisJCQlfX3Jhd19zcGluX2xvY2soJmRpZV9sb2NrKTsKIAl9CiAJZGllX25lc3RfY291bnQrKzsKIAlkaWVfb3duZXIgPSBjcHU7CkBAIC00OTQsMTIgKzQ5NCwxMCBAQAogCWRpZV9vd25lciA9IC0xOwogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCWRpZV9uZXN0X2NvdW50LS07Ci0JaWYgKGRpZV9uZXN0X2NvdW50KQotCQkvKiBXZSBzdGlsbCBvd24gdGhlIGxvY2sgKi8KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCWVsc2UKKwlpZiAoIWRpZV9uZXN0X2NvdW50KQogCQkvKiBOZXN0IGNvdW50IHJlYWNoZXMgemVybywgcmVsZWFzZSB0aGUgbG9jay4gKi8KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGllX2xvY2ssIGZsYWdzKTsKKwkJX19yYXdfc3Bpbl91bmxvY2soJmRpZV9sb2NrKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7CiAJb29wc19leGl0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdHNjXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjXzMyLmMKaW5kZXggZTg3YTM5My4uZDc4NDQ0YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3RzY18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC90c2NfMzIuYwpAQCAtNTksNyArNTksNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfdHNjX3Vuc3RhYmxlKTsKIAotLyogQWNjZWxsZXJhdG9ycyBmb3Igc2NoZWRfY2xvY2soKQorLyogQWNjZWxlcmF0b3JzIGZvciBzY2hlZF9jbG9jaygpCiAgKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKICAqICBiYXNpYyBlcXVhdGlvbjoKICAqCQlucyA9IGN5Y2xlcyAvIChmcmVxIC8gbnNfcGVyX3NlYykKQEAgLTc0LDcgKzc0LDcgQEAKICAqCUFuZCBzaW5jZSBTQyBpcyBhIGNvbnN0YW50IHBvd2VyIG9mIHR3bywgd2UgY2FuIGNvbnZlcnQgdGhlIGRpdgogICogIGludG8gYSBzaGlmdC4KICAqCi0gKiAgV2UgY2FuIHVzZSBraHogZGl2aXNvciBpbnN0ZWFkIG9mIG1oeiB0byBrZWVwIGEgYmV0dGVyIHBlcmNpc2lvbiwgc2luY2UKKyAqICBXZSBjYW4gdXNlIGtoeiBkaXZpc29yIGluc3RlYWQgb2YgbWh6IHRvIGtlZXAgYSBiZXR0ZXIgcHJlY2lzaW9uLCBzaW5jZQogICogIGN5YzJuc19zY2FsZSBpcyBsaW1pdGVkIHRvIDEwXjYgKiAyXjEwLCB3aGljaCBmaXRzIGluIDMyIGJpdHMuCiAgKiAgKG1hdGhpZXUuZGVzbm95ZXJzQHBvbHltdGwuY2EpCiAgKgpAQCAtMTgxLDggKzE4MSw4IEBACiAJaWYgKGNwdV9oYXNfdHNjKSB7CiAJCWNwdV9raHogPSBjYWxjdWxhdGVfY3B1X2toeigpOwogCQl0c2Nfa2h6ID0gY3B1X2toejsKLQkJY3B1X2RhdGFbMF0ubG9vcHNfcGVyX2ppZmZ5ID0KLQkJCWNwdWZyZXFfc2NhbGUoY3B1X2RhdGFbMF0ubG9vcHNfcGVyX2ppZmZ5LAorCQljcHVfZGF0YSgwKS5sb29wc19wZXJfamlmZnkgPQorCQkJY3B1ZnJlcV9zY2FsZShjcHVfZGF0YSgwKS5sb29wc19wZXJfamlmZnksCiAJCQkJCWNwdV9raHpfb2xkLCBjcHVfa2h6KTsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlCkBAIC0yMTUsNyArMjE1LDcgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJCXJlZl9mcmVxID0gZnJlcS0+b2xkOwotCQlsb29wc19wZXJfamlmZnlfcmVmID0gY3B1X2RhdGFbZnJlcS0+Y3B1XS5sb29wc19wZXJfamlmZnk7CisJCWxvb3BzX3Blcl9qaWZmeV9yZWYgPSBjcHVfZGF0YShmcmVxLT5jcHUpLmxvb3BzX3Blcl9qaWZmeTsKIAkJY3B1X2toel9yZWYgPSBjcHVfa2h6OwogCX0KIApAQCAtMjIzLDcgKzIyMyw3IEBACiAJICAgICh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGZyZXEtPm9sZCA+IGZyZXEtPm5ldykgfHwKIAkgICAgKHZhbCA9PSBDUFVGUkVRX1JFU1VNRUNIQU5HRSkpIHsKIAkJaWYgKCEoZnJlcS0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkKLQkJCWNwdV9kYXRhW2ZyZXEtPmNwdV0ubG9vcHNfcGVyX2ppZmZ5ID0KKwkJCWNwdV9kYXRhKGZyZXEtPmNwdSkubG9vcHNfcGVyX2ppZmZ5ID0KIAkJCQljcHVmcmVxX3NjYWxlKGxvb3BzX3Blcl9qaWZmeV9yZWYsCiAJCQkJCQlyZWZfZnJlcSwgZnJlcS0+bmV3KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzY182NC5jIGIvYXJjaC94ODYva2VybmVsL3RzY182NC5jCmluZGV4IDlmMjJlNTQuLjljNzBhZjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2NfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjXzY0LmMKQEAgLTczLDEzICs3MywxMyBAQAogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxID0gZGF0YTsKIAl1bnNpZ25lZCBsb25nICpscGosIGR1bW15OwogCi0JaWYgKGNwdV9oYXMoJmNwdV9kYXRhW2ZyZXEtPmNwdV0sIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpCisJaWYgKGNwdV9oYXMoJmNwdV9kYXRhKGZyZXEtPmNwdSksIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQykpCiAJCXJldHVybiAwOwogCiAJbHBqID0gJmR1bW15OwogCWlmICghKGZyZXEtPmZsYWdzICYgQ1BVRlJFUV9DT05TVF9MT09QUykpCiAjaWZkZWYgQ09ORklHX1NNUAotCQlscGogPSAmY3B1X2RhdGFbZnJlcS0+Y3B1XS5sb29wc19wZXJfamlmZnk7CisJCWxwaiA9ICZjcHVfZGF0YShmcmVxLT5jcHUpLmxvb3BzX3Blcl9qaWZmeTsKICNlbHNlCiAJCWxwaiA9ICZib290X2NwdV9kYXRhLmxvb3BzX3Blcl9qaWZmeTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYwppbmRleCA4YTY3ZTI4Li5hZDQwMDVjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdnN5c2NhbGxfNjQuYwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAJKHt1bnNpZ25lZCBsb25nIHY7ICAJCVwKIAlleHRlcm4gY2hhciBfX3ZzeXNjYWxsXzA7IAlcCiAJICBhc20oIiIgOiAiPXIiICh2KSA6ICIwIiAoeCkpOyBcCi0JICAoKHYgLSBWU1lTQ0FMTF9GSVJTVF9QQUdFKSArIF9fcGFfc3ltYm9sKCZfX3ZzeXNjYWxsXzApKTsgfSkKKwkgICgodiAtIFZTWVNDQUxMX1NUQVJUKSArIF9fcGFfc3ltYm9sKCZfX3ZzeXNjYWxsXzApKTsgfSkKIAogLyoKICAqIHZzeXNjYWxsX2d0b2RfZGF0YSBjb250YWlucyBkYXRhIHRoYXQgaXMgOgogICogLSByZWFkb25seSBmcm9tIHZzeXNjYWxscwotICogLSB3cml0ZW4gYnkgdGltZXIgaW50ZXJydXB0IG9yIHN5c3RjbCAoL3Byb2Mvc3lzL2tlcm5lbC92c3lzY2FsbDY0KQorICogLSB3cml0dGVuIGJ5IHRpbWVyIGludGVycnVwdCBvciBzeXN0Y2wgKC9wcm9jL3N5cy9rZXJuZWwvdnN5c2NhbGw2NCkKICAqIFRyeSB0byBrZWVwIHRoaXMgc3RydWN0dXJlIGFzIHNtYWxsIGFzIHBvc3NpYmxlIHRvIGF2b2lkIGNhY2hlIGxpbmUgcGluZyBwb25ncwogICovCiBpbnQgX192Z2V0Y3B1X21vZGUgX19zZWN0aW9uX3ZnZXRjcHVfbW9kZTsKQEAgLTY0LDYgKzY0LDE2IEBACiAJLnN5c2N0bF9lbmFibGVkID0gMSwKIH07CiAKK3ZvaWQgdXBkYXRlX3ZzeXNjYWxsX3R6KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmdnN5c2NhbGxfZ3RvZF9kYXRhLmxvY2ssIGZsYWdzKTsKKwkvKiBzeXNfdHogaGFzIGNoYW5nZWQgKi8KKwl2c3lzY2FsbF9ndG9kX2RhdGEuc3lzX3R6ID0gc3lzX3R6OworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ2c3lzY2FsbF9ndG9kX2RhdGEubG9jaywgZmxhZ3MpOworfQorCiB2b2lkIHVwZGF0ZV92c3lzY2FsbChzdHJ1Y3QgdGltZXNwZWMgKndhbGxfdGltZSwgc3RydWN0IGNsb2Nrc291cmNlICpjbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzcsNyArODcsNiBAQAogCXZzeXNjYWxsX2d0b2RfZGF0YS5jbG9jay5zaGlmdCA9IGNsb2NrLT5zaGlmdDsKIAl2c3lzY2FsbF9ndG9kX2RhdGEud2FsbF90aW1lX3NlYyA9IHdhbGxfdGltZS0+dHZfc2VjOwogCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RpbWVfbnNlYyA9IHdhbGxfdGltZS0+dHZfbnNlYzsKLQl2c3lzY2FsbF9ndG9kX2RhdGEuc3lzX3R6ID0gc3lzX3R6OwogCXZzeXNjYWxsX2d0b2RfZGF0YS53YWxsX3RvX21vbm90b25pYyA9IHdhbGxfdG9fbW9ub3RvbmljOwogCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ2c3lzY2FsbF9ndG9kX2RhdGEubG9jaywgZmxhZ3MpOwogfQpAQCAtMTYzLDcgKzE3Miw3IEBACiAJaWYgKHVubGlrZWx5KCFfX3ZzeXNjYWxsX2d0b2RfZGF0YS5zeXNjdGxfZW5hYmxlZCkpCiAJCXJldHVybiB0aW1lX3N5c2NhbGwodCk7CiAKLQl2Z2V0dGltZW9mZGF5KCZ0diwgMCk7CisJdmdldHRpbWVvZmRheSgmdHYsIE5VTEwpOwogCXJlc3VsdCA9IHR2LnR2X3NlYzsKIAlpZiAodCkKIAkJKnQgPSByZXN1bHQ7CkBAIC0yNTcsMTggKzI2NiwxMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdnN5c2NhbGxfc3lzY3RsX25vc3RyYXQoY3RsX3RhYmxlICp0LCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKLQkJCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAotCQkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KIHN0YXRpYyBjdGxfdGFibGUga2VybmVsX3RhYmxlMltdID0gewotCXsgLmN0bF9uYW1lID0gOTksIC5wcm9jbmFtZSA9ICJ2c3lzY2FsbDY0IiwKKwl7IC5wcm9jbmFtZSA9ICJ2c3lzY2FsbDY0IiwKIAkgIC5kYXRhID0gJnZzeXNjYWxsX2d0b2RfZGF0YS5zeXNjdGxfZW5hYmxlZCwgLm1heGxlbiA9IHNpemVvZihpbnQpLAogCSAgLm1vZGUgPSAwNjQ0LAotCSAgLnN0cmF0ZWd5ID0gdnN5c2NhbGxfc3lzY3RsX25vc3RyYXQsCiAJICAucHJvY19oYW5kbGVyID0gdnN5c2NhbGxfc3lzY3RsX2NoYW5nZSB9LAogCXt9CiB9OwpAQCAtMjkwLDcgKzI5MSw3IEBACiAjaWZkZWYgQ09ORklHX05VTUEKIAlub2RlID0gY3B1X3RvX25vZGUoY3B1KTsKICNlbmRpZgotCWlmIChjcHVfaGFzKCZjcHVfZGF0YVtjcHVdLCBYODZfRkVBVFVSRV9SRFRTQ1ApKQorCWlmIChjcHVfaGFzKCZjcHVfZGF0YShjcHUpLCBYODZfRkVBVFVSRV9SRFRTQ1ApKQogCQl3cml0ZV9yZHRzY3BfYXV4KChub2RlIDw8IDEyKSB8IGNwdSk7CiAKIAkvKiBTdG9yZSBjcHUgbnVtYmVyIGluIGxpbWl0IHNvIHRoYXQgaXQgY2FuIGJlIGxvYWRlZCBxdWlja2x5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvZGVsYXlfMzIuYyBiL2FyY2gveDg2L2xpYi9kZWxheV8zMi5jCmluZGV4IGY2ZWRiMTEuLjk1MmU3YTggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9kZWxheV8zMi5jCisrKyBiL2FyY2gveDg2L2xpYi9kZWxheV8zMi5jCkBAIC04Miw3ICs4Miw3IEBACiAJX19hc21fXygibXVsbCAlMCIKIAkJOiI9ZCIgKHhsb29wcyksICI9JmEiIChkMCkKIAkJOiIxIiAoeGxvb3BzKSwgIjAiCi0JCShjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkgKiAoSFovNCkpKTsKKwkJKGNwdV9kYXRhKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLmxvb3BzX3Blcl9qaWZmeSAqIChIWi80KSkpOwogCiAJX19kZWxheSgrK3hsb29wcyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvZGVsYXlfNjQuYyBiL2FyY2gveDg2L2xpYi9kZWxheV82NC5jCmluZGV4IDJkYmViZDMuLjBlYmJmYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9kZWxheV82NC5jCisrKyBiL2FyY2gveDg2L2xpYi9kZWxheV82NC5jCkBAIC00MCw3ICs0MCw4IEBACiAKIGlubGluZSB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcgeGxvb3BzKQogewotCV9fZGVsYXkoKCh4bG9vcHMgKiBIWiAqIGNwdV9kYXRhW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldLmxvb3BzX3Blcl9qaWZmeSkgPj4gMzIpICsgMSk7CisJX19kZWxheSgoKHhsb29wcyAqIEhaICoKKwkJY3B1X2RhdGEocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkubG9vcHNfcGVyX2ppZmZ5KSA+PiAzMikgKyAxKTsKIH0KIEVYUE9SVF9TWU1CT0woX19jb25zdF91ZGVsYXkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvdXNlcmNvcHlfMzIuYyBiL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jCmluZGV4IDlmMzhiMTIuLjhiYWIyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jCisrKyBiL2FyY2gveDg2L2xpYi91c2VyY29weV8zMi5jCkBAIC03NDgsNyArNzQ4LDcgQEAKIAkJCXJldHZhbCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLAogCQkJCQkodW5zaWduZWQgbG9uZyApdG8sIDEsIDEsIDAsICZwZywgTlVMTCk7CiAKLQkJCWlmIChyZXR2YWwgPT0gLUVOT01FTSAmJiBpc19pbml0KGN1cnJlbnQpKSB7CisJCQlpZiAocmV0dmFsID09IC1FTk9NRU0gJiYgaXNfZ2xvYmFsX2luaXQoY3VycmVudCkpIHsKIAkJCQl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQkJCWNvbmdlc3Rpb25fd2FpdChXUklURSwgSFovNTApOwogCQkJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtZGVmYXVsdC9zZXR1cC5jIGIvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKaW5kZXggM2YwODAxMC4uMGMyOGEwNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKKysrIGIvYXJjaC94ODYvbWFjaC1kZWZhdWx0L3NldHVwLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogICogbWNhX25taV9ob29rIC0gaG9vayBpbnRvIE1DQSBzcGVjaWZpYyBOTUkgY2hhaW4KICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqCVRoZSBNQ0EgKE1pY3JvY2hhbm5lbCBBcmNpdGVjdHVyZSkgaGFzIGFuIE5NSSBjaGFpbiBmb3IgTk1JIHNvdXJjZXMKKyAqCVRoZSBNQ0EgKE1pY3JvY2hhbm5lbCBBcmNoaXRlY3R1cmUpIGhhcyBhbiBOTUkgY2hhaW4gZm9yIE5NSSBzb3VyY2VzCiAgKglhbG9uZyB0aGUgTUNBIGJ1cy4gIFVzZSB0aGlzIHRvIGhvb2sgaW50byB0aGF0IGNoYWluIGlmIHlvdSB3aWxsIG5lZWQKICAqCWl0LgogICoqLwpAQCAtMTMxLDcgKzEzMSw3IEBACiAJcmV0dXJuIDE7CiB9CiAKLV9fc2V0dXAoIm5vX2lwaV9icm9hZGNhc3QiLCBub19pcGlfYnJvYWRjYXN0KTsKK19fc2V0dXAoIm5vX2lwaV9icm9hZGNhc3Q9Iiwgbm9faXBpX2Jyb2FkY2FzdCk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHByaW50X2lwaV9tb2RlKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jIGIvYXJjaC94ODYvbWFjaC1nZW5lcmljL2RlZmF1bHQuYwppbmRleCA4Njg1MjA4Li4xYWYwY2M3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvZGVmYXVsdC5jCisrKyBiL2FyY2gveDg2L21hY2gtZ2VuZXJpYy9kZWZhdWx0LmMKQEAgLTEsNSArMSw1IEBACiAvKiAKLSAqIERlZmF1bHQgZ2VuZXJpYyBBUElDIGRyaXZlci4gVGhpcyBoYW5kbGVzIHVwdG8gOCBDUFVzLgorICogRGVmYXVsdCBnZW5lcmljIEFQSUMgZHJpdmVyLiBUaGlzIGhhbmRsZXMgdXAgdG8gOCBDUFVzLgogICovCiAjZGVmaW5lIEFQSUNfREVGSU5JVElPTiAxCiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC1nZW5lcmljL3Byb2JlLmMgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwppbmRleCA0MTIxZDE1Li5mNDEwZDNjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYworKysgYi9hcmNoL3g4Ni9tYWNoLWdlbmVyaWMvcHJvYmUuYwpAQCAtNTYsNyArNTYsNyBAQAogCS8qCiAJICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gc3dpdGNoIHRvIGJpZ3NtcCBtb2RlIHdoZW4KIAkgKiAtIFRoZXJlIGlzIG5vIGFwaWM9IG9wdGlvbiBzcGVjaWZpZWQgYnkgdGhlIHVzZXIKLQkgKiAtIGdlbmVyaWNfYXBpY19wcm9iZSgpIGhhcyBjaG9vc2VuIGFwaWNfZGVmYXVsdCBhcyB0aGUgc3ViX2FyY2gKKwkgKiAtIGdlbmVyaWNfYXBpY19wcm9iZSgpIGhhcyBjaG9zZW4gYXBpY19kZWZhdWx0IGFzIHRoZSBzdWJfYXJjaAogCSAqIC0gd2UgZmluZCBtb3JlIHRoYW4gOCBDUFVzIGluIGFjcGkgTEFQSUMgbGlzdGluZyB3aXRoIHhBUElDIHN1cHBvcnQKIAkgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCBlNDkyOGFhLi4zNjFhYzUxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYworKysgYi9hcmNoL3g4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwpAQCAtMzYsOCArMzYsOCBAQAogCiAvKiBwZXIgQ1BVIGRhdGEgc3RydWN0dXJlIChmb3IgL3Byb2MvY3B1aW5mbyBldCBhbCksIHZpc2libGUgZXh0ZXJuYWxseQogICogaW5kZXhlZCBwaHlzaWNhbGx5ICovCi1zdHJ1Y3QgY3B1aW5mb194ODYgY3B1X2RhdGFbTlJfQ1BVU10gX19jYWNoZWxpbmVfYWxpZ25lZDsKLUVYUE9SVF9TWU1CT0woY3B1X2RhdGEpOworREVGSU5FX1BFUl9DUFUoY3B1aW5mb194ODYsIGNwdV9pbmZvKSBfX2NhY2hlbGluZV9hbGlnbmVkOworRVhQT1JUX1BFUl9DUFVfU1lNQk9MKGNwdV9pbmZvKTsKIAogLyogcGh5c2ljYWwgSUQgb2YgdGhlIENQVSB1c2VkIHRvIGJvb3QgdGhlIHN5c3RlbSAqLwogdW5zaWduZWQgY2hhciBib290X2NwdV9pZDsKQEAgLTM4OSw3ICszODksNyBAQAogCiAJLyogVGhlIGJvb3QgQ1BVIG11c3QgYmUgZXh0ZW5kZWQgKi8KIAl2b3lhZ2VyX2V4dGVuZGVkX3ZpY19wcm9jZXNzb3JzID0gMTw8Ym9vdF9jcHVfaWQ7Ci0JLyogaW5pdGlhbGx5LCBhbGwgb2YgdGhlIGZpcnN0IDggY3B1J3MgY2FuIGJvb3QgKi8KKwkvKiBpbml0aWFsbHksIGFsbCBvZiB0aGUgZmlyc3QgOCBDUFVzIGNhbiBib290ICovCiAJdm95YWdlcl9hbGxvd2VkX2Jvb3RfcHJvY2Vzc29ycyA9IDB4ZmY7CiAJLyogc2V0IHVwIGV2ZXJ5dGhpbmcgZm9yIGp1c3QgdGhpcyBDUFUsIHdlIGNhbiBhbHRlcgogCSAqIHRoaXMgYXMgd2Ugc3RhcnQgdGhlIG90aGVyIENQVXMgbGF0ZXIgKi8KQEAgLTQzMCw3ICs0MzAsNyBAQAogdm9pZCBfX2luaXQKIHNtcF9zdG9yZV9jcHVfaW5mbyhpbnQgaWQpCiB7Ci0Jc3RydWN0IGNwdWluZm9feDg2ICpjPSZjcHVfZGF0YVtpZF07CisJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJmNwdV9kYXRhKGlkKTsKIAogCSpjID0gYm9vdF9jcHVfZGF0YTsKIApAQCAtNjM0LDcgKzYzNCw3IEBACiAJCQljcHUsIHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCQogCQlwcmludGsoIkNQVSVkOiAiLCBjcHUpOwotCQlwcmludF9jcHVfaW5mbygmY3B1X2RhdGFbY3B1XSk7CisJCXByaW50X2NwdV9pbmZvKCZjcHVfZGF0YShjcHUpKTsKIAkJd21iKCk7CiAJCWNwdV9zZXQoY3B1LCBjcHVfY2FsbG91dF9tYXApOwogCQljcHVfc2V0KGNwdSwgY3B1X3ByZXNlbnRfbWFwKTsKQEAgLTY4Myw3ICs2ODMsNyBAQAogCSAqLwogCXNtcF9zdG9yZV9jcHVfaW5mbyhib290X2NwdV9pZCk7CiAJcHJpbnRrKCJDUFUlZDogIiwgYm9vdF9jcHVfaWQpOwotCXByaW50X2NwdV9pbmZvKCZjcHVfZGF0YVtib290X2NwdV9pZF0pOworCXByaW50X2NwdV9pbmZvKCZjcHVfZGF0YShib290X2NwdV9pZCkpOwogCiAJaWYoaXNfY3B1X3F1YWQoKSkgewogCQkvKiBib290aW5nIG9uIGEgUXVhZCBDUFUgKi8KQEAgLTcxNCw3ICs3MTQsNyBAQAogCQl1bnNpZ25lZCBsb25nIGJvZ29zdW0gPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKQogCQkJaWYgKGNwdV9pc3NldChpLCBjcHVfb25saW5lX21hcCkpCi0JCQkJYm9nb3N1bSArPSBjcHVfZGF0YVtpXS5sb29wc19wZXJfamlmZnk7CisJCQkJYm9nb3N1bSArPSBjcHVfZGF0YShpKS5sb29wc19wZXJfamlmZnk7CiAJCXByaW50ayhLRVJOX0lORk8gIlRvdGFsIG9mICVkIHByb2Nlc3NvcnMgYWN0aXZhdGVkICglbHUuJTAybHUgQm9nb01JUFMpLlxuIiwKIAkJCWNwdWNvdW50KzEsCiAJCQlib2dvc3VtLyg1MDAwMDAvSFopLApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAogLyogZXhlY3V0ZSBhIHRocmVhZCBvbiBhIG5ldyBDUFUuICBUaGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG11c3QgYmUKICAqIHByZXZpb3VzbHkgc2V0IHVwLiAgVGhpcyBpcyB1c2VkIHRvIHNjaGVkdWxlIGEgZnVuY3Rpb24gZm9yCi0gKiBleGVjdXRpb24gb24gYWxsIENQVSdzIC0gc2V0IHVwIHRoZSBmdW5jdGlvbiB0aGVuIGJyb2FkY2FzdCBhCisgKiBleGVjdXRpb24gb24gYWxsIENQVXMgLSBzZXQgdXAgdGhlIGZ1bmN0aW9uIHRoZW4gYnJvYWRjYXN0IGEKICAqIGZ1bmN0aW9uX2ludGVycnVwdCBDUEkgdG8gY29tZSBoZXJlIG9uIGVhY2ggQ1BVICovCiBzdGF0aWMgdm9pZAogc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KHZvaWQpCkBAIC0xMDk1LDcgKzEwOTUsNyBAQAogICogQ1BJIGhlcmUuICBXZSBkb24ndCB1c2UgdGhpcyBhY3R1YWxseSBmb3IgY291bnRpbmcgc28gbG9zaW5nCiAgKiB0aWNrcyBkb2Vzbid0IG1hdHRlciAKICAqCi0gKiBGSVhNRTogRm9yIHRob3NlIENQVSdzIHdoaWNoIGFjdHVhbGx5IGhhdmUgYSBsb2NhbCBBUElDLCB3ZSBjb3VsZAorICogRklYTUU6IEZvciB0aG9zZSBDUFVzIHdoaWNoIGFjdHVhbGx5IGhhdmUgYSBsb2NhbCBBUElDLCB3ZSBjb3VsZAogICogdHJ5IHRvIHVzZSBpdCB0byB0cmlnZ2VyIHRoaXMgaW50ZXJydXB0IGluc3RlYWQgb2YgaGF2aW5nIHRvCiAgKiBicm9hZGNhc3QgdGhlIHRpbWVyIHRpY2suICBVbmZvcnR1bmF0ZWx5LCBhbGwgbXkgcGVudGl1bSBEWUFEcyBoYXZlCiAgKiBubyBsb2NhbCBBUElDLCBzbyBJIGNhbid0IGRvIHRoaXMKQEAgLTEyODcsNyArMTI4Nyw3IEBACiAKIAkvKgogCSAqIFdlIHRha2UgdGhlICdsb25nJyByZXR1cm4gcGF0aCwgYW5kIHRoZXJlIGV2ZXJ5IHN1YnN5c3RlbQotCSAqIGdyYWJzIHRoZSBhcHJvcHJpYXRlIGxvY2tzIChrZXJuZWwgbG9jay8gaXJxIGxvY2spLgorCSAqIGdyYWJzIHRoZSBhcHByb3ByaWF0ZSBsb2NrcyAoa2VybmVsIGxvY2svIGlycSBsb2NrKS4KIAkgKgogCSAqIHdlIG1pZ2h0IHdhbnQgdG8gZGVjb3VwbGUgcHJvZmlsaW5nIGZyb20gdGhlICdsb25nIHBhdGgnLAogCSAqIGFuZCBkbyB0aGUgcHJvZmlsaW5nIHRvdGFsbHkgaW4gYXNzZW1ibHkuCkBAIC0xNzU5LDcgKzE3NTksNyBAQAogCXJlYWxfbWFzayA9IGNwdXNfYWRkcihtYXNrKVswXSAmIHZveWFnZXJfZXh0ZW5kZWRfdmljX3Byb2Nlc3NvcnM7CiAJCiAJaWYoY3B1c19hZGRyKG1hc2spWzBdID09IDApCi0JCS8qIGNhbid0IGhhdmUgbm8gY3B1J3MgdG8gYWNjZXB0IHRoZSBpbnRlcnJ1cHQgLS0gZXh0cmVtZWx5CisJCS8qIGNhbid0IGhhdmUgbm8gQ1BVcyB0byBhY2NlcHQgdGhlIGludGVycnVwdCAtLSBleHRyZW1lbHkKIAkJICogYmFkIHRoaW5ncyB3aWxsIGhhcHBlbiAqLwogCQlyZXR1cm47CiAKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJfQogCS8qIHRoaXMgaXMgbWFnaWMsIHdlIG5vdyBoYXZlIHRoZSBjb3JyZWN0IGFmZmluaXR5IG1hcHMsIHNvCiAJICogZW5hYmxlIHRoZSBpbnRlcnJ1cHQuICBUaGlzIHdpbGwgc2VuZCBhbiBlbmFibGUgQ1BJIHRvCi0JICogdGhvc2UgY3B1J3Mgd2hvIG5lZWQgdG8gZW5hYmxlIGl0IGluIHRoZWlyIGxvY2FsIG1hc2tzLAorCSAqIHRob3NlIENQVXMgd2hvIG5lZWQgdG8gZW5hYmxlIGl0IGluIHRoZWlyIGxvY2FsIG1hc2tzLAogCSAqIGNhdXNpbmcgdGhlbSB0byBjb3JyZWN0IGZvciB0aGUgbmV3IGFmZmluaXR5IC4gSWYgdGhlCiAJICogaW50ZXJydXB0IGlzIGN1cnJlbnRseSBnbG9iYWxseSBkaXNhYmxlZCwgaXQgd2lsbCBzaW1wbHkgYmUKIAkgKiBkaXNhYmxlZCBhZ2FpbiBhcyBpdCBjb21lcyBpbiAodm95YWdlciBsYXp5IGRpc2FibGUpLiAgSWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21hY2gtdm95YWdlci92b3lhZ2VyX3RocmVhZC5jIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKaW5kZXggZjlkNTk1My4uNTBmOTM2NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKKysrIGIvYXJjaC94ODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfdGhyZWFkLmMKQEAgLTY0LDcgKzY0LDcgQEAKIHsKIAlpZih2b3lhZ2VyX3N0YXR1cy5zd2l0Y2hfb2ZmKSB7CiAJCQotCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29uZmlndXJlYWJsZSB2aWEgcHJvYyAqLworCQkvKiBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29uZmlndXJhYmxlIHZpYSBwcm9jICovCiAJCWV4ZWN1dGUoInVtYXNrIDYwMDsgZWNobyAwID4gL2V0Yy9pbml0cnVubHZsOyBraWxsIC1IVVAgMSIpOwogCX0gZWxzZSBpZih2b3lhZ2VyX3N0YXR1cy5wb3dlcl9mYWlsKSB7CiAJCVZERUJVRygoIlZveWFnZXIgZGFlbW9uIGRldGVjdGVkIEFDIHBvd2VyIGZhaWx1cmVcbiIpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2Jvb3RfaW9yZW1hcF8zMi5jIGIvYXJjaC94ODYvbW0vYm9vdF9pb3JlbWFwXzMyLmMKaW5kZXggNGRlOTVhMS4uZjE0ZGEyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vYm9vdF9pb3JlbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vYm9vdF9pb3JlbWFwXzMyLmMKQEAgLTEwLDcgKzEwLDcgQEAKIAogLyoKICAqIFdlIG5lZWQgdG8gdXNlIHRoZSAyLWxldmVsIHBhZ2V0YWJsZSBmdW5jdGlvbnMsIGJ1dCBDT05GSUdfWDg2X1BBRQotICoga2VlcHMgdGhhdCBmcm9tIGhhcHBlbm5pbmcuICBJZiBhbnlvbmUgaGFzIGEgYmV0dGVyIHdheSwgSSdtIGxpc3RlbmluZy4KKyAqIGtlZXBzIHRoYXQgZnJvbSBoYXBwZW5pbmcuICBJZiBhbnlvbmUgaGFzIGEgYmV0dGVyIHdheSwgSSdtIGxpc3RlbmluZy4KICAqCiAgKiBib290X3B0ZV90IGlzIGRlZmluZWQgb25seSBpZiB0aGlzIGFsbCB3b3JrcyBjb3JyZWN0bHkKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZGlzY29udGlnXzMyLmMgYi9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYwppbmRleCAxMzg5Mzc3Li5mZTYwOGE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9kaXNjb250aWdfMzIuYwpAQCAtMjczLDcgKzI3Myw3IEBACiAJICogV2hlbiBtYXBwaW5nIGEgTlVNQSBtYWNoaW5lIHdlIGFsbG9jYXRlIHRoZSBub2RlX21lbV9tYXAgYXJyYXlzCiAJICogZnJvbSBub2RlIGxvY2FsIG1lbW9yeS4gIFRoZXkgYXJlIHRoZW4gbWFwcGVkIGRpcmVjdGx5IGludG8gS1ZBCiAJICogYmV0d2VlbiB6b25lIG5vcm1hbCBhbmQgdm1hbGxvYyBzcGFjZS4gIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZgotCSAqIHRoaXMgc3BhY2UgYW5kIHVzZSBpdCB0byBhZGp1c3QgdGhlIGJvdW5kcnkgYmV0d2VlbiBaT05FX05PUk1BTAorCSAqIHRoaXMgc3BhY2UgYW5kIHVzZSBpdCB0byBhZGp1c3QgdGhlIGJvdW5kYXJ5IGJldHdlZW4gWk9ORV9OT1JNQUwKIAkgKiBhbmQgWk9ORV9ISUdITUVNLgogCSAqLwogCWZpbmRfbWF4X3BmbigpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZmF1bHRfMzIuYyBiL2FyY2gveDg2L21tL2ZhdWx0XzMyLmMKaW5kZXggNjU1NWMzZC4uNTAzZGZjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vZmF1bHRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9mYXVsdF8zMi5jCkBAIC0zNTQsNyArMzU0LDcgQEAKIAogCS8qIFdoZW4gcnVubmluZyBpbiB0aGUga2VybmVsIHdlIGV4cGVjdCBmYXVsdHMgdG8gb2NjdXIgb25seSB0bwogCSAqIGFkZHJlc3NlcyBpbiB1c2VyIHNwYWNlLiAgQWxsIG90aGVyIGZhdWx0cyByZXByZXNlbnQgZXJyb3JzIGluIHRoZQotCSAqIGtlcm5lbCBhbmQgc2hvdWxkIGdlbmVyYXRlIGFuIE9PUFMuICBVbmZvcnR1bmF0bHksIGluIHRoZSBjYXNlIG9mIGFuCisJICoga2VybmVsIGFuZCBzaG91bGQgZ2VuZXJhdGUgYW4gT09QUy4gIFVuZm9ydHVuYXRlbHksIGluIHRoZSBjYXNlIG9mIGFuCiAJICogZXJyb25lb3VzIGZhdWx0IG9jY3VycmluZyBpbiBhIGNvZGUgcGF0aCB3aGljaCBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtCiAJICogd2Ugd2lsbCBkZWFkbG9jayBhdHRlbXB0aW5nIHRvIHZhbGlkYXRlIHRoZSBmYXVsdCBhZ2FpbnN0IHRoZQogCSAqIGFkZHJlc3Mgc3BhY2UuICBMdWNraWx5IHRoZSBrZXJuZWwgb25seSB2YWxpZGx5IHJlZmVyZW5jZXMgdXNlcgpAQCAtMzYyLDcgKzM2Miw3IEBACiAJICogZXhjZXB0aW9ucyB0YWJsZS4KIAkgKgogCSAqIEFzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGZhdWx0cyB3aWxsIGJlIHZhbGlkIHdlIHdpbGwgb25seSBwZXJmb3JtCi0JICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsdHkgb2YgYSBkZWFkbG9jay4KKwkgKiB0aGUgc291cmNlIHJlZmVyZW5jZSBjaGVjayB3aGVuIHRoZXJlIGlzIGEgcG9zc2liaWxpdHkgb2YgYSBkZWFkbG9jay4KIAkgKiBBdHRlbXB0IHRvIGxvY2sgdGhlIGFkZHJlc3Mgc3BhY2UsIGlmIHdlIGNhbm5vdCB3ZSB0aGVuIHZhbGlkYXRlIHRoZQogCSAqIHNvdXJjZS4gIElmIHRoaXMgaXMgaW52YWxpZCB3ZSBjYW4gc2tpcCB0aGUgYWRkcmVzcyBzcGFjZSBjaGVjaywKIAkgKiB0aHVzIGF2b2lkaW5nIHRoZSBkZWFkbG9jay4KQEAgLTQ3MSw4ICs0NzEsOCBAQAogCQkgICAgcHJpbnRrX3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoIiVzJXNbJWRdOiBzZWdmYXVsdCBhdCAlMDhseCBlaXAgJTA4bHggIgogCQkJICAgICJlc3AgJTA4bHggZXJyb3IgJWx4XG4iLAotCQkJICAgIHRzay0+cGlkID4gMSA/IEtFUk5fSU5GTyA6IEtFUk5fRU1FUkcsCi0JCQkgICAgdHNrLT5jb21tLCB0c2stPnBpZCwgYWRkcmVzcywgcmVncy0+ZWlwLAorCQkJICAgIHRhc2tfcGlkX25yKHRzaykgPiAxID8gS0VSTl9JTkZPIDogS0VSTl9FTUVSRywKKwkJCSAgICB0c2stPmNvbW0sIHRhc2tfcGlkX25yKHRzayksIGFkZHJlc3MsIHJlZ3MtPmVpcCwKIAkJCSAgICByZWdzLT5lc3AsIGVycm9yX2NvZGUpOwogCQl9CiAJCXRzay0+dGhyZWFkLmNyMiA9IGFkZHJlc3M7CkBAIC01NjQsNyArNTY0LDggQEAKIAkJICogaXQncyBhbGxvY2F0ZWQgYWxyZWFkeS4KIAkJICovCiAJCWlmICgocGFnZSA+PiBQQUdFX1NISUZUKSA8IG1heF9sb3dfcGZuCi0JCSAgICAmJiAocGFnZSAmIF9QQUdFX1BSRVNFTlQpKSB7CisJCSAgICAmJiAocGFnZSAmIF9QQUdFX1BSRVNFTlQpCisJCSAgICAmJiAhKHBhZ2UgJiBfUEFHRV9QU0UpKSB7CiAJCQlwYWdlICY9IFBBR0VfTUFTSzsKIAkJCXBhZ2UgPSAoKF9fdHlwZW9mX18ocGFnZSkgKikgX192YShwYWdlKSlbKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiAoUFRSU19QRVJfUFRFIC0gMSldOwpAQCAtNTg3LDcgKzU4OCw3IEBACiAgKi8KIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfaW5pdCh0c2spKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KHRzaykpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9mYXVsdF82NC5jIGIvYXJjaC94ODYvbW0vZmF1bHRfNjQuYwppbmRleCA1ZTBlNTQ5Li42NDRiNGY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9mYXVsdF82NC5jCisrKyBiL2FyY2gveDg2L21tL2ZhdWx0XzY0LmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyZXNzKTsKIAlpZiAoYmFkX2FkZHJlc3MocG1kKSkgZ290byBiYWQ7CiAJcHJpbnRrKCJQTUQgJWx4ICIsIHBtZF92YWwoKnBtZCkpOwotCWlmICghcG1kX3ByZXNlbnQoKnBtZCkpCWdvdG8gcmV0OwkgCisJaWYgKCFwbWRfcHJlc2VudCgqcG1kKSB8fCBwbWRfbGFyZ2UoKnBtZCkpIGdvdG8gcmV0OwogCiAJcHRlID0gcHRlX29mZnNldF9rZXJuZWwocG1kLCBhZGRyZXNzKTsKIAlpZiAoYmFkX2FkZHJlc3MocHRlKSkgZ290byBiYWQ7CkBAIC0yODUsNyArMjg1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWdlX2ZhdWx0X3RyYWNlOwogaW50IHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgPSAxOwogCiAvKgpAQCAtMzU0LDEwICszNTMsNiBAQAogCWlmIChsaWtlbHkocmVncy0+ZWZsYWdzICYgWDg2X0VGTEFHU19JRikpCiAJCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCWlmICh1bmxpa2VseShwYWdlX2ZhdWx0X3RyYWNlKSkKLQkJcHJpbnRrKCJwYWdlZmF1bHQgcmlwOiVseCByc3A6JWx4IGNzOiVsdSBzczolbHUgYWRkcmVzcyAlbHggZXJyb3IgJWx4XG4iLAotCQkgICAgICAgcmVncy0+cmlwLHJlZ3MtPnJzcCxyZWdzLT5jcyxyZWdzLT5zcyxhZGRyZXNzLGVycm9yX2NvZGUpOyAKLQogCWlmICh1bmxpa2VseShlcnJvcl9jb2RlICYgUEZfUlNWRCkpCiAJCXBndGFibGVfYmFkKGFkZHJlc3MsIHJlZ3MsIGVycm9yX2NvZGUpOwogCkBAIC0zNzgsNyArMzczLDcgQEAKICBhZ2FpbjoKIAkvKiBXaGVuIHJ1bm5pbmcgaW4gdGhlIGtlcm5lbCB3ZSBleHBlY3QgZmF1bHRzIHRvIG9jY3VyIG9ubHkgdG8KIAkgKiBhZGRyZXNzZXMgaW4gdXNlciBzcGFjZS4gIEFsbCBvdGhlciBmYXVsdHMgcmVwcmVzZW50IGVycm9ycyBpbiB0aGUKLQkgKiBrZXJuZWwgYW5kIHNob3VsZCBnZW5lcmF0ZSBhbiBPT1BTLiAgVW5mb3J0dW5hdGx5LCBpbiB0aGUgY2FzZSBvZiBhbgorCSAqIGtlcm5lbCBhbmQgc2hvdWxkIGdlbmVyYXRlIGFuIE9PUFMuICBVbmZvcnR1bmF0ZWx5LCBpbiB0aGUgY2FzZSBvZiBhbgogCSAqIGVycm9uZW91cyBmYXVsdCBvY2N1cnJpbmcgaW4gYSBjb2RlIHBhdGggd2hpY2ggYWxyZWFkeSBob2xkcyBtbWFwX3NlbQogCSAqIHdlIHdpbGwgZGVhZGxvY2sgYXR0ZW1wdGluZyB0byB2YWxpZGF0ZSB0aGUgZmF1bHQgYWdhaW5zdCB0aGUKIAkgKiBhZGRyZXNzIHNwYWNlLiAgTHVja2lseSB0aGUga2VybmVsIG9ubHkgdmFsaWRseSByZWZlcmVuY2VzIHVzZXIKQEAgLTM4Niw3ICszODEsNyBAQAogCSAqIGV4Y2VwdGlvbnMgdGFibGUuCiAJICoKIAkgKiBBcyB0aGUgdmFzdCBtYWpvcml0eSBvZiBmYXVsdHMgd2lsbCBiZSB2YWxpZCB3ZSB3aWxsIG9ubHkgcGVyZm9ybQotCSAqIHRoZSBzb3VyY2UgcmVmZXJlbmNlIGNoZWNrIHdoZW4gdGhlcmUgaXMgYSBwb3NzaWJpbHR5IG9mIGEgZGVhZGxvY2suCisJICogdGhlIHNvdXJjZSByZWZlcmVuY2UgY2hlY2sgd2hlbiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IG9mIGEgZGVhZGxvY2suCiAJICogQXR0ZW1wdCB0byBsb2NrIHRoZSBhZGRyZXNzIHNwYWNlLCBpZiB3ZSBjYW5ub3Qgd2UgdGhlbiB2YWxpZGF0ZSB0aGUKIAkgKiBzb3VyY2UuICBJZiB0aGlzIGlzIGludmFsaWQgd2UgY2FuIHNraXAgdGhlIGFkZHJlc3Mgc3BhY2UgY2hlY2ssCiAJICogdGh1cyBhdm9pZGluZyB0aGUgZGVhZGxvY2suCkBAIC00ODgsNyArNDgzLDcgQEAKIAkJaWYgKHNob3dfdW5oYW5kbGVkX3NpZ25hbHMgJiYgdW5oYW5kbGVkX3NpZ25hbCh0c2ssIFNJR1NFR1YpICYmCiAJCSAgICBwcmludGtfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50aygKLQkJICAgICAgICIlcyVzWyVkXTogc2VnZmF1bHQgYXQgJTAxNmx4IHJpcCAlMDE2bHggcnNwICUwMTZseCBlcnJvciAlbHhcbiIsCisJCSAgICAgICAiJXMlc1slZF06IHNlZ2ZhdWx0IGF0ICVseCByaXAgJWx4IHJzcCAlbHggZXJyb3IgJWx4XG4iLAogCQkJCQl0c2stPnBpZCA+IDEgPyBLRVJOX0lORk8gOiBLRVJOX0VNRVJHLAogCQkJCQl0c2stPmNvbW0sIHRzay0+cGlkLCBhZGRyZXNzLCByZWdzLT5yaXAsCiAJCQkJCXJlZ3MtPnJzcCwgZXJyb3JfY29kZSk7CkBAIC01NTQsNyArNTQ5LDcgQEAKICAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CisJaWYgKGlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7CiAJCXlpZWxkKCk7CiAJCWdvdG8gYWdhaW47CiAJfQpAQCAtNjIxLDEwICs2MTYsMyBAQAogCUJVSUxEX0JVR19PTighKCgoTU9EVUxFU19FTkQgLSAxKSAmIFBHRElSX01BU0spID09IAogCQkJCShfX1NUQVJUX0tFUk5FTCAmIFBHRElSX01BU0spKSk7CiB9Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9wYWdlZmF1bHR0cmFjZShjaGFyICpzdHIpCi17Ci0JcGFnZV9mYXVsdF90cmFjZSA9IDE7Ci0JcmV0dXJuIDE7Ci19Ci1fX3NldHVwKCJwYWdlZmF1bHR0cmFjZSIsIGVuYWJsZV9wYWdlZmF1bHR0cmFjZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzY0LmMgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKaW5kZXggNWVlYzVlNS4uM2Q2OTI2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV82NC5jCisrKyBiL2FyY2gveDg2L21tL251bWFfNjQuYwpAQCAtNjEyLDcgKzYxMiw3IEBACiB7CiAJaW50IGk7CiAgCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyBpKyspIHsKLQkJdTggYXBpY2lkID0geDg2X2NwdV90b19hcGljaWRbaV07CisJCXU4IGFwaWNpZCA9IHg4Nl9jcHVfdG9fYXBpY2lkX2luaXRbaV07CiAJCWlmIChhcGljaWQgPT0gQkFEX0FQSUNJRCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoYXBpY2lkX3RvX25vZGVbYXBpY2lkXSA9PSBOVU1BX05PX05PREUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYWdlYXR0cl82NC5jIGIvYXJjaC94ODYvbW0vcGFnZWF0dHJfNjQuYwppbmRleCA4YTRmNjViLi5jN2I3ZGZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYWdlYXR0cl82NC5jCisrKyBiL2FyY2gveDg2L21tL3BhZ2VhdHRyXzY0LmMKQEAgLTIzMCw5ICsyMzAsMTQgQEAKIAlzdHJ1Y3QgcGFnZSAqcGcsICpuZXh0OwogCXN0cnVjdCBsaXN0X2hlYWQgbDsKIAotCWRvd25fcmVhZCgmaW5pdF9tbS5tbWFwX3NlbSk7CisJLyoKKwkgKiBXcml0ZS1wcm90ZWN0IHRoZSBzZW1hcGhvcmUsIHRvIGV4Y2x1ZGUgdHdvIGNvbnRleHRzCisJICogZG9pbmcgYSBsaXN0X3JlcGxhY2VfaW5pdCgpIGNhbGwgaW4gcGFyYWxsZWwgYW5kIHRvCisJICogZXhjbHVkZSBuZXcgYWRkaXRpb25zIHRvIHRoZSBkZWZlcnJlZF9wYWdlcyBsaXN0OgorCSAqLworCWRvd25fd3JpdGUoJmluaXRfbW0ubW1hcF9zZW0pOwogCWxpc3RfcmVwbGFjZV9pbml0KCZkZWZlcnJlZF9wYWdlcywgJmwpOwotCXVwX3JlYWQoJmluaXRfbW0ubW1hcF9zZW0pOworCXVwX3dyaXRlKCZpbml0X21tLm1tYXBfc2VtKTsKIAogCWZsdXNoX21hcCgmbCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3NyYXRfNjQuYyBiL2FyY2gveDg2L21tL3NyYXRfNjQuYwppbmRleCA1NjA4OWNjLi5lYTg1MTcyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9zcmF0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vc3JhdF82NC5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIC8qCiAgKiBVcGRhdGUgbm9kZXNfYWRkIGFuZCBkZWNpZGUgaWYgdG8gaW5jbHVkZSBhZGQgYXJlIGluIHRoZSB6b25lLgogICogQm90aCBTUEFSU0UgYW5kIFJFU0VSVkUgbmVlZCBub2Rlc19hZGQgaW5mb21hdGlvbi4KLSAqIFRoaXMgY29kZSBzdXBwb3J0cyBvbmUgY29udGlnaW91cyBob3QgYWRkIGFyZWEgcGVyIG5vZGUuCisgKiBUaGlzIGNvZGUgc3VwcG9ydHMgb25lIGNvbnRpZ3VvdXMgaG90IGFkZCBhcmVhIHBlciBub2RlLgogICovCiBzdGF0aWMgaW50IHJlc2VydmVfaG90YWRkKGludCBub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL2JhY2t0cmFjZS5jIGIvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMKaW5kZXggYzA0OWNlNC4uMGVkMDQ2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMKQEAgLTEzLDI2ICsxMyw0NiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KKworc3RhdGljIHZvaWQgYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sKHZvaWQgKmRhdGEsIGNoYXIgKm1zZywKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3ltYm9sKQoreworCS8qIElnbm9yZSB3YXJuaW5ncyAqLworfQorCitzdGF0aWMgdm9pZCBiYWNrdHJhY2Vfd2FybmluZyh2b2lkICpkYXRhLCBjaGFyICptc2cpCit7CisJLyogSWdub3JlIHdhcm5pbmdzICovCit9CisKK3N0YXRpYyBpbnQgYmFja3RyYWNlX3N0YWNrKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpCit7CisJLyogWWVzLCB3ZSB3YW50IGFsbCBzdGFja3MgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYmFja3RyYWNlX2FkZHJlc3Modm9pZCAqZGF0YSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXVuc2lnbmVkIGludCAqZGVwdGggPSBkYXRhOworCisJaWYgKCgqZGVwdGgpLS0pCisJCW9wcm9maWxlX2FkZF90cmFjZShhZGRyKTsKK30KKworc3RhdGljIHN0cnVjdCBzdGFja3RyYWNlX29wcyBiYWNrdHJhY2Vfb3BzID0geworCS53YXJuaW5nID0gYmFja3RyYWNlX3dhcm5pbmcsCisJLndhcm5pbmdfc3ltYm9sID0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAorCS5zdGFjayA9IGJhY2t0cmFjZV9zdGFjaywKKwkuYWRkcmVzcyA9IGJhY2t0cmFjZV9hZGRyZXNzLAorfTsKIAogc3RydWN0IGZyYW1lX2hlYWQgewotCXN0cnVjdCBmcmFtZV9oZWFkICogZWJwOworCXN0cnVjdCBmcmFtZV9oZWFkICplYnA7CiAJdW5zaWduZWQgbG9uZyByZXQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgc3RydWN0IGZyYW1lX2hlYWQgKgotZHVtcF9rZXJuZWxfYmFja3RyYWNlKHN0cnVjdCBmcmFtZV9oZWFkICogaGVhZCkKLXsKLQlvcHJvZmlsZV9hZGRfdHJhY2UoaGVhZC0+cmV0KTsKLQotCS8qIGZyYW1lIHBvaW50ZXJzIHNob3VsZCBzdHJpY3RseSBwcm9ncmVzcyBiYWNrIHVwIHRoZSBzdGFjawotCSAqICh0b3dhcmRzIGhpZ2hlciBhZGRyZXNzZXMpICovCi0JaWYgKGhlYWQgPj0gaGVhZC0+ZWJwKQotCQlyZXR1cm4gTlVMTDsKLQotCXJldHVybiBoZWFkLT5lYnA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZnJhbWVfaGVhZCAqCiBkdW1wX3VzZXJfYmFja3RyYWNlKHN0cnVjdCBmcmFtZV9oZWFkICogaGVhZCkKIHsKIAlzdHJ1Y3QgZnJhbWVfaGVhZCBidWZoZWFkWzJdOwpAQCAtNTMsNzIgKzczLDE2IEBACiAJcmV0dXJuIGJ1ZmhlYWRbMF0uZWJwOwogfQogCi0vKgotICogfCAgICAgICAgICAgICB8IC9cIEhpZ2hlciBhZGRyZXNzZXMKLSAqIHwgICAgICAgICAgICAgfAotICogLS0tLS0tLS0tLS0tLS0tIHN0YWNrIGJhc2UgKGFkZHJlc3Mgb2YgY3VycmVudF90aHJlYWRfaW5mbykKLSAqIHwgdGhyZWFkIGluZm8gfAotICogLiAgICAgICAgICAgICAuCi0gKiB8ICAgIHN0YWNrICAgIHwKLSAqIC0tLS0tLS0tLS0tLS0tLSBzYXZlZCByZWdzLT5lYnAgdmFsdWUgaWYgdmFsaWQgKGZyYW1lX2hlYWQgYWRkcmVzcykKLSAqIC4gICAgICAgICAgICAgLgotICogLS0tLS0tLS0tLS0tLS0tIHNhdmVkIHJlZ3MtPnJzcCB2YWx1ZSBpZiB4ODZfNjQKLSAqIHwgICAgICAgICAgICAgfAotICogLS0tLS0tLS0tLS0tLS0tIHN0cnVjdCBwdF9yZWdzICogc3RvcmVkIG9uIHN0YWNrIGlmIDMyLWJpdAotICogfCAgICAgICAgICAgICB8Ci0gKiAuICAgICAgICAgICAgIC4KLSAqIHwgICAgICAgICAgICAgfAotICogLS0tLS0tLS0tLS0tLS0tICVlc3AKLSAqIHwgICAgICAgICAgICAgfAotICogfCAgICAgICAgICAgICB8IFwvIExvd2VyIGFkZHJlc3NlcwotICoKLSAqIFRodXMsIHJlZ3MgKG9yIHJlZ3MtPnJzcCBmb3IgeDg2XzY0KSA8LT4gc3RhY2sgYmFzZSByZXN0cmljdHMgdGhlCi0gKiB2YWxpZChpc2gpIGVicCB2YWx1ZXMuIE5vdGU6ICgxKSBmb3IgeDg2XzY0LCBOTUkgYW5kIHNldmVyYWwgb3RoZXIKLSAqIGV4Y2VwdGlvbnMgdXNlIHNwZWNpYWwgc3RhY2tzLCBtYWludGFpbmVkIGJ5IHRoZSBpbnRlcnJ1cHQgc3RhY2sgdGFibGUKLSAqIChJU1QpLiBUaGVzZSBzdGFja3MgYXJlIHNldCB1cCBpbiB0cmFwX2luaXQoKSBpbgotICogYXJjaC94ODZfNjQva2VybmVsL3RyYXBzLmMuIFRodXMsIGZvciB4ODZfNjQsIHJlZ3Mgbm93IGRvZXMgbm90IHBvaW50Ci0gKiB0byB0aGUga2VybmVsIHN0YWNrOyBpbnN0ZWFkLCBpdCBwb2ludHMgdG8gc29tZSBsb2NhdGlvbiBvbiB0aGUgTk1JCi0gKiBzdGFjay4gT24gdGhlIG90aGVyIGhhbmQsIHJlZ3MtPnJzcCBpcyB0aGUgc3RhY2sgcG9pbnRlciBzYXZlZCB3aGVuIHRoZQotICogTk1JIG9jY3VycmVkLiAoMikgRm9yIDMyLWJpdCwgcmVncy0+ZXNwIGlzIG5vdCB2YWxpZCBiZWNhdXNlIHRoZQotICogcHJvY2Vzc29yIGRvZXMgbm90IHNhdmUgJWVzcCBvbiB0aGUga2VybmVsIHN0YWNrIHdoZW4gaW50ZXJydXB0cyBvY2N1cgotICogaW4gdGhlIGtlcm5lbCBtb2RlLgotICovCi0jaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKLXN0YXRpYyBpbnQgdmFsaWRfa2VybmVsX3N0YWNrKHN0cnVjdCBmcmFtZV9oZWFkICogaGVhZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQotewotCXVuc2lnbmVkIGxvbmcgaGVhZGFkZHIgPSAodW5zaWduZWQgbG9uZyloZWFkOwotI2lmZGVmIENPTkZJR19YODZfNjQKLQl1bnNpZ25lZCBsb25nIHN0YWNrID0gKHVuc2lnbmVkIGxvbmcpcmVncy0+cnNwOwotI2Vsc2UKLQl1bnNpZ25lZCBsb25nIHN0YWNrID0gKHVuc2lnbmVkIGxvbmcpcmVnczsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcgc3RhY2tfYmFzZSA9IChzdGFjayAmIH4oVEhSRUFEX1NJWkUgLSAxKSkgKyBUSFJFQURfU0laRTsKLQotCXJldHVybiBoZWFkYWRkciA+IHN0YWNrICYmIGhlYWRhZGRyIDwgc3RhY2tfYmFzZTsKLX0KLSNlbHNlCi0vKiB3aXRob3V0IGZwLCBpdCdzIGp1c3QganVuayAqLwotc3RhdGljIGludCB2YWxpZF9rZXJuZWxfc3RhY2soc3RydWN0IGZyYW1lX2hlYWQgKiBoZWFkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotCiB2b2lkCiB4ODZfYmFja3RyYWNlKHN0cnVjdCBwdF9yZWdzICogY29uc3QgcmVncywgdW5zaWduZWQgaW50IGRlcHRoKQogewotCXN0cnVjdCBmcmFtZV9oZWFkICpoZWFkOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCWhlYWQgPSAoc3RydWN0IGZyYW1lX2hlYWQgKilyZWdzLT5yYnA7Ci0jZWxzZQotCWhlYWQgPSAoc3RydWN0IGZyYW1lX2hlYWQgKilyZWdzLT5lYnA7Ci0jZW5kaWYKKwlzdHJ1Y3QgZnJhbWVfaGVhZCAqaGVhZCA9IChzdHJ1Y3QgZnJhbWVfaGVhZCAqKWZyYW1lX3BvaW50ZXIocmVncyk7CisJdW5zaWduZWQgbG9uZyBzdGFjayA9IHN0YWNrX3BvaW50ZXIocmVncyk7CiAKIAlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSkgewotCQl3aGlsZSAoZGVwdGgtLSAmJiB2YWxpZF9rZXJuZWxfc3RhY2soaGVhZCwgcmVncykpCi0JCQloZWFkID0gZHVtcF9rZXJuZWxfYmFja3RyYWNlKGhlYWQpOworCQlpZiAoZGVwdGgpCisJCQlkdW1wX3RyYWNlKE5VTEwsIHJlZ3MsICh1bnNpZ25lZCBsb25nICopc3RhY2ssCisJCQkJICAgJmJhY2t0cmFjZV9vcHMsICZkZXB0aCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKaW5kZXggYWJiMWFhOS4uNDViNjA1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKKysrIGIvYXJjaC94ODYvb3Byb2ZpbGUvb3BfeDg2X21vZGVsLmgKQEAgLTI5LDcgKzI5LDcgQEAKIHN0cnVjdCBwdF9yZWdzOwogCiAvKiBUaGUgbW9kZWwgdnRhYmxlIGFic3RyYWN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbgotICogdmFyaW91cyB4ODYgQ1BVIG1vZGVsJ3MgcGVyZmN0ciBzdXBwb3J0LgorICogdmFyaW91cyB4ODYgQ1BVIG1vZGVscycgcGVyZmN0ciBzdXBwb3J0LgogICovCiBzdHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgewogCXVuc2lnbmVkIGludCBjb25zdCBudW1fY291bnRlcnM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaXJxLmMgYi9hcmNoL3g4Ni9wY2kvaXJxLmMKaW5kZXggYzUyMTUwZi4uODhkOGY1YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL2lycS5jCisrKyBiL2FyY2gveDg2L3BjaS9pcnEuYwpAQCAtMTY5LDcgKzE2OSw3IEBACiB9CiAKIC8qCi0gKiBDb21tb24gSVJRIHJvdXRpbmcgcHJhY3RpY2U6IG55YmJsZXMgaW4gY29uZmlnIHNwYWNlLAorICogQ29tbW9uIElSUSByb3V0aW5nIHByYWN0aWNlOiBuaWJibGVzIGluIGNvbmZpZyBzcGFjZSwKICAqIG9mZnNldCBieSBzb21lIG1hZ2ljIGNvbnN0YW50LgogICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlYWRfY29uZmlnX255YmJsZShzdHJ1Y3QgcGNpX2RldiAqcm91dGVyLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIG5yKQpAQCAtNTg1LDcgKzU4NSw3IEBACiAJLyogRklYTUU6IFdlIHNob3VsZCBtb3ZlIHNvbWUgb2YgdGhlIHF1aXJrIGZpeHVwIHN0dWZmIGhlcmUgKi8KIAogCS8qCi0JICogd29yayBhcm91bmRzIGZvciBzb21lIGJ1Z2d5IEJJT1NlcworCSAqIHdvcmthcm91bmRzIGZvciBzb21lIGJ1Z2d5IEJJT1NlcwogCSAqLwogCWlmIChkZXZpY2UgPT0gUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzApIHsKIAkJc3dpdGNoKHJvdXRlci0+ZGV2aWNlKSB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC8uZ2l0aWdub3JlIGIvYXJjaC94ODZfNjQvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmVmNGMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQvLmdpdGlnbm9yZQpAQCAtMCwwICsxIEBACitib290CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9LY29uZmlnIGIvYXJjaC94ODZfNjQvS2NvbmZpZwppbmRleCA0M2ZhZmU5Li5hYWIyNWYzIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9LY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L0tjb25maWcKQEAgLTcxNiw5ICs3MTYsMTYgQEAKIAogc291cmNlIGtlcm5lbC9wb3dlci9LY29uZmlnCiAKK2NvbmZpZyBBUkNIX0hJQkVSTkFUSU9OX0hFQURFUgorCWJvb2wKKwlkZXBlbmRzIG9uIEhJQkVSTkFUSU9OCisJZGVmYXVsdCB5CisKIHNvdXJjZSAiZHJpdmVycy9hY3BpL0tjb25maWciCiAKLXNvdXJjZSAiYXJjaC94ODYva2VybmVsL2NwdWZyZXEvS2NvbmZpZyIKK3NvdXJjZSAiYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWdfNjQiCisKK3NvdXJjZSAiZHJpdmVycy9jcHVpZGxlL0tjb25maWciCiAKIGVuZG1lbnUKIApAQCAtNzYxLDkgKzc2OCw5IEBACiBjb25maWcgSUEzMl9FTVVMQVRJT04KIAlib29sICJJQTMyIEVtdWxhdGlvbiIKIAloZWxwCi0JICBJbmNsdWRlIGNvZGUgdG8gcnVuIDMyLWJpdCBwcm9ncmFtcyB1bmRlciBhIDY0LWJpdCBrZXJuZWwuIFlvdSBzaG91bGQgbGlrZWx5Ci0JICB0dXJuIHRoaXMgb24sIHVubGVzcyB5b3UncmUgMTAwJSBzdXJlIHRoYXQgeW91IGRvbid0IGhhdmUgYW55IDMyLWJpdCBwcm9ncmFtcwotCSAgbGVmdC4KKwkgIEluY2x1ZGUgY29kZSB0byBydW4gMzItYml0IHByb2dyYW1zIHVuZGVyIGEgNjQtYml0IGtlcm5lbC4gWW91IHNob3VsZAorCSAgbGlrZWx5IHR1cm4gdGhpcyBvbiwgdW5sZXNzIHlvdSdyZSAxMDAlIHN1cmUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSBhbnkKKwkgIDMyLWJpdCBwcm9ncmFtcyBsZWZ0LgogCiBjb25maWcgSUEzMl9BT1VUCiAgICAgICAgdHJpc3RhdGUgIklBMzIgYS5vdXQgc3VwcG9ydCIKQEAgLTc5NCwyMSArODAxLDYgQEAKIAogc291cmNlIGZzL0tjb25maWcKIAotbWVudSAiSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQiCi0KLXNvdXJjZSAiYXJjaC94ODYvb3Byb2ZpbGUvS2NvbmZpZyIKLQotY29uZmlnIEtQUk9CRVMKLQlib29sICJLcHJvYmVzIgotCWRlcGVuZHMgb24gS0FMTFNZTVMgJiYgTU9EVUxFUwotCWhlbHAKLQkgIEtwcm9iZXMgYWxsb3dzIHlvdSB0byB0cmFwIGF0IGFsbW9zdCBhbnkga2VybmVsIGFkZHJlc3MgYW5kCi0JICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uICByZWdpc3Rlcl9rcHJvYmUoKSBlc3RhYmxpc2hlcwotCSAgYSBwcm9iZXBvaW50IGFuZCBzcGVjaWZpZXMgdGhlIGNhbGxiYWNrLiAgS3Byb2JlcyBpcyB1c2VmdWwKLQkgIGZvciBrZXJuZWwgZGVidWdnaW5nLCBub24taW50cnVzaXZlIGluc3RydW1lbnRhdGlvbiBhbmQgdGVzdGluZy4KLQkgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgotZW5kbWVudQotCiBzb3VyY2UgImFyY2gveDg2XzY0L0tjb25maWcuZGVidWciCiAKIHNvdXJjZSAic2VjdXJpdHkvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L01ha2VmaWxlIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKaW5kZXggMDNlMWVkZS4uNmQ4OWFiNyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvTWFrZWZpbGUKKysrIGIvYXJjaC94ODZfNjQvTWFrZWZpbGUKQEAgLTc0LDcgKzc0LDcgQEAKIENGTEFHU19LRVJORUwgKz0gJChjZmxhZ3Mta2VybmVsLXkpCiBLQlVJTERfQUZMQUdTICs9IC1tNjQKIAotaGVhZC15IDo9IGFyY2gveDg2L2tlcm5lbC9oZWFkXzY0Lm8gYXJjaC94ODYva2VybmVsL2hlYWQ2NC5vIGFyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2tfNjQubworaGVhZC15IDo9IGFyY2gveDg2L2tlcm5lbC9oZWFkXzY0Lm8gYXJjaC94ODYva2VybmVsL2hlYWQ2NC5vIGFyY2gveDg2L2tlcm5lbC9pbml0X3Rhc2subwogCiBsaWJzLXkgCQkJCQkrPSBhcmNoL3g4Ni9saWIvCiBjb3JlLXkJCQkJCSs9IGFyY2gveDg2L2tlcm5lbC8gXApAQCAtOTcsOSArOTcsOSBAQAogS0JVSUxEX0lNQUdFICAgICAgICAgICAgICAgICAgOj0gJChCT09USU1BR0UpCiAKIGJ6SW1hZ2U6IHZtbGludXgKLQkkKFEpbWtkaXIgLXAgJChvYmp0cmVlKS9hcmNoL3g4Nl82NC9ib290Ci0JJChRKWxuIC1mc24gJChvYmp0cmVlKS9hcmNoL3g4Ni9ib290L2J6SW1hZ2UgJChvYmp0cmVlKS9hcmNoL3g4Nl82NC9ib290L2J6SW1hZ2UKIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICQoQk9PVElNQUdFKQorCSQoUSlta2RpciAtcCAkKG9ianRyZWUpL2FyY2gveDg2XzY0L2Jvb3QKKwkkKFEpbG4gLWZzbiAuLi8uLi94ODYvYm9vdC9iekltYWdlICQob2JqdHJlZSkvYXJjaC94ODZfNjQvYm9vdC9iekltYWdlCiAKIGJ6bGlsbzogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoQk9PVElNQUdFKSB6bGlsbwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvS2NvbmZpZyBiL2FyY2gveHRlbnNhL0tjb25maWcKaW5kZXggN2ZiYjQ0Yi4uODVmZmJiNCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvS2NvbmZpZworKysgYi9hcmNoL3h0ZW5zYS9LY29uZmlnCkBAIC0yNTEsNiArMjUxLDggQEAKIAkgIHByb3ZpZGUgb25lIHlvdXJzZWxmLgogZW5kbWVudQogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiIKKwogc291cmNlICJhcmNoL3h0ZW5zYS9LY29uZmlnLmRlYnVnIgogCiBzb3VyY2UgInNlY3VyaXR5L0tjb25maWciCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9ib290L01ha2VmaWxlIGIvYXJjaC94dGVuc2EvYm9vdC9NYWtlZmlsZQppbmRleCA5YzUxODVmLi40MGFhNTViIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9ib290L01ha2VmaWxlCisrKyBiL2FyY2gveHRlbnNhL2Jvb3QvTWFrZWZpbGUKQEAgLTgsNyArOCw4IEBACiAjCiAKIAotRVhUUkFfQ0ZMQUdTCSs9IC1mbm8tYnVpbHRpbiAtSWFyY2gvJChBUkNIKS9ib290L2luY2x1ZGUKKyMgS0JVSUxEX0NGTEFHUyB1c2VkIHdoZW4gYnVpbGRpbmcgcmVzdCBvZiBib290ICh0YWtlcyBlZmZlY3QgcmVjdXJzaXZlbHkpCitLQlVJTERfQ0ZMQUdTCSs9IC1mbm8tYnVpbHRpbiAtSWFyY2gvJChBUkNIKS9ib290L2luY2x1ZGUKIEhPU1RGTEFHUwkrPSAtSWFyY2gvJChBUkNIKS9ib290L2luY2x1ZGUKIAogQklHX0VORElBTgk6PSAkKHNoZWxsIGVjaG8gLWUgX19YVEVOU0FfRUJfXyB8ICQoQ0MpIC1FIC0gfCBncmVwIC12ICJcIyIpCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCmluZGV4IDhiZTk5YzcuLjM5N2JjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlwcmludGsoIkNhdWdodCB1bmhhbmRsZWQgZXhjZXB0aW9uIGluICclcycgIgogCSAgICAgICAiKHBpZCA9ICVkLCBwYyA9ICUjMDEwbHgpIC0gc2hvdWxkIG5vdCBoYXBwZW5cbiIKIAkgICAgICAgIlx0RVhDQ0FVU0UgaXMgJWxkXG4iLAotCSAgICAgICBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHJlZ3MtPnBjLCBleGNjYXVzZSk7CisJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCByZWdzLT5wYywgZXhjY2F1c2UpOwogCWZvcmNlX3NpZyhTSUdJTEwsIGN1cnJlbnQpOwogfQogCkBAIC0yMjgsNyArMjI4LDcgQEAKIAkvKiBJZiBpbiB1c2VyIG1vZGUsIHNlbmQgU0lHSUxMIHNpZ25hbCB0byBjdXJyZW50IHByb2Nlc3MuICovCiAKIAlwcmludGsoIklsbGVnYWwgSW5zdHJ1Y3Rpb24gaW4gJyVzJyAocGlkID0gJWQsIHBjID0gJSMwMTBseClcbiIsCi0JICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgcmVncy0+cGMpOworCSAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgcmVncy0+cGMpOwogCWZvcmNlX3NpZyhTSUdJTEwsIGN1cnJlbnQpOwogfQogCkBAIC0yNTQsNyArMjU0LDcgQEAKIAljdXJyZW50LT50aHJlYWQuZXJyb3JfY29kZSA9IC0zOwogCXByaW50aygiVW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgdG8gJTA4bHggaW4gJyVzJyAiCiAJICAgICAgICIocGlkID0gJWQsIHBjID0gJSMwMTBseClcbiIsCi0JICAgICAgIHJlZ3MtPmV4Y3ZhZGRyLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHJlZ3MtPnBjKTsKKwkgICAgICAgcmVncy0+ZXhjdmFkZHIsIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCByZWdzLT5wYyk7CiAJaW5mby5zaV9zaWdubyA9IFNJR0JVUzsKIAlpbmZvLnNpX2Vycm5vID0gMDsKIAlpbmZvLnNpX2NvZGUgPSBCVVNfQURSQUxOOwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYyBiL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKaW5kZXggMmY4NDI4NS4uMzNmMzY2YiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvbW0vZmF1bHQuYworKysgYi9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAkgKi8KIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoaXNfaW5pdChjdXJyZW50KSkgeworCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMgYi9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCmluZGV4IGYwOTk2MmYuLmI2MWZiMzYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKKysrIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwpAQCAtNzk4LDcgKzc5OCw3IEBACiAKICN1bmRlZiBFUlIKIAotX19zZXR1cCgiZXRoIiwgaXNzX25ldF9zZXR1cCk7CitfX3NldHVwKCJldGg9IiwgaXNzX25ldF9zZXR1cCk7CiAKIC8qCiAgKiBJbml0aWFsaXplIGFsbCBJU1MgRXRoZXJuZXQgZGV2aWNlcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgaW4gaXNzX25ldF9zZXR1cC4KZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IDk1MmFlZTAuLjQ0NmFlYTIgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtMzkwLDcgKzM5MCw3IEBACiAKIC8qCiAgKiBJbnNlcnQgcnEgaW50byBkaXNwYXRjaCBxdWV1ZSBvZiBxLiAgUXVldWUgbG9jayBtdXN0IGJlIGhlbGQgb24KLSAqIGVudHJ5LiAgcnEgaXMgc29ydCBpbnN0ZWQgaW50byB0aGUgZGlzcGF0Y2ggcXVldWUuIFRvIGJlIHVzZWQgYnkKKyAqIGVudHJ5LiAgcnEgaXMgc29ydCBpbnN0ZWFkIGludG8gdGhlIGRpc3BhdGNoIHF1ZXVlLiBUbyBiZSB1c2VkIGJ5CiAgKiBzcGVjaWZpYyBlbGV2YXRvcnMuCiAgKi8KIHZvaWQgZWx2X2Rpc3BhdGNoX3NvcnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2xsX3J3X2Jsay5jIGIvYmxvY2svbGxfcndfYmxrLmMKaW5kZXggMzkzNTQ2OS4uODAyNWQ2NCAxMDA2NDQKLS0tIGEvYmxvY2svbGxfcndfYmxrLmMKKysrIGIvYmxvY2svbGxfcndfYmxrLmMKQEAgLTMzNjcsNyArMzM2Nyw3IEBACiAJCWlmICh1bmxpa2VseShibG9ja19kdW1wKSkgewogCQkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzKCVkKTogJXMgYmxvY2sgJUx1IG9uICVzXG4iLAotCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLAogCQkJCShydyAmIFdSSVRFKSA/ICJXUklURSIgOiAiUkVBRCIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyliaW8tPmJpX3NlY3RvciwKIAkJCQliZGV2bmFtZShiaW8tPmJpX2JkZXYsYikpOwpAQCAtMzczOSw3ICszNzM5LDcgQEAKIAogLyoqCiAgKiBlbmRfcmVxdWVzdCAtIGVuZCBJL08gb24gdGhlIGN1cnJlbnQgc2VnbWVudCBvZiB0aGUgcmVxdWVzdAotICogQHJxOgkJdGhlIHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkCisgKiBAcmVxOgl0aGUgcmVxdWVzdCBiZWluZyBwcm9jZXNzZWQKICAqIEB1cHRvZGF0ZToJZXJyb3IgdmFsdWUgb3IgMC8xIHVwdG9kYXRlIGZsYWcKICAqCiAgKiBEZXNjcmlwdGlvbjoKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCA0Y2NjNWFmLi4xZjVjNzI0IDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC02LDcgKzYsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA1IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KICAqCiAgKiBQb3J0aW9ucyBkZXJpdmVkIGZyb20gQ3J5cHRvYXBpLCBieSBBbGV4YW5kZXIgS2plbGRhYXMgPGFzdG9yQGZhc3Qubm8+Ci0gKiBhbmQgTmV0dGxlLCBieSBOaWVscyBN9mxsZXIuCisgKiBhbmQgTmV0dGxlLCBieSBOaWVscyBNw7ZsbGVyLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpkaWZmIC0tZ2l0IGEvY3J5cHRvL2ZjcnlwdC5jIGIvY3J5cHRvL2ZjcnlwdC5jCmluZGV4IDljMmJiNTMuLmQxNjE5NDkgMTAwNjQ0Ci0tLSBhL2NyeXB0by9mY3J5cHQuYworKysgYi9jcnlwdG8vZmNyeXB0LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCiAgKiBCYXNlZCBvbiBjb2RlOgogICoKLSAqIENvcHlyaWdodCAoYykgMTk5NSAtIDIwMDAgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUgLSAyMDAwIEt1bmdsaWdhIFRla25pc2thIEjDtmdza29sYW4KICAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL0tjb25maWcgYi9kcml2ZXJzL0tjb25maWcKaW5kZXggNGZiMTM0ZC4uMzRmNDBlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9LY29uZmlnCisrKyBiL2RyaXZlcnMvS2NvbmZpZwpAQCAtNTgsNiArNTgsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvaHdtb24vS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3dhdGNoZG9nL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9zc2IvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21mZC9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9NYWtlZmlsZSBiL2RyaXZlcnMvTWFrZWZpbGUKaW5kZXggMTc0YzI3ZS4uY2ZlMzhmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL01ha2VmaWxlCkBAIC02Niw3ICs2Niw3IEBACiBvYmotJChDT05GSUdfVzEpCQkrPSB3MS8KIG9iai0kKENPTkZJR19QT1dFUl9TVVBQTFkpCSs9IHBvd2VyLwogb2JqLSQoQ09ORklHX0hXTU9OKQkJKz0gaHdtb24vCi1vYmotJChDT05GSUdfV0FUQ0hET0cpCQkrPSBjaGFyL3dhdGNoZG9nLworb2JqLSQoQ09ORklHX1dBVENIRE9HKQkJKz0gd2F0Y2hkb2cvCiBvYmotJChDT05GSUdfUEhPTkUpCQkrPSB0ZWxlcGhvbnkvCiBvYmotJChDT05GSUdfTUQpCQkrPSBtZC8KIG9iai0kKENPTkZJR19CVCkJCSs9IGJsdWV0b290aC8KQEAgLTc2LDYgKzc2LDcgQEAKIG9iai0kKENPTkZJR19FSVNBKQkJKz0gZWlzYS8KIG9iai0kKENPTkZJR19MR1VFU1RfR1VFU1QpCSs9IGxndWVzdC8KIG9iai0kKENPTkZJR19DUFVfRlJFUSkJCSs9IGNwdWZyZXEvCitvYmotJChDT05GSUdfQ1BVX0lETEUpCQkrPSBjcHVpZGxlLwogb2JqLSQoQ09ORklHX01NQykJCSs9IG1tYy8KIG9iai0kKENPTkZJR19ORVdfTEVEUykJCSs9IGxlZHMvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORCkJKz0gaW5maW5pYmFuZC8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9LY29uZmlnIGIvZHJpdmVycy9hY3BpL0tjb25maWcKaW5kZXggNDg3NWYwMS4uNWQwZTI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL0tjb25maWcKKysrIGIvZHJpdmVycy9hY3BpL0tjb25maWcKQEAgLTUyLDcgKzUyLDcgQEAKIAlkZXBlbmRzIG9uIFBST0NfRlMKIAktLS1oZWxwLS0tCiAJICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIHRoaXMgb3B0aW9uIGFsbG93cwotCSAgZGVwcmljYXRlZCAvcHJvYy9hY3BpLyBmaWxlcyB0byBleGlzdCwgZXZlbiB3aGVuCisJICBkZXByZWNhdGVkIC9wcm9jL2FjcGkvIGZpbGVzIHRvIGV4aXN0LCBldmVuIHdoZW4KIAkgIHRoZXkgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IGZ1bmN0aW9ucyBpbiAvc3lzLgogCSAgVGhlIGRlcHJlY2F0ZWQgZmlsZXMgKGFuZCB0aGVpciByZXBsYWNlbWVudHMpIGluY2x1ZGU6CiAKQEAgLTg4LDcgKzg4LDcgQEAKIAogY29uZmlnIEFDUElfQUMKIAl0cmlzdGF0ZSAiQUMgQWRhcHRlciIKLQlkZXBlbmRzIG9uIFg4NgorCWRlcGVuZHMgb24gWDg2ICYmIFBPV0VSX1NVUFBMWQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEFDIEFkYXB0ZXIgb2JqZWN0LCB3aGljaCBpbmRpY2F0ZXMKQEAgLTk3LDcgKzk3LDcgQEAKIAogY29uZmlnIEFDUElfQkFUVEVSWQogCXRyaXN0YXRlICJCYXR0ZXJ5IgotCWRlcGVuZHMgb24gWDg2CisJZGVwZW5kcyBvbiBYODYgJiYgUE9XRVJfU1VQUExZCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBzdXBwb3J0IGZvciBiYXR0ZXJ5IGluZm9ybWF0aW9uIHRocm91Z2gKQEAgLTExNyw2ICsxMTcsNyBAQAogY29uZmlnIEFDUElfVklERU8KIAl0cmlzdGF0ZSAiVmlkZW8iCiAJZGVwZW5kcyBvbiBYODYgJiYgQkFDS0xJR0hUX0NMQVNTX0RFVklDRSAmJiBWSURFT19PVVRQVVRfQ09OVFJPTAorCWRlcGVuZHMgb24gSU5QVVQKIAloZWxwCiAJICBUaGlzIGRyaXZlciBpbXBsZW1lbnQgdGhlIEFDUEkgRXh0ZW5zaW9ucyBGb3IgRGlzcGxheSBBZGFwdGVycwogCSAgZm9yIGludGVncmF0ZWQgZ3JhcGhpY3MgZGV2aWNlcyBvbiBtb3RoZXJib2FyZCwgYXMgc3BlY2lmaWVkIGluCkBAIC0zNDksMTIgKzM1MCwxMSBAQAogCQkkPm1vZHByb2JlIGFjcGlfbWVtaG90cGx1ZyAKIAogY29uZmlnIEFDUElfU0JTCi0JdHJpc3RhdGUgIlNtYXJ0IEJhdHRlcnkgU3lzdGVtIChFWFBFUklNRU5UQUwpIgorCXRyaXN0YXRlICJTbWFydCBCYXR0ZXJ5IFN5c3RlbSIKIAlkZXBlbmRzIG9uIFg4NgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBQT1dFUl9TVVBQTFkKIAloZWxwCi0JICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBTbWFydCBCYXR0ZXJ5IFN5c3RlbS4KLQkgIEEgIlNtYXJ0IEJhdHRlcnkiIGlzIHF1aXRlIG9sZCBhbmQgcXVpdGUgcmFyZSBjb21wYXJlZAotCSAgdG8gdG9kYXkncyBBQ1BJICJDb250cm9sIE1ldGhvZCIgYmF0dGVyeS4KKwkgIFRoaXMgZHJpdmVyIGFkZHMgc3VwcG9ydCBmb3IgdGhlIFNtYXJ0IEJhdHRlcnkgU3lzdGVtLCBhbm90aGVyCisJICB0eXBlIG9mIGFjY2VzcyB0byBiYXR0ZXJ5IGluZm9ybWF0aW9uLCBmb3VuZCBvbiBzb21lIGxhcHRvcHMuCiAKIGVuZGlmCSMgQUNQSQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL01ha2VmaWxlIGIvZHJpdmVycy9hY3BpL01ha2VmaWxlCmluZGV4IGQ0MzM2ZjEuLjU0ZTNhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2FjcGkvTWFrZWZpbGUKQEAgLTYwLDMgKzYwLDQgQEAKIG9iai0kKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZKQkrPSBhY3BpX21lbWhvdHBsdWcubwogb2JqLXkJCQkJKz0gY21fc2JzLm8KIG9iai0kKENPTkZJR19BQ1BJX1NCUykJCSs9IHNicy5vCitvYmotJChDT05GSUdfQUNQSV9TQlMpCQkrPSBzYnNoYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWMuYyBiL2RyaXZlcnMvYWNwaS9hYy5jCmluZGV4IDI2ZDcwNzAuLmUwM2RlMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hYy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hYy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KIApAQCAtNzIsMTYgKzczLDM3IEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9hYyB7CisJc3RydWN0IHBvd2VyX3N1cHBseSBjaGFyZ2VyOwogCXN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZTsKIAl1bnNpZ25lZCBsb25nIHN0YXRlOwogfTsKIAorI2RlZmluZSB0b19hY3BpX2FjKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgYWNwaV9hYywgY2hhcmdlcik7CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFjcGlfYWNfZm9wcyA9IHsKIAkub3BlbiA9IGFjcGlfYWNfb3Blbl9mcywKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CitzdGF0aWMgaW50IGdldF9hY19wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkgICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkgICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBhY3BpX2FjICphYyA9IHRvX2FjcGlfYWMocHN5KTsKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9IGFjLT5zdGF0ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgYWNfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsCit9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDIEFkYXB0ZXIgTWFuYWdlbWVudApAQCAtMjA4LDYgKzIzMCw3IEBACiAJCWFjcGlfYnVzX2dlbmVyYXRlX25ldGxpbmtfZXZlbnQoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAogCQkJCQkJICBkZXZpY2UtPmRldi5idXNfaWQsIGV2ZW50LAogCQkJCQkJICAodTMyKSBhYy0+c3RhdGUpOworCQlrb2JqZWN0X3VldmVudCgmYWMtPmNoYXJnZXIuZGV2LT5rb2JqLCBLT0JKX0NIQU5HRSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywKQEAgLTI0NCw3ICsyNjcsMTIgQEAKIAlyZXN1bHQgPSBhY3BpX2FjX2FkZF9mcyhkZXZpY2UpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwotCisJYWMtPmNoYXJnZXIubmFtZSA9IGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpOworCWFjLT5jaGFyZ2VyLnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9NQUlOUzsKKwlhYy0+Y2hhcmdlci5wcm9wZXJ0aWVzID0gYWNfcHJvcHM7CisJYWMtPmNoYXJnZXIubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKGFjX3Byb3BzKTsKKwlhYy0+Y2hhcmdlci5nZXRfcHJvcGVydHkgPSBnZXRfYWNfcHJvcGVydHk7CisJcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZhYy0+ZGV2aWNlLT5kZXYsICZhYy0+Y2hhcmdlcik7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgIEFDUElfQUxMX05PVElGWSwgYWNwaV9hY19ub3RpZnksCiAJCQkJCSAgICAgYWMpOwpAQCAtMjc5LDcgKzMwNyw4IEBACiAKIAlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihkZXZpY2UtPmhhbmRsZSwKIAkJCQkJICAgIEFDUElfQUxMX05PVElGWSwgYWNwaV9hY19ub3RpZnkpOwotCisJaWYgKGFjLT5jaGFyZ2VyLmRldikKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmFjLT5jaGFyZ2VyKTsKIAlhY3BpX2FjX3JlbW92ZV9mcyhkZXZpY2UpOwogCiAJa2ZyZWUoYWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKaW5kZXggOWIyYzBmNy4uNjgxZTI2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2JhdHRlcnkuYworKysgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCkBAIC0xLDYgKzEsOCBAQAogLyoKLSAqICBhY3BpX2JhdHRlcnkuYyAtIEFDUEkgQmF0dGVyeSBEcml2ZXIgKCRSZXZpc2lvbjogMzcgJCkKKyAqICBiYXR0ZXJ5LmMgLSBBQ1BJIEJhdHRlcnkgRHJpdmVyIChSZXZpc2lvbjogMi4wKQogICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFN0YXJpa292c2tpeSA8YXN0YXJpa292c2tpeUBzdXNlLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IFZsYWRpbWlyIExlYmVkZXYgPHZsYWRpbWlyLnAubGViZWRldkBpbnRlbC5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KICAqCkBAIC0yNywyNDQgKzI5LDI4OCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgogCi0jZGVmaW5lIEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOIDB4RkZGRkZGRkYKKyNpbmNsdWRlIDxsaW51eC9wb3dlcl9zdXBwbHkuaD4KIAotI2RlZmluZSBBQ1BJX0JBVFRFUllfRk9STUFUX0JJRgkiTk5OTk5OTk5OU1NTUyIKLSNkZWZpbmUgQUNQSV9CQVRURVJZX0ZPUk1BVF9CU1QJIk5OTk4iCisjZGVmaW5lIEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOIDB4RkZGRkZGRkYKIAogI2RlZmluZSBBQ1BJX0JBVFRFUllfQ09NUE9ORU5UCQkweDAwMDQwMDAwCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9DTEFTUwkJImJhdHRlcnkiCiAjZGVmaW5lIEFDUElfQkFUVEVSWV9ERVZJQ0VfTkFNRQkiQmF0dGVyeSIKICNkZWZpbmUgQUNQSV9CQVRURVJZX05PVElGWV9TVEFUVVMJMHg4MAogI2RlZmluZSBBQ1BJX0JBVFRFUllfTk9USUZZX0lORk8JMHg4MQotI2RlZmluZSBBQ1BJX0JBVFRFUllfVU5JVFNfV0FUVFMJIm1XIgotI2RlZmluZSBBQ1BJX0JBVFRFUllfVU5JVFNfQU1QUwkJIm1BIgogCiAjZGVmaW5lIF9DT01QT05FTlQJCUFDUElfQkFUVEVSWV9DT01QT05FTlQKIAotI2RlZmluZSBBQ1BJX0JBVFRFUllfVVBEQVRFX1RJTUUJMAotCi0jZGVmaW5lIEFDUElfQkFUVEVSWV9OT05FX1VQREFURQkwCi0jZGVmaW5lIEFDUElfQkFUVEVSWV9FQVNZX1VQREFURQkxCi0jZGVmaW5lIEFDUElfQkFUVEVSWV9JTklUX1VQREFURQkyCi0KIEFDUElfTU9EVUxFX05BTUUoImJhdHRlcnkiKTsKIAogTU9EVUxFX0FVVEhPUigiUGF1bCBEaWVmZW5iYXVnaCIpOworTU9EVUxFX0FVVEhPUigiQWxleGV5IFN0YXJpa292c2tpeSA8YXN0YXJpa292c2tpeUBzdXNlLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJBQ1BJIEJhdHRlcnkgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXBkYXRlX3RpbWUgPSBBQ1BJX0JBVFRFUllfVVBEQVRFX1RJTUU7CitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlX3RpbWUgPSAxMDAwOworbW9kdWxlX3BhcmFtKGNhY2hlX3RpbWUsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjYWNoZV90aW1lLCAiY2FjaGUgdGltZSBpbiBtaWxsaXNlY29uZHMiKTsKIAotLyogMCAtIGV2ZXJ5IHRpbWUsID4gMCAtIGJ5IHVwZGF0ZV90aW1lICovCi1tb2R1bGVfcGFyYW0odXBkYXRlX3RpbWUsIHVpbnQsIDA2NDQpOwotCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiBleHRlcm4gc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX2xvY2tfYmF0dGVyeV9kaXIodm9pZCk7CiBleHRlcm4gdm9pZCAqYWNwaV91bmxvY2tfYmF0dGVyeV9kaXIoc3RydWN0IHByb2NfZGlyX2VudHJ5ICphY3BpX2JhdHRlcnlfZGlyKTsKIAotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLXN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpOwotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKK2VudW0gYWNwaV9iYXR0ZXJ5X2ZpbGVzIHsKKwlpbmZvX3RhZyA9IDAsCisJc3RhdGVfdGFnLAorCWFsYXJtX3RhZywKKwlBQ1BJX0JBVFRFUllfTlVNRklMRVMsCit9OworCisjZW5kaWYKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBiYXR0ZXJ5X2RldmljZV9pZHNbXSA9IHsKIAl7IlBOUDBDMEEiLCAwfSwKIAl7IiIsIDB9LAogfTsKKwogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBiYXR0ZXJ5X2RldmljZV9pZHMpOwogCi1zdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfYmF0dGVyeV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiYmF0dGVyeSIsCi0JLmNsYXNzID0gQUNQSV9CQVRURVJZX0NMQVNTLAotCS5pZHMgPSBiYXR0ZXJ5X2RldmljZV9pZHMsCi0JLm9wcyA9IHsKLQkJLmFkZCA9IGFjcGlfYmF0dGVyeV9hZGQsCi0JCS5yZXN1bWUgPSBhY3BpX2JhdHRlcnlfcmVzdW1lLAotCQkucmVtb3ZlID0gYWNwaV9iYXR0ZXJ5X3JlbW92ZSwKLQkJfSwKLX07Ci0KLXN0cnVjdCBhY3BpX2JhdHRlcnlfc3RhdGUgewotCWFjcGlfaW50ZWdlciBzdGF0ZTsKLQlhY3BpX2ludGVnZXIgcHJlc2VudF9yYXRlOwotCWFjcGlfaW50ZWdlciByZW1haW5pbmdfY2FwYWNpdHk7Ci0JYWNwaV9pbnRlZ2VyIHByZXNlbnRfdm9sdGFnZTsKLX07Ci0KLXN0cnVjdCBhY3BpX2JhdHRlcnlfaW5mbyB7Ci0JYWNwaV9pbnRlZ2VyIHBvd2VyX3VuaXQ7Ci0JYWNwaV9pbnRlZ2VyIGRlc2lnbl9jYXBhY2l0eTsKLQlhY3BpX2ludGVnZXIgbGFzdF9mdWxsX2NhcGFjaXR5OwotCWFjcGlfaW50ZWdlciBiYXR0ZXJ5X3RlY2hub2xvZ3k7Ci0JYWNwaV9pbnRlZ2VyIGRlc2lnbl92b2x0YWdlOwotCWFjcGlfaW50ZWdlciBkZXNpZ25fY2FwYWNpdHlfd2FybmluZzsKLQlhY3BpX2ludGVnZXIgZGVzaWduX2NhcGFjaXR5X2xvdzsKLQlhY3BpX2ludGVnZXIgYmF0dGVyeV9jYXBhY2l0eV9ncmFudWxhcml0eV8xOwotCWFjcGlfaW50ZWdlciBiYXR0ZXJ5X2NhcGFjaXR5X2dyYW51bGFyaXR5XzI7Ci0JYWNwaV9zdHJpbmcgbW9kZWxfbnVtYmVyOwotCWFjcGlfc3RyaW5nIHNlcmlhbF9udW1iZXI7Ci0JYWNwaV9zdHJpbmcgYmF0dGVyeV90eXBlOwotCWFjcGlfc3RyaW5nIG9lbV9pbmZvOwotfTsKLQotZW51bSBhY3BpX2JhdHRlcnlfZmlsZXN7Ci0JQUNQSV9CQVRURVJZX0lORk8gPSAwLAotCUFDUElfQkFUVEVSWV9TVEFURSwKLQlBQ1BJX0JBVFRFUllfQUxBUk0sCi0JQUNQSV9CQVRURVJZX05VTUZJTEVTLAotfTsKLQotc3RydWN0IGFjcGlfYmF0dGVyeV9mbGFncyB7Ci0JdTggYmF0dGVyeV9wcmVzZW50X3ByZXY7Ci0JdTggYWxhcm1fcHJlc2VudDsKLQl1OCBpbml0X3VwZGF0ZTsKLQl1OCB1cGRhdGVbQUNQSV9CQVRURVJZX05VTUZJTEVTXTsKLQl1OCBwb3dlcl91bml0OwotfTsKIAogc3RydWN0IGFjcGlfYmF0dGVyeSB7Ci0Jc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgYmF0OwogCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwotCXN0cnVjdCBhY3BpX2JhdHRlcnlfZmxhZ3MgZmxhZ3M7Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGJpZl9kYXRhOwotCXN0cnVjdCBhY3BpX2J1ZmZlciBic3RfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGFsYXJtOwotCXVuc2lnbmVkIGxvbmcgdXBkYXRlX3RpbWVbQUNQSV9CQVRURVJZX05VTUZJTEVTXTsKKwl1bnNpZ25lZCBsb25nIHVwZGF0ZV90aW1lOworCWludCBjdXJyZW50X25vdzsKKwlpbnQgY2FwYWNpdHlfbm93OworCWludCB2b2x0YWdlX25vdzsKKwlpbnQgZGVzaWduX2NhcGFjaXR5OworCWludCBmdWxsX2NoYXJnZV9jYXBhY2l0eTsKKwlpbnQgdGVjaG5vbG9neTsKKwlpbnQgZGVzaWduX3ZvbHRhZ2U7CisJaW50IGRlc2lnbl9jYXBhY2l0eV93YXJuaW5nOworCWludCBkZXNpZ25fY2FwYWNpdHlfbG93OworCWludCBjYXBhY2l0eV9ncmFudWxhcml0eV8xOworCWludCBjYXBhY2l0eV9ncmFudWxhcml0eV8yOworCWludCBhbGFybTsKKwljaGFyIG1vZGVsX251bWJlclszMl07CisJY2hhciBzZXJpYWxfbnVtYmVyWzMyXTsKKwljaGFyIHR5cGVbMzJdOworCWNoYXIgb2VtX2luZm9bMzJdOworCWludCBzdGF0ZTsKKwlpbnQgcG93ZXJfdW5pdDsKKwl1OCBhbGFybV9wcmVzZW50OwogfTsKIAorI2RlZmluZSB0b19hY3BpX2JhdHRlcnkoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBhY3BpX2JhdHRlcnksIGJhdCk7CisKIGlubGluZSBpbnQgYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKIAlyZXR1cm4gYmF0dGVyeS0+ZGV2aWNlLT5zdGF0dXMuYmF0dGVyeV9wcmVzZW50OwogfQotaW5saW5lIGNoYXIgKmFjcGlfYmF0dGVyeV9wb3dlcl91bml0cyhzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQorCitzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV90ZWNobm9sb2d5KHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7Ci0JaWYgKGJhdHRlcnktPmZsYWdzLnBvd2VyX3VuaXQpCi0JCXJldHVybiBBQ1BJX0JBVFRFUllfVU5JVFNfQU1QUzsKLQllbHNlCi0JCXJldHVybiBBQ1BJX0JBVFRFUllfVU5JVFNfV0FUVFM7CisJaWYgKCFzdHJjYXNlY21wKCJOaUNkIiwgYmF0dGVyeS0+dHlwZSkpCisJCXJldHVybiBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9OaUNkOworCWlmICghc3RyY2FzZWNtcCgiTmlNSCIsIGJhdHRlcnktPnR5cGUpKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTmlNSDsKKwlpZiAoIXN0cmNhc2VjbXAoIkxJT04iLCBiYXR0ZXJ5LT50eXBlKSkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX0xJT047CisJaWYgKCFzdHJjYXNlY21wKCJMaVAiLCBiYXR0ZXJ5LT50eXBlKSkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX0xJUE87CisJcmV0dXJuIFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX1VOS05PV047CiB9CiAKLWlubGluZSBhY3BpX2hhbmRsZSBhY3BpX2JhdHRlcnlfaGFuZGxlKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCitzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9nZXRfcHJvcGVydHkoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCSAgICAgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJCSAgICAgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKIHsKLQlyZXR1cm4gYmF0dGVyeS0+ZGV2aWNlLT5oYW5kbGU7CisJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IHRvX2FjcGlfYmF0dGVyeShwc3kpOworCisJaWYgKCghYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpICYmCisJICAgICBwc3AgIT0gUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKKwkJaWYgKGJhdHRlcnktPnN0YXRlICYgMHgwMSkKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19ESVNDSEFSR0lORzsKKwkJZWxzZSBpZiAoYmF0dGVyeS0+c3RhdGUgJiAweDAyKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQllbHNlIGlmIChiYXR0ZXJ5LT5zdGF0ZSA9PSAwKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0ZVTEw7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVDoKKwkJdmFsLT5pbnR2YWwgPSBhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZOgorCQl2YWwtPmludHZhbCA9IGFjcGlfYmF0dGVyeV90ZWNobm9sb2d5KGJhdHRlcnkpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTjoKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5kZXNpZ25fdm9sdGFnZSAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+dm9sdGFnZV9ub3cgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XOgorCQl2YWwtPmludHZhbCA9IGJhdHRlcnktPmN1cnJlbnRfbm93ICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9ERVNJR046CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfRlVMTF9ERVNJR046CisJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+ZGVzaWduX2NhcGFjaXR5ICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTDoKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMOgorCQl2YWwtPmludHZhbCA9IGJhdHRlcnktPmZ1bGxfY2hhcmdlX2NhcGFjaXR5ICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5jYXBhY2l0eV9ub3cgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX01PREVMX05BTUU6CisJCXZhbC0+c3RydmFsID0gYmF0dGVyeS0+bW9kZWxfbnVtYmVyOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUjoKKwkJdmFsLT5zdHJ2YWwgPSBiYXR0ZXJ5LT5vZW1faW5mbzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOwogfQogCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgY2hhcmdlX2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9ERVNJR04sCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTEwsCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9NT0RFTF9OQU1FLAorCVBPV0VSX1NVUFBMWV9QUk9QX01BTlVGQUNUVVJFUiwKK307CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBlbmVyZ3lfYmF0dGVyeV9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfRlVMTCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX01PREVMX05BTUUsCisJUE9XRVJfU1VQUExZX1BST1BfTUFOVUZBQ1RVUkVSLAorfTsKKworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUworaW5saW5lIGNoYXIgKmFjcGlfYmF0dGVyeV91bml0cyhzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQoreworCXJldHVybiAoYmF0dGVyeS0+cG93ZXJfdW5pdCk/Im1BIjoibVciOworfQorI2VuZGlmCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQmF0dGVyeSBNYW5hZ2VtZW50CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworc3RydWN0IGFjcGlfb2Zmc2V0cyB7CisJc2l6ZV90IG9mZnNldDsJCS8qIG9mZnNldCBpbnNpZGUgc3RydWN0IGFjcGlfc2JzX2JhdHRlcnkgKi8KKwl1OCBtb2RlOwkJLyogaW50IG9yIHN0cmluZz8gKi8KK307CiAKLXN0YXRpYyB2b2lkIGFjcGlfYmF0dGVyeV9jaGVja19yZXN1bHQoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSwgaW50IHJlc3VsdCkKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9vZmZzZXRzIHN0YXRlX29mZnNldHNbXSA9IHsKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgc3RhdGUpLCAwfSwKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgY3VycmVudF9ub3cpLCAwfSwKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgY2FwYWNpdHlfbm93KSwgMH0sCisJe29mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHZvbHRhZ2Vfbm93KSwgMH0sCit9OworCitzdGF0aWMgc3RydWN0IGFjcGlfb2Zmc2V0cyBpbmZvX29mZnNldHNbXSA9IHsKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgcG93ZXJfdW5pdCksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBkZXNpZ25fY2FwYWNpdHkpLCAwfSwKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgZnVsbF9jaGFyZ2VfY2FwYWNpdHkpLCAwfSwKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgdGVjaG5vbG9neSksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBkZXNpZ25fdm9sdGFnZSksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBkZXNpZ25fY2FwYWNpdHlfd2FybmluZyksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBkZXNpZ25fY2FwYWNpdHlfbG93KSwgMH0sCisJe29mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIGNhcGFjaXR5X2dyYW51bGFyaXR5XzEpLCAwfSwKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgY2FwYWNpdHlfZ3JhbnVsYXJpdHlfMiksIDB9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBtb2RlbF9udW1iZXIpLCAxfSwKKwl7b2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgc2VyaWFsX251bWJlciksIDF9LAorCXtvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCB0eXBlKSwgMX0sCisJe29mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIG9lbV9pbmZvKSwgMX0sCit9OworCitzdGF0aWMgaW50IGV4dHJhY3RfcGFja2FnZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5LAorCQkJICAgdW5pb24gYWNwaV9vYmplY3QgKnBhY2thZ2UsCisJCQkgICBzdHJ1Y3QgYWNwaV9vZmZzZXRzICpvZmZzZXRzLCBpbnQgbnVtKQogewotCWlmICghYmF0dGVyeSkKLQkJcmV0dXJuOwotCi0JaWYgKHJlc3VsdCkgewotCQliYXR0ZXJ5LT5mbGFncy5pbml0X3VwZGF0ZSA9IDE7Ci0JfQotfQotCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9leHRyYWN0X3BhY2thZ2Uoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSwKLQkJCQkJdW5pb24gYWNwaV9vYmplY3QgKnBhY2thZ2UsCi0JCQkJCXN0cnVjdCBhY3BpX2J1ZmZlciAqZm9ybWF0LAotCQkJCQlzdHJ1Y3QgYWNwaV9idWZmZXIgKmRhdGEsCi0JCQkJCWNoYXIgKnBhY2thZ2VfbmFtZSkKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgZGF0YV9udWxsID0geyAwLCBOVUxMIH07Ci0KLQlzdGF0dXMgPSBhY3BpX2V4dHJhY3RfcGFja2FnZShwYWNrYWdlLCBmb3JtYXQsICZkYXRhX251bGwpOwotCWlmIChzdGF0dXMgIT0gQUVfQlVGRkVSX09WRVJGTE9XKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJFeHRyYWN0aW5nIHNpemUgJXMiLAotCQkJCXBhY2thZ2VfbmFtZSkpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoZGF0YV9udWxsLmxlbmd0aCAhPSBkYXRhLT5sZW5ndGgpIHsKLQkJa2ZyZWUoZGF0YS0+cG9pbnRlcik7Ci0JCWRhdGEtPnBvaW50ZXIgPSBremFsbG9jKGRhdGFfbnVsbC5sZW5ndGgsIEdGUF9LRVJORUwpOwotCQlpZiAoIWRhdGEtPnBvaW50ZXIpIHsKLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9OT19NRU1PUlksICJremFsbG9jKCkiKSk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKKwlpbnQgaSwgKng7CisJdW5pb24gYWNwaV9vYmplY3QgKmVsZW1lbnQ7CisJaWYgKHBhY2thZ2UtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpCisJCXJldHVybiAtRUZBVUxUOworCWZvciAoaSA9IDA7IGkgPCBudW07ICsraSkgeworCQlpZiAocGFja2FnZS0+cGFja2FnZS5jb3VudCA8PSBpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWVsZW1lbnQgPSAmcGFja2FnZS0+cGFja2FnZS5lbGVtZW50c1tpXTsKKwkJaWYgKG9mZnNldHNbaV0ubW9kZSkgeworCQkJaWYgKGVsZW1lbnQtPnR5cGUgIT0gQUNQSV9UWVBFX1NUUklORyAmJgorCQkJICAgIGVsZW1lbnQtPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXN0cm5jcHkoKHU4ICopYmF0dGVyeSArIG9mZnNldHNbaV0ub2Zmc2V0LAorCQkJCWVsZW1lbnQtPnN0cmluZy5wb2ludGVyLCAzMik7CisJCX0gZWxzZSB7CisJCQlpZiAoZWxlbWVudC0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXggPSAoaW50ICopKCh1OCAqKWJhdHRlcnkgKyBvZmZzZXRzW2ldLm9mZnNldCk7CisJCQkqeCA9IGVsZW1lbnQtPmludGVnZXIudmFsdWU7CiAJCX0KLQkJZGF0YS0+bGVuZ3RoID0gZGF0YV9udWxsLmxlbmd0aDsKIAl9Ci0KLQlzdGF0dXMgPSBhY3BpX2V4dHJhY3RfcGFja2FnZShwYWNrYWdlLCBmb3JtYXQsIGRhdGEpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXh0cmFjdGluZyAlcyIsCi0JCQkJcGFja2FnZV9uYW1lKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9nZXRfc3RhdHVzKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlyZXN1bHQgPSBhY3BpX2J1c19nZXRfc3RhdHVzKGJhdHRlcnktPmRldmljZSk7Ci0JaWYgKHJlc3VsdCkgeworCWlmIChhY3BpX2J1c19nZXRfc3RhdHVzKGJhdHRlcnktPmRldmljZSkpIHsKIAkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLCAiRXZhbHVhdGluZyBfU1RBIikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfZ2V0X2luZm8oc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgcmVzdWx0ID0gLUVGQVVMVDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwogCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07Ci0Jc3RydWN0IGFjcGlfYnVmZmVyIGZvcm1hdCA9IHsgc2l6ZW9mKEFDUElfQkFUVEVSWV9GT1JNQVRfQklGKSwKLQkJQUNQSV9CQVRURVJZX0ZPUk1BVF9CSUYKLQl9OwotCXVuaW9uIGFjcGlfb2JqZWN0ICpwYWNrYWdlID0gTlVMTDsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgKmRhdGEgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2JhdHRlcnlfaW5mbyAqYmlmID0gTlVMTDsKLQotCWJhdHRlcnktPnVwZGF0ZV90aW1lW0FDUElfQkFUVEVSWV9JTkZPXSA9IGdldF9zZWNvbmRzKCk7CiAKIAlpZiAoIWFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKQogCQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZiYXR0ZXJ5LT5sb2NrKTsKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChiYXR0ZXJ5LT5kZXZpY2UtPmhhbmRsZSwgIl9CSUYiLAorCQkJCSAgICAgIE5VTEwsICZidWZmZXIpOworCW11dGV4X3VubG9jaygmYmF0dGVyeS0+bG9jayk7CiAKLQkvKiBFdmFsdWF0ZSBfQklGICovCi0KLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX29iamVjdChhY3BpX2JhdHRlcnlfaGFuZGxlKGJhdHRlcnkpLCAiX0JJRiIsIE5VTEwsCi0JCQkJICZidWZmZXIpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfQklGIikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwYWNrYWdlID0gYnVmZmVyLnBvaW50ZXI7Ci0KLQlkYXRhID0gJmJhdHRlcnktPmJpZl9kYXRhOwotCi0JLyogRXh0cmFjdCBQYWNrYWdlIERhdGEgKi8KLQotCXJlc3VsdCA9Ci0JICAgIGFjcGlfYmF0dGVyeV9leHRyYWN0X3BhY2thZ2UoYmF0dGVyeSwgcGFja2FnZSwgJmZvcm1hdCwgZGF0YSwKLQkJCQkJICJfQklGIik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBlbmQ7Ci0KLSAgICAgIGVuZDoKLQorCXJlc3VsdCA9IGV4dHJhY3RfcGFja2FnZShiYXR0ZXJ5LCBidWZmZXIucG9pbnRlciwKKwkJCQkgaW5mb19vZmZzZXRzLCBBUlJBWV9TSVpFKGluZm9fb2Zmc2V0cykpOwogCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKLQotCWlmICghcmVzdWx0KSB7Ci0JCWJpZiA9IGRhdGEtPnBvaW50ZXI7Ci0JCWJhdHRlcnktPmZsYWdzLnBvd2VyX3VuaXQgPSBiaWYtPnBvd2VyX3VuaXQ7Ci0JfQotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjczLDM0MiArMzE5LDIwMyBAQAogCWludCByZXN1bHQgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKLQlzdHJ1Y3QgYWNwaV9idWZmZXIgZm9ybWF0ID0geyBzaXplb2YoQUNQSV9CQVRURVJZX0ZPUk1BVF9CU1QpLAotCQlBQ1BJX0JBVFRFUllfRk9STUFUX0JTVAotCX07Ci0JdW5pb24gYWNwaV9vYmplY3QgKnBhY2thZ2UgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2J1ZmZlciAqZGF0YSA9IE5VTEw7Ci0KLQliYXR0ZXJ5LT51cGRhdGVfdGltZVtBQ1BJX0JBVFRFUllfU1RBVEVdID0gZ2V0X3NlY29uZHMoKTsKIAogCWlmICghYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpCiAJCXJldHVybiAwOwogCi0JLyogRXZhbHVhdGUgX0JTVCAqLworCWlmIChiYXR0ZXJ5LT51cGRhdGVfdGltZSAmJgorCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBiYXR0ZXJ5LT51cGRhdGVfdGltZSArCisJCQltc2Vjc190b19qaWZmaWVzKGNhY2hlX3RpbWUpKSkKKwkJcmV0dXJuIDA7CiAKLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX29iamVjdChhY3BpX2JhdHRlcnlfaGFuZGxlKGJhdHRlcnkpLCAiX0JTVCIsIE5VTEwsCi0JCQkJICZidWZmZXIpOworCW11dGV4X2xvY2soJmJhdHRlcnktPmxvY2spOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGJhdHRlcnktPmRldmljZS0+aGFuZGxlLCAiX0JTVCIsCisJCQkJICAgICAgTlVMTCwgJmJ1ZmZlcik7CisJbXV0ZXhfdW5sb2NrKCZiYXR0ZXJ5LT5sb2NrKTsKKwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiRXZhbHVhdGluZyBfQlNUIikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlwYWNrYWdlID0gYnVmZmVyLnBvaW50ZXI7Ci0KLQlkYXRhID0gJmJhdHRlcnktPmJzdF9kYXRhOwotCi0JLyogRXh0cmFjdCBQYWNrYWdlIERhdGEgKi8KLQotCXJlc3VsdCA9Ci0JICAgIGFjcGlfYmF0dGVyeV9leHRyYWN0X3BhY2thZ2UoYmF0dGVyeSwgcGFja2FnZSwgJmZvcm1hdCwgZGF0YSwKLQkJCQkJICJfQlNUIik7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBlbmQ7Ci0KLSAgICAgIGVuZDoKKwlyZXN1bHQgPSBleHRyYWN0X3BhY2thZ2UoYmF0dGVyeSwgYnVmZmVyLnBvaW50ZXIsCisJCQkJIHN0YXRlX29mZnNldHMsIEFSUkFZX1NJWkUoc3RhdGVfb2Zmc2V0cykpOworCWJhdHRlcnktPnVwZGF0ZV90aW1lID0gamlmZmllczsKIAlrZnJlZShidWZmZXIucG9pbnRlcik7Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9nZXRfYWxhcm0oc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKLXsKLQliYXR0ZXJ5LT51cGRhdGVfdGltZVtBQ1BJX0JBVFRFUllfQUxBUk1dID0gZ2V0X3NlY29uZHMoKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgYWxhcm0pCitzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwotCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzAgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CisJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUiB9OwogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGFyZ19saXN0ID0geyAxLCAmYXJnMCB9OwogCi0JYmF0dGVyeS0+dXBkYXRlX3RpbWVbQUNQSV9CQVRURVJZX0FMQVJNXSA9IGdldF9zZWNvbmRzKCk7Ci0KLQlpZiAoIWFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKQorCWlmICghYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSl8fCAhYmF0dGVyeS0+YWxhcm1fcHJlc2VudCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWJhdHRlcnktPmZsYWdzLmFsYXJtX3ByZXNlbnQpCi0JCXJldHVybiAtRU5PREVWOworCWFyZzAuaW50ZWdlci52YWx1ZSA9IGJhdHRlcnktPmFsYXJtOwogCi0JYXJnMC5pbnRlZ2VyLnZhbHVlID0gYWxhcm07Ci0KLQlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX29iamVjdChhY3BpX2JhdHRlcnlfaGFuZGxlKGJhdHRlcnkpLCAiX0JUUCIsCisJbXV0ZXhfbG9jaygmYmF0dGVyeS0+bG9jayk7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYmF0dGVyeS0+ZGV2aWNlLT5oYW5kbGUsICJfQlRQIiwKIAkJCQkgJmFyZ19saXN0LCBOVUxMKTsKKwltdXRleF91bmxvY2soJmJhdHRlcnktPmxvY2spOworCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkFsYXJtIHNldCB0byAlZFxuIiwgKHUzMikgYWxhcm0pKTsKLQotCWJhdHRlcnktPmFsYXJtID0gYWxhcm07Ci0KKwlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICJBbGFybSBzZXQgdG8gJWRcbiIsIGJhdHRlcnktPmFsYXJtKSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2luaXRfYWxhcm0oc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKLQlpbnQgcmVzdWx0ID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKIAlhY3BpX2hhbmRsZSBoYW5kbGUgPSBOVUxMOwotCXN0cnVjdCBhY3BpX2JhdHRlcnlfaW5mbyAqYmlmID0gYmF0dGVyeS0+YmlmX2RhdGEucG9pbnRlcjsKLQl1bnNpZ25lZCBsb25nIGFsYXJtID0gYmF0dGVyeS0+YWxhcm07CiAKIAkvKiBTZWUgaWYgYWxhcm1zIGFyZSBzdXBwb3J0ZWQsIGFuZCBpZiBzbywgc2V0IGRlZmF1bHQgKi8KLQotCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShhY3BpX2JhdHRlcnlfaGFuZGxlKGJhdHRlcnkpLCAiX0JUUCIsICZoYW5kbGUpOwotCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewotCQliYXR0ZXJ5LT5mbGFncy5hbGFybV9wcmVzZW50ID0gMTsKLQkJaWYgKCFhbGFybSAmJiBiaWYpIHsKLQkJCWFsYXJtID0gYmlmLT5kZXNpZ25fY2FwYWNpdHlfd2FybmluZzsKLQkJfQotCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfc2V0X2FsYXJtKGJhdHRlcnksIGFsYXJtKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCX0gZWxzZSB7Ci0JCWJhdHRlcnktPmZsYWdzLmFsYXJtX3ByZXNlbnQgPSAwOworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShiYXR0ZXJ5LT5kZXZpY2UtPmhhbmRsZSwgIl9CVFAiLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJYmF0dGVyeS0+YWxhcm1fcHJlc2VudCA9IDA7CisJCXJldHVybiAwOwogCX0KLQotICAgICAgZW5kOgotCi0JcmV0dXJuIHJlc3VsdDsKKwliYXR0ZXJ5LT5hbGFybV9wcmVzZW50ID0gMTsKKwlpZiAoIWJhdHRlcnktPmFsYXJtKQorCQliYXR0ZXJ5LT5hbGFybSA9IGJhdHRlcnktPmRlc2lnbl9jYXBhY2l0eV93YXJuaW5nOworCXJldHVybiBhY3BpX2JhdHRlcnlfc2V0X2FsYXJtKGJhdHRlcnkpOwogfQogCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9pbml0X3VwZGF0ZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQorc3RhdGljIGludCBhY3BpX2JhdHRlcnlfdXBkYXRlKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X3N0YXR1cyhiYXR0ZXJ5KTsKLQlpZiAocmVzdWx0KQorCWludCBzYXZlZF9wcmVzZW50ID0gYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSk7CisJaW50IHJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfc3RhdHVzKGJhdHRlcnkpOworCWlmIChyZXN1bHQgfHwgIWFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKQogCQlyZXR1cm4gcmVzdWx0OwotCi0JYmF0dGVyeS0+ZmxhZ3MuYmF0dGVyeV9wcmVzZW50X3ByZXYgPSBhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KTsKLQotCWlmIChhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KSkgeworCWlmIChzYXZlZF9wcmVzZW50ICE9IGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpIHx8CisJICAgICFiYXR0ZXJ5LT51cGRhdGVfdGltZSkgeworCQliYXR0ZXJ5LT51cGRhdGVfdGltZSA9IDA7CiAJCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfaW5mbyhiYXR0ZXJ5KTsKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7Ci0JCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoYmF0dGVyeSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlyZXR1cm4gcmVzdWx0OwotCisJCWlmIChiYXR0ZXJ5LT5wb3dlcl91bml0KSB7CisJCQliYXR0ZXJ5LT5iYXQucHJvcGVydGllcyA9IGNoYXJnZV9iYXR0ZXJ5X3Byb3BzOworCQkJYmF0dGVyeS0+YmF0Lm51bV9wcm9wZXJ0aWVzID0KKwkJCQlBUlJBWV9TSVpFKGNoYXJnZV9iYXR0ZXJ5X3Byb3BzKTsKKwkJfSBlbHNlIHsKKwkJCWJhdHRlcnktPmJhdC5wcm9wZXJ0aWVzID0gZW5lcmd5X2JhdHRlcnlfcHJvcHM7CisJCQliYXR0ZXJ5LT5iYXQubnVtX3Byb3BlcnRpZXMgPQorCQkJCUFSUkFZX1NJWkUoZW5lcmd5X2JhdHRlcnlfcHJvcHMpOworCQl9CiAJCWFjcGlfYmF0dGVyeV9pbml0X2FsYXJtKGJhdHRlcnkpOwogCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3VwZGF0ZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5LAotCQkJICAgICAgIGludCB1cGRhdGUsIGludCAqdXBkYXRlX3Jlc3VsdF9wdHIpCi17Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IHVwZGF0ZV9yZXN1bHQgPSBBQ1BJX0JBVFRFUllfTk9ORV9VUERBVEU7Ci0KLQlpZiAoIWFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKSB7Ci0JCXVwZGF0ZSA9IDE7Ci0JfQotCi0JaWYgKGJhdHRlcnktPmZsYWdzLmluaXRfdXBkYXRlKSB7Ci0JCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9pbml0X3VwZGF0ZShiYXR0ZXJ5KTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZW5kOwotCQl1cGRhdGVfcmVzdWx0ID0gQUNQSV9CQVRURVJZX0lOSVRfVVBEQVRFOwotCX0gZWxzZSBpZiAodXBkYXRlKSB7Ci0JCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfc3RhdHVzKGJhdHRlcnkpOwotCQlpZiAocmVzdWx0KQotCQkJZ290byBlbmQ7Ci0JCWlmICgoIWJhdHRlcnktPmZsYWdzLmJhdHRlcnlfcHJlc2VudF9wcmV2ICYgYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpCi0JCSAgICB8fCAoYmF0dGVyeS0+ZmxhZ3MuYmF0dGVyeV9wcmVzZW50X3ByZXYgJiAhYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpKSB7Ci0JCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfaW5pdF91cGRhdGUoYmF0dGVyeSk7Ci0JCQlpZiAocmVzdWx0KQotCQkJCWdvdG8gZW5kOwotCQkJdXBkYXRlX3Jlc3VsdCA9IEFDUElfQkFUVEVSWV9JTklUX1VQREFURTsKLQkJfSBlbHNlIHsKLQkJCXVwZGF0ZV9yZXN1bHQgPSBBQ1BJX0JBVFRFUllfRUFTWV9VUERBVEU7Ci0JCX0KLQl9Ci0KLSAgICAgIGVuZDoKLQotCWJhdHRlcnktPmZsYWdzLmluaXRfdXBkYXRlID0gKHJlc3VsdCAhPSAwKTsKLQotCSp1cGRhdGVfcmVzdWx0X3B0ciA9IHVwZGF0ZV9yZXN1bHQ7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBhY3BpX2JhdHRlcnlfbm90aWZ5X3VwZGF0ZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQotewotCWFjcGlfYmF0dGVyeV9nZXRfc3RhdHVzKGJhdHRlcnkpOwotCi0JaWYgKGJhdHRlcnktPmZsYWdzLmluaXRfdXBkYXRlKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKCFiYXR0ZXJ5LT5mbGFncy5iYXR0ZXJ5X3ByZXNlbnRfcHJldiAmCi0JICAgICBhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KSkgfHwKLQkgICAgKGJhdHRlcnktPmZsYWdzLmJhdHRlcnlfcHJlc2VudF9wcmV2ICYKLQkgICAgICFhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KSkpIHsKLQkJYmF0dGVyeS0+ZmxhZ3MuaW5pdF91cGRhdGUgPSAxOwotCX0gZWxzZSB7Ci0JCWJhdHRlcnktPmZsYWdzLnVwZGF0ZVtBQ1BJX0JBVFRFUllfSU5GT10gPSAxOwotCQliYXR0ZXJ5LT5mbGFncy51cGRhdGVbQUNQSV9CQVRURVJZX1NUQVRFXSA9IDE7Ci0JCWJhdHRlcnktPmZsYWdzLnVwZGF0ZVtBQ1BJX0JBVFRFUllfQUxBUk1dID0gMTsKLQl9CisJcmV0dXJuIGFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoYmF0dGVyeSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUyBJbnRlcmZhY2UgKC9wcm9jKQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYWNwaV9iYXR0ZXJ5X2RpcjsKIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcHJpbnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgaW50IHJlc3VsdCkKIHsKIAlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBhY3BpX2JhdHRlcnlfaW5mbyAqYmlmID0gTlVMTDsKLQljaGFyICp1bml0cyA9ICI/IjsKIAogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCi0JaWYgKGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKQotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICB5ZXNcbiIpOwotCWVsc2UgewotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICBub1xuIik7CisJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50OiAgICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgIGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpPyJ5ZXMiOiJubyIpOworCWlmICghYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpCiAJCWdvdG8gZW5kOwotCX0KLQotCWJpZiA9IGJhdHRlcnktPmJpZl9kYXRhLnBvaW50ZXI7Ci0JaWYgKCFiaWYpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLCAiQklGIGJ1ZmZlciBpcyBOVUxMIikpOwotCQlyZXN1bHQgPSAtRU5PREVWOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBCYXR0ZXJ5IFVuaXRzICovCi0KLQl1bml0cyA9IGFjcGlfYmF0dGVyeV9wb3dlcl91bml0cyhiYXR0ZXJ5KTsKLQotCWlmIChiaWYtPmRlc2lnbl9jYXBhY2l0eSA9PSBBQ1BJX0JBVFRFUllfVkFMVUVfVU5LTk9XTikKKwlpZiAoYmF0dGVyeS0+ZGVzaWduX2NhcGFjaXR5ID09IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOKQogCQlzZXFfcHJpbnRmKHNlcSwgImRlc2lnbiBjYXBhY2l0eTogICAgICAgICB1bmtub3duXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYoc2VxLCAiZGVzaWduIGNhcGFjaXR5OiAgICAgICAgICVkICVzaFxuIiwKLQkJCSAgICh1MzIpIGJpZi0+ZGVzaWduX2NhcGFjaXR5LCB1bml0cyk7CisJCQkgICBiYXR0ZXJ5LT5kZXNpZ25fY2FwYWNpdHksCisJCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogCi0JaWYgKGJpZi0+bGFzdF9mdWxsX2NhcGFjaXR5ID09IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOKQorCWlmIChiYXR0ZXJ5LT5mdWxsX2NoYXJnZV9jYXBhY2l0eSA9PSBBQ1BJX0JBVFRFUllfVkFMVUVfVU5LTk9XTikKIAkJc2VxX3ByaW50ZihzZXEsICJsYXN0IGZ1bGwgY2FwYWNpdHk6ICAgICAgdW5rbm93blxuIik7CiAJZWxzZQogCQlzZXFfcHJpbnRmKHNlcSwgImxhc3QgZnVsbCBjYXBhY2l0eTogICAgICAlZCAlc2hcbiIsCi0JCQkgICAodTMyKSBiaWYtPmxhc3RfZnVsbF9jYXBhY2l0eSwgdW5pdHMpOworCQkJICAgYmF0dGVyeS0+ZnVsbF9jaGFyZ2VfY2FwYWNpdHksCisJCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogCi0Jc3dpdGNoICgodTMyKSBiaWYtPmJhdHRlcnlfdGVjaG5vbG9neSkgewotCWNhc2UgMDoKLQkJc2VxX3ByaW50ZihzZXEsICJiYXR0ZXJ5IHRlY2hub2xvZ3k6ICAgICAgbm9uLXJlY2hhcmdlYWJsZVxuIik7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJc2VxX3ByaW50ZihzZXEsICJiYXR0ZXJ5IHRlY2hub2xvZ3k6ICAgICAgcmVjaGFyZ2VhYmxlXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc2VxX3ByaW50ZihzZXEsICJiYXR0ZXJ5IHRlY2hub2xvZ3k6ICAgICAgdW5rbm93blxuIik7Ci0JCWJyZWFrOwotCX0KKwlzZXFfcHJpbnRmKHNlcSwgImJhdHRlcnkgdGVjaG5vbG9neTogICAgICAlc3JlY2hhcmdlYWJsZVxuIiwKKwkJICAgKCFiYXR0ZXJ5LT50ZWNobm9sb2d5KT8ibm9uLSI6IiIpOwogCi0JaWYgKGJpZi0+ZGVzaWduX3ZvbHRhZ2UgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCisJaWYgKGJhdHRlcnktPmRlc2lnbl92b2x0YWdlID09IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOKQogCQlzZXFfcHJpbnRmKHNlcSwgImRlc2lnbiB2b2x0YWdlOiAgICAgICAgICB1bmtub3duXG4iKTsKIAllbHNlCiAJCXNlcV9wcmludGYoc2VxLCAiZGVzaWduIHZvbHRhZ2U6ICAgICAgICAgICVkIG1WXG4iLAotCQkJICAgKHUzMikgYmlmLT5kZXNpZ25fdm9sdGFnZSk7CisJCQkgICBiYXR0ZXJ5LT5kZXNpZ25fdm9sdGFnZSk7CiAJc2VxX3ByaW50ZihzZXEsICJkZXNpZ24gY2FwYWNpdHkgd2FybmluZzogJWQgJXNoXG4iLAotCQkgICAodTMyKSBiaWYtPmRlc2lnbl9jYXBhY2l0eV93YXJuaW5nLCB1bml0cyk7CisJCSAgIGJhdHRlcnktPmRlc2lnbl9jYXBhY2l0eV93YXJuaW5nLAorCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogCXNlcV9wcmludGYoc2VxLCAiZGVzaWduIGNhcGFjaXR5IGxvdzogICAgICVkICVzaFxuIiwKLQkJICAgKHUzMikgYmlmLT5kZXNpZ25fY2FwYWNpdHlfbG93LCB1bml0cyk7CisJCSAgIGJhdHRlcnktPmRlc2lnbl9jYXBhY2l0eV9sb3csCisJCSAgIGFjcGlfYmF0dGVyeV91bml0cyhiYXR0ZXJ5KSk7CiAJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBncmFudWxhcml0eSAxOiAgJWQgJXNoXG4iLAotCQkgICAodTMyKSBiaWYtPmJhdHRlcnlfY2FwYWNpdHlfZ3JhbnVsYXJpdHlfMSwgdW5pdHMpOworCQkgICBiYXR0ZXJ5LT5jYXBhY2l0eV9ncmFudWxhcml0eV8xLAorCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogCXNlcV9wcmludGYoc2VxLCAiY2FwYWNpdHkgZ3JhbnVsYXJpdHkgMjogICVkICVzaFxuIiwKLQkJICAgKHUzMikgYmlmLT5iYXR0ZXJ5X2NhcGFjaXR5X2dyYW51bGFyaXR5XzIsIHVuaXRzKTsKLQlzZXFfcHJpbnRmKHNlcSwgIm1vZGVsIG51bWJlcjogICAgICAgICAgICAlc1xuIiwgYmlmLT5tb2RlbF9udW1iZXIpOwotCXNlcV9wcmludGYoc2VxLCAic2VyaWFsIG51bWJlcjogICAgICAgICAgICVzXG4iLCBiaWYtPnNlcmlhbF9udW1iZXIpOwotCXNlcV9wcmludGYoc2VxLCAiYmF0dGVyeSB0eXBlOiAgICAgICAgICAgICVzXG4iLCBiaWYtPmJhdHRlcnlfdHlwZSk7Ci0Jc2VxX3ByaW50ZihzZXEsICJPRU0gaW5mbzogICAgICAgICAgICAgICAgJXNcbiIsIGJpZi0+b2VtX2luZm8pOwotCisJCSAgIGJhdHRlcnktPmNhcGFjaXR5X2dyYW51bGFyaXR5XzIsCisJCSAgIGFjcGlfYmF0dGVyeV91bml0cyhiYXR0ZXJ5KSk7CisJc2VxX3ByaW50ZihzZXEsICJtb2RlbCBudW1iZXI6ICAgICAgICAgICAgJXNcbiIsIGJhdHRlcnktPm1vZGVsX251bWJlcik7CisJc2VxX3ByaW50ZihzZXEsICJzZXJpYWwgbnVtYmVyOiAgICAgICAgICAgJXNcbiIsIGJhdHRlcnktPnNlcmlhbF9udW1iZXIpOworCXNlcV9wcmludGYoc2VxLCAiYmF0dGVyeSB0eXBlOiAgICAgICAgICAgICVzXG4iLCBiYXR0ZXJ5LT50eXBlKTsKKwlzZXFfcHJpbnRmKHNlcSwgIk9FTSBpbmZvOiAgICAgICAgICAgICAgICAlc1xuIiwgYmF0dGVyeS0+b2VtX2luZm8pOwogICAgICAgZW5kOgotCiAJaWYgKHJlc3VsdCkKIAkJc2VxX3ByaW50ZihzZXEsICJFUlJPUjogVW5hYmxlIHRvIHJlYWQgYmF0dGVyeSBpbmZvXG4iKTsKLQogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3ByaW50X3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBpbnQgcmVzdWx0KQogewogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBzZXEtPnByaXZhdGU7Ci0Jc3RydWN0IGFjcGlfYmF0dGVyeV9zdGF0ZSAqYnN0ID0gTlVMTDsKLQljaGFyICp1bml0cyA9ICI/IjsKIAogCWlmIChyZXN1bHQpCiAJCWdvdG8gZW5kOwogCi0JaWYgKGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKQotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICB5ZXNcbiIpOwotCWVsc2UgewotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICBub1xuIik7CisJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50OiAgICAgICAgICAgICAgICAgJXNcbiIsCisJCSAgIGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpPyJ5ZXMiOiJubyIpOworCWlmICghYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpCiAJCWdvdG8gZW5kOwotCX0KIAotCWJzdCA9IGJhdHRlcnktPmJzdF9kYXRhLnBvaW50ZXI7Ci0JaWYgKCFic3QpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLCAiQlNUIGJ1ZmZlciBpcyBOVUxMIikpOwotCQlyZXN1bHQgPSAtRU5PREVWOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQkvKiBCYXR0ZXJ5IFVuaXRzICovCi0KLQl1bml0cyA9IGFjcGlfYmF0dGVyeV9wb3dlcl91bml0cyhiYXR0ZXJ5KTsKLQotCWlmICghKGJzdC0+c3RhdGUgJiAweDA0KSkKLQkJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBzdGF0ZTogICAgICAgICAgb2tcbiIpOwotCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBzdGF0ZTogICAgICAgICAgY3JpdGljYWxcbiIpOwotCi0JaWYgKChic3QtPnN0YXRlICYgMHgwMSkgJiYgKGJzdC0+c3RhdGUgJiAweDAyKSkgeworCXNlcV9wcmludGYoc2VxLCAiY2FwYWNpdHkgc3RhdGU6ICAgICAgICAgICVzXG4iLAorCQkJKGJhdHRlcnktPnN0YXRlICYgMHgwNCk/ImNyaXRpY2FsIjoib2siKTsKKwlpZiAoKGJhdHRlcnktPnN0YXRlICYgMHgwMSkgJiYgKGJhdHRlcnktPnN0YXRlICYgMHgwMikpCiAJCXNlcV9wcmludGYoc2VxLAogCQkJICAgImNoYXJnaW5nIHN0YXRlOiAgICAgICAgICBjaGFyZ2luZy9kaXNjaGFyZ2luZ1xuIik7Ci0JfSBlbHNlIGlmIChic3QtPnN0YXRlICYgMHgwMSkKKwllbHNlIGlmIChiYXR0ZXJ5LT5zdGF0ZSAmIDB4MDEpCiAJCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGRpc2NoYXJnaW5nXG4iKTsKLQllbHNlIGlmIChic3QtPnN0YXRlICYgMHgwMikKKwllbHNlIGlmIChiYXR0ZXJ5LT5zdGF0ZSAmIDB4MDIpCiAJCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGNoYXJnaW5nXG4iKTsKLQllbHNlIHsKKwllbHNlCiAJCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGNoYXJnZWRcbiIpOwotCX0KIAotCWlmIChic3QtPnByZXNlbnRfcmF0ZSA9PSBBQ1BJX0JBVFRFUllfVkFMVUVfVU5LTk9XTikKKwlpZiAoYmF0dGVyeS0+Y3VycmVudF9ub3cgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCiAJCXNlcV9wcmludGYoc2VxLCAicHJlc2VudCByYXRlOiAgICAgICAgICAgIHVua25vd25cbiIpOwogCWVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50IHJhdGU6ICAgICAgICAgICAgJWQgJXNcbiIsCi0JCQkgICAodTMyKSBic3QtPnByZXNlbnRfcmF0ZSwgdW5pdHMpOworCQkJICAgYmF0dGVyeS0+Y3VycmVudF9ub3csIGFjcGlfYmF0dGVyeV91bml0cyhiYXR0ZXJ5KSk7CiAKLQlpZiAoYnN0LT5yZW1haW5pbmdfY2FwYWNpdHkgPT0gQUNQSV9CQVRURVJZX1ZBTFVFX1VOS05PV04pCisJaWYgKGJhdHRlcnktPmNhcGFjaXR5X25vdyA9PSBBQ1BJX0JBVFRFUllfVkFMVUVfVU5LTk9XTikKIAkJc2VxX3ByaW50ZihzZXEsICJyZW1haW5pbmcgY2FwYWNpdHk6ICAgICAgdW5rbm93blxuIik7CiAJZWxzZQogCQlzZXFfcHJpbnRmKHNlcSwgInJlbWFpbmluZyBjYXBhY2l0eTogICAgICAlZCAlc2hcbiIsCi0JCQkgICAodTMyKSBic3QtPnJlbWFpbmluZ19jYXBhY2l0eSwgdW5pdHMpOwotCi0JaWYgKGJzdC0+cHJlc2VudF92b2x0YWdlID09IEFDUElfQkFUVEVSWV9WQUxVRV9VTktOT1dOKQorCQkJICAgYmF0dGVyeS0+Y2FwYWNpdHlfbm93LCBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOworCWlmIChiYXR0ZXJ5LT52b2x0YWdlX25vdyA9PSBBQ1BJX0JBVFRFUllfVkFMVUVfVU5LTk9XTikKIAkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50IHZvbHRhZ2U6ICAgICAgICAgdW5rbm93blxuIik7CiAJZWxzZQogCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgdm9sdGFnZTogICAgICAgICAlZCBtVlxuIiwKLQkJCSAgICh1MzIpIGJzdC0+cHJlc2VudF92b2x0YWdlKTsKLQorCQkJICAgYmF0dGVyeS0+dm9sdGFnZV9ub3cpOwogICAgICAgZW5kOgotCi0JaWYgKHJlc3VsdCkgeworCWlmIChyZXN1bHQpCiAJCXNlcV9wcmludGYoc2VxLCAiRVJST1I6IFVuYWJsZSB0byByZWFkIGJhdHRlcnkgc3RhdGVcbiIpOwotCX0KIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC02MTYsNyArNTIzLDYgQEAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3ByaW50X2FsYXJtKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBpbnQgcmVzdWx0KQogewogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBzZXEtPnByaXZhdGU7Ci0JY2hhciAqdW5pdHMgPSAiPyI7CiAKIAlpZiAocmVzdWx0KQogCQlnb3RvIGVuZDsKQEAgLTYyNSwxODkgKzUzMSwxMjEgQEAKIAkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50OiAgICAgICAgICAgICAgICAgbm9cbiIpOwogCQlnb3RvIGVuZDsKIAl9Ci0KLQkvKiBCYXR0ZXJ5IFVuaXRzICovCi0KLQl1bml0cyA9IGFjcGlfYmF0dGVyeV9wb3dlcl91bml0cyhiYXR0ZXJ5KTsKLQogCXNlcV9wcmludGYoc2VxLCAiYWxhcm06ICAgICAgICAgICAgICAgICAgICIpOwogCWlmICghYmF0dGVyeS0+YWxhcm0pCiAJCXNlcV9wcmludGYoc2VxLCAidW5zdXBwb3J0ZWRcbiIpOwogCWVsc2UKLQkJc2VxX3ByaW50ZihzZXEsICIlbHUgJXNoXG4iLCBiYXR0ZXJ5LT5hbGFybSwgdW5pdHMpOwotCisJCXNlcV9wcmludGYoc2VxLCAiJXUgJXNoXG4iLCBiYXR0ZXJ5LT5hbGFybSwKKwkJCQlhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogICAgICAgZW5kOgotCiAJaWYgKHJlc3VsdCkKIAkJc2VxX3ByaW50ZihzZXEsICJFUlJPUjogVW5hYmxlIHRvIHJlYWQgYmF0dGVyeSBhbGFybVxuIik7Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgc3NpemVfdAotYWNwaV9iYXR0ZXJ5X3dyaXRlX2FsYXJtKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAotCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKK3N0YXRpYyBzc2l6ZV90IGFjcGlfYmF0dGVyeV93cml0ZV9hbGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKiBidWZmZXIsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICogcHBvcykKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAljaGFyIGFsYXJtX3N0cmluZ1sxMl0gPSB7ICdcMCcgfTsKIAlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IG0tPnByaXZhdGU7Ci0JaW50IHVwZGF0ZV9yZXN1bHQgPSBBQ1BJX0JBVFRFUllfTk9ORV9VUERBVEU7CiAKIAlpZiAoIWJhdHRlcnkgfHwgKGNvdW50ID4gc2l6ZW9mKGFsYXJtX3N0cmluZykgLSAxKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZiYXR0ZXJ5LT5tdXRleCk7Ci0KLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfdXBkYXRlKGJhdHRlcnksIDEsICZ1cGRhdGVfcmVzdWx0KTsKIAlpZiAocmVzdWx0KSB7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KLQogCWlmICghYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpIHsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQotCiAJaWYgKGNvcHlfZnJvbV91c2VyKGFsYXJtX3N0cmluZywgYnVmZmVyLCBjb3VudCkpIHsKIAkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZ290byBlbmQ7CiAJfQotCiAJYWxhcm1fc3RyaW5nW2NvdW50XSA9ICdcMCc7Ci0KLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfc2V0X2FsYXJtKGJhdHRlcnksCi0JCQkJCXNpbXBsZV9zdHJ0b3VsKGFsYXJtX3N0cmluZywgTlVMTCwgMCkpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZW5kOwotCisJYmF0dGVyeS0+YWxhcm0gPSBzaW1wbGVfc3RydG9sKGFsYXJtX3N0cmluZywgTlVMTCwgMCk7CisJcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X3NldF9hbGFybShiYXR0ZXJ5KTsKICAgICAgIGVuZDoKLQotCWFjcGlfYmF0dGVyeV9jaGVja19yZXN1bHQoYmF0dGVyeSwgcmVzdWx0KTsKLQogCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBjb3VudDsKLQotCW11dGV4X3VubG9jaygmYmF0dGVyeS0+bXV0ZXgpOwotCisJCXJldHVybiBjb3VudDsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiB0eXBlZGVmIGludCgqcHJpbnRfZnVuYykoc3RydWN0IHNlcV9maWxlICpzZXEsIGludCByZXN1bHQpOwotdHlwZWRlZiBpbnQoKmdldF9mdW5jKShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KTsKIAotc3RhdGljIHN0cnVjdCBhY3BpX3JlYWRfbXV4IHsKLQlwcmludF9mdW5jIHByaW50OwotCWdldF9mdW5jIGdldDsKLX0gYWNwaV9yZWFkX2Z1bmNzW0FDUElfQkFUVEVSWV9OVU1GSUxFU10gPSB7Ci0Jey5nZXQgPSBhY3BpX2JhdHRlcnlfZ2V0X2luZm8sIC5wcmludCA9IGFjcGlfYmF0dGVyeV9wcmludF9pbmZvfSwKLQl7LmdldCA9IGFjcGlfYmF0dGVyeV9nZXRfc3RhdGUsIC5wcmludCA9IGFjcGlfYmF0dGVyeV9wcmludF9zdGF0ZX0sCi0Jey5nZXQgPSBhY3BpX2JhdHRlcnlfZ2V0X2FsYXJtLCAucHJpbnQgPSBhY3BpX2JhdHRlcnlfcHJpbnRfYWxhcm19LAorc3RhdGljIHByaW50X2Z1bmMgYWNwaV9wcmludF9mdW5jc1tBQ1BJX0JBVFRFUllfTlVNRklMRVNdID0geworCWFjcGlfYmF0dGVyeV9wcmludF9pbmZvLAorCWFjcGlfYmF0dGVyeV9wcmludF9zdGF0ZSwKKwlhY3BpX2JhdHRlcnlfcHJpbnRfYWxhcm0sCiB9OwogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZWFkKGludCBmaWQsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBzZXEtPnByaXZhdGU7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IHVwZGF0ZV9yZXN1bHQgPSBBQ1BJX0JBVFRFUllfTk9ORV9VUERBVEU7Ci0JaW50IHVwZGF0ZSA9IDA7CisJaW50IHJlc3VsdCA9IGFjcGlfYmF0dGVyeV91cGRhdGUoYmF0dGVyeSk7CisJcmV0dXJuIGFjcGlfcHJpbnRfZnVuY3NbZmlkXShzZXEsIHJlc3VsdCk7Cit9CiAKLQltdXRleF9sb2NrKCZiYXR0ZXJ5LT5tdXRleCk7CisjZGVmaW5lIERFQ0xBUkVfRklMRV9GVU5DVElPTlMoX25hbWUpIFwKK3N0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3JlYWRfIyNfbmFtZShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KSBcCit7IFwKKwlyZXR1cm4gYWNwaV9iYXR0ZXJ5X3JlYWQoX25hbWUjI190YWcsIHNlcSk7IFwKK30gXAorc3RhdGljIGludCBhY3BpX2JhdHRlcnlfIyNfbmFtZSMjX29wZW5fZnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpIFwKK3sgXAorCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhY3BpX2JhdHRlcnlfcmVhZF8jI19uYW1lLCBQREUoaW5vZGUpLT5kYXRhKTsgXAorfQogCi0JdXBkYXRlID0gKGdldF9zZWNvbmRzKCkgLSBiYXR0ZXJ5LT51cGRhdGVfdGltZVtmaWRdID49IHVwZGF0ZV90aW1lKTsKLQl1cGRhdGUgPSAodXBkYXRlIHwgYmF0dGVyeS0+ZmxhZ3MudXBkYXRlW2ZpZF0pOworREVDTEFSRV9GSUxFX0ZVTkNUSU9OUyhpbmZvKTsKK0RFQ0xBUkVfRklMRV9GVU5DVElPTlMoc3RhdGUpOworREVDTEFSRV9GSUxFX0ZVTkNUSU9OUyhhbGFybSk7CiAKLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfdXBkYXRlKGJhdHRlcnksIHVwZGF0ZSwgJnVwZGF0ZV9yZXN1bHQpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZW5kOworI3VuZGVmIERFQ0xBUkVfRklMRV9GVU5DVElPTlMKIAotCWlmICh1cGRhdGVfcmVzdWx0ID09IEFDUElfQkFUVEVSWV9FQVNZX1VQREFURSkgewotCQlyZXN1bHQgPSBhY3BpX3JlYWRfZnVuY3NbZmlkXS5nZXQoYmF0dGVyeSk7Ci0JCWlmIChyZXN1bHQpCi0JCQlnb3RvIGVuZDsKKyNkZWZpbmUgRklMRV9ERVNDUklQVElPTl9STyhfbmFtZSkgXAorCXsgXAorCS5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCBcCisJLm1vZGUgPSBTX0lSVUdPLCBcCisJLm9wcyA9IHsgXAorCQkub3BlbiA9IGFjcGlfYmF0dGVyeV8jI19uYW1lIyNfb3Blbl9mcywgXAorCQkucmVhZCA9IHNlcV9yZWFkLCBcCisJCS5sbHNlZWsgPSBzZXFfbHNlZWssIFwKKwkJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwgXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAorCQl9LCBcCiAJfQogCi0gICAgICBlbmQ6Ci0JcmVzdWx0ID0gYWNwaV9yZWFkX2Z1bmNzW2ZpZF0ucHJpbnQoc2VxLCByZXN1bHQpOwotCWFjcGlfYmF0dGVyeV9jaGVja19yZXN1bHQoYmF0dGVyeSwgcmVzdWx0KTsKLQliYXR0ZXJ5LT5mbGFncy51cGRhdGVbZmlkXSA9IHJlc3VsdDsKLQltdXRleF91bmxvY2soJmJhdHRlcnktPm11dGV4KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZWFkX2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKLXsKLQlyZXR1cm4gYWNwaV9iYXR0ZXJ5X3JlYWQoQUNQSV9CQVRURVJZX0lORk8sIHNlcSk7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3JlYWRfc3RhdGUoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKLXsKLQlyZXR1cm4gYWNwaV9iYXR0ZXJ5X3JlYWQoQUNQSV9CQVRURVJZX1NUQVRFLCBzZXEpOwotfQotCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZWFkX2FsYXJtKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCi17Ci0JcmV0dXJuIGFjcGlfYmF0dGVyeV9yZWFkKEFDUElfQkFUVEVSWV9BTEFSTSwgc2VxKTsKLX0KLQotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfaW5mb19vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhY3BpX2JhdHRlcnlfcmVhZF9pbmZvLCBQREUoaW5vZGUpLT5kYXRhKTsKLX0KLQotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfc3RhdGVfb3Blbl9mcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWNwaV9iYXR0ZXJ5X3JlYWRfc3RhdGUsIFBERShpbm9kZSktPmRhdGEpOwotfQotCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9hbGFybV9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBhY3BpX2JhdHRlcnlfcmVhZF9hbGFybSwgUERFKGlub2RlKS0+ZGF0YSk7Ci19CisjZGVmaW5lIEZJTEVfREVTQ1JJUFRJT05fUlcoX25hbWUpIFwKKwl7IFwKKwkubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgXAorCS5tb2RlID0gU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBcCisJLm9wcyA9IHsgXAorCQkub3BlbiA9IGFjcGlfYmF0dGVyeV8jI19uYW1lIyNfb3Blbl9mcywgXAorCQkucmVhZCA9IHNlcV9yZWFkLCBcCisJCS5sbHNlZWsgPSBzZXFfbHNlZWssIFwKKwkJLndyaXRlID0gYWNwaV9iYXR0ZXJ5X3dyaXRlXyMjX25hbWUsIFwKKwkJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwgXAorCQkub3duZXIgPSBUSElTX01PRFVMRSwgXAorCQl9LCBcCisJfQogCiBzdGF0aWMgc3RydWN0IGJhdHRlcnlfZmlsZSB7CiAJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvcHM7CiAJbW9kZV90IG1vZGU7CiAJY2hhciAqbmFtZTsKIH0gYWNwaV9iYXR0ZXJ5X2ZpbGVbXSA9IHsKLQl7Ci0JLm5hbWUgPSAiaW5mbyIsCi0JLm1vZGUgPSBTX0lSVUdPLAotCS5vcHMgPSB7Ci0JLm9wZW4gPSBhY3BpX2JhdHRlcnlfaW5mb19vcGVuX2ZzLAotCS5yZWFkID0gc2VxX3JlYWQsCi0JLmxsc2VlayA9IHNlcV9sc2VlaywKLQkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JfSwKLQl7Ci0JLm5hbWUgPSAic3RhdGUiLAotCS5tb2RlID0gU19JUlVHTywKLQkub3BzID0gewotCS5vcGVuID0gYWNwaV9iYXR0ZXJ5X3N0YXRlX29wZW5fZnMsCi0JLnJlYWQgPSBzZXFfcmVhZCwKLQkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQl9LAotCXsKLQkubmFtZSA9ICJhbGFybSIsCi0JLm1vZGUgPSBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsCi0JLm9wcyA9IHsKLQkub3BlbiA9IGFjcGlfYmF0dGVyeV9hbGFybV9vcGVuX2ZzLAotCS5yZWFkID0gc2VxX3JlYWQsCi0JLndyaXRlID0gYWNwaV9iYXR0ZXJ5X3dyaXRlX2FsYXJtLAotCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCX0sCisJRklMRV9ERVNDUklQVElPTl9STyhpbmZvKSwKKwlGSUxFX0RFU0NSSVBUSU9OX1JPKHN0YXRlKSwKKwlGSUxFX0RFU0NSSVBUSU9OX1JXKGFsYXJtKSwKIH07CiAKKyN1bmRlZiBGSUxFX0RFU0NSSVBUSU9OX1JPCisjdW5kZWYgRklMRV9ERVNDUklQVElPTl9SVworCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9hZGRfZnMoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CkBAIC04MzIsMjUgKzY3MCw1MSBAQAogCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCX0KIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcmVtb3ZlX2ZzKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIHZvaWQgYWNwaV9iYXR0ZXJ5X3JlbW92ZV9mcyhzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgaTsKLQlpZiAoYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpIHsKLQkJZm9yIChpID0gMDsgaSA8IEFDUElfQkFUVEVSWV9OVU1GSUxFUzsgKytpKSB7Ci0JCQlyZW1vdmVfcHJvY19lbnRyeShhY3BpX2JhdHRlcnlfZmlsZVtpXS5uYW1lLAorCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCisJCXJldHVybjsKKwlmb3IgKGkgPSAwOyBpIDwgQUNQSV9CQVRURVJZX05VTUZJTEVTOyArK2kpCisJCXJlbW92ZV9wcm9jX2VudHJ5KGFjcGlfYmF0dGVyeV9maWxlW2ldLm5hbWUsCiAJCQkJICBhY3BpX2RldmljZV9kaXIoZGV2aWNlKSk7Ci0JCX0KLQkJcmVtb3ZlX3Byb2NfZW50cnkoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksIGFjcGlfYmF0dGVyeV9kaXIpOwotCQlhY3BpX2RldmljZV9kaXIoZGV2aWNlKSA9IE5VTEw7Ci0JfQogCi0JcmV0dXJuIDA7CisJcmVtb3ZlX3Byb2NfZW50cnkoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksIGFjcGlfYmF0dGVyeV9kaXIpOworCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gTlVMTDsKIH0KIAorI2VuZGlmCisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfYmF0dGVyeV9hbGFybV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gdG9fYWNwaV9iYXR0ZXJ5KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYmF0dGVyeS0+YWxhcm0gKiAxMDAwKTsKK30KKworc3RhdGljIHNzaXplX3QgYWNwaV9iYXR0ZXJ5X2FsYXJtX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGxvbmcgeDsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gdG9fYWNwaV9iYXR0ZXJ5KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVsZFxuIiwgJngpID09IDEpCisJCWJhdHRlcnktPmFsYXJtID0geC8xMDAwOworCWlmIChhY3BpX2JhdHRlcnlfcHJlc2VudChiYXR0ZXJ5KSkKKwkJYWNwaV9iYXR0ZXJ5X3NldF9hbGFybShiYXR0ZXJ5KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBhbGFybV9hdHRyID0geworCS5hdHRyID0gey5uYW1lID0gImFsYXJtIiwgLm1vZGUgPSAwNjQ0LCAub3duZXIgPSBUSElTX01PRFVMRX0sCisJLnNob3cgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc2hvdywKKwkuc3RvcmUgPSBhY3BpX2JhdHRlcnlfYWxhcm1fc3RvcmUsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJpdmVyIEludGVyZmFjZQogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTg1OCwzMyArNzIyLDE3IEBACiBzdGF0aWMgdm9pZCBhY3BpX2JhdHRlcnlfbm90aWZ5KGFjcGlfaGFuZGxlIGhhbmRsZSwgdTMyIGV2ZW50LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBkYXRhOwotCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlID0gTlVMTDsKLQorCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlOwogCWlmICghYmF0dGVyeSkKIAkJcmV0dXJuOwotCiAJZGV2aWNlID0gYmF0dGVyeS0+ZGV2aWNlOwotCi0Jc3dpdGNoIChldmVudCkgewotCWNhc2UgQUNQSV9CQVRURVJZX05PVElGWV9TVEFUVVM6Ci0JY2FzZSBBQ1BJX0JBVFRFUllfTk9USUZZX0lORk86Ci0JY2FzZSBBQ1BJX05PVElGWV9CVVNfQ0hFQ0s6Ci0JY2FzZSBBQ1BJX05PVElGWV9ERVZJQ0VfQ0hFQ0s6Ci0JCWRldmljZSA9IGJhdHRlcnktPmRldmljZTsKLQkJYWNwaV9iYXR0ZXJ5X25vdGlmeV91cGRhdGUoYmF0dGVyeSk7Ci0JCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZGV2aWNlLCBldmVudCwKKwlhY3BpX2JhdHRlcnlfdXBkYXRlKGJhdHRlcnkpOworCWFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZGV2aWNlLCBldmVudCwKKwkJCQkgICAgIGFjcGlfYmF0dGVyeV9wcmVzZW50KGJhdHRlcnkpKTsKKwlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKKwkJCQkJZGV2aWNlLT5kZXYuYnVzX2lkLCBldmVudCwKIAkJCQkJYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpOwotCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGRldmljZS0+cG5wLmRldmljZV9jbGFzcywKLQkJCQkJCSAgZGV2aWNlLT5kZXYuYnVzX2lkLCBldmVudCwKLQkJCQkJCSAgYWNwaV9iYXR0ZXJ5X3ByZXNlbnQoYmF0dGVyeSkpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sCi0JCQkJICAiVW5zdXBwb3J0ZWQgZXZlbnQgWzB4JXhdXG4iLCBldmVudCkpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm47CisJa29iamVjdF91ZXZlbnQoJmJhdHRlcnktPmJhdC5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKIH0KIAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtODkyLDMzICs3NDAsMjcgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXMgPSAwOwogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBOVUxMOwotCiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwotCiAJYmF0dGVyeSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX2JhdHRlcnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJhdHRlcnkpCiAJCXJldHVybiAtRU5PTUVNOwotCi0JbXV0ZXhfaW5pdCgmYmF0dGVyeS0+bXV0ZXgpOwotCi0JbXV0ZXhfbG9jaygmYmF0dGVyeS0+bXV0ZXgpOwotCiAJYmF0dGVyeS0+ZGV2aWNlID0gZGV2aWNlOwogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfQkFUVEVSWV9ERVZJQ0VfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfQkFUVEVSWV9DTEFTUyk7CiAJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gYmF0dGVyeTsKLQotCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfc3RhdHVzKGJhdHRlcnkpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZW5kOwotCi0JYmF0dGVyeS0+ZmxhZ3MuaW5pdF91cGRhdGUgPSAxOwotCisJbXV0ZXhfaW5pdCgmYmF0dGVyeS0+bG9jayk7CisJYWNwaV9iYXR0ZXJ5X3VwZGF0ZShiYXR0ZXJ5KTsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfYWRkX2ZzKGRldmljZSk7CiAJaWYgKHJlc3VsdCkKIAkJZ290byBlbmQ7Ci0KKyNlbmRpZgorCWJhdHRlcnktPmJhdC5uYW1lID0gYWNwaV9kZXZpY2VfYmlkKGRldmljZSk7CisJYmF0dGVyeS0+YmF0LnR5cGUgPSBQT1dFUl9TVVBQTFlfVFlQRV9CQVRURVJZOworCWJhdHRlcnktPmJhdC5nZXRfcHJvcGVydHkgPSBhY3BpX2JhdHRlcnlfZ2V0X3Byb3BlcnR5OworCXJlc3VsdCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmYmF0dGVyeS0+ZGV2aWNlLT5kZXYsICZiYXR0ZXJ5LT5iYXQpOworCXJlc3VsdCA9IGRldmljZV9jcmVhdGVfZmlsZShiYXR0ZXJ5LT5iYXQuZGV2LCAmYWxhcm1fYXR0cik7CiAJc3RhdHVzID0gYWNwaV9pbnN0YWxsX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgIEFDUElfQUxMX05PVElGWSwKIAkJCQkJICAgICBhY3BpX2JhdHRlcnlfbm90aWZ5LCBiYXR0ZXJ5KTsKQEAgLTkyNywyMCArNzY5LDE2IEBACiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KLQogCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBTbG90IFslc10gKGJhdHRlcnkgJXMpXG4iLAogCSAgICAgICBBQ1BJX0JBVFRFUllfREVWSUNFX05BTUUsIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAogCSAgICAgICBkZXZpY2UtPnN0YXR1cy5iYXR0ZXJ5X3ByZXNlbnQgPyAicHJlc2VudCIgOiAiYWJzZW50Iik7Ci0KICAgICAgIGVuZDoKLQogCWlmIChyZXN1bHQpIHsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAkJYWNwaV9iYXR0ZXJ5X3JlbW92ZV9mcyhkZXZpY2UpOworI2VuZGlmCiAJCWtmcmVlKGJhdHRlcnkpOwogCX0KLQotCW11dGV4X3VubG9jaygmYmF0dGVyeS0+bXV0ZXgpOwotCiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTUxLDI3ICs3ODksMTkgQEAKIAogCWlmICghZGV2aWNlIHx8ICFhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkpCiAJCXJldHVybiAtRUlOVkFMOwotCiAJYmF0dGVyeSA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQotCW11dGV4X2xvY2soJmJhdHRlcnktPm11dGV4KTsKLQogCXN0YXR1cyA9IGFjcGlfcmVtb3ZlX25vdGlmeV9oYW5kbGVyKGRldmljZS0+aGFuZGxlLAogCQkJCQkgICAgQUNQSV9BTExfTk9USUZZLAogCQkJCQkgICAgYWNwaV9iYXR0ZXJ5X25vdGlmeSk7Ci0KKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlhY3BpX2JhdHRlcnlfcmVtb3ZlX2ZzKGRldmljZSk7Ci0KLQlrZnJlZShiYXR0ZXJ5LT5iaWZfZGF0YS5wb2ludGVyKTsKLQotCWtmcmVlKGJhdHRlcnktPmJzdF9kYXRhLnBvaW50ZXIpOwotCi0JbXV0ZXhfdW5sb2NrKCZiYXR0ZXJ5LT5tdXRleCk7Ci0KLQltdXRleF9kZXN0cm95KCZiYXR0ZXJ5LT5tdXRleCk7Ci0KKyNlbmRpZgorCWlmIChiYXR0ZXJ5LT5iYXQuZGV2KSB7CisJCWRldmljZV9yZW1vdmVfZmlsZShiYXR0ZXJ5LT5iYXQuZGV2LCAmYWxhcm1fYXR0cik7CisJCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZiYXR0ZXJ5LT5iYXQpOworCX0KKwltdXRleF9kZXN0cm95KCZiYXR0ZXJ5LT5sb2NrKTsKIAlrZnJlZShiYXR0ZXJ5KTsKLQogCXJldHVybiAwOwogfQogCkBAIC05NzksNDQgKzgwOSw0OCBAQAogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnk7Ci0KIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQliYXR0ZXJ5ID0gZGV2aWNlLT5kcml2ZXJfZGF0YTsKLQotCWJhdHRlcnktPmZsYWdzLmluaXRfdXBkYXRlID0gMTsKLQorCWJhdHRlcnkgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CisJYmF0dGVyeS0+dXBkYXRlX3RpbWUgPSAwOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFjcGlfYmF0dGVyeV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYmF0dGVyeSIsCisJLmNsYXNzID0gQUNQSV9CQVRURVJZX0NMQVNTLAorCS5pZHMgPSBiYXR0ZXJ5X2RldmljZV9pZHMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGFjcGlfYmF0dGVyeV9hZGQsCisJCS5yZXN1bWUgPSBhY3BpX2JhdHRlcnlfcmVzdW1lLAorCQkucmVtb3ZlID0gYWNwaV9iYXR0ZXJ5X3JlbW92ZSwKKwkJfSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGFjcGlfYmF0dGVyeV9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdDsKLQogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVOT0RFVjsKLQorI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUwogCWFjcGlfYmF0dGVyeV9kaXIgPSBhY3BpX2xvY2tfYmF0dGVyeV9kaXIoKTsKIAlpZiAoIWFjcGlfYmF0dGVyeV9kaXIpCiAJCXJldHVybiAtRU5PREVWOwotCi0JcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2JhdHRlcnlfZHJpdmVyKTsKLQlpZiAocmVzdWx0IDwgMCkgeworI2VuZGlmCisJaWYgKGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9iYXR0ZXJ5X2RyaXZlcikgPCAwKSB7CisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJCWFjcGlfdW5sb2NrX2JhdHRlcnlfZGlyKGFjcGlfYmF0dGVyeV9kaXIpOworI2VuZGlmCiAJCXJldHVybiAtRU5PREVWOwogCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWNwaV9iYXR0ZXJ5X2V4aXQodm9pZCkKIHsKIAlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9iYXR0ZXJ5X2RyaXZlcik7Ci0KKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlhY3BpX3VubG9ja19iYXR0ZXJ5X2RpcihhY3BpX2JhdHRlcnlfZGlyKTsKLQotCXJldHVybjsKKyNlbmRpZgogfQogCiBtb2R1bGVfaW5pdChhY3BpX2JhdHRlcnlfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnVzLmMgYi9kcml2ZXJzL2FjcGkvYnVzLmMKaW5kZXggY2JmYzgxNS4uZmIyY2ZmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1cy5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXMuYwpAQCAtMjg2LDE1ICsyODYsMTEgQEAKIAogZXh0ZXJuIGludCBldmVudF9pc19vcGVuOwogCi1pbnQgYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgdTggdHlwZSwgaW50IGRhdGEpCitpbnQgYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudDQoY29uc3QgY2hhciAqZGV2aWNlX2NsYXNzLCBjb25zdCBjaGFyICpidXNfaWQsIHU4IHR5cGUsIGludCBkYXRhKQogewotCXN0cnVjdCBhY3BpX2J1c19ldmVudCAqZXZlbnQgPSBOVUxMOworCXN0cnVjdCBhY3BpX2J1c19ldmVudCAqZXZlbnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLQotCWlmICghZGV2aWNlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIGRyb3AgZXZlbnQgb24gdGhlIGZsb29yIGlmIG5vIG9uZSdzIGxpc3RlbmluZyAqLwogCWlmICghZXZlbnRfaXNfb3BlbikKIAkJcmV0dXJuIDA7CkBAIC0zMDMsOCArMjk5LDggQEAKIAlpZiAoIWV2ZW50KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXN0cmNweShldmVudC0+ZGV2aWNlX2NsYXNzLCBkZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MpOwotCXN0cmNweShldmVudC0+YnVzX2lkLCBkZXZpY2UtPnBucC5idXNfaWQpOworCXN0cmNweShldmVudC0+ZGV2aWNlX2NsYXNzLCBkZXZpY2VfY2xhc3MpOworCXN0cmNweShldmVudC0+YnVzX2lkLCBidXNfaWQpOwogCWV2ZW50LT50eXBlID0gdHlwZTsKIAlldmVudC0+ZGF0YSA9IGRhdGE7CiAKQEAgLTMxNSw2ICszMTEsMTcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFjcGlfYnVzX2V2ZW50X3F1ZXVlKTsKIAogCXJldHVybiAwOworCit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQ0KTsKKworaW50IGFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHU4IHR5cGUsIGludCBkYXRhKQoreworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudDQoZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAorCQkJCQkgICAgIGRldmljZS0+cG5wLmJ1c19pZCwgdHlwZSwgZGF0YSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYnV0dG9uLmMgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKaW5kZXggMmU3OWEzMy4uMzAxZTgzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9idXR0b24uYwpAQCAtNDM0LDE4ICs0MzQsMTggQEAKIAlzd2l0Y2ggKGJ1dHRvbi0+dHlwZSkgewogCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9QT1dFUjoKIAljYXNlIEFDUElfQlVUVE9OX1RZUEVfUE9XRVJGOgotCQlpbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwkJaW5wdXQtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKIAkJc2V0X2JpdChLRVlfUE9XRVIsIGlucHV0LT5rZXliaXQpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9TTEVFUDoKIAljYXNlIEFDUElfQlVUVE9OX1RZUEVfU0xFRVBGOgotCQlpbnB1dC0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwkJaW5wdXQtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKIAkJc2V0X2JpdChLRVlfU0xFRVAsIGlucHV0LT5rZXliaXQpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9CVVRUT05fVFlQRV9MSUQ6Ci0JCWlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9TVyk7CisJCWlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1NXKTsKIAkJc2V0X2JpdChTV19MSUQsIGlucHV0LT5zd2JpdCk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9lYy5jIGIvZHJpdmVycy9hY3BpL2VjLmMKaW5kZXggM2Y3OTM1YS4uN2I0MTc4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2VjLmMKQEAgLTEyMSw2ICsxMjEsNyBAQAogCWF0b21pY190IGV2ZW50X2NvdW50OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXU4IGhhbmRsZXJzX2luc3RhbGxlZDsKIH0gKmJvb3RfZWMsICpmaXJzdF9lYzsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQyNSw3ICs0MjYsNyBAQAogCWhhbmRsZXItPmZ1bmMgPSBmdW5jOwogCWhhbmRsZXItPmRhdGEgPSBkYXRhOwogCW11dGV4X2xvY2soJmVjLT5sb2NrKTsKLQlsaXN0X2FkZF90YWlsKCZoYW5kbGVyLT5ub2RlLCAmZWMtPmxpc3QpOworCWxpc3RfYWRkKCZoYW5kbGVyLT5ub2RlLCAmZWMtPmxpc3QpOwogCW11dGV4X3VubG9jaygmZWMtPmxvY2spOwogCXJldHVybiAwOwogfQpAQCAtNDQwLDcgKzQ0MSw2IEBACiAJCWlmIChxdWVyeV9iaXQgPT0gaGFuZGxlci0+cXVlcnlfYml0KSB7CiAJCQlsaXN0X2RlbCgmaGFuZGxlci0+bm9kZSk7CiAJCQlrZnJlZShoYW5kbGVyKTsKLQkJCWJyZWFrOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmZWMtPmxvY2spOwpAQCAtNjgwLDMyICs2ODAsNTAgQEAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX0dQRSIsIE5VTEwsICZlYy0+Z3BlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiBzdGF0dXM7Ci0KIAkvKiBGaW5kIGFuZCByZWdpc3RlciBhbGwgcXVlcnkgbWV0aG9kcyAqLwogCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX01FVEhPRCwgaGFuZGxlLCAxLAogCQkJICAgIGFjcGlfZWNfcmVnaXN0ZXJfcXVlcnlfbWV0aG9kcywgZWMsIE5VTEwpOwotCiAJLyogVXNlIHRoZSBnbG9iYWwgbG9jayBmb3IgYWxsIEVDIHRyYW5zYWN0aW9ucz8gKi8KIAlhY3BpX2V2YWx1YXRlX2ludGVnZXIoaGFuZGxlLCAiX0dMSyIsIE5VTEwsICZlYy0+Z2xvYmFsX2xvY2spOwotCiAJZWMtPmhhbmRsZSA9IGhhbmRsZTsKLQotCXByaW50ayhLRVJOX0lORk8gUFJFRklYICJHUEUgPSAweCVseCwgSS9POiBjb21tYW5kL3N0YXR1cyA9IDB4JWx4LCBkYXRhID0gMHglbHhcbiIsCi0JCQkgIGVjLT5ncGUsIGVjLT5jb21tYW5kX2FkZHIsIGVjLT5kYXRhX2FkZHIpOwotCiAJcmV0dXJuIEFFX0NUUkxfVEVSTUlOQVRFOwogfQogCitzdGF0aWMgdm9pZCBlY19yZW1vdmVfaGFuZGxlcnMoc3RydWN0IGFjcGlfZWMgKmVjKQoreworCWlmIChBQ1BJX0ZBSUxVUkUoYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGVjLT5oYW5kbGUsCisJCQkJQUNQSV9BRFJfU1BBQ0VfRUMsICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpKSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZmFpbGVkIHRvIHJlbW92ZSBzcGFjZSBoYW5kbGVyXG4iKTsKKwlpZiAoQUNQSV9GQUlMVVJFKGFjcGlfcmVtb3ZlX2dwZV9oYW5kbGVyKE5VTEwsIGVjLT5ncGUsCisJCQkJJmFjcGlfZWNfZ3BlX2hhbmRsZXIpKSkKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiZmFpbGVkIHRvIHJlbW92ZSBncGUgaGFuZGxlclxuIik7CisJZWMtPmhhbmRsZXJzX2luc3RhbGxlZCA9IDA7Cit9CisKIHN0YXRpYyBpbnQgYWNwaV9lY19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfZWMgKmVjID0gTlVMTDsKIAogCWlmICghZGV2aWNlKQogCQlyZXR1cm4gLUVJTlZBTDsKLQogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfRUNfREVWSUNFX05BTUUpOwogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX0VDX0NMQVNTKTsKIAorCS8qIENoZWNrIGZvciBib290IEVDICovCisJaWYgKGJvb3RfZWMpIHsKKwkJaWYgKGJvb3RfZWMtPmhhbmRsZSA9PSBkZXZpY2UtPmhhbmRsZSkgeworCQkJLyogUHJlLWxvYWRlZCBFQyBmcm9tIERTRFQsIGp1c3QgbW92ZSBwb2ludGVyICovCisJCQllYyA9IGJvb3RfZWM7CisJCQlib290X2VjID0gTlVMTDsKKwkJCWdvdG8gZW5kOworCQl9IGVsc2UgaWYgKGJvb3RfZWMtPmhhbmRsZSA9PSBBQ1BJX1JPT1RfT0JKRUNUKSB7CisJCQkvKiBFQ0RULWJhc2VkIEVDLCB0aW1lIHRvIHNodXQgaXQgZG93biAqLworCQkJZWNfcmVtb3ZlX2hhbmRsZXJzKGJvb3RfZWMpOworCQkJa2ZyZWUoYm9vdF9lYyk7CisJCQlmaXJzdF9lYyA9IGJvb3RfZWMgPSBOVUxMOworCQl9CisJfQorCiAJZWMgPSBtYWtlX2FjcGlfZWMoKTsKIAlpZiAoIWVjKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTcxNSwyNSArNzMzLDE0IEBACiAJCWtmcmVlKGVjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JLyogQ2hlY2sgaWYgd2UgZm91bmQgdGhlIGJvb3QgRUMgKi8KLQlpZiAoYm9vdF9lYykgewotCQlpZiAoYm9vdF9lYy0+Z3BlID09IGVjLT5ncGUpIHsKLQkJCS8qIFdlIG1pZ2h0IGhhdmUgaW5jb3JyZWN0IGluZm8gZm9yIEdMIGF0IGJvb3QgdGltZSAqLwotCQkJbXV0ZXhfbG9jaygmYm9vdF9lYy0+bG9jayk7Ci0JCQlib290X2VjLT5nbG9iYWxfbG9jayA9IGVjLT5nbG9iYWxfbG9jazsKLQkJCS8qIENvcHkgaGFuZGxlcnMgZnJvbSBuZXcgZWMgaW50byBib290IGVjICovCi0JCQlsaXN0X3NwbGljZSgmZWMtPmxpc3QsICZib290X2VjLT5saXN0KTsKLQkJCW11dGV4X3VubG9jaygmYm9vdF9lYy0+bG9jayk7Ci0JCQlrZnJlZShlYyk7Ci0JCQllYyA9IGJvb3RfZWM7Ci0JCX0KLQl9IGVsc2UKLQkJZmlyc3RfZWMgPSBlYzsKIAllYy0+aGFuZGxlID0gZGV2aWNlLT5oYW5kbGU7CisgICAgICBlbmQ6CisJaWYgKCFmaXJzdF9lYykKKwkJZmlyc3RfZWMgPSBlYzsKIAlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBlYzsKLQogCWFjcGlfZWNfYWRkX2ZzKGRldmljZSk7CisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkdQRSA9IDB4JWx4LCBJL086IGNvbW1hbmQvc3RhdHVzID0gMHglbHgsIGRhdGEgPSAweCVseFxuIiwKKwkJCSAgZWMtPmdwZSwgZWMtPmNvbW1hbmRfYWRkciwgZWMtPmRhdGFfYWRkcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NiwxMCArNzYzLDcgQEAKIAlhY3BpX2RyaXZlcl9kYXRhKGRldmljZSkgPSBOVUxMOwogCWlmIChlYyA9PSBmaXJzdF9lYykKIAkJZmlyc3RfZWMgPSBOVUxMOwotCi0JLyogRG9uJ3QgdG91Y2ggYm9vdCBFQyAqLwotCWlmIChib290X2VjICE9IGVjKQotCQlrZnJlZShlYyk7CisJa2ZyZWUoZWMpOwogCXJldHVybiAwOwogfQogCkBAIC03ODksNiArNzkzLDggQEAKIHN0YXRpYyBpbnQgZWNfaW5zdGFsbF9oYW5kbGVycyhzdHJ1Y3QgYWNwaV9lYyAqZWMpCiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOworCWlmIChlYy0+aGFuZGxlcnNfaW5zdGFsbGVkKQorCQlyZXR1cm4gMDsKIAlzdGF0dXMgPSBhY3BpX2luc3RhbGxfZ3BlX2hhbmRsZXIoTlVMTCwgZWMtPmdwZSwKIAkJCQkJICBBQ1BJX0dQRV9FREdFX1RSSUdHRVJFRCwKIAkJCQkJICAmYWNwaV9lY19ncGVfaGFuZGxlciwgZWMpOwpAQCAtODA3LDYgKzgxMyw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAorCWVjLT5oYW5kbGVyc19pbnN0YWxsZWQgPSAxOwogCXJldHVybiAwOwogfQogCkBAIC04MjMsNDEgKzgzMCwyMiBAQAogCWlmICghZWMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyogQm9vdCBFQyBpcyBhbHJlYWR5IHdvcmtpbmcgKi8KLQlpZiAoZWMgIT0gYm9vdF9lYykKLQkJcmV0ID0gZWNfaW5zdGFsbF9oYW5kbGVycyhlYyk7CisJcmV0ID0gZWNfaW5zdGFsbF9oYW5kbGVycyhlYyk7CiAKIAkvKiBFQyBpcyBmdWxseSBvcGVyYXRpb25hbCwgYWxsb3cgcXVlcmllcyAqLwogCWF0b21pY19zZXQoJmVjLT5xdWVyeV9wZW5kaW5nLCAwKTsKLQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9lY19zdG9wKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKIHsKLQlhY3BpX3N0YXR1cyBzdGF0dXM7CiAJc3RydWN0IGFjcGlfZWMgKmVjOwotCiAJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwotCiAJZWMgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7CiAJaWYgKCFlYykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBEb24ndCB0b3VjaCBib290IEVDICovCi0JaWYgKGVjID09IGJvb3RfZWMpCi0JCXJldHVybiAwOwotCi0Jc3RhdHVzID0gYWNwaV9yZW1vdmVfYWRkcmVzc19zcGFjZV9oYW5kbGVyKGVjLT5oYW5kbGUsCi0JCQkJCQkgICBBQ1BJX0FEUl9TUEFDRV9FQywKLQkJCQkJCSAgICZhY3BpX2VjX3NwYWNlX2hhbmRsZXIpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ncGVfaGFuZGxlcihOVUxMLCBlYy0+Z3BlLCAmYWNwaV9lY19ncGVfaGFuZGxlcik7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwllY19yZW1vdmVfaGFuZGxlcnMoZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04NzcsNyArODY1LDcgQEAKIAlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19FQ0RULCAxLAogCQkJCShzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKiopJmVjZHRfcHRyKTsKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkVDIGRlc2NyaXB0aW9uIHRhYmxlIGlzIGZvdW5kLCBjb25maWd1cmluZyBib290IEVDXG5cbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiRUMgZGVzY3JpcHRpb24gdGFibGUgaXMgZm91bmQsIGNvbmZpZ3VyaW5nIGJvb3QgRUNcbiIpOwogCQlib290X2VjLT5jb21tYW5kX2FkZHIgPSBlY2R0X3B0ci0+Y29udHJvbC5hZGRyZXNzOwogCQlib290X2VjLT5kYXRhX2FkZHIgPSBlY2R0X3B0ci0+ZGF0YS5hZGRyZXNzOwogCQlib290X2VjLT5ncGUgPSBlY2R0X3B0ci0+Z3BlOwpAQCAtODk5LDcgKzg4Nyw2IEBACiAgICAgICBlcnJvcjoKIAlrZnJlZShib290X2VjKTsKIAlib290X2VjID0gTlVMTDsKLQogCXJldHVybiAtRU5PREVWOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZXZlbnRzL2V2ZXZlbnQuYyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jCmluZGV4IGExZjg3YjUuLmU0MTI4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jCisrKyBiL2RyaXZlcnMvYWNwaS9ldmVudHMvZXZldmVudC5jCkBAIC0yMzksMTAgKzIzOSw4IEBACiAJICogUmVhZCB0aGUgZml4ZWQgZmVhdHVyZSBzdGF0dXMgYW5kIGVuYWJsZSByZWdpc3RlcnMsIGFzIGFsbCB0aGUgY2FzZXMKIAkgKiBkZXBlbmQgb24gdGhlaXIgdmFsdWVzLiAgSWdub3JlIGVycm9ycyBoZXJlLgogCSAqLwotCSh2b2lkKWFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkgICAgQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLCAmZml4ZWRfc3RhdHVzKTsKLQkodm9pZClhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJICAgIEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwgJmZpeGVkX2VuYWJsZSk7CisJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl9yZWFkKEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywgJmZpeGVkX3N0YXR1cyk7CisJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl9yZWFkKEFDUElfUkVHSVNURVJfUE0xX0VOQUJMRSwgJmZpeGVkX2VuYWJsZSk7CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lOVEVSUlVQVFMsCiAJCQkgICJGaXhlZCBFdmVudCBCbG9jazogRW5hYmxlICUwOFggU3RhdHVzICUwOFhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdyZWdzLmMKaW5kZXggMWQzNzFmYS4uNzNmOWM1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3cmVncy5jCisrKyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3JlZ3MuYwpAQCAtNzUsOCArNzUsNyBAQAogCiAJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwogCi0Jc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkJQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLAorCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFfU1RBVFVTLAogCQkJCQlBQ1BJX0JJVE1BU0tfQUxMX0ZJWEVEX1NUQVRVUyk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCWdvdG8gdW5sb2NrX2FuZF9leGl0OwpAQCAtMjU5LDcgKzI1OCw3IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9nZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUpCithY3BpX3N0YXR1cyBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqIHJldHVybl92YWx1ZSkKIHsKIAl1MzIgcmVnaXN0ZXJfdmFsdWUgPSAwOwogCXN0cnVjdCBhY3BpX2JpdF9yZWdpc3Rlcl9pbmZvICpiaXRfcmVnX2luZm87CkBAIC0yNzYsOCArMjc1LDcgQEAKIAogCS8qIFJlYWQgZnJvbSB0aGUgcmVnaXN0ZXIgKi8KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9MT0NLLAotCQkJCSAgICAgICBiaXRfcmVnX2luZm8tPnBhcmVudF9yZWdpc3RlciwKKwlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCiAJCQkJICAgICAgICZyZWdpc3Rlcl92YWx1ZSk7CiAKIAlpZiAoQUNQSV9TVUNDRVNTKHN0YXR1cykpIHsKQEAgLTI5OCw2ICsyOTYsMTYgQEAKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIAorYWNwaV9zdGF0dXMgYWNwaV9nZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCWFjcGlfY3B1X2ZsYWdzIGZsYWdzOworCWZsYWdzID0gYWNwaV9vc19hY3F1aXJlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jayk7CisJc3RhdHVzID0gYWNwaV9nZXRfcmVnaXN0ZXJfdW5sb2NrZWQocmVnaXN0ZXJfaWQsIHJldHVybl92YWx1ZSk7CisJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jaywgZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2dldF9yZWdpc3RlcikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTMzNSw4ICszNDMsNyBAQAogCiAJLyogQWx3YXlzIGRvIGEgcmVnaXN0ZXIgcmVhZCBmaXJzdCBzbyB3ZSBjYW4gaW5zZXJ0IHRoZSBuZXcgYml0cyAgKi8KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkgICAgICAgYml0X3JlZ19pbmZvLT5wYXJlbnRfcmVnaXN0ZXIsCisJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl9yZWFkKGJpdF9yZWdfaW5mby0+cGFyZW50X3JlZ2lzdGVyLAogCQkJCSAgICAgICAmcmVnaXN0ZXJfdmFsdWUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKQEAgLTM2Myw4ICszNzAsNyBAQAogCQkJCQkJICAgYml0X3JlZ19pbmZvLT4KIAkJCQkJCSAgIGFjY2Vzc19iaXRfbWFzayk7CiAJCWlmICh2YWx1ZSkgewotCQkJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkJCQlBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCisJCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUywKIAkJCQkJCQkodTE2KSB2YWx1ZSk7CiAJCQlyZWdpc3Rlcl92YWx1ZSA9IDA7CiAJCX0KQEAgLTM3Nyw4ICszODMsNyBAQAogCQkJCQkgICBiaXRfcmVnX2luZm8tPmFjY2Vzc19iaXRfbWFzaywKIAkJCQkJICAgdmFsdWUpOwogCi0JCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCQlBQ1BJX1JFR0lTVEVSX1BNMV9FTkFCTEUsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFfRU5BQkxFLAogCQkJCQkJKHUxNikgcmVnaXN0ZXJfdmFsdWUpOwogCQlicmVhazsKIApAQCAtMzk3LDE1ICs0MDIsMTMgQEAKIAkJCQkJICAgYml0X3JlZ19pbmZvLT5hY2Nlc3NfYml0X21hc2ssCiAJCQkJCSAgIHZhbHVlKTsKIAotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfTVRYX0RPX05PVF9MT0NLLAotCQkJCQkJQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKKwkJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkJKHUxNikgcmVnaXN0ZXJfdmFsdWUpOwogCQlicmVhazsKIAogCWNhc2UgQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTDoKIAotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MLAorCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9SRUdJU1RFUl9QTTJfQ09OVFJPTCwKIAkJCQkJICAgICAgICZyZWdpc3Rlcl92YWx1ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CkBAIC00MzAsOCArNDMzLDcgQEAKIAkJCQkJCSAgICAgeHBtMl9jb250cm9sX2Jsb2NrLgogCQkJCQkJICAgICBhZGRyZXNzKSkpOwogCi0JCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCQlBQ1BJX1JFR0lTVEVSX1BNMl9DT05UUk9MLAorCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0yX0NPTlRST0wsCiAJCQkJCQkodTgpIChyZWdpc3Rlcl92YWx1ZSkpOwogCQlicmVhazsKIApAQCAtNDYxLDggKzQ2Myw3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfcmVnaXN0ZXJfcmVhZAogICoKLSAqIFBBUkFNRVRFUlM6ICB1c2VfbG9jayAgICAgICAgICAgIC0gTG9jayBoYXJkd2FyZT8gVHJ1ZS9GYWxzZQotICogICAgICAgICAgICAgIHJlZ2lzdGVyX2lkICAgICAgICAgLSBBQ1BJIFJlZ2lzdGVyIElECisgKiBQQVJBTUVURVJTOiAgcmVnaXN0ZXJfaWQgICAgICAgICAtIEFDUEkgUmVnaXN0ZXIgSUQKICAqICAgICAgICAgICAgICByZXR1cm5fdmFsdWUgICAgICAgIC0gV2hlcmUgdGhlIHJlZ2lzdGVyIHZhbHVlIGlzIHJldHVybmVkCiAgKgogICogUkVUVVJOOiAgICAgIFN0YXR1cyBhbmQgdGhlIHZhbHVlIHJlYWQuCkBAIC00NzEsMTkgKzQ3MiwxNCBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBhY3BpX3N0YXR1cwotYWNwaV9od19yZWdpc3Rlcl9yZWFkKHU4IHVzZV9sb2NrLCB1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqIHJldHVybl92YWx1ZSkKK2FjcGlfaHdfcmVnaXN0ZXJfcmVhZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqIHJldHVybl92YWx1ZSkKIHsKIAl1MzIgdmFsdWUxID0gMDsKIAl1MzIgdmFsdWUyID0gMDsKIAlhY3BpX3N0YXR1cyBzdGF0dXM7Ci0JYWNwaV9jcHVfZmxhZ3MgbG9ja19mbGFncyA9IDA7CiAKIAlBQ1BJX0ZVTkNUSU9OX1RSQUNFKGh3X3JlZ2lzdGVyX3JlYWQpOwogCi0JaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwotCX0KLQogCXN3aXRjaCAocmVnaXN0ZXJfaWQpIHsKIAljYXNlIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUzoJLyogMTYtYml0IGFjY2VzcyAqLwogCkBAIC00OTEsNyArNDg3LDcgQEAKIAkJICAgIGFjcGlfaHdfbG93X2xldmVsX3JlYWQoMTYsICZ2YWx1ZTEsCiAJCQkJCSAgICZhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCWdvdG8gZXhpdDsKIAkJfQogCiAJCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KQEAgLTUwNyw3ICs1MDMsNyBAQAogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9od19sb3dfbGV2ZWxfcmVhZCgxNiwgJnZhbHVlMSwgJmFjcGlfZ2JsX3hwbTFhX2VuYWJsZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAogCQkvKiBQTTFCIGlzIG9wdGlvbmFsICovCkBAIC01MjMsNyArNTE5LDcgQEAKIAkJICAgIGFjcGlfaHdfbG93X2xldmVsX3JlYWQoMTYsICZ2YWx1ZTEsCiAJCQkJCSAgICZhY3BpX2dibF9GQURULnhwbTFhX2NvbnRyb2xfYmxvY2spOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQkJZ290byBleGl0OwogCQl9CiAKIAkJc3RhdHVzID0KQEAgLTU1OCwxMCArNTU0LDcgQEAKIAkJYnJlYWs7CiAJfQogCi0gICAgICB1bmxvY2tfYW5kX2V4aXQ6Ci0JaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJYWNwaV9vc19yZWxlYXNlX2xvY2soYWNwaV9nYmxfaGFyZHdhcmVfbG9jaywgbG9ja19mbGFncyk7Ci0JfQorICAgICAgZXhpdDoKIAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkgewogCQkqcmV0dXJuX3ZhbHVlID0gdmFsdWUxOwpAQCAtNTc0LDggKzU2Nyw3IEBACiAgKgogICogRlVOQ1RJT046ICAgIGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUKICAqCi0gKiBQQVJBTUVURVJTOiAgdXNlX2xvY2sgICAgICAgICAgICAtIExvY2sgaGFyZHdhcmU/IFRydWUvRmFsc2UKLSAqICAgICAgICAgICAgICByZWdpc3Rlcl9pZCAgICAgICAgIC0gQUNQSSBSZWdpc3RlciBJRAorICogUEFSQU1FVEVSUzogIHJlZ2lzdGVyX2lkICAgICAgICAgLSBBQ1BJIFJlZ2lzdGVyIElECiAgKiAgICAgICAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAtIFRoZSB2YWx1ZSB0byB3cml0ZQogICoKICAqIFJFVFVSTjogICAgICBTdGF0dXMKQEAgLTU5NywyOCArNTg5LDIyIEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotYWNwaV9zdGF0dXMgYWNwaV9od19yZWdpc3Rlcl93cml0ZSh1OCB1c2VfbG9jaywgdTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUpCithY3BpX3N0YXR1cyBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKHUzMiByZWdpc3Rlcl9pZCwgdTMyIHZhbHVlKQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKLQlhY3BpX2NwdV9mbGFncyBsb2NrX2ZsYWdzID0gMDsKIAl1MzIgcmVhZF92YWx1ZTsKIAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoaHdfcmVnaXN0ZXJfd3JpdGUpOwogCi0JaWYgKEFDUElfTVRYX0xPQ0sgPT0gdXNlX2xvY2spIHsKLQkJbG9ja19mbGFncyA9IGFjcGlfb3NfYWNxdWlyZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2spOwotCX0KLQogCXN3aXRjaCAocmVnaXN0ZXJfaWQpIHsKIAljYXNlIEFDUElfUkVHSVNURVJfUE0xX1NUQVRVUzoJLyogMTYtYml0IGFjY2VzcyAqLwogCiAJCS8qIFBlcmZvcm0gYSByZWFkIGZpcnN0IHRvIHByZXNlcnZlIGNlcnRhaW4gYml0cyAocGVyIEFDUEkgc3BlYykgKi8KIAotCQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3JlYWQoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMV9TVEFUVVMsCiAJCQkJCSAgICAgICAmcmVhZF92YWx1ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewotCQkJZ290byB1bmxvY2tfYW5kX2V4aXQ7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAogCQkvKiBJbnNlcnQgdGhlIGJpdHMgdG8gYmUgcHJlc2VydmVkICovCkBAIC02MzIsNyArNjE4LDcgQEAKIAkJICAgIGFjcGlfaHdfbG93X2xldmVsX3dyaXRlKDE2LCB2YWx1ZSwKIAkJCQkJICAgICZhY3BpX2dibF9GQURULnhwbTFhX2V2ZW50X2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCWdvdG8gZXhpdDsKIAkJfQogCiAJCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KQEAgLTY0Nyw3ICs2MzMsNyBAQAogCQlzdGF0dXMgPQogCQkgICAgYWNwaV9od19sb3dfbGV2ZWxfd3JpdGUoMTYsIHZhbHVlLCAmYWNwaV9nYmxfeHBtMWFfZW5hYmxlKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCWdvdG8gZXhpdDsKIAkJfQogCiAJCS8qIFBNMUIgaXMgb3B0aW9uYWwgKi8KQEAgLTY2MSwxMSArNjQ3LDEwIEBACiAJCS8qCiAJCSAqIFBlcmZvcm0gYSByZWFkIGZpcnN0IHRvIHByZXNlcnZlIGNlcnRhaW4gYml0cyAocGVyIEFDUEkgc3BlYykKIAkJICovCi0JCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkJICAgICAgIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkgICAgICAgJnJlYWRfdmFsdWUpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKLQkJCWdvdG8gdW5sb2NrX2FuZF9leGl0OworCQkJZ290byBleGl0OwogCQl9CiAKIAkJLyogSW5zZXJ0IHRoZSBiaXRzIHRvIGJlIHByZXNlcnZlZCAqLwpAQCAtNjc5LDcgKzY2NCw3IEBACiAJCSAgICBhY3BpX2h3X2xvd19sZXZlbF93cml0ZSgxNiwgdmFsdWUsCiAJCQkJCSAgICAmYWNwaV9nYmxfRkFEVC54cG0xYV9jb250cm9sX2Jsb2NrKTsKIAkJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCQlnb3RvIHVubG9ja19hbmRfZXhpdDsKKwkJCWdvdG8gZXhpdDsKIAkJfQogCiAJCXN0YXR1cyA9CkBAIC03MjgsMTEgKzcxMyw3IEBACiAJCWJyZWFrOwogCX0KIAotICAgICAgdW5sb2NrX2FuZF9leGl0OgotCWlmIChBQ1BJX01UWF9MT0NLID09IHVzZV9sb2NrKSB7Ci0JCWFjcGlfb3NfcmVsZWFzZV9sb2NrKGFjcGlfZ2JsX2hhcmR3YXJlX2xvY2ssIGxvY2tfZmxhZ3MpOwotCX0KLQorICAgICAgZXhpdDoKIAlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYyBiL2RyaXZlcnMvYWNwaS9oYXJkd2FyZS9od3NsZWVwLmMKaW5kZXggY2Y2OWMwMC4uODFiMjQ4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hhcmR3YXJlL2h3c2xlZXAuYworKysgYi9kcml2ZXJzL2FjcGkvaGFyZHdhcmUvaHdzbGVlcC5jCkBAIC0yMzQsMTUgKzIzNCwxMSBAQAogCQkJCSJXaGlsZSBleGVjdXRpbmcgbWV0aG9kIF9TU1QiKSk7CiAJfQogCi0JLyoKLQkgKiAxKSBEaXNhYmxlL0NsZWFyIGFsbCBHUEVzCi0JICovCi0Jc3RhdHVzID0gYWNwaV9od19kaXNhYmxlX2FsbF9ncGVzKCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwotCX0KKwkvKiBEaXNhYmxlL0NsZWFyIGFsbCBHUEVzICovCiAKLQlyZXR1cm5fQUNQSV9TVEFUVVMoQUVfT0spOworCXN0YXR1cyA9IGFjcGlfaHdfZGlzYWJsZV9hbGxfZ3BlcygpOworCisJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiB9CiAKIEFDUElfRVhQT1JUX1NZTUJPTChhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3ByZXApCkBAIC0zMTMsOCArMzA5LDcgQEAKIAogCS8qIEdldCBjdXJyZW50IHZhbHVlIG9mIFBNMUEgY29udHJvbCAqLwogCi0Jc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl9yZWFkKEFDUElfTVRYX0RPX05PVF9MT0NLLAotCQkJCSAgICAgICBBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLCAmUE0xQWNvbnRyb2wpOworCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLCAmUE0xQWNvbnRyb2wpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKIAl9CkBAIC0zNDEsMTUgKzMzNiwxMyBAQAogCiAJLyogV3JpdGUgIzE6IGZpbGwgaW4gU0xQX1RZUCBkYXRhICovCiAKLQlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfTVRYX0RPX05PVF9MT0NLLAotCQkJCQlBQ1BJX1JFR0lTVEVSX1BNMUFfQ09OVFJPTCwKKwlzdGF0dXMgPSBhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfUkVHSVNURVJfUE0xQV9DT05UUk9MLAogCQkJCQlQTTFBY29udHJvbCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CiAJCXJldHVybl9BQ1BJX1NUQVRVUyhzdGF0dXMpOwogCX0KIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCUFDUElfUkVHSVNURVJfUE0xQl9DT05UUk9MLAorCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFCX0NPTlRST0wsCiAJCQkJCVBNMUJjb250cm9sKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CkBAIC0zNjQsMTUgKzM1NywxMyBAQAogCiAJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKIAotCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCUFDUElfUkVHSVNURVJfUE0xQV9DT05UUk9MLAorCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFBX0NPTlRST0wsCiAJCQkJCVBNMUFjb250cm9sKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJfQogCi0Jc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkJQUNQSV9SRUdJU1RFUl9QTTFCX0NPTlRST0wsCisJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMUJfQ09OVFJPTCwKIAkJCQkJUE0xQmNvbnRyb2wpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlyZXR1cm5fQUNQSV9TVEFUVVMoc3RhdHVzKTsKQEAgLTM5Miw4ICszODMsNyBAQAogCQkgKi8KIAkJYWNwaV9vc19zdGFsbCgxMDAwMDAwMCk7CiAKLQkJc3RhdHVzID0gYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkJCUFDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFfQ09OVFJPTCwKIAkJCQkJCXNsZWVwX2VuYWJsZV9yZWdfaW5mby0+CiAJCQkJCQlhY2Nlc3NfYml0X21hc2spOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKQEAgLTQwNCw3ICszOTQsOCBAQAogCS8qIFdhaXQgdW50aWwgd2UgZW50ZXIgc2xlZXAgc3RhdGUgKi8KIAogCWRvIHsKLQkJc3RhdHVzID0gYWNwaV9nZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfV0FLRV9TVEFUVVMsICZpbl92YWx1ZSk7CisJCXN0YXR1cyA9IGFjcGlfZ2V0X3JlZ2lzdGVyX3VubG9ja2VkKEFDUElfQklUUkVHX1dBS0VfU1RBVFVTLAorCQkJCQkJICAgICZpbl92YWx1ZSk7CiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQkJcmV0dXJuX0FDUElfU1RBVFVTKHN0YXR1cyk7CiAJCX0KQEAgLTUyMCw4ICs1MTEsNyBAQAogCiAJCS8qIEdldCBjdXJyZW50IHZhbHVlIG9mIFBNMUEgY29udHJvbCAqLwogCi0JCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX01UWF9ET19OT1RfTE9DSywKLQkJCQkJICAgICAgIEFDUElfUkVHSVNURVJfUE0xX0NPTlRST0wsCisJCXN0YXR1cyA9IGFjcGlfaHdfcmVnaXN0ZXJfcmVhZChBQ1BJX1JFR0lTVEVSX1BNMV9DT05UUk9MLAogCQkJCQkgICAgICAgJlBNMUFjb250cm9sKTsKIAkJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAKQEAgLTU0MywxMSArNTMzLDkgQEAKIAogCQkJLyogSnVzdCBpZ25vcmUgYW55IGVycm9ycyAqLwogCi0JCQkodm9pZClhY3BpX2h3X3JlZ2lzdGVyX3dyaXRlKEFDUElfTVRYX0RPX05PVF9MT0NLLAotCQkJCQkJICAgICBBQ1BJX1JFR0lTVEVSX1BNMUFfQ09OVFJPTCwKKwkJCSh2b2lkKWFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9SRUdJU1RFUl9QTTFBX0NPTlRST0wsCiAJCQkJCQkgICAgIFBNMUFjb250cm9sKTsKLQkJCSh2b2lkKWFjcGlfaHdfcmVnaXN0ZXJfd3JpdGUoQUNQSV9NVFhfRE9fTk9UX0xPQ0ssCi0JCQkJCQkgICAgIEFDUElfUkVHSVNURVJfUE0xQl9DT05UUk9MLAorCQkJKHZvaWQpYWNwaV9od19yZWdpc3Rlcl93cml0ZShBQ1BJX1JFR0lTVEVSX1BNMUJfQ09OVFJPTCwKIAkJCQkJCSAgICAgUE0xQmNvbnRyb2wpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL29zbC5jIGIvZHJpdmVycy9hY3BpL29zbC5jCmluZGV4IDM1MmNmODEuLmFhYmM2Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9vc2wuYworKysgYi9kcml2ZXJzL2FjcGkvb3NsLmMKQEAgLTEwNDMsMTQgKzEwNDMsNiBAQAogX19zZXR1cCgiYWNwaV93YWtlX2dwZXNfYWx3YXlzX29uIiwgYWNwaV93YWtlX2dwZXNfYWx3YXlzX29uX3NldHVwKTsKIAogLyoKLSAqIG1heF9jc3RhdGUgaXMgZGVmaW5lZCBpbiB0aGUgYmFzZSBrZXJuZWwgc28gbW9kdWxlcyBjYW4KLSAqIGNoYW5nZSBpdCB3L28gZGVwZW5kaW5nIG9uIHRoZSBzdGF0ZSBvZiB0aGUgcHJvY2Vzc29yIG1vZHVsZS4KLSAqLwotdW5zaWduZWQgaW50IG1heF9jc3RhdGUgPSBBQ1BJX1BST0NFU1NPUl9NQVhfUE9XRVI7Ci0KLUVYUE9SVF9TWU1CT0wobWF4X2NzdGF0ZSk7Ci0KLS8qCiAgKiBBY3F1aXJlIGEgc3BpbmxvY2suCiAgKgogICogaGFuZGxlIGlzIGEgcG9pbnRlciB0byB0aGUgc3BpbmxvY2tfdC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggOWYxMWRjMi4uMjM1YTUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNDIxLDEyICs0MjIsNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0lBNjQKLSNkZWZpbmUgYXJjaF9jcHVfdG9fYXBpY2lkIAlpYTY0X2NwdV90b19zYXBpY2lkCi0jZWxzZQotI2RlZmluZSBhcmNoX2NwdV90b19hcGljaWQgCXg4Nl9jcHVfdG9fYXBpY2lkCi0jZW5kaWYKLQogc3RhdGljIGludCBtYXBfbWFkdF9lbnRyeSh1MzIgYWNwaV9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG1hZHRfZW5kLCBlbnRyeTsKQEAgLTUwMCw3ICs0OTUsNyBAQAogCQlyZXR1cm4gYXBpY19pZDsKIAogCWZvciAoaSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpIHsKLQkJaWYgKGFyY2hfY3B1X3RvX2FwaWNpZFtpXSA9PSBhcGljX2lkKQorCQlpZiAoY3B1X3BoeXNpY2FsX2lkKGkpID09IGFwaWNfaWQpCiAJCQlyZXR1cm4gaTsKIAl9CiAJcmV0dXJuIC0xOwpAQCAtMTA0OSwxMSArMTA0NCwxMyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAlhY3BpX3Byb2Nlc3Nvcl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKKwlyZXN1bHQgPSBjcHVpZGxlX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9pZGxlX2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApCisJCWdvdG8gb3V0X3Byb2M7CisKIAlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfcHJvY2Vzc29yX2RyaXZlcik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9QUk9DRVNTT1JfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KKwlpZiAocmVzdWx0IDwgMCkKKwkJZ290byBvdXRfY3B1aWRsZTsKIAogCWFjcGlfcHJvY2Vzc29yX2luc3RhbGxfaG90cGx1Z19ub3RpZnkoKTsKIApAQCAtMTA2MiwxMSArMTA1OSwxOCBAQAogCWFjcGlfcHJvY2Vzc29yX3BwY19pbml0KCk7CiAKIAlyZXR1cm4gMDsKKworb3V0X2NwdWlkbGU6CisJY3B1aWRsZV91bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9pZGxlX2RyaXZlcik7CisKK291dF9wcm9jOgorCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfUFJPQ0VTU09SX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKKworCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3Byb2Nlc3Nvcl9leGl0KHZvaWQpCiB7Ci0KIAlhY3BpX3Byb2Nlc3Nvcl9wcGNfZXhpdCgpOwogCiAJYWNwaV90aGVybWFsX2NwdWZyZXFfZXhpdCgpOwpAQCAtMTA3NSw2ICsxMDc5LDggQEAKIAogCWFjcGlfYnVzX3VucmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3Byb2Nlc3Nvcl9kcml2ZXIpOwogCisJY3B1aWRsZV91bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9pZGxlX2RyaXZlcik7CisKIAlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX1BST0NFU1NPUl9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCmluZGV4IDFmNmZiMzguLmY5OTZkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4JLyogbmVlZF9yZXNjaGVkKCkgKi8KICNpbmNsdWRlIDxsaW51eC9sYXRlbmN5Lmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWlkbGUuaD4KIAogLyoKICAqIEluY2x1ZGUgdGhlIGFwaWMgZGVmaW5pdGlvbnMgZm9yIHg4NiB0byBoYXZlIHRoZSBBUElDIHRpbWVyIHJlbGF0ZWQgZGVmaW5lcwpAQCAtNjQsMTQgKzY1LDIyIEBACiAjZGVmaW5lIEFDUElfUFJPQ0VTU09SX0ZJTEVfUE9XRVIJInBvd2VyIgogI2RlZmluZSBVU19UT19QTV9USU1FUl9USUNLUyh0KQkJKCh0ICogKFBNX1RJTUVSX0ZSRVFVRU5DWS8xMDAwKSkgLyAxMDAwKQogI2RlZmluZSBQTV9USU1FUl9USUNLX05TCQkoMTAwMDAwMDAwMFVMTC9QTV9USU1FUl9GUkVRVUVOQ1kpCisjaWZuZGVmIENPTkZJR19DUFVfSURMRQogI2RlZmluZSBDMl9PVkVSSEVBRAkJCTQJLyogMXVzICgzLjU3OSB0aWNrcyBwZXIgdXMpICovCiAjZGVmaW5lIEMzX09WRVJIRUFECQkJNAkvKiAxdXMgKDMuNTc5IHRpY2tzIHBlciB1cykgKi8KIHN0YXRpYyB2b2lkICgqcG1faWRsZV9zYXZlKSAodm9pZCkgX19yZWFkX21vc3RseTsKLW1vZHVsZV9wYXJhbShtYXhfY3N0YXRlLCB1aW50LCAwNjQ0KTsKKyNlbHNlCisjZGVmaW5lIEMyX09WRVJIRUFECQkJMQkvKiAxdXMgKi8KKyNkZWZpbmUgQzNfT1ZFUkhFQUQJCQkxCS8qIDF1cyAqLworI2VuZGlmCisjZGVmaW5lIFBNX1RJTUVSX1RJQ0tTX1RPX1VTKHApCQkoKChwKSAqIDEwMDApLyhQTV9USU1FUl9GUkVRVUVOQ1kvMTAwMCkpCiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWF4X2NzdGF0ZSBfX3JlYWRfbW9zdGx5ID0gQUNQSV9QUk9DRVNTT1JfTUFYX1BPV0VSOworbW9kdWxlX3BhcmFtKG1heF9jc3RhdGUsIHVpbnQsIDAwMDApOwogc3RhdGljIHVuc2lnbmVkIGludCBub2NzdCBfX3JlYWRfbW9zdGx5OwogbW9kdWxlX3BhcmFtKG5vY3N0LCB1aW50LCAwMDAwKTsKIAorI2lmbmRlZiBDT05GSUdfQ1BVX0lETEUKIC8qCiAgKiBibV9oaXN0b3J5IC0tIGJpdC1tYXNrIHdpdGggYSBiaXQgcGVyIGppZmZ5IG9mIGJ1cy1tYXN0ZXIgYWN0aXZpdHkKICAqIDEwMDAgSFo6IDB4RkZGRkZGRkY6IDMyIGppZmZpZXMgPSAzMm1zCkBAIC04Miw5ICs5MSwxMCBAQAogc3RhdGljIHVuc2lnbmVkIGludCBibV9oaXN0b3J5IF9fcmVhZF9tb3N0bHkgPQogICAgIChIWiA+PSA4MDAgPyAweEZGRkZGRkZGIDogKCgxVSA8PCAoSFogLyAyNSkpIC0gMSkpOwogbW9kdWxlX3BhcmFtKGJtX2hpc3RvcnksIHVpbnQsIDA2NDQpOwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG93ZXIgTWFuYWdlbWVudAotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9zZXRfcG93ZXJfcG9saWN5KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpOworCisjZW5kaWYKIAogLyoKICAqIElCTSBUaGlua1BhZCBSNDBlIGNyYXNoZXMgbXlzdGVyaW91c2x5IHdoZW4gZ29pbmcgaW50byBDMiBvciBDMy4KQEAgLTE3Nyw2ICsxODcsMTggQEAKIAkJcmV0dXJuICgoMHhGRkZGRkZGRiAtIHQxKSArIHQyKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgdGlja3NfZWxhcHNlZF9pbl91cyh1MzIgdDEsIHUzMiB0MikKK3sKKwlpZiAodDIgPj0gdDEpCisJCXJldHVybiBQTV9USU1FUl9USUNLU19UT19VUyh0MiAtIHQxKTsKKwllbHNlIGlmICghKGFjcGlfZ2JsX0ZBRFQuZmxhZ3MgJiBBQ1BJX0ZBRFRfMzJCSVRfVElNRVIpKQorCQlyZXR1cm4gUE1fVElNRVJfVElDS1NfVE9fVVMoKCgweDAwRkZGRkZGIC0gdDEpICsgdDIpICYgMHgwMEZGRkZGRik7CisJZWxzZQorCQlyZXR1cm4gUE1fVElNRVJfVElDS1NfVE9fVVMoKDB4RkZGRkZGRkYgLSB0MSkgKyB0Mik7Cit9CisKKyNpZm5kZWYgQ09ORklHX0NQVV9JRExFCisKIHN0YXRpYyB2b2lkCiBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9hY3RpdmF0ZShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAogCQkJICAgICAgc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpuZXcpCkBAIC0yNDgsNiArMjcwLDcgQEAKIAkJdW51c2VkID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOwogCX0KIH0KKyNlbmRpZiAvKiAhQ09ORklHX0NQVV9JRExFICovCiAKICNpZmRlZiBBUkNIX0FQSUNUSU1FUl9TVE9QU19PTl9DMwogCkBAIC0zMzAsNiArMzUzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBDT05GSUdfQ1BVX0lETEUKIHN0YXRpYyB2b2lkIGFjcGlfcHJvY2Vzc29yX2lkbGUodm9pZCkKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKQEAgLTQyNyw3ICs0NTEsNyBAQAogCSAqIGFuIFNNUCBzeXN0ZW0uIFdlIGRvIGl0IGhlcmUgaW5zdGVhZCBvZiBkb2luZyBpdCBhdCBfQ1NUL1BfTFZMCiAJICogZGV0ZWN0aW9uIHBoYXNlLCB0byB3b3JrIGNsZWFubHkgd2l0aCBsb2dpY2FsIENQVSBob3RwbHVnLgogCSAqLwotCWlmICgoY3gtPnR5cGUgIT0gQUNQSV9TVEFURV9DMSkgJiYgKG51bV9vbmxpbmVfY3B1cygpID4gMSkgJiYgCisJaWYgKChjeC0+dHlwZSAhPSBBQ1BJX1NUQVRFX0MxKSAmJiAobnVtX29ubGluZV9jcHVzKCkgPiAxKSAmJgogCSAgICAhcHItPmZsYWdzLmhhc19jc3QgJiYgIShhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX0MyX01QX1NVUFBPUlRFRCkpCiAJCWN4ID0gJnByLT5wb3dlci5zdGF0ZXNbQUNQSV9TVEFURV9DMV07CiAjZW5kaWYKQEAgLTcyNyw2ICs3NTEsNyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogIUNPTkZJR19DUFVfSURMRSAqLwogCiBzdGF0aWMgaW50IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvX2ZhZHQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKIHsKQEAgLTc0NCw3ICs3NjksNyBAQAogI2lmbmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAkvKgogCSAqIENoZWNrIGZvciBQX0xWTDJfVVAgZmxhZyBiZWZvcmUgZW50ZXJpbmcgQzIgYW5kIGFib3ZlIG9uCi0JICogYW4gU01QIHN5c3RlbS4gCisJICogYW4gU01QIHN5c3RlbS4KIAkgKi8KIAlpZiAoKG51bV9vbmxpbmVfY3B1cygpID4gMSkgJiYKIAkgICAgIShhY3BpX2dibF9GQURULmZsYWdzICYgQUNQSV9GQURUX0MyX01QX1NVUFBPUlRFRCkpCkBAIC05NDUsNyArOTcwLDEyIEBACiAJICogTm9ybWFsaXplIHRoZSBDMiBsYXRlbmN5IHRvIGV4cGlkaXRlIHBvbGljeQogCSAqLwogCWN4LT52YWxpZCA9IDE7CisKKyNpZm5kZWYgQ09ORklHX0NQVV9JRExFCiAJY3gtPmxhdGVuY3lfdGlja3MgPSBVU19UT19QTV9USU1FUl9USUNLUyhjeC0+bGF0ZW5jeSk7CisjZWxzZQorCWN4LT5sYXRlbmN5X3RpY2tzID0gY3gtPmxhdGVuY3k7CisjZW5kaWYKIAogCXJldHVybjsKIH0KQEAgLTEwMjUsNyArMTA1NSwxMiBAQAogCSAqIHVzZSB0aGlzIGluIG91ciBDMyBwb2xpY3kKIAkgKi8KIAljeC0+dmFsaWQgPSAxOworCisjaWZuZGVmIENPTkZJR19DUFVfSURMRQogCWN4LT5sYXRlbmN5X3RpY2tzID0gVVNfVE9fUE1fVElNRVJfVElDS1MoY3gtPmxhdGVuY3kpOworI2Vsc2UKKwljeC0+bGF0ZW5jeV90aWNrcyA9IGN4LT5sYXRlbmN5OworI2VuZGlmCiAKIAlyZXR1cm47CiB9CkBAIC0xMDkwLDYgKzExMjUsNyBAQAogCiAJcHItPnBvd2VyLmNvdW50ID0gYWNwaV9wcm9jZXNzb3JfcG93ZXJfdmVyaWZ5KHByKTsKIAorI2lmbmRlZiBDT05GSUdfQ1BVX0lETEUKIAkvKgogCSAqIFNldCBEZWZhdWx0IFBvbGljeQogCSAqIC0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTEwMSw2ICsxMTM3LDcgQEAKIAlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9zZXRfcG93ZXJfcG9saWN5KHByKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OworI2VuZGlmCiAKIAkvKgogCSAqIGlmIG9uZSBzdGF0ZSBvZiB0eXBlIEMyIG9yIEMzIGlzIGF2YWlsYWJsZSwgbWFyayB0aGlzCkBAIC0xMTE3LDM1ICsxMTU0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGFjcGlfcHJvY2Vzc29yX2NzdF9oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQotewotCWludCByZXN1bHQgPSAwOwotCi0KLQlpZiAoIXByKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChub2NzdCkgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQlpZiAoIXByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIEZhbGwgYmFjayB0byB0aGUgZGVmYXVsdCBpZGxlIGxvb3AgKi8KLQlwbV9pZGxlID0gcG1faWRsZV9zYXZlOwotCXN5bmNocm9uaXplX3NjaGVkKCk7CS8qIFJlbGllcyBvbiBpbnRlcnJ1cHRzIGZvcmNpbmcgZXhpdCBmcm9tIGlkbGUuICovCi0KLQlwci0+ZmxhZ3MucG93ZXIgPSAwOwotCXJlc3VsdCA9IGFjcGlfcHJvY2Vzc29yX2dldF9wb3dlcl9pbmZvKHByKTsKLQlpZiAoKHByLT5mbGFncy5wb3dlciA9PSAxKSAmJiAocHItPmZsYWdzLnBvd2VyX3NldHVwX2RvbmUpKQotCQlwbV9pZGxlID0gYWNwaV9wcm9jZXNzb3JfaWRsZTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIHByb2MgaW50ZXJmYWNlICovCi0KIHN0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gc2VxLT5wcml2YXRlOwpAQCAtMTIyNyw2ICsxMjM1LDM1IEBACiAJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKKyNpZm5kZWYgQ09ORklHX0NQVV9JRExFCisKK2ludCBhY3BpX3Byb2Nlc3Nvcl9jc3RfaGFzX2NoYW5nZWQoc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcikKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKworCisJaWYgKCFwcikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobm9jc3QpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFwci0+ZmxhZ3MucG93ZXJfc2V0dXBfZG9uZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgaWRsZSBsb29wICovCisJcG1faWRsZSA9IHBtX2lkbGVfc2F2ZTsKKwlzeW5jaHJvbml6ZV9zY2hlZCgpOwkvKiBSZWxpZXMgb24gaW50ZXJydXB0cyBmb3JjaW5nIGV4aXQgZnJvbSBpZGxlLiAqLworCisJcHItPmZsYWdzLnBvd2VyID0gMDsKKwlyZXN1bHQgPSBhY3BpX3Byb2Nlc3Nvcl9nZXRfcG93ZXJfaW5mbyhwcik7CisJaWYgKChwci0+ZmxhZ3MucG93ZXIgPT0gMSkgJiYgKHByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lKSkKKwkJcG1faWRsZSA9IGFjcGlfcHJvY2Vzc29yX2lkbGU7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIHZvaWQgc21wX2NhbGxiYWNrKHZvaWQgKnYpCiB7CkBAIC0xMjQ5LDggKzEyODYsMzY3IEBACiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGFjcGlfcHJvY2Vzc29yX2xhdGVuY3lfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBhY3BpX3Byb2Nlc3Nvcl9sYXRlbmN5X25vdGlmeSwKIH07CisKICNlbmRpZgogCisjZWxzZSAvKiBDT05GSUdfQ1BVX0lETEUgKi8KKworLyoqCisgKiBhY3BpX2lkbGVfYm1fY2hlY2sgLSBjaGVja3MgaWYgYnVzIG1hc3RlciBhY3Rpdml0eSB3YXMgZGV0ZWN0ZWQKKyAqLworc3RhdGljIGludCBhY3BpX2lkbGVfYm1fY2hlY2sodm9pZCkKK3sKKwl1MzIgYm1fc3RhdHVzID0gMDsKKworCWFjcGlfZ2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0JVU19NQVNURVJfU1RBVFVTLCAmYm1fc3RhdHVzKTsKKwlpZiAoYm1fc3RhdHVzKQorCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1NUQVRVUywgMSk7CisJLyoKKwkgKiBQSUlYNCBFcnJhdHVtICMxODogTm90ZSB0aGF0IEJNX1NUUyBkb2Vzbid0IGFsd2F5cyByZWZsZWN0CisJICogdGhlIHRydWUgc3RhdGUgb2YgYnVzIG1hc3RlcmluZyBhY3Rpdml0eTsgZm9yY2luZyB1cyB0bworCSAqIG1hbnVhbGx5IGNoZWNrIHRoZSBCTUlERUEgYml0IG9mIGVhY2ggSURFIGNoYW5uZWwuCisJICovCisJZWxzZSBpZiAoZXJyYXRhLnBpaXg0LmJtaXN4KSB7CisJCWlmICgoaW5iX3AoZXJyYXRhLnBpaXg0LmJtaXN4ICsgMHgwMikgJiAweDAxKQorCQkgICAgfHwgKGluYl9wKGVycmF0YS5waWl4NC5ibWlzeCArIDB4MEEpICYgMHgwMSkpCisJCQlibV9zdGF0dXMgPSAxOworCX0KKwlyZXR1cm4gYm1fc3RhdHVzOworfQorCisvKioKKyAqIGFjcGlfaWRsZV91cGRhdGVfYm1fcmxkIC0gdXBkYXRlcyB0aGUgQk1fUkxEIGJpdCBkZXBlbmRpbmcgb24gdGFyZ2V0IHN0YXRlCisgKiBAcHI6IHRoZSBwcm9jZXNzb3IKKyAqIEB0YXJnZXQ6IHRoZSBuZXcgdGFyZ2V0IHN0YXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2lkbGVfdXBkYXRlX2JtX3JsZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAorCQkJCQkgICBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKnRhcmdldCkKK3sKKwlpZiAocHItPmZsYWdzLmJtX3JsZF9zZXQgJiYgdGFyZ2V0LT50eXBlICE9IEFDUElfU1RBVEVfQzMpIHsKKwkJYWNwaV9zZXRfcmVnaXN0ZXIoQUNQSV9CSVRSRUdfQlVTX01BU1RFUl9STEQsIDApOworCQlwci0+ZmxhZ3MuYm1fcmxkX3NldCA9IDA7CisJfQorCisJaWYgKCFwci0+ZmxhZ3MuYm1fcmxkX3NldCAmJiB0YXJnZXQtPnR5cGUgPT0gQUNQSV9TVEFURV9DMykgeworCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19CVVNfTUFTVEVSX1JMRCwgMSk7CisJCXByLT5mbGFncy5ibV9ybGRfc2V0ID0gMTsKKwl9Cit9CisKKy8qKgorICogYWNwaV9pZGxlX2RvX2VudHJ5IC0gYSBoZWxwZXIgZnVuY3Rpb24gdGhhdCBkb2VzIEMyIGFuZCBDMyB0eXBlIGVudHJ5CisgKiBAY3g6IGNzdGF0ZSBkYXRhCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX2lkbGVfZG9fZW50cnkoc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCkKK3sKKwlpZiAoY3gtPnNwYWNlX2lkID09IEFDUElfQ1NUQVRFX0ZGSCkgeworCQkvKiBDYWxsIGludG8gYXJjaGl0ZWN0dXJhbCBGRkggYmFzZWQgQy1zdGF0ZSAqLworCQlhY3BpX3Byb2Nlc3Nvcl9mZmhfY3N0YXRlX2VudGVyKGN4KTsKKwl9IGVsc2UgeworCQlpbnQgdW51c2VkOworCQkvKiBJTyBwb3J0IGJhc2VkIEMtc3RhdGUgKi8KKwkJaW5iKGN4LT5hZGRyZXNzKTsKKwkJLyogRHVtbXkgd2FpdCBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwyIHJlYWQKKwkJICAgYmVjYXVzZSBjaGlwc2V0cyBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgU1RQQ0xLIyBzaWduYWwKKwkJICAgZ2V0cyBhc3NlcnRlZCBpbiB0aW1lIHRvIGZyZWV6ZSBleGVjdXRpb24gcHJvcGVybHkuICovCisJCXVudXNlZCA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwl9Cit9CisKKy8qKgorICogYWNwaV9pZGxlX2VudGVyX2MxIC0gZW50ZXJzIGFuIEFDUEkgQzEgc3RhdGUtdHlwZQorICogQGRldjogdGhlIHRhcmdldCBDUFUKKyAqIEBzdGF0ZTogdGhlIHN0YXRlIGRhdGEKKyAqCisgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEhBTFQgaW5zdHJ1Y3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgYWNwaV9pZGxlX2VudGVyX2MxKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGNwdWlkbGVfc3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpjeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdGF0ZSk7CisJcHIgPSBwcm9jZXNzb3JzW3NtcF9wcm9jZXNzb3JfaWQoKV07CisKKwlpZiAodW5saWtlbHkoIXByKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocHItPmZsYWdzLmJtX2NoZWNrKQorCQlhY3BpX2lkbGVfdXBkYXRlX2JtX3JsZChwciwgY3gpOworCisJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CisJLyoKKwkgKiBUU19QT0xMSU5HLWNsZWFyZWQgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0CisJICogTkVFRF9SRVNDSEVEOgorCSAqLworCXNtcF9tYigpOworCWlmICghbmVlZF9yZXNjaGVkKCkpCisJCXNhZmVfaGFsdCgpOworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CisKKwljeC0+dXNhZ2UrKzsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGFjcGlfaWRsZV9lbnRlcl9zaW1wbGUgLSBlbnRlcnMgYW4gQUNQSSBzdGF0ZSB3aXRob3V0IEJNIGhhbmRsaW5nCisgKiBAZGV2OiB0aGUgdGFyZ2V0IENQVQorICogQHN0YXRlOiB0aGUgc3RhdGUgZGF0YQorICovCitzdGF0aWMgaW50IGFjcGlfaWRsZV9lbnRlcl9zaW1wbGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gY3B1aWRsZV9nZXRfc3RhdGVkYXRhKHN0YXRlKTsKKwl1MzIgdDEsIHQyOworCXByID0gcHJvY2Vzc29yc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJaWYgKHVubGlrZWx5KCFwcikpCisJCXJldHVybiAwOworCisJaWYgKGFjcGlfaWRsZV9zdXNwZW5kKQorCQlyZXR1cm4oYWNwaV9pZGxlX2VudGVyX2MxKGRldiwgc3RhdGUpKTsKKworCWlmIChwci0+ZmxhZ3MuYm1fY2hlY2spCisJCWFjcGlfaWRsZV91cGRhdGVfYm1fcmxkKHByLCBjeCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzICY9IH5UU19QT0xMSU5HOworCS8qCisJICogVFNfUE9MTElORy1jbGVhcmVkIHN0YXRlIG11c3QgYmUgdmlzaWJsZSBiZWZvcmUgd2UgdGVzdAorCSAqIE5FRURfUkVTQ0hFRDoKKwkgKi8KKwlzbXBfbWIoKTsKKworCWlmICh1bmxpa2VseShuZWVkX3Jlc2NoZWQoKSkpIHsKKwkJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgfD0gVFNfUE9MTElORzsKKwkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoY3gtPnR5cGUgPT0gQUNQSV9TVEFURV9DMykKKwkJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKKworCXQxID0gaW5sKGFjcGlfZ2JsX0ZBRFQueHBtX3RpbWVyX2Jsb2NrLmFkZHJlc3MpOworCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMSk7CisJYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKKwl0MiA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKworI2lmIGRlZmluZWQgKENPTkZJR19HRU5FUklDX1RJTUUpICYmIGRlZmluZWQgKENPTkZJR19YODZfVFNDKQorCS8qIFRTQyBjb3VsZCBoYWx0IGluIGlkbGUsIHNvIG5vdGlmeSB1c2VycyAqLworCW1hcmtfdHNjX3Vuc3RhYmxlKCJUU0MgaGFsdHMgaW4gaWRsZSIpOzsKKyNlbmRpZgorCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CisKKwljeC0+dXNhZ2UrKzsKKworCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMCk7CisJY3gtPnRpbWUgKz0gdGlja3NfZWxhcHNlZCh0MSwgdDIpOworCXJldHVybiB0aWNrc19lbGFwc2VkX2luX3VzKHQxLCB0Mik7Cit9CisKK3N0YXRpYyBpbnQgYzNfY3B1X2NvdW50Oworc3RhdGljIERFRklORV9TUElOTE9DSyhjM19sb2NrKTsKKworLyoqCisgKiBhY3BpX2lkbGVfZW50ZXJfYm0gLSBlbnRlcnMgQzMgd2l0aCBwcm9wZXIgQk0gaGFuZGxpbmcKKyAqIEBkZXY6IHRoZSB0YXJnZXQgQ1BVCisgKiBAc3RhdGU6IHRoZSBzdGF0ZSBkYXRhCisgKgorICogSWYgQk0gaXMgZGV0ZWN0ZWQsIHRoZSBkZWVwZXN0IG5vbi1DMyBpZGxlIHN0YXRlIGlzIGVudGVyZWQgaW5zdGVhZC4KKyAqLworc3RhdGljIGludCBhY3BpX2lkbGVfZW50ZXJfYm0oc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpCit7CisJc3RydWN0IGFjcGlfcHJvY2Vzc29yICpwcjsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gY3B1aWRsZV9nZXRfc3RhdGVkYXRhKHN0YXRlKTsKKwl1MzIgdDEsIHQyOworCXByID0gcHJvY2Vzc29yc1tzbXBfcHJvY2Vzc29yX2lkKCldOworCisJaWYgKHVubGlrZWx5KCFwcikpCisJCXJldHVybiAwOworCisJaWYgKGFjcGlfaWRsZV9zdXNwZW5kKQorCQlyZXR1cm4oYWNwaV9pZGxlX2VudGVyX2MxKGRldiwgc3RhdGUpKTsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJY3VycmVudF90aHJlYWRfaW5mbygpLT5zdGF0dXMgJj0gflRTX1BPTExJTkc7CisJLyoKKwkgKiBUU19QT0xMSU5HLWNsZWFyZWQgc3RhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSB0ZXN0CisJICogTkVFRF9SRVNDSEVEOgorCSAqLworCXNtcF9tYigpOworCisJaWYgKHVubGlrZWx5KG5lZWRfcmVzY2hlZCgpKSkgeworCQljdXJyZW50X3RocmVhZF9pbmZvKCktPnN0YXR1cyB8PSBUU19QT0xMSU5HOworCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogTXVzdCBiZSBkb25lIGJlZm9yZSBidXNtYXN0ZXIgZGlzYWJsZSBhcyB3ZSBtaWdodCBuZWVkIHRvCisJICogYWNjZXNzIEhQRVQgIQorCSAqLworCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMSk7CisKKwlpZiAoYWNwaV9pZGxlX2JtX2NoZWNrKCkpIHsKKwkJY3ggPSBwci0+cG93ZXIuYm1fc3RhdGU7CisKKwkJYWNwaV9pZGxlX3VwZGF0ZV9ibV9ybGQocHIsIGN4KTsKKworCQl0MSA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwkJYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKKwkJdDIgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkJYWNwaV9pZGxlX3VwZGF0ZV9ibV9ybGQocHIsIGN4KTsKKworCQlzcGluX2xvY2soJmMzX2xvY2spOworCQljM19jcHVfY291bnQrKzsKKwkJLyogRGlzYWJsZSBidXMgbWFzdGVyIGFyYml0cmF0aW9uIHdoZW4gYWxsIENQVXMgYXJlIGluIEMzICovCisJCWlmIChjM19jcHVfY291bnQgPT0gbnVtX29ubGluZV9jcHVzKCkpCisJCQlhY3BpX3NldF9yZWdpc3RlcihBQ1BJX0JJVFJFR19BUkJfRElTQUJMRSwgMSk7CisJCXNwaW5fdW5sb2NrKCZjM19sb2NrKTsKKworCQl0MSA9IGlubChhY3BpX2dibF9GQURULnhwbV90aW1lcl9ibG9jay5hZGRyZXNzKTsKKwkJYWNwaV9pZGxlX2RvX2VudHJ5KGN4KTsKKwkJdDIgPSBpbmwoYWNwaV9nYmxfRkFEVC54cG1fdGltZXJfYmxvY2suYWRkcmVzcyk7CisKKwkJc3Bpbl9sb2NrKCZjM19sb2NrKTsKKwkJLyogUmUtZW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KKwkJaWYgKGMzX2NwdV9jb3VudCA9PSBudW1fb25saW5lX2NwdXMoKSkKKwkJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwKTsKKwkJYzNfY3B1X2NvdW50LS07CisJCXNwaW5fdW5sb2NrKCZjM19sb2NrKTsKKwl9CisKKyNpZiBkZWZpbmVkIChDT05GSUdfR0VORVJJQ19USU1FKSAmJiBkZWZpbmVkIChDT05GSUdfWDg2X1RTQykKKwkvKiBUU0MgY291bGQgaGFsdCBpbiBpZGxlLCBzbyBub3RpZnkgdXNlcnMgKi8KKwltYXJrX3RzY191bnN0YWJsZSgiVFNDIGhhbHRzIGluIGlkbGUiKTsKKyNlbmRpZgorCisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+c3RhdHVzIHw9IFRTX1BPTExJTkc7CisKKwljeC0+dXNhZ2UrKzsKKworCWFjcGlfc3RhdGVfdGltZXJfYnJvYWRjYXN0KHByLCBjeCwgMCk7CisJY3gtPnRpbWUgKz0gdGlja3NfZWxhcHNlZCh0MSwgdDIpOworCXJldHVybiB0aWNrc19lbGFwc2VkX2luX3VzKHQxLCB0Mik7Cit9CisKK3N0cnVjdCBjcHVpZGxlX2RyaXZlciBhY3BpX2lkbGVfZHJpdmVyID0geworCS5uYW1lID0JCSJhY3BpX2lkbGUiLAorCS5vd25lciA9CVRISVNfTU9EVUxFLAorfTsKKworLyoqCisgKiBhY3BpX3Byb2Nlc3Nvcl9zZXR1cF9jcHVpZGxlIC0gcHJlcGFyZXMgYW5kIGNvbmZpZ3VyZXMgQ1BVSURMRQorICogQHByOiB0aGUgQUNQSSBwcm9jZXNzb3IKKyAqLworc3RhdGljIGludCBhY3BpX3Byb2Nlc3Nvcl9zZXR1cF9jcHVpZGxlKHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIpCit7CisJaW50IGksIGNvdW50ID0gMDsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4OworCXN0cnVjdCBjcHVpZGxlX3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiA9ICZwci0+cG93ZXIuZGV2OworCisJaWYgKCFwci0+ZmxhZ3MucG93ZXJfc2V0dXBfZG9uZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocHItPmZsYWdzLnBvd2VyID09IDApIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMTsgaSA8IEFDUElfUFJPQ0VTU09SX01BWF9QT1dFUiAmJiBpIDw9IG1heF9jc3RhdGU7IGkrKykgeworCQljeCA9ICZwci0+cG93ZXIuc3RhdGVzW2ldOworCQlzdGF0ZSA9ICZkZXYtPnN0YXRlc1tjb3VudF07CisKKwkJaWYgKCFjeC0+dmFsaWQpCisJCQljb250aW51ZTsKKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCQlpZiAoKGN4LT50eXBlICE9IEFDUElfU1RBVEVfQzEpICYmIChudW1fb25saW5lX2NwdXMoKSA+IDEpICYmCisJCSAgICAhcHItPmZsYWdzLmhhc19jc3QgJiYKKwkJICAgICEoYWNwaV9nYmxfRkFEVC5mbGFncyAmIEFDUElfRkFEVF9DMl9NUF9TVVBQT1JURUQpKQorCQkJY29udGludWU7CisjZW5kaWYKKwkJY3B1aWRsZV9zZXRfc3RhdGVkYXRhKHN0YXRlLCBjeCk7CisKKwkJc25wcmludGYoc3RhdGUtPm5hbWUsIENQVUlETEVfTkFNRV9MRU4sICJDJWQiLCBpKTsKKwkJc3RhdGUtPmV4aXRfbGF0ZW5jeSA9IGN4LT5sYXRlbmN5OworCQlzdGF0ZS0+dGFyZ2V0X3Jlc2lkZW5jeSA9IGN4LT5sYXRlbmN5ICogNjsKKwkJc3RhdGUtPnBvd2VyX3VzYWdlID0gY3gtPnBvd2VyOworCisJCXN0YXRlLT5mbGFncyA9IDA7CisJCXN3aXRjaCAoY3gtPnR5cGUpIHsKKwkJCWNhc2UgQUNQSV9TVEFURV9DMToKKwkJCXN0YXRlLT5mbGFncyB8PSBDUFVJRExFX0ZMQUdfU0hBTExPVzsKKwkJCXN0YXRlLT5lbnRlciA9IGFjcGlfaWRsZV9lbnRlcl9jMTsKKwkJCWJyZWFrOworCisJCQljYXNlIEFDUElfU1RBVEVfQzI6CisJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX0JBTEFOQ0VEOworCQkJc3RhdGUtPmZsYWdzIHw9IENQVUlETEVfRkxBR19USU1FX1ZBTElEOworCQkJc3RhdGUtPmVudGVyID0gYWNwaV9pZGxlX2VudGVyX3NpbXBsZTsKKwkJCWJyZWFrOworCisJCQljYXNlIEFDUElfU1RBVEVfQzM6CisJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX0RFRVA7CisJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQ7CisJCQlzdGF0ZS0+ZmxhZ3MgfD0gQ1BVSURMRV9GTEFHX0NIRUNLX0JNOworCQkJc3RhdGUtPmVudGVyID0gcHItPmZsYWdzLmJtX2NoZWNrID8KKwkJCQkJYWNwaV9pZGxlX2VudGVyX2JtIDoKKwkJCQkJYWNwaV9pZGxlX2VudGVyX3NpbXBsZTsKKwkJCWJyZWFrOworCQl9CisKKwkJY291bnQrKzsKKwl9CisKKwlkZXYtPnN0YXRlX2NvdW50ID0gY291bnQ7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGZpbmQgdGhlIGRlZXBlc3Qgc3RhdGUgdGhhdCBjYW4gaGFuZGxlIGFjdGl2ZSBCTSAqLworCWlmIChwci0+ZmxhZ3MuYm1fY2hlY2spIHsKKwkJZm9yIChpID0gMTsgaSA8IEFDUElfUFJPQ0VTU09SX01BWF9QT1dFUiAmJiBpIDw9IG1heF9jc3RhdGU7IGkrKykKKwkJCWlmIChwci0+cG93ZXIuc3RhdGVzW2ldLnR5cGUgPT0gQUNQSV9TVEFURV9DMykKKwkJCQlicmVhazsKKwkJcHItPnBvd2VyLmJtX3N0YXRlID0gJnByLT5wb3dlci5zdGF0ZXNbaS0xXTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IGFjcGlfcHJvY2Vzc29yX2NzdF9oYXNfY2hhbmdlZChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKQoreworCWludCByZXQ7CisKKwlpZiAoIXByKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChub2NzdCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlpZiAoIXByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWNwdWlkbGVfcGF1c2VfYW5kX2xvY2soKTsKKwljcHVpZGxlX2Rpc2FibGVfZGV2aWNlKCZwci0+cG93ZXIuZGV2KTsKKwlhY3BpX3Byb2Nlc3Nvcl9nZXRfcG93ZXJfaW5mbyhwcik7CisJYWNwaV9wcm9jZXNzb3Jfc2V0dXBfY3B1aWRsZShwcik7CisJcmV0ID0gY3B1aWRsZV9lbmFibGVfZGV2aWNlKCZwci0+cG93ZXIuZGV2KTsKKwljcHVpZGxlX3Jlc3VtZV9hbmRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9JRExFICovCisKIGludCBfX2NwdWluaXQgYWNwaV9wcm9jZXNzb3JfcG93ZXJfaW5pdChzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByLAogCQkJICAgICAgc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CkBAIC0xMjY3LDcgKzE2NjMsNyBAQAogCQkJICAgICAgICJBQ1BJOiBwcm9jZXNzb3IgbGltaXRlZCB0byBtYXggQy1zdGF0ZSAlZFxuIiwKIAkJCSAgICAgICBtYXhfY3N0YXRlKTsKIAkJZmlyc3RfcnVuKys7Ci0jaWZkZWYgQ09ORklHX1NNUAorI2lmICFkZWZpbmVkIChDT05GSUdfQ1BVX0lETEUpICYmIGRlZmluZWQgKENPTkZJR19TTVApCiAJCXJlZ2lzdGVyX2xhdGVuY3lfbm90aWZpZXIoJmFjcGlfcHJvY2Vzc29yX2xhdGVuY3lfbm90aWZpZXIpOwogI2VuZGlmCiAJfQpAQCAtMTI4NSw2ICsxNjgxLDcgQEAKIAl9CiAKIAlhY3BpX3Byb2Nlc3Nvcl9nZXRfcG93ZXJfaW5mbyhwcik7CisJcHItPmZsYWdzLnBvd2VyX3NldHVwX2RvbmUgPSAxOwogCiAJLyoKIAkgKiBJbnN0YWxsIHRoZSBpZGxlIGhhbmRsZXIgaWYgcHJvY2Vzc29yIHBvd2VyIG1hbmFnZW1lbnQgaXMgc3VwcG9ydGVkLgpAQCAtMTI5Miw2ICsxNjg5LDEzIEBACiAJICogcGxhdGZvcm1zIHRoYXQgb25seSBzdXBwb3J0IEMxLgogCSAqLwogCWlmICgocHItPmZsYWdzLnBvd2VyKSAmJiAoIWJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUpKSB7CisjaWZkZWYgQ09ORklHX0NQVV9JRExFCisJCWFjcGlfcHJvY2Vzc29yX3NldHVwX2NwdWlkbGUocHIpOworCQlwci0+cG93ZXIuZGV2LmNwdSA9IHByLT5pZDsKKwkJaWYgKGNwdWlkbGVfcmVnaXN0ZXJfZGV2aWNlKCZwci0+cG93ZXIuZGV2KSkKKwkJCXJldHVybiAtRUlPOworI2VuZGlmCisKIAkJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIkNQVSVkIChwb3dlciBzdGF0ZXM6IiwgcHItPmlkKTsKIAkJZm9yIChpID0gMTsgaSA8PSBwci0+cG93ZXIuY291bnQ7IGkrKykKIAkJCWlmIChwci0+cG93ZXIuc3RhdGVzW2ldLnZhbGlkKQpAQCAtMTI5OSwxMCArMTcwMywxMiBAQAogCQkJCSAgICAgICBwci0+cG93ZXIuc3RhdGVzW2ldLnR5cGUpOwogCQlwcmludGsoIilcbiIpOwogCisjaWZuZGVmIENPTkZJR19DUFVfSURMRQogCQlpZiAocHItPmlkID09IDApIHsKIAkJCXBtX2lkbGVfc2F2ZSA9IHBtX2lkbGU7CiAJCQlwbV9pZGxlID0gYWNwaV9wcm9jZXNzb3JfaWRsZTsKIAkJfQorI2VuZGlmCiAJfQogCiAJLyogJ3Bvd2VyJyBbUl0gKi8KQEAgLTEzMTYsMjEgKzE3MjIsMjQgQEAKIAkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCi0JcHItPmZsYWdzLnBvd2VyX3NldHVwX2RvbmUgPSAxOwotCiAJcmV0dXJuIDA7CiB9CiAKIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9leGl0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKLQorI2lmZGVmIENPTkZJR19DUFVfSURMRQorCWlmICgocHItPmZsYWdzLnBvd2VyKSAmJiAoIWJvb3Rfb3B0aW9uX2lkbGVfb3ZlcnJpZGUpKQorCQljcHVpZGxlX3VucmVnaXN0ZXJfZGV2aWNlKCZwci0+cG93ZXIuZGV2KTsKKyNlbmRpZgogCXByLT5mbGFncy5wb3dlcl9zZXR1cF9kb25lID0gMDsKIAogCWlmIChhY3BpX2RldmljZV9kaXIoZGV2aWNlKSkKIAkJcmVtb3ZlX3Byb2NfZW50cnkoQUNQSV9QUk9DRVNTT1JfRklMRV9QT1dFUiwKIAkJCQkgIGFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKTsKIAorI2lmbmRlZiBDT05GSUdfQ1BVX0lETEUKKwogCS8qIFVucmVnaXN0ZXIgdGhlIGlkbGUgaGFuZGxlciB3aGVuIHByb2Nlc3NvciAjMCBpcyByZW1vdmVkLiAqLwogCWlmIChwci0+aWQgPT0gMCkgewogCQlwbV9pZGxlID0gcG1faWRsZV9zYXZlOwpAQCAtMTM0NSw2ICsxNzU0LDcgQEAKIAkJdW5yZWdpc3Rlcl9sYXRlbmN5X25vdGlmaWVyKCZhY3BpX3Byb2Nlc3Nvcl9sYXRlbmN5X25vdGlmaWVyKTsKICNlbmRpZgogCX0KKyNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2JzLmMgYi9kcml2ZXJzL2FjcGkvc2JzLmMKaW5kZXggYTU3ODk4Ni4uOTBmZDA5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Nicy5jCisrKyBiL2RyaXZlcnMvYWNwaS9zYnMuYwpAQCAtMSw2ICsxLDggQEAKIC8qCi0gKiAgYWNwaV9zYnMuYyAtIEFDUEkgU21hcnQgQmF0dGVyeSBTeXN0ZW0gRHJpdmVyICgkUmV2aXNpb246IDEuMTYgJCkKKyAqICBzYnMuYyAtIEFDUEkgU21hcnQgQmF0dGVyeSBTeXN0ZW0gRHJpdmVyICgkUmV2aXNpb246IDIuMCAkKQogICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDcgQWxleGV5IFN0YXJpa292c2tpeSA8YXN0YXJpa292c2tpeUBzdXNlLmRlPgorICogIENvcHlyaWdodCAoYykgMjAwNS0yMDA3IFZsYWRpbWlyIExlYmVkZXYgPHZsYWRpbWlyLnAubGViZWRldkBpbnRlbC5jb20+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IFJpY2ggVG93bnNlbmQgPHJoZHRAYmFydG9sLnVkZWwuZWR1PgogICoKICAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CkBAIC0yNiwxNSArMjgsMjIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKLSNkZWZpbmUgQUNQSV9TQlNfQ09NUE9ORU5UCQkweDAwMDgwMDAwCisjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+CisKKyNpbmNsdWRlICJzYnNoYy5oIgorCiAjZGVmaW5lIEFDUElfU0JTX0NMQVNTCQkJInNicyIKICNkZWZpbmUgQUNQSV9BQ19DTEFTUwkJCSJhY19hZGFwdGVyIgogI2RlZmluZSBBQ1BJX0JBVFRFUllfQ0xBU1MJCSJiYXR0ZXJ5IgpAQCAtNDQsODM2ICs1Myw0MzYgQEAKICNkZWZpbmUgQUNQSV9TQlNfRklMRV9BTEFSTQkJImFsYXJtIgogI2RlZmluZSBBQ1BJX0JBVFRFUllfRElSX05BTUUJCSJCQVQlaSIKICNkZWZpbmUgQUNQSV9BQ19ESVJfTkFNRQkJIkFDMCIKLSNkZWZpbmUgQUNQSV9TQkNfU01CVVNfQUREUgkJMHg5Ci0jZGVmaW5lIEFDUElfU0JTTV9TTUJVU19BRERSCQkweGEKLSNkZWZpbmUgQUNQSV9TQl9TTUJVU19BRERSCQkweGIKLSNkZWZpbmUgQUNQSV9TQlNfQUNfTk9USUZZX1NUQVRVUwkweDgwCi0jZGVmaW5lIEFDUElfU0JTX0JBVFRFUllfTk9USUZZX1NUQVRVUwkweDgwCi0jZGVmaW5lIEFDUElfU0JTX0JBVFRFUllfTk9USUZZX0lORk8JMHg4MQogCi0jZGVmaW5lIF9DT01QT05FTlQJCQlBQ1BJX1NCU19DT01QT05FTlQKK2VudW0gYWNwaV9zYnNfZGV2aWNlX2FkZHIgeworCUFDUElfU0JTX0NIQVJHRVIgPSAweDksCisJQUNQSV9TQlNfTUFOQUdFUiA9IDB4YSwKKwlBQ1BJX1NCU19CQVRURVJZID0gMHhiLAorfTsKIAotQUNQSV9NT0RVTEVfTkFNRSgic2JzIik7CisjZGVmaW5lIEFDUElfU0JTX05PVElGWV9TVEFUVVMJCTB4ODAKKyNkZWZpbmUgQUNQSV9TQlNfTk9USUZZX0lORk8JCTB4ODEKIAotTU9EVUxFX0FVVEhPUigiUmljaCBUb3duc2VuZCIpOworTU9EVUxFX0FVVEhPUigiQWxleGV5IFN0YXJpa292c2tpeSA8YXN0YXJpa292c2tpeUBzdXNlLmRlPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTbWFydCBCYXR0ZXJ5IFN5c3RlbSBBQ1BJIGludGVyZmFjZSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotI2RlZmluZQl4bXNsZWVwKHQpCW1zbGVlcCh0KQotCi0jZGVmaW5lIEFDUElfRUNfU01CX1BSVENMCTB4MDAJLyogcHJvdG9jb2wsIFBFQyAqLwotCi0jZGVmaW5lIEFDUElfRUNfU01CX1NUUwkJMHgwMQkvKiBzdGF0dXMgKi8KLSNkZWZpbmUgQUNQSV9FQ19TTUJfQUREUgkweDAyCS8qIGFkZHJlc3MgKi8KLSNkZWZpbmUgQUNQSV9FQ19TTUJfQ01ECQkweDAzCS8qIGNvbW1hbmQgKi8KLSNkZWZpbmUgQUNQSV9FQ19TTUJfREFUQQkweDA0CS8qIDMyIGRhdGEgcmVnaXN0ZXJzICovCi0jZGVmaW5lIEFDUElfRUNfU01CX0JDTlQJMHgyNAkvKiBudW1iZXIgb2YgZGF0YSBieXRlcyAqLwotCi0jZGVmaW5lIEFDUElfRUNfU01CX1NUU19ET05FCTB4ODAKLSNkZWZpbmUgQUNQSV9FQ19TTUJfU1RTX1NUQVRVUwkweDFmCi0KLSNkZWZpbmUgQUNQSV9FQ19TTUJfUFJUQ0xfV1JJVEUJCTB4MDAKLSNkZWZpbmUgQUNQSV9FQ19TTUJfUFJUQ0xfUkVBRAkJMHgwMQotI2RlZmluZSBBQ1BJX0VDX1NNQl9QUlRDTF9XT1JEX0RBVEEJMHgwOAotI2RlZmluZSBBQ1BJX0VDX1NNQl9QUlRDTF9CTE9DS19EQVRBCTB4MGEKLQotI2RlZmluZSBBQ1BJX0VDX1NNQl9UUkFOU0FDVElPTl9TTEVFUAkxCi0jZGVmaW5lIEFDUElfRUNfU01CX0FDQ0VTU19TTEVFUDEJMQotI2RlZmluZSBBQ1BJX0VDX1NNQl9BQ0NFU1NfU0xFRVAyCTEwCi0KLSNkZWZpbmUJREVGX0NBUEFDSVRZX1VOSVQJMwotI2RlZmluZQlNQUhfQ0FQQUNJVFlfVU5JVAkxCi0jZGVmaW5lCU1XSF9DQVBBQ0lUWV9VTklUCTIKLSNkZWZpbmUJQ0FQQUNJVFlfVU5JVAkJREVGX0NBUEFDSVRZX1VOSVQKLQotI2RlZmluZQlSRVFVRVNUX1VQREFURV9NT0RFCTEKLSNkZWZpbmUJUVVFVUVfVVBEQVRFX01PREUJMgotCi0jZGVmaW5lCURBVEFfVFlQRV9DT01NT04JMAotI2RlZmluZQlEQVRBX1RZUEVfSU5GTwkJMQotI2RlZmluZQlEQVRBX1RZUEVfU1RBVEUJCTIKLSNkZWZpbmUJREFUQV9UWVBFX0FMQVJNCQkzCi0jZGVmaW5lCURBVEFfVFlQRV9BQ19TVEFURQk0CitzdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlX3RpbWUgPSAxMDAwOworbW9kdWxlX3BhcmFtKGNhY2hlX3RpbWUsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjYWNoZV90aW1lLCAiY2FjaGUgdGltZSBpbiBtaWxsaXNlY29uZHMiKTsKIAogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYWNwaV9sb2NrX2FjX2Rpcih2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmFjcGlfbG9ja19iYXR0ZXJ5X2Rpcih2b2lkKTsKIGV4dGVybiB2b2lkIGFjcGlfdW5sb2NrX2FjX2RpcihzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmFjcGlfYWNfZGlyKTsKIGV4dGVybiB2b2lkIGFjcGlfdW5sb2NrX2JhdHRlcnlfZGlyKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYWNwaV9iYXR0ZXJ5X2Rpcik7CiAKLSNkZWZpbmUJTUFYX1NCU19CQVQJCQk0CisjZGVmaW5lIE1BWF9TQlNfQkFUCQkJNAogI2RlZmluZSBBQ1BJX1NCU19CTE9DS19NQVgJCTMyCiAKLSNkZWZpbmUgQUNQSV9TQlNfU01CVVNfUkVBRAkJMQotI2RlZmluZSBBQ1BJX1NCU19TTUJVU19XUklURQkJMgotCi0jZGVmaW5lIEFDUElfU0JTX1dPUkRfREFUQQkJMQotI2RlZmluZSBBQ1BJX1NCU19CTE9DS19EQVRBCQkyCi0KLSNkZWZpbmUJVVBEQVRFX0RFTEFZCTEwCi0KLS8qIDAgLSBldmVyeSB0aW1lLCA+IDAgLSBieSB1cGRhdGVfdGltZSAqLwotc3RhdGljIHVuc2lnbmVkIGludCB1cGRhdGVfdGltZSA9IDEyMDsKLQotc3RhdGljIHVuc2lnbmVkIGludCBjYXBhY2l0eV9tb2RlID0gQ0FQQUNJVFlfVU5JVDsKLQotbW9kdWxlX3BhcmFtKHVwZGF0ZV90aW1lLCB1aW50LCAwNjQ0KTsKLW1vZHVsZV9wYXJhbShjYXBhY2l0eV9tb2RlLCB1aW50LCAwNDQ0KTsKLQotc3RhdGljIGludCBhY3BpX3Nic19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBhY3BpX3Nic19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKTsKLXN0YXRpYyBpbnQgYWNwaV9zYnNfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBzYnNfZGV2aWNlX2lkc1tdID0gewotCXsiQUNQSTAwMDEiLCAwfSwKLQl7IkFDUEkwMDA1IiwgMH0sCisJeyJBQ1BJMDAwMiIsIDB9LAogCXsiIiwgMH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBzYnNfZGV2aWNlX2lkcyk7CiAKLXN0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9zYnNfZHJpdmVyID0gewotCS5uYW1lID0gInNicyIsCi0JLmNsYXNzID0gQUNQSV9TQlNfQ0xBU1MsCi0JLmlkcyA9IHNic19kZXZpY2VfaWRzLAotCS5vcHMgPSB7Ci0JCS5hZGQgPSBhY3BpX3Nic19hZGQsCi0JCS5yZW1vdmUgPSBhY3BpX3Nic19yZW1vdmUsCi0JCS5yZXN1bWUgPSBhY3BpX3Nic19yZXN1bWUsCi0JCX0sCi19OwotCi1zdHJ1Y3QgYWNwaV9hYyB7Ci0JaW50IGFjX3ByZXNlbnQ7Ci19OwotCi1zdHJ1Y3QgYWNwaV9iYXR0ZXJ5X2luZm8gewotCWludCBjYXBhY2l0eV9tb2RlOwotCXMxNiBmdWxsX2NoYXJnZV9jYXBhY2l0eTsKLQlzMTYgZGVzaWduX2NhcGFjaXR5OwotCXMxNiBkZXNpZ25fdm9sdGFnZTsKLQlpbnQgdnNjYWxlOwotCWludCBpcHNjYWxlOwotCXMxNiBzZXJpYWxfbnVtYmVyOwotCWNoYXIgbWFudWZhY3R1cmVyX25hbWVbQUNQSV9TQlNfQkxPQ0tfTUFYICsgM107Ci0JY2hhciBkZXZpY2VfbmFtZVtBQ1BJX1NCU19CTE9DS19NQVggKyAzXTsKLQljaGFyIGRldmljZV9jaGVtaXN0cnlbQUNQSV9TQlNfQkxPQ0tfTUFYICsgM107Ci19OwotCi1zdHJ1Y3QgYWNwaV9iYXR0ZXJ5X3N0YXRlIHsKLQlzMTYgdm9sdGFnZTsKLQlzMTYgYW1wZXJhZ2U7Ci0JczE2IHJlbWFpbmluZ19jYXBhY2l0eTsKLQlzMTYgYmF0dGVyeV9zdGF0ZTsKLX07Ci0KLXN0cnVjdCBhY3BpX2JhdHRlcnlfYWxhcm0gewotCXMxNiByZW1haW5pbmdfY2FwYWNpdHk7Ci19OwotCiBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5IHsKLQlpbnQgYWxpdmU7Ci0JaW50IGlkOwotCWludCBpbml0X3N0YXRlOwotCWludCBiYXR0ZXJ5X3ByZXNlbnQ7CisJc3RydWN0IHBvd2VyX3N1cHBseSBiYXQ7CiAJc3RydWN0IGFjcGlfc2JzICpzYnM7Ci0Jc3RydWN0IGFjcGlfYmF0dGVyeV9pbmZvIGluZm87Ci0Jc3RydWN0IGFjcGlfYmF0dGVyeV9zdGF0ZSBzdGF0ZTsKLQlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5X2FsYXJtIGFsYXJtOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmF0dGVyeV9lbnRyeTsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7CisjZW5kaWYKKwl1bnNpZ25lZCBsb25nIHVwZGF0ZV90aW1lOworCWNoYXIgbmFtZVs4XTsKKwljaGFyIG1hbnVmYWN0dXJlcl9uYW1lW0FDUElfU0JTX0JMT0NLX01BWF07CisJY2hhciBkZXZpY2VfbmFtZVtBQ1BJX1NCU19CTE9DS19NQVhdOworCWNoYXIgZGV2aWNlX2NoZW1pc3RyeVtBQ1BJX1NCU19CTE9DS19NQVhdOworCXUxNiBhbGFybV9jYXBhY2l0eTsKKwl1MTYgZnVsbF9jaGFyZ2VfY2FwYWNpdHk7CisJdTE2IGRlc2lnbl9jYXBhY2l0eTsKKwl1MTYgZGVzaWduX3ZvbHRhZ2U7CisJdTE2IHNlcmlhbF9udW1iZXI7CisJdTE2IGN5Y2xlX2NvdW50OworCXUxNiB0ZW1wX25vdzsKKwl1MTYgdm9sdGFnZV9ub3c7CisJczE2IGN1cnJlbnRfbm93OworCXMxNiBjdXJyZW50X2F2ZzsKKwl1MTYgY2FwYWNpdHlfbm93OworCXUxNiBzdGF0ZV9vZl9jaGFyZ2U7CisJdTE2IHN0YXRlOworCXUxNiBtb2RlOworCXUxNiBzcGVjOworCXU4IGlkOworCXU4IHByZXNlbnQ6MTsKIH07CiAKKyNkZWZpbmUgdG9fYWNwaV9iYXR0ZXJ5KHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBiYXQpOworCiBzdHJ1Y3QgYWNwaV9zYnMgewotCWludCBiYXNlOworCXN0cnVjdCBwb3dlcl9zdXBwbHkgY2hhcmdlcjsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgbXV0ZXggbXV0ZXg7Ci0JaW50IHNic21fcHJlc2VudDsKLQlpbnQgc2JzbV9iYXR0ZXJpZXNfc3VwcG9ydGVkOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYWNfZW50cnk7Ci0Jc3RydWN0IGFjcGlfYWMgYWM7CisJc3RydWN0IGFjcGlfc21iX2hjICpoYzsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNoYXJnZXJfZW50cnk7CisjZW5kaWYKIAlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5IGJhdHRlcnlbTUFYX1NCU19CQVRdOwotCWludCB6b21iaWU7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgdXBkYXRlX3RpbWVyOwotCWludCBydW5fY250OwotCWludCB1cGRhdGVfcHJvY19mbGc7CisJdTggYmF0dGVyaWVzX3N1cHBvcnRlZDo0OworCXU4IG1hbmFnZXJfcHJlc2VudDoxOworCXU4IGNoYXJnZXJfcHJlc2VudDoxOwogfTsKIAotc3RhdGljIGludCBhY3BpX3Nic191cGRhdGVfcnVuKHN0cnVjdCBhY3BpX3NicyAqc2JzLCBpbnQgaWQsIGludCBkYXRhX3R5cGUpOwotc3RhdGljIHZvaWQgYWNwaV9zYnNfdXBkYXRlX3RpbWUodm9pZCAqZGF0YSk7CisjZGVmaW5lIHRvX2FjcGlfc2JzKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgYWNwaV9zYnMsIGNoYXJnZXIpCiAKLXVuaW9uIHNic19yd19kYXRhIHsKLQl1MTYgd29yZDsKLQl1OCBibG9ja1tBQ1BJX1NCU19CTE9DS19NQVggKyAyXTsKLX07Ci0KLXN0YXRpYyBpbnQgYWNwaV9lY19zYnNfYWNjZXNzKHN0cnVjdCBhY3BpX3NicyAqc2JzLCB1MTYgYWRkciwKLQkJCSAgICAgIGNoYXIgcmVhZF93cml0ZSwgdTggY29tbWFuZCwgaW50IHNpemUsCi0JCQkgICAgICB1bmlvbiBzYnNfcndfZGF0YSAqZGF0YSk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU01CdXMgQ29tbXVuaWNhdGlvbgotICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBhY3BpX2VjX3Nic19yZWFkKHN0cnVjdCBhY3BpX3NicyAqc2JzLCB1OCBhZGRyZXNzLCB1OCAqIGRhdGEpCitzdGF0aWMgaW5saW5lIGludCBiYXR0ZXJ5X3NjYWxlKGludCBsb2cpCiB7Ci0JdTggdmFsOwotCWludCBlcnI7Ci0KLQllcnIgPSBlY19yZWFkKHNicy0+YmFzZSArIGFkZHJlc3MsICZ2YWwpOwotCWlmICghZXJyKSB7Ci0JCSpkYXRhID0gdmFsOwotCX0KLQl4bXNsZWVwKEFDUElfRUNfU01CX1RSQU5TQUNUSU9OX1NMRUVQKTsKLQlyZXR1cm4gKGVycik7CisJaW50IHNjYWxlID0gMTsKKwl3aGlsZSAobG9nLS0pCisJCXNjYWxlICo9IDEwOworCXJldHVybiBzY2FsZTsKIH0KIAotc3RhdGljIGludCBhY3BpX2VjX3Nic193cml0ZShzdHJ1Y3QgYWNwaV9zYnMgKnNicywgdTggYWRkcmVzcywgdTggZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfYmF0dGVyeV92c2NhbGUoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gZWNfd3JpdGUoc2JzLT5iYXNlICsgYWRkcmVzcywgZGF0YSk7Ci0JcmV0dXJuIChlcnIpOworCXJldHVybiBiYXR0ZXJ5X3NjYWxlKChiYXR0ZXJ5LT5zcGVjICYgMHgwZjAwKSA+PiA4KTsKIH0KIAotc3RhdGljIGludAotYWNwaV9lY19zYnNfYWNjZXNzKHN0cnVjdCBhY3BpX3NicyAqc2JzLCB1MTYgYWRkciwKLQkJICAgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLCBpbnQgc2l6ZSwKLQkJICAgdW5pb24gc2JzX3J3X2RhdGEgKmRhdGEpCitzdGF0aWMgaW5saW5lIGludCBhY3BpX2JhdHRlcnlfaXBzY2FsZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQogewotCXVuc2lnbmVkIGNoYXIgcHJvdG9jb2wsIGxlbiA9IDAsIHRlbXBbMl0gPSB7IDAsIDAgfTsKLQlpbnQgaTsKKwlyZXR1cm4gYmF0dGVyeV9zY2FsZSgoYmF0dGVyeS0+c3BlYyAmIDB4ZjAwMCkgPj4gMTIpOworfQogCi0JaWYgKHJlYWRfd3JpdGUgPT0gQUNQSV9TQlNfU01CVVNfUkVBRCkgewotCQlwcm90b2NvbCA9IEFDUElfRUNfU01CX1BSVENMX1JFQUQ7Ci0JfSBlbHNlIHsKLQkJcHJvdG9jb2wgPSBBQ1BJX0VDX1NNQl9QUlRDTF9XUklURTsKLQl9CitzdGF0aWMgaW5saW5lIGludCBhY3BpX2JhdHRlcnlfbW9kZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQoreworCXJldHVybiAoYmF0dGVyeS0+bW9kZSAmIDB4ODAwMCk7Cit9CiAKLQlzd2l0Y2ggKHNpemUpIHsKK3N0YXRpYyBpbmxpbmUgaW50IGFjcGlfYmF0dGVyeV9zY2FsZShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQoreworCXJldHVybiAoYWNwaV9iYXR0ZXJ5X21vZGUoYmF0dGVyeSkgPyAxMCA6IDEpICoKKwkgICAgYWNwaV9iYXR0ZXJ5X2lwc2NhbGUoYmF0dGVyeSk7Cit9CiAKLQljYXNlIEFDUElfU0JTX1dPUkRfREFUQToKLQkJYWNwaV9lY19zYnNfd3JpdGUoc2JzLCBBQ1BJX0VDX1NNQl9DTUQsIGNvbW1hbmQpOwotCQlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1NCU19TTUJVU19XUklURSkgewotCQkJYWNwaV9lY19zYnNfd3JpdGUoc2JzLCBBQ1BJX0VDX1NNQl9EQVRBLCBkYXRhLT53b3JkKTsKLQkJCWFjcGlfZWNfc2JzX3dyaXRlKHNicywgQUNQSV9FQ19TTUJfREFUQSArIDEsCi0JCQkJCSAgZGF0YS0+d29yZCA+PiA4KTsKLQkJfQotCQlwcm90b2NvbCB8PSBBQ1BJX0VDX1NNQl9QUlRDTF9XT1JEX0RBVEE7Ci0JCWJyZWFrOwotCWNhc2UgQUNQSV9TQlNfQkxPQ0tfREFUQToKLQkJYWNwaV9lY19zYnNfd3JpdGUoc2JzLCBBQ1BJX0VDX1NNQl9DTUQsIGNvbW1hbmQpOwotCQlpZiAocmVhZF93cml0ZSA9PSBBQ1BJX1NCU19TTUJVU19XUklURSkgewotCQkJbGVuID0gbWluX3QodTgsIGRhdGEtPmJsb2NrWzBdLCAzMik7Ci0JCQlhY3BpX2VjX3Nic193cml0ZShzYnMsIEFDUElfRUNfU01CX0JDTlQsIGxlbik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQkJYWNwaV9lY19zYnNfd3JpdGUoc2JzLCBBQ1BJX0VDX1NNQl9EQVRBICsgaSwKLQkJCQkJCSAgZGF0YS0+YmxvY2tbaSArIDFdKTsKLQkJfQotCQlwcm90b2NvbCB8PSBBQ1BJX0VDX1NNQl9QUlRDTF9CTE9DS19EQVRBOworc3RhdGljIGludCBzYnNfZ2V0X2FjX3Byb3BlcnR5KHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCSAgICAgICBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkgICAgICAgdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IHRvX2FjcGlfc2JzKHBzeSk7CisJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX09OTElORToKKwkJdmFsLT5pbnR2YWwgPSBzYnMtPmNoYXJnZXJfcHJlc2VudDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJ1bnN1cHBvcnRlZCB0cmFuc2FjdGlvbiAlZCIsIHNpemUpKTsKLQkJcmV0dXJuICgtMSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQotCWFjcGlfZWNfc2JzX3dyaXRlKHNicywgQUNQSV9FQ19TTUJfQUREUiwgYWRkciA8PCAxKTsKLQlhY3BpX2VjX3Nic193cml0ZShzYnMsIEFDUElfRUNfU01CX1BSVENMLCBwcm90b2NvbCk7Ci0KLQlhY3BpX2VjX3Nic19yZWFkKHNicywgQUNQSV9FQ19TTUJfU1RTLCB0ZW1wKTsKLQotCWlmICh+dGVtcFswXSAmIEFDUElfRUNfU01CX1NUU19ET05FKSB7Ci0JCXhtc2xlZXAoQUNQSV9FQ19TTUJfQUNDRVNTX1NMRUVQMSk7Ci0JCWFjcGlfZWNfc2JzX3JlYWQoc2JzLCBBQ1BJX0VDX1NNQl9TVFMsIHRlbXApOwotCX0KLQlpZiAofnRlbXBbMF0gJiBBQ1BJX0VDX1NNQl9TVFNfRE9ORSkgewotCQl4bXNsZWVwKEFDUElfRUNfU01CX0FDQ0VTU19TTEVFUDIpOwotCQlhY3BpX2VjX3Nic19yZWFkKHNicywgQUNQSV9FQ19TTUJfU1RTLCB0ZW1wKTsKLQl9Ci0JaWYgKCh+dGVtcFswXSAmIEFDUElfRUNfU01CX1NUU19ET05FKQotCSAgICB8fCAodGVtcFswXSAmIEFDUElfRUNfU01CX1NUU19TVEFUVVMpKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkidHJhbnNhY3Rpb24gJWQgZXJyb3IiLCBzaXplKSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCWlmIChyZWFkX3dyaXRlID09IEFDUElfU0JTX1NNQlVTX1dSSVRFKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0Jc3dpdGNoIChzaXplKSB7Ci0KLQljYXNlIEFDUElfU0JTX1dPUkRfREFUQToKLQkJYWNwaV9lY19zYnNfcmVhZChzYnMsIEFDUElfRUNfU01CX0RBVEEsIHRlbXApOwotCQlhY3BpX2VjX3Nic19yZWFkKHNicywgQUNQSV9FQ19TTUJfREFUQSArIDEsIHRlbXAgKyAxKTsKLQkJZGF0YS0+d29yZCA9ICh0ZW1wWzFdIDw8IDgpIHwgdGVtcFswXTsKLQkJYnJlYWs7Ci0KLQljYXNlIEFDUElfU0JTX0JMT0NLX0RBVEE6Ci0JCWxlbiA9IDA7Ci0JCWFjcGlfZWNfc2JzX3JlYWQoc2JzLCBBQ1BJX0VDX1NNQl9CQ05ULCAmbGVuKTsKLQkJbGVuID0gbWluX3QodTgsIGxlbiwgMzIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCQlhY3BpX2VjX3Nic19yZWFkKHNicywgQUNQSV9FQ19TTUJfREFUQSArIGksCi0JCQkJCSBkYXRhLT5ibG9jayArIGkgKyAxKTsKLQkJZGF0YS0+YmxvY2tbMF0gPSBsZW47Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkidW5zdXBwb3J0ZWQgdHJhbnNhY3Rpb24gJWQiLCBzaXplKSk7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLWFjcGlfc2JzX3JlYWRfd29yZChzdHJ1Y3QgYWNwaV9zYnMgKnNicywgaW50IGFkZHIsIGludCBmdW5jLCB1MTYgKiB3b3JkKQotewotCXVuaW9uIHNic19yd19kYXRhIGRhdGE7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlyZXN1bHQgPSBhY3BpX2VjX3Nic19hY2Nlc3Moc2JzLCBhZGRyLAotCQkJCSAgICBBQ1BJX1NCU19TTUJVU19SRUFELCBmdW5jLAotCQkJCSAgICBBQ1BJX1NCU19XT1JEX0RBVEEsICZkYXRhKTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9lY19zYnNfYWNjZXNzKCkgZmFpbGVkIikpOwotCX0gZWxzZSB7Ci0JCSp3b3JkID0gZGF0YS53b3JkOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWFjcGlfc2JzX3JlYWRfc3RyKHN0cnVjdCBhY3BpX3NicyAqc2JzLCBpbnQgYWRkciwgaW50IGZ1bmMsIGNoYXIgKnN0cikKLXsKLQl1bmlvbiBzYnNfcndfZGF0YSBkYXRhOwotCWludCByZXN1bHQgPSAwOwotCi0JcmVzdWx0ID0gYWNwaV9lY19zYnNfYWNjZXNzKHNicywgYWRkciwKLQkJCQkgICAgQUNQSV9TQlNfU01CVVNfUkVBRCwgZnVuYywKLQkJCQkgICAgQUNQSV9TQlNfQkxPQ0tfREFUQSwgJmRhdGEpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX2VjX3Nic19hY2Nlc3MoKSBmYWlsZWQiKSk7Ci0JfSBlbHNlIHsKLQkJc3RybmNweShzdHIsIChjb25zdCBjaGFyICopZGF0YS5ibG9jayArIDEsIGRhdGEuYmxvY2tbMF0pOwotCQlzdHJbZGF0YS5ibG9ja1swXV0gPSAwOwotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWFjcGlfc2JzX3dyaXRlX3dvcmQoc3RydWN0IGFjcGlfc2JzICpzYnMsIGludCBhZGRyLCBpbnQgZnVuYywgaW50IHdvcmQpCi17Ci0JdW5pb24gc2JzX3J3X2RhdGEgZGF0YTsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCWRhdGEud29yZCA9IHdvcmQ7Ci0KLQlyZXN1bHQgPSBhY3BpX2VjX3Nic19hY2Nlc3Moc2JzLCBhZGRyLAotCQkJCSAgICBBQ1BJX1NCU19TTUJVU19XUklURSwgZnVuYywKLQkJCQkgICAgQUNQSV9TQlNfV09SRF9EQVRBLCAmZGF0YSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfZWNfc2JzX2FjY2VzcygpIGZhaWxlZCIpKTsKLQl9Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IHNic196b21iaWUoc3RydWN0IGFjcGlfc2JzICpzYnMpCi17Ci0JcmV0dXJuIChzYnMtPnpvbWJpZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2JzX211dGV4X2xvY2soc3RydWN0IGFjcGlfc2JzICpzYnMpCi17Ci0JaWYgKHNic196b21iaWUoc2JzKSkgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JbXV0ZXhfbG9jaygmc2JzLT5tdXRleCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNic19tdXRleF91bmxvY2soc3RydWN0IGFjcGlfc2JzICpzYnMpCitzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV90ZWNobm9sb2d5KHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCiB7Ci0JbXV0ZXhfdW5sb2NrKCZzYnMtPm11dGV4KTsKKwlpZiAoIXN0cmNhc2VjbXAoIk5pQ2QiLCBiYXR0ZXJ5LT5kZXZpY2VfY2hlbWlzdHJ5KSkKKwkJcmV0dXJuIFBPV0VSX1NVUFBMWV9URUNITk9MT0dZX05pQ2Q7CisJaWYgKCFzdHJjYXNlY21wKCJOaU1IIiwgYmF0dGVyeS0+ZGV2aWNlX2NoZW1pc3RyeSkpCisJCXJldHVybiBQT1dFUl9TVVBQTFlfVEVDSE5PTE9HWV9OaU1IOworCWlmICghc3RyY2FzZWNtcCgiTElPTiIsIGJhdHRlcnktPmRldmljZV9jaGVtaXN0cnkpKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElPTjsKKwlpZiAoIXN0cmNhc2VjbXAoIkxpUCIsIGJhdHRlcnktPmRldmljZV9jaGVtaXN0cnkpKQorCQlyZXR1cm4gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfTElQTzsKKwlyZXR1cm4gUE9XRVJfU1VQUExZX1RFQ0hOT0xPR1lfVU5LTk9XTjsKIH0KIAorc3RhdGljIGludCBhY3BpX3Nic19iYXR0ZXJ5X2dldF9wcm9wZXJ0eShzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkJCSBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJCSB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSB0b19hY3BpX2JhdHRlcnkocHN5KTsKKworCWlmICgoIWJhdHRlcnktPnByZXNlbnQpICYmIHBzcCAhPSBQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5UKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTOgorCQlpZiAoYmF0dGVyeS0+Y3VycmVudF9ub3cgPCAwKQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOworCQllbHNlIGlmIChiYXR0ZXJ5LT5jdXJyZW50X25vdyA+IDApCisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7CisJCWVsc2UKKwkJCXZhbC0+aW50dmFsID0gUE9XRVJfU1VQUExZX1NUQVRVU19GVUxMOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CisJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+cHJlc2VudDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZOgorCQl2YWwtPmludHZhbCA9IGFjcGlfYmF0dGVyeV90ZWNobm9sb2d5KGJhdHRlcnkpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTjoKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5kZXNpZ25fdm9sdGFnZSAqCisJCQlhY3BpX2JhdHRlcnlfdnNjYWxlKGJhdHRlcnkpICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT52b2x0YWdlX25vdyAqCisJCQkJYWNwaV9iYXR0ZXJ5X3ZzY2FsZShiYXR0ZXJ5KSAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6CisJCXZhbC0+aW50dmFsID0gYWJzKGJhdHRlcnktPmN1cnJlbnRfbm93KSAqCisJCQkJYWNwaV9iYXR0ZXJ5X2lwc2NhbGUoYmF0dGVyeSkgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHOgorCQl2YWwtPmludHZhbCA9IGFicyhiYXR0ZXJ5LT5jdXJyZW50X2F2ZykgKgorCQkJCWFjcGlfYmF0dGVyeV9pcHNjYWxlKGJhdHRlcnkpICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWToKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5zdGF0ZV9vZl9jaGFyZ2U7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTExfREVTSUdOOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0ZVTExfREVTSUdOOgorCQl2YWwtPmludHZhbCA9IGJhdHRlcnktPmRlc2lnbl9jYXBhY2l0eSAqCisJCQlhY3BpX2JhdHRlcnlfc2NhbGUoYmF0dGVyeSkgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX0NIQVJHRV9GVUxMOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX0ZVTEw6CisJCXZhbC0+aW50dmFsID0gYmF0dGVyeS0+ZnVsbF9jaGFyZ2VfY2FwYWNpdHkgKgorCQkJYWNwaV9iYXR0ZXJ5X3NjYWxlKGJhdHRlcnkpICogMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfTk9XOgorCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfRU5FUkdZX05PVzoKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT5jYXBhY2l0eV9ub3cgKgorCQkJCWFjcGlfYmF0dGVyeV9zY2FsZShiYXR0ZXJ5KSAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVEVNUDoKKwkJdmFsLT5pbnR2YWwgPSBiYXR0ZXJ5LT50ZW1wX25vdyAtIDI3MzA7CS8vIGRLIC0+IGRDCisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfTU9ERUxfTkFNRToKKwkJdmFsLT5zdHJ2YWwgPSBiYXR0ZXJ5LT5kZXZpY2VfbmFtZTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVI6CisJCXZhbC0+c3RydmFsID0gYmF0dGVyeS0+bWFudWZhY3R1cmVyX25hbWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHNic19hY19wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKK307CisKK3N0YXRpYyBlbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBzYnNfY2hhcmdlX2JhdHRlcnlfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCisJUE9XRVJfU1VQUExZX1BST1BfUFJFU0VOVCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9URUNITk9MT0dZLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTUlOX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX0FWRywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DQVBBQ0lUWSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfRlVMTF9ERVNJR04sCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX0ZVTEwsCisJUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9URU1QLAorCVBPV0VSX1NVUFBMWV9QUk9QX01PREVMX05BTUUsCisJUE9XRVJfU1VQUExZX1BST1BfTUFOVUZBQ1RVUkVSLAorfTsKKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHNic19lbmVyZ3lfYmF0dGVyeV9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKKwlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFQ0hOT0xPR1ksCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9NSU5fREVTSUdOLAorCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfQVZHLAorCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAorCVBPV0VSX1NVUFBMWV9QUk9QX0VORVJHWV9GVUxMX0RFU0lHTiwKKwlQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfRlVMTCwKKwlQT1dFUl9TVVBQTFlfUFJPUF9FTkVSR1lfTk9XLAorCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsCisJUE9XRVJfU1VQUExZX1BST1BfTU9ERUxfTkFNRSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9NQU5VRkFDVFVSRVIsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNtYXJ0IEJhdHRlcnkgU3lzdGVtIE1hbmFnZW1lbnQKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgYWNwaV9jaGVja191cGRhdGVfcHJvYyhzdHJ1Y3QgYWNwaV9zYnMgKnNicykKLXsKLQlhY3BpX3N0YXR1cyBzdGF0dXMgPSBBRV9PSzsKK3N0cnVjdCBhY3BpX2JhdHRlcnlfcmVhZGVyIHsKKwl1OCBjb21tYW5kOwkJLyogY29tbWFuZCBmb3IgYmF0dGVyeSAqLworCXU4IG1vZGU7CQkvKiB3b3JkIG9yIGJsb2NrPyAqLworCXNpemVfdCBvZmZzZXQ7CQkvKiBvZmZzZXQgaW5zaWRlIHN0cnVjdCBhY3BpX3Nic19iYXR0ZXJ5ICovCit9OwogCi0JaWYgKHVwZGF0ZV90aW1lID09IDApIHsKLQkJc2JzLT51cGRhdGVfcHJvY19mbGcgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0JaWYgKHNicy0+dXBkYXRlX3Byb2NfZmxnID09IDApIHsKLQkJc3RhdHVzID0gYWNwaV9vc19leGVjdXRlKE9TTF9HUEVfSEFORExFUiwKLQkJCQkJIGFjcGlfc2JzX3VwZGF0ZV90aW1lLCBzYnMpOwotCQlpZiAoc3RhdHVzICE9IEFFX09LKSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLAotCQkJCQkiYWNwaV9vc19leGVjdXRlKCkgZmFpbGVkIikpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQkJc2JzLT51cGRhdGVfcHJvY19mbGcgPSAxOwotCX0KLQlyZXR1cm4gMDsKLX0KK3N0YXRpYyBzdHJ1Y3QgYWNwaV9iYXR0ZXJ5X3JlYWRlciBpbmZvX3JlYWRlcnNbXSA9IHsKKwl7MHgwMSwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBhbGFybV9jYXBhY2l0eSl9LAorCXsweDAzLCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIG1vZGUpfSwKKwl7MHgxMCwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBmdWxsX2NoYXJnZV9jYXBhY2l0eSl9LAorCXsweDE3LCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIGN5Y2xlX2NvdW50KX0sCisJezB4MTgsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgZGVzaWduX2NhcGFjaXR5KX0sCisJezB4MTksIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgZGVzaWduX3ZvbHRhZ2UpfSwKKwl7MHgxYSwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBzcGVjKX0sCisJezB4MWMsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgc2VyaWFsX251bWJlcil9LAorCXsweDIwLCBTTUJVU19SRUFEX0JMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBtYW51ZmFjdHVyZXJfbmFtZSl9LAorCXsweDIxLCBTTUJVU19SRUFEX0JMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBkZXZpY2VfbmFtZSl9LAorCXsweDIyLCBTTUJVU19SRUFEX0JMT0NLLCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBkZXZpY2VfY2hlbWlzdHJ5KX0sCit9OwogCi1zdGF0aWMgaW50IGFjcGlfc2JzX2dlbmVyYXRlX2V2ZW50KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAotCQkJCSAgIGludCBldmVudCwgaW50IHN0YXRlLCBjaGFyICpiaWQsIGNoYXIgKmNsYXNzKQotewotCWNoYXIgYmlkX3NhdmVkWzVdOwotCWNoYXIgY2xhc3Nfc2F2ZWRbMjBdOwotCWludCByZXN1bHQgPSAwOworc3RhdGljIHN0cnVjdCBhY3BpX2JhdHRlcnlfcmVhZGVyIHN0YXRlX3JlYWRlcnNbXSA9IHsKKwl7MHgwOCwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCB0ZW1wX25vdyl9LAorCXsweDA5LCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHZvbHRhZ2Vfbm93KX0sCisJezB4MGEsIFNNQlVTX1JFQURfV09SRCwgb2Zmc2V0b2Yoc3RydWN0IGFjcGlfYmF0dGVyeSwgY3VycmVudF9ub3cpfSwKKwl7MHgwYiwgU01CVVNfUkVBRF9XT1JELCBvZmZzZXRvZihzdHJ1Y3QgYWNwaV9iYXR0ZXJ5LCBjdXJyZW50X2F2Zyl9LAorCXsweDBmLCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIGNhcGFjaXR5X25vdyl9LAorCXsweDBlLCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHN0YXRlX29mX2NoYXJnZSl9LAorCXsweDE2LCBTTUJVU19SRUFEX1dPUkQsIG9mZnNldG9mKHN0cnVjdCBhY3BpX2JhdHRlcnksIHN0YXRlKX0sCit9OwogCi0Jc3RyY3B5KGJpZF9zYXZlZCwgYWNwaV9kZXZpY2VfYmlkKGRldmljZSkpOwotCXN0cmNweShjbGFzc19zYXZlZCwgYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSk7Ci0KLQlzdHJjcHkoYWNwaV9kZXZpY2VfYmlkKGRldmljZSksIGJpZCk7Ci0Jc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIGNsYXNzKTsKLQotCXJlc3VsdCA9IGFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoZGV2aWNlLCBldmVudCwgc3RhdGUpOwotCi0Jc3RyY3B5KGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLCBiaWRfc2F2ZWQpOwotCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBjbGFzc19zYXZlZCk7Ci0KLQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGNsYXNzLCBiaWQsIGV2ZW50LCBzdGF0ZSk7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfZ2V0X3ByZXNlbnQoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKLXsKLQlzMTYgc3RhdGU7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JaW50IGlzX3ByZXNlbnQgPSAwOwotCi0JcmVzdWx0ID0gYWNwaV9zYnNfcmVhZF93b3JkKGJhdHRlcnktPnNicywKLQkJCQkgICAgQUNQSV9TQlNNX1NNQlVTX0FERFIsIDB4MDEsICZzdGF0ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQl9Ci0JaWYgKCFyZXN1bHQpIHsKLQkJaXNfcHJlc2VudCA9IChzdGF0ZSAmIDB4MDAwZikgJiAoMSA8PCBiYXR0ZXJ5LT5pZCk7Ci0JfQotCWJhdHRlcnktPmJhdHRlcnlfcHJlc2VudCA9IGlzX3ByZXNlbnQ7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9zZWxlY3Qoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKLXsKLQlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IGJhdHRlcnktPnNiczsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzMTYgc3RhdGU7Ci0JaW50IGZvbzsKLQotCWlmIChzYnMtPnNic21fcHJlc2VudCkgewotCi0JCS8qIFRha2Ugc3BlY2lhbCBjYXJlIG5vdCB0byBrbm9iYmxlIG90aGVyIG5pYmJsZXMgb2YKLQkJICogc3RhdGUgKGFrYSBzZWxlY3Rvcl9zdGF0ZSksIHNpbmNlCi0JCSAqIGl0IGNhdXNlcyBjaGFyZ2luZyB0byBoYWx0IG9uIFNCU0VMcyAqLwotCi0JCXJlc3VsdCA9Ci0JCSAgICBhY3BpX3Nic19yZWFkX3dvcmQoc2JzLCBBQ1BJX1NCU01fU01CVVNfQUREUiwgMHgwMSwgJnN0YXRlKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkiYWNwaV9zYnNfcmVhZF93b3JkKCkgZmFpbGVkIikpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlmb28gPSAoc3RhdGUgJiAweDBmZmYpIHwgKDEgPDwgKGJhdHRlcnktPmlkICsgMTIpKTsKLQkJcmVzdWx0ID0KLQkJICAgIGFjcGlfc2JzX3dyaXRlX3dvcmQoc2JzLCBBQ1BJX1NCU01fU01CVVNfQUREUiwgMHgwMSwgZm9vKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkiYWNwaV9zYnNfd3JpdGVfd29yZCgpIGZhaWxlZCIpKTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JfQotCi0gICAgICBlbmQ6Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBhY3BpX3Nic21fZ2V0X2luZm8oc3RydWN0IGFjcGlfc2JzICpzYnMpCitzdGF0aWMgaW50IGFjcGlfbWFuYWdlcl9nZXRfaW5mbyhzdHJ1Y3QgYWNwaV9zYnMgKnNicykKIHsKIAlpbnQgcmVzdWx0ID0gMDsKLQlzMTYgYmF0dGVyeV9zeXN0ZW1faW5mbzsKKwl1MTYgYmF0dGVyeV9zeXN0ZW1faW5mbzsKIAotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JTTV9TTUJVU19BRERSLCAweDA0LAotCQkJCSAgICAmYmF0dGVyeV9zeXN0ZW1faW5mbyk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCXNicy0+c2JzbV9wcmVzZW50ID0gMTsKLQlzYnMtPnNic21fYmF0dGVyaWVzX3N1cHBvcnRlZCA9IGJhdHRlcnlfc3lzdGVtX2luZm8gJiAweDAwMGY7Ci0KLSAgICAgIGVuZDoKLQorCXJlc3VsdCA9IGFjcGlfc21idXNfcmVhZChzYnMtPmhjLCBTTUJVU19SRUFEX1dPUkQsIEFDUElfU0JTX01BTkFHRVIsCisJCQkJIDB4MDQsICh1OCAqKSZiYXR0ZXJ5X3N5c3RlbV9pbmZvKTsKKwlpZiAoIXJlc3VsdCkKKwkJc2JzLT5iYXR0ZXJpZXNfc3VwcG9ydGVkID0gYmF0dGVyeV9zeXN0ZW1faW5mbyAmIDB4MDAwZjsKIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9nZXRfaW5mbyhzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQogewotCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gYmF0dGVyeS0+c2JzOwotCWludCByZXN1bHQgPSAwOwotCXMxNiBiYXR0ZXJ5X21vZGU7Ci0JczE2IHNwZWNpZmljYXRpb25faW5mbzsKKwlpbnQgaSwgcmVzdWx0ID0gMDsKIAotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgwMywKLQkJCQkgICAgJmJhdHRlcnlfbW9kZSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5mb19yZWFkZXJzKTsgKytpKSB7CisJCXJlc3VsdCA9IGFjcGlfc21idXNfcmVhZChiYXR0ZXJ5LT5zYnMtPmhjLAorCQkJCQkgaW5mb19yZWFkZXJzW2ldLm1vZGUsCisJCQkJCSBBQ1BJX1NCU19CQVRURVJZLAorCQkJCQkgaW5mb19yZWFkZXJzW2ldLmNvbW1hbmQsCisJCQkJCSAodTggKikgYmF0dGVyeSArCisJCQkJCQlpbmZvX3JlYWRlcnNbaV0ub2Zmc2V0KTsKKwkJaWYgKHJlc3VsdCkKKwkJCWJyZWFrOwogCX0KLQliYXR0ZXJ5LT5pbmZvLmNhcGFjaXR5X21vZGUgPSAoYmF0dGVyeV9tb2RlICYgMHg4MDAwKSA+PiAxNTsKLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgxMCwKLQkJCQkgICAgJmJhdHRlcnktPmluZm8uZnVsbF9jaGFyZ2VfY2FwYWNpdHkpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic19yZWFkX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgxOCwKLQkJCQkgICAgJmJhdHRlcnktPmluZm8uZGVzaWduX2NhcGFjaXR5KTsKLQotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic19yZWFkX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgxOSwKLQkJCQkgICAgJmJhdHRlcnktPmluZm8uZGVzaWduX3ZvbHRhZ2UpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic19yZWFkX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgxYSwKLQkJCQkgICAgJnNwZWNpZmljYXRpb25faW5mbyk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0Jc3dpdGNoICgoc3BlY2lmaWNhdGlvbl9pbmZvICYgMHgwZjAwKSA+PiA4KSB7Ci0JY2FzZSAxOgotCQliYXR0ZXJ5LT5pbmZvLnZzY2FsZSA9IDEwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWJhdHRlcnktPmluZm8udnNjYWxlID0gMTAwOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWJhdHRlcnktPmluZm8udnNjYWxlID0gMTAwMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYmF0dGVyeS0+aW5mby52c2NhbGUgPSAxOwotCX0KLQotCXN3aXRjaCAoKHNwZWNpZmljYXRpb25faW5mbyAmIDB4ZjAwMCkgPj4gMTIpIHsKLQljYXNlIDE6Ci0JCWJhdHRlcnktPmluZm8uaXBzY2FsZSA9IDEwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWJhdHRlcnktPmluZm8uaXBzY2FsZSA9IDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQliYXR0ZXJ5LT5pbmZvLmlwc2NhbGUgPSAxMDAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQliYXR0ZXJ5LT5pbmZvLmlwc2NhbGUgPSAxOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgxYywKLQkJCQkgICAgJmJhdHRlcnktPmluZm8uc2VyaWFsX251bWJlcik7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9zYnNfcmVhZF9zdHIoc2JzLCBBQ1BJX1NCX1NNQlVTX0FERFIsIDB4MjAsCi0JCQkJICAgYmF0dGVyeS0+aW5mby5tYW51ZmFjdHVyZXJfbmFtZSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfc3RyKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyZXN1bHQgPSBhY3BpX3Nic19yZWFkX3N0cihzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgyMSwKLQkJCQkgICBiYXR0ZXJ5LT5pbmZvLmRldmljZV9uYW1lKTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9zYnNfcmVhZF9zdHIoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfc3RyKHNicywgQUNQSV9TQl9TTUJVU19BRERSLCAweDIyLAotCQkJCSAgIGJhdHRlcnktPmluZm8uZGV2aWNlX2NoZW1pc3RyeSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfc3RyKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLSAgICAgIGVuZDoKIAlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKIHsKLQlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IGJhdHRlcnktPnNiczsKLQlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgaSwgcmVzdWx0ID0gMDsKIAotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgwOSwKLQkJCQkgICAgJmJhdHRlcnktPnN0YXRlLnZvbHRhZ2UpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic19yZWFkX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOworCWlmIChiYXR0ZXJ5LT51cGRhdGVfdGltZSAmJgorCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBiYXR0ZXJ5LT51cGRhdGVfdGltZSArCisJCQkJbXNlY3NfdG9famlmZmllcyhjYWNoZV90aW1lKSkpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YXRlX3JlYWRlcnMpOyArK2kpIHsKKwkJcmVzdWx0ID0gYWNwaV9zbWJ1c19yZWFkKGJhdHRlcnktPnNicy0+aGMsCisJCQkJCSBzdGF0ZV9yZWFkZXJzW2ldLm1vZGUsCisJCQkJCSBBQ1BJX1NCU19CQVRURVJZLAorCQkJCQkgc3RhdGVfcmVhZGVyc1tpXS5jb21tYW5kLAorCQkJCSAgICAgICAgICh1OCAqKWJhdHRlcnkgKworCQkJCQkJc3RhdGVfcmVhZGVyc1tpXS5vZmZzZXQpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBlbmQ7CiAJfQotCi0JcmVzdWx0ID0gYWNwaV9zYnNfcmVhZF93b3JkKHNicywgQUNQSV9TQl9TTUJVU19BRERSLCAweDBhLAotCQkJCSAgICAmYmF0dGVyeS0+c3RhdGUuYW1wZXJhZ2UpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic19yZWFkX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgwZiwKLQkJCQkgICAgJmJhdHRlcnktPnN0YXRlLnJlbWFpbmluZ19jYXBhY2l0eSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9zYnNfcmVhZF93b3JkKHNicywgQUNQSV9TQl9TTUJVU19BRERSLCAweDE2LAotCQkJCSAgICAmYmF0dGVyeS0+c3RhdGUuYmF0dGVyeV9zdGF0ZSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCiAgICAgICBlbmQ6CisJYmF0dGVyeS0+dXBkYXRlX3RpbWUgPSBqaWZmaWVzOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2dldF9hbGFybShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQogewotCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gYmF0dGVyeS0+c2JzOwotCWludCByZXN1bHQgPSAwOwotCi0JcmVzdWx0ID0gYWNwaV9zYnNfcmVhZF93b3JkKHNicywgQUNQSV9TQl9TTUJVU19BRERSLCAweDAxLAotCQkJCSAgICAmYmF0dGVyeS0+YWxhcm0ucmVtYWluaW5nX2NhcGFjaXR5KTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9zYnNfcmVhZF93b3JkKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLSAgICAgIGVuZDoKLQotCXJldHVybiByZXN1bHQ7CisJcmV0dXJuIGFjcGlfc21idXNfcmVhZChiYXR0ZXJ5LT5zYnMtPmhjLCBTTUJVU19SRUFEX1dPUkQsCisJCQkJIEFDUElfU0JTX0JBVFRFUlksIDB4MDEsCisJCQkJICh1OCAqKSZiYXR0ZXJ5LT5hbGFybV9jYXBhY2l0eSk7CiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3NldF9hbGFybShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5LAotCQkJCSAgdW5zaWduZWQgbG9uZyBhbGFybSkKK3N0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X3NldF9hbGFybShzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQogewogCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gYmF0dGVyeS0+c2JzOwotCWludCByZXN1bHQgPSAwOwotCXMxNiBiYXR0ZXJ5X21vZGU7Ci0JaW50IGZvbzsKKwl1MTYgdmFsdWUsIHNlbCA9IDEgPDwgKGJhdHRlcnktPmlkICsgMTIpOwogCi0JcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X3NlbGVjdChiYXR0ZXJ5KTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9iYXR0ZXJ5X3NlbGVjdCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQorCWludCByZXQ7CiAKLQkvKiBJZiBuZWNlc3NhcnksIGVuYWJsZSB0aGUgYWxhcm0gKi8KIAotCWlmIChhbGFybSA+IDApIHsKLQkJcmVzdWx0ID0KLQkJICAgIGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgwMywKLQkJCQkgICAgICAgJmJhdHRlcnlfbW9kZSk7Ci0JCWlmIChyZXN1bHQpIHsKLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkJImFjcGlfc2JzX3JlYWRfd29yZCgpIGZhaWxlZCIpKTsKKwlpZiAoc2JzLT5tYW5hZ2VyX3ByZXNlbnQpIHsKKwkJcmV0ID0gYWNwaV9zbWJ1c19yZWFkKHNicy0+aGMsIFNNQlVTX1JFQURfV09SRCwgQUNQSV9TQlNfTUFOQUdFUiwKKwkJCQkweDAxLCAodTggKikmdmFsdWUpOworCQlpZiAocmV0KQogCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlyZXN1bHQgPQotCQkgICAgYWNwaV9zYnNfd3JpdGVfd29yZChzYnMsIEFDUElfU0JfU01CVVNfQUREUiwgMHgwMSwKLQkJCQkJYmF0dGVyeV9tb2RlICYgMHhiZmZmKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkiYWNwaV9zYnNfd3JpdGVfd29yZCgpIGZhaWxlZCIpKTsKKwkJaWYgKCh2YWx1ZSAmIDB4ZjAwMCkgIT0gc2VsKSB7CisJCQl2YWx1ZSAmPSAweDBmZmY7CisJCQl2YWx1ZSB8PSBzZWw7CisJCXJldCA9IGFjcGlfc21idXNfd3JpdGUoc2JzLT5oYywgU01CVVNfV1JJVEVfV09SRCwKKwkJCQkJIEFDUElfU0JTX01BTkFHRVIsCisJCQkJCSAweDAxLCAodTggKikmdmFsdWUsIDIpOworCQlpZiAocmV0KQogCQkJZ290byBlbmQ7CiAJCX0KIAl9Ci0KLQlmb28gPSBhbGFybSAvIChiYXR0ZXJ5LT5pbmZvLmNhcGFjaXR5X21vZGUgPyAxMCA6IDEpOwotCXJlc3VsdCA9IGFjcGlfc2JzX3dyaXRlX3dvcmQoc2JzLCBBQ1BJX1NCX1NNQlVTX0FERFIsIDB4MDEsIGZvbyk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX3dyaXRlX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQorCXJldCA9IGFjcGlfc21idXNfd3JpdGUoc2JzLT5oYywgU01CVVNfV1JJVEVfV09SRCwgQUNQSV9TQlNfQkFUVEVSWSwKKwkJCQkweDAxLCAodTggKikmYmF0dGVyeS0+YWxhcm1fY2FwYWNpdHksIDIpOwogICAgICAgZW5kOgotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGludCBhY3BpX2JhdHRlcnlfc2V0X21vZGUoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKLXsKLQlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IGJhdHRlcnktPnNiczsKLQlpbnQgcmVzdWx0ID0gMDsKLQlzMTYgYmF0dGVyeV9tb2RlOwotCi0JaWYgKGNhcGFjaXR5X21vZGUgPT0gREVGX0NBUEFDSVRZX1VOSVQpIHsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9zYnNfcmVhZF93b3JkKHNicywKLQkJCQkgICAgQUNQSV9TQl9TTUJVU19BRERSLCAweDAzLCAmYmF0dGVyeV9tb2RlKTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9zYnNfcmVhZF93b3JkKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlpZiAoY2FwYWNpdHlfbW9kZSA9PSBNQUhfQ0FQQUNJVFlfVU5JVCkgewotCQliYXR0ZXJ5X21vZGUgJj0gMHg3ZmZmOwotCX0gZWxzZSB7Ci0JCWJhdHRlcnlfbW9kZSB8PSAweDgwMDA7Ci0JfQotCXJlc3VsdCA9IGFjcGlfc2JzX3dyaXRlX3dvcmQoc2JzLAotCQkJCSAgICAgQUNQSV9TQl9TTUJVU19BRERSLCAweDAzLCBiYXR0ZXJ5X21vZGUpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic193cml0ZV93b3JkKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyZXN1bHQgPSBhY3BpX3Nic19yZWFkX3dvcmQoc2JzLAotCQkJCSAgICBBQ1BJX1NCX1NNQlVTX0FERFIsIDB4MDMsICZiYXR0ZXJ5X21vZGUpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX3Nic19yZWFkX3dvcmQoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotICAgICAgZW5kOgotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgYWNwaV9iYXR0ZXJ5X2luaXQoc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSkKLXsKLQlpbnQgcmVzdWx0ID0gMDsKLQotCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9zZWxlY3QoYmF0dGVyeSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfYmF0dGVyeV9zZWxlY3QoKSBmYWlsZWQiKSk7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9zZXRfbW9kZShiYXR0ZXJ5KTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9iYXR0ZXJ5X3NldF9tb2RlKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X2luZm8oYmF0dGVyeSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfYmF0dGVyeV9nZXRfaW5mbygpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2dldF9zdGF0ZShiYXR0ZXJ5KTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9iYXR0ZXJ5X2dldF9zdGF0ZSgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2dldF9hbGFybShiYXR0ZXJ5KTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9iYXR0ZXJ5X2dldF9hbGFybSgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0gICAgICBlbmQ6Ci0JcmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IGFjcGlfYWNfZ2V0X3ByZXNlbnQoc3RydWN0IGFjcGlfc2JzICpzYnMpCiB7Ci0JaW50IHJlc3VsdCA9IDA7Ci0JczE2IGNoYXJnZXJfc3RhdHVzOworCWludCByZXN1bHQ7CisJdTE2IHN0YXR1czsKIAotCXJlc3VsdCA9IGFjcGlfc2JzX3JlYWRfd29yZChzYnMsIEFDUElfU0JDX1NNQlVTX0FERFIsIDB4MTMsCi0JCQkJICAgICZjaGFyZ2VyX3N0YXR1cyk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9zYnNfcmVhZF93b3JkKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlzYnMtPmFjLmFjX3ByZXNlbnQgPSAoY2hhcmdlcl9zdGF0dXMgJiAweDgwMDApID4+IDE1OwotCi0gICAgICBlbmQ6Ci0KKwlyZXN1bHQgPSBhY3BpX3NtYnVzX3JlYWQoc2JzLT5oYywgU01CVVNfUkVBRF9XT1JELCBBQ1BJX1NCU19DSEFSR0VSLAorCQkJCSAweDEzLCAodTggKikgJiBzdGF0dXMpOworCWlmICghcmVzdWx0KQorCQlzYnMtPmNoYXJnZXJfcHJlc2VudCA9IChzdGF0dXMgPj4gMTUpICYgMHgxOwogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyBzc2l6ZV90IGFjcGlfYmF0dGVyeV9hbGFybV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gdG9fYWNwaV9iYXR0ZXJ5KGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlhY3BpX2JhdHRlcnlfZ2V0X2FsYXJtKGJhdHRlcnkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBiYXR0ZXJ5LT5hbGFybV9jYXBhY2l0eSAqCisJCQkJYWNwaV9iYXR0ZXJ5X3NjYWxlKGJhdHRlcnkpICogMTAwMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFjcGlfYmF0dGVyeV9hbGFybV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwl1bnNpZ25lZCBsb25nIHg7CisJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IHRvX2FjcGlfYmF0dGVyeShkZXZfZ2V0X2RydmRhdGEoZGV2KSk7CisJaWYgKHNzY2FuZihidWYsICIlbGRcbiIsICZ4KSA9PSAxKQorCQliYXR0ZXJ5LT5hbGFybV9jYXBhY2l0eSA9IHggLworCQkJKDEwMDAgKiBhY3BpX2JhdHRlcnlfc2NhbGUoYmF0dGVyeSkpOworCWlmIChiYXR0ZXJ5LT5wcmVzZW50KQorCQlhY3BpX2JhdHRlcnlfc2V0X2FsYXJtKGJhdHRlcnkpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGFsYXJtX2F0dHIgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiYWxhcm0iLCAubW9kZSA9IDA2NDQsIC5vd25lciA9IFRISVNfTU9EVUxFfSwKKwkuc2hvdyA9IGFjcGlfYmF0dGVyeV9hbGFybV9zaG93LAorCS5zdG9yZSA9IGFjcGlfYmF0dGVyeV9hbGFybV9zdG9yZSwKK307CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUyBJbnRlcmZhY2UgKC9wcm9jL2FjcGkpCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAvKiBHZW5lcmljIFJvdXRpbmVzICovCi0KIHN0YXRpYyBpbnQKLWFjcGlfc2JzX2dlbmVyaWNfYWRkX2ZzKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKmRpciwKLQkJCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50X2RpciwKLQkJCWNoYXIgKmRpcl9uYW1lLAotCQkJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqaW5mb19mb3BzLAotCQkJc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqc3RhdGVfZm9wcywKLQkJCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmFsYXJtX2ZvcHMsIHZvaWQgKmRhdGEpCithY3BpX3Nic19hZGRfZnMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqZGlyLAorCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudF9kaXIsCisJCWNoYXIgKmRpcl9uYW1lLAorCQlzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICppbmZvX2ZvcHMsCisJCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnN0YXRlX2ZvcHMsCisJCXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmFsYXJtX2ZvcHMsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAKIAlpZiAoISpkaXIpIHsKIAkJKmRpciA9IHByb2NfbWtkaXIoZGlyX25hbWUsIHBhcmVudF9kaXIpOwogCQlpZiAoISpkaXIpIHsKLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkJInByb2NfbWtkaXIoKSBmYWlsZWQiKSk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQkoKmRpciktPm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC04ODIsMTAgKzQ5MSw3IEBACiAJLyogJ2luZm8nIFtSXSAqLwogCWlmIChpbmZvX2ZvcHMpIHsKIAkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShBQ1BJX1NCU19GSUxFX0lORk8sIFNfSVJVR08sICpkaXIpOwotCQlpZiAoIWVudHJ5KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJjcmVhdGVfcHJvY19lbnRyeSgpIGZhaWxlZCIpKTsKLQkJfSBlbHNlIHsKKwkJaWYgKGVudHJ5KSB7CiAJCQllbnRyeS0+cHJvY19mb3BzID0gaW5mb19mb3BzOwogCQkJZW50cnktPmRhdGEgPSBkYXRhOwogCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CkBAIC04OTUsMTAgKzUwMSw3IEBACiAJLyogJ3N0YXRlJyBbUl0gKi8KIAlpZiAoc3RhdGVfZm9wcykgewogCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KEFDUElfU0JTX0ZJTEVfU1RBVEUsIFNfSVJVR08sICpkaXIpOwotCQlpZiAoIWVudHJ5KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJjcmVhdGVfcHJvY19lbnRyeSgpIGZhaWxlZCIpKTsKLQkJfSBlbHNlIHsKKwkJaWYgKGVudHJ5KSB7CiAJCQllbnRyeS0+cHJvY19mb3BzID0gc3RhdGVfZm9wczsKIAkJCWVudHJ5LT5kYXRhID0gZGF0YTsKIAkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwpAQCAtOTA4LDI0ICs1MTEsMTkgQEAKIAkvKiAnYWxhcm0nIFtSL1ddICovCiAJaWYgKGFsYXJtX2ZvcHMpIHsKIAkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShBQ1BJX1NCU19GSUxFX0FMQVJNLCBTX0lSVUdPLCAqZGlyKTsKLQkJaWYgKCFlbnRyeSkgewotCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkiY3JlYXRlX3Byb2NfZW50cnkoKSBmYWlsZWQiKSk7Ci0JCX0gZWxzZSB7CisJCWlmIChlbnRyeSkgewogCQkJZW50cnktPnByb2NfZm9wcyA9IGFsYXJtX2ZvcHM7CiAJCQllbnRyeS0+ZGF0YSA9IGRhdGE7CiAJCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJfQogCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZAotYWNwaV9zYnNfZ2VuZXJpY19yZW1vdmVfZnMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqZGlyLAorYWNwaV9zYnNfcmVtb3ZlX2ZzKHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKmRpciwKIAkJCSAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50X2RpcikKIHsKLQogCWlmICgqZGlyKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfU0JTX0ZJTEVfSU5GTywgKmRpcik7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KEFDUElfU0JTX0ZJTEVfU1RBVEUsICpkaXIpOwpAQCAtOTMzLDgyICs1MzEsNTIgQEAKIAkJcmVtb3ZlX3Byb2NfZW50cnkoKCpkaXIpLT5uYW1lLCBwYXJlbnRfZGlyKTsKIAkJKmRpciA9IE5VTEw7CiAJfQotCiB9CiAKIC8qIFNtYXJ0IEJhdHRlcnkgSW50ZXJmYWNlICovCi0KIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmFjcGlfYmF0dGVyeV9kaXIgPSBOVUxMOwogCitzdGF0aWMgaW5saW5lIGNoYXIgKmFjcGlfYmF0dGVyeV91bml0cyhzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5KQoreworCXJldHVybiBhY3BpX2JhdHRlcnlfbW9kZShiYXR0ZXJ5KSA/ICIgbVdoIiA6ICIgbUFoIjsKK30KKworCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZWFkX2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5ID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gYmF0dGVyeS0+c2JzOwotCWludCBjc2NhbGU7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlpZiAoc2JzX211dGV4X2xvY2soc2JzKSkgewotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJbXV0ZXhfbG9jaygmc2JzLT5sb2NrKTsKIAotCXJlc3VsdCA9IGFjcGlfY2hlY2tfdXBkYXRlX3Byb2Moc2JzKTsKLQlpZiAocmVzdWx0KQorCXNlcV9wcmludGYoc2VxLCAicHJlc2VudDogICAgICAgICAgICAgICAgICVzXG4iLAorCQkgICAoYmF0dGVyeS0+cHJlc2VudCkgPyAieWVzIiA6ICJubyIpOworCWlmICghYmF0dGVyeS0+cHJlc2VudCkKIAkJZ290byBlbmQ7CiAKLQlpZiAodXBkYXRlX3RpbWUgPT0gMCkgewotCQlyZXN1bHQgPSBhY3BpX3Nic191cGRhdGVfcnVuKHNicywgYmF0dGVyeS0+aWQsIERBVEFfVFlQRV9JTkZPKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkiYWNwaV9zYnNfdXBkYXRlX3J1bigpIGZhaWxlZCIpKTsKLQkJfQotCX0KLQotCWlmIChiYXR0ZXJ5LT5iYXR0ZXJ5X3ByZXNlbnQpIHsKLQkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50OiAgICAgICAgICAgICAgICAgeWVzXG4iKTsKLQl9IGVsc2UgewotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICBub1xuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWlmIChiYXR0ZXJ5LT5pbmZvLmNhcGFjaXR5X21vZGUpIHsKLQkJY3NjYWxlID0gYmF0dGVyeS0+aW5mby52c2NhbGUgKiBiYXR0ZXJ5LT5pbmZvLmlwc2NhbGU7Ci0JfSBlbHNlIHsKLQkJY3NjYWxlID0gYmF0dGVyeS0+aW5mby5pcHNjYWxlOwotCX0KIAlzZXFfcHJpbnRmKHNlcSwgImRlc2lnbiBjYXBhY2l0eTogICAgICAgICAlaSVzXG4iLAotCQkgICBiYXR0ZXJ5LT5pbmZvLmRlc2lnbl9jYXBhY2l0eSAqIGNzY2FsZSwKLQkJICAgYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlID8gIjAgbVdoIiA6ICIgbUFoIik7Ci0KKwkJICAgYmF0dGVyeS0+ZGVzaWduX2NhcGFjaXR5ICogYWNwaV9iYXR0ZXJ5X3NjYWxlKGJhdHRlcnkpLAorCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogCXNlcV9wcmludGYoc2VxLCAibGFzdCBmdWxsIGNhcGFjaXR5OiAgICAgICVpJXNcbiIsCi0JCSAgIGJhdHRlcnktPmluZm8uZnVsbF9jaGFyZ2VfY2FwYWNpdHkgKiBjc2NhbGUsCi0JCSAgIGJhdHRlcnktPmluZm8uY2FwYWNpdHlfbW9kZSA/ICIwIG1XaCIgOiAiIG1BaCIpOwotCisJCSAgIGJhdHRlcnktPmZ1bGxfY2hhcmdlX2NhcGFjaXR5ICogYWNwaV9iYXR0ZXJ5X3NjYWxlKGJhdHRlcnkpLAorCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOwogCXNlcV9wcmludGYoc2VxLCAiYmF0dGVyeSB0ZWNobm9sb2d5OiAgICAgIHJlY2hhcmdlYWJsZVxuIik7Ci0KIAlzZXFfcHJpbnRmKHNlcSwgImRlc2lnbiB2b2x0YWdlOiAgICAgICAgICAlaSBtVlxuIiwKLQkJICAgYmF0dGVyeS0+aW5mby5kZXNpZ25fdm9sdGFnZSAqIGJhdHRlcnktPmluZm8udnNjYWxlKTsKLQorCQkgICBiYXR0ZXJ5LT5kZXNpZ25fdm9sdGFnZSAqIGFjcGlfYmF0dGVyeV92c2NhbGUoYmF0dGVyeSkpOwogCXNlcV9wcmludGYoc2VxLCAiZGVzaWduIGNhcGFjaXR5IHdhcm5pbmc6IHVua25vd25cbiIpOwogCXNlcV9wcmludGYoc2VxLCAiZGVzaWduIGNhcGFjaXR5IGxvdzogICAgIHVua25vd25cbiIpOwogCXNlcV9wcmludGYoc2VxLCAiY2FwYWNpdHkgZ3JhbnVsYXJpdHkgMTogIHVua25vd25cbiIpOwogCXNlcV9wcmludGYoc2VxLCAiY2FwYWNpdHkgZ3JhbnVsYXJpdHkgMjogIHVua25vd25cbiIpOwotCi0Jc2VxX3ByaW50ZihzZXEsICJtb2RlbCBudW1iZXI6ICAgICAgICAgICAgJXNcbiIsCi0JCSAgIGJhdHRlcnktPmluZm8uZGV2aWNlX25hbWUpOwotCisJc2VxX3ByaW50ZihzZXEsICJtb2RlbCBudW1iZXI6ICAgICAgICAgICAgJXNcbiIsIGJhdHRlcnktPmRldmljZV9uYW1lKTsKIAlzZXFfcHJpbnRmKHNlcSwgInNlcmlhbCBudW1iZXI6ICAgICAgICAgICAlaVxuIiwKLQkJICAgYmF0dGVyeS0+aW5mby5zZXJpYWxfbnVtYmVyKTsKLQorCQkgICBiYXR0ZXJ5LT5zZXJpYWxfbnVtYmVyKTsKIAlzZXFfcHJpbnRmKHNlcSwgImJhdHRlcnkgdHlwZTogICAgICAgICAgICAlc1xuIiwKLQkJICAgYmF0dGVyeS0+aW5mby5kZXZpY2VfY2hlbWlzdHJ5KTsKLQorCQkgICBiYXR0ZXJ5LT5kZXZpY2VfY2hlbWlzdHJ5KTsKIAlzZXFfcHJpbnRmKHNlcSwgIk9FTSBpbmZvOiAgICAgICAgICAgICAgICAlc1xuIiwKLQkJICAgYmF0dGVyeS0+aW5mby5tYW51ZmFjdHVyZXJfbmFtZSk7Ci0KKwkJICAgYmF0dGVyeS0+bWFudWZhY3R1cmVyX25hbWUpOwogICAgICAgZW5kOgotCi0Jc2JzX211dGV4X3VubG9jayhzYnMpOwotCisJbXV0ZXhfdW5sb2NrKCZzYnMtPmxvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEwMjIsNzMgKzU5MCwyOSBAQAogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBzZXEtPnByaXZhdGU7CiAJc3RydWN0IGFjcGlfc2JzICpzYnMgPSBiYXR0ZXJ5LT5zYnM7CiAJaW50IHJlc3VsdCA9IDA7Ci0JaW50IGNzY2FsZTsKLQlpbnQgZm9vOwogCi0JaWYgKHNic19tdXRleF9sb2NrKHNicykpIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmVzdWx0ID0gYWNwaV9jaGVja191cGRhdGVfcHJvYyhzYnMpOwotCWlmIChyZXN1bHQpCisJbXV0ZXhfbG9jaygmc2JzLT5sb2NrKTsKKwlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICAlc1xuIiwKKwkJICAgKGJhdHRlcnktPnByZXNlbnQpID8gInllcyIgOiAibm8iKTsKKwlpZiAoIWJhdHRlcnktPnByZXNlbnQpCiAJCWdvdG8gZW5kOwogCi0JaWYgKHVwZGF0ZV90aW1lID09IDApIHsKLQkJcmVzdWx0ID0gYWNwaV9zYnNfdXBkYXRlX3J1bihzYnMsIGJhdHRlcnktPmlkLCBEQVRBX1RZUEVfU1RBVEUpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX3Nic191cGRhdGVfcnVuKCkgZmFpbGVkIikpOwotCQl9Ci0JfQotCi0JaWYgKGJhdHRlcnktPmJhdHRlcnlfcHJlc2VudCkgewotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQ6ICAgICAgICAgICAgICAgICB5ZXNcbiIpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYoc2VxLCAicHJlc2VudDogICAgICAgICAgICAgICAgIG5vXG4iKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaWYgKGJhdHRlcnktPmluZm8uY2FwYWNpdHlfbW9kZSkgewotCQljc2NhbGUgPSBiYXR0ZXJ5LT5pbmZvLnZzY2FsZSAqIGJhdHRlcnktPmluZm8uaXBzY2FsZTsKLQl9IGVsc2UgewotCQljc2NhbGUgPSBiYXR0ZXJ5LT5pbmZvLmlwc2NhbGU7Ci0JfQotCi0JaWYgKGJhdHRlcnktPnN0YXRlLmJhdHRlcnlfc3RhdGUgJiAweDAwMTApIHsKLQkJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBzdGF0ZTogICAgICAgICAgY3JpdGljYWxcbiIpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiY2FwYWNpdHkgc3RhdGU6ICAgICAgICAgIG9rXG4iKTsKLQl9Ci0KLQlmb28gPSAoczE2KSBiYXR0ZXJ5LT5zdGF0ZS5hbXBlcmFnZSAqIGJhdHRlcnktPmluZm8uaXBzY2FsZTsKLQlpZiAoYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlKSB7Ci0JCWZvbyA9IGZvbyAqIGJhdHRlcnktPmluZm8uZGVzaWduX3ZvbHRhZ2UgLyAxMDAwOwotCX0KLQlpZiAoYmF0dGVyeS0+c3RhdGUuYW1wZXJhZ2UgPCAwKSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGRpc2NoYXJnaW5nXG4iKTsKLQkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50IHJhdGU6ICAgICAgICAgICAgJWQgJXNcbiIsCi0JCQkgICAtZm9vLCBiYXR0ZXJ5LT5pbmZvLmNhcGFjaXR5X21vZGUgPyAibVciIDogIm1BIik7Ci0JfSBlbHNlIGlmIChiYXR0ZXJ5LT5zdGF0ZS5hbXBlcmFnZSA+IDApIHsKLQkJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgY2hhcmdpbmdcbiIpOwotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAlZCAlc1xuIiwKLQkJCSAgIGZvbywgYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlID8gIm1XIiA6ICJtQSIpOwotCX0gZWxzZSB7Ci0JCXNlcV9wcmludGYoc2VxLCAiY2hhcmdpbmcgc3RhdGU6ICAgICAgICAgIGNoYXJnZWRcbiIpOwotCQlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAwICVzXG4iLAotCQkJICAgYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlID8gIm1XIiA6ICJtQSIpOwotCX0KLQorCWFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoYmF0dGVyeSk7CisJc2VxX3ByaW50ZihzZXEsICJjYXBhY2l0eSBzdGF0ZTogICAgICAgICAgJXNcbiIsCisJCSAgIChiYXR0ZXJ5LT5zdGF0ZSAmIDB4MDAxMCkgPyAiY3JpdGljYWwiIDogIm9rIik7CisJc2VxX3ByaW50ZihzZXEsICJjaGFyZ2luZyBzdGF0ZTogICAgICAgICAgJXNcbiIsCisJCSAgIChiYXR0ZXJ5LT5jdXJyZW50X25vdyA8IDApID8gImRpc2NoYXJnaW5nIiA6CisJCSAgICgoYmF0dGVyeS0+Y3VycmVudF9ub3cgPiAwKSA/ICJjaGFyZ2luZyIgOiAiY2hhcmdlZCIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgcmF0ZTogICAgICAgICAgICAlZCBtQVxuIiwKKwkJICAgYWJzKGJhdHRlcnktPmN1cnJlbnRfbm93KSAqIGFjcGlfYmF0dGVyeV9pcHNjYWxlKGJhdHRlcnkpKTsKIAlzZXFfcHJpbnRmKHNlcSwgInJlbWFpbmluZyBjYXBhY2l0eTogICAgICAlaSVzXG4iLAotCQkgICBiYXR0ZXJ5LT5zdGF0ZS5yZW1haW5pbmdfY2FwYWNpdHkgKiBjc2NhbGUsCi0JCSAgIGJhdHRlcnktPmluZm8uY2FwYWNpdHlfbW9kZSA/ICIwIG1XaCIgOiAiIG1BaCIpOwotCisJCSAgIGJhdHRlcnktPmNhcGFjaXR5X25vdyAqIGFjcGlfYmF0dGVyeV9zY2FsZShiYXR0ZXJ5KSwKKwkJICAgYWNwaV9iYXR0ZXJ5X3VuaXRzKGJhdHRlcnkpKTsKIAlzZXFfcHJpbnRmKHNlcSwgInByZXNlbnQgdm9sdGFnZTogICAgICAgICAlaSBtVlxuIiwKLQkJICAgYmF0dGVyeS0+c3RhdGUudm9sdGFnZSAqIGJhdHRlcnktPmluZm8udnNjYWxlKTsKKwkJICAgYmF0dGVyeS0+dm9sdGFnZV9ub3cgKiBhY3BpX2JhdHRlcnlfdnNjYWxlKGJhdHRlcnkpKTsKIAogICAgICAgZW5kOgotCi0Jc2JzX211dGV4X3VubG9jayhzYnMpOwotCisJbXV0ZXhfdW5sb2NrKCZzYnMtPmxvY2spOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTExMDIsNDggKzYyNiwyNSBAQAogCXN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkgPSBzZXEtPnByaXZhdGU7CiAJc3RydWN0IGFjcGlfc2JzICpzYnMgPSBiYXR0ZXJ5LT5zYnM7CiAJaW50IHJlc3VsdCA9IDA7Ci0JaW50IGNzY2FsZTsKIAotCWlmIChzYnNfbXV0ZXhfbG9jayhzYnMpKSB7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwltdXRleF9sb2NrKCZzYnMtPmxvY2spOwogCi0JcmVzdWx0ID0gYWNwaV9jaGVja191cGRhdGVfcHJvYyhzYnMpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZW5kOwotCi0JaWYgKHVwZGF0ZV90aW1lID09IDApIHsKLQkJcmVzdWx0ID0gYWNwaV9zYnNfdXBkYXRlX3J1bihzYnMsIGJhdHRlcnktPmlkLCBEQVRBX1RZUEVfQUxBUk0pOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX3Nic191cGRhdGVfcnVuKCkgZmFpbGVkIikpOwotCQl9Ci0JfQotCi0JaWYgKCFiYXR0ZXJ5LT5iYXR0ZXJ5X3ByZXNlbnQpIHsKKwlpZiAoIWJhdHRlcnktPnByZXNlbnQpIHsKIAkJc2VxX3ByaW50ZihzZXEsICJwcmVzZW50OiAgICAgICAgICAgICAgICAgbm9cbiIpOwogCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoYmF0dGVyeS0+aW5mby5jYXBhY2l0eV9tb2RlKSB7Ci0JCWNzY2FsZSA9IGJhdHRlcnktPmluZm8udnNjYWxlICogYmF0dGVyeS0+aW5mby5pcHNjYWxlOwotCX0gZWxzZSB7Ci0JCWNzY2FsZSA9IGJhdHRlcnktPmluZm8uaXBzY2FsZTsKLQl9Ci0KKwlhY3BpX2JhdHRlcnlfZ2V0X2FsYXJtKGJhdHRlcnkpOwogCXNlcV9wcmludGYoc2VxLCAiYWxhcm06ICAgICAgICAgICAgICAgICAgICIpOwotCWlmIChiYXR0ZXJ5LT5hbGFybS5yZW1haW5pbmdfY2FwYWNpdHkpIHsKKwlpZiAoYmF0dGVyeS0+YWxhcm1fY2FwYWNpdHkpCiAJCXNlcV9wcmludGYoc2VxLCAiJWklc1xuIiwKLQkJCSAgIGJhdHRlcnktPmFsYXJtLnJlbWFpbmluZ19jYXBhY2l0eSAqIGNzY2FsZSwKLQkJCSAgIGJhdHRlcnktPmluZm8uY2FwYWNpdHlfbW9kZSA/ICIwIG1XaCIgOiAiIG1BaCIpOwotCX0gZWxzZSB7CisJCQkgICBiYXR0ZXJ5LT5hbGFybV9jYXBhY2l0eSAqCisJCQkgICBhY3BpX2JhdHRlcnlfc2NhbGUoYmF0dGVyeSksCisJCQkgICBhY3BpX2JhdHRlcnlfdW5pdHMoYmF0dGVyeSkpOworCWVsc2UKIAkJc2VxX3ByaW50ZihzZXEsICJkaXNhYmxlZFxuIik7Ci0JfQotCiAgICAgICBlbmQ6Ci0KLQlzYnNfbXV0ZXhfdW5sb2NrKHNicyk7Ci0KKwltdXRleF91bmxvY2soJnNicy0+bG9jayk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTE1NSw1OSArNjU2LDI5IEBACiAJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9IHNlcS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IGJhdHRlcnktPnNiczsKIAljaGFyIGFsYXJtX3N0cmluZ1sxMl0gPSB7ICdcMCcgfTsKLQlpbnQgcmVzdWx0LCBvbGRfYWxhcm0sIG5ld19hbGFybTsKLQotCWlmIChzYnNfbXV0ZXhfbG9jayhzYnMpKSB7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXJlc3VsdCA9IGFjcGlfY2hlY2tfdXBkYXRlX3Byb2Moc2JzKTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGVuZDsKLQotCWlmICghYmF0dGVyeS0+YmF0dGVyeV9wcmVzZW50KSB7CisJaW50IHJlc3VsdCA9IDA7CisJbXV0ZXhfbG9jaygmc2JzLT5sb2NrKTsKKwlpZiAoIWJhdHRlcnktPnByZXNlbnQpIHsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlbmQ7CiAJfQotCiAJaWYgKGNvdW50ID4gc2l6ZW9mKGFsYXJtX3N0cmluZykgLSAxKSB7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWdvdG8gZW5kOwogCX0KLQogCWlmIChjb3B5X2Zyb21fdXNlcihhbGFybV9zdHJpbmcsIGJ1ZmZlciwgY291bnQpKSB7CiAJCXJlc3VsdCA9IC1FRkFVTFQ7CiAJCWdvdG8gZW5kOwogCX0KLQogCWFsYXJtX3N0cmluZ1tjb3VudF0gPSAwOwotCi0Jb2xkX2FsYXJtID0gYmF0dGVyeS0+YWxhcm0ucmVtYWluaW5nX2NhcGFjaXR5OwotCW5ld19hbGFybSA9IHNpbXBsZV9zdHJ0b3VsKGFsYXJtX3N0cmluZywgTlVMTCwgMCk7Ci0KLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfc2V0X2FsYXJtKGJhdHRlcnksIG5ld19hbGFybSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oKSBmYWlsZWQiKSk7Ci0JCWFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oYmF0dGVyeSwgb2xkX2FsYXJtKTsKLQkJZ290byBlbmQ7Ci0JfQotCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfYWxhcm0oYmF0dGVyeSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfYmF0dGVyeV9nZXRfYWxhcm0oKSBmYWlsZWQiKSk7Ci0JCWFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oYmF0dGVyeSwgb2xkX2FsYXJtKTsKLQkJZ290byBlbmQ7Ci0JfQotCisJYmF0dGVyeS0+YWxhcm1fY2FwYWNpdHkgPSBzaW1wbGVfc3RydG91bChhbGFybV9zdHJpbmcsIE5VTEwsIDApIC8KKwkJCQkJYWNwaV9iYXR0ZXJ5X3NjYWxlKGJhdHRlcnkpOworCWFjcGlfYmF0dGVyeV9zZXRfYWxhcm0oYmF0dGVyeSk7CiAgICAgICBlbmQ6Ci0Jc2JzX211dGV4X3VubG9jayhzYnMpOwotCi0JaWYgKHJlc3VsdCkgeworCW11dGV4X3VubG9jaygmc2JzLT5sb2NrKTsKKwlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwotCX0gZWxzZSB7Ci0JCXJldHVybiBjb3VudDsKLQl9CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9hbGFybV9vcGVuX2ZzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTI0NiwyNiArNzE3LDE1IEBACiAKIHN0YXRpYyBpbnQgYWNwaV9hY19yZWFkX3N0YXRlKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CisKIAlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IHNlcS0+cHJpdmF0ZTsKLQlpbnQgcmVzdWx0OwogCi0JaWYgKHNic19tdXRleF9sb2NrKHNicykpIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JaWYgKHVwZGF0ZV90aW1lID09IDApIHsKLQkJcmVzdWx0ID0gYWNwaV9zYnNfdXBkYXRlX3J1bihzYnMsIC0xLCBEQVRBX1RZUEVfQUNfU1RBVEUpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX3Nic191cGRhdGVfcnVuKCkgZmFpbGVkIikpOwotCQl9Ci0JfQorCW11dGV4X2xvY2soJnNicy0+bG9jayk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgInN0YXRlOiAgICAgICAgICAgICAgICAgICAlc1xuIiwKLQkJICAgc2JzLT5hYy5hY19wcmVzZW50ID8gIm9uLWxpbmUiIDogIm9mZi1saW5lIik7CisJCSAgIHNicy0+Y2hhcmdlcl9wcmVzZW50ID8gIm9uLWxpbmUiIDogIm9mZi1saW5lIik7CiAKLQlzYnNfbXV0ZXhfdW5sb2NrKHNicyk7Ci0KKwltdXRleF91bmxvY2soJnNicy0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyODIsNDI5ICs3NDIsMjAzIEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiB9OwogCisjZW5kaWYKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERyaXZlciBJbnRlcmZhY2UKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGFjcGlfYmF0dGVyeV9yZWFkKHN0cnVjdCBhY3BpX2JhdHRlcnkgKmJhdHRlcnkpCit7CisJaW50IHJlc3VsdCA9IDAsIHNhdmVkX3ByZXNlbnQgPSBiYXR0ZXJ5LT5wcmVzZW50OworCXUxNiBzdGF0ZTsKKworCWlmIChiYXR0ZXJ5LT5zYnMtPm1hbmFnZXJfcHJlc2VudCkgeworCQlyZXN1bHQgPSBhY3BpX3NtYnVzX3JlYWQoYmF0dGVyeS0+c2JzLT5oYywgU01CVVNfUkVBRF9XT1JELAorCQkJCUFDUElfU0JTX01BTkFHRVIsIDB4MDEsICh1OCAqKSZzdGF0ZSk7CisJCWlmICghcmVzdWx0KQorCQkJYmF0dGVyeS0+cHJlc2VudCA9IHN0YXRlICYgKDEgPDwgYmF0dGVyeS0+aWQpOworCQlzdGF0ZSAmPSAweDBmZmY7CisJCXN0YXRlIHw9IDEgPDwgKGJhdHRlcnktPmlkICsgMTIpOworCQlhY3BpX3NtYnVzX3dyaXRlKGJhdHRlcnktPnNicy0+aGMsIFNNQlVTX1dSSVRFX1dPUkQsCisJCQkJICBBQ1BJX1NCU19NQU5BR0VSLCAweDAxLCAodTggKikmc3RhdGUsIDIpOworCX0gZWxzZSBpZiAoYmF0dGVyeS0+aWQgPT0gMCkKKwkJYmF0dGVyeS0+cHJlc2VudCA9IDE7CisJaWYgKHJlc3VsdCB8fCAhYmF0dGVyeS0+cHJlc2VudCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCWlmIChzYXZlZF9wcmVzZW50ICE9IGJhdHRlcnktPnByZXNlbnQpIHsKKwkJYmF0dGVyeS0+dXBkYXRlX3RpbWUgPSAwOworCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X2luZm8oYmF0dGVyeSk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OworCX0KKwlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X3N0YXRlKGJhdHRlcnkpOworCXJldHVybiByZXN1bHQ7Cit9CiAKIC8qIFNtYXJ0IEJhdHRlcnkgKi8KLQogc3RhdGljIGludCBhY3BpX2JhdHRlcnlfYWRkKHN0cnVjdCBhY3BpX3NicyAqc2JzLCBpbnQgaWQpCiB7Ci0JaW50IGlzX3ByZXNlbnQ7CisJc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeSA9ICZzYnMtPmJhdHRlcnlbaWRdOwogCWludCByZXN1bHQ7Ci0JY2hhciBkaXJfbmFtZVszMl07Ci0Jc3RydWN0IGFjcGlfYmF0dGVyeSAqYmF0dGVyeTsKIAotCWJhdHRlcnkgPSAmc2JzLT5iYXR0ZXJ5W2lkXTsKLQotCWJhdHRlcnktPmFsaXZlID0gMDsKLQotCWJhdHRlcnktPmluaXRfc3RhdGUgPSAwOwogCWJhdHRlcnktPmlkID0gaWQ7CiAJYmF0dGVyeS0+c2JzID0gc2JzOworCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9yZWFkKGJhdHRlcnkpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CiAKLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfc2VsZWN0KGJhdHRlcnkpOwotCWlmIChyZXN1bHQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJhY3BpX2JhdHRlcnlfc2VsZWN0KCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKKwlzcHJpbnRmKGJhdHRlcnktPm5hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUworCWFjcGlfc2JzX2FkZF9mcygmYmF0dGVyeS0+cHJvY19lbnRyeSwgYWNwaV9iYXR0ZXJ5X2RpciwKKwkJCWJhdHRlcnktPm5hbWUsICZhY3BpX2JhdHRlcnlfaW5mb19mb3BzLAorCQkJJmFjcGlfYmF0dGVyeV9zdGF0ZV9mb3BzLCAmYWNwaV9iYXR0ZXJ5X2FsYXJtX2ZvcHMsCisJCQliYXR0ZXJ5KTsKKyNlbmRpZgorCWJhdHRlcnktPmJhdC5uYW1lID0gYmF0dGVyeS0+bmFtZTsKKwliYXR0ZXJ5LT5iYXQudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlk7CisJaWYgKCFhY3BpX2JhdHRlcnlfbW9kZShiYXR0ZXJ5KSkgeworCQliYXR0ZXJ5LT5iYXQucHJvcGVydGllcyA9IHNic19jaGFyZ2VfYmF0dGVyeV9wcm9wczsKKwkJYmF0dGVyeS0+YmF0Lm51bV9wcm9wZXJ0aWVzID0KKwkJICAgIEFSUkFZX1NJWkUoc2JzX2NoYXJnZV9iYXR0ZXJ5X3Byb3BzKTsKKwl9IGVsc2UgeworCQliYXR0ZXJ5LT5iYXQucHJvcGVydGllcyA9IHNic19lbmVyZ3lfYmF0dGVyeV9wcm9wczsKKwkJYmF0dGVyeS0+YmF0Lm51bV9wcm9wZXJ0aWVzID0KKwkJICAgIEFSUkFZX1NJWkUoc2JzX2VuZXJneV9iYXR0ZXJ5X3Byb3BzKTsKIAl9Ci0KLQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfZ2V0X3ByZXNlbnQoYmF0dGVyeSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfYmF0dGVyeV9nZXRfcHJlc2VudCgpIGZhaWxlZCIpKTsKLQkJZ290byBlbmQ7Ci0JfQotCi0JaXNfcHJlc2VudCA9IGJhdHRlcnktPmJhdHRlcnlfcHJlc2VudDsKLQotCWlmIChpc19wcmVzZW50KSB7Ci0JCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9pbml0KGJhdHRlcnkpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX2JhdHRlcnlfaW5pdCgpIGZhaWxlZCIpKTsKLQkJCWdvdG8gZW5kOwotCQl9Ci0JCWJhdHRlcnktPmluaXRfc3RhdGUgPSAxOwotCX0KLQotCXNwcmludGYoZGlyX25hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOwotCi0JcmVzdWx0ID0gYWNwaV9zYnNfZ2VuZXJpY19hZGRfZnMoJmJhdHRlcnktPmJhdHRlcnlfZW50cnksCi0JCQkJCSBhY3BpX2JhdHRlcnlfZGlyLAotCQkJCQkgZGlyX25hbWUsCi0JCQkJCSAmYWNwaV9iYXR0ZXJ5X2luZm9fZm9wcywKLQkJCQkJICZhY3BpX2JhdHRlcnlfc3RhdGVfZm9wcywKLQkJCQkJICZhY3BpX2JhdHRlcnlfYWxhcm1fZm9wcywgYmF0dGVyeSk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX2dlbmVyaWNfYWRkX2ZzKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0JYmF0dGVyeS0+YWxpdmUgPSAxOwotCisJYmF0dGVyeS0+YmF0LmdldF9wcm9wZXJ0eSA9IGFjcGlfc2JzX2JhdHRlcnlfZ2V0X3Byb3BlcnR5OworCXJlc3VsdCA9IHBvd2VyX3N1cHBseV9yZWdpc3Rlcigmc2JzLT5kZXZpY2UtPmRldiwgJmJhdHRlcnktPmJhdCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKGJhdHRlcnktPmJhdC5kZXYsICZhbGFybV9hdHRyKTsKIAlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgWyVzXTogQmF0dGVyeSBTbG90IFslc10gKGJhdHRlcnkgJXMpXG4iLAotCSAgICAgICBBQ1BJX1NCU19ERVZJQ0VfTkFNRSwgYWNwaV9kZXZpY2VfYmlkKHNicy0+ZGV2aWNlKSwgZGlyX25hbWUsCi0JICAgICAgIHNicy0+YmF0dGVyeS0+YmF0dGVyeV9wcmVzZW50ID8gInByZXNlbnQiIDogImFic2VudCIpOwotCi0gICAgICBlbmQ6CisJICAgICAgIEFDUElfU0JTX0RFVklDRV9OQU1FLCBhY3BpX2RldmljZV9iaWQoc2JzLT5kZXZpY2UpLAorCSAgICAgICBiYXR0ZXJ5LT5uYW1lLCBzYnMtPmJhdHRlcnktPnByZXNlbnQgPyAicHJlc2VudCIgOiAiYWJzZW50Iik7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQgYWNwaV9iYXR0ZXJ5X3JlbW92ZShzdHJ1Y3QgYWNwaV9zYnMgKnNicywgaW50IGlkKQogewotCi0JaWYgKHNicy0+YmF0dGVyeVtpZF0uYmF0dGVyeV9lbnRyeSkgewotCQlhY3BpX3Nic19nZW5lcmljX3JlbW92ZV9mcygmKHNicy0+YmF0dGVyeVtpZF0uYmF0dGVyeV9lbnRyeSksCi0JCQkJCSAgIGFjcGlfYmF0dGVyeV9kaXIpOworCWlmIChzYnMtPmJhdHRlcnlbaWRdLmJhdC5kZXYpCisJCWRldmljZV9yZW1vdmVfZmlsZShzYnMtPmJhdHRlcnlbaWRdLmJhdC5kZXYsICZhbGFybV9hdHRyKTsKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJnNicy0+YmF0dGVyeVtpZF0uYmF0KTsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKKwlpZiAoc2JzLT5iYXR0ZXJ5W2lkXS5wcm9jX2VudHJ5KSB7CisJCWFjcGlfc2JzX3JlbW92ZV9mcygmKHNicy0+YmF0dGVyeVtpZF0ucHJvY19lbnRyeSksCisJCQkJICAgYWNwaV9iYXR0ZXJ5X2Rpcik7CiAJfQorI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgYWNwaV9hY19hZGQoc3RydWN0IGFjcGlfc2JzICpzYnMpCitzdGF0aWMgaW50IGFjcGlfY2hhcmdlcl9hZGQoc3RydWN0IGFjcGlfc2JzICpzYnMpCiB7CiAJaW50IHJlc3VsdDsKIAogCXJlc3VsdCA9IGFjcGlfYWNfZ2V0X3ByZXNlbnQoc2JzKTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9hY19nZXRfcHJlc2VudCgpIGZhaWxlZCIpKTsKKwlpZiAocmVzdWx0KQogCQlnb3RvIGVuZDsKLQl9Ci0KLQlyZXN1bHQgPSBhY3BpX3Nic19nZW5lcmljX2FkZF9mcygmc2JzLT5hY19lbnRyeSwKLQkJCQkJIGFjcGlfYWNfZGlyLAotCQkJCQkgQUNQSV9BQ19ESVJfTkFNRSwKLQkJCQkJIE5VTEwsICZhY3BpX2FjX3N0YXRlX2ZvcHMsIE5VTEwsIHNicyk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfc2JzX2dlbmVyaWNfYWRkX2ZzKCkgZmFpbGVkIikpOworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUworCXJlc3VsdCA9IGFjcGlfc2JzX2FkZF9mcygmc2JzLT5jaGFyZ2VyX2VudHJ5LCBhY3BpX2FjX2RpciwKKwkJCQkgQUNQSV9BQ19ESVJfTkFNRSwgTlVMTCwKKwkJCQkgJmFjcGlfYWNfc3RhdGVfZm9wcywgTlVMTCwgc2JzKTsKKwlpZiAocmVzdWx0KQogCQlnb3RvIGVuZDsKLQl9Ci0KKyNlbmRpZgorCXNicy0+Y2hhcmdlci5uYW1lID0gInNicy1jaGFyZ2VyIjsKKwlzYnMtPmNoYXJnZXIudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX01BSU5TOworCXNicy0+Y2hhcmdlci5wcm9wZXJ0aWVzID0gc2JzX2FjX3Byb3BzOworCXNicy0+Y2hhcmdlci5udW1fcHJvcGVydGllcyA9IEFSUkFZX1NJWkUoc2JzX2FjX3Byb3BzKTsKKwlzYnMtPmNoYXJnZXIuZ2V0X3Byb3BlcnR5ID0gc2JzX2dldF9hY19wcm9wZXJ0eTsKKwlwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnNicy0+ZGV2aWNlLT5kZXYsICZzYnMtPmNoYXJnZXIpOwogCXByaW50ayhLRVJOX0lORk8gUFJFRklYICIlcyBbJXNdOiBBQyBBZGFwdGVyIFslc10gKCVzKVxuIiwKIAkgICAgICAgQUNQSV9TQlNfREVWSUNFX05BTUUsIGFjcGlfZGV2aWNlX2JpZChzYnMtPmRldmljZSksCi0JICAgICAgIEFDUElfQUNfRElSX05BTUUsIHNicy0+YWMuYWNfcHJlc2VudCA/ICJvbi1saW5lIiA6ICJvZmYtbGluZSIpOwotCisJICAgICAgIEFDUElfQUNfRElSX05BTUUsIHNicy0+Y2hhcmdlcl9wcmVzZW50ID8gIm9uLWxpbmUiIDogIm9mZi1saW5lIik7CiAgICAgICBlbmQ6Ci0KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBhY3BpX2FjX3JlbW92ZShzdHJ1Y3QgYWNwaV9zYnMgKnNicykKK3N0YXRpYyB2b2lkIGFjcGlfY2hhcmdlcl9yZW1vdmUoc3RydWN0IGFjcGlfc2JzICpzYnMpCiB7CisJaWYgKHNicy0+Y2hhcmdlci5kZXYpCisJCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZzYnMtPmNoYXJnZXIpOworI2lmZGVmIENPTkZJR19BQ1BJX1BST0NGUworCWlmIChzYnMtPmNoYXJnZXJfZW50cnkpCisJCWFjcGlfc2JzX3JlbW92ZV9mcygmc2JzLT5jaGFyZ2VyX2VudHJ5LCBhY3BpX2FjX2Rpcik7CisjZW5kaWYKK30KIAotCWlmIChzYnMtPmFjX2VudHJ5KSB7Ci0JCWFjcGlfc2JzX2dlbmVyaWNfcmVtb3ZlX2ZzKCZzYnMtPmFjX2VudHJ5LCBhY3BpX2FjX2Rpcik7Cit2b2lkIGFjcGlfc2JzX2NhbGxiYWNrKHZvaWQgKmNvbnRleHQpCit7CisJaW50IGlkOworCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gY29udGV4dDsKKwlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXQ7CisJdTggc2F2ZWRfY2hhcmdlcl9zdGF0ZSA9IHNicy0+Y2hhcmdlcl9wcmVzZW50OworCXU4IHNhdmVkX2JhdHRlcnlfc3RhdGU7CisJYWNwaV9hY19nZXRfcHJlc2VudChzYnMpOworCWlmIChzYnMtPmNoYXJnZXJfcHJlc2VudCAhPSBzYXZlZF9jaGFyZ2VyX3N0YXRlKSB7CisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ19FVkVOVAorCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50NChBQ1BJX0FDX0NMQVNTLCBBQ1BJX0FDX0RJUl9OQU1FLAorCQkJCQkgICAgICBBQ1BJX1NCU19OT1RJRllfU1RBVFVTLAorCQkJCQkgICAgICBzYnMtPmNoYXJnZXJfcHJlc2VudCk7CisjZW5kaWYKKwkJa29iamVjdF91ZXZlbnQoJnNicy0+Y2hhcmdlci5kZXYtPmtvYmosIEtPQkpfQ0hBTkdFKTsKKwl9CisJaWYgKHNicy0+bWFuYWdlcl9wcmVzZW50KSB7CisJCWZvciAoaWQgPSAwOyBpZCA8IE1BWF9TQlNfQkFUOyArK2lkKSB7CisJCQlpZiAoIShzYnMtPmJhdHRlcmllc19zdXBwb3J0ZWQgJiAoMSA8PCBpZCkpKQorCQkJCWNvbnRpbnVlOworCQkJYmF0ID0gJnNicy0+YmF0dGVyeVtpZF07CisJCQlzYXZlZF9iYXR0ZXJ5X3N0YXRlID0gYmF0LT5wcmVzZW50OworCQkJYWNwaV9iYXR0ZXJ5X3JlYWQoYmF0KTsKKwkJCWlmIChzYXZlZF9iYXR0ZXJ5X3N0YXRlID09IGJhdC0+cHJlc2VudCkKKwkJCQljb250aW51ZTsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DX0VWRU5UCisJCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50NChBQ1BJX0JBVFRFUllfQ0xBU1MsCisJCQkJCQkgICAgICBiYXQtPm5hbWUsCisJCQkJCQkgICAgICBBQ1BJX1NCU19OT1RJRllfU1RBVFVTLAorCQkJCQkJICAgICAgYmF0LT5wcmVzZW50KTsKKyNlbmRpZgorCQkJa29iamVjdF91ZXZlbnQoJmJhdC0+YmF0LmRldi0+a29iaiwgS09CSl9DSEFOR0UpOworCQl9CiAJfQogfQogCi1zdGF0aWMgdm9pZCBhY3BpX3Nic191cGRhdGVfdGltZV9ydW4odW5zaWduZWQgbG9uZyBkYXRhKQotewotCWFjcGlfb3NfZXhlY3V0ZShPU0xfR1BFX0hBTkRMRVIsIGFjcGlfc2JzX3VwZGF0ZV90aW1lLCAodm9pZCAqKWRhdGEpOwotfQotCi1zdGF0aWMgaW50IGFjcGlfc2JzX3VwZGF0ZV9ydW4oc3RydWN0IGFjcGlfc2JzICpzYnMsIGludCBpZCwgaW50IGRhdGFfdHlwZSkKLXsKLQlzdHJ1Y3QgYWNwaV9iYXR0ZXJ5ICpiYXR0ZXJ5OwotCWludCByZXN1bHQgPSAwLCBjbnQ7Ci0JaW50IG9sZF9hY19wcmVzZW50ID0gLTE7Ci0JaW50IG9sZF9iYXR0ZXJ5X3ByZXNlbnQgPSAtMTsKLQlpbnQgbmV3X2FjX3ByZXNlbnQgPSAtMTsKLQlpbnQgbmV3X2JhdHRlcnlfcHJlc2VudCA9IC0xOwotCWludCBpZF9taW4gPSAwLCBpZF9tYXggPSBNQVhfU0JTX0JBVCAtIDE7Ci0JY2hhciBkaXJfbmFtZVszMl07Ci0JaW50IGRvX2JhdHRlcnlfaW5pdCA9IDAsIGRvX2FjX2luaXQgPSAwOwotCWludCBvbGRfcmVtYWluaW5nX2NhcGFjaXR5ID0gMDsKLQlpbnQgdXBkYXRlX2JhdHRlcnkgPSAxOwotCWludCB1cF90bSA9IHVwZGF0ZV90aW1lOwotCi0JaWYgKHNic196b21iaWUoc2JzKSkgewotCQlnb3RvIGVuZDsKLQl9Ci0KLQlpZiAoaWQgPj0gMCkgewotCQlpZF9taW4gPSBpZF9tYXggPSBpZDsKLQl9Ci0KLQlpZiAoZGF0YV90eXBlID09IERBVEFfVFlQRV9DT01NT04gJiYgdXBfdG0gPiAwKSB7Ci0JCWNudCA9IHVwX3RtIC8gKHVwX3RtID4gVVBEQVRFX0RFTEFZID8gVVBEQVRFX0RFTEFZIDogdXBfdG0pOwotCQlpZiAoc2JzLT5ydW5fY250ICUgY250ICE9IDApIHsKLQkJCXVwZGF0ZV9iYXR0ZXJ5ID0gMDsKLQkJfQotCX0KLQotCXNicy0+cnVuX2NudCsrOwotCi0Jb2xkX2FjX3ByZXNlbnQgPSBzYnMtPmFjLmFjX3ByZXNlbnQ7Ci0KLQlyZXN1bHQgPSBhY3BpX2FjX2dldF9wcmVzZW50KHNicyk7Ci0JaWYgKHJlc3VsdCkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfYWNfZ2V0X3ByZXNlbnQoKSBmYWlsZWQiKSk7Ci0JfQotCi0JbmV3X2FjX3ByZXNlbnQgPSBzYnMtPmFjLmFjX3ByZXNlbnQ7Ci0KLQlkb19hY19pbml0ID0gKG9sZF9hY19wcmVzZW50ICE9IG5ld19hY19wcmVzZW50KTsKLQlpZiAoc2JzLT5ydW5fY250ID09IDEgJiYgZGF0YV90eXBlID09IERBVEFfVFlQRV9DT01NT04pIHsKLQkJZG9fYWNfaW5pdCA9IDE7Ci0JfQotCi0JaWYgKGRvX2FjX2luaXQpIHsKLQkJcmVzdWx0ID0gYWNwaV9zYnNfZ2VuZXJhdGVfZXZlbnQoc2JzLT5kZXZpY2UsCi0JCQkJCQkgQUNQSV9TQlNfQUNfTk9USUZZX1NUQVRVUywKLQkJCQkJCSBuZXdfYWNfcHJlc2VudCwKLQkJCQkJCSBBQ1BJX0FDX0RJUl9OQU1FLAotCQkJCQkJIEFDUElfQUNfQ0xBU1MpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX3Nic19nZW5lcmF0ZV9ldmVudCgpIGZhaWxlZCIpKTsKLQkJfQotCX0KLQotCWlmIChkYXRhX3R5cGUgPT0gREFUQV9UWVBFX0NPTU1PTikgewotCQlpZiAoIWRvX2FjX2luaXQgJiYgIXVwZGF0ZV9iYXR0ZXJ5KSB7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCX0KLQotCWlmIChkYXRhX3R5cGUgPT0gREFUQV9UWVBFX0FDX1NUQVRFICYmICFkb19hY19pbml0KSB7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWZvciAoaWQgPSBpZF9taW47IGlkIDw9IGlkX21heDsgaWQrKykgewotCQliYXR0ZXJ5ID0gJnNicy0+YmF0dGVyeVtpZF07Ci0JCWlmIChiYXR0ZXJ5LT5hbGl2ZSA9PSAwKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCW9sZF9yZW1haW5pbmdfY2FwYWNpdHkgPSBiYXR0ZXJ5LT5zdGF0ZS5yZW1haW5pbmdfY2FwYWNpdHk7Ci0KLQkJb2xkX2JhdHRlcnlfcHJlc2VudCA9IGJhdHRlcnktPmJhdHRlcnlfcHJlc2VudDsKLQotCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfc2VsZWN0KGJhdHRlcnkpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX2JhdHRlcnlfc2VsZWN0KCkgZmFpbGVkIikpOwotCQl9Ci0KLQkJcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2dldF9wcmVzZW50KGJhdHRlcnkpOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX2JhdHRlcnlfZ2V0X3ByZXNlbnQoKSBmYWlsZWQiKSk7Ci0JCX0KLQotCQluZXdfYmF0dGVyeV9wcmVzZW50ID0gYmF0dGVyeS0+YmF0dGVyeV9wcmVzZW50OwotCi0JCWRvX2JhdHRlcnlfaW5pdCA9ICgob2xkX2JhdHRlcnlfcHJlc2VudCAhPSBuZXdfYmF0dGVyeV9wcmVzZW50KQotCQkJCSAgICYmIG5ld19iYXR0ZXJ5X3ByZXNlbnQpOwotCQlpZiAoIW5ld19iYXR0ZXJ5X3ByZXNlbnQpCi0JCQlnb3RvIGV2ZW50OwotCQlpZiAoZG9fYWNfaW5pdCB8fCBkb19iYXR0ZXJ5X2luaXQpIHsKLQkJCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9pbml0KGJhdHRlcnkpOwotCQkJaWYgKHJlc3VsdCkgewotCQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkJCSJhY3BpX2JhdHRlcnlfaW5pdCgpICIKLQkJCQkJCSJmYWlsZWQiKSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKHNic196b21iaWUoc2JzKSkgewotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlpZiAoKGRhdGFfdHlwZSA9PSBEQVRBX1RZUEVfQ09NTU9OCi0JCSAgICAgfHwgZGF0YV90eXBlID09IERBVEFfVFlQRV9JTkZPKQotCQkgICAgJiYgbmV3X2JhdHRlcnlfcHJlc2VudCkgewotCQkJcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2dldF9pbmZvKGJhdHRlcnkpOwotCQkJaWYgKHJlc3VsdCkgewotCQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkJCSJhY3BpX2JhdHRlcnlfZ2V0X2luZm8oKSBmYWlsZWQiKSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRhdGFfdHlwZSA9PSBEQVRBX1RZUEVfSU5GTykgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHNic196b21iaWUoc2JzKSkgewotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlpZiAoKGRhdGFfdHlwZSA9PSBEQVRBX1RZUEVfQ09NTU9OCi0JCSAgICAgfHwgZGF0YV90eXBlID09IERBVEFfVFlQRV9TVEFURSkKLQkJICAgICYmIG5ld19iYXR0ZXJ5X3ByZXNlbnQpIHsKLQkJCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoYmF0dGVyeSk7Ci0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkJImFjcGlfYmF0dGVyeV9nZXRfc3RhdGUoKSBmYWlsZWQiKSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGRhdGFfdHlwZSA9PSBEQVRBX1RZUEVfU1RBVEUpIHsKLQkJCWdvdG8gZXZlbnQ7Ci0JCX0KLQkJaWYgKHNic196b21iaWUoc2JzKSkgewotCQkJZ290byBlbmQ7Ci0JCX0KLQotCQlpZiAoKGRhdGFfdHlwZSA9PSBEQVRBX1RZUEVfQ09NTU9OCi0JCSAgICAgfHwgZGF0YV90eXBlID09IERBVEFfVFlQRV9BTEFSTSkKLQkJICAgICYmIG5ld19iYXR0ZXJ5X3ByZXNlbnQpIHsKLQkJCXJlc3VsdCA9IGFjcGlfYmF0dGVyeV9nZXRfYWxhcm0oYmF0dGVyeSk7Ci0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkJImFjcGlfYmF0dGVyeV9nZXRfYWxhcm0oKSAiCi0JCQkJCQkiZmFpbGVkIikpOwotCQkJfQotCQl9Ci0JCWlmIChkYXRhX3R5cGUgPT0gREFUQV9UWVBFX0FMQVJNKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc2JzX3pvbWJpZShzYnMpKSB7Ci0JCQlnb3RvIGVuZDsKLQkJfQotCi0JICAgICAgZXZlbnQ6Ci0KLQkJaWYgKG9sZF9iYXR0ZXJ5X3ByZXNlbnQgIT0gbmV3X2JhdHRlcnlfcHJlc2VudCB8fCBkb19hY19pbml0IHx8Ci0JCSAgICBvbGRfcmVtYWluaW5nX2NhcGFjaXR5ICE9Ci0JCSAgICBiYXR0ZXJ5LT5zdGF0ZS5yZW1haW5pbmdfY2FwYWNpdHkpIHsKLQkJCXNwcmludGYoZGlyX25hbWUsIEFDUElfQkFUVEVSWV9ESVJfTkFNRSwgaWQpOwotCQkJcmVzdWx0ID0gYWNwaV9zYnNfZ2VuZXJhdGVfZXZlbnQoc2JzLT5kZXZpY2UsCi0JCQkJCQkJIEFDUElfU0JTX0JBVFRFUllfTk9USUZZX1NUQVRVUywKLQkJCQkJCQkgbmV3X2JhdHRlcnlfcHJlc2VudCwKLQkJCQkJCQkgZGlyX25hbWUsCi0JCQkJCQkJIEFDUElfQkFUVEVSWV9DTEFTUyk7Ci0JCQlpZiAocmVzdWx0KSB7Ci0JCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkJImFjcGlfc2JzX2dlbmVyYXRlX2V2ZW50KCkgIgotCQkJCQkJImZhaWxlZCIpKTsKLQkJCX0KLQkJfQotCX0KLQotICAgICAgZW5kOgotCi0JcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIHZvaWQgYWNwaV9zYnNfdXBkYXRlX3RpbWUodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYWNwaV9zYnMgKnNicyA9IGRhdGE7Ci0JdW5zaWduZWQgbG9uZyBkZWxheSA9IC0xOwotCWludCByZXN1bHQ7Ci0JdW5zaWduZWQgaW50IHVwX3RtID0gdXBkYXRlX3RpbWU7Ci0KLQlpZiAoc2JzX211dGV4X2xvY2soc2JzKSkKLQkJcmV0dXJuOwotCi0JcmVzdWx0ID0gYWNwaV9zYnNfdXBkYXRlX3J1bihzYnMsIC0xLCBEQVRBX1RZUEVfQ09NTU9OKTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9zYnNfdXBkYXRlX3J1bigpIGZhaWxlZCIpKTsKLQl9Ci0KLQlpZiAoc2JzX3pvbWJpZShzYnMpKSB7Ci0JCWdvdG8gZW5kOwotCX0KLQotCWlmICghdXBfdG0pIHsKLQkJaWYgKHRpbWVyX3BlbmRpbmcoJnNicy0+dXBkYXRlX3RpbWVyKSkKLQkJCWRlbF90aW1lcigmc2JzLT51cGRhdGVfdGltZXIpOwotCX0gZWxzZSB7Ci0JCWRlbGF5ID0gKHVwX3RtID4gVVBEQVRFX0RFTEFZID8gVVBEQVRFX0RFTEFZIDogdXBfdG0pOwotCQlkZWxheSA9IGppZmZpZXMgKyBIWiAqIGRlbGF5OwotCQlpZiAodGltZXJfcGVuZGluZygmc2JzLT51cGRhdGVfdGltZXIpKSB7Ci0JCQltb2RfdGltZXIoJnNicy0+dXBkYXRlX3RpbWVyLCBkZWxheSk7Ci0JCX0gZWxzZSB7Ci0JCQlzYnMtPnVwZGF0ZV90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGF0YTsKLQkJCXNicy0+dXBkYXRlX3RpbWVyLmZ1bmN0aW9uID0gYWNwaV9zYnNfdXBkYXRlX3RpbWVfcnVuOwotCQkJc2JzLT51cGRhdGVfdGltZXIuZXhwaXJlcyA9IGRlbGF5OwotCQkJYWRkX3RpbWVyKCZzYnMtPnVwZGF0ZV90aW1lcik7Ci0JCX0KLQl9Ci0KLSAgICAgIGVuZDoKLQotCXNic19tdXRleF91bmxvY2soc2JzKTsKLX0KK3N0YXRpYyBpbnQgYWNwaV9zYnNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CiAKIHN0YXRpYyBpbnQgYWNwaV9zYnNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQogewotCXN0cnVjdCBhY3BpX3NicyAqc2JzID0gTlVMTDsKLQlpbnQgcmVzdWx0ID0gMCwgcmVtb3ZlX3Jlc3VsdCA9IDA7CisJc3RydWN0IGFjcGlfc2JzICpzYnM7CisJaW50IHJlc3VsdCA9IDA7CiAJaW50IGlkOwotCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwotCXVuc2lnbmVkIGxvbmcgdmFsOwotCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+aGFuZGxlLCAiX0VDIiwgTlVMTCwgJnZhbCk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwgIkVycm9yIG9idGFpbmluZyBfRUMiKSk7Ci0JCXJldHVybiAtRUlPOwotCX0KIAogCXNicyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhY3BpX3NicyksIEdGUF9LRVJORUwpOwogCWlmICghc2JzKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwgImt6YWxsb2MoKSBmYWlsZWQiKSk7CiAJCXJlc3VsdCA9IC1FTk9NRU07CiAJCWdvdG8gZW5kOwogCX0KIAotCW11dGV4X2luaXQoJnNicy0+bXV0ZXgpOworCW11dGV4X2luaXQoJnNicy0+bG9jayk7CiAKLQlzYnNfbXV0ZXhfbG9jayhzYnMpOwotCi0Jc2JzLT5iYXNlID0gMHhmZiAmICh2YWwgPj4gOCk7CisJc2JzLT5oYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlLT5wYXJlbnQpOwogCXNicy0+ZGV2aWNlID0gZGV2aWNlOwotCiAJc3RyY3B5KGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgQUNQSV9TQlNfREVWSUNFX05BTUUpOwogCXN0cmNweShhY3BpX2RldmljZV9jbGFzcyhkZXZpY2UpLCBBQ1BJX1NCU19DTEFTUyk7CiAJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gc2JzOwogCi0JcmVzdWx0ID0gYWNwaV9hY19hZGQoc2JzKTsKLQlpZiAocmVzdWx0KSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwgImFjcGlfYWNfYWRkKCkgZmFpbGVkIikpOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlhY3BpX3Nic21fZ2V0X2luZm8oc2JzKTsKLQotCWlmICghc2JzLT5zYnNtX3ByZXNlbnQpIHsKLQkJcmVzdWx0ID0gYWNwaV9iYXR0ZXJ5X2FkZChzYnMsIDApOwotCQlpZiAocmVzdWx0KSB7Ci0JCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJCSJhY3BpX2JhdHRlcnlfYWRkKCkgZmFpbGVkIikpOwotCQkJZ290byBlbmQ7Ci0JCX0KLQl9IGVsc2UgewotCQlmb3IgKGlkID0gMDsgaWQgPCBNQVhfU0JTX0JBVDsgaWQrKykgewotCQkJaWYgKChzYnMtPnNic21fYmF0dGVyaWVzX3N1cHBvcnRlZCAmICgxIDw8IGlkKSkpIHsKLQkJCQlyZXN1bHQgPSBhY3BpX2JhdHRlcnlfYWRkKHNicywgaWQpOwotCQkJCWlmIChyZXN1bHQpIHsKLQkJCQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCQkJCSJhY3BpX2JhdHRlcnlfYWRkKCkgZmFpbGVkIikpOwotCQkJCQlnb3RvIGVuZDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpbml0X3RpbWVyKCZzYnMtPnVwZGF0ZV90aW1lcik7Ci0JcmVzdWx0ID0gYWNwaV9jaGVja191cGRhdGVfcHJvYyhzYnMpOworCXJlc3VsdCA9IGFjcGlfY2hhcmdlcl9hZGQoc2JzKTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGVuZDsKIAorCXJlc3VsdCA9IGFjcGlfbWFuYWdlcl9nZXRfaW5mbyhzYnMpOworCWlmICghcmVzdWx0KSB7CisJCXNicy0+bWFuYWdlcl9wcmVzZW50ID0gMTsKKwkJZm9yIChpZCA9IDA7IGlkIDwgTUFYX1NCU19CQVQ7ICsraWQpCisJCQlpZiAoKHNicy0+YmF0dGVyaWVzX3N1cHBvcnRlZCAmICgxIDw8IGlkKSkpCisJCQkJYWNwaV9iYXR0ZXJ5X2FkZChzYnMsIGlkKTsKKwl9IGVsc2UKKwkJYWNwaV9iYXR0ZXJ5X2FkZChzYnMsIDApOworCWFjcGlfc21idXNfcmVnaXN0ZXJfY2FsbGJhY2soc2JzLT5oYywgYWNwaV9zYnNfY2FsbGJhY2ssIHNicyk7CiAgICAgICBlbmQ6Ci0KLQlzYnNfbXV0ZXhfdW5sb2NrKHNicyk7Ci0KLQlpZiAocmVzdWx0KSB7Ci0JCXJlbW92ZV9yZXN1bHQgPSBhY3BpX3Nic19yZW1vdmUoZGV2aWNlLCAwKTsKLQkJaWYgKHJlbW92ZV9yZXN1bHQpIHsKLQkJCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkJImFjcGlfc2JzX3JlbW92ZSgpIGZhaWxlZCIpKTsKLQkJfQotCX0KLQorCWlmIChyZXN1bHQpCisJCWFjcGlfc2JzX3JlbW92ZShkZXZpY2UsIDApOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE3MTMsMzkgKzk0NywyNSBAQAogCXN0cnVjdCBhY3BpX3NicyAqc2JzOwogCWludCBpZDsKIAotCWlmICghZGV2aWNlKSB7CisJaWYgKCFkZXZpY2UpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXNicyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKLQlpZiAoIXNicykgeworCWlmICghc2JzKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzYnNfbXV0ZXhfbG9jayhzYnMpOwotCi0Jc2JzLT56b21iaWUgPSAxOwotCWRlbF90aW1lcl9zeW5jKCZzYnMtPnVwZGF0ZV90aW1lcik7Ci0JYWNwaV9vc193YWl0X2V2ZW50c19jb21wbGV0ZShOVUxMKTsKLQlkZWxfdGltZXJfc3luYygmc2JzLT51cGRhdGVfdGltZXIpOwotCi0JZm9yIChpZCA9IDA7IGlkIDwgTUFYX1NCU19CQVQ7IGlkKyspIHsKKwltdXRleF9sb2NrKCZzYnMtPmxvY2spOworCWFjcGlfc21idXNfdW5yZWdpc3Rlcl9jYWxsYmFjayhzYnMtPmhjKTsKKwlmb3IgKGlkID0gMDsgaWQgPCBNQVhfU0JTX0JBVDsgKytpZCkKIAkJYWNwaV9iYXR0ZXJ5X3JlbW92ZShzYnMsIGlkKTsKLQl9Ci0KLQlhY3BpX2FjX3JlbW92ZShzYnMpOwotCi0Jc2JzX211dGV4X3VubG9jayhzYnMpOwotCi0JbXV0ZXhfZGVzdHJveSgmc2JzLT5tdXRleCk7Ci0KKwlhY3BpX2NoYXJnZXJfcmVtb3ZlKHNicyk7CisJbXV0ZXhfdW5sb2NrKCZzYnMtPmxvY2spOworCW11dGV4X2Rlc3Ryb3koJnNicy0+bG9jayk7CiAJa2ZyZWUoc2JzKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBhY3BpX3Nic19ybWRpcnModm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfQUNQSV9QUk9DRlMKIAlpZiAoYWNwaV9hY19kaXIpIHsKIAkJYWNwaV91bmxvY2tfYWNfZGlyKGFjcGlfYWNfZGlyKTsKIAkJYWNwaV9hY19kaXIgPSBOVUxMOwpAQCAtMTc1NCw2OSArOTc0LDU4IEBACiAJCWFjcGlfdW5sb2NrX2JhdHRlcnlfZGlyKGFjcGlfYmF0dGVyeV9kaXIpOwogCQlhY3BpX2JhdHRlcnlfZGlyID0gTlVMTDsKIAl9CisjZW5kaWYKIH0KIAogc3RhdGljIGludCBhY3BpX3Nic19yZXN1bWUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGFjcGlfc2JzICpzYnM7Ci0KIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlzYnMgPSBkZXZpY2UtPmRyaXZlcl9kYXRhOwotCi0Jc2JzLT5ydW5fY250ID0gMDsKLQorCWFjcGlfc2JzX2NhbGxiYWNrKHNicyk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9zYnNfZHJpdmVyID0geworCS5uYW1lID0gInNicyIsCisJLmNsYXNzID0gQUNQSV9TQlNfQ0xBU1MsCisJLmlkcyA9IHNic19kZXZpY2VfaWRzLAorCS5vcHMgPSB7CisJCS5hZGQgPSBhY3BpX3Nic19hZGQsCisJCS5yZW1vdmUgPSBhY3BpX3Nic19yZW1vdmUsCisJCS5yZXN1bWUgPSBhY3BpX3Nic19yZXN1bWUsCisJCX0sCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX3Nic19pbml0KHZvaWQpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoY2FwYWNpdHlfbW9kZSAhPSBERUZfQ0FQQUNJVFlfVU5JVAotCSAgICAmJiBjYXBhY2l0eV9tb2RlICE9IE1BSF9DQVBBQ0lUWV9VTklUCi0JICAgICYmIGNhcGFjaXR5X21vZGUgIT0gTVdIX0NBUEFDSVRZX1VOSVQpIHsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIEFFX0VSUk9SLAotCQkJCSJpbnZhbGlkIGNhcGFjaXR5X21vZGUgPSAlZCIsIGNhcGFjaXR5X21vZGUpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCisjaWZkZWYgQ09ORklHX0FDUElfUFJPQ0ZTCiAJYWNwaV9hY19kaXIgPSBhY3BpX2xvY2tfYWNfZGlyKCk7Ci0JaWYgKCFhY3BpX2FjX2RpcikgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfbG9ja19hY19kaXIoKSBmYWlsZWQiKSk7CisJaWYgKCFhY3BpX2FjX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJYWNwaV9iYXR0ZXJ5X2RpciA9IGFjcGlfbG9ja19iYXR0ZXJ5X2RpcigpOwogCWlmICghYWNwaV9iYXR0ZXJ5X2RpcikgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgQUVfRVJST1IsCi0JCQkJImFjcGlfbG9ja19iYXR0ZXJ5X2RpcigpIGZhaWxlZCIpKTsKIAkJYWNwaV9zYnNfcm1kaXJzKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQorI2VuZGlmCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3Nic19kcml2ZXIpOwogCWlmIChyZXN1bHQgPCAwKSB7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBBRV9FUlJPUiwKLQkJCQkiYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCkgZmFpbGVkIikpOwogCQlhY3BpX3Nic19ybWRpcnMoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3Nic19leGl0KHZvaWQpCiB7CiAJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfc2JzX2RyaXZlcik7Ci0KIAlhY3BpX3Nic19ybWRpcnMoKTsKLQogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nic2hjLmMgYi9kcml2ZXJzL2FjcGkvc2JzaGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDZkN2MzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hY3BpL3Nic2hjLmMKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBTTUJ1cyBkcml2ZXIgZm9yIEFDUEkgRW1iZWRkZWQgQ29udHJvbGxlciAodjAuMSkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcgQWxleGV5IFN0YXJpa292c2tpeQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxhY3BpL2FjcGlfZHJpdmVycy5oPgorI2luY2x1ZGUgPGFjcGkvYWN0eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgInNic2hjLmgiCisKKyNkZWZpbmUgQUNQSV9TTUJfSENfQ0xBU1MJInNtYnVzX2hvc3RfY29udHJvbGxlciIKKyNkZWZpbmUgQUNQSV9TTUJfSENfREVWSUNFX05BTUUJIkFDUEkgU01CdXMgSEMiCisKK3N0cnVjdCBhY3BpX3NtYl9oYyB7CisJc3RydWN0IGFjcGlfZWMgKmVjOworCXN0cnVjdCBtdXRleCBsb2NrOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisJdTggb2Zmc2V0OworCXU4IHF1ZXJ5X2JpdDsKKwlzbWJ1c19hbGFybV9jYWxsYmFjayBjYWxsYmFjazsKKwl2b2lkICpjb250ZXh0OworfTsKKworc3RhdGljIGludCBhY3BpX3NtYnVzX2hjX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IGFjcGlfc21idXNfaGNfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWNwaV9kZXZpY2VfaWQgc2JzX2RldmljZV9pZHNbXSA9IHsKKwl7IkFDUEkwMDAxIiwgMH0sCisJeyJBQ1BJMDAwNSIsIDB9LAorCXsiIiwgMH0sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKGFjcGksIHNic19kZXZpY2VfaWRzKTsKKworc3RhdGljIHN0cnVjdCBhY3BpX2RyaXZlciBhY3BpX3NtYl9oY19kcml2ZXIgPSB7CisJLm5hbWUgPSAic21idXNfaGMiLAorCS5jbGFzcyA9IEFDUElfU01CX0hDX0NMQVNTLAorCS5pZHMgPSBzYnNfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gYWNwaV9zbWJ1c19oY19hZGQsCisJCS5yZW1vdmUgPSBhY3BpX3NtYnVzX2hjX3JlbW92ZSwKKwkJfSwKK307CisKK3VuaW9uIGFjcGlfc21iX3N0YXR1cyB7CisJdTggcmF3OworCXN0cnVjdCB7CisJCXU4IHN0YXR1czo1OworCQl1OCByZXNlcnZlZDoxOworCQl1OCBhbGFybToxOworCQl1OCBkb25lOjE7CisJfSBmaWVsZHM7Cit9OworCitlbnVtIGFjcGlfc21iX3N0YXR1c19jb2RlcyB7CisJU01CVVNfT0sgPSAwLAorCVNNQlVTX1VOS05PV05fRkFJTFVSRSA9IDB4MDcsCisJU01CVVNfREVWSUNFX0FERFJFU1NfTkFDSyA9IDB4MTAsCisJU01CVVNfREVWSUNFX0VSUk9SID0gMHgxMSwKKwlTTUJVU19ERVZJQ0VfQ09NTUFORF9BQ0NFU1NfREVOSUVEID0gMHgxMiwKKwlTTUJVU19VTktOT1dOX0VSUk9SID0gMHgxMywKKwlTTUJVU19ERVZJQ0VfQUNDRVNTX0RFTklFRCA9IDB4MTcsCisJU01CVVNfVElNRU9VVCA9IDB4MTgsCisJU01CVVNfSE9TVF9VTlNVUFBPUlRFRF9QUk9UT0NPTCA9IDB4MTksCisJU01CVVNfQlVTWSA9IDB4MWEsCisJU01CVVNfUEVDX0VSUk9SID0gMHgxZiwKK307CisKK2VudW0gYWNwaV9zbWJfb2Zmc2V0IHsKKwlBQ1BJX1NNQl9QUk9UT0NPTCA9IDAsCS8qIHByb3RvY29sLCBQRUMgKi8KKwlBQ1BJX1NNQl9TVEFUVVMgPSAxLAkvKiBzdGF0dXMgKi8KKwlBQ1BJX1NNQl9BRERSRVNTID0gMiwJLyogYWRkcmVzcyAqLworCUFDUElfU01CX0NPTU1BTkQgPSAzLAkvKiBjb21tYW5kICovCisJQUNQSV9TTUJfREFUQSA9IDQsCS8qIDMyIGRhdGEgcmVnaXN0ZXJzICovCisJQUNQSV9TTUJfQkxPQ0tfQ09VTlQgPSAweDI0LAkvKiBudW1iZXIgb2YgZGF0YSBieXRlcyAqLworCUFDUElfU01CX0FMQVJNX0FERFJFU1MgPSAweDI1LAkvKiBhbGFybSBhZGRyZXNzICovCisJQUNQSV9TTUJfQUxBUk1fREFUQSA9IDB4MjYsCS8qIDIgYnl0ZXMgYWxhcm0gZGF0YSAqLworfTsKKworc3RhdGljIGlubGluZSBpbnQgc21iX2hjX3JlYWQoc3RydWN0IGFjcGlfc21iX2hjICpoYywgdTggYWRkcmVzcywgdTggKmRhdGEpCit7CisJcmV0dXJuIGVjX3JlYWQoaGMtPm9mZnNldCArIGFkZHJlc3MsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbWJfaGNfd3JpdGUoc3RydWN0IGFjcGlfc21iX2hjICpoYywgdTggYWRkcmVzcywgdTggZGF0YSkKK3sKKwlyZXR1cm4gZWNfd3JpdGUoaGMtPm9mZnNldCArIGFkZHJlc3MsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzbWJfY2hlY2tfZG9uZShzdHJ1Y3QgYWNwaV9zbWJfaGMgKmhjKQoreworCXVuaW9uIGFjcGlfc21iX3N0YXR1cyBzdGF0dXMgPSB7LnJhdyA9IDB9OworCXNtYl9oY19yZWFkKGhjLCBBQ1BJX1NNQl9TVEFUVVMsICZzdGF0dXMucmF3KTsKKwlyZXR1cm4gc3RhdHVzLmZpZWxkcy5kb25lICYmIChzdGF0dXMuZmllbGRzLnN0YXR1cyA9PSBTTUJVU19PSyk7Cit9CisKK3N0YXRpYyBpbnQgd2FpdF90cmFuc2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3QgYWNwaV9zbWJfaGMgKmhjLCBpbnQgdGltZW91dCkKK3sKKwlpZiAod2FpdF9ldmVudF90aW1lb3V0KGhjLT53YWl0LCBzbWJfY2hlY2tfZG9uZShoYyksCisJCQkgICAgICAgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSkpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC1FVElNRTsKK30KKworaW50IGFjcGlfc21idXNfdHJhbnNhY3Rpb24oc3RydWN0IGFjcGlfc21iX2hjICpoYywgdTggcHJvdG9jb2wsIHU4IGFkZHJlc3MsCisJCSAgICB1OCBjb21tYW5kLCB1OCAqZGF0YSwgdTggbGVuZ3RoKQoreworCWludCByZXQgPSAtRUZBVUxULCBpOworCXU4IHRlbXAsIHN6ID0gMDsKKworCW11dGV4X2xvY2soJmhjLT5sb2NrKTsKKwlpZiAoc21iX2hjX3JlYWQoaGMsIEFDUElfU01CX1BST1RPQ09MLCAmdGVtcCkpCisJCWdvdG8gZW5kOworCWlmICh0ZW1wKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBlbmQ7CisJfQorCXNtYl9oY193cml0ZShoYywgQUNQSV9TTUJfQ09NTUFORCwgY29tbWFuZCk7CisJc21iX2hjX3dyaXRlKGhjLCBBQ1BJX1NNQl9DT01NQU5ELCBjb21tYW5kKTsKKwlpZiAoIShwcm90b2NvbCAmIDB4MDEpKSB7CisJCXNtYl9oY193cml0ZShoYywgQUNQSV9TTUJfQkxPQ0tfQ09VTlQsIGxlbmd0aCk7CisJCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKKwkJCXNtYl9oY193cml0ZShoYywgQUNQSV9TTUJfREFUQSArIGksIGRhdGFbaV0pOworCX0KKwlzbWJfaGNfd3JpdGUoaGMsIEFDUElfU01CX0FERFJFU1MsIGFkZHJlc3MgPDwgMSk7CisJc21iX2hjX3dyaXRlKGhjLCBBQ1BJX1NNQl9QUk9UT0NPTCwgcHJvdG9jb2wpOworCS8qCisJICogV2FpdCBmb3IgY29tcGxldGlvbi4gU2F2ZSB0aGUgc3RhdHVzIGNvZGUsIGRhdGEgc2l6ZSwKKwkgKiBhbmQgZGF0YSBpbnRvIHRoZSByZXR1cm4gcGFja2FnZSAoaWYgcmVxdWlyZWQgYnkgdGhlIHByb3RvY29sKS4KKwkgKi8KKwlyZXQgPSB3YWl0X3RyYW5zYWN0aW9uX2NvbXBsZXRlKGhjLCAxMDAwKTsKKwlpZiAocmV0IHx8ICEocHJvdG9jb2wgJiAweDAxKSkKKwkJZ290byBlbmQ7CisJc3dpdGNoIChwcm90b2NvbCkgeworCWNhc2UgU01CVVNfUkVDRUlWRV9CWVRFOgorCWNhc2UgU01CVVNfUkVBRF9CWVRFOgorCQlzeiA9IDE7CisJCWJyZWFrOworCWNhc2UgU01CVVNfUkVBRF9XT1JEOgorCQlzeiA9IDI7CisJCWJyZWFrOworCWNhc2UgU01CVVNfUkVBRF9CTE9DSzoKKwkJaWYgKHNtYl9oY19yZWFkKGhjLCBBQ1BJX1NNQl9CTE9DS19DT1VOVCwgJnN6KSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZW5kOworCQl9CisJCXN6ICY9IDB4MWY7CisJCWJyZWFrOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgc3o7ICsraSkKKwkJc21iX2hjX3JlYWQoaGMsIEFDUElfU01CX0RBVEEgKyBpLCAmZGF0YVtpXSk7CisgICAgICBlbmQ6CisJbXV0ZXhfdW5sb2NrKCZoYy0+bG9jayk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGFjcGlfc21idXNfcmVhZChzdHJ1Y3QgYWNwaV9zbWJfaGMgKmhjLCB1OCBwcm90b2NvbCwgdTggYWRkcmVzcywKKwkJICAgIHU4IGNvbW1hbmQsIHU4ICpkYXRhKQoreworCXJldHVybiBhY3BpX3NtYnVzX3RyYW5zYWN0aW9uKGhjLCBwcm90b2NvbCwgYWRkcmVzcywgY29tbWFuZCwgZGF0YSwgMCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfc21idXNfcmVhZCk7CisKK2ludCBhY3BpX3NtYnVzX3dyaXRlKHN0cnVjdCBhY3BpX3NtYl9oYyAqaGMsIHU4IHByb3RvY29sLCB1OCBhZGRyZXNzLAorCQkgICAgIHU4IGNvbW1hbmQsIHU4ICpkYXRhLCB1OCBsZW5ndGgpCit7CisJcmV0dXJuIGFjcGlfc21idXNfdHJhbnNhY3Rpb24oaGMsIHByb3RvY29sLCBhZGRyZXNzLCBjb21tYW5kLCBkYXRhLCBsZW5ndGgpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChhY3BpX3NtYnVzX3dyaXRlKTsKKworaW50IGFjcGlfc21idXNfcmVnaXN0ZXJfY2FsbGJhY2soc3RydWN0IGFjcGlfc21iX2hjICpoYywKKwkJCSAgICAgICAgIHNtYnVzX2FsYXJtX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpjb250ZXh0KQoreworCW11dGV4X2xvY2soJmhjLT5sb2NrKTsKKwloYy0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKwloYy0+Y29udGV4dCA9IGNvbnRleHQ7CisJbXV0ZXhfdW5sb2NrKCZoYy0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGFjcGlfc21idXNfcmVnaXN0ZXJfY2FsbGJhY2spOworCitpbnQgYWNwaV9zbWJ1c191bnJlZ2lzdGVyX2NhbGxiYWNrKHN0cnVjdCBhY3BpX3NtYl9oYyAqaGMpCit7CisJbXV0ZXhfbG9jaygmaGMtPmxvY2spOworCWhjLT5jYWxsYmFjayA9IE5VTEw7CisJaGMtPmNvbnRleHQgPSBOVUxMOworCW11dGV4X3VubG9jaygmaGMtPmxvY2spOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChhY3BpX3NtYnVzX3VucmVnaXN0ZXJfY2FsbGJhY2spOworCitzdGF0aWMgdm9pZCBhY3BpX3NtYnVzX2NhbGxiYWNrKHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfc21iX2hjICpoYyA9IGNvbnRleHQ7CisKKwlpZiAoaGMtPmNhbGxiYWNrKQorCQloYy0+Y2FsbGJhY2soaGMtPmNvbnRleHQpOworfQorCitzdGF0aWMgaW50IHNtYnVzX2FsYXJtKHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IGFjcGlfc21iX2hjICpoYyA9IGNvbnRleHQ7CisJdW5pb24gYWNwaV9zbWJfc3RhdHVzIHN0YXR1czsKKwlpZiAoc21iX2hjX3JlYWQoaGMsIEFDUElfU01CX1NUQVRVUywgJnN0YXR1cy5yYXcpKQorCQlyZXR1cm4gMDsKKwkvKiBDaGVjayBpZiBpdCBpcyBvbmx5IGEgY29tcGxldGlvbiBub3RpZnkgKi8KKwlpZiAoc3RhdHVzLmZpZWxkcy5kb25lKQorCQl3YWtlX3VwKCZoYy0+d2FpdCk7CisJaWYgKCFzdGF0dXMuZmllbGRzLmFsYXJtKQorCQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZoYy0+bG9jayk7CisJc21iX2hjX3dyaXRlKGhjLCBBQ1BJX1NNQl9TVEFUVVMsIHN0YXR1cy5yYXcpOworCWlmIChoYy0+Y2FsbGJhY2spCisJCWFjcGlfb3NfZXhlY3V0ZShPU0xfR1BFX0hBTkRMRVIsIGFjcGlfc21idXNfY2FsbGJhY2ssIGhjKTsKKwltdXRleF91bmxvY2soJmhjLT5sb2NrKTsKKwlyZXR1cm4gMDsKK30KKwordHlwZWRlZiBpbnQgKCphY3BpX2VjX3F1ZXJ5X2Z1bmMpICh2b2lkICpkYXRhKTsKKworZXh0ZXJuIGludCBhY3BpX2VjX2FkZF9xdWVyeV9oYW5kbGVyKHN0cnVjdCBhY3BpX2VjICplYywgdTggcXVlcnlfYml0LAorCQkJICAgICAgYWNwaV9oYW5kbGUgaGFuZGxlLCBhY3BpX2VjX3F1ZXJ5X2Z1bmMgZnVuYywKKwkJCSAgICAgIHZvaWQgKmRhdGEpOworCitzdGF0aWMgaW50IGFjcGlfc21idXNfaGNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQoreworCWludCBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJc3RydWN0IGFjcGlfc21iX2hjICpoYzsKKworCWlmICghZGV2aWNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmhhbmRsZSwgIl9FQyIsIE5VTEwsICZ2YWwpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJlcnJvciBvYnRhaW5pbmcgX0VDLlxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfU01CX0hDX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQUNQSV9TTUJfSENfQ0xBU1MpOworCisJaGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWNwaV9zbWJfaGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhjKQorCQlyZXR1cm4gLUVOT01FTTsKKwltdXRleF9pbml0KCZoYy0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaGMtPndhaXQpOworCisJaGMtPmVjID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UtPnBhcmVudCk7CisJaGMtPm9mZnNldCA9ICh2YWwgPj4gOCkgJiAweGZmOworCWhjLT5xdWVyeV9iaXQgPSB2YWwgJiAweGZmOworCWFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKSA9IGhjOworCisJYWNwaV9lY19hZGRfcXVlcnlfaGFuZGxlcihoYy0+ZWMsIGhjLT5xdWVyeV9iaXQsIE5VTEwsIHNtYnVzX2FsYXJtLCBoYyk7CisJcHJpbnRrKEtFUk5fSU5GTyBQUkVGSVggIlNCUyBIQzogRUMgPSAweCVwLCBvZmZzZXQgPSAweCUweCwgcXVlcnlfYml0ID0gMHglMHhcbiIsCisJCWhjLT5lYywgaGMtPm9mZnNldCwgaGMtPnF1ZXJ5X2JpdCk7CisKKwlyZXR1cm4gMDsKK30KKworZXh0ZXJuIHZvaWQgYWNwaV9lY19yZW1vdmVfcXVlcnlfaGFuZGxlcihzdHJ1Y3QgYWNwaV9lYyAqZWMsIHU4IHF1ZXJ5X2JpdCk7CisKK3N0YXRpYyBpbnQgYWNwaV9zbWJ1c19oY19yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQoreworCXN0cnVjdCBhY3BpX3NtYl9oYyAqaGM7CisKKwlpZiAoIWRldmljZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloYyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKKwlhY3BpX2VjX3JlbW92ZV9xdWVyeV9oYW5kbGVyKGhjLT5lYywgaGMtPnF1ZXJ5X2JpdCk7CisJa2ZyZWUoaGMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhY3BpX3NtYl9oY19pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9zbWJfaGNfZHJpdmVyKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX3NtYl9oY19leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfc21iX2hjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGFjcGlfc21iX2hjX2luaXQpOworbW9kdWxlX2V4aXQoYWNwaV9zbWJfaGNfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFsZXhleSBTdGFyaWtvdnNraXkiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQUNQSSBTTUJ1cyBIQyBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zYnNoYy5oIGIvZHJpdmVycy9hY3BpL3Nic2hjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JkYTM0OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYWNwaS9zYnNoYy5oCkBAIC0wLDAgKzEsMjcgQEAKK3N0cnVjdCBhY3BpX3NtYl9oYzsKK2VudW0gYWNwaV9zbWJfcHJvdG9jb2wgeworCVNNQlVTX1dSSVRFX1FVSUNLID0gMiwKKwlTTUJVU19SRUFEX1FVSUNLID0gMywKKwlTTUJVU19TRU5EX0JZVEUgPSA0LAorCVNNQlVTX1JFQ0VJVkVfQllURSA9IDUsCisJU01CVVNfV1JJVEVfQllURSA9IDYsCisJU01CVVNfUkVBRF9CWVRFID0gNywKKwlTTUJVU19XUklURV9XT1JEICA9IDgsCisJU01CVVNfUkVBRF9XT1JEICA9IDksCisJU01CVVNfV1JJVEVfQkxPQ0sgPSAweGEsCisJU01CVVNfUkVBRF9CTE9DSyA9IDB4YiwKKwlTTUJVU19QUk9DRVNTX0NBTEwgPSAweGMsCisJU01CVVNfQkxPQ0tfUFJPQ0VTU19DQUxMID0gMHhkLAorfTsKKworc3RhdGljIGNvbnN0IHU4IFNNQlVTX1BFQyA9IDB4ODA7CisKK3R5cGVkZWYgdm9pZCAoKnNtYnVzX2FsYXJtX2NhbGxiYWNrKSh2b2lkICpjb250ZXh0KTsKKworZXh0ZXJuIGludCBhY3BpX3NtYnVzX3JlYWQoc3RydWN0IGFjcGlfc21iX2hjICpoYywgdTggcHJvdG9jb2wsIHU4IGFkZHJlc3MsCisJICAgICAgIHU4IGNvbW1hbmQsIHU4ICogZGF0YSk7CitleHRlcm4gaW50IGFjcGlfc21idXNfd3JpdGUoc3RydWN0IGFjcGlfc21iX2hjICpoYywgdTggcHJvdG9jb2wsIHU4IHNsYXZlX2FkZHJlc3MsCisJCXU4IGNvbW1hbmQsIHU4ICogZGF0YSwgdTggbGVuZ3RoKTsKK2V4dGVybiBpbnQgYWNwaV9zbWJ1c19yZWdpc3Rlcl9jYWxsYmFjayhzdHJ1Y3QgYWNwaV9zbWJfaGMgKmhjLAorCQkJICAgICAgICAgc21idXNfYWxhcm1fY2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmNvbnRleHQpOworZXh0ZXJuIGludCBhY3BpX3NtYnVzX3VucmVnaXN0ZXJfY2FsbGJhY2soc3RydWN0IGFjcGlfc21iX2hjICpoYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL21haW4uYwppbmRleCA1MDU1YWNmLi5mM2QzODY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvbWFpbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9zbGVlcC9tYWluLmMKQEAgLTQ0LDEzICs0NCwxMiBAQAogCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CiAJYWNwaV9lbmFibGVfd2FrZXVwX2RldmljZV9wcmVwKGFjcGlfc3RhdGUpOwogI2VuZGlmCi0JYWNwaV9ncGVfc2xlZXBfcHJlcGFyZShhY3BpX3N0YXRlKTsKIAlhY3BpX2VudGVyX3NsZWVwX3N0YXRlX3ByZXAoYWNwaV9zdGF0ZSk7CiAJcmV0dXJuIDA7CiB9CiAKICNpZmRlZiBDT05GSUdfU1VTUEVORAotc3RhdGljIHN0cnVjdCBwbV9vcHMgYWNwaV9wbV9vcHM7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIGFjcGlfcG1fb3BzOwogCiBleHRlcm4gdm9pZCBkb19zdXNwZW5kX2xvd2xldmVsKHZvaWQpOwogCkBAIC04NSwxMyArODQsMTIgQEAKIAogLyoqCiAgKglhY3BpX3BtX3ByZXBhcmUgLSBEbyBwcmVsaW1pbmFyeSBzdXNwZW5kIHdvcmsuCi0gKglAcG1fc3RhdGU6IGlnbm9yZWQKICAqCiAgKglJZiBuZWNlc3NhcnksIHNldCB0aGUgZmlybXdhcmUgd2FraW5nIHZlY3RvciBhbmQgZG8gYXJjaC1zcGVjaWZpYwogICoJbmFzdGluZXNzIHRvIGdldCB0aGUgd2FrZXVwIGNvZGUgdG8gdGhlIHdha2luZyB2ZWN0b3IuCiAgKi8KIAotc3RhdGljIGludCBhY3BpX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHBtX3N0YXRlKQorc3RhdGljIGludCBhY3BpX3BtX3ByZXBhcmUodm9pZCkKIHsKIAlpbnQgZXJyb3IgPSBhY3BpX3NsZWVwX3ByZXBhcmUoYWNwaV90YXJnZXRfc2xlZXBfc3RhdGUpOwogCkBAIC0xNjAsMTMgKzE1OCwxMiBAQAogCiAvKioKICAqCWFjcGlfcG1fZmluaXNoIC0gRmluaXNoIHVwIHN1c3BlbmQgc2VxdWVuY2UuCi0gKglAcG1fc3RhdGU6IGlnbm9yZWQKICAqCiAgKglUaGlzIGlzIGNhbGxlZCBhZnRlciB3ZSB3YWtlIGJhY2sgdXAgKG9yIGlmIGVudGVyaW5nIHRoZSBzbGVlcCBzdGF0ZQogICoJZmFpbGVkKS4gCiAgKi8KIAotc3RhdGljIGludCBhY3BpX3BtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3QgcG1fc3RhdGUpCitzdGF0aWMgdm9pZCBhY3BpX3BtX2ZpbmlzaCh2b2lkKQogewogCXUzMiBhY3BpX3N0YXRlID0gYWNwaV90YXJnZXRfc2xlZXBfc3RhdGU7CiAKQEAgLTE4NCw3ICsxODEsNiBAQAogCQlpbml0XzgyNTlBKDApOwogCX0KICNlbmRpZgotCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFjcGlfcG1fc3RhdGVfdmFsaWQoc3VzcGVuZF9zdGF0ZV90IHBtX3N0YXRlKQpAQCAtMjAzLDcgKzE5OSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHBtX29wcyBhY3BpX3BtX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgYWNwaV9wbV9vcHMgPSB7CiAJLnZhbGlkID0gYWNwaV9wbV9zdGF0ZV92YWxpZCwKIAkuc2V0X3RhcmdldCA9IGFjcGlfcG1fc2V0X3RhcmdldCwKIAkucHJlcGFyZSA9IGFjcGlfcG1fcHJlcGFyZSwKQEAgLTIzMyw2ICsyMjksMTIgQEAKICNlbmRpZiAvKiBDT05GSUdfU1VTUEVORCAqLwogCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCitzdGF0aWMgaW50IGFjcGlfaGliZXJuYXRpb25fc3RhcnQodm9pZCkKK3sKKwlhY3BpX3RhcmdldF9zbGVlcF9zdGF0ZSA9IEFDUElfU1RBVEVfUzQ7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgYWNwaV9oaWJlcm5hdGlvbl9wcmVwYXJlKHZvaWQpCiB7CiAJcmV0dXJuIGFjcGlfc2xlZXBfcHJlcGFyZShBQ1BJX1NUQVRFX1M0KTsKQEAgLTI1NCwxMyArMjU2LDI5IEBACiAJcmV0dXJuIEFDUElfU1VDQ0VTUyhzdGF0dXMpID8gMCA6IC1FRkFVTFQ7CiB9CiAKK3N0YXRpYyB2b2lkIGFjcGlfaGliZXJuYXRpb25fbGVhdmUodm9pZCkKK3sKKwkvKgorCSAqIElmIEFDUEkgaXMgbm90IGVuYWJsZWQgYnkgdGhlIEJJT1MgYW5kIHRoZSBib290IGtlcm5lbCwgd2UgbmVlZCB0bworCSAqIGVuYWJsZSBpdCBoZXJlLgorCSAqLworCWFjcGlfZW5hYmxlKCk7Cit9CisKIHN0YXRpYyB2b2lkIGFjcGlfaGliZXJuYXRpb25fZmluaXNoKHZvaWQpCiB7CisJLyoKKwkgKiBJZiBBQ1BJIGlzIG5vdCBlbmFibGVkIGJ5IHRoZSBCSU9TIGFuZCB0aGUgYm9vdCBrZXJuZWwsIHdlIG5lZWQgdG8KKwkgKiBlbmFibGUgaXQgaGVyZS4KKwkgKi8KKwlhY3BpX2VuYWJsZSgpOwogCWFjcGlfbGVhdmVfc2xlZXBfc3RhdGUoQUNQSV9TVEFURV9TNCk7CiAJYWNwaV9kaXNhYmxlX3dha2V1cF9kZXZpY2UoQUNQSV9TVEFURV9TNCk7CiAKIAkvKiByZXNldCBmaXJtd2FyZSB3YWtpbmcgdmVjdG9yICovCiAJYWNwaV9zZXRfZmlybXdhcmVfd2FraW5nX3ZlY3RvcigoYWNwaV9waHlzaWNhbF9hZGRyZXNzKSAwKTsKKworCWFjcGlfdGFyZ2V0X3NsZWVwX3N0YXRlID0gQUNQSV9TVEFURV9TMDsKIH0KIAogc3RhdGljIGludCBhY3BpX2hpYmVybmF0aW9uX3ByZV9yZXN0b3JlKHZvaWQpCkBAIC0yNzcsMTAgKzI5NSwxMyBAQAogCWFjcGlfaHdfZW5hYmxlX2FsbF9ydW50aW1lX2dwZXMoKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoaWJlcm5hdGlvbl9vcHMgYWNwaV9oaWJlcm5hdGlvbl9vcHMgPSB7CitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyBhY3BpX2hpYmVybmF0aW9uX29wcyA9IHsKKwkuc3RhcnQgPSBhY3BpX2hpYmVybmF0aW9uX3N0YXJ0LAorCS5wcmVfc25hcHNob3QgPSBhY3BpX2hpYmVybmF0aW9uX3ByZXBhcmUsCisJLmZpbmlzaCA9IGFjcGlfaGliZXJuYXRpb25fZmluaXNoLAogCS5wcmVwYXJlID0gYWNwaV9oaWJlcm5hdGlvbl9wcmVwYXJlLAogCS5lbnRlciA9IGFjcGlfaGliZXJuYXRpb25fZW50ZXIsCi0JLmZpbmlzaCA9IGFjcGlfaGliZXJuYXRpb25fZmluaXNoLAorCS5sZWF2ZSA9IGFjcGlfaGliZXJuYXRpb25fbGVhdmUsCiAJLnByZV9yZXN0b3JlID0gYWNwaV9oaWJlcm5hdGlvbl9wcmVfcmVzdG9yZSwKIAkucmVzdG9yZV9jbGVhbnVwID0gYWNwaV9oaWJlcm5hdGlvbl9yZXN0b3JlX2NsZWFudXAsCiB9OwpAQCAtNDE3LDcgKzQzOCw3IEBACiAJCX0KIAl9CiAKLQlwbV9zZXRfb3BzKCZhY3BpX3BtX29wcyk7CisJc3VzcGVuZF9zZXRfb3BzKCZhY3BpX3BtX29wcyk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwL3NsZWVwLmggYi9kcml2ZXJzL2FjcGkvc2xlZXAvc2xlZXAuaAppbmRleCBmZjFmODUwLi5hMmVhMTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2xlZXAvc2xlZXAuaAorKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAvc2xlZXAuaApAQCAtNSw2ICs1LDUgQEAKIGV4dGVybiB2b2lkIGFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2VfcHJlcCh1OCBzbGVlcF9zdGF0ZSk7CiBleHRlcm4gdm9pZCBhY3BpX2VuYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKTsKIGV4dGVybiB2b2lkIGFjcGlfZGlzYWJsZV93YWtldXBfZGV2aWNlKHU4IHNsZWVwX3N0YXRlKTsKLWV4dGVybiB2b2lkIGFjcGlfZ3BlX3NsZWVwX3ByZXBhcmUodTMyIHNsZWVwX3N0YXRlKTsKIAogZXh0ZXJuIGludCBhY3BpX3NsZWVwX3ByZXBhcmUodTMyIGFjcGlfc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jIGIvZHJpdmVycy9hY3BpL3NsZWVwL3dha2V1cC5jCmluZGV4IDk3YzI3ZGQuLmVkOGU0MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zbGVlcC93YWtldXAuYworKysgYi9kcml2ZXJzL2FjcGkvc2xlZXAvd2FrZXVwLmMKQEAgLTY0LDM2ICs2NCwyOSBAQAogCUFDUElfRlVOQ1RJT05fVFJBQ0UoImFjcGlfZW5hYmxlX3dha2V1cF9kZXZpY2UiKTsKIAlzcGluX2xvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmYWNwaV93YWtldXBfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobm9kZSwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCi0JCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwotCisJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0KKwkJCWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgYWNwaV9kZXZpY2UsIHdha2V1cF9saXN0KTsKKwkJaWYgKCFkZXYtPndha2V1cC5mbGFncy52YWxpZCkKKwkJCWNvbnRpbnVlOwogCQkvKiBJZiB1c2VycyB3YW50IHRvIGRpc2FibGUgcnVuLXdha2UgR1BFLAogCQkgKiB3ZSBvbmx5IGRpc2FibGUgaXQgZm9yIHdha2UgYW5kIGxlYXZlIGl0IGZvciBydW50aW1lCiAJCSAqLwotCQlpZiAoZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UgJiYgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQpIHsKLQkJCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKLQkJCWFjcGlfc2V0X2dwZV90eXBlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKLQkJCQkJICBBQ1BJX0dQRV9UWVBFX1JVTlRJTUUpOwotCQkJLyogUmUtZW5hYmxlIGl0LCBzaW5jZSBzZXRfZ3BlX3R5cGUgd2lsbCBkaXNhYmxlIGl0ICovCi0JCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlciwgQUNQSV9JU1IpOwotCQkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKKwkJaWYgKCFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkIHx8CisJCSAgICBzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSB7CisJCQlpZiAoZGV2LT53YWtldXAuZmxhZ3MucnVuX3dha2UpIHsKKwkJCQlzcGluX3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CisJCQkJLyogc2V0X2dwZV90eXBlIHdpbGwgZGlzYWJsZSBHUEUsIGxlYXZlIGl0IGxpa2UgdGhhdCAqLworCQkJCWFjcGlfc2V0X2dwZV90eXBlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCisJCQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCisJCQkJCQkgIEFDUElfR1BFX1RZUEVfUlVOVElNRSk7CisJCQkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9Ci0KLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy52YWxpZCB8fAotCQkgICAgIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgfHwKLQkJICAgIChzbGVlcF9zdGF0ZSA+ICh1MzIpIGRldi0+d2FrZXVwLnNsZWVwX3N0YXRlKSkKLQkJCWNvbnRpbnVlOwotCiAJCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKLQkJLyogcnVuLXdha2UgR1BFIGhhcyBiZWVuIGVuYWJsZWQgKi8KIAkJaWYgKCFkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkKIAkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAogCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyLCBBQ1BJX0lTUik7Ci0JCWRldi0+d2FrZXVwLnN0YXRlLmFjdGl2ZSA9IDE7CiAJCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKQEAgLTExMiwyNyArMTA1LDI2IEBACiAKIAlzcGluX2xvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmYWNwaV93YWtldXBfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobm9kZSwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCi0JCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOworCQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldiA9CisJCQljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGFjcGlfZGV2aWNlLCB3YWtldXBfbGlzdCk7CiAKLQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlICYmICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkKSB7Ci0JCQlzcGluX3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7Ci0JCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7Ci0JCQkvKiBSZS1lbmFibGUgaXQsIHNpbmNlIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgaXQgKi8KLQkJCWFjcGlfZW5hYmxlX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyLCBBQ1BJX05PVF9JU1IpOwotCQkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKKwkJaWYgKCFkZXYtPndha2V1cC5mbGFncy52YWxpZCkKKwkJCWNvbnRpbnVlOworCQlpZiAoIWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgfHwKKwkJICAgIHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpIHsKKwkJCWlmIChkZXYtPndha2V1cC5mbGFncy5ydW5fd2FrZSkgeworCQkJCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKKwkJCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAorCQkJCQkJICBBQ1BJX0dQRV9UWVBFX1dBS0VfUlVOKTsKKwkJCQkvKiBSZS1lbmFibGUgaXQsIHNpbmNlIHNldF9ncGVfdHlwZSB3aWxsIGRpc2FibGUgaXQgKi8KKwkJCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQkJCWRldi0+d2FrZXVwLmdwZV9udW1iZXIsIEFDUElfTk9UX0lTUik7CisJCQkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKCFkZXYtPndha2V1cC5mbGFncy52YWxpZCB8fAotCQkgICAgIWRldi0+d2FrZXVwLnN0YXRlLmFjdGl2ZSB8fAotCQkgICAgKHNsZWVwX3N0YXRlID4gKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUpKQotCQkJY29udGludWU7Ci0KIAkJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwogCQlhY3BpX2Rpc2FibGVfd2FrZXVwX2RldmljZV9wb3dlcihkZXYpOwogCQkvKiBOZXZlciBkaXNhYmxlIHJ1bi13YWtlIEdQRSAqLwpAQCAtMTQyLDcgKzEzNCw2IEBACiAJCQlhY3BpX2NsZWFyX2dwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAogCQkJCSAgICAgICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLCBBQ1BJX05PVF9JU1IpOwogCQl9Ci0JCWRldi0+d2FrZXVwLnN0YXRlLmFjdGl2ZSA9IDA7CiAJCXNwaW5fbG9jaygmYWNwaV9kZXZpY2VfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKQEAgLTE2MCw0OCArMTUxLDIwIEBACiAJCXN0cnVjdCBhY3BpX2RldmljZSAqZGV2ID0gY29udGFpbmVyX29mKG5vZGUsCiAJCQkJCQkgICAgICAgc3RydWN0IGFjcGlfZGV2aWNlLAogCQkJCQkJICAgICAgIHdha2V1cF9saXN0KTsKLQogCQkvKiBJbiBjYXNlIHVzZXIgZG9lc24ndCBsb2FkIGJ1dHRvbiBkcml2ZXIgKi8KLQkJaWYgKGRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlICYmICFkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkKSB7Ci0JCQlzcGluX3VubG9jaygmYWNwaV9kZXZpY2VfbG9jayk7Ci0JCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAotCQkJCQkgIGRldi0+d2FrZXVwLmdwZV9udW1iZXIsCi0JCQkJCSAgQUNQSV9HUEVfVFlQRV9XQUtFX1JVTik7Ci0JCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKLQkJCQkJZGV2LT53YWtldXAuZ3BlX251bWJlciwgQUNQSV9OT1RfSVNSKTsKLQkJCWRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQgPSAxOwotCQkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKLQkJfQorCQlpZiAoIWRldi0+d2FrZXVwLmZsYWdzLnJ1bl93YWtlIHx8IGRldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQpCisJCQljb250aW51ZTsKKwkJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOworCQlhY3BpX3NldF9ncGVfdHlwZShkZXYtPndha2V1cC5ncGVfZGV2aWNlLAorCQkJCSAgZGV2LT53YWtldXAuZ3BlX251bWJlciwKKwkJCQkgIEFDUElfR1BFX1RZUEVfV0FLRV9SVU4pOworCQlhY3BpX2VuYWJsZV9ncGUoZGV2LT53YWtldXAuZ3BlX2RldmljZSwKKwkJCQlkZXYtPndha2V1cC5ncGVfbnVtYmVyLCBBQ1BJX05PVF9JU1IpOworCQlkZXYtPndha2V1cC5zdGF0ZS5lbmFibGVkID0gMTsKKwkJc3Bpbl9sb2NrKCZhY3BpX2RldmljZV9sb2NrKTsKIAl9CiAJc3Bpbl91bmxvY2soJmFjcGlfZGV2aWNlX2xvY2spOwotCiAJcmV0dXJuIDA7CiB9CiAKIGxhdGVfaW5pdGNhbGwoYWNwaV93YWtldXBfZGV2aWNlX2luaXQpOwotCi0vKgotICogRGlzYWJsZSBhbGwgd2FrZXVwIEdQRXMgYmVmb3JlIGVudGVyaW5nIHJlcXVlc3RlZCBzbGVlcCBzdGF0ZS4KLSAqCUBzbGVlcF9zdGF0ZToJQUNQSSBzdGF0ZQotICogU2luY2UgYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZSgpIHdpbGwgZGlzYWJsZSBhbGwKLSAqIFJVTlRJTUUgR1BFcywgd2Ugc2ltcGx5IG1hcmsgYWxsIEdQRVMgdGhhdAotICogYXJlIG5vdCBlbmFibGVkIGZvciB3YWtldXAgZnJvbSByZXF1ZXN0ZWQgc3RhdGUgYXMgUlVOVElNRS4KLSAqLwotdm9pZCBhY3BpX2dwZV9zbGVlcF9wcmVwYXJlKHUzMiBzbGVlcF9zdGF0ZSkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCAqbmV4dDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmYWNwaV93YWtldXBfZGV2aWNlX2xpc3QpIHsKLQkJc3RydWN0IGFjcGlfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yobm9kZSwKLQkJCQkJCSAgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UsCi0JCQkJCQkgICAgICAgd2FrZXVwX2xpc3QpOwotCi0JCS8qIFRoZSBHUEUgY2FuIHdha2V1cCBzeXN0ZW0gZnJvbSB0aGlzIHN0YXRlLCBkb24ndCB0b3VjaCBpdCAqLwotCQlpZiAoKHUzMikgZGV2LT53YWtldXAuc2xlZXBfc3RhdGUgPj0gc2xlZXBfc3RhdGUpCi0JCQljb250aW51ZTsKLQkJLyogYWNwaV9zZXRfZ3BlX3R5cGUgd2lsbCBhdXRvbWF0aWNhbGx5IGRpc2FibGUgR1BFICovCi0JCWFjcGlfc2V0X2dwZV90eXBlKGRldi0+d2FrZXVwLmdwZV9kZXZpY2UsCi0JCQkJICBkZXYtPndha2V1cC5ncGVfbnVtYmVyLAotCQkJCSAgQUNQSV9HUEVfVFlQRV9SVU5USU1FKTsKLQl9Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGFibGVzL3RidXRpbHMuYyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ1dGlscy5jCmluZGV4IDhjYzk0OTIuLjVmMWQ4NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ1dGlscy5jCisrKyBiL2RyaXZlcnMvYWNwaS90YWJsZXMvdGJ1dGlscy5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAl1MzIgdGFibGVfY291bnQ7CiAJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyICp0YWJsZTsKIAlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgYWRkcmVzczsKLQlhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcnNkdF9hZGRyZXNzOworCWFjcGlfcGh5c2ljYWxfYWRkcmVzcyB1bmluaXRpYWxpemVkX3Zhcihyc2R0X2FkZHJlc3MpOwogCXUzMiBsZW5ndGg7CiAJdTggKnRhYmxlX2VudHJ5OwogCWFjcGlfc3RhdHVzIHN0YXR1czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS90aGVybWFsLmMgYi9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCmluZGV4IGFkODk4ZTEuLjVmNzliNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKKysrIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwpAQCAtMTk1LDYgKzE5NSw3IEBACiAJc3RydWN0IGFjcGlfdGhlcm1hbF90cmlwcyB0cmlwczsKIAlzdHJ1Y3QgYWNwaV9oYW5kbGVfbGlzdCBkZXZpY2VzOwogCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWNwaV90aGVybWFsX3N0YXRlX2ZvcHMgPSB7CkBAIC03MTEsNiArNzEyLDcgQEAKIAlpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgYWNwaV90aGVybWFsICp0eiA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lID0gMDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXRfamlmZmllcyA9IDA7CiAJaW50IGkgPSAwOwogCXN0cnVjdCBhY3BpX3RoZXJtYWxfc3RhdGUgc3RhdGU7CiAKQEAgLTcyMCwxMSArNzIyLDE1IEBACiAJCXJldHVybjsKIAl9CiAKKwkvKiBDaGVjayBpZiBzb21lb25lIGVsc2UgaXMgYWxyZWFkeSBydW5uaW5nICovCisJaWYgKCFtdXRleF90cnlsb2NrKCZ0ei0+bG9jaykpCisJCXJldHVybjsKKwogCXN0YXRlID0gdHotPnN0YXRlOwogCiAJcmVzdWx0ID0gYWNwaV90aGVybWFsX2dldF90ZW1wZXJhdHVyZSh0eik7CiAJaWYgKHJlc3VsdCkKLQkJcmV0dXJuOworCQlnb3RvIHVubG9jazsKIAogCW1lbXNldCgmdHotPnN0YXRlLCAwLCBzaXplb2YodHotPnN0YXRlKSk7CiAKQEAgLTc4NywxMCArNzkzLDEzIEBACiAJICogYSB0aGVybWFsIGV2ZW50IG9jY3VycykuICBOb3RlIHRoYXQgX1RTUCBhbmQgX1RaRCB2YWx1ZXMgYXJlCiAJICogZ2l2ZW4gaW4gMS8xMHRoIHNlY29uZHMgKHdlIG11c3QgY292ZXJ0IHRvIG1pbGxpc2Vjb25kcykuCiAJICovCi0JaWYgKHR6LT5zdGF0ZS5wYXNzaXZlKQorCWlmICh0ei0+c3RhdGUucGFzc2l2ZSkgewogCQlzbGVlcF90aW1lID0gdHotPnRyaXBzLnBhc3NpdmUudHNwICogMTAwOwotCWVsc2UgaWYgKHR6LT5wb2xsaW5nX2ZyZXF1ZW5jeSA+IDApCisJCXRpbWVvdXRfamlmZmllcyA9ICBqaWZmaWVzICsgKEhaICogc2xlZXBfdGltZSkgLyAxMDAwOworCX0gZWxzZSBpZiAodHotPnBvbGxpbmdfZnJlcXVlbmN5ID4gMCkgewogCQlzbGVlcF90aW1lID0gdHotPnBvbGxpbmdfZnJlcXVlbmN5ICogMTAwOworCQl0aW1lb3V0X2ppZmZpZXMgPSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgKEhaICogc2xlZXBfdGltZSkgLyAxMDAwKTsKKwl9CiAKIAlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX0lORk8sICIlczogdGVtcGVyYXR1cmVbJWx1XSBzbGVlcFslbHVdXG4iLAogCQkJICB0ei0+bmFtZSwgdHotPnRlbXBlcmF0dXJlLCBzbGVlcF90aW1lKSk7CkBAIC04MDQsMTcgKzgxMywxNiBAQAogCQkJZGVsX3RpbWVyKCYodHotPnRpbWVyKSk7CiAJfSBlbHNlIHsKIAkJaWYgKHRpbWVyX3BlbmRpbmcoJih0ei0+dGltZXIpKSkKLQkJCW1vZF90aW1lcigmKHR6LT50aW1lciksCi0JCQkJCWppZmZpZXMgKyAoSFogKiBzbGVlcF90aW1lKSAvIDEwMDApOworCQkJbW9kX3RpbWVyKCYodHotPnRpbWVyKSwgdGltZW91dF9qaWZmaWVzKTsKIAkJZWxzZSB7CiAJCQl0ei0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXR6OwogCQkJdHotPnRpbWVyLmZ1bmN0aW9uID0gYWNwaV90aGVybWFsX3J1bjsKLQkJCXR6LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIChIWiAqIHNsZWVwX3RpbWUpIC8gMTAwMDsKKwkJCXR6LT50aW1lci5leHBpcmVzID0gdGltZW91dF9qaWZmaWVzOwogCQkJYWRkX3RpbWVyKCYodHotPnRpbWVyKSk7CiAJCX0KIAl9Ci0KLQlyZXR1cm47CisgICAgICB1bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ0ei0+bG9jayk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjUxLDcgKzEyNTksNyBAQAogCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFDUElfVEhFUk1BTF9ERVZJQ0VfTkFNRSk7CiAJc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFDUElfVEhFUk1BTF9DTEFTUyk7CiAJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gdHo7Ci0KKwltdXRleF9pbml0KCZ0ei0+bG9jayk7CiAJcmVzdWx0ID0gYWNwaV90aGVybWFsX2dldF9pbmZvKHR6KTsKIAlpZiAocmVzdWx0KQogCQlnb3RvIGVuZDsKQEAgLTEzMjEsNyArMTMyOSw3IEBACiAJfQogCiAJYWNwaV90aGVybWFsX3JlbW92ZV9mcyhkZXZpY2UpOwotCisJbXV0ZXhfZGVzdHJveSgmdHotPmxvY2spOwogCWtmcmVlKHR6KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS92aWRlby5jIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKaW5kZXggYjhhMjA5NS4uYmFjOTU2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMKKysrIGIvZHJpdmVycy9hY3BpL3ZpZGVvLmMKQEAgLTQwOSwxNCArNDA5LDE3IEBACiBzdGF0aWMgaW50CiBhY3BpX3ZpZGVvX2RldmljZV9sY2Rfc2V0X2xldmVsKHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLCBpbnQgbGV2ZWwpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gQUVfT0s7CiAJdW5pb24gYWNwaV9vYmplY3QgYXJnMCA9IHsgQUNQSV9UWVBFX0lOVEVHRVIgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBhcmdzID0geyAxLCAmYXJnMCB9OwogCiAKIAlhcmcwLmludGVnZXIudmFsdWUgPSBsZXZlbDsKLQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JDTSIsICZhcmdzLCBOVUxMKTsKIAorCWlmIChkZXZpY2UtPmNhcC5fQkNNKQorCQlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JDTSIsCisJCQkJCSAgICAgICZhcmdzLCBOVUxMKTsKKwlkZXZpY2UtPmJyaWdodG5lc3MtPmN1cnIgPSBsZXZlbDsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC00MjQsMTEgKzQyNywxMSBAQAogYWNwaV92aWRlb19kZXZpY2VfbGNkX2dldF9sZXZlbF9jdXJyZW50KHN0cnVjdCBhY3BpX3ZpZGVvX2RldmljZSAqZGV2aWNlLAogCQkJCQl1bnNpZ25lZCBsb25nICpsZXZlbCkKIHsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGRldmljZS0+ZGV2LT5oYW5kbGUsICJfQlFDIiwgTlVMTCwgbGV2ZWwpOwotCi0JcmV0dXJuIHN0YXR1czsKKwlpZiAoZGV2aWNlLT5jYXAuX0JRQykKKwkJcmV0dXJuIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihkZXZpY2UtPmRldi0+aGFuZGxlLCAiX0JRQyIsIE5VTEwsCisJCQkJCSAgICAgbGV2ZWwpOworCSpsZXZlbCA9IGRldmljZS0+YnJpZ2h0bmVzcy0+Y3VycjsKKwlyZXR1cm4gQUVfT0s7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE2MzMsOSArMTYzNiwyMCBAQAogYWNwaV92aWRlb19nZXRfbmV4dF9sZXZlbChzdHJ1Y3QgYWNwaV92aWRlb19kZXZpY2UgKmRldmljZSwKIAkJCSAgdTMyIGxldmVsX2N1cnJlbnQsIHUzMiBldmVudCkKIHsKLQlpbnQgbWluLCBtYXgsIG1pbl9hYm92ZSwgbWF4X2JlbG93LCBpLCBsOworCWludCBtaW4sIG1heCwgbWluX2Fib3ZlLCBtYXhfYmVsb3csIGksIGwsIGRlbHRhID0gMjU1OwogCW1heCA9IG1heF9iZWxvdyA9IDA7CiAJbWluID0gbWluX2Fib3ZlID0gMjU1OworCS8qIEZpbmQgY2xvc2VzdCBsZXZlbCB0byBsZXZlbF9jdXJyZW50ICovCisJZm9yIChpID0gMDsgaSA8IGRldmljZS0+YnJpZ2h0bmVzcy0+Y291bnQ7IGkrKykgeworCQlsID0gZGV2aWNlLT5icmlnaHRuZXNzLT5sZXZlbHNbaV07CisJCWlmIChhYnMobCAtIGxldmVsX2N1cnJlbnQpIDwgYWJzKGRlbHRhKSkgeworCQkJZGVsdGEgPSBsIC0gbGV2ZWxfY3VycmVudDsKKwkJCWlmICghZGVsdGEpCisJCQkJYnJlYWs7CisJCX0KKwl9CisJLyogQWp1c3QgbGV2ZWxfY3VycmVudCB0byBjbG9zZXN0IGF2YWlsYWJsZSBsZXZlbCAqLworCWxldmVsX2N1cnJlbnQgKz0gZGVsdGE7CiAJZm9yIChpID0gMDsgaSA8IGRldmljZS0+YnJpZ2h0bmVzcy0+Y291bnQ7IGkrKykgewogCQlsID0gZGV2aWNlLT5icmlnaHRuZXNzLT5sZXZlbHNbaV07CiAJCWlmIChsIDwgbWluKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggMzNmNWViMC4uYmE2MzYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC0xODIsNiArMTgyLDE1IEBACiAJICBmaXJtd2FyZSBpbiB0aGUgQklPUy4gVGhpcyBkcml2ZXIgY2FuIHNvbWV0aW1lcyBoYW5kbGUKIAkgIG90aGVyd2lzZSB1bnN1cHBvcnRlZCBoYXJkd2FyZS4KIAorY29uZmlnIFNBVEFfRlNMCisJdHJpc3RhdGUgIkZyZWVzY2FsZSAzLjBHYnBzIFNBVEEgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFBQQ19NUEM4Mzd4CisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBGcmVlc2NhbGUgMy4wR2JwcyBTQVRBIGNvbnRyb2xsZXIuCisJICBJdCBjYW4gYmUgZm91bmQgb24gTVBDODM3eCBhbmQgTVBDODMxNS4KKworCSAgSWYgdW5zdXJlLCBzYXkgTi4KKwogY29uZmlnIFBBVEFfQUxJCiAJdHJpc3RhdGUgIkFMaSBQQVRBIHN1cHBvcnQgKEV4cGVyaW1lbnRhbCkiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgRVhQRVJJTUVOVEFMCkBAIC02NDEsMTEgKzY1MCw0IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBQQVRBX0JGNTRYX0RNQQotCWJvb2wgIkRNQSBtb2RlIgotCWRlcGVuZHMgb24gUEFUQV9CRjU0WAotCWRlZmF1bHQgeQotCWhlbHAKLQkgIEVuYWJsZSBETUEgbW9kZSBmb3IgQmxhY2tmaW4gQVRBUEkgY29udHJvbGxlci4KLQogZW5kaWYgIyBBVEEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL01ha2VmaWxlIGIvZHJpdmVycy9hdGEvTWFrZWZpbGUKaW5kZXggNmJkYzMwNy4uYjEzZmViMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9hdGEvTWFrZWZpbGUKQEAgLTE3LDYgKzE3LDcgQEAKIG9iai0kKENPTkZJR19TQVRBX01WKQkJKz0gc2F0YV9tdi5vCiBvYmotJChDT05GSUdfU0FUQV9JTklDMTYyWCkJKz0gc2F0YV9pbmljMTYyeC5vCiBvYmotJChDT05GSUdfUERDX0FETUEpCQkrPSBwZGNfYWRtYS5vCitvYmotJChDT05GSUdfU0FUQV9GU0wpCQkrPSBzYXRhX2ZzbC5vCiAKIG9iai0kKENPTkZJR19QQVRBX0FMSSkJCSs9IHBhdGFfYWxpLm8KIG9iai0kKENPTkZJR19QQVRBX0FNRCkJCSs9IHBhdGFfYW1kLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2FoY2kuYyBiL2RyaXZlcnMvYXRhL2FoY2kuYwppbmRleCAxMGJjM2Y2Li40N2M4MDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9haGNpLmMKKysrIGIvZHJpdmVycy9hdGEvYWhjaS5jCkBAIC0xNDc5LDcgKzE0NzksNyBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogaG1tbS4uLiBhIHNwdXJpb3VzIGludGVydXB0ICovCisJLyogaG1tbS4uLiBhIHNwdXJpb3VzIGludGVycnVwdCAqLwogCiAJLyogaWYgIU5DUSwgaWdub3JlLiAgTm8gbW9kZXJuIEFUQSBkZXZpY2UgaGFzIGJyb2tlbiBIU00KIAkgKiBpbXBsZW1lbnRhdGlvbiBmb3Igbm9uLU5DUSBjb21tYW5kcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IGJiYWE1NDUuLjYyOWVhZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtMTM5Miw3ICsxMzkyLDcgQEAKICAqCUB0ZjogVGFza2ZpbGUgcmVnaXN0ZXJzIGZvciB0aGUgY29tbWFuZCBhbmQgdGhlIHJlc3VsdAogICoJQGNkYjogQ0RCIGZvciBwYWNrZXQgY29tbWFuZAogICoJQGRtYV9kaXI6IERhdGEgdHJhbmZlciBkaXJlY3Rpb24gb2YgdGhlIGNvbW1hbmQKLSAqCUBzZzogc2cgbGlzdCBmb3IgdGhlIGRhdGEgYnVmZmVyIG9mIHRoZSBjb21tYW5kCisgKglAc2dsOiBzZyBsaXN0IGZvciB0aGUgZGF0YSBidWZmZXIgb2YgdGhlIGNvbW1hbmQKICAqCUBuX2VsZW06IE51bWJlciBvZiBzZyBlbnRyaWVzCiAgKglAdGltZW91dDogVGltZW91dCBpbiBtc2VjcyAoMCBmb3IgZGVmYXVsdCkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKaW5kZXggMDI2NDM5ZS4uODIyN2M0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMTU2LDcgKzE1Niw3IEBACiB7CiAJc3RydWN0IGF0YV9pb3BvcnRzICppb2FkZHIgPSAmYXAtPmlvYWRkcjsKIAotCXRmLT5jb21tYW5kID0gYXRhX2NoZWNrX3N0YXR1cyhhcCk7CisJdGYtPmNvbW1hbmQgPSBhdGFfY2hrX3N0YXR1cyhhcCk7CiAJdGYtPmZlYXR1cmUgPSBpb3JlYWQ4KGlvYWRkci0+ZXJyb3JfYWRkcik7CiAJdGYtPm5zZWN0ID0gaW9yZWFkOChpb2FkZHItPm5zZWN0X2FkZHIpOwogCXRmLT5sYmFsID0gaW9yZWFkOChpb2FkZHItPmxiYWxfYWRkcik7CkBAIC04NTYsNyArODU2LDcgQEAKICAqCUBwZGV2OiBQQ0kgZGV2aWNlCiAgKgogICoJU29tZSBQQ0kgQVRBIGRldmljZXMgcmVwb3J0IHNpbXBsZXggbW9kZSBidXQgaW4gZmFjdCBjYW4gYmUgdG9sZCB0bwotICoJZW50ZXIgbm9uIHNpbXBsZXggbW9kZS4gVGhpcyBpbXBsZW1lbnRzIHRoZSBuZWNjZXNzYXJ5IGxvZ2ljIHRvCisgKgllbnRlciBub24gc2ltcGxleCBtb2RlLiBUaGlzIGltcGxlbWVudHMgdGhlIG5lY2Vzc2FyeSBsb2dpYyB0bwogICoJcGVyZm9ybSB0aGUgdGFzayBvbiBzdWNoIGRldmljZXMuIENhbGxpbmcgaXQgb24gb3RoZXIgZGV2aWNlcyB3aWxsCiAgKgloYXZlIC11bmRlZmluZWQtIGJlaGF2aW91ci4KICAqLwpAQCAtODgyLDcgKzg4Miw3IEBACiAJLyogRmlsdGVyIG91dCBETUEgbW9kZXMgaWYgdGhlIGRldmljZSBoYXMgYmVlbiBjb25maWd1cmVkIGJ5CiAJICAgdGhlIEJJT1MgYXMgUElPIG9ubHkgKi8KIAotCWlmIChhZGV2LT5saW5rLT5hcC0+aW9hZGRyLmJtZG1hX2FkZHIgPT0gMCkKKwlpZiAoYWRldi0+bGluay0+YXAtPmlvYWRkci5ibWRtYV9hZGRyID09IE5VTEwpCiAJCXhmZXJfbWFzayAmPSB+KEFUQV9NQVNLX01XRE1BIHwgQVRBX01BU0tfVURNQSk7CiAJcmV0dXJuIHhmZXJfbWFzazsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfYWNwaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKaW5kZXggNWQzOTIwZi4uMGY2ZjdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMKQEAgLTM3MCw4ICszNzAsMTAgQEAKIAkuaWRfdGFibGUJCT0gcGFjcGlfcGNpX3RibCwKIAkucHJvYmUJCQk9IHBhY3BpX2luaXRfb25lLAogCS5yZW1vdmUJCQk9IGF0YV9wY2lfcmVtb3ZlX29uZSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAkJPSBhdGFfcGNpX2RldmljZV9zdXNwZW5kLAogCS5yZXN1bWUJCQk9IGF0YV9wY2lfZGV2aWNlX3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQgcGFjcGlfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9iZjU0eC5jCmluZGV4IDc0NzU0OWUuLmI1ZTM4NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYmY1NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2JmNTR4LmMKQEAgLTEwOTIsMTQgKzEwOTIsMTUgQEAKICAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX3N0ZF9zb2Z0cmVzZXQoKS4KICAqLwogCi1zdGF0aWMgaW50IGJmaW5fc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMsCitzdGF0aWMgaW50IGJmaW5fc3RkX3NvZnRyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcywKIAkJdW5zaWduZWQgbG9uZyBkZWFkbGluZSkKIHsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAJdW5zaWduZWQgaW50IHNsYXZlX3Bvc3NpYmxlID0gYXAtPmZsYWdzICYgQVRBX0ZMQUdfU0xBVkVfUE9TUzsKIAl1bnNpZ25lZCBpbnQgZGV2bWFzayA9IDAsIGVycl9tYXNrOwogCXU4IGVycjsKIAotCWlmIChhdGFfcG9ydF9vZmZsaW5lKGFwKSkgeworCWlmIChhdGFfbGlua19vZmZsaW5lKGxpbmspKSB7CiAJCWNsYXNzZXNbMF0gPSBBVEFfREVWX05PTkU7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExMjIsOSArMTEyMywxMSBAQAogCX0KIAogCS8qIGRldGVybWluZSBieSBzaWduYXR1cmUgd2hldGhlciB3ZSBoYXZlIEFUQSBvciBBVEFQSSBkZXZpY2VzICovCi0JY2xhc3Nlc1swXSA9IGF0YV9kZXZfdHJ5X2NsYXNzaWZ5KGFwLCAwLCAmZXJyKTsKKwljbGFzc2VzWzBdID0gYXRhX2Rldl90cnlfY2xhc3NpZnkoJmFwLT5saW5rLmRldmljZVswXSwKKwkJCQlkZXZtYXNrICYgKDEgPDwgMCksICZlcnIpOwogCWlmIChzbGF2ZV9wb3NzaWJsZSAmJiBlcnIgIT0gMHg4MSkKLQkJY2xhc3Nlc1sxXSA9IGF0YV9kZXZfdHJ5X2NsYXNzaWZ5KGFwLCAxLCAmZXJyKTsKKwkJY2xhc3Nlc1sxXSA9IGF0YV9kZXZfdHJ5X2NsYXNzaWZ5KCZhcC0+bGluay5kZXZpY2VbMV0sCisJCQkJCWRldm1hc2sgJiAoMSA8PCAxKSwgJmVycik7CiAKICBvdXQ6CiAJcmV0dXJuIDA7CkBAIC0xMTY3LDcgKzExNzAsNyBAQAogc3RhdGljIHZvaWQgYmZpbl9kYXRhX3hmZXIoc3RydWN0IGF0YV9kZXZpY2UgKmFkZXYsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCSAgIHVuc2lnbmVkIGludCBidWZsZW4sIGludCB3cml0ZV9kYXRhKQogewotCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBhZGV2LT5hcDsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gYWRldi0+bGluay0+YXA7CiAJdW5zaWduZWQgaW50IHdvcmRzID0gYnVmbGVuID4+IDE7CiAJdW5zaWduZWQgc2hvcnQgKmJ1ZjE2ID0gKHUxNiAqKSBidWY7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY3RsX2FkZHI7CkBAIC0xMjA2LDcgKzEyMDksMTAgQEAKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopYXAtPmlvYWRkci5jdGxfYWRkcjsKIAogCXByX2RlYnVnKCJpbiBhdGFwaSBpcnEgY2xlYXJcbiIpOwotCUFUQVBJX1NFVF9JTlRfU1RBVFVTKGJhc2UsIDB4MUZGKTsKKworCUFUQVBJX1NFVF9JTlRfU1RBVFVTKGJhc2UsIEFUQVBJX0dFVF9JTlRfU1RBVFVTKGJhc2UpfEFUQVBJX0RFVl9JTlQKKwkJfCBNVUxUSV9ET05FX0lOVCB8IFVETUFJTl9ET05FX0lOVCB8IFVETUFPVVRfRE9ORV9JTlQKKwkJfCBNVUxUSV9URVJNX0lOVCB8IFVETUFJTl9URVJNX0lOVCB8IFVETUFPVVRfVEVSTV9JTlQpOwogfQogCiAvKioKQEAgLTEyMzQsMzMgKzEyNDAsNiBAQAogfQogCiAvKioKLSAqCWJmaW5faXJxX2FjayAtIEFja25vd2xlZGdlIGEgZGV2aWNlIGludGVycnVwdC4KLSAqCUBhcDogUG9ydCBvbiB3aGljaCBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkLgotICoKLSAqCU5vdGU6IE9yaWdpbmFsIGNvZGUgaXMgYXRhX2lycV9hY2soKS4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBiZmluX2lycV9hY2soc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGNoa19kcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY3RsX2FkZHI7Ci0JdW5zaWduZWQgaW50IGJpdHMgPSBjaGtfZHJxID8gQVRBX0JVU1kgfCBBVEFfRFJRIDogQVRBX0JVU1k7Ci0JdW5zaWduZWQgY2hhciBzdGF0dXM7Ci0KLQlwcl9kZWJ1ZygiaW4gYXRhcGkgaXJxIGFja1xuIik7Ci0Jc3RhdHVzID0gYXRhX2J1c3lfd2FpdChhcCwgYml0cywgMTAwMCk7Ci0JaWYgKHN0YXR1cyAmIGJpdHMpCi0JCWlmIChhdGFfbXNnX2VycihhcCkpCi0JCQlkZXZfZXJyKGFwLT5kZXYsICJhYm5vcm1hbCBzdGF0dXMgMHglWFxuIiwgc3RhdHVzKTsKLQotCS8qIGdldCBjb250cm9sbGVyIHN0YXR1czsgY2xlYXIgaW50ciwgZXJyIGJpdHMgKi8KLQlBVEFQSV9TRVRfSU5UX1NUQVRVUyhiYXNlLCBBVEFQSV9HRVRfSU5UX1NUQVRVUyhiYXNlKXxBVEFQSV9ERVZfSU5UCi0JCXwgTVVMVElfRE9ORV9JTlQgfCBVRE1BSU5fRE9ORV9JTlQgfCBVRE1BT1VUX0RPTkVfSU5UCi0JCXwgTVVMVElfVEVSTV9JTlQgfCBVRE1BSU5fVEVSTV9JTlQgfCBVRE1BT1VUX1RFUk1fSU5UKTsKLQotCXJldHVybiBiZmluX2JtZG1hX3N0YXR1cyhhcCk7Ci19Ci0KLS8qKgogICoJYmZpbl9ibWRtYV9mcmVlemUgLSBGcmVlemUgRE1BIGNvbnRyb2xsZXIgcG9ydAogICoJQGFwOiBwb3J0IHRvIGZyZWV6ZQogICoKQEAgLTEzMDgsOCArMTI4Nyw5IEBACiAgKglOb3RlOiBPcmlnaW5hbCBjb2RlIGlzIGF0YV9zdGRfcG9zdHJlc2V0KCkuCiAgKi8KIAotc3RhdGljIHZvaWQgYmZpbl9zdGRfcG9zdHJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCAqY2xhc3NlcykKK3N0YXRpYyB2b2lkIGJmaW5fc3RkX3Bvc3RyZXNldChzdHJ1Y3QgYXRhX2xpbmsgKmxpbmssIHVuc2lnbmVkIGludCAqY2xhc3NlcykKIHsKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gbGluay0+YXA7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKWFwLT5pb2FkZHIuY3RsX2FkZHI7CiAKIAkvKiByZS1lbmFibGUgaW50ZXJydXB0cyAqLwpAQCAtMTM5NSw3ICsxMzc1LDYgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBiZmluX3BhdGFfb3BzID0gewotCS5wb3J0X2Rpc2FibGUJCT0gYXRhX3BvcnRfZGlzYWJsZSwKIAkuc2V0X3Bpb21vZGUJCT0gYmZpbl9zZXRfcGlvbW9kZSwKIAkuc2V0X2RtYW1vZGUJCT0gYmZpbl9zZXRfZG1hbW9kZSwKIApAQCAtMTQyMyw3ICsxNDAyLDYgQEAKIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKIAkuaXJxX2NsZWFyCQk9IGJmaW5faXJxX2NsZWFyLAogCS5pcnFfb24JCQk9IGJmaW5faXJxX29uLAotCS5pcnFfYWNrCQk9IGJmaW5faXJxX2FjaywKIAogCS5wb3J0X3N0YXJ0CQk9IGJmaW5fcG9ydF9zdGFydCwKIAkucG9ydF9zdG9wCQk9IGJmaW5fcG9ydF9zdG9wLApAQCAtMTQzNywxMSArMTQxNSw3IEBACiAJCQkJfCBBVEFfRkxBR19OT19MRUdBQ1ksCiAJCS5waW9fbWFzawk9IDB4MWYsCS8qIHBpbzAtNCAqLwogCQkubXdkbWFfbWFzawk9IDAsCi0jaWZkZWYgQ09ORklHX1BBVEFfQkY1NFhfRE1BCi0JCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCi0jZWxzZQogCQkudWRtYV9tYXNrCT0gMCwKLSNlbmRpZgogCQkucG9ydF9vcHMJPSAmYmZpbl9wYXRhX29wcywKIAl9LAogfTsKQEAgLTE2MDcsOSArMTU4MSwyNSBAQAogCX0sCiB9OwogCisjZGVmaW5lIEFUQVBJX01PREVfU0laRQkJMTAKK3N0YXRpYyBjaGFyIGJmaW5fYXRhcGlfbW9kZVtBVEFQSV9NT0RFX1NJWkVdOworCiBzdGF0aWMgaW50IF9faW5pdCBiZmluX2F0YXBpX2luaXQodm9pZCkKIHsKIAlwcl9pbmZvKCJyZWdpc3RlciBiZmluIGF0YXBpIGRyaXZlclxuIik7CisKKwlzd2l0Y2goYmZpbl9hdGFwaV9tb2RlWzBdKSB7CisJY2FzZSAncCc6CisJY2FzZSAnUCc6CisJCWJyZWFrOworCWNhc2UgJ20nOgorCWNhc2UgJ00nOgorCQliZmluX3BvcnRfaW5mb1swXS5td2RtYV9tYXNrID0gQVRBX01XRE1BMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYmZpbl9wb3J0X2luZm9bMF0udWRtYV9tYXNrID0gQVRBX1VETUE1OworCX07CisKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZiZmluX2F0YXBpX2RyaXZlcik7CiB9CiAKQEAgLTE2MjAsNiArMTYxMCwxMyBAQAogCiBtb2R1bGVfaW5pdChiZmluX2F0YXBpX2luaXQpOwogbW9kdWxlX2V4aXQoYmZpbl9hdGFwaV9leGl0KTsKKy8qCisgKiBBVEFQSSBtb2RlOgorICogcGlvL1BJTworICogdWRtYS9VRE1BIChkZWZhdWx0KQorICogbXdkbWEvTVdETUEKKyAqLworbW9kdWxlX3BhcmFtX3N0cmluZyhiZmluX2F0YXBpX21vZGUsIGJmaW5fYXRhcGlfbW9kZSwgQVRBUElfTU9ERV9TSVpFLCAwKTsKIAogTU9EVUxFX0FVVEhPUigiU29uaWMgWmhhbmcgPHNvbmljLnpoYW5nQGFuYWxvZy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBBVEEgZHJpdmVyIGZvciBibGFja2ZpbiA1NHggQVRBUEkgY29udHJvbGxlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYyBiL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKaW5kZXggOWU0MTJjMi4uN2FjYmJkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCkBAIC0yMTUsNyArMjE1LDcgQEAKIAlyZWdVICY9IH4oMHgwNSA8PCBhZGV2LT5kZXZubyk7CiAKIAlpZiAoYWRldi0+ZG1hX21vZGUgPj0gWEZFUl9VRE1BXzApIHsKLQkJLyogTWVyZ2UgdGhnZSB0aW1pbmcgdmFsdWUgKi8KKwkJLyogTWVyZ2UgdGhlIHRpbWluZyB2YWx1ZSAqLwogCQlyZWdVIHw9IHVkbWFfZGF0YVthZGV2LT5kbWFfbW9kZSAtIFhGRVJfVURNQV8wXSA8PCBzaGlmdDsKIAkJLyogTWVyZ2UgdGhlIGNvbnRyb2wgYml0cyAqLwogCQlyZWdVIHw9IDEgPDwgYWRldi0+ZGV2bm87IC8qIFVETUEgb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IDU3ZTgyN2UuLmUxODE4ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzAuYwpAQCAtMTM4LDcgKzEzOCw3IEBACiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKICAqCXRoaXMgaW50ZXJmYWNlIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhlIGNvcnJlY3QgQVRBIHRpbWluZ3MgaWYKLSAqCW5lY2Nlc3NhcnkuICBTcGVjaWZpY2FsbHkgd2UgaGF2ZSBhIHByb2JsZW0gdGhhdCB0aGVyZSBpcyBvbmx5CisgKgluZWNlc3NhcnkuICBTcGVjaWZpY2FsbHkgd2UgaGF2ZSBhIHByb2JsZW0gdGhhdCB0aGVyZSBpcyBvbmx5CiAgKglvbmUgTVdETUEvVURNQSBiaXQuCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKaW5kZXggMzU3ODU5My4uMDEzMjQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBEb2N1bWVudGF0aW9uOgogICoJQXZhaWxhYmxlIGZyb20gQU1EIHdlYiBzaXRlLgogICogVE9ETwotICoJUmV2aWV3IGVycmF0YSB0byBzZWUgaWYgc2VyaWFsaXppbmcgaXMgbmVjY2Vzc2FyeQorICoJUmV2aWV3IGVycmF0YSB0byBzZWUgaWYgc2VyaWFsaXppbmcgaXMgbmVjZXNzYXJ5CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM2LmMKaW5kZXggNTMwNzBmNi4uZDc1M2U1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MzYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNi5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2NzNTUzNiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuMC41IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC4wLjYiCiAKIGVudW0gewogCUNGRwkJCT0gMCwKQEAgLTIxNCw3ICsyMTQsNyBAQAogCQljczU1MzZfcmVhZChwZGV2LCBEVEMsICZkdGMpOwogCiAJCWR0YyAmPSB+KElERV9EUlZfTUFTSyA8PCBkc2hpZnQpOwotCQlkdGMgfD0gbXdkbWFfdGltaW5nc1ttb2RlXSA8PCBkc2hpZnQ7CisJCWR0YyB8PSBtd2RtYV90aW1pbmdzW21vZGUgLSBYRkVSX01XX0RNQV8wXSA8PCBkc2hpZnQ7CiAKIAkJY3M1NTM2X3dyaXRlKHBkZXYsIERUQywgZHRjKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwppbmRleCA5ODhlZjczLi5jYTlhYWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAvKgogICoJV2UgYWxsb3cgdXNlcnMgdG8gZm9yY2UgdGhlIGNhcmQgaW50byBub24gcmFpZCBtb2RlIHdpdGhvdXQKLSAqCWZsYXNoaW5nIHRoZSBhbHRlcm5hdGl2ZSBCSU9TLiBUaGlzIGlzIGFsc28gbmVjY2Vzc2FyeSByaWdodCBub3cKKyAqCWZsYXNoaW5nIHRoZSBhbHRlcm5hdGl2ZSBCSU9TLiBUaGlzIGlzIGFsc28gbmVjZXNzYXJ5IHJpZ2h0IG5vdwogICoJZm9yIGVtYmVkZGVkIHBsYXRmb3JtcyB0aGF0IGNhbm5vdCBydW4gYSBQQyBCSU9TIGJ1dCBhcmUgdXNpbmcgdGhpcwogICoJZGV2aWNlLgogICovCkBAIC0zODMsNyArMzgzLDcgQEAKICAqCUBhcDogQVRBIHBvcnQKICAqCUBkZXZpY2U6IERldmljZSBudW1iZXIgKG5vdCBwb2ludGVyKQogICoKLSAqCURldmljZSBzZWxlY3Rpb24gaG9vay4gSWYgbmVjY2Vzc2FyeSBwZXJmb3JtIGNsb2NrIHN3aXRjaGluZworICoJRGV2aWNlIHNlbGVjdGlvbiBob29rLiBJZiBuZWNlc3NhcnkgcGVyZm9ybSBjbG9jayBzd2l0Y2hpbmcKICAqLwogCiBzdGF0aWMgdm9pZCBpdDgyMXhfcGFzc3RocnVfZGV2X3NlbGVjdChzdHJ1Y3QgYXRhX3BvcnQgKmFwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCmluZGV4IGQ1NDgzMDguLmMwZDllMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKQEAgLTEyOSw3ICsxMjksNyBAQAogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCiAgKgl0aGlzIGludGVyZmFjZSBzbyB0aGF0IHdlIGNhbiBsb2FkIHRoZSBjb3JyZWN0IEFUQSB0aW1pbmdzIGlmCi0gKgluZWNjZXNzYXJ5LiBPdXIgbG9naWMgYWxzbyBjbGVhcnMgVElNRTAvVElNRTEgZm9yIHRoZSBvdGhlciBkZXZpY2Ugc28KKyAqCW5lY2Vzc2FyeS4gT3VyIGxvZ2ljIGFsc28gY2xlYXJzIFRJTUUwL1RJTUUxIGZvciB0aGUgb3RoZXIgZGV2aWNlIHNvCiAgKgl0aGF0LCBldmVuIGlmIHdlIGdldCB0aGlzIHdyb25nLCBjeWNsZXMgdG8gdGhlIG90aGVyIGRldmljZSB3aWxsCiAgKgliZSBtYWRlIFBJTzAuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKaW5kZXggNmU4ZTU1Ny4uOWZlNjZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9uczg3NDEwLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCiAgKgl0aGlzIGludGVyZmFjZSBzbyB0aGF0IHdlIGNhbiBsb2FkIHRoZSBjb3JyZWN0IEFUQSB0aW1pbmdzIGlmCi0gKgluZWNjZXNzYXJ5LgorICoJbmVjZXNzYXJ5LgogICovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnM4NzQxMF9xY19pc3N1ZV9wcm90KHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCmluZGV4IDNjZDVlYjIuLjQ0ZGEwOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb2xkcGlpeC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKICAqCiAgKglDYWxsZWQgd2hlbiB0aGUgbGliYXRhIGxheWVyIGlzIGFib3V0IHRvIGlzc3VlIGEgY29tbWFuZC4gV2Ugd3JhcAogICoJdGhpcyBpbnRlcmZhY2Ugc28gdGhhdCB3ZSBjYW4gbG9hZCB0aGUgY29ycmVjdCBBVEEgdGltaW5ncyBpZgotICoJbmVjY2Vzc2FyeS4gT3VyIGxvZ2ljIGFsc28gY2xlYXJzIFRJTUUwL1RJTUUxIGZvciB0aGUgb3RoZXIgZGV2aWNlIHNvCisgKgluZWNlc3NhcnkuIE91ciBsb2dpYyBhbHNvIGNsZWFycyBUSU1FMC9USU1FMSBmb3IgdGhlIG90aGVyIGRldmljZSBzbwogICoJdGhhdCwgZXZlbiBpZiB3ZSBnZXQgdGhpcyB3cm9uZywgY3ljbGVzIHRvIHRoZSBvdGhlciBkZXZpY2Ugd2lsbAogICoJYmUgbWFkZSBQSU8wLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCmluZGV4IGQ1Yjc2NDkuLjgxMDliMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfcmFkaXN5cy5jCkBAIC0xNjEsNyArMTYxLDcgQEAKICAqCiAgKglDYWxsZWQgd2hlbiB0aGUgbGliYXRhIGxheWVyIGlzIGFib3V0IHRvIGlzc3VlIGEgY29tbWFuZC4gV2Ugd3JhcAogICoJdGhpcyBpbnRlcmZhY2Ugc28gdGhhdCB3ZSBjYW4gbG9hZCB0aGUgY29ycmVjdCBBVEEgdGltaW5ncyBpZgotICoJbmVjY2Vzc2FyeS4gT3VyIGxvZ2ljIGFsc28gY2xlYXJzIFRJTUUwL1RJTUUxIGZvciB0aGUgb3RoZXIgZGV2aWNlIHNvCisgKgluZWNlc3NhcnkuIE91ciBsb2dpYyBhbHNvIGNsZWFycyBUSU1FMC9USU1FMSBmb3IgdGhlIG90aGVyIGRldmljZSBzbwogICoJdGhhdCwgZXZlbiBpZiB3ZSBnZXQgdGhpcyB3cm9uZywgY3ljbGVzIHRvIHRoZSBvdGhlciBkZXZpY2Ugd2lsbAogICoJYmUgbWFkZSBQSU8wLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwppbmRleCAyMWViYzQ4Li43MjVhODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBsaWJhdGEgbGF5ZXIgaXMgYWJvdXQgdG8gaXNzdWUgYSBjb21tYW5kLiBXZSB3cmFwCiAgKgl0aGlzIGludGVyZmFjZSBzbyB0aGF0IHdlIGNhbiBsb2FkIHRoZSBjb3JyZWN0IEFUQSB0aW1pbmdzIGlmCi0gKgluZWNjZXNzYXJ5LiAgU3BlY2lmaWNhbGx5IHdlIGhhdmUgYSBwcm9ibGVtIHRoYXQgdGhlcmUgaXMgb25seQorICoJbmVjZXNzYXJ5LiAgU3BlY2lmaWNhbGx5IHdlIGhhdmUgYSBwcm9ibGVtIHRoYXQgdGhlcmUgaXMgb25seQogICoJb25lIE1XRE1BL1VETUEgYml0LgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDRkYzJlNzMuLjVjMWU5Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMTYsNyArMTYsNyBAQAogICoKICAqCUlmIHlvdSBoYXZlIHN0cmFuZ2UgcHJvYmxlbXMgd2l0aCBuVmlkaWEgY2hpcHNldCBzeXN0ZW1zIHBsZWFzZQogICoJc2VlIHRoZSBTSSBzdXBwb3J0IGRvY3VtZW50YXRpb24gYW5kIHVwZGF0ZSB5b3VyIHN5c3RlbSBCSU9TCi0gKglpZiBuZWNjZXNzYXJ5CisgKglpZiBuZWNlc3NhcnkKICAqCiAgKiBUT0RPCiAgKglJZiB3ZSBrbm93IGFsbCBvdXIgZGV2aWNlcyBhcmUgTEJBMjggKG9yIExCQTI4IHNpemVkKSAgd2UgY291bGQgdXNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwppbmRleCA1ZDQxYjY2Li5lYTdhOWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogICoJQHBkZXY6IFBDSSBkZXZpY2UKICAqCUBmbGFnczogY29uZmlndXJhdGlvbiBmbGFncwogICoKLSAqCVNldCB0aGUgRklGTyBwcm9wZXJ0aWVzIGZvciB0aGlzIGRldmljZSBpZiBuZWNjZXNzYXJ5LiBVc2VkIGJvdGggb24KKyAqCVNldCB0aGUgRklGTyBwcm9wZXJ0aWVzIGZvciB0aGlzIGRldmljZSBpZiBuZWNlc3NhcnkuIFVzZWQgYm90aCBvbgogICoJc2V0IHVwIGFuZCBvbiBhbmQgdGhlIHJlc3VtZSBwYXRoCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGRjX2FkbWEuYyBiL2RyaXZlcnMvYXRhL3BkY19hZG1hLmMKaW5kZXggOGQxYjAzZC4uMTk5ZjdlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGRjX2FkbWEuYworKysgYi9kcml2ZXJzL2F0YS9wZGNfYWRtYS5jCkBAIC0zMTgsNyArMzE4LDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXN0cnVjdCBhdGFfcG9ydCAqYXAgPSBxYy0+YXA7CiAJc3RydWN0IGFkbWFfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7Ci0JdTggICpidWYgPSBwcC0+cGt0OworCXU4ICAqYnVmID0gcHAtPnBrdCwgKmxhc3RfYnVmID0gTlVMTDsKIAlpbnQgaSA9ICgyICsgYnVmWzNdKSAqIDg7CiAJdTggcEZMQUdTID0gcE9SRCB8ICgocWMtPnRmLmZsYWdzICYgQVRBX1RGTEFHX1dSSVRFKSA/IHBESVJPIDogMCk7CiAKQEAgLTMzNCw4ICszMzQsNyBAQAogCQkqKF9fbGUzMiAqKShidWYgKyBpKSA9IGNwdV90b19sZTMyKGxlbik7CiAJCWkgKz0gNDsKIAotCQlpZiAoYXRhX3NnX2lzX2xhc3Qoc2csIHFjKSkKLQkJCXBGTEFHUyB8PSBwRU5EOworCQlsYXN0X2J1ZiA9ICZidWZbaV07CiAJCWJ1ZltpKytdID0gcEZMQUdTOwogCQlidWZbaSsrXSA9IHFjLT5kZXYtPmRtYV9tb2RlICYgMHhmOwogCQlidWZbaSsrXSA9IDA7CS8qIHBQS0xXICovCkBAIC0zNDgsNiArMzQ3LDEwIEBACiAJCVZQUklOVEsoIlBSRFsldV0gPSAoMHglbFgsIDB4JVgpXG4iLCBpLzQsCiAJCQkJCSh1bnNpZ25lZCBsb25nKWFkZHIsIGxlbik7CiAJfQorCisJaWYgKGxpa2VseShsYXN0X2J1ZikpCisJCSpsYXN0X2J1ZiB8PSBwRU5EOworCiAJcmV0dXJuIGk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfZnNsLmMgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0YzM3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2F0YS9zYXRhX2ZzbC5jCkBAIC0wLDAgKzEsMTQ5MCBAQAorLyoKKyAqIGRyaXZlcnMvYXRhL3NhdGFfZnNsLmMKKyAqCisgKiBGcmVlc2NhbGUgMy4wR2JwcyBTQVRBIGRldmljZSBkcml2ZXIKKyAqCisgKiBBdXRob3I6IEFzaGlzaCBLYWxyYSA8YXNoaXNoLmthbHJhQGZyZWVzY2FsZS5jb20+CisgKiBMaSBZYW5nIDxsZW9saUBmcmVlc2NhbGUuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKy8qIENvbnRyb2xsZXIgaW5mb3JtYXRpb24gKi8KK2VudW0geworCVNBVEFfRlNMX1FVRVVFX0RFUFRICT0gMTYsCisJU0FUQV9GU0xfTUFYX1BSRAk9IDYzLAorCVNBVEFfRlNMX01BWF9QUkRfVVNBQkxFCT0gU0FUQV9GU0xfTUFYX1BSRCAtIDEsCisJU0FUQV9GU0xfTUFYX1BSRF9ESVJFQ1QJPSAxNiwJLyogRGlyZWN0IFBSRFQgZW50cmllcyAqLworCisJU0FUQV9GU0xfSE9TVF9GTEFHUwk9IChBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZIHwKKwkJCQlBVEFfRkxBR19NTUlPIHwgQVRBX0ZMQUdfUElPX0RNQSB8CisJCQkJQVRBX0ZMQUdfTkNRICB8IEFUQV9GTEFHX1NLSVBfRDJIX0JTWSksCisKKwlTQVRBX0ZTTF9NQVhfQ01EUwk9IFNBVEFfRlNMX1FVRVVFX0RFUFRILAorCVNBVEFfRlNMX0NNRF9IRFJfU0laRQk9IDE2LAkvKiA0IERXT1JEUyAqLworCVNBVEFfRlNMX0NNRF9TTE9UX1NJWkUgID0gKFNBVEFfRlNMX01BWF9DTURTICogU0FUQV9GU0xfQ01EX0hEUl9TSVpFKSwKKworCS8qCisJICogU0FUQS1GU0wgaG9zdCBjb250cm9sbGVyIHN1cHBvcnRzIGEgbWF4LiBvZiAoMTUrMSkgZGlyZWN0IFBSREVzLCBhbmQKKwkgKiBjaGFpbmVkIGluZGlyZWN0IFBSREVzIHVwdG8gYSBtYXggY291bnQgb2YgNjMuCisJICogV2UgYXJlIGFsbG9jYXRpbmcgYW4gYXJyYXkgb2YgNjMgUFJERXMgY29udGlnaW91c2x5LCBidXQgUFJERSMxNSB3aWxsCisJICogYmUgc2V0dXAgYXMgYW4gaW5kaXJlY3QgZGVzY3JpcHRvciwgcG9pbnRpbmcgdG8gaXQncyBuZXh0CisJICogKGNvbnRpZ2lvdXMpIFBSREUuIFRob3VnaCBjaGFpbmVkIGluZGlyZWN0IFBSREUgYXJyYXlzIGFyZQorCSAqIHN1cHBvcnRlZCxpdCB3aWxsIGJlIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBhIGRpcmVjdCBQUkRUIGFuZAorCSAqIGEgc2luZ2xlIGNoYWluL2xpbmsgdG8gaW5kaXJlY3QgUFJERSBhcnJheS9QUkRULgorCSAqLworCisJU0FUQV9GU0xfQ01EX0RFU0NfQ0ZJU19TWgk9IDMyLAorCVNBVEFfRlNMX0NNRF9ERVNDX1NGSVNfU1oJPSAzMiwKKwlTQVRBX0ZTTF9DTURfREVTQ19BQ01EX1NaCT0gMTYsCisJU0FUQV9GU0xfQ01EX0RFU0NfUlNSVkQJCT0gMTYsCisKKwlTQVRBX0ZTTF9DTURfREVTQ19TSVpFCT0gKFNBVEFfRlNMX0NNRF9ERVNDX0NGSVNfU1ogKworCQkJCSBTQVRBX0ZTTF9DTURfREVTQ19TRklTX1NaICsKKwkJCQkgU0FUQV9GU0xfQ01EX0RFU0NfQUNNRF9TWiArCisJCQkJIFNBVEFfRlNMX0NNRF9ERVNDX1JTUlZEICsKKwkJCQkgU0FUQV9GU0xfTUFYX1BSRCAqIDE2KSwKKworCVNBVEFfRlNMX0NNRF9ERVNDX09GRlNFVF9UT19QUkRUCT0KKwkJCQkoU0FUQV9GU0xfQ01EX0RFU0NfQ0ZJU19TWiArCisJCQkJIFNBVEFfRlNMX0NNRF9ERVNDX1NGSVNfU1ogKworCQkJCSBTQVRBX0ZTTF9DTURfREVTQ19BQ01EX1NaICsKKwkJCQkgU0FUQV9GU0xfQ01EX0RFU0NfUlNSVkQpLAorCisJU0FUQV9GU0xfQ01EX0RFU0NfQVJfU1oJPSAoU0FUQV9GU0xfQ01EX0RFU0NfU0laRSAqIFNBVEFfRlNMX01BWF9DTURTKSwKKwlTQVRBX0ZTTF9QT1JUX1BSSVZfRE1BX1NaID0gKFNBVEFfRlNMX0NNRF9TTE9UX1NJWkUgKworCQkJCQlTQVRBX0ZTTF9DTURfREVTQ19BUl9TWiksCisKKwkvKgorCSAqIE1QQzgzMTUgaGFzIHR3byBTQVRBIGNvbnRyb2xsZXJzLCBTQVRBMSAmIFNBVEEyCisJICogKG9uZSBwb3J0IHBlciBjb250cm9sbGVyKQorCSAqIE1QQzgzN3ggaGFzIDIvNCBjb250cm9sbGVycywgb25lIHBvcnQgcGVyIGNvbnRyb2xsZXIKKwkgKi8KKworCVNBVEFfRlNMX01BWF9QT1JUUwk9IDEsCisKKwlTQVRBX0ZTTF9JUlFfRkxBRwk9IElSUUZfU0hBUkVELAorfTsKKworLyoKKyogSG9zdCBDb250cm9sbGVyIGNvbW1hbmQgcmVnaXN0ZXIgc2V0IC0gcGVyIHBvcnQKKyovCitlbnVtIHsKKwlDUSA9IDAsCisJQ0EgPSA4LAorCUNDID0gMHgxMCwKKwlDRSA9IDB4MTgsCisJREUgPSAweDIwLAorCUNIQkEgPSAweDI0LAorCUhTVEFUVVMgPSAweDI4LAorCUhDT05UUk9MID0gMHgyQywKKwlDUVBNUCA9IDB4MzAsCisJU0lHTkFUVVJFID0gMHgzNCwKKwlJQ0MgPSAweDM4LAorCisJLyoKKwkgKiBIb3N0IFN0YXR1cyBSZWdpc3RlciAoSFN0YXR1cykgYml0ZGVmcworCSAqLworCU9OTElORSA9ICgxIDw8IDMxKSwKKwlHT0lOR19PRkZMSU5FID0gKDEgPDwgMzApLAorCUJJU1RfRVJSID0gKDEgPDwgMjkpLAorCisJRkFUQUxfRVJSX0hDX01BU1RFUl9FUlIgPSAoMSA8PCAxOCksCisJRkFUQUxfRVJSX1BBUklUWV9FUlJfVFggPSAoMSA8PCAxNyksCisJRkFUQUxfRVJSX1BBUklUWV9FUlJfUlggPSAoMSA8PCAxNiksCisJRkFUQUxfRVJSX0RBVEFfVU5ERVJSVU4gPSAoMSA8PCAxMyksCisJRkFUQUxfRVJSX0RBVEFfT1ZFUlJVTiA9ICgxIDw8IDEyKSwKKwlGQVRBTF9FUlJfQ1JDX0VSUl9UWCA9ICgxIDw8IDExKSwKKwlGQVRBTF9FUlJfQ1JDX0VSUl9SWCA9ICgxIDw8IDEwKSwKKwlGQVRBTF9FUlJfRklGT19PVlJGTF9UWCA9ICgxIDw8IDkpLAorCUZBVEFMX0VSUl9GSUZPX09WUkZMX1JYID0gKDEgPDwgOCksCisKKwlGQVRBTF9FUlJPUl9ERUNPREUgPSBGQVRBTF9FUlJfSENfTUFTVEVSX0VSUiB8CisJICAgIEZBVEFMX0VSUl9QQVJJVFlfRVJSX1RYIHwKKwkgICAgRkFUQUxfRVJSX1BBUklUWV9FUlJfUlggfAorCSAgICBGQVRBTF9FUlJfREFUQV9VTkRFUlJVTiB8CisJICAgIEZBVEFMX0VSUl9EQVRBX09WRVJSVU4gfAorCSAgICBGQVRBTF9FUlJfQ1JDX0VSUl9UWCB8CisJICAgIEZBVEFMX0VSUl9DUkNfRVJSX1JYIHwKKwkgICAgRkFUQUxfRVJSX0ZJRk9fT1ZSRkxfVFggfCBGQVRBTF9FUlJfRklGT19PVlJGTF9SWCwKKworCUlOVF9PTl9GQVRBTF9FUlIgPSAoMSA8PCA1KSwKKwlJTlRfT05fUEhZUkRZX0NIRyA9ICgxIDw8IDQpLAorCisJSU5UX09OX1NJR05BVFVSRV9VUERBVEUgPSAoMSA8PCAzKSwKKwlJTlRfT05fU05PVElGWV9VUERBVEUgPSAoMSA8PCAyKSwKKwlJTlRfT05fU0lOR0xfREVWSUNFX0VSUiA9ICgxIDw8IDEpLAorCUlOVF9PTl9DTURfQ09NUExFVEUgPSAxLAorCisJSU5UX09OX0VSUk9SID0gSU5UX09OX0ZBVEFMX0VSUiB8CisJICAgIElOVF9PTl9QSFlSRFlfQ0hHIHwgSU5UX09OX1NJTkdMX0RFVklDRV9FUlIsCisKKwkvKgorCSAqIEhvc3QgQ29udHJvbCBSZWdpc3RlciAoSENvbnRyb2wpIGJpdGRlZnMKKwkgKi8KKwlIQ09OVFJPTF9PTkxJTkVfUEhZX1JTVCA9ICgxIDw8IDMxKSwKKwlIQ09OVFJPTF9GT1JDRV9PRkZMSU5FID0gKDEgPDwgMzApLAorCUhDT05UUk9MX1BBUklUWV9QUk9UX01PRCA9ICgxIDw8IDE0KSwKKwlIQ09OVFJPTF9EUEFUSF9QQVJJVFkgPSAoMSA8PCAxMiksCisJSENPTlRST0xfU05PT1BfRU5BQkxFID0gKDEgPDwgMTApLAorCUhDT05UUk9MX1BNUF9BVFRBQ0hFRCA9ICgxIDw8IDkpLAorCUhDT05UUk9MX0NPUFlPVVRfU1RBVEZJUyA9ICgxIDw8IDgpLAorCUlFX09OX0ZBVEFMX0VSUiA9ICgxIDw8IDUpLAorCUlFX09OX1BIWVJEWV9DSEcgPSAoMSA8PCA0KSwKKwlJRV9PTl9TSUdOQVRVUkVfVVBEQVRFID0gKDEgPDwgMyksCisJSUVfT05fU05PVElGWV9VUERBVEUgPSAoMSA8PCAyKSwKKwlJRV9PTl9TSU5HTF9ERVZJQ0VfRVJSID0gKDEgPDwgMSksCisJSUVfT05fQ01EX0NPTVBMRVRFID0gMSwKKworCURFRkFVTFRfUE9SVF9JUlFfRU5BQkxFX01BU0sgPSBJRV9PTl9GQVRBTF9FUlIgfCBJRV9PTl9QSFlSRFlfQ0hHIHwKKwkgICAgSUVfT05fU0lHTkFUVVJFX1VQREFURSB8CisJICAgIElFX09OX1NJTkdMX0RFVklDRV9FUlIgfCBJRV9PTl9DTURfQ09NUExFVEUsCisKKwlFWFRfSU5ESVJFQ1RfU0VHX1BSRF9GTEFHID0gKDEgPDwgMzEpLAorCURBVEFfU05PT1BfRU5BQkxFID0gKDEgPDwgMjIpLAorfTsKKworLyoKKyAqIFNBVEEgU3VwZXJzZXQgUmVnaXN0ZXJzCisgKi8KK2VudW0geworCVNTVEFUVVMgPSAwLAorCVNFUlJPUiA9IDQsCisJU0NPTlRST0wgPSA4LAorCVNOT1RJRlkgPSAweEMsCit9OworCisvKgorICogQ29udHJvbCBTdGF0dXMgUmVnaXN0ZXIgU2V0CisgKi8KK2VudW0geworCVRSQU5TQ0ZHID0gMCwKKwlUUkFOU1NUQVRVUyA9IDQsCisJTElOS0NGRyA9IDgsCisJTElOS0NGRzEgPSAweEMsCisJTElOS0NGRzIgPSAweDEwLAorCUxJTktTVEFUVVMgPSAweDE0LAorCUxJTktTVEFUVVMxID0gMHgxOCwKKwlQSFlDVFJMQ0ZHID0gMHgxQywKKwlDT01NQU5EU1RBVCA9IDB4MjAsCit9OworCisvKiBQSFkgKGxpbmstbGF5ZXIpIGNvbmZpZ3VyYXRpb24gY29udHJvbCAqLworZW51bSB7CisJUEhZX0JJU1RfRU5BQkxFID0gMHgwMSwKK307CisKKy8qCisgKiBDb21tYW5kIEhlYWRlciBUYWJsZSBlbnRyeSwgaS5lLCBjb21tYW5kIHNsb3QKKyAqIDQgRHdvcmRzIHBlciBjb21tYW5kIHNsb3QsIGNvbW1hbmQgaGVhZGVyIHNpemUgPT0gIDY0IER3b3Jkcy4KKyAqLworc3RydWN0IGNtZGhkcl90YmxfZW50cnkgeworCXUzMiBjZGE7CisJdTMyIHByZGVfZmlzX2xlbjsKKwl1MzIgdHRsOworCXUzMiBkZXNjX2luZm87Cit9OworCisvKgorICogRGVzY3JpcHRpb24gaW5mb3JtYXRpb24gYml0ZGVmcworICovCitlbnVtIHsKKwlWRU5ET1JfU1BFQ0lGSUNfQklTVCA9ICgxIDw8IDEwKSwKKwlDTURfREVTQ19TTk9PUF9FTkFCTEUgPSAoMSA8PCA5KSwKKwlGUERNQV9RVUVVRURfQ01EID0gKDEgPDwgOCksCisJU1JTVF9DTUQgPSAoMSA8PCA3KSwKKwlCSVNUID0gKDEgPDwgNiksCisJQVRBUElfQ01EID0gKDEgPDwgNSksCit9OworCisvKgorICogQ29tbWFuZCBEZXNjcmlwdG9yCisgKi8KK3N0cnVjdCBjb21tYW5kX2Rlc2MgeworCXU4IGNmaXNbOCAqIDRdOworCXU4IHNmaXNbOCAqIDRdOworCXU4IGFjbWRbNCAqIDRdOworCXU4IGZpbGxbNCAqIDRdOworCXUzMiBwcmR0W1NBVEFfRlNMX01BWF9QUkRfRElSRUNUICogNF07CisJdTMyIHByZHRfaW5kaXJlY3RbKFNBVEFfRlNMX01BWF9QUkQgLSBTQVRBX0ZTTF9NQVhfUFJEX0RJUkVDVCkgKiA0XTsKK307CisKKy8qCisgKiBQaHlzaWNhbCByZWdpb24gdGFibGUgZGVzY3JpcHRvcihQUkQpCisgKi8KKworc3RydWN0IHByZGUgeworCXUzMiBkYmE7CisJdTggZmlsbFsyICogNF07CisJdTMyIGRkY19hbmRfZXh0OworfTsKKworLyoKKyAqIGF0YV9wb3J0IHByaXZhdGUgZGF0YQorICogVGhpcyBpcyBvdXIgcGVyLXBvcnQgaW5zdGFuY2UgZGF0YS4KKyAqLworc3RydWN0IHNhdGFfZnNsX3BvcnRfcHJpdiB7CisJc3RydWN0IGNtZGhkcl90YmxfZW50cnkgKmNtZHNsb3Q7CisJZG1hX2FkZHJfdCBjbWRzbG90X3BhZGRyOworCXN0cnVjdCBjb21tYW5kX2Rlc2MgKmNtZGVudHJ5OworCWRtYV9hZGRyX3QgY21kZW50cnlfcGFkZHI7CisKKwkvKgorCSAqIFNBVEEgRlNMIGNvbnRyb2xsZXIgaGFzIGEgU3RhdHVzIEZJUyB3aGljaCBzaG91bGQgY29udGFpbiB0aGUKKwkgKiByZWNlaXZlZCBEMkggRklTICYgdGFza2ZpbGUgcmVnaXN0ZXJzLiBUaGlzIFNGSVMgaXMgcHJlc2VudCBpbgorCSAqIHRoZSBjb21tYW5kIGRlc2NyaXB0b3IsIGFuZCB0byBoYXZlIGEgcmVhZHkgcmVmZXJlbmNlIHRvIGl0LAorCSAqIHdlIGFyZSBjYWNoaW5nIGl0IGhlcmUsIHF1aXRlIHNpbWlsYXIgdG8gd2hhdCBpcyBkb25lIGluIEgvVyBvbgorCSAqIEFIQ0kgY29tcGxpYW50IGRldmljZXMgYnkgY29weWluZyB0YXNrZmlsZSBmaWVsZHMgdG8gYSAzMi1iaXQKKwkgKiByZWdpc3Rlci4KKwkgKi8KKworCXN0cnVjdCBhdGFfdGFza2ZpbGUgdGY7Cit9OworCisvKgorICogYXRhX3BvcnQtPmhvc3Rfc2V0IHByaXZhdGUgZGF0YQorICovCitzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2IHsKKwl2b2lkIF9faW9tZW0gKmhjcl9iYXNlOworCXZvaWQgX19pb21lbSAqc3NyX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpjc3JfYmFzZTsKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNhdGFfZnNsX3RhZyh1bnNpZ25lZCBpbnQgdGFnLAorCQkJCQl2b2lkIF9faW9tZW0gKiBoY3JfYmFzZSkKK3sKKwkvKiBXZSBsZXQgbGliQVRBIGNvcmUgZG8gYWN0dWFsIChxdWV1ZSkgdGFnIGFsbG9jYXRpb24gKi8KKworCS8qIGFsbCBub24gTkNRL3F1ZXVlZCBjb21tYW5kcyBzaG91bGQgaGF2ZSB0YWcjMCAqLworCWlmIChhdGFfdGFnX2ludGVybmFsKHRhZykpIHsKKwkJRFBSSU5USygibWFwcGluZyBpbnRlcm5hbCBjbWRzIHRvIHRhZyMwXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKHVubGlrZWx5KHRhZyA+PSBTQVRBX0ZTTF9RVUVVRV9ERVBUSCkpIHsKKwkJRFBSSU5USygidGFnICVkIGludmFsaWQgOiBvdXQgb2YgcmFuZ2VcbiIsIHRhZyk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1bmxpa2VseSgoaW9yZWFkMzIoaGNyX2Jhc2UgKyBDUSkpICYgKDEgPDwgdGFnKSkpIHsKKwkJRFBSSU5USygidGFnICVkIGludmFsaWQgOiBpbiB1c2UhIVxuIiwgdGFnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHRhZzsKK30KKworc3RhdGljIHZvaWQgc2F0YV9mc2xfc2V0dXBfY21kX2hkcl9lbnRyeShzdHJ1Y3Qgc2F0YV9mc2xfcG9ydF9wcml2ICpwcCwKKwkJCQkJIHVuc2lnbmVkIGludCB0YWcsIHUzMiBkZXNjX2luZm8sCisJCQkJCSB1MzIgZGF0YV94ZmVyX2xlbiwgdTggbnVtX3ByZGUsCisJCQkJCSB1OCBmaXNfbGVuKQoreworCWRtYV9hZGRyX3QgY21kX2Rlc2NyaXB0b3JfYWRkcmVzczsKKworCWNtZF9kZXNjcmlwdG9yX2FkZHJlc3MgPSBwcC0+Y21kZW50cnlfcGFkZHIgKworCSAgICB0YWcgKiBTQVRBX0ZTTF9DTURfREVTQ19TSVpFOworCisJLyogTk9URTogYm90aCBkYXRhX3hmZXJfbGVuICYgZmlzX2xlbiBhcmUgRHdvcmQgY291bnRzICovCisKKwlwcC0+Y21kc2xvdFt0YWddLmNkYSA9IGNwdV90b19sZTMyKGNtZF9kZXNjcmlwdG9yX2FkZHJlc3MpOworCXBwLT5jbWRzbG90W3RhZ10ucHJkZV9maXNfbGVuID0KKwkgICAgY3B1X3RvX2xlMzIoKG51bV9wcmRlIDw8IDE2KSB8IChmaXNfbGVuIDw8IDIpKTsKKwlwcC0+Y21kc2xvdFt0YWddLnR0bCA9IGNwdV90b19sZTMyKGRhdGFfeGZlcl9sZW4gJiB+MHgwMyk7CisJcHAtPmNtZHNsb3RbdGFnXS5kZXNjX2luZm8gPSBjcHVfdG9fbGUzMigoZGVzY19pbmZvIHwgKHRhZyAmIDB4MUYpKSk7CisKKwlWUFJJTlRLKCJjZGE9MHgleCwgcHJkZV9maXNfbGVuPTB4JXgsIHR0bD0weCV4LCBkaT0weCV4XG4iLAorCQlwcC0+Y21kc2xvdFt0YWddLmNkYSwKKwkJcHAtPmNtZHNsb3RbdGFnXS5wcmRlX2Zpc19sZW4sCisJCXBwLT5jbWRzbG90W3RhZ10udHRsLCBwcC0+Y21kc2xvdFt0YWddLmRlc2NfaW5mbyk7CisKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBzYXRhX2ZzbF9maWxsX3NnKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMsIHZvaWQgKmNtZF9kZXNjLAorCQkJCSAgICAgdTMyICogdHRsLCBkbWFfYWRkcl90IGNtZF9kZXNjX3BhZGRyKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IG51bV9wcmRlID0gMDsKKwl1MzIgdHRsX2R3b3JkcyA9IDA7CisKKwkvKgorCSAqIE5PVEUgOiBkaXJlY3QgJiBpbmRpcmVjdCBwcmR0J3MgYXJlIGNvbnRpZ2lvdXNseSBhbGxvY2F0ZWQKKwkgKi8KKwlzdHJ1Y3QgcHJkZSAqcHJkID0gKHN0cnVjdCBwcmRlICopJigoc3RydWN0IGNvbW1hbmRfZGVzYyAqKQorCQkJCQkgICAgY21kX2Rlc2MpLT5wcmR0OworCisJc3RydWN0IHByZGUgKnByZF9wdHJfdG9faW5kaXJlY3RfZXh0ID0gTlVMTDsKKwl1bnNpZ25lZCBpbmRpcmVjdF9leHRfc2VnbWVudF9zeiA9IDA7CisJZG1hX2FkZHJfdCBpbmRpcmVjdF9leHRfc2VnbWVudF9wYWRkcjsKKworCVZQUklOVEsoIlNBVEEgRlNMIDogY2QgPSAweCV4LCBwcmQgPSAweCV4XG4iLCBjbWRfZGVzYywgcHJkKTsKKworCWluZGlyZWN0X2V4dF9zZWdtZW50X3BhZGRyID0gY21kX2Rlc2NfcGFkZHIgKworCSAgICBTQVRBX0ZTTF9DTURfREVTQ19PRkZTRVRfVE9fUFJEVCArIFNBVEFfRlNMX01BWF9QUkRfRElSRUNUICogMTY7CisKKwlhdGFfZm9yX2VhY2hfc2coc2csIHFjKSB7CisJCWRtYV9hZGRyX3Qgc2dfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJdTMyIHNnX2xlbiA9IHNnX2RtYV9sZW4oc2cpOworCisJCVZQUklOVEsoIlNBVEEgRlNMIDogZmlsbF9zZywgc2dfYWRkciA9IDB4JXgsIHNnX2xlbiA9ICVkXG4iLAorCQkJc2dfYWRkciwgc2dfbGVuKTsKKworCQkvKiB3YXJuIGlmIGVhY2ggcy9nIGVsZW1lbnQgaXMgbm90IGR3b3JkIGFsaWduZWQgKi8KKwkJaWYgKHNnX2FkZHIgJiAweDAzKQorCQkJYXRhX3BvcnRfcHJpbnRrKHFjLT5hcCwgS0VSTl9FUlIsCisJCQkJCSJzL2cgYWRkciB1bmFsaWduZWQgOiAweCV4XG4iLCBzZ19hZGRyKTsKKwkJaWYgKHNnX2xlbiAmIDB4MDMpCisJCQlhdGFfcG9ydF9wcmludGsocWMtPmFwLCBLRVJOX0VSUiwKKwkJCQkJInMvZyBsZW4gdW5hbGlnbmVkIDogMHgleFxuIiwgc2dfbGVuKTsKKworCQlpZiAoKG51bV9wcmRlID09IChTQVRBX0ZTTF9NQVhfUFJEX0RJUkVDVCAtIDEpKSAmJgorCQkgICAgIWF0YV9zZ19pc19sYXN0KHNnLCBxYykpIHsKKwkJCVZQUklOVEsoInNldHRpbmcgaW5kaXJlY3QgcHJkZVxuIik7CisJCQlwcmRfcHRyX3RvX2luZGlyZWN0X2V4dCA9IHByZDsKKwkJCXByZC0+ZGJhID0gY3B1X3RvX2xlMzIoaW5kaXJlY3RfZXh0X3NlZ21lbnRfcGFkZHIpOworCQkJaW5kaXJlY3RfZXh0X3NlZ21lbnRfc3ogPSAwOworCQkJKytwcmQ7CisJCQkrK251bV9wcmRlOworCQl9CisKKwkJdHRsX2R3b3JkcyArPSBzZ19sZW47CisJCXByZC0+ZGJhID0gY3B1X3RvX2xlMzIoc2dfYWRkcik7CisJCXByZC0+ZGRjX2FuZF9leHQgPQorCQkgICAgY3B1X3RvX2xlMzIoREFUQV9TTk9PUF9FTkFCTEUgfCAoc2dfbGVuICYgfjB4MDMpKTsKKworCQlWUFJJTlRLKCJzZ19maWxsLCB0dGw9JWQsIGRiYT0weCV4LCBkZGM9MHgleFxuIiwKKwkJCXR0bF9kd29yZHMsIHByZC0+ZGJhLCBwcmQtPmRkY19hbmRfZXh0KTsKKworCQkrK251bV9wcmRlOworCQkrK3ByZDsKKwkJaWYgKHByZF9wdHJfdG9faW5kaXJlY3RfZXh0KQorCQkJaW5kaXJlY3RfZXh0X3NlZ21lbnRfc3ogKz0gc2dfbGVuOworCX0KKworCWlmIChwcmRfcHRyX3RvX2luZGlyZWN0X2V4dCkgeworCQkvKiBzZXQgaW5kaXJlY3QgZXh0ZW5zaW9uIGZsYWcgYWxvbmcgd2l0aCBpbmRpcmVjdCBleHQuIHNpemUgKi8KKwkJcHJkX3B0cl90b19pbmRpcmVjdF9leHQtPmRkY19hbmRfZXh0ID0KKwkJICAgIGNwdV90b19sZTMyKChFWFRfSU5ESVJFQ1RfU0VHX1BSRF9GTEFHIHwKKwkJCQkgREFUQV9TTk9PUF9FTkFCTEUgfAorCQkJCSAoaW5kaXJlY3RfZXh0X3NlZ21lbnRfc3ogJiB+MHgwMykpKTsKKwl9CisKKwkqdHRsID0gdHRsX2R3b3JkczsKKwlyZXR1cm4gbnVtX3ByZGU7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZnNsX3FjX3ByZXAoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKK3sKKwlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gcWMtPmFwOworCXN0cnVjdCBzYXRhX2ZzbF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOworCXVuc2lnbmVkIGludCB0YWcgPSBzYXRhX2ZzbF90YWcocWMtPnRhZywgaGNyX2Jhc2UpOworCXN0cnVjdCBjb21tYW5kX2Rlc2MgKmNkOworCXUzMiBkZXNjX2luZm8gPSBDTURfREVTQ19TTk9PUF9FTkFCTEU7CisJdTMyIG51bV9wcmRlID0gMDsKKwl1MzIgdHRsX2R3b3JkcyA9IDA7CisJZG1hX2FkZHJfdCBjZF9wYWRkcjsKKworCWNkID0gKHN0cnVjdCBjb21tYW5kX2Rlc2MgKilwcC0+Y21kZW50cnkgKyB0YWc7CisJY2RfcGFkZHIgPSBwcC0+Y21kZW50cnlfcGFkZHIgKyB0YWcgKiBTQVRBX0ZTTF9DTURfREVTQ19TSVpFOworCisJYXRhX3RmX3RvX2ZpcygmcWMtPnRmLCAwLCAxLCAodTggKikgJiBjZC0+Y2Zpcyk7CisKKwlWUFJJTlRLKCJEdW1waW5nIGNmaXMgOiAweCV4LCAweCV4LCAweCV4XG4iLAorCQljZC0+Y2Zpc1swXSwgY2QtPmNmaXNbMV0sIGNkLT5jZmlzWzJdKTsKKworCWlmIChxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfTkNRKSB7CisJCVZQUklOVEsoIkZQRE1BIHhmZXIsU2N0b3IgY250WzA6N10sWzg6MTVdID0gJWQsJWRcbiIsCisJCQljZC0+Y2Zpc1szXSwgY2QtPmNmaXNbMTFdKTsKKwl9CisKKwkvKiBzZXR1cCAiQUNNRCAtIGF0YXBpIGNvbW1hbmQiIGluIGNtZC4gZGVzYy4gaWYgdGhpcyBpcyBBVEFQSSBjbWQgKi8KKwlpZiAoaXNfYXRhcGlfdGFza2ZpbGUoJnFjLT50ZikpIHsKKwkJZGVzY19pbmZvIHw9IEFUQVBJX0NNRDsKKwkJbWVtc2V0KCh2b2lkICopJmNkLT5hY21kLCAwLCAzMik7CisJCW1lbWNweSgodm9pZCAqKSZjZC0+YWNtZCwgcWMtPmNkYiwgcWMtPmRldi0+Y2RiX2xlbik7CisJfQorCisJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRE1BTUFQKQorCQludW1fcHJkZSA9IHNhdGFfZnNsX2ZpbGxfc2cocWMsICh2b2lkICopY2QsCisJCQkJCSAgICAmdHRsX2R3b3JkcywgY2RfcGFkZHIpOworCisJaWYgKHFjLT50Zi5wcm90b2NvbCA9PSBBVEFfUFJPVF9OQ1EpCisJCWRlc2NfaW5mbyB8PSBGUERNQV9RVUVVRURfQ01EOworCisJc2F0YV9mc2xfc2V0dXBfY21kX2hkcl9lbnRyeShwcCwgdGFnLCBkZXNjX2luZm8sIHR0bF9kd29yZHMsCisJCQkJICAgICBudW1fcHJkZSwgNSk7CisKKwlWUFJJTlRLKCJTQVRBIEZTTCA6IHh4X3FjX3ByZXAsIGRpID0gMHgleCwgdHRsID0gJWQsIG51bV9wcmRlID0gJWRcbiIsCisJCWRlc2NfaW5mbywgdHRsX2R3b3JkcywgbnVtX3ByZGUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNhdGFfZnNsX3FjX2lzc3VlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IHFjLT5hcDsKKwlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOworCXVuc2lnbmVkIGludCB0YWcgPSBzYXRhX2ZzbF90YWcocWMtPnRhZywgaGNyX2Jhc2UpOworCisJVlBSSU5USygieHhfcWNfaXNzdWUgY2FsbGVkLENRPTB4JXgsQ0E9MHgleCxDRT0weCV4LENDPTB4JXhcbiIsCisJCWlvcmVhZDMyKENRICsgaGNyX2Jhc2UpLAorCQlpb3JlYWQzMihDQSArIGhjcl9iYXNlKSwKKwkJaW9yZWFkMzIoQ0UgKyBoY3JfYmFzZSksIGlvcmVhZDMyKENDICsgaGNyX2Jhc2UpKTsKKworCS8qIFNpbXBseSBxdWV1ZSBjb21tYW5kIHRvIHRoZSBjb250cm9sbGVyL2RldmljZSAqLworCWlvd3JpdGUzMigxIDw8IHRhZywgQ1EgKyBoY3JfYmFzZSk7CisKKwlWUFJJTlRLKCJ4eF9xY19pc3N1ZSBjYWxsZWQsIHRhZz0lZCwgQ1E9MHgleCwgQ0E9MHgleFxuIiwKKwkJdGFnLCBpb3JlYWQzMihDUSArIGhjcl9iYXNlKSwgaW9yZWFkMzIoQ0EgKyBoY3JfYmFzZSkpOworCisJVlBSSU5USygiQ0U9MHgleCwgREU9MHgleCwgQ0M9MHgleCwgQ21kU3RhdCA9IDB4JXhcbiIsCisJCWlvcmVhZDMyKENFICsgaGNyX2Jhc2UpLAorCQlpb3JlYWQzMihERSArIGhjcl9iYXNlKSwKKwkJaW9yZWFkMzIoQ0MgKyBoY3JfYmFzZSksIGlvcmVhZDMyKENPTU1BTkRTVEFUICsgY3NyX2Jhc2UpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhdGFfZnNsX3Njcl93cml0ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnX2luLAorCQkJICAgICAgIHUzMiB2YWwpCit7CisJc3RydWN0IHNhdGFfZnNsX2hvc3RfcHJpdiAqaG9zdF9wcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKnNzcl9iYXNlID0gaG9zdF9wcml2LT5zc3JfYmFzZTsKKwl1bnNpZ25lZCBpbnQgc2NfcmVnOworCisJc3dpdGNoIChzY19yZWdfaW4pIHsKKwljYXNlIFNDUl9TVEFUVVM6CisJCXNjX3JlZyA9IDA7CisJCWJyZWFrOworCWNhc2UgU0NSX0VSUk9SOgorCQlzY19yZWcgPSAxOworCQlicmVhazsKKwljYXNlIFNDUl9DT05UUk9MOgorCQlzY19yZWcgPSAyOworCQlicmVhazsKKwljYXNlIFNDUl9BQ1RJVkU6CisJCXNjX3JlZyA9IDM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCVZQUklOVEsoInh4X3Njcl93cml0ZSwgcmVnX2luID0gJWRcbiIsIHNjX3JlZyk7CisKKwlpb3dyaXRlMzIodmFsLCAodm9pZCBfX2lvbWVtICopc3NyX2Jhc2UgKyAoc2NfcmVnICogNCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhdGFfZnNsX3Njcl9yZWFkKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWdfaW4sCisJCQl1MzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBhcC0+aG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqc3NyX2Jhc2UgPSBob3N0X3ByaXYtPnNzcl9iYXNlOworCXVuc2lnbmVkIGludCBzY19yZWc7CisKKwlzd2l0Y2ggKHNjX3JlZ19pbikgeworCWNhc2UgU0NSX1NUQVRVUzoKKwkJc2NfcmVnID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ1JfRVJST1I6CisJCXNjX3JlZyA9IDE7CisJCWJyZWFrOworCWNhc2UgU0NSX0NPTlRST0w6CisJCXNjX3JlZyA9IDI7CisJCWJyZWFrOworCWNhc2UgU0NSX0FDVElWRToKKwkJc2NfcmVnID0gMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJVlBSSU5USygieHhfc2NyX3JlYWQsIHJlZ19pbiA9ICVkXG4iLCBzY19yZWcpOworCisJKnZhbCA9IGlvcmVhZDMyKCh2b2lkIF9faW9tZW0gKilzc3JfYmFzZSArIChzY19yZWcgKiA0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZnNsX2ZyZWV6ZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIHRlbXA7CisKKwlWUFJJTlRLKCJ4eF9mcmVlemUsIENRPTB4JXgsIENBPTB4JXgsIENFPTB4JXgsIERFPTB4JXhcbiIsCisJCWlvcmVhZDMyKENRICsgaGNyX2Jhc2UpLAorCQlpb3JlYWQzMihDQSArIGhjcl9iYXNlKSwKKwkJaW9yZWFkMzIoQ0UgKyBoY3JfYmFzZSksIGlvcmVhZDMyKERFICsgaGNyX2Jhc2UpKTsKKwlWUFJJTlRLKCJDbWRTdGF0ID0gMHgleFxuIiwgaW9yZWFkMzIoY3NyX2Jhc2UgKyBDT01NQU5EU1RBVCkpOworCisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoZSBjb250cm9sbGVyL3BvcnQgKi8KKwl0ZW1wID0gaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCk7CisJaW93cml0ZTMyKCh0ZW1wICYgfjB4M0YpLCBoY3JfYmFzZSArIEhDT05UUk9MKTsKKworCVZQUklOVEsoImluIHh4X2ZyZWV6ZSA6IEhDb250cm9sID0gMHgleCwgSFN0YXR1cyA9IDB4JXhcbiIsCisJCWlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpLCBpb3JlYWQzMihoY3JfYmFzZSArIEhTVEFUVVMpKTsKK30KKworc3RhdGljIHZvaWQgc2F0YV9mc2xfdGhhdyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIHRlbXA7CisKKwkvKiBhY2suIGFueSBwZW5kaW5nIElSUXMgZm9yIHRoaXMgY29udHJvbGxlci9wb3J0ICovCisJdGVtcCA9IGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUyk7CisKKwlWUFJJTlRLKCJ4eF90aGF3LCBwZW5kaW5nIElSUXMgPSAweCV4XG4iLCAodGVtcCAmIDB4M0YpKTsKKworCWlmICh0ZW1wICYgMHgzRikKKwkJaW93cml0ZTMyKCh0ZW1wICYgMHgzRiksIGhjcl9iYXNlICsgSFNUQVRVUyk7CisKKwkvKiBlbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgY29udHJvbGxlci9wb3J0ICovCisJdGVtcCA9IGlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpOworCWlvd3JpdGUzMigodGVtcCB8IERFRkFVTFRfUE9SVF9JUlFfRU5BQkxFX01BU0spLCBoY3JfYmFzZSArIEhDT05UUk9MKTsKKworCVZQUklOVEsoInh4X3RoYXcgOiBIQ29udHJvbCA9IDB4JXgsIEhTdGF0dXMgPSAweCV4XG4iLAorCQlpb3JlYWQzMihoY3JfYmFzZSArIEhDT05UUk9MKSwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIU1RBVFVTKSk7Cit9CisKKy8qCisgKiBOT1RFIDogMXN0IEQySCBGSVMgZnJvbSBkZXZpY2UgZG9lcyBub3QgdXBkYXRlIHNmaXMgaW4gY29tbWFuZCBkZXNjcmlwdG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2F0YV9mc2xfY2FjaGVfdGFza2ZpbGVfZnJvbV9kMmhfZmlzKHN0cnVjdCBhdGFfcXVldWVkX2NtZAorCQkJCQkJCSpxYywKKwkJCQkJCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBzYXRhX2ZzbF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKwl1OCBmaXNbNiAqIDRdOworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdW5zaWduZWQgaW50IHRhZyA9IHNhdGFfZnNsX3RhZyhxYy0+dGFnLCBoY3JfYmFzZSk7CisJc3RydWN0IGNvbW1hbmRfZGVzYyAqY2Q7CisKKwljZCA9IHBwLT5jbWRlbnRyeSArIHRhZzsKKworCW1lbWNweShmaXMsICZjZC0+c2ZpcywgNiAqIDQpOwkvKiBzaG91bGQgd2UgdXNlIG1lbWNweV9mcm9tX2lvKCkgKi8KKwlhdGFfdGZfZnJvbV9maXMoZmlzLCAmcHAtPnRmKTsKK30KKworc3RhdGljIHU4IHNhdGFfZnNsX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBzYXRhX2ZzbF9wb3J0X3ByaXYgKnBwID0gYXAtPnByaXZhdGVfZGF0YTsKKworCXJldHVybiBwcC0+dGYuY29tbWFuZDsKK30KKworc3RhdGljIHZvaWQgc2F0YV9mc2xfdGZfcmVhZChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX3Rhc2tmaWxlICp0ZikKK3sKKwlzdHJ1Y3Qgc2F0YV9mc2xfcG9ydF9wcml2ICpwcCA9IGFwLT5wcml2YXRlX2RhdGE7CisKKwkqdGYgPSBwcC0+dGY7Cit9CisKK3N0YXRpYyBpbnQgc2F0YV9mc2xfcG9ydF9zdGFydChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFwLT5ob3N0LT5kZXY7CisJc3RydWN0IHNhdGFfZnNsX3BvcnRfcHJpdiAqcHA7CisJaW50IHJldHZhbDsKKwl2b2lkICptZW07CisJZG1hX2FkZHJfdCBtZW1fZG1hOworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIHRlbXA7CisKKwlwcCA9IGt6YWxsb2Moc2l6ZW9mKCpwcCksIEdGUF9LRVJORUwpOworCWlmICghcHApCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBhbGxvY2F0ZSBwZXIgY29tbWFuZCBkbWEgYWxpZ25tZW50IHBhZCBidWZmZXIsIHdoaWNoIGlzIHVzZWQKKwkgKiBpbnRlcm5hbGx5IGJ5IGxpYkFUQSB0byBlbnN1cmUgdGhhdCBhbGwgdHJhbnNmZXJzIGVuZGluZyBvbgorCSAqIHVuYWxpZ25lZCBib3VuZGFyaWVzIGFyZSBwYWRkZWQsIHRvIGFsaWduIG9uIER3b3JkIGJvdW5kYXJpZXMKKwkgKi8KKwlyZXR2YWwgPSBhdGFfcGFkX2FsbG9jKGFwLCBkZXYpOworCWlmIChyZXR2YWwpIHsKKwkJa2ZyZWUocHApOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCW1lbSA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIFNBVEFfRlNMX1BPUlRfUFJJVl9ETUFfU1osICZtZW1fZG1hLAorCQkJCSBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbSkgeworCQlhdGFfcGFkX2ZyZWUoYXAsIGRldik7CisJCWtmcmVlKHBwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbXNldChtZW0sIDAsIFNBVEFfRlNMX1BPUlRfUFJJVl9ETUFfU1opOworCisJcHAtPmNtZHNsb3QgPSBtZW07CisJcHAtPmNtZHNsb3RfcGFkZHIgPSBtZW1fZG1hOworCisJbWVtICs9IFNBVEFfRlNMX0NNRF9TTE9UX1NJWkU7CisJbWVtX2RtYSArPSBTQVRBX0ZTTF9DTURfU0xPVF9TSVpFOworCisJcHAtPmNtZGVudHJ5ID0gbWVtOworCXBwLT5jbWRlbnRyeV9wYWRkciA9IG1lbV9kbWE7CisKKwlhcC0+cHJpdmF0ZV9kYXRhID0gcHA7CisKKwlWUFJJTlRLKCJDSEJBID0gMHgleCwgY21kZW50cnlfcGh5cyA9IDB4JXhcbiIsCisJCXBwLT5jbWRzbG90X3BhZGRyLCBwcC0+Y21kZW50cnlfcGFkZHIpOworCisJLyogTm93LCB1cGRhdGUgdGhlIENIQkEgcmVnaXN0ZXIgaW4gaG9zdCBjb250cm9sbGVyIGNtZCByZWdpc3RlciBzZXQgKi8KKwlpb3dyaXRlMzIocHAtPmNtZHNsb3RfcGFkZHIgJiAweGZmZmZmZmZmLCBoY3JfYmFzZSArIENIQkEpOworCisJLyoKKwkgKiBOb3csIHdlIGNhbiBicmluZyB0aGUgY29udHJvbGxlciBvbi1saW5lICYgYWxzbyBpbml0aWF0ZQorCSAqIHRoZSBDT01JTklUIHNlcXVlbmNlLCB3ZSBzaW1wbHkgcmV0dXJuIGhlcmUgYW5kIHRoZSBib290LXByb2JpbmcKKwkgKiAmIGRldmljZSBkaXNjb3ZlcnkgcHJvY2VzcyBpcyByZS1pbml0aWF0ZWQgYnkgbGliQVRBIHVzaW5nIGEKKwkgKiBTb2Z0cmVzZXQgRUggKGR1bW15KSBzZXNzaW9uLiBIZW5jZSwgYm9vdCBwcm9iaW5nIGFuZCBkZXZpY2UKKwkgKiBkaXNjb3ZleSB3aWxsIGJlIHBhcnQgb2Ygc2F0YV9mc2xfc29mdHJlc2V0KCkgY2FsbGJhY2suCisJICovCisKKwl0ZW1wID0gaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCk7CisJaW93cml0ZTMyKCh0ZW1wIHwgSENPTlRST0xfT05MSU5FX1BIWV9SU1QpLCBoY3JfYmFzZSArIEhDT05UUk9MKTsKKworCVZQUklOVEsoIkhTdGF0dXMgPSAweCV4XG4iLCBpb3JlYWQzMihoY3JfYmFzZSArIEhTVEFUVVMpKTsKKwlWUFJJTlRLKCJIQ29udHJvbCA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpKTsKKwlWUFJJTlRLKCJDSEJBICA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0hCQSkpOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciA4MzE1RFMgYm9hcmQgM2dicHMgbGluay11cCBpc3N1ZSwKKwkgKiBjdXJyZW50bHkgbGltaXQgU0FUQSBwb3J0IHRvIEdFTjEgc3BlZWQKKwkgKi8KKwlzYXRhX2ZzbF9zY3JfcmVhZChhcCwgU0NSX0NPTlRST0wsICZ0ZW1wKTsKKwl0ZW1wICY9IH4oMHhGIDw8IDQpOworCXRlbXAgfD0gKDB4MSA8PCA0KTsKKwlzYXRhX2ZzbF9zY3Jfd3JpdGUoYXAsIFNDUl9DT05UUk9MLCB0ZW1wKTsKKworCXNhdGFfZnNsX3Njcl9yZWFkKGFwLCBTQ1JfQ09OVFJPTCwgJnRlbXApOworCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBkZXYsICJzY3JfY29udHJvbCwgc3BlZWQgbGltaXRlZCB0byAleFxuIiwKKwkJCXRlbXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZnNsX3BvcnRfc3RvcChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGFwLT5ob3N0LT5kZXY7CisJc3RydWN0IHNhdGFfZnNsX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIHRlbXA7CisKKwkvKgorCSAqIEZvcmNlIGhvc3QgY29udHJvbGxlciB0byBnbyBvZmYtbGluZSwgYWJvcnRpbmcgY3VycmVudCBvcGVyYXRpb25zCisJICovCisJdGVtcCA9IGlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpOworCXRlbXAgJj0gfkhDT05UUk9MX09OTElORV9QSFlfUlNUOworCXRlbXAgfD0gSENPTlRST0xfRk9SQ0VfT0ZGTElORTsKKwlpb3dyaXRlMzIodGVtcCwgaGNyX2Jhc2UgKyBIQ09OVFJPTCk7CisKKwkvKiBQb2xsIGZvciBjb250cm9sbGVyIHRvIGdvIG9mZmxpbmUgLSBzaG91bGQgaGFwcGVuIGltbWVkaWF0ZWx5ICovCisJYXRhX3dhaXRfcmVnaXN0ZXIoaGNyX2Jhc2UgKyBIU1RBVFVTLCBPTkxJTkUsIE9OTElORSwgMSwgMSk7CisKKwlhcC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKwlkbWFfZnJlZV9jb2hlcmVudChkZXYsIFNBVEFfRlNMX1BPUlRfUFJJVl9ETUFfU1osCisJCQkgIHBwLT5jbWRzbG90LCBwcC0+Y21kc2xvdF9wYWRkcik7CisKKwlhdGFfcGFkX2ZyZWUoYXAsIGRldik7CisJa2ZyZWUocHApOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHNhdGFfZnNsX2Rldl9jbGFzc2lmeShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBpb3JlYWQzMihoY3JfYmFzZSArIFNJR05BVFVSRSk7CisKKwlWUFJJTlRLKCJyYXcgc2lnID0gMHgleFxuIiwgdGVtcCk7CisJVlBSSU5USygiSFN0YXR1cyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUykpOworCVZQUklOVEsoIkhDb250cm9sID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCkpOworCisJdGYubGJhaCA9ICh0ZW1wID4+IDI0KSAmIDB4ZmY7CisJdGYubGJhbSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7CisJdGYubGJhbCA9ICh0ZW1wID4+IDgpICYgMHhmZjsKKwl0Zi5uc2VjdCA9IHRlbXAgJiAweGZmOworCisJcmV0dXJuIGF0YV9kZXZfY2xhc3NpZnkoJnRmKTsKK30KKworc3RhdGljIGludCBzYXRhX2ZzbF9zb2Z0cmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJc3RydWN0IHNhdGFfZnNsX3BvcnRfcHJpdiAqcHAgPSBhcC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIHRlbXA7CisJc3RydWN0IGF0YV90YXNrZmlsZSB0ZjsKKwl1OCAqY2ZpczsKKwl1MzIgU2Vycm9yOworCWludCBpID0gMDsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgcWM7CisJdTggKmJ1ZjsKKwlkbWFfYWRkcl90IGRtYV9hZGRyZXNzOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgbG9uZyBzdGFydF9qaWZmaWVzOworCisJRFBSSU5USygiaW4geHhfc29mdHJlc2V0XG4iKTsKKwordHJ5X29mZmxpbmVfYWdhaW46CisJLyoKKwkgKiBGb3JjZSBob3N0IGNvbnRyb2xsZXIgdG8gZ28gb2ZmLWxpbmUsIGFib3J0aW5nIGN1cnJlbnQgb3BlcmF0aW9ucworCSAqLworCXRlbXAgPSBpb3JlYWQzMihoY3JfYmFzZSArIEhDT05UUk9MKTsKKwl0ZW1wICY9IH5IQ09OVFJPTF9PTkxJTkVfUEhZX1JTVDsKKwlpb3dyaXRlMzIodGVtcCwgaGNyX2Jhc2UgKyBIQ09OVFJPTCk7CisKKwkvKiBQb2xsIGZvciBjb250cm9sbGVyIHRvIGdvIG9mZmxpbmUgKi8KKwl0ZW1wID0gYXRhX3dhaXRfcmVnaXN0ZXIoaGNyX2Jhc2UgKyBIU1RBVFVTLCBPTkxJTkUsIE9OTElORSwgMSwgNTAwKTsKKworCWlmICh0ZW1wICYgT05MSU5FKSB7CisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsCisJCQkJIlNvZnRyZXNldCBmYWlsZWQsIG5vdCBvZmYtbGluZWQgJWRcbiIsIGkpOworCisJCS8qCisJCSAqIFRyeSB0byBvZmZsaW5lIGNvbnRyb2xsZXIgYXRsZWFzdCB0d2ljZQorCQkgKi8KKwkJaSsrOworCQlpZiAoaSA9PSAyKQorCQkJZ290byBlcnI7CisJCWVsc2UKKwkJCWdvdG8gdHJ5X29mZmxpbmVfYWdhaW47CisJfQorCisJRFBSSU5USygic29mdHJlc2V0LCBjb250cm9sbGVyIG9mZi1saW5lZFxuIik7CisJVlBSSU5USygiSFN0YXR1cyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUykpOworCVZQUklOVEsoIkhDb250cm9sID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCkpOworCisJLyoKKwkgKiBQSFkgcmVzZXQgc2hvdWxkIHJlbWFpbiBhc3NlcnRlZCBmb3IgYXRsZWFzdCAxbXMKKwkgKi8KKwltc2xlZXAoMSk7CisKKwkvKgorCSAqIE5vdywgYnJpbmcgdGhlIGhvc3QgY29udHJvbGxlciBvbmxpbmUgYWdhaW4sIHRoaXMgY2FuIHRha2UgdGltZQorCSAqIGFzIFBIWSByZXNldCBhbmQgY29tbXVuaWNhdGlvbiBlc3RhYmxpc2htZW50LCAxc3QgRDJIIEZJUyBhbmQKKwkgKiBkZXZpY2Ugc2lnbmF0dXJlIHVwZGF0ZSBpcyBkb25lLCBvbiBzYWZlIHNpZGUgYXNzdW1lIDUwMG1zCisJICogTk9URSA6IEhvc3Qgb25saW5lIHN0YXR1cyBtYXkgYmUgaW5kaWNhdGVkIGltbWVkaWF0ZWx5ISEKKwkgKi8KKworCXRlbXAgPSBpb3JlYWQzMihoY3JfYmFzZSArIEhDT05UUk9MKTsKKwl0ZW1wIHw9IChIQ09OVFJPTF9PTkxJTkVfUEhZX1JTVCB8IEhDT05UUk9MX1NOT09QX0VOQUJMRSk7CisJaW93cml0ZTMyKHRlbXAsIGhjcl9iYXNlICsgSENPTlRST0wpOworCisJdGVtcCA9IGF0YV93YWl0X3JlZ2lzdGVyKGhjcl9iYXNlICsgSFNUQVRVUywgT05MSU5FLCAwLCAxLCA1MDApOworCisJaWYgKCEodGVtcCAmIE9OTElORSkpIHsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwKKwkJCQkiU29mdHJlc2V0IGZhaWxlZCwgbm90IG9uLWxpbmVkXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJRFBSSU5USygic29mdHJlc2V0LCBjb250cm9sbGVyIG9mZi1saW5lZCAmIG9uLWxpbmVkXG4iKTsKKwlWUFJJTlRLKCJIU3RhdHVzID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIU1RBVFVTKSk7CisJVlBSSU5USygiSENvbnRyb2wgPSAweCV4XG4iLCBpb3JlYWQzMihoY3JfYmFzZSArIEhDT05UUk9MKSk7CisKKwkvKgorCSAqIEZpcnN0LCB3YWl0IGZvciB0aGUgUEhZUkRZIGNoYW5nZSB0byBvY2N1ciBiZWZvcmUgd2FpdGluZyBmb3IKKwkgKiB0aGUgc2lnbmF0dXJlLCBhbmQgYWxzbyB2ZXJpZnkgaWYgU1N0YXR1cyBpbmRpY2F0ZXMgZGV2aWNlCisJICogcHJlc2VuY2UKKwkgKi8KKworCXRlbXAgPSBhdGFfd2FpdF9yZWdpc3RlcihoY3JfYmFzZSArIEhTVEFUVVMsIDB4RkYsIDAsIDEsIDUwMCk7CisJaWYgKCghKHRlbXAgJiAweDEwKSkgfHwgYXRhX3BvcnRfb2ZmbGluZShhcCkpIHsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsCisJCQkJIk5vIERldmljZSBPUiBQSFlSRFkgY2hhbmdlLEhzdGF0dXMgPSAweCV4XG4iLAorCQkJCWlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUykpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKgorCSAqIFdhaXQgZm9yIHRoZSBmaXJzdCBEMkggZnJvbSBkZXZpY2UsaS5lLHNpZ25hdHVyZSB1cGRhdGUgbm90aWZpY2F0aW9uCisJICovCisJc3RhcnRfamlmZmllcyA9IGppZmZpZXM7CisJdGVtcCA9IGF0YV93YWl0X3JlZ2lzdGVyKGhjcl9iYXNlICsgSFNUQVRVUywgMHhGRiwgMHgxMCwKKwkJCTUwMCwgamlmZmllc190b19tc2VjcyhkZWFkbGluZSAtIHN0YXJ0X2ppZmZpZXMpKTsKKworCWlmICgodGVtcCAmIDB4RkYpICE9IDB4MTgpIHsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX1dBUk5JTkcsICJObyBTaWduYXR1cmUgVXBkYXRlXG4iKTsKKwkJZ290byBlcnI7CisJfSBlbHNlIHsKKwkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0lORk8sCisJCQkJIlNpZ25hdHVyZSBVcGRhdGUgZGV0ZWN0ZWQgQCAlZCBtc2Vjc1xuIiwKKwkJCQlqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBzdGFydF9qaWZmaWVzKSk7CisJfQorCisJLyoKKwkgKiBTZW5kIGEgZGV2aWNlIHJlc2V0IChTUlNUKSBleHBsaWNpdGx5IG9uIGNvbW1hbmQgc2xvdCAjMAorCSAqIENoZWNrIDogd2lsbCB0aGUgY29tbWFuZCBxdWV1ZSAocmVnKSBiZSBjbGVhcmVkIGR1cmluZyBvZmZsaW5pbmcgPz8KKwkgKiBBbHNvIHdlIHdpbGwgYmUgb25saW5lIG9ubHkgaWYgUGh5IGNvbW1uLiBoYXMgYmVlbiBlc3RhYmxpc2hlZAorCSAqIGFuZCBkZXZpY2UgcHJlc2VuY2UgaGFzIGJlZW4gZGV0ZWN0ZWQsIHRoZXJlZm9yZSBpZiB3ZSBoYXZlCisJICogcmVhY2hlZCBoZXJlLCB3ZSBjYW4gc2VuZCBhIGNvbW1hbmQgdG8gdGhlIHRhcmdldCBkZXZpY2UKKwkgKi8KKworCWlmIChhcC0+c2FjdGl2ZSkKKwkJZ290byBza2lwX3Nyc3RfZG9fbmNxX2Vycm9yX2hhbmRsaW5nOworCisJRFBSSU5USygiU2VuZGluZyBTUlNUL2RldmljZSByZXNldFxuIik7CisKKwlhdGFfdGZfaW5pdChhcC0+ZGV2aWNlLCAmdGYpOworCWNmaXMgPSAodTggKikgJiBwcC0+Y21kZW50cnktPmNmaXM7CisKKwkvKiBkZXZpY2UgcmVzZXQvU1JTVCBpcyBhIGNvbnRyb2wgcmVnaXN0ZXIgdXBkYXRlIEZJUywgdXNlcyB0YWcwICovCisJc2F0YV9mc2xfc2V0dXBfY21kX2hkcl9lbnRyeShwcCwgMCwKKwkJCQkgICAgIFNSU1RfQ01EIHwgQ01EX0RFU0NfU05PT1BfRU5BQkxFLCAwLCAwLCA1KTsKKworCXRmLmN0bCB8PSBBVEFfU1JTVDsJLyogc2V0dXAgU1JTVCBiaXQgaW4gdGFza2ZpbGUgY29udHJvbCByZWcgKi8KKwlhdGFfdGZfdG9fZmlzKCZ0ZiwgMCwgMCwgY2Zpcyk7CisKKwlEUFJJTlRLKCJEdW1waW5nIGNmaXMgOiAweCV4LCAweCV4LCAweCV4LCAweCV4XG4iLAorCQljZmlzWzBdLCBjZmlzWzFdLCBjZmlzWzJdLCBjZmlzWzNdKTsKKworCS8qCisJICogUXVldWUgU1JTVCBjb21tYW5kIHRvIHRoZSBjb250cm9sbGVyL2RldmljZSwgZW5zdXJlIHRoYXQgbm8KKwkgKiBvdGhlciBjb21tYW5kcyBhcmUgYWN0aXZlIG9uIHRoZSBjb250cm9sbGVyL2RldmljZQorCSAqLworCisJRFBSSU5USygiQFNvZnRyZXNldCwgQ1EgPSAweCV4LCBDQSA9IDB4JXgsIENDID0gMHgleFxuIiwKKwkJaW9yZWFkMzIoQ1EgKyBoY3JfYmFzZSksCisJCWlvcmVhZDMyKENBICsgaGNyX2Jhc2UpLCBpb3JlYWQzMihDQyArIGhjcl9iYXNlKSk7CisKKwlpb3dyaXRlMzIoMHhGRkZGLCBDQyArIGhjcl9iYXNlKTsKKwlpb3dyaXRlMzIoMSwgQ1EgKyBoY3JfYmFzZSk7CisKKwl0ZW1wID0gYXRhX3dhaXRfcmVnaXN0ZXIoQ1EgKyBoY3JfYmFzZSwgMHgxLCAweDEsIDEsIDUwMDApOworCWlmICh0ZW1wICYgMHgxKSB7CisJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9XQVJOSU5HLCAiQVRBX1NSU1QgaXNzdWUgZmFpbGVkXG4iKTsKKworCQlEUFJJTlRLKCJTb2Z0cmVzZXRANTAwMCxDUT0weCV4LENBPTB4JXgsQ0M9MHgleFxuIiwKKwkJCWlvcmVhZDMyKENRICsgaGNyX2Jhc2UpLAorCQkJaW9yZWFkMzIoQ0EgKyBoY3JfYmFzZSksIGlvcmVhZDMyKENDICsgaGNyX2Jhc2UpKTsKKworCQlzYXRhX2ZzbF9zY3JfcmVhZChhcCwgU0NSX0VSUk9SLCAmU2Vycm9yKTsKKworCQlEUFJJTlRLKCJIU3RhdHVzID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIU1RBVFVTKSk7CisJCURQUklOVEsoIkhDb250cm9sID0gMHgleFxuIiwgaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCkpOworCQlEUFJJTlRLKCJTZXJyb3IgPSAweCV4XG4iLCBTZXJyb3IpOworCQlnb3RvIGVycjsKKwl9CisKKwltc2xlZXAoMSk7CisKKwkvKgorCSAqIFNBVEEgZGV2aWNlIGVudGVycyByZXNldCBzdGF0ZSBhZnRlciByZWNldmluZyBhIENvbnRyb2wgcmVnaXN0ZXIKKwkgKiBGSVMgd2l0aCBTUlNUIGJpdCBhc3NlcnRlZCBhbmQgaXQgYXdhaXRzIGFub3RoZXIgSDJEIENvbnRyb2wgcmVnLgorCSAqIEZJUyB3aXRoIFNSU1QgYml0IGNsZWFyZWQsIHRoZW4gdGhlIGRldmljZSBkb2VzIGludGVybmFsIGRpYWdzICYKKwkgKiBpbml0aWFsaXphdGlvbiwgZm9sbG93ZWQgYnkgaW5kaWNhdGluZyBpdCdzIGluaXRpYWxpemF0aW9uIHN0YXR1cworCSAqIHVzaW5nIEFUQSBzaWduYXR1cmUgRDJIIHJlZ2lzdGVyIEZJUyB0byB0aGUgaG9zdCBjb250cm9sbGVyLgorCSAqLworCisJc2F0YV9mc2xfc2V0dXBfY21kX2hkcl9lbnRyeShwcCwgMCwgQ01EX0RFU0NfU05PT1BfRU5BQkxFLCAwLCAwLCA1KTsKKworCXRmLmN0bCAmPSB+QVRBX1NSU1Q7CS8qIDJuZCBIMkQgQ3RsLiByZWdpc3RlciBGSVMgKi8KKwlhdGFfdGZfdG9fZmlzKCZ0ZiwgMCwgMCwgY2Zpcyk7CisKKwlpb3dyaXRlMzIoMSwgQ1EgKyBoY3JfYmFzZSk7CisJbXNsZWVwKDE1MCk7CQkvKiA/PyAqLworCisJLyoKKwkgKiBUaGUgYWJvdmUgY29tbWFuZCB3b3VsZCBoYXZlIHNpZ25hbGxlZCBhbiBpbnRlcnJ1cHQgb24gY29tbWFuZAorCSAqIGNvbXBsZXRlLCB3aGljaCBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLCBieSBjbGVhcmluZyB0aGUgTnRoCisJICogY29tbWFuZCBiaXQgb2YgdGhlIENDcmVnCisJICovCisJaW93cml0ZTMyKDB4MDEsIENDICsgaGNyX2Jhc2UpOwkvKiBXZSBrbm93IGl0IHdpbGwgYmUgY21kIzAgYWx3YXlzICovCisJZ290byBjaGVja19kZXZpY2Vfc2lnbmF0dXJlOworCitza2lwX3Nyc3RfZG9fbmNxX2Vycm9yX2hhbmRsaW5nOgorCisJVlBSSU5USygiU2VuZGluZyByZWFkIGxvZyBleHQoMTBoKSBjb21tYW5kXG4iKTsKKworCW1lbXNldCgmcWMsIDAsIHNpemVvZihzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQpKTsKKwlhdGFfdGZfaW5pdChhcC0+ZGV2aWNlLCAmdGYpOworCisJdGYuY29tbWFuZCA9IEFUQV9DTURfUkVBRF9MT0dfRVhUOworCXRmLmxiYWwgPSBBVEFfTE9HX1NBVEFfTkNROworCXRmLm5zZWN0ID0gMTsKKwl0Zi5ob2JfbnNlY3QgPSAwOworCXRmLmZsYWdzIHw9IEFUQV9URkxBR19JU0FERFIgfCBBVEFfVEZMQUdfTEJBNDggfCBBVEFfVEZMQUdfREVWSUNFOworCXRmLnByb3RvY29sID0gQVRBX1BST1RfUElPOworCisJcWMudGFnID0gQVRBX1RBR19JTlRFUk5BTDsKKwlxYy5zY3NpY21kID0gTlVMTDsKKwlxYy5hcCA9IGFwOworCXFjLmRldiA9IGFwLT5kZXZpY2U7CisKKwlxYy50ZiA9IHRmOworCXFjLmZsYWdzIHw9IEFUQV9RQ0ZMQUdfUkVTVUxUX1RGOworCXFjLmRtYV9kaXIgPSBETUFfRlJPTV9ERVZJQ0U7CisKKwlidWYgPSBhcC0+c2VjdG9yX2J1ZjsKKwlhdGFfc2dfaW5pdF9vbmUoJnFjLCBidWYsIDEgKiBBVEFfU0VDVF9TSVpFKTsKKworCS8qCisJICogTmVlZCB0byBETUEtbWFwIHRoZSBtZW1vcnkgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29tbWFuZAorCSAqLworCisJc2cgPSBxYy5fX3NnOworCWRtYV9hZGRyZXNzID0gZG1hX21hcF9zaW5nbGUoYXAtPmRldiwgcWMuYnVmX3ZpcnQsCisJCQkJICAgICBzZy0+bGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOworCisJc2dfZG1hX2FkZHJlc3Moc2cpID0gZG1hX2FkZHJlc3M7CisJc2dfZG1hX2xlbihzZykgPSBzZy0+bGVuZ3RoOworCisJVlBSSU5USygiRUgsIGFkZHIgPSAweCV4LCBsZW4gPSAweCV4XG4iLCBkbWFfYWRkcmVzcywgc2ctPmxlbmd0aCk7CisKKwlzYXRhX2ZzbF9xY19wcmVwKCZxYyk7CisJc2F0YV9mc2xfcWNfaXNzdWUoJnFjKTsKKworCXRlbXAgPSBhdGFfd2FpdF9yZWdpc3RlcihDUSArIGhjcl9iYXNlLCAweDEsIDB4MSwgMSwgNTAwMCk7CisJaWYgKHRlbXAgJiAweDEpIHsKKwkJVlBSSU5USygiUkVBRF9MT0dfRVhUXzEwSCBpc3N1ZSBmYWlsZWRcbiIpOworCisJCVZQUklOVEsoIlJFQURfTE9HQDUwMDAsQ1E9MHgleCxDQT0weCV4LENDPTB4JXhcbiIsCisJCQlpb3JlYWQzMihDUSArIGhjcl9iYXNlKSwKKwkJCWlvcmVhZDMyKENBICsgaGNyX2Jhc2UpLCBpb3JlYWQzMihDQyArIGhjcl9iYXNlKSk7CisKKwkJc2F0YV9mc2xfc2NyX3JlYWQoYXAsIFNDUl9FUlJPUiwgJlNlcnJvcik7CisKKwkJVlBSSU5USygiSFN0YXR1cyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUykpOworCQlWUFJJTlRLKCJIQ29udHJvbCA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpKTsKKwkJVlBSSU5USygiU2Vycm9yID0gMHgleFxuIiwgU2Vycm9yKTsKKwkJZ290byBlcnI7CisJfQorCisJaW93cml0ZTMyKDB4MDEsIENDICsgaGNyX2Jhc2UpOwkvKiBXZSBrbm93IGl0IHdpbGwgYmUgY21kIzAgYWx3YXlzICovCisKKyAgICAgIGNoZWNrX2RldmljZV9zaWduYXR1cmU6CisKKwlEUFJJTlRLKCJTQVRBIEZTTCA6IE5vdyBjaGVja2luZyBkZXZpY2Ugc2lnbmF0dXJlXG4iKTsKKworCSpjbGFzcyA9IEFUQV9ERVZfTk9ORTsKKworCS8qIFZlcmlmeSBpZiBTU3RhdHVzIGluZGljYXRlcyBkZXZpY2UgcHJlc2VuY2UgKi8KKwlpZiAoYXRhX3BvcnRfb25saW5lKGFwKSkgeworCQkvKgorCQkgKiBpZiB3ZSBhcmUgaGVyZSwgZGV2aWNlIHByZXNlbmNlIGhhcyBiZWVuIGRldGVjdGVkLAorCQkgKiAxc3QgRDJIIEZJUyB3b3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQsIGJ1dCBzZmlzIGluCisJCSAqIGNvbW1hbmQgZGVzYy4gaXMgbm90IHVwZGF0ZWQsIGJ1dCBzaWduYXR1cmUgcmVnaXN0ZXIKKwkJICogd291bGQgaGF2ZSBiZWVuIHVwZGF0ZWQKKwkJICovCisKKwkJKmNsYXNzID0gc2F0YV9mc2xfZGV2X2NsYXNzaWZ5KGFwKTsKKworCQlEUFJJTlRLKCJjbGFzcyA9ICVkXG4iLCAqY2xhc3MpOworCQlWUFJJTlRLKCJjY3JlZyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0MpKTsKKwkJVlBSSU5USygiY2VyZWcgPSAweCV4XG4iLCBpb3JlYWQzMihoY3JfYmFzZSArIENFKSk7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIGludCBzYXRhX2ZzbF9oYXJkcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50ICpjbGFzcywKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZGVhZGxpbmUpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHNhdGFfc3RkX2hhcmRyZXNldChhcCwgY2xhc3MsIGRlYWRsaW5lKTsKKworCURQUklOVEsoIlNBVEEgRlNMIDogaW4geHhfaGFyZHJlc2V0LCByZXR2YWwgPSAweCVkXG4iLCByZXR2YWwpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgc2F0YV9mc2xfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCisJRFBSSU5USygiaW4geHhfZXJyb3JfaGFuZGxlclxuIik7CisKKwkvKiBwZXJmb3JtIHJlY292ZXJ5ICovCisJYXRhX2RvX2VoKGFwLCBhdGFfc3RkX3ByZXJlc2V0LCBzYXRhX2ZzbF9zb2Z0cmVzZXQsIHNhdGFfZnNsX2hhcmRyZXNldCwKKwkJICBhdGFfc3RkX3Bvc3RyZXNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZnNsX3Bvc3RfaW50ZXJuYWxfY21kKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfRkFJTEVEKQorCQlxYy0+ZXJyX21hc2sgfD0gQUNfRVJSX09USEVSOworCisJaWYgKHFjLT5lcnJfbWFzaykgeworCQkvKiBtYWtlIERNQSBlbmdpbmUgZm9yZ2V0IGFib3V0IHRoZSBmYWlsZWQgY29tbWFuZCAqLworCisJfQorfQorCitzdGF0aWMgdm9pZCBzYXRhX2ZzbF9pcnFfY2xlYXIoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwkvKiB1bnVzZWQgKi8KK30KKworc3RhdGljIHZvaWQgc2F0YV9mc2xfZXJyb3JfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBhdGFfZWhfaW5mbyAqZWhpID0gJmFwLT5laF9pbmZvOworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIGhzdGF0dXMsIGRlcmVnLCBjZXJlZyA9IDAsIFNFcnJvciA9IDA7CisJdW5zaWduZWQgaW50IGVycl9tYXNrID0gMCwgYWN0aW9uID0gMDsKKwlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjOworCWludCBmcmVlemUgPSAwOworCisJaHN0YXR1cyA9IGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUyk7CisJY2VyZWcgPSBpb3JlYWQzMihoY3JfYmFzZSArIENFKTsKKworCWF0YV9laGlfY2xlYXJfZGVzYyhlaGkpOworCisJLyoKKwkgKiBIYW5kbGUgJiBDbGVhciBTRXJyb3IKKwkgKi8KKworCXNhdGFfZnNsX3Njcl9yZWFkKGFwLCBTQ1JfRVJST1IsICZTRXJyb3IpOworCWlmICh1bmxpa2VseShTRXJyb3IgJiAweEZGRkYwMDAwKSkgeworCQlzYXRhX2ZzbF9zY3Jfd3JpdGUoYXAsIFNDUl9FUlJPUiwgU0Vycm9yKTsKKwkJZXJyX21hc2sgfD0gQUNfRVJSX0FUQV9CVVM7CisJfQorCisJRFBSSU5USygiZXJyb3JfaW50cixoU3RhdD0weCV4LENFPTB4JXgsREUgPTB4JXgsU0Vycj0weCV4XG4iLAorCQloc3RhdHVzLCBjZXJlZywgaW9yZWFkMzIoaGNyX2Jhc2UgKyBERSksIFNFcnJvcik7CisKKwkvKiBoYW5kbGUgc2luZ2xlIGRldmljZSBlcnJvcnMgKi8KKwlpZiAoY2VyZWcpIHsKKwkJLyoKKwkJICogY2xlYXIgdGhlIGNvbW1hbmQgZXJyb3IsIGFsc28gY2xlYXJzIHF1ZXVlIHRvIHRoZSBkZXZpY2UKKwkJICogaW4gZXJyb3IsIGFuZCB3ZSBjYW4gKHJlKWlzc3VlIGNvbW1hbmRzIHRvIHRoaXMgZGV2aWNlLgorCQkgKiBXaGVuIGEgZGV2aWNlIGlzIGluIGVycm9yIGFsbCBjb21tYW5kcyBxdWV1ZWQgaW50byB0aGUKKwkJICogaG9zdCBjb250cm9sbGVyIGFuZCBhdCB0aGUgZGV2aWNlIGFyZSBjb25zaWRlcmVkIGFib3J0ZWQKKwkJICogYW5kIHRoZSBxdWV1ZSBmb3IgdGhhdCBkZXZpY2UgaXMgc3RvcHBlZC4gTm93LCBhZnRlcgorCQkgKiBjbGVhcmluZyB0aGUgZGV2aWNlIGVycm9yLCB3ZSBjYW4gaXNzdWUgY29tbWFuZHMgdG8gdGhlCisJCSAqIGRldmljZSB0byBpbnRlcnJvZ2F0ZSBpdCB0byBmaW5kIHRoZSBzb3VyY2Ugb2YgdGhlIGVycm9yLgorCQkgKi8KKwkJZGVyZWcgPSBpb3JlYWQzMihoY3JfYmFzZSArIERFKTsKKwkJaW93cml0ZTMyKGRlcmVnLCBoY3JfYmFzZSArIERFKTsKKwkJaW93cml0ZTMyKGNlcmVnLCBoY3JfYmFzZSArIENFKTsKKworCQlEUFJJTlRLKCJzaW5nbGUgZGV2aWNlIGVycm9yLCBDRT0weCV4LCBERT0weCV4XG4iLAorCQkJaW9yZWFkMzIoaGNyX2Jhc2UgKyBDRSksIGlvcmVhZDMyKGhjcl9iYXNlICsgREUpKTsKKwkJLyoKKwkJICogV2Ugc2hvdWxkIGNvbnNpZGVyIHRoaXMgYXMgbm9uIGZhdGFsIGVycm9yLCBhbmQgVEYgbXVzdAorCQkgKiBiZSB1cGRhdGVkIGFzIGRvbmUgYmVsb3cuCisJCSAqLworCisJCWVycl9tYXNrIHw9IEFDX0VSUl9ERVY7CisJfQorCisJLyogaGFuZGxlIGZhdGFsIGVycm9ycyAqLworCWlmIChoc3RhdHVzICYgRkFUQUxfRVJST1JfREVDT0RFKSB7CisJCWVycl9tYXNrIHw9IEFDX0VSUl9BVEFfQlVTOworCQlhY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJLyogaG93IHdpbGwgZmF0YWwgZXJyb3IgaW50ZXJydXB0cyBiZSBjb21wbGV0ZWQgPz8gKi8KKwkJZnJlZXplID0gMTsKKwl9CisKKwkvKiBIYW5kbGUgUEhZUkRZIGNoYW5nZSBub3RpZmljYXRpb24gKi8KKwlpZiAoaHN0YXR1cyAmIElOVF9PTl9QSFlSRFlfQ0hHKSB7CisJCURQUklOVEsoIlNBVEEgRlNMOiBQSFlSRFkgY2hhbmdlIGluZGljYXRpb25cbiIpOworCisJCS8qIFNldHVwIGEgc29mdC1yZXNldCBFSCBhY3Rpb24gKi8KKwkJYXRhX2VoaV9ob3RwbHVnZ2VkKGVoaSk7CisJCWZyZWV6ZSA9IDE7CisJfQorCisJLyogcmVjb3JkIGVycm9yIGluZm8gKi8KKwlxYyA9IGF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpOworCisJaWYgKHFjKSB7CisJCXNhdGFfZnNsX2NhY2hlX3Rhc2tmaWxlX2Zyb21fZDJoX2ZpcyhxYywgcWMtPmFwKTsKKwkJcWMtPmVycl9tYXNrIHw9IGVycl9tYXNrOworCX0gZWxzZQorCQllaGktPmVycl9tYXNrIHw9IGVycl9tYXNrOworCisJZWhpLT5hY3Rpb24gfD0gYWN0aW9uOworCWVoaS0+c2Vycm9yIHw9IFNFcnJvcjsKKworCS8qIGZyZWV6ZSBvciBhYm9ydCAqLworCWlmIChmcmVlemUpCisJCWF0YV9wb3J0X2ZyZWV6ZShhcCk7CisJZWxzZQorCQlhdGFfcG9ydF9hYm9ydChhcCk7Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZnNsX3FjX2NvbXBsZXRlKHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCit7CisJaWYgKHFjLT5mbGFncyAmIEFUQV9RQ0ZMQUdfUkVTVUxUX1RGKSB7CisJCURQUklOVEsoInh4X3FjX2NvbXBsZXRlIGNhbGxlZFxuIik7CisJCXNhdGFfZnNsX2NhY2hlX3Rhc2tmaWxlX2Zyb21fZDJoX2ZpcyhxYywgcWMtPmFwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNhdGFfZnNsX2hvc3RfaW50cihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXN0cnVjdCBzYXRhX2ZzbF9ob3N0X3ByaXYgKmhvc3RfcHJpdiA9IGFwLT5ob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIGhzdGF0dXMsIHFjX2FjdGl2ZSA9IDA7CisJc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYzsKKwl1MzIgU0Vycm9yOworCisJaHN0YXR1cyA9IGlvcmVhZDMyKGhjcl9iYXNlICsgSFNUQVRVUyk7CisKKwlzYXRhX2ZzbF9zY3JfcmVhZChhcCwgU0NSX0VSUk9SLCAmU0Vycm9yKTsKKworCWlmICh1bmxpa2VseShTRXJyb3IgJiAweEZGRkYwMDAwKSkgeworCQlEUFJJTlRLKCJzZXJyb3IgQGhvc3RfaW50ciA6IDB4JXhcbiIsIFNFcnJvcik7CisJCXNhdGFfZnNsX2Vycm9yX2ludHIoYXApOworCisJfQorCisJaWYgKHVubGlrZWx5KGhzdGF0dXMgJiBJTlRfT05fRVJST1IpKSB7CisJCURQUklOVEsoImVycm9yIGludGVycnVwdCEhXG4iKTsKKwkJc2F0YV9mc2xfZXJyb3JfaW50cihhcCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXAtPnNhY3RpdmUpIHsJLyogb25seSB0cnVlIGZvciBOQ1EgY29tbWFuZHMgKi8KKwkJaW50IGk7CisJCS8qIFJlYWQgY29tbWFuZCBjb21wbGV0ZWQgcmVnaXN0ZXIgKi8KKwkJcWNfYWN0aXZlID0gaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQyk7CisJCS8qIGNsZWFyIENDIGJpdCwgdGhpcyB3aWxsIGFsc28gY29tcGxldGUgdGhlIGludGVycnVwdCAqLworCQlpb3dyaXRlMzIocWNfYWN0aXZlLCBoY3JfYmFzZSArIENDKTsKKworCQlEUFJJTlRLKCJTdGF0dXMgb2YgYWxsIHF1ZXVlcyA6XG4iKTsKKwkJRFBSSU5USygicWNfYWN0aXZlL0NDID0gMHgleCwgQ0EgPSAweCV4LCBDRT0weCV4XG4iLAorCQkJcWNfYWN0aXZlLCBpb3JlYWQzMihoY3JfYmFzZSArIENBKSwKKwkJCWlvcmVhZDMyKGhjcl9iYXNlICsgQ0UpKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgU0FUQV9GU0xfUVVFVUVfREVQVEg7IGkrKykgeworCQkJaWYgKHFjX2FjdGl2ZSAmICgxIDw8IGkpKSB7CisJCQkJcWMgPSBhdGFfcWNfZnJvbV90YWcoYXAsIGkpOworCQkJCWlmIChxYykgeworCQkJCQlzYXRhX2ZzbF9xY19jb21wbGV0ZShxYyk7CisJCQkJCWF0YV9xY19jb21wbGV0ZShxYyk7CisJCQkJfQorCQkJCURQUklOVEsKKwkJCQkgICAgKCJjb21wbGV0aW5nIG5jcSBjbWQsdGFnPSVkLENDPTB4JXgsQ0E9MHgleFxuIiwKKwkJCQkgICAgIGksIGlvcmVhZDMyKGhjcl9iYXNlICsgQ0MpLAorCQkJCSAgICAgaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQSkpOworCQkJfQorCQl9CisJCXJldHVybjsKKworCX0gZWxzZSBpZiAoYXAtPnFjX2FjdGl2ZSkgeworCQlpb3dyaXRlMzIoMSwgaGNyX2Jhc2UgKyBDQyk7CisJCXFjID0gYXRhX3FjX2Zyb21fdGFnKGFwLCBhcC0+YWN0aXZlX3RhZyk7CisKKwkJRFBSSU5USygiY29tcGxldGluZyBub24tbmNxIGNtZCwgdGFnPSVkLENDPTB4JXhcbiIsCisJCQlhcC0+YWN0aXZlX3RhZywgaW9yZWFkMzIoaGNyX2Jhc2UgKyBDQykpOworCisJCWlmIChxYykgeworCQkJc2F0YV9mc2xfcWNfY29tcGxldGUocWMpOworCQkJYXRhX3FjX2NvbXBsZXRlKHFjKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFNwdXJpb3VzIEludGVycnVwdCEhICovCisJCURQUklOVEsoInNwdXJpb3VzIGludGVycnVwdCEhLCBDQyA9IDB4JXhcbiIsCisJCQlpb3JlYWQzMihoY3JfYmFzZSArIENDKSk7CisJCXJldHVybjsKKwl9Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzYXRhX2ZzbF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQoreworCXN0cnVjdCBhdGFfaG9zdCAqaG9zdCA9IGRldl9pbnN0YW5jZTsKKwlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJdTMyIGludGVycnVwdF9lbmFibGVzOworCXVuc2lnbmVkIGhhbmRsZWQgPSAwOworCXN0cnVjdCBhdGFfcG9ydCAqYXA7CisKKwkvKiBhY2suIGFueSBwZW5kaW5nIElSUXMgZm9yIHRoaXMgY29udHJvbGxlci9wb3J0ICovCisJaW50ZXJydXB0X2VuYWJsZXMgPSBpb3JlYWQzMihoY3JfYmFzZSArIEhTVEFUVVMpOworCWludGVycnVwdF9lbmFibGVzICY9IDB4M0Y7CisKKwlEUFJJTlRLKCJpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsIGludGVycnVwdF9lbmFibGVzKTsKKworCWlmICghaW50ZXJydXB0X2VuYWJsZXMpCisJCXJldHVybiBJUlFfTk9ORTsKKworCXNwaW5fbG9jaygmaG9zdC0+bG9jayk7CisKKwkvKiBBc3N1bWluZyBvbmUgcG9ydCBwZXIgaG9zdCBjb250cm9sbGVyICovCisKKwlhcCA9IGhvc3QtPnBvcnRzWzBdOworCWlmIChhcCkgeworCQlzYXRhX2ZzbF9ob3N0X2ludHIoYXApOworCX0gZWxzZSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCBob3N0LT5kZXYsCisJCQkgICAiaW50ZXJydXB0IG9uIGRpc2FibGVkIHBvcnQgMFxuIik7CisJfQorCisJaW93cml0ZTMyKGludGVycnVwdF9lbmFibGVzLCBoY3JfYmFzZSArIEhTVEFUVVMpOworCWhhbmRsZWQgPSAxOworCisJc3Bpbl91bmxvY2soJmhvc3QtPmxvY2spOworCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKKy8qCisgKiBNdWx0aXBsZSBwb3J0cyBhcmUgcmVwcmVzZW50ZWQgYnkgbXVsdGlwbGUgU0FUQSBjb250cm9sbGVycyB3aXRoCisgKiBvbmUgcG9ydCBwZXIgY29udHJvbGxlcgorICovCitzdGF0aWMgaW50IHNhdGFfZnNsX2luaXRfY29udHJvbGxlcihzdHJ1Y3QgYXRhX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHNhdGFfZnNsX2hvc3RfcHJpdiAqaG9zdF9wcml2ID0gaG9zdC0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX19pb21lbSAqaGNyX2Jhc2UgPSBob3N0X3ByaXYtPmhjcl9iYXNlOworCXUzMiB0ZW1wOworCisJLyoKKwkgKiBOT1RFIDogV2UgY2Fubm90IGJyaW5nIHRoZSBjb250cm9sbGVyIG9ubGluZSBiZWZvcmUgc2V0dGluZworCSAqIHRoZSBDSEJBLCBoZW5jZSBtYWluIGNvbnRyb2xsZXIgaW5pdGlhbGl6YXRpb24gaXMgZG9uZSBhcworCSAqIHBhcnQgb2YgdGhlIHBvcnRfc3RhcnQoKSBjYWxsYmFjaworCSAqLworCisJLyogYWNrLiBhbnkgcGVuZGluZyBJUlFzIGZvciB0aGlzIGNvbnRyb2xsZXIvcG9ydCAqLworCXRlbXAgPSBpb3JlYWQzMihoY3JfYmFzZSArIEhTVEFUVVMpOworCWlmICh0ZW1wICYgMHgzRikKKwkJaW93cml0ZTMyKCh0ZW1wICYgMHgzRiksIGhjcl9iYXNlICsgSFNUQVRVUyk7CisKKwkvKiBLZWVwIGludGVycnVwdHMgZGlzYWJsZWQgb24gdGhlIGNvbnRyb2xsZXIgKi8KKwl0ZW1wID0gaW9yZWFkMzIoaGNyX2Jhc2UgKyBIQ09OVFJPTCk7CisJaW93cml0ZTMyKCh0ZW1wICYgfjB4M0YpLCBoY3JfYmFzZSArIEhDT05UUk9MKTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0IGNvYWxlc2NpbmcgY29udHJvbChpY2MpLCBmb3IgdGhlIG1vbWVudCAqLworCURQUklOVEsoImljYyA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSUNDKSk7CisJaW93cml0ZTMyKDB4MDEwMDAwMDAsIGhjcl9iYXNlICsgSUNDKTsKKworCS8qIGNsZWFyIGVycm9yIHJlZ2lzdGVycywgU0Vycm9yIGlzIGNsZWFyZWQgYnkgbGliQVRBICAqLworCWlvd3JpdGUzMigweDAwMDAwRkZGRiwgaGNyX2Jhc2UgKyBDRSk7CisJaW93cml0ZTMyKDB4MDAwMDBGRkZGLCBoY3JfYmFzZSArIERFKTsKKworCS8qIGluaXRpYWxseSBhc3N1bWluZyBubyBQb3J0IG11bHRpcGxpZXIsIHNldCBDUVBNUCB0byAwICovCisJaW93cml0ZTMyKDB4MCwgaGNyX2Jhc2UgKyBDUVBNUCk7CisKKwkvKgorCSAqIGhvc3QgY29udHJvbGxlciB3aWxsIGJlIGJyb3VnaHQgb24tbGluZSwgZHVyaW5nIHh4X3BvcnRfc3RhcnQoKQorCSAqIGNhbGxiYWNrLCB0aGF0IHNob3VsZCBhbHNvIGluaXRpYXRlIHRoZSBPT0IsIENPTUlOSVQgc2VxdWVuY2UKKwkgKi8KKworCURQUklOVEsoIkhTdGF0dXMgPSAweCV4XG4iLCBpb3JlYWQzMihoY3JfYmFzZSArIEhTVEFUVVMpKTsKKwlEUFJJTlRLKCJIQ29udHJvbCA9IDB4JXhcbiIsIGlvcmVhZDMyKGhjcl9iYXNlICsgSENPTlRST0wpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogc2NzaSBtaWQtbGF5ZXIgYW5kIGxpYmF0YSBpbnRlcmZhY2Ugc3RydWN0dXJlcworICovCitzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBzYXRhX2ZzbF9zaHQgPSB7CisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorCS5uYW1lID0gInNhdGFfZnNsIiwKKwkuaW9jdGwgPSBhdGFfc2NzaV9pb2N0bCwKKwkucXVldWVjb21tYW5kID0gYXRhX3Njc2lfcXVldWVjbWQsCisJLmNoYW5nZV9xdWV1ZV9kZXB0aCA9IGF0YV9zY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKKwkuY2FuX3F1ZXVlID0gU0FUQV9GU0xfUVVFVUVfREVQVEgsCisJLnRoaXNfaWQgPSBBVEFfU0hUX1RISVNfSUQsCisJLnNnX3RhYmxlc2l6ZSA9IFNBVEFfRlNMX01BWF9QUkRfVVNBQkxFLAorCS5jbWRfcGVyX2x1biA9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCisJLmVtdWxhdGVkID0gQVRBX1NIVF9FTVVMQVRFRCwKKwkudXNlX2NsdXN0ZXJpbmcgPSBBVEFfU0hUX1VTRV9DTFVTVEVSSU5HLAorCS5wcm9jX25hbWUgPSAic2F0YV9mc2wiLAorCS5kbWFfYm91bmRhcnkgPSBBVEFfRE1BX0JPVU5EQVJZLAorCS5zbGF2ZV9jb25maWd1cmUgPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCisJLnNsYXZlX2Rlc3Ryb3kgPSBhdGFfc2NzaV9zbGF2ZV9kZXN0cm95LAorCS5iaW9zX3BhcmFtID0gYXRhX3N0ZF9iaW9zX3BhcmFtLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gYXRhX3Njc2lfZGV2aWNlX3N1c3BlbmQsCisJLnJlc3VtZSA9IGF0YV9zY3NpX2RldmljZV9yZXN1bWUsCisjZW5kaWYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfb3BlcmF0aW9ucyBzYXRhX2ZzbF9vcHMgPSB7CisJLnBvcnRfZGlzYWJsZSA9IGF0YV9wb3J0X2Rpc2FibGUsCisKKwkuY2hlY2tfc3RhdHVzID0gc2F0YV9mc2xfY2hlY2tfc3RhdHVzLAorCS5jaGVja19hbHRzdGF0dXMgPSBzYXRhX2ZzbF9jaGVja19zdGF0dXMsCisJLmRldl9zZWxlY3QgPSBhdGFfbm9vcF9kZXZfc2VsZWN0LAorCisJLnRmX3JlYWQgPSBzYXRhX2ZzbF90Zl9yZWFkLAorCisJLnFjX3ByZXAgPSBzYXRhX2ZzbF9xY19wcmVwLAorCS5xY19pc3N1ZSA9IHNhdGFfZnNsX3FjX2lzc3VlLAorCS5pcnFfY2xlYXIgPSBzYXRhX2ZzbF9pcnFfY2xlYXIsCisJLmlycV9vbiA9IGF0YV9kdW1teV9pcnFfb24sCisJLmlycV9hY2sgPSBhdGFfZHVtbXlfaXJxX2FjaywKKworCS5zY3JfcmVhZCA9IHNhdGFfZnNsX3Njcl9yZWFkLAorCS5zY3Jfd3JpdGUgPSBzYXRhX2ZzbF9zY3Jfd3JpdGUsCisKKwkuZnJlZXplID0gc2F0YV9mc2xfZnJlZXplLAorCS50aGF3ID0gc2F0YV9mc2xfdGhhdywKKwkuZXJyb3JfaGFuZGxlciA9IHNhdGFfZnNsX2Vycm9yX2hhbmRsZXIsCisJLnBvc3RfaW50ZXJuYWxfY21kID0gc2F0YV9mc2xfcG9zdF9pbnRlcm5hbF9jbWQsCisKKwkucG9ydF9zdGFydCA9IHNhdGFfZnNsX3BvcnRfc3RhcnQsCisJLnBvcnRfc3RvcCA9IHNhdGFfZnNsX3BvcnRfc3RvcCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBzYXRhX2ZzbF9wb3J0X2luZm9bXSA9IHsKKwl7CisJIC5mbGFncyA9IFNBVEFfRlNMX0hPU1RfRkxBR1MsCisJIC5waW9fbWFzayA9IDB4MWYsCS8qIHBpbyAwLTQgKi8KKwkgLnVkbWFfbWFzayA9IDB4N2YsCS8qIHVkbWEgMC02ICovCisJIC5wb3J0X29wcyA9ICZzYXRhX2ZzbF9vcHMsCisJIH0sCit9OworCitzdGF0aWMgaW50IHNhdGFfZnNsX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCit7CisJaW50IHJldHZhbCA9IDA7CisJdm9pZCBfX2lvbWVtICpoY3JfYmFzZSA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICpzc3JfYmFzZSA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICpjc3JfYmFzZSA9IE5VTEw7CisJc3RydWN0IHNhdGFfZnNsX2hvc3RfcHJpdiAqaG9zdF9wcml2ID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJaW50IGlycTsKKwlzdHJ1Y3QgYXRhX2hvc3QgKmhvc3Q7CisKKwlzdHJ1Y3QgYXRhX3BvcnRfaW5mbyBwaSA9IHNhdGFfZnNsX3BvcnRfaW5mb1swXTsKKwljb25zdCBzdHJ1Y3QgYXRhX3BvcnRfaW5mbyAqcHBpW10gPSB7ICZwaSwgTlVMTCB9OworCisJZGV2X3ByaW50ayhLRVJOX0lORk8sICZvZmRldi0+ZGV2LAorCQkgICAiU2F0YSBGU0wgUGxhdGZvcm0vQ1NCIERyaXZlciBpbml0XG4iKTsKKworCXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKworCWhjcl9iYXNlID0gb2ZfaW9tYXAob2ZkZXYtPm5vZGUsIDApOworCWlmICghaGNyX2Jhc2UpCisJCWdvdG8gZXJyb3JfZXhpdF93aXRoX2NsZWFudXA7CisKKwlzc3JfYmFzZSA9IGhjcl9iYXNlICsgMHgxMDA7CisJY3NyX2Jhc2UgPSBoY3JfYmFzZSArIDB4MTQwOworCisJRFBSSU5USygiQHJlc2V0IGkvbyA9IDB4JXhcbiIsIGlvcmVhZDMyKGNzcl9iYXNlICsgVFJBTlNDRkcpKTsKKwlEUFJJTlRLKCJzaXplb2YoY21kX2Rlc2MpID0gJWRcbiIsIHNpemVvZihzdHJ1Y3QgY29tbWFuZF9kZXNjKSk7CisJRFBSSU5USygic2l6ZW9mKCNkZWZpbmUgY21kX2Rlc2MpID0gJWRcbiIsIFNBVEFfRlNMX0NNRF9ERVNDX1NJWkUpOworCisJaG9zdF9wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhdGFfZnNsX2hvc3RfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghaG9zdF9wcml2KQorCQlnb3RvIGVycm9yX2V4aXRfd2l0aF9jbGVhbnVwOworCisJaG9zdF9wcml2LT5oY3JfYmFzZSA9IGhjcl9iYXNlOworCWhvc3RfcHJpdi0+c3NyX2Jhc2UgPSBzc3JfYmFzZTsKKwlob3N0X3ByaXYtPmNzcl9iYXNlID0gY3NyX2Jhc2U7CisKKwlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChvZmRldi0+bm9kZSwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJm9mZGV2LT5kZXYsICJpbnZhbGlkIGlycSBmcm9tIHBsYXRmb3JtXG4iKTsKKwkJZ290byBlcnJvcl9leGl0X3dpdGhfY2xlYW51cDsKKwl9CisKKwkvKiBhbGxvY2F0ZSBob3N0IHN0cnVjdHVyZSAqLworCWhvc3QgPSBhdGFfaG9zdF9hbGxvY19waW5mbygmb2ZkZXYtPmRldiwgcHBpLCBTQVRBX0ZTTF9NQVhfUE9SVFMpOworCisJLyogaG9zdC0+aW9tYXAgaXMgbm90IHVzZWQgY3VycmVudGx5ICovCisJaG9zdC0+cHJpdmF0ZV9kYXRhID0gaG9zdF9wcml2OworCisJLyogc2V0dXAgcG9ydChzKSAqLworCisJaG9zdC0+cG9ydHNbMF0tPmlvYWRkci5jbWRfYWRkciA9IGhvc3RfcHJpdi0+aGNyX2Jhc2U7CisJaG9zdC0+cG9ydHNbMF0tPmlvYWRkci5zY3JfYWRkciA9IGhvc3RfcHJpdi0+c3NyX2Jhc2U7CisKKwkvKiBpbml0aWFsaXplIGhvc3QgY29udHJvbGxlciAqLworCXNhdGFfZnNsX2luaXRfY29udHJvbGxlcihob3N0KTsKKworCS8qCisJICogTm93LCByZWdpc3RlciB3aXRoIGxpYkFUQSBjb3JlLCB0aGlzIHdpbGwgYWxzbyBpbml0aWF0ZSB0aGUKKwkgKiBkZXZpY2UgZGlzY292ZXJ5IHByb2Nlc3MsIGludm9raW5nIG91ciBwb3J0X3N0YXJ0KCkgaGFuZGxlciAmCisJICogZXJyb3JfaGFuZGxlcigpIHRvIGV4ZWN1dGUgYSBkdW1teSBTb2Z0cmVzZXQgRUggc2Vzc2lvbgorCSAqLworCWF0YV9ob3N0X2FjdGl2YXRlKGhvc3QsIGlycSwgc2F0YV9mc2xfaW50ZXJydXB0LCBTQVRBX0ZTTF9JUlFfRkxBRywKKwkJCSAgJnNhdGFfZnNsX3NodCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIGhvc3QpOworCisJcmV0dXJuIDA7CisKK2Vycm9yX2V4aXRfd2l0aF9jbGVhbnVwOgorCisJaWYgKGhjcl9iYXNlKQorCQlpb3VubWFwKGhjcl9iYXNlKTsKKwlpZiAoaG9zdF9wcml2KQorCQlrZnJlZShob3N0X3ByaXYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBzYXRhX2ZzbF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJc3RydWN0IGF0YV9ob3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZvZmRldi0+ZGV2KTsKKwlzdHJ1Y3Qgc2F0YV9mc2xfaG9zdF9wcml2ICpob3N0X3ByaXYgPSBob3N0LT5wcml2YXRlX2RhdGE7CisKKwlhdGFfaG9zdF9kZXRhY2goaG9zdCk7CisKKwlkZXZfc2V0X2RydmRhdGEoJm9mZGV2LT5kZXYsIE5VTEwpOworCisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhob3N0LT5pcnEpOworCWlvdW5tYXAoaG9zdF9wcml2LT5oY3JfYmFzZSk7CisJa2ZyZWUoaG9zdF9wcml2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBmc2xfc2F0YV9tYXRjaFtdID0geworCXsKKwkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTUtc2F0YSIsCisJfSwKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM4Mzc5LXNhdGEiLAorCX0sCisJe30sCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc2xfc2F0YV9tYXRjaCk7CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzbF9zYXRhX2RyaXZlciA9IHsKKwkubmFtZQkJPSAiZnNsLXNhdGEiLAorCS5tYXRjaF90YWJsZQk9IGZzbF9zYXRhX21hdGNoLAorCS5wcm9iZQkJPSBzYXRhX2ZzbF9wcm9iZSwKKwkucmVtb3ZlCQk9IHNhdGFfZnNsX3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNhdGFfZnNsX2luaXQodm9pZCkKK3sKKwlvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZzbF9zYXRhX2RyaXZlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzYXRhX2ZzbF9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmZzbF9zYXRhX2RyaXZlcik7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkFzaGlzaCBLYWxyYSwgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIDMuMEdicHMgU0FUQSBjb250cm9sbGVyIGxvdyBsZXZlbCBkcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjEwIik7CisKK21vZHVsZV9pbml0KHNhdGFfZnNsX2luaXQpOworbW9kdWxlX2V4aXQoc2F0YV9mc2xfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9zYXRhX212LmMgYi9kcml2ZXJzL2F0YS9zYXRhX212LmMKaW5kZXggNGRmODMxMS4uN2YxYjEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwpAQCAtNDIxLDcgKzQyMSw2IEBACiBzdGF0aWMgdm9pZCBtdl9wb3N0X2ludF9jbWQoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYyk7CiBzdGF0aWMgdm9pZCBtdl9laF9mcmVlemUoc3RydWN0IGF0YV9wb3J0ICphcCk7CiBzdGF0aWMgdm9pZCBtdl9laF90aGF3KHN0cnVjdCBhdGFfcG9ydCAqYXApOwotc3RhdGljIGludCBtdl9zbGF2ZV9jb25maWcoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KTsKIHN0YXRpYyBpbnQgbXZfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwogCiBzdGF0aWMgdm9pZCBtdjVfcGh5X2VycmF0YShzdHJ1Y3QgbXZfaG9zdF9wcml2ICpocHJpdiwgdm9pZCBfX2lvbWVtICptbWlvLApAQCAtNDU5LDcgKzQ1OCw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IDEsCiAJLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IE1WX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gbXZfc2xhdmVfY29uZmlnLAorCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCiB9OwpAQCAtNDc3LDcgKzQ3Niw3IEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IDEsCiAJLnByb2NfbmFtZQkJPSBEUlZfTkFNRSwKIAkuZG1hX2JvdW5kYXJ5CQk9IE1WX0RNQV9CT1VOREFSWSwKLQkuc2xhdmVfY29uZmlndXJlCT0gbXZfc2xhdmVfY29uZmlnLAorCS5zbGF2ZV9jb25maWd1cmUJPSBhdGFfc2NzaV9zbGF2ZV9jb25maWcsCiAJLnNsYXZlX2Rlc3Ryb3kJCT0gYXRhX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkuYmlvc19wYXJhbQkJPSBhdGFfc3RkX2Jpb3NfcGFyYW0sCiB9OwpAQCAtNzU2LDE3ICs3NTUsNiBAQAogewogfQogCi1zdGF0aWMgaW50IG12X3NsYXZlX2NvbmZpZyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCi17Ci0JaW50IHJjID0gYXRhX3Njc2lfc2xhdmVfY29uZmlnKHNkZXYpOwotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCi0JYmxrX3F1ZXVlX21heF9waHlzX3NlZ21lbnRzKHNkZXYtPnJlcXVlc3RfcXVldWUsIE1WX01BWF9TR19DVCAvIDIpOwotCi0JcmV0dXJuIDA7CS8qIHNjc2kgbGF5ZXIgZG9lc24ndCBjaGVjayByZXR1cm4gdmFsdWUsIHNpZ2ggKi8KLX0KLQogc3RhdGljIHZvaWQgbXZfc2V0X2VkbWFfcHRycyh2b2lkIF9faW9tZW0gKnBvcnRfbW1pbywKIAkJCSAgICAgc3RydWN0IG12X2hvc3RfcHJpdiAqaHByaXYsCiAJCQkgICAgIHN0cnVjdCBtdl9wb3J0X3ByaXYgKnBwKQpAQCAtMTEzOCw3ICsxMTI2LDcgQEAKIHsKIAlzdHJ1Y3QgbXZfcG9ydF9wcml2ICpwcCA9IHFjLT5hcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0Jc3RydWN0IG12X3NnICptdl9zZzsKKwlzdHJ1Y3QgbXZfc2cgKm12X3NnLCAqbGFzdF9zZyA9IE5VTEw7CiAKIAltdl9zZyA9IHBwLT5zZ190Ymw7CiAJYXRhX2Zvcl9lYWNoX3NnKHNnLCBxYykgewpAQCAtMTE1OSwxMyArMTE0NywxMyBAQAogCQkJc2dfbGVuIC09IGxlbjsKIAkJCWFkZHIgKz0gbGVuOwogCi0JCQlpZiAoIXNnX2xlbiAmJiBhdGFfc2dfaXNfbGFzdChzZywgcWMpKQotCQkJCW12X3NnLT5mbGFnc19zaXplIHw9IGNwdV90b19sZTMyKEVQUkRfRkxBR19FTkRfT0ZfVEJMKTsKLQorCQkJbGFzdF9zZyA9IG12X3NnOwogCQkJbXZfc2crKzsKIAkJfQotCiAJfQorCisJaWYgKGxpa2VseShsYXN0X3NnKSkKKwkJbGFzdF9zZy0+ZmxhZ3Nfc2l6ZSB8PSBjcHVfdG9fbGUzMihFUFJEX0ZMQUdfRU5EX09GX1RCTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdl9jcnFiX3BhY2tfY21kKF9fbGUxNiAqY21kdywgdTggZGF0YSwgdTggYWRkciwgdW5zaWduZWQgbGFzdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYyBiL2RyaXZlcnMvYXRhL3NhdGFfc2lsMjQuYwppbmRleCBiMDYxOTI3Li4yNmViZmZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX3NpbDI0LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaWwyNC5jCkBAIC03OTYsMTYgKzc5NiwxOSBAQAogCQkJCSBzdHJ1Y3Qgc2lsMjRfc2dlICpzZ2UpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlzdHJ1Y3Qgc2lsMjRfc2dlICpsYXN0X3NnZSA9IE5VTEw7CiAKIAlhdGFfZm9yX2VhY2hfc2coc2csIHFjKSB7CiAJCXNnZS0+YWRkciA9IGNwdV90b19sZTY0KHNnX2RtYV9hZGRyZXNzKHNnKSk7CiAJCXNnZS0+Y250ID0gY3B1X3RvX2xlMzIoc2dfZG1hX2xlbihzZykpOwotCQlpZiAoYXRhX3NnX2lzX2xhc3Qoc2csIHFjKSkKLQkJCXNnZS0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihTR0VfVFJNKTsKLQkJZWxzZQotCQkJc2dlLT5mbGFncyA9IDA7CisJCXNnZS0+ZmxhZ3MgPSAwOworCisJCWxhc3Rfc2dlID0gc2dlOwogCQlzZ2UrKzsKIAl9CisKKwlpZiAobGlrZWx5KGxhc3Rfc2dlKSkKKwkJbGFzdF9zZ2UtPmZsYWdzID0gY3B1X3RvX2xlMzIoU0dFX1RSTSk7CiB9CiAKIHN0YXRpYyBpbnQgc2lsMjRfcWNfZGVmZXIoc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMgYi9kcml2ZXJzL2F0YS9zYXRhX3Npcy5jCmluZGV4IDhkOThhOWYuLmYxNDdkYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3NhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9zaXMuYwpAQCAtOTIsNyArOTIsNyBAQAogCS5xdWV1ZWNvbW1hbmQJCT0gYXRhX3Njc2lfcXVldWVjbWQsCiAJLmNhbl9xdWV1ZQkJPSBBVEFfREVGX1FVRVVFLAogCS50aGlzX2lkCQk9IEFUQV9TSFRfVEhJU19JRCwKLQkuc2dfdGFibGVzaXplCQk9IEFUQV9NQVhfUFJELAorCS5zZ190YWJsZXNpemUJCT0gTElCQVRBX01BWF9QUkQsCiAJLmNtZF9wZXJfbHVuCQk9IEFUQV9TSFRfQ01EX1BFUl9MVU4sCiAJLmVtdWxhdGVkCQk9IEFUQV9TSFRfRU1VTEFURUQsCiAJLnVzZV9jbHVzdGVyaW5nCQk9IEFUQV9TSFRfVVNFX0NMVVNURVJJTkcsCkBAIC0xNjYsMTEgKzE2NiwxMSBAQAogCXJldHVybiBhZGRyOwogfQogCi1zdGF0aWMgdTMyIHNpc19zY3JfY2ZnX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcpCitzdGF0aWMgdTMyIHNpc19zY3JfY2ZnX3JlYWQgKHN0cnVjdCBhdGFfcG9ydCAqYXAsIHVuc2lnbmVkIGludCBzY19yZWcsIHUzMiAqdmFsKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAl1bnNpZ25lZCBpbnQgY2ZnX2FkZHIgPSBnZXRfc2NyX2NmZ19hZGRyKGFwLCBzY19yZWcpOwotCXUzMiB2YWwsIHZhbDIgPSAwOworCXUzMiB2YWwyID0gMDsKIAl1OCBwbXI7CiAKIAlpZiAoc2NfcmVnID09IFNDUl9FUlJPUikgLyogZG9lc24ndCBleGlzdCBpbiBQQ0kgY2ZnIHNwYWNlICovCkBAIC0xNzgsMTMgKzE3OCwxNiBAQAogCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgU0lTX1BNUiwgJnBtcik7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgY2ZnX2FkZHIsICZ2YWwpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBjZmdfYWRkciwgdmFsKTsKIAogCWlmICgocGRldi0+ZGV2aWNlID09IDB4MDE4MikgfHwgKHBkZXYtPmRldmljZSA9PSAweDAxODMpIHx8CiAJICAgIChwZGV2LT5kZXZpY2UgPT0gMHgxMTgyKSB8fCAocG1yICYgU0lTX1BNUl9DT01CSU5FRCkpCiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBjZmdfYWRkcisweDEwLCAmdmFsMik7CiAKLQlyZXR1cm4gKHZhbHx2YWwyKSAmICAweGZmZmZmZmZiOyAvKiBhdm9pZCBwcm9ibGVtcyB3aXRoIHBvd2VyZG93bmVkIHBvcnRzICovCisJKnZhbCB8PSB2YWwyOworCSp2YWwgJj0gMHhmZmZmZmZmYjsJLyogYXZvaWQgcHJvYmxlbXMgd2l0aCBwb3dlcmRvd25lZCBwb3J0cyAqLworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNpc19zY3JfY2ZnX3dyaXRlIChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgc2NfcmVnLCB1MzIgdmFsKQpAQCAtMjE0LDcgKzIxNyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGFwLT5mbGFncyAmIFNJU19GTEFHX0NGR1NDUikKLQkJcmV0dXJuIHNpc19zY3JfY2ZnX3JlYWQoYXAsIHNjX3JlZyk7CisJCXJldHVybiBzaXNfc2NyX2NmZ19yZWFkKGFwLCBzY19yZWcsIHZhbCk7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBTSVNfUE1SLCAmcG1yKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jIGIvZHJpdmVycy9hdG0vZmlyZXN0cmVhbS5jCmluZGV4IDk0ZWJjOWQuLmY4ZjcxMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZpcmVzdHJlYW0uYworKysgYi9kcml2ZXJzL2F0bS9maXJlc3RyZWFtLmMKQEAgLTE1OTYsNyArMTU5Niw3IEBACiAKIAkvKiBwcmludCB0aGUgYml0cyBpbiB0aGUgSVNSIHJlZ2lzdGVyLiAqLwogCWlmIChmc19kZWJ1ZyAmIEZTX0RFQlVHX0lSUSkgewotCQkvKiBUaGUgRlNfREVCVUcgdGhpbmdzIGFyZSB1bm5lY2Nlc2FyeSBoZXJlLiBCdXQgdGhpcyB3YXkgaXQgaXMKKwkJLyogVGhlIEZTX0RFQlVHIHRoaW5ncyBhcmUgdW5uZWNlc3NhcnkgaGVyZS4gQnV0IHRoaXMgd2F5IGl0IGlzCiAJCSAgIGNsZWFyIGZvciBncmVwIHRoYXQgdGhlc2UgYXJlIGRlYnVnIHByaW50cy4gKi8KIAkJZnNfZHByaW50ayAoRlNfREVCVUdfSVJRLCAgIklSUSBzdGF0dXM6Iik7CiAJCWZvciAoaT0wO2k8Mjc7aSsrKSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMgYi9kcml2ZXJzL2Jhc2UvZG1hcG9vbC5jCmluZGV4IGZiYWU4NjcuLjViZWRkYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kbWFwb29sLmMKKysrIGIvZHJpdmVycy9iYXNlL2RtYXBvb2wuYwpAQCAtMzY2LDcgKzM2Niw3IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAJaW50CQkJbWFwLCBibG9jazsKIAotCWlmICgocGFnZSA9IHBvb2xfZmluZF9wYWdlIChwb29sLCBkbWEpKSA9PSAwKSB7CisJaWYgKChwYWdlID0gcG9vbF9maW5kX3BhZ2UocG9vbCwgZG1hKSkgPT0gTlVMTCkgewogCQlpZiAocG9vbC0+ZGV2KQogCQkJZGV2X2Vycihwb29sLT5kZXYsICJkbWFfcG9vbF9mcmVlICVzLCAlcC8lbHggKGJhZCBkbWEpXG4iLAogCQkJCXBvb2wtPm5hbWUsIHZhZGRyLCAodW5zaWduZWQgbG9uZykgZG1hKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci90cmFjZS5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3RyYWNlLmMKaW5kZXggMmIwYzYwMS4uMmI0YjM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL3RyYWNlLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3RyYWNlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCWdldF9ydGNfdGltZSgmdGltZSk7CiAJcHJpbnRrKCJUaW1lOiAlMmQ6JTAyZDolMDJkICBEYXRlOiAlMDJkLyUwMmQvJTAyZFxuIiwKIAkJdGltZS50bV9ob3VyLCB0aW1lLnRtX21pbiwgdGltZS50bV9zZWMsCi0JCXRpbWUudG1fbW9uLCB0aW1lLnRtX21kYXksIHRpbWUudG1feWVhcik7CisJCXRpbWUudG1fbW9uICsgMSwgdGltZS50bV9tZGF5LCB0aW1lLnRtX3llYXIgJSAxMDApOwogCXZhbCA9IHRpbWUudG1feWVhcjsJCQkJLyogMTAwIHllYXJzICovCiAJaWYgKHZhbCA+IDEwMCkKIAkJdmFsIC09IDEwMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jIGIvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMKaW5kZXggOGQ4Y2RmZS4uZTFkM2FkNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCisrKyBiL2RyaXZlcnMvYmFzZS90b3BvbG9neS5jCkBAIC05NCwyNyArOTQsMTggQEAKIAkubmFtZSA9ICJ0b3BvbG9neSIKIH07CiAKLXN0YXRpYyBjcHVtYXNrX3QgdG9wb2xvZ3lfZGV2X21hcCA9IENQVV9NQVNLX05PTkU7Ci0KIC8qIEFkZC9SZW1vdmUgY3B1X3RvcG9sb2d5IGludGVyZmFjZSBmb3IgQ1BVIGRldmljZSAqLwogc3RhdGljIGludCBfX2NwdWluaXQgdG9wb2xvZ3lfYWRkX2Rldih1bnNpZ25lZCBpbnQgY3B1KQogewotCWludCByYzsKIAlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7CiAKLQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJnRvcG9sb2d5X2F0dHJfZ3JvdXApOwotCWlmICghcmMpCi0JCWNwdV9zZXQoY3B1LCB0b3BvbG9neV9kZXZfbWFwKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJnRvcG9sb2d5X2F0dHJfZ3JvdXApOwogfQogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgdG9wb2xvZ3lfcmVtb3ZlX2Rldih1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2ID0gZ2V0X2NwdV9zeXNkZXYoY3B1KTsKIAotCWlmICghY3B1X2lzc2V0KGNwdSwgdG9wb2xvZ3lfZGV2X21hcCkpCi0JCXJldHVybjsKLQljcHVfY2xlYXIoY3B1LCB0b3BvbG9neV9kZXZfbWFwKTsKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZ0b3BvbG9neV9hdHRyX2dyb3VwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IGNhNGQ3ZjAuLmNlNGIxZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTIwNCwyMyArMjA0LDYgQEAKIAlib29sCiAJZGVmYXVsdCBCTEtfREVWX1VCRAogCi1jb25maWcgTU1BUFBFUgotCXRyaXN0YXRlICJFeGFtcGxlIElPIG1lbW9yeSBkcml2ZXIgKEJST0tFTikiCi0JZGVwZW5kcyBvbiBVTUwgJiYgQlJPS0VOCi0JLS0taGVscC0tLQotICAgICAgICAgIFRoZSBVc2VyLU1vZGUgTGludXggcG9ydCBjYW4gcHJvdmlkZSBzdXBwb3J0IGZvciBJTyBNZW1vcnkKLSAgICAgICAgICBlbXVsYXRpb24gd2l0aCB0aGlzIG9wdGlvbi4gIFRoaXMgYWxsb3dzIGEgaG9zdCBmaWxlIHRvIGJlCi0gICAgICAgICAgc3BlY2lmaWVkIGFzIGFuIEkvTyByZWdpb24gb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuIFRoYXQgZmlsZQotICAgICAgICAgIHdpbGwgYmUgbWFwcGVkIGludG8gVU1MJ3Mga2VybmVsIGFkZHJlc3Mgc3BhY2Ugd2hlcmUgYSBkcml2ZXIgY2FuCi0gICAgICAgICAgbG9jYXRlIGl0IGFuZCBkbyB3aGF0ZXZlciBpdCB3YW50cyB3aXRoIHRoZSBtZW1vcnksIGluY2x1ZGluZwotICAgICAgICAgIHByb3ZpZGluZyBhbiBpbnRlcmZhY2UgdG8gaXQgZm9yIFVNTCBwcm9jZXNzZXMgdG8gdXNlLgotCi0gICAgICAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQotICAgICAgICAgIDxodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC9pb21lbS5odG1sPi4KLQotICAgICAgICAgIElmIHlvdSdkIGxpa2UgdG8gYmUgYWJsZSB0byBwcm92aWRlIGEgc2ltdWxhdGVkIElPIHBvcnQgc3BhY2UgZm9yCi0gICAgICAgICAgVXNlci1Nb2RlIExpbnV4IHByb2Nlc3Nlcywgc2F5IFkuICBJZiB1bnN1cmUsIHNheSBOLgotCiBjb25maWcgQkxLX0RFVl9MT09QCiAJdHJpc3RhdGUgIkxvb3BiYWNrIGRldmljZSBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTM1MSw3ICszMzQsNyBAQAogCWRlZmF1bHQgIjE2IgogCWRlcGVuZHMgb24gQkxLX0RFVl9SQU0KIAloZWxwCi0JICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNiBSQU0gZGlza3MuIENoYW5nZSB0aGlzIGlmIHlvdSBrbm93IHdoYXQKKwkgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE2IFJBTSBkaXNrcy4gQ2hhbmdlIHRoaXMgaWYgeW91IGtub3cgd2hhdCB5b3UKIAkgIGFyZSBkb2luZy4gSWYgeW91IGJvb3QgZnJvbSBhIGZpbGVzeXN0ZW0gdGhhdCBuZWVkcyB0byBiZSBleHRyYWN0ZWQKIAkgIGluIG1lbW9yeSwgeW91IHdpbGwgbmVlZCBhdCBsZWFzdCBvbmUgUkFNIGRpc2sgKGUuZy4gcm9vdCBvbiBjcmFtZnMpLgogCkBAIC0zNjEsNyArMzQ0LDcgQEAKIAlkZWZhdWx0ICI0MDk2IgogCWhlbHAKIAkgIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDQwOTYga2lsb2J5dGVzLiBPbmx5IGNoYW5nZSB0aGlzIGlmIHlvdSBrbm93Ci0JICB3aGF0IGFyZSB5b3UgZG9pbmcuCisJICB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKIGNvbmZpZyBCTEtfREVWX1JBTV9CTE9DS1NJWkUKIAlpbnQgIkRlZmF1bHQgUkFNIGRpc2sgYmxvY2sgc2l6ZSAoYnl0ZXMpIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9sb29wLmMgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwppbmRleCA1ODljYmJkLi41NmUyMzA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2xvb3AuYwpAQCAtMjksNyArMjksNyBAQAogICoKICAqIE1heGltdW0gbnVtYmVyIG9mIGxvb3AgZGV2aWNlcyB3aGVuIGNvbXBpbGVkLWluIG5vdyBzZWxlY3RhYmxlIGJ5IHBhc3NpbmcKICAqIG1heF9sb29wPTwxLTI1NT4gdG8gdGhlIGtlcm5lbCBvbiBib290LgotICogRXJpayBJLiBCb2xz+CwgPGVyaWtpQGhpbW9sZGUubm8+LCBPY3QgMzEsIDE5OTkKKyAqIEVyaWsgSS4gQm9sc8O4LCA8ZXJpa2lAaGltb2xkZS5ubz4sIE9jdCAzMSwgMTk5OQogICoKICAqIENvbXBsZXRlbHkgcmV3cml0ZSByZXF1ZXN0IGhhbmRsaW5nIHRvIGJlIG1ha2VfcmVxdWVzdF9mbiBzdHlsZSBhbmQKICAqIG5vbiBibG9ja2luZywgcHVzaGluZyB3b3JrIHRvIGEgaGVscGVyIHRocmVhZC4gTG90cyBvZiBmaXhlcyBmcm9tCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL25iZC5jIGIvZHJpdmVycy9ibG9jay9uYmQuYwppbmRleCBjYjEzNmE5Li42MzMyYWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL25iZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJCXNpZ2luZm9fdCBpbmZvOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibmJkIChwaWQgJWQ6ICVzKSBnb3Qgc2lnbmFsICVkXG4iLAotCQkJCWN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSwKKwkJCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgY3VycmVudC0+Y29tbSwKIAkJCQlkZXF1ZXVlX3NpZ25hbF9sb2NrKGN1cnJlbnQsICZjdXJyZW50LT5ibG9ja2VkLCAmaW5mbykpOwogCQkJcmVzdWx0ID0gLUVJTlRSOwogCQkJc29ja19zaHV0ZG93bihsbywgIXNlbmQpOwpAQCAtNTA4LDcgKzUwOCw2IEBACiAJCW5iZF9lbmRfcmVxdWVzdChyZXEpOwogCQlzcGluX2xvY2socS0+cXVldWVfbG9jayk7CiAJfQotCXJldHVybjsKIH0KIAogc3RhdGljIGludCBuYmRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3JkLmMgYi9kcml2ZXJzL2Jsb2NrL3JkLmMKaW5kZXggMDgxNzZkMi4uNDdmOGFjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9yZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcmQuYwpAQCAtMzY1LDcgKzM2NSw3IEBACiAJCS8qCiAJCSAqIERlZXAgYmFkbmVzcy4gIHJkX2Jsa2Rldl9wYWdlY2FjaGVfSU8oKSBuZWVkcyB0byBhbGxvY2F0ZQogCQkgKiBwYWdlY2FjaGUgcGFnZXMgd2l0aGluIGEgcmVxdWVzdF9mbi4gIFdlIGNhbm5vdCByZWN1ciBiYWNrCi0JCSAqIGludG8gdGhlIGZpbGVzeXRlbSB3aGljaCBpcyBtb3VudGVkIGF0b3AgdGhlIHJhbWRpc2ssIGJlY2F1c2UKKwkJICogaW50byB0aGUgZmlsZXN5c3RlbSB3aGljaCBpcyBtb3VudGVkIGF0b3AgdGhlIHJhbWRpc2ssIGJlY2F1c2UKIAkJICogdGhhdCB3b3VsZCBkZWFkbG9jayBvbiBmcyBsb2Nrcy4gIEFuZCB3ZSByZWFsbHkgZG9uJ3Qgd2FudAogCQkgKiB0byByZWVudGVyIHJkX2Jsa2Rldl9wYWdlY2FjaGVfSU8gd2hlbiB3ZSdyZSBhbHJlYWR5IHdpdGhpbgogCQkgKiB0aGF0IGZ1bmN0aW9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay94c3lzYWNlLmMgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwppbmRleCA5ZTc2NTJkLi44MmVmZmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYworKysgYi9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYwpAQCAtMzkwLDggKzM5MCw4IEBACiBzdGF0aWMgdm9pZCBhY2VfZHVtcF9yZWdzKHN0cnVjdCBhY2VfZGV2aWNlICphY2UpCiB7CiAJZGV2X2luZm8oYWNlLT5kZXYsICIgICAgY3RybDogICUuOHggIHNlY2NudC9jbWQ6ICUuNHggICAgICB2ZXI6JS40eFxuIgotCQkgIiAgICBzdGF0dXM6JS44eCAgbXB1X2xiYTolLjh4ICBidXNtb2RlOiU0eFxuIgotCQkgIiAgICBlcnJvcjogJS44eCAgY2ZnX2xiYTolLjh4ICBmYXRzdGF0OiUuNHhcbiIsCisJCSBLRVJOX0lORk8gIiAgICBzdGF0dXM6JS44eCAgbXB1X2xiYTolLjh4ICBidXNtb2RlOiU0eFxuIgorCQkgS0VSTl9JTkZPICIgICAgZXJyb3I6ICUuOHggIGNmZ19sYmE6JS44eCAgZmF0c3RhdDolLjR4XG4iLAogCQkgYWNlX2luMzIoYWNlLCBBQ0VfQ1RSTCksCiAJCSBhY2VfaW4oYWNlLCBBQ0VfU0VDQ05UQ01EKSwKIAkJIGFjZV9pbihhY2UsIEFDRV9WRVJTSU9OKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwppbmRleCA3OTI0NTcxNC4uYWYwNTYxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jCisrKyBiL2RyaXZlcnMvY2Ryb20vY2Ryb20uYwpAQCAtMTEwNyw3ICsxMTA3LDcgQEAKIAkJICAgICAgIGlzIHRoZSBkZWZhdWx0IGNhc2UhICovCiAJCSAgICBjZGluZm8oQ0RfT1BFTiwgImJ1bW1lci4gd3JvbmcgbWVkaWEgdHlwZS5cbiIpOyAKIAkJICAgIGNkaW5mbyhDRF9XQVJOSU5HLCAicGlkICVkIG11c3Qgb3BlbiBkZXZpY2UgT19OT05CTE9DSyFcbiIsCi0JCQkJCSh1bnNpZ25lZCBpbnQpY3VycmVudC0+cGlkKTsgCisJCQkJCSh1bnNpZ25lZCBpbnQpdGFza19waWRfbnIoY3VycmVudCkpOwogCQkgICAgcmV0PS1FTUVESVVNVFlQRTsKIAkJICAgIGdvdG8gY2xlYW5fdXBfYW5kX3JldHVybjsKIAkJfQpAQCAtMzQ1OCw0NyArMzQ1OCwxOSBAQAogc3RhdGljIGludCBjZHJvbV9zeXNjdGxfaGFuZGxlcihjdGxfdGFibGUgKmN0bCwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsCiAJCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50ICp2YWxwID0gY3RsLT5kYXRhOwotCWludCB2YWwgPSAqdmFscDsKIAlpbnQgcmV0OwogCQogCXJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAotCWlmICh3cml0ZSAmJiAqdmFscCAhPSB2YWwpIHsKKwlpZiAod3JpdGUpIHsKIAkKIAkJLyogd2Ugb25seSBjYXJlIGZvciAxIG9yIDAuICovCi0JCWlmICgqdmFscCkKLQkJCSp2YWxwID0gMTsKLQkJZWxzZQotCQkJKnZhbHAgPSAwOworCQlhdXRvY2xvc2UgICAgICAgID0gISFjZHJvbV9zeXNjdGxfc2V0dGluZ3MuYXV0b2Nsb3NlOworCQlhdXRvZWplY3QgICAgICAgID0gISFjZHJvbV9zeXNjdGxfc2V0dGluZ3MuYXV0b2VqZWN0OworCQlkZWJ1ZwkgICAgICAgICA9ICEhY2Ryb21fc3lzY3RsX3NldHRpbmdzLmRlYnVnOworCQlsb2NrZG9vciAgICAgICAgID0gISFjZHJvbV9zeXNjdGxfc2V0dGluZ3MubG9jazsKKwkJY2hlY2tfbWVkaWFfdHlwZSA9ICEhY2Ryb21fc3lzY3RsX3NldHRpbmdzLmNoZWNrOwogCi0JCXN3aXRjaCAoY3RsLT5jdGxfbmFtZSkgewotCQljYXNlIERFVl9DRFJPTV9BVVRPQ0xPU0U6IHsKLQkJCWlmICh2YWxwID09ICZjZHJvbV9zeXNjdGxfc2V0dGluZ3MuYXV0b2Nsb3NlKQotCQkJCWF1dG9jbG9zZSA9IGNkcm9tX3N5c2N0bF9zZXR0aW5ncy5hdXRvY2xvc2U7Ci0JCQlicmVhazsKLQkJCX0KLQkJY2FzZSBERVZfQ0RST01fQVVUT0VKRUNUOiB7Ci0JCQlpZiAodmFscCA9PSAmY2Ryb21fc3lzY3RsX3NldHRpbmdzLmF1dG9lamVjdCkKLQkJCQlhdXRvZWplY3QgPSBjZHJvbV9zeXNjdGxfc2V0dGluZ3MuYXV0b2VqZWN0OwotCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgREVWX0NEUk9NX0RFQlVHOiB7Ci0JCQlpZiAodmFscCA9PSAmY2Ryb21fc3lzY3RsX3NldHRpbmdzLmRlYnVnKQotCQkJCWRlYnVnID0gY2Ryb21fc3lzY3RsX3NldHRpbmdzLmRlYnVnOwotCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgREVWX0NEUk9NX0xPQ0s6IHsKLQkJCWlmICh2YWxwID09ICZjZHJvbV9zeXNjdGxfc2V0dGluZ3MubG9jaykKLQkJCQlsb2NrZG9vciA9IGNkcm9tX3N5c2N0bF9zZXR0aW5ncy5sb2NrOwotCQkJYnJlYWs7Ci0JCQl9Ci0JCWNhc2UgREVWX0NEUk9NX0NIRUNLX01FRElBOiB7Ci0JCQlpZiAodmFscCA9PSAmY2Ryb21fc3lzY3RsX3NldHRpbmdzLmNoZWNrKQotCQkJCWNoZWNrX21lZGlhX3R5cGUgPSBjZHJvbV9zeXNjdGxfc2V0dGluZ3MuY2hlY2s7Ci0JCQlicmVhazsKLQkJCX0KLQkJfQogCQkvKiB1cGRhdGUgdGhlIG9wdGlvbiBmbGFncyBhY2NvcmRpbmcgdG8gdGhlIGNoYW5nZXMuIHdlCiAJCSAgIGRvbid0IGhhdmUgcGVyIGRldmljZSBvcHRpb25zIHRocm91Z2ggc3lzY3RsIHlldCwKIAkJICAgYnV0IHdlIHdpbGwgaGF2ZSBhbmQgdGhlbiB0aGlzIHdpbGwgZGlzYXBwZWFyLiAqLwpAQCAtMzUxMSw3ICszNDgzLDYgQEAKIC8qIFBsYWNlIGZpbGVzIGluIC9wcm9jL3N5cy9kZXYvY2Ryb20gKi8KIHN0YXRpYyBjdGxfdGFibGUgY2Ryb21fdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IERFVl9DRFJPTV9JTkZPLAogCQkucHJvY25hbWUJPSAiaW5mbyIsCiAJCS5kYXRhCQk9ICZjZHJvbV9zeXNjdGxfc2V0dGluZ3MuaW5mbywgCiAJCS5tYXhsZW4JCT0gQ0RST01fU1RSX1NJWkUsCkBAIC0zNTE5LDcgKzM0OTAsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJmNkcm9tX3N5c2N0bF9pbmZvLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBERVZfQ0RST01fQVVUT0NMT1NFLAogCQkucHJvY25hbWUJPSAiYXV0b2Nsb3NlIiwKIAkJLmRhdGEJCT0gJmNkcm9tX3N5c2N0bF9zZXR0aW5ncy5hdXRvY2xvc2UsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCkBAIC0zNTI3LDcgKzM0OTcsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJmNkcm9tX3N5c2N0bF9oYW5kbGVyLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBERVZfQ0RST01fQVVUT0VKRUNULAogCQkucHJvY25hbWUJPSAiYXV0b2VqZWN0IiwKIAkJLmRhdGEJCT0gJmNkcm9tX3N5c2N0bF9zZXR0aW5ncy5hdXRvZWplY3QsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCkBAIC0zNTM1LDcgKzM1MDQsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJmNkcm9tX3N5c2N0bF9oYW5kbGVyLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBERVZfQ0RST01fREVCVUcsCiAJCS5wcm9jbmFtZQk9ICJkZWJ1ZyIsCiAJCS5kYXRhCQk9ICZjZHJvbV9zeXNjdGxfc2V0dGluZ3MuZGVidWcsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCkBAIC0zNTQzLDcgKzM1MTEsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJmNkcm9tX3N5c2N0bF9oYW5kbGVyLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBERVZfQ0RST01fTE9DSywKIAkJLnByb2NuYW1lCT0gImxvY2siLAogCQkuZGF0YQkJPSAmY2Ryb21fc3lzY3RsX3NldHRpbmdzLmxvY2ssCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCkBAIC0zNTUxLDcgKzM1MTgsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJmNkcm9tX3N5c2N0bF9oYW5kbGVyLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBERVZfQ0RST01fQ0hFQ0tfTUVESUEsCiAJCS5wcm9jbmFtZQk9ICJjaGVja19tZWRpYSIsCiAJCS5kYXRhCQk9ICZjZHJvbV9zeXNjdGxfc2V0dGluZ3MuY2hlY2ssCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCmluZGV4IDIwNGQ1M2UuLjY1NDkxMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci9LY29uZmlnCkBAIC0zNiwyMyArMzYsNiBAQAogCSAgSWYgdW5zdXJlLCBzYXkgWSwgb3IgZWxzZSB5b3Ugd29uJ3QgYmUgYWJsZSB0byBkbyBtdWNoIHdpdGggeW91ciBuZXcKIAkgIHNoaW55IExpbnV4IHN5c3RlbSA6LSkKIAotY29uZmlnIFZUX1VOSUNPREUKLQlib29sICJWaXJ0dWFsIGNvbnNvbGUgaXMgVW5pY29kZSBieSBkZWZhdWx0IgotCWRlcGVuZHMgb24gVlQKLQlkZWZhdWx0IG4KLQktLS1oZWxwLS0tCi0JICBJZiB5b3Ugc2F5IFkgaGVyZSwgdGhlIHZpcnR1YWwgdGVybWluYWwgd2lsbCBiZSBpbiBVVEYtOCBieSBkZWZhdWx0LAotCSAgYW5kIHRoZSBrZXlib2FyZCB3aWxsIHJ1biBpbiB1bmljb2RlIG1vZGUuCi0KLQkgIElmIHlvdSBzYXkgTiBoZXJlLCB0aGUgdmlydHVhbCB0ZXJtaW5hbCB3aWxsIG5vdCBiZSBpbiBVVEYtOCBieQotCSAgZGVmYXVsdCwgYW5kIHRoZSBrZXlib2FyZCB3aWxsIHJ1biBpbiBYTEFURSBtb2RlLgotCi0JICBUaGlzIGNhbiBhbHNvIGJlIGNoYW5nZWQgYnkgcGFzc2luZyAnZGVmYXVsdF91dGY4PTwwfDE+JyBvbiB0aGUKLQkgIGtlcm5lbCBjb21tYW5kIGxpbmUuCi0KLQkgIEhpc3RvcmljYWxseSwgdGhlIGtlcm5lbCBoYXMgZGVmYXVsdGVkIHRvIG5vbi1VVEY4IGFuZCBYTEFURSBtb2RlLgotCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgotCiBjb25maWcgVlRfQ09OU09MRQogCWJvb2wgIlN1cHBvcnQgZm9yIGNvbnNvbGUgb24gdmlydHVhbCB0ZXJtaW5hbCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFZUCkBAIC02NDksOCArNjMyLDYgQEAKIAogc291cmNlICJkcml2ZXJzL2NoYXIvaXBtaS9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnIgotCiBjb25maWcgRFMxNjIwCiAJdHJpc3RhdGUgIk5ldFdpbmRlciB0aGVybW9tZXRlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9ORVRXSU5ERVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMgYi9kcml2ZXJzL2NoYXIvYXBtLWVtdWxhdGlvbi5jCmluZGV4IGVjMTE2ZGYuLmM5OWU0M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hcG0tZW11bGF0aW9uLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwbS1lbXVsYXRpb24uYwpAQCAtMTgsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKaW5kZXggOWUwYWRmZS4uZDFiZDBmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2N5Y2xhZGVzLmMKQEAgLTM1OSw3ICszNTksNyBAQAogICoKICAqIFJldmlzaW9uIDEuMzYuMy44ICAxOTk2LzA2LzA3IDE2OjI5OjAwICBiZW50c29uCiAgKiBzdGFydGluZyBtaW5vciBudW1iZXIgYXQgemVybzsgYWRkZWQgbWlzc2luZyB2ZXJpZnlfYXJlYQotICogYXMgbm90ZWQgYnkgSGVpa28gRWlzc2ZlbGR0IDxoZWlrb0Bjb2xvc3N1cy5lc2NhcGUuZGU+CisgKiBhcyBub3RlZCBieSBIZWlrbyBFacOfZmVsZHQgPGhlaWtvQGNvbG9zc3VzLmVzY2FwZS5kZT4KICAqCiAgKiBSZXZpc2lvbiAxLjM2LjMuNyAgMTk5Ni8wNC8xOSAyMTowNjoxOCAgYmVudHNvbgogICogcmVtb3ZlIHVubmVlZGVkIGJvb3QgbWVzc2FnZSAmIGZpeCBDTE9DQUwgaGFyZHdhcmUgZmxvdwpAQCAtNjYyLDcgKzY2Miw3IEBACiBzdGF0aWMgdm9pZCBjeV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIHN0YXRpYyB2b2lkIGN5X3NlbmRfeGNoYXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CiAKLSNkZWZpbmUgSVNfQ1lDX1ooY2FyZCkgKChjYXJkKS5udW1fY2hpcHMgPT0gLTEpCisjZGVmaW5lIElTX0NZQ19aKGNhcmQpICgoY2FyZCkubnVtX2NoaXBzID09ICh1bnNpZ25lZCBpbnQpLTEpCiAKICNkZWZpbmUgWl9GUEdBX0NIRUNLKGNhcmQpIFwKIAkoKHJlYWRsKCYoKHN0cnVjdCBSVU5USU1FXzkwNjAgX19pb21lbSAqKSBcCkBAIC03MjcsOCArNzI3LDYgQEAKICAgIGRyaXZlciB0byBwcm9iZSBhZGRyZXNzZXMgYXQgYSBkaWZmZXJlbnQgYWRkcmVzcywgYWRkIGl0IHRvCiAgICB0aGlzIHRhYmxlLiAgSWYgdGhlIGRyaXZlciBpcyBwcm9iaW5nIHNvbWUgb3RoZXIgYm9hcmQgYW5kCiAgICBjYXVzaW5nIHByb2JsZW1zLCByZW1vdmUgdGhlIG9mZmVuZGluZyBhZGRyZXNzIGZyb20gdGhpcyB0YWJsZS4KLSAgIFRoZSBjeV9zZXR1cCBmdW5jdGlvbiBleHRyYWN0cyBhZGRpdGlvbmFsIGFkZHJlc3NlcyBmcm9tIHRoZQotICAgYm9vdCBvcHRpb25zIGxpbmUuICBUaGUgZm9ybSBpcyAiY3ljbGFkZXM9YWRkcmVzcyxhZGRyZXNzLi4uIgogKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBjeV9pc2FfYWRkcmVzc2VzW10gPSB7CkBAIC04OTcsNzEgKzg5NSw2IEBACiAJcmV0dXJuIDA7CiB9CQkJCS8qIHNlcmlhbF9wYXJhbm9pYV9jaGVjayAqLwogCi0vKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIHNjaGVkdWxlCi0gKiBwcm9jZXNzaW5nIGluIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgcG9ydGlvbiBvZiB0aGUgZHJpdmVyCi0gKiAoYWxzbyBrbm93biBhcyB0aGUgImJvdHRvbSBoYWxmIikuICBUaGlzIGNhbiBiZSBjYWxsZWQgYW55Ci0gKiBudW1iZXIgb2YgdGltZXMgZm9yIGFueSBjaGFubmVsIHdpdGhvdXQgaGFybS4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGN5X3NjaGVkX2V2ZW50KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBpbnQgZXZlbnQpCi17Ci0JaW5mby0+ZXZlbnQgfD0gMSA8PCBldmVudDsgLyogcmVtZW1iZXIgd2hhdCBraW5kIG9mIGV2ZW50IGFuZCB3aG8gKi8KLQlzY2hlZHVsZV93b3JrKCZpbmZvLT50cXVldWUpOwotfQkJCQkvKiBjeV9zY2hlZF9ldmVudCAqLwotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaGFuZGxlIHRoZSAiYm90dG9tIGhhbGYiIHByb2Nlc3NpbmcgZm9yIHRoZQotICogc2VyaWFsIGRyaXZlciwga25vd24gYWxzbyB0aGUgInNvZnR3YXJlIGludGVycnVwdCIgcHJvY2Vzc2luZy4KLSAqIFRoaXMgcHJvY2Vzc2luZyBpcyBkb25lIGF0IHRoZSBrZXJuZWwgaW50ZXJydXB0IGxldmVsLCBhZnRlciB0aGUKLSAqIGN5Iy9faW50ZXJydXB0KCkgaGFzIHJldHVybmVkLCBCVVQgV0lUSCBJTlRFUlJVUFRTIFRVUk5FRCBPTi4gIFRoaXMKLSAqIGlzIHdoZXJlIHRpbWUtY29uc3VtaW5nIGFjdGl2aXRpZXMgd2hpY2ggY2FuIG5vdCBiZSBkb25lIGluIHRoZQotICogaW50ZXJydXB0IGRyaXZlciBwcm9wZXIgYXJlIGRvbmU7IHRoZSBpbnRlcnJ1cHQgZHJpdmVyIHNjaGVkdWxlcwotICogdGhlbSB1c2luZyBjeV9zY2hlZF9ldmVudCgpLCBhbmQgdGhleSBnZXQgZG9uZSBoZXJlLgotICoKLSAqIFRoaXMgaXMgZG9uZSB0aHJvdWdoIG9uZSBsZXZlbCBvZiBpbmRpcmVjdGlvbi0tdGhlIHRhc2sgcXVldWUuCi0gKiBXaGVuIGEgaGFyZHdhcmUgaW50ZXJydXB0IHNlcnZpY2Ugcm91dGluZSB3YW50cyBzZXJ2aWNlIGJ5IHRoZQotICogZHJpdmVyJ3MgYm90dG9tIGhhbGYsIGl0IGVucXVldWVzIHRoZSBhcHByb3ByaWF0ZSB0cV9zdHJ1Y3QgKG9uZQotICogcGVyIHBvcnQpIHRvIHRoZSBrZXZlbnRkIHdvcmsgcXVldWUgYW5kIHNldHMgYSByZXF1ZXN0IGZsYWcKLSAqIHRoYXQgdGhlIHdvcmsgcXVldWUgYmUgcHJvY2Vzc2VkLgotICoKLSAqIEFsdGhvdWdoIHRoaXMgbWF5IHNlZW0gdW53aWVsZHksIGl0IGdpdmVzIHRoZSBzeXN0ZW0gYSB3YXkgdG8KLSAqIHBhc3MgYW4gYXJndW1lbnQgKGluIHRoaXMgY2FzZSB0aGUgcG9pbnRlciB0byB0aGUgY3ljbGFkZXNfcG9ydAotICogc3RydWN0dXJlKSB0byB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIGRyaXZlci4gIFByZXZpb3VzIGtlcm5lbHMKLSAqIGhhZCB0byBwb2xsIGV2ZXJ5IHBvcnQgdG8gc2VlIGlmIHRoYXQgcG9ydCBuZWVkZWQgc2VydmljaW5nLgotICovCi1zdGF0aWMgdm9pZAotZG9fc29mdGludChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8gPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGN5Y2xhZGVzX3BvcnQsIHRxdWV1ZSk7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgICAgKnR0eTsKLQotCXR0eSA9IGluZm8tPnR0eTsKLQlpZiAoIXR0eSkKLQkJcmV0dXJuOwotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9IQU5HVVAsICZpbmZvLT5ldmVudCkpIHsKLQkJdHR5X2hhbmd1cChpbmZvLT50dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPm9wZW5fd2FpdCk7Ci0JCSAgICAgICAgaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7Ci0JfQotCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQ3lfRVZFTlRfT1BFTl9XQUtFVVAsICZpbmZvLT5ldmVudCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKLSNpZmRlZiBDT05GSUdfQ1laX0lOVFIKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX1pfUlhfRlVMTCwgJmluZm8tPmV2ZW50KSAmJgotCQkJIXRpbWVyX3BlbmRpbmcoJmN5el9yeF9mdWxsX3RpbWVyW2luZm8tPmxpbmVdKSkKLQkJbW9kX3RpbWVyKCZjeXpfcnhfZnVsbF90aW1lcltpbmZvLT5saW5lXSwgamlmZmllcyArIDEpOwotI2VuZGlmCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChDeV9FVkVOVF9ERUxUQV9XQUtFVVAsICZpbmZvLT5ldmVudCkpCi0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwotCXR0eV93YWtldXAodHR5KTsKLSNpZmRlZiBaX1dBS0UKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEN5X0VWRU5UX1NIVVRET1dOX1dBS0VVUCwgJmluZm8tPmV2ZW50KSkKLQkJY29tcGxldGUoJmluZm8tPnNodXRkb3duX3dhaXQpOwotI2VuZGlmCi19IC8qIGRvX3NvZnRpbnQgKi8KLQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqIFN0YXJ0IG9mIGJsb2NrIG9mIEN5Y2xvbS1ZIHNwZWNpZmljIGNvZGUgKioqKioqKiovCiAKQEAgLTEwNDUsMzgyICs5NzgsMzMyIEBACiB9CiAjZW5kaWYJCQkJLyogQ09ORklHX0lTQSAqLwogCi1zdGF0aWMgdm9pZCBjeXlfaW50cl9jaGlwKHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbywgaW50IGNoaXAsCi0JCQl2b2lkIF9faW9tZW0gKiBiYXNlX2FkZHIsIGludCBzdGF0dXMsIGludCBpbmRleCkKK3N0YXRpYyB2b2lkIGN5eV9jaGlwX3J4KHN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbywgaW50IGNoaXAsCisJCXZvaWQgX19pb21lbSAqYmFzZV9hZGRyKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7Ci0JaW50IGNoYXJfY291bnQ7Ci0JaW50IGosIGxlbiwgbWRtX2NoYW5nZSwgbWRtX3N0YXR1cywgb3V0Y2g7Ci0JaW50IHNhdmVfeGlyLCBjaGFubmVsLCBzYXZlX2NhcjsKLQljaGFyIGRhdGE7CisJaW50IGxlbiwgaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OworCXU4IHNhdmVfeGlyLCBjaGFubmVsLCBzYXZlX2NhciwgZGF0YSwgY2hhcl9jb3VudDsKIAotCWlmIChzdGF0dXMgJiBDeVNSUmVjZWl2ZSkgewkvKiByZWNlcHRpb24gaW50ZXJydXB0ICovCiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3l5X2ludGVycnVwdDogcmN2ZCBpbnRyLCBjaGlwICVkXG4iLCBjaGlwKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiY3l5X2ludGVycnVwdDogcmN2ZCBpbnRyLCBjaGlwICVkXG4iLCBjaGlwKTsKICNlbmRpZgotCQkvKiBkZXRlcm1pbmUgdGhlIGNoYW5uZWwgJiBjaGFuZ2UgdG8gdGhhdCBjb250ZXh0ICovCi0JCXNwaW5fbG9jaygmY2luZm8tPmNhcmRfbG9jayk7Ci0JCXNhdmVfeGlyID0gKHVfY2hhcikgcmVhZGIoYmFzZV9hZGRyICsgKEN5UklSIDw8IGluZGV4KSk7Ci0JCWNoYW5uZWwgPSAodV9zaG9ydCkgKHNhdmVfeGlyICYgQ3lJUkNoYW5uZWwpOwotCQlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOwotCQlzYXZlX2NhciA9IHJlYWRiKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCkpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOworCS8qIGRldGVybWluZSB0aGUgY2hhbm5lbCAmIGNoYW5nZSB0byB0aGF0IGNvbnRleHQgKi8KKwlzYXZlX3hpciA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJJUiA8PCBpbmRleCkpOworCWNoYW5uZWwgPSBzYXZlX3hpciAmIEN5SVJDaGFubmVsOworCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07CisJc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOwogCi0JCS8qIGlmIHRoZXJlIGlzIG5vd2hlcmUgdG8gcHV0IHRoZSBkYXRhLCBkaXNjYXJkIGl0ICovCi0JCWlmIChpbmZvLT50dHkgPT0gTlVMTCkgewotCQkJaiA9IChyZWFkYihiYXNlX2FkZHIgKyAoQ3lSSVZSIDw8IGluZGV4KSkgJgotCQkJCUN5SVZSTWFzayk7Ci0JCQlpZiAoaiA9PSBDeUlWUlJ4RXgpIHsJLyogZXhjZXB0aW9uICovCisJLyogaWYgdGhlcmUgaXMgbm93aGVyZSB0byBwdXQgdGhlIGRhdGEsIGRpc2NhcmQgaXQgKi8KKwlpZiAoaW5mby0+dHR5ID09IE5VTEwpIHsKKwkJaWYgKChyZWFkYihiYXNlX2FkZHIgKyAoQ3lSSVZSIDw8IGluZGV4KSkgJiBDeUlWUk1hc2spID09CisJCQkJQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLworCQkJZGF0YSA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwgaW5kZXgpKTsKKwkJfSBlbHNlIHsJLyogbm9ybWFsIGNoYXJhY3RlciByZWNlcHRpb24gKi8KKwkJCWNoYXJfY291bnQgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRENSIDw8IGluZGV4KSk7CisJCQl3aGlsZSAoY2hhcl9jb3VudC0tKQogCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7Ci0JCQl9IGVsc2UgewkvKiBub3JtYWwgY2hhcmFjdGVyIHJlY2VwdGlvbiAqLwotCQkJCWNoYXJfY291bnQgPSByZWFkYihiYXNlX2FkZHIgKwotCQkJCQkJKEN5UkRDUiA8PCBpbmRleCkpOwotCQkJCXdoaWxlIChjaGFyX2NvdW50LS0pIHsKLQkJCQkJZGF0YSA9IHJlYWRiKGJhc2VfYWRkciArCi0JCQkJCQkoQ3lSRFNSIDw8IGluZGV4KSk7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewkvKiB0aGVyZSBpcyBhbiBvcGVuIHBvcnQgZm9yIHRoaXMgZGF0YSAqLwotCQkJdHR5ID0gaW5mby0+dHR5OwotCQkJaiA9IChyZWFkYihiYXNlX2FkZHIgKyAoQ3lSSVZSIDw8IGluZGV4KSkgJgotCQkJCQlDeUlWUk1hc2spOwotCQkJaWYgKGogPT0gQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLwotCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8IGluZGV4KSk7CisJCX0KKwkJZ290byBlbmQ7CisJfQorCS8qIHRoZXJlIGlzIGFuIG9wZW4gcG9ydCBmb3IgdGhpcyBkYXRhICovCisJdHR5ID0gaW5mby0+dHR5OworCWlmICgocmVhZGIoYmFzZV9hZGRyICsgKEN5UklWUiA8PCBpbmRleCkpICYgQ3lJVlJNYXNrKSA9PQorCQkJQ3lJVlJSeEV4KSB7CS8qIGV4Y2VwdGlvbiAqLworCQlkYXRhID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PCBpbmRleCkpOwogCi0JCQkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLwotCQkJCWlmIChkYXRhICYgQ3lCUkVBSykKLQkJCQkJaW5mby0+aWNvdW50LmJyaysrOwotCQkJCWVsc2UgaWYgKGRhdGEgJiBDeUZSQU1FKQotCQkJCQlpbmZvLT5pY291bnQuZnJhbWUrKzsKLQkJCQllbHNlIGlmIChkYXRhICYgQ3lQQVJJVFkpCi0JCQkJCWluZm8tPmljb3VudC5wYXJpdHkrKzsKLQkJCQllbHNlIGlmIChkYXRhICYgQ3lPVkVSUlVOKQotCQkJCQlpbmZvLT5pY291bnQub3ZlcnJ1bisrOworCQkvKiBGb3Igc3RhdGlzdGljcyBvbmx5ICovCisJCWlmIChkYXRhICYgQ3lCUkVBSykKKwkJCWluZm8tPmljb3VudC5icmsrKzsKKwkJZWxzZSBpZiAoZGF0YSAmIEN5RlJBTUUpCisJCQlpbmZvLT5pY291bnQuZnJhbWUrKzsKKwkJZWxzZSBpZiAoZGF0YSAmIEN5UEFSSVRZKQorCQkJaW5mby0+aWNvdW50LnBhcml0eSsrOworCQllbHNlIGlmIChkYXRhICYgQ3lPVkVSUlVOKQorCQkJaW5mby0+aWNvdW50Lm92ZXJydW4rKzsKIAotCQkJCWlmIChkYXRhICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKSB7CisJCWlmIChkYXRhICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKSB7CisJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCAxKSkgeworCQkJaWYgKGRhdGEgJiBpbmZvLT5yZWFkX3N0YXR1c19tYXNrKSB7CisJCQkJaWYgKGRhdGEgJiBDeUJSRUFLKSB7CisJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKKwkJCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwKKwkJCQkJCQlpbmRleCkpLCBUVFlfQlJFQUspOwogCQkJCQlpbmZvLT5pY291bnQucngrKzsKLQkJCQkJc3Bpbl91bmxvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJCWlmICh0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIDEpKSB7Ci0JCQkJCWlmIChkYXRhICYgaW5mby0+cmVhZF9zdGF0dXNfbWFzaykgewotCQkJCQkJaWYgKGRhdGEgJiBDeUJSRUFLKSB7Ci0JCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoCi0JCQkJCQkJCXR0eSwKLQkJCQkJCQkJcmVhZGIoCi0JCQkJCQkJCWJhc2VfYWRkciArCi0JCQkJCQkJCShDeVJEU1IgPDwKLQkJCQkJCQkJCWluZGV4KSksCi0JCQkJCQkJCVRUWV9CUkVBSyk7Ci0JCQkJCQkJaW5mby0+aWNvdW50LnJ4Kys7Ci0JCQkJCQkJaWYgKGluZm8tPmZsYWdzICYKLQkJCQkJCQkgICAgQVNZTkNfU0FLKSB7Ci0JCQkJCQkJCWRvX1NBSyh0dHkpOwotCQkJCQkJCX0KLQkJCQkJCX0gZWxzZSBpZiAoZGF0YSAmIEN5RlJBTUUpIHsKLQkJCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcigKLQkJCQkJCQkJdHR5LAotCQkJCQkJCQlyZWFkYigKLQkJCQkJCQkJYmFzZV9hZGRyICsKLQkJCQkJCQkJKEN5UkRTUiA8PAotCQkJCQkJCQkJaW5kZXgpKSwKLQkJCQkJCQkJVFRZX0ZSQU1FKTsKLQkJCQkJCQlpbmZvLT5pY291bnQucngrKzsKLQkJCQkJCQlpbmZvLT5pZGxlX3N0YXRzLgotCQkJCQkJCQlmcmFtZV9lcnJzKys7Ci0JCQkJCQl9IGVsc2UgaWYgKGRhdGEgJiBDeVBBUklUWSkgewotCQkJCQkJCS8qIFBpZWNlcyBvZiBzZXZlbi4uLiAqLwotCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAotCQkJCQkJCQl0dHksCi0JCQkJCQkJCXJlYWRiKAotCQkJCQkJCQliYXNlX2FkZHIgKwotCQkJCQkJCQkoQ3lSRFNSIDw8Ci0JCQkJCQkJCQlpbmRleCkpLAotCQkJCQkJCQlUVFlfUEFSSVRZKTsKLQkJCQkJCQlpbmZvLT5pY291bnQucngrKzsKLQkJCQkJCQlpbmZvLT5pZGxlX3N0YXRzLgotCQkJCQkJCQlwYXJpdHlfZXJycysrOwotCQkJCQkJfSBlbHNlIGlmIChkYXRhICYgQ3lPVkVSUlVOKSB7Ci0JCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIoCi0JCQkJCQkJCXR0eSwgMCwKLQkJCQkJCQkJVFRZX09WRVJSVU4pOwotCQkJCQkJCWluZm8tPmljb3VudC5yeCsrOwotCQkJCQkJLyogSWYgdGhlIGZsaXAgYnVmZmVyIGl0c2VsZiBpcwotCQkJCQkJICAgb3ZlcmZsb3dpbmcsIHdlIHN0aWxsIGxvc2UKLQkJCQkJCSAgIHRoZSBuZXh0IGluY29taW5nIGNoYXJhY3Rlci4KLQkJCQkJCSAqLwotCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAotCQkJCQkJCQl0dHksCi0JCQkJCQkJCXJlYWRiKAotCQkJCQkJCQliYXNlX2FkZHIgKwotCQkJCQkJCQkoQ3lSRFNSIDw8Ci0JCQkJCQkJCQlpbmRleCkpLAotCQkJCQkJCQlUVFlfRlJBTUUpOwotCQkJCQkJCWluZm8tPmljb3VudC5yeCsrOwotCQkJCQkJCWluZm8tPmlkbGVfc3RhdHMuCi0JCQkJCQkJCW92ZXJydW5zKys7Ci0JCQkJCS8qIFRoZXNlIHR3byBjb25kaXRpb25zIG1heSBpbXBseSAqLwotCQkJCQkvKiBhIG5vcm1hbCByZWFkIHNob3VsZCBiZSBkb25lLiAqLwotCQkJCQkvKiB9ZWxzZSBpZihkYXRhICYgQ3lUSU1FT1VUKXsgKi8KLQkJCQkJLyogfWVsc2UgaWYoZGF0YSAmIEN5U1BFQ0hBUil7ICovCi0JCQkJCQl9IGVsc2UgewotCQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKAotCQkJCQkJCQl0dHksIDAsCi0JCQkJCQkJCVRUWV9OT1JNQUwpOwotCQkJCQkJCWluZm8tPmljb3VudC5yeCsrOwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLAotCQkJCQkJCQlUVFlfTk9STUFMKTsKLQkJCQkJCWluZm8tPmljb3VudC5yeCsrOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogdGhlcmUgd2FzIGEgc29mdHdhcmUgYnVmZmVyCi0JCQkJCSAgIG92ZXJydW4gYW5kIG5vdGhpbmcgY291bGQgYmUKLQkJCQkJICAgZG9uZSBhYm91dCBpdCEhISAqLwotCQkJCQlpbmZvLT5pY291bnQuYnVmX292ZXJydW4rKzsKKwkJCQkJaWYgKGluZm8tPmZsYWdzICYgQVNZTkNfU0FLKQorCQkJCQkJZG9fU0FLKHR0eSk7CisJCQkJfSBlbHNlIGlmIChkYXRhICYgQ3lGUkFNRSkgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhciggdHR5LAorCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PAorCQkJCQkJCWluZGV4KSksIFRUWV9GUkFNRSk7CisJCQkJCWluZm8tPmljb3VudC5yeCsrOworCQkJCQlpbmZvLT5pZGxlX3N0YXRzLmZyYW1lX2VycnMrKzsKKwkJCQl9IGVsc2UgaWYgKGRhdGEgJiBDeVBBUklUWSkgeworCQkJCQkvKiBQaWVjZXMgb2Ygc2V2ZW4uLi4gKi8KKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAorCQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5UkRTUiA8PAorCQkJCQkJCWluZGV4KSksIFRUWV9QQVJJVFkpOworCQkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCQkJaW5mby0+aWRsZV9zdGF0cy5wYXJpdHlfZXJycysrOworCQkJCX0gZWxzZSBpZiAoZGF0YSAmIEN5T1ZFUlJVTikgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsCisJCQkJCQkJVFRZX09WRVJSVU4pOworCQkJCQlpbmZvLT5pY291bnQucngrKzsKKwkJCQkJLyogSWYgdGhlIGZsaXAgYnVmZmVyIGl0c2VsZiBpcworCQkJCQkgICBvdmVyZmxvd2luZywgd2Ugc3RpbGwgbG9zZQorCQkJCQkgICB0aGUgbmV4dCBpbmNvbWluZyBjaGFyYWN0ZXIuCisJCQkJCSAqLworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCisJCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lSRFNSIDw8CisJCQkJCQkJaW5kZXgpKSwgVFRZX0ZSQU1FKTsKKwkJCQkJaW5mby0+aWNvdW50LnJ4Kys7CiAJCQkJCWluZm8tPmlkbGVfc3RhdHMub3ZlcnJ1bnMrKzsKKwkJCQkvKiBUaGVzZSB0d28gY29uZGl0aW9ucyBtYXkgaW1wbHkgKi8KKwkJCQkvKiBhIG5vcm1hbCByZWFkIHNob3VsZCBiZSBkb25lLiAqLworCQkJCS8qIH0gZWxzZSBpZihkYXRhICYgQ3lUSU1FT1VUKSB7ICovCisJCQkJLyogfSBlbHNlIGlmKGRhdGEgJiBDeVNQRUNIQVIpIHsgKi8KKwkJCQl9IGVsc2UgeworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsCisJCQkJCQkJVFRZX05PUk1BTCk7CisJCQkJCWluZm8tPmljb3VudC5yeCsrOwogCQkJCX0KLQkJCX0gZWxzZSB7CS8qIG5vcm1hbCBjaGFyYWN0ZXIgcmVjZXB0aW9uICovCi0JCQkJLyogbG9hZCAjIGNoYXJzIGF2YWlsYWJsZSBmcm9tIHRoZSBjaGlwICovCi0JCQkJY2hhcl9jb3VudCA9IHJlYWRiKGJhc2VfYWRkciArCi0JCQkJCQkoQ3lSRENSIDw8IGluZGV4KSk7CisJCQl9IGVsc2UgeworCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX05PUk1BTCk7CisJCQkJaW5mby0+aWNvdW50LnJ4Kys7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiB0aGVyZSB3YXMgYSBzb2Z0d2FyZSBidWZmZXIgb3ZlcnJ1biBhbmQgbm90aGluZworCQkJICogY291bGQgYmUgZG9uZSBhYm91dCBpdCEhISAqLworCQkJaW5mby0+aWNvdW50LmJ1Zl9vdmVycnVuKys7CisJCQlpbmZvLT5pZGxlX3N0YXRzLm92ZXJydW5zKys7CisJCX0KKwl9IGVsc2UgewkvKiBub3JtYWwgY2hhcmFjdGVyIHJlY2VwdGlvbiAqLworCQkvKiBsb2FkICMgY2hhcnMgYXZhaWxhYmxlIGZyb20gdGhlIGNoaXAgKi8KKwkJY2hhcl9jb3VudCA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEQ1IgPDwgaW5kZXgpKTsKIAogI2lmZGVmIENZX0VOQUJMRV9NT05JVE9SSU5HCi0JCQkJKytpbmZvLT5tb24uaW50X2NvdW50OwotCQkJCWluZm8tPm1vbi5jaGFyX2NvdW50ICs9IGNoYXJfY291bnQ7Ci0JCQkJaWYgKGNoYXJfY291bnQgPiBpbmZvLT5tb24uY2hhcl9tYXgpCi0JCQkJCWluZm8tPm1vbi5jaGFyX21heCA9IGNoYXJfY291bnQ7Ci0JCQkJaW5mby0+bW9uLmNoYXJfbGFzdCA9IGNoYXJfY291bnQ7CisJCSsraW5mby0+bW9uLmludF9jb3VudDsKKwkJaW5mby0+bW9uLmNoYXJfY291bnQgKz0gY2hhcl9jb3VudDsKKwkJaWYgKGNoYXJfY291bnQgPiBpbmZvLT5tb24uY2hhcl9tYXgpCisJCQlpbmZvLT5tb24uY2hhcl9tYXggPSBjaGFyX2NvdW50OworCQlpbmZvLT5tb24uY2hhcl9sYXN0ID0gY2hhcl9jb3VudDsKICNlbmRpZgotCQkJCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY2hhcl9jb3VudCk7Ci0JCQkJd2hpbGUgKGxlbi0tKSB7Ci0JCQkJCWRhdGEgPSByZWFkYihiYXNlX2FkZHIgKwotCQkJCQkJCShDeVJEU1IgPDwgaW5kZXgpKTsKLQkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhLAotCQkJCQkJCVRUWV9OT1JNQUwpOwotCQkJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMrKzsKLQkJCQkJaW5mby0+aWNvdW50LnJ4Kys7CisJCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY2hhcl9jb3VudCk7CisJCXdoaWxlIChsZW4tLSkgeworCQkJZGF0YSA9IHJlYWRiKGJhc2VfYWRkciArIChDeVJEU1IgPDwgaW5kZXgpKTsKKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgZGF0YSwgVFRZX05PUk1BTCk7CisJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfYnl0ZXMrKzsKKwkJCWluZm8tPmljb3VudC5yeCsrOwogI2lmZGVmIENZXzE2WV9IQUNLCi0JCQkJCXVkZWxheSgxMEwpOworCQkJdWRlbGF5KDEwTCk7CiAjZW5kaWYKLQkJCQl9Ci0JCQkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPSBqaWZmaWVzOwotCQkJfQotCQkJdHR5X3NjaGVkdWxlX2ZsaXAodHR5KTsKIAkJfQotCQkvKiBlbmQgb2Ygc2VydmljZSAqLwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5UklSIDw8IGluZGV4KSwgKHNhdmVfeGlyICYgMHgzZikpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHNhdmVfY2FyKSk7Ci0JCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwkJaW5mby0+aWRsZV9zdGF0cy5yZWN2X2lkbGUgPSBqaWZmaWVzOworCX0KKwl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOworZW5kOgorCS8qIGVuZCBvZiBzZXJ2aWNlICovCisJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVJJUiA8PCBpbmRleCksIHNhdmVfeGlyICYgMHgzZik7CisJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfY2FyKTsKK30KKworc3RhdGljIHZvaWQgY3l5X2NoaXBfdHgoc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvLCB1bnNpZ25lZCBpbnQgY2hpcCwKKwkJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIpCit7CisJc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm87CisJaW50IGNoYXJfY291bnQsIGluZGV4ID0gY2luZm8tPmJ1c19pbmRleDsKKwl1OCBzYXZlX3hpciwgY2hhbm5lbCwgc2F2ZV9jYXIsIG91dGNoOworCisJLyogU2luY2Ugd2Ugb25seSBnZXQgaGVyZSB3aGVuIHRoZSB0cmFuc21pdCBidWZmZXIKKwkgICBpcyBlbXB0eSwgd2Uga25vdyB3ZSBjYW4gYWx3YXlzIHN0dWZmIGEgZG96ZW4KKwkgICBjaGFyYWN0ZXJzLiAqLworI2lmZGVmIENZX0RFQlVHX0lOVEVSUlVQVFMKKwlwcmludGsoS0VSTl9ERUJVRyAiY3l5X2ludGVycnVwdDogeG1pdCBpbnRyLCBjaGlwICVkXG4iLCBjaGlwKTsKKyNlbmRpZgorCisJLyogZGV0ZXJtaW5lIHRoZSBjaGFubmVsICYgY2hhbmdlIHRvIHRoYXQgY29udGV4dCAqLworCXNhdmVfeGlyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5VElSIDw8IGluZGV4KSk7CisJY2hhbm5lbCA9IHNhdmVfeGlyICYgQ3lJUkNoYW5uZWw7CisJc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV94aXIpOworCisJLyogdmFsaWRhdGUgdGhlIHBvcnQjIChhcyBjb25maWd1cmVkIGFuZCBvcGVuKSAqLworCWlmIChjaGFubmVsICsgY2hpcCAqIDQgPj0gY2luZm8tPm5wb3J0cykgeworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCisJCQkgIHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIH5DeVR4UmR5KTsKKwkJZ290byBlbmQ7CisJfQorCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07CisJaWYgKGluZm8tPnR0eSA9PSBOVUxMKSB7CisJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCSAgcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYgfkN5VHhSZHkpOworCQlnb3RvIGVuZDsKIAl9CiAKLQlpZiAoc3RhdHVzICYgQ3lTUlRyYW5zbWl0KSB7CS8qIHRyYW5zbWlzc2lvbiBpbnRlcnJ1cHQgKi8KLQkJLyogU2luY2Ugd2Ugb25seSBnZXQgaGVyZSB3aGVuIHRoZSB0cmFuc21pdCBidWZmZXIKLQkJICAgaXMgZW1wdHksIHdlIGtub3cgd2UgY2FuIGFsd2F5cyBzdHVmZiBhIGRvemVuCi0JCSAgIGNoYXJhY3RlcnMuICovCi0jaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3l5X2ludGVycnVwdDogeG1pdCBpbnRyLCBjaGlwICVkXG4iLCBjaGlwKTsKLSNlbmRpZgorCS8qIGxvYWQgdGhlIG9uLWNoaXAgc3BhY2UgZm9yIG91dGJvdW5kIGRhdGEgKi8KKwljaGFyX2NvdW50ID0gaW5mby0+eG1pdF9maWZvX3NpemU7CiAKLQkJLyogZGV0ZXJtaW5lIHRoZSBjaGFubmVsICYgY2hhbmdlIHRvIHRoYXQgY29udGV4dCAqLwotCQlzcGluX2xvY2soJmNpbmZvLT5jYXJkX2xvY2spOwotCQlzYXZlX3hpciA9ICh1X2NoYXIpIHJlYWRiKGJhc2VfYWRkciArIChDeVRJUiA8PCBpbmRleCkpOwotCQljaGFubmVsID0gKHVfc2hvcnQpIChzYXZlX3hpciAmIEN5SVJDaGFubmVsKTsKLQkJc2F2ZV9jYXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpKTsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKKwlpZiAoaW5mby0+eF9jaGFyKSB7CS8qIHNlbmQgc3BlY2lhbCBjaGFyICovCisJCW91dGNoID0gaW5mby0+eF9jaGFyOworCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgb3V0Y2gpOworCQljaGFyX2NvdW50LS07CisJCWluZm8tPmljb3VudC50eCsrOworCQlpbmZvLT54X2NoYXIgPSAwOworCX0KIAotCQkvKiB2YWxpZGF0ZSB0aGUgcG9ydCMgKGFzIGNvbmZpZ3VyZWQgYW5kIG9wZW4pICovCi0JCWlmIChjaGFubmVsICsgY2hpcCAqIDQgPj0gY2luZm8tPm5wb3J0cykgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCSAgcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKLQkJCQkgIH5DeVR4UmR5KTsKLQkJCWdvdG8gdHhlbmQ7CisJaWYgKGluZm8tPmJyZWFrb24gfHwgaW5mby0+YnJlYWtvZmYpIHsKKwkJaWYgKGluZm8tPmJyZWFrb24pIHsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAweDgxKTsKKwkJCWluZm8tPmJyZWFrb24gPSAwOworCQkJY2hhcl9jb3VudCAtPSAyOwogCQl9Ci0JCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07Ci0JCWlmIChpbmZvLT50dHkgPT0gTlVMTCkgewotCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJCSAgcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKLQkJCQkgIH5DeVR4UmR5KTsKLQkJCWdvdG8gdHhkb25lOworCQlpZiAoaW5mby0+YnJlYWtvZmYpIHsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAweDgzKTsKKwkJCWluZm8tPmJyZWFrb2ZmID0gMDsKKwkJCWNoYXJfY291bnQgLT0gMjsKIAkJfQorCX0KIAotCQkvKiBsb2FkIHRoZSBvbi1jaGlwIHNwYWNlIGZvciBvdXRib3VuZCBkYXRhICovCi0JCWNoYXJfY291bnQgPSBpbmZvLT54bWl0X2ZpZm9fc2l6ZTsKLQotCQlpZiAoaW5mby0+eF9jaGFyKSB7CS8qIHNlbmQgc3BlY2lhbCBjaGFyICovCi0JCQlvdXRjaCA9IGluZm8tPnhfY2hhcjsKLQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCBvdXRjaCk7Ci0JCQljaGFyX2NvdW50LS07Ci0JCQlpbmZvLT5pY291bnQudHgrKzsKLQkJCWluZm8tPnhfY2hhciA9IDA7Ci0JCX0KLQotCQlpZiAoaW5mby0+YnJlYWtvbiB8fCBpbmZvLT5icmVha29mZikgewotCQkJaWYgKGluZm8tPmJyZWFrb24pIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgMCk7Ci0JCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIDB4ODEpOwotCQkJCWluZm8tPmJyZWFrb24gPSAwOwotCQkJCWNoYXJfY291bnQgLT0gMjsKLQkJCX0KLQkJCWlmIChpbmZvLT5icmVha29mZikgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgMHg4Myk7Ci0JCQkJaW5mby0+YnJlYWtvZmYgPSAwOwotCQkJCWNoYXJfY291bnQgLT0gMjsKLQkJCX0KLQkJfQotCi0JCXdoaWxlIChjaGFyX2NvdW50LS0gPiAwKSB7Ci0JCQlpZiAoIWluZm8tPnhtaXRfY250KSB7Ci0JCQkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCi0JCQkJCQlDeVR4TXB0eSkgewotCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCQlyZWFkYihiYXNlX2FkZHIgKwotCQkJCQkJCShDeVNSRVIgPDwgaW5kZXgpKSAmCisJd2hpbGUgKGNoYXJfY291bnQtLSA+IDApIHsKKwkJaWYgKCFpbmZvLT54bWl0X2NudCkgeworCQkJaWYgKHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmIEN5VHhNcHR5KSB7CisJCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAorCQkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgogCQkJCQkJfkN5VHhNcHR5KTsKLQkJCQl9IGVsc2UgewotCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCQkocmVhZGIoYmFzZV9hZGRyICsKLQkJCQkJCSAgCShDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQl9IGVsc2UgeworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJKHJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCiAJCQkJCQl+Q3lUeFJkeSkgfCBDeVR4TXB0eSk7Ci0JCQkJfQotCQkJCWdvdG8gdHhkb25lOwogCQkJfQotCQkJaWYgKGluZm8tPnhtaXRfYnVmID09IE5VTEwpIHsKLQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCksCi0JCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKGluZm8tPnhtaXRfYnVmID09IE5VTEwpIHsKKwkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQlyZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJgogCQkJCQl+Q3lUeFJkeSk7Ci0JCQkJZ290byB0eGRvbmU7Ci0JCQl9Ci0JCQlpZiAoaW5mby0+dHR5LT5zdG9wcGVkIHx8IGluZm8tPnR0eS0+aHdfc3RvcHBlZCkgewotCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKLQkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAoaW5mby0+dHR5LT5zdG9wcGVkIHx8IGluZm8tPnR0eS0+aHdfc3RvcHBlZCkgeworCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAorCQkJCXJlYWRiKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpKSAmCiAJCQkJCX5DeVR4UmR5KTsKLQkJCQlnb3RvIHR4ZG9uZTsKLQkJCX0KLQkJCS8qIEJlY2F1c2UgdGhlIEVtYmVkZGVkIFRyYW5zbWl0IENvbW1hbmRzIGhhdmUKLQkJCSAgIGJlZW4gZW5hYmxlZCwgd2UgbXVzdCBjaGVjayB0byBzZWUgaWYgdGhlCi0JCQkgICBlc2NhcGUgY2hhcmFjdGVyLCBOVUxMLCBpcyBiZWluZyBzZW50LiAgSWYgaXQKLQkJCSAgIGlzLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlIGlzIHJvb20gZm9yIGl0Ci0JCQkgICB0byBiZSBkb3VibGVkIGluIHRoZSBvdXRwdXQgc3RyZWFtLiAgVGhlcmVmb3JlCi0JCQkgICB3ZSBubyBsb25nZXIgYWR2YW5jZSB0aGUgcG9pbnRlciB3aGVuIHRoZQotCQkJICAgY2hhcmFjdGVyIGlzIGZldGNoZWQsIGJ1dCByYXRoZXIgd2FpdCB1bnRpbAotCQkJICAgYWZ0ZXIgdGhlIGNoZWNrIGZvciBhIE5VTEwgb3V0cHV0IGNoYXJhY3Rlci4KLQkJCSAgIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgbWF5IG5vdCBiZQotCQkJICAgcm9vbSBmb3IgdGhlIHR3byBjaGFycyBuZWVkZWQgdG8gc2VuZCBhIE5VTEwuKQotCQkJICovCi0JCQlvdXRjaCA9IGluZm8tPnhtaXRfYnVmW2luZm8tPnhtaXRfdGFpbF07Ci0JCQlpZiAob3V0Y2gpIHsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBCZWNhdXNlIHRoZSBFbWJlZGRlZCBUcmFuc21pdCBDb21tYW5kcyBoYXZlIGJlZW4gZW5hYmxlZCwKKwkJICogd2UgbXVzdCBjaGVjayB0byBzZWUgaWYgdGhlIGVzY2FwZSBjaGFyYWN0ZXIsIE5VTEwsIGlzIGJlaW5nCisJCSAqIHNlbnQuIElmIGl0IGlzLCB3ZSBtdXN0IGVuc3VyZSB0aGF0IHRoZXJlIGlzIHJvb20gZm9yIGl0IHRvCisJCSAqIGJlIGRvdWJsZWQgaW4gdGhlIG91dHB1dCBzdHJlYW0uICBUaGVyZWZvcmUgd2Ugbm8gbG9uZ2VyCisJCSAqIGFkdmFuY2UgdGhlIHBvaW50ZXIgd2hlbiB0aGUgY2hhcmFjdGVyIGlzIGZldGNoZWQsIGJ1dAorCQkgKiByYXRoZXIgd2FpdCB1bnRpbCBhZnRlciB0aGUgY2hlY2sgZm9yIGEgTlVMTCBvdXRwdXQKKwkJICogY2hhcmFjdGVyLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIG1heSBub3QgYmUgcm9vbQorCQkgKiBmb3IgdGhlIHR3byBjaGFycyBuZWVkZWQgdG8gc2VuZCBhIE5VTEwuKQorCQkgKi8KKwkJb3V0Y2ggPSBpbmZvLT54bWl0X2J1ZltpbmZvLT54bWl0X3RhaWxdOworCQlpZiAob3V0Y2gpIHsKKwkJCWluZm8tPnhtaXRfY250LS07CisJCQlpbmZvLT54bWl0X3RhaWwgPSAoaW5mby0+eG1pdF90YWlsICsgMSkgJgorCQkJCQkoU0VSSUFMX1hNSVRfU0laRSAtIDEpOworCQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVREUiA8PCBpbmRleCksIG91dGNoKTsKKwkJCWluZm8tPmljb3VudC50eCsrOworCQl9IGVsc2UgeworCQkJaWYgKGNoYXJfY291bnQgPiAxKSB7CiAJCQkJaW5mby0+eG1pdF9jbnQtLTsKIAkJCQlpbmZvLT54bWl0X3RhaWwgPSAoaW5mby0+eG1pdF90YWlsICsgMSkgJgotCQkJCQkJKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKKwkJCQkJKFNFUklBTF9YTUlUX1NJWkUgLSAxKTsKIAkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwgb3V0Y2gpOworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLCAwKTsKIAkJCQlpbmZvLT5pY291bnQudHgrKzsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNoYXJfY291bnQgPiAxKSB7Ci0JCQkJCWluZm8tPnhtaXRfY250LS07Ci0JCQkJCWluZm8tPnhtaXRfdGFpbCA9IChpbmZvLT54bWl0X3RhaWwgKyAxKSYKLQkJCQkJCShTRVJJQUxfWE1JVF9TSVpFIC0gMSk7Ci0JCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lURFIgPDwgaW5kZXgpLAotCQkJCQkJb3V0Y2gpOwotCQkJCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VERSIDw8IGluZGV4KSwKLQkJCQkJCTApOwotCQkJCQlpbmZvLT5pY291bnQudHgrKzsKLQkJCQkJY2hhcl9jb3VudC0tOwotCQkJCX0KKwkJCQljaGFyX2NvdW50LS07CiAJCQl9CiAJCX0KLQotdHhkb25lOgotCQlpZiAoaW5mby0+eG1pdF9jbnQgPCBXQUtFVVBfQ0hBUlMpIHsKLQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1dSSVRFX1dBS0VVUCk7Ci0JCX0KLXR4ZW5kOgotCQkvKiBlbmQgb2Ygc2VydmljZSAqLwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VElSIDw8IGluZGV4KSwgKHNhdmVfeGlyICYgMHgzZikpOwotCQljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgKHNhdmVfY2FyKSk7Ci0JCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKIAl9CiAKLQlpZiAoc3RhdHVzICYgQ3lTUk1vZGVtKSB7CS8qIG1vZGVtIGludGVycnVwdCAqLworZG9uZToKKwl0dHlfd2FrZXVwKGluZm8tPnR0eSk7CitlbmQ6CisJLyogZW5kIG9mIHNlcnZpY2UgKi8KKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5VElSIDw8IGluZGV4KSwgc2F2ZV94aXIgJiAweDNmKTsKKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV9jYXIpOworfQogCi0JCS8qIGRldGVybWluZSB0aGUgY2hhbm5lbCAmIGNoYW5nZSB0byB0aGF0IGNvbnRleHQgKi8KLQkJc3Bpbl9sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKLQkJc2F2ZV94aXIgPSAodV9jaGFyKSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNSVIgPDwgaW5kZXgpKTsKLQkJY2hhbm5lbCA9ICh1X3Nob3J0KSAoc2F2ZV94aXIgJiBDeUlSQ2hhbm5lbCk7Ci0JCWluZm8gPSAmY2luZm8tPnBvcnRzW2NoYW5uZWwgKyBjaGlwICogNF07Ci0JCXNhdmVfY2FyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX3hpcik7CitzdGF0aWMgdm9pZCBjeXlfY2hpcF9tb2RlbShzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8sIGludCBjaGlwLAorCQl2b2lkIF9faW9tZW0gKmJhc2VfYWRkcikKK3sKKwlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKKwlpbnQgaW5kZXggPSBjaW5mby0+YnVzX2luZGV4OworCXU4IHNhdmVfeGlyLCBjaGFubmVsLCBzYXZlX2NhciwgbWRtX2NoYW5nZSwgbWRtX3N0YXR1czsKIAotCQltZG1fY2hhbmdlID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TUlTUiA8PCBpbmRleCkpOwotCQltZG1fc3RhdHVzID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5TVNWUjEgPDwgaW5kZXgpKTsKKwkvKiBkZXRlcm1pbmUgdGhlIGNoYW5uZWwgJiBjaGFuZ2UgdG8gdGhhdCBjb250ZXh0ICovCisJc2F2ZV94aXIgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNSVIgPDwgaW5kZXgpKTsKKwljaGFubmVsID0gc2F2ZV94aXIgJiBDeUlSQ2hhbm5lbDsKKwlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOworCXNhdmVfY2FyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSk7CisJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKIAotCQlpZiAoaW5mby0+dHR5KSB7Ci0JCQlpZiAobWRtX2NoYW5nZSAmIEN5QU5ZX0RFTFRBKSB7Ci0JCQkJLyogRm9yIHN0YXRpc3RpY3Mgb25seSAqLwotCQkJCWlmIChtZG1fY2hhbmdlICYgQ3lEQ0QpCi0JCQkJCWluZm8tPmljb3VudC5kY2QrKzsKLQkJCQlpZiAobWRtX2NoYW5nZSAmIEN5Q1RTKQotCQkJCQlpbmZvLT5pY291bnQuY3RzKys7Ci0JCQkJaWYgKG1kbV9jaGFuZ2UgJiBDeURTUikKLQkJCQkJaW5mby0+aWNvdW50LmRzcisrOwotCQkJCWlmIChtZG1fY2hhbmdlICYgQ3lSSSkKLQkJCQkJaW5mby0+aWNvdW50LnJuZysrOworCW1kbV9jaGFuZ2UgPSByZWFkYihiYXNlX2FkZHIgKyAoQ3lNSVNSIDw8IGluZGV4KSk7CisJbWRtX3N0YXR1cyA9IHJlYWRiKGJhc2VfYWRkciArIChDeU1TVlIxIDw8IGluZGV4KSk7CiAKLQkJCQljeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9ERUxUQV9XQUtFVVApOwotCQkJfQorCWlmICghaW5mby0+dHR5KQorCQlnb3RvIGVuZDsKIAotCQkJaWYgKChtZG1fY2hhbmdlICYgQ3lEQ0QpICYmCi0JCQkJCShpbmZvLT5mbGFncyAmIEFTWU5DX0NIRUNLX0NEKSkgewotCQkJCWlmIChtZG1fc3RhdHVzICYgQ3lEQ0QpIHsKLQkJCQkJY3lfc2NoZWRfZXZlbnQoaW5mbywKLQkJCQkJCQlDeV9FVkVOVF9PUEVOX1dBS0VVUCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY3lfc2NoZWRfZXZlbnQoaW5mbywgQ3lfRVZFTlRfSEFOR1VQKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoKG1kbV9jaGFuZ2UgJiBDeUNUUykgJiYKLQkJCQkJKGluZm8tPmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpKSB7Ci0JCQkJaWYgKGluZm8tPnR0eS0+aHdfc3RvcHBlZCkgewotCQkJCQlpZiAobWRtX3N0YXR1cyAmIEN5Q1RTKSB7Ci0JCQkJCQkvKiBjeV9zdGFydCBpc24ndCB1c2VkCi0JCQkJCQkgICBiZWNhdXNlLi4uICEhISAqLwotCQkJCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMDsKLQkJCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKwotCQkJCQkJCShDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQkJCXJlYWRiKGJhc2VfYWRkciArCi0JCQkJCQkJCShDeVNSRVIgPDwKLQkJCQkJCQkJCWluZGV4KSl8Ci0JCQkJCQkJQ3lUeFJkeSk7Ci0JCQkJCQljeV9zY2hlZF9ldmVudChpbmZvLAotCQkJCQkJCUN5X0VWRU5UX1dSSVRFX1dBS0VVUCk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoIShtZG1fc3RhdHVzICYgQ3lDVFMpKSB7Ci0JCQkJCQkvKiBjeV9zdG9wIGlzbid0IHVzZWQKLQkJCQkJCSAgIGJlY2F1c2UgLi4uICEhISAqLwotCQkJCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMTsKLQkJCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKwotCQkJCQkJCShDeVNSRVIgPDwgaW5kZXgpLAotCQkJCQkJCXJlYWRiKGJhc2VfYWRkciArCi0JCQkJCQkJCShDeVNSRVIgPDwKLQkJCQkJCQkJaW5kZXgpKSAmCi0JCQkJCQkJfkN5VHhSZHkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotLyoJCQlpZiAobWRtX2NoYW5nZSAmIEN5RFNSKSB7Ci0JCQl9Ci0JCQlpZiAobWRtX2NoYW5nZSAmIEN5UkkpIHsKLQkJCX0qLwotCQl9Ci0JCS8qIGVuZCBvZiBzZXJ2aWNlICovCi0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lNSVIgPDwgaW5kZXgpLCAoc2F2ZV94aXIgJiAweDNmKSk7Ci0JCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lDQVIgPDwgaW5kZXgpLCBzYXZlX2Nhcik7Ci0JCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwlpZiAobWRtX2NoYW5nZSAmIEN5QU5ZX0RFTFRBKSB7CisJCS8qIEZvciBzdGF0aXN0aWNzIG9ubHkgKi8KKwkJaWYgKG1kbV9jaGFuZ2UgJiBDeURDRCkKKwkJCWluZm8tPmljb3VudC5kY2QrKzsKKwkJaWYgKG1kbV9jaGFuZ2UgJiBDeUNUUykKKwkJCWluZm8tPmljb3VudC5jdHMrKzsKKwkJaWYgKG1kbV9jaGFuZ2UgJiBDeURTUikKKwkJCWluZm8tPmljb3VudC5kc3IrKzsKKwkJaWYgKG1kbV9jaGFuZ2UgJiBDeVJJKQorCQkJaW5mby0+aWNvdW50LnJuZysrOworCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+ZGVsdGFfbXNyX3dhaXQpOwogCX0KKworCWlmICgobWRtX2NoYW5nZSAmIEN5RENEKSAmJiAoaW5mby0+ZmxhZ3MgJiBBU1lOQ19DSEVDS19DRCkpIHsKKwkJaWYgKCEobWRtX3N0YXR1cyAmIEN5RENEKSkgeworCQkJdHR5X2hhbmd1cChpbmZvLT50dHkpOworCQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CisJCX0KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5vcGVuX3dhaXQpOworCX0KKwlpZiAoKG1kbV9jaGFuZ2UgJiBDeUNUUykgJiYgKGluZm8tPmZsYWdzICYgQVNZTkNfQ1RTX0ZMT1cpKSB7CisJCWlmIChpbmZvLT50dHktPmh3X3N0b3BwZWQpIHsKKwkJCWlmIChtZG1fc3RhdHVzICYgQ3lDVFMpIHsKKwkJCQkvKiBjeV9zdGFydCBpc24ndCB1c2VkCisJCQkJICAgYmVjYXVzZS4uLiAhISEgKi8KKwkJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAwOworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpIHwKKwkJCQkJCUN5VHhSZHkpOworCQkJCXR0eV93YWtldXAoaW5mby0+dHR5KTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICghKG1kbV9zdGF0dXMgJiBDeUNUUykpIHsKKwkJCQkvKiBjeV9zdG9wIGlzbid0IHVzZWQKKwkJCQkgICBiZWNhdXNlIC4uLiAhISEgKi8KKwkJCQlpbmZvLT50dHktPmh3X3N0b3BwZWQgPSAxOworCQkJCWN5X3dyaXRlYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSwKKwkJCQkJcmVhZGIoYmFzZV9hZGRyICsgKEN5U1JFUiA8PCBpbmRleCkpICYKKwkJCQkJCX5DeVR4UmR5KTsKKwkJCX0KKwkJfQorCX0KKy8qCWlmIChtZG1fY2hhbmdlICYgQ3lEU1IpIHsKKwl9CisJaWYgKG1kbV9jaGFuZ2UgJiBDeVJJKSB7CisJfSovCitlbmQ6CisJLyogZW5kIG9mIHNlcnZpY2UgKi8KKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5TUlSIDw8IGluZGV4KSwgc2F2ZV94aXIgJiAweDNmKTsKKwljeV93cml0ZWIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSwgc2F2ZV9jYXIpOwogfQogCiAvKiBUaGUgcmVhbCBpbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIGlzIGNhbGxlZApAQCAtMTQzMiwxMCArMTMxNSw4IEBACiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgY3ljbGFkZXNfY2FyZCAqY2luZm8gPSBkZXZfaWQ7CiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHIsICpjYXJkX2Jhc2VfYWRkcjsKLQlpbnQgY2hpcDsKKwl1bnNpZ25lZCBpbnQgY2hpcCwgdG9vX21hbnksIGhhZF93b3JrOwogCWludCBpbmRleDsKLQlpbnQgdG9vX21hbnk7Ci0JaW50IGhhZF93b3JrOwogCiAJaWYgKHVubGlrZWx5KGNpbmZvID09IE5VTEwpKSB7CiAjaWZkZWYgQ1lfREVCVUdfSU5URVJSVVBUUwpAQCAtMTQ3MCwxMSArMTM1MSwxNiBAQAogCQkJICAgY2hpcHMgdG8gYmUgY2hlY2tlZCBpbiBhIHJvdW5kLXJvYmluIGZhc2hpb24gKGFmdGVyCiAJCQkgICBkcmFpbmluZyBlYWNoIG9mIGEgYnVuY2ggKDEwMDApIG9mIGNoYXJhY3RlcnMpLgogCQkJICovCi0JCQkJaWYgKDEwMDAgPCB0b29fbWFueSsrKSB7CisJCQkJaWYgKDEwMDAgPCB0b29fbWFueSsrKQogCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJY3l5X2ludHJfY2hpcChjaW5mbywgY2hpcCwgYmFzZV9hZGRyLCBzdGF0dXMsCi0JCQkJCQlpbmRleCk7CisJCQkJc3Bpbl9sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKKwkJCQlpZiAoc3RhdHVzICYgQ3lTUlJlY2VpdmUpIC8qIHJ4IGludHIgKi8KKwkJCQkJY3l5X2NoaXBfcngoY2luZm8sIGNoaXAsIGJhc2VfYWRkcik7CisJCQkJaWYgKHN0YXR1cyAmIEN5U1JUcmFuc21pdCkgLyogdHggaW50ciAqLworCQkJCQljeXlfY2hpcF90eChjaW5mbywgY2hpcCwgYmFzZV9hZGRyKTsKKwkJCQlpZiAoc3RhdHVzICYgQ3lTUk1vZGVtKSAvKiBtb2RlbSBpbnRyICovCisJCQkJCWN5eV9jaGlwX21vZGVtKGNpbmZvLCBjaGlwLCBiYXNlX2FkZHIpOworCQkJCXNwaW5fdW5sb2NrKCZjaW5mby0+Y2FyZF9sb2NrKTsKIAkJCX0KIAkJfQogCX0gd2hpbGUgKGhhZF93b3JrKTsKQEAgLTE1MjksNyArMTQxNSw3IEBACiAJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwogCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7CiAJX191MzIgX19pb21lbSAqcGNpX2Rvb3JiZWxsOwotCWludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQgaW5kZXg7CiAKIAlmaXJtX2lkID0gY2luZm8tPmJhc2VfYWRkciArIElEX0FERFJFU1M7CiAJaWYgKCFJU1pMT0FERUQoKmNpbmZvKSkgewpAQCAtMTU1NCwxMyArMTQ0MCwxMiBAQAogCXJldHVybiAwOwogfQkJCQkvKiBjeXpfaXNzdWVfY21kICovCiAKLXN0YXRpYyB2b2lkCi1jeXpfaGFuZGxlX3J4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLCBzdHJ1Y3QgQ0hfQ1RSTCBfX2lvbWVtICpjaF9jdHJsLAorc3RhdGljIHZvaWQgY3l6X2hhbmRsZV9yeChzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbywKIAkJc3RydWN0IEJVRl9DVFJMIF9faW9tZW0gKmJ1Zl9jdHJsKQogewogCXN0cnVjdCBjeWNsYWRlc19jYXJkICpjaW5mbyA9IGluZm8tPmNhcmQ7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGluZm8tPnR0eTsKLQlpbnQgY2hhcl9jb3VudDsKKwl1bnNpZ25lZCBpbnQgY2hhcl9jb3VudDsKIAlpbnQgbGVuOwogI2lmZGVmIEJMT0NLTU9WRQogCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKQEAgLTE2MzMsOSArMTUxOCwxMSBAQAogCQkJCWNoYXJfY291bnQgPSByeF9wdXQgLSByeF9nZXQ7CiAJCQllbHNlCiAJCQkJY2hhcl9jb3VudCA9IHJ4X3B1dCAtIHJ4X2dldCArIHJ4X2J1ZnNpemU7Ci0JCQlpZiAoY2hhcl9jb3VudCA+PSAoaW50KXJlYWRsKCZidWZfY3RybC0+cnhfdGhyZXNob2xkKSkgewotCQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1pfUlhfRlVMTCk7Ci0JCQl9CisJCQlpZiAoY2hhcl9jb3VudCA+PSByZWFkbCgmYnVmX2N0cmwtPnJ4X3RocmVzaG9sZCkgJiYKKwkJCQkJIXRpbWVyX3BlbmRpbmcoJmN5el9yeF9mdWxsX3RpbWVyWworCQkJCQkJCWluZm8tPmxpbmVdKSkKKwkJCQltb2RfdGltZXIoJmN5el9yeF9mdWxsX3RpbWVyW2luZm8tPmxpbmVdLAorCQkJCQkJamlmZmllcyArIDEpOwogI2VuZGlmCiAJCQlpbmZvLT5pZGxlX3N0YXRzLnJlY3ZfaWRsZSA9IGppZmZpZXM7CiAJCQl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOwpAQCAtMTY0NSwxNCArMTUzMiwxMyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQKLWN5el9oYW5kbGVfdHgoc3RydWN0IGN5Y2xhZGVzX3BvcnQgKmluZm8sIHN0cnVjdCBDSF9DVFJMIF9faW9tZW0gKmNoX2N0cmwsCitzdGF0aWMgdm9pZCBjeXpfaGFuZGxlX3R4KHN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvLAogCQlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmwpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNpbmZvID0gaW5mby0+Y2FyZDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gaW5mby0+dHR5OwotCWNoYXIgZGF0YTsKLQlpbnQgY2hhcl9jb3VudDsKKwl1OCBkYXRhOworCXVuc2lnbmVkIGludCBjaGFyX2NvdW50OwogI2lmZGVmIEJMT0NLTU9WRQogCWludCBzbWFsbF9jb3VudDsKICNlbmRpZgpAQCAtMTcxNyw5ICsxNjAzLDcgQEAKIAkJfQogI2VuZGlmCiB6dHhkb25lOgotCQlpZiAoaW5mby0+eG1pdF9jbnQgPCBXQUtFVVBfQ0hBUlMpIHsKLQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX1dSSVRFX1dBS0VVUCk7Ci0JCX0KKwkJdHR5X3dha2V1cCh0dHkpOwogCQkvKiBVcGRhdGUgdHhfcHV0ICovCiAJCWN5X3dyaXRlbCgmYnVmX2N0cmwtPnR4X3B1dCwgdHhfcHV0KTsKIAl9CkBAIC0xNzgxLDEwICsxNjY1LDExIEBACiAJCQkJaWYgKChmd192ZXIgPiAyNDEgPyAoKHVfbG9uZykgcGFyYW0pIDoKIAkJCQkJCXJlYWRsKCZjaF9jdHJsLT5yc19zdGF0dXMpKSAmCiAJCQkJCQlDX1JTX0RDRCkgewotCQkJCQljeV9zY2hlZF9ldmVudChpbmZvLAotCQkJCQkJIAlDeV9FVkVOVF9PUEVOX1dBS0VVUCk7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKIAkJCQl9IGVsc2UgewotCQkJCQljeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9IQU5HVVApOworCQkJCQl0dHlfaGFuZ3VwKGluZm8tPnR0eSk7CisJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaW5mby0+b3Blbl93YWl0KTsKKwkJCQkJaW5mby0+ZmxhZ3MgJj0gfkFTWU5DX05PUk1BTF9BQ1RJVkU7CiAJCQkJfQogCQkJfQogCQkJYnJlYWs7CkBAIC0xODAyLDcgKzE2ODcsNyBAQAogCQkJYnJlYWs7CiAjaWZkZWYgWl9XQUtFCiAJCWNhc2UgQ19DTV9JT0NUTFc6Ci0JCQljeV9zY2hlZF9ldmVudChpbmZvLCBDeV9FVkVOVF9TSFVURE9XTl9XQUtFVVApOworCQkJY29tcGxldGUoJmluZm8tPnNodXRkb3duX3dhaXQpOwogCQkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQ1laX0lOVFIKQEAgLTE4MTQsNyArMTY5OSw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY3l6X2ludGVycnVwdDogcmN2ZCBpbnRyLCBjYXJkICVkLCAiCiAJCQkJCSJwb3J0ICVsZFxuIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CiAjZW5kaWYKLQkJCWN5el9oYW5kbGVfcngoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOworCQkJY3l6X2hhbmRsZV9yeChpbmZvLCBidWZfY3RybCk7CiAJCQlicmVhazsKIAkJY2FzZSBDX0NNX1RYQkVNUFRZOgogCQljYXNlIENfQ01fVFhMT1dXTToKQEAgLTE4MjQsNyArMTcwOSw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiY3l6X2ludGVycnVwdDogeG1pdCBpbnRyLCBjYXJkICVkLCAiCiAJCQkJCSJwb3J0ICVsZFxuIiwgaW5mby0+Y2FyZCwgY2hhbm5lbCk7CiAjZW5kaWYKLQkJCWN5el9oYW5kbGVfdHgoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOworCQkJY3l6X2hhbmRsZV90eChpbmZvLCBidWZfY3RybCk7CiAJCQlicmVhazsKICNlbmRpZgkJCQkvKiBDT05GSUdfQ1laX0lOVFIgKi8KIAkJY2FzZSBDX0NNX0ZBVEFMOgpAQCAtMTgzNCw3ICsxNzE5LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChkZWx0YV9jb3VudCkKLQkJCWN5X3NjaGVkX2V2ZW50KGluZm8sIEN5X0VWRU5UX0RFTFRBX1dBS0VVUCk7CisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmluZm8tPmRlbHRhX21zcl93YWl0KTsKIAkJaWYgKHNwZWNpYWxfY291bnQpCiAJCQl0dHlfc2NoZWR1bGVfZmxpcCh0dHkpOwogCX0KQEAgLTE4OTMsMTAgKzE3NzgsOSBAQAogCXN0cnVjdCBGSVJNX0lEIF9faW9tZW0gKmZpcm1faWQ7CiAJc3RydWN0IFpGV19DVFJMIF9faW9tZW0gKnpmd19jdHJsOwogCXN0cnVjdCBCT0FSRF9DVFJMIF9faW9tZW0gKmJvYXJkX2N0cmw7Ci0Jc3RydWN0IENIX0NUUkwgX19pb21lbSAqY2hfY3RybDsKIAlzdHJ1Y3QgQlVGX0NUUkwgX19pb21lbSAqYnVmX2N0cmw7CiAJdW5zaWduZWQgbG9uZyBleHBpcmVzID0gamlmZmllcyArIEhaOwotCWludCBjYXJkLCBwb3J0OworCXVuc2lnbmVkIGludCBwb3J0LCBjYXJkOwogCiAJZm9yIChjYXJkID0gMDsgY2FyZCA8IE5SX0NBUkRTOyBjYXJkKyspIHsKIAkJY2luZm8gPSAmY3lfY2FyZFtjYXJkXTsKQEAgLTE5MjMsMTIgKzE4MDcsMTEgQEAKIAkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGNpbmZvLT5ucG9ydHM7IHBvcnQrKykgewogCQkJaW5mbyA9ICZjaW5mby0+cG9ydHNbcG9ydF07CiAJCQl0dHkgPSBpbmZvLT50dHk7Ci0JCQljaF9jdHJsID0gJih6ZndfY3RybC0+Y2hfY3RybFtwb3J0XSk7CiAJCQlidWZfY3RybCA9ICYoemZ3X2N0cmwtPmJ1Zl9jdHJsW3BvcnRdKTsKIAogCQkJaWYgKCFpbmZvLT50aHJvdHRsZSkKLQkJCQljeXpfaGFuZGxlX3J4KGluZm8sIGNoX2N0cmwsIGJ1Zl9jdHJsKTsKLQkJCWN5el9oYW5kbGVfdHgoaW5mbywgY2hfY3RybCwgYnVmX2N0cmwpOworCQkJCWN5el9oYW5kbGVfcngoaW5mbywgYnVmX2N0cmwpOworCQkJY3l6X2hhbmRsZV90eChpbmZvLCBidWZfY3RybCk7CiAJCX0KIAkJLyogcG9sbCBldmVyeSAnY3l6X3BvbGxpbmdfY3ljbGUnIHBlcmlvZCAqLwogCQlleHBpcmVzID0gamlmZmllcyArIGN5el9wb2xsaW5nX2N5Y2xlOwpAQCAtMjQ5MSwxMSArMjM3NCwxMSBAQAogc3RhdGljIGludCBjeV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwKQogewogCXN0cnVjdCBjeWNsYWRlc19wb3J0ICppbmZvOwotCXVuc2lnbmVkIGludCBpOwotCWludCByZXR2YWwsIGxpbmU7CisJdW5zaWduZWQgaW50IGksIGxpbmU7CisJaW50IHJldHZhbDsKIAogCWxpbmUgPSB0dHktPmluZGV4OwotCWlmICgobGluZSA8IDApIHx8IChOUl9QT1JUUyA8PSBsaW5lKSkgeworCWlmICgodHR5LT5pbmRleCA8IDApIHx8IChOUl9QT1JUUyA8PSBsaW5lKSkgewogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJZm9yIChpID0gMDsgaSA8IE5SX0NBUkRTOyBpKyspCkBAIC0yODEyLDcgKzI2OTUsNiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKIAogCXR0eS0+Y2xvc2luZyA9IDA7Ci0JaW5mby0+ZXZlbnQgPSAwOwogCWluZm8tPnR0eSA9IE5VTEw7CiAJaWYgKGluZm8tPmJsb2NrZWRfb3BlbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5jYXJkX2xvY2ssIGZsYWdzKTsKQEAgLTQ0NDQsNyArNDMyNiw2IEBACiAKIAljeV9mbHVzaF9idWZmZXIodHR5KTsKIAlzaHV0ZG93bihpbmZvKTsKLQlpbmZvLT5ldmVudCA9IDA7CiAJaW5mby0+Y291bnQgPSAwOwogI2lmZGVmIENZX0RFQlVHX0NPVU5UCiAJcHJpbnRrKEtFUk5fREVCVUcgImN5YzpjeV9oYW5ndXAgKCVkKTogc2V0dGluZyBjb3VudCB0byAwXG4iLApAQCAtNDQ2Nyw5ICs0MzQ4LDkgQEAKIHsKIAlzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqaW5mbzsKIAl1MzIgdW5pbml0aWFsaXplZF92YXIobWFpbGJveCk7Ci0JdW5zaWduZWQgaW50IG5wb3J0czsKKwl1bnNpZ25lZCBpbnQgbnBvcnRzLCBwb3J0OwogCXVuc2lnbmVkIHNob3J0IGNoaXBfbnVtYmVyOwotCWludCB1bmluaXRpYWxpemVkX3ZhcihpbmRleCksIHBvcnQ7CisJaW50IHVuaW5pdGlhbGl6ZWRfdmFyKGluZGV4KTsKIAogCXNwaW5fbG9ja19pbml0KCZjaW5mby0+Y2FyZF9sb2NrKTsKIApAQCAtNDUwMiw3ICs0MzgzLDYgQEAKIAkJaW5mby0+Y2xvc2luZ193YWl0ID0gQ0xPU0lOR19XQUlUX0RFTEFZOwogCQlpbmZvLT5jbG9zZV9kZWxheSA9IDUgKiBIWiAvIDEwOwogCi0JCUlOSVRfV09SSygmaW5mby0+dHF1ZXVlLCBkb19zb2Z0aW50KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+b3Blbl93YWl0KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+Y2xvc2Vfd2FpdCk7CiAJCWluaXRfY29tcGxldGlvbigmaW5mby0+c2h1dGRvd25fd2FpdCk7CkBAIC01MjM2LDcgKzUxMTYsNyBAQAogCQkJfQogCQl9CiAjZW5kaWYJCQkJLyogQ09ORklHX0NZWl9JTlRSICovCi0JCWN5X2NhcmRbY2FyZF9ub10ubnVtX2NoaXBzID0gLTE7CisJCWN5X2NhcmRbY2FyZF9ub10ubnVtX2NoaXBzID0gKHVuc2lnbmVkIGludCktMTsKIAl9CiAKIAkvKiBzZXQgY3lfY2FyZCAqLwpAQCAtNTQ4MCwxMyArNTM2MCwxMyBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAkvKiBsb29rIGZvciBwY2kgYm9hcmRzICovCiAJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmY3lfcGNpX2RyaXZlcik7Ci0JaWYgKHJldHZhbCAmJiAhbmJvYXJkcykKLQkJZ290byBlcnJfdW5yOworCWlmIChyZXR2YWwgJiYgIW5ib2FyZHMpIHsKKwkJdHR5X3VucmVnaXN0ZXJfZHJpdmVyKGN5X3NlcmlhbF9kcml2ZXIpOworCQlnb3RvIGVycl9mcnR0eTsKKwl9CiAjZW5kaWYKIAogCXJldHVybiAwOwotZXJyX3VucjoKLQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CiBlcnJfZnJ0dHk6CiAJcHV0X3R0eV9kcml2ZXIoY3lfc2VyaWFsX2RyaXZlcik7CiBlcnI6CkBAIC01NDk2LDcgKzUzNzYsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGN5X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJc3RydWN0IGN5Y2xhZGVzX2NhcmQgKmNhcmQ7Ci0JaW50IGksIGUxOworCXVuc2lnbmVkIGludCBpLCBlMTsKIAogI2lmbmRlZiBDT05GSUdfQ1laX0lOVFIKIAlkZWxfdGltZXJfc3luYygmY3l6X3RpbWVybGlzdCk7CkBAIC01NTI0LDggKzU0MDQsNyBAQAogI2VuZGlmIC8qIENPTkZJR19DWVpfSU5UUiAqLwogCQkJCSkKIAkJCQlmcmVlX2lycShjYXJkLT5pcnEsIGNhcmQpOwotCQkJZm9yIChlMSA9IGNhcmQtPmZpcnN0X2xpbmU7Ci0JCQkJCWUxIDwgY2FyZC0+Zmlyc3RfbGluZSArCisJCQlmb3IgKGUxID0gY2FyZC0+Zmlyc3RfbGluZTsgZTEgPCBjYXJkLT5maXJzdF9saW5lICsKIAkJCQkJY2FyZC0+bnBvcnRzOyBlMSsrKQogCQkJCXR0eV91bnJlZ2lzdGVyX2RldmljZShjeV9zZXJpYWxfZHJpdmVyLCBlMSk7CiAJCQlrZnJlZShjYXJkLT5wb3J0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKaW5kZXggODU2Nzc0Zi4uZDI0YTZjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYwpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKIAkJYnVmID0gZG1hLT5idWZsaXN0W2lkeF07CiAJCWlmIChidWYtPmZpbGVfcHJpdiAhPSBmaWxlX3ByaXYpIHsKIAkJCURSTV9FUlJPUigiUHJvY2VzcyAlZCBmcmVlaW5nIGJ1ZmZlciBub3Qgb3duZWRcbiIsCi0JCQkJICBjdXJyZW50LT5waWQpOworCQkJCSAgdGFza19waWRfbnIoY3VycmVudCkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZHJtX2ZyZWVfYnVmZmVyKGRldiwgYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKaW5kZXggNzI2NjhiMS4uNDRhNDYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZHJ2LmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCSsrZmlsZV9wcml2LT5pb2N0bF9jb3VudDsKIAogCURSTV9ERUJVRygicGlkPSVkLCBjbWQ9MHglMDJ4LCBucj0weCUwMngsIGRldiAweCVseCwgYXV0aD0lZFxuIiwKLQkJICBjdXJyZW50LT5waWQsIGNtZCwgbnIsCisJCSAgdGFza19waWRfbnIoY3VycmVudCksIGNtZCwgbnIsCiAJCSAgKGxvbmcpb2xkX2VuY29kZV9kZXYoZmlsZV9wcml2LT5oZWFkLT5kZXZpY2UpLAogCQkgIGZpbGVfcHJpdi0+YXV0aGVudGljYXRlZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYwppbmRleCBmMzgzZmMzLi4zOTkyZjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAlpZiAoIWRybV9jcHVfdmFsaWQoKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEUk1fREVCVUcoInBpZCA9ICVkLCBtaW5vciA9ICVkXG4iLCBjdXJyZW50LT5waWQsIG1pbm9yKTsKKwlEUk1fREVCVUcoInBpZCA9ICVkLCBtaW5vciA9ICVkXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgbWlub3IpOwogCiAJcHJpdiA9IGRybV9hbGxvYyhzaXplb2YoKnByaXYpLCBEUk1fTUVNX0ZJTEVTKTsKIAlpZiAoIXByaXYpCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBwcml2OwogCXByaXYtPmZpbHAgPSBmaWxwOwogCXByaXYtPnVpZCA9IGN1cnJlbnQtPmV1aWQ7Ci0JcHJpdi0+cGlkID0gY3VycmVudC0+cGlkOworCXByaXYtPnBpZCA9IHRhc2tfcGlkX25yKGN1cnJlbnQpOwogCXByaXYtPm1pbm9yID0gbWlub3I7CiAJcHJpdi0+aGVhZCA9IGRybV9oZWFkc1ttaW5vcl07CiAJcHJpdi0+aW9jdGxfY291bnQgPSAwOwpAQCAtMzM5LDcgKzMzOSw4IEBACiAJICovCiAKIAlEUk1fREVCVUcoInBpZCA9ICVkLCBkZXZpY2UgPSAweCVseCwgb3Blbl9jb3VudCA9ICVkXG4iLAotCQkgIGN1cnJlbnQtPnBpZCwgKGxvbmcpb2xkX2VuY29kZV9kZXYoZmlsZV9wcml2LT5oZWFkLT5kZXZpY2UpLAorCQkgIHRhc2tfcGlkX25yKGN1cnJlbnQpLAorCQkgIChsb25nKW9sZF9lbmNvZGVfZGV2KGZpbGVfcHJpdi0+aGVhZC0+ZGV2aWNlKSwKIAkJICBkZXYtPm9wZW5fY291bnQpOwogCiAJaWYgKGRldi0+ZHJpdmVyLT5yZWNsYWltX2J1ZmZlcnNfbG9ja2VkICYmIGRldi0+bG9jay5od19sb2NrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9oYXNodGFiLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9oYXNodGFiLmMKaW5kZXggM2FkMzE5MC4uNGI4ZTdkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2hhc2h0YWIuYwpAQCAtMjksNyArMjksNyBAQAogICogU2ltcGxlIG9wZW4gaGFzaCB0YWIgaW1wbGVtZW50YXRpb24uCiAgKgogICogQXV0aG9yczoKLSAqIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KICAqLwogCiAjaW5jbHVkZSAiZHJtUC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5oCmluZGV4IDBmMTM3NjcuLjU3M2UzMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2hhc2h0YWIuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9oYXNodGFiLmgKQEAgLTI5LDcgKzI5LDcgQEAKICAqIFNpbXBsZSBvcGVuIGhhc2ggdGFiIGltcGxlbWVudGF0aW9uLgogICoKICAqIEF1dGhvcnM6Ci0gKiBUaG9tYXMgSGVsbHN0cvZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICogVGhvbWFzIEhlbGxzdHLDtm0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CiAgKi8KIAogI2lmbmRlZiBEUk1fSEFTSFRBQl9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9sb2NrLmMKaW5kZXggYzZiNzNlNy4uYmVhMmE3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbG9jay5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2xvY2suYwpAQCAtNTgsMTIgKzU4LDEyIEBACiAKIAlpZiAobG9jay0+Y29udGV4dCA9PSBEUk1fS0VSTkVMX0NPTlRFWFQpIHsKIAkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHVzaW5nIGtlcm5lbCBjb250ZXh0ICVkXG4iLAotCQkJICBjdXJyZW50LT5waWQsIGxvY2stPmNvbnRleHQpOworCQkJICB0YXNrX3BpZF9ucihjdXJyZW50KSwgbG9jay0+Y29udGV4dCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCURSTV9ERUJVRygiJWQgKHBpZCAlZCkgcmVxdWVzdHMgbG9jayAoMHglMDh4KSwgZmxhZ3MgPSAweCUwOHhcbiIsCi0JCSAgbG9jay0+Y29udGV4dCwgY3VycmVudC0+cGlkLAorCQkgIGxvY2stPmNvbnRleHQsIHRhc2tfcGlkX25yKGN1cnJlbnQpLAogCQkgIGRldi0+bG9jay5od19sb2NrLT5sb2NrLCBsb2NrLT5mbGFncyk7CiAKIAlpZiAoZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9ETUFfUVVFVUUpKQpAQCAtMTUzLDcgKzE1Myw3IEBACiAKIAlpZiAobG9jay0+Y29udGV4dCA9PSBEUk1fS0VSTkVMX0NPTlRFWFQpIHsKIAkJRFJNX0VSUk9SKCJQcm9jZXNzICVkIHVzaW5nIGtlcm5lbCBjb250ZXh0ICVkXG4iLAotCQkJICBjdXJyZW50LT5waWQsIGxvY2stPmNvbnRleHQpOworCQkJICB0YXNrX3BpZF9ucihjdXJyZW50KSwgbG9jay0+Y29udGV4dCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21tLmMKaW5kZXggM2U2YmMxNC4uODZmNGViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9tbS5jCkBAIC0zOCw3ICszOCw3IEBACiAgKiBBbGlnbmVkIGFsbG9jYXRpb25zIGNhbiBhbHNvIHNlZSBpbXByb3ZlbWVudC4KICAqCiAgKiBBdXRob3JzOgotICogVGhvbWFzIEhlbGxzdHL2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqIFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgogICovCiAKICNpbmNsdWRlICJkcm1QLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9vc19saW51eC5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fb3NfbGludXguaAppbmRleCAxMTRlNTRlLi43NmU0NGFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9vc19saW51eC5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX29zX2xpbnV4LmgKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogLyoqIEN1cnJlbnQgcHJvY2VzcyBJRCAqLwotI2RlZmluZSBEUk1fQ1VSUkVOVFBJRAkJCWN1cnJlbnQtPnBpZAorI2RlZmluZSBEUk1fQ1VSUkVOVFBJRAkJCXRhc2tfcGlkX25yKGN1cnJlbnQpCiAjZGVmaW5lIERSTV9TVVNFUihwKQkJCWNhcGFibGUoQ0FQX1NZU19BRE1JTikKICNkZWZpbmUgRFJNX1VERUxBWShkKQkJCXVkZWxheShkKQogLyoqIFJlYWQgYSBieXRlIGZyb20gYSBNTUlPIHJlZ2lvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYwppbmRleCBlMjkyYmIwLi5iNTVkNWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wY2kuYwpAQCAtOCwxMiArOCwxMiBAQAogICogXHRvZG8gSW1wbGVtZW50IHRoZSByZW1haW5pbmcgaW9jdGwncyBmb3IgdGhlIFBDSSBwb29scy4KICAqIFx0b2RvIFRoZSB3cmFwcGVycyBoZXJlIGFyZSBzbyB0aGluIHRoYXQgdGhleSB3b3VsZCBiZSBiZXR0ZXIgb2ZmIGlubGluZWQuLgogICoKLSAqIFxhdXRob3IgSm9zZSBGb25zZWNhIDxqcmZvbnNlY2FAdHVuZ3N0ZW5ncmFwaGljcy5jb20+CisgKiBcYXV0aG9yIEpvc8OpIEZvbnNlY2EgPGpyZm9uc2VjYUB0dW5nc3RlbmdyYXBoaWNzLmNvbT4KICAqIFxhdXRob3IgTGVpZiBEZWxnYXNzIDxsZGVsZ2Fzc0ByZXRpbmFsYnVybi5uZXQ+CiAgKi8KIAogLyoKLSAqIENvcHlyaWdodCAyMDAzIEpvc++/vUZvbnNlY2EuCisgKiBDb3B5cmlnaHQgMjAwMyBKb3PDqSBGb25zZWNhLgogICogQ29weXJpZ2h0IDIwMDMgTGVpZiBEZWxnYXNzLgogICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zYXJlYS5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc2FyZWEuaAppbmRleCBmNTQ2Njk2Li5lMDQwZjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zYXJlYS5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NhcmVhLmgKQEAgLTIsNyArMiw3IEBACiAgKiBcZmlsZSBkcm1fc2FyZWEuaAogICogXGJyaWVmIFNBUkVBIGRlZmluaXRpb25zCiAgKgotICogXGF1dGhvciBNaWNoZWwgRORuemVyIDxtaWNoZWxAZGFlbnplci5uZXQ+CisgKiBcYXV0aG9yIE1pY2hlbCBEw6RuemVyIDxtaWNoZWxAZGFlbnplci5uZXQ+CiAgKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uYwppbmRleCA4NDIxYTkzLi45MjZmMTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zbWFuLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc21hbi5jCkBAIC0zMyw3ICszMyw3IEBACiAgKiBzdHJ1Y3Qgb3IgYSBjb250ZXh0IGlkZW50aWZpZXIuCiAgKgogICogQXV0aG9yczoKLSAqIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KICAqLwogCiAjaW5jbHVkZSAiZHJtX3NtYW4uaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uaAppbmRleCAzOWEzOWZlLi4wOGVjZjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zbWFuLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc21hbi5oCkBAIC0zMyw3ICszMyw3IEBACiAgKiBzdHJ1Y3Qgb3IgYSBjb250ZXh0IGlkZW50aWZpZXIuCiAgKgogICogQXV0aG9yczoKLSAqIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KICAqLwogCiAjaWZuZGVmIERSTV9TTUFOX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kbWEuYwppbmRleCA4ZTg0MWJkLi5lYjM4MWE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODEwX2RtYS5jCkBAIC0xMDI0LDcgKzEwMjQsNyBAQAogCXJldGNvZGUgPSBpODEwX2RtYV9nZXRfYnVmZmVyKGRldiwgZCwgZmlsZV9wcml2KTsKIAogCURSTV9ERUJVRygiaTgxMF9kbWE6ICVkIHJldHVybmluZyAlZCwgZ3JhbnRlZCA9ICVkXG4iLAotCQkgIGN1cnJlbnQtPnBpZCwgcmV0Y29kZSwgZC0+Z3JhbnRlZCk7CisJCSAgdGFza19waWRfbnIoY3VycmVudCksIHJldGNvZGUsIGQtPmdyYW50ZWQpOwogCiAJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IChpbnQpaHdfc3RhdHVzWzVdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMKaW5kZXggNDNhMWY3OC4uNjlhMzYzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODMwX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kbWEuYwpAQCAtMTQwOSw3ICsxNDA5LDcgQEAKIAlyZXRjb2RlID0gaTgzMF9kbWFfZ2V0X2J1ZmZlcihkZXYsIGQsIGZpbGVfcHJpdik7CiAKIAlEUk1fREVCVUcoImk4MzBfZG1hOiAlZCByZXR1cm5pbmcgJWQsIGdyYW50ZWQgPSAlZFxuIiwKLQkJICBjdXJyZW50LT5waWQsIHJldGNvZGUsIGQtPmdyYW50ZWQpOworCQkgIHRhc2tfcGlkX25yKGN1cnJlbnQpLCByZXRjb2RlLCBkLT5ncmFudGVkKTsKIAogCXNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPSAoaW50KWh3X3N0YXR1c1s1XTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9yMTI4X2Rydi5oCmluZGV4IDI1MGQyYWEuLjUwNDFiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcjEyOF9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3IxMjhfZHJ2LmgKQEAgLTI5LDcgKzI5LDcgQEAKICAqICAgIFJpY2thcmQgRS4gKFJpaykgRmFpdGggPGZhaXRoQHZhbGludXguY29tPgogICogICAgS2V2aW4gRS4gTWFydGluIDxtYXJ0aW5AdmFsaW51eC5jb20+CiAgKiAgICBHYXJldGggSHVnaGVzIDxnYXJldGhAdmFsaW51eC5jb20+Ci0gKiAgICBNaWNoZWwgRO+/vXplciA8ZGFlbnplcm1Ac3R1ZGVudC5ldGh6LmNoPgorICogICAgTWljaGVsIETDpG56ZXIgPGRhZW56ZXJtQHN0dWRlbnQuZXRoei5jaD4KICAqLwogCiAjaWZuZGVmIF9fUjEyOF9EUlZfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9pcnEuYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCmluZGV4IDJiMjQwN2UuLjg0ZjViYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2lycS5jCkBAIC0yNyw3ICsyNyw3IEBACiAgKgogICogQXV0aG9yczoKICAqICAgIEtlaXRoIFdoaXR3ZWxsIDxrZWl0aEB0dW5nc3RlbmdyYXBoaWNzLmNvbT4KLSAqICAgIE1pY2hlbCBE77+9emVyIDxtaWNoZWxAZGFlbnplci5uZXQ+CisgKiAgICBNaWNoZWwgRMOkbnplciA8bWljaGVsQGRhZW56ZXIubmV0PgogICovCiAKICNpbmNsdWRlICJkcm1QLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwppbmRleCA2OWM5ZjJmLi5mODI0ZjJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCkBAIC0zMDA1LDcgKzMwMDUsNyBAQAogCQkvKgogCQkgKiBUaGlzIGlvY3RsKCkgZG9lc24ndCB3b3JrIG9uIDY0LWJpdCBwbGF0Zm9ybXMgYmVjYXVzZSBod19sb2NrIGlzIGEKIAkJICogcG9pbnRlciB3aGljaCBjYW4ndCBmaXQgaW50byBhbiBpbnQtc2l6ZWQgdmFyaWFibGUuICBBY2NvcmRpbmcgdG8KLQkJICogTWljaGVsIETkbnplciwgdGhlIGlvY3RsKCkgaXMgb25seSB1c2VkIG9uIGVtYmVkZGVkIHBsYXRmb3Jtcywgc28KKwkJICogTWljaGVsIETDpG56ZXIsIHRoZSBpb2N0bCgpIGlzIG9ubHkgdXNlZCBvbiBlbWJlZGRlZCBwbGF0Zm9ybXMsIHNvCiAJCSAqIG5vdCBzdXBwb3J0aW5nIGl0IHNob3VsZG4ndCBiZSBhIHByb2JsZW0uICBJZiB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5CiAJCSAqIGlzIG5lZWRlZCBvbiA2NC1iaXQgcGxhdGZvcm1zLCBhIG5ldyBpb2N0bCgpIHdvdWxkIGhhdmUgdG8gYmUgYWRkZWQsCiAJCSAqIHNvIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IGZvciB0aGUgZW1iZWRkZWQgcGxhdGZvcm1zIGNhbiBiZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9zaXNfbW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX21tLmMKaW5kZXggOGM2NjgzOC4uNmJlMWM1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zaXNfbW0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19tbS5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIC8qCiAgKiBBdXRob3JzOgotICogICAgVGhvbWFzIEhlbGxzdHL2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqICAgIFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgogICovCiAKICNpbmNsdWRlICJkcm1QLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uYwppbmRleCA5YWZjMTY4Li4zZmZiZjg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21tLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLwogLyoKLSAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKiBBdXRob3JzOiBUaG9tYXMgSGVsbHN0csO2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KICAqLwogCiAjaW5jbHVkZSAiZHJtUC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX3ZlcmlmaWVyLmgKaW5kZXggMjhiNTAyOS4uZDZmODIxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfdmVyaWZpZXIuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV92ZXJpZmllci5oCkBAIC0yMCw3ICsyMCw3IEBACiAgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCi0gKiBBdXRob3I6IFRob21hcyBIZWxsc3Ry9m0gMjAwNC4KKyAqIEF1dGhvcjogVGhvbWFzIEhlbGxzdHLDtm0gMjAwNC4KICAqLwogCiAjaWZuZGVmIF9WSUFfVkVSSUZJRVJfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9lc3AuYyBiL2RyaXZlcnMvY2hhci9lc3AuYwppbmRleCAyZTdhZTQyLi4yODYwNzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZXNwLmMKKysrIGIvZHJpdmVycy9jaGFyL2VzcC5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKgogICogIHJzX3NldF90ZXJtaW9zIGZpeGVkIHRvIGxvb2sgYWxzbyBmb3IgY2hhbmdlcyBvZiB0aGUgaW5wdXQKICAqICAgICAgZmxhZ3MgSU5QQ0ssIEJSS0lOVCwgUEFSTVJLLCBJR05QQVIgYW5kIElHTkJSSy4KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXJuZCBBbmjvv71wbCAwNS8xNy85Ni4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZXJuZCBBbmjDpHVwbCAwNS8xNy85Ni4KICAqCiAgKiAtLS0gRW5kIG9mIG5vdGljZXMgZnJvbSBzZXJpYWwuYyAtLS0KICAqCkBAIC01OCwxMCArNTgsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKaW5kZXggZTEzZGQxOC4uM2YzNWExYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYwpAQCAtMTAsNyArMTAsNyBAQAogICogTW9zdGx5IGJhc2VkIG9uIG9yaWdpbmFsIGRyaXZlcjoKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KLSAqIEF1dGhvcjogSnVoYSBZcmrvv73vv708anVoYS55cmpvbGFAbm9raWEuY29tPgorICogQXV0aG9yOiBKdWhhIFlyasO2bMOkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaThrLmMgYi9kcml2ZXJzL2NoYXIvaThrLmMKaW5kZXggY2Q0MDY0MS4uMzBlNTY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2k4ay5jCisrKyBiL2RyaXZlcnMvY2hhci9pOGsuYwpAQCAtMzcxLDE0ICszNzEsMTQgQEAKIAlpbnQgZm5fa2V5LCBjcHVfdGVtcCwgYWNfcG93ZXI7CiAJaW50IGxlZnRfZmFuLCByaWdodF9mYW4sIGxlZnRfc3BlZWQsIHJpZ2h0X3NwZWVkOwogCi0JY3B1X3RlbXAJPSBpOGtfZ2V0X3RlbXAoMCk7CQkJLyogMTExMDAgtXMgKi8KLQlsZWZ0X2Zhbgk9IGk4a19nZXRfZmFuX3N0YXR1cyhJOEtfRkFOX0xFRlQpOwkvKiAgIDU4MCC1cyAqLwotCXJpZ2h0X2Zhbgk9IGk4a19nZXRfZmFuX3N0YXR1cyhJOEtfRkFOX1JJR0hUKTsJLyogICA1ODAgtXMgKi8KLQlsZWZ0X3NwZWVkCT0gaThrX2dldF9mYW5fc3BlZWQoSThLX0ZBTl9MRUZUKTsJLyogICA1ODAgtXMgKi8KLQlyaWdodF9zcGVlZAk9IGk4a19nZXRfZmFuX3NwZWVkKEk4S19GQU5fUklHSFQpOwkvKiAgIDU4MCC1cyAqLwotCWZuX2tleQkJPSBpOGtfZ2V0X2ZuX3N0YXR1cygpOwkJCS8qICAgNzUwILVzICovCisJY3B1X3RlbXAJPSBpOGtfZ2V0X3RlbXAoMCk7CQkJLyogMTExMDAgwrVzICovCisJbGVmdF9mYW4JPSBpOGtfZ2V0X2Zhbl9zdGF0dXMoSThLX0ZBTl9MRUZUKTsJLyogICA1ODAgwrVzICovCisJcmlnaHRfZmFuCT0gaThrX2dldF9mYW5fc3RhdHVzKEk4S19GQU5fUklHSFQpOwkvKiAgIDU4MCDCtXMgKi8KKwlsZWZ0X3NwZWVkCT0gaThrX2dldF9mYW5fc3BlZWQoSThLX0ZBTl9MRUZUKTsJLyogICA1ODAgwrVzICovCisJcmlnaHRfc3BlZWQJPSBpOGtfZ2V0X2Zhbl9zcGVlZChJOEtfRkFOX1JJR0hUKTsJLyogICA1ODAgwrVzICovCisJZm5fa2V5CQk9IGk4a19nZXRfZm5fc3RhdHVzKCk7CQkJLyogICA3NTAgwrVzICovCiAJaWYgKHBvd2VyX3N0YXR1cykKLQkJYWNfcG93ZXIgPSBpOGtfZ2V0X3Bvd2VyX3N0YXR1cygpOwkJLyogMTQ3MDAgtXMgKi8KKwkJYWNfcG93ZXIgPSBpOGtfZ2V0X3Bvd2VyX3N0YXR1cygpOwkJLyogMTQ3MDAgwrVzICovCiAJZWxzZQogCQlhY19wb3dlciA9IC0xOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDg0MzVmYmEuLjVkYzEyNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC0yMjEsMTAgKzIyMSw4IEBACiAJdm9pZCAgICAgICAgICAgICAgICAgICAgICpzZW5kX2luZm87CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotCS8qIEEgbGlzdCBvZiBwcm9jIGVudHJpZXMgZm9yIHRoaXMgaW50ZXJmYWNlLiAgVGhpcyBkb2VzIG5vdAotCSAgIG5lZWQgYSBsb2NrLCBvbmx5IG9uZSB0aHJlYWQgY3JlYXRlcyBpdCBhbmQgb25seSBvbmUgdGhyZWFkCi0JICAgZGVzdHJveXMgaXQuICovCi0Jc3BpbmxvY2tfdCAgICAgICAgICAgICBwcm9jX2VudHJ5X2xvY2s7CisJLyogQSBsaXN0IG9mIHByb2MgZW50cmllcyBmb3IgdGhpcyBpbnRlcmZhY2UuICovCisJc3RydWN0IG11dGV4ICAgICAgICAgICBwcm9jX2VudHJ5X2xvY2s7CiAJc3RydWN0IGlwbWlfcHJvY19lbnRyeSAqcHJvY19lbnRyaWVzOwogI2VuZGlmCiAKQEAgLTE4OTEsMTEgKzE4ODksMTEgQEAKIAkJZmlsZS0+d3JpdGVfcHJvYyA9IHdyaXRlX3Byb2M7CiAJCWZpbGUtPm93bmVyID0gb3duZXI7CiAKLQkJc3Bpbl9sb2NrKCZzbWktPnByb2NfZW50cnlfbG9jayk7CisJCW11dGV4X2xvY2soJnNtaS0+cHJvY19lbnRyeV9sb2NrKTsKIAkJLyogU3RpY2sgaXQgb24gdGhlIGxpc3QuICovCiAJCWVudHJ5LT5uZXh0ID0gc21pLT5wcm9jX2VudHJpZXM7CiAJCXNtaS0+cHJvY19lbnRyaWVzID0gZW50cnk7Ci0JCXNwaW5fdW5sb2NrKCZzbWktPnByb2NfZW50cnlfbG9jayk7CisJCW11dGV4X3VubG9jaygmc21pLT5wcm9jX2VudHJ5X2xvY2spOwogCX0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCkBAIC0xOTM5LDcgKzE5MzcsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0IGlwbWlfcHJvY19lbnRyeSAqZW50cnk7CiAKLQlzcGluX2xvY2soJnNtaS0+cHJvY19lbnRyeV9sb2NrKTsKKwltdXRleF9sb2NrKCZzbWktPnByb2NfZW50cnlfbG9jayk7CiAJd2hpbGUgKHNtaS0+cHJvY19lbnRyaWVzKSB7CiAJCWVudHJ5ID0gc21pLT5wcm9jX2VudHJpZXM7CiAJCXNtaS0+cHJvY19lbnRyaWVzID0gZW50cnktPm5leHQ7CkBAIC0xOTQ4LDcgKzE5NDYsNyBAQAogCQlrZnJlZShlbnRyeS0+bmFtZSk7CiAJCWtmcmVlKGVudHJ5KTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnNtaS0+cHJvY19lbnRyeV9sb2NrKTsKKwltdXRleF91bmxvY2soJnNtaS0+cHJvY19lbnRyeV9sb2NrKTsKIAlyZW1vdmVfcHJvY19lbnRyeShzbWktPnByb2NfZGlyX25hbWUsIHByb2NfaXBtaV9yb290KTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogfQpAQCAtMjYxNCw2ICsyNjEyLDE0IEBACiAJcmV0dXJuOwogfQogCit2b2lkIGlwbWlfcG9sbF9pbnRlcmZhY2UoaXBtaV91c2VyX3QgdXNlcikKK3sKKwlpcG1pX3NtaV90IGludGYgPSB1c2VyLT5pbnRmOworCisJaWYgKGludGYtPmhhbmRsZXJzLT5wb2xsKQorCQlpbnRmLT5oYW5kbGVycy0+cG9sbChpbnRmLT5zZW5kX2luZm8pOworfQorCiBpbnQgaXBtaV9yZWdpc3Rlcl9zbWkoc3RydWN0IGlwbWlfc21pX2hhbmRsZXJzICpoYW5kbGVycywKIAkJICAgICAgdm9pZAkJICAgICAgICpzZW5kX2luZm8sCiAJCSAgICAgIHN0cnVjdCBpcG1pX2RldmljZV9pZCAgICAqZGV2aWNlX2lkLApAQCAtMjY3MSw3ICsyNjc3LDcgQEAKIAl9CiAJaW50Zi0+Y3Vycl9zZXEgPSAwOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0Jc3Bpbl9sb2NrX2luaXQoJmludGYtPnByb2NfZW50cnlfbG9jayk7CisJbXV0ZXhfaW5pdCgmaW50Zi0+cHJvY19lbnRyeV9sb2NrKTsKICNlbmRpZgogCXNwaW5fbG9ja19pbml0KCZpbnRmLT53YWl0aW5nX21zZ3NfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmludGYtPndhaXRpbmdfbXNncyk7CkBAIC00MTY2LDYgKzQxNzIsNyBAQAogRVhQT1JUX1NZTUJPTChpcG1pX2dldF92ZXJzaW9uKTsKIEVYUE9SVF9TWU1CT0woaXBtaV9yZXF1ZXN0X3NldHRpbWUpOwogRVhQT1JUX1NZTUJPTChpcG1pX3JlcXVlc3Rfc3VwcGx5X21zZ3MpOworRVhQT1JUX1NZTUJPTChpcG1pX3BvbGxfaW50ZXJmYWNlKTsKIEVYUE9SVF9TWU1CT0woaXBtaV9yZWdpc3Rlcl9zbWkpOwogRVhQT1JUX1NZTUJPTChpcG1pX3VucmVnaXN0ZXJfc21pKTsKIEVYUE9SVF9TWU1CT0woaXBtaV9yZWdpc3Rlcl9mb3JfY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggYzEyMjJlOS4uNGY1NjBkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTY3NSw3ICs2NzUsOCBAQAogfQogCiAvKiBDYWxsZWQgb24gdGltZW91dHMgYW5kIGV2ZW50cy4gIFRpbWVvdXRzIHNob3VsZCBwYXNzIHRoZSBlbGFwc2VkCi0gICB0aW1lLCBpbnRlcnJ1cHRzIHNob3VsZCBwYXNzIGluIHplcm8uICovCisgICB0aW1lLCBpbnRlcnJ1cHRzIHNob3VsZCBwYXNzIGluIHplcm8uICBNdXN0IGJlIGNhbGxlZCB3aXRoCisgICBzaV9sb2NrIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuICovCiBzdGF0aWMgZW51bSBzaV9zbV9yZXN1bHQgc21pX2V2ZW50X2hhbmRsZXIoc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbywKIAkJCQkJICAgaW50IHRpbWUpCiB7CkBAIC04OTIsMTMgKzg5MywxNiBAQAogc3RhdGljIHZvaWQgcG9sbCh2b2lkICpzZW5kX2luZm8pCiB7CiAJc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbyA9IHNlbmRfaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKIAkgKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZSBkZWxheSBpbiB0aGUgcG9sbCBsb29wIHNvIHdlIGNhbgogCSAqIGRyaXZlIHRpbWUgZm9yd2FyZCBhbmQgdGltZW91dCB0aGluZ3MuCiAJICovCiAJdWRlbGF5KDEwKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc21pX2luZm8tPnNpX2xvY2ssIGZsYWdzKTsKIAlzbWlfZXZlbnRfaGFuZGxlcihzbWlfaW5mbywgMTApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNtaV9pbmZvLT5zaV9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlcXVlc3RfZXZlbnRzKHZvaWQgKnNlbmRfaW5mbykKQEAgLTEwMDYsNiArMTAxMCwxMCBAQAogCiAJbmV3X3NtaS0+aW50ZiA9IGludGY7CiAKKwkvKiBUcnkgdG8gY2xhaW0gYW55IGludGVycnVwdHMuICovCisJaWYgKG5ld19zbWktPmlycV9zZXR1cCkKKwkJbmV3X3NtaS0+aXJxX3NldHVwKG5ld19zbWkpOworCiAJLyogU2V0IHVwIHRoZSB0aW1lciB0aGF0IGRyaXZlcyB0aGUgaW50ZXJmYWNlLiAqLwogCXNldHVwX3RpbWVyKCZuZXdfc21pLT5zaV90aW1lciwgc21pX3RpbWVvdXQsIChsb25nKW5ld19zbWkpOwogCW5ld19zbWktPmxhc3RfdGltZW91dF9qaWZmaWVzID0gamlmZmllczsKQEAgLTIzNzIsMjAgKzIzODAsOSBAQAogCS8qIE90aGVyd2lzZSwgd2UgZ290IHNvbWUgZGF0YS4gKi8KIAlyZXNwX2xlbiA9IHNtaV9pbmZvLT5oYW5kbGVycy0+Z2V0X3Jlc3VsdChzbWlfaW5mby0+c2lfc20sCiAJCQkJCQkgIHJlc3AsIElQTUlfTUFYX01TR19MRU5HVEgpOwotCWlmIChyZXNwX2xlbiA8IDE0KSB7Ci0JCS8qIFRoYXQncyBvZGQsIGl0IHNob3VsZCBiZSBsb25nZXIuICovCi0JCXJ2ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQogCi0JaWYgKChyZXNwWzFdICE9IElQTUlfR0VUX0RFVklDRV9JRF9DTUQpIHx8IChyZXNwWzJdICE9IDApKSB7Ci0JCS8qIFRoYXQncyBvZGQsIGl0IHNob3VsZG4ndCBiZSBhYmxlIHRvIGZhaWwuICovCi0JCXJ2ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyogUmVjb3JkIGluZm8gZnJvbSB0aGUgZ2V0IGRldmljZSBpZCwgaW4gY2FzZSB3ZSBuZWVkIGl0LiAqLwotCWlwbWlfZGVtYW5nbGVfZGV2aWNlX2lkKHJlc3ArMywgcmVzcF9sZW4tMywgJnNtaV9pbmZvLT5kZXZpY2VfaWQpOworCS8qIENoZWNrIGFuZCByZWNvcmQgaW5mbyBmcm9tIHRoZSBnZXQgZGV2aWNlIGlkLCBpbiBjYXNlIHdlIG5lZWQgaXQuICovCisJcnYgPSBpcG1pX2RlbWFuZ2xlX2RldmljZV9pZChyZXNwLCByZXNwX2xlbiwgJnNtaV9pbmZvLT5kZXZpY2VfaWQpOwogCiAgb3V0OgogCWtmcmVlKHJlc3ApOwpAQCAtMjc2NSwxMCArMjc2Miw2IEBACiAJc2V0dXBfb2VtX2RhdGFfaGFuZGxlcihuZXdfc21pKTsKIAlzZXR1cF94YWN0aW9uX2hhbmRsZXJzKG5ld19zbWkpOwogCi0JLyogVHJ5IHRvIGNsYWltIGFueSBpbnRlcnJ1cHRzLiAqLwotCWlmIChuZXdfc21pLT5pcnFfc2V0dXApCi0JCW5ld19zbWktPmlycV9zZXR1cChuZXdfc21pKTsKLQogCUlOSVRfTElTVF9IRUFEKCYobmV3X3NtaS0+eG1pdF9tc2dzKSk7CiAJSU5JVF9MSVNUX0hFQUQoJihuZXdfc21pLT5ocF94bWl0X21zZ3MpKTsKIAluZXdfc21pLT5jdXJyX21zZyA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3dhdGNoZG9nLmMKaW5kZXggNDFmNzhlMi4uZTY4NmZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV93YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfd2F0Y2hkb2cuYwpAQCAtNTAsMTAgKzUwLDE5IEBACiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKLSNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKLSNpbmNsdWRlIDxhc20vYXBpYy5oPgorI2lmZGVmIENPTkZJR19YODYKKy8qIFRoaXMgaXMgdWdseSwgYnV0IEkndmUgZGV0ZXJtaW5lZCB0aGF0IHg4NiBpcyB0aGUgb25seSBhcmNoaXRlY3R1cmUKKyAgIHRoYXQgY2FuIHJlYXNvbmFibHkgc3VwcG9ydCB0aGUgSVBNSSBOTUkgd2F0Y2hkb2cgdGltZW91dCBhdCB0aGlzCisgICB0aW1lLiAgSWYgYW5vdGhlciBhcmNoaXRlY3R1cmUgYWRkcyB0aGlzIGNhcGFiaWxpdHkgc29tZWhvdywgaXQKKyAgIHdpbGwgaGF2ZSB0byBiZSBhIHNvbWV3aGF0IGRpZmZlcmVudCBtZWNoYW5pc20gYW5kIEkgaGF2ZSBubyBpZGVhCisgICBob3cgaXQgd2lsbCB3b3JrLiAgU28gaW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgYW5vdGhlcgorICAgYXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHRoaXMsIHdlIGNhbiBmaWd1cmUgb3V0IGEgZ29vZCBnZW5lcmljCisgICBtZWNoYW5pc20gZm9yIGl0IGF0IHRoYXQgdGltZS4gKi8KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjZGVmaW5lIEhBVkVfRElFX05NSQogI2VuZGlmCiAKICNkZWZpbmUJUEZYICJJUE1JIFdhdGNoZG9nOiAiCkBAIC0xNjYsOCArMTc1LDYgQEAKIAogc3RhdGljIGludCBpZm51bV90b191c2UgPSAtMTsKIAotc3RhdGljIERFQ0xBUkVfUldTRU0ocmVnaXN0ZXJfc2VtKTsKLQogLyogUGFyYW1ldGVycyB0byBpcG1pX3NldF90aW1lb3V0ICovCiAjZGVmaW5lIElQTUlfU0VUX1RJTUVPVVRfTk9fSEIJCQkwCiAjZGVmaW5lIElQTUlfU0VUX1RJTUVPVVRfSEJfSUZfTkVDRVNTQVJZCTEKQEAgLTE5MywxMSArMjAwLDkgQEAKIAlpZiAoZW5kcCA9PSB2YWwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bl9yZWFkKCZyZWdpc3Rlcl9zZW0pOwogCSooKGludCAqKWtwLT5hcmcpID0gbDsKIAlpZiAod2F0Y2hkb2dfdXNlcikKIAkJcnYgPSBpcG1pX3NldF90aW1lb3V0KElQTUlfU0VUX1RJTUVPVVRfSEJfSUZfTkVDRVNTQVJZKTsKLQl1cF9yZWFkKCZyZWdpc3Rlcl9zZW0pOwogCiAJcmV0dXJuIHJ2OwogfQpAQCAtMjI2LDE3ICsyMzEsMTUgQEAKIAogCXMgPSBzdHJzdHJpcCh2YWxjcCk7CiAKLQlkb3duX3JlYWQoJnJlZ2lzdGVyX3NlbSk7CiAJcnYgPSBmbihzLCBOVUxMKTsKIAlpZiAocnYpCi0JCWdvdG8gb3V0X3VubG9jazsKKwkJZ290byBvdXQ7CiAKIAljaGVja19wYXJtcygpOwogCWlmICh3YXRjaGRvZ191c2VyKQogCQlydiA9IGlwbWlfc2V0X3RpbWVvdXQoSVBNSV9TRVRfVElNRU9VVF9IQl9JRl9ORUNFU1NBUlkpOwogCi0gb3V0X3VubG9jazoKLQl1cF9yZWFkKCZyZWdpc3Rlcl9zZW0pOworIG91dDoKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTMxOSw5ICszMjIsMTIgQEAKIC8qIElmIGEgcHJldGltZW91dCBvY2N1cnMsIHRoaXMgaXMgdXNlZCB0byBhbGxvdyBvbmx5IG9uZSBwYW5pYyB0byBoYXBwZW4uICovCiBzdGF0aWMgYXRvbWljX3QgcHJlb3BfcGFuaWNfZXhjbCA9IEFUT01JQ19JTklUKC0xKTsKIAotc3RhdGljIGludCBpcG1pX2hlYXJ0YmVhdCh2b2lkKTsKLXN0YXRpYyB2b2lkIHBhbmljX2hhbHRfaXBtaV9oZWFydGJlYXQodm9pZCk7CisjaWZkZWYgSEFWRV9ESUVfTk1JCitzdGF0aWMgaW50IHRlc3Rpbmdfbm1pOworc3RhdGljIGludCBubWlfaGFuZGxlcl9yZWdpc3RlcmVkOworI2VuZGlmCiAKK3N0YXRpYyBpbnQgaXBtaV9oZWFydGJlYXQodm9pZCk7CiAKIC8qIFdlIHVzZSBhIG11dGV4IHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIHRoaW5nIGNhbiBzZW5kIGEgc2V0CiAgICB0aW1lb3V0IGF0IG9uZSB0aW1lLCBiZWNhdXNlIHdlIG9ubHkgaGF2ZSBvbmUgY29weSBvZiB0aGUgZGF0YS4KQEAgLTM2MCw2ICszNjYsOSBAQAogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYm5vdyA9IDA7CiAKIAorCS8qIFRoZXNlIGNhbiBiZSBjbGVhcmVkIGFzIHdlIGFyZSBzZXR0aW5nIHRoZSB0aW1lb3V0LiAqLworCXByZXRpbWVvdXRfc2luY2VfbGFzdF9oZWFydGJlYXQgPSAwOworCiAJZGF0YVswXSA9IDA7CiAJV0RPR19TRVRfVElNRVJfVVNFKGRhdGFbMF0sIFdET0dfVElNRVJfVVNFX1NNU19PUyk7CiAKQEAgLTQzNCwzMSArNDQzLDc1IEBACiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZzZXRfdGltZW91dF93YWl0KTsKIAorCW11dGV4X3VubG9jaygmc2V0X3RpbWVvdXRfbG9jayk7CisKIAlpZiAoKGRvX2hlYXJ0YmVhdCA9PSBJUE1JX1NFVF9USU1FT1VUX0ZPUkNFX0hCKQogCSAgICB8fCAoKHNlbmRfaGVhcnRiZWF0X25vdykKIAkJJiYgKGRvX2hlYXJ0YmVhdCA9PSBJUE1JX1NFVF9USU1FT1VUX0hCX0lGX05FQ0VTU0FSWSkpKQotCXsKIAkJcnYgPSBpcG1pX2hlYXJ0YmVhdCgpOwotCX0KLQltdXRleF91bmxvY2soJnNldF90aW1lb3V0X2xvY2spOwogCiBvdXQ6CiAJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgdm9pZCBkdW1teV9zbWlfZnJlZShzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2cpCitzdGF0aWMgYXRvbWljX3QgcGFuaWNfZG9uZV9jb3VudCA9IEFUT01JQ19JTklUKDApOworCitzdGF0aWMgdm9pZCBwYW5pY19zbWlfZnJlZShzdHJ1Y3QgaXBtaV9zbWlfbXNnICptc2cpCiB7CisJYXRvbWljX2RlYygmcGFuaWNfZG9uZV9jb3VudCk7CiB9Ci1zdGF0aWMgdm9pZCBkdW1teV9yZWN2X2ZyZWUoc3RydWN0IGlwbWlfcmVjdl9tc2cgKm1zZykKK3N0YXRpYyB2b2lkIHBhbmljX3JlY3ZfZnJlZShzdHJ1Y3QgaXBtaV9yZWN2X21zZyAqbXNnKQogeworCWF0b21pY19kZWMoJnBhbmljX2RvbmVfY291bnQpOwogfQorCitzdGF0aWMgc3RydWN0IGlwbWlfc21pX21zZyBwYW5pY19oYWx0X2hlYXJ0YmVhdF9zbWlfbXNnID0KK3sKKwkuZG9uZSA9IHBhbmljX3NtaV9mcmVlCit9Oworc3RhdGljIHN0cnVjdCBpcG1pX3JlY3ZfbXNnIHBhbmljX2hhbHRfaGVhcnRiZWF0X3JlY3ZfbXNnID0KK3sKKwkuZG9uZSA9IHBhbmljX3JlY3ZfZnJlZQorfTsKKworc3RhdGljIHZvaWQgcGFuaWNfaGFsdF9pcG1pX2hlYXJ0YmVhdCh2b2lkKQoreworCXN0cnVjdCBrZXJuZWxfaXBtaV9tc2cgICAgICAgICAgICAgbXNnOworCXN0cnVjdCBpcG1pX3N5c3RlbV9pbnRlcmZhY2VfYWRkciBhZGRyOworCWludCBydjsKKworCS8qIERvbid0IHJlc2V0IHRoZSB0aW1lciBpZiB3ZSBoYXZlIHRoZSB0aW1lciB0dXJuZWQgb2ZmLCB0aGF0CisgICAgICAgICAgIHJlLWVuYWJsZXMgdGhlIHdhdGNoZG9nLiAqLworCWlmIChpcG1pX3dhdGNoZG9nX3N0YXRlID09IFdET0dfVElNRU9VVF9OT05FKQorCQlyZXR1cm47CisKKwlhZGRyLmFkZHJfdHlwZSA9IElQTUlfU1lTVEVNX0lOVEVSRkFDRV9BRERSX1RZUEU7CisJYWRkci5jaGFubmVsID0gSVBNSV9CTUNfQ0hBTk5FTDsKKwlhZGRyLmx1biA9IDA7CisKKwltc2cubmV0Zm4gPSAweDA2OworCW1zZy5jbWQgPSBJUE1JX1dET0dfUkVTRVRfVElNRVI7CisJbXNnLmRhdGEgPSBOVUxMOworCW1zZy5kYXRhX2xlbiA9IDA7CisJcnYgPSBpcG1pX3JlcXVlc3Rfc3VwcGx5X21zZ3Mod2F0Y2hkb2dfdXNlciwKKwkJCQkgICAgICAoc3RydWN0IGlwbWlfYWRkciAqKSAmYWRkciwKKwkJCQkgICAgICAwLAorCQkJCSAgICAgICZtc2csCisJCQkJICAgICAgTlVMTCwKKwkJCQkgICAgICAmcGFuaWNfaGFsdF9oZWFydGJlYXRfc21pX21zZywKKwkJCQkgICAgICAmcGFuaWNfaGFsdF9oZWFydGJlYXRfcmVjdl9tc2csCisJCQkJICAgICAgMSk7CisJaWYgKCFydikKKwkJYXRvbWljX2FkZCgyLCAmcGFuaWNfZG9uZV9jb3VudCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaXBtaV9zbWlfbXNnIHBhbmljX2hhbHRfc21pX21zZyA9CiB7Ci0JLmRvbmUgPSBkdW1teV9zbWlfZnJlZQorCS5kb25lID0gcGFuaWNfc21pX2ZyZWUKIH07CiBzdGF0aWMgc3RydWN0IGlwbWlfcmVjdl9tc2cgcGFuaWNfaGFsdF9yZWN2X21zZyA9CiB7Ci0JLmRvbmUgPSBkdW1teV9yZWN2X2ZyZWUKKwkuZG9uZSA9IHBhbmljX3JlY3ZfZnJlZQogfTsKIAogLyogU3BlY2lhbCBjYWxsLCBkb2Vzbid0IGNsYWltIGFueSBsb2Nrcy4gIFRoaXMgaXMgb25seSB0byBiZSBjYWxsZWQKQEAgLTQ3MCwxMyArNTIzLDIxIEBACiAJaW50IHNlbmRfaGVhcnRiZWF0X25vdzsKIAlpbnQgcnY7CiAKKwkvKiBXYWl0IGZvciB0aGUgbWVzc2FnZXMgdG8gYmUgZnJlZS4gKi8KKwl3aGlsZSAoYXRvbWljX3JlYWQoJnBhbmljX2RvbmVfY291bnQpICE9IDApCisJCWlwbWlfcG9sbF9pbnRlcmZhY2Uod2F0Y2hkb2dfdXNlcik7CiAJcnYgPSBpX2lwbWlfc2V0X3RpbWVvdXQoJnBhbmljX2hhbHRfc21pX21zZywKIAkJCQkmcGFuaWNfaGFsdF9yZWN2X21zZywKIAkJCQkmc2VuZF9oZWFydGJlYXRfbm93KTsKIAlpZiAoIXJ2KSB7CisJCWF0b21pY19hZGQoMiwgJnBhbmljX2RvbmVfY291bnQpOwogCQlpZiAoc2VuZF9oZWFydGJlYXRfbm93KQogCQkJcGFuaWNfaGFsdF9pcG1pX2hlYXJ0YmVhdCgpOwotCX0KKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJICAgICAgICJVbmFibGUgdG8gZXh0ZW5kIHRoZSB3YXRjaGRvZyB0aW1lb3V0LiIpOworCXdoaWxlIChhdG9taWNfcmVhZCgmcGFuaWNfZG9uZV9jb3VudCkgIT0gMCkKKwkJaXBtaV9wb2xsX2ludGVyZmFjZSh3YXRjaGRvZ191c2VyKTsKIH0KIAogLyogV2UgdXNlIGEgc2VtYXBob3JlIHRvIG1ha2Ugc3VyZSB0aGF0IG9ubHkgb25lIHRoaW5nIGNhbiBzZW5kIGEKQEAgLTUwNSwyNCArNTY2LDE0IEBACiAJLmRvbmUgPSBoZWFydGJlYXRfZnJlZV9yZWN2CiB9OwogIAotc3RhdGljIHN0cnVjdCBpcG1pX3NtaV9tc2cgcGFuaWNfaGFsdF9oZWFydGJlYXRfc21pX21zZyA9Ci17Ci0JLmRvbmUgPSBkdW1teV9zbWlfZnJlZQotfTsKLXN0YXRpYyBzdHJ1Y3QgaXBtaV9yZWN2X21zZyBwYW5pY19oYWx0X2hlYXJ0YmVhdF9yZWN2X21zZyA9Ci17Ci0JLmRvbmUgPSBkdW1teV9yZWN2X2ZyZWUKLX07Ci0gCiBzdGF0aWMgaW50IGlwbWlfaGVhcnRiZWF0KHZvaWQpCiB7CiAJc3RydWN0IGtlcm5lbF9pcG1pX21zZyAgICAgICAgICAgIG1zZzsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnY7CiAJc3RydWN0IGlwbWlfc3lzdGVtX2ludGVyZmFjZV9hZGRyIGFkZHI7CiAKLQlpZiAoaXBtaV9pZ25vcmVfaGVhcnRiZWF0KSB7CisJaWYgKGlwbWlfaWdub3JlX2hlYXJ0YmVhdCkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJaWYgKGlwbWlfc3RhcnRfdGltZXJfb25faGVhcnRiZWF0KSB7CiAJCWlwbWlfc3RhcnRfdGltZXJfb25faGVhcnRiZWF0ID0gMDsKQEAgLTUzMyw3ICs1ODQsNiBAQAogCQkgICBXZSBkb24ndCB3YW50IHRvIHNldCB0aGUgYWN0aW9uLCB0aG91Z2gsIHdlIHdhbnQgdG8KIAkJICAgbGVhdmUgdGhhdCBhbG9uZSAodGh1cyBpdCBjYW4ndCBiZSBjb21iaW5lZCB3aXRoIHRoZQogCQkgICBhYm92ZSBvcGVyYXRpb24uICovCi0JCXByZXRpbWVvdXRfc2luY2VfbGFzdF9oZWFydGJlYXQgPSAwOwogCQlyZXR1cm4gaXBtaV9zZXRfdGltZW91dChJUE1JX1NFVF9USU1FT1VUX0hCX0lGX05FQ0VTU0FSWSk7CiAJfQogCkBAIC01ODYsMzUgKzYzNiw2IEBACiAJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgdm9pZCBwYW5pY19oYWx0X2lwbWlfaGVhcnRiZWF0KHZvaWQpCi17Ci0Jc3RydWN0IGtlcm5lbF9pcG1pX21zZyAgICAgICAgICAgICBtc2c7Ci0Jc3RydWN0IGlwbWlfc3lzdGVtX2ludGVyZmFjZV9hZGRyIGFkZHI7Ci0KLQotCS8qIERvbid0IHJlc2V0IHRoZSB0aW1lciBpZiB3ZSBoYXZlIHRoZSB0aW1lciB0dXJuZWQgb2ZmLCB0aGF0Ci0gICAgICAgICAgIHJlLWVuYWJsZXMgdGhlIHdhdGNoZG9nLiAqLwotCWlmIChpcG1pX3dhdGNoZG9nX3N0YXRlID09IFdET0dfVElNRU9VVF9OT05FKQotCQlyZXR1cm47Ci0KLQlhZGRyLmFkZHJfdHlwZSA9IElQTUlfU1lTVEVNX0lOVEVSRkFDRV9BRERSX1RZUEU7Ci0JYWRkci5jaGFubmVsID0gSVBNSV9CTUNfQ0hBTk5FTDsKLQlhZGRyLmx1biA9IDA7Ci0KLQltc2cubmV0Zm4gPSAweDA2OwotCW1zZy5jbWQgPSBJUE1JX1dET0dfUkVTRVRfVElNRVI7Ci0JbXNnLmRhdGEgPSBOVUxMOwotCW1zZy5kYXRhX2xlbiA9IDA7Ci0JaXBtaV9yZXF1ZXN0X3N1cHBseV9tc2dzKHdhdGNoZG9nX3VzZXIsCi0JCQkJIChzdHJ1Y3QgaXBtaV9hZGRyICopICZhZGRyLAotCQkJCSAwLAotCQkJCSAmbXNnLAotCQkJCSBOVUxMLAotCQkJCSAmcGFuaWNfaGFsdF9oZWFydGJlYXRfc21pX21zZywKLQkJCQkgJnBhbmljX2hhbHRfaGVhcnRiZWF0X3JlY3ZfbXNnLAotCQkJCSAxKTsKLX0KLQogc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0KIHsKIAkub3B0aW9ucwk9IDAsCS8qIFdESU9GX1NFVFRJTUVPVVQsICovCkBAIC04OTUsNyArOTE2LDYgQEAKIHsKIAlpbnQgcnYgPSAtRUJVU1k7CiAKLQlkb3duX3dyaXRlKCZyZWdpc3Rlcl9zZW0pOwogCWlmICh3YXRjaGRvZ191c2VyKQogCQlnb3RvIG91dDsKIApAQCAtOTIxLDE1ICs5NDEsNTYgQEAKIAkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuYWJsZSB0byByZWdpc3RlciBtaXNjIGRldmljZVxuIik7CiAJfQogCi0gb3V0OgotCXVwX3dyaXRlKCZyZWdpc3Rlcl9zZW0pOworI2lmZGVmIEhBVkVfRElFX05NSQorCWlmIChubWlfaGFuZGxlcl9yZWdpc3RlcmVkKSB7CisJCWludCBvbGRfcHJldGltZW91dCA9IHByZXRpbWVvdXQ7CisJCWludCBvbGRfdGltZW91dCA9IHRpbWVvdXQ7CisJCWludCBvbGRfcHJlb3BfdmFsID0gcHJlb3BfdmFsOwogCisJCS8qIFNldCB0aGUgcHJldGltZW91dCB0byBnbyBvZmYgaW4gYSBzZWNvbmQgYW5kIGdpdmUKKwkJICAgb3Vyc2VsdmVzIHBsZW50eSBvZiB0aW1lIHRvIHN0b3AgdGhlIHRpbWVyLiAqLworCQlpcG1pX3dhdGNoZG9nX3N0YXRlID0gV0RPR19USU1FT1VUX1JFU0VUOworCQlwcmVvcF92YWwgPSBXRE9HX1BSRU9QX05PTkU7IC8qIE1ha2Ugc3VyZSBub3RoaW5nIGhhcHBlbnMgKi8KKwkJcHJldGltZW91dCA9IDk5OworCQl0aW1lb3V0ID0gMTAwOworCisJCXRlc3Rpbmdfbm1pID0gMTsKKworCQlydiA9IGlwbWlfc2V0X3RpbWVvdXQoSVBNSV9TRVRfVElNRU9VVF9GT1JDRV9IQik7CisJCWlmIChydikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkVycm9yIHN0YXJ0aW5nIHRpbWVyIHRvIgorCQkJICAgICAgICIgdGVzdCBOTUk6IDB4JXguICBUaGUgTk1JIHByZXRpbWVvdXQgd2lsbCIKKwkJCSAgICAgICAiIGxpa2VseSBub3Qgd29ya1xuIiwgcnYpOworCQkJcnYgPSAwOworCQkJZ290byBvdXRfcmVzdG9yZTsKKwkJfQorCisJCW1zbGVlcCgxNTAwKTsKKworCQlpZiAodGVzdGluZ19ubWkgIT0gMikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIklQTUkgTk1JIGRpZG4ndCBzZWVtIHRvIgorCQkJICAgICAgICIgb2NjdXIuICBUaGUgTk1JIHByZXRpbWVvdXQgd2lsbCIKKwkJCSAgICAgICAiIGxpa2VseSBub3Qgd29ya1xuIik7CisJCX0KKwlvdXRfcmVzdG9yZToKKwkJdGVzdGluZ19ubWkgPSAwOworCQlwcmVvcF92YWwgPSBvbGRfcHJlb3BfdmFsOworCQlwcmV0aW1lb3V0ID0gb2xkX3ByZXRpbWVvdXQ7CisJCXRpbWVvdXQgPSBvbGRfdGltZW91dDsKKwl9CisjZW5kaWYKKworIG91dDoKIAlpZiAoKHN0YXJ0X25vdykgJiYgKHJ2ID09IDApKSB7CiAJCS8qIFJ1biBmcm9tIHN0YXJ0dXAsIHNvIHN0YXJ0IHRoZSB0aW1lciBub3cuICovCiAJCXN0YXJ0X25vdyA9IDA7IC8qIERpc2FibGUgdGhpcyBmdW5jdGlvbiBhZnRlciBmaXJzdCBzdGFydHVwLiAqLwogCQlpcG1pX3dhdGNoZG9nX3N0YXRlID0gYWN0aW9uX3ZhbDsKIAkJaXBtaV9zZXRfdGltZW91dChJUE1JX1NFVF9USU1FT1VUX0ZPUkNFX0hCKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlN0YXJ0aW5nIG5vdyFcbiIpOworCX0gZWxzZSB7CisJCS8qIFN0b3AgdGhlIHRpbWVyIG5vdy4gKi8KKwkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9OT05FOworCQlpcG1pX3NldF90aW1lb3V0KElQTUlfU0VUX1RJTUVPVVRfTk9fSEIpOwogCX0KIH0KIApAQCAtOTM3LDggKzk5OCw2IEBACiB7CiAJaW50IHJ2OwogCi0JZG93bl93cml0ZSgmcmVnaXN0ZXJfc2VtKTsKLQogCWlmICghd2F0Y2hkb2dfdXNlcikKIAkJZ290byBvdXQ7CiAKQEAgLTk2MywyMCArMTAyMiw0NCBAQAogCXdhdGNoZG9nX3VzZXIgPSBOVUxMOwogCiAgb3V0OgotCXVwX3dyaXRlKCZyZWdpc3Rlcl9zZW0pOworCXJldHVybjsKIH0KIAotI2lmZGVmIEhBVkVfTk1JX0hBTkRMRVIKKyNpZmRlZiBIQVZFX0RJRV9OTUkKIHN0YXRpYyBpbnQKLWlwbWlfbm1pKHZvaWQgKmRldl9pZCwgaW50IGNwdSwgaW50IGhhbmRsZWQpCitpcG1pX25taShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQogeworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IGRhdGE7CisKKwlpZiAodmFsICE9IERJRV9OTUkpCisJCXJldHVybiBOT1RJRllfT0s7CisKKwkvKiBIYWNrLCBpZiBpdCdzIGEgbWVtb3J5IG9yIEkvTyBlcnJvciwgaWdub3JlIGl0LiAqLworCWlmIChhcmdzLT5lcnIgJiAweGMwKQorCQlyZXR1cm4gTk9USUZZX09LOworCisJLyoKKwkgKiBJZiB3ZSBnZXQgaGVyZSwgaXQncyBhbiBOTUkgdGhhdCdzIG5vdCBhIG1lbW9yeSBvciBJL08KKwkgKiBlcnJvci4gIFdlIGNhbid0IHRydWx5IHRlbGwgaWYgaXQncyBmcm9tIElQTUkgb3Igbm90CisJICogd2l0aG91dCBzZW5kaW5nIGEgbWVzc2FnZSwgYW5kIHNlbmRpbmcgYSBtZXNzYWdlIGlzIGFsbW9zdAorCSAqIGltcG9zc2libGUgYmVjYXVzZSBvZiBsb2NraW5nLgorCSAqLworCisJaWYgKHRlc3Rpbmdfbm1pKSB7CisJCXRlc3Rpbmdfbm1pID0gMjsKKwkJcmV0dXJuIE5PVElGWV9TVE9QOworCX0KKwogICAgICAgICAvKiBJZiB3ZSBhcmUgbm90IGV4cGVjdGluZyBhIHRpbWVvdXQsIGlnbm9yZSBpdC4gKi8KIAlpZiAoaXBtaV93YXRjaGRvZ19zdGF0ZSA9PSBXRE9HX1RJTUVPVVRfTk9ORSkKLQkJcmV0dXJuIE5PVElGWV9ET05FOworCQlyZXR1cm4gTk9USUZZX09LOworCisJaWYgKHByZWFjdGlvbl92YWwgIT0gV0RPR19QUkVUSU1FT1VUX05NSSkKKwkJcmV0dXJuIE5PVElGWV9PSzsKIAogCS8qIElmIG5vIG9uZSBlbHNlIGhhbmRsZWQgdGhlIE5NSSwgd2UgYXNzdW1lIGl0IHdhcyB0aGUgSVBNSQogICAgICAgICAgICB3YXRjaGRvZy4gKi8KLQlpZiAoKCFoYW5kbGVkKSAmJiAocHJlb3BfdmFsID09IFdET0dfUFJFT1BfUEFOSUMpKSB7CisJaWYgKHByZW9wX3ZhbCA9PSBXRE9HX1BSRU9QX1BBTklDKSB7CiAJCS8qIE9uIHNvbWUgbWFjaGluZXMsIHRoZSBoZWFydGJlYXQgd2lsbCBnaXZlCiAJCSAgIGFuIGVycm9yIGFuZCBub3Qgd29yayB1bmxlc3Mgd2UgcmUtZW5hYmxlCiAJCSAgIHRoZSB0aW1lci4gICBTbyBkbyBzby4gKi8KQEAgLTk4NSwxOCArMTA2OCwxMiBAQAogCQkJcGFuaWMoUEZYICJwcmUtdGltZW91dCIpOwogCX0KIAotCXJldHVybiBOT1RJRllfRE9ORTsKKwlyZXR1cm4gTk9USUZZX1NUT1A7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm1pX2hhbmRsZXIgaXBtaV9ubWlfaGFuZGxlciA9Ci17Ci0JLmxpbmsgICAgID0gTElTVF9IRUFEX0lOSVQoaXBtaV9ubWlfaGFuZGxlci5saW5rKSwKLQkuZGV2X25hbWUgPSAiaXBtaV93YXRjaGRvZyIsCi0JLmRldl9pZCAgID0gTlVMTCwKLQkuaGFuZGxlciAgPSBpcG1pX25taSwKLQkucHJpb3JpdHkgPSAwLCAvKiBDYWxsIHVzIGxhc3QuICovCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlwbWlfbm1pX2hhbmRsZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBpcG1pX25taQogfTsKLWludCBubWlfaGFuZGxlcl9yZWdpc3RlcmVkOwogI2VuZGlmCiAKIHN0YXRpYyBpbnQgd2RvZ19yZWJvb3RfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCkBAIC0xMDA5LDcgKzEwODYsNyBAQAogCQkvKiBNYWtlIHN1cmUgd2Ugb25seSBkbyB0aGlzIG9uY2UuICovCiAJCXJlYm9vdF9ldmVudF9oYW5kbGVkID0gMTsKIAotCQlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKSB7CisJCWlmIChjb2RlID09IFNZU19QT1dFUl9PRkYgfHwgY29kZSA9PSBTWVNfSEFMVCkgewogCQkJLyogRGlzYWJsZSB0aGUgV0RUIGlmIHdlIGFyZSBzaHV0dGluZyBkb3duLiAqLwogCQkJaXBtaV93YXRjaGRvZ19zdGF0ZSA9IFdET0dfVElNRU9VVF9OT05FOwogCQkJcGFuaWNfaGFsdF9pcG1pX3NldF90aW1lb3V0KCk7CkBAIC0xMTEzLDcgKzExOTAsNyBAQAogCQlwcmVhY3Rpb25fdmFsID0gV0RPR19QUkVUSU1FT1VUX05PTkU7CiAJZWxzZSBpZiAoc3RyY21wKGludmFsLCAicHJlX3NtaSIpID09IDApCiAJCXByZWFjdGlvbl92YWwgPSBXRE9HX1BSRVRJTUVPVVRfU01JOwotI2lmZGVmIEhBVkVfTk1JX0hBTkRMRVIKKyNpZmRlZiBIQVZFX0RJRV9OTUkKIAllbHNlIGlmIChzdHJjbXAoaW52YWwsICJwcmVfbm1pIikgPT0gMCkKIAkJcHJlYWN0aW9uX3ZhbCA9IFdET0dfUFJFVElNRU9VVF9OTUk7CiAjZW5kaWYKQEAgLTExNDcsNyArMTIyNCw3IEBACiAKIHN0YXRpYyB2b2lkIGNoZWNrX3Bhcm1zKHZvaWQpCiB7Ci0jaWZkZWYgSEFWRV9OTUlfSEFORExFUgorI2lmZGVmIEhBVkVfRElFX05NSQogCWludCBkb19ubWkgPSAwOwogCWludCBydjsKIApAQCAtMTE2MCwyMCArMTIzNyw5IEBACiAJCQlwcmVvcF9vcCgicHJlb3Bfbm9uZSIsIE5VTEwpOwogCQkJZG9fbm1pID0gMDsKIAkJfQotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCQlpZiAobm1pX3dhdGNoZG9nID09IE5NSV9JT19BUElDKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAibm1pX3dhdGNoZG9nIGlzIHNldCB0byBJTyBBUElDIgotCQkJICAgICAgICIgbW9kZSAodmFsdWUgaXMgJWQpLCB0aGF0IGlzIGluY29tcGF0aWJsZSIKLQkJCSAgICAgICAiIHdpdGggdXNpbmcgTk1JIGluIHRoZSBJUE1JIHdhdGNoZG9nLiIKLQkJCSAgICAgICAiIERpc2FibGluZyBJUE1JIG5taSBwcmV0aW1lb3V0LlxuIiwKLQkJCSAgICAgICBubWlfd2F0Y2hkb2cpOwotCQkJcHJlYWN0aW9uX3ZhbCA9IFdET0dfUFJFVElNRU9VVF9OT05FOwotCQkJZG9fbm1pID0gMDsKLQkJfQotI2VuZGlmCiAJfQogCWlmIChkb19ubWkgJiYgIW5taV9oYW5kbGVyX3JlZ2lzdGVyZWQpIHsKLQkJcnYgPSByZXF1ZXN0X25taSgmaXBtaV9ubWlfaGFuZGxlcik7CisJCXJ2ID0gcmVnaXN0ZXJfZGllX25vdGlmaWVyKCZpcG1pX25taV9oYW5kbGVyKTsKIAkJaWYgKHJ2KSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAogCQkJICAgICAgICJDYW4ndCByZWdpc3RlciBubWkgaGFuZGxlclxuIik7CkBAIC0xMTgxLDcgKzEyNDcsNyBAQAogCQl9IGVsc2UKIAkJCW5taV9oYW5kbGVyX3JlZ2lzdGVyZWQgPSAxOwogCX0gZWxzZSBpZiAoIWRvX25taSAmJiBubWlfaGFuZGxlcl9yZWdpc3RlcmVkKSB7Ci0JCXJlbGVhc2Vfbm1pKCZpcG1pX25taV9oYW5kbGVyKTsKKwkJdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmlwbWlfbm1pX2hhbmRsZXIpOwogCQlubWlfaGFuZGxlcl9yZWdpc3RlcmVkID0gMDsKIAl9CiAjZW5kaWYKQEAgLTEyMTcsOSArMTI4Myw5IEBACiAKIAlydiA9IGlwbWlfc21pX3dhdGNoZXJfcmVnaXN0ZXIoJnNtaV93YXRjaGVyKTsKIAlpZiAocnYpIHsKLSNpZmRlZiBIQVZFX05NSV9IQU5ETEVSCi0JCWlmIChwcmVhY3Rpb25fdmFsID09IFdET0dfUFJFVElNRU9VVF9OTUkpCi0JCQlyZWxlYXNlX25taSgmaXBtaV9ubWlfaGFuZGxlcik7CisjaWZkZWYgSEFWRV9ESUVfTk1JCisJCWlmIChubWlfaGFuZGxlcl9yZWdpc3RlcmVkKQorCQkJdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoJmlwbWlfbm1pX2hhbmRsZXIpOwogI2VuZGlmCiAJCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LAogCQkJCQkJICZ3ZG9nX3BhbmljX25vdGlmaWVyKTsKQEAgLTEyMzgsOSArMTMwNCw5IEBACiAJaXBtaV9zbWlfd2F0Y2hlcl91bnJlZ2lzdGVyKCZzbWlfd2F0Y2hlcik7CiAJaXBtaV91bnJlZ2lzdGVyX3dhdGNoZG9nKHdhdGNoZG9nX2lmbnVtKTsKIAotI2lmZGVmIEhBVkVfTk1JX0hBTkRMRVIKKyNpZmRlZiBIQVZFX0RJRV9OTUkKIAlpZiAobm1pX2hhbmRsZXJfcmVnaXN0ZXJlZCkKLQkJcmVsZWFzZV9ubWkoJmlwbWlfbm1pX2hhbmRsZXIpOworCQl1bnJlZ2lzdGVyX2RpZV9ub3RpZmllcigmaXBtaV9ubWlfaGFuZGxlcik7CiAjZW5kaWYKIAogCWF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZwYW5pY19ub3RpZmllcl9saXN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IDc3YTdhNGEuLjg1ZDU5NmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTE1MjksNyArMTUyOSw3IEBACiAJcG9ydGNvdW50ID0gaW53KGJhc2UgKyAweDIpOwogCWlmICghaW53KGJhc2UgKyAweGUpICYgMHgxIHx8IChwb3J0Y291bnQgIT0gMCAmJiBwb3J0Y291bnQgIT0gNCAmJgogCQkJCXBvcnRjb3VudCAhPSA4ICYmIHBvcnRjb3VudCAhPSAxNikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVNJTG9hZDpQQ0kgQ2FyZCVkIHJlc2V0IGZhaWx1cmUuIiwKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiSVNJTG9hZDpQQ0kgQ2FyZCVkIHJlc2V0IGZhaWx1cmUuXG4iLAogCQkJY2FyZCArIDEpOwogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVuZDsKQEAgLTE2MjIsNyArMTYyMiw5IEBACiAKIAkJaWYgKChzdGF0dXMgPSBpbncoYmFzZSArIDB4NCkpICE9IDApIHsKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJDYXJkJWQgcmVqZWN0ZWQgbG9hZCBoZWFkZXI6XG4iCi0JCQkJIkFkZHJlc3M6MHgleFxuQ291bnQ6MHgleFxuU3RhdHVzOjB4JXhcbiIsCisJCQkJS0VSTl9XQVJOSU5HICJBZGRyZXNzOjB4JXhcbiIKKwkJCQlLRVJOX1dBUk5JTkcgIkNvdW50OjB4JXhcbiIKKwkJCQlLRVJOX1dBUk5JTkcgIlN0YXR1czoweCV4XG4iLAogCQkJCWluZGV4ICsgMSwgZnJhbWUtPmFkZHIsIGZyYW1lLT5jb3VudCwgc3RhdHVzKTsKIAkJCWdvdG8gZXJycmVsZnc7CiAJCX0KQEAgLTE2NjYsNyArMTY2OCw5IEBACiAKIAkJaWYgKChzdGF0dXMgPSBpbncoYmFzZSArIDB4NCkpICE9IDApIHsKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICJDYXJkJWQgcmVqZWN0ZWQgdmVyaWZ5IGhlYWRlcjpcbiIKLQkJCQkiQWRkcmVzczoweCV4XG5Db3VudDoweCV4XG5TdGF0dXM6IDB4JXhcbiIsCisJCQkJS0VSTl9XQVJOSU5HICJBZGRyZXNzOjB4JXhcbiIKKwkJCQlLRVJOX1dBUk5JTkcgIkNvdW50OjB4JXhcbiIKKwkJCQlLRVJOX1dBUk5JTkcgIlN0YXR1czogMHgleFxuIiwKIAkJCQlpbmRleCArIDEsIGZyYW1lLT5hZGRyLCBmcmFtZS0+Y291bnQsIHN0YXR1cyk7CiAJCQlnb3RvIGVycnJlbGZ3OwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCmluZGV4IDIxMjI3NmEuLmZjNTRkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKIGV4dGVybiB2b2lkIGN0cmxfYWx0X2RlbCh2b2lkKTsKIApAQCAtODEsNyArODIsOCBAQAogdHlwZWRlZiB2b2lkIChrX2hhbmRsZXJfZm4pKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgY2hhciB2YWx1ZSwKIAkJCSAgICBjaGFyIHVwX2ZsYWcpOwogc3RhdGljIGtfaGFuZGxlcl9mbiBLX0hBTkRMRVJTOwotc3RhdGljIGtfaGFuZGxlcl9mbiAqa19oYW5kbGVyWzE2XSA9IHsgS19IQU5ETEVSUyB9Owora19oYW5kbGVyX2ZuICprX2hhbmRsZXJbMTZdID0geyBLX0hBTkRMRVJTIH07CitFWFBPUlRfU1lNQk9MX0dQTChrX2hhbmRsZXIpOwogCiAjZGVmaW5lIEZOX0hBTkRMRVJTXAogCWZuX251bGwsCWZuX2VudGVyLAlmbl9zaG93X3B0cmVncywJZm5fc2hvd19tZW0sXApAQCAtMTI3LDcgKzEyOSw3IEBACiAgKi8KIAogc3RhdGljIHN0cnVjdCBpbnB1dF9oYW5kbGVyIGtiZF9oYW5kbGVyOwotc3RhdGljIHVuc2lnbmVkIGxvbmcga2V5X2Rvd25bTkJJVFMoS0VZX01BWCldOwkJLyoga2V5Ym9hcmQga2V5IGJpdG1hcCAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcga2V5X2Rvd25bQklUU19UT19MT05HUyhLRVlfQ05UKV07CS8qIGtleWJvYXJkIGtleSBiaXRtYXAgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHNoaWZ0X2Rvd25bTlJfU0hJRlRdOwkJLyogc2hpZnQgc3RhdGUgY291bnRlcnMuLiAqLwogc3RhdGljIGludCBkZWFkX2tleV9uZXh0Owogc3RhdGljIGludCBucGFkY2ggPSAtMTsJCQkJCS8qIC0xIG9yIG51bWJlciBhc3NlbWJsZWQgb24gcGFkICovCkBAIC0xNjAsNiArMTYyLDIzIEBACiBzdGF0aWMgaW50IHN5c3JxX2FsdDsKIAogLyoKKyAqIE5vdGlmaWVyIGxpc3QgZm9yIGNvbnNvbGUga2V5Ym9hcmQgZXZlbnRzCisgKi8KK3N0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRChrZXlib2FyZF9ub3RpZmllcl9saXN0KTsKKworaW50IHJlZ2lzdGVyX2tleWJvYXJkX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcigma2V5Ym9hcmRfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfa2V5Ym9hcmRfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl9rZXlib2FyZF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigma2V5Ym9hcmRfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9rZXlib2FyZF9ub3RpZmllcik7CisKKy8qCiAgKiBUcmFuc2xhdGlvbiBvZiBzY2FuY29kZXMgdG8ga2V5Y29kZXMuIFdlIHNldCB0aGVtIG9uIG9ubHkgdGhlIGZpcnN0CiAgKiBrZXlib2FyZCBpbiB0aGUgbGlzdCB0aGF0IGFjY2VwdHMgdGhlIHNjYW5jb2RlIGFuZCBrZXljb2RlLgogICogRXhwbGFuYXRpb24gZm9yIG5vdCBjaG9vc2luZyB0aGUgZmlyc3QgYXR0YWNoZWQga2V5Ym9hcmQgYW55bW9yZToKQEAgLTExMzAsNiArMTE0OSw3IEBACiAJdW5zaWduZWQgY2hhciB0eXBlLCByYXdfbW9kZTsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCWludCBzaGlmdF9maW5hbDsKKwlzdHJ1Y3Qga2V5Ym9hcmRfbm90aWZpZXJfcGFyYW0gcGFyYW0gPSB7IC52YyA9IHZjLCAudmFsdWUgPSBrZXljb2RlLCAuZG93biA9IGRvd24gfTsKIAogCXR0eSA9IHZjLT52Y190dHk7CiAKQEAgLTEyMTcsMTAgKzEyMzcsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAotCXNoaWZ0X2ZpbmFsID0gKHNoaWZ0X3N0YXRlIHwga2JkLT5zbG9ja3N0YXRlKSBeIGtiZC0+bG9ja3N0YXRlOworCXBhcmFtLnNoaWZ0ID0gc2hpZnRfZmluYWwgPSAoc2hpZnRfc3RhdGUgfCBrYmQtPnNsb2Nrc3RhdGUpIF4ga2JkLT5sb2Nrc3RhdGU7CiAJa2V5X21hcCA9IGtleV9tYXBzW3NoaWZ0X2ZpbmFsXTsKIAotCWlmICgha2V5X21hcCkgeworCWlmIChhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigma2V5Ym9hcmRfbm90aWZpZXJfbGlzdCwgS0JEX0tFWUNPREUsICZwYXJhbSkgPT0gTk9USUZZX1NUT1AgfHwgIWtleV9tYXApIHsKKwkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmtleWJvYXJkX25vdGlmaWVyX2xpc3QsIEtCRF9VTkJPVU5EX0tFWUNPREUsICZwYXJhbSk7CiAJCWNvbXB1dGVfc2hpZnRzdGF0ZSgpOwogCQlrYmQtPnNsb2Nrc3RhdGUgPSAwOwogCQlyZXR1cm47CkBAIC0xMjM3LDYgKzEyNTgsOSBAQAogCXR5cGUgPSBLVFlQKGtleXN5bSk7CiAKIAlpZiAodHlwZSA8IDB4ZjApIHsKKwkJcGFyYW0udmFsdWUgPSBrZXlzeW07CisJCWlmIChhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigma2V5Ym9hcmRfbm90aWZpZXJfbGlzdCwgS0JEX1VOSUNPREUsICZwYXJhbSkgPT0gTk9USUZZX1NUT1ApCisJCQlyZXR1cm47CiAJCWlmIChkb3duICYmICFyYXdfbW9kZSkKIAkJCXRvX3V0ZjgodmMsIGtleXN5bSk7CiAJCXJldHVybjsKQEAgLTEyNDQsOSArMTI2OCw2IEBACiAKIAl0eXBlIC09IDB4ZjA7CiAKLQlpZiAocmF3X21vZGUgJiYgdHlwZSAhPSBLVF9TUEVDICYmIHR5cGUgIT0gS1RfU0hJRlQpCi0JCXJldHVybjsKLQogCWlmICh0eXBlID09IEtUX0xFVFRFUikgewogCQl0eXBlID0gS1RfTEFUSU47CiAJCWlmICh2Y19rYmRfbGVkKGtiZCwgVkNfQ0FQU0xPQ0spKSB7CkBAIC0xMjU1LDkgKzEyNzYsMTggQEAKIAkJCQlrZXlzeW0gPSBrZXlfbWFwW2tleWNvZGVdOwogCQl9CiAJfQorCXBhcmFtLnZhbHVlID0ga2V5c3ltOworCisJaWYgKGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZrZXlib2FyZF9ub3RpZmllcl9saXN0LCBLQkRfS0VZU1lNLCAmcGFyYW0pID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisKKwlpZiAocmF3X21vZGUgJiYgdHlwZSAhPSBLVF9TUEVDICYmIHR5cGUgIT0gS1RfU0hJRlQpCisJCXJldHVybjsKIAogCSgqa19oYW5kbGVyW3R5cGVdKSh2Yywga2V5c3ltICYgMHhmZiwgIWRvd24pOwogCisJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmtleWJvYXJkX25vdGlmaWVyX2xpc3QsIEtCRF9QT1NUX0tFWVNZTSwgJnBhcmFtKTsKKwogCWlmICh0eXBlICE9IEtUX1NMT0NLKQogCQlrYmQtPnNsb2Nrc3RhdGUgPSAwOwogfQpAQCAtMTM0NywxMiArMTM3NywxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQga2JkX2lkc1tdID0gewogCXsKICAgICAgICAgICAgICAgICAuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQsCi0gICAgICAgICAgICAgICAgLmV2Yml0ID0geyBCSVQoRVZfS0VZKSB9LAorICAgICAgICAgICAgICAgIC5ldmJpdCA9IHsgQklUX01BU0soRVZfS0VZKSB9LAogICAgICAgICB9LAogCiAJewogICAgICAgICAgICAgICAgIC5mbGFncyA9IElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCwKLSAgICAgICAgICAgICAgICAuZXZiaXQgPSB7IEJJVChFVl9TTkQpIH0sCisgICAgICAgICAgICAgICAgLmV2Yml0ID0geyBCSVRfTUFTSyhFVl9TTkQpIH0sCiAgICAgICAgIH0sCiAKIAl7IH0sICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCBlZDc2ZjBhLi4yZmMyNTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW94YS5jCisrKyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMTQyLDcgKzE0Myw3IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgY2ZsYWc7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwotCXdhaXRfcXVldWVfaGVhZF90IGNsb3NlX3dhaXQ7CisJc3RydWN0IGNvbXBsZXRpb24gY2xvc2Vfd2FpdDsKIAogCXN0cnVjdCB0aW1lcl9saXN0IGVtcHR5VGltZXI7CiAKQEAgLTE2Niw3ICsxNjcsNiBAQAogCiAjZGVmaW5lIFdBS0VVUF9DSEFSUwkJMjU2CiAKLXN0YXRpYyBpbnQgdmVyYm9zZSA9IDA7CiBzdGF0aWMgaW50IHR0eW1ham9yID0gTU9YQU1BSk9SOwogLyogVmFyaWFibGVzIGZvciBpbnNtb2QgKi8KICNpZmRlZiBNT0RVTEUKQEAgLTE4NCw3ICsxODQsNiBAQAogbW9kdWxlX3BhcmFtX2FycmF5KG51bXBvcnRzLCBpbnQsIE5VTEwsIDApOwogI2VuZGlmCiBtb2R1bGVfcGFyYW0odHR5bWFqb3IsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0odmVyYm9zZSwgYm9vbCwgMDY0NCk7CiAKIC8qCiAgKiBzdGF0aWMgZnVuY3Rpb25zOgpAQCAtMjA4LDEzICsyMDcsMTMgQEAKIHN0YXRpYyBpbnQgbW94YV90aW9jbXNldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpOwogc3RhdGljIHZvaWQgbW94YV9wb2xsKHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIHZvaWQgc2V0X3R0eV9wYXJhbShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKLXN0YXRpYyBpbnQgYmxvY2tfdGlsbF9yZWFkeShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBzdHJ1Y3QgZmlsZSAqLAorc3RhdGljIHZvaWQgbW94YV9zZXRfdHR5X3BhcmFtKHN0cnVjdCB0dHlfc3RydWN0ICopOworc3RhdGljIGludCBtb3hhX2Jsb2NrX3RpbGxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKIAkJCSAgICBzdHJ1Y3QgbW94YV9wb3J0ICopOwotc3RhdGljIHZvaWQgc2V0dXBfZW1wdHlfZXZlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKik7Ci1zdGF0aWMgdm9pZCBjaGVja194bWl0X2VtcHR5KHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIHZvaWQgc2h1dF9kb3duKHN0cnVjdCBtb3hhX3BvcnQgKik7Ci1zdGF0aWMgdm9pZCByZWNlaXZlX2RhdGEoc3RydWN0IG1veGFfcG9ydCAqKTsKK3N0YXRpYyB2b2lkIG1veGFfc2V0dXBfZW1wdHlfZXZlbnQoc3RydWN0IHR0eV9zdHJ1Y3QgKik7CitzdGF0aWMgdm9pZCBtb3hhX2NoZWNrX3htaXRfZW1wdHkodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgdm9pZCBtb3hhX3NodXRfZG93bihzdHJ1Y3QgbW94YV9wb3J0ICopOworc3RhdGljIHZvaWQgbW94YV9yZWNlaXZlX2RhdGEoc3RydWN0IG1veGFfcG9ydCAqKTsKIC8qCiAgKiBtb3hhIGJvYXJkIGludGVyZmFjZSBmdW5jdGlvbnM6CiAgKi8KQEAgLTI4Myw4ICsyODIsMTAgQEAKIAlpbnQgcmV0dmFsOwogCiAJcmV0dmFsID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKHJldHZhbCkKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGVuYWJsZSBwY2kgZGV2aWNlXG4iKTsKIAkJZ290byBlcnI7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9CT0FSRFM7IGkrKykKIAkJaWYgKG1veGFfYm9hcmRzW2ldLmJhc2VtZW0gPT0gTlVMTCkKQEAgLTI5MiwxNiArMjkzLDE3IEBACiAKIAlyZXR2YWwgPSAtRU5PREVWOwogCWlmIChpID49IE1BWF9CT0FSRFMpIHsKLQkJaWYgKHZlcmJvc2UpCi0JCQlwcmludGsoIk1vcmUgdGhhbiAlZCBNT1hBIEludGVsbGlvIGZhbWlseSBib2FyZHMgIgorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAibW9yZSB0aGFuICV1IE1PWEEgSW50ZWxsaW8gZmFtaWx5IGJvYXJkcyAiCiAJCQkJImZvdW5kLiBCb2FyZCBpcyBpZ25vcmVkLlxuIiwgTUFYX0JPQVJEUyk7CiAJCWdvdG8gZXJyOwogCX0KIAogCWJvYXJkID0gJm1veGFfYm9hcmRzW2ldOwogCWJvYXJkLT5iYXNlbWVtID0gcGNpX2lvbWFwKHBkZXYsIDIsIDB4NDAwMCk7Ci0JaWYgKGJvYXJkLT5iYXNlbWVtID09IE5VTEwpCisJaWYgKGJvYXJkLT5iYXNlbWVtID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FuJ3QgcmVtYXAgaW8gc3BhY2UgMlxuIik7CiAJCWdvdG8gZXJyOworCX0KIAogCWJvYXJkLT5ib2FyZFR5cGUgPSBib2FyZF90eXBlOwogCXN3aXRjaCAoYm9hcmRfdHlwZSkgewpAQCAtMzQ3LDcgKzM0OSw4IEBACiAJaW50IGksIG51bUJvYXJkcywgcmV0dmFsID0gMDsKIAlzdHJ1Y3QgbW94YV9wb3J0ICpjaDsKIAotCXByaW50ayhLRVJOX0lORk8gIk1PWEEgSW50ZWxsaW8gZmFtaWx5IGRyaXZlciB2ZXJzaW9uICVzXG4iLCBNT1hBX1ZFUlNJT04pOworCXByaW50ayhLRVJOX0lORk8gIk1PWEEgSW50ZWxsaW8gZmFtaWx5IGRyaXZlciB2ZXJzaW9uICVzXG4iLAorCQkJTU9YQV9WRVJTSU9OKTsKIAltb3hhRHJpdmVyID0gYWxsb2NfdHR5X2RyaXZlcihNQVhfUE9SVFMgKyAxKTsKIAlpZiAoIW1veGFEcml2ZXIpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMzcyLDEzICszNzUsMTMgQEAKIAkJY2gtPmNsb3Npbmdfd2FpdCA9IDMwICogSFo7CiAJCWNoLT5jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBDTE9DQUwgfCBIVVBDTDsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmY2gtPm9wZW5fd2FpdCk7Ci0JCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNoLT5jbG9zZV93YWl0KTsKKwkJaW5pdF9jb21wbGV0aW9uKCZjaC0+Y2xvc2Vfd2FpdCk7CiAKLQkJc2V0dXBfdGltZXIoJmNoLT5lbXB0eVRpbWVyLCBjaGVja194bWl0X2VtcHR5LAorCQlzZXR1cF90aW1lcigmY2gtPmVtcHR5VGltZXIsIG1veGFfY2hlY2tfeG1pdF9lbXB0eSwKIAkJCQkodW5zaWduZWQgbG9uZyljaCk7CiAJfQogCi0JcHJpbnRrKCJUdHkgZGV2aWNlcyBtYWpvciBudW1iZXIgPSAlZFxuIiwgdHR5bWFqb3IpOworCXByX2RlYnVnKCJNb3hhIHR0eSBkZXZpY2VzIG1ham9yIG51bWJlciA9ICVkXG4iLCB0dHltYWpvcik7CiAKIAlpZiAodHR5X3JlZ2lzdGVyX2RyaXZlcihtb3hhRHJpdmVyKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IGluc3RhbGwgTU9YQSBTbWFydGlvIGZhbWlseSBkcml2ZXIgIVxuIik7CkBAIC00MDAsMTEgKzQwMywxMCBAQAogCQkJCW1veGFfYm9hcmRzW251bUJvYXJkc10ubnVtUG9ydHMgPSBtb3hhX2lzYV9ib2FyZHNbaV0ubnVtUG9ydHM7CiAJCQltb3hhX2JvYXJkc1tudW1Cb2FyZHNdLmJ1c1R5cGUgPSBNT1hBX0JVU19UWVBFX0lTQTsKIAkJCW1veGFfYm9hcmRzW251bUJvYXJkc10uYmFzZUFkZHIgPSBtb3hhX2lzYV9ib2FyZHNbaV0uYmFzZUFkZHI7Ci0JCQlpZiAodmVyYm9zZSkKLQkJCQlwcmludGsoIkJvYXJkICUyZDogJXMgYm9hcmQoYmFzZUFkZHI9JWx4KVxuIiwKLQkJCQkgICAgICAgbnVtQm9hcmRzICsgMSwKLQkJCQkgICAgICAgbW94YV9icmRuYW1lW21veGFfYm9hcmRzW251bUJvYXJkc10uYm9hcmRUeXBlIC0gMV0sCi0JCQkJICAgICAgIG1veGFfYm9hcmRzW251bUJvYXJkc10uYmFzZUFkZHIpOworCQkJcHJfZGVidWcoIk1veGEgYm9hcmQgJTJkOiAlcyBib2FyZChiYXNlQWRkcj0lbHgpXG4iLAorCQkJICAgICAgIG51bUJvYXJkcyArIDEsCisJCQkgICAgICAgbW94YV9icmRuYW1lW21veGFfYm9hcmRzW251bUJvYXJkc10uYm9hcmRUeXBlLTFdLAorCQkJICAgICAgIG1veGFfYm9hcmRzW251bUJvYXJkc10uYmFzZUFkZHIpOwogCQkJbnVtQm9hcmRzKys7CiAJCX0KIAl9CkBAIC00MTMsMTQgKzQxNSwxMyBAQAogCWZvciAoaSA9IDA7IGkgPCBNQVhfQk9BUkRTOyBpKyspIHsKIAkJaWYgKCh0eXBlW2ldID09IE1PWEFfQk9BUkRfQzIxOF9JU0EpIHx8CiAJCSAgICAodHlwZVtpXSA9PSBNT1hBX0JPQVJEX0MzMjBfSVNBKSkgewotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRrKCJCb2FyZCAlMmQ6ICVzIGJvYXJkKGJhc2VBZGRyPSVseClcbiIsCi0JCQkJICAgICAgIG51bUJvYXJkcyArIDEsCi0JCQkJICAgICAgIG1veGFfYnJkbmFtZVt0eXBlW2ldIC0gMV0sCi0JCQkJICAgICAgICh1bnNpZ25lZCBsb25nKSBiYXNlYWRkcltpXSk7CisJCQlwcl9kZWJ1ZygiTW94YSBib2FyZCAlMmQ6ICVzIGJvYXJkKGJhc2VBZGRyPSVseClcbiIsCisJCQkgICAgICAgbnVtQm9hcmRzICsgMSwgbW94YV9icmRuYW1lW3R5cGVbaV0gLSAxXSwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyliYXNlYWRkcltpXSk7CiAJCQlpZiAobnVtQm9hcmRzID49IE1BWF9CT0FSRFMpIHsKLQkJCQlpZiAodmVyYm9zZSkKLQkJCQkJcHJpbnRrKCJNb3JlIHRoYW4gJWQgTU9YQSBJbnRlbGxpbyBmYW1pbHkgYm9hcmRzIGZvdW5kLiBCb2FyZCBpcyBpZ25vcmVkLiIsIE1BWF9CT0FSRFMpOworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1vcmUgdGhhbiAlZCBNT1hBICIKKwkJCQkJIkludGVsbGlvIGZhbWlseSBib2FyZHMgZm91bmQuIEJvYXJkICIKKwkJCQkJImlzIGlnbm9yZWQuXG4iLCBNQVhfQk9BUkRTKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCW1veGFfYm9hcmRzW251bUJvYXJkc10uYm9hcmRUeXBlID0gdHlwZVtpXTsKQEAgLTQ1NiwxNiArNDU3LDE0IEBACiB7CiAJaW50IGk7CiAKLQlpZiAodmVyYm9zZSkKLQkJcHJpbnRrKCJVbmxvYWRpbmcgbW9kdWxlIG1veGEgLi4uXG4iKTsKLQogCWRlbF90aW1lcl9zeW5jKCZtb3hhVGltZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9QT1JUUzsgaSsrKQogCQlkZWxfdGltZXJfc3luYygmbW94YV9wb3J0c1tpXS5lbXB0eVRpbWVyKTsKIAogCWlmICh0dHlfdW5yZWdpc3Rlcl9kcml2ZXIobW94YURyaXZlcikpCi0JCXByaW50aygiQ291bGRuJ3QgdW5yZWdpc3RlciBNT1hBIEludGVsbGlvIGZhbWlseSBzZXJpYWwgZHJpdmVyXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCB1bnJlZ2lzdGVyIE1PWEEgSW50ZWxsaW8gZmFtaWx5ICIKKwkJCQkic2VyaWFsIGRyaXZlclxuIik7CiAJcHV0X3R0eV9kcml2ZXIobW94YURyaXZlcik7CiAKICNpZmRlZiBDT05GSUdfUENJCkBAIC00NzUsOSArNDc0LDYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX0JPQVJEUzsgaSsrKQogCQlpZiAobW94YV9ib2FyZHNbaV0uYmFzZW1lbSkKIAkJCWlvdW5tYXAobW94YV9ib2FyZHNbaV0uYmFzZW1lbSk7Ci0KLQlpZiAodmVyYm9zZSkKLQkJcHJpbnRrKCJEb25lXG4iKTsKIH0KIAogbW9kdWxlX2luaXQobW94YV9pbml0KTsKQEAgLTUwNCwxMiArNTAwLDEyIEBACiAJY2gtPnR0eSA9IHR0eTsKIAlpZiAoIShjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSkgewogCQljaC0+c3RhdHVzZmxhZ3MgPSAwOwotCQlzZXRfdHR5X3BhcmFtKHR0eSk7CisJCW1veGFfc2V0X3R0eV9wYXJhbSh0dHkpOwogCQlNb3hhUG9ydExpbmVDdHJsKGNoLT5wb3J0LCAxLCAxKTsKIAkJTW94YVBvcnRFbmFibGUoY2gtPnBvcnQpOwogCQljaC0+YXN5bmNmbGFncyB8PSBBU1lOQ19JTklUSUFMSVpFRDsKIAl9Ci0JcmV0dmFsID0gYmxvY2tfdGlsbF9yZWFkeSh0dHksIGZpbHAsIGNoKTsKKwlyZXR2YWwgPSBtb3hhX2Jsb2NrX3RpbGxfcmVhZHkodHR5LCBmaWxwLCBjaCk7CiAKIAltb3hhX3VudGhyb3R0bGUodHR5KTsKIApAQCAtNTMyLDkgKzUyOCw3IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKCFNb3hhUG9ydElzVmFsaWQocG9ydCkpIHsKLSNpZmRlZiBTRVJJQUxfREVCVUdfQ0xPU0UKLQkJcHJpbnRrKCJJbnZhbGlkIHBvcnRubyBpbiBtb3hhX2Nsb3NlXG4iKTsKLSNlbmRpZgorCQlwcl9kZWJ1ZygiSW52YWxpZCBwb3J0bm8gaW4gbW94YV9jbG9zZVxuIik7CiAJCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCQlyZXR1cm47CiAJfQpAQCAtNTQ3LDEzICs1NDEsMTMgQEAKIAljaCA9IChzdHJ1Y3QgbW94YV9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAlpZiAoKHR0eS0+Y291bnQgPT0gMSkgJiYgKGNoLT5jb3VudCAhPSAxKSkgewotCQlwcmludGsoIm1veGFfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudDsgdHR5LT5jb3VudCBpcyAxLCAiCi0JCSAgICAgICAiY2gtPmNvdW50IGlzICVkXG4iLCBjaC0+Y291bnQpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJtb3hhX2Nsb3NlOiBiYWQgc2VyaWFsIHBvcnQgY291bnQ7ICIKKwkJCSJ0dHktPmNvdW50IGlzIDEsIGNoLT5jb3VudCBpcyAlZFxuIiwgY2gtPmNvdW50KTsKIAkJY2gtPmNvdW50ID0gMTsKIAl9CiAJaWYgKC0tY2gtPmNvdW50IDwgMCkgewotCQlwcmludGsoIm1veGFfY2xvc2U6IGJhZCBzZXJpYWwgcG9ydCBjb3VudCwgZGV2aWNlPSVzXG4iLAotCQkgICAgICAgdHR5LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibW94YV9jbG9zZTogYmFkIHNlcmlhbCBwb3J0IGNvdW50LCAiCisJCQkiZGV2aWNlPSVzXG4iLCB0dHktPm5hbWUpOwogCQljaC0+Y291bnQgPSAwOwogCX0KIAlpZiAoY2gtPmNvdW50KSB7CkBAIC01NjMsMTEgKzU1NywxMSBAQAogCiAJY2gtPmNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCWlmIChjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0lOSVRJQUxJWkVEKSB7Ci0JCXNldHVwX2VtcHR5X2V2ZW50KHR0eSk7CisJCW1veGFfc2V0dXBfZW1wdHlfZXZlbnQodHR5KTsKIAkJdHR5X3dhaXRfdW50aWxfc2VudCh0dHksIDMwICogSFopOwkvKiAzMCBzZWNvbmRzIHRpbWVvdXQgKi8KIAkJZGVsX3RpbWVyX3N5bmMoJm1veGFfcG9ydHNbY2gtPnBvcnRdLmVtcHR5VGltZXIpOwogCX0KLQlzaHV0X2Rvd24oY2gpOworCW1veGFfc2h1dF9kb3duKGNoKTsKIAlNb3hhUG9ydEZsdXNoRGF0YShwb3J0LCAyKTsKIAogCWlmICh0dHktPmRyaXZlci0+Zmx1c2hfYnVmZmVyKQpAQCAtNTg0LDcgKzU3OCw3IEBACiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPm9wZW5fd2FpdCk7CiAJfQogCWNoLT5hc3luY2ZsYWdzICY9IH4oQVNZTkNfTk9STUFMX0FDVElWRSB8IEFTWU5DX0NMT1NJTkcpOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPmNsb3NlX3dhaXQpOworCWNvbXBsZXRlX2FsbCgmY2gtPmNsb3NlX3dhaXQpOwogfQogCiBzdGF0aWMgaW50IG1veGFfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKQEAgLTY1Myw3ICs2NDcsNyBAQAogCQkgKiBpbiB0dHlfaW9jdGwuYywgZXRjLgogCQkgKi8KIAkJaWYgKCEoY2gtPnN0YXR1c2ZsYWdzICYgRU1QVFlXQUlUKSkKLQkJCXNldHVwX2VtcHR5X2V2ZW50KHR0eSk7CisJCQltb3hhX3NldHVwX2VtcHR5X2V2ZW50KHR0eSk7CiAJfQogCXJldHVybiAoY2hhcnMpOwogfQpAQCAtNzUxLDcgKzc0NSw3IEBACiAJCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKIAkJaWYgKHJldHZhbCkKIAkJCXJldHVybiAocmV0dmFsKTsKLQkJc2V0dXBfZW1wdHlfZXZlbnQodHR5KTsKKwkJbW94YV9zZXR1cF9lbXB0eV9ldmVudCh0dHkpOwogCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7CiAJCWlmICghYXJnKQogCQkJTW94YVBvcnRTZW5kQnJlYWsoY2gtPnBvcnQsIDApOwpAQCAtNzYwLDcgKzc1NCw3IEBACiAJCXJldHZhbCA9IHR0eV9jaGVja19jaGFuZ2UodHR5KTsKIAkJaWYgKHJldHZhbCkKIAkJCXJldHVybiAocmV0dmFsKTsKLQkJc2V0dXBfZW1wdHlfZXZlbnQodHR5KTsKKwkJbW94YV9zZXR1cF9lbXB0eV9ldmVudCh0dHkpOwogCQl0dHlfd2FpdF91bnRpbF9zZW50KHR0eSwgMCk7CiAJCU1veGFQb3J0U2VuZEJyZWFrKGNoLT5wb3J0LCBhcmcpOwogCQlyZXR1cm4gKDApOwpAQCAtODA5LDcgKzgwMyw3IEBACiAKIAlpZiAoY2ggPT0gTlVMTCkKIAkJcmV0dXJuOwotCXNldF90dHlfcGFyYW0odHR5KTsKKwltb3hhX3NldF90dHlfcGFyYW0odHR5KTsKIAlpZiAoIShvbGRfdGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkgJiYKIAkgICAgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENMT0NBTCkpCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2gtPm9wZW5fd2FpdCk7CkBAIC04NDUsNyArODM5LDcgQEAKIAlzdHJ1Y3QgbW94YV9wb3J0ICpjaCA9IChzdHJ1Y3QgbW94YV9wb3J0ICopIHR0eS0+ZHJpdmVyX2RhdGE7CiAKIAltb3hhX2ZsdXNoX2J1ZmZlcih0dHkpOwotCXNodXRfZG93bihjaCk7CisJbW94YV9zaHV0X2Rvd24oY2gpOwogCWNoLT5ldmVudCA9IDA7CiAJY2gtPmNvdW50ID0gMDsKIAljaC0+YXN5bmNmbGFncyAmPSB+QVNZTkNfTk9STUFMX0FDVElWRTsKQEAgLTg3NSw3ICs4NjksNyBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCEoY2gtPnN0YXR1c2ZsYWdzICYgVEhST1RUTEUpICYmCiAJCQkgICAgKE1veGFQb3J0UnhRdWV1ZShjaC0+cG9ydCkgPiAwKSkKLQkJCQlyZWNlaXZlX2RhdGEoY2gpOworCQkJCW1veGFfcmVjZWl2ZV9kYXRhKGNoKTsKIAkJCWlmICgodHAgPSBjaC0+dHR5KSA9PSAwKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGNoLT5zdGF0dXNmbGFncyAmIExPV1dBSVQpIHsKQEAgLTkwOSw3ICs5MDMsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCBzZXRfdHR5X3BhcmFtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgdm9pZCBtb3hhX3NldF90dHlfcGFyYW0oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlyZWdpc3RlciBzdHJ1Y3Qga3Rlcm1pb3MgKnRzOwogCXN0cnVjdCBtb3hhX3BvcnQgKmNoOwpAQCAtOTM0LDcgKzkyOCw3IEBACiAJTW94YVBvcnRTZXRUZXJtaW8oY2gtPnBvcnQsIHRzLCB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpKTsKIH0KIAotc3RhdGljIGludCBibG9ja190aWxsX3JlYWR5KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBtb3hhX2Jsb2NrX3RpbGxfcmVhZHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgc3RydWN0IG1veGFfcG9ydCAqY2gpCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCxjdXJyZW50KTsKQEAgLTk0OCw3ICs5NDIsNyBAQAogCSAqLwogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApIHx8IChjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0NMT1NJTkcpKSB7CiAJCWlmIChjaC0+YXN5bmNmbGFncyAmIEFTWU5DX0NMT1NJTkcpCi0JCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZjaC0+Y2xvc2Vfd2FpdCk7CisJCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNoLT5jbG9zZV93YWl0KTsKICNpZmRlZiBTRVJJQUxfRE9fUkVTVEFSVAogCQlpZiAoY2gtPmFzeW5jZmxhZ3MgJiBBU1lOQ19IVVBfTk9USUZZKQogCQkJcmV0dXJuICgtRUFHQUlOKTsKQEAgLTk3MSwxMCArOTY1LDggQEAKIAkgKi8KIAlyZXR2YWwgPSAwOwogCWFkZF93YWl0X3F1ZXVlKCZjaC0+b3Blbl93YWl0LCAmd2FpdCk7Ci0jaWZkZWYgU0VSSUFMX0RFQlVHX09QRU4KLQlwcmludGsoImJsb2NrX3RpbF9yZWFkeSBiZWZvcmUgYmxvY2s6IHR0eXMlZCwgY291bnQgPSAlZFxuIiwKLQkgICAgICAgY2gtPmxpbmUsIGNoLT5jb3VudCk7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiYmxvY2tfdGlsX3JlYWR5IGJlZm9yZSBibG9jazogdHR5cyVkLCBjb3VudCA9ICVkXG4iLAorCQljaC0+cG9ydCwgY2gtPmNvdW50KTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbW94YV9sb2NrLCBmbGFncyk7CiAJaWYgKCF0dHlfaHVuZ191cF9wKGZpbHApKQogCQljaC0+Y291bnQtLTsKQEAgLTEwMTMsMTAgKzEwMDUsOCBAQAogCQljaC0+Y291bnQrKzsKIAljaC0+YmxvY2tlZF9vcGVuLS07CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW94YV9sb2NrLCBmbGFncyk7Ci0jaWZkZWYgU0VSSUFMX0RFQlVHX09QRU4KLQlwcmludGsoImJsb2NrX3RpbF9yZWFkeSBhZnRlciBibG9ja2luZzogdHR5cyVkLCBjb3VudCA9ICVkXG4iLAotCSAgICAgICBjaC0+bGluZSwgY2gtPmNvdW50KTsKLSNlbmRpZgorCXByX2RlYnVnKCJibG9ja190aWxfcmVhZHkgYWZ0ZXIgYmxvY2tpbmc6IHR0eXMlZCwgY291bnQgPSAlZFxuIiwKKwkJY2gtPnBvcnQsIGNoLT5jb3VudCk7CiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIChyZXR2YWwpOwogCS8qIEZJWE1FOiByZXZpZXcgdG8gc2VlIGlmIHdlIG5lZWQgdG8gdXNlIHNldF9iaXQgb24gdGhlc2UgKi8KQEAgLTEwMjQsNyArMTAxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX2VtcHR5X2V2ZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCitzdGF0aWMgdm9pZCBtb3hhX3NldHVwX2VtcHR5X2V2ZW50KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IG1veGFfcG9ydCAqY2ggPSB0dHktPmRyaXZlcl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMDM1LDI0ICsxMDI1LDI0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbW94YV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNoZWNrX3htaXRfZW1wdHkodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgbW94YV9jaGVja194bWl0X2VtcHR5KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbW94YV9wb3J0ICpjaDsKIAogCWNoID0gKHN0cnVjdCBtb3hhX3BvcnQgKikgZGF0YTsKLQlkZWxfdGltZXJfc3luYygmbW94YV9wb3J0c1tjaC0+cG9ydF0uZW1wdHlUaW1lcik7CiAJaWYgKGNoLT50dHkgJiYgKGNoLT5zdGF0dXNmbGFncyAmIEVNUFRZV0FJVCkpIHsKIAkJaWYgKE1veGFQb3J0VHhRdWV1ZShjaC0+cG9ydCkgPT0gMCkgewogCQkJY2gtPnN0YXR1c2ZsYWdzICY9IH5FTVBUWVdBSVQ7CiAJCQl0dHlfd2FrZXVwKGNoLT50dHkpOwogCQkJcmV0dXJuOwogCQl9Ci0JCW1vZF90aW1lcigmbW94YV9wb3J0c1tjaC0+cG9ydF0uZW1wdHlUaW1lciwgamlmZmllcyArIEhaKTsKKwkJbW9kX3RpbWVyKCZtb3hhX3BvcnRzW2NoLT5wb3J0XS5lbXB0eVRpbWVyLAorCQkJCXJvdW5kX2ppZmZpZXMoamlmZmllcyArIEhaKSk7CiAJfSBlbHNlCiAJCWNoLT5zdGF0dXNmbGFncyAmPSB+RU1QVFlXQUlUOwogfQogCi1zdGF0aWMgdm9pZCBzaHV0X2Rvd24oc3RydWN0IG1veGFfcG9ydCAqY2gpCitzdGF0aWMgdm9pZCBtb3hhX3NodXRfZG93bihzdHJ1Y3QgbW94YV9wb3J0ICpjaCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHA7CiAKQEAgLTEwNzIsNyArMTA2Miw3IEBACiAJY2gtPmFzeW5jZmxhZ3MgJj0gfkFTWU5DX0lOSVRJQUxJWkVEOwogfQogCi1zdGF0aWMgdm9pZCByZWNlaXZlX2RhdGEoc3RydWN0IG1veGFfcG9ydCAqY2gpCitzdGF0aWMgdm9pZCBtb3hhX3JlY2VpdmVfZGF0YShzdHJ1Y3QgbW94YV9wb3J0ICpjaCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHA7CiAJc3RydWN0IGt0ZXJtaW9zICp0czsKQEAgLTE0MDYsOCArMTM5Niw4IEBACiBzdGF0aWMgaW50IG1veGFGdW5jVG91dCA9IEhaIC8gMjsKIAogc3RhdGljIHZvaWQgbW94YWZ1bmModm9pZCBfX2lvbWVtICosIGludCwgdXNob3J0KTsKLXN0YXRpYyB2b2lkIHdhaXRfZmluaXNoKHZvaWQgX19pb21lbSAqKTsKLXN0YXRpYyB2b2lkIGxvd193YXRlcl9jaGVjayh2b2lkIF9faW9tZW0gKik7CitzdGF0aWMgdm9pZCBtb3hhX3dhaXRfZmluaXNoKHZvaWQgX19pb21lbSAqKTsKK3N0YXRpYyB2b2lkIG1veGFfbG93X3dhdGVyX2NoZWNrKHZvaWQgX19pb21lbSAqKTsKIHN0YXRpYyBpbnQgbW94YWxvYWRiaW9zKGludCwgdW5zaWduZWQgY2hhciBfX3VzZXIgKiwgaW50KTsKIHN0YXRpYyBpbnQgbW94YWZpbmRjYXJkKGludCk7CiBzdGF0aWMgaW50IG1veGFsb2FkMzIwYihpbnQsIHVuc2lnbmVkIGNoYXIgX191c2VyICosIGludCk7CkBAIC0xNDczLDcgKzE0NjMsNyBAQAogCW1veGFmdW5jKG9mc0FkZHIsIEZDX0ZsdXNoUXVldWUsIG1vZGUpOwogCWlmIChtb2RlICE9IDEpIHsKIAkJbW94YV9wb3J0c1twb3J0XS5sb3dDaGtGbGFnID0gMDsKLQkJbG93X3dhdGVyX2NoZWNrKG9mc0FkZHIpOworCQltb3hhX2xvd193YXRlcl9jaGVjayhvZnNBZGRyKTsKIAl9CiB9CiAKQEAgLTE2NTQsNyArMTY0NCw3IEBACiAJCQkJaWYgKG1veGFfcG9ydHNbcF0ubG93Q2hrRmxhZykgewogCQkJCQltb3hhX3BvcnRzW3BdLmxvd0Noa0ZsYWcgPSAwOwogCQkJCQlvZnNBZGRyID0gbW94YV9wb3J0c1twXS50YWJsZUFkZHI7Ci0JCQkJCWxvd193YXRlcl9jaGVjayhvZnNBZGRyKTsKKwkJCQkJbW94YV9sb3dfd2F0ZXJfY2hlY2sob2ZzQWRkcik7CiAJCQkJfQogCQkJfQogCQl9CkBAIC0yMDgxLDcgKzIwNzEsNyBAQAogCQl3cml0ZWIodGVybWlvLT5jX2NjW1ZTVEFSVF0sIG9mc0FkZHIgKyBGdW5jQXJnKTsKIAkJd3JpdGViKHRlcm1pby0+Y19jY1tWU1RPUF0sIG9mc0FkZHIgKyBGdW5jQXJnMSk7CiAJCXdyaXRlYihGQ19TZXRYb25Yb2ZmLCBvZnNBZGRyICsgRnVuY0NvZGUpOwotCQl3YWl0X2ZpbmlzaChvZnNBZGRyKTsKKwkJbW94YV93YWl0X2ZpbmlzaChvZnNBZGRyKTsKIAogCX0KIAlyZXR1cm4gKDApOwpAQCAtMjQ4MCwxMCArMjQ3MCwxMCBAQAogCiAJd3JpdGV3KGFyZywgb2ZzQWRkciArIEZ1bmNBcmcpOwogCXdyaXRldyhjbWQsIG9mc0FkZHIgKyBGdW5jQ29kZSk7Ci0Jd2FpdF9maW5pc2gob2ZzQWRkcik7CisJbW94YV93YWl0X2ZpbmlzaChvZnNBZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgd2FpdF9maW5pc2godm9pZCBfX2lvbWVtICpvZnNBZGRyKQorc3RhdGljIHZvaWQgbW94YV93YWl0X2ZpbmlzaCh2b2lkIF9faW9tZW0gKm9mc0FkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBpLCBqOwogCkBAIC0yNDk2LDcgKzI0ODYsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbG93X3dhdGVyX2NoZWNrKHZvaWQgX19pb21lbSAqb2ZzQWRkcikKK3N0YXRpYyB2b2lkIG1veGFfbG93X3dhdGVyX2NoZWNrKHZvaWQgX19pb21lbSAqb2ZzQWRkcikKIHsKIAlpbnQgbGVuOwogCXVzaG9ydCBycHRyLCB3cHRyLCBtYXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL214c2VyLmMgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwppbmRleCAyYWVlM2ZlLi5mZDBhYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwpAQCAtNTYsMTEgKzU2LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgIm14c2VyLmgiCkBAIC0zODMsNyArMzgzLDYgQEAKIAogLyogc3RhdGljIHZvaWQgICBteHNlcl9wb2xsKHVuc2lnbmVkIGxvbmcpOyAqLwogc3RhdGljIGludCBteHNlcl9nZXRfSVNBX2NvbmYoaW50LCBzdHJ1Y3QgbXhzZXJfaHdjb25mICopOwotc3RhdGljIGludCBteHNlcl9nZXRfUENJX2NvbmYoaW50LCBpbnQsIGludCwgc3RydWN0IG14c2VyX2h3Y29uZiAqKTsKIHN0YXRpYyB2b2lkIG14c2VyX2RvX3NvZnRpbnQoc3RydWN0IHdvcmtfc3RydWN0ICopOwogc3RhdGljIGludCBteHNlcl9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIHZvaWQgbXhzZXJfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKik7CkBAIC00MjIsNyArNDIxLDcgQEAKIHN0YXRpYyB2b2lkIG14c2VyX3N0YXJ0cngoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiBzdGF0aWMgdm9pZCBteHNlcl9zdG9wcngoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAKLQorI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbnQgQ2hlY2tJc01veGFNdXN0KGludCBpbykKIHsKIAl1OCBvbGRtY3IsIGh3aWQ7CkBAIC00NDUsNiArNDQ0LDcgQEAKIAl9CiAJcmV0dXJuIE1PWEFfT1RIRVJfVUFSVDsKIH0KKyNlbmRpZgogCiAvKiBhYm92ZSBpcyBtb2RpZmllZCBieSBWaWN0b3IgWXUuIDA4LTE1LTIwMDIgKi8KIApAQCAtMTkzOCwxNCArMTkzOCw2IEBACiAJCQkJaW5iKGluZm8tPmJhc2UgKyBVQVJUX01TUik7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQkvKiBhYm92ZSBhZGQgYnkgVmljdG9yIFl1LiAwOS0xMy0yMDAyICovCi0JCQkvKgotCQkJICAgaWYgKGluZm8tPnR0eS0+ZmxpcC5jb3VudCA8IFRUWV9GTElQQlVGX1NJWkUgLyA0KSB7Ci0JCQkgICBpbmZvLT5JRVIgfD0gTU9YQV9NVVNUX1JFQ1ZfSVNSOwotCQkJICAgb3V0YihpbmZvLT5JRVIsIGluZm8tPmJhc2UgKyBVQVJUX0lFUik7Ci0JCQkgICB9Ci0JCQkgKi8KLQogCiAJCQkvKiBtYXNrIGJ5IFZpY3RvciBZdS4gMDktMTMtMjAwMgogCQkJICAgaWYgKCAhaW5mby0+dHR5IHx8CkBAIC0yNTk5LDE5ICsyNTkxLDggQEAKIAkJaW5mby0+SUVSIHw9IFVBUlRfSUVSX01TSTsKIAkJaWYgKChpbmZvLT50eXBlID09IFBPUlRfMTY1NTBBKSB8fCAoaW5mby0+SXNNb3hhTXVzdENoaXBGbGFnKSkgewogCQkJaW5mby0+TUNSIHw9IFVBUlRfTUNSX0FGRTsKLQkJCS8qIHN0YXR1cyA9IG14c2VyX2dldF9tc3IoaW5mby0+YmFzZSwgMCwgaW5mby0+cG9ydCk7ICovCi0vKgotCXNhdmVfZmxhZ3MoZmxhZ3MpOwotCWNsaSgpOwotCXN0YXR1cyA9IGluYihiYXNlYWRkciArIFVBUlRfTVNSKTsKLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKLSovCi0JCQkvKiBteHNlcl9jaGVja19tb2RlbV9zdGF0dXMoaW5mbywgc3RhdHVzKTsgKi8KIAkJfSBlbHNlIHsKLQkJCS8qIHN0YXR1cyA9IG14c2VyX2dldF9tc3IoaW5mby0+YmFzZSwgMCwgaW5mby0+cG9ydCk7ICovCi0JCQkvKiBNWF9MT0NLKCZpbmZvLT5zbG9jayk7ICovCiAJCQlzdGF0dXMgPSBpbmIoaW5mby0+YmFzZSArIFVBUlRfTVNSKTsKLQkJCS8qIE1YX1VOTE9DSygmaW5mby0+c2xvY2spOyAqLwogCQkJaWYgKGluZm8tPnR0eS0+aHdfc3RvcHBlZCkgewogCQkJCWlmIChzdGF0dXMgJiBVQVJUX01TUl9DVFMpIHsKIAkJCQkJaW5mby0+dHR5LT5od19zdG9wcGVkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9teHNlcl9uZXcuYyBiL2RyaXZlcnMvY2hhci9teHNlcl9uZXcuYwppbmRleCA2YTU2MzkzLi4wODFjODRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXJfbmV3LmMKKysrIGIvZHJpdmVycy9jaGFyL214c2VyX25ldy5jCkBAIC0yLDcgKzIsNyBAQAogICogICAgICAgICAgbXhzZXIuYyAgLS0gTU9YQSBTbWFydGlvL0luZHVzdGlvIGZhbWlseSBtdWx0aXBvcnQgc2VyaWFsIGRyaXZlci4KICAqCiAgKiAgICAgIENvcHlyaWdodCAoQykgMTk5OS0yMDA2ICBNb3hhIFRlY2hub2xvZ2llcyAoc3VwcG9ydEBtb3hhLmNvbS50dykuCi0gKglDb3B5cmlnaHQgKEMpIDIwMDYgICAgICAgSmlyaSBTbGFieSA8amlyaXNsYWJ5QGdtYWlsLmNvbT4KKyAqCUNvcHlyaWdodCAoQykgMjAwNi0yMDA3ICBKaXJpIFNsYWJ5IDxqaXJpc2xhYnlAZ21haWwuY29tPgogICoKICAqICAgICAgVGhpcyBjb2RlIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIDEuOCBtb3hhIGRyaXZlciB3aGljaCBpcyBiYXNlZCBvbgogICoJTGludXggc2VyaWFsIGRyaXZlciwgd3JpdHRlbiBieSBMaW51cyBUb3J2YWxkcywgVGhlb2RvcmUgVCdzbyBhbmQKQEAgLTM5LDE2ICszOSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJteHNlcl9uZXcuaCIKIAotI2RlZmluZQlNWFNFUl9WRVJTSU9OCSIyLjAuMSIJCS8qIDEuOS4xNSAqLworI2RlZmluZQlNWFNFUl9WRVJTSU9OCSIyLjAuMiIJCS8qIDEuMTAgKi8KICNkZWZpbmUJTVhTRVJNQUpPUgkgMTc0CiAjZGVmaW5lCU1YU0VSQ1VNQUpPUgkgMTc1CiAKQEAgLTcyLDYgKzcyLDEyIEBACiAjZGVmaW5lIFVBUlRfTUNSX0FGRQkJMHgyMAogI2RlZmluZSBVQVJUX0xTUl9TUEVDSUFMCTB4MUUKIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTA4CTB4MTA4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTE0CTB4MTE0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NCMTM0SQkweDEzNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DUDEzOFUJMHgxMzgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUE9TMTA0VUwJMHgxMDQ0CisKIAogI2RlZmluZSBDMTY4X0FTSUNfSUQgICAgMQogI2RlZmluZSBDMTA0X0FTSUNfSUQgICAgMgpAQCAtMTA3LDcxICsxMTMsNjMgQEAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhzZXJfY2FyZGluZm8gbXhzZXJfY2FyZHNbXSA9IHsKLQl7IDgsICJDMTY4IHNlcmllcyIsIH0sCQkJLyogQzE2OC1JU0EgKi8KLQl7IDQsICJDMTA0IHNlcmllcyIsIH0sCQkJLyogQzEwNC1JU0EgKi8KLQl7IDQsICJDSS0xMDRKIHNlcmllcyIsIH0sCQkvKiBDSTEwNEogKi8KLQl7IDgsICJDMTY4SC9QQ0kgc2VyaWVzIiwgfSwJCS8qIEMxNjgtUENJICovCi0JeyA0LCAiQzEwNEgvUENJIHNlcmllcyIsIH0sCQkvKiBDMTA0LVBDSSAqLwotCXsgNCwgIkMxMDIgc2VyaWVzIiwgTVhTRVJfSEFTMiB9LAkvKiBDMTAyLUlTQSAqLwotCXsgNCwgIkNJLTEzMiBzZXJpZXMiLCBNWFNFUl9IQVMyIH0sCS8qIENJMTMyICovCi0JeyA0LCAiQ0ktMTM0IHNlcmllcyIsIH0sCQkvKiBDSTEzNCAqLwotCXsgMiwgIkNQLTEzMiBzZXJpZXMiLCB9LAkJLyogQ1AxMzIgKi8KLQl7IDQsICJDUC0xMTQgc2VyaWVzIiwgfSwJCS8qIENQMTE0ICovCi0JeyA0LCAiQ1QtMTE0IHNlcmllcyIsIH0sCQkvKiBDVDExNCAqLwotCXsgMiwgIkNQLTEwMiBzZXJpZXMiLCBNWFNFUl9ISUdIQkFVRCB9LAkvKiBDUDEwMiAqLwotCXsgNCwgIkNQLTEwNFUgc2VyaWVzIiwgfSwJCS8qIENQMTA0VSAqLwotCXsgOCwgIkNQLTE2OFUgc2VyaWVzIiwgfSwJCS8qIENQMTY4VSAqLwotCXsgMiwgIkNQLTEzMlUgc2VyaWVzIiwgfSwJCS8qIENQMTMyVSAqLwotCXsgNCwgIkNQLTEzNFUgc2VyaWVzIiwgfSwJCS8qIENQMTM0VSAqLwotCXsgNCwgIkNQLTEwNEpVIHNlcmllcyIsIH0sCQkvKiBDUDEwNEpVICovCisvKiAwKi8JeyA4LCAiQzE2OCBzZXJpZXMiLCB9LAorCXsgNCwgIkMxMDQgc2VyaWVzIiwgfSwKKwl7IDQsICJDSS0xMDRKIHNlcmllcyIsIH0sCisJeyA4LCAiQzE2OEgvUENJIHNlcmllcyIsIH0sCisJeyA0LCAiQzEwNEgvUENJIHNlcmllcyIsIH0sCisvKiA1Ki8JeyA0LCAiQzEwMiBzZXJpZXMiLCBNWFNFUl9IQVMyIH0sCS8qIEMxMDItSVNBICovCisJeyA0LCAiQ0ktMTMyIHNlcmllcyIsIE1YU0VSX0hBUzIgfSwKKwl7IDQsICJDSS0xMzQgc2VyaWVzIiwgfSwKKwl7IDIsICJDUC0xMzIgc2VyaWVzIiwgfSwKKwl7IDQsICJDUC0xMTQgc2VyaWVzIiwgfSwKKy8qMTAqLwl7IDQsICJDVC0xMTQgc2VyaWVzIiwgfSwKKwl7IDIsICJDUC0xMDIgc2VyaWVzIiwgTVhTRVJfSElHSEJBVUQgfSwKKwl7IDQsICJDUC0xMDRVIHNlcmllcyIsIH0sCisJeyA4LCAiQ1AtMTY4VSBzZXJpZXMiLCB9LAorCXsgMiwgIkNQLTEzMlUgc2VyaWVzIiwgfSwKKy8qMTUqLwl7IDQsICJDUC0xMzRVIHNlcmllcyIsIH0sCisJeyA0LCAiQ1AtMTA0SlUgc2VyaWVzIiwgfSwKIAl7IDgsICJNb3hhIFVDNzAwMCBTZXJpYWwiLCB9LAkJLyogUkM3MDAwICovCi0JeyA4LCAiQ1AtMTE4VSBzZXJpZXMiLCB9LAkJLyogQ1AxMThVICovCi0JeyAyLCAiQ1AtMTAyVUwgc2VyaWVzIiwgfSwJCS8qIENQMTAyVUwgKi8KLQl7IDIsICJDUC0xMDJVIHNlcmllcyIsIH0sCQkvKiBDUDEwMlUgKi8KLQl7IDgsICJDUC0xMThFTCBzZXJpZXMiLCB9LAkJLyogQ1AxMThFTCAqLwotCXsgOCwgIkNQLTE2OEVMIHNlcmllcyIsIH0sCQkvKiBDUDE2OEVMICovCi0JeyA0LCAiQ1AtMTA0RUwgc2VyaWVzIiwgfQkJLyogQ1AxMDRFTCAqLworCXsgOCwgIkNQLTExOFUgc2VyaWVzIiwgfSwKKwl7IDIsICJDUC0xMDJVTCBzZXJpZXMiLCB9LAorLyoyMCovCXsgMiwgIkNQLTEwMlUgc2VyaWVzIiwgfSwKKwl7IDgsICJDUC0xMThFTCBzZXJpZXMiLCB9LAorCXsgOCwgIkNQLTE2OEVMIHNlcmllcyIsIH0sCisJeyA0LCAiQ1AtMTA0RUwgc2VyaWVzIiwgfSwKKwl7IDgsICJDQi0xMDggc2VyaWVzIiwgfSwKKy8qMjUqLwl7IDQsICJDQi0xMTQgc2VyaWVzIiwgfSwKKwl7IDQsICJDQi0xMzRJIHNlcmllcyIsIH0sCisJeyA4LCAiQ1AtMTM4VSBzZXJpZXMiLCB9LAorCXsgNCwgIlBPUy0xMDRVTCBzZXJpZXMiLCB9CiB9OwogCiAvKiBkcml2ZXJfZGF0YSBjb3JyZXNwb25kIHRvIHRoZSBsaW5lcyBpbiB0aGUgc3RydWN0dXJlIGFib3ZlCiAgICBzZWUgYWxzbyBJU0EgcHJvYmUgZnVuY3Rpb24gYmVmb3JlIHlvdSBjaGFuZ2Ugc29tZXRoaW5nICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXhzZXJfcGNpYnJkc1tdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTY4KSwKLQkJLmRyaXZlcl9kYXRhID0gMyB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTA0KSwKLQkJLmRyaXZlcl9kYXRhID0gNCB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMiksCi0JCS5kcml2ZXJfZGF0YSA9IDggfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMTQpLAotCQkuZHJpdmVyX2RhdGEgPSA5IH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NUMTE0KSwKLQkJLmRyaXZlcl9kYXRhID0gMTAgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDIpLAotCQkuZHJpdmVyX2RhdGEgPSAxMSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNFUpLAotCQkuZHJpdmVyX2RhdGEgPSAxMiB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OFUpLAotCQkuZHJpdmVyX2RhdGEgPSAxMyB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMlUpLAotCQkuZHJpdmVyX2RhdGEgPSAxNCB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzNFUpLAotCQkuZHJpdmVyX2RhdGEgPSAxNSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNEpVKSwKLQkJLmRyaXZlcl9kYXRhID0gMTYgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfUkM3MDAwKSwKLQkJLmRyaXZlcl9kYXRhID0gMTcgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThVKSwKLQkJLmRyaXZlcl9kYXRhID0gMTggfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDJVTCksCi0JCS5kcml2ZXJfZGF0YSA9IDE5IH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTAyVSksCi0JCS5kcml2ZXJfZGF0YSA9IDIwIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTE4RUwpLAotCQkuZHJpdmVyX2RhdGEgPSAyMSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OEVMKSwKLQkJLmRyaXZlcl9kYXRhID0gMjIgfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRFTCksCi0JCS5kcml2ZXJfZGF0YSA9IDIzIH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQzE2OCksCS5kcml2ZXJfZGF0YSA9IDMgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTA0KSwJLmRyaXZlcl9kYXRhID0gNCB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTMyKSwJLmRyaXZlcl9kYXRhID0gOCB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTE0KSwJLmRyaXZlcl9kYXRhID0gOSB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NUMTE0KSwJLmRyaXZlcl9kYXRhID0gMTAgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMiksCS5kcml2ZXJfZGF0YSA9IDExIH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDRVKSwJLmRyaXZlcl9kYXRhID0gMTIgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OFUpLAkuZHJpdmVyX2RhdGEgPSAxMyB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTMyVSksCS5kcml2ZXJfZGF0YSA9IDE0IH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMzRVKSwJLmRyaXZlcl9kYXRhID0gMTUgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwNEpVKSwuZHJpdmVyX2RhdGEgPSAxNiB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX1JDNzAwMCksCS5kcml2ZXJfZGF0YSA9IDE3IH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThVKSwJLmRyaXZlcl9kYXRhID0gMTggfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMlVMKSwuZHJpdmVyX2RhdGEgPSAxOSB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTAyVSksCS5kcml2ZXJfZGF0YSA9IDIwIH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThFTCksLmRyaXZlcl9kYXRhID0gMjEgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDE2OEVMKSwuZHJpdmVyX2RhdGEgPSAyMiB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9NT1hBX0NQMTA0RUwpLC5kcml2ZXJfZGF0YSA9IDIzIH0sCisJeyBQQ0lfVkRFVklDRShNT1hBLCBQQ0lfREVWSUNFX0lEX0NCMTA4KSwJLmRyaXZlcl9kYXRhID0gMjQgfSwKKwl7IFBDSV9WREVWSUNFKE1PWEEsIFBDSV9ERVZJQ0VfSURfQ0IxMTQpLAkuZHJpdmVyX2RhdGEgPSAyNSB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9DQjEzNEkpLAkuZHJpdmVyX2RhdGEgPSAyNiB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9DUDEzOFUpLAkuZHJpdmVyX2RhdGEgPSAyNyB9LAorCXsgUENJX1ZERVZJQ0UoTU9YQSwgUENJX0RFVklDRV9JRF9QT1MxMDRVTCksCS5kcml2ZXJfZGF0YSA9IDI4IH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG14c2VyX3BjaWJyZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fdHR5LmMgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwppbmRleCAwMzgwNTY5Li41OTZjNzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwpAQCAtNDM3LDcgKzQzNyw3IEBACiAgKglAYzogY2hhcmFjdGVyIGlucHV0CiAgKglAdHR5OiB0ZXJtaW5hbCBkZXZpY2UKICAqCi0gKglQZXJmb3JtIGVyYXNlIGFuZCBuZWNjZXNzYXJ5IG91dHB1dCB3aGVuIGFuIGVyYXNlIGNoYXJhY3RlciBpcworICoJUGVyZm9ybSBlcmFzZSBhbmQgbmVjZXNzYXJ5IG91dHB1dCB3aGVuIGFuIGVyYXNlIGNoYXJhY3RlciBpcwogICoJcHJlc2VudCBpbiB0aGUgc3RyZWFtIGZyb20gdGhlIGRyaXZlciBsYXllci4gSGFuZGxlcyB0aGUgY29tcGxleGl0aWVzCiAgKglvZiBVVEYtOCBtdWx0aWJ5dGUgc3ltYm9scy4KICAqLwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAgKglAYzogY2hhcmFjdGVyCiAgKgogICoJUHJvY2VzcyBhIHBhcml0eSBlcnJvciBhbmQgcXVldWUgdGhlIHJpZ2h0IGRhdGEgdG8gaW5kaWNhdGUKLSAqCXRoZSBlcnJvciBjYXNlIGlmIG5lY2Nlc3NhcnkuIExvY2tpbmcgYXMgcGVyIG5fdHR5X3JlY2VpdmVfYnVmLgorICoJdGhlIGVycm9yIGNhc2UgaWYgbmVjZXNzYXJ5LiBMb2NraW5nIGFzIHBlciBuX3R0eV9yZWNlaXZlX2J1Zi4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIG5fdHR5X3JlY2VpdmVfcGFyaXR5X2Vycm9yKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wdHkuYyBiL2RyaXZlcnMvY2hhci9wdHkuYwppbmRleCA3M2RlNzcxLi43MDZmZjM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3B0eS5jCisrKyBiL2RyaXZlcnMvY2hhci9wdHkuYwpAQCAtMzE4LDcgKzMxOCw3IEBACiBzdGF0aWMgaW50IHB0eV9saW1pdF9taW4gPSAwOwogc3RhdGljIGludCBwdHlfbGltaXRfbWF4ID0gTlJfVU5JWDk4X1BUWV9NQVg7CiAKLWN0bF90YWJsZSBwdHlfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHB0eV90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gUFRZX01BWCwKIAkJLnByb2NuYW1lCT0gIm1heCIsCkBAIC0zNDAsNiArMzQwLDI3IEBACiAJfQogfTsKIAorc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgcHR5X2tlcm5fdGFibGVbXSA9IHsKKwl7CisJCS5jdGxfbmFtZQk9IEtFUk5fUFRZLAorCQkucHJvY25hbWUJPSAicHR5IiwKKwkJLm1vZGUJCT0gMDU1NSwKKwkJLmNoaWxkCQk9IHB0eV90YWJsZSwKKwl9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBwdHlfcm9vdF90YWJsZVtdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX0tFUk4sCisJCS5wcm9jbmFtZQk9ICJrZXJuZWwiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gcHR5X2tlcm5fdGFibGUsCisJfSwKKwl7fQorfTsKKworCiBzdGF0aWMgaW50IHB0eV91bml4OThfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC00MDQsNiArNDI1LDcgQEAKIAkJcGFuaWMoIkNvdWxkbid0IHJlZ2lzdGVyIFVuaXg5OCBwdHMgZHJpdmVyIik7CiAKIAlwdHlfdGFibGVbMV0uZGF0YSA9ICZwdG1fZHJpdmVyLT5yZWZjb3VudDsKKwlyZWdpc3Rlcl9zeXNjdGxfdGFibGUocHR5X3Jvb3RfdGFibGUpOwogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bml4OThfcHR5X2luaXQodm9pZCkgeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggYWYyNzRlNS4uMTc1NmIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAKIHZvaWQgYWRkX2ludGVycnVwdF9yYW5kb21uZXNzKGludCBpcnEpCiB7Ci0JaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV90aW1lcl9zdGF0ZVtpcnFdID09IDApCisJaWYgKGlycSA+PSBOUl9JUlFTIHx8IGlycV90aW1lcl9zdGF0ZVtpcnFdID09IE5VTEwpCiAJCXJldHVybjsKIAogCURFQlVHX0VOVCgiaXJxIGV2ZW50ICVkXG4iLCBpcnEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JvY2tldC5jIGIvZHJpdmVycy9jaGFyL3JvY2tldC5jCmluZGV4IDU2Y2JiYTcuLmQ4MzQxOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yb2NrZXQuYworKysgYi9kcml2ZXJzL2NoYXIvcm9ja2V0LmMKQEAgLTg0LDYgKzg0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNTQ4LDggKzU0OSw4IEBACiBzdGF0aWMgdm9pZCBycF9kb19wb2xsKHVuc2lnbmVkIGxvbmcgZHVtbXkpCiB7CiAJQ09OVFJPTExFUl90ICpjdGxwOwotCWludCBjdHJsLCBhaW9wLCBjaCwgbGluZSwgaTsKLQl1bnNpZ25lZCBpbnQgeG1pdG1hc2s7CisJaW50IGN0cmwsIGFpb3AsIGNoLCBsaW5lOworCXVuc2lnbmVkIGludCB4bWl0bWFzaywgaTsKIAl1bnNpZ25lZCBpbnQgQ3RsTWFzazsKIAl1bnNpZ25lZCBjaGFyIEFpb3BNYXNrOwogCVdvcmRfdCBiaXQ7CkBAIC01NjIsNyArNTYzLDcgQEAKIAkJLyogIEdldCBhIHB0ciB0byB0aGUgYm9hcmQncyBjb250cm9sIHN0cnVjdCAqLwogCQljdGxwID0gc0N0bE51bVRvQ3RsUHRyKGN0cmwpOwogCi0JCS8qICBHZXQgdGhlIGludGVydXB0IHN0YXR1cyBmcm9tIHRoZSBib2FyZCAqLworCQkvKiAgR2V0IHRoZSBpbnRlcnJ1cHQgc3RhdHVzIGZyb20gdGhlIGJvYXJkICovCiAjaWZkZWYgQ09ORklHX1BDSQogCQlpZiAoY3RscC0+QnVzVHlwZSA9PSBpc1BDSSkKIAkJCUN0bE1hc2sgPSBzUENJR2V0Q29udHJvbGxlckludFN0YXR1cyhjdGxwKTsKQEAgLTY1MCw3ICs2NTEsNyBAQAogCWluZm8tPmNsb3Npbmdfd2FpdCA9IDMwMDA7CiAJaW5mby0+Y2xvc2VfZGVsYXkgPSA1MDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpbmZvLT5vcGVuX3dhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmluZm8tPmNsb3NlX3dhaXQpOworCWluaXRfY29tcGxldGlvbigmaW5mby0+Y2xvc2Vfd2FpdCk7CiAJaW5mby0+ZmxhZ3MgJj0gflJPQ0tFVF9NT0RFX01BU0s7CiAJc3dpdGNoIChwYzEwNFtib2FyZF1bbGluZV0pIHsKIAljYXNlIDQyMjoKQEAgLTY5OSw4ICs3MDAsOCBAQAogCXNwaW5fbG9ja19pbml0KCZpbmZvLT5zbG9jayk7CiAJbXV0ZXhfaW5pdCgmaW5mby0+d3JpdGVfbXR4KTsKIAlycF90YWJsZVtsaW5lXSA9IGluZm87Ci0JaWYgKHBjaV9kZXYpCi0JCXR0eV9yZWdpc3Rlcl9kZXZpY2Uocm9ja2V0X2RyaXZlciwgbGluZSwgJnBjaV9kZXYtPmRldik7CisJdHR5X3JlZ2lzdGVyX2RldmljZShyb2NrZXRfZHJpdmVyLCBsaW5lLCBwY2lfZGV2ID8gJnBjaV9kZXYtPmRldiA6CisJCQlOVUxMKTsKIH0KIAogLyoKQEAgLTg3OCw3ICs4NzksOCBAQAogCWlmICh0dHlfaHVuZ191cF9wKGZpbHApKQogCQlyZXR1cm4gKChpbmZvLT5mbGFncyAmIFJPQ0tFVF9IVVBfTk9USUZZKSA/IC1FQUdBSU4gOiAtRVJFU1RBUlRTWVMpOwogCWlmIChpbmZvLT5mbGFncyAmIFJPQ0tFVF9DTE9TSU5HKSB7Ci0JCWludGVycnVwdGlibGVfc2xlZXBfb24oJmluZm8tPmNsb3NlX3dhaXQpOworCQlpZiAod2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KSkKKwkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJCXJldHVybiAoKGluZm8tPmZsYWdzICYgUk9DS0VUX0hVUF9OT1RJRlkpID8gLUVBR0FJTiA6IC1FUkVTVEFSVFNZUyk7CiAJfQogCkBAIC05ODMsOCArOTg1LDEwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJaWYgKGluZm8tPmZsYWdzICYgUk9DS0VUX0NMT1NJTkcpIHsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbigmaW5mby0+Y2xvc2Vfd2FpdCk7CisJCXJldHZhbCA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmaW5mby0+Y2xvc2Vfd2FpdCk7CiAJCWZyZWVfcGFnZShwYWdlKTsKKwkJaWYgKHJldHZhbCkKKwkJCXJldHVybiByZXR2YWw7CiAJCXJldHVybiAoKGluZm8tPmZsYWdzICYgUk9DS0VUX0hVUF9OT1RJRlkpID8gLUVBR0FJTiA6IC1FUkVTVEFSVFNZUyk7CiAJfQogCkBAIC0xMTc2LDcgKzExODAsNyBAQAogCX0KIAlpbmZvLT5mbGFncyAmPSB+KFJPQ0tFVF9JTklUSUFMSVpFRCB8IFJPQ0tFVF9DTE9TSU5HIHwgUk9DS0VUX05PUk1BTF9BQ1RJVkUpOwogCXR0eS0+Y2xvc2luZyA9IDA7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpbmZvLT5jbG9zZV93YWl0KTsKKwljb21wbGV0ZV9hbGwoJmluZm8tPmNsb3NlX3dhaXQpOwogCWF0b21pY19kZWMoJnJwX251bV9wb3J0c19vcGVuKTsKIAogI2lmZGVmIFJPQ0tFVF9ERUJVR19PUEVOCkBAIC0xODY5LDggKzE4NzMsNiBAQAogCWludCBmYXN0X2Nsb2NrID0gMDsKIAlpbnQgYWx0Q2hhblJpbmdJbmRpY2F0b3IgPSAwOwogCWludCBwb3J0c19wZXJfYWlvcCA9IDg7Ci0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgY2xhc3NfcmV2OwogCVdvcmRJT190IENvbmZpZ0lPID0gMDsKIAlCeXRlSU9fdCBVUENJUmluZ0luZCA9IDA7CiAKQEAgLTE4NzgsMTIgKzE4ODAsNiBAQAogCQlyZXR1cm4gMDsKIAogCXJja3RwdF9pb19hZGRyW2ldID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7Ci0JcmV0ID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKLQotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICBFcnJvciBkdXJpbmcgcmVnaXN0ZXJfUENJKCksIHVuYWJsZSB0byByZWFkIGNvbmZpZyBkd29yZCBcbiIpOwotCQlyZXR1cm4gMDsKLQl9CiAKIAlyY2t0cHRfdHlwZVtpXSA9IFJPQ0tFVF9UWVBFX05PUk1BTDsKIAlyb2NrZXRNb2RlbFtpXS5sb2Fkcm0yID0gMDsKQEAgLTIwMzcsOCArMjAzMyw5IEBACiAJCXBvcnRzX3Blcl9haW9wID0gNjsKIAkJc3RyID0gIjYtcG9ydCI7CiAKLQkJLyogIElmIGNsYXNzX3JldiBpcyAxLCB0aGUgcm9ja2V0bW9kZW0gZmxhc2ggbXVzdCBiZSBsb2FkZWQuICBJZiBpdCBpcyAyIGl0IGlzIGEgInNvY2tldGVkIiB2ZXJzaW9uLiAqLwotCQlpZiAoKGNsYXNzX3JldiAmIDB4RkYpID09IDEpIHsKKwkJLyogIElmIHJldmlzaW9uIGlzIDEsIHRoZSByb2NrZXRtb2RlbSBmbGFzaCBtdXN0IGJlIGxvYWRlZC4KKwkJICogIElmIGl0IGlzIDIgaXQgaXMgYSAic29ja2V0ZWQiIHZlcnNpb24uICovCisJCWlmIChkZXYtPnJldmlzaW9uID09IDEpIHsKIAkJCXJja3RwdF90eXBlW2ldID0gUk9DS0VUX1RZUEVfTU9ERU1JSTsKIAkJCXJvY2tldE1vZGVsW2ldLmxvYWRybTIgPSAxOwogCQl9IGVsc2UgewpAQCAtMjA1Myw3ICsyMDUwLDcgQEAKIAkJbWF4X251bV9haW9wcyA9IDE7CiAJCXBvcnRzX3Blcl9haW9wID0gNDsKIAkJc3RyID0gIjQtcG9ydCI7Ci0JCWlmICgoY2xhc3NfcmV2ICYgMHhGRikgPT0gMSkgeworCQlpZiAoZGV2LT5yZXZpc2lvbiA9PSAxKSB7CiAJCQlyY2t0cHRfdHlwZVtpXSA9IFJPQ0tFVF9UWVBFX01PREVNSUk7CiAJCQlyb2NrZXRNb2RlbFtpXS5sb2Fkcm0yID0gMTsKIAkJfSBlbHNlIHsKQEAgLTIzNjIsMjYgKzIzNTksMTQgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgcnBfaW5pdCh2b2lkKQogewotCWludCByZXR2YWwsIHBjaV9ib2FyZHNfZm91bmQsIGlzYV9ib2FyZHNfZm91bmQsIGk7CisJaW50IHJldCA9IC1FTk9NRU0sIHBjaV9ib2FyZHNfZm91bmQsIGlzYV9ib2FyZHNfZm91bmQsIGk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSb2NrZXRQb3J0IGRldmljZSBkcml2ZXIgbW9kdWxlLCB2ZXJzaW9uICVzLCAlc1xuIiwKIAkgICAgICAgUk9DS0VUX1ZFUlNJT04sIFJPQ0tFVF9EQVRFKTsKIAogCXJvY2tldF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE1BWF9SUF9QT1JUUyk7CiAJaWYgKCFyb2NrZXRfZHJpdmVyKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgYXJyYXkgb2YgcG9pbnRlcnMgdG8gb3VyIG93biBpbnRlcm5hbCBzdGF0ZQotCSAqIHN0cnVjdHVyZXMuCi0JICovCi0JbWVtc2V0KHJwX3RhYmxlLCAwLCBzaXplb2YgKHJwX3RhYmxlKSk7Ci0JbWVtc2V0KHhtaXRfZmxhZ3MsIDAsIHNpemVvZiAoeG1pdF9mbGFncykpOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9SUF9QT1JUUzsgaSsrKQotCQlsaW5lTnVtYmVyc1tpXSA9IDA7Ci0JbmV4dExpbmVOdW1iZXIgPSAwOwotCW1lbXNldChyb2NrZXRNb2RlbCwgMCwgc2l6ZW9mIChyb2NrZXRNb2RlbCkpOworCQlnb3RvIGVycjsKIAogCS8qCiAJICogIElmIGJvYXJkIDEgaXMgbm9uLXplcm8sIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBJU0EgY29uZmlndXJlZC4gIElmIGNvbnRyb2xsZXIgaXMgCkBAIC0yMzk2LDggKzIzODEsMTEgQEAKIAogCS8qICBJZiBhbiBJU0EgY2FyZCBpcyBjb25maWd1cmVkLCByZXNlcnZlIHRoZSA0IGJ5dGUgSU8gc3BhY2UgZm9yIHRoZSBNdWRiYWMgY29udHJvbGxlciAqLwogCWlmIChjb250cm9sbGVyICYmICghcmVxdWVzdF9yZWdpb24oY29udHJvbGxlciwgNCwgIkNvbXRyb2wgUm9ja2V0UG9ydCIpKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJVbmFibGUgdG8gcmVzZXJ2ZSBJTyByZWdpb24gZm9yIGZpcnN0IGNvbmZpZ3VyZWQgSVNBIFJvY2tldFBvcnQgY29udHJvbGxlciAweCVseC4gIERyaXZlciBleGl0aW5nIFxuIiwgY29udHJvbGxlcik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlc2VydmUgSU8gcmVnaW9uIGZvciBmaXJzdCAiCisJCQkiY29uZmlndXJlZCBJU0EgUm9ja2V0UG9ydCBjb250cm9sbGVyIDB4JWx4LiAgIgorCQkJIkRyaXZlciBleGl0aW5nXG4iLCBjb250cm9sbGVyKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVycl90dHk7CiAJfQogCiAJLyogIFN0b3JlIElTQSB2YXJpYWJsZSByZXRyaWV2ZWQgZnJvbSBjb21tYW5kIGxpbmUgb3IgLmNvbmYgZmlsZS4gKi8KQEAgLTI0MzQsMTUgKzI0MjIsMTQgQEAKIAlyb2NrZXRfZHJpdmVyLT5pbml0X3Rlcm1pb3MuY19pc3BlZWQgPSA5NjAwOwogCXJvY2tldF9kcml2ZXItPmluaXRfdGVybWlvcy5jX29zcGVlZCA9IDk2MDA7CiAjaWZkZWYgUk9DS0VUX1NPRlRfRkxPVwotCXJvY2tldF9kcml2ZXItPmZsYWdzIHw9IFRUWV9EUklWRVJfUkVBTF9SQVcgfCBUVFlfRFJJVkVSX0RZTkFNSUNfREVWOworCXJvY2tldF9kcml2ZXItPmZsYWdzIHw9IFRUWV9EUklWRVJfUkVBTF9SQVc7CiAjZW5kaWYKIAl0dHlfc2V0X29wZXJhdGlvbnMocm9ja2V0X2RyaXZlciwgJnJvY2tldF9vcHMpOwogCi0JcmV0dmFsID0gdHR5X3JlZ2lzdGVyX2RyaXZlcihyb2NrZXRfZHJpdmVyKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZG4ndCBpbnN0YWxsIHR0eSBSb2NrZXRQb3J0IGRyaXZlciAoZXJyb3IgJWQpXG4iLCAtcmV0dmFsKTsKLQkJcHV0X3R0eV9kcml2ZXIocm9ja2V0X2RyaXZlcik7Ci0JCXJldHVybiAtMTsKKwlyZXQgPSB0dHlfcmVnaXN0ZXJfZHJpdmVyKHJvY2tldF9kcml2ZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgaW5zdGFsbCB0dHkgUm9ja2V0UG9ydCBkcml2ZXJcbiIpOworCQlnb3RvIGVycl90dHk7CiAJfQogCiAjaWZkZWYgUk9DS0VUX0RFQlVHX09QRU4KQEAgLTI0NjksMTQgKzI0NTYsMTggQEAKIAltYXhfYm9hcmQgPSBwY2lfYm9hcmRzX2ZvdW5kICsgaXNhX2JvYXJkc19mb3VuZDsKIAogCWlmIChtYXhfYm9hcmQgPT0gMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJObyByb2NrZXRwb3J0IHBvcnRzIGZvdW5kOyB1bmxvYWRpbmcgZHJpdmVyLlxuIik7Ci0JCWRlbF90aW1lcl9zeW5jKCZyb2NrZXRfdGltZXIpOwotCQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIocm9ja2V0X2RyaXZlcik7Ci0JCXB1dF90dHlfZHJpdmVyKHJvY2tldF9kcml2ZXIpOwotCQlyZXR1cm4gLUVOWElPOworCQlwcmludGsoS0VSTl9FUlIgIk5vIHJvY2tldHBvcnQgcG9ydHMgZm91bmQ7IHVubG9hZGluZyBkcml2ZXJcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX3R0eXU7CiAJfQogCiAJcmV0dXJuIDA7CitlcnJfdHR5dToKKwl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIocm9ja2V0X2RyaXZlcik7CitlcnJfdHR5OgorCXB1dF90dHlfZHJpdmVyKHJvY2tldF9kcml2ZXIpOworZXJyOgorCXJldHVybiByZXQ7CiB9CiAKIApAQCAtMjQ5MSwxMCArMjQ4MiwxNCBAQAogCWlmIChyZXR2YWwpCiAJCXByaW50ayhLRVJOX0lORk8gIkVycm9yICVkIHdoaWxlIHRyeWluZyB0byB1bnJlZ2lzdGVyICIKIAkJICAgICAgICJyb2NrZXRwb3J0IGRyaXZlclxuIiwgLXJldHZhbCk7Ci0JcHV0X3R0eV9kcml2ZXIocm9ja2V0X2RyaXZlcik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1JQX1BPUlRTOyBpKyspCi0JCWtmcmVlKHJwX3RhYmxlW2ldKTsKKwkJaWYgKHJwX3RhYmxlW2ldKSB7CisJCQl0dHlfdW5yZWdpc3Rlcl9kZXZpY2Uocm9ja2V0X2RyaXZlciwgaSk7CisJCQlrZnJlZShycF90YWJsZVtpXSk7CisJCX0KKworCXB1dF90dHlfZHJpdmVyKHJvY2tldF9kcml2ZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9CT0FSRFM7IGkrKykgewogCQlpZiAocmNrdHB0X2lvX2FkZHJbaV0gPD0gMCB8fCBpc19QQ0lbaV0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oIGIvZHJpdmVycy9jaGFyL3JvY2tldF9pbnQuaAppbmRleCBiNGM1M2RmLi41NWI4ZjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcm9ja2V0X2ludC5oCisrKyBiL2RyaXZlcnMvY2hhci9yb2NrZXRfaW50LmgKQEAgLTExNjMsMTMgKzExNjMsOCBAQAogCWludCByZWFkX3N0YXR1c19tYXNrOwogCWludCBjcHM7CiAKLSNpZmRlZiBERUNMQVJFX1dBSVRRVUVVRQogCXdhaXRfcXVldWVfaGVhZF90IG9wZW5fd2FpdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCBjbG9zZV93YWl0OwotI2Vsc2UKLQlzdHJ1Y3Qgd2FpdF9xdWV1ZSAqb3Blbl93YWl0OwotCXN0cnVjdCB3YWl0X3F1ZXVlICpjbG9zZV93YWl0OwotI2VuZGlmCisJc3RydWN0IGNvbXBsZXRpb24gY2xvc2Vfd2FpdDsKIAlzcGlubG9ja190IHNsb2NrOwogCXN0cnVjdCBtdXRleCB3cml0ZV9tdHg7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NvbnlwaS5jIGIvZHJpdmVycy9jaGFyL3NvbnlwaS5jCmluZGV4IDg1OTg1ODUuLjg3N2U1M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zb255cGkuYworKysgYi9kcml2ZXJzL2NoYXIvc29ueXBpLmMKQEAgLTcsNyArNyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA1IE5hcmF5YW5hbiBSIFMgPG5hcnNAa2FkYW1iYS5vcmc+CiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgQWxj9HZlIDx3d3cuYWxjb3ZlLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY8O0dmUgPHd3dy5hbGNvdmUuY29tPgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSBNaWNoYWVsIEFzaGxleSA8bS5hc2hsZXlAdW5zdy5lZHUuYXU+CiAgKgpAQCAtMTE3OCw5ICsxMTc4LDkgQEAKIAlqb2dfZGV2LT5pZC5idXN0eXBlID0gQlVTX0lTQTsKIAlqb2dfZGV2LT5pZC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1NPTlk7CiAKLQlqb2dfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7Ci0Jam9nX2Rldi0+a2V5Yml0W0xPTkcoQlROX01PVVNFKV0gPSBCSVQoQlROX01JRERMRSk7Ci0Jam9nX2Rldi0+cmVsYml0WzBdID0gQklUKFJFTF9XSEVFTCk7CisJam9nX2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKKwlqb2dfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gPSBCSVRfTUFTSyhCVE5fTUlERExFKTsKKwlqb2dfZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfV0hFRUwpOwogCiAJc29ueXBpX2RldmljZS5pbnB1dF9rZXlfZGV2ID0ga2V5X2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICgha2V5X2RldikgewpAQCAtMTE5Myw3ICsxMTkzLDcgQEAKIAlrZXlfZGV2LT5pZC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1NPTlk7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBJbnB1dCBEcml2ZXJzOiBzcGVjaWFsIGtleXMgKi8KLQlrZXlfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWtleV9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKIAlmb3IgKGkgPSAwOyBzb255cGlfaW5wdXRrZXlzW2ldLnNvbnlwaWV2OyBpKyspCiAJCWlmIChzb255cGlfaW5wdXRrZXlzW2ldLmlucHV0ZXYpCiAJCQlzZXRfYml0KHNvbnlwaV9pbnB1dGtleXNbaV0uaW5wdXRldiwga2V5X2Rldi0+a2V5Yml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeC5jIGIvZHJpdmVycy9jaGFyL3N4LmMKaW5kZXggODVhMjMyOC4uYTZlMWM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N4LmMKKysrIGIvZHJpdmVycy9jaGFyL3N4LmMKQEAgLTE0NjcsNyArMTQ2Nyw3IEBACiAKIAlsaW5lID0gdHR5LT5pbmRleDsKIAlzeF9kcHJpbnRrKFNYX0RFQlVHX09QRU4sICIlZDogb3BlbmluZyBsaW5lICVkLiB0dHk9JXAgY3R0eT0lcCwgIgotCQkJIm5wPSVkKVxuIiwgY3VycmVudC0+cGlkLCBsaW5lLCB0dHksCisJCQkibnA9JWQpXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgbGluZSwgdHR5LAogCQkJY3VycmVudC0+c2lnbmFsLT50dHksIHN4X25wb3J0cyk7CiAKIAlpZiAoKGxpbmUgPCAwKSB8fCAobGluZSA+PSBTWF9OUE9SVFMpIHx8IChsaW5lID49IHN4X25wb3J0cykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IDc4ZDE0OTMuLmRlNjBlMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKIAlmb3JfZWFjaF9wcm9jZXNzKHApIHsKLQkJaWYgKHAtPm1tICYmICFpc19pbml0KHApKQorCQlpZiAocC0+bW0gJiYgIWlzX2dsb2JhbF9pbml0KHApKQogCQkJLyogTm90IHN3YXBwZXIsIGluaXQgbm9yIGtlcm5lbCB0aHJlYWQgKi8KIAkJCWZvcmNlX3NpZyhzaWcsIHApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCA5Yzg2N2NmLi5mMzZmZWNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0xMDMsNiArMTAzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWxlY3Rpb24uaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAKICN1bmRlZiBUVFlfREVCVUdfSEFOR1VQCiAKQEAgLTk0Miw3ICs5NDMsNyBAQAogICoJQHR0eTogdGVybWluYWwgdG8gYWN0aXZhdGUgbGRpc2Mgb24KICAqCiAgKglTZXQgdGhlIFRUWV9MRElTQyBmbGFnIHdoZW4gdGhlIGxpbmUgZGlzY2lwbGluZSBjYW4gYmUgY2FsbGVkCi0gKglhZ2Fpbi4gRG8gbmVjY2Vzc2FyeSB3YWtldXBzIGZvciBleGlzdGluZyBzbGVlcGVycy4KKyAqCWFnYWluLiBEbyBuZWNlc3Nhcnkgd2FrZXVwcyBmb3IgZXhpc3Rpbmcgc2xlZXBlcnMuCiAgKgogICoJTm90ZTogbm9ib2R5IHNob3VsZCBzZXQgdGhpcyBiaXQgZXhjZXB0IHZpYSB0aGlzIGZ1bmN0aW9uLiBDbGVhcmluZwogICoJZGlyZWN0bHkgaXMgYWxsb3dlZC4KQEAgLTE1MDMsNyArMTUwNCw3IEBACiAgKgogICoJVGhlIHVzZXIgaGFzIGFza2VkIHZpYSBzeXN0ZW0gY2FsbCBmb3IgdGhlIHRlcm1pbmFsIHRvIGJlIGh1bmcgdXAuCiAgKglXZSBkbyB0aGlzIHN5bmNocm9ub3VzbHkgc28gdGhhdCB3aGVuIHRoZSBzeXNjYWxsIHJldHVybnMgdGhlIHByb2Nlc3MKLSAqCWlzIGNvbXBsZXRlLiBUaGF0IGd1YXJhbnRlZSBpcyBuZWNjZXNzYXJ5IGZvciBzZWN1cml0eSByZWFzb25zLgorICoJaXMgY29tcGxldGUuIFRoYXQgZ3VhcmFudGVlIGlzIG5lY2Vzc2FyeSBmb3Igc2VjdXJpdHkgcmVhc29ucy4KICAqLwogCiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQpAQCAtMTY5MCw3ICsxNjkxLDcgQEAKICAqCUB0dHk6IHR0eSB0byBzdGFydAogICoKICAqCVN0YXJ0IGEgdHR5IHRoYXQgaGFzIGJlZW4gc3RvcHBlZCBpZiBhdCBhbGwgcG9zc2libGUuIFBlcmZvcm0KLSAqCWFueSBuZWNjZXNzYXJ5IHdha2V1cHMgYW5kIHByb3BhZ2F0ZSB0aGUgVElPQ1BLVCBzdGF0dXMuIElmIHRoaXMKKyAqCWFueSBuZWNlc3Nhcnkgd2FrZXVwcyBhbmQgcHJvcGFnYXRlIHRoZSBUSU9DUEtUIHN0YXR1cy4gSWYgdGhpcwogICoJaXMgdGhlIHR0eSB3YXMgcHJldmlvdXMgc3RvcHBlZCBhbmQgaXMgYmVpbmcgc3RhcnRlZCB0aGVuIHRoZQogICoJZHJpdmVyIHN0YXJ0IG1ldGhvZCBpcyBpbnZva2VkIGFuZCB0aGUgbGluZSBkaXNjaXBsaW5lIHdva2VuLgogICoKQEAgLTI4NzYsNyArMjg3Nyw3IEBACiAgKglAdHR5OiB0dHkgdG8gZmFrZSBpbnB1dCBpbnRvCiAgKglAcDogcG9pbnRlciB0byBjaGFyYWN0ZXIKICAqCi0gKglGYWtlIGlucHV0IHRvIGEgdHR5IGRldmljZS4gRG9lcyB0aGUgbmVjY2Vzc2FyeSBsb2NraW5nIGFuZAorICoJRmFrZSBpbnB1dCB0byBhIHR0eSBkZXZpY2UuIERvZXMgdGhlIG5lY2Vzc2FyeSBsb2NraW5nIGFuZAogICoJaW5wdXQgbWFuYWdlbWVudC4KICAqCiAgKglGSVhNRTogZG9lcyBub3QgaG9ub3VyIGZsb3cgY29udHJvbCA/PwpAQCAtMzEwNyw3ICszMTA4LDcgQEAKIAkgKi8KIAlpZiAodHR5ID09IHJlYWxfdHR5ICYmIGN1cnJlbnQtPnNpZ25hbC0+dHR5ICE9IHJlYWxfdHR5KQogCQlyZXR1cm4gLUVOT1RUWTsKLQlyZXR1cm4gcHV0X3VzZXIocGlkX25yKHJlYWxfdHR5LT5wZ3JwKSwgcCk7CisJcmV0dXJuIHB1dF91c2VyKHBpZF92bnIocmVhbF90dHktPnBncnApLCBwKTsKIH0KIAogLyoqCkBAIC0zMTQxLDcgKzMxNDIsNyBAQAogCWlmIChwZ3JwX25yIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmN1X3JlYWRfbG9jaygpOwotCXBncnAgPSBmaW5kX3BpZChwZ3JwX25yKTsKKwlwZ3JwID0gZmluZF92cGlkKHBncnBfbnIpOwogCXJldHZhbCA9IC1FU1JDSDsKIAlpZiAoIXBncnApCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTMxNzgsNyArMzE3OSw3IEBACiAJCXJldHVybiAtRU5PVFRZOwogCWlmICghcmVhbF90dHktPnNlc3Npb24pCiAJCXJldHVybiAtRU5PVFRZOwotCXJldHVybiBwdXRfdXNlcihwaWRfbnIocmVhbF90dHktPnNlc3Npb24pLCBwKTsKKwlyZXR1cm4gcHV0X3VzZXIocGlkX3ZucihyZWFsX3R0eS0+c2Vzc2lvbiksIHApOwogfQogCiAvKioKQEAgLTM1MjgsOCArMzUyOSw4IEBACiAJLyogS2lsbCB0aGUgZW50aXJlIHNlc3Npb24gKi8KIAlkb19lYWNoX3BpZF90YXNrKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiU0FLOiBraWxsZWQgcHJvY2VzcyAlZCIKLQkJCSIgKCVzKTogcHJvY2Vzc19zZXNzaW9uKHApPT10dHktPnNlc3Npb25cbiIsCi0JCQlwLT5waWQsIHAtPmNvbW0pOworCQkJIiAoJXMpOiB0YXNrX3Nlc3Npb25fbnIocCk9PXR0eS0+c2Vzc2lvblxuIiwKKwkJCXRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAkJc2VuZF9zaWcoU0lHS0lMTCwgcCwgMSk7CiAJfSB3aGlsZV9lYWNoX3BpZF90YXNrKHNlc3Npb24sIFBJRFRZUEVfU0lELCBwKTsKIAkvKiBOb3cga2lsbCBhbnkgcHJvY2Vzc2VzIHRoYXQgaGFwcGVuIHRvIGhhdmUgdGhlCkBAIC0zNTM4LDggKzM1MzksOCBAQAogCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJaWYgKHAtPnNpZ25hbC0+dHR5ID09IHR0eSkgewogCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTQUs6IGtpbGxlZCBwcm9jZXNzICVkIgotCQkJICAgICIgKCVzKTogcHJvY2Vzc19zZXNzaW9uKHApPT10dHktPnNlc3Npb25cbiIsCi0JCQkgICAgcC0+cGlkLCBwLT5jb21tKTsKKwkJCSAgICAiICglcyk6IHRhc2tfc2Vzc2lvbl9ucihwKT09dHR5LT5zZXNzaW9uXG4iLAorCQkJICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAkJCXNlbmRfc2lnKFNJR0tJTEwsIHAsIDEpOwogCQkJY29udGludWU7CiAJCX0KQEAgLTM1NTksNyArMzU2MCw3IEBACiAJCQkJICAgIGZpbHAtPnByaXZhdGVfZGF0YSA9PSB0dHkpIHsKIAkJCQkJcHJpbnRrKEtFUk5fTk9USUNFICJTQUs6IGtpbGxlZCBwcm9jZXNzICVkIgogCQkJCQkgICAgIiAoJXMpOiBmZCMlZCBvcGVuZWQgdG8gdGhlIHR0eVxuIiwKLQkJCQkJICAgIHAtPnBpZCwgcC0+Y29tbSwgaSk7CisJCQkJCSAgICB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgaSk7CiAJCQkJCWZvcmNlX3NpZyhTSUdLSUxMLCBwKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCmluZGV4IDc0NWQ1NTIuLjdhMDAzNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKQEAgLTIyOCw3ICsyMjgsOCBAQAogICoJYW5kIHdpbGwgYWxsIGdvIGF3YXkgb25jZSB0aGlzIGlzIGRvbmUuCiAgKi8KIAotdm9pZCB0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKHN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3BlZWRfdCBpYmF1ZCwgc3BlZWRfdCBvYmF1ZCkKK3ZvaWQgdHR5X3Rlcm1pb3NfZW5jb2RlX2JhdWRfcmF0ZShzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MsCisJCQkJICBzcGVlZF90IGliYXVkLCBzcGVlZF90IG9iYXVkKQogewogCWludCBpID0gMDsKIAlpbnQgaWZvdW5kID0gLTEsIG9mb3VuZCA9IC0xOwpAQCAtMjYzLDExICsyNjQsMTUgQEAKIAkgKi8KIAogCWRvIHsKLQkJaWYgKG9iYXVkIC0gb2Nsb3NlID49IGJhdWRfdGFibGVbaV0gJiYgb2JhdWQgKyBvY2xvc2UgPD0gYmF1ZF90YWJsZVtpXSkgeworCQlpZiAob2JhdWQgLSBvY2xvc2UgPD0gYmF1ZF90YWJsZVtpXSAmJgorCQkgICAgb2JhdWQgKyBvY2xvc2UgPj0gYmF1ZF90YWJsZVtpXSkgewogCQkJdGVybWlvcy0+Y19jZmxhZyB8PSBiYXVkX2JpdHNbaV07CiAJCQlvZm91bmQgPSBpOwogCQl9Ci0JCWlmIChpYmF1ZCAtIGljbG9zZSA+PSBiYXVkX3RhYmxlW2ldICYmIGliYXVkICsgaWNsb3NlIDw9IGJhdWRfdGFibGVbaV0pIHsKKwkJaWYgKGliYXVkIC0gaWNsb3NlIDw9IGJhdWRfdGFibGVbaV0gJiYKKwkJICAgIGliYXVkICsgaWNsb3NlID49IGJhdWRfdGFibGVbaV0pIHsKKwkJCS8qIEZvciB0aGUgY2FzZSBpbnB1dCA9PSBvdXRwdXQgZG9uJ3Qgc2V0IElCQVVEIGJpdHMKKwkJCSAgIGlmIHRoZSB1c2VyIGRpZG4ndCBkbyBzbyAqLwogCQkJaWYgKG9mb3VuZCA9PSBpICYmICFpYmlucHV0KQogCQkJCWlmb3VuZCAgPSBpOwogI2lmZGVmIElCU0hJRlQKQEAgLTQzOSw3ICs0NDQsNyBAQAogICoJQGFyZzogdXNlciBkYXRhCiAgKglAb3B0OiBvcHRpb24gaW5mb3JtYXRpb24KICAqCi0gKglIZWxwZXIgZnVuY3Rpb24gdG8gcHJlcGFyZSB0ZXJtaW9zIGRhdGEgYW5kIHJ1biBuZWNjZXNzYXJ5IG90aGVyCisgKglIZWxwZXIgZnVuY3Rpb24gdG8gcHJlcGFyZSB0ZXJtaW9zIGRhdGEgYW5kIHJ1biBuZWNlc3Nhcnkgb3RoZXIKICAqCWZ1bmN0aW9ucyBiZWZvcmUgdXNpbmcgY2hhbmdlX3Rlcm1pb3MgdG8gZG8gdGhlIGFjdHVhbCBjaGFuZ2VzLgogICoKICAqCUxvY2tpbmc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnQuYyBiL2RyaXZlcnMvY2hhci92dC5jCmluZGV4IDY0NWFkOTguLjdhNWJhZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dC5jCisrKyBiL2RyaXZlcnMvY2hhci92dC5jCkBAIC05OSw2ICs5OSw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9mb250Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTE1OCwxMSArMTU5LDcgQEAKIHN0YXRpYyB2b2lkIHNldF9wYWxldHRlKHN0cnVjdCB2Y19kYXRhICp2Yyk7CiAKIHN0YXRpYyBpbnQgcHJpbnRhYmxlOwkJLyogSXMgY29uc29sZSByZWFkeSBmb3IgcHJpbnRpbmc/ICovCi0jaWZkZWYgQ09ORklHX1ZUX1VOSUNPREUKLWludCBkZWZhdWx0X3V0ZjggPSAxOwotI2Vsc2UKLWludCBkZWZhdWx0X3V0Zjg7Ci0jZW5kaWYKK2ludCBkZWZhdWx0X3V0ZjggPSB0cnVlOwogbW9kdWxlX3BhcmFtKGRlZmF1bHRfdXRmOCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiAKIC8qCkBAIC0yMjcsNiArMjI0LDM1IEBACiB9OwogCiAvKgorICogTm90aWZpZXIgbGlzdCBmb3IgY29uc29sZSBldmVudHMuCisgKi8KK3N0YXRpYyBBVE9NSUNfTk9USUZJRVJfSEVBRCh2dF9ub3RpZmllcl9saXN0KTsKKworaW50IHJlZ2lzdGVyX3Z0X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmdnRfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfdnRfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl92dF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmdnRfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl92dF9ub3RpZmllcik7CisKK3N0YXRpYyB2b2lkIG5vdGlmeV93cml0ZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCB1bmljb2RlKQoreworCXN0cnVjdCB2dF9ub3RpZmllcl9wYXJhbSBwYXJhbSA9IHsgLnZjID0gdmMsIHVuaWNvZGUgPSB1bmljb2RlIH07CisJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX1dSSVRFLCAmcGFyYW0pOworfQorCitzdGF0aWMgdm9pZCBub3RpZnlfdXBkYXRlKHN0cnVjdCB2Y19kYXRhICp2YykKK3sKKwlzdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0gcGFyYW0gPSB7IC52YyA9IHZjIH07CisJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX1VQREFURSwgJnBhcmFtKTsKK30KKworLyoKICAqCUxvdy1MZXZlbCBGdW5jdGlvbnMKICAqLwogCkBAIC03MjIsNiArNzQ4LDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoIXZjX2NvbnNbY3VycmNvbnNdLmQpIHsKIAkgICAgc3RydWN0IHZjX2RhdGEgKnZjOworCSAgICBzdHJ1Y3QgdnRfbm90aWZpZXJfcGFyYW0gcGFyYW07CiAKIAkgICAgLyogcHJldmVudCB1c2VycyBmcm9tIHRha2luZyB0b28gbXVjaCBtZW1vcnkgKi8KIAkgICAgaWYgKGN1cnJjb25zID49IE1BWF9OUl9VU0VSX0NPTlNPTEVTICYmICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQpAQCAtNzMzLDcgKzc2MCw3IEBACiAJICAgIC8qIGFsdGhvdWdoIHRoZSBudW1iZXJzIGFib3ZlIGFyZSBub3QgdmFsaWQgc2luY2UgbG9uZyBhZ28sIHRoZQogCSAgICAgICBwb2ludCBpcyBzdGlsbCB1cC10by1kYXRlIGFuZCB0aGUgY29tbWVudCBzdGlsbCBoYXMgaXRzIHZhbHVlCiAJICAgICAgIGV2ZW4gaWYgb25seSBhcyBhIGhpc3RvcmljYWwgYXJ0aWZhY3QuICAtLW1qLCBKdWx5IDE5OTggKi8KLQkgICAgdmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdmNfZGF0YSksIEdGUF9LRVJORUwpOworCSAgICBwYXJhbS52YyA9IHZjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZjX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAkgICAgaWYgKCF2YykKIAkJcmV0dXJuIC1FTk9NRU07CiAJICAgIHZjX2NvbnNbY3VycmNvbnNdLmQgPSB2YzsKQEAgLTc1MCw2ICs3NzcsNyBAQAogCSAgICB9CiAJICAgIHZjLT52Y19rbWFsbG9jZWQgPSAxOwogCSAgICB2Y19pbml0KHZjLCB2Yy0+dmNfcm93cywgdmMtPnZjX2NvbHMsIDEpOworCSAgICBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmdnRfbm90aWZpZXJfbGlzdCwgVlRfQUxMT0NBVEUsICZwYXJhbSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtOTExLDYgKzkzOSw4IEBACiAKIAlpZiAodmNfY29uc19hbGxvY2F0ZWQoY3VycmNvbnMpKSB7CiAJCXN0cnVjdCB2Y19kYXRhICp2YyA9IHZjX2NvbnNbY3VycmNvbnNdLmQ7CisJCXN0cnVjdCB2dF9ub3RpZmllcl9wYXJhbSBwYXJhbSA9IHsgLnZjID0gdmMgfTsKKwkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJnZ0X25vdGlmaWVyX2xpc3QsIFZUX0RFQUxMT0NBVEUsICZwYXJhbSk7CiAJCXZjLT52Y19zdy0+Y29uX2RlaW5pdCh2Yyk7CiAJCXB1dF9waWQodmMtPnZ0X3BpZCk7CiAJCW1vZHVsZV9wdXQodmMtPnZjX3N3LT5vd25lcik7CkBAIC0xMDIzLDYgKzEwNTMsNyBAQAogCQl2Yy0+dmNfcG9zICs9IHZjLT52Y19zaXplX3JvdzsKIAl9CiAJdmMtPnZjX25lZWRfd3JhcCA9IDA7CisJbm90aWZ5X3dyaXRlKHZjLCAnXG4nKTsKIH0KIAogc3RhdGljIHZvaWQgcmkoc3RydWN0IHZjX2RhdGEgKnZjKQpAQCAtMTA0Myw2ICsxMDc0LDcgQEAKIHsKIAl2Yy0+dmNfcG9zIC09IHZjLT52Y194IDw8IDE7CiAJdmMtPnZjX25lZWRfd3JhcCA9IHZjLT52Y194ID0gMDsKKwlub3RpZnlfd3JpdGUodmMsICdccicpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnMoc3RydWN0IHZjX2RhdGEgKnZjKQpAQCAtMTA1MSw2ICsxMDgzLDcgQEAKIAkJdmMtPnZjX3BvcyAtPSAyOwogCQl2Yy0+dmNfeC0tOwogCQl2Yy0+dmNfbmVlZF93cmFwID0gMDsKKwkJbm90aWZ5X3dyaXRlKHZjLCAnXGInKTsKIAl9CiB9CiAKQEAgLTE1OTcsNiArMTYzMCw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJdmMtPnZjX3BvcyArPSAodmMtPnZjX3ggPDwgMSk7CisJCW5vdGlmeV93cml0ZSh2YywgJ1x0Jyk7CiAJCXJldHVybjsKIAljYXNlIDEwOiBjYXNlIDExOiBjYXNlIDEyOgogCQlsZih2Yyk7CkBAIC0yMjU2LDYgKzIyOTAsNyBAQAogCQkJCXRjID0gY29udl91bmlfdG9fcGModmMsICcgJyk7IC8qIEEgc3BhY2UgaXMgcHJpbnRlZCBpbiB0aGUgc2Vjb25kIGNvbHVtbiAqLwogCQkJCWlmICh0YyA8IDApIHRjID0gJyAnOwogCQkJfQorCQkJbm90aWZ5X3dyaXRlKHZjLCBjKTsKIAogCQkJaWYgKGludmVyc2UpIHsKIAkJCQlGTFVTSApAQCAtMjI3OCw2ICsyMzEzLDcgQEAKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiAKIG91dDoKKwlub3RpZnlfdXBkYXRlKHZjKTsKIAlyZXR1cm4gbjsKICN1bmRlZiBGTFVTSAogfQpAQCAtMjMyMSw2ICsyMzU3LDcgQEAKIAkJZG9fYmxhbmtfc2NyZWVuKDApOwogCQlibGFua190aW1lcl9leHBpcmVkID0gMDsKIAl9CisJbm90aWZ5X3VwZGF0ZSh2Y19jb25zW2ZnX2NvbnNvbGVdLmQpOwogCiAJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwogfQpAQCAtMjQyMiw2ICsyNDU5LDcgQEAKIAkJCQljb250aW51ZTsKIAkJfQogCQlzY3Jfd3JpdGV3KCh2Yy0+dmNfYXR0ciA8PCA4KSArIGMsICh1bnNpZ25lZCBzaG9ydCAqKXZjLT52Y19wb3MpOworCQlub3RpZnlfd3JpdGUodmMsIGMpOwogCQljbnQrKzsKIAkJaWYgKG15eCA9PSB2Yy0+dmNfY29scyAtIDEpIHsKIAkJCXZjLT52Y19uZWVkX3dyYXAgPSAxOwpAQCAtMjQ0MCw2ICsyNDc4LDcgQEAKIAkJfQogCX0KIAlzZXRfY3Vyc29yKHZjKTsKKwlub3RpZnlfdXBkYXRlKHZjKTsKIAogcXVpdDoKIAljbGVhcl9iaXQoMCwgJnByaW50aW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9LY29uZmlnIGIvZHJpdmVycy9jcHVpZGxlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlZDQxMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9LY29uZmlnCkBAIC0wLDAgKzEsMjAgQEAKKworY29uZmlnIENQVV9JRExFCisJYm9vbCAiQ1BVIGlkbGUgUE0gc3VwcG9ydCIKKwloZWxwCisJICBDUFUgaWRsZSBpcyBhIGdlbmVyaWMgZnJhbWV3b3JrIGZvciBzdXBwb3J0aW5nIHNvZnR3YXJlLWNvbnRyb2xsZWQKKwkgIGlkbGUgcHJvY2Vzc29yIHBvd2VyIG1hbmFnZW1lbnQuICBJdCBpbmNsdWRlcyBtb2R1bGFyIGNyb3NzLXBsYXRmb3JtCisJICBnb3Zlcm5vcnMgdGhhdCBjYW4gYmUgc3dhcHBlZCBkdXJpbmcgcnVudGltZS4KKworCSAgSWYgeW91J3JlIHVzaW5nIGEgbW9iaWxlIHBsYXRmb3JtIHRoYXQgc3VwcG9ydHMgQ1BVIGlkbGUgUE0gKGUuZy4KKwkgIGFuIEFDUEktY2FwYWJsZSBub3RlYm9vayksIHlvdSBzaG91bGQgc2F5IFkgaGVyZS4KKworY29uZmlnIENQVV9JRExFX0dPVl9MQURERVIKKwlib29sCisJZGVwZW5kcyBvbiBDUFVfSURMRQorCWRlZmF1bHQgeQorCitjb25maWcgQ1BVX0lETEVfR09WX01FTlUKKwlib29sCisJZGVwZW5kcyBvbiBDUFVfSURMRSAmJiBOT19IWgorCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL01ha2VmaWxlIGIvZHJpdmVycy9jcHVpZGxlL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzRmODgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciBjcHVpZGxlLgorIworCitvYmoteSArPSBjcHVpZGxlLm8gZHJpdmVyLm8gZ292ZXJub3IubyBzeXNmcy5vIGdvdmVybm9ycy8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmMgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkZjQxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogY3B1aWRsZS5jIC0gY29yZSBjcHVpZGxlIGluZnJhc3RydWN0dXJlCisgKgorICogKEMpIDIwMDYtMjAwNyBWZW5rYXRlc2ggUGFsbGlwYWRpIDx2ZW5rYXRlc2gucGFsbGlwYWRpQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgICAgU2hhb2h1YSBMaSA8c2hhb2h1YS5saUBpbnRlbC5jb20+CisgKiAgICAgICAgICAgICAgIEFkYW0gQmVsYXkgPGFiZWxheUBub3ZlbGwuY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9sYXRlbmN5Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgorCisjaW5jbHVkZSAiY3B1aWRsZS5oIgorCitERUZJTkVfUEVSX0NQVShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKiwgY3B1aWRsZV9kZXZpY2VzKTsKK0VYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwoY3B1aWRsZV9kZXZpY2VzKTsKKworREVGSU5FX01VVEVYKGNwdWlkbGVfbG9jayk7CitMSVNUX0hFQUQoY3B1aWRsZV9kZXRlY3RlZF9kZXZpY2VzKTsKK3N0YXRpYyB2b2lkICgqcG1faWRsZV9vbGQpKHZvaWQpOworCitzdGF0aWMgaW50IGVuYWJsZWRfZGV2aWNlczsKKworLyoqCisgKiBjcHVpZGxlX2lkbGVfY2FsbCAtIHRoZSBtYWluIGlkbGUgbG9vcAorICoKKyAqIE5PVEU6IG5vIGxvY2tzIG9yIHNlbWFwaG9yZXMgc2hvdWxkIGJlIHVzZWQgaGVyZQorICovCitzdGF0aWMgdm9pZCBjcHVpZGxlX2lkbGVfY2FsbCh2b2lkKQoreworCXN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2ID0gX19nZXRfY3B1X3ZhcihjcHVpZGxlX2RldmljZXMpOworCXN0cnVjdCBjcHVpZGxlX3N0YXRlICp0YXJnZXRfc3RhdGU7CisJaW50IG5leHRfc3RhdGU7CisKKwkvKiBjaGVjayBpZiB0aGUgZGV2aWNlIGlzIHJlYWR5ICovCisJaWYgKCFkZXYgfHwgIWRldi0+ZW5hYmxlZCkgeworCQlpZiAocG1faWRsZV9vbGQpCisJCQlwbV9pZGxlX29sZCgpOworCQllbHNlCisJCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCXJldHVybjsKKwl9CisKKwkvKiBhc2sgdGhlIGdvdmVybm9yIGZvciB0aGUgbmV4dCBzdGF0ZSAqLworCW5leHRfc3RhdGUgPSBjcHVpZGxlX2N1cnJfZ292ZXJub3ItPnNlbGVjdChkZXYpOworCWlmIChuZWVkX3Jlc2NoZWQoKSkKKwkJcmV0dXJuOworCXRhcmdldF9zdGF0ZSA9ICZkZXYtPnN0YXRlc1tuZXh0X3N0YXRlXTsKKworCS8qIGVudGVyIHRoZSBzdGF0ZSBhbmQgdXBkYXRlIHN0YXRzICovCisJZGV2LT5sYXN0X3Jlc2lkZW5jeSA9IHRhcmdldF9zdGF0ZS0+ZW50ZXIoZGV2LCB0YXJnZXRfc3RhdGUpOworCWRldi0+bGFzdF9zdGF0ZSA9IHRhcmdldF9zdGF0ZTsKKwl0YXJnZXRfc3RhdGUtPnRpbWUgKz0gZGV2LT5sYXN0X3Jlc2lkZW5jeTsKKwl0YXJnZXRfc3RhdGUtPnVzYWdlKys7CisKKwkvKiBnaXZlIHRoZSBnb3Zlcm5vciBhbiBvcHBvcnR1bml0eSB0byByZWZsZWN0IG9uIHRoZSBvdXRjb21lICovCisJaWYgKGNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+cmVmbGVjdCkKKwkJY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5yZWZsZWN0KGRldik7Cit9CisKKy8qKgorICogY3B1aWRsZV9pbnN0YWxsX2lkbGVfaGFuZGxlciAtIGluc3RhbGxzIHRoZSBjcHVpZGxlIGlkbGUgbG9vcCBoYW5kbGVyCisgKi8KK3ZvaWQgY3B1aWRsZV9pbnN0YWxsX2lkbGVfaGFuZGxlcih2b2lkKQoreworCWlmIChlbmFibGVkX2RldmljZXMgJiYgKHBtX2lkbGUgIT0gY3B1aWRsZV9pZGxlX2NhbGwpKSB7CisJCS8qIE1ha2Ugc3VyZSBhbGwgY2hhbmdlcyBmaW5pc2hlZCBiZWZvcmUgd2Ugc3dpdGNoIHRvIG5ldyBpZGxlICovCisJCXNtcF93bWIoKTsKKwkJcG1faWRsZSA9IGNwdWlkbGVfaWRsZV9jYWxsOworCX0KK30KKworLyoqCisgKiBjcHVpZGxlX3VuaW5zdGFsbF9pZGxlX2hhbmRsZXIgLSB1bmluc3RhbGxzIHRoZSBjcHVpZGxlIGlkbGUgbG9vcCBoYW5kbGVyCisgKi8KK3ZvaWQgY3B1aWRsZV91bmluc3RhbGxfaWRsZV9oYW5kbGVyKHZvaWQpCit7CisJaWYgKGVuYWJsZWRfZGV2aWNlcyAmJiAocG1faWRsZSAhPSBwbV9pZGxlX29sZCkpIHsKKwkJcG1faWRsZSA9IHBtX2lkbGVfb2xkOworCQljcHVfaWRsZV93YWl0KCk7CisJfQorfQorCisvKioKKyAqIGNwdWlkbGVfcGF1c2VfYW5kX2xvY2sgLSB0ZW1wb3JhcmlseSBkaXNhYmxlcyBDUFVJRExFCisgKi8KK3ZvaWQgY3B1aWRsZV9wYXVzZV9hbmRfbG9jayh2b2lkKQoreworCW11dGV4X2xvY2soJmNwdWlkbGVfbG9jayk7CisJY3B1aWRsZV91bmluc3RhbGxfaWRsZV9oYW5kbGVyKCk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNwdWlkbGVfcGF1c2VfYW5kX2xvY2spOworCisvKioKKyAqIGNwdWlkbGVfcmVzdW1lX2FuZF91bmxvY2sgLSByZXN1bWVzIENQVUlETEUgb3BlcmF0aW9uCisgKi8KK3ZvaWQgY3B1aWRsZV9yZXN1bWVfYW5kX3VubG9jayh2b2lkKQoreworCWNwdWlkbGVfaW5zdGFsbF9pZGxlX2hhbmRsZXIoKTsKKwltdXRleF91bmxvY2soJmNwdWlkbGVfbG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNwdWlkbGVfcmVzdW1lX2FuZF91bmxvY2spOworCisvKioKKyAqIGNwdWlkbGVfZW5hYmxlX2RldmljZSAtIGVuYWJsZXMgaWRsZSBQTSBmb3IgYSBDUFUKKyAqIEBkZXY6IHRoZSBDUFUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gY3B1aWRsZV9wYXVzZV9hbmRfbG9jayBhbmQKKyAqIGNwdWlkbGVfcmVzdW1lX2FuZF91bmxvY2sgd2hlbiB1c2VkIGV4dGVybmFsbHkuCisgKi8KK2ludCBjcHVpZGxlX2VuYWJsZV9kZXZpY2Uoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7CisJaW50IHJldCwgaTsKKworCWlmIChkZXYtPmVuYWJsZWQpCisJCXJldHVybiAwOworCWlmICghY3B1aWRsZV9jdXJyX2RyaXZlciB8fCAhY3B1aWRsZV9jdXJyX2dvdmVybm9yKQorCQlyZXR1cm4gLUVJTzsKKwlpZiAoIWRldi0+c3RhdGVfY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChyZXQgPSBjcHVpZGxlX2FkZF9zdGF0ZV9zeXNmcyhkZXYpKSkKKwkJcmV0dXJuIHJldDsKKworCWlmIChjcHVpZGxlX2N1cnJfZ292ZXJub3ItPmVuYWJsZSAmJgorCSAgICAocmV0ID0gY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5lbmFibGUoZGV2KSkpCisJCWdvdG8gZmFpbF9zeXNmczsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPnN0YXRlX2NvdW50OyBpKyspIHsKKwkJZGV2LT5zdGF0ZXNbaV0udXNhZ2UgPSAwOworCQlkZXYtPnN0YXRlc1tpXS50aW1lID0gMDsKKwl9CisJZGV2LT5sYXN0X3Jlc2lkZW5jeSA9IDA7CisJZGV2LT5sYXN0X3N0YXRlID0gTlVMTDsKKworCXNtcF93bWIoKTsKKworCWRldi0+ZW5hYmxlZCA9IDE7CisKKwllbmFibGVkX2RldmljZXMrKzsKKwlyZXR1cm4gMDsKKworZmFpbF9zeXNmczoKKwljcHVpZGxlX3JlbW92ZV9zdGF0ZV9zeXNmcyhkZXYpOworCisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY3B1aWRsZV9lbmFibGVfZGV2aWNlKTsKKworLyoqCisgKiBjcHVpZGxlX2Rpc2FibGVfZGV2aWNlIC0gZGlzYWJsZXMgaWRsZSBQTSBmb3IgYSBDUFUKKyAqIEBkZXY6IHRoZSBDUFUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJldHdlZW4gY3B1aWRsZV9wYXVzZV9hbmRfbG9jayBhbmQKKyAqIGNwdWlkbGVfcmVzdW1lX2FuZF91bmxvY2sgd2hlbiB1c2VkIGV4dGVybmFsbHkuCisgKi8KK3ZvaWQgY3B1aWRsZV9kaXNhYmxlX2RldmljZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldikKK3sKKwlpZiAoIWRldi0+ZW5hYmxlZCkKKwkJcmV0dXJuOworCWlmICghY3B1aWRsZV9jdXJyX2RyaXZlciB8fCAhY3B1aWRsZV9jdXJyX2dvdmVybm9yKQorCQlyZXR1cm47CisKKwlkZXYtPmVuYWJsZWQgPSAwOworCisJaWYgKGNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+ZGlzYWJsZSkKKwkJY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5kaXNhYmxlKGRldik7CisKKwljcHVpZGxlX3JlbW92ZV9zdGF0ZV9zeXNmcyhkZXYpOworCWVuYWJsZWRfZGV2aWNlcy0tOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjcHVpZGxlX2Rpc2FibGVfZGV2aWNlKTsKKworLyoqCisgKiBjcHVpZGxlX3JlZ2lzdGVyX2RldmljZSAtIHJlZ2lzdGVycyBhIENQVSdzIGlkbGUgUE0gZmVhdHVyZQorICogQGRldjogdGhlIGNwdQorICovCitpbnQgY3B1aWRsZV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KCh1bnNpZ25lZCBsb25nKWRldi0+Y3B1KTsKKworCWlmICghc3lzX2RldikKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0cnlfbW9kdWxlX2dldChjcHVpZGxlX2N1cnJfZHJpdmVyLT5vd25lcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmtvYmpfdW5yZWdpc3Rlcik7CisKKwltdXRleF9sb2NrKCZjcHVpZGxlX2xvY2spOworCisJcGVyX2NwdShjcHVpZGxlX2RldmljZXMsIGRldi0+Y3B1KSA9IGRldjsKKwlsaXN0X2FkZCgmZGV2LT5kZXZpY2VfbGlzdCwgJmNwdWlkbGVfZGV0ZWN0ZWRfZGV2aWNlcyk7CisJaWYgKChyZXQgPSBjcHVpZGxlX2FkZF9zeXNmcyhzeXNfZGV2KSkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjcHVpZGxlX2xvY2spOworCQltb2R1bGVfcHV0KGNwdWlkbGVfY3Vycl9kcml2ZXItPm93bmVyKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljcHVpZGxlX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwljcHVpZGxlX2luc3RhbGxfaWRsZV9oYW5kbGVyKCk7CisKKwltdXRleF91bmxvY2soJmNwdWlkbGVfbG9jayk7CisKKwlyZXR1cm4gMDsKKworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjcHVpZGxlX3JlZ2lzdGVyX2RldmljZSk7CisKKy8qKgorICogY3B1aWRsZV91bnJlZ2lzdGVyX2RldmljZSAtIHVucmVnaXN0ZXJzIGEgQ1BVJ3MgaWRsZSBQTSBmZWF0dXJlCisgKiBAZGV2OiB0aGUgY3B1CisgKi8KK3ZvaWQgY3B1aWRsZV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KCh1bnNpZ25lZCBsb25nKWRldi0+Y3B1KTsKKworCWNwdWlkbGVfcGF1c2VfYW5kX2xvY2soKTsKKworCWNwdWlkbGVfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKworCWNwdWlkbGVfcmVtb3ZlX3N5c2ZzKHN5c19kZXYpOworCWxpc3RfZGVsKCZkZXYtPmRldmljZV9saXN0KTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkZXYtPmtvYmpfdW5yZWdpc3Rlcik7CisJcGVyX2NwdShjcHVpZGxlX2RldmljZXMsIGRldi0+Y3B1KSA9IE5VTEw7CisKKwljcHVpZGxlX3Jlc3VtZV9hbmRfdW5sb2NrKCk7CisKKwltb2R1bGVfcHV0KGNwdWlkbGVfY3Vycl9kcml2ZXItPm93bmVyKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY3B1aWRsZV91bnJlZ2lzdGVyX2RldmljZSk7CisKKyNpZmRlZiBDT05GSUdfU01QCisKK3N0YXRpYyB2b2lkIHNtcF9jYWxsYmFjayh2b2lkICp2KQoreworCS8qIHdlIGFscmVhZHkgd29rZSB0aGUgQ1BVIHVwLCBub3RoaW5nIG1vcmUgdG8gZG8gKi8KK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiBhIHBhcnQgb2YgdGhlIGtlcm5lbCBoYXMgYSBuZXcgbGF0ZW5jeQorICogcmVxdWlyZW1lbnQuICBUaGlzIG1lYW5zIHdlIG5lZWQgdG8gZ2V0IGFsbCBwcm9jZXNzb3JzIG91dCBvZiB0aGVpciBDLXN0YXRlLAorICogYW5kIHRoZW4gcmVjYWxjdWxhdGUgYSBuZXcgc3VpdGFibGUgQy1zdGF0ZS4gSnVzdCBkbyBhIGNyb3NzLWNwdSBJUEk7IHRoYXQKKyAqIHdha2VzIHRoZW0gYWxsIHJpZ2h0IHVwLgorICovCitzdGF0aWMgaW50IGNwdWlkbGVfbGF0ZW5jeV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLAorCQl1bnNpZ25lZCBsb25nIGwsIHZvaWQgKnYpCit7CisJc21wX2NhbGxfZnVuY3Rpb24oc21wX2NhbGxiYWNrLCBOVUxMLCAwLCAxKTsKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNwdWlkbGVfbGF0ZW5jeV9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGNwdWlkbGVfbGF0ZW5jeV9ub3RpZnksCit9OworCisjZGVmaW5lIGxhdGVuY3lfbm90aWZpZXJfaW5pdCh4KSBkbyB7IHJlZ2lzdGVyX2xhdGVuY3lfbm90aWZpZXIoeCk7IH0gd2hpbGUgKDApCisKKyNlbHNlIC8qIENPTkZJR19TTVAgKi8KKworI2RlZmluZSBsYXRlbmN5X25vdGlmaWVyX2luaXQoeCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCisvKioKKyAqIGNwdWlkbGVfaW5pdCAtIGNvcmUgaW5pdGlhbGl6ZXIKKyAqLworc3RhdGljIGludCBfX2luaXQgY3B1aWRsZV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXBtX2lkbGVfb2xkID0gcG1faWRsZTsKKworCXJldCA9IGNwdWlkbGVfYWRkX2NsYXNzX3N5c2ZzKCZjcHVfc3lzZGV2X2NsYXNzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbGF0ZW5jeV9ub3RpZmllcl9pbml0KCZjcHVpZGxlX2xhdGVuY3lfbm90aWZpZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2NvcmVfaW5pdGNhbGwoY3B1aWRsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9jcHVpZGxlLmggYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NzZiYTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvY3B1aWRsZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBjcHVpZGxlLmggLSBUaGUgaW50ZXJuYWwgaGVhZGVyIGZpbGUKKyAqLworCisjaWZuZGVmIF9fRFJJVkVSX0NQVUlETEVfSAorI2RlZmluZSBfX0RSSVZFUl9DUFVJRExFX0gKKworI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisvKiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkgKi8KK2V4dGVybiBzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqY3B1aWRsZV9jdXJyX2dvdmVybm9yOworZXh0ZXJuIHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqY3B1aWRsZV9jdXJyX2RyaXZlcjsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNwdWlkbGVfZ292ZXJub3JzOworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY3B1aWRsZV9kZXRlY3RlZF9kZXZpY2VzOworZXh0ZXJuIHN0cnVjdCBtdXRleCBjcHVpZGxlX2xvY2s7CitleHRlcm4gc3BpbmxvY2tfdCBjcHVpZGxlX2RyaXZlcl9sb2NrOworCisvKiBpZGxlIGxvb3AgKi8KK2V4dGVybiB2b2lkIGNwdWlkbGVfaW5zdGFsbF9pZGxlX2hhbmRsZXIodm9pZCk7CitleHRlcm4gdm9pZCBjcHVpZGxlX3VuaW5zdGFsbF9pZGxlX2hhbmRsZXIodm9pZCk7CisKKy8qIGdvdmVybm9ycyAqLworZXh0ZXJuIGludCBjcHVpZGxlX3N3aXRjaF9nb3Zlcm5vcihzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqZ292KTsKKworLyogc3lzZnMgKi8KK2V4dGVybiBpbnQgY3B1aWRsZV9hZGRfY2xhc3Nfc3lzZnMoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKTsKK2V4dGVybiB2b2lkIGNwdWlkbGVfcmVtb3ZlX2NsYXNzX3N5c2ZzKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNscyk7CitleHRlcm4gaW50IGNwdWlkbGVfYWRkX3N0YXRlX3N5c2ZzKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiB2b2lkIGNwdWlkbGVfcmVtb3ZlX3N0YXRlX3N5c2ZzKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2aWNlKTsKK2V4dGVybiBpbnQgY3B1aWRsZV9hZGRfc3lzZnMoc3RydWN0IHN5c19kZXZpY2UgKnN5c2Rldik7CitleHRlcm4gdm9pZCBjcHVpZGxlX3JlbW92ZV9zeXNmcyhzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KTsKKworI2VuZGlmIC8qIF9fRFJJVkVSX0NQVUlETEVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2RyaXZlci5jIGIvZHJpdmVycy9jcHVpZGxlL2RyaXZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNTcwMDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvZHJpdmVyLmMKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIGRyaXZlci5jIC0gZHJpdmVyIHN1cHBvcnQKKyAqCisgKiAoQykgMjAwNi0yMDA3IFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgorICogICAgICAgICAgICAgICBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgICAgQWRhbSBCZWxheSA8YWJlbGF5QG5vdmVsbC5jb20+CisgKgorICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgorCisjaW5jbHVkZSAiY3B1aWRsZS5oIgorCitzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgKmNwdWlkbGVfY3Vycl9kcml2ZXI7CitERUZJTkVfU1BJTkxPQ0soY3B1aWRsZV9kcml2ZXJfbG9jayk7CisKKy8qKgorICogY3B1aWRsZV9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlcnMgYSBkcml2ZXIKKyAqIEBkcnY6IHRoZSBkcml2ZXIKKyAqLworaW50IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2KQoreworCWlmICghZHJ2KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmY3B1aWRsZV9kcml2ZXJfbG9jayk7CisJaWYgKGNwdWlkbGVfY3Vycl9kcml2ZXIpIHsKKwkJc3Bpbl91bmxvY2soJmNwdWlkbGVfZHJpdmVyX2xvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwljcHVpZGxlX2N1cnJfZHJpdmVyID0gZHJ2OworCXNwaW5fdW5sb2NrKCZjcHVpZGxlX2RyaXZlcl9sb2NrKTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjcHVpZGxlX3JlZ2lzdGVyX2RyaXZlcik7CisKKy8qKgorICogY3B1aWRsZV91bnJlZ2lzdGVyX2RyaXZlciAtIHVucmVnaXN0ZXJzIGEgZHJpdmVyCisgKiBAZHJ2OiB0aGUgZHJpdmVyCisgKi8KK3ZvaWQgY3B1aWRsZV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgY3B1aWRsZV9kcml2ZXIgKmRydikKK3sKKwlpZiAoIWRydikKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrKCZjcHVpZGxlX2RyaXZlcl9sb2NrKTsKKwljcHVpZGxlX2N1cnJfZHJpdmVyID0gTlVMTDsKKwlzcGluX3VubG9jaygmY3B1aWRsZV9kcml2ZXJfbG9jayk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGNwdWlkbGVfdW5yZWdpc3Rlcl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9yLmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY5OWNiMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vci5jCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogZ292ZXJub3IuYyAtIGdvdmVybm9yIHN1cHBvcnQKKyAqCisgKiAoQykgMjAwNi0yMDA3IFZlbmthdGVzaCBQYWxsaXBhZGkgPHZlbmthdGVzaC5wYWxsaXBhZGlAaW50ZWwuY29tPgorICogICAgICAgICAgICAgICBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqICAgICAgICAgICAgICAgQWRhbSBCZWxheSA8YWJlbGF5QG5vdmVsbC5jb20+CisgKgorICogVGhpcyBjb2RlIGlzIGxpY2VuY2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgorCisjaW5jbHVkZSAiY3B1aWRsZS5oIgorCitMSVNUX0hFQUQoY3B1aWRsZV9nb3Zlcm5vcnMpOworc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgKmNwdWlkbGVfY3Vycl9nb3Zlcm5vcjsKKworLyoqCisgKiBfX2NwdWlkbGVfZmluZF9nb3Zlcm5vciAtIGZpbmRzIGEgZ292ZXJub3Igb2YgdGhlIHNwZWNpZmllZCBuYW1lCisgKiBAc3RyOiB0aGUgbmFtZQorICoKKyAqIE11c3QgYmUgY2FsbGVkIHdpdGggY3B1aWRsZV9sb2NrIGFxdWlyZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqIF9fY3B1aWRsZV9maW5kX2dvdmVybm9yKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqZ292OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShnb3YsICZjcHVpZGxlX2dvdmVybm9ycywgZ292ZXJub3JfbGlzdCkKKwkJaWYgKCFzdHJuaWNtcChzdHIsIGdvdi0+bmFtZSwgQ1BVSURMRV9OQU1FX0xFTikpCisJCQlyZXR1cm4gZ292OworCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qKgorICogY3B1aWRsZV9zd2l0Y2hfZ292ZXJub3IgLSBjaGFuZ2VzIHRoZSBnb3Zlcm5vcgorICogQGdvdjogdGhlIG5ldyB0YXJnZXQgZ292ZXJub3IKKyAqCisgKiBOT1RFOiAiZ292IiBjYW4gYmUgTlVMTCB0byBzcGVjaWZ5IGRpc2FibGVkCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIGNwdWlkbGVfbG9jayBhcXVpcmVkLgorICovCitpbnQgY3B1aWRsZV9zd2l0Y2hfZ292ZXJub3Ioc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgKmdvdikKK3sKKwlzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldjsKKworCWlmIChnb3YgPT0gY3B1aWRsZV9jdXJyX2dvdmVybm9yKQorCQlyZXR1cm4gMDsKKworCWNwdWlkbGVfdW5pbnN0YWxsX2lkbGVfaGFuZGxlcigpOworCisJaWYgKGNwdWlkbGVfY3Vycl9nb3Zlcm5vcikgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmNwdWlkbGVfZGV0ZWN0ZWRfZGV2aWNlcywgZGV2aWNlX2xpc3QpCisJCQljcHVpZGxlX2Rpc2FibGVfZGV2aWNlKGRldik7CisJCW1vZHVsZV9wdXQoY3B1aWRsZV9jdXJyX2dvdmVybm9yLT5vd25lcik7CisJfQorCisJY3B1aWRsZV9jdXJyX2dvdmVybm9yID0gZ292OworCisJaWYgKGdvdikgeworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+b3duZXIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmY3B1aWRsZV9kZXRlY3RlZF9kZXZpY2VzLCBkZXZpY2VfbGlzdCkKKwkJCWNwdWlkbGVfZW5hYmxlX2RldmljZShkZXYpOworCQljcHVpZGxlX2luc3RhbGxfaWRsZV9oYW5kbGVyKCk7CisJCXByaW50ayhLRVJOX0lORk8gImNwdWlkbGU6IHVzaW5nIGdvdmVybm9yICVzXG4iLCBnb3YtPm5hbWUpOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNwdWlkbGVfcmVnaXN0ZXJfZ292ZXJub3IgLSByZWdpc3RlcnMgYSBnb3Zlcm5vcgorICogQGdvdjogdGhlIGdvdmVybm9yCisgKi8KK2ludCBjcHVpZGxlX3JlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVpZGxlX2dvdmVybm9yICpnb3YpCit7CisJaW50IHJldCA9IC1FRVhJU1Q7CisKKwlpZiAoIWdvdiB8fCAhZ292LT5zZWxlY3QpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmY3B1aWRsZV9sb2NrKTsKKwlpZiAoX19jcHVpZGxlX2ZpbmRfZ292ZXJub3IoZ292LT5uYW1lKSA9PSBOVUxMKSB7CisJCXJldCA9IDA7CisJCWxpc3RfYWRkX3RhaWwoJmdvdi0+Z292ZXJub3JfbGlzdCwgJmNwdWlkbGVfZ292ZXJub3JzKTsKKwkJaWYgKCFjcHVpZGxlX2N1cnJfZ292ZXJub3IgfHwKKwkJICAgIGNwdWlkbGVfY3Vycl9nb3Zlcm5vci0+cmF0aW5nIDwgZ292LT5yYXRpbmcpCisJCQljcHVpZGxlX3N3aXRjaF9nb3Zlcm5vcihnb3YpOworCX0KKwltdXRleF91bmxvY2soJmNwdWlkbGVfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MX0dQTChjcHVpZGxlX3JlZ2lzdGVyX2dvdmVybm9yKTsKKworLyoqCisgKiBjcHVpZGxlX3JlcGxhY2VfZ292ZXJub3IgLSBmaW5kIGEgcmVwbGFjZW1lbnQgZ292ZXJub3IKKyAqIEBleGNsdWRlX3JhdGluZzogdGhlIHJhdGluZyB0aGF0IHdpbGwgYmUgc2tpcHBlZCB3aGlsZSBsb29raW5nIGZvcgorICogbmV3IGdvdmVybm9yLgorICovCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgKmNwdWlkbGVfcmVwbGFjZV9nb3Zlcm5vcihpbnQgZXhjbHVkZV9yYXRpbmcpCit7CisJc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgKmdvdjsKKwlzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqcmV0X2dvdiA9IE5VTEw7CisJdW5zaWduZWQgaW50IG1heF9yYXRpbmcgPSAwOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShnb3YsICZjcHVpZGxlX2dvdmVybm9ycywgZ292ZXJub3JfbGlzdCkgeworCQlpZiAoZ292LT5yYXRpbmcgPT0gZXhjbHVkZV9yYXRpbmcpCisJCQljb250aW51ZTsKKwkJaWYgKGdvdi0+cmF0aW5nID4gbWF4X3JhdGluZykgeworCQkJbWF4X3JhdGluZyA9IGdvdi0+cmF0aW5nOworCQkJcmV0X2dvdiA9IGdvdjsKKwkJfQorCX0KKworCXJldHVybiByZXRfZ292OworfQorCisvKioKKyAqIGNwdWlkbGVfdW5yZWdpc3Rlcl9nb3Zlcm5vciAtIHVucmVnaXN0ZXJzIGEgZ292ZXJub3IKKyAqIEBnb3Y6IHRoZSBnb3Zlcm5vcgorICovCit2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcl9nb3Zlcm5vcihzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqZ292KQoreworCWlmICghZ292KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZjcHVpZGxlX2xvY2spOworCWlmIChnb3YgPT0gY3B1aWRsZV9jdXJyX2dvdmVybm9yKSB7CisJCXN0cnVjdCBjcHVpZGxlX2dvdmVybm9yICpuZXdfZ292OworCQluZXdfZ292ID0gY3B1aWRsZV9yZXBsYWNlX2dvdmVybm9yKGdvdi0+cmF0aW5nKTsKKwkJY3B1aWRsZV9zd2l0Y2hfZ292ZXJub3IobmV3X2dvdik7CisJfQorCWxpc3RfZGVsKCZnb3YtPmdvdmVybm9yX2xpc3QpOworCW11dGV4X3VubG9jaygmY3B1aWRsZV9sb2NrKTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwoY3B1aWRsZV91bnJlZ2lzdGVyX2dvdmVybm9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvTWFrZWZpbGUgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTEyNzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorIworIyBNYWtlZmlsZSBmb3IgY3B1aWRsZSBnb3Zlcm5vcnMuCisjCisKK29iai0kKENPTkZJR19DUFVfSURMRV9HT1ZfTEFEREVSKSArPSBsYWRkZXIubworb2JqLSQoQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VKSArPSBtZW51Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbGFkZGVyLmMgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjY2ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL2xhZGRlci5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogbGFkZGVyLmMgLSB0aGUgcmVzaWRlbmN5IGxhZGRlciBhbGdvcml0aG0KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyIEFuZHkgR3JvdmVyIDxhbmRyZXcuZ3JvdmVyQGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgUGF1bCBEaWVmZW5iYXVnaCA8cGF1bC5zLmRpZWZlbmJhdWdoQGludGVsLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgorICoKKyAqIChDKSAyMDA2LTIwMDcgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CisgKiAgICAgICAgICAgICAgIFNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorICogICAgICAgICAgICAgICBBZGFtIEJlbGF5IDxhYmVsYXlAbm92ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3kuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNkZWZpbmUgUFJPTU9USU9OX0NPVU5UIDQKKyNkZWZpbmUgREVNT1RJT05fQ09VTlQgMQorCitzdHJ1Y3QgbGFkZGVyX2RldmljZV9zdGF0ZSB7CisJc3RydWN0IHsKKwkJdTMyIHByb21vdGlvbl9jb3VudDsKKwkJdTMyIGRlbW90aW9uX2NvdW50OworCQl1MzIgcHJvbW90aW9uX3RpbWU7CisJCXUzMiBkZW1vdGlvbl90aW1lOworCX0gdGhyZXNob2xkOworCXN0cnVjdCB7CisJCWludCBwcm9tb3Rpb25fY291bnQ7CisJCWludCBkZW1vdGlvbl9jb3VudDsKKwl9IHN0YXRzOworfTsKKworc3RydWN0IGxhZGRlcl9kZXZpY2UgeworCXN0cnVjdCBsYWRkZXJfZGV2aWNlX3N0YXRlIHN0YXRlc1tDUFVJRExFX1NUQVRFX01BWF07CisJaW50IGxhc3Rfc3RhdGVfaWR4OworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsYWRkZXJfZGV2aWNlLCBsYWRkZXJfZGV2aWNlcyk7CisKKy8qKgorICogbGFkZGVyX2RvX3NlbGVjdGlvbiAtIHByZXBhcmVzIHByaXZhdGUgZGF0YSBmb3IgYSBzdGF0ZSBjaGFuZ2UKKyAqIEBsZGV2OiB0aGUgbGFkZGVyIGRldmljZQorICogQG9sZF9pZHg6IHRoZSBjdXJyZW50IHN0YXRlIGluZGV4CisgKiBAbmV3X2lkeDogdGhlIG5ldyB0YXJnZXQgc3RhdGUgaW5kZXgKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxhZGRlcl9kb19zZWxlY3Rpb24oc3RydWN0IGxhZGRlcl9kZXZpY2UgKmxkZXYsCisJCQkJICAgICAgIGludCBvbGRfaWR4LCBpbnQgbmV3X2lkeCkKK3sKKwlsZGV2LT5zdGF0ZXNbb2xkX2lkeF0uc3RhdHMucHJvbW90aW9uX2NvdW50ID0gMDsKKwlsZGV2LT5zdGF0ZXNbb2xkX2lkeF0uc3RhdHMuZGVtb3Rpb25fY291bnQgPSAwOworCWxkZXYtPmxhc3Rfc3RhdGVfaWR4ID0gbmV3X2lkeDsKK30KKworLyoqCisgKiBsYWRkZXJfc2VsZWN0X3N0YXRlIC0gc2VsZWN0cyB0aGUgbmV4dCBzdGF0ZSB0byBlbnRlcgorICogQGRldjogdGhlIENQVQorICovCitzdGF0aWMgaW50IGxhZGRlcl9zZWxlY3Rfc3RhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGxhZGRlcl9kZXZpY2UgKmxkZXYgPSAmX19nZXRfY3B1X3ZhcihsYWRkZXJfZGV2aWNlcyk7CisJc3RydWN0IGxhZGRlcl9kZXZpY2Vfc3RhdGUgKmxhc3Rfc3RhdGU7CisJaW50IGxhc3RfcmVzaWRlbmN5LCBsYXN0X2lkeCA9IGxkZXYtPmxhc3Rfc3RhdGVfaWR4OworCisJaWYgKHVubGlrZWx5KCFsZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlsYXN0X3N0YXRlID0gJmxkZXYtPnN0YXRlc1tsYXN0X2lkeF07CisKKwlpZiAoZGV2LT5zdGF0ZXNbbGFzdF9pZHhdLmZsYWdzICYgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQpCisJCWxhc3RfcmVzaWRlbmN5ID0gY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KSAtIGRldi0+c3RhdGVzW2xhc3RfaWR4XS5leGl0X2xhdGVuY3k7CisJZWxzZQorCQlsYXN0X3Jlc2lkZW5jeSA9IGxhc3Rfc3RhdGUtPnRocmVzaG9sZC5wcm9tb3Rpb25fdGltZSArIDE7CisKKwkvKiBjb25zaWRlciBwcm9tb3Rpb24gKi8KKwlpZiAobGFzdF9pZHggPCBkZXYtPnN0YXRlX2NvdW50IC0gMSAmJgorCSAgICBsYXN0X3Jlc2lkZW5jeSA+IGxhc3Rfc3RhdGUtPnRocmVzaG9sZC5wcm9tb3Rpb25fdGltZSAmJgorCSAgICBkZXYtPnN0YXRlc1tsYXN0X2lkeCArIDFdLmV4aXRfbGF0ZW5jeSA8PSBzeXN0ZW1fbGF0ZW5jeV9jb25zdHJhaW50KCkpIHsKKwkJbGFzdF9zdGF0ZS0+c3RhdHMucHJvbW90aW9uX2NvdW50Kys7CisJCWxhc3Rfc3RhdGUtPnN0YXRzLmRlbW90aW9uX2NvdW50ID0gMDsKKwkJaWYgKGxhc3Rfc3RhdGUtPnN0YXRzLnByb21vdGlvbl9jb3VudCA+PSBsYXN0X3N0YXRlLT50aHJlc2hvbGQucHJvbW90aW9uX2NvdW50KSB7CisJCQlsYWRkZXJfZG9fc2VsZWN0aW9uKGxkZXYsIGxhc3RfaWR4LCBsYXN0X2lkeCArIDEpOworCQkJcmV0dXJuIGxhc3RfaWR4ICsgMTsKKwkJfQorCX0KKworCS8qIGNvbnNpZGVyIGRlbW90aW9uICovCisJaWYgKGxhc3RfaWR4ID4gMCAmJgorCSAgICBsYXN0X3Jlc2lkZW5jeSA8IGxhc3Rfc3RhdGUtPnRocmVzaG9sZC5kZW1vdGlvbl90aW1lKSB7CisJCWxhc3Rfc3RhdGUtPnN0YXRzLmRlbW90aW9uX2NvdW50Kys7CisJCWxhc3Rfc3RhdGUtPnN0YXRzLnByb21vdGlvbl9jb3VudCA9IDA7CisJCWlmIChsYXN0X3N0YXRlLT5zdGF0cy5kZW1vdGlvbl9jb3VudCA+PSBsYXN0X3N0YXRlLT50aHJlc2hvbGQuZGVtb3Rpb25fY291bnQpIHsKKwkJCWxhZGRlcl9kb19zZWxlY3Rpb24obGRldiwgbGFzdF9pZHgsIGxhc3RfaWR4IC0gMSk7CisJCQlyZXR1cm4gbGFzdF9pZHggLSAxOworCQl9CisJfQorCisJLyogb3RoZXJ3aXNlIHJlbWFpbiBhdCB0aGUgY3VycmVudCBzdGF0ZSAqLworCXJldHVybiBsYXN0X2lkeDsKK30KKworLyoqCisgKiBsYWRkZXJfZW5hYmxlX2RldmljZSAtIHNldHVwIGZvciB0aGUgZ292ZXJub3IKKyAqIEBkZXY6IHRoZSBDUFUKKyAqLworc3RhdGljIGludCBsYWRkZXJfZW5hYmxlX2RldmljZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbGFkZGVyX2RldmljZSAqbGRldiA9ICZwZXJfY3B1KGxhZGRlcl9kZXZpY2VzLCBkZXYtPmNwdSk7CisJc3RydWN0IGxhZGRlcl9kZXZpY2Vfc3RhdGUgKmxzdGF0ZTsKKwlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGU7CisKKwlsZGV2LT5sYXN0X3N0YXRlX2lkeCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2LT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJCXN0YXRlID0gJmRldi0+c3RhdGVzW2ldOworCQlsc3RhdGUgPSAmbGRldi0+c3RhdGVzW2ldOworCisJCWxzdGF0ZS0+c3RhdHMucHJvbW90aW9uX2NvdW50ID0gMDsKKwkJbHN0YXRlLT5zdGF0cy5kZW1vdGlvbl9jb3VudCA9IDA7CisKKwkJbHN0YXRlLT50aHJlc2hvbGQucHJvbW90aW9uX2NvdW50ID0gUFJPTU9USU9OX0NPVU5UOworCQlsc3RhdGUtPnRocmVzaG9sZC5kZW1vdGlvbl9jb3VudCA9IERFTU9USU9OX0NPVU5UOworCisJCWlmIChpIDwgZGV2LT5zdGF0ZV9jb3VudCAtIDEpCisJCQlsc3RhdGUtPnRocmVzaG9sZC5wcm9tb3Rpb25fdGltZSA9IHN0YXRlLT5leGl0X2xhdGVuY3k7CisJCWlmIChpID4gMCkKKwkJCWxzdGF0ZS0+dGhyZXNob2xkLmRlbW90aW9uX3RpbWUgPSBzdGF0ZS0+ZXhpdF9sYXRlbmN5OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgbGFkZGVyX2dvdmVybm9yID0geworCS5uYW1lID0JCSJsYWRkZXIiLAorCS5yYXRpbmcgPQkxMCwKKwkuZW5hYmxlID0JbGFkZGVyX2VuYWJsZV9kZXZpY2UsCisJLnNlbGVjdCA9CWxhZGRlcl9zZWxlY3Rfc3RhdGUsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCit9OworCisvKioKKyAqIGluaXRfbGFkZGVyIC0gaW5pdGlhbGl6ZXMgdGhlIGdvdmVybm9yCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbGFkZGVyKHZvaWQpCit7CisJcmV0dXJuIGNwdWlkbGVfcmVnaXN0ZXJfZ292ZXJub3IoJmxhZGRlcl9nb3Zlcm5vcik7Cit9CisKKy8qKgorICogZXhpdF9sYWRkZXIgLSBleGl0cyB0aGUgZ292ZXJub3IKKyAqLworc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbGFkZGVyKHZvaWQpCit7CisJY3B1aWRsZV91bnJlZ2lzdGVyX2dvdmVybm9yKCZsYWRkZXJfZ292ZXJub3IpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChpbml0X2xhZGRlcik7Cittb2R1bGVfZXhpdChleGl0X2xhZGRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYyBiL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OWQ0NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NwdWlkbGUvZ292ZXJub3JzL21lbnUuYwpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIG1lbnUuYyAtIHRoZSBtZW51IGlkbGUgZ292ZXJub3IKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwNyBBZGFtIEJlbGF5IDxhYmVsYXlAbm92ZWxsLmNvbT4KKyAqCisgKiBUaGlzIGNvZGUgaXMgbGljZW5jZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY3B1aWRsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3kuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgva3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvdGljay5oPgorCisjZGVmaW5lIEJSRUFLX0ZVWloJNAkvKiA0IHVzICovCisKK3N0cnVjdCBtZW51X2RldmljZSB7CisJaW50CQlsYXN0X3N0YXRlX2lkeDsKKworCXVuc2lnbmVkIGludAlleHBlY3RlZF91czsKKwl1bnNpZ25lZCBpbnQJcHJlZGljdGVkX3VzOworCXVuc2lnbmVkIGludAlsYXN0X21lYXN1cmVkX3VzOworCXVuc2lnbmVkIGludAllbGFwc2VkX3VzOworfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBtZW51X2RldmljZSwgbWVudV9kZXZpY2VzKTsKKworLyoqCisgKiBtZW51X3NlbGVjdCAtIHNlbGVjdHMgdGhlIG5leHQgaWRsZSBzdGF0ZSB0byBlbnRlcgorICogQGRldjogdGhlIENQVQorICovCitzdGF0aWMgaW50IG1lbnVfc2VsZWN0KHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZW51X2RldmljZSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKG1lbnVfZGV2aWNlcyk7CisJaW50IGk7CisKKwkvKiBkZXRlcm1pbmUgdGhlIGV4cGVjdGVkIHJlc2lkZW5jeSB0aW1lICovCisJZGF0YS0+ZXhwZWN0ZWRfdXMgPQorCQkodTMyKSBrdGltZV90b19ucyh0aWNrX25vaHpfZ2V0X3NsZWVwX2xlbmd0aCgpKSAvIDEwMDA7CisKKwkvKiBmaW5kIHRoZSBkZWVwZXN0IGlkbGUgc3RhdGUgdGhhdCBzYXRpc2ZpZXMgb3VyIGNvbnN0cmFpbnRzICovCisJZm9yIChpID0gMTsgaSA8IGRldi0+c3RhdGVfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqcyA9ICZkZXYtPnN0YXRlc1tpXTsKKworCQlpZiAocy0+dGFyZ2V0X3Jlc2lkZW5jeSA+IGRhdGEtPmV4cGVjdGVkX3VzKQorCQkJYnJlYWs7CisJCWlmIChzLT50YXJnZXRfcmVzaWRlbmN5ID4gZGF0YS0+cHJlZGljdGVkX3VzKQorCQkJYnJlYWs7CisJCWlmIChzLT5leGl0X2xhdGVuY3kgPiBzeXN0ZW1fbGF0ZW5jeV9jb25zdHJhaW50KCkpCisJCQlicmVhazsKKwl9CisKKwlkYXRhLT5sYXN0X3N0YXRlX2lkeCA9IGkgLSAxOworCXJldHVybiBpIC0gMTsKK30KKworLyoqCisgKiBtZW51X3JlZmxlY3QgLSBhdHRlbXB0cyB0byBndWVzcyB3aGF0IGhhcHBlbmVkIGFmdGVyIGVudHJ5CisgKiBAZGV2OiB0aGUgQ1BVCisgKgorICogTk9URTogaXQncyBpbXBvcnRhbnQgdG8gYmUgZmFzdCBoZXJlIGJlY2F1c2UgdGhpcyBvcGVyYXRpb24gd2lsbCBhZGQgdG8KKyAqICAgICAgIHRoZSBvdmVyYWxsIGV4aXQgbGF0ZW5jeS4KKyAqLworc3RhdGljIHZvaWQgbWVudV9yZWZsZWN0KHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtZW51X2RldmljZSAqZGF0YSA9ICZfX2dldF9jcHVfdmFyKG1lbnVfZGV2aWNlcyk7CisJaW50IGxhc3RfaWR4ID0gZGF0YS0+bGFzdF9zdGF0ZV9pZHg7CisJdW5zaWduZWQgaW50IG1lYXN1cmVkX3VzID0KKwkJY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koZGV2KSArIGRhdGEtPmVsYXBzZWRfdXM7CisJc3RydWN0IGNwdWlkbGVfc3RhdGUgKnRhcmdldCA9ICZkZXYtPnN0YXRlc1tsYXN0X2lkeF07CisKKwkvKgorCSAqIFVnaCwgdGhpcyBpZGxlIHN0YXRlIGRvZXNuJ3Qgc3VwcG9ydCByZXNpZGVuY3kgbWVhc3VyZW1lbnRzLCBzbyB3ZQorCSAqIGFyZSBiYXNpY2FsbHkgbG9zdCBpbiB0aGUgZGFyay4gIEFzIGEgY29tcHJvbWlzZSwgYXNzdW1lIHdlIHNsZXB0CisJICogZm9yIG9uZSBmdWxsIHN0YW5kYXJkIHRpbWVyIHRpY2suICBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHRoaXMKKwkgKiBjb3VsZCBwb3RlbnRpYWxseSByZXN1bHQgaW4gYSBzdWJvcHRpbWFsIHN0YXRlIHRyYW5zaXRpb24uCisJICovCisJaWYgKCEodGFyZ2V0LT5mbGFncyAmIENQVUlETEVfRkxBR19USU1FX1ZBTElEKSkKKwkJbWVhc3VyZWRfdXMgPSBVU0VDX1BFUl9TRUMgLyBIWjsKKworCS8qIFByZWRpY3QgdGltZSByZW1haW5pbmcgdW50aWwgbmV4dCBicmVhayBldmVudCAqLworCWlmIChtZWFzdXJlZF91cyArIEJSRUFLX0ZVWlogPCBkYXRhLT5leHBlY3RlZF91cyAtIHRhcmdldC0+ZXhpdF9sYXRlbmN5KSB7CisJCWRhdGEtPnByZWRpY3RlZF91cyA9IG1heChtZWFzdXJlZF91cywgZGF0YS0+bGFzdF9tZWFzdXJlZF91cyk7CisJCWRhdGEtPmxhc3RfbWVhc3VyZWRfdXMgPSBtZWFzdXJlZF91czsKKwkJZGF0YS0+ZWxhcHNlZF91cyA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKGRhdGEtPmVsYXBzZWRfdXMgPCBkYXRhLT5lbGFwc2VkX3VzICsgbWVhc3VyZWRfdXMpCisJCQlkYXRhLT5lbGFwc2VkX3VzID0gbWVhc3VyZWRfdXM7CisJCWVsc2UKKwkJCWRhdGEtPmVsYXBzZWRfdXMgPSAtMTsKKwkJZGF0YS0+cHJlZGljdGVkX3VzID0gbWF4KG1lYXN1cmVkX3VzLCBkYXRhLT5sYXN0X21lYXN1cmVkX3VzKTsKKwl9Cit9CisKKy8qKgorICogbWVudV9lbmFibGVfZGV2aWNlIC0gc2NhbnMgYSBDUFUncyBzdGF0ZXMgYW5kIGRvZXMgc2V0dXAKKyAqIEBkZXY6IHRoZSBDUFUKKyAqLworc3RhdGljIGludCBtZW51X2VuYWJsZV9kZXZpY2Uoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1lbnVfZGV2aWNlICpkYXRhID0gJnBlcl9jcHUobWVudV9kZXZpY2VzLCBkZXYtPmNwdSk7CisKKwltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtZW51X2RldmljZSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciBtZW51X2dvdmVybm9yID0geworCS5uYW1lID0JCSJtZW51IiwKKwkucmF0aW5nID0JMjAsCisJLmVuYWJsZSA9CW1lbnVfZW5hYmxlX2RldmljZSwKKwkuc2VsZWN0ID0JbWVudV9zZWxlY3QsCisJLnJlZmxlY3QgPQltZW51X3JlZmxlY3QsCisJLm93bmVyID0JVEhJU19NT0RVTEUsCit9OworCisvKioKKyAqIGluaXRfbWVudSAtIGluaXRpYWxpemVzIHRoZSBnb3Zlcm5vcgorICovCitzdGF0aWMgaW50IF9faW5pdCBpbml0X21lbnUodm9pZCkKK3sKKwlyZXR1cm4gY3B1aWRsZV9yZWdpc3Rlcl9nb3Zlcm5vcigmbWVudV9nb3Zlcm5vcik7Cit9CisKKy8qKgorICogZXhpdF9tZW51IC0gZXhpdHMgdGhlIGdvdmVybm9yCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X21lbnUodm9pZCkKK3sKKwljcHVpZGxlX3VucmVnaXN0ZXJfZ292ZXJub3IoJm1lbnVfZ292ZXJub3IpOworfQorCitNT0RVTEVfTElDRU5TRSgiR1BMIik7Cittb2R1bGVfaW5pdChpbml0X21lbnUpOworbW9kdWxlX2V4aXQoZXhpdF9tZW51KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9zeXNmcy5jIGIvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYzNTE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY3B1aWRsZS9zeXNmcy5jCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogc3lzZnMuYyAtIHN5c2ZzIHN1cHBvcnQKKyAqCisgKiAoQykgMjAwNi0yMDA3IFNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKworI2luY2x1ZGUgImNwdWlkbGUuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBzeXNmc19zd2l0Y2g7CitzdGF0aWMgaW50IF9faW5pdCBjcHVpZGxlX3N5c2ZzX3NldHVwKGNoYXIgKnVudXNlZCkKK3sKKwlzeXNmc19zd2l0Y2ggPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgiY3B1aWRsZV9zeXNmc19zd2l0Y2giLCBjcHVpZGxlX3N5c2ZzX3NldHVwKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hdmFpbGFibGVfZ292ZXJub3JzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IGkgPSAwOworCXN0cnVjdCBjcHVpZGxlX2dvdmVybm9yICp0bXA7CisKKwltdXRleF9sb2NrKCZjcHVpZGxlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmY3B1aWRsZV9nb3Zlcm5vcnMsIGdvdmVybm9yX2xpc3QpIHsKKwkJaWYgKGkgPj0gKHNzaXplX3QpICgoUEFHRV9TSVpFL3NpemVvZihjaGFyKSkgLSBDUFVJRExFX05BTUVfTEVOIC0gMikpCisJCQlnb3RvIG91dDsKKwkJaSArPSBzY25wcmludGYoJmJ1ZltpXSwgQ1BVSURMRV9OQU1FX0xFTiwgIiVzICIsIHRtcC0+bmFtZSk7CisJfQorCitvdXQ6CisJaSs9IHNwcmludGYoJmJ1ZltpXSwgIlxuIik7CisJbXV0ZXhfdW5sb2NrKCZjcHVpZGxlX2xvY2spOworCXJldHVybiBpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2N1cnJlbnRfZHJpdmVyKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKK3sKKwlzc2l6ZV90IHJldDsKKworCXNwaW5fbG9jaygmY3B1aWRsZV9kcml2ZXJfbG9jayk7CisJaWYgKGNwdWlkbGVfY3Vycl9kcml2ZXIpCisJCXJldCA9IHNwcmludGYoYnVmLCAiJXNcbiIsIGNwdWlkbGVfY3Vycl9kcml2ZXItPm5hbWUpOworCWVsc2UKKwkJcmV0ID0gc3ByaW50ZihidWYsICJub25lXG4iKTsKKwlzcGluX3VubG9jaygmY3B1aWRsZV9kcml2ZXJfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2N1cnJlbnRfZ292ZXJub3Ioc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXNzaXplX3QgcmV0OworCisJbXV0ZXhfbG9jaygmY3B1aWRsZV9sb2NrKTsKKwlpZiAoY3B1aWRsZV9jdXJyX2dvdmVybm9yKQorCQlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjcHVpZGxlX2N1cnJfZ292ZXJub3ItPm5hbWUpOworCWVsc2UKKwkJcmV0ID0gc3ByaW50ZihidWYsICJub25lXG4iKTsKKwltdXRleF91bmxvY2soJmNwdWlkbGVfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9jdXJyZW50X2dvdmVybm9yKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCisJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJY2hhciBnb3ZfbmFtZVtDUFVJRExFX05BTUVfTEVOXTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKwlzaXplX3QgbGVuID0gY291bnQ7CisJc3RydWN0IGNwdWlkbGVfZ292ZXJub3IgKmdvdjsKKworCWlmICghbGVuIHx8IGxlbiA+PSBzaXplb2YoZ292X25hbWUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweShnb3ZfbmFtZSwgYnVmLCBsZW4pOworCWdvdl9uYW1lW2xlbl0gPSAnXDAnOworCWlmIChnb3ZfbmFtZVtsZW4gLSAxXSA9PSAnXG4nKQorCQlnb3ZfbmFtZVstLWxlbl0gPSAnXDAnOworCisJbXV0ZXhfbG9jaygmY3B1aWRsZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ292LCAmY3B1aWRsZV9nb3Zlcm5vcnMsIGdvdmVybm9yX2xpc3QpIHsKKwkJaWYgKHN0cmxlbihnb3YtPm5hbWUpID09IGxlbiAmJiAhc3RyY21wKGdvdi0+bmFtZSwgZ292X25hbWUpKSB7CisJCQlyZXQgPSBjcHVpZGxlX3N3aXRjaF9nb3Zlcm5vcihnb3YpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJmNwdWlkbGVfbG9jayk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgU1lTREVWX0FUVFIoY3VycmVudF9kcml2ZXIsIDA0NDQsIHNob3dfY3VycmVudF9kcml2ZXIsIE5VTEwpOworc3RhdGljIFNZU0RFVl9BVFRSKGN1cnJlbnRfZ292ZXJub3Jfcm8sIDA0NDQsIHNob3dfY3VycmVudF9nb3Zlcm5vciwgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpjcHVjbGFzc19kZWZhdWx0X2F0dHJzW10gPSB7CisJJmF0dHJfY3VycmVudF9kcml2ZXIuYXR0ciwKKwkmYXR0cl9jdXJyZW50X2dvdmVybm9yX3JvLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIFNZU0RFVl9BVFRSKGF2YWlsYWJsZV9nb3Zlcm5vcnMsIDA0NDQsIHNob3dfYXZhaWxhYmxlX2dvdmVybm9ycywgTlVMTCk7CitzdGF0aWMgU1lTREVWX0FUVFIoY3VycmVudF9nb3Zlcm5vciwgMDY0NCwgc2hvd19jdXJyZW50X2dvdmVybm9yLAorCXN0b3JlX2N1cnJlbnRfZ292ZXJub3IpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY3B1Y2xhc3Nfc3dpdGNoX2F0dHJzW10gPSB7CisJJmF0dHJfYXZhaWxhYmxlX2dvdmVybm9ycy5hdHRyLAorCSZhdHRyX2N1cnJlbnRfZHJpdmVyLmF0dHIsCisJJmF0dHJfY3VycmVudF9nb3Zlcm5vci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNwdWNsYXNzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gY3B1Y2xhc3NfZGVmYXVsdF9hdHRycywKKwkubmFtZSA9ICJjcHVpZGxlIiwKK307CisKKy8qKgorICogY3B1aWRsZV9hZGRfY2xhc3Nfc3lzZnMgLSBhZGQgQ1BVIGdsb2JhbCBzeXNmcyBhdHRyaWJ1dGVzCisgKi8KK2ludCBjcHVpZGxlX2FkZF9jbGFzc19zeXNmcyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbHMpCit7CisJaWYgKHN5c2ZzX3N3aXRjaCkKKwkJY3B1Y2xhc3NfYXR0cl9ncm91cC5hdHRycyA9IGNwdWNsYXNzX3N3aXRjaF9hdHRyczsKKworCXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoJmNscy0+a3NldC5rb2JqLCAmY3B1Y2xhc3NfYXR0cl9ncm91cCk7Cit9CisKKy8qKgorICogY3B1aWRsZV9yZW1vdmVfY2xhc3Nfc3lzZnMgLSByZW1vdmUgQ1BVIGdsb2JhbCBzeXNmcyBhdHRyaWJ1dGVzCisgKi8KK3ZvaWQgY3B1aWRsZV9yZW1vdmVfY2xhc3Nfc3lzZnMoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQoreworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xzLT5rc2V0LmtvYmosICZjcHVjbGFzc19hdHRyX2dyb3VwKTsKK30KKworc3RydWN0IGNwdWlkbGVfYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqLCBjb25zdCBjaGFyICosIHNpemVfdCBjb3VudCk7Cit9OworCisjZGVmaW5lIGRlZmluZV9vbmVfcm8oX25hbWUsIHNob3cpIFwKKwlzdGF0aWMgc3RydWN0IGNwdWlkbGVfYXR0ciBhdHRyXyMjX25hbWUgPSBfX0FUVFIoX25hbWUsIDA0NDQsIHNob3csIE5VTEwpCisjZGVmaW5lIGRlZmluZV9vbmVfcncoX25hbWUsIHNob3csIHN0b3JlKSBcCisJc3RhdGljIHN0cnVjdCBjcHVpZGxlX2F0dHIgYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCAwNjQ0LCBzaG93LCBzdG9yZSkKKworI2RlZmluZSBrb2JqX3RvX2NwdWlkbGVkZXYoaykgY29udGFpbmVyX29mKGssIHN0cnVjdCBjcHVpZGxlX2RldmljZSwga29iaikKKyNkZWZpbmUgYXR0cl90b19jcHVpZGxlYXR0cihhKSBjb250YWluZXJfb2YoYSwgc3RydWN0IGNwdWlkbGVfYXR0ciwgYXR0cikKK3N0YXRpYyBzc2l6ZV90IGNwdWlkbGVfc2hvdyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyICxjaGFyICogYnVmKQoreworCWludCByZXQgPSAtRUlPOworCXN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2ID0ga29ial90b19jcHVpZGxlZGV2KGtvYmopOworCXN0cnVjdCBjcHVpZGxlX2F0dHIgKiBjYXR0ciA9IGF0dHJfdG9fY3B1aWRsZWF0dHIoYXR0cik7CisKKwlpZiAoY2F0dHItPnNob3cpIHsKKwkJbXV0ZXhfbG9jaygmY3B1aWRsZV9sb2NrKTsKKwkJcmV0ID0gY2F0dHItPnNob3coZGV2LCBidWYpOworCQltdXRleF91bmxvY2soJmNwdWlkbGVfbG9jayk7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNwdWlkbGVfc3RvcmUoc3RydWN0IGtvYmplY3QgKiBrb2JqLCBzdHJ1Y3QgYXR0cmlidXRlICogYXR0ciwKKwkJICAgICBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHJldCA9IC1FSU87CisJc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYgPSBrb2JqX3RvX2NwdWlkbGVkZXYoa29iaik7CisJc3RydWN0IGNwdWlkbGVfYXR0ciAqIGNhdHRyID0gYXR0cl90b19jcHVpZGxlYXR0cihhdHRyKTsKKworCWlmIChjYXR0ci0+c3RvcmUpIHsKKwkJbXV0ZXhfbG9jaygmY3B1aWRsZV9sb2NrKTsKKwkJcmV0ID0gY2F0dHItPnN0b3JlKGRldiwgYnVmLCBjb3VudCk7CisJCW11dGV4X3VubG9jaygmY3B1aWRsZV9sb2NrKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY3B1aWRsZV9zeXNmc19vcHMgPSB7CisJLnNob3cgPSBjcHVpZGxlX3Nob3csCisJLnN0b3JlID0gY3B1aWRsZV9zdG9yZSwKK307CisKK3N0YXRpYyB2b2lkIGNwdWlkbGVfc3lzZnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKK3sKKwlzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldiA9IGtvYmpfdG9fY3B1aWRsZWRldihrb2JqKTsKKworCWNvbXBsZXRlKCZkZXYtPmtvYmpfdW5yZWdpc3Rlcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGt0eXBlX2NwdWlkbGUgPSB7CisJLnN5c2ZzX29wcyA9ICZjcHVpZGxlX3N5c2ZzX29wcywKKwkucmVsZWFzZSA9IGNwdWlkbGVfc3lzZnNfcmVsZWFzZSwKK307CisKK3N0cnVjdCBjcHVpZGxlX3N0YXRlX2F0dHIgeworCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGNwdWlkbGVfc3RhdGUgKiwgY2hhciAqKTsKKwlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBjcHVpZGxlX3N0YXRlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKyNkZWZpbmUgZGVmaW5lX29uZV9zdGF0ZV9ybyhfbmFtZSwgc2hvdykgXAorc3RhdGljIHN0cnVjdCBjcHVpZGxlX3N0YXRlX2F0dHIgYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLCAwNDQ0LCBzaG93LCBOVUxMKQorCisjZGVmaW5lIGRlZmluZV9zaG93X3N0YXRlX2Z1bmN0aW9uKF9uYW1lKSBcCitzdGF0aWMgc3NpemVfdCBzaG93X3N0YXRlXyMjX25hbWUoc3RydWN0IGNwdWlkbGVfc3RhdGUgKnN0YXRlLCBjaGFyICpidWYpIFwKK3sgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBzdGF0ZS0+X25hbWUpO1wKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19zdGF0ZV9uYW1lKHN0cnVjdCBjcHVpZGxlX3N0YXRlICpzdGF0ZSwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBzdGF0ZS0+bmFtZSk7Cit9CisKK2RlZmluZV9zaG93X3N0YXRlX2Z1bmN0aW9uKGV4aXRfbGF0ZW5jeSkKK2RlZmluZV9zaG93X3N0YXRlX2Z1bmN0aW9uKHBvd2VyX3VzYWdlKQorZGVmaW5lX3Nob3dfc3RhdGVfZnVuY3Rpb24odXNhZ2UpCitkZWZpbmVfc2hvd19zdGF0ZV9mdW5jdGlvbih0aW1lKQorZGVmaW5lX29uZV9zdGF0ZV9ybyhuYW1lLCBzaG93X3N0YXRlX25hbWUpOworZGVmaW5lX29uZV9zdGF0ZV9ybyhsYXRlbmN5LCBzaG93X3N0YXRlX2V4aXRfbGF0ZW5jeSk7CitkZWZpbmVfb25lX3N0YXRlX3JvKHBvd2VyLCBzaG93X3N0YXRlX3Bvd2VyX3VzYWdlKTsKK2RlZmluZV9vbmVfc3RhdGVfcm8odXNhZ2UsIHNob3dfc3RhdGVfdXNhZ2UpOworZGVmaW5lX29uZV9zdGF0ZV9ybyh0aW1lLCBzaG93X3N0YXRlX3RpbWUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY3B1aWRsZV9zdGF0ZV9kZWZhdWx0X2F0dHJzW10gPSB7CisJJmF0dHJfbmFtZS5hdHRyLAorCSZhdHRyX2xhdGVuY3kuYXR0ciwKKwkmYXR0cl9wb3dlci5hdHRyLAorCSZhdHRyX3VzYWdlLmF0dHIsCisJJmF0dHJfdGltZS5hdHRyLAorCU5VTEwKK307CisKKyNkZWZpbmUga29ial90b19zdGF0ZV9vYmooaykgY29udGFpbmVyX29mKGssIHN0cnVjdCBjcHVpZGxlX3N0YXRlX2tvYmosIGtvYmopCisjZGVmaW5lIGtvYmpfdG9fc3RhdGUoaykgKGtvYmpfdG9fc3RhdGVfb2JqKGspLT5zdGF0ZSkKKyNkZWZpbmUgYXR0cl90b19zdGF0ZWF0dHIoYSkgY29udGFpbmVyX29mKGEsIHN0cnVjdCBjcHVpZGxlX3N0YXRlX2F0dHIsIGF0dHIpCitzdGF0aWMgc3NpemVfdCBjcHVpZGxlX3N0YXRlX3Nob3coc3RydWN0IGtvYmplY3QgKiBrb2JqLAorCXN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyICxjaGFyICogYnVmKQoreworCWludCByZXQgPSAtRUlPOworCXN0cnVjdCBjcHVpZGxlX3N0YXRlICpzdGF0ZSA9IGtvYmpfdG9fc3RhdGUoa29iaik7CisJc3RydWN0IGNwdWlkbGVfc3RhdGVfYXR0ciAqIGNhdHRyID0gYXR0cl90b19zdGF0ZWF0dHIoYXR0cik7CisKKwlpZiAoY2F0dHItPnNob3cpCisJCXJldCA9IGNhdHRyLT5zaG93KHN0YXRlLCBidWYpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY3B1aWRsZV9zdGF0ZV9zeXNmc19vcHMgPSB7CisJLnNob3cgPSBjcHVpZGxlX3N0YXRlX3Nob3csCit9OworCitzdGF0aWMgdm9pZCBjcHVpZGxlX3N0YXRlX3N5c2ZzX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJc3RydWN0IGNwdWlkbGVfc3RhdGVfa29iaiAqc3RhdGVfb2JqID0ga29ial90b19zdGF0ZV9vYmooa29iaik7CisKKwljb21wbGV0ZSgmc3RhdGVfb2JqLT5rb2JqX3VucmVnaXN0ZXIpOworfQorCitzdGF0aWMgc3RydWN0IGtvYmpfdHlwZSBrdHlwZV9zdGF0ZV9jcHVpZGxlID0geworCS5zeXNmc19vcHMgPSAmY3B1aWRsZV9zdGF0ZV9zeXNmc19vcHMsCisJLmRlZmF1bHRfYXR0cnMgPSBjcHVpZGxlX3N0YXRlX2RlZmF1bHRfYXR0cnMsCisJLnJlbGVhc2UgPSBjcHVpZGxlX3N0YXRlX3N5c2ZzX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBpbmxpbmUgY3B1aWRsZV9mcmVlX3N0YXRlX2tvYmooc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXZpY2UsIGludCBpKQoreworCWtvYmplY3RfdW5yZWdpc3RlcigmZGV2aWNlLT5rb2Jqc1tpXS0+a29iaik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2aWNlLT5rb2Jqc1tpXS0+a29ial91bnJlZ2lzdGVyKTsKKwlrZnJlZShkZXZpY2UtPmtvYmpzW2ldKTsKKwlkZXZpY2UtPmtvYmpzW2ldID0gTlVMTDsKK30KKworLyoqCisgKiBjcHVpZGxlX2FkZF9kcml2ZXJfc3lzZnMgLSBhZGRzIGRyaXZlci1zcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGVzCisgKiBAZGV2aWNlOiB0aGUgdGFyZ2V0IGRldmljZQorICovCitpbnQgY3B1aWRsZV9hZGRfc3RhdGVfc3lzZnMoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGksIHJldCA9IC1FTk9NRU07CisJc3RydWN0IGNwdWlkbGVfc3RhdGVfa29iaiAqa29iajsKKworCS8qIHN0YXRlIHN0YXRpc3RpY3MgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGV2aWNlLT5zdGF0ZV9jb3VudDsgaSsrKSB7CisJCWtvYmogPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1aWRsZV9zdGF0ZV9rb2JqKSwgR0ZQX0tFUk5FTCk7CisJCWlmICgha29iaikKKwkJCWdvdG8gZXJyb3Jfc3RhdGU7CisJCWtvYmotPnN0YXRlID0gJmRldmljZS0+c3RhdGVzW2ldOworCQlpbml0X2NvbXBsZXRpb24oJmtvYmotPmtvYmpfdW5yZWdpc3Rlcik7CisKKwkJa29iai0+a29iai5wYXJlbnQgPSAmZGV2aWNlLT5rb2JqOworCQlrb2JqLT5rb2JqLmt0eXBlID0gJmt0eXBlX3N0YXRlX2NwdWlkbGU7CisJCWtvYmplY3Rfc2V0X25hbWUoJmtvYmotPmtvYmosICJzdGF0ZSVkIiwgaSk7CisJCXJldCA9IGtvYmplY3RfcmVnaXN0ZXIoJmtvYmotPmtvYmopOworCQlpZiAocmV0KSB7CisJCQlrZnJlZShrb2JqKTsKKwkJCWdvdG8gZXJyb3Jfc3RhdGU7CisJCX0KKwkJZGV2aWNlLT5rb2Jqc1tpXSA9IGtvYmo7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycm9yX3N0YXRlOgorCWZvciAoaSA9IGkgLSAxOyBpID49IDA7IGktLSkKKwkJY3B1aWRsZV9mcmVlX3N0YXRlX2tvYmooZGV2aWNlLCBpKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGNwdWlkbGVfcmVtb3ZlX2RyaXZlcl9zeXNmcyAtIHJlbW92ZXMgZHJpdmVyLXNwZWNpZmljIHN5c2ZzIGF0dHJpYnV0ZXMKKyAqIEBkZXZpY2U6IHRoZSB0YXJnZXQgZGV2aWNlCisgKi8KK3ZvaWQgY3B1aWRsZV9yZW1vdmVfc3RhdGVfc3lzZnMoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXZpY2UpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2aWNlLT5zdGF0ZV9jb3VudDsgaSsrKQorCQljcHVpZGxlX2ZyZWVfc3RhdGVfa29iaihkZXZpY2UsIGkpOworfQorCisvKioKKyAqIGNwdWlkbGVfYWRkX3N5c2ZzIC0gY3JlYXRlcyBhIHN5c2ZzIGluc3RhbmNlIGZvciB0aGUgdGFyZ2V0IGRldmljZQorICogQHN5c2RldjogdGhlIHRhcmdldCBkZXZpY2UKKyAqLworaW50IGNwdWlkbGVfYWRkX3N5c2ZzKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJaW50IGNwdSA9IHN5c2Rldi0+aWQ7CisJc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXY7CisKKwlkZXYgPSBwZXJfY3B1KGNwdWlkbGVfZGV2aWNlcywgY3B1KTsKKwlkZXYtPmtvYmoucGFyZW50ID0gJnN5c2Rldi0+a29iajsKKwlkZXYtPmtvYmoua3R5cGUgPSAma3R5cGVfY3B1aWRsZTsKKwlrb2JqZWN0X3NldF9uYW1lKCZkZXYtPmtvYmosICIlcyIsICJjcHVpZGxlIik7CisJcmV0dXJuIGtvYmplY3RfcmVnaXN0ZXIoJmRldi0+a29iaik7Cit9CisKKy8qKgorICogY3B1aWRsZV9yZW1vdmVfc3lzZnMgLSBkZWxldGVzIGEgc3lzZnMgaW5zdGFuY2Ugb24gdGhlIHRhcmdldCBkZXZpY2UKKyAqIEBzeXNkZXY6IHRoZSB0YXJnZXQgZGV2aWNlCisgKi8KK3ZvaWQgY3B1aWRsZV9yZW1vdmVfc3lzZnMoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwlpbnQgY3B1ID0gc3lzZGV2LT5pZDsKKwlzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldjsKKworCWRldiA9IHBlcl9jcHUoY3B1aWRsZV9kZXZpY2VzLCBjcHUpOworCWtvYmplY3RfdW5yZWdpc3RlcigmZGV2LT5rb2JqKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lvYXQuYyBiL2RyaXZlcnMvZG1hL2lvYXQuYwppbmRleCBmNzI3NmJmLi5mMjA0YzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0LmMKKysrIGIvZHJpdmVycy9kbWEvaW9hdC5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiaW9hdGRtYV9yZWdpc3RlcnMuaCIKICNpbmNsdWRlICJpb2F0ZG1hX2h3LmgiCiAKLU1PRFVMRV9WRVJTSU9OKCIxLjI0Iik7CitNT0RVTEVfVkVSU0lPTihJT0FUX0RNQV9WRVJTSU9OKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uIik7CiAKQEAgLTU1LDkgKzU1LDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgaW9hdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpOwotI2lmZGVmIElPQVRfRE1BX1JFTU9WRQogc3RhdGljIHZvaWQgX19kZXZleGl0IGlvYXRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IGlvYXRfZGNhX2VuYWJsZWQgPSAxOwogbW9kdWxlX3BhcmFtKGlvYXRfZGNhX2VuYWJsZWQsIGludCwgMDY0NCk7CkBAIC03Myw3ICs3MSw3IEBACiAJc3dpdGNoICh2ZXJzaW9uKSB7CiAJY2FzZSBJT0FUX1ZFUl8xXzI6CiAJCWRldmljZS0+ZG1hID0gaW9hdF9kbWFfcHJvYmUocGRldiwgaW9iYXNlKTsKLQkJaWYgKGlvYXRfZGNhX2VuYWJsZWQpCisJCWlmIChkZXZpY2UtPmRtYSAmJiBpb2F0X2RjYV9lbmFibGVkKQogCQkJZGV2aWNlLT5kY2EgPSBpb2F0X2RjYV9pbml0KHBkZXYsIGlvYmFzZSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC04NywyNyArODUsMjUgQEAKIHsKIAlzdHJ1Y3QgaW9hdF9kZXZpY2UgKmRldmljZSA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAotCWlmIChkZXZpY2UtPmRtYSkgewotCQlpb2F0X2RtYV9yZW1vdmUoZGV2aWNlLT5kbWEpOwotCQlkZXZpY2UtPmRtYSA9IE5VTEw7Ci0JfQotCisJZGV2X2VycigmcGRldi0+ZGV2LCAiUmVtb3ZpbmcgZG1hIGFuZCBkY2Egc2VydmljZXNcbiIpOwogCWlmIChkZXZpY2UtPmRjYSkgewogCQl1bnJlZ2lzdGVyX2RjYV9wcm92aWRlcihkZXZpY2UtPmRjYSk7CiAJCWZyZWVfZGNhX3Byb3ZpZGVyKGRldmljZS0+ZGNhKTsKIAkJZGV2aWNlLT5kY2EgPSBOVUxMOwogCX0KIAorCWlmIChkZXZpY2UtPmRtYSkgeworCQlpb2F0X2RtYV9yZW1vdmUoZGV2aWNlLT5kbWEpOworCQlkZXZpY2UtPmRtYSA9IE5VTEw7CisJfQogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaW9hdF9wY2lfZHJ2ID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGlvYXRfcGNpX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiaW9hdGRtYSIsCiAJLmlkX3RhYmxlCT0gaW9hdF9wY2lfdGJsLAogCS5wcm9iZQkJPSBpb2F0X3Byb2JlLAogCS5zaHV0ZG93bgk9IGlvYXRfc2h1dGRvd25fZnVuY3Rpb25hbGl0eSwKLSNpZmRlZiBJT0FUX0RNQV9SRU1PVkUKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGlvYXRfcmVtb3ZlKSwKLSNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgaW9hdF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTEyMiw3ICsxMTgsNyBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2VuYWJsZV9kZXZpY2U7CiAKLQllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGlvYXRfcGNpX2Rydi5uYW1lKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIGlvYXRfcGNpX2RyaXZlci5uYW1lKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9yZXF1ZXN0X3JlZ2lvbnM7CiAKQEAgLTE3NiwxMyArMTcyLDExIEBACiAJcmV0dXJuIGVycjsKIH0KIAotI2lmZGVmIElPQVRfRE1BX1JFTU9WRQogLyoKICAqIEl0IGlzIHVuc2FmZSB0byByZW1vdmUgdGhpcyBtb2R1bGU6IGlmIHJlbW92ZWQgd2hpbGUgYSByZXF1ZXN0ZWQKICAqIGRtYSBpcyBvdXRzdGFuZGluZywgZXNwLiBmcm9tIHRjcCwgaXQgaXMgcG9zc2libGUgdG8gaGFuZyB3aGlsZQotICogd2FpdGluZyBmb3Igc29tZXRoaW5nIHRoYXQgd2lsbCBuZXZlciBmaW5pc2gsIHRodXMgaGFuZ2luZyBhdAotICogbGVhc3Qgb25lIGNwdS4gIEhvd2V2ZXIsIGlmIHlvdSdyZSBmZWVsaW5nIGx1Y2t5IGFuZCBuZWVkIHRvIGRvCi0gKiBzb21lIHRlc3RpbmcsIHRoaXMgdXN1YWxseSB3b3JrcyBqdXN0IGZpbmUuCisgKiB3YWl0aW5nIGZvciBzb21ldGhpbmcgdGhhdCB3aWxsIG5ldmVyIGZpbmlzaC4gIEhvd2V2ZXIsIGlmIHlvdSdyZQorICogZmVlbGluZyBsdWNreSwgdGhpcyB1c3VhbGx5IHdvcmtzIGp1c3QgZmluZS4KICAqLwogc3RhdGljIHZvaWQgX19kZXZleGl0IGlvYXRfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewpAQCAtMTkxLDIxICsxODUsMTYgQEAKIAlpb2F0X3NodXRkb3duX2Z1bmN0aW9uYWxpdHkocGRldik7CiAKIAlrZnJlZShkZXZpY2UpOwotCi0JaW91bm1hcChkZXZpY2UtPmlvYmFzZSk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGludCBfX2luaXQgaW9hdF9pbml0X21vZHVsZSh2b2lkKQogewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpb2F0X3BjaV9kcnYpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpb2F0X3BjaV9kcml2ZXIpOwogfQogbW9kdWxlX2luaXQoaW9hdF9pbml0X21vZHVsZSk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpb2F0X2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpb2F0X3BjaV9kcnYpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaW9hdF9wY2lfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KGlvYXRfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdF9kY2EuYyBiL2RyaXZlcnMvZG1hL2lvYXRfZGNhLmMKaW5kZXggMmFlMDRjMy4uYmE5ODU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdF9kY2EuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0X2RjYS5jCkBAIC02NSw3ICs2NSw3IEBACiAJcmV0dXJuIChwY2ktPmJ1cy0+bnVtYmVyIDw8IDgpIHwgcGNpLT5kZXZmbjsKIH0KIAotc3RhdGljIGludCBkY2FfZW5hYmxlZF9pbl9iaW9zKHZvaWQpCitzdGF0aWMgaW50IGRjYV9lbmFibGVkX2luX2Jpb3Moc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJLyogQ1BVSUQgbGV2ZWwgOSByZXR1cm5zIERDQSBjb25maWd1cmF0aW9uICovCiAJLyogQml0IDAgaW5kaWNhdGVzIERDQSBlbmFibGVkIGJ5IHRoZSBCSU9TICovCkBAIC03NSwxNyArNzUsMTcgQEAKIAljcHVpZF9sZXZlbF85ID0gY3B1aWRfZWF4KDkpOwogCXJlcyA9IHRlc3RfYml0KDAsICZjcHVpZF9sZXZlbF85KTsKIAlpZiAoIXJlcykKLQkJcHJpbnRrKEtFUk5fRVJSICJpb2F0IGRtYTogRENBIGlzIGRpc2FibGVkIGluIEJJT1NcbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJEQ0EgaXMgZGlzYWJsZWQgaW4gQklPU1xuIik7CiAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgaW50IHN5c3RlbV9oYXNfZGNhX2VuYWJsZWQodm9pZCkKK3N0YXRpYyBpbnQgc3lzdGVtX2hhc19kY2FfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlpZiAoYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0RDQSkpCi0JCXJldHVybiBkY2FfZW5hYmxlZF9pbl9iaW9zKCk7CisJCXJldHVybiBkY2FfZW5hYmxlZF9pbl9iaW9zKHBkZXYpOwogCi0JcHJpbnRrKEtFUk5fRVJSICJpb2F0IGRtYTogYm9vdCBjcHUgZG9lc24ndCBoYXZlIFg4Nl9GRUFUVVJFX0RDQVxuIik7CisJZGV2X2VycigmcGRldi0+ZGV2LCAiYm9vdCBjcHUgZG9lc24ndCBoYXZlIFg4Nl9GRUFUVVJFX0RDQVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIwOCw3ICsyMDgsNyBAQAogCWludCBpOwogCWludCBlcnI7CiAKLQlpZiAoIXN5c3RlbV9oYXNfZGNhX2VuYWJsZWQoKSkKKwlpZiAoIXN5c3RlbV9oYXNfZGNhX2VuYWJsZWQocGRldikpCiAJCXJldHVybiBOVUxMOwogCiAJLyogSS9PQVQgdjEgc3lzdGVtcyBtdXN0IGhhdmUgYSBrbm93biB0YWdfbWFwIHRvIHN1cHBvcnQgRENBICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jIGIvZHJpdmVycy9kbWEvaW9hdF9kbWEuYwppbmRleCA2NmM1YmI1Li43ZTRhNzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0X2RtYS5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXRfZG1hLmMKQEAgLTQ2LDkgKzQ2LDEyIEBACiAvKiBpbnRlcm5hbCBmdW5jdGlvbnMgKi8KIHN0YXRpYyB2b2lkIGlvYXRfZG1hX3N0YXJ0X251bGxfZGVzYyhzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuKTsKIHN0YXRpYyB2b2lkIGlvYXRfZG1hX21lbWNweV9jbGVhbnVwKHN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4pOworc3RhdGljIHN0cnVjdCBpb2F0X2Rlc2Nfc3cgKgoraW9hdF9kbWFfZ2V0X25leHRfZGVzY3JpcHRvcihzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuKTsKIAotc3RhdGljIHN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2xvb2t1cF9jaGFuX2J5X2luZGV4KHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlLAotCQkJCQkJICAgICAgIGludCBpbmRleCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfbG9va3VwX2NoYW5fYnlfaW5kZXgoCisJCQkJCQlzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSwKKwkJCQkJCWludCBpbmRleCkKIHsKIAlyZXR1cm4gZGV2aWNlLT5pZHhbaW5kZXhdOwogfQpAQCAtMTQ4LDU3ICsxNTEsMTAyIEBACiAJCQkgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eCwKIAkJCSBpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IGlvYXRfZGVzY19zdyAqaXRlciwgKmRlc2MgPSB0eF90b19pb2F0X2Rlc2ModHgpOwotCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4odHgtPmNoYW4pOwotCi0JcGNpX3VubWFwX2FkZHJfc2V0KGRlc2MsIHNyYywgYWRkcik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZkZXNjLT5hc3luY190eC50eF9saXN0LCBub2RlKSB7Ci0JCWl0ZXItPmh3LT5zcmNfYWRkciA9IGFkZHI7Ci0JCWFkZHIgKz0gaW9hdF9jaGFuLT54ZmVyY2FwOwotCX0KLQorCXR4X3RvX2lvYXRfZGVzYyh0eCktPnNyYyA9IGFkZHI7CiB9CiAKIHN0YXRpYyB2b2lkIGlvYXRfc2V0X2Rlc3QoZG1hX2FkZHJfdCBhZGRyLAogCQkJICBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4LAogCQkJICBpbnQgaW5kZXgpCiB7Ci0Jc3RydWN0IGlvYXRfZGVzY19zdyAqaXRlciwgKmRlc2MgPSB0eF90b19pb2F0X2Rlc2ModHgpOwotCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0X2NoYW4gPSB0b19pb2F0X2NoYW4odHgtPmNoYW4pOwotCi0JcGNpX3VubWFwX2FkZHJfc2V0KGRlc2MsIGRzdCwgYWRkcik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZkZXNjLT5hc3luY190eC50eF9saXN0LCBub2RlKSB7Ci0JCWl0ZXItPmh3LT5kc3RfYWRkciA9IGFkZHI7Ci0JCWFkZHIgKz0gaW9hdF9jaGFuLT54ZmVyY2FwOwotCX0KKwl0eF90b19pb2F0X2Rlc2ModHgpLT5kc3QgPSBhZGRyOwogfQogCiBzdGF0aWMgZG1hX2Nvb2tpZV90IGlvYXRfdHhfc3VibWl0KHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHgpCiB7CiAJc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbiA9IHRvX2lvYXRfY2hhbih0eC0+Y2hhbik7Ci0Jc3RydWN0IGlvYXRfZGVzY19zdyAqZGVzYyA9IHR4X3RvX2lvYXRfZGVzYyh0eCk7CisJc3RydWN0IGlvYXRfZGVzY19zdyAqZmlyc3QgPSB0eF90b19pb2F0X2Rlc2ModHgpOworCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKnByZXYsICpuZXc7CisJc3RydWN0IGlvYXRfZG1hX2Rlc2NyaXB0b3IgKmh3OwogCWludCBhcHBlbmQgPSAwOwogCWRtYV9jb29raWVfdCBjb29raWU7Ci0Jc3RydWN0IGlvYXRfZGVzY19zdyAqZ3JvdXBfc3RhcnQ7CisJTElTVF9IRUFEKG5ld19jaGFpbik7CisJdTMyIGNvcHk7CisJc2l6ZV90IGxlbjsKKwlkbWFfYWRkcl90IHNyYywgZHN0OworCWludCBvcmlnX2FjazsKKwl1bnNpZ25lZCBpbnQgZGVzY19jb3VudCA9IDA7CiAKLQlncm91cF9zdGFydCA9IGxpc3RfZW50cnkoZGVzYy0+YXN5bmNfdHgudHhfbGlzdC5uZXh0LAotCQkJCSBzdHJ1Y3QgaW9hdF9kZXNjX3N3LCBub2RlKTsKKwkvKiBzcmMgYW5kIGRlc3QgYW5kIGxlbiBhcmUgc3RvcmVkIGluIHRoZSBpbml0aWFsIGRlc2NyaXB0b3IgKi8KKwlsZW4gPSBmaXJzdC0+bGVuOworCXNyYyA9IGZpcnN0LT5zcmM7CisJZHN0ID0gZmlyc3QtPmRzdDsKKwlvcmlnX2FjayA9IGZpcnN0LT5hc3luY190eC5hY2s7CisJbmV3ID0gZmlyc3Q7CisKIAlzcGluX2xvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKKwlwcmV2ID0gdG9faW9hdF9kZXNjKGlvYXRfY2hhbi0+dXNlZF9kZXNjLnByZXYpOworCXByZWZldGNoKHByZXYtPmh3KTsKKwlkbyB7CisJCWNvcHkgPSBtaW4oKHUzMikgbGVuLCBpb2F0X2NoYW4tPnhmZXJjYXApOworCisJCW5ldy0+YXN5bmNfdHguYWNrID0gMTsKKworCQlodyA9IG5ldy0+aHc7CisJCWh3LT5zaXplID0gY29weTsKKwkJaHctPmN0bCA9IDA7CisJCWh3LT5zcmNfYWRkciA9IHNyYzsKKwkJaHctPmRzdF9hZGRyID0gZHN0OworCQlody0+bmV4dCA9IDA7CisKKwkJLyogY2hhaW4gdG9nZXRoZXIgdGhlIHBoeXNpY2FsIGFkZHJlc3MgbGlzdCBmb3IgdGhlIEhXICovCisJCXdtYigpOworCQlwcmV2LT5ody0+bmV4dCA9ICh1NjQpIG5ldy0+YXN5bmNfdHgucGh5czsKKworCQlsZW4gLT0gY29weTsKKwkJZHN0ICs9IGNvcHk7CisJCXNyYyArPSBjb3B5OworCisJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJm5ld19jaGFpbik7CisJCWRlc2NfY291bnQrKzsKKwkJcHJldiA9IG5ldzsKKwl9IHdoaWxlIChsZW4gJiYgKG5ldyA9IGlvYXRfZG1hX2dldF9uZXh0X2Rlc2NyaXB0b3IoaW9hdF9jaGFuKSkpOworCisJaHctPmN0bCA9IElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0NQX1NUUzsKKwlpZiAobmV3LT5hc3luY190eC5jYWxsYmFjaykgeworCQlody0+Y3RsIHw9IElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0lOVF9HTjsKKwkJaWYgKGZpcnN0ICE9IG5ldykgeworCQkJLyogbW92ZSBjYWxsYmFjayBpbnRvIHRvIGxhc3QgZGVzYyAqLworCQkJbmV3LT5hc3luY190eC5jYWxsYmFjayA9IGZpcnN0LT5hc3luY190eC5jYWxsYmFjazsKKwkJCW5ldy0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW0KKwkJCQkJPSBmaXJzdC0+YXN5bmNfdHguY2FsbGJhY2tfcGFyYW07CisJCQlmaXJzdC0+YXN5bmNfdHguY2FsbGJhY2sgPSBOVUxMOworCQkJZmlyc3QtPmFzeW5jX3R4LmNhbGxiYWNrX3BhcmFtID0gTlVMTDsKKwkJfQorCX0KKworCW5ldy0+dHhfY250ID0gZGVzY19jb3VudDsKKwluZXctPmFzeW5jX3R4LmFjayA9IG9yaWdfYWNrOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLworCisJLyogc3RvcmUgdGhlIG9yaWdpbmFsIHZhbHVlcyBmb3IgdXNlIGluIGxhdGVyIGNsZWFudXAgKi8KKwlpZiAobmV3ICE9IGZpcnN0KSB7CisJCW5ldy0+c3JjID0gZmlyc3QtPnNyYzsKKwkJbmV3LT5kc3QgPSBmaXJzdC0+ZHN0OworCQluZXctPmxlbiA9IGZpcnN0LT5sZW47CisJfQorCiAJLyogY29va2llIGluY3IgYW5kIGFkZGl0aW9uIHRvIHVzZWRfbGlzdCBtdXN0IGJlIGF0b21pYyAqLwogCWNvb2tpZSA9IGlvYXRfY2hhbi0+Y29tbW9uLmNvb2tpZTsKIAljb29raWUrKzsKIAlpZiAoY29va2llIDwgMCkKIAkJY29va2llID0gMTsKLQlpb2F0X2NoYW4tPmNvbW1vbi5jb29raWUgPSBkZXNjLT5hc3luY190eC5jb29raWUgPSBjb29raWU7CisJaW9hdF9jaGFuLT5jb21tb24uY29va2llID0gbmV3LT5hc3luY190eC5jb29raWUgPSBjb29raWU7CiAKIAkvKiB3cml0ZSBhZGRyZXNzIGludG8gTmV4dERlc2NyaXB0b3IgZmllbGQgb2YgbGFzdCBkZXNjIGluIGNoYWluICovCiAJdG9faW9hdF9kZXNjKGlvYXRfY2hhbi0+dXNlZF9kZXNjLnByZXYpLT5ody0+bmV4dCA9Ci0JCQkJCQlncm91cF9zdGFydC0+YXN5bmNfdHgucGh5czsKLQlsaXN0X3NwbGljZV9pbml0KCZkZXNjLT5hc3luY190eC50eF9saXN0LCBpb2F0X2NoYW4tPnVzZWRfZGVzYy5wcmV2KTsKKwkJCQkJCQlmaXJzdC0+YXN5bmNfdHgucGh5czsKKwlfX2xpc3Rfc3BsaWNlKCZuZXdfY2hhaW4sIGlvYXRfY2hhbi0+dXNlZF9kZXNjLnByZXYpOwogCi0JaW9hdF9jaGFuLT5wZW5kaW5nICs9IGRlc2MtPnR4X2NudDsKKwlpb2F0X2NoYW4tPnBlbmRpbmcgKz0gZGVzY19jb3VudDsKIAlpZiAoaW9hdF9jaGFuLT5wZW5kaW5nID49IDQpIHsKIAkJYXBwZW5kID0gMTsKIAkJaW9hdF9jaGFuLT5wZW5kaW5nID0gMDsKQEAgLTI2Nyw3ICszMTUsNyBAQAogCWNoYW5lcnIgPSByZWFkbChpb2F0X2NoYW4tPnJlZ19iYXNlICsgSU9BVF9DSEFORVJSX09GRlNFVCk7CiAJaWYgKGNoYW5lcnIpIHsKIAkJZGV2X2VycigmaW9hdF9jaGFuLT5kZXZpY2UtPnBkZXYtPmRldiwKLQkJCSJpb2F0ZG1hOiBDSEFORVJSID0gJXgsIGNsZWFyaW5nXG4iLCBjaGFuZXJyKTsKKwkJCSJDSEFORVJSID0gJXgsIGNsZWFyaW5nXG4iLCBjaGFuZXJyKTsKIAkJd3JpdGVsKGNoYW5lcnIsIGlvYXRfY2hhbi0+cmVnX2Jhc2UgKyBJT0FUX0NIQU5FUlJfT0ZGU0VUKTsKIAl9CiAKQEAgLTI3Niw3ICszMjQsNyBAQAogCQlkZXNjID0gaW9hdF9kbWFfYWxsb2NfZGVzY3JpcHRvcihpb2F0X2NoYW4sIEdGUF9LRVJORUwpOwogCQlpZiAoIWRlc2MpIHsKIAkJCWRldl9lcnIoJmlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LT5kZXYsCi0JCQkJImlvYXRkbWE6IE9ubHkgJWQgaW5pdGlhbCBkZXNjcmlwdG9yc1xuIiwgaSk7CisJCQkJIk9ubHkgJWQgaW5pdGlhbCBkZXNjcmlwdG9yc1xuIiwgaSk7CiAJCQlicmVhazsKIAkJfQogCQlsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2RlLCAmdG1wX2xpc3QpOwpAQCAtMzQyLDEyICszOTAsMTMgQEAKIAkvKiBvbmUgaXMgb2sgc2luY2Ugd2UgbGVmdCBpdCBvbiB0aGVyZSBvbiBwdXJwb3NlICovCiAJaWYgKGluX3VzZV9kZXNjcyA+IDEpCiAJCWRldl9lcnIoJmlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LT5kZXYsCi0JCQkiaW9hdGRtYTogRnJlZWluZyAlZCBpbiB1c2UgZGVzY3JpcHRvcnMhXG4iLAorCQkJIkZyZWVpbmcgJWQgaW4gdXNlIGRlc2NyaXB0b3JzIVxuIiwKIAkJCWluX3VzZV9kZXNjcyAtIDEpOwogCiAJaW9hdF9jaGFuLT5sYXN0X2NvbXBsZXRpb24gPSBpb2F0X2NoYW4tPmNvbXBsZXRpb25fYWRkciA9IDA7CiAJaW9hdF9jaGFuLT5wZW5kaW5nID0gMDsKIH0KKwogLyoqCiAgKiBpb2F0X2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yIC0gcmV0dXJuIHRoZSBuZXh0IGF2YWlsYWJsZSBkZXNjcmlwdG9yCiAgKiBAaW9hdF9jaGFuOiBJT0FUIERNQSBjaGFubmVsIGhhbmRsZQpAQCAtMzU2LDggKzQwNSw4IEBACiAgKiBjaGFubmVsJ3MgZGVzY19sb2NrIGhlbGQuICBBbGxvY2F0ZXMgbW9yZSBkZXNjcmlwdG9ycyBpZiB0aGUgY2hhbm5lbAogICogaGFzIHJ1biBvdXQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgaW9hdF9kZXNjX3N3ICppb2F0X2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKAotCQkJCQkJc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbikKK3N0YXRpYyBzdHJ1Y3QgaW9hdF9kZXNjX3N3ICoKK2lvYXRfZG1hX2dldF9uZXh0X2Rlc2NyaXB0b3Ioc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXRfY2hhbikKIHsKIAlzdHJ1Y3QgaW9hdF9kZXNjX3N3ICpuZXcgPSBOVUxMOwogCkBAIC0zODIsNTEgKzQzMSwxMSBAQAogCQkJCQkJaW50IGludF9lbikKIHsKIAlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOwotCXN0cnVjdCBpb2F0X2Rlc2Nfc3cgKmZpcnN0LCAqcHJldiwgKm5ldzsKLQlMSVNUX0hFQUQobmV3X2NoYWluKTsKLQl1MzIgY29weTsKLQlzaXplX3Qgb3JpZ19sZW47Ci0JaW50IGRlc2NfY291bnQgPSAwOwotCi0JaWYgKCFsZW4pCi0JCXJldHVybiBOVUxMOwotCi0Jb3JpZ19sZW4gPSBsZW47Ci0KLQlmaXJzdCA9IE5VTEw7Ci0JcHJldiA9IE5VTEw7CisJc3RydWN0IGlvYXRfZGVzY19zdyAqbmV3OwogCiAJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7Ci0Jd2hpbGUgKGxlbikgewotCQluZXcgPSBpb2F0X2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7Ci0JCWNvcHkgPSBtaW4oKHUzMikgbGVuLCBpb2F0X2NoYW4tPnhmZXJjYXApOwotCi0JCW5ldy0+aHctPnNpemUgPSBjb3B5OwotCQluZXctPmh3LT5jdGwgPSAwOwotCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IDA7Ci0JCW5ldy0+YXN5bmNfdHguYWNrID0gMTsKLQotCQkvKiBjaGFpbiB0b2dldGhlciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBsaXN0IGZvciB0aGUgSFcgKi8KLQkJaWYgKCFmaXJzdCkKLQkJCWZpcnN0ID0gbmV3OwotCQllbHNlCi0JCQlwcmV2LT5ody0+bmV4dCA9ICh1NjQpIG5ldy0+YXN5bmNfdHgucGh5czsKLQotCQlwcmV2ID0gbmV3OwotCQlsZW4gIC09IGNvcHk7Ci0JCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJm5ld19jaGFpbik7Ci0JCWRlc2NfY291bnQrKzsKLQl9Ci0KLQlsaXN0X3NwbGljZSgmbmV3X2NoYWluLCAmbmV3LT5hc3luY190eC50eF9saXN0KTsKLQotCW5ldy0+aHctPmN0bCA9IElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0NQX1NUUzsKLQluZXctPmh3LT5uZXh0ID0gMDsKLQluZXctPnR4X2NudCA9IGRlc2NfY291bnQ7Ci0JbmV3LT5hc3luY190eC5hY2sgPSAwOyAvKiBjbGllbnQgaXMgaW4gY29udHJvbCBvZiB0aGlzIGFjayAqLwotCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOwotCi0JcGNpX3VubWFwX2xlbl9zZXQobmV3LCBsZW4sIG9yaWdfbGVuKTsKKwluZXcgPSBpb2F0X2RtYV9nZXRfbmV4dF9kZXNjcmlwdG9yKGlvYXRfY2hhbik7CisJbmV3LT5sZW4gPSBsZW47CiAJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+ZGVzY19sb2NrKTsKIAogCXJldHVybiBuZXcgPyAmbmV3LT5hc3luY190eCA6IE5VTEw7CkBAIC00NjQsNyArNDczLDcgQEAKIAogCXByZWZldGNoKGlvYXRfY2hhbi0+Y29tcGxldGlvbl92aXJ0KTsKIAotCWlmICghc3Bpbl90cnlsb2NrKCZpb2F0X2NoYW4tPmNsZWFudXBfbG9jaykpCisJaWYgKCFzcGluX3RyeWxvY2tfYmgoJmlvYXRfY2hhbi0+Y2xlYW51cF9sb2NrKSkKIAkJcmV0dXJuOwogCiAJLyogVGhlIGNvbXBsZXRpb24gd3JpdGViYWNrIGNhbiBoYXBwZW4gYXQgYW55IHRpbWUsCkBAIC00NzQsMjIgKzQ4MywyNSBAQAogCiAjaWYgKEJJVFNfUEVSX0xPTkcgPT0gNjQpCiAJcGh5c19jb21wbGV0ZSA9Ci0JaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQtPmZ1bGwgJiBJT0FUX0NIQU5TVFNfQ09NUExFVEVEX0RFU0NSSVBUT1JfQUREUjsKKwkJaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQtPmZ1bGwKKwkJJiBJT0FUX0NIQU5TVFNfQ09NUExFVEVEX0RFU0NSSVBUT1JfQUREUjsKICNlbHNlCi0JcGh5c19jb21wbGV0ZSA9IGlvYXRfY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5sb3cgJiBJT0FUX0xPV19DT01QTEVUSU9OX01BU0s7CisJcGh5c19jb21wbGV0ZSA9CisJCWlvYXRfY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5sb3cgJiBJT0FUX0xPV19DT01QTEVUSU9OX01BU0s7CiAjZW5kaWYKIAotCWlmICgoaW9hdF9jaGFuLT5jb21wbGV0aW9uX3ZpcnQtPmZ1bGwgJiBJT0FUX0NIQU5TVFNfRE1BX1RSQU5TRkVSX1NUQVRVUykgPT0KKwlpZiAoKGlvYXRfY2hhbi0+Y29tcGxldGlvbl92aXJ0LT5mdWxsCisJCSYgSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVMpID09CiAJCQkJSU9BVF9DSEFOU1RTX0RNQV9UUkFOU0ZFUl9TVEFUVVNfSEFMVEVEKSB7CiAJCWRldl9lcnIoJmlvYXRfY2hhbi0+ZGV2aWNlLT5wZGV2LT5kZXYsCi0JCQkiaW9hdGRtYTogQ2hhbm5lbCBoYWx0ZWQsIGNoYW5lcnIgPSAleFxuIiwKKwkJCSJDaGFubmVsIGhhbHRlZCwgY2hhbmVyciA9ICV4XG4iLAogCQkJcmVhZGwoaW9hdF9jaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTkVSUl9PRkZTRVQpKTsKIAogCQkvKiBUT0RPIGRvIHNvbWV0aGluZyB0byBzYWx2YWdlIHRoZSBzaXR1YXRpb24gKi8KIAl9CiAKIAlpZiAocGh5c19jb21wbGV0ZSA9PSBpb2F0X2NoYW4tPmxhc3RfY29tcGxldGlvbikgewotCQlzcGluX3VubG9jaygmaW9hdF9jaGFuLT5jbGVhbnVwX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmaW9hdF9jaGFuLT5jbGVhbnVwX2xvY2spOwogCQlyZXR1cm47CiAJfQogCkBAIC01MTcsNiArNTI5LDExIEBACiAJCQkJCXBjaV91bm1hcF9hZGRyKGRlc2MsIHNyYyksCiAJCQkJCXBjaV91bm1hcF9sZW4oZGVzYywgbGVuKSwKIAkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlpZiAoZGVzYy0+YXN5bmNfdHguY2FsbGJhY2spIHsKKwkJCQlkZXNjLT5hc3luY190eC5jYWxsYmFjaygKKwkJCQkJCWRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrX3BhcmFtKTsKKwkJCQlkZXNjLT5hc3luY190eC5jYWxsYmFjayA9IE5VTEw7CisJCQl9CiAJCX0KIAogCQlpZiAoZGVzYy0+YXN5bmNfdHgucGh5cyAhPSBwaHlzX2NvbXBsZXRlKSB7CkBAIC01NDgsNyArNTY1LDcgQEAKIAlpZiAoY29va2llICE9IDApCiAJCWlvYXRfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9IGNvb2tpZTsKIAotCXNwaW5fdW5sb2NrKCZpb2F0X2NoYW4tPmNsZWFudXBfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlvYXRfY2hhbi0+Y2xlYW51cF9sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgaW9hdF9kbWFfZGVwZW5kZW5jeV9hZGRlZChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCkBAIC02MTMsOCArNjMwLDEzIEBACiAJc3Bpbl9sb2NrX2JoKCZpb2F0X2NoYW4tPmRlc2NfbG9jayk7CiAKIAlkZXNjID0gaW9hdF9kbWFfZ2V0X25leHRfZGVzY3JpcHRvcihpb2F0X2NoYW4pOwotCWRlc2MtPmh3LT5jdGwgPSBJT0FUX0RNQV9ERVNDUklQVE9SX05VTDsKKwlkZXNjLT5ody0+Y3RsID0gSU9BVF9ETUFfREVTQ1JJUFRPUl9OVUwKKwkJCQl8IElPQVRfRE1BX0RFU0NSSVBUT1JfQ1RMX0lOVF9HTgorCQkJCXwgSU9BVF9ETUFfREVTQ1JJUFRPUl9DVExfQ1BfU1RTOwogCWRlc2MtPmh3LT5uZXh0ID0gMDsKKwlkZXNjLT5ody0+c2l6ZSA9IDA7CisJZGVzYy0+aHctPnNyY19hZGRyID0gMDsKKwlkZXNjLT5ody0+ZHN0X2FkZHIgPSAwOwogCWRlc2MtPmFzeW5jX3R4LmFjayA9IDE7CiAKIAlsaXN0X2FkZF90YWlsKCZkZXNjLT5ub2RlLCAmaW9hdF9jaGFuLT51c2VkX2Rlc2MpOwpAQCAtNjMzLDYgKzY1NSwxMiBAQAogICovCiAjZGVmaW5lIElPQVRfVEVTVF9TSVpFIDIwMDAKIAorc3RhdGljIHZvaWQgaW9hdF9kbWFfdGVzdF9jYWxsYmFjayh2b2lkICpkbWFfYXN5bmNfcGFyYW0pCit7CisJcHJpbnRrKEtFUk5fRVJSICJpb2F0ZG1hOiBpb2F0X2RtYV90ZXN0X2NhbGxiYWNrKCVwKVxuIiwKKwkJCWRtYV9hc3luY19wYXJhbSk7Cit9CisKIC8qKgogICogaW9hdF9kbWFfc2VsZl90ZXN0IC0gUGVyZm9ybSBhIElPQVQgdHJhbnNhY3Rpb24gdG8gdmVyaWZ5IHRoZSBIVyB3b3Jrcy4KICAqIEBkZXZpY2U6IGRldmljZSB0byBiZSB0ZXN0ZWQKQEAgLTY0Myw3ICs2NzEsNyBAQAogCXU4ICpzcmM7CiAJdTggKmRlc3Q7CiAJc3RydWN0IGRtYV9jaGFuICpkbWFfY2hhbjsKLQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSBOVUxMOwogCWRtYV9hZGRyX3QgYWRkcjsKIAlkbWFfY29va2llX3QgY29va2llOwogCWludCBlcnIgPSAwOwpAQCAtNjczLDYgKzcwMSwxMyBAQAogCX0KIAogCXR4ID0gaW9hdF9kbWFfcHJlcF9tZW1jcHkoZG1hX2NoYW4sIElPQVRfVEVTVF9TSVpFLCAwKTsKKwlpZiAoIXR4KSB7CisJCWRldl9lcnIoJmRldmljZS0+cGRldi0+ZGV2LAorCQkJIlNlbGYtdGVzdCBwcmVwIGZhaWxlZCwgZGlzYWJsaW5nXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmcmVlX3Jlc291cmNlczsKKwl9CisKIAlhc3luY190eF9hY2sodHgpOwogCWFkZHIgPSBkbWFfbWFwX3NpbmdsZShkbWFfY2hhbi0+ZGV2aWNlLT5kZXYsIHNyYywgSU9BVF9URVNUX1NJWkUsCiAJCQlETUFfVE9fREVWSUNFKTsKQEAgLTY4MCwxOSArNzE1LDI3IEBACiAJYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRtYV9jaGFuLT5kZXZpY2UtPmRldiwgZGVzdCwgSU9BVF9URVNUX1NJWkUsCiAJCQlETUFfRlJPTV9ERVZJQ0UpOwogCWlvYXRfc2V0X2Rlc3QoYWRkciwgdHgsIDApOworCXR4LT5jYWxsYmFjayA9IGlvYXRfZG1hX3Rlc3RfY2FsbGJhY2s7CisJdHgtPmNhbGxiYWNrX3BhcmFtID0gKHZvaWQgKikweDgwODY7CiAJY29va2llID0gaW9hdF90eF9zdWJtaXQodHgpOworCWlmIChjb29raWUgPCAwKSB7CisJCWRldl9lcnIoJmRldmljZS0+cGRldi0+ZGV2LAorCQkJIlNlbGYtdGVzdCBzZXR1cCBmYWlsZWQsIGRpc2FibGluZ1xuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZnJlZV9yZXNvdXJjZXM7CisJfQogCWlvYXRfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nKGRtYV9jaGFuKTsKIAltc2xlZXAoMSk7CiAKIAlpZiAoaW9hdF9kbWFfaXNfY29tcGxldGUoZG1hX2NoYW4sIGNvb2tpZSwgTlVMTCwgTlVMTCkgIT0gRE1BX1NVQ0NFU1MpIHsKIAkJZGV2X2VycigmZGV2aWNlLT5wZGV2LT5kZXYsCi0JCQkiaW9hdGRtYTogU2VsZi10ZXN0IGNvcHkgdGltZWQgb3V0LCBkaXNhYmxpbmdcbiIpOworCQkJIlNlbGYtdGVzdCBjb3B5IHRpbWVkIG91dCwgZGlzYWJsaW5nXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBmcmVlX3Jlc291cmNlczsKIAl9CiAJaWYgKG1lbWNtcChzcmMsIGRlc3QsIElPQVRfVEVTVF9TSVpFKSkgewogCQlkZXZfZXJyKCZkZXZpY2UtPnBkZXYtPmRldiwKLQkJCSJpb2F0ZG1hOiBTZWxmLXRlc3QgY29weSBmYWlsZWQgY29tcGFyZSwgZGlzYWJsaW5nXG4iKTsKKwkJCSJTZWxmLXRlc3QgY29weSBmYWlsZWQgY29tcGFyZSwgZGlzYWJsaW5nXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBmcmVlX3Jlc291cmNlczsKIAl9CkBAIC03MzAsNiArNzczLDkgQEAKIAkJZ290byBtc2k7CiAJaWYgKCFzdHJjbXAoaW9hdF9pbnRlcnJ1cHRfc3R5bGUsICJpbnR4IikpCiAJCWdvdG8gaW50eDsKKwlkZXZfZXJyKCZkZXZpY2UtPnBkZXYtPmRldiwgImludmFsaWQgaW9hdF9pbnRlcnJ1cHRfc3R5bGUgJXNcbiIsCisJCWlvYXRfaW50ZXJydXB0X3N0eWxlKTsKKwlnb3RvIGVycl9ub19pcnE7CiAKIG1zaXg6CiAJLyogVGhlIG51bWJlciBvZiBNU0ktWCB2ZWN0b3JzIHNob3VsZCBlcXVhbCB0aGUgbnVtYmVyIG9mIGNoYW5uZWxzICovCkBAIC05MDYsOSArOTUyLDkgQEAKIAlkZXZpY2UtPmNvbW1vbi5kZXZpY2VfZGVwZW5kZW5jeV9hZGRlZCA9IGlvYXRfZG1hX2RlcGVuZGVuY3lfYWRkZWQ7CiAJZGV2aWNlLT5jb21tb24uZGV2ID0gJnBkZXYtPmRldjsKIAlkZXZfZXJyKCZkZXZpY2UtPnBkZXYtPmRldiwKLQkJImlvYXRkbWE6IEludGVsKFIpIEkvT0FUIERNQSBFbmdpbmUgZm91bmQsIgotCQkiICVkIGNoYW5uZWxzLCBkZXZpY2UgdmVyc2lvbiAweCUwMnhcbiIsCi0JCWRldmljZS0+Y29tbW9uLmNoYW5jbnQsIGRldmljZS0+dmVyc2lvbik7CisJCSJJbnRlbChSKSBJL09BVCBETUEgRW5naW5lIGZvdW5kLCIKKwkJIiAlZCBjaGFubmVscywgZGV2aWNlIHZlcnNpb24gMHglMDJ4LCBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKKwkJZGV2aWNlLT5jb21tb24uY2hhbmNudCwgZGV2aWNlLT52ZXJzaW9uLCBJT0FUX0RNQV9WRVJTSU9OKTsKIAogCWVyciA9IGlvYXRfZG1hX3NldHVwX2ludGVycnVwdHMoZGV2aWNlKTsKIAlpZiAoZXJyKQpAQCAtOTMxLDkgKzk3Nyw4IEBACiBlcnJfZG1hX3Bvb2w6CiAJa2ZyZWUoZGV2aWNlKTsKIGVycl9remFsbG9jOgotCWlvdW5tYXAoaW9iYXNlKTsKIAlkZXZfZXJyKCZkZXZpY2UtPnBkZXYtPmRldiwKLQkJImlvYXRkbWE6IEludGVsKFIpIEkvT0FUIERNQSBFbmdpbmUgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKKwkJIkludGVsKFIpIEkvT0FUIERNQSBFbmdpbmUgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtOTQyLDEzICs5ODcsMTcgQEAKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sICpfY2hhbjsKIAlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdF9jaGFuOwogCi0JZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPmNvbW1vbik7Ci0KIAlpb2F0X2RtYV9yZW1vdmVfaW50ZXJydXB0cyhkZXZpY2UpOwogCisJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZkZXZpY2UtPmNvbW1vbik7CisKIAlwY2lfcG9vbF9kZXN0cm95KGRldmljZS0+ZG1hX3Bvb2wpOwogCXBjaV9wb29sX2Rlc3Ryb3koZGV2aWNlLT5jb21wbGV0aW9uX3Bvb2wpOwogCisJaW91bm1hcChkZXZpY2UtPnJlZ19iYXNlKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldmljZS0+cGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKGRldmljZS0+cGRldik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2hhbiwgX2NoYW4sCiAJCQkJICZkZXZpY2UtPmNvbW1vbi5jaGFubmVscywgZGV2aWNlX25vZGUpIHsKIAkJaW9hdF9jaGFuID0gdG9faW9hdF9jaGFuKGNoYW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdGRtYS5oIGIvZHJpdmVycy9kbWEvaW9hdGRtYS5oCmluZGV4IDJhMzE5ZTEuLjVmOTg4MWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0ZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvaW9hdGRtYS5oCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CiAKKyNkZWZpbmUgSU9BVF9ETUFfVkVSU0lPTiAiMS4yNiIKKwogZW51bSBpb2F0X2ludGVycnVwdCB7CiAJbm9uZSA9IDAsCiAJbXNpeF9tdWx0aV92ZWN0b3IgPSAxLApAQCAtMTIyLDkgKzEyNCw5IEBACiAJc3RydWN0IGlvYXRfZG1hX2Rlc2NyaXB0b3IgKmh3OwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIAlpbnQgdHhfY250OwotCURFQ0xBUkVfUENJX1VOTUFQX0xFTihsZW4pCi0JREVDTEFSRV9QQ0lfVU5NQVBfQUREUihzcmMpCi0JREVDTEFSRV9QQ0lfVU5NQVBfQUREUihkc3QpCisJc2l6ZV90IGxlbjsKKwlkbWFfYWRkcl90IHNyYzsKKwlkbWFfYWRkcl90IGRzdDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmggYi9kcml2ZXJzL2VkYWMvZWRhY19jb3JlLmgKaW5kZXggZTgwYWY2Ny4uMmQyM2UzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfY29yZS5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2NvcmUuaApAQCAtOTQsOCArOTQsNiBAQAogCiAjZW5kaWYJCQkJLyogIUNPTkZJR19FREFDX0RFQlVHICovCiAKLSNkZWZpbmUgQklUKHgpICgxIDw8ICh4KSkKLQogI2RlZmluZSBQQ0lfVkVORF9ERVYodmVuZCwgZGV2KSBQQ0lfVkVORE9SX0lEXyAjIyB2ZW5kLCBcCiAJUENJX0RFVklDRV9JRF8gIyMgdmVuZCAjIyBfICMjIGRldgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvcGFzZW1pX2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9wYXNlbWlfZWRhYy5jCmluZGV4IGU2NmNkZDQuLjkwMDdkMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9wYXNlbWlfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9wYXNlbWlfZWRhYy5jCkBAIC0yNzAsNiArMjcwLDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBhc2VtaV9lZGFjX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVNFTUksIDB4YTAwYSkgfSwKKwl7IH0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwYXNlbWlfZWRhY19wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYyBiL2RyaXZlcnMvZmlyZXdpcmUvZnctdHJhbnNhY3Rpb24uYwppbmRleCA5OTU5Yjc5Li5jMDBkNGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2Z3LXRyYW5zYWN0aW9uLmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9mdy10cmFuc2FjdGlvbi5jCkBAIC0yMjgsNyArMjI4LDcgQEAKICAqCiAgKiBAcGFyYW0gY2FyZCB0aGUgY2FyZCBmcm9tIHdoaWNoIHRvIHNlbmQgdGhlIHJlcXVlc3QKICAqIEBwYXJhbSB0Y29kZSB0aGUgdGNvZGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uICBEbyBub3QgdXNlCi0gKiAgIFRDT0RFX0xPQ0tfUkVRVUVTVCBkaXJlY3RseSwgaW5zdGVkIHVzZSBUQ09ERV9MT0NLX01BU0tfU1dBUAorICogICBUQ09ERV9MT0NLX1JFUVVFU1QgZGlyZWN0bHksIGluc3RlYWQgdXNlIFRDT0RFX0xPQ0tfTUFTS19TV0FQCiAgKiAgIGV0Yy4gdG8gc3BlY2lmeSB0Y29kZSBhbmQgZXh0X3Rjb2RlLgogICogQHBhcmFtIG5vZGVfaWQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgSUQgKGJ1cyBJRCBhbmQgUEhZIElEIGNvbmNhdGVuYXRlZCkKICAqIEBwYXJhbSBnZW5lcmF0aW9uIHRoZSBnZW5lcmF0aW9uIGZvciB3aGljaCBub2RlX2lkIGlzIHZhbGlkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5oIGIvZHJpdmVycy9maXJtd2FyZS9kY2RiYXMuaAppbmRleCBkY2RiYTBmLi44N2JjMzQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2RjZGJhcy5oCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZGNkYmFzLmgKQEAgLTE3LDcgKzE3LDYgQEAKICNkZWZpbmUgX0RDREJBU19IXwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL2hpZHJhdy5jIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKaW5kZXggYTcwMmUyZi4uMWNhNmY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvaGlkcmF3LmMKKysrIGIvZHJpdmVycy9oaWQvaGlkcmF3LmMKQEAgLTExMywxMyArMTEzLDEzIEBACiAKIAlpZiAoY291bnQgPiBISURfTUlOX0JVRkZFUl9TSVpFKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhpZHJhdzogcGlkICVkIHBhc3NlZCB0b28gbGFyZ2UgcmVwb3J0XG4iLAotCQkJCWN1cnJlbnQtPnBpZCk7CisJCQkJdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoY291bnQgPCAyKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImhpZHJhdzogcGlkICVkIHBhc3NlZCB0b28gc2hvcnQgcmVwb3J0XG4iLAotCQkJCWN1cnJlbnQtPnBpZCk7CisJCQkJdGFza19waWRfbnIoY3VycmVudCkpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtZmYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWQtZmYuYwppbmRleCAyMjMyOWZlLi40YzIxMGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkLWZmLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZC1mZi5jCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqICRJZDogaGlkLWZmLmMsdiAxLjIgMjAwMi8wNC8xOCAyMjowMjo0NyBqZGVuZXV4IEV4cCAkCi0gKgogICogIEZvcmNlIGZlZWRiYWNrIHN1cHBvcnQgZm9yIGhpZCBkZXZpY2VzLgogICogIE5vdCBhbGwgaGlkIGRldmljZXMgdXNlIHRoZSBzYW1lIHByb3RvY29sLiBGb3IgZXhhbXBsZSwgc29tZSB1c2UgUElELAogICogIG90aGVyIHVzZSB0aGVpciBvd24gcHJvcHJpZXRhcnkgcHJvY290b2wuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMgYi9kcml2ZXJzL2hpZC91c2JoaWQvdXNia2JkLmMKaW5kZXggYjc2YjAyZi4uNzc1YTFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYmtiZC5jCisrKyBiL2RyaXZlcnMvaGlkL3VzYmhpZC91c2JrYmQuYwpAQCAtMjc0LDggKzI3NCwxMSBAQAogCiAJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBrYmQpOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0xFRCkgfCBCSVQoRVZfUkVQKTsKLQlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVChMRURfTlVNTCkgfCBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfU0NST0xMTCkgfCBCSVQoTEVEX0NPTVBPU0UpIHwgQklUKExFRF9LQU5BKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0xFRCkgfAorCQlCSVRfTUFTSyhFVl9SRVApOworCWlucHV0X2Rldi0+bGVkYml0WzBdID0gQklUX01BU0soTEVEX05VTUwpIHwgQklUX01BU0soTEVEX0NBUFNMKSB8CisJCUJJVF9NQVNLKExFRF9TQ1JPTExMKSB8IEJJVF9NQVNLKExFRF9DT01QT1NFKSB8CisJCUJJVF9NQVNLKExFRF9LQU5BKTsKIAogCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKIAkJc2V0X2JpdCh1c2Jfa2JkX2tleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC91c2Jtb3VzZS5jIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKaW5kZXggNTM0NWM3My4uZjhhZDY5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL3VzYm1vdXNlLmMKQEAgLTE3MywxMSArMTczLDEzIEBACiAJdXNiX3RvX2lucHV0X2lkKGRldiwgJmlucHV0X2Rldi0+aWQpOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZpbnRmLT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpOwotCWlucHV0X2Rldi0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSB8PSBCSVQoQlROX1NJREUpIHwgQklUKEJUTl9FWFRSQSk7Ci0JaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX1JJR0hUKSB8IEJJVF9NQVNLKEJUTl9NSURETEUpOworCWlucHV0X2Rldi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldIHw9IEJJVF9NQVNLKEJUTl9TSURFKSB8CisJCUJJVF9NQVNLKEJUTl9FWFRSQSk7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUX01BU0soUkVMX1dIRUVMKTsKIAogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgbW91c2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IGFhODc1Y2EuLjNlNjNjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0xNjUxLDcgKzE2NTEsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0IDoKIAkJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiOiBJbnRlcm5hbCBlcnJvciwgaW52YWxpZCAiCi0JCQkia2luZCAoJWQpISIsIGtpbmQpOworCQkJImtpbmQgKCVkKSFcbiIsIGtpbmQpOwogCQllcnIgPSAtRUZBVUxUOwogCQlnb3RvIGV4aXRmcmVlOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYyBiL2RyaXZlcnMvaHdtb24vYXBwbGVzbWMuYwppbmRleCA0ODc5MTI1Li4xMDAxZDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FwcGxlc21jLmMKKysrIGIvZHJpdmVycy9od21vbi9hcHBsZXNtYy5jCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogCWlkZXYtPm5hbWUgPSAiYXBwbGVzbWMiOwogCWlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKIAlpZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKLQlpZGV2LT5ldmJpdFswXSA9IEJJVChFVl9BQlMpOworCWlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfQUJTKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpZGV2LCBBQlNfWCwKIAkJCS0yNTYsIDI1NiwgQVBQTEVTTUNfSU5QVVRfRlVaWiwgQVBQTEVTTUNfSU5QVVRfRkxBVCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaWRldiwgQUJTX1ksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2NvcmV0ZW1wLmMKaW5kZXggNmY2NjU1MS4uNWM4MmVjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9jb3JldGVtcC5jCisrKyBiL2RyaXZlcnMvaHdtb24vY29yZXRlbXAuYwpAQCAtMTUwLDcgKzE1MCw3IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JldGVtcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBjb3JldGVtcF9kYXRhICpkYXRhOwotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICYoY3B1X2RhdGEpW3BkZXYtPmlkXTsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEocGRldi0+aWQpOwogCWludCBlcnI7CiAJdTMyIGVheCwgZWR4OwogCkBAIC0zNTksNyArMzU5LDcgQEAKIAlzdHJ1Y3QgcGRldl9lbnRyeSAqcCwgKm47CiAKIAkvKiBxdWljayBjaGVjayBpZiB3ZSBydW4gSW50ZWwgKi8KLQlpZiAoY3B1X2RhdGFbMF0ueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMKQorCWlmIChjcHVfZGF0YSgwKS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCiAJCWdvdG8gZXhpdDsKIAogCWVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmY29yZXRlbXBfZHJpdmVyKTsKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQlnb3RvIGV4aXQ7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKLQkJc3RydWN0IGNwdWluZm9feDg2ICpjID0gJihjcHVfZGF0YSlbaV07CisJCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YShpKTsKIAogCQkvKiBjaGVjayBpZiBmYW1pbHkgNiwgbW9kZWxzIGUsIGYsIDE2ICovCiAJCWlmICgoYy0+Y3B1aWRfbGV2ZWwgPCAwKSB8fCAoYy0+eDg2ICE9IDB4NikgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZ2w1MjBzbS5jIGIvZHJpdmVycy9od21vbi9nbDUyMHNtLmMKaW5kZXggYTNiNTZjOC4uMmQzOWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9nbDUyMHNtLmMKKysrIGIvZHJpdmVycy9od21vbi9nbDUyMHNtLmMKQEAgLTIsNyArMiw3IEBACiAgICAgZ2w1MjBzbS5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUKICAgICAgICAgICAgICAgICBtb25pdG9yaW5nCiAgICAgQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5ICBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPgogICAgIENvcHlyaWdodCAoYykgMjAwNSAgICAgICAgTWFhcnRlbiBEZXByZXogPG1hYXJ0ZW5kZXByZXpAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTgwNSw3ICs4MDUsNyBAQAogCiAKIE1PRFVMRV9BVVRIT1IoIkZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sICIKLQkiS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LCAiCisJIkt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+LCAiCiAJIk1hYXJ0ZW4gRGVwcmV6IDxtYWFydGVuZGVwcmV6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR0w1MjBTTSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCA4YTdhZTAzLi5iYWI1ZmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC01NzQsNyArNTc0LDcgQEAKIAlpZGV2ID0gaGRhcHNfaWRldi0+aW5wdXQ7CiAJaWRldi0+bmFtZSA9ICJoZGFwcyI7CiAJaWRldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7Ci0JaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKTsKKwlpZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0FCUyk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaWRldiwgQUJTX1gsCiAJCQktMjU2LCAyNTYsIEhEQVBTX0lOUFVUX0ZVWlosIEhEQVBTX0lOUFVUX0ZMQVQpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlkZXYsIEFCU19ZLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYyBiL2RyaXZlcnMvaHdtb24vaHdtb24tdmlkLmMKaW5kZXggZjE3ZTc3MS4uMzMzMDY2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9od21vbi12aWQuYworKysgYi9kcml2ZXJzL2h3bW9uL2h3bW9uLXZpZC5jCkBAIC0yMDAsNyArMjAwLDcgQEAKIAogdTggdmlkX3doaWNoX3ZybSh2b2lkKQogewotCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZjcHVfZGF0YSgwKTsKIAl1MzIgZWF4OwogCXU4IGVmZl9mYW1pbHksIGVmZl9tb2RlbCwgZWZmX3N0ZXBwaW5nLCB2cm1fcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNjMuYyBiL2RyaXZlcnMvaHdtb24vbG02My5jCmluZGV4IGYyMDc0MzQuLjY1MGIwN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG02My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG02My5jCkBAIC01MzMsNyArNTMzLDcgQEAKIAogCS8qIFN0YXJ0IGNvbnZlcnRpbmcgaWYgbmVlZGVkICovCiAJaWYgKGRhdGEtPmNvbmZpZyAmIDB4NDApIHsgLyogc3RhbmRieSAqLwotCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN3aXRjaGluZyB0byBvcGVyYXRpb25hbCBtb2RlIik7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3dpdGNoaW5nIHRvIG9wZXJhdGlvbmFsIG1vZGVcbiIpOwogCQlkYXRhLT5jb25maWcgJj0gMHhBNzsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIExNNjNfUkVHX0NPTkZJRzEsCiAJCQkJCSAgZGF0YS0+Y29uZmlnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jIGIvZHJpdmVycy9od21vbi9zaXM1NTk1LmMKaW5kZXggODYwYjcxYy4uN2UyZDk3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaXM1NTk1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaXM1NTk1LmMKQEAgLTMsNyArMyw3IEBACiAJCWZvciBoYXJkd2FyZSBtb25pdG9yaW5nCiAKICAgICBDb3B5cmlnaHQgKEMpIDE5OTggLSAyMDAxIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCi0JCQlLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sIGFuZAorCQkJS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sIGFuZAogCQkJTWFyayBELiBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPgogICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoCiAgICAgdGhlIGhlbHAgb2YgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYyBiL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCmluZGV4IDhmNjNkYWQuLjI2MzViYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdmlhNjg2YS5jCkBAIC0zLDcgKzMsNyBAQAogCQlmb3IgaGFyZHdhcmUgbW9uaXRvcmluZwogCiAgICAgQ29weXJpZ2h0IChjKSAxOTk4IC0gMjAwMiAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwKLQkJCUt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKKwkJCUt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAogCQkJTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiwKIAkJCWFuZCBCb2IgRG91Z2hlcnR5IDxib2JkQHN0YW5mb3JkLmVkdT4KICAgICAoU29tZSBjb252ZXJzaW9uLWZhY3RvciBkYXRhIHdlcmUgY29udHJpYnV0ZWQgYnkgSm9uYXRoYW4gVGVoIFNvb24gWWV3CkBAIC04NjYsNyArODY2LDcgQEAKIAl9CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwgIgorTU9EVUxFX0FVVEhPUigiS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4sICIKIAkgICAgICAiTWFyayBTdHVkZWJha2VyIDxtZHN4eXoxMjNAeWFob28uY29tPiAiCiAJICAgICAgImFuZCBCb2IgRG91Z2hlcnR5IDxib2JkQHN0YW5mb3JkLmVkdT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVklBIDY4NkEgU2Vuc29yIGRldmljZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92dDEyMTEuYyBiL2RyaXZlcnMvaHdtb24vdnQxMjExLmMKaW5kZXggZTY5NDE2NC4uN2RmY2M4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi92dDEyMTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jCkBAIC03OTUsNyArNzk1LDcgQEAKIAogCWlmICgodmFsIDwgMCkgfHwgKHZhbCA+IDI1NSkpIHsKIAkJZGV2X2VycihkZXYsICJwd20gdmFsdWUgJWxkIGlzIG91dCBvZiByYW5nZS4gIgotCQkJIkNob29zZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LiIgLCB2YWwpOworCQkJIkNob29zZSBhIHZhbHVlIGJldHdlZW4gMCBhbmQgMjU1LlxuIiAsIHZhbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTFkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwppbmRleCBiNmYyZWJmLi5hOWMwMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYwpAQCAtMTA5Niw3ICsxMDk2LDcgQEAKIAlpZiAoa2luZCA9PSB3ODM3OTFkKSB7CiAJCWNsaWVudF9uYW1lID0gInc4Mzc5MWQiOwogCX0gZWxzZSB7Ci0JCWRldl9lcnIoZGV2LCAidzgzNzkxZDogSW50ZXJuYWwgZXJyb3I6IHVua25vd24ga2luZCAoJWQpPyE/IiwKKwkJZGV2X2VycihkZXYsICJ3ODM3OTFkOiBJbnRlcm5hbCBlcnJvcjogdW5rbm93biBraW5kICglZCk/IT9cbiIsCiAJCQlraW5kKTsKIAkJZ290byBlcnJvcjE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwppbmRleCBmODM2MTk4Li4wMDc0NDlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5MmQuYwpAQCAtMTM4NSw4ICsxMzg1LDggQEAKIAlpZiAoa2luZCA9PSB3ODM3OTJkKSB7CiAJCWNsaWVudF9uYW1lID0gInc4Mzc5MmQiOwogCX0gZWxzZSB7Ci0JCWRldl9lcnIoZGV2LCAidzgzNzkyZDogSW50ZXJuYWwgZXJyb3I6IHVua25vd24iCi0JCQkJCSAgIiBraW5kICglZCk/IT8iLCBraW5kKTsKKwkJZGV2X2VycihkZXYsICJ3ODM3OTJkOiBJbnRlcm5hbCBlcnJvcjogdW5rbm93biBraW5kICglZCk/IT9cbiIsCisJCQlraW5kKTsKIAkJZ290byBFUlJPUjE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1iaXQuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCmluZGV4IDdmMGEwYTYuLmEzN2NiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCQkgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLS8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPiwgS3n2c3RpIE3kbGtraQorLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBGcm9kbyBMb29pamFhcmQgPGZyb2RvbEBkZHMubmw+LCBLecO2c3RpIE3DpGxra2kKICAgIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCmluZGV4IDM2ZmRmOTcuLjJhMTYyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCkBAIC0zNTAsNyArMzUwLDcgQEAKIAlwY2Ffb3V0dyhhZGFwLCBJMkNfUENBX0FEUiwgb3duIDw8IDEpOwogCiAJcGNhX3NldF9jb24oYWRhcCwgSTJDX1BDQV9DT05fRU5TSU8gfCBjbG9jayk7Ci0JdWRlbGF5KDUwMCk7IC8qIDUwMCC1cyBmb3Igb3NjaWxhdG9yIHRvIHN0YWJpbGlzZSAqLworCXVkZWxheSg1MDApOyAvKiA1MDAgwrVzIGZvciBvc2NpbGF0b3IgdG8gc3RhYmlsaXNlICovCiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKaW5kZXggZWNiMmMyZC4uYWIyZTZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4JCSAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kIAorLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLecO2c3RpIE3DpGxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQKICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gLGFuZCBhbHNvIGZyb20gTWFydGluIEJhaWxleQogICAgPG1iYWlsZXlAbGl0dGxlZmVldC1pbmMuY29tPiAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IGRlOTVjNzUuLmM0NjZjNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC0yNzgsNyArMjc4LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfSVhQMjAwMAogCXNlbGVjdCBJMkNfQUxHT0JJVAogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gSW50ZWwgSVhQMjAwMCgyNDAwLCAyODAwLCAyODUwKSBiYXNlZCAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYW4gSW50ZWwgSVhQMjAwMCAoMjQwMCwgMjgwMCwgMjg1MCkgYmFzZWQgCiAJICBzeXN0ZW0gYW5kIGFyZSB1c2luZyBHUElPIGxpbmVzIGZvciBhbiBJMkMgYnVzLgogCiAJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCkBAIC0yOTMsOCArMjkzLDggQEAKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGlzIGV4cG9zZXMgdGhlIHZhcmlvdXMgUG93ZXJNYWMgaTJjIGludGVyZmFjZXMgdG8gdGhlIGxpbnV4IGkyYwotCSAgbGF5ZXIgYW5kIHRvIHVzZXJsYW5kLiBJdCBpcyB1c2VkIGJ5IHZhcmlvdXMgZHJpdmVycyBvbiB0aGUgcG93ZW1hYwotCSAgcGxhdGZvcm0sIHRodXMgc2hvdWxkIGdlbmVyYWxseSBiZSBlbmFibGVkLgorCSAgbGF5ZXIgYW5kIHRvIHVzZXJsYW5kLiBJdCBpcyB1c2VkIGJ5IHZhcmlvdXMgZHJpdmVycyBvbiB0aGUgUG93ZXJNYWMKKwkgIHBsYXRmb3JtLCBhbmQgc2hvdWxkIGdlbmVyYWxseSBiZSBlbmFibGVkLgogCiAJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXBvd2VybWFjLgpAQCAtNDM4LDEyICs0MzgsMTIgQEAKIAl0cmlzdGF0ZSAiU2ltdGVjIEdlbmVyaWMgSTJDIGludGVyZmFjZSIKIAlzZWxlY3QgSTJDX0FMR09CSVQKIAloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x5ZGVkIGZvcgorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IKIAkgIHRoZSBTaW10ZWMgR2VuZXJpYyBJMkMgaW50ZXJmYWNlLiBUaGlzIGRyaXZlciBpcyBmb3IgdGhlCiAJICBzaW1wbGUgSTJDIGJ1cyB1c2VkIG9uIG5ld2VyIFNpbXRlYyBwcm9kdWN0cyBmb3IgZ2VuZXJhbAogCSAgSTJDLCBzdWNoIGFzIEREQyBvbiB0aGUgU2ltdGVjIEJCRDIwMTZBLgogCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsZCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXNpbXRlYy4KIAogY29uZmlnIFNDeDIwMF9JMkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKaW5kZXggODA0ZjBhNS4uYjdhOTk3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKQEAgLTE5LDcgKzE5LDcgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4JCSAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kIGV2ZW4KKy8qIFdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4gYW5kIGV2ZW4KICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4gKi8KIAogLyogUGFydGlhbHkgcmV3cml0ZW4gYnkgT2xlZyBJLiBWZG92aWtpbiBmb3IgbW1hcHBlZCBzdXBwb3J0IG9mCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggOTgzMmY3Ny4uZjk5NzJmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtNyw3ICs3LDcgQEAKICAgICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNCBHZWVydCBVeXR0ZXJob2V2ZW4gPGdlZXJ0QGxpbnV4LW02OGsub3JnPgogCiAgICAgQmFzZWQgb24gaTJjIFN1cHBvcnQgZm9yIFZpYSBUZWNobm9sb2dpZXMgODJDNTg2QiBTb3V0aCBCcmlkZ2UKLSAgICBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+CisgICAgQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlibV9paWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCmluZGV4IGUwOGJhY2EuLjliNDNmZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgIAlDb3B5cmlnaHQgMTk5NS05NyBTaW1vbiBHLiBWb2dsCiAgKiAgICAgICAgICAgICAgICAxOTk4LTk5IEhhbnMgQmVyZ2x1bmQKICAqCi0gKiAgIAlXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiAKKyAqICAgCVdpdGggc29tZSBjaGFuZ2VzIGZyb20gS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KICAqCWFuZCBldmVuIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggZTQ3MWUzYi4uODlhMzAwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTgsNyArOCw3IEBACiAgKiBUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPiBhbmQgSW1yZSBEZWFrIDxpbXJlLmRlYWtAbm9raWEuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA1IE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogQ2xlYW5lZCB1cCBieSBKdWhhIFlyavZs5CA8anVoYS55cmpvbGFAbm9raWEuY29tPgorICogQ2xlYW5lZCB1cCBieSBKdWhhIFlyasO2bMOkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCmluZGV4IDQ5YTk1ZTIuLmM2ZmFmOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCkBAIC03LDcgKzcsNyBAQAogICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgU2ltb24gRy4gVm9nbAogICAgV2l0aCBzb21lIGNoYW5nZXMgZnJvbToKICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KLSAgIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPgorICAgS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KICAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jCmluZGV4IDAzOWEwN2YuLjU5YmEyMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jCkBAIC03LDcgKzcsNyBAQAogICAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgU2ltb24gRy4gVm9nbAogICAgV2l0aCBzb21lIGNoYW5nZXMgZnJvbToKICAgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KLSAgIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPgorICAgS3nDtnN0aSBNw6Rsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4KICAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBtY21zcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbWNtc3AuYwppbmRleCAxN2NlY2YxLi5iZTk5YzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBtY21zcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG1jbXNwLmMKQEAgLTU5MSwxOCArNTkxLDE4IEBACiAJaWYgKG1zZy0+ZmxhZ3MgJiBJMkNfTV9URU4pCiAJCXBtY21zcHR3aV9zZXRfdHdpX2NvbmZpZygmb2xkY2ZnLCBkYXRhKTsKIAotCWRldl9kYmcoJmFkYXAtPmRldiwgIkkyQyAlcyBvZiAlZCBieXRlcyAiLAotCQkobXNnLT5mbGFncyAmIEkyQ19NX1JEKSA/ICJyZWFkIiA6ICJ3cml0ZSIsIG1zZy0+bGVuKTsKKwlkZXZfZGJnKCZhZGFwLT5kZXYsICJJMkMgJXMgb2YgJWQgYnl0ZXMgJXNcbiIsCisJCShtc2ctPmZsYWdzICYgSTJDX01fUkQpID8gInJlYWQiIDogIndyaXRlIiwgbXNnLT5sZW4sCisJCShyZXQgPT0gTVNQX1RXSV9YRkVSX09LKSA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIpOworCiAJaWYgKHJldCAhPSBNU1BfVFdJX1hGRVJfT0spIHsKIAkJLyoKIAkJICogVE9ETzogV2UgY291bGQgcG90ZW50aWFsbHkgbG9vcCBhbmQgcmV0cnkgaW4gdGhlIGNhc2UKIAkJICogb2YgTVNQX1RXSV9YRkVSX1RJTUVPVVQuCiAJCSAqLwotCQlkZXZfZGJnKCZhZGFwLT5kZXYsICJmYWlsZWRcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JZGV2X2RiZygmYWRhcC0+ZGV2LCAic3VjY2VlZGVkXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKaW5kZXggMTczNzZmZS4uZjhkMGRmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCkBAIC01NzUsNyArNTc1LDcgQEAKIAllbHNlIHsKIAkJZnJlcV9taHogPSBQTlhfREVGQVVMVF9GUkVROwogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU2V0dGluZyBidXMgZnJlcXVlbmN5IHRvIGRlZmF1bHQgdmFsdWU6ICIKLQkJICAgICAgICIlZCBNSHoiLCBmcmVxX21oeik7CisJCSAgICAgICAiJWQgTUh6XG4iLCBmcmVxX21oeik7CiAJfQogCiAJaTJjX3BueC0+YWRhcHRlci0+YWxnbyA9ICZwbnhfYWxnb3JpdGhtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKaW5kZXggMDBmYWQxMS4uNjQyNmE2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCkBAIC04NSw3ICs4NSw3IEBACiAJY29uc3QgY2hhciAqc2V0OwogCWNvbnN0IGNoYXIgKnVuc2V0OwogfTsKLSNkZWZpbmUgQklUKG0sIHMsIHUpCXsgLm1hc2sgPSBtLCAuc2V0ID0gcywgLnVuc2V0ID0gdSB9CisjZGVmaW5lIFBYQV9CSVQobSwgcywgdSkJeyAubWFzayA9IG0sIC5zZXQgPSBzLCAudW5zZXQgPSB1IH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkZWNvZGVfYml0cyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IHN0cnVjdCBiaXRzICpiaXRzLCBpbnQgbnVtLCB1MzIgdmFsKQpAQCAtMTAwLDE3ICsxMDAsMTcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBiaXRzIGlzcl9iaXRzW10gPSB7Ci0JQklUKElTUl9SV00sCSJSWCIsCQkiVFgiKSwKLQlCSVQoSVNSX0FDS05BSywJIk5BSyIsCQkiQUNLIiksCi0JQklUKElTUl9VQiwJIkJzeSIsCQkiUmR5IiksCi0JQklUKElTUl9JQkIsCSJCdXNCc3kiLAkiQnVzUmR5IiksCi0JQklUKElTUl9TU0QsCSJTbGF2ZVN0b3AiLAlOVUxMKSwKLQlCSVQoSVNSX0FMRCwJIkFMRCIsCQlOVUxMKSwKLQlCSVQoSVNSX0lURSwJIlR4RW1wdHkiLAlOVUxMKSwKLQlCSVQoSVNSX0lSRiwJIlJ4RnVsbCIsCU5VTEwpLAotCUJJVChJU1JfR0NBRCwJIkdlbkNhbGwiLAlOVUxMKSwKLQlCSVQoSVNSX1NBRCwJIlNsYXZlQWRkciIsCU5VTEwpLAotCUJJVChJU1JfQkVELAkiQnVzRXJyIiwJTlVMTCksCisJUFhBX0JJVChJU1JfUldNLAkiUlgiLAkJIlRYIiksCisJUFhBX0JJVChJU1JfQUNLTkFLLAkiTkFLIiwJCSJBQ0siKSwKKwlQWEFfQklUKElTUl9VQiwJCSJCc3kiLAkJIlJkeSIpLAorCVBYQV9CSVQoSVNSX0lCQiwJIkJ1c0JzeSIsCSJCdXNSZHkiKSwKKwlQWEFfQklUKElTUl9TU0QsCSJTbGF2ZVN0b3AiLAlOVUxMKSwKKwlQWEFfQklUKElTUl9BTEQsCSJBTEQiLAkJTlVMTCksCisJUFhBX0JJVChJU1JfSVRFLAkiVHhFbXB0eSIsCU5VTEwpLAorCVBYQV9CSVQoSVNSX0lSRiwJIlJ4RnVsbCIsCU5VTEwpLAorCVBYQV9CSVQoSVNSX0dDQUQsCSJHZW5DYWxsIiwJTlVMTCksCisJUFhBX0JJVChJU1JfU0FELAkiU2xhdmVBZGRyIiwJTlVMTCksCisJUFhBX0JJVChJU1JfQkVELAkiQnVzRXJyIiwJTlVMTCksCiB9OwogCiBzdGF0aWMgdm9pZCBkZWNvZGVfSVNSKHVuc2lnbmVkIGludCB2YWwpCkBAIC0xMjAsMjEgKzEyMCwyMSBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJpdHMgaWNyX2JpdHNbXSA9IHsKLQlCSVQoSUNSX1NUQVJULCAgIlNUQVJUIiwJTlVMTCksCi0JQklUKElDUl9TVE9QLCAgICJTVE9QIiwJCU5VTEwpLAotCUJJVChJQ1JfQUNLTkFLLCAiQUNLTkFLIiwJTlVMTCksCi0JQklUKElDUl9UQiwgICAgICJUQiIsCQlOVUxMKSwKLQlCSVQoSUNSX01BLCAgICAgIk1BIiwJCU5VTEwpLAotCUJJVChJQ1JfU0NMRSwgICAiU0NMRSIsCQkic2NsZSIpLAotCUJJVChJQ1JfSVVFLCAgICAiSVVFIiwJCSJpdWUiKSwKLQlCSVQoSUNSX0dDRCwgICAgIkdDRCIsCQlOVUxMKSwKLQlCSVQoSUNSX0lURUlFLCAgIklURUlFIiwJTlVMTCksCi0JQklUKElDUl9JUkZJRSwgICJJUkZJRSIsCU5VTEwpLAotCUJJVChJQ1JfQkVJRSwgICAiQkVJRSIsCQlOVUxMKSwKLQlCSVQoSUNSX1NTRElFLCAgIlNTRElFIiwJTlVMTCksCi0JQklUKElDUl9BTERJRSwgICJBTERJRSIsCU5VTEwpLAotCUJJVChJQ1JfU0FESUUsICAiU0FESUUiLAlOVUxMKSwKLQlCSVQoSUNSX1VSLCAgICAgIlVSIiwJCSJ1ciIpLAorCVBYQV9CSVQoSUNSX1NUQVJULCAgIlNUQVJUIiwJTlVMTCksCisJUFhBX0JJVChJQ1JfU1RPUCwgICAiU1RPUCIsCU5VTEwpLAorCVBYQV9CSVQoSUNSX0FDS05BSywgIkFDS05BSyIsCU5VTEwpLAorCVBYQV9CSVQoSUNSX1RCLCAgICAgIlRCIiwJTlVMTCksCisJUFhBX0JJVChJQ1JfTUEsICAgICAiTUEiLAlOVUxMKSwKKwlQWEFfQklUKElDUl9TQ0xFLCAgICJTQ0xFIiwJInNjbGUiKSwKKwlQWEFfQklUKElDUl9JVUUsICAgICJJVUUiLAkiaXVlIiksCisJUFhBX0JJVChJQ1JfR0NELCAgICAiR0NEIiwJTlVMTCksCisJUFhBX0JJVChJQ1JfSVRFSUUsICAiSVRFSUUiLAlOVUxMKSwKKwlQWEFfQklUKElDUl9JUkZJRSwgICJJUkZJRSIsCU5VTEwpLAorCVBYQV9CSVQoSUNSX0JFSUUsICAgIkJFSUUiLAlOVUxMKSwKKwlQWEFfQklUKElDUl9TU0RJRSwgICJTU0RJRSIsCU5VTEwpLAorCVBYQV9CSVQoSUNSX0FMRElFLCAgIkFMRElFIiwJTlVMTCksCisJUFhBX0JJVChJQ1JfU0FESUUsICAiU0FESUUiLAlOVUxMKSwKKwlQWEFfQklUKElDUl9VUiwgICAgICJVUiIsCQkidXIiKSwKIH07CiAKIHN0YXRpYyB2b2lkIGRlY29kZV9JQ1IodW5zaWduZWQgaW50IHZhbCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCmluZGV4IDgxNTIwODYuLjYxNzE2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYwpAQCAtNCw3ICs0LDcgQEAKIAogICAgIGkyYyBTdXBwb3J0IGZvciBWaWEgVGVjaG5vbG9naWVzIDgyQzU4NkIgU291dGggQnJpZGdlCiAKLSAgICBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+CisgICAgQ29weXJpZ2h0IChjKSAxOTk4LCAxOTk5IEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNzYsNyArMTc2LDcgQEAKIH0KIAogCi1NT0RVTEVfQVVUSE9SKCJLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4iKTsKK01PRFVMRV9BVVRIT1IoIkt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImkyYyBmb3IgVmlhIHZ0ODJjNTg2YiBzb3V0aGJyaWRnZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwppbmRleCBlZGMyNzUwLi5jOWNlNzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKQEAgLTIsNyArMiw3IEBACiAgICAgaTJjLXZpYXByby5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUKICAgICAgICAgICAgICAgbW9uaXRvcmluZwogICAgIENvcHlyaWdodCAoYykgMTk5OCAtIDIwMDIgIEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4sCi0gICAgUGhpbGlwIEVkZWxicm9jayA8cGhpbEBuZXRyb2VkZ2UuY29tPiwgS3n2c3RpIE3kbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAorICAgIFBoaWxpcCBFZGVsYnJvY2sgPHBoaWxAbmV0cm9lZGdlLmNvbT4sIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+LAogICAgIE1hcmsgRC4gU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4KICAgICBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA3ICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL21lbmVsYXVzLmMKaW5kZXggNjY0MzZiYS4uMmRlYTAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvbWVuZWxhdXMuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9tZW5lbGF1cy5jCkBAIC0xMTk1LDcgKzExOTUsNyBAQAogCQllcnIgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgbWVuZWxhdXNfaXJxLCBJUlFGX0RJU0FCTEVELAogCQkJCSAgRFJJVkVSX05BTUUsIG1lbmVsYXVzKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsICAiY2FuJ3QgZ2V0IElSUSAlZCwgZXJyICVkIiwKKwkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAgImNhbid0IGdldCBJUlEgJWQsIGVyciAlZFxuIiwKIAkJCQkJY2xpZW50LT5pcnEsIGVycik7CiAJCQlnb3RvIGZhaWwxOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jIGIvZHJpdmVycy9pMmMvaTJjLWNvcmUuYwppbmRleCBlNzNkNThjLi4xYTRlOGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCisrKyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4JCSAgICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyogV2l0aCBzb21lIGNoYW5nZXMgZnJvbSBLefZzdGkgTeRsa2tpIDxrbWFsa2tpQGNjLmh1dC5maT4uCisvKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt5w7ZzdGkgTcOkbGtraSA8a21hbGtraUBjYy5odXQuZmk+LgogICAgQWxsIFNNQnVzLXJlbGF0ZWQgdGhpbmdzIGFyZSB3cml0dGVuIGJ5IEZyb2RvIExvb2lqYWFyZCA8ZnJvZG9sQGRkcy5ubD4KICAgIFNNQnVzIDIuMCBzdXBwb3J0IGJ5IE1hcmsgU3R1ZGViYWtlciA8bWRzeHl6MTIzQHlhaG9vLmNvbT4gYW5kCiAgICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IDZkOWZkOTIuLjZlYWVjZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtMTA1Niw2ICsxMDU2LDkgQEAKIGNvbmZpZyBCTEtfREVWX0lERURNQQogCWRlZl9ib29sIEJMS19ERVZfSURFRE1BX1BDSSB8fCBCTEtfREVWX0lERURNQV9QTUFDIHx8IEJMS19ERVZfSURFRE1BX0lDUyB8fCBCTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKIAorY29uZmlnIElERV9BUkNIX09CU09MRVRFX0lOSVQKKwlkZWZfYm9vbCBBTFBIQSB8fCAoQVJNICYmICFBUkNIX0w3MjAwKSB8fCBCTEFDS0ZJTiB8fCBYODYgfHwgSUE2NCB8fCBNMzJSIHx8IE1JUFMgfHwgUEFSSVNDIHx8IFBQQyB8fCAoU1VQRVJINjQgJiYgQkxLX0RFVl9JREVQQ0kpIHx8IFNQQVJDCisKIGVuZGlmCiAKIGNvbmZpZyBCTEtfREVWX0hEX09OTFkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FybS9iYXN0LWlkZS5jIGIvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMKaW5kZXggZjc0NDlkMC4uNDhkYjYxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvYXJtL2Jhc3QtaWRlLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAlody5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gYXV4ICsgKDYgKiAweDIwKTsKIAlody5pcnEgPSBpcnE7CiAKLQlpZGVfcmVnaXN0ZXJfaHcoJmh3LCAwLCBod2lmKTsKKwlpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMLCAwLCBod2lmKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jIGIvZHJpdmVycy9pZGUvYXJtL2ljc2lkZS5jCmluZGV4IGU0ODc1Y2UuLjQxMGEwZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FybS9pY3NpZGUuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vaWNzaWRlLmMKQEAgLTMxNiwyNyArMzE2LDI5IEBACiAKIAlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKIAotCWRpc2FibGVfZG1hKGh3aWYtPmh3LmRtYSk7CisJZGlzYWJsZV9kbWEoc3RhdGUtPmRldi0+ZG1hKTsKIAogCS8qIFRlYXJkb3duIG1hcHBpbmdzIGFmdGVyIERNQSBoYXMgY29tcGxldGVkLiAqLwogCWRtYV91bm1hcF9zZyhzdGF0ZS0+ZGV2LCBod2lmLT5zZ190YWJsZSwgaHdpZi0+c2dfbmVudHMsCiAJCSAgICAgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7CiAKLQlyZXR1cm4gZ2V0X2RtYV9yZXNpZHVlKGh3aWYtPmh3LmRtYSkgIT0gMDsKKwlyZXR1cm4gZ2V0X2RtYV9yZXNpZHVlKHN0YXRlLT5kZXYtPmRtYSkgIT0gMDsKIH0KIAogc3RhdGljIHZvaWQgaWNzaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXN0cnVjdCBpY3NpZGVfc3RhdGUgKnN0YXRlID0gaHdpZi0+aHdpZl9kYXRhOwogCiAJLyogV2UgY2FuIG5vdCBlbmFibGUgRE1BIG9uIGJvdGggY2hhbm5lbHMgc2ltdWx0YW5lb3VzbHkuICovCi0JQlVHX09OKGRtYV9jaGFubmVsX2FjdGl2ZShod2lmLT5ody5kbWEpKTsKLQllbmFibGVfZG1hKGh3aWYtPmh3LmRtYSk7CisJQlVHX09OKGRtYV9jaGFubmVsX2FjdGl2ZShzdGF0ZS0+ZGV2LT5kbWEpKTsKKwllbmFibGVfZG1hKHN0YXRlLT5kZXYtPmRtYSk7CiB9CiAKIHN0YXRpYyBpbnQgaWNzaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOworCXN0cnVjdCBpY3NpZGVfc3RhdGUgKnN0YXRlID0gaHdpZi0+aHdpZl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPmh3Z3JvdXAtPnJxOwogCXVuc2lnbmVkIGludCBkbWFfbW9kZTsKIApAQCAtMzQ4LDcgKzM1MCw3IEBACiAJLyoKIAkgKiBXZSBjYW4gbm90IGVuYWJsZSBETUEgb24gYm90aCBjaGFubmVscy4KIAkgKi8KLQlCVUdfT04oZG1hX2NoYW5uZWxfYWN0aXZlKGh3aWYtPmh3LmRtYSkpOworCUJVR19PTihkbWFfY2hhbm5lbF9hY3RpdmUoc3RhdGUtPmRldi0+ZG1hKSk7CiAKIAlpY3NpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7CiAKQEAgLTM2NSwxNCArMzY3LDE0IEBACiAJLyoKIAkgKiBTZWxlY3QgdGhlIGNvcnJlY3QgdGltaW5nIGZvciB0aGlzIGRyaXZlLgogCSAqLwotCXNldF9kbWFfc3BlZWQoaHdpZi0+aHcuZG1hLCBkcml2ZS0+ZHJpdmVfZGF0YSk7CisJc2V0X2RtYV9zcGVlZChzdGF0ZS0+ZGV2LT5kbWEsIGRyaXZlLT5kcml2ZV9kYXRhKTsKIAogCS8qCiAJICogVGVsbCB0aGUgRE1BIGVuZ2luZSBhYm91dCB0aGUgU0cgdGFibGUgYW5kCiAJICogZGF0YSBkaXJlY3Rpb24uCiAJICovCi0Jc2V0X2RtYV9zZyhod2lmLT5ody5kbWEsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19uZW50cyk7Ci0Jc2V0X2RtYV9tb2RlKGh3aWYtPmh3LmRtYSwgZG1hX21vZGUpOworCXNldF9kbWFfc2coc3RhdGUtPmRldi0+ZG1hLCBod2lmLT5zZ190YWJsZSwgaHdpZi0+c2dfbmVudHMpOworCXNldF9kbWFfbW9kZShzdGF0ZS0+ZGV2LT5kbWEsIGRtYV9tb2RlKTsKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwogCkBAIC00MTUsNyArNDE3LDYgQEAKIAogc3RhdGljIHZvaWQgaWNzaWRlX2RtYV9pbml0KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaHdpZi0+YXRhcGlfZG1hCQk9IDE7CiAJaHdpZi0+bXdkbWFfbWFzawk9IDc7IC8qIE1XMC4uMiAqLwogCWh3aWYtPnN3ZG1hX21hc2sJPSA3OyAvKiBTVzAuLjIgKi8KIApAQCAtNDM5LDQwICs0NDAsMTYgQEAKICNkZWZpbmUgaWNzaWRlX2RtYV9pbml0KGh3aWYpCSgwKQogI2VuZGlmCiAKLXN0YXRpYyBpZGVfaHdpZl90ICppY3NpZGVfZmluZF9od2lmKHVuc2lnbmVkIGxvbmcgZGF0YXBvcnQpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZjsKLQlpbnQgaW5kZXg7Ci0KLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfSFdJRlM7ICsraW5kZXgpIHsKLQkJaHdpZiA9ICZpZGVfaHdpZnNbaW5kZXhdOwotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBkYXRhcG9ydCkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCi0JZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyArK2luZGV4KSB7Ci0JCWh3aWYgPSAmaWRlX2h3aWZzW2luZGV4XTsKLQkJaWYgKCFod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKQotCQkJZ290byBmb3VuZDsKLQl9Ci0KLQlod2lmID0gTlVMTDsKLWZvdW5kOgotCXJldHVybiBod2lmOwotfQotCiBzdGF0aWMgaWRlX2h3aWZfdCAqCiBpY3NpZGVfc2V0dXAodm9pZCBfX2lvbWVtICpiYXNlLCBzdHJ1Y3QgY2FyZGluZm8gKmluZm8sIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcpYmFzZSArIGluZm8tPmRhdGFvZmZzZXQ7CiAJaWRlX2h3aWZfdCAqaHdpZjsKIAotCWh3aWYgPSBpY3NpZGVfZmluZF9od2lmKHBvcnQpOworCWh3aWYgPSBpZGVfZmluZF9wb3J0KHBvcnQpOwogCWlmIChod2lmKSB7CiAJCWludCBpOwogCi0JCW1lbXNldCgmaHdpZi0+aHcsIDAsIHNpemVvZihod19yZWdzX3QpKTsKLQogCQkvKgogCQkgKiBFbnN1cmUgd2UncmUgdXNpbmcgTU1JTwogCQkgKi8KQEAgLTQ4MCwxMyArNDU3LDEwIEBACiAJCWh3aWYtPm1taW8gPSAxOwogCiAJCWZvciAoaSA9IElERV9EQVRBX09GRlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7Ci0JCQlod2lmLT5ody5pb19wb3J0c1tpXSA9IHBvcnQ7CiAJCQlod2lmLT5pb19wb3J0c1tpXSA9IHBvcnQ7CiAJCQlwb3J0ICs9IDEgPDwgaW5mby0+c3RlcHBpbmc7CiAJCX0KLQkJaHdpZi0+aHcuaW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSA9ICh1bnNpZ25lZCBsb25nKWJhc2UgKyBpbmZvLT5jdHJsb2Zmc2V0OwogCQlod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gKHVuc2lnbmVkIGxvbmcpYmFzZSArIGluZm8tPmN0cmxvZmZzZXQ7Ci0JCWh3aWYtPmh3LmlycSAgPSBlYy0+aXJxOwogCQlod2lmLT5pcnEgICAgID0gZWMtPmlycTsKIAkJaHdpZi0+bm9wcm9iZSA9IDA7CiAJCWh3aWYtPmNoaXBzZXQgPSBpZGVfYWNvcm47CkBAIC01MDEsNiArNDc1LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmOwogCXZvaWQgX19pb21lbSAqYmFzZTsKKwl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKIAogCWJhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19NRU1DLCAwLCAwKTsKIAlpZiAoIWJhc2UpCkBAIC01MjQsOSArNDk5LDkgQEAKIAogCXN0YXRlLT5od2lmWzBdID0gaHdpZjsKIAotCXByb2JlX2h3aWZfaW5pdChod2lmKTsKKwlpZHhbMF0gPSBod2lmLT5pbmRleDsKIAotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCXJldHVybiAwOwogfQpAQCAtNTM4LDYgKzUxMyw3IEBACiAJdm9pZCBfX2lvbWVtICppb2NfYmFzZSwgKmVhc2lfYmFzZTsKIAl1bnNpZ25lZCBpbnQgc2VsID0gMDsKIAlpbnQgcmV0OworCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCiAJaW9jX2Jhc2UgPSBlY2FyZG1faW9tYXAoZWMsIEVDQVJEX1JFU19JT0NGQVNULCAwLCAwKTsKIAlpZiAoIWlvY19iYXNlKSB7CkBAIC01OTMsNyArNTY5LDYgQEAKIAlod2lmLT5zZXJpYWxpemVkICA9IDE7CiAJaHdpZi0+Y29uZmlnX2RhdGEgPSAodW5zaWduZWQgbG9uZylpb2NfYmFzZTsKIAlod2lmLT5zZWxlY3RfZGF0YSA9IHNlbDsKLQlod2lmLT5ody5kbWEgICAgICA9IGVjLT5kbWE7CiAKIAltYXRlLT5tYXNrcHJvYyAgICA9IGljc2lkZV9tYXNrcHJvYzsKIAltYXRlLT5jaGFubmVsICAgICA9IDE7CkBAIC02MDIsMTggKzU3NywxNiBAQAogCW1hdGUtPnNlcmlhbGl6ZWQgID0gMTsKIAltYXRlLT5jb25maWdfZGF0YSA9ICh1bnNpZ25lZCBsb25nKWlvY19iYXNlOwogCW1hdGUtPnNlbGVjdF9kYXRhID0gc2VsIHwgMTsKLQltYXRlLT5ody5kbWEgICAgICA9IGVjLT5kbWE7CiAKIAlpZiAoZWMtPmRtYSAhPSBOT19ETUEgJiYgIXJlcXVlc3RfZG1hKGVjLT5kbWEsIGh3aWYtPm5hbWUpKSB7CiAJCWljc2lkZV9kbWFfaW5pdChod2lmKTsKIAkJaWNzaWRlX2RtYV9pbml0KG1hdGUpOwogCX0KIAotCXByb2JlX2h3aWZfaW5pdChod2lmKTsKLQlwcm9iZV9od2lmX2luaXQobWF0ZSk7CisJaWR4WzBdID0gaHdpZi0+aW5kZXg7CisJaWR4WzFdID0gbWF0ZS0+aW5kZXg7CiAKLQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOwotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQobWF0ZSk7CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jIGIvZHJpdmVycy9pZGUvYXJtL2lkZV9hcm0uYwppbmRleCBiY2UyYmVjLi44OTU3Y2JhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hcm0vaWRlX2FybS5jCisrKyBiL2RyaXZlcnMvaWRlL2FybS9pZGVfYXJtLmMKQEAgLTMxLDUgKzMxLDUgQEAKIAltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKIAlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBJREVfQVJNX0lPLCBJREVfQVJNX0lPICsgMHgyMDYpOwogCWh3LmlycSA9IElERV9BUk1fSVJROwotCWlkZV9yZWdpc3Rlcl9odygmaHcsIDEsIE5VTEwpOworCWlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwsIDEsIE5VTEwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jIGIvZHJpdmVycy9pZGUvYXJtL3JhcGlkZS5jCmluZGV4IDgzODExYWYuLjA3NzVhM2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FybS9yYXBpZGUuYworKysgYi9kcml2ZXJzL2lkZS9hcm0vcmFwaWRlLmMKQEAgLTEzLDQyICsxMywyNSBAQAogCiAjaW5jbHVkZSA8YXNtL2VjYXJkLmg+CiAKLS8qCi0gKiBTb21ldGhpbmcgbGlrZSB0aGlzIHJlYWxseSBzaG91bGQgYmUgaW4gZ2VuZXJpYyBjb2RlLCBidXQgaXNuJ3QuCi0gKi8KIHN0YXRpYyBpZGVfaHdpZl90ICoKIHJhcGlkZV9sb2NhdGVfaHdpZih2b2lkIF9faW9tZW0gKmJhc2UsIHZvaWQgX19pb21lbSAqY3RybCwgdW5zaWduZWQgaW50IHN6LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9ICh1bnNpZ25lZCBsb25nKWJhc2U7Ci0JaWRlX2h3aWZfdCAqaHdpZjsKLQlpbnQgaW5kZXgsIGk7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGlkZV9maW5kX3BvcnQocG9ydCk7CisJaW50IGk7CiAKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfSFdJRlM7ICsraW5kZXgpIHsKLQkJaHdpZiA9IGlkZV9od2lmcyArIGluZGV4OwotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBwb3J0KQotCQkJZ290byBmb3VuZDsKLQl9CisJaWYgKGh3aWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CiAKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfSFdJRlM7ICsraW5kZXgpIHsKLQkJaHdpZiA9IGlkZV9od2lmcyArIGluZGV4OwotCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSAwKQotCQkJZ290byBmb3VuZDsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLQotIGZvdW5kOgogCWZvciAoaSA9IElERV9EQVRBX09GRlNFVDsgaSA8PSBJREVfU1RBVFVTX09GRlNFVDsgaSsrKSB7Ci0JCWh3aWYtPmh3LmlvX3BvcnRzW2ldID0gcG9ydDsKIAkJaHdpZi0+aW9fcG9ydHNbaV0gPSBwb3J0OwogCQlwb3J0ICs9IHN6OwogCX0KLQlod2lmLT5ody5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gKHVuc2lnbmVkIGxvbmcpY3RybDsKIAlod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0gKHVuc2lnbmVkIGxvbmcpY3RybDsKLQlod2lmLT5ody5pcnEgPSBod2lmLT5pcnEgPSBpcnE7CisJaHdpZi0+aXJxID0gaXJxOwogCWh3aWYtPm1taW8gPSAxOwogCWRlZmF1bHRfaHdpZl9tbWlvcHMoaHdpZik7Ci0KK291dDoKIAlyZXR1cm4gaHdpZjsKIH0KIApAQCAtNTgsNiArNDEsNyBAQAogCWlkZV9od2lmX3QgKmh3aWY7CiAJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQ7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAKIAlyZXQgPSBlY2FyZF9yZXF1ZXN0X3Jlc291cmNlcyhlYyk7CiAJaWYgKHJldCkKQEAgLTc0LDggKzU4LDExIEBACiAJCWh3aWYtPmh3aWZfZGF0YSA9IGJhc2U7CiAJCWh3aWYtPmdlbmRldi5wYXJlbnQgPSAmZWMtPmRldjsKIAkJaHdpZi0+bm9wcm9iZSA9IDA7Ci0JCXByb2JlX2h3aWZfaW5pdChod2lmKTsKLQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKKworCQlpZHhbMF0gPSBod2lmLT5pbmRleDsKKworCQlpZGVfZGV2aWNlX2FkZChpZHgpOworCiAJCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBod2lmKTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jIGIvZHJpdmVycy9pZGUvY3Jpcy9pZGUtY3Jpcy5jCmluZGV4IDA2Yzc1ZjEuLmZmMjAzNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NyaXMvaWRlLWNyaXMuYworKysgYi9kcml2ZXJzL2lkZS9jcmlzL2lkZS1jcmlzLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQkgICAgICAgICAgICAgICAgaWRlX29mZnNldHMsCiAJCSAgICAgICAgICAgICAgICAwLCAwLCBjcmlzX2lkZV9hY2tfaW50ciwKIAkJICAgICAgICAgICAgICAgIGlkZV9kZWZhdWx0X2lycSgwKSk7Ci0JCWlkZV9yZWdpc3Rlcl9odygmaHcsIDEsICZod2lmKTsKKwkJaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCwgMSwgJmh3aWYpOwogCQlod2lmLT5tbWlvID0gMTsKIAkJaHdpZi0+Y2hpcHNldCA9IGlkZV9ldHJheDEwMDsKIAkJaHdpZi0+c2V0X3Bpb19tb2RlID0gJmNyaXNfc2V0X3Bpb19tb2RlOwpAQCAtODA1LDYgKzgwNSw3IEBACiAJCWh3aWYtPmRtYV9ob3N0X29uID0gJmNyaXNfZG1hX29uOwogCQlod2lmLT5kbWFfb2ZmX3F1aWV0bHkgPSAmY3Jpc19kbWFfb2ZmOwogCQlod2lmLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKKwkJaHdpZi0+aG9zdF9mbGFncyB8PSBJREVfSEZMQUdfTk9fQVRBUElfRE1BOwogCQlod2lmLT5waW9fbWFzayA9IEFUQV9QSU80LAogCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwogCQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaDgzMDAvaWRlLWg4MzAwLmMgYi9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwppbmRleCA2ZDI2YWQ3Li40YTQ5YjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYworKysgYi9kcml2ZXJzL2lkZS9oODMwMC9pZGUtaDgzMDAuYwpAQCAtNjgsNyArNjgsNiBAQAogCQlody0+aW9fcG9ydHNbaV0gPSBDT05GSUdfSDgzMDBfSURFX0JBU0UgKyBIODMwMF9JREVfR0FQKmk7CiAJaHctPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSBDT05GSUdfSDgzMDBfSURFX0FMVDsKIAlody0+aXJxID0gRVhUX0lSUTAgKyBDT05GSUdfSDgzMDBfSURFX0lSUTsKLQlody0+ZG1hID0gTk9fRE1BOwogCWh3LT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiB9CiAKQEAgLTEwMSw3ICsxMDAsNyBAQAogCWh3X3NldHVwKCZodyk7CiAKIAkvKiByZWdpc3RlciBpZiAqLwotCWlkeCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIDEsICZod2lmKTsKKwlpZHggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMLCAxLCAmaHdpZik7CiAJaWYgKGlkeCA9PSAtMSkgewogCQlwcmludGsoS0VSTl9FUlIgImlkZS1oODMwMDogSURFIEkvRiByZWdpc3RlciBmYWlsZWRcbiIpOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCAxZDVmNjgyLi44OWRmNDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTM1MCw3ICszNTAsNyBAQAogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwogCWFyZ3MuY29tbWFuZF90eXBlID0gSURFX0RSSVZFX1RBU0tfTk9fREFUQTsKLQlhcmdzLmRhdGFfcGhhc2UgICA9IFRBU0tGSUxFX0lOOworCWFyZ3MuZGF0YV9waGFzZSAgID0gVEFTS0ZJTEVfTk9fREFUQTsKIAlhcmdzLmhhbmRsZXIgICAgICA9ICZ0YXNrX25vX2RhdGFfaW50cjsKIAogCS8qIGNvbnZlcnQgZ3RmIHRvIElERSBUYXNrZmlsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwppbmRleCBjYTg0MzUyLi41N2E1ZjYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgUmVmb3JtYXQgdG8gbWF0Y2gga2VybmVsIHRhYmJpbmcgc3R5bGUuCiAgKiAgICAgICAgICAgICAgICAgICAgICAgQWRkIENEUk9NX0dFVF9VUEMgaW9jdGwuCiAgKiAzLjEwICBBcHIgMTAsIDE5OTYgLS0gRml4IGNvbXBpbGF0aW9uIGVycm9yIHdpdGggU1RBTkRBUkRfQVRBUEkuCi0gKiAzLjExICBBcHIgMjksIDE5OTYgLS0gUGF0Y2ggZnJvbSBIZWlrbyBFaXNzZmVsZHQgPGhlaWtvQGNvbG9zc3VzLmVzY2FwZS5kZT4KKyAqIDMuMTEgIEFwciAyOSwgMTk5NiAtLSBQYXRjaCBmcm9tIEhlaWtvIEVpw59mZWxkdCA8aGVpa29AY29sb3NzdXMuZXNjYXBlLmRlPgogICogICAgICAgICAgICAgICAgICAgICAgIHRvIHJlbW92ZSByZWR1bmRhbnQgdmVyaWZ5X2FyZWEgY2FsbHMuCiAgKiAzLjEyICBNYXkgIDcsIDE5OTYgLS0gUnVkaW1lbnRhcnkgY2hhbmdlciBzdXBwb3J0LiAgQmFzZWQgb24gcGF0Y2hlcwogICogICAgICAgICAgICAgICAgICAgICAgICBmcm9tIEdlcmhhcmQgWnViZXIgPHp1YmVyQGJlcmxpbi5zbmFmdS5kZT4uCkBAIC0yNTYsNyArMjU2LDcgQEAKICAqCQkJLSBNaW5pbWl6ZSB0aGUgVE9DIHJlYWRpbmcgLSBvbmx5IGRvIGl0IHdoZW4gd2UKICAqCQkJICBrbm93IGEgbWVkaWEgY2hhbmdlIGhhcyBvY2N1cnJlZC4KICAqCQkJLSBNb3ZlZCBhbGwgdGhlIENEUk9NUkVBRHggaW9jdGxzIHRvIHRoZSBVbmlmb3JtIGxheWVyLgotICoJCQktIEhlaWtvIEVpc3NmZWxkdCA8aGVpa29AY29sb3NzdXMuZXNjYXBlLmRlPiBzdXBwbGllZAorICoJCQktIEhlaWtvIEVpw59mZWxkdCA8aGVpa29AY29sb3NzdXMuZXNjYXBlLmRlPiBzdXBwbGllZAogICoJCQkgIHNvbWUgZml4ZXMgZm9yIENESS4KICAqCQkJLSBDRC1ST00gbGVhdmluZyBkb29yIGxvY2tlZCBmaXggZnJvbSBBbmRyaWVzCiAgKgkJCSAgQnJvdXdlciA8QW5kcmllcy5Ccm91d2VyQGN3aS5ubD4KQEAgLTIzNDEsNyArMjM0MSw3IEBACiAJCSAgIElmIHdlIGdldCBhbiBlcnJvciBmb3IgdGhlIHJlZ3VsYXIgY2FzZSwgd2UgYXNzdW1lCiAJCSAgIGEgQ0RJIHdpdGhvdXQgYWRkaXRpb25hbCBhdWRpbyB0cmFja3MuIEluIHRoaXMgY2FzZQogCQkgICB0aGUgcmVhZGFibGUgVE9DIGlzIGVtcHR5IChDREkgdHJhY2tzIGFyZSBub3QgaW5jbHVkZWQpCi0JCSAgIGFuZCBvbmx5IGhvbGRzIHRoZSBMZWFkb3V0IGVudHJ5LiBIZWlrbyBFad9mZWxkdCAqLworCQkgICBhbmQgb25seSBob2xkcyB0aGUgTGVhZG91dCBlbnRyeS4gSGVpa28gRWnDn2ZlbGR0ICovCiAJCW50cmFja3MgPSAwOwogCQlzdGF0ID0gY2Ryb21fcmVhZF90b2NlbnRyeShkcml2ZSwgQ0RST01fTEVBRE9VVCwgMSwgMCwKIAkJCQkJICAgKGNoYXIgKikmdG9jLT5oZHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCA5MjE3N2NhLi4wMDEyM2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTE2OSw3ICsxNjksNyBAQAogCiAJbnNlY3RvcnMuYWxsCQk9ICh1MTYpIHJxLT5ucl9zZWN0b3JzOwogCi0JaWYgKGh3aWYtPm5vX2xiYTQ4X2RtYSAmJiBsYmE0OCAmJiBkbWEpIHsKKwlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSAmJiBsYmE0OCAmJiBkbWEpIHsKIAkJaWYgKGJsb2NrICsgcnEtPm5yX3NlY3RvcnMgPiAxVUxMIDw8IDI4KQogCQkJZG1hID0gMDsKIAkJZWxzZQpAQCAtNTkzLDI4ICs1OTMsMTIgQEAKIAlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmFyZ3MsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGdldF9zbWFydF92YWx1ZXMoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCAqYnVmKQorc3RhdGljIGludCBnZXRfc21hcnRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpidWYsIHU4IHN1Yl9jbWQpCiB7CiAJaWRlX3Rhc2tfdCBhcmdzOwogCiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MudGZSZWdpc3RlcltJREVfRkVBVFVSRV9PRkZTRVRdCT0gU01BUlRfUkVBRF9WQUxVRVM7Ci0JYXJncy50ZlJlZ2lzdGVyW0lERV9OU0VDVE9SX09GRlNFVF0JPSAweDAxOwotCWFyZ3MudGZSZWdpc3RlcltJREVfTENZTF9PRkZTRVRdCT0gU01BUlRfTENZTF9QQVNTOwotCWFyZ3MudGZSZWdpc3RlcltJREVfSENZTF9PRkZTRVRdCT0gU01BUlRfSENZTF9QQVNTOwotCWFyZ3MudGZSZWdpc3RlcltJREVfQ09NTUFORF9PRkZTRVRdCT0gV0lOX1NNQVJUOwotCWFyZ3MuY29tbWFuZF90eXBlCQkJPSBJREVfRFJJVkVfVEFTS19JTjsKLQlhcmdzLmRhdGFfcGhhc2UJCQkJPSBUQVNLRklMRV9JTjsKLQlhcmdzLmhhbmRsZXIJCQkJPSAmdGFza19pbl9pbnRyOwotCSh2b2lkKSBzbWFydF9lbmFibGUoZHJpdmUpOwotCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgYnVmKTsKLX0KLQotc3RhdGljIGludCBnZXRfc21hcnRfdGhyZXNob2xkcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpidWYpCi17Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQlhcmdzLnRmUmVnaXN0ZXJbSURFX0ZFQVRVUkVfT0ZGU0VUXQk9IFNNQVJUX1JFQURfVEhSRVNIT0xEUzsKKwlhcmdzLnRmUmVnaXN0ZXJbSURFX0ZFQVRVUkVfT0ZGU0VUXQk9IHN1Yl9jbWQ7CiAJYXJncy50ZlJlZ2lzdGVyW0lERV9OU0VDVE9SX09GRlNFVF0JPSAweDAxOwogCWFyZ3MudGZSZWdpc3RlcltJREVfTENZTF9PRkZTRVRdCT0gU01BUlRfTENZTF9QQVNTOwogCWFyZ3MudGZSZWdpc3RlcltJREVfSENZTF9PRkZTRVRdCT0gU01BUlRfSENZTF9QQVNTOwpAQCAtNjU2LDcgKzY0MCw3IEBACiAJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKIAlpbnQJCWxlbiA9IDAsIGkgPSAwOwogCi0JaWYgKCFnZXRfc21hcnRfdGhyZXNob2xkcyhkcml2ZSwgcGFnZSkpIHsKKwlpZiAoZ2V0X3NtYXJ0X2RhdGEoZHJpdmUsIHBhZ2UsIFNNQVJUX1JFQURfVEhSRVNIT0xEUykgPT0gMCkgewogCQl1bnNpZ25lZCBzaG9ydCAqdmFsID0gKHVuc2lnbmVkIHNob3J0ICopIHBhZ2U7CiAJCWNoYXIgKm91dCA9ICgoY2hhciAqKXZhbCkgKyAoU0VDVE9SX1dPUkRTICogNCk7CiAJCXBhZ2UgPSBvdXQ7CkBAIC02NzUsNyArNjU5LDcgQEAKIAlpZGVfZHJpdmVfdAkqZHJpdmUgPSAoaWRlX2RyaXZlX3QgKilkYXRhOwogCWludAkJbGVuID0gMCwgaSA9IDA7CiAKLQlpZiAoIWdldF9zbWFydF92YWx1ZXMoZHJpdmUsIHBhZ2UpKSB7CisJaWYgKGdldF9zbWFydF9kYXRhKGRyaXZlLCBwYWdlLCBTTUFSVF9SRUFEX1ZBTFVFUykgPT0gMCkgewogCQl1bnNpZ25lZCBzaG9ydCAqdmFsID0gKHVuc2lnbmVkIHNob3J0ICopIHBhZ2U7CiAJCWNoYXIgKm91dCA9ICgoY2hhciAqKXZhbCkgKyAoU0VDVE9SX1dPUkRTICogNCk7CiAJCXBhZ2UgPSBvdXQ7CkBAIC04NTYsNyArODQwLDcgQEAKIAogCWRyaXZlLT5hZGRyZXNzaW5nID0gIDA7CiAKLQlpZiAoSFdJRihkcml2ZSktPm5vX2xiYTQ4KQorCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWlkZWRpc2tfc3VwcG9ydHNfbGJhNDgoZHJpdmUtPmlkKSkKQEAgLTg4OSw2ICs4NzMsNyBAQAogCiBzdGF0aWMgdm9pZCBpZGVkaXNrX3NldHVwIChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CisJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBoZF9kcml2ZWlkICppZCA9IGRyaXZlLT5pZDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY2FwYWNpdHk7CiAKQEAgLTkwOSw3ICs4OTQsNiBAQAogCSh2b2lkKXNldF9sYmFfYWRkcmVzc2luZyhkcml2ZSwgMSk7CiAKIAlpZiAoZHJpdmUtPmFkZHJlc3NpbmcgPT0gMSkgewotCQlpZGVfaHdpZl90ICpod2lmID0gSFdJRihkcml2ZSk7CiAJCWludCBtYXhfcyA9IDIwNDg7CiAKIAkJaWYgKG1heF9zID4gaHdpZi0+cnFzaXplKQpAQCAtOTMyLDcgKzkxNiw3IEBACiAJCWRyaXZlLT5jYXBhY2l0eTY0ID0gMVVMTCA8PCAyODsKIAl9CiAKLQlpZiAoZHJpdmUtPmh3aWYtPm5vX2xiYTQ4X2RtYSAmJiBkcml2ZS0+YWRkcmVzc2luZykgeworCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpICYmIGRyaXZlLT5hZGRyZXNzaW5nKSB7CiAJCWlmIChkcml2ZS0+Y2FwYWNpdHk2NCA+IDFVTEwgPDwgMjgpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjYW5ub3QgdXNlIExCQTQ4IERNQSAtIFBJTyBtb2RlIHdpbGwiCiAJCQkJCSAiIGJlIHVzZWQgZm9yIGFjY2Vzc2luZyBzZWN0b3JzID4gJXVcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKaW5kZXggYmM1N2NlNi4uNDI4ZjdhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwpAQCAtMzM4LDggKzMzOCwxMCBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaGRfZHJpdmVpZCAqaWQgPSBkcml2ZS0+aWQ7CiAKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmIGh3aWYtPmF0YXBpX2RtYSA9PSAwKQotCQlyZXR1cm4gMDsKKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7CisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0FUQVBJX0RNQSkKKwkJCXJldHVybiAtMTsKKwl9CiAKIAkvKgogCSAqIEVuYWJsZSBETUEgb24gYW55IGRyaXZlIHRoYXQgaGFzCkBAIC03MjYsOCArNzI4LDEwIEBACiAJaW50IHgsIGk7CiAJdTggbW9kZSA9IDA7CiAKLQlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrICYmIGh3aWYtPmF0YXBpX2RtYSA9PSAwKQotCQlyZXR1cm4gMDsKKwlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7CisJCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0FUQVBJX0RNQSkKKwkJCXJldHVybiAwOworCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHhmZXJfbW9kZV9iYXNlcyk7IGkrKykgewogCQlpZiAocmVxX21vZGUgPCB4ZmVyX21vZGVfYmFzZXNbaV0pCkBAIC04OTcsMTAgKzkwMSw3IEBACiAKIEVYUE9SVF9TWU1CT0woaWRlX2RtYV90aW1lb3V0KTsKIAotLyoKLSAqIE5lZWRlZCBmb3IgYWxsb3dpbmcgZnVsbCBtb2R1bGFyIHN1cHBvcnQgb2YgaWRlLWRyaXZlcgotICovCi1zdGF0aWMgaW50IGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikKK3N0YXRpYyB2b2lkIGlkZV9yZWxlYXNlX2RtYV9lbmdpbmUoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlpZiAoaHdpZi0+ZG1hdGFibGVfY3B1KSB7CiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaHdpZi0+cGNpX2RldiwKQEAgLTkwOSw3ICs5MTAsNiBAQAogCQkJCSAgICBod2lmLT5kbWF0YWJsZV9kbWEpOwogCQlod2lmLT5kbWF0YWJsZV9jcHUgPSBOVUxMOwogCX0KLQlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBpZGVfcmVsZWFzZV9pb21pb19kbWEoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTk1MiwxMiArOTUyLDYgQEAKIHsKIAlwcmludGsoS0VSTl9JTkZPICIgICAgJXM6IE1NSU8tRE1BICIsIGh3aWYtPm5hbWUpOwogCi0gCWh3aWYtPmRtYV9iYXNlID0gYmFzZTsKLQotCWlmKGh3aWYtPm1hdGUpCi0JCWh3aWYtPmRtYV9tYXN0ZXIgPSAoaHdpZi0+Y2hhbm5lbCkgPyBod2lmLT5tYXRlLT5kbWFfYmFzZSA6IGJhc2U7Ci0JZWxzZQotCQlod2lmLT5kbWFfbWFzdGVyID0gYmFzZTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTcxLDggKzk2NSw2IEBACiAJCXJldHVybiAxOwogCX0KIAotCWh3aWYtPmRtYV9iYXNlID0gYmFzZTsKLQogCWlmIChod2lmLT5jZHMtPmV4dHJhKSB7CiAJCWh3aWYtPmV4dHJhX2Jhc2UgPSBiYXNlICsgKGh3aWYtPmNoYW5uZWwgPyA4IDogMTYpOwogCkBAIC05ODcsMTAgKzk3OSw2IEBACiAJCX0KIAl9CiAKLQlpZihod2lmLT5tYXRlKQotCQlod2lmLT5kbWFfbWFzdGVyID0gKGh3aWYtPmNoYW5uZWwpID8gaHdpZi0+bWF0ZS0+ZG1hX2Jhc2U6YmFzZTsKLQllbHNlCi0JCWh3aWYtPmRtYV9tYXN0ZXIgPSBiYXNlOwogCXJldHVybiAwOwogfQogCkBAIC0xMDAyLDEyICs5OTAsOSBAQAogCXJldHVybiBpZGVfaW9taW9fZG1hKGh3aWYsIGJhc2UsIHBvcnRzKTsKIH0KIAotLyoKLSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBmb3IgYSBkeW5hbWljYWxseSBpbnN0YWxsZWQgaW50ZXJmYWNlLiBEb24ndCBfX2luaXQgaXQKLSAqLwotdm9pZCBpZGVfc2V0dXBfZG1hIChpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIGRtYV9iYXNlLCB1bnNpZ25lZCBpbnQgbnVtX3BvcnRzKQordm9pZCBpZGVfc2V0dXBfZG1hKGlkZV9od2lmX3QgKmh3aWYsIHVuc2lnbmVkIGxvbmcgYmFzZSwgdW5zaWduZWQgbnVtX3BvcnRzKQogewotCWlmIChpZGVfZG1hX2lvYmFzZShod2lmLCBkbWFfYmFzZSwgbnVtX3BvcnRzKSkKKwlpZiAoaWRlX2RtYV9pb2Jhc2UoaHdpZiwgYmFzZSwgbnVtX3BvcnRzKSkKIAkJcmV0dXJuOwogCiAJaWYgKGlkZV9hbGxvY2F0ZV9kbWFfZW5naW5lKGh3aWYpKSB7CkBAIC0xMDE1LDYgKzEwMDAsMTMgQEAKIAkJcmV0dXJuOwogCX0KIAorCWh3aWYtPmRtYV9iYXNlID0gYmFzZTsKKworCWlmIChod2lmLT5tYXRlKQorCQlod2lmLT5kbWFfbWFzdGVyID0gaHdpZi0+Y2hhbm5lbCA/IGh3aWYtPm1hdGUtPmRtYV9iYXNlIDogYmFzZTsKKwllbHNlCisJCWh3aWYtPmRtYV9tYXN0ZXIgPSBiYXNlOworCiAJaWYgKCEoaHdpZi0+ZG1hX2NvbW1hbmQpKQogCQlod2lmLT5kbWFfY29tbWFuZAk9IGh3aWYtPmRtYV9iYXNlOwogCWlmICghKGh3aWYtPmRtYV92ZW5kb3IxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pby5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKaW5kZXggZWM4MzVlMy4uYzg5ZjBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvLmMKQEAgLTQ3LDE1ICs0NywxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAogc3RhdGljIGludCBfX2lkZV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgICAgaW50IHVwdG9kYXRlLCB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMpCisJCQkgICAgIGludCB1cHRvZGF0ZSwgdW5zaWduZWQgaW50IG5yX2J5dGVzLCBpbnQgZGVxdWV1ZSkKIHsKIAlpbnQgcmV0ID0gMTsKIApAQCAtODAsOSArODAsMTEgQEAKIAogCWlmICghZW5kX3RoYXRfcmVxdWVzdF9jaHVuayhycSwgdXB0b2RhdGUsIG5yX2J5dGVzKSkgewogCQlhZGRfZGlza19yYW5kb21uZXNzKHJxLT5ycV9kaXNrKTsKLQkJaWYgKCFsaXN0X2VtcHR5KCZycS0+cXVldWVsaXN0KSkKLQkJCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOwotCQlIV0dST1VQKGRyaXZlKS0+cnEgPSBOVUxMOworCQlpZiAoZGVxdWV1ZSkgeworCQkJaWYgKCFsaXN0X2VtcHR5KCZycS0+cXVldWVsaXN0KSkKKwkJCQlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJxKTsKKwkJCUhXR1JPVVAoZHJpdmUpLT5ycSA9IE5VTEw7CisJCX0KIAkJZW5kX3RoYXRfcmVxdWVzdF9sYXN0KHJxLCB1cHRvZGF0ZSk7CiAJCXJldCA9IDA7CiAJfQpAQCAtMTIyLDcgKzEyNCw3IEBACiAJCQlucl9ieXRlcyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzIDw8IDk7CiAJfQogCi0JcmV0ID0gX19pZGVfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRvZGF0ZSwgbnJfYnl0ZXMpOworCXJldCA9IF9faWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgdXB0b2RhdGUsIG5yX2J5dGVzLCAxKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKQEAgLTI1NSwzOSArMjU3LDEzIEBACiAJCQkgICAgIGludCB1cHRvZGF0ZSwgaW50IG5yX3NlY3RvcnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMTsKKwlpbnQgcmV0OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0KIAlCVUdfT04oIWJsa19ycV9zdGFydGVkKHJxKSk7Ci0KLQkvKgotCSAqIGlmIGZhaWxmYXN0IGlzIHNldCBvbiBhIHJlcXVlc3QsIG92ZXJyaWRlIG51bWJlciBvZiBzZWN0b3JzIGFuZAotCSAqIGNvbXBsZXRlIHRoZSB3aG9sZSByZXF1ZXN0IHJpZ2h0IG5vdwotCSAqLwotCWlmIChibGtfbm9yZXRyeV9yZXF1ZXN0KHJxKSAmJiBlbmRfaW9fZXJyb3IodXB0b2RhdGUpKQotCQlucl9zZWN0b3JzID0gcnEtPmhhcmRfbnJfc2VjdG9yczsKLQotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpICYmIGVuZF9pb19lcnJvcih1cHRvZGF0ZSkgJiYgIXJxLT5lcnJvcnMpCi0JCXJxLT5lcnJvcnMgPSAtRUlPOwotCi0JLyoKLQkgKiBkZWNpZGUgd2hldGhlciB0byByZWVuYWJsZSBETUEgLS0gMyBpcyBhIHJhbmRvbSBtYWdpYyBmb3Igbm93LAotCSAqIGlmIHdlIERNQSB0aW1lb3V0IG1vcmUgdGhhbiAzIHRpbWVzLCBqdXN0IHN0YXkgaW4gUElPCi0JICovCi0JaWYgKGRyaXZlLT5zdGF0ZSA9PSBETUFfUElPX1JFVFJZICYmIGRyaXZlLT5yZXRyeV9waW8gPD0gMykgewotCQlkcml2ZS0+c3RhdGUgPSAwOwotCQlIV0dST1VQKGRyaXZlKS0+aHdpZi0+aWRlX2RtYV9vbihkcml2ZSk7Ci0JfQotCi0JaWYgKCFlbmRfdGhhdF9yZXF1ZXN0X2ZpcnN0KHJxLCB1cHRvZGF0ZSwgbnJfc2VjdG9ycykpIHsKLQkJYWRkX2Rpc2tfcmFuZG9tbmVzcyhycS0+cnFfZGlzayk7Ci0JCWlmIChibGtfcnFfdGFnZ2VkKHJxKSkKLQkJCWJsa19xdWV1ZV9lbmRfdGFnKGRyaXZlLT5xdWV1ZSwgcnEpOwotCQllbmRfdGhhdF9yZXF1ZXN0X2xhc3QocnEsIHVwdG9kYXRlKTsKLQkJcmV0ID0gMDsKLQl9CisJcmV0ID0gX19pZGVfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRvZGF0ZSwgbnJfc2VjdG9ycyA8PCA5LCAwKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdCk7CkBAIC00ODQsNyArNDYwLDggQEAKIAkJfQogCX0KIAotCWlmICgoc3RhdCAmIERSUV9TVEFUKSAmJiBycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJiBod2lmLT5lcnJfc3RvcHNfZmlmbyA9PSAwKQorCWlmICgoc3RhdCAmIERSUV9TVEFUKSAmJiBycV9kYXRhX2RpcihycSkgPT0gUkVBRCAmJgorCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPKSA9PSAwKQogCQl0cnlfdG9fZmx1c2hfbGVmdG92ZXJfZGF0YShkcml2ZSk7CiAKIAlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVggfHwgYmxrX25vcmV0cnlfcmVxdWVzdChycSkpIHsKQEAgLTc5OSw3ICs3NzYsMjAgQEAKIAkJcy0+Yi5zZXRfdHVuZSA9IDA7CiAKIAkJaWYgKHNldF9waW9fbW9kZV9hYnVzZShkcml2ZS0+aHdpZiwgcmVxX3BpbykpIHsKLQkJCWlmIChod2lmLT5zZXRfcGlvX21vZGUpCisKKwkJCWlmIChod2lmLT5zZXRfcGlvX21vZGUgPT0gTlVMTCkKKwkJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisKKwkJCS8qCisJCQkgKiB0YWtlIGlkZV9sb2NrIGZvciBkcml2ZS0+W25vX111bm1hc2svW25vX11pb18zMmJpdAorCQkJICovCisJCQlpZiAocmVxX3BpbyA9PSA4IHx8IHJlcV9waW8gPT0gOSkgeworCQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJCQlod2lmLT5zZXRfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8pOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJCQl9IGVsc2UKIAkJCQlod2lmLT5zZXRfcGlvX21vZGUoZHJpdmUsIHJlcV9waW8pOwogCQl9IGVsc2UgewogCQkJaW50IGtlZXBfZG1hID0gZHJpdmUtPnVzaW5nX2RtYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IGQ0ZDc5MGYuLjk1MTY4ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtNjkzLDM1ICs2OTMsMTYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUEgKi8KIAotLyoKLSAqIFVwZGF0ZSB0aGUgCi0gKi8KLWludCBpZGVfZHJpdmVpZF91cGRhdGUgKGlkZV9kcml2ZV90ICpkcml2ZSkKK2ludCBpZGVfZHJpdmVpZF91cGRhdGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGhkX2RyaXZlaWQgKmlkOwotI2lmIDAKLQlpZCA9IGttYWxsb2MoU0VDVE9SX1dPUkRTKjQsIEdGUF9BVE9NSUMpOwotCWlmICghaWQpCi0JCXJldHVybiAwOworCXVuc2lnbmVkIGxvbmcgdGltZW91dCwgZmxhZ3M7CiAKLQl0YXNrZmlsZV9saWJfZ2V0X2lkZW50aWZ5KGRyaXZlLCAoY2hhciAqKSZpZCk7Ci0KLQlpZGVfZml4X2RyaXZlaWQoaWQpOwotCWlmIChpZCkgewotCQlkcml2ZS0+aWQtPmRtYV91bHRyYSA9IGlkLT5kbWFfdWx0cmE7Ci0JCWRyaXZlLT5pZC0+ZG1hX213b3JkID0gaWQtPmRtYV9td29yZDsKLQkJZHJpdmUtPmlkLT5kbWFfMXdvcmQgPSBpZC0+ZG1hXzF3b3JkOwotCQkvKiBhbnl0aGluZyBtb3JlID8gKi8KLQkJa2ZyZWUoaWQpOwotCX0KLQlyZXR1cm4gMTsKLSNlbHNlCiAJLyoKIAkgKiBSZS1yZWFkIGRyaXZlLT5pZCBmb3IgcG9zc2libGUgRE1BIG1vZGUKIAkgKiBjaGFuZ2UgKGNvcGllZCBmcm9tIGlkZS1wcm9iZS5jKQogCSAqLwotCXVuc2lnbmVkIGxvbmcgdGltZW91dCwgZmxhZ3M7CiAKIAlTRUxFQ1RfTUFTSyhkcml2ZSwgMSk7CiAJaWYgKElERV9DT05UUk9MX1JFRykKQEAgLTc2Myw3ICs3NDQsNiBAQAogCX0KIAogCXJldHVybiAxOwotI2VuZGlmCiB9CiAKIGludCBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggc3BlZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKaW5kZXggMmI4MDA5Yy4uZTI0NTUyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBucC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwpAQCAtNDAsOSArNDAsOCBAQAogCWlkZV9zdGRfaW5pdF9wb3J0cygmaHcsIHBucF9wb3J0X3N0YXJ0KGRldiwgMCksCiAJCQkJcG5wX3BvcnRfc3RhcnQoZGV2LCAxKSk7CiAJaHcuaXJxID0gcG5wX2lycShkZXYsIDApOwotCWh3LmRtYSA9IE5PX0RNQTsKIAotCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOworCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCwgMSwgJmh3aWYpOwogCiAJaWYgKGluZGV4ICE9IC0xKSB7CiAJICAgIAlwcmludGsoS0VSTl9JTkZPICJpZGUlZDogZ2VuZXJpYyBQblAgSURFIGludGVyZmFjZVxuIiwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwppbmRleCAzYzk0NWQ2Li5kNTE0NmM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYwpAQCAtNzE3LDcgKzcxNyw3IEBACiAgKiBUaGlzIHJvdXRpbmUgb25seSBrbm93cyBob3cgdG8gbG9vayBmb3IgZHJpdmUgdW5pdHMgMCBhbmQgMQogICogb24gYW4gaW50ZXJmYWNlLCBzbyBhbnkgc2V0dGluZyBvZiBNQVhfRFJJVkVTID4gMiB3b24ndCB3b3JrIGhlcmUuCiAgKi8KLXN0YXRpYyB2b2lkIHByb2JlX2h3aWYoaWRlX2h3aWZfdCAqaHdpZiwgdm9pZCAoKmZpeHVwKShpZGVfaHdpZl90ICpod2lmKSkKK3N0YXRpYyB2b2lkIHByb2JlX2h3aWYoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpcnFkOwpAQCAtODE5LDggKzgxOSw4IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoZml4dXApCi0JCWZpeHVwKGh3aWYpOworCWlmIChod2lmLT5maXh1cCkKKwkJaHdpZi0+Zml4dXAoaHdpZik7CiAKIAlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7CiAJCWlkZV9kcml2ZV90ICpkcml2ZSA9ICZod2lmLT5kcml2ZXNbdW5pdF07CkBAIC04NTksMTAgKzg1OSwxMSBAQAogfQogCiBzdGF0aWMgaW50IGh3aWZfaW5pdChpZGVfaHdpZl90ICpod2lmKTsKK3N0YXRpYyB2b2lkIGh3aWZfcmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKTsKIAotaW50IHByb2JlX2h3aWZfaW5pdF93aXRoX2ZpeHVwKGlkZV9od2lmX3QgKmh3aWYsIHZvaWQgKCpmaXh1cCkoaWRlX2h3aWZfdCAqaHdpZikpCitzdGF0aWMgaW50IHByb2JlX2h3aWZfaW5pdChpZGVfaHdpZl90ICpod2lmKQogewotCXByb2JlX2h3aWYoaHdpZiwgZml4dXApOworCXByb2JlX2h3aWYoaHdpZik7CiAKIAlpZiAoIWh3aWZfaW5pdChod2lmKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogZmFpbGVkIHRvIGluaXRpYWxpemUgSURFIGludGVyZmFjZVxuIiwKQEAgLTg3MCwzNCArODcxLDEyIEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoaHdpZi0+cHJlc2VudCkgewotCQl1MTYgdW5pdCA9IDA7Ci0JCWludCByZXQ7CisJaWYgKGh3aWYtPnByZXNlbnQpCisJCWh3aWZfcmVnaXN0ZXJfZGV2aWNlcyhod2lmKTsKIAotCQlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KSB7Ci0JCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW3VuaXRdOwotCQkJLyogRm9yIG5vdyBkb24ndCBhdHRhY2ggYWJzZW50IGRyaXZlcywgd2UgbWF5Ci0JCQkgICB3YW50IHRoZW0gb24gZGVmYXVsdCBvciBhIG5ldyAiZW1wdHkiIGNsYXNzCi0JCQkgICBmb3IgaG90cGx1ZyByZXByb2JpbmcgPyAqLwotCQkJaWYgKGRyaXZlLT5wcmVzZW50KSB7Ci0JCQkJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZkcml2ZS0+Z2VuZGV2KTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSURFOiAlczogIgotCQkJCQkJImRldmljZV9yZWdpc3RlciBlcnJvcjogJWRcbiIsCi0JCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7Ci0JCQl9Ci0JCX0KLQl9CiAJcmV0dXJuIDA7CiB9CiAKLWludCBwcm9iZV9od2lmX2luaXQoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlyZXR1cm4gcHJvYmVfaHdpZl9pbml0X3dpdGhfZml4dXAoaHdpZiwgTlVMTCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0wocHJvYmVfaHdpZl9pbml0KTsKLQogI2lmIE1BWF9IV0lGUyA+IDEKIC8qCiAgKiBzYXZlX21hdGNoKCkgaXMgdXNlZCB0byBzaW1wbGlmeSBsb2dpYyBpbiBpbml0X2lycSgpIGJlbG93LgpAQCAtOTUxLDcgKzkzMCw4IEBACiAJYmxrX3F1ZXVlX3NlZ21lbnRfYm91bmRhcnkocSwgMHhmZmZmKTsKIAogCWlmICghaHdpZi0+cnFzaXplKSB7Ci0JCWlmIChod2lmLT5ub19sYmE0OCB8fCBod2lmLT5ub19sYmE0OF9kbWEpCisJCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OCkgfHwKKwkJICAgIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4X0RNQSkpCiAJCQlod2lmLT5ycXNpemUgPSAyNTY7CiAJCWVsc2UKIAkJCWh3aWYtPnJxc2l6ZSA9IDY1NTM2OwpAQCAtMTM3OCw2ICsxMzU4LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGh3aWZfcmVnaXN0ZXJfZGV2aWNlcyhpZGVfaHdpZl90ICpod2lmKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9EUklWRVM7IGkrKykgeworCQlpZGVfZHJpdmVfdCAqZHJpdmUgPSAmaHdpZi0+ZHJpdmVzW2ldOworCisJCWlmIChkcml2ZS0+cHJlc2VudCkgeworCQkJaW50IHJldCA9IGRldmljZV9yZWdpc3RlcigmZHJpdmUtPmdlbmRldik7CisKKwkJCWlmIChyZXQgPCAwKQorCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklERTogJXM6ICIKKwkJCQkJImRldmljZV9yZWdpc3RlciBlcnJvcjogJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmV0KTsKKwkJfQorCX0KK30KKwogaW50IGlkZXByb2JlX2luaXQgKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGluZGV4OwpAQCAtMTM4OSwyNyArMTM4NywxOCBAQAogCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyArK2luZGV4KQogCQlpZiAocHJvYmVbaW5kZXhdKQotCQkJcHJvYmVfaHdpZigmaWRlX2h3aWZzW2luZGV4XSwgTlVMTCk7CisJCQlwcm9iZV9od2lmKCZpZGVfaHdpZnNbaW5kZXhdKTsKIAlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNQVhfSFdJRlM7ICsraW5kZXgpCiAJCWlmIChwcm9iZVtpbmRleF0pCiAJCQlod2lmX2luaXQoJmlkZV9od2lmc1tpbmRleF0pOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgKytpbmRleCkgewogCQlpZiAocHJvYmVbaW5kZXhdKSB7CiAJCQlpZGVfaHdpZl90ICpod2lmID0gJmlkZV9od2lmc1tpbmRleF07Ci0JCQlpbnQgdW5pdDsKIAkJCWlmICghaHdpZi0+cHJlc2VudCkKIAkJCQljb250aW51ZTsKIAkJCWlmIChod2lmLT5jaGlwc2V0ID09IGlkZV91bmtub3duIHx8IGh3aWYtPmNoaXBzZXQgPT0gaWRlX2ZvcmNlZCkKIAkJCQlod2lmLT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7Ci0JCQlmb3IgKHVuaXQgPSAwOyB1bml0IDwgTUFYX0RSSVZFUzsgKyt1bml0KQotCQkJCWlmIChod2lmLT5kcml2ZXNbdW5pdF0ucHJlc2VudCkgewotCQkJCQlpbnQgcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKAotCQkJCQkJJmh3aWYtPmRyaXZlc1t1bml0XS5nZW5kZXYpOwotCQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklERTogJXM6ICIKLQkJCQkJCQkiZGV2aWNlX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwKLQkJCQkJCQlfX0ZVTkNUSU9OX18sIHJldCk7Ci0JCQkJfQorCQkJaHdpZl9yZWdpc3Rlcl9kZXZpY2VzKGh3aWYpOwogCQl9CiAJfQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgKytpbmRleCkKQEAgLTE0MTksMyArMTQwOCwyMiBAQAogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVwcm9iZV9pbml0KTsKKworaW50IGlkZV9kZXZpY2VfYWRkKHU4IGlkeFs0XSkKK3sKKwlpbnQgaSwgcmMgPSAwOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlpZiAoaWR4W2ldICE9IDB4ZmYpCisJCQlyYyB8PSBwcm9iZV9od2lmX2luaXQoJmlkZV9od2lmc1tpZHhbaV1dKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChpZHhbaV0gIT0gMHhmZikKKwkJCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoJmlkZV9od2lmc1tpZHhbaV1dKTsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXZpY2VfYWRkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCmluZGV4IGZjMWQ4YWUuLmE0MDA3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwpAQCAtODA0LDggKzgwNCw2IEBACiAJY3JlYXRlX3Byb2NfaWRlX2RyaXZlcyhod2lmKTsKIH0KIAotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydCk7Ci0KICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKIHZvaWQgaWRlX3BjaV9jcmVhdGVfaG9zdF9wcm9jKGNvbnN0IGNoYXIgKm5hbWUsIGdldF9pbmZvX3QgKmdldF9pbmZvKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggMWZhNTc5NC4uN2I5MTgxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC01NjUsNyArNTY1LDcgQEAKICAqCVRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBwb2ludCBpbiB0aGUgaW50ZXJuYWwKICAqCXRhcGUgZmlmbyBpbiB3aGljaCB3ZSB3aWxsIHN0YXJ0IHRvIHJlZmlsbCB0aGUgYnVmZmVyLiBEZWNyZWFzaW5nCiAgKgl0aGUgZm9sbG93aW5nIHBhcmFtZXRlciB3aWxsIGltcHJvdmUgdGhlIHN5c3RlbSdzIGxhdGVuY3kgYW5kCi0gKglpbnRlcmFjdGl2ZSByZXNwb25zZSwgd2hpbGUgdXNpbmcgYSBoaWdoIHZhbHVlIG1pZ2h0IGltcHJvdmUgc3l0ZW0KKyAqCWludGVyYWN0aXZlIHJlc3BvbnNlLCB3aGlsZSB1c2luZyBhIGhpZ2ggdmFsdWUgbWlnaHQgaW1wcm92ZSBzeXN0ZW0KICAqCXRocm91Z2hwdXQuCiAgKi8KICNkZWZpbmUgSURFVEFQRV9GSUZPX1RIUkVTSE9MRCAJCTIKQEAgLTYyMSw3ICs2MjEsNiBAQAogICovCiAjZGVmaW5lIFVTRV9JT1RSQUNFCTAKICNpZiBVU0VfSU9UUkFDRQotI2luY2x1ZGUgPGxpbnV4L2lvX3RyYWNlLmg+CiAjZGVmaW5lIElPX0lERVRBUEVfRklGTwk1MDAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDJhM2M4ZDQuLjczZWY2YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC04LDIzICs4LDYgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNAlCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKgogICogIFRoZSBiaWcgdGhlIGJhZCBhbmQgdGhlIHVnbHkuCi0gKgotICogIFByb2JsZW1zIHRvIGJlIGZpeGVkIGJlY2F1c2Ugb2YgQkggaW50ZXJmYWNlIG9yIHRoZSBsYWNrIHRoZXJlZm9yZS4KLSAqCi0gKiAgRmlsbCBtZSBpbiBzdHVwaWQgISEhCi0gKgotICogIEhPU1Q6Ci0gKglHZW5lcmFsIHJlZmVycyB0byB0aGUgQ29udHJvbGxlciBhbmQgRHJpdmVyICJwYWlyIi4KLSAqICBEQVRBIEhBTkRMRVI6Ci0gKglVbmRlciB0aGUgY29udGV4dCBvZiBMaW51eCBpdCBnZW5lcmFsbHkgcmVmZXJzIHRvIGFuIGludGVycnVwdCBoYW5kbGVyLgotICoJSG93ZXZlciwgaXQgY29ycmVjdGx5IGRlc2NyaWJlcyB0aGUgJ0hPU1QnCi0gKiAgREFUQSBCTE9DSzoKLSAqCVRoZSBhbW91bnQgb2YgZGF0YSBuZWVkZWQgdG8gYmUgdHJhbnNmZXJlZCBhcyBwcmVkZWZpbmVkIGluIHRoZQotICoJc2V0dXAgb2YgdGhlIGRldmljZS4KLSAqICBTVE9SQUdFIEFUT01JQzoKLSAqCVRoZSAnREFUQSBCTE9DSycgYXNzb2NpYXRlZCB0byB0aGUgJ0RBVEEgSEFORExFUicsIGFuZCBjYW4gYmUgYXMKLSAqCXNtYWxsIGFzIGEgc2luZ2xlIHNlY3RvciBvciBhcyBsYXJnZSBhcyB0aGUgZW50aXJlIGNvbW1hbmQgYmxvY2sKLSAqCXJlcXVlc3QuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjk1LDkgKzY3OCw2IEBACiAJcmV0dXJuIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOwogfQogCi0vKgotICogRklYTUUgOiB0aGlzIG5lZWRzIHRvIG1hcCBpbnRvIGF0IHRhc2tmaWxlLiA8YW5kcmVAbGludXgtaWRlLm9yZz4KLSAqLwogaW50IGlkZV9jbWRfaW9jdGwgKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGVyciA9IDA7CkBAIC03NjEsOSArNzQxLDYgQEAKIAlyZXR1cm4gaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgJnJxLCBpZGVfd2FpdCk7CiB9CiAKLS8qCi0gKiBGSVhNRSA6IHRoaXMgbmVlZHMgdG8gbWFwIGludG8gYXQgdGFza2ZpbGUuIDxhbmRyZUBsaW51eC1pZGUub3JnPgotICovCiBpbnQgaWRlX3Rhc2tfaW9jdGwgKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CkBAIC04NjAsOSArODM3LDE0IEBACiAJCWNhc2UgVEFTS0ZJTEVfT1VUX0RNQToKIAkJY2FzZSBUQVNLRklMRV9JTl9ETUFROgogCQljYXNlIFRBU0tGSUxFX0lOX0RNQToKLQkJCWh3aWYtPmRtYV9zZXR1cChkcml2ZSk7Ci0JCQlod2lmLT5kbWFfZXhlY19jbWQoZHJpdmUsIHRhc2tmaWxlLT5jb21tYW5kKTsKLQkJCWh3aWYtPmRtYV9zdGFydChkcml2ZSk7CisJCQlpZiAoIWRyaXZlLT51c2luZ19kbWEpCisJCQkJYnJlYWs7CisKKwkJCWlmICghaHdpZi0+ZG1hX3NldHVwKGRyaXZlKSkgeworCQkJCWh3aWYtPmRtYV9leGVjX2NtZChkcml2ZSwgdGFza2ZpbGUtPmNvbW1hbmQpOworCQkJCWh3aWYtPmRtYV9zdGFydChkcml2ZSk7CisJCQkJcmV0dXJuIGlkZV9zdGFydGVkOworCQkJfQogCQkJYnJlYWs7CiAKIAkgICAgICAgIGRlZmF1bHQ6CkBAIC04NzYsNyArODU4LDggQEAKIAkJCQlyZXR1cm4gdGFzay0+cHJlaGFuZGxlcihkcml2ZSwgdGFzay0+cnEpOwogCQkJfQogCQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgdGFza2ZpbGUtPmNvbW1hbmQsIHRhc2stPmhhbmRsZXIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJCXJldHVybiBpZGVfc3RhcnRlZDsKIAl9CiAKLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CisJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCA1YjA5MDY2Li42NzRhNjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtMTM0LDggKzEzNCw2IEBACiAKIAlod2lmLT5idXNfc3RhdGUJPSBCVVNTVEFURV9PTjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDA7CQkvKiBkaXNhYmxlIGFsbCBhdGFwaSBkbWEgKi8gCi0KIAlpbml0X2NvbXBsZXRpb24oJmh3aWYtPmdlbmRldl9yZWxfY29tcCk7CiAKIAlkZWZhdWx0X2h3aWZfaW9wcyhod2lmKTsKQEAgLTE3MCw3ICsxNjgsNiBAQAogCiAJaWRlX2luaXRfaHdpZl9wb3J0cygmaHcsIGlkZV9kZWZhdWx0X2lvX2Jhc2UoaW5kZXgpLCAwLCAmaHdpZi0+aXJxKTsKIAotCW1lbWNweSgmaHdpZi0+aHcsICZodywgc2l6ZW9mKGh3KSk7CiAJbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBody5pb19wb3J0cywgc2l6ZW9mKGh3LmlvX3BvcnRzKSk7CiAKIAlod2lmLT5ub3Byb2JlID0gIWh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF07CkBAIC0yMTYsNyArMjEzLDcgQEAKIAkJaW5pdF9od2lmX2RhdGEoaHdpZiwgaW5kZXgpOwogCQlpbml0X2h3aWZfZGVmYXVsdChod2lmLCBpbmRleCk7CiAjaWYgIWRlZmluZWQoQ09ORklHX1BQQzMyKSB8fCAhZGVmaW5lZChDT05GSUdfUENJKQotCQlod2lmLT5pcnEgPSBod2lmLT5ody5pcnEgPQorCQlod2lmLT5pcnEgPQogCQkJaWRlX2luaXRfZGVmYXVsdF9pcnEoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSk7CiAjZW5kaWYKIAl9CkBAIC0yNjcsNiArMjY0LDMwIEBACiAJcmV0dXJuIHN5c3RlbV9idXNfc3BlZWQ7CiB9CiAKK2lkZV9od2lmX3QgKiBpZGVfZmluZF9wb3J0KHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwlpZGVfaHdpZl90ICpod2lmOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9IV0lGUzsgaSsrKSB7CisJCWh3aWYgPSAmaWRlX2h3aWZzW2ldOworCQlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBiYXNlKQorCQkJZ290byBmb3VuZDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hXSUZTOyBpKyspIHsKKwkJaHdpZiA9ICZpZGVfaHdpZnNbaV07CisJCWlmIChod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdID09IDApCisJCQlnb3RvIGZvdW5kOworCX0KKworCWh3aWYgPSBOVUxMOworZm91bmQ6CisJcmV0dXJuIGh3aWY7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9maW5kX3BvcnQpOworCiBzdGF0aWMgc3RydWN0IHJlc291cmNlKiBod2lmX3JlcXVlc3RfcmVnaW9uKGlkZV9od2lmX3QgKmh3aWYsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW0pCiB7CkBAIC0zNzksNyArNDAwLDYgQEAKIAogCWh3aWYtPnBpb19tYXNrCQkJPSB0bXBfaHdpZi0+cGlvX21hc2s7CiAKLQlod2lmLT5hdGFwaV9kbWEJCQk9IHRtcF9od2lmLT5hdGFwaV9kbWE7CiAJaHdpZi0+dWx0cmFfbWFzawkJPSB0bXBfaHdpZi0+dWx0cmFfbWFzazsKIAlod2lmLT5td2RtYV9tYXNrCQk9IHRtcF9od2lmLT5td2RtYV9tYXNrOwogCWh3aWYtPnN3ZG1hX21hc2sJCT0gdG1wX2h3aWYtPnN3ZG1hX21hc2s7CkBAIC0zOTQsNiArNDE0LDggQEAKIAlod2lmLT5jZHMJCQk9IHRtcF9od2lmLT5jZHM7CiAjZW5kaWYKIAorCWh3aWYtPmZpeHVwCQkJPSB0bXBfaHdpZi0+Zml4dXA7CisKIAlod2lmLT5zZXRfcGlvX21vZGUJCT0gdG1wX2h3aWYtPnNldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUJCT0gdG1wX2h3aWYtPnNldF9kbWFfbW9kZTsKIAlod2lmLT5tZG1hX2ZpbHRlcgkJPSB0bXBfaHdpZi0+bWRtYV9maWx0ZXI7CkBAIC00NDAsNyArNDYyLDYgQEAKIAogCWh3aWYtPm1taW8JCQk9IHRtcF9od2lmLT5tbWlvOwogCWh3aWYtPnJxc2l6ZQkJCT0gdG1wX2h3aWYtPnJxc2l6ZTsKLQlod2lmLT5ub19sYmE0OAkJCT0gdG1wX2h3aWYtPm5vX2xiYTQ4OwogCiAjaWZuZGVmIENPTkZJR19CTEtfREVWX0lERUNTCiAJaHdpZi0+aXJxCQkJPSB0bXBfaHdpZi0+aXJxOwpAQCAtNjU2LDcgKzY3Nyw2IEBACiAJCX0KIAl9CiAJaHctPmlycSA9IGlycTsKLQlody0+ZG1hID0gTk9fRE1BOwogCWh3LT5hY2tfaW50ciA9IGFja19pbnRyOwogLyoKICAqCWh3LT5pb3BzID0gaW9wczsKQEAgLTY2NCwxMSArNjg0LDExIEBACiB9CiAKIC8qKgotICoJaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAJLQlyZWdpc3RlciBJREUgaW50ZXJmYWNlCisgKglpZGVfcmVnaXN0ZXJfaHcJCS0JcmVnaXN0ZXIgSURFIGludGVyZmFjZQogICoJQGh3OiBoYXJkd2FyZSByZWdpc3RlcnMKKyAqCUBmaXh1cDogZml4dXAgZnVuY3Rpb24KICAqCUBpbml0aWFsaXppbmc6IHNldCB3aGlsZSBpbml0aWFsaXppbmcgYnVpbHQtaW4gZHJpdmVycwogICoJQGh3aWZwOiBwb2ludGVyIHRvIHJldHVybmVkIGh3aWYKLSAqCUBmaXh1cDogZml4dXAgZnVuY3Rpb24KICAqCiAgKglSZWdpc3RlciBhbiBJREUgaW50ZXJmYWNlLCBzcGVjaWZ5aW5nIGV4YWN0bHkgdGhlIHJlZ2lzdGVycyBldGMuCiAgKglTZXQgaW5pdD0xIGlmZiBjYWxsaW5nIGJlZm9yZSBwcm9iZXMgaGF2ZSB0YWtlbiBwbGFjZS4KQEAgLTY3Niw5ICs2OTYsOCBAQAogICoJUmV0dXJucyAtMSBvbiBlcnJvci4KICAqLwogCi1pbnQgaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoaHdfcmVnc190ICpodywgaW50IGluaXRpYWxpemluZywKLQkJCSAgICAgICBpZGVfaHdpZl90ICoqaHdpZnAsCi0JCQkgICAgICAgdm9pZCgqZml4dXApKGlkZV9od2lmX3QgKmh3aWYpKQoraW50IGlkZV9yZWdpc3Rlcl9odyhod19yZWdzX3QgKmh3LCB2b2lkICgqZml4dXApKGlkZV9od2lmX3QgKiksCisJCSAgICBpbnQgaW5pdGlhbGl6aW5nLCBpZGVfaHdpZl90ICoqaHdpZnApCiB7CiAJaW50IGluZGV4LCByZXRyeSA9IDE7CiAJaWRlX2h3aWZfdCAqaHdpZjsKQEAgLTY4Niw3ICs3MDUsNyBAQAogCWRvIHsKIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyArK2luZGV4KSB7CiAJCQlod2lmID0gJmlkZV9od2lmc1tpbmRleF07Ci0JCQlpZiAoaHdpZi0+aHcuaW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSA9PSBody0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSkKKwkJCWlmIChod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdID09IGh3LT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdKQogCQkJCWdvdG8gZm91bmQ7CiAJCX0KIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyArK2luZGV4KSB7CkBAIC02OTQsNyArNzEzLDcgQEAKIAkJCWlmIChod2lmLT5ob2xkKQogCQkJCWNvbnRpbnVlOwogCQkJaWYgKCghaHdpZi0+cHJlc2VudCAmJiAhaHdpZi0+bWF0ZSAmJiAhaW5pdGlhbGl6aW5nKSB8fAotCQkJICAgICghaHdpZi0+aHcuaW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSAmJiBpbml0aWFsaXppbmcpKQorCQkJICAgICghaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSAmJiBpbml0aWFsaXppbmcpKQogCQkJCWdvdG8gZm91bmQ7CiAJCX0KIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgTUFYX0hXSUZTOyBpbmRleCsrKQpAQCAtNzEwLDE2ICs3MjksMTggQEAKIAl9CiAJaWYgKGh3aWYtPnByZXNlbnQpCiAJCXJldHVybiAtMTsKLQltZW1jcHkoJmh3aWYtPmh3LCBodywgc2l6ZW9mKCpodykpOwotCW1lbWNweShod2lmLT5pb19wb3J0cywgaHdpZi0+aHcuaW9fcG9ydHMsIHNpemVvZihod2lmLT5ody5pb19wb3J0cykpOworCW1lbWNweShod2lmLT5pb19wb3J0cywgaHctPmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKIAlod2lmLT5pcnEgPSBody0+aXJxOwogCWh3aWYtPm5vcHJvYmUgPSAwOworCWh3aWYtPmZpeHVwID0gZml4dXA7CiAJaHdpZi0+Y2hpcHNldCA9IGh3LT5jaGlwc2V0OwogCWh3aWYtPmdlbmRldi5wYXJlbnQgPSBody0+ZGV2OworCWh3aWYtPmFja19pbnRyID0gaHctPmFja19pbnRyOwogCi0JaWYgKCFpbml0aWFsaXppbmcpIHsKLQkJcHJvYmVfaHdpZl9pbml0X3dpdGhfZml4dXAoaHdpZiwgZml4dXApOwotCQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOworCWlmIChpbml0aWFsaXppbmcgPT0gMCkgeworCQl1OCBpZHhbNF0gPSB7IGluZGV4LCAweGZmLCAweGZmLCAweGZmIH07CisKKwkJaWRlX2RldmljZV9hZGQoaWR4KTsKIAl9CiAKIAlpZiAoaHdpZnApCkBAIC03MjgsMTMgKzc0OSw2IEBACiAJcmV0dXJuIChpbml0aWFsaXppbmcgfHwgaHdpZi0+cHJlc2VudCkgPyBpbmRleCA6IC0xOwogfQogCi1FWFBPUlRfU1lNQk9MKGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKTsKLQotaW50IGlkZV9yZWdpc3Rlcl9odyhod19yZWdzX3QgKmh3LCBpbnQgaW5pdGlhbGl6aW5nLCBpZGVfaHdpZl90ICoqaHdpZnApCi17Ci0JcmV0dXJuIGlkZV9yZWdpc3Rlcl9od193aXRoX2ZpeHVwKGh3LCBpbml0aWFsaXppbmcsIGh3aWZwLCBOVUxMKTsKLX0KLQogRVhQT1JUX1NZTUJPTChpZGVfcmVnaXN0ZXJfaHcpOwogCiAvKgpAQCAtMTA1MCw3ICsxMDY0LDcgQEAKIAkJCWlkZV9pbml0X2h3aWZfcG9ydHMoJmh3LCAodW5zaWduZWQgbG9uZykgYXJnc1swXSwKIAkJCQkJICAgICh1bnNpZ25lZCBsb25nKSBhcmdzWzFdLCBOVUxMKTsKIAkJCWh3LmlycSA9IGFyZ3NbMl07Ci0JCQlpZiAoaWRlX3JlZ2lzdGVyX2h3KCZodywgMCwgTlVMTCkgPT0gLTEpCisJCQlpZiAoaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCwgMCwgTlVMTCkgPT0gLTEpCiAJCQkJcmV0dXJuIC1FSU87CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTQwMSw2ICsxNDE1LDkgQEAKIAkJCSJyZXNldCIsICJtaW51czYiLCAiYXRhNjYiLCAibWludXM4IiwgIm1pbnVzOSIsCiAJCQkibWludXMxMCIsICJmb3VyIiwgInFkNjV4eCIsICJodDY1NjBiIiwgImNtZDY0MF92bGIiLAogCQkJImR0YzIyNzgiLCAidW1jODY3MiIsICJhbGkxNHh4IiwgTlVMTCB9OworCisJCWh3X3JlZ3NfdCBod3JlZ3M7CisKIAkJaHcgPSBzWzNdIC0gJzAnOwogCQlod2lmID0gJmlkZV9od2lmc1tod107CiAJCWkgPSBtYXRjaF9wYXJtKCZzWzRdLCBpZGVfd29yZHMsIHZhbHMsIDMpOwpAQCAtMTUxMCw5ICsxNTI3LDkgQEAKIAkJCWNhc2UgMjogLyogYmFzZSxjdGwgKi8KIAkJCQl2YWxzWzJdID0gMDsJLyogZGVmYXVsdCBpcnEgPSBwcm9iZSBmb3IgaXQgKi8KIAkJCWNhc2UgMzogLyogYmFzZSxjdGwsaXJxICovCi0JCQkJaHdpZi0+aHcuaXJxID0gdmFsc1syXTsKLQkJCQlpZGVfaW5pdF9od2lmX3BvcnRzKCZod2lmLT5odywgKHVuc2lnbmVkIGxvbmcpIHZhbHNbMF0sICh1bnNpZ25lZCBsb25nKSB2YWxzWzFdLCAmaHdpZi0+aXJxKTsKLQkJCQltZW1jcHkoaHdpZi0+aW9fcG9ydHMsIGh3aWYtPmh3LmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKKwkJCQltZW1zZXQoJmh3cmVncywgMCwgc2l6ZW9mKGh3cmVncykpOworCQkJCWlkZV9pbml0X2h3aWZfcG9ydHMoJmh3cmVncywgdmFsc1swXSwgdmFsc1sxXSwgJmh3aWYtPmlycSk7CisJCQkJbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBod3JlZ3MuaW9fcG9ydHMsIHNpemVvZihod2lmLT5pb19wb3J0cykpOwogCQkJCWh3aWYtPmlycSAgICAgID0gdmFsc1syXTsKIAkJCQlod2lmLT5ub3Byb2JlICA9IDA7CiAJCQkJaHdpZi0+Y2hpcHNldCAgPSBpZGVfZm9yY2VkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9hbGkxNHh4LmMKaW5kZXggMmYwZWY5Yi4uMTAzMTFlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2FsaTE0eHguYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvYWxpMTR4eC5jCkBAIC0xMDIsNiArMTAyLDggQEAKIAlvdXRiX3AoZGF0YSwgZGF0YVBvcnQpOwogfQogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFsaTE0eHhfbG9jayk7CisKIC8qCiAgKiBTZXQgUElPIG1vZGUgZm9yIHRoZSBzcGVjaWZpZWQgZHJpdmUuCiAgKiBUaGlzIGZ1bmN0aW9uIGNvbXB1dGVzIHRpbWluZyBwYXJhbWV0ZXJzCkBAIC0xMjksMTQgKzEzMSwxNCBAQAogCiAJLyogc3R1ZmYgdGltaW5nIHBhcmFtZXRlcnMgaW50byBjb250cm9sbGVyIHJlZ2lzdGVycyAqLwogCWRyaXZlTnVtID0gKEhXSUYoZHJpdmUpLT5pbmRleCA8PCAxKSArIGRyaXZlLT5zZWxlY3QuYi51bml0OwotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZhbGkxNHh4X2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AocmVnT24sIGJhc2VQb3J0KTsKIAlvdXRSZWcocGFyYW0xLCByZWdUYWJbZHJpdmVOdW1dLnJlZzEpOwogCW91dFJlZyhwYXJhbTIsIHJlZ1RhYltkcml2ZU51bV0ucmVnMik7CiAJb3V0UmVnKHBhcmFtMywgcmVnVGFiW2RyaXZlTnVtXS5yZWczKTsKIAlvdXRSZWcocGFyYW00LCByZWdUYWJbZHJpdmVOdW1dLnJlZzQpOwogCW91dGJfcChyZWdPZmYsIGJhc2VQb3J0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFsaTE0eHhfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtMTkzLDYgKzE5NSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBhbGkxNHh4X3Byb2JlKHZvaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiwgKm1hdGU7CisJc3RhdGljIHU4IGlkeFs0XSA9IHsgMCwgMSwgMHhmZiwgMHhmZiB9OwogCiAJcHJpbnRrKEtFUk5fREVCVUcgImFsaTE0eHg6IGJhc2U9MHglMDN4LCByZWdPbj0weCUwMnguXG4iLAogCQkJICBiYXNlUG9ydCwgcmVnT24pOwpAQCAtMjE3LDExICsyMjAsNyBAQAogCW1hdGUtPm1hdGUgPSBod2lmOwogCW1hdGUtPmNoYW5uZWwgPSAxOwogCi0JcHJvYmVfaHdpZl9pbml0KGh3aWYpOwotCXByb2JlX2h3aWZfaW5pdChtYXRlKTsKLQotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7Ci0JaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKKwlpZGVfZGV2aWNlX2FkZChpZHgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvYnVkZGhhLmMKaW5kZXggMTAxYWVlMS4uNGEwYmUyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2J1ZGRoYS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9idWRkaGEuYwpAQCAtMjEyLDggKzIxMiw4IEBACiAvLwkJCQkJCXhzdXJmX2lvcHMsCiAJCQkJCQlJUlFfQU1JR0FfUE9SVFMpOwogCQkJfQkKLQkJCQotCQkJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAxLCAmaHdpZik7CisKKwkJCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCwgMSwgJmh3aWYpOwogCQkJaWYgKGluZGV4ICE9IC0xKSB7CiAJCQkJaHdpZi0+bW1pbyA9IDE7CiAJCQkJcHJpbnRrKCJpZGUlZDogIiwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9kdGMyMjc4LmMKaW5kZXggZjE2NTIxMi4uMjRhODQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2R0YzIyNzguYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZHRjMjI3OC5jCkBAIC02NywyMCArNjcsMjQgQEAKIAl9CiB9CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHRjMjI3OF9sb2NrKTsKKwogc3RhdGljIHZvaWQgZHRjMjI3OF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwaW8gPj0gMykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmR0YzIyNzhfbG9jaywgZmxhZ3MpOwogCQkvKgogCQkgKiBUaGlzIGVuYWJsZXMgUElPIG1vZGU0ICgzPykgb24gdGhlIGZpcnN0IGludGVyZmFjZQogCQkgKi8KIAkJc3ViMjIoMSwweGMzKTsKIAkJc3ViMjIoMCwweGEwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZHRjMjI3OF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gc2V0IGl0IGJhY2sgYWdhaW4uLiAqLworCQkvKiBBY3R1YWxseSB3ZSBkbyAtIHRoZXJlIGlzIGEgZGF0YSBzaGVldCBhdmFpbGFibGUgZm9yIHRoZQorCQkgICBXaW5ib25kIGJ1dCBkb2VzIGFueW9uZSBhY3R1YWxseSBjYXJlICovCiAJfQogCiAJLyoKQEAgLTk0LDYgKzk4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWlkZV9od2lmX3QgKmh3aWYsICptYXRlOworCXN0YXRpYyB1OCBpZHhbNF0gPSB7IDAsIDEsIDB4ZmYsIDB4ZmYgfTsKIAogCWh3aWYgPSAmaWRlX2h3aWZzWzBdOwogCW1hdGUgPSAmaWRlX2h3aWZzWzFdOwpAQCAtMTI5LDE2ICsxMzQsMTMgQEAKIAogCW1hdGUtPnNlcmlhbGl6ZWQgPSAxOwogCW1hdGUtPmNoaXBzZXQgPSBpZGVfZHRjMjI3ODsKKwltYXRlLT5waW9fbWFzayA9IEFUQV9QSU80OwogCW1hdGUtPmRyaXZlc1swXS5ub191bm1hc2sgPSAxOwogCW1hdGUtPmRyaXZlc1sxXS5ub191bm1hc2sgPSAxOwogCW1hdGUtPm1hdGUgPSBod2lmOwogCW1hdGUtPmNoYW5uZWwgPSAxOwogCi0JcHJvYmVfaHdpZl9pbml0KGh3aWYpOwotCXByb2JlX2h3aWZfaW5pdChtYXRlKTsKLQotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7Ci0JaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKKwlpZGVfZGV2aWNlX2FkZChpZHgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZmFsY29uaWRlLmMKaW5kZXggZjA4MjliOC4uN2Q3OTM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2ZhbGNvbmlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9mYWxjb25pZGUuYwpAQCAtNzIsNyArNzIsNyBAQAogCQkJMCwgMCwgTlVMTCwKIC8vCQkJZmFsY29uaWRlX2lvcHMsCiAJCQlJUlFfTUZQX0lERSk7Ci0JaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAxLCBOVUxMKTsKKwlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwsIDEsIE5VTEwpOwogCiAJaWYgKGluZGV4ICE9IC0xKQogCSAgICBwcmludGsoImlkZSVkOiBGYWxjb24gSURFIGludGVyZmFjZVxuIiwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L2dheWxlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZ2F5bGUuYwppbmRleCAwODMwYTAyLi41MzMzMWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvZ2F5bGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvZ2F5bGUuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAvLwkJCSZnYXlsZV9pb3BzLAogCQkJSVJRX0FNSUdBX1BPUlRTKTsKIAotCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOworCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCwgMSwgJmh3aWYpOwogCWlmIChpbmRleCAhPSAtMSkgewogCSAgICBod2lmLT5tbWlvID0gMTsKIAkgICAgc3dpdGNoIChpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2h0NjU2MGIuYwppbmRleCAyZTVhOWNjLi5hNDI0NWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaHQ2NTYwYi5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9odDY1NjBiLmMKQEAgLTI0Nyw2ICsyNDcsOCBAQAogCX0KIH0KIAorc3RhdGljIERFRklORV9TUElOTE9DSyhodDY1NjBiX2xvY2spOworCiAvKgogICogIEVuYWJsZS9EaXNhYmxlIHNvIGNhbGxlZCBwcmVmZXRjaCBtb2RlCiAgKi8KQEAgLTI1NCw5ICsyNTYsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHQgPSBIVF9QUkVGRVRDSF9NT0RFIDw8IDg7Ci0JCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHQ2NTYwYl9sb2NrLCBmbGFncyk7CisKIAkvKgogCSAqICBQcmVmZXRjaCBtb2RlIGFuZCB1bm1hc2sgaXJxIHNlZW1zIHRvIGNvbmZsaWN0CiAJICovCkBAIC0yNjgsOSArMjcwLDkgQEAKIAkJZHJpdmUtPmRyaXZlX2RhdGEgJj0gfnQ7ICAvKiBkaXNhYmxlIHByZWZldGNoIG1vZGUgKi8KIAkJZHJpdmUtPm5vX3VubWFzayA9IDA7CiAJfQotCQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodDY1NjBiX2xvY2ssIGZsYWdzKTsKKwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJodDY1NjBiOiBkcml2ZSAlcyBwcmVmZXRjaCBtb2RlICVzYWJsZWRcbiIsIGRyaXZlLT5uYW1lLCAoc3RhdGUgPyAiZW4iIDogImRpcyIpKTsKICNlbmRpZgpAQCAtMjg3LDE2ICsyODksMTQgQEAKIAkJaHRfc2V0X3ByZWZldGNoKGRyaXZlLCBwaW8gJiAxKTsKIAkJcmV0dXJuOwogCX0KLQkKKwogCXRpbWluZyA9IGh0X3BpbzJ0aW1pbmdzKGRyaXZlLCBwaW8pOwotCQotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh0NjU2MGJfbG9jaywgZmxhZ3MpOwogCWRyaXZlLT5kcml2ZV9kYXRhICY9IDB4ZmYwMDsKIAlkcml2ZS0+ZHJpdmVfZGF0YSB8PSB0aW1pbmc7Ci0JCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQkKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodDY1NjBiX2xvY2ssIGZsYWdzKTsKKwogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCJodDY1NjBiOiBkcml2ZSAlcyB0dW5lZCB0byBwaW8gbW9kZSAlI3ggdGltaW5nPSUjeFxuIiwgZHJpdmUtPm5hbWUsIHBpbywgdGltaW5nKTsKICNlbmRpZgpAQCAtMzExLDYgKzMxMSw3IEBACiBpbnQgX19pbml0IGh0NjU2MGJfaW5pdCh2b2lkKQogewogCWlkZV9od2lmX3QgKmh3aWYsICptYXRlOworCXN0YXRpYyB1OCBpZHhbNF0gPSB7IDAsIDEsIDB4ZmYsIDB4ZmYgfTsKIAlpbnQgdDsKIAogCWlmIChwcm9iZV9odDY1NjBiID09IDApCkBAIC0zNTksMTEgKzM2MCw3IEBACiAJbWF0ZS0+ZHJpdmVzWzBdLmRyaXZlX2RhdGEgPSB0OwogCW1hdGUtPmRyaXZlc1sxXS5kcml2ZV9kYXRhID0gdDsKIAotCXByb2JlX2h3aWZfaW5pdChod2lmKTsKLQlwcm9iZV9od2lmX2luaXQobWF0ZSk7Ci0KLQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOwotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQobWF0ZSk7CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlLWNzLmMKaW5kZXggZThlMzYwYy4uMDM3MTVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGUtY3MuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAgICAgaHcuaXJxID0gaXJxOwogICAgIGh3LmNoaXBzZXQgPSBpZGVfcGNpOwogICAgIGh3LmRldiA9ICZoYW5kbGUtPmRldjsKLSAgICByZXR1cm4gaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoJmh3LCAwLCBOVUxMLCBpZGVfdW5kZWNvZGVkX3NsYXZlKTsKKyAgICByZXR1cm4gaWRlX3JlZ2lzdGVyX2h3KCZodywgJmlkZV91bmRlY29kZWRfc2xhdmUsIDAsIE5VTEwpOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGVfcGxhdGZvcm0uYyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9pZGVfcGxhdGZvcm0uYwppbmRleCBiOTkyYjJiLi43YmI3OWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvaWRlX3BsYXRmb3JtLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2lkZV9wbGF0Zm9ybS5jCkBAIC0zMywzOSArMzMsMjQgQEAKIAkgICAgaW50IG1taW8pCiB7CiAJdW5zaWduZWQgbG9uZyBwb3J0ID0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKLQlpZGVfaHdpZl90ICpod2lmOwotCWludCBpbmRleCwgaTsKKwlpZGVfaHdpZl90ICpod2lmID0gaWRlX2ZpbmRfcG9ydChwb3J0KTsKKwlpbnQgaTsKIAotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgKytpbmRleCkgewotCQlod2lmID0gaWRlX2h3aWZzICsgaW5kZXg7Ci0JCWlmIChod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdID09IHBvcnQpCi0JCQlnb3RvIGZvdW5kOwotCX0KKwlpZiAoaHdpZiA9PSBOVUxMKQorCQlnb3RvIG91dDsKIAotCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IE1BWF9IV0lGUzsgKytpbmRleCkgewotCQlod2lmID0gaWRlX2h3aWZzICsgaW5kZXg7Ci0JCWlmIChod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdID09IDApCi0JCQlnb3RvIGZvdW5kOwotCX0KLQotCXJldHVybiBOVUxMOwotCi1mb3VuZDoKLQotCWh3aWYtPmh3LmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gPSBwb3J0OworCWh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gPSBwb3J0OwogCiAJcG9ydCArPSAoMSA8PCBwZGF0YS0+aW9wb3J0X3NoaWZ0KTsKIAlmb3IgKGkgPSBJREVfRVJST1JfT0ZGU0VUOyBpIDw9IElERV9TVEFUVVNfT0ZGU0VUOwogCSAgICAgaSsrLCBwb3J0ICs9ICgxIDw8IHBkYXRhLT5pb3BvcnRfc2hpZnQpKQotCQlod2lmLT5ody5pb19wb3J0c1tpXSA9IHBvcnQ7CisJCWh3aWYtPmlvX3BvcnRzW2ldID0gcG9ydDsKIAotCWh3aWYtPmh3LmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSAodW5zaWduZWQgbG9uZyljdHJsOworCWh3aWYtPmlvX3BvcnRzW0lERV9DT05UUk9MX09GRlNFVF0gPSAodW5zaWduZWQgbG9uZyljdHJsOwogCi0JbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBod2lmLT5ody5pb19wb3J0cywgc2l6ZW9mKGh3aWYtPmh3LmlvX3BvcnRzKSk7Ci0JaHdpZi0+aHcuaXJxID0gaHdpZi0+aXJxID0gaXJxOworCWh3aWYtPmlycSA9IGlycTsKIAotCWh3aWYtPmh3LmRtYSA9IE5PX0RNQTsKLQlod2lmLT5jaGlwc2V0ID0gaHdpZi0+aHcuY2hpcHNldCA9IGlkZV9nZW5lcmljOworCWh3aWYtPmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAogCWlmIChtbWlvKSB7CiAJCWh3aWYtPm1taW8gPSAxOwpAQCAtNzMsOCArNTgsOCBAQAogCX0KIAogCWh3aWZfcHJvcC5od2lmID0gaHdpZjsKLQlod2lmX3Byb3AuaW5kZXggPSBpbmRleDsKLQorCWh3aWZfcHJvcC5pbmRleCA9IGh3aWYtPmluZGV4Oworb3V0OgogCXJldHVybiBod2lmOwogfQogCkBAIC04Myw2ICs2OCw3IEBACiAJc3RydWN0IHJlc291cmNlICpyZXNfYmFzZSwgKnJlc19hbHQsICpyZXNfaXJxOwogCWlkZV9od2lmX3QgKmh3aWY7CiAJc3RydWN0IHBhdGFfcGxhdGZvcm1faW5mbyAqcGRhdGE7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAJaW50IHJldCA9IDA7CiAJaW50IG1taW8gPSAwOwogCkBAIC0xMzAsMTAgKzExNiwxMSBAQAogCWh3aWYtPmdlbmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCWh3aWYtPm5vcHJvYmUgPSAwOwogCi0JcHJvYmVfaHdpZl9pbml0KGh3aWYpOworCWlkeFswXSA9IGh3aWYtPmluZGV4OworCisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGh3aWYpOwotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L21hY2lkZS5jCmluZGV4IGI1NTdjNDUuLmU4N2NkMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9tYWNpZGUuYworKysgYi9kcml2ZXJzL2lkZS9sZWdhY3kvbWFjaWRlLmMKQEAgLTkzLDIxICs5MywyMSBAQAogCQkJCTAsIDAsIG1hY2lkZV9hY2tfaW50ciwKIC8vCQkJCXF1YWRyYV9pZGVfaW9wcywKIAkJCQlJUlFfTlVCVVNfRik7Ci0JCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOworCQlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwsIDEsICZod2lmKTsKIAkJYnJlYWs7CiAJY2FzZSBNQUNfSURFX1BCOgogCQlpZGVfc2V0dXBfcG9ydHMoJmh3LCBJREVfQkFTRSwgbWFjaWRlX29mZnNldHMsCiAJCQkJMCwgMCwgbWFjaWRlX2Fja19pbnRyLAogLy8JCQkJbWFjaWRlX3BiX2lvcHMsCiAJCQkJSVJRX05VQlVTX0MpOwotCQlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIDEsICZod2lmKTsKKwkJaW5kZXggPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCBOVUxMLCAxLCAmaHdpZik7CiAJCWJyZWFrOwogCWNhc2UgTUFDX0lERV9CQUJPT046CiAJCWlkZV9zZXR1cF9wb3J0cygmaHcsIEJBQk9PTl9CQVNFLCBtYWNpZGVfb2Zmc2V0cywKIAkJCQkwLCAwLCBOVUxMLAogLy8JCQkJbWFjaWRlX2JhYm9vbl9pb3BzLAogCQkJCUlSUV9CQUJPT05fMSk7Ci0JCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOworCQlpbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwsIDEsICZod2lmKTsKIAkJaWYgKGluZGV4ID09IC0xKSBicmVhazsKIAkJaWYgKG1hY2ludG9zaF9jb25maWctPmlkZW50ID09IE1BQ19NT0RFTF9QQjE5MCkgewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcTQwaWRlLmMKaW5kZXggZTYyOGE5OC4uYTczZGIxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3E0MGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xNDBpZGUuYwpAQCAtODksOSArODksOCBAQAogCQllbHNlCiAJCQlody0+aW9fcG9ydHNbaV0gPSBRNDBfSVNBX0lPX0IoYmFzZSArIG9mZnNldHNbaV0pOwogCX0KLQkKKwogCWh3LT5pcnEgPSBpcnE7Ci0JaHctPmRtYSA9IE5PX0RNQTsKIAlody0+YWNrX2ludHIgPSBhY2tfaW50cjsKIC8qCiAgKglody0+aW9wcyA9IGlvcHM7CkBAIC0xMDIsNyArMTAxLDcgQEAKIAogLyogCiAgKiB0aGUgc3RhdGljIGFycmF5IGlzIG5lZWRlZCB0byBoYXZlIHRoZSBuYW1lIHJlcG9ydGVkIGluIC9wcm9jL2lvcG9ydHMsCi0gKiBod2lmLT5uYW1lIHVuZm9ydHVuYXRlbHkgaXNutHQgYXZhaWxhYmxlIHlldAorICogaHdpZi0+bmFtZSB1bmZvcnR1bmF0ZWx5IGlzbid0IGF2YWlsYWJsZSB5ZXQKICAqLwogc3RhdGljIGNvbnN0IGNoYXIgKnE0MF9pZGVfbmFtZXNbUTQwSURFX05VTV9IV0lGU109ewogCSJpZGUwIiwgImlkZTEiCkBAIC0xNDIsNyArMTQxLDcgQEAKIAkJCTAsIE5VTEwsCiAvLwkJCW02OGtpZGVfaW9wcywKIAkJCXE0MGlkZV9kZWZhdWx0X2lycShwY2lkZV9iYXNlc1tpXSkpOwotCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMSwgJmh3aWYpOworCWluZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgTlVMTCwgMSwgJmh3aWYpOwogCS8vICoqRklYTUUqKgogCWlmIChpbmRleCAhPSAtMSkKIAkJaHdpZi0+bW1pbyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMgYi9kcml2ZXJzL2lkZS9sZWdhY3kvcWQ2NXh4LmMKaW5kZXggMGM4MWQyZC4uOTEyZTczOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L3FkNjV4eC5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS9xZDY1eHguYwpAQCAtODksMjYgKzg5LDYgQEAKIAogc3RhdGljIGludCB0aW1pbmdzWzRdPXstMSwtMSwtMSwtMX07IC8qIHN0b3JlcyBjdXJyZW50IHRpbWluZyBmb3IgZWFjaCB0aW1lciAqLwogCi1zdGF0aWMgdm9pZCBxZF93cml0ZV9yZWcgKHU4IGNvbnRlbnQsIHVuc2lnbmVkIGxvbmcgcmVnKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlvdXRiKGNvbnRlbnQscmVnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdTggX19pbml0IHFkX3JlYWRfcmVnICh1bnNpZ25lZCBsb25nIHJlZykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXU4IHJlYWQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlyZWFkID0gaW5iKHJlZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcmVhZDsKLX0KLQogLyoKICAqIHFkX3NlbGVjdDoKICAqCkBAIC0xMjEsNyArMTAxLDcgQEAKIAkJCShRRF9USU1SRUcoZHJpdmUpICYgMHgwMik7CiAKIAlpZiAodGltaW5nc1tpbmRleF0gIT0gUURfVElNSU5HKGRyaXZlKSkKLQkJcWRfd3JpdGVfcmVnKHRpbWluZ3NbaW5kZXhdID0gUURfVElNSU5HKGRyaXZlKSwgUURfVElNUkVHKGRyaXZlKSk7CisJCW91dGIodGltaW5nc1tpbmRleF0gPSBRRF9USU1JTkcoZHJpdmUpLCBRRF9USU1SRUcoZHJpdmUpKTsKIH0KIAogLyoKQEAgLTI4NCw3ICsyNjQsNyBAQAogCX0KIAogCWlmICghSFdJRihkcml2ZSktPmNoYW5uZWwgJiYgZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKSB7Ci0JCXFkX3dyaXRlX3JlZygweDVmLCBRRF9DT05UUk9MX1BPUlQpOworCQlvdXRiKDB4NWYsIFFEX0NPTlRST0xfUE9SVCk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBVEFQSTogZGlzYWJsZWQgcmVhZC1haGVhZCBGSUZPICIKIAkJCSJhbmQgcG9zdC13cml0ZSBidWZmZXIgb24gJXMuXG4iLAogCQkJZHJpdmUtPm5hbWUsIEhXSUYoZHJpdmUpLT5uYW1lKTsKQEAgLTMwMSwxNiArMjgxLDE1IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHFkX3Rlc3RyZWcoaW50IHBvcnQpCiB7Ci0JdTggc2F2ZXJlZzsKLQl1OCByZWFkcmVnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggc2F2ZXJlZywgcmVhZHJlZzsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlzYXZlcmVnID0gaW5iX3AocG9ydCk7CiAJb3V0Yl9wKFFEX1RFU1RWQUwsIHBvcnQpOwkvKiBzYWZlIHZhbHVlICovCiAJcmVhZHJlZyA9IGluYl9wKHBvcnQpOwogCW91dGIoc2F2ZXJlZywgcG9ydCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAoc2F2ZXJlZyA9PSBRRF9URVNUVkFMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiT3V0Y2ggISB0aGUgcHJvYmUgZm9yIHFkNjV4eCBpc24ndCByZWxpYWJsZSAhXG4iKTsKQEAgLTM2NCwxMyArMzQzLDEzIEBACiAKIAlpZiAoc2V0X3Bpb19tb2RlID09ICh2b2lkICopcWQ2NTAwX3NldF9waW9fbW9kZSkgewogCQkvLyB3aWxsIGRvIGl0IGZvciBib3RoCi0JCXFkX3dyaXRlX3JlZyhRRDY1MDBfREVGX0RBVEEsIFFEX1RJTVJFRygmaHdpZi0+ZHJpdmVzWzBdKSk7CisJCW91dGIoUUQ2NTAwX0RFRl9EQVRBLCBRRF9USU1SRUcoJmh3aWYtPmRyaXZlc1swXSkpOwogCX0gZWxzZSBpZiAoc2V0X3Bpb19tb2RlID09ICh2b2lkICopcWQ2NTgwX3NldF9waW9fbW9kZSkgewogCQlpZiAoUURfQ09OVFJPTChod2lmKSAmIFFEX0NPTlRSX1NFQ19ESVNBQkxFRCkgewotCQkJcWRfd3JpdGVfcmVnKFFENjU4MF9ERUZfREFUQSwgUURfVElNUkVHKCZod2lmLT5kcml2ZXNbMF0pKTsKLQkJCXFkX3dyaXRlX3JlZyhRRDY1ODBfREVGX0RBVEEyLCBRRF9USU1SRUcoJmh3aWYtPmRyaXZlc1sxXSkpOworCQkJb3V0YihRRDY1ODBfREVGX0RBVEEsIFFEX1RJTVJFRygmaHdpZi0+ZHJpdmVzWzBdKSk7CisJCQlvdXRiKFFENjU4MF9ERUZfREFUQTIsIFFEX1RJTVJFRygmaHdpZi0+ZHJpdmVzWzFdKSk7CiAJCX0gZWxzZSB7Ci0JCQlxZF93cml0ZV9yZWcoaHdpZi0+Y2hhbm5lbCA/IFFENjU4MF9ERUZfREFUQTIgOiBRRDY1ODBfREVGX0RBVEEsIFFEX1RJTVJFRygmaHdpZi0+ZHJpdmVzWzBdKSk7CisJCQlvdXRiKGh3aWYtPmNoYW5uZWwgPyBRRDY1ODBfREVGX0RBVEEyIDogUUQ2NTgwX0RFRl9EQVRBLCBRRF9USU1SRUcoJmh3aWYtPmRyaXZlc1swXSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBxZDY1eHggdHVuaW5nIGZvbmN0aW9uICFcbiIpOwpAQCAtMzg5LDEwICszNjgsMTEgQEAKIHN0YXRpYyBpbnQgX19pbml0IHFkX3Byb2JlKGludCBiYXNlKQogewogCWlkZV9od2lmX3QgKmh3aWY7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAJdTggY29uZmlnOwogCXU4IHVuaXQ7CiAKLQljb25maWcgPSBxZF9yZWFkX3JlZyhRRF9DT05GSUdfUE9SVCk7CisJY29uZmlnID0gaW5iKFFEX0NPTkZJR19QT1JUKTsKIAogCWlmICghICgoY29uZmlnICYgUURfQ09ORklHX0JBU0VQT1JUKSA+PiAxID09IChiYXNlID09IDB4YjApKSApCiAJCXJldHVybiAxOwpAQCAtNDE5LDkgKzM5OSw5IEBACiAKIAkJaHdpZi0+c2V0X3Bpb19tb2RlID0gJnFkNjUwMF9zZXRfcGlvX21vZGU7CiAKLQkJcHJvYmVfaHdpZl9pbml0KGh3aWYpOworCQlpZHhbMF0gPSB1bml0OwogCi0JCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJCWlkZV9kZXZpY2VfYWRkKGlkeCk7CiAKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDM2LDcgKzQxNiw3IEBACiAKIAkJLyogcWQ2NTgwIGZvdW5kICovCiAKLQkJY29udHJvbCA9IHFkX3JlYWRfcmVnKFFEX0NPTlRST0xfUE9SVCk7CisJCWNvbnRyb2wgPSBpbmIoUURfQ09OVFJPTF9QT1JUKTsKIAogCQlwcmludGsoS0VSTl9OT1RJQ0UgInFkNjU4MCBhdCAlI3hcbiIsIGJhc2UpOwogCQlwcmludGsoS0VSTl9ERUJVRyAicWQ2NTgwOiBjb25maWc9JSN4LCBjb250cm9sPSUjeCwgSUQzPSV1XG4iLApAQCAtNDUzLDExICs0MzMsMTEgQEAKIAogCQkJaHdpZi0+c2V0X3Bpb19tb2RlID0gJnFkNjU4MF9zZXRfcGlvX21vZGU7CiAKLQkJCXByb2JlX2h3aWZfaW5pdChod2lmKTsKKwkJCWlkeFswXSA9IHVuaXQ7CiAKLQkJCXFkX3dyaXRlX3JlZyhRRF9ERUZfQ09OVFIsUURfQ09OVFJPTF9QT1JUKTsKKwkJCWlkZV9kZXZpY2VfYWRkKGlkeCk7CiAKLQkJCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJCQlvdXRiKFFEX0RFRl9DT05UUiwgUURfQ09OVFJPTF9QT1JUKTsKIAogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7CkBAIC00NzQsMTkgKzQ1NCwxNyBAQAogCiAJCQlod2lmLT5zZXRfcGlvX21vZGUgPSAmcWQ2NTgwX3NldF9waW9fbW9kZTsKIAotCQkJcHJvYmVfaHdpZl9pbml0KGh3aWYpOwotCiAJCQlxZF9zZXR1cChtYXRlLCBiYXNlLCBjb25maWcgfCAoY29udHJvbCA8PCA4KSwKIAkJCQkgUUQ2NTgwX0RFRl9EQVRBMiwgUUQ2NTgwX0RFRl9EQVRBMik7CiAKIAkJCW1hdGUtPnNldF9waW9fbW9kZSA9ICZxZDY1ODBfc2V0X3Bpb19tb2RlOwogCi0JCQlwcm9iZV9od2lmX2luaXQobWF0ZSk7CisJCQlpZHhbMF0gPSAwOworCQkJaWR4WzFdID0gMTsKIAotCQkJcWRfd3JpdGVfcmVnKFFEX0RFRl9DT05UUixRRF9DT05UUk9MX1BPUlQpOworCQkJaWRlX2RldmljZV9hZGQoaWR4KTsKIAotCQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKLQkJCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQobWF0ZSk7CisJCQlvdXRiKFFEX0RFRl9DT05UUiwgUURfQ09OVFJPTF9QT1JUKTsKIAogCQkJcmV0dXJuIDA7IC8qIG5vIG90aGVyIHFkNjV4eCBwb3NzaWJsZSAqLwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9sZWdhY3kvdW1jODY3Mi5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L3VtYzg2NzIuYwppbmRleCAxMTUxYzkyLi43OTU3N2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9sZWdhY3kvdW1jODY3Mi5jCisrKyBiL2RyaXZlcnMvaWRlL2xlZ2FjeS91bWM4NjcyLmMKQEAgLTEyNCw4ICsxMjQsOSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB1bWM4NjcyX3Byb2JlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpZGVfaHdpZl90ICpod2lmLCAqbWF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0YXRpYyB1OCBpZHhbNF0gPSB7IDAsIDEsIDB4ZmYsIDB4ZmYgfTsKIAogCWlmICghcmVxdWVzdF9yZWdpb24oMHgxMDgsIDIsICJ1bWM4NjcyIikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1bWM4NjcyOiBwb3J0cyAweDEwOC0weDEwOSBhbHJlYWR5IGluIHVzZS5cbiIpOwpAQCAtMTU4LDExICsxNTksNyBAQAogCW1hdGUtPm1hdGUgPSBod2lmOwogCW1hdGUtPmNoYW5uZWwgPSAxOwogCi0JcHJvYmVfaHdpZl9pbml0KGh3aWYpOwotCXByb2JlX2h3aWZfaW5pdChtYXRlKTsKLQotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7Ci0JaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKKwlpZGVfZGV2aWNlX2FkZChpZHgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9taXBzL2F1MXh4eC1pZGUuYyBiL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jCmluZGV4IDQ3YzAzNWEuLjFkZTU4NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL21pcHMvYXUxeHh4LWlkZS5jCkBAIC02MDEsOCArNjAxLDkgQEAKIAlfYXVpZGVfaHdpZiAqYWh3aWYgPSAmYXVpZGVfaHdpZjsKIAlpZGVfaHdpZl90ICpod2lmOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWh3X3JlZ3NfdCAqaHc7CiAJaW50IHJldCA9IDA7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJaHdfcmVnc190IGh3OwogCiAjaWYgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfQVUxWFhYX01ETUEyX0RCRE1BKQogCWNoYXIgKm1vZGUgPSAiTVdETUEyIjsKQEAgLTY0NCwxMiArNjQ1LDEyIEBACiAJLyogRklYTUU6ICBUaGlzIG1pZ2h0IHBvc3NpYmx5IGJyZWFrIFBDTUNJQSBJREUgZGV2aWNlcyAqLwogCiAJaHdpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICZpZGVfaHdpZnNbcGRldi0+aWRdOwotCWh3IAkJCQk9ICZod2lmLT5odzsKLQlod2lmLT5pcnEgPSBody0+aXJxICAgICAgICAgICAgID0gYWh3aWYtPmlycTsKKwlod2lmLT5pcnEJCQk9IGFod2lmLT5pcnE7CiAJaHdpZi0+Y2hpcHNldCAgICAgICAgICAgICAgICAgICA9IGlkZV9hdTF4eHg7CiAKLQlhdWlkZV9zZXR1cF9wb3J0cyhodywgYWh3aWYpOwotCW1lbWNweShod2lmLT5pb19wb3J0cywgaHctPmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKwlhdWlkZV9zZXR1cF9wb3J0cygmaHcsIGFod2lmKTsKKwltZW1jcHkoaHdpZi0+aW9fcG9ydHMsIGh3LmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKIAogCWh3aWYtPnVsdHJhX21hc2sgICAgICAgICAgICAgICAgPSAweDA7ICAvKiBEaXNhYmxlIFVsdHJhIERNQSAqLwogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKQEAgLTY5OSw5ICs3MDAsNiBAQAogCWh3aWYtPmRtYV9ob3N0X29uCQk9ICZhdWlkZV9kbWFfaG9zdF9vbjsKIAlod2lmLT5kbWFfbG9zdF9pcnEJCT0gJmF1aWRlX2RtYV9sb3N0X2lycTsKIAlod2lmLT5pZGVfZG1hX29uICAgICAgICAgICAgICAgID0gJmF1aWRlX2RtYV9vbjsKLQotCWh3aWYtPmF0YXBpX2RtYSAgICAgICAgICAgICAgICAgPSAxOwotCiAjZWxzZSAvKiAhQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQSAqLwogCWh3aWYtPmNoYW5uZWwgICAgICAgICAgICAgICAgICAgPSAwOwogCWh3aWYtPmhvbGQgICAgICAgICAgICAgICAgICAgICAgPSAxOwpAQCAtNzA5LDggKzcwNywxMCBAQAogCWh3aWYtPmNvbmZpZ19kYXRhICAgICAgICAgICAgICAgPSAwOyAgICAvKiBubyBjaGlwc2V0LXNwZWNpZmljIGNvZGUgKi8KIAogCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSAgICAgICAgPSAxOyAgICAvKiAxPWF1dG90dW5lLCAyPW5vYXV0b3R1bmUsIDA9ZGVmYXVsdCAqLworCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZQk9IDE7CiAjZW5kaWYKLQlod2lmLT5kcml2ZXNbMF0ubm9faW9fMzJiaXQgICAgID0gMTsgICAKKwlod2lmLT5kcml2ZXNbMF0ubm9faW9fMzJiaXQJPSAxOworCWh3aWYtPmRyaXZlc1sxXS5ub19pb18zMmJpdAk9IDE7CiAKIAlhdWlkZV9od2lmLmh3aWYgICAgICAgICAgICAgICAgID0gaHdpZjsKIAlod2lmLT5od2lmX2RhdGEgICAgICAgICAgICAgICAgID0gJmF1aWRlX2h3aWY7CkBAIC03MjAsOSArNzIwLDkgQEAKIAlkYmRtYV9pbml0X2RvbmUgPSAxOwogI2VuZGlmCiAKLQlwcm9iZV9od2lmX2luaXQoaHdpZik7CisJaWR4WzBdID0gaHdpZi0+aW5kZXg7CiAKLQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGh3aWYpOworCWlkZV9kZXZpY2VfYWRkKGlkeCk7CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBod2lmKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jIGIvZHJpdmVycy9pZGUvbWlwcy9zd2FybS5jCmluZGV4IGMyZTI5NTcuLjUyMWVkZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21pcHMvc3dhcm0uYworKysgYi9kcml2ZXJzL2lkZS9taXBzL3N3YXJtLmMKQEAgLTcxLDYgKzcxLDcgQEAKIAl1OCBfX2lvbWVtICpiYXNlOwogCXBoeXNfdCBvZmZzZXQsIHNpemU7CiAJaW50IGk7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAKIAlpZiAoIVNJQllURV9IQVZFX0lERSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xMTksMTggKzEyMCwxNSBAQAogCWh3aWYtPm5vcHJvYmUgPSAwOwogCiAJZm9yIChpID0gSURFX0RBVEFfT0ZGU0VUOyBpIDw9IElERV9TVEFUVVNfT0ZGU0VUOyBpKyspCi0JCWh3aWYtPmh3LmlvX3BvcnRzW2ldID0KKwkJaHdpZi0+aW9fcG9ydHNbaV0gPQogCQkJCSh1bnNpZ25lZCBsb25nKShiYXNlICsgKCgweDFmMCArIGkpIDw8IDUpKTsKLQlod2lmLT5ody5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0KKwlod2lmLT5pb19wb3J0c1tJREVfQ09OVFJPTF9PRkZTRVRdID0KIAkJCQkodW5zaWduZWQgbG9uZykoYmFzZSArICgweDNmNiA8PCA1KSk7Ci0JaHdpZi0+aHcuaXJxID0gS19JTlRfR0JfSURFOworCWh3aWYtPmlycSA9IEtfSU5UX0dCX0lERTsKIAotCW1lbWNweShod2lmLT5pb19wb3J0cywgaHdpZi0+aHcuaW9fcG9ydHMsIHNpemVvZihod2lmLT5pb19wb3J0cykpOwotCWh3aWYtPmlycSA9IGh3aWYtPmh3LmlycTsKKwlpZHhbMF0gPSBod2lmLT5pbmRleDsKIAotCXByb2JlX2h3aWZfaW5pdChod2lmKTsKLQotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCWRldl9zZXRfZHJ2ZGF0YShkZXYsIGh3aWYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwppbmRleCAzYTRjMmMyLi4xOWVjNDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwkJVmVyc2lvbiAwLjI1CUF1ZyAxLCAyMDA3CisgKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCQlWZXJzaW9uIDAuMjcJU2VwIDE2LCAyMDA3CiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNwkJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiA8c291cmNlQG12aXN0YS5jb20+CkBAIC0xNDEsMTkgKzE0MSw2IEBACiAJZHJpdmUtPmh3aWYtPnNldF9kbWFfbW9kZShkcml2ZSwgcGlvICsgWEZFUl9QSU9fMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFlYzYyeHhfZG1hX2xvc3RfaXJxIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0Jc3dpdGNoIChIV0lGKGRyaXZlKS0+cGNpX2Rldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjA6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjBSOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1OgotCQljYXNlIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1UjoKLQkJCXByaW50aygiIEFFQzYyWFggdGltZSBvdXQgIik7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGluaXRfY2hpcHNldF9hZWM2Mnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJaW50IGJ1c19zcGVlZCA9IHN5c3RlbV9idXNfY2xvY2soKTsKQEAgLTE4NCwzNCArMTcxLDIxIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2FlYzYyeHgoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKLQl1OCByZWc1NCA9IDAsICBtYXNrCT0gaHdpZi0+Y2hhbm5lbCA/IDB4ZjAgOiAweDBmOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmYWVjX3NldF9waW9fbW9kZTsKIAotCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg1MFVGKSB7Ci0JCWlmKGh3aWYtPm1hdGUpCi0JCQlod2lmLT5tYXRlLT5zZXJpYWxpemVkID0gaHdpZi0+c2VyaWFsaXplZCA9IDE7CisJaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYpCiAJCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZhZWM2MjEwX3NldF9tb2RlOwotCX0gZWxzZQorCWVsc2UKIAkJaHdpZi0+c2V0X2RtYV9tb2RlID0gJmFlYzYyNjBfc2V0X21vZGU7CiAKLQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSBod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPnVsdHJhX21hc2sgPSBod2lmLT5jZHMtPnVkbWFfbWFzazsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKKwlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NTBVRikKKwkJcmV0dXJuOwogCi0JaHdpZi0+ZG1hX2xvc3RfaXJxCT0gJmFlYzYyeHhfZG1hX2xvc3RfaXJxOwotCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlIChkZXYsIDB4NTQsICZyZWc1NCk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTQsIChyZWc1NCAmIH5tYXNrKSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7Ci0JfSBlbHNlIGlmIChod2lmLT5jYmwgIT0gQVRBX0NCTF9QQVRBNDBfU0hPUlQpIHsKKwlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKSB7CiAJCXU4IGF0YTY2ID0gMCwgbWFzayA9IGh3aWYtPmNoYW5uZWwgPyAweDAyIDogMHgwMTsKIAogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShod2lmLT5wY2lfZGV2LCAweDQ5LCAmYXRhNjYpOwpAQCAtMjIwLDczICsxOTQsNTMgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfYWVjNjJ4eChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQotewotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX2FlYzZ4ODAoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKLXsKLQl1bnNpZ25lZCBsb25nIGRtYV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7Ci0KLQlpZiAoaW5iKGRtYV9iYXNlICsgMikgJiAweDEwKSB7Ci0JCWQtPm5hbWUgPSAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjVSKSA/Ci0JCQkgICJBRUM2ODgwUiIgOiAiQUVDNjg4MCI7Ci0JCWQtPnVkbWFfbWFzayA9IDB4N2Y7IC8qIHVkbWEwLTYgKi8KLQl9Ci0KLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKLX0KLQotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgYWVjNjJ4eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gYWVjNjJ4eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewkvKiAwICovCiAJCS5uYW1lCQk9ICJBRUM2MjEwIiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2FlYzYyeHgsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYWVjNjJ4eCwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hZWM2Mnh4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDRhLDB4MDIsMHgwMn0sIHsweDRhLDB4MDQsMHgwNH19LAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NFUklBTElaRSB8CisJCQkJICBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwKKwkJCQkgIElERV9IRkxBR19PRkZfQk9BUkQsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHgwNywgLyogdWRtYTAtMiAqLworCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiAJfSx7CS8qIDEgKi8KIAkJLm5hbWUJCT0gIkFFQzYyNjAiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfYWVjNjJ4eCwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hZWM2Mnh4LAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FlYzYyeHgsCi0JCS5hdXRvZG1hCT0gTk9BVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8IElERV9IRkxBR19OT19BVVRPRE1BIHwKKwkJCQkgIElERV9IRkxBR19PRkZfQk9BUkQsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHgxZiwgLyogdWRtYTAtNCAqLworCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiAJfSx7CS8qIDIgKi8KIAkJLm5hbWUJCT0gIkFFQzYyNjBSIiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2FlYzYyeHgsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYWVjNjJ4eCwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hZWM2Mnh4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDRhLDB4MDIsMHgwMn0sIHsweDRhLDB4MDQsMHgwNH19LAotCQkuYm9vdGFibGUJPSBORVZFUl9CT0FSRCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKLQkJLnVkbWFfbWFzawk9IDB4MWYsIC8qIHVkbWEwLTQgKi8KKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogCX0sewkvKiAzICovCiAJCS5uYW1lCQk9ICJBRUM2MjgwIiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2FlYzZ4ODAsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfYWVjNjJ4eCwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hZWM2Mnh4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwgSURFX0hGTEFHX09GRl9CT0FSRCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAl9LHsJLyogNCAqLwogCQkubmFtZQkJPSAiQUVDNjI4MFIiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfYWVjNng4MCwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hZWM2Mnh4LAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FlYzYyeHgsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NGEsMHgwMiwweDAyfSwgezB4NGEsMHgwNCwweDA0fX0sCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwgSURFX0hGTEFHX09GRl9CT0FSRCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAl9CiB9OwogCkBAIC0yOTksMTQgKzI1MywyNiBAQAogICoJZmluZHMgYSBkZXZpY2UgbWF0Y2hpbmcgb3VyIElERSBkZXZpY2UgdGFibGVzLgogICoKICAqCU5PVEU6IHNpbmNlIHdlJ3JlIGdvaW5nIHRvIG1vZGlmeSB0aGUgJ25hbWUnIGZpZWxkIGZvciBBRUMtNlsyNl04MFtSXQotICoJY2hpcHMsIHBhc3MgYSBsb2NhbCBjb3B5IG9mICdzdHJ1Y3QgcGNpX2RldmljZV9pZCcgZG93biB0aGUgY2FsbCBjaGFpbi4KKyAqCWNoaXBzLCBwYXNzIGEgbG9jYWwgY29weSBvZiAnc3RydWN0IGlkZV9wb3J0X2luZm8nIGRvd24gdGhlIGNhbGwgY2hhaW4uCiAgKi8KLSAKKwogc3RhdGljIGludCBfX2RldmluaXQgYWVjNjJ4eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JaWRlX3BjaV9kZXZpY2VfdCBkID0gYWVjNjJ4eF9jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdOworCXN0cnVjdCBpZGVfcG9ydF9pbmZvIGQ7CisJdTggaWR4ID0gaWQtPmRyaXZlcl9kYXRhOwogCi0JcmV0dXJuIGQuaW5pdF9zZXR1cChkZXYsICZkKTsKKwlkID0gYWVjNjJ4eF9jaGlwc2V0c1tpZHhdOworCisJaWYgKGlkeCA9PSAzIHx8IGlkeCA9PSA0KSB7CisJCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKKworCQlpZiAoaW5iKGRtYV9iYXNlICsgMikgJiAweDEwKSB7CisJCQlkLm5hbWUgPSAoaWR4ID09IDQpID8gIkFFQzY4ODBSIiA6ICJBRUM2ODgwIjsKKwkJCWQudWRtYV9tYXNrID0gQVRBX1VETUE2OworCQl9CisJfQorCisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJmQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVjNjJ4eF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCmluZGV4IDMxZDRlNTAuLmE2MDdkZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCQlWZXJzaW9uIDAuMjYJSnVsIDE0IDIwMDcKKyAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9hbGltMTV4My5jCQlWZXJzaW9uIDAuMjkJU2VwIDE2IDIwMDcKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgTWljaGVsIEF1YnJ5LCBNYWludGFpbmVyCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiwgTWFpbnRhaW5lcgpAQCAtNDkyLDYgKzQ5MiwxMyBAQAogCQkgKiBjbGVhciBiaXQgNwogCQkgKi8KIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgdG1wYnl0ZSAmIDB4N0YpOworCQkvKgorCQkgKiBjaGVjayBtMTUzMywgMHg1ZSwgYml0IDF+NCA9PSAxMDAxID0+ICYgMDAwMTExMTAgPSAwMDAxMDAxMAorCQkgKi8KKwkJaWYgKG01MjI5X3JldmlzaW9uID49IDB4MjAgJiYgaXNhX2RldikgeworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoaXNhX2RldiwgMHg1ZSwgJnRtcGJ5dGUpOworCQkJY2hpcF9pc18xNTQzY19lID0gKCh0bXBieXRlICYgMHgxZSkgPT0gMHgxMikgPyAxOiAwOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNTM3LDcgKzU0NCwzMCBAQAogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGlzYV9kZXYsIDB4NzksIHRtcGJ5dGUgfCAweDAyKTsKIAkJfQogCX0KKwogb3V0OgorCS8qCisJICogQ0RfUk9NIERNQSBvbiAobTUyMjksIDB4NTMsIGJpdDApCisJICogICAgICBFbmFibGUgdGhpcyBiaXQgZXZlbiBpZiB3ZSB3YW50IHRvIHVzZSBQSU8uCisJICogUElPIEZJRk8gb2ZmIChtNTIyOSwgMHg1MywgYml0MSkKKwkgKiAgICAgIFRoZSBoYXJkd2FyZSB3aWxsIHVzZSAweDU0aCBhbmQgMHg1NWggdG8gY29udHJvbCBQSU8gRklGTy4KKwkgKgkoTm90IG9uIGxhdGVyIGRldmljZXMgaXQgc2VlbXMpCisJICoKKwkgKgkweDUzIGNoYW5nZXMgbWVhbmluZyBvbiBsYXRlciByZXZzIC0gd2UgbXVzdCBubyB0b3VjaAorCSAqCWJpdCAxIG9uIHRoZW0uICBOZWVkIHRvIGNoZWNrIGlmIDB4MjAgaXMgdGhlIHJpZ2h0IGJyZWFrLgorCSAqLworCWlmIChtNTIyOV9yZXZpc2lvbiA+PSAweDIwKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MywgJnRtcGJ5dGUpOworCisJCWlmIChtNTIyOV9yZXZpc2lvbiA8PSAweDIwKQorCQkJdG1wYnl0ZSA9ICh0bXBieXRlICYgKH4weDAyKSkgfCAweDAxOworCQllbHNlIGlmIChtNTIyOV9yZXZpc2lvbiA9PSAweGM3IHx8IG01MjI5X3JldmlzaW9uID09IDB4YzgpCisJCQl0bXBieXRlIHw9IDB4MDM7CisJCWVsc2UKKwkJCXRtcGJ5dGUgfD0gMHgwMTsKKworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDUzLCB0bXBieXRlKTsKKwl9CiAJcGNpX2Rldl9wdXQobm9ydGgpOwogCXBjaV9kZXZfcHV0KGlzYV9kZXYpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTYxNiwzNiArNjQ2LDggQEAKIAkJCWlmICgodG1wYnl0ZSAmICgxIDw8IGh3aWYtPmNoYW5uZWwpKSA9PSAwKQogCQkJCWNibCA9IEFUQV9DQkxfUEFUQTgwOwogCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogY2hlY2sgbTE1MzMsIDB4NWUsIGJpdCAxfjQgPT0gMTAwMSA9PiAmIDAwMDExMTEwID0gMDAwMTAwMTAKLQkJICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGlzYV9kZXYsIDB4NWUsICZ0bXBieXRlKTsKLQkJY2hpcF9pc18xNTQzY19lID0gKCh0bXBieXRlICYgMHgxZSkgPT0gMHgxMikgPyAxOiAwOwogCX0KIAotCS8qCi0JICogQ0RfUk9NIERNQSBvbiAobTUyMjksIDB4NTMsIGJpdDApCi0JICogICAgICBFbmFibGUgdGhpcyBiaXQgZXZlbiBpZiB3ZSB3YW50IHRvIHVzZSBQSU8KLQkgKiBQSU8gRklGTyBvZmYgKG01MjI5LCAweDUzLCBiaXQxKQotCSAqICAgICAgVGhlIGhhcmR3YXJlIHdpbGwgdXNlIDB4NTRoIGFuZCAweDU1aCB0byBjb250cm9sIFBJTyBGSUZPCi0JICoJKE5vdCBvbiBsYXRlciBkZXZpY2VzIGl0IHNlZW1zKQotCSAqCi0JICoJMHg1MyBjaGFuZ2VzIG1lYW5pbmcgb24gbGF0ZXIgcmV2cyAtIHdlIG11c3Qgbm8gdG91Y2gKLQkgKgliaXQgMSBvbiB0aGVtLiBOZWVkIHRvIGNoZWNrIGlmIDB4MjAgaXMgdGhlIHJpZ2h0IGJyZWFrCi0JICovCi0JIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MywgJnRtcGJ5dGUpOwotCQotCWlmKG01MjI5X3JldmlzaW9uIDw9IDB4MjApCi0JCXRtcGJ5dGUgPSAodG1wYnl0ZSAmICh+MHgwMikpIHwgMHgwMTsKLQllbHNlIGlmIChtNTIyOV9yZXZpc2lvbiA9PSAweGM3IHx8IG01MjI5X3JldmlzaW9uID09IDB4YzgpCi0JCXRtcGJ5dGUgfD0gMHgwMzsKLQllbHNlCi0JCXRtcGJ5dGUgfD0gMHgwMTsKLQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTMsIHRtcGJ5dGUpOwotCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIGNibDsKQEAgLTY2NCwzNSArNjY2LDggQEAKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmYWxpX3NldF9kbWFfbW9kZTsKIAlod2lmLT51ZG1hX2ZpbHRlciA9ICZhbGlfdWRtYV9maWx0ZXI7CiAKLQkvKiBkb24ndCB1c2UgTEJBNDggRE1BIG9uIEFMaSBkZXZpY2VzIGJlZm9yZSByZXYgMHhDNSAqLwotCWh3aWYtPm5vX2xiYTQ4X2RtYSA9IChtNTIyOV9yZXZpc2lvbiA8PSAweEM0KSA/IDEgOiAwOwotCi0JaWYgKCFod2lmLT5kbWFfYmFzZSkgewotCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwotCQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOworCWlmIChod2lmLT5kbWFfYmFzZSA9PSAwKQogCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBjaGVjayBpbiAtPmluaXRfZG1hIGd1YXJhbnRlZXMgbTUyMjlfcmV2aXNpb24gPj0gMHgyMCBoZXJlCi0JICovCi0KLQlpZiAobTUyMjlfcmV2aXNpb24gPiAweDIwKQotCQlod2lmLT5hdGFwaV9kbWEgPSAxOwotCi0JaWYgKG01MjI5X3JldmlzaW9uIDw9IDB4MjApCi0JCWh3aWYtPnVsdHJhX21hc2sgPSAweDAwOyAvKiBubyB1ZG1hICovCi0JZWxzZSBpZiAobTUyMjlfcmV2aXNpb24gPCAweEMyKQotCQlod2lmLT51bHRyYV9tYXNrID0gMHgwNzsgLyogdWRtYTAtMiAqLwotCWVsc2UgaWYgKG01MjI5X3JldmlzaW9uID09IDB4QzIgfHwgbTUyMjlfcmV2aXNpb24gPT0gMHhDMykKLQkJaHdpZi0+dWx0cmFfbWFzayA9IDB4MWY7IC8qIHVkbWEwLTQgKi8KLQllbHNlIGlmIChtNTIyOV9yZXZpc2lvbiA9PSAweEM0KQotCQlod2lmLT51bHRyYV9tYXNrID0gMHgzZjsgLyogdWRtYTAtNSAqLwotCWVsc2UKLQkJaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7IC8qIHVkbWEwLTYgKi8KLQotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwotCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA3OwogCiAJaHdpZi0+ZG1hX3NldHVwID0gJmFsaTE1eDNfZG1hX3NldHVwOwogCkBAIC03NzEsMTQgKzc0NiwxNSBAQAogCWlkZV9zZXR1cF9kbWEoaHdpZiwgZG1hYmFzZSwgOCk7CiB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IGFsaTE1eDNfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGFsaTE1eDNfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9ICJBTEkxNVgzIiwKIAkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FsaTE1eDMsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbGkxNXgzLAogCS5pbml0X2RtYQk9IGluaXRfZG1hX2FsaTE1eDMsCi0JLmF1dG9kbWEJPSBBVVRPRE1BLAotCS5ib290YWJsZQk9IE9OX0JPQVJELAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0JPT1RBQkxFLAogCS5waW9fbWFzawk9IEFUQV9QSU81LAorCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMiwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiB9OwogCiAvKioKQEAgLTc5NiwxNSArNzcyLDM0IEBACiAJCXsgfSwKIAl9OwogCi0JaWRlX3BjaV9kZXZpY2VfdCAqZCA9ICZhbGkxNXgzX2NoaXBzZXQ7CisJc3RydWN0IGlkZV9wb3J0X2luZm8gZCA9IGFsaTE1eDNfY2hpcHNldDsKKwl1OCByZXYgPSBkZXYtPnJldmlzaW9uOwogCiAJaWYgKHBjaV9kZXZfcHJlc2VudChhdGlfcnMxMDApKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJhbGltMTV4MzogQVRJIFJhZGVvbiBJR1AgTm9ydGhicmlkZ2UgaXMgbm90IHlldCBmdWxseSB0ZXN0ZWQuXG4iKTsKIAorCS8qIGRvbid0IHVzZSBMQkE0OCBETUEgb24gQUxpIGRldmljZXMgYmVmb3JlIHJldiAweEM1ICovCisJaWYgKHJldiA8PSAweEM0KQorCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX05PX0xCQTQ4X0RNQTsKKworCWlmIChyZXYgPj0gMHgyMCkgeworCQlpZiAocmV2ID09IDB4MjApCisJCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX05PX0FUQVBJX0RNQTsKKworCQlpZiAocmV2IDwgMHhDMikKKwkJCWQudWRtYV9tYXNrID0gQVRBX1VETUEyOworCQllbHNlIGlmIChyZXYgPT0gMHhDMiB8fCByZXYgPT0gMHhDMykKKwkJCWQudWRtYV9tYXNrID0gQVRBX1VETUE0OworCQllbHNlIGlmIChyZXYgPT0gMHhDNCkKKwkJCWQudWRtYV9tYXNrID0gQVRBX1VETUE1OworCQllbHNlCisJCQlkLnVkbWFfbWFzayA9IEFUQV9VRE1BNjsKKwl9CisKICNpZiBkZWZpbmVkKENPTkZJR19TUEFSQzY0KQotCWQtPmluaXRfaHdpZiA9IGluaXRfaHdpZl9jb21tb25fYWxpMTV4MzsKKwlkLmluaXRfaHdpZiA9IGluaXRfaHdpZl9jb21tb25fYWxpMTV4MzsKICNlbmRpZiAvKiBDT05GSUdfU1BBUkM2NCAqLwotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOworCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsICZkKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvcGNpL2FtZDc0eHguYwppbmRleCAzYmYzZDkzLi44ZDQxMjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYW1kNzR4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hbWQ3NHh4LmMKQEAgLTc3LDcgKzc3LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYW1kX2lkZV9jaGlwICphbWRfY29uZmlnOwotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgKmFtZF9jaGlwc2V0Oworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICphbWRfY2hpcHNldDsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYW1kXzgwdzsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYW1kX2Nsb2NrOwogCkBAIC0yMzMsNyArMjMzLDYgQEAKICAqIFByaW50IHRoZSBib290IG1lc3NhZ2UuCiAgKi8KIAotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX1JFVklTSU9OX0lELCAmdCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIChyZXYgJTAyeCkgVURNQSVzIGNvbnRyb2xsZXJcbiIsCiAJCWFtZF9jaGlwc2V0LT5uYW1lLCBwY2lfbmFtZShkZXYpLCBkZXYtPnJldmlzaW9uLAogCQlhbWRfZG1hW2ZscyhhbWRfY29uZmlnLT51ZG1hX21hc2spIC0gMV0pOwpAQCAtMjQzLDI5ICsyNDIsMTggQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9hbWQ3NHh4KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaW50IGk7Ci0KIAlpZiAoaHdpZi0+aXJxID09IDApIC8qIDAgaXMgYm9ndXMgYnV0IHdpbGwgZG8gZm9yIG5vdyAqLwogCQlod2lmLT5pcnEgPSBwY2lfZ2V0X2xlZ2FjeV9pZGVfaXJxKGh3aWYtPnBjaV9kZXYsIGh3aWYtPmNoYW5uZWwpOwogCiAJaHdpZi0+c2V0X3Bpb19tb2RlID0gJmFtZF9zZXRfcGlvX21vZGU7CiAJaHdpZi0+c2V0X2RtYV9tb2RlID0gJmFtZF9zZXRfZHJpdmU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWh3aWYtPmRyaXZlc1tpXS5pb18zMmJpdCA9IDE7Ci0JCWh3aWYtPmRyaXZlc1tpXS51bm1hc2sgPSAxOwotCQlod2lmLT5kcml2ZXNbaV0uYXV0b3R1bmUgPSAxOwotCX0KLQogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCiAJCXJldHVybjsKIAotICAgICAgICBod2lmLT5hdGFwaV9kbWEgPSAxOwotCiAJaHdpZi0+dWx0cmFfbWFzayA9IGFtZF9jb25maWctPnVkbWFfbWFzazsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKLQlpZiAoKGFtZF9jb25maWctPmZsYWdzICYgQU1EX0JBRF9TV0RNQSkgPT0gMCkKLQkJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7CisJaWYgKGFtZF9jb25maWctPmZsYWdzICYgQU1EX0JBRF9TV0RNQSkKKwkJaHdpZi0+c3dkbWFfbWFzayA9IDB4MDA7CiAKIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKSB7CiAJCWlmICgoYW1kXzgwdyA+PiBod2lmLT5jaGFubmVsKSAmIDEpCkBAIC0yNzUsMTggKzI2MywyNCBAQAogCX0KIH0KIAorI2RlZmluZSBJREVfSEZMQUdTX0FNRCBcCisJKElERV9IRkxBR19QSU9fTk9fQkxBQ0tMSVNUIHwgXAorCSBJREVfSEZMQUdfUElPX05PX0RPV05HUkFERSB8IFwKKwkgSURFX0hGTEFHX1BPU1RfU0VUX01PREUgfCBcCisJIElERV9IRkxBR19JT18zMkJJVCB8IFwKKwkgSURFX0hGTEFHX1VOTUFTS19JUlFTIHwgXAorCSBJREVfSEZMQUdfQk9PVEFCTEUpCisKICNkZWZpbmUgREVDTEFSRV9BTURfREVWKG5hbWVfc3RyKQkJCQkJXAogCXsJCQkJCQkJCVwKIAkJLm5hbWUJCT0gbmFtZV9zdHIsCQkJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9hbWQ3NHh4LAkJCVwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hbWQ3NHh4LAkJCVwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAkJCQlcCiAJCS5lbmFibGViaXRzCT0ge3sweDQwLDB4MDIsMHgwMn0sIHsweDQwLDB4MDEsMHgwMX19LAlcCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAkJCQlcCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1BJT19OT19CTEFDS0xJU1QJCVwKLQkJCQl8IElERV9IRkxBR19QSU9fTk9fRE9XTkdSQURFCQlcCi0JCQkJfCBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSwJCVwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX0FNRCwJCQlcCiAJCS5waW9fbWFzawk9IEFUQV9QSU81LAkJCQlcCisJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMiwJCQkJXAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCQkJCVwKIAl9CiAKICNkZWZpbmUgREVDTEFSRV9OVl9ERVYobmFtZV9zdHIpCQkJCQlcCkBAIC0yOTQsMTYgKzI4OCwxNCBAQAogCQkubmFtZQkJPSBuYW1lX3N0ciwJCQkJXAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2FtZDc0eHgsCQkJXAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2FtZDc0eHgsCQkJXAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCQkJCVwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NTAsMHgwMiwweDAyfSwgezB4NTAsMHgwMSwweDAxfX0sCVwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCQkJCVwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVAkJXAotCQkJCXwgSURFX0hGTEFHX1BJT19OT19ET1dOR1JBREUJCVwKLQkJCQl8IElERV9IRkxBR19QT1NUX1NFVF9NT0RFLAkJXAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR1NfQU1ELAkJCVwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCQkJCVwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAkJCQlcCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwJCQkJXAogCX0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgYW1kNzR4eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gYW1kNzR4eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJLyogIDAgKi8gREVDTEFSRV9BTURfREVWKCJBTUQ3NDAxIiksCiAJLyogIDEgKi8gREVDTEFSRV9BTURfREVWKCJBTUQ3NDA5IiksCiAJLyogIDIgKi8gREVDTEFSRV9BTURfREVWKCJBTUQ3NDExIiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMgYi9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKaW5kZXggNDQ2OTAwZC4uZWY4ZTAxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwpAQCAtMTcyLDIxICsxNzIsMTIgQEAKIAl1OCBjaCA9IGh3aWYtPmNoYW5uZWw7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBod2lmLT5wY2lfZGV2OwogCi0JaWYgKCFod2lmLT5pcnEpCi0JCWh3aWYtPmlycSA9IGNoID8gMTUgOiAxNDsKLQogCWh3aWYtPnNldF9waW9fbW9kZSA9ICZhdGlpeHBfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZhdGlpeHBfc2V0X2RtYV9tb2RlOwotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IDE7Ci0JaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gMTsKIAogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCiAJCXJldHVybjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4M2Y7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0KIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBBVElJWFBfSURFX1VETUFfTU9ERSArIGNoLCAmdWRtYV9tb2RlKTsKIAogCWlmICgodWRtYV9tb2RlICYgMHgwNykgPj0gMHgwNCB8fCAodWRtYV9tb2RlICYgMHg3MCkgPj0gMHg0MCkKQEAgLTE5OCwyMyArMTg5LDI0IEBACiAJaHdpZi0+ZG1hX2hvc3Rfb2ZmID0gJmF0aWl4cF9kbWFfaG9zdF9vZmY7CiB9CiAKLQotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgYXRpaXhwX3BjaV9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBhdGlpeHBfcGNpX2luZm9bXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMCAqLwogCQkubmFtZQkJPSAiQVRJSVhQIiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9hdGlpeHAsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDgsMHgwMSwweDAwfSwgezB4NDgsMHgwOCwweDAwfX0sCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19CT09UQUJMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAl9LHsJLyogMSAqLwogCQkubmFtZQkJPSAiU0I2MDBfUEFUQSIsCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfYXRpaXhwLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ4LDB4MDEsMHgwMH0sIHsweDAwLDB4MDAsMHgwMH19LAotIAkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0gCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCisgCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfTEVHQUNZX0lSUVMgfAorCQkJCSAgSURFX0hGTEFHX0JPT1RBQkxFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0MC5jCmluZGV4IGYzNjk2NDUuLjRhYTQ4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjQwLmMKQEAgLTE4NSw2ICsxODUsOCBAQAogCiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfQ01ENjQwX0VOSEFOQ0VEICovCiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY21kNjQwX2xvY2spOworCiAvKgogICogVGhlc2UgYXJlIGluaXRpYWxpemVkIHRvIHBvaW50IGF0IHRoZSBkZXZpY2VzIHdlIGNvbnRyb2wKICAqLwpAQCAtMjU4LDEyICsyNjAsMTIgQEAKIAogc3RhdGljIHU4IGdldF9jbWQ2NDBfcmVnKHUxNiByZWcpCiB7Ci0JdTggYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGI7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21kNjQwX2xvY2ssIGZsYWdzKTsKIAliID0gX19nZXRfY21kNjQwX3JlZyhyZWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kNjQwX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gYjsKIH0KIApAQCAtMjcxLDkgKzI3Myw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbWQ2NDBfbG9jaywgZmxhZ3MpOwogCV9fcHV0X2NtZDY0MF9yZWcocmVnLHZhbCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWQ2NDBfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBtYXRjaF9wY2lfY21kNjQwX2RldmljZSAodm9pZCkKQEAgLTM1MSw3ICszNTMsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21kNjQwX2xvY2ssIGZsYWdzKTsKIAogCW91dGJfcCgweDBhLCAweDE3MCArIElERV9TRUxFQ1RfT0ZGU0VUKTsJLyogc2VsZWN0IGRyaXZlMCAqLwogCXVkZWxheSgxMDApOwpAQCAtMzU5LDExICszNjEsMTEgQEAKIAkJb3V0Yl9wKDB4MWEsIDB4MTcwICsgSURFX1NFTEVDVF9PRkZTRVQpOyAvKiBzZWxlY3QgZHJpdmUxICovCiAJCXVkZWxheSgxMDApOwogCQlpZiAoKGluYl9wKDB4MTcwICsgSURFX1NFTEVDVF9PRkZTRVQpICYgMHgxZikgIT0gMHgxYSkgewotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZDY0MF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gMDsgLyogbm90aGluZyByZXNwb25kZWQgKi8KIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZDY0MF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7IC8qIHN1Y2Nlc3MgKi8KIH0KIApAQCAtNDQwLDExICs0NDIsMTEgQEAKIHN0YXRpYyB2b2lkIHNldF9wcmVmZXRjaF9tb2RlICh1bnNpZ25lZCBpbnQgaW5kZXgsIGludCBtb2RlKQogewogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGNtZF9kcml2ZXNbaW5kZXhdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJlZyA9IHByZWZldGNoX3JlZ3NbaW5kZXhdOwogCXU4IGI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbWQ2NDBfbG9jaywgZmxhZ3MpOwogCWIgPSBfX2dldF9jbWQ2NDBfcmVnKHJlZyk7CiAJaWYgKG1vZGUpIHsJLyogd2FudCBwcmVmZXRjaCBvbj8gKi8KICNpZiBDTUQ2NDBfUFJFRkVUQ0hfTUFTS1MKQEAgLTQ2MCw3ICs0NjIsNyBAQAogCQliIHw9IHByZWZldGNoX21hc2tzW2luZGV4XTsJLyogZGlzYWJsZSBwcmVmZXRjaCAqLwogCX0KIAlfX3B1dF9jbWQ2NDBfcmVnKHJlZywgYik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWQ2NDBfbG9jaywgZmxhZ3MpOwogfQogCiAvKgpAQCAtNTYxLDcgKzU2Myw3IEBACiAJLyoKIAkgKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIHJlYWR5LCBwcm9ncmFtIHRoZSBuZXcgdGltaW5ncwogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbWQ2NDBfbG9jaywgZmxhZ3MpOwogCS8qCiAJICogUHJvZ3JhbSB0aGUgYWRkcmVzc19zZXR1cCBjbG9ja3MgaW50byBBUlRUSU0gcmVnLAogCSAqIGFuZCB0aGVuIHRoZSBhY3RpdmUvcmVjb3ZlcnkgY291bnRzIGludG8gdGhlIERSV1RJTSByZWcKQEAgLTU3MCw3ICs1NzIsNyBAQAogCXNldHVwX2NvdW50IHw9IF9fZ2V0X2NtZDY0MF9yZWcoYXJ0dGltX3JlZ3NbaW5kZXhdKSAmIDB4M2Y7CiAJX19wdXRfY21kNjQwX3JlZyhhcnR0aW1fcmVnc1tpbmRleF0sIHNldHVwX2NvdW50KTsKIAlfX3B1dF9jbWQ2NDBfcmVnKGRyd3RpbV9yZWdzW2luZGV4XSwgcGFja19uaWJibGVzKGFjdGl2ZV9jb3VudCwgcmVjb3ZlcnlfY291bnQpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZDY0MF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02NzAsMjAgKzY3MiwyMCBAQAogCiBzdGF0aWMgaW50IHBjaV9jb25mMSh2b2lkKQogewotCXUzMiB0bXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtZDY0MF9sb2NrLCBmbGFncyk7CiAJb3V0YigweDAxLCAweENGQik7CiAJdG1wID0gaW5sKDB4Q0Y4KTsKIAlvdXRsKDB4ODAwMDAwMDAsIDB4Q0Y4KTsKIAlpZiAoaW5sKDB4Q0Y4KSA9PSAweDgwMDAwMDAwKSB7CiAJCW91dGwodG1wLCAweENGOCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtZDY0MF9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAxOwogCX0KIAlvdXRsKHRtcCwgMHhDRjgpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kNjQwX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjkxLDE1ICs2OTMsMTUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtZDY0MF9sb2NrLCBmbGFncyk7CiAJb3V0YigweDAwLCAweENGQik7CiAJb3V0YigweDAwLCAweENGOCk7CiAJb3V0YigweDAwLCAweENGQSk7CiAJaWYgKGluYigweENGOCkgPT0gMHgwMCAmJiBpbmIoMHhDRjgpID09IDB4MDApIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRlX2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kNjQwX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDE7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21kNjQwX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2NtZDY0eC5jCmluZGV4IGYzZDNiZGUuLmVhMDE0M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY21kNjR4LmMKQEAgLTQzOSwxMSArNDM5LDggQEAKIAl1OCBtcmRtb2RlID0gMDsKIAogCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NNRF82NDYpIHsKLQkJdTggcmV2ID0gMDsKIAotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7Ci0KLQkJc3dpdGNoIChyZXYpIHsKKwkJc3dpdGNoIChkZXYtPnJldmlzaW9uKSB7CiAJCWNhc2UgMHgwNzoKIAkJY2FzZSAweDA1OgogCQkJcHJpbnRrKCIlczogVWx0cmFETUEgY2FwYWJsZVxuIiwgbmFtZSk7CkBAIC01MDUsMjIgKzUwMiwxMyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9jbWQ2NHgoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gaHdpZi0+cGNpX2RldjsKLQl1OCByZXYJCQk9IDA7Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CiAKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmY21kNjR4X3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmY21kNjR4X3NldF9kbWFfbW9kZTsKIAotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CiAKLQlod2lmLT5hdGFwaV9kbWEgID0gMTsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKLQlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+Y2RzLT51ZG1hX21hc2s7Ci0KIAkvKgogCSAqIFVsdHJhRE1BIG9ubHkgc3VwcG9ydGVkIG9uIFBDSTY0NlUgYW5kIFBDSTY0NlUyLCB3aGljaAogCSAqIGNvcnJlc3BvbmQgdG8gcmV2aXNpb25zIDB4MDMsIDB4MDUgYW5kIDB4MDcgcmVzcGVjdGl2ZWx5LgpAQCAtNTMzLDcgKzUyMSw3IEBACiAJICoKIAkgKiBTbyB3ZSBvbmx5IGRvIFVsdHJhRE1BIG9uIHJldmlzaW9uIDB4MDUgYW5kIDB4MDcgY2hpcHNldHMuCiAJICovCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQ01EXzY0NiAmJiByZXYgPCA1KQorCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0NNRF82NDYgJiYgZGV2LT5yZXZpc2lvbiA8IDUpCiAJCWh3aWYtPnVsdHJhX21hc2sgPSAweDAwOwogCiAJaWYgKGh3aWYtPmNibCAhPSBBVEFfQ0JMX1BBVEE0MF9TSE9SVCkKQEAgLTU0NywxMSArNTM1LDEwIEBACiAJCWh3aWYtPmlkZV9kbWFfdGVzdF9pcnEJPSAmY21kNjQ4X2lkZV9kbWFfdGVzdF9pcnE7CiAJCWJyZWFrOwogCWNhc2UgUENJX0RFVklDRV9JRF9DTURfNjQ2OgotCQlod2lmLT5jaGlwc2V0ID0gaWRlX2NtZDY0NjsKLQkJaWYgKHJldiA9PSAweDAxKSB7CisJCWlmIChkZXYtPnJldmlzaW9uID09IDB4MDEpIHsKIAkJCWh3aWYtPmlkZV9kbWFfZW5kID0gJmNtZDY0Nl8xX2lkZV9kbWFfZW5kOwogCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmV2ID49IDB4MDMpCisJCX0gZWxzZSBpZiAoZGV2LT5yZXZpc2lvbiA+PSAweDAzKQogCQkJZ290byBhbHRfaXJxX2JpdHM7CiAJCS8qIGZhbGwgdGhydSAqLwogCWRlZmF1bHQ6CkBAIC01NjEsODAgKzU0OCw2MiBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9jbWQ2NHgoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKLXsKLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKLX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBjbWQ2NHhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0geworCXsJLyogMCAqLworCQkubmFtZQkJPSAiQ01ENjQzIiwKKwkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9jbWQ2NHgsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfY21kNjR4LAorCQkuZW5hYmxlYml0cwk9IHt7MHgwMCwweDAwLDB4MDB9LCB7MHg1MSwweDA4LDB4MDh9fSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0ggfCBJREVfSEZMQUdfQk9PVEFCTEUsCisJCS5waW9fbWFzawk9IEFUQV9QSU81LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSAweDAwLCAvKiBubyB1ZG1hICovCisJfSx7CS8qIDEgKi8KKwkJLm5hbWUJCT0gIkNNRDY0NiIsCisJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2NtZDY0eCwKKwkJLmVuYWJsZWJpdHMJPSB7ezB4NTEsMHgwNCwweDA0fSwgezB4NTEsMHgwOCwweDA4fX0sCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwgSURFX0hGTEFHX0JPT1RBQkxFLAorCQkucGlvX21hc2sJPSBBVEFfUElPNSwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAorCX0sewkvKiAyICovCisJCS5uYW1lCQk9ICJDTUQ2NDgiLAorCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2NtZDY0eCwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9jbWQ2NHgsCisJCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAorCQkuY2hpcHNldAk9IGlkZV9jbWQ2NDYsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENIIHwgSURFX0hGTEFHX0JPT1RBQkxFLAorCQkucGlvX21hc2sJPSBBVEFfUElPNSwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAorCX0sewkvKiAzICovCisJCS5uYW1lCQk9ICJDTUQ2NDkiLAorCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2NtZDY0eCwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9jbWQ2NHgsCisJCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCB8IElERV9IRkxBR19CT09UQUJMRSwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKKwl9Cit9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX2NtZDY0NihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQorc3RhdGljIGludCBfX2RldmluaXQgY21kNjR4X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkOworCXU4IGlkeCA9IGlkLT5kcml2ZXJfZGF0YTsKKworCWQgPSBjbWQ2NHhfY2hpcHNldHNbaWR4XTsKKwogCS8qCiAJICogVGhlIG9yaWdpbmFsIFBDSTA2NDYgZGlkbid0IGhhdmUgdGhlIHByaW1hcnkgY2hhbm5lbCBlbmFibGUgYml0LAogCSAqIGl0IGFwcGVhcmVkIHN0YXJ0aW5nIHdpdGggUENJMDY0NlUgKGkuZS4gcmV2aXNpb24gSUQgMykuCiAJICovCi0JaWYgKGRldi0+cmV2aXNpb24gPCAzKQotCQlkLT5lbmFibGViaXRzWzBdLnJlZyA9IDA7CisJaWYgKGlkeCA9PSAxICYmIGRldi0+cmV2aXNpb24gPCAzKQorCQlkLmVuYWJsZWJpdHNbMF0ucmVnID0gMDsKIAotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOwotfQotCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBjbWQ2NHhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCXsJLyogMCAqLwotCQkubmFtZQkJPSAiQ01ENjQzIiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2NtZDY0eCwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9jbWQ2NHgsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfY21kNjR4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDUxLDB4MDgsMHgwOH19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogbm8gdWRtYSAqLwotCX0sewkvKiAxICovCi0JCS5uYW1lCQk9ICJDTUQ2NDYiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfY21kNjQ2LAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2NtZDY0eCwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9jbWQ2NHgsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmVuYWJsZWJpdHMJPSB7ezB4NTEsMHgwNCwweDA0fSwgezB4NTEsMHgwOCwweDA4fX0sCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19BQlVTRV9QUkVGRVRDSCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzUsCi0JCS51ZG1hX21hc2sJPSAweDA3LCAvKiB1ZG1hMC0yICovCi0JfSx7CS8qIDIgKi8KLQkJLm5hbWUJCT0gIkNNRDY0OCIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9jbWQ2NHgsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfY21kNjR4LAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2NtZDY0eCwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuZW5hYmxlYml0cwk9IHt7MHg1MSwweDA0LDB4MDR9LCB7MHg1MSwweDA4LDB4MDh9fSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX1BSRUZFVENILAotCQkucGlvX21hc2sJPSBBVEFfUElPNSwKLQkJLnVkbWFfbWFzawk9IDB4MWYsIC8qIHVkbWEwLTQgKi8KLQl9LHsJLyogMyAqLwotCQkubmFtZQkJPSAiQ01ENjQ5IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2NtZDY0eCwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9jbWQ2NHgsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfY21kNjR4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5lbmFibGViaXRzCT0ge3sweDUxLDB4MDQsMHgwNH0sIHsweDUxLDB4MDgsMHgwOH19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQUJVU0VfUFJFRkVUQ0gsCi0JCS5waW9fbWFzawk9IEFUQV9QSU81LAotCQkudWRtYV9tYXNrCT0gMHgzZiwgLyogdWRtYTAtNSAqLwotCX0KLX07Ci0KLS8qCi0gKiBXZSBtYXkgaGF2ZSB0byBtb2RpZnkgZW5hYmxlYml0cyBmb3IgUENJMDY0Niwgc28gd2UnZCBiZXR0ZXIgcGFzcwotICogYSBsb2NhbCBjb3B5IG9mIHRoZSBpZGVfcGNpX2RldmljZV90IHN0cnVjdHVyZSBkb3duIHRoZSBjYWxsIGNoYWluLi4uCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IGNtZDY0eF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCi17Ci0JaWRlX3BjaV9kZXZpY2VfdCBkID0gY21kNjR4X2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV07Ci0KLQlyZXR1cm4gZC5pbml0X3NldHVwKGRldiwgJmQpOworCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsICZkKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNtZDY0eF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTIwLmMKaW5kZXggYThiZjQ5NC4uMDQ2NjQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9jczU1MjAuYwpAQCAtMTA2LDE4ICsxMDYsNiBAQAogfQogCiAvKgotICoJV2UgcHJvdmlkZSBhIGNhbGxiYWNrIGZvciBvdXIgbm9uc3RhbmRhcmQgRE1BIGxvY2F0aW9uCi0gKi8KLQotc3RhdGljIHZvaWQgX19kZXZpbml0IGNzNTUyMF9pbml0X3NldHVwX2RtYShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkLCBpZGVfaHdpZl90ICpod2lmKQotewotCXVuc2lnbmVkIGxvbmcgYm1pZGUgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAyKTsJLyogTm90IHRoZSB1c3VhbCA0ICovCi0JaWYoaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5kbWFfYmFzZSkJLyogU2Vjb25kIGNoYW5uZWwgYXQgcHJpbWFyeSArIDggKi8KLQkJYm1pZGUgKz0gODsKLQlpZGVfc2V0dXBfZG1hKGh3aWYsIGJtaWRlLCA4KTsKLX0KLQotLyoKICAqCVdlIHdyYXAgdGhlIERNQSBhY3RpdmF0ZSB0byBzZXQgdGhlIHZkbWEgZmxhZy4gVGhpcyBpcyBuZWVkZWQKICAqCXNvIHRoYXQgdGhlIElERSBETUEgbGF5ZXIgaXNzdWVzIFBJTyBub3QgRE1BIGNvbW1hbmRzIG92ZXIgdGhlCiAgKglETUEgY2hhbm5lbApAQCAtMTI1LDYgKzExMyw3IEBACiAgCiBzdGF0aWMgaW50IGNzNTUyMF9kbWFfb24oaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCS8qIEFUQVBJIGlzIGhhcmRlciBzbyBsZWF2ZSBpdCBmb3Igbm93ICovCiAJZHJpdmUtPnZkbWEgPSAxOwogCXJldHVybiAwOwogfQpAQCAtMTM0LDMzICsxMjMsMjUgQEAKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmY3M1NTIwX3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmY3M1NTIwX3NldF9kbWFfbW9kZTsKIAotCWlmIChod2lmLT5kbWFfYmFzZSA9PSAwKSB7Ci0JCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IDE7CisJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKLQl9CiAKIAlod2lmLT5pZGVfZG1hX29uID0gJmNzNTUyMF9kbWFfb247Ci0KLQkvKiBBVEFQSSBpcyBoYXJkZXIgc28gbGVhdmUgaXQgZm9yIG5vdyAqLwotCWh3aWYtPmF0YXBpX2RtYSA9IDA7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDA7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDA7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDA7CiB9CiAKICNkZWZpbmUgREVDTEFSRV9DU19ERVYobmFtZV9zdHIpCQkJCVwKIAl7CQkJCQkJCVwKIAkJLm5hbWUJCT0gbmFtZV9zdHIsCQkJXAotCQkuaW5pdF9zZXR1cF9kbWEgPSBjczU1MjBfaW5pdF9zZXR1cF9kbWEsCVwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9jczU1MjAsCQlcCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwJCQlcCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAkJCVwKIAkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTIHwJCVwKLQkJCQkgIElERV9IRkxBR19WRE1BLAkJXAorCQkJCSAgSURFX0hGTEFHX0NTNTUyMCB8CQlcCisJCQkJICBJREVfSEZMQUdfVkRNQSB8CQlcCisJCQkJICBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwJXAorCQkJCSAgSURFX0hGTEFHX0JPT1RBQkxFLAkJXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCQlcCiAJfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBjeXJpeF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gY3lyaXhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCS8qIDAgKi8gREVDTEFSRV9DU19ERVYoIkN5cml4IDU1MTAiKSwKIAkvKiAxICovIERFQ0xBUkVfQ1NfREVWKCJDeXJpeCA1NTIwIikKIH07CkBAIC0xNzMsOSArMTU0LDggQEAKICAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNzNTUyMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IE5VTEwsICptYXRlID0gTlVMTDsKLQlhdGFfaW5kZXhfdCBpbmRleDsKLQlpZGVfcGNpX2RldmljZV90ICpkID0gJmN5cml4X2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV07CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQgPSAmY3lyaXhfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKKwl1OCBpZHhbNF0gPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfTsKIAogCWlkZV9zZXR1cF9wY2lfbm9pc2UoZGV2LCBkKTsKIApAQCAtMTkxLDI5ICsxNzEsMTQgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaW5kZXguYWxsID0gMHhmMGYwOwotCiAJLyoKIAkgKglOb3cgdGhlIGNoaXBzZXQgaXMgY29uZmlndXJlZCB3ZSBjYW4gbGV0IHRoZSBjb3JlCiAJICoJZG8gYWxsIHRoZSBkZXZpY2Ugc2V0dXAgZm9yIHVzCiAJICovCiAKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgMTQsICZpbmRleCk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIDE0LCAmaWR4WzBdKTsKIAotCWlmICgoaW5kZXguYi5sb3cgJiAweGYwKSAhPSAweGYwKQotCQlod2lmID0gJmlkZV9od2lmc1tpbmRleC5iLmxvd107Ci0JaWYgKChpbmRleC5iLmhpZ2ggJiAweGYwKSAhPSAweGYwKQotCQltYXRlID0gJmlkZV9od2lmc1tpbmRleC5iLmhpZ2hdOwotCi0JaWYgKGh3aWYpCi0JCXByb2JlX2h3aWZfaW5pdChod2lmKTsKLQlpZiAobWF0ZSkKLQkJcHJvYmVfaHdpZl9pbml0KG1hdGUpOwotCi0JaWYgKGh3aWYpCi0JCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7Ci0JaWYgKG1hdGUpCi0JCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQobWF0ZSk7CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCmluZGV4IDBkMjNiOGEuLjU5OTQwODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTMwLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCQlWZXJzaW9uIDAuNzYJQXVnIDMgMjAwNworICogbGludXgvZHJpdmVycy9pZGUvcGNpL2NzNTUzMC5jCQlWZXJzaW9uIDAuNzcJU2VwIDI0IDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAJCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDAwCQkJTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+CkBAIC0xNDYsNyArMTQ2LDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGluaXRfY2hpcHNldF9jczU1MzAgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHBjaV9kZXYgKm1hc3Rlcl8wID0gTlVMTCwgKmNzNTUzMF8wID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDQpID09IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTcxLDkgKzE3MCw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOwotCQkvKiBhbGwgQ1BVcyAodGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIENQVSB3aXRoIHRoaXMgY2hpcHNldCkgKi8KLQogCS8qCiAJICogRW5hYmxlIEJ1c01hc3RlciBhbmQgTWVtb3J5V3JpdGVBbmRJbnZhbGlkYXRlIGZvciB0aGUgY3M1NTMwOgogCSAqIC0tPiAgT1IgMHgxNCBpbnRvIDE2LWJpdCBQQ0kgQ09NTUFORCByZWcgb2YgZnVuY3Rpb24gMCBvZiB0aGUgY3M1NTMwCkBAIC0yMjQsOCArMjIwLDYgQEAKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUobWFzdGVyXzAsIDB4NDIsIDB4MDApOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShtYXN0ZXJfMCwgMHg0MywgMHhjMSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOwotCiBvdXQ6CiAJcGNpX2Rldl9wdXQobWFzdGVyXzApOwogCXBjaV9kZXZfcHV0KGNzNTUzMF8wKTsKQEAgLTI0NSw5ICsyMzksNiBAQAogCXVuc2lnbmVkIGxvbmcgYmFzZXJlZzsKIAl1MzIgZDBfdGltaW5nczsKIAotCWlmIChod2lmLT5tYXRlKQotCQlod2lmLT5zZXJpYWxpemVkID0gaHdpZi0+bWF0ZS0+c2VyaWFsaXplZCA9IDE7Ci0KIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmY3M1NTMwX3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmY3M1NTMwX3NldF9kbWFfbW9kZTsKIApAQCAtMjU4LDI3ICsyNDksMjIgQEAKIAlpZiAoQ1M1NTMwX0JBRF9QSU8oaW5sKGJhc2VyZWcgKyA4KSkpCiAJCW91dGwoY3M1NTMwX3Bpb190aW1pbmdzWyhkMF90aW1pbmdzID4+IDMxKSAmIDFdWzBdLCBiYXNlcmVnICsgOCk7CiAKLQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwotCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKIAkJcmV0dXJuOwogCi0JaHdpZi0+YXRhcGlfZG1hID0gMTsKLQlod2lmLT51bHRyYV9tYXNrID0gMHgwNzsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKLQogCWh3aWYtPnVkbWFfZmlsdGVyID0gY3M1NTMwX3VkbWFfZmlsdGVyOwogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBjczU1MzBfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGNzNTUzMF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gIkNTNTUzMCIsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9jczU1MzAsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9jczU1MzAsCi0JLmF1dG9kbWEJPSBBVVRPRE1BLAotCS5ib290YWJsZQk9IE9OX0JPQVJELAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NFUklBTElaRSB8CisJCQkgIElERV9IRkxBR19QT1NUX1NFVF9NT0RFIHwKKwkJCSAgSURFX0hGTEFHX0JPT1RBQkxFLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1BPU1RfU0VUX01PREUsCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBjczU1MzBfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jIGIvZHJpdmVycy9pZGUvcGNpL2NzNTUzNS5jCmluZGV4IGU0ODkxYTEuLjkwOTQ5MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9jczU1MzUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3M1NTM1LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAogCS8qIFNldCB0aGUgUElPIHRpbWluZ3MgKi8KIAlpZiAoKHNwZWVkICYgWEZFUl9NT0RFKSA9PSBYRkVSX1BJTykgewotCQlpZGVfZHJpdmVfdCAqcGFpciA9ICZkcml2ZS0+aHdpZi0+ZHJpdmVzW2RyaXZlLT5kbiBeIDFdOworCQlpZGVfZHJpdmVfdCAqcGFpciA9IGlkZV9nZXRfcGFpcmVkX2RyaXZlKGRyaXZlKTsKIAkJdTggY21kLCBwaW9hOwogCiAJCWNtZCA9IHBpb2EgPSBzcGVlZCAtIFhGRVJfUElPXzA7CkBAIC0xODAsMjUgKzE4MCwyMCBAQAogCWh3aWYtPnNldF9waW9fbW9kZSA9ICZjczU1MzVfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZjczU1MzVfc2V0X2RtYV9tb2RlOwogCi0JaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQogCWlmIChod2lmLT5kbWFfYmFzZSA9PSAwKQogCQlyZXR1cm47CiAKLQlod2lmLT5hdGFwaV9kbWEgPSAxOwotCWh3aWYtPnVsdHJhX21hc2sgPSAweDFGOwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwotCiAJaHdpZi0+Y2JsID0gY3M1NTM1X2NhYmxlX2RldGVjdChod2lmLT5wY2lfZGV2KTsKIH0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgY3M1NTM1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBjczU1MzVfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9ICJDUzU1MzUiLAogCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfY3M1NTM1LAotCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSB8CisJCQkgIElERV9IRkxBR19CT09UQUJMRSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNzNTUzNV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwppbmRleCBjNDk4ZWNmLi4zZWY0ZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvY3k4MmM2OTMuYwkJVmVyc2lvbiAwLjQwCVNlcC4gMTAsIDIwMDIKKyAqIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9jeTgyYzY5My5jCQlWZXJzaW9uIDAuNDEJQXVnIDI3LCAyMDA3CiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEFuZHJlYXMgUy4gS3JlYnMgKGFrcmVic0BhbHRhdmlzdGEubmV0KSwgTWFpbnRhaW5lcgogICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAyIEFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+LCBJbnRlZ3JhdG9yCkBAIC00MjgsMTggKzQyOCwxMCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX2N5ODJjNjkzKGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaHdpZi0+Y2hpcHNldCA9IGlkZV9jeTgyYzY5MzsKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmY3k4MmM2OTNfc2V0X3Bpb19tb2RlOwogCi0JaWYgKCFod2lmLT5kbWFfYmFzZSkgewotCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwotCQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOworCWlmIChod2lmLT5kbWFfYmFzZSA9PSAwKQogCQlyZXR1cm47Ci0JfQotCi0JaHdpZi0+YXRhcGlfZG1hID0gMTsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNDsKLQlod2lmLT5zd2RtYV9tYXNrID0gMHgwNDsKIAogCWh3aWYtPmlkZV9kbWFfb24gPSAmY3k4MmM2OTNfaWRlX2RtYV9vbjsKIH0KQEAgLTQ1NiwxNSArNDQ4LDE3IEBACiAJfQogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBjeTgyYzY5M19jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gY3k4MmM2OTNfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9ICJDWTgyQzY5MyIsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9jeTgyYzY5MywKIAkuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX2N5ODJjNjkzLAogCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfY3k4MmM2OTMsCi0JLmF1dG9kbWEJPSBBVVRPRE1BLAotCS5ib290YWJsZQk9IE9OX0JPQVJELAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSB8IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCisJLmNoaXBzZXQJPSBpZGVfY3k4MmM2OTMsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFIHwgSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSB8CisJCQkgIElERV9IRkxBR19CT09UQUJMRSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTJfT05MWSwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTJfT05MWSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGN5ODJjNjkzX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL3BjaS9kZWxraW5fY2IuYwppbmRleCA0NmY0YTg4Li44MzgyOTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZGVsa2luX2NiLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2RlbGtpbl9jYi5jCkBAIC04MCw3ICs4MCw3IEBACiAJaHcuaXJxID0gZGV2LT5pcnE7CiAJaHcuY2hpcHNldCA9IGlkZV9wY2k7CQkvKiB0aGlzIGVuYWJsZXMgSVJRIHNoYXJpbmcgKi8KIAotCXJjID0gaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoJmh3LCAwLCAmaHdpZiwgaWRlX3VuZGVjb2RlZF9zbGF2ZSk7CisJcmMgPSBpZGVfcmVnaXN0ZXJfaHcoJmh3LCAmaWRlX3VuZGVjb2RlZF9zbGF2ZSwgMCwgJmh3aWYpOwogCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJkZWxraW5fY2I6IGlkZV9yZWdpc3Rlcl9odyBmYWlsZWQgKCVkKVxuIiwgcmMpOwogCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCmluZGV4IGNjZTYzMTEuLmY0NGQ3MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYwpAQCAtNTQsMTMwICs1NCw2MSBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGFsbF9nZW5lcmljX2lkZSwgaWRlX2dlbmVyaWNfYWxsLCBib29sLCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoYWxsX2dlbmVyaWNfaWRlLCAiSURFIGdlbmVyaWMgd2lsbCBjbGFpbSBhbGwgdW5rbm93biBQQ0kgSURFIHN0b3JhZ2UgY29udHJvbGxlcnMuIik7CiAKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfZ2VuZXJpYyAoaWRlX2h3aWZfdCAqaHdpZikKLXsKLQlzd2l0Y2goaHdpZi0+cGNpX2Rldi0+ZGV2aWNlKSB7Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9VTUNfVU04NjczRjoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZBOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg4NkJGOgotCQkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOworI2RlZmluZSBJREVfSEZMQUdTX1VNQyAoSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19GT1JDRV9MRUdBQ1lfSVJRUykKKworI2RlZmluZSBERUNMQVJFX0dFTkVSSUNfUENJX0RFVihuYW1lX3N0ciwgZXh0cmFfZmxhZ3MpIFwKKwl7IFwKKwkJLm5hbWUJCT0gbmFtZV9zdHIsIFwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BIHwgXAorCQkJCSAgZXh0cmFfZmxhZ3MgfCBcCisJCQkJICBJREVfSEZMQUdfQk9PVEFCTEUsIFwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLCBcCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwgXAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LCBcCiAJfQogCi0JaWYgKCEoaHdpZi0+ZG1hX2Jhc2UpKQotCQlyZXR1cm47CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gZ2VuZXJpY19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJLyogIDAgKi8gREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoIlVua25vd24iLAkwKSwKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7Ci19Ci0KLSNpZiAwCi0JLyogTG9naWMgdG8gYWRkIGJhY2sgbGF0ZXIgb24gKi8KLQotCWlmICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUpIHsKLQkJaWRlX3BjaV9kZXZpY2VfdCAqdW5rbm93biA9IHVua25vd25fY2hpcHNldDsKLQkJaW5pdF9zZXR1cF91bmtub3duKGRldiwgdW5rbm93bik7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLSNlbmRpZgkKLQotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgZ2VuZXJpY19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JewkvKiAwICovCi0JCS5uYW1lCQk9ICJVbmtub3duIiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCi0JfSx7CS8qIDEgKi8KKwl7CS8qIDEgKi8KIAkJLm5hbWUJCT0gIk5TODc0MTAiLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkJLmVuYWJsZWJpdHMJPSB7ezB4NDMsMHgwOCwweDA4fSwgezB4NDcsMHgwOCwweDA4fX0sCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCi0gICAgICAgIH0sewkvKiAyICovCi0JCS5uYW1lCQk9ICJTQU1VUkFJIiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCi0JfSx7CS8qIDMgKi8KLQkJLm5hbWUJCT0gIkhUNjU2NSIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BLAotCX0sewkvKiA0ICovCi0JCS5uYW1lCQk9ICJVTTg2NzNGIiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuYXV0b2RtYQk9IE5PRE1BLAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BLAotCX0sewkvKiA1ICovCi0JCS5uYW1lCQk9ICJVTTg4ODZBIiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuYXV0b2RtYQk9IE5PRE1BLAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BLAotCX0sewkvKiA2ICovCi0JCS5uYW1lCQk9ICJVTTg4ODZCRiIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKLQkJLmF1dG9kbWEJPSBOT0RNQSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKLQl9LHsJLyogNyAqLwotCQkubmFtZQkJPSAiSElOVF9JREUiLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKLQl9LHsJLyogOCAqLwotCQkubmFtZQkJPSAiVklBX0lERSIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKLQkJLmF1dG9kbWEJPSBOT0FVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCi0JfSx7CS8qIDkgKi8KLQkJLm5hbWUJCT0gIk9QVEk2MjFWIiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuYXV0b2RtYQk9IE5PQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKLQl9LHsJLyogMTAgKi8KKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BIHwKKwkJCQkgIElERV9IRkxBR19CT09UQUJMRSwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCisJfSwKKworCS8qICAyICovIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKCJTQU1VUkFJIiwJMCksCisJLyogIDMgKi8gREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoIkhUNjU2NSIsCTApLAorCS8qICA0ICovIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKCJVTTg2NzNGIiwJSURFX0hGTEFHU19VTUMpLAorCS8qICA1ICovIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKCJVTTg4ODZBIiwJSURFX0hGTEFHU19VTUMpLAorCS8qICA2ICovIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKCJVTTg4ODZCRiIsCUlERV9IRkxBR1NfVU1DKSwKKwkvKiAgNyAqLyBERUNMQVJFX0dFTkVSSUNfUENJX0RFVigiSElOVF9JREUiLAkwKSwKKwkvKiAgOCAqLyBERUNMQVJFX0dFTkVSSUNfUENJX0RFVigiVklBX0lERSIsCUlERV9IRkxBR19OT19BVVRPRE1BKSwKKwkvKiAgOSAqLyBERUNMQVJFX0dFTkVSSUNfUENJX0RFVigiT1BUSTYyMVYiLAlJREVfSEZMQUdfTk9fQVVUT0RNQSksCisKKwl7CS8qIDEwICovCiAJCS5uYW1lCQk9ICJWSUE4MjM3U0FUQSIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKLQl9LHsJLyogMTEgKi8KLQkJLm5hbWUgCQk9ICJQaWNjb2xvMDEwMiIsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKLQkJLmF1dG9kbWEJPSBOT0FVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCi0JfSx7CS8qIDEyICovCi0JCS5uYW1lIAkJPSAiUGljY29sbzAxMDMiLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCi0JCS5hdXRvZG1hCT0gTk9BVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BLAotCX0sewkvKiAxMyAqLwotCQkubmFtZSAJCT0gIlBpY2NvbG8wMTA1IiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAotCQkuYXV0b2RtYQk9IE5PQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKLQl9LHsJLyogMTQgKi8KKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BIHwKKwkJCQkgIElERV9IRkxBR19PRkZfQk9BUkQsCisJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMiwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAorCX0sCisKKwkvKiAxMSAqLyBERUNMQVJFX0dFTkVSSUNfUENJX0RFVigiUGljY29sbzAxMDIiLAlJREVfSEZMQUdfTk9fQVVUT0RNQSksCisJLyogMTIgKi8gREVDTEFSRV9HRU5FUklDX1BDSV9ERVYoIlBpY2NvbG8wMTAzIiwJSURFX0hGTEFHX05PX0FVVE9ETUEpLAorCS8qIDEzICovIERFQ0xBUkVfR0VORVJJQ19QQ0lfREVWKCJQaWNjb2xvMDEwNSIsCUlERV9IRkxBR19OT19BVVRPRE1BKSwKKworCXsJLyogMTQgKi8KIAkJLm5hbWUJCT0gIlJldm9sdXRpb24iLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSB8CisJCQkJICBJREVfSEZMQUdfT0ZGX0JPQVJELAorCQkuc3dkbWFfbWFzawk9IEFUQV9TV0RNQTIsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIAl9CiB9OwogCkBAIC0xOTIsNyArMTIzLDcgQEAKICAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGdlbmVyaWNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWlkZV9wY2lfZGV2aWNlX3QgKmQgPSAmZ2VuZXJpY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdOworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkID0gJmdlbmVyaWNfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAogCS8qIERvbid0IHVzZSB0aGUgZ2VuZXJpYyBlbnRyeSB1bmxlc3MgaW5zdHJ1Y3RlZCB0byBkbyBzbyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM0eC5jCmluZGV4IDQ0YWMwZTIuLmFlNjMwN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNHguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaHB0MzR4LmMKQEAgLTEyNSw0OSArMTI1LDQ1IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfaHB0MzR4KGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JdTE2IHBjaWNtZCA9IDA7Ci0KIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmaHB0MzR4X3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmaHB0MzR4X3NldF9tb2RlOwotCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoaHdpZi0+cGNpX2RldiwgUENJX0NPTU1BTkQsICZwY2ljbWQpOwotCi0JaWYgKCFod2lmLT5kbWFfYmFzZSkKLQkJcmV0dXJuOwotCi0jaWZkZWYgQ09ORklHX0hQVDM0WF9BVVRPRE1BCi0JaWYgKChwY2ljbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpID09IDApCi0JCXJldHVybjsKLQotCWh3aWYtPnVsdHJhX21hc2sgPSAweDA3OwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwotCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA3OwotI2VuZGlmCiB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IGhwdDM0eF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7Ci0JLm5hbWUJCT0gIkhQVDM0WCIsCi0JLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNHgsCi0JLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNHgsCi0JLmF1dG9kbWEJPSBOT0FVVE9ETUEsCi0JLmJvb3RhYmxlCT0gTkVWRVJfQk9BUkQsCi0JLmV4dHJhCQk9IDE2LAotCS5waW9fbWFzawk9IEFUQV9QSU81LAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGhwdDM0eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJeyAvKiAwICovCisJCS5uYW1lCQk9ICJIUFQzNDMiLAorCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM0eCwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNHgsCisJCS5leHRyYQkJPSAxNiwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwKKwkJCQkgIElERV9IRkxBR19OT19BVVRPRE1BLAorCQkucGlvX21hc2sJPSBBVEFfUElPNSwKKwl9LAorCXsgLyogMSAqLworCQkubmFtZQkJPSAiSFBUMzQ1IiwKKwkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNHgsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfaHB0MzR4LAorCQkuZXh0cmEJCT0gMTYsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8CisJCQkJICBJREVfSEZMQUdfTk9fQVVUT0RNQSB8CisJCQkJICBJREVfSEZMQUdfT0ZGX0JPQVJELAorCQkucGlvX21hc2sJPSBBVEFfUElPNSwKKyNpZmRlZiBDT05GSUdfSFBUMzRYX0FVVE9ETUEKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTIsCisjZW5kaWYKKwl9CiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBocHQzNHhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWlkZV9wY2lfZGV2aWNlX3QgKmQgPSAmaHB0MzR4X2NoaXBzZXQ7Ci0Jc3RhdGljIGNoYXIgKmNoaXBzZXRfbmFtZXNbXSA9IHsiSFBUMzQzIiwgIkhQVDM0NSJ9OworCWNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkOwogCXUxNiBwY2ljbWQgPSAwOwogCiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJnBjaWNtZCk7CiAKLQlkLT5uYW1lID0gY2hpcHNldF9uYW1lc1socGNpY21kICYgUENJX0NPTU1BTkRfTUVNT1JZKSA/IDEgOiAwXTsKLQlkLT5ib290YWJsZSA9IChwY2ljbWQgJiBQQ0lfQ09NTUFORF9NRU1PUlkpID8gT0ZGX0JPQVJEIDogTkVWRVJfQk9BUkQ7CisJZCA9ICZocHQzNHhfY2hpcHNldHNbKHBjaWNtZCAmIFBDSV9DT01NQU5EX01FTU9SWSkgPyAxIDogMF07CiAKIAlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL3BjaS9ocHQzNjYuYwppbmRleCBmY2IyMWRkLi42MTJiNzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCkBAIC0xLDkgKzEsMTAgQEAKIC8qCi0gKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvaHB0MzY2LmMJCVZlcnNpb24gMS4xNAlPY3QgMSwgMjAwNworICogbGludXgvZHJpdmVycy9pZGUvcGNpL2hwdDM2Ni5jCQlWZXJzaW9uIDEuMjAJT2N0IDEsIDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMwkJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMQkgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KICAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwMwkJUmVkIEhhdCBJbmMKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoQykgMjAwNwkJQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICogUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDcJTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoYW5rcyB0byBIaWdoUG9pbnQgVGVjaG5vbG9naWVzIGZvciB0aGVpciBhc3Npc3RhbmNlLCBhbmQgaGFyZHdhcmUuCkBAIC0zOTMsOCArMzk0LDkgQEAKICAqLwogCiBzdHJ1Y3QgaHB0X2luZm8geworCWNoYXIgKmNoaXBfbmFtZTsJLyogQ2hpcCBuYW1lICovCiAJdTggY2hpcF90eXBlOwkJLyogQ2hpcCB0eXBlICovCi0JdTggbWF4X3VsdHJhOwkJLyogTWF4LiBVbHRyYURNQSBtb2RlIGFsbG93ZWQgKi8KKwl1OCB1ZG1hX21hc2s7CQkvKiBBbGxvd2VkIFVsdHJhRE1BIG1vZGVzIG1hc2suICovCiAJdTggZHBsbF9jbGs7CQkvKiBEUExMIGNsb2NrIGluIE1IeiAqLwogCXU4IHBjaV9jbGs7CQkvKiBQQ0kgIGNsb2NrIGluIE1IeiAqLwogCXUzMiAqKnNldHRpbmdzOyAJLyogQ2hpcHNldCBzZXR0aW5ncyB0YWJsZSAqLwpAQCAtNDMyLDc4ICs0MzQsODkgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaHB0X2luZm8gaHB0MzZ4IF9fZGV2aW5pdGRhdGEgPSB7CisJLmNoaXBfbmFtZQk9ICJIUFQzNngiLAogCS5jaGlwX3R5cGUJPSBIUFQzNngsCi0JLm1heF91bHRyYQk9IEhQVDM2Nl9BTExPV19BVEE2Nl8zID8gKEhQVDM2Nl9BTExPV19BVEE2Nl80ID8gNCA6IDMpIDogMiwKKwkudWRtYV9tYXNrCT0gSFBUMzY2X0FMTE9XX0FUQTY2XzMgPyAoSFBUMzY2X0FMTE9XX0FUQTY2XzQgPyBBVEFfVURNQTQgOiBBVEFfVURNQTMpIDogQVRBX1VETUEyLAogCS5kcGxsX2Nsawk9IDAsCS8qIG5vIERQTEwgKi8KIAkuc2V0dGluZ3MJPSBocHQzNnhfc2V0dGluZ3MKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaHB0X2luZm8gaHB0MzcwIF9fZGV2aW5pdGRhdGEgPSB7CisJLmNoaXBfbmFtZQk9ICJIUFQzNzAiLAogCS5jaGlwX3R5cGUJPSBIUFQzNzAsCi0JLm1heF91bHRyYQk9IEhQVDM3MF9BTExPV19BVEExMDBfNSA/IDUgOiA0LAorCS51ZG1hX21hc2sJPSBIUFQzNzBfQUxMT1dfQVRBMTAwXzUgPyBBVEFfVURNQTUgOiBBVEFfVURNQTQsCiAJLmRwbGxfY2xrCT0gNDgsCiAJLnNldHRpbmdzCT0gaHB0Mzd4X3NldHRpbmdzCiB9OwogCiBzdGF0aWMgc3RydWN0IGhwdF9pbmZvIGhwdDM3MGEgX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDM3MEEiLAogCS5jaGlwX3R5cGUJPSBIUFQzNzBBLAotCS5tYXhfdWx0cmEJPSBIUFQzNzBfQUxMT1dfQVRBMTAwXzUgPyA1IDogNCwKKwkudWRtYV9tYXNrCT0gSFBUMzcwX0FMTE9XX0FUQTEwMF81ID8gQVRBX1VETUE1IDogQVRBX1VETUE0LAogCS5kcGxsX2Nsawk9IDQ4LAogCS5zZXR0aW5ncwk9IGhwdDM3eF9zZXR0aW5ncwogfTsKIAogc3RhdGljIHN0cnVjdCBocHRfaW5mbyBocHQzNzQgX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDM3NCIsCiAJLmNoaXBfdHlwZQk9IEhQVDM3NCwKLQkubWF4X3VsdHJhCT0gNSwKKwkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCS5kcGxsX2Nsawk9IDQ4LAogCS5zZXR0aW5ncwk9IGhwdDM3eF9zZXR0aW5ncwogfTsKIAogc3RhdGljIHN0cnVjdCBocHRfaW5mbyBocHQzNzIgX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDM3MiIsCiAJLmNoaXBfdHlwZQk9IEhQVDM3MiwKLQkubWF4X3VsdHJhCT0gSFBUMzcyX0FMTE9XX0FUQTEzM182ID8gNiA6IDUsCisJLnVkbWFfbWFzawk9IEhQVDM3Ml9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKIAkuZHBsbF9jbGsJPSA1NSwKIAkuc2V0dGluZ3MJPSBocHQzN3hfc2V0dGluZ3MKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaHB0X2luZm8gaHB0MzcyYSBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcyQSIsCiAJLmNoaXBfdHlwZQk9IEhQVDM3MkEsCi0JLm1heF91bHRyYQk9IEhQVDM3Ml9BTExPV19BVEExMzNfNiA/IDYgOiA1LAorCS51ZG1hX21hc2sJPSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCiAJLmRwbGxfY2xrCT0gNjYsCiAJLnNldHRpbmdzCT0gaHB0Mzd4X3NldHRpbmdzCiB9OwogCiBzdGF0aWMgc3RydWN0IGhwdF9pbmZvIGhwdDMwMiBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzAyIiwKIAkuY2hpcF90eXBlCT0gSFBUMzAyLAotCS5tYXhfdWx0cmEJPSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYgPyA2IDogNSwKKwkudWRtYV9tYXNrCT0gSFBUMzAyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAogCS5kcGxsX2Nsawk9IDY2LAogCS5zZXR0aW5ncwk9IGhwdDM3eF9zZXR0aW5ncwogfTsKIAogc3RhdGljIHN0cnVjdCBocHRfaW5mbyBocHQzNzEgX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDM3MSIsCiAJLmNoaXBfdHlwZQk9IEhQVDM3MSwKLQkubWF4X3VsdHJhCT0gSFBUMzcxX0FMTE9XX0FUQTEzM182ID8gNiA6IDUsCisJLnVkbWFfbWFzawk9IEhQVDM3MV9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKIAkuZHBsbF9jbGsJPSA2NiwKIAkuc2V0dGluZ3MJPSBocHQzN3hfc2V0dGluZ3MKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaHB0X2luZm8gaHB0MzcybiBfX2RldmluaXRkYXRhID0geworCS5jaGlwX25hbWUJPSAiSFBUMzcyTiIsCiAJLmNoaXBfdHlwZQk9IEhQVDM3Mk4sCi0JLm1heF91bHRyYQk9IEhQVDM3Ml9BTExPV19BVEExMzNfNiA/IDYgOiA1LAorCS51ZG1hX21hc2sJPSBIUFQzNzJfQUxMT1dfQVRBMTMzXzYgPyBBVEFfVURNQTYgOiBBVEFfVURNQTUsCiAJLmRwbGxfY2xrCT0gNzcsCiAJLnNldHRpbmdzCT0gaHB0Mzd4X3NldHRpbmdzCiB9OwogCiBzdGF0aWMgc3RydWN0IGhwdF9pbmZvIGhwdDMwMm4gX19kZXZpbml0ZGF0YSA9IHsKKwkuY2hpcF9uYW1lCT0gIkhQVDMwMk4iLAogCS5jaGlwX3R5cGUJPSBIUFQzMDJOLAotCS5tYXhfdWx0cmEJPSBIUFQzMDJfQUxMT1dfQVRBMTMzXzYgPyA2IDogNSwKKwkudWRtYV9tYXNrCT0gSFBUMzAyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAogCS5kcGxsX2Nsawk9IDc3LAogCS5zZXR0aW5ncwk9IGhwdDM3eF9zZXR0aW5ncwogfTsKIAogc3RhdGljIHN0cnVjdCBocHRfaW5mbyBocHQzNzFuIF9fZGV2aW5pdGRhdGEgPSB7CisJLmNoaXBfbmFtZQk9ICJIUFQzNzFOIiwKIAkuY2hpcF90eXBlCT0gSFBUMzcxTiwKLQkubWF4X3VsdHJhCT0gSFBUMzcxX0FMTE9XX0FUQTEzM182ID8gNiA6IDUsCisJLnVkbWFfbWFzawk9IEhQVDM3MV9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKIAkuZHBsbF9jbGsJPSA3NywKIAkuc2V0dGluZ3MJPSBocHQzN3hfc2V0dGluZ3MKIH07CkBAIC02NzYsMTIgKzY4OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBocHQzeHhfaW50cnByb2MoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKLQogCWlmIChkcml2ZS0+cXVpcmtfbGlzdCkKIAkJcmV0dXJuOworCiAJLyogZHJpdmVzIGluIHRoZSBxdWlya19saXN0IG1heSBub3QgbGlrZSBpbnRyIHNldHVwcy9jbGVhbnVwcyAqLwotCWh3aWYtPk9VVEIoZHJpdmUtPmN0bCB8IDIsIElERV9DT05UUk9MX1JFRyk7CisJb3V0Yihkcml2ZS0+Y3RsIHwgMiwgSURFX0NPTlRST0xfUkVHKTsKIH0KIAogc3RhdGljIHZvaWQgaHB0M3h4X21hc2twcm9jKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG1hc2spCkBAIC03MDksOCArNzIxLDggQEAKIAkJCQllbmFibGVfaXJxIChod2lmLT5pcnEpOwogCQl9CiAJfSBlbHNlCi0JCWh3aWYtPk9VVEIobWFzayA/IChkcml2ZS0+Y3RsIHwgMikgOiAoZHJpdmUtPmN0bCAmIH4yKSwKLQkJCSAgIElERV9DT05UUk9MX1JFRyk7CisJCW91dGIobWFzayA/IChkcml2ZS0+Y3RsIHwgMikgOiAoZHJpdmUtPmN0bCAmIH4yKSwKKwkJICAgICBJREVfQ09OVFJPTF9SRUcpOwogfQogCiAvKgpAQCAtNzUwLDkgKzc2Miw5IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlZCBieXRlcyBpbiBGSUZPXG4iLCBkcml2ZS0+bmFtZSwgYmZpZm8gJiAweDFmZik7CiAKIAkvKiBnZXQgRE1BIGNvbW1hbmQgbW9kZSAqLwotCWRtYV9jbWQgPSBod2lmLT5JTkIoaHdpZi0+ZG1hX2NvbW1hbmQpOworCWRtYV9jbWQgPSBpbmIoaHdpZi0+ZG1hX2NvbW1hbmQpOwogCS8qIHN0b3AgRE1BICovCi0JaHdpZi0+T1VUQihkbWFfY21kICYgfjB4MSwgaHdpZi0+ZG1hX2NvbW1hbmQpOworCW91dGIoZG1hX2NtZCAmIH4weDEsIGh3aWYtPmRtYV9jb21tYW5kKTsKIAlocHQzNzBfY2xlYXJfZW5naW5lKGRyaXZlKTsKIH0KIApAQCAtNzY3LDEyICs3NzksMTIgQEAKIHN0YXRpYyBpbnQgaHB0MzcwX2lkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdTggIGRtYV9zdGF0CQk9IGh3aWYtPklOQihod2lmLT5kbWFfc3RhdHVzKTsKKwl1OCAgZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOwogCiAJaWYgKGRtYV9zdGF0ICYgMHgwMSkgewogCQkvKiB3YWl0IGEgbGl0dGxlICovCiAJCXVkZWxheSgyMCk7Ci0JCWRtYV9zdGF0ID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpOworCQlkbWFfc3RhdCA9IGluYihod2lmLT5kbWFfc3RhdHVzKTsKIAkJaWYgKGRtYV9zdGF0ICYgMHgwMSkKIAkJCWhwdDM3MF9pcnFfdGltZW91dChkcml2ZSk7CiAJfQpAQCAtODMzLDM0ICs4NDUsMzIgQEAKIAogc3RhdGljIHZvaWQgaHB0M3h4bl9zZXRfY2xvY2soaWRlX2h3aWZfdCAqaHdpZiwgdTggbW9kZSkKIHsKLQl1OCBzY3IyID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9tYXN0ZXIgKyAweDdiKTsKKwl1OCBzY3IyID0gaW5iKGh3aWYtPmRtYV9tYXN0ZXIgKyAweDdiKTsKIAogCWlmICgoc2NyMiAmIDB4N2YpID09IG1vZGUpCiAJCXJldHVybjsKIAogCS8qIFRyaXN0YXRlIHRoZSBidXMgKi8KLQlod2lmLT5PVVRCKDB4ODAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDczKTsKLQlod2lmLT5PVVRCKDB4ODAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc3KTsKKwlvdXRiKDB4ODAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDczKTsKKwlvdXRiKDB4ODAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc3KTsKIAogCS8qIFN3aXRjaCBjbG9jayBhbmQgcmVzZXQgY2hhbm5lbHMgKi8KLQlod2lmLT5PVVRCKG1vZGUsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDdiKTsKLQlod2lmLT5PVVRCKDB4YzAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc5KTsKKwlvdXRiKG1vZGUsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDdiKTsKKwlvdXRiKDB4YzAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc5KTsKIAogCS8qCiAJICogUmVzZXQgdGhlIHN0YXRlIG1hY2hpbmVzLgogCSAqIE5PVEU6IGF2b2lkIGFjY2lkZW50YWxseSBlbmFibGluZyB0aGUgZGlzYWJsZWQgY2hhbm5lbHMuCiAJICovCi0JaHdpZi0+T1VUQihod2lmLT5JTkIoaHdpZi0+ZG1hX21hc3RlciArIDB4NzApIHwgMHgzMiwKLQkJICAgaHdpZi0+ZG1hX21hc3RlciArIDB4NzApOwotCWh3aWYtPk9VVEIoaHdpZi0+SU5CKGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc0KSB8IDB4MzIsCi0JCSAgIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc0KTsKKwlvdXRiKGluYihod2lmLT5kbWFfbWFzdGVyICsgMHg3MCkgfCAweDMyLCBod2lmLT5kbWFfbWFzdGVyICsgMHg3MCk7CisJb3V0YihpbmIoaHdpZi0+ZG1hX21hc3RlciArIDB4NzQpIHwgMHgzMiwgaHdpZi0+ZG1hX21hc3RlciArIDB4NzQpOwogCiAJLyogQ29tcGxldGUgcmVzZXQgKi8KLQlod2lmLT5PVVRCKDB4MDAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc5KTsKKwlvdXRiKDB4MDAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc5KTsKIAogCS8qIFJlY29ubmVjdCBjaGFubmVscyB0byBidXMgKi8KLQlod2lmLT5PVVRCKDB4MDAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDczKTsKLQlod2lmLT5PVVRCKDB4MDAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc3KTsKKwlvdXRiKDB4MDAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDczKTsKKwlvdXRiKDB4MDAsIGh3aWYtPmRtYV9tYXN0ZXIgKyAweDc3KTsKIH0KIAogLyoqCkBAIC0xMTM5LDcgKzExNDksNyBAQAogCQkgICogU2VsZWN0IDY2IE1IeiBEUExMIGNsb2NrIG9ubHkgaWYgVWx0cmFBVEEvMTMzIG1vZGUgaXMKIAkJICAqIHN1cHBvcnRlZC9lbmFibGVkLCB1c2UgNTAgTUh6IERQTEwgY2xvY2sgb3RoZXJ3aXNlLi4uCiAJCSAgKi8KLQkJaWYgKGluZm8tPm1heF91bHRyYSA9PSA2KSB7CisJCWlmIChpbmZvLT51ZG1hX21hc2sgPT0gQVRBX1VETUE2KSB7CiAJCQlkcGxsX2NsayA9IDY2OwogCQkJY2xvY2sgPSBBVEFfQ0xPQ0tfNjZNSFo7CiAJCX0gZWxzZSBpZiAoZHBsbF9jbGspIHsJLyogSFBUMzZ4IGNoaXBzIGRvbid0IGhhdmUgRFBMTCAqLwpAQCAtMTI5MSwxNCArMTMwMSw5IEBACiAJaWYgKG5ld19tY3IgIT0gb2xkX21jcikKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgaHdpZi0+c2VsZWN0X2RhdGEgKyAxLCBuZXdfbWNyKTsKIAotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKIAkJcmV0dXJuOwogCi0JaHdpZi0+dWx0cmFfbWFzayA9IGh3aWYtPmNkcy0+dWRtYV9tYXNrOwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwotCiAJLyoKIAkgKiBUaGUgSFBUMzd4IHVzZXMgdGhlIENCTElEIHBpbnMgYXMgb3V0cHV0cyBmb3IgTUExNS9NQTE2CiAJICogYWRkcmVzcyBsaW5lcyB0byBhY2Nlc3MgYW4gZXh0ZXJuYWwgRUVQUk9NLiAgVG8gcmVhZCB2YWxpZApAQCAtMTM1NCw3ICsxMzU5LDcgQEAKIAl1OCBkbWFfbmV3CT0gMCwgZG1hX29sZAk9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRtYV9vbGQgPSBod2lmLT5JTkIoZG1hYmFzZSArIDIpOworCWRtYV9vbGQgPSBpbmIoZG1hYmFzZSArIDIpOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCkBAIC0xMzY1LDYwICsxMzcwLDI2IEBACiAJaWYgKG1hc3RlcmRtYSAmIDB4MzApCWRtYV9uZXcgfD0gMHgyMDsKIAlpZiAoIHNsYXZlZG1hICYgMHgzMCkJZG1hX25ldyB8PSAweDQwOwogCWlmIChkbWFfbmV3ICE9IGRtYV9vbGQpCi0JCWh3aWYtPk9VVEIoZG1hX25ldywgZG1hYmFzZSArIDIpOworCQlvdXRiKGRtYV9uZXcsIGRtYWJhc2UgKyAyKTsKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCWlkZV9zZXR1cF9kbWEoaHdpZiwgZG1hYmFzZSwgOCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfaHB0Mzc0KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaHB0Mzc0X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKmRldjIpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldjI7Ci0KLQlpZiAoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsICZocHQzNzQpOwotCi0JaWYgKChkZXYyID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBkZXYtPmRldmZuICsgMSkpICE9IE5VTEwpIHsKLQkJaW50IHJldDsKLQotCQlwY2lfc2V0X2RydmRhdGEoZGV2MiwgJmhwdDM3NCk7Ci0KLQkJaWYgKGRldjItPmlycSAhPSBkZXYtPmlycSkgewotCQkJLyogRklYTUU6IHdlIG5lZWQgYSBjb3JlIHBjaV9zZXRfaW50ZXJydXB0KCkgKi8KLQkJCWRldjItPmlycSA9IGRldi0+aXJxOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFBDSSBjb25maWcgc3BhY2UgaW50ZXJydXB0ICIKLQkJCSAgICAgICAiZml4ZWQuXG4iLCBkLT5uYW1lKTsKLQkJfQotCQlyZXQgPSBpZGVfc2V0dXBfcGNpX2RldmljZXMoZGV2LCBkZXYyLCBkKTsKLQkJaWYgKHJldCA8IDApCi0JCQlwY2lfZGV2X3B1dChkZXYyKTsKLQkJcmV0dXJuIHJldDsKKwlpZiAoZGV2Mi0+aXJxICE9IGRldi0+aXJxKSB7CisJCS8qIEZJWE1FOiB3ZSBuZWVkIGEgY29yZSBwY2lfc2V0X2ludGVycnVwdCgpICovCisJCWRldjItPmlycSA9IGRldi0+aXJxOworCQlwcmludGsoS0VSTl9JTkZPICJIUFQzNzQ6IFBDSSBjb25maWcgc3BhY2UgaW50ZXJydXB0IGZpeGVkXG4iKTsKIAl9Ci0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfaHB0MzcybihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQorc3RhdGljIHZvaWQgX19kZXZpbml0IGhwdDM3MV9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgJmhwdDM3Mm4pOwotCi0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfaHB0MzcxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQpCi17Ci0Jc3RydWN0IGhwdF9pbmZvICppbmZvOwogCXU4IG1jcjEgPSAwOwogCi0JaWYgKGRldi0+cmV2aXNpb24gPiAxKSB7Ci0JCWQtPm5hbWUgPSAiSFBUMzcxTiI7Ci0KLQkJaW5mbyA9ICZocHQzNzFuOwotCX0gZWxzZQotCQlpbmZvID0gJmhwdDM3MTsKLQogCS8qCiAJICogSFBUMzcxIGNoaXBzIHBoeXNpY2FsbHkgaGF2ZSBvbmx5IG9uZSBjaGFubmVsLCB0aGUgc2Vjb25kYXJ5IG9uZSwKIAkgKiBidXQgdGhlIHByaW1hcnkgY2hhbm5lbCByZWdpc3RlcnMgZG8gZXhpc3QhICBHbyBmaWd1cmUuLi4KQEAgLTE0MjgsMTk0ICsxMzk5LDEwMiBAQAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOwogCWlmIChtY3IxICYgMHgwNCkKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSAmIH4weDA0KTsKLQotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwotCi0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfaHB0MzcyYShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQorc3RhdGljIGludCBfX2RldmluaXQgaHB0MzZ4X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKmRldjIpCiB7Ci0Jc3RydWN0IGhwdF9pbmZvICppbmZvOworCXU4IG1jcjEgPSAwLCBwaW4xID0gMCwgcGluMiA9IDA7CiAKLQlpZiAoZGV2LT5yZXZpc2lvbiA+IDEpIHsKLQkJZC0+bmFtZSA9ICJIUFQzNzJOIjsKKwkvKgorCSAqIE5vdyB3ZSdsbCBoYXZlIHRvIGZvcmNlIGJvdGggY2hhbm5lbHMgZW5hYmxlZCBpZgorCSAqIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGhhcyBiZWVuIGVuYWJsZWQgYnkgQklPUy4uLgorCSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgJm1jcjEpOworCWlmIChtY3IxICYgMHgzMCkKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1MCwgbWNyMSB8IDB4MzApOwogCi0JCWluZm8gPSAmaHB0MzcybjsKLQl9IGVsc2UKLQkJaW5mbyA9ICZocHQzNzJhOwotCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgIFBDSV9JTlRFUlJVUFRfUElOLCAmcGluMSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2MiwgUENJX0lOVEVSUlVQVF9QSU4sICZwaW4yKTsKIAotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOworCWlmIChwaW4xICE9IHBpbjIgJiYgZGV2LT5pcnEgPT0gZGV2Mi0+aXJxKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkhQVDM2eDogb25ib2FyZCB2ZXJzaW9uIG9mIGNoaXBzZXQsICIKKwkJCQkgInBpbjE9JWQgcGluMj0lZFxuIiwgcGluMSwgcGluMik7CisJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX2hwdDMwMihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQotewotCXN0cnVjdCBocHRfaW5mbyAqaW5mbzsKLQotCWlmIChkZXYtPnJldmlzaW9uID4gMSkgewotCQlkLT5uYW1lID0gIkhQVDMwMk4iOwotCi0JCWluZm8gPSAmaHB0MzAybjsKLQl9IGVsc2UKLQkJaW5mbyA9ICZocHQzMDI7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7Ci0KLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9ocHQzNjYoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2MjsKLQl1OCByZXYgPSBkZXYtPnJldmlzaW9uOwotCXN0YXRpYyBjaGFyICAgKmNoaXBzZXRfbmFtZXNbXSA9IHsgIkhQVDM2NiIsICJIUFQzNjYiLCAgIkhQVDM2OCIsCi0JCQkJCSAgICJIUFQzNzAiLCAiSFBUMzcwQSIsICJIUFQzNzIiLAotCQkJCQkgICAiSFBUMzcyTiIgfTsKLQlzdGF0aWMgc3RydWN0IGhwdF9pbmZvICppbmZvW10gPSB7ICZocHQzNngsICAmaHB0MzZ4LCAgJmhwdDM2eCwKLQkJCQkJICAgJmhwdDM3MCwgICZocHQzNzBhLCAmaHB0MzcyLAotCQkJCQkgICAmaHB0MzcybiAgfTsKLQotCWlmIChQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpCi0JCXJldHVybiAtRU5PREVWOwotCi0Jc3dpdGNoIChyZXYpIHsKLQljYXNlIDA6Ci0JY2FzZSAxOgotCWNhc2UgMjoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBocHQzNjZfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0geworCXsJLyogMCAqLworCQkubmFtZQkJPSAiSFBUMzZ4IiwKKwkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9ocHQzNjYsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfaHB0MzY2LAorCQkuaW5pdF9kbWEJPSBpbml0X2RtYV9ocHQzNjYsCiAJCS8qCiAJCSAqIEhQVDM2eCBjaGlwcyBoYXZlIG9uZSBjaGFubmVsIHBlciBmdW5jdGlvbiBhbmQgaGF2ZQogCQkgKiBib3RoIGNoYW5uZWwgZW5hYmxlIGJpdHMgbG9jYXRlZCBkaWZmZXJlbnRseSBhbmQgdmlzaWJsZQogCQkgKiB0byBib3RoIGZ1bmN0aW9ucyAtLSByZWFsbHkgc3R1cGlkIGRlc2lnbiBkZWNpc2lvbi4uLiA6LSgKIAkJICogQml0IDQgaXMgZm9yIHRoZSBwcmltYXJ5IGNoYW5uZWwsIGJpdCA1IGZvciB0aGUgc2Vjb25kYXJ5LgogCQkgKi8KLQkJZC0+aG9zdF9mbGFncyB8PSBJREVfSEZMQUdfU0lOR0xFOwotCQlkLT5lbmFibGViaXRzWzBdLm1hc2sgPSBkLT5lbmFibGViaXRzWzBdLnZhbCA9IDB4MTA7Ci0KLQkJZC0+dWRtYV9tYXNrID0gSFBUMzY2X0FMTE9XX0FUQTY2XzMgPyAoSFBUMzY2X0FMTE9XX0FUQTY2XzQgPwotCQkJICAgICAgIEFUQV9VRE1BNCA6IEFUQV9VRE1BMykgOiBBVEFfVURNQTI7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQljYXNlIDQ6Ci0JCWQtPnVkbWFfbWFzayA9IEhQVDM3MF9BTExPV19BVEExMDBfNSA/IEFUQV9VRE1BNSA6IEFUQV9VRE1BNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV2ID0gNjsKLQkJLyogZmFsbCB0aHJ1ICovCi0JY2FzZSA1OgotCWNhc2UgNjoKLQkJZC0+dWRtYV9tYXNrID0gSFBUMzcyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1OwotCQlicmVhazsKLQl9Ci0KLQlkLT5uYW1lID0gY2hpcHNldF9uYW1lc1tyZXZdOwotCi0JcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mb1tyZXZdKTsKLQotCWlmIChyZXYgPiAyKQotCQlnb3RvIGluaXRfc2luZ2xlOwotCi0JaWYgKChkZXYyID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBkZXYtPmRldmZuICsgMSkpICE9IE5VTEwpIHsKLQkJdTggIG1jcjEgPSAwLCBwaW4xID0gMCwgcGluMiA9IDA7Ci0JCWludCByZXQ7Ci0KLQkJcGNpX3NldF9kcnZkYXRhKGRldjIsIGluZm9bcmV2XSk7Ci0KLQkJLyoKLQkJICogTm93IHdlJ2xsIGhhdmUgdG8gZm9yY2UgYm90aCBjaGFubmVscyBlbmFibGVkIGlmCi0JCSAqIGF0IGxlYXN0IG9uZSBvZiB0aGVtIGhhcyBiZWVuIGVuYWJsZWQgYnkgQklPUy4uLgotCQkgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDUwLCAmbWNyMSk7Ci0JCWlmIChtY3IxICYgMHgzMCkKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTAsIG1jcjEgfCAweDMwKTsKLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsICBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbjEpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYyLCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbjIpOwotCQlpZiAocGluMSAhPSBwaW4yICYmIGRldi0+aXJxID09IGRldjItPmlycSkgewotCQkJZC0+Ym9vdGFibGUgPSBPTl9CT0FSRDsKLQkJCXByaW50aygiJXM6IG9uYm9hcmQgdmVyc2lvbiBvZiBjaGlwc2V0LCBwaW4xPSVkIHBpbjI9JWRcbiIsCi0JCQkgICAgICAgZC0+bmFtZSwgcGluMSwgcGluMik7Ci0JCX0KLQkJcmV0ID0gaWRlX3NldHVwX3BjaV9kZXZpY2VzKGRldiwgZGV2MiwgZCk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcGNpX2Rldl9wdXQoZGV2Mik7Ci0JCXJldHVybiByZXQ7Ci0JfQotaW5pdF9zaW5nbGU6Ci0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7Ci19Ci0KLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IGhwdDM2Nl9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JewkvKiAwICovCi0JCS5uYW1lCQk9ICJIUFQzNjYiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfaHB0MzY2LAotCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM2NiwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCi0JCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDA0LDB4MDR9LCB7MHg1NCwweDA0LDB4MDR9fSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAorCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDEwLDB4MTB9LCB7MHg1NCwweDA0LDB4MDR9fSwKIAkJLmV4dHJhCQk9IDI0MCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFIHwKKwkJCQkgIElERV9IRkxBR19OT19BVEFQSV9ETUEgfAorCQkJCSAgSURFX0hGTEFHX09GRl9CT0FSRCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIAl9LHsJLyogMSAqLwogCQkubmFtZQkJPSAiSFBUMzcyQSIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9ocHQzNzJhLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM2NiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCiAJCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDA0LDB4MDR9LCB7MHg1NCwweDA0LDB4MDR9fSwKLQkJLnVkbWFfbWFzawk9IEhQVDM3Ml9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gMjQwLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVEFQSV9ETUEgfCBJREVfSEZMQUdfT0ZGX0JPQVJELAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCX0sewkvKiAyICovCiAJCS5uYW1lCQk9ICJIUFQzMDIiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfaHB0MzAyLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM2NiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCiAJCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDA0LDB4MDR9LCB7MHg1NCwweDA0LDB4MDR9fSwKLQkJLnVkbWFfbWFzawk9IEhQVDMwMl9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gMjQwLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVEFQSV9ETUEgfCBJREVfSEZMQUdfT0ZGX0JPQVJELAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCX0sewkvKiAzICovCiAJCS5uYW1lCQk9ICJIUFQzNzEiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfaHB0MzcxLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM2NiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCiAJCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDA0LDB4MDR9LCB7MHg1NCwweDA0LDB4MDR9fSwKLQkJLnVkbWFfbWFzawk9IEhQVDM3MV9BTExPV19BVEExMzNfNiA/IEFUQV9VRE1BNiA6IEFUQV9VRE1BNSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gMjQwLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVEFQSV9ETUEgfCBJREVfSEZMQUdfT0ZGX0JPQVJELAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCX0sewkvKiA0ICovCiAJCS5uYW1lCQk9ICJIUFQzNzQiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfaHB0Mzc0LAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X2hwdDM2NiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9ocHQzNjYsCiAJCS5pbml0X2RtYQk9IGluaXRfZG1hX2hwdDM2NiwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuZW5hYmxlYml0cwk9IHt7MHg1MCwweDA0LDB4MDR9LCB7MHg1NCwweDA0LDB4MDR9fSwKIAkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gMjQwLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19OT19BVEFQSV9ETUEgfCBJREVfSEZMQUdfT0ZGX0JPQVJELAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAogCX0sewkvKiA1ICovCiAJCS5uYW1lCQk9ICJIUFQzNzJOIiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2hwdDM3Mm4sCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfaHB0MzY2LAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2hwdDM2NiwKIAkJLmluaXRfZG1hCT0gaW5pdF9kbWFfaHB0MzY2LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDUwLDB4MDQsMHgwNH0sIHsweDU0LDB4MDQsMHgwNH19LAotCQkudWRtYV9tYXNrCT0gSFBUMzcyX0FMTE9XX0FUQTEzM182ID8gQVRBX1VETUE2IDogQVRBX1VETUE1LAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCiAJCS5leHRyYQkJPSAyNDAsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX05PX0FUQVBJX0RNQSB8IElERV9IRkxBR19PRkZfQk9BUkQsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJfQogfTsKIApAQCAtMTYyNiwxNiArMTUwNSw3NyBAQAogICoKICAqCUNhbGxlZCB3aGVuIHRoZSBQQ0kgcmVnaXN0cmF0aW9uIGxheWVyIChvciB0aGUgSURFIGluaXRpYWxpemF0aW9uKQogICoJZmluZHMgYSBkZXZpY2UgbWF0Y2hpbmcgb3VyIElERSBkZXZpY2UgdGFibGVzLgotICoKLSAqCU5PVEU6IHNpbmNlIHdlJ2xsIGhhdmUgdG8gbW9kaWZ5IHNvbWUgZmllbGRzIG9mIHRoZSBpZGVfcGNpX2RldmljZV90Ci0gKglzdHJ1Y3R1cmUgZGVwZW5kaW5nIG9uIHRoZSBjaGlwJ3MgcmV2aXNpb24sIHdlJ2QgYmV0dGVyIHBhc3MgYSBsb2NhbAotICoJY29weSBkb3duIHRoZSBjYWxsIGNoYWluLi4uCiAgKi8KIHN0YXRpYyBpbnQgX19kZXZpbml0IGhwdDM2Nl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JaWRlX3BjaV9kZXZpY2VfdCBkID0gaHB0MzY2X2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV07CisJc3RydWN0IGhwdF9pbmZvICppbmZvID0gTlVMTDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2MiA9IE5VTEw7CisJc3RydWN0IGlkZV9wb3J0X2luZm8gZDsKKwl1OCBpZHggPSBpZC0+ZHJpdmVyX2RhdGE7CisJdTggcmV2ID0gZGV2LT5yZXZpc2lvbjsKIAotCXJldHVybiBkLmluaXRfc2V0dXAoZGV2LCAmZCk7CisJaWYgKChpZHggPT0gMCB8fCBpZHggPT0gNCkgJiYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIDA6CisJCWlmIChyZXYgPCAzKQorCQkJaW5mbyA9ICZocHQzNng7CisJCWVsc2UgeworCQkJc3RhdGljIHN0cnVjdCBocHRfaW5mbyAqaHB0Mzd4X2luZm9bXSA9CisJCQkJeyAmaHB0MzcwLCAmaHB0MzcwYSwgJmhwdDM3MiwgJmhwdDM3Mm4gfTsKKworCQkJaW5mbyA9IGhwdDM3eF9pbmZvW21pbl90KHU4LCByZXYsIDYpIC0gM107CisJCQlpZHgrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIDE6CisJCWluZm8gPSAocmV2ID4gMSkgPyAmaHB0MzcybiA6ICZocHQzNzJhOworCQlicmVhazsKKwljYXNlIDI6CisJCWluZm8gPSAocmV2ID4gMSkgPyAmaHB0MzAybiA6ICZocHQzMDI7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJaHB0MzcxX2luaXQoZGV2KTsKKwkJaW5mbyA9IChyZXYgPiAxKSA/ICZocHQzNzFuIDogJmhwdDM3MTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpbmZvID0gJmhwdDM3NDsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlpbmZvID0gJmhwdDM3Mm47CisJCWJyZWFrOworCX0KKworCWQgPSBocHQzNjZfY2hpcHNldHNbaWR4XTsKKworCWQubmFtZSA9IGluZm8tPmNoaXBfbmFtZTsKKwlkLnVkbWFfbWFzayA9IGluZm8tPnVkbWFfbWFzazsKKworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOworCisJaWYgKGluZm8gPT0gJmhwdDM2eCB8fCBpbmZvID09ICZocHQzNzQpCisJCWRldjIgPSBwY2lfZ2V0X3Nsb3QoZGV2LT5idXMsIGRldi0+ZGV2Zm4gKyAxKTsKKworCWlmIChkZXYyKSB7CisJCWludCByZXQ7CisKKwkJcGNpX3NldF9kcnZkYXRhKGRldjIsIGluZm8pOworCisJCWlmIChpbmZvID09ICZocHQzNzQpCisJCQlocHQzNzRfaW5pdChkZXYsIGRldjIpOworCQllbHNlIHsKKwkJCWlmIChocHQzNnhfaW5pdChkZXYsIGRldjIpKQorCQkJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfQk9PVEFCTEU7CisJCX0KKworCQlyZXQgPSBpZGVfc2V0dXBfcGNpX2RldmljZXMoZGV2LCBkZXYyLCAmZCk7CisJCWlmIChyZXQgPCAwKQorCQkJcGNpX2Rldl9wdXQoZGV2Mik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJmQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHB0MzY2X3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMTMuYwppbmRleCAyNGE3MWQwLi45MGI1MmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjEzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxMy5jCkBAIC0xNzAsMTcgKzE3MCw5IEBACiAJaHdpZi0+c2V0X2RtYV9tb2RlID0gJml0ODIxM19zZXRfZG1hX21vZGU7CiAJaHdpZi0+c2V0X3Bpb19tb2RlID0gJml0ODIxM19zZXRfcGlvX21vZGU7CiAKLQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwotCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CiAKLQlod2lmLT5hdGFwaV9kbWEgPSAxOwotCWh3aWYtPnVsdHJhX21hc2sgPSAweDdmOwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA2OwotCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA0OwotCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoaHdpZi0+cGNpX2RldiwgMHg0MiwgJnJlZzQyaCk7CiAKIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQpAQCAtMTkyLDE0ICsxODQsMTYgQEAKIAl7CQkJCQkJXAogCQkubmFtZQkJPSBuYW1lX3N0ciwJCVwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9pdDgyMTMsCVwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9fSwgXAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwJCVwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAlcCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSB8CVwKKwkJCQkgIElERV9IRkxBR19CT09UQUJMRSwJXAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwJCVwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCVwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAlcCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCQlcCiAJfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBpdDgyMTNfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGl0ODIxM19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJLyogMCAqLyBERUNMQVJFX0lURV9ERVYoIklUODIxMyIpLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCmluZGV4IGYzMzkxYTguLjVjOTk3NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKQEAgLTk1LDcgKzk1LDcgQEAKIAogLyoKICAqCVdlIGFsbG93IHVzZXJzIHRvIGZvcmNlIHRoZSBjYXJkIGludG8gbm9uIHJhaWQgbW9kZSB3aXRob3V0Ci0gKglmbGFzaGluZyB0aGUgYWx0ZXJuYXRpdmUgQklPUy4gVGhpcyBpcyBhbHNvIG5lY2Nlc3NhcnkgcmlnaHQgbm93CisgKglmbGFzaGluZyB0aGUgYWx0ZXJuYXRpdmUgQklPUy4gVGhpcyBpcyBhbHNvIG5lY2Vzc2FyeSByaWdodCBub3cKICAqCWZvciBlbWJlZGRlZCBwbGF0Zm9ybXMgdGhhdCBjYW5ub3QgcnVuIGEgUEMgQklPUyBidXQgYXJlIHVzaW5nIHRoaXMKICAqCWRldmljZS4KICAqLwpAQCAtNTQ0LDEyICs1NDQsMTAgQEAKIAogCWlkZV9zZXRfaHdpZmRhdGEoaHdpZiwgaWRldik7CiAKLQlod2lmLT5hdGFwaV9kbWEgPSAxOwotCiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoaHdpZi0+cGNpX2RldiwgMHg1MCwgJmNvbmYpOwotCWlmKGNvbmYgJiAxKSB7CisJaWYgKGNvbmYgJiAxKSB7CiAJCWlkZXYtPnNtYXJ0ID0gMTsKLQkJaHdpZi0+YXRhcGlfZG1hID0gMDsKKwkJaHdpZi0+aG9zdF9mbGFncyB8PSBJREVfSEZMQUdfTk9fQVRBUElfRE1BOwogCQkvKiBMb25nIEkvTydzIGFsdGhvdWdoIGFsbG93ZWQgaW4gTEJBNDggc3BhY2UgY2F1c2UgdGhlCiAJCSAgIG9uYm9hcmQgZmlybXdhcmUgdG8gZW50ZXIgdGhlIHR3aWdobGlnaHQgem9uZSAqLwogCQlod2lmLT5ycXNpemUgPSAyNTY7CkBAIC01NjYsMTQgKzU2NCwxNCBAQAogCiAJLyoKIAkgKglOb3QgaW4gdGhlIGRvY3MgYnV0IGFjY29yZGluZyB0byB0aGUgcmVmZXJlbmNlIGRyaXZlcgotCSAqCXRoaXMgaXMgbmVjY2Vzc2FyeS4KKwkgKgl0aGlzIGlzIG5lY2Vzc2FyeS4KIAkgKi8KIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGh3aWYtPnBjaV9kZXYsIDB4MDgsICZjb25mKTsKLQlpZihjb25mID09IDB4MTApIHsKKwlpZiAoY29uZiA9PSAweDEwKSB7CiAJCWlkZXYtPnRpbWluZzEwID0gMTsKLQkJaHdpZi0+YXRhcGlfZG1hID0gMDsKLQkJaWYoIWlkZXYtPnNtYXJ0KQorCQlod2lmLT5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19OT19BVEFQSV9ETUE7CisJCWlmIChpZGV2LT5zbWFydCA9PSAwKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaXQ4MjF4OiBSZXZpc2lvbiAweDEwLCB3b3JrYXJvdW5kcyBhY3RpdmF0ZWQuXG4iKTsKIAl9CiAKQEAgLTU4NywxNCArNTg1LDExIEBACiAJfSBlbHNlCiAJCWh3aWYtPmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX05PX1NFVF9NT0RFOwogCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPnVsdHJhX21hc2sgPSAweDdmOwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OworCWh3aWYtPnVsdHJhX21hc2sgPSBBVEFfVURNQTY7CisJaHdpZi0+bXdkbWFfbWFzayA9IEFUQV9NV0RNQTI7CiAKIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQlod2lmLT5jYmwgPSBhdGE2Nl9pdDgyMXgoaHdpZik7CkBAIC02MzgsMTMgKzYzMywxMiBAQAogCQkubmFtZQkJPSBuYW1lX3N0ciwJCVwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9pdDgyMXgsCVwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9pdDgyMXgsCVwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAkJXAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwJCVwKIAkJLmZpeHVwCSAJPSBpdDgyMXhfZml4dXBzLAlcCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0JPT1RBQkxFLAlcCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAkJXAogCX0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgaXQ4MjF4X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpdDgyMXhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCS8qIDAgKi8gREVDTEFSRV9JVEVfREVWKCJJVDgyMTIiKSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMgYi9kcml2ZXJzL2lkZS9wY2kvam1pY3Jvbi5jCmluZGV4IGJiODkzZmYuLmJkZjY0ZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2ptaWNyb24uYwpAQCAtMTExLDI3ICsxMTEsMjEgQEAKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmam1pY3Jvbl9zZXRfcGlvX21vZGU7CiAJaHdpZi0+c2V0X2RtYV9tb2RlID0gJmptaWNyb25fc2V0X2RtYV9tb2RlOwogCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0KIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQlod2lmLT5jYmwgPSBhdGE2Nl9qbWljcm9uKGh3aWYpOwogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBqbWljcm9uX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBqbWljcm9uX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiSk1CIiwKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2ptaWNyb24sCi0JLmF1dG9kbWEJPSBBVVRPRE1BLAotCS5ib290YWJsZQk9IE9OX0JPQVJELAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0JPT1RBQkxFLAogCS5lbmFibGViaXRzCT0geyB7IDB4NDAsIDB4MDEsIDB4MDEgfSwgeyAweDQwLCAweDEwLCAweDEwIH0gfSwKIAkucGlvX21hc2sJPSBBVEFfUElPNSwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BNiwKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYyBiL2RyaXZlcnMvaWRlL3BjaS9uczg3NDE1LmMKaW5kZXggYThjZDUwYS4uZDRkZjQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvbnM4NzQxNS5jCkBAIC0yNjAsMTUgKzI2MCwxNSBAQAogCWh3aWYtPmlkZV9kbWFfZW5kID0gJm5zODc0MTVfaWRlX2RtYV9lbmQ7CiB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IG5zODc0MTVfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIG5zODc0MTVfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9ICJOUzg3NDE1IiwKICNpZmRlZiBDT05GSUdfU1VQRVJJTwogCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfbnM4NzQxNSwKICNlbmRpZgogCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfbnM4NzQxNSwKLQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BLAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSB8CisJCQkgIElERV9IRkxBR19OT19BVEFQSV9ETUEgfAorCQkJICBJREVfSEZMQUdfQk9PVEFCTEUsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuczg3NDE1X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMgYi9kcml2ZXJzL2lkZS9wY2kvb3B0aTYyMS5jCmluZGV4IDI1MDY2MmUuLjg5NTNkOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL29wdGk2MjEuYwkJVmVyc2lvbiAwLjcJU2VwdCAxMCwgMjAwMgorICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9vcHRpNjIxLmMJCVZlcnNpb24gMC45CVNlcCAyNCwgMjAwNwogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTYtMTk5OCAgTGludXMgVG9ydmFsZHMgJiBhdXRob3JzIChzZWUgYmVsb3cpCiAgKi8KQEAgLTU3LDkgKzU3LDYgQEAKICAqIFRoZXJlIGlzIGEgMjUvMzNNSHogc3dpdGNoIGluIGNvbmZpZ3VyYXRpb24KICAqIHJlZ2lzdGVyLCBidXQgZHJpdmVyIGlzIHdyaXR0ZW4gZm9yIHVzZSBhdCBhbnkgZnJlcXVlbmN5IHdoaWNoIGdldAogICogKHVzZSBpZGVidXM9eHggdG8gc2VsZWN0IFBDSSBidXMgc3BlZWQpLgotICogVXNlIGhkYT1hdXRvdHVuZSBhbmQgaGRiPWF1dG90dW5lIGZvciBhdXRvbWF0aWNhbCB0dW5lIG9mIHRoZSBQSU8gbW9kZXMuCi0gKiBJZiB5b3UgZ2V0IHN0cmFuZ2UgcmVzdWx0cywgZG8gbm90IHVzZSB0aGlzIGFuZCBzZXQgUElPIG1hbnVhbGx5Ci0gKiBieSBoZHBhcm0uCiAgKgogICogVmVyc2lvbiAwLjEsIE5vdiA4LCAxOTk2CiAgKiBieSBKYXJvbWlyIEtvdXRlaywgZm9yIDIuMS44LiAKQEAgLTEzNiw2ICsxMzMsOCBAQAogI2RlZmluZSBQSU9fTk9UX0VYSVNUIDI1NAogI2RlZmluZSBQSU9fRE9OVF9LTk9XIDI1NQogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG9wdGk2MjFfbG9jayk7CisKIC8qIHRoZXJlIGFyZSBzdG9yZWQgcGlvIG51bWJlcnMgZnJvbSBvdGhlciBjYWxscyBvZiBvcHRpNjIxX3NldF9waW9fbW9kZSAqLwogc3RhdGljIHZvaWQgY29tcHV0ZV9waW9zKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQogLyogU3RvcmUgdmFsdWVzIGludG8gZHJpdmUtPmRyaXZlX2RhdGEKQEAgLTI4MSw3ICsyODAsNyBAQAogCQlzZWNvbmQucmVjb3ZlcnlfdGltZSwgZHJkeSk7CiAjZW5kaWYKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZvcHRpNjIxX2xvY2ssIGZsYWdzKTsKIAogICAgICAJcmVnX2Jhc2UgPSBod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdOwogCkBAIC0zMjAsNyArMzE5LDcgQEAKIAkvKiAgYW5kIHJlYWQgcHJlZmV0Y2ggZm9yIGJvdGggZHJpdmVzICovCiAJd3JpdGVfcmVnKG1pc2MsIE1JU0NfUkVHKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3B0aTYyMV9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC0zMzIsMzIgKzMzMSwyNyBAQAogCWh3aWYtPmRyaXZlc1sxXS5kcml2ZV9kYXRhID0gUElPX0RPTlRfS05PVzsKIAogCWh3aWYtPnNldF9waW9fbW9kZSA9ICZvcHRpNjIxX3NldF9waW9fbW9kZTsKLQotCWlmICghKGh3aWYtPmRtYV9iYXNlKSkKLQkJcmV0dXJuOwotCi0JaHdpZi0+YXRhcGlfZG1hID0gMTsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKLQlod2lmLT5zd2RtYV9tYXNrID0gMHgwNzsKIH0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3Qgb3B0aTYyMV9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gb3B0aTYyMV9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CiAJewkvKiAwICovCiAJCS5uYW1lCQk9ICJPUFRJNjIxIiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9vcHRpNjIxLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ1LDB4ODAsMHgwMH0sIHsweDQwLDB4MDgsMHgwMH19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BIHwKKwkJCQkgIElERV9IRkxBR19CT09UQUJMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJfSx7CS8qIDEgKi8KIAkJLm5hbWUJCT0gIk9QVEk2MjFYIiwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9vcHRpNjIxLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDQ1LDB4ODAsMHgwMH0sIHsweDQwLDB4MDgsMHgwMH19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BIHwKKwkJCQkgIElERV9IRkxBR19CT09UQUJMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzMsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1RSVVNUX0JJT1NfRk9SX0RNQSwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X25ldy5jCmluZGV4IDg3MDRiNmYuLjQyMzRlZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfbmV3LmMKQEAgLTMzMiwxNiArMzMyLDEyIEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYXBwbGVfa2l3aV9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGRldik7Ci0JdW5zaWduZWQgaW50IGNsYXNzX3JldiA9IDA7CiAJdTggY29uZjsKIAogCWlmIChucCA9PSBOVUxMIHx8ICFvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImtpd2ktcm9vdCIpKQogCQlyZXR1cm47CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKLQljbGFzc19yZXYgJj0gMHhmZjsKLQotCWlmIChjbGFzc19yZXYgPj0gMHgwMykgeworCWlmIChwZGV2LT5yZXZpc2lvbiA+PSAweDAzKSB7CiAJCS8qIFNldHVwIGNoaXAgbWFnaWMgY29uZmlnIHN0dWZmIChmcm9tIGRhcndpbikgKi8KIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUgKHBkZXYsIDB4NDAsICZjb25mKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDAsIChjb25mIHwgMHgwMSkpOwpAQCAtNDc1LDE1MCArNDcxLDU2IEBACiAJaHdpZi0+cXVpcmtwcm9jID0gJnBkY25ld19xdWlya3Byb2M7CiAJaHdpZi0+cmVzZXRwcm9jID0gJnBkY25ld19yZXNldDsKIAotCWh3aWYtPmVycl9zdG9wc19maWZvID0gMTsKLQotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKIAkJcmV0dXJuOwogCi0JaHdpZi0+YXRhcGlfZG1hICA9IDE7Ci0KLQlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+Y2RzLT51ZG1hX21hc2s7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0KIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQlod2lmLT5jYmwgPSBwZGNuZXdfY2FibGVfZGV0ZWN0KGh3aWYpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX3BkY25ldyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQorc3RhdGljIHN0cnVjdCBwY2lfZGV2ICogX19kZXZpbml0IHBkYzIwMjcwX2dldF9kZXYyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7Ci19CisJc3RydWN0IHBjaV9kZXYgKmRldjI7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGluaXRfc2V0dXBfcGRjMjAyNzAoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKLXsKLQlzdHJ1Y3QgcGNpX2RldiAqYnJpZGdlID0gZGV2LT5idXMtPnNlbGY7CisJZGV2MiA9IHBjaV9nZXRfc2xvdChkZXYtPmJ1cywgUENJX0RFVkZOKFBDSV9TTE9UKGRldi0+ZGV2Zm4pICsgMiwKKwkJCQkJCVBDSV9GVU5DKGRldi0+ZGV2Zm4pKSk7CisJaWYgKGRldjIgJiYKKwkgICAgZGV2Mi0+dmVuZG9yID09IGRldi0+dmVuZG9yICYmCisJICAgIGRldjItPmRldmljZSA9PSBkZXYtPmRldmljZSkgewogCi0JaWYgKGJyaWRnZSAhPSBOVUxMICYmCi0JICAgIGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVDICYmCi0JICAgIGJyaWRnZS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfREVDXzIxMTUwKSB7Ci0JCXN0cnVjdCBwY2lfZGV2ICpkZXYyOwotCi0JCWlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSAmIDIpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQlkZXYyID0gcGNpX2dldF9zbG90KGRldi0+YnVzLCBQQ0lfREVWRk4oUENJX1NMT1QoZGV2LT5kZXZmbikgKyAyLAotCQkJCQkJCVBDSV9GVU5DKGRldi0+ZGV2Zm4pKSk7Ci0JCWlmIChkZXYyICE9IE5VTEwgJiYKLQkJICAgIGRldjItPnZlbmRvciA9PSBkZXYtPnZlbmRvciAmJgotCQkgICAgZGV2Mi0+ZGV2aWNlID09IGRldi0+ZGV2aWNlKSB7Ci0JCQlpbnQgcmV0OwotCi0JCQlpZiAoZGV2Mi0+aXJxICE9IGRldi0+aXJxKSB7Ci0JCQkJZGV2Mi0+aXJxID0gZGV2LT5pcnE7Ci0KLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUENJIGNvbmZpZyBzcGFjZSAiCi0JCQkJICAgICAgICJpbnRlcnJ1cHQgZml4ZWQuXG4iLCBkLT5uYW1lKTsKLQkJCX0KLQotCQkJcmV0ID0gaWRlX3NldHVwX3BjaV9kZXZpY2VzKGRldiwgZGV2MiwgZCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlwY2lfZGV2X3B1dChkZXYyKTsKLQkJCXJldHVybiByZXQ7CisJCWlmIChkZXYyLT5pcnEgIT0gZGV2LT5pcnEpIHsKKwkJCWRldjItPmlycSA9IGRldi0+aXJxOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiUERDMjAyNzA6IFBDSSBjb25maWcgc3BhY2UgIgorCQkJCQkgImludGVycnVwdCBmaXhlZFxuIik7CiAJCX0KKworCQlyZXR1cm4gZGV2MjsKIAl9Ci0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CisKKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9wZGMyMDI3NihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQotewotCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBkZXYtPmJ1cy0+c2VsZjsKLQotCWlmIChicmlkZ2UgIT0gTlVMTCAmJgotCSAgICBicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMICYmCi0JICAgKGJyaWRnZS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MCB8fAotCSAgICBicmlkZ2UtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0k5NjBSTSkpIHsKLQotCQlwcmludGsoS0VSTl9JTkZPICIlczogYXR0YWNoZWQgdG8gSTJPIFJBSUQgY29udHJvbGxlciwgIgotCQkJCSAic2tpcHBpbmcuXG4iLCBkLT5uYW1lKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisjZGVmaW5lIERFQ0xBUkVfUERDTkVXX0RFVihuYW1lX3N0ciwgdWRtYSkgXAorCXsgXAorCQkubmFtZQkJPSBuYW1lX3N0ciwgXAorCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3BkY25ldywgXAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BkYzIwMm5ldywgXAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19QT1NUX1NFVF9NT0RFIHwgXAorCQkJCSAgSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8gfCBcCisJCQkJICBJREVfSEZMQUdfT0ZGX0JPQVJELCBcCisJCS5waW9fbWFzawk9IEFUQV9QSU80LCBcCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwgXAorCQkudWRtYV9tYXNrCT0gdWRtYSwgXAogCX0KLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKLX0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgcGRjbmV3X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7CS8qIDAgKi8KLQkJLm5hbWUJCT0gIlBEQzIwMjY4IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkY25ldywKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGNuZXcsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGRjMjAybmV3LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDNmLCAvKiB1ZG1hMC01ICovCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1BPU1RfU0VUX01PREUsCi0JfSx7CS8qIDEgKi8KLQkJLm5hbWUJCT0gIlBEQzIwMjY5IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkY25ldywKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGNuZXcsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGRjMjAybmV3LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02Ki8KLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSwKLQl9LHsJLyogMiAqLwotCQkubmFtZQkJPSAiUERDMjAyNzAiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyNzAsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfcGRjbmV3LAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BkYzIwMm5ldywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHgzZiwgLyogdWRtYTAtNSAqLwotCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19QT1NUX1NFVF9NT0RFLAotCX0sewkvKiAzICovCi0JCS5uYW1lCQk9ICJQREMyMDI3MSIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGNuZXcsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfcGRjbmV3LAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BkYzIwMm5ldywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHg3ZiwgLyogdWRtYTAtNiovCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1BPU1RfU0VUX01PREUsCi0JfSx7CS8qIDQgKi8KLQkJLm5hbWUJCT0gIlBEQzIwMjc1IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkY25ldywKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGNuZXcsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGRjMjAybmV3LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02Ki8KLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSwKLQl9LHsJLyogNSAqLwotCQkubmFtZQkJPSAiUERDMjAyNzYiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyNzYsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfcGRjbmV3LAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BkYzIwMm5ldywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHg3ZiwgLyogdWRtYTAtNiovCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1BPU1RfU0VUX01PREUsCi0JfSx7CS8qIDYgKi8KLQkJLm5hbWUJCT0gIlBEQzIwMjc3IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkY25ldywKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGNuZXcsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGRjMjAybmV3LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKLQkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDdmLCAvKiB1ZG1hMC02Ki8KLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUE9TVF9TRVRfTU9ERSwKLQl9CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gcGRjbmV3X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKKwkvKiAwICovIERFQ0xBUkVfUERDTkVXX0RFVigiUERDMjAyNjgiLCBBVEFfVURNQTUpLAorCS8qIDEgKi8gREVDTEFSRV9QRENORVdfREVWKCJQREMyMDI2OSIsIEFUQV9VRE1BNiksCisJLyogMiAqLyBERUNMQVJFX1BEQ05FV19ERVYoIlBEQzIwMjcwIiwgQVRBX1VETUE1KSwKKwkvKiAzICovIERFQ0xBUkVfUERDTkVXX0RFVigiUERDMjAyNzEiLCBBVEFfVURNQTYpLAorCS8qIDQgKi8gREVDTEFSRV9QRENORVdfREVWKCJQREMyMDI3NSIsIEFUQV9VRE1BNiksCisJLyogNSAqLyBERUNMQVJFX1BEQ05FV19ERVYoIlBEQzIwMjc2IiwgQVRBX1VETUE2KSwKKwkvKiA2ICovIERFQ0xBUkVfUERDTkVXX0RFVigiUERDMjAyNzciLCBBVEFfVURNQTYpLAogfTsKIAogLyoqCkBAIC02MzIsOSArNTM0LDQwIEBACiAgCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwZGMyMDJuZXdfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWlkZV9wY2lfZGV2aWNlX3QgKmQgPSAmcGRjbmV3X2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV07CisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQ7CisJc3RydWN0IHBjaV9kZXYgKmJyaWRnZSA9IGRldi0+YnVzLT5zZWxmOworCXU4IGlkeCA9IGlkLT5kcml2ZXJfZGF0YTsKIAotCXJldHVybiBkLT5pbml0X3NldHVwKGRldiwgZCk7CisJZCA9ICZwZGNuZXdfY2hpcHNldHNbaWR4XTsKKworCWlmIChpZHggPT0gMiAmJiBicmlkZ2UgJiYKKwkgICAgYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9ERUMgJiYKKwkgICAgYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ERUNfMjExNTApIHsKKwkJc3RydWN0IHBjaV9kZXYgKmRldjI7CisKKwkJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pICYgMikKKwkJCXJldHVybiAtRU5PREVWOworCisJCWRldjIgPSBwZGMyMDI3MF9nZXRfZGV2MihkZXYpOworCisJCWlmIChkZXYyKSB7CisJCQlpbnQgcmV0ID0gaWRlX3NldHVwX3BjaV9kZXZpY2VzKGRldiwgZGV2MiwgZCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlwY2lfZGV2X3B1dChkZXYyKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlpZiAoaWR4ID09IDUgJiYgYnJpZGdlICYmCisJICAgIGJyaWRnZS0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfSU5URUwgJiYKKwkgICAgKGJyaWRnZS0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MCB8fAorCSAgICAgYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwUk0pKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlBEQzIwMjc2OiBhdHRhY2hlZCB0byBJMk8gUkFJRCBjb250cm9sbGVyLCAiCisJCQkJICJza2lwcGluZ1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGRjMjAybmV3X3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYyBiL2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwppbmRleCBlMWQyMzM3Li5lMDk3NDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3BkYzIwMnh4X29sZC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBsaW51eC9kcml2ZXJzL2lkZS9wY2kvcGRjMjAyeHhfb2xkLmMJVmVyc2lvbiAwLjUxCUp1bCAyNywgMjAwNworICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9wZGMyMDJ4eF9vbGQuYwlWZXJzaW9uIDAuNTIJQXVnIDI3LCAyMDA3CiAgKgogICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAyCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA3CQlNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCkBAIC05Nyw5ICs5Nyw2IEBACiAJCWNhc2UgWEZFUl9NV19ETUFfMjoJVEIgPSAweDYwOyBUQyA9IDB4MDM7IGJyZWFrOwogCQljYXNlIFhGRVJfTVdfRE1BXzE6CVRCID0gMHg2MDsgVEMgPSAweDA0OyBicmVhazsKIAkJY2FzZSBYRkVSX01XX0RNQV8wOglUQiA9IDB4RTA7IFRDID0gMHgwRjsgYnJlYWs7Ci0JCWNhc2UgWEZFUl9TV19ETUFfMjoJVEIgPSAweDYwOyBUQyA9IDB4MDU7IGJyZWFrOwotCQljYXNlIFhGRVJfU1dfRE1BXzE6CVRCID0gMHg4MDsgVEMgPSAweDA2OyBicmVhazsKLQkJY2FzZSBYRkVSX1NXX0RNQV8wOglUQiA9IDB4QzA7IFRDID0gMHgwQjsgYnJlYWs7CiAJCWNhc2UgWEZFUl9QSU9fNDoJVEEgPSAweDAxOyBUQiA9IDB4MDQ7IGJyZWFrOwogCQljYXNlIFhGRVJfUElPXzM6CVRBID0gMHgwMjsgVEIgPSAweDA2OyBicmVhazsKIAkJY2FzZSBYRkVSX1BJT18yOglUQSA9IDB4MDM7IFRCID0gMHgwODsgYnJlYWs7CkBAIC0zMDUsMTMgKzMwMiw2IEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfcGRjMjAyeHgoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKLQotCS8qIFBEQzIwMjY1IGhhcyBwcm9ibGVtcyB3aXRoIGxhcmdlIExCQTQ4IHJlcXVlc3RzICovCi0JaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjcpIHx8Ci0JICAgIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjUpKQotCQlod2lmLT5ycXNpemUgPSAyNTY7Ci0KIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmcGRjMjAyeHhfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZwZGMyMDJ4eF9zZXRfbW9kZTsKIApAQCAtMzIwLDE4ICszMTAsOSBAQAogCWlmIChod2lmLT5wY2lfZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjQ2KQogCQlod2lmLT5yZXNldHByb2MgPSAmcGRjMjAyeHhfcmVzZXQ7CiAKLQlod2lmLT5lcnJfc3RvcHNfZmlmbyA9IDE7Ci0KLQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSBod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPnVsdHJhX21hc2sgPSBod2lmLT5jZHMtPnVkbWFfbWFzazsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKLQlod2lmLT5zd2RtYV9tYXNrID0gMHgwNzsKLQlod2lmLT5hdGFwaV9kbWEgPSAxOwotCiAJaHdpZi0+ZG1hX2xvc3RfaXJxID0gJnBkYzIwMnh4X2RtYV9sb3N0X2lycTsKIAlod2lmLT5kbWFfdGltZW91dCA9ICZwZGMyMDJ4eF9kbWFfdGltZW91dDsKIApAQCAtMzc3LDggKzM1OCw4IEBACiAJaWRlX3NldHVwX2RtYShod2lmLCBkbWFiYXNlLCA4KTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9wZGMyMDJhdGE0KHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQkJCSAgIGlkZV9wY2lfZGV2aWNlX3QgKmQpCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGRjMjAyYXRhNF9maXh1cF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpZiAoKGRldi0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKSB7CiAJCXU4IGlycSA9IDAsIGlycTIgPSAwOwpAQCAtMzg4LDkwICszNjksNDUgQEAKIAkJaWYgKGlycSAhPSBpcnEyKSB7CiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LAogCQkJCShQQ0lfSU5URVJSVVBUX0xJTkUpfDB4ODAsIGlycSk7ICAgICAvKiAweGJjICovCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogcGNpLWNvbmZpZyBzcGFjZSBpbnRlcnJ1cHQgIgotCQkJCSJtaXJyb3IgZml4ZWQuXG4iLCBkLT5uYW1lKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ0kgY29uZmlnIHNwYWNlIGludGVycnVwdCAiCisJCQkJCSAibWlycm9yIGZpeGVkXG4iLCBuYW1lKTsKIAkJfQogCX0KLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9wZGMyMDI2NShzdHJ1Y3QgcGNpX2RldiAqZGV2LAotCQkJCQkgaWRlX3BjaV9kZXZpY2VfdCAqZCkKLXsKLQlpZiAoKGRldi0+YnVzLT5zZWxmKSAmJgotCSAgICAoZGV2LT5idXMtPnNlbGYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMKSAmJgotCSAgICAoKGRldi0+YnVzLT5zZWxmLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwKSB8fAotCSAgICAgKGRldi0+YnVzLT5zZWxmLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwUk0pKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IFNraXBwaW5nIFByb21pc2UgUERDMjAyNjUgIgotCQkJImF0dGFjaGVkIHRvIEkyTyBSQUlEIGNvbnRyb2xsZXIuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisjZGVmaW5lIERFQ0xBUkVfUERDMjAyNlhfREVWKG5hbWVfc3RyLCB1ZG1hLCBleHRyYV9mbGFncykgXAorCXsgXAorCQkubmFtZQkJPSBuYW1lX3N0ciwgXAorCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3BkYzIwMnh4LCBcCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGRjMjAyeHgsIFwKKwkJLmluaXRfZG1hCT0gaW5pdF9kbWFfcGRjMjAyeHgsIFwKKwkJLmV4dHJhCQk9IDQ4LCBcCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8gfCBcCisJCQkJICBleHRyYV9mbGFncyB8IFwKKwkJCQkgIElERV9IRkxBR19PRkZfQk9BUkQsIFwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLCBcCisJCS51ZG1hX21hc2sJPSB1ZG1hLCBcCiAJfQotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOwotfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX3BkYzIwMnh4KHN0cnVjdCBwY2lfZGV2ICpkZXYsCi0JCQkJCSBpZGVfcGNpX2RldmljZV90ICpkKQotewotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOwotfQotCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBwZGMyMDJ4eF9jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gcGRjMjAyeHhfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMCAqLwogCQkubmFtZQkJPSAiUERDMjAyNDYiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyYXRhNCwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGMyMDJ4eCwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9wZGMyMDJ4eCwKIAkJLmluaXRfZG1hCT0gaW5pdF9kbWFfcGRjMjAyeHgsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAogCQkuZXh0cmEJCT0gMTYsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8gfAorCQkJCSAgSURFX0hGTEFHX09GRl9CT0FSRCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCi0JCS51ZG1hX21hc2sJPSAweDA3LCAvKiB1ZG1hMC0yICovCi0JfSx7CS8qIDEgKi8KLQkJLm5hbWUJCT0gIlBEQzIwMjYyIiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3BkYzIwMmF0YTQsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfcGRjMjAyeHgsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfcGRjMjAyeHgsCi0JCS5pbml0X2RtYQk9IGluaXRfZG1hX3BkYzIwMnh4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKLQkJLmV4dHJhCQk9IDQ4LAotCQkucGlvX21hc2sJPSBBVEFfUElPNCwKLQkJLnVkbWFfbWFzawk9IDB4MWYsIC8qIHVkbWEwLTQgKi8KLQl9LHsJLyogMiAqLwotCQkubmFtZQkJPSAiUERDMjAyNjMiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfcGRjMjAyYXRhNCwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGMyMDJ4eCwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9wZGMyMDJ4eCwKLQkJLmluaXRfZG1hCT0gaW5pdF9kbWFfcGRjMjAyeHgsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCQkuZXh0cmEJCT0gNDgsCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHgxZiwgLyogdWRtYTAtNCAqLwotCX0sewkvKiAzICovCi0JCS5uYW1lCQk9ICJQREMyMDI2NSIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGMyMDI2NSwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGMyMDJ4eCwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9wZGMyMDJ4eCwKLQkJLmluaXRfZG1hCT0gaW5pdF9kbWFfcGRjMjAyeHgsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCQkuZXh0cmEJCT0gNDgsCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHgzZiwgLyogdWRtYTAtNSAqLwotCX0sewkvKiA0ICovCi0JCS5uYW1lCQk9ICJQREMyMDI2NyIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9wZGMyMDJ4eCwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGMyMDJ4eCwKLQkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9wZGMyMDJ4eCwKLQkJLmluaXRfZG1hCT0gaW5pdF9kbWFfcGRjMjAyeHgsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCQkuZXh0cmEJCT0gNDgsCi0JCS5waW9fbWFzawk9IEFUQV9QSU80LAotCQkudWRtYV9tYXNrCT0gMHgzZiwgLyogdWRtYTAtNSAqLwotCX0KKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUEyLAorCX0sCisKKwkvKiAxICovIERFQ0xBUkVfUERDMjAyNlhfREVWKCJQREMyMDI2MiIsIEFUQV9VRE1BNCwgMCksCisJLyogMiAqLyBERUNMQVJFX1BEQzIwMjZYX0RFVigiUERDMjAyNjMiLCBBVEFfVURNQTQsIDApLAorCS8qIDMgKi8gREVDTEFSRV9QREMyMDI2WF9ERVYoIlBEQzIwMjY1IiwgQVRBX1VETUE1LCBJREVfSEZMQUdfUlFTSVpFXzI1NiksCisJLyogNCAqLyBERUNMQVJFX1BEQzIwMjZYX0RFVigiUERDMjAyNjciLCBBVEFfVURNQTUsIElERV9IRkxBR19SUVNJWkVfMjU2KSwKIH07CiAKIC8qKgpAQCAtNDg1LDkgKzQyMSwyOCBAQAogIAogc3RhdGljIGludCBfX2RldmluaXQgcGRjMjAyeHhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWlkZV9wY2lfZGV2aWNlX3QgKmQgPSAmcGRjMjAyeHhfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXTsKKwljb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZDsKKwl1OCBpZHggPSBpZC0+ZHJpdmVyX2RhdGE7CiAKLQlyZXR1cm4gZC0+aW5pdF9zZXR1cChkZXYsIGQpOworCWQgPSAmcGRjMjAyeHhfY2hpcHNldHNbaWR4XTsKKworCWlmIChpZHggPCAzKQorCQlwZGMyMDJhdGE0X2ZpeHVwX2lycShkZXYsIGQtPm5hbWUpOworCisJaWYgKGlkeCA9PSAzKSB7CisJCXN0cnVjdCBwY2lfZGV2ICpicmlkZ2UgPSBkZXYtPmJ1cy0+c2VsZjsKKworCQlpZiAoYnJpZGdlICYmCisJCSAgICBicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lOVEVMICYmCisJCSAgICAoYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwIHx8CisJCSAgICAgYnJpZGdlLT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwUk0pKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJpZGU6IFNraXBwaW5nIFByb21pc2UgUERDMjAyNjUgIgorCQkJCSJhdHRhY2hlZCB0byBJMk8gUkFJRCBjb250cm9sbGVyXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfQorCisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwZGMyMDJ4eF9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jIGIvZHJpdmVycy9pZGUvcGNpL3BpaXguYwppbmRleCBhOGRkMGMwLi45MzI5ZDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGxpbnV4L2RyaXZlcnMvaWRlL3BjaS9waWl4LmMJVmVyc2lvbiAwLjUzCUF1ZyA5LCAyMDA3CisgKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL3BpaXguYwlWZXJzaW9uIDAuNTQJU2VwIDUsIDIwMDcKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiwgQXV0aG9yIGFuZCBNYWludGFpbmVyCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KQEAgLTI1NCw1MyArMjU0LDIwIEBACiB9CiAKIC8qKgotICoJcGlpeF9pc19pY2h4CS0JY2hlY2sgaWYgSUNIeAotICoJQGRldjogUENJIGRldmljZSB0byBjaGVjawotICoKLSAqCXJldHVybnMgMSBpZiBJQ0h4LCAwIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludCBwaWl4X2lzX2ljaHgoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLSAgICAgICAgc3dpdGNoIChkZXYtPmRldmljZSkgewotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8xOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8xOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl8xOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV84OgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV85OgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMDoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTE6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzE6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEwOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMToKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMTE6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMTE6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9FU0JfMjoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTk6Ci0JCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIxOgotCQljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xODoKLQkJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNjoKLQkJCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKioKLSAqCWluaXRfY2hpcHNldF9waWl4CS0Jc2V0IHVwIHRoZSBQSUlYIGNoaXBzZXQKKyAqCWluaXRfY2hpcHNldF9pY2gJLQlzZXQgdXAgdGhlIElDSCBjaGlwc2V0CiAgKglAZGV2OiBQQ0kgZGV2aWNlIHRvIHNldCB1cAogICoJQG5hbWU6IE5hbWUgb2YgdGhlIGRldmljZQogICoKLSAqCUluaXRpYWxpemUgdGhlIFBDSSBkZXZpY2UgYXMgcmVxdWlyZWQuIEZvciB0aGUgUElJWCB0aGlzIHR1cm5zCi0gKglvdXQgdG8gYmUgbmljZSBhbmQgc2ltcGxlCisgKglJbml0aWFsaXplIHRoZSBQQ0kgZGV2aWNlIGFzIHJlcXVpcmVkLiAgRm9yIHRoZSBJQ0ggdGhpcyB0dXJucworICoJb3V0IHRvIGJlIG5pY2UgYW5kIHNpbXBsZS4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBpbml0X2NoaXBzZXRfcGlpeCAoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19kZXZpbml0IGluaXRfY2hpcHNldF9pY2goc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAocGlpeF9pc19pY2h4KGRldikpIHsKLQkJdW5zaWduZWQgaW50IGV4dHJhID0gMDsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgMHg1NCwgJmV4dHJhKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NTQsIGV4dHJhfDB4NDAwKTsKLQl9CisJdTMyIGV4dHJhID0gMDsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NTQsICZleHRyYSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NTQsIGV4dHJhIHwgMHg0MDApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMTgsOSArMjg1LDkgQEAKIAl1OCBkbWFfc3RhdDsKIAogCS8qIGNsZWFyIHRoZSBJTlRSICYgRVJST1IgYml0cyAqLwotCWRtYV9zdGF0ID0gaHdpZi0+SU5CKGh3aWYtPmRtYV9zdGF0dXMpOworCWRtYV9zdGF0ID0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOwogCS8qIFNob3VsZCB3ZSBmb3JjZSB0aGUgYml0IGFzIHdlbGwgPyAqLwotCWh3aWYtPk9VVEIoZG1hX3N0YXQsIGh3aWYtPmRtYV9zdGF0dXMpOworCW91dGIoZG1hX3N0YXQsIGh3aWYtPmRtYV9zdGF0dXMpOwogfQogCiBzdHJ1Y3QgaWNoX2xhcHRvcCB7CkBAIC0zNzQsMzUgKzM0MSwxMiBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3BpaXgoaWRlX2h3aWZfdCAqaHdpZikKIHsKLSNpZm5kZWYgQ09ORklHX0lBNjQKLQlpZiAoIWh3aWYtPmlycSkKLQkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0jZW5kaWYgLyogQ09ORklHX0lBNjQgKi8KLQotCWlmIChod2lmLT5wY2lfZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MU1YKSB7Ci0JCS8qIFRoaXMgaXMgYSBwYWluZnVsIHN5c3RlbSBiZXN0IHRvIGxldCBpdCBzZWxmIHR1bmUgZm9yIG5vdyAqLwotCQlyZXR1cm47Ci0JfQotCiAJaHdpZi0+c2V0X3Bpb19tb2RlID0gJnBpaXhfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZwaWl4X3NldF9kbWFfbW9kZTsKIAotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IDE7Ci0JaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gMTsKLQogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCiAJCXJldHVybjsKIAotCS8qIElDSHggbmVlZCB0byBjbGVhciB0aGUgYm1kbWEgc3RhdHVzIGZvciBhbGwgaW50ZXJydXB0cyAqLwotCWlmIChwaWl4X2lzX2ljaHgoaHdpZi0+cGNpX2RldikpCi0JCWh3aWYtPmlkZV9kbWFfY2xlYXJfaXJxID0gJnBpaXhfZG1hX2NsZWFyX2lycTsKLQotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0KLQlod2lmLT51bHRyYV9tYXNrID0gaHdpZi0+Y2RzLT51ZG1hX21hc2s7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDY7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDQ7Ci0KIAlpZiAoaHdpZi0+dWx0cmFfbWFzayAmIDB4NzgpIHsKIAkJaWYgKGh3aWYtPmNibCAhPSBBVEFfQ0JMX1BBVEE0MF9TSE9SVCkKIAkJCWh3aWYtPmNibCA9IHBpaXhfY2FibGVfZGV0ZWN0KGh3aWYpOwpAQCAtNDEyLDIxICszNTYsNDkgQEAKIAkJaHdpZi0+dWx0cmFfbWFzayA9IGh3aWYtPm13ZG1hX21hc2sgPSBod2lmLT5zd2RtYV9tYXNrID0gMDsKIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9pY2goaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlpbml0X2h3aWZfcGlpeChod2lmKTsKKworCS8qIElDSHggbmVlZCB0byBjbGVhciB0aGUgQk1ETUEgc3RhdHVzIGZvciBhbGwgaW50ZXJydXB0cyAqLworCWlmIChod2lmLT5kbWFfYmFzZSkKKwkJaHdpZi0+aWRlX2RtYV9jbGVhcl9pcnEgPSAmcGlpeF9kbWFfY2xlYXJfaXJxOworfQorCisjaWZuZGVmIENPTkZJR19JQTY0CisgI2RlZmluZSBJREVfSEZMQUdTX1BJSVggKElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19CT09UQUJMRSkKKyNlbHNlCisgI2RlZmluZSBJREVfSEZMQUdTX1BJSVggSURFX0hGTEFHX0JPT1RBQkxFCisjZW5kaWYKKwogI2RlZmluZSBERUNMQVJFX1BJSVhfREVWKG5hbWVfc3RyLCB1ZG1hKSBcCiAJewkJCQkJCVwKIAkJLm5hbWUJCT0gbmFtZV9zdHIsCQlcCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfcGlpeCwJXAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BpaXgsCVwKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAkJXAogCQkuZW5hYmxlYml0cwk9IHt7MHg0MSwweDgwLDB4ODB9LCB7MHg0MywweDgwLDB4ODB9fSwgXAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwJCVwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsCVwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCQlcCisJCS5zd2RtYV9tYXNrCT0gQVRBX1NXRE1BMl9PTkxZLAlcCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMTJfT05MWSwJXAogCQkudWRtYV9tYXNrCT0gdWRtYSwJCQlcCiAJfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBwaWl4X3BjaV9pbmZvW10gX19kZXZpbml0ZGF0YSA9IHsKLQkvKiAgMCAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYYSIsIDB4MDApLAkvKiBubyB1ZG1hICovCi0JLyogIDEgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWGIiLCAweDAwKSwJLyogbm8gdWRtYSAqLworI2RlZmluZSBERUNMQVJFX0lDSF9ERVYobmFtZV9zdHIsIHVkbWEpIFwKKwl7IFwKKwkJLm5hbWUJCT0gbmFtZV9zdHIsIFwKKwkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9pY2gsIFwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9pY2gsIFwKKwkJLmVuYWJsZWJpdHMJPSB7ezB4NDEsMHg4MCwweDgwfSwgezB4NDMsMHg4MCwweDgwfX0sIFwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdTX1BJSVgsIFwKKwkJLnBpb19tYXNrCT0gQVRBX1BJTzQsIFwKKwkJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksIFwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLCBcCisJCS51ZG1hX21hc2sJPSB1ZG1hLCBcCisJfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gcGlpeF9wY2lfaW5mb1tdIF9fZGV2aW5pdGRhdGEgPSB7CisJLyogIDAgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWGEiLAkweDAwKSwJLyogbm8gdWRtYSAqLworCS8qICAxICovIERFQ0xBUkVfUElJWF9ERVYoIlBJSVhiIiwJMHgwMCksCS8qIG5vIHVkbWEgKi8KIAogCS8qICAyICovCiAJewkvKgpAQCAtNDM1LDM2ICs0MDcsMzUgQEAKIAkJICogb2YgdGhlIGJpdCAxNCBvZiB0aGUgSURFVElNIHJlZ2lzdGVyIGF0IG9mZnNldCAweDZjCiAJCSAqLwogCQkubmFtZQkJPSAiTVBJSVgiLAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3BpaXgsCi0JCS5hdXRvZG1hCT0gTk9ETUEsCiAJCS5lbmFibGViaXRzCT0ge3sweDZkLDB4YzAsMHg4MH0sIHsweDZkLDB4YzAsMHhjMH19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfSVNBX1BPUlRTLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19JU0FfUE9SVFMgfCBJREVfSEZMQUdfTk9fRE1BIHwKKwkJCQkgIElERV9IRkxBR1NfUElJWCwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS8qIFRoaXMgaXMgYSBwYWluZnVsIHN5c3RlbSBiZXN0IHRvIGxldCBpdCBzZWxmIHR1bmUgZm9yIG5vdyAqLwogCX0sCiAKLQkvKiAgMyAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYMyIsIDB4MDApLAkvKiBubyB1ZG1hICovCi0JLyogIDQgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWDQiLCAweDA3KSwJLyogdWRtYTAtMiAqLwotCS8qICA1ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDAiLCAgMHgwNyksCS8qIHVkbWEwLTIgKi8KLQkvKiAgNiAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsIDB4MDcpLAkvKiB1ZG1hMC0yICovCi0JLyogIDcgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIIiwgICAweDFmKSwJLyogdWRtYTAtNCAqLwotCS8qICA4ICovIERFQ0xBUkVfUElJWF9ERVYoIlBJSVg0IiwgMHgxZiksCS8qIHVkbWEwLTQgKi8KLQkvKiAgOSAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsIDB4MDcpLAkvKiB1ZG1hMC0yICovCi0JLyogMTAgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIMiIsICAweDNmKSwJLyogdWRtYTAtNSAqLwotCS8qIDExICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDJNIiwgMHgzZiksCS8qIHVkbWEwLTUgKi8KLQkvKiAxMiAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0gzTSIsIDB4M2YpLAkvKiB1ZG1hMC01ICovCi0JLyogMTMgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIMyIsICAweDNmKSwJLyogdWRtYTAtNSAqLwotCS8qIDE0ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KLQkvKiAxNSAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g1IiwgIDB4M2YpLAkvKiB1ZG1hMC01ICovCi0JLyogMTYgKi8gREVDTEFSRV9QSUlYX0RFVigiQy1JQ0giLCAweDNmKSwJLyogdWRtYTAtNSAqLwotCS8qIDE3ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KLQkvKiAxOCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g1LVNBVEEiLCAweDNmKSwJLyogdWRtYTAtNSAqLwotCS8qIDE5ICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDUiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KLQkvKiAyMCAqLyBERUNMQVJFX1BJSVhfREVWKCJJQ0g2IiwgIDB4M2YpLAkvKiB1ZG1hMC01ICovCi0JLyogMjEgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNINyIsICAweDNmKSwJLyogdWRtYTAtNSAqLwotCS8qIDIyICovIERFQ0xBUkVfUElJWF9ERVYoIklDSDQiLCAgMHgzZiksCS8qIHVkbWEwLTUgKi8KLQkvKiAyMyAqLyBERUNMQVJFX1BJSVhfREVWKCJFU0IyIiwgIDB4M2YpLAkvKiB1ZG1hMC01ICovCi0JLyogMjQgKi8gREVDTEFSRV9QSUlYX0RFVigiSUNIOE0iLCAweDNmKSwJLyogdWRtYTAtNSAqLworCS8qICAzICovIERFQ0xBUkVfUElJWF9ERVYoIlBJSVgzIiwJMHgwMCksCS8qIG5vIHVkbWEgKi8KKwkvKiAgNCAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsCUFUQV9VRE1BMiksCisJLyogIDUgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0gwIiwJQVRBX1VETUEyKSwKKwkvKiAgNiAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsCUFUQV9VRE1BMiksCisJLyogIDcgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0giLAkJQVRBX1VETUE0KSwKKwkvKiAgOCAqLyBERUNMQVJFX1BJSVhfREVWKCJQSUlYNCIsCUFUQV9VRE1BNCksCisJLyogIDkgKi8gREVDTEFSRV9QSUlYX0RFVigiUElJWDQiLAlBVEFfVURNQTIpLAorCS8qIDEwICovIERFQ0xBUkVfSUNIX0RFVigiSUNIMiIsCUFUQV9VRE1BNSksCisJLyogMTEgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0gyTSIsCUFUQV9VRE1BNSksCisJLyogMTIgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0gzTSIsCUFUQV9VRE1BNSksCisJLyogMTMgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0gzIiwJQVRBX1VETUE1KSwKKwkvKiAxNCAqLyBERUNMQVJFX0lDSF9ERVYoIklDSDQiLAlBVEFfVURNQTUpLAorCS8qIDE1ICovIERFQ0xBUkVfSUNIX0RFVigiSUNINSIsCUFUQV9VRE1BNSksCisJLyogMTYgKi8gREVDTEFSRV9JQ0hfREVWKCJDLUlDSCIsCUFUQV9VRE1BNSksCisJLyogMTcgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0g0IiwJQVRBX1VETUE1KSwKKwkvKiAxOCAqLyBERUNMQVJFX0lDSF9ERVYoIklDSDUtU0FUQSIsCUFUQV9VRE1BNSksCisJLyogMTkgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0g1IiwJQVRBX1VETUE1KSwKKwkvKiAyMCAqLyBERUNMQVJFX0lDSF9ERVYoIklDSDYiLAlBVEFfVURNQTUpLAorCS8qIDIxICovIERFQ0xBUkVfSUNIX0RFVigiSUNINyIsCUFUQV9VRE1BNSksCisJLyogMjIgKi8gREVDTEFSRV9JQ0hfREVWKCJJQ0g0IiwJQVRBX1VETUE1KSwKKwkvKiAyMyAqLyBERUNMQVJFX0lDSF9ERVYoIkVTQjIiLAlBVEFfVURNQTUpLAorCS8qIDI0ICovIERFQ0xBUkVfSUNIX0RFVigiSUNIOE0iLAlBVEFfVURNQTUpLAogfTsKIAogLyoqCkBAIC00NzgsOSArNDQ5LDcgQEAKICAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHBpaXhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewotCWlkZV9wY2lfZGV2aWNlX3QgKmQgPSAmcGlpeF9wY2lfaW5mb1tpZC0+ZHJpdmVyX2RhdGFdOwotCi0JcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCk7CisJcmV0dXJuIGlkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgJnBpaXhfcGNpX2luZm9baWQtPmRyaXZlcl9kYXRhXSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3J6MTAwMC5jIGIvZHJpdmVycy9pZGUvcGNpL3J6MTAwMC5jCmluZGV4IDNmNTA2ZTguLjZiMTBhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9yejEwMDAuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcnoxMDAwLmMKQEAgLTM1LDEzICszNSwxMyBAQAogCXUxNiByZWc7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IGh3aWYtPnBjaV9kZXY7CiAKLQlod2lmLT5jaGlwc2V0ID0gaWRlX3J6MTAwMDsKIAlpZiAoIXBjaV9yZWFkX2NvbmZpZ193b3JkIChkZXYsIDB4NDAsICZyZWcpICYmCiAJICAgICFwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCAweDQwLCByZWcgJiAweGRmZmYpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNhYmxlZCBjaGlwc2V0IHJlYWQtYWhlYWQgIgogCQkJIihidWdneSBSWjEwMDAvUloxMDAxKVxuIiwgaHdpZi0+bmFtZSk7CiAJfSBlbHNlIHsKLQkJaHdpZi0+c2VyaWFsaXplZCA9IDE7CisJCWlmIChod2lmLT5tYXRlKQorCQkJaHdpZi0+bWF0ZS0+c2VyaWFsaXplZCA9IGh3aWYtPnNlcmlhbGl6ZWQgPSAxOwogCQlod2lmLT5kcml2ZXNbMF0ubm9fdW5tYXNrID0gMTsKIAkJaHdpZi0+ZHJpdmVzWzFdLm5vX3VubWFzayA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXJpYWxpemVkLCBkaXNhYmxlZCB1bm1hc2tpbmcgIgpAQCAtNDksMTEgKzQ5LDExIEBACiAJfQogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCByejEwMDBfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHJ6MTAwMF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gIlJaMTAweCIsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9yejEwMDAsCi0JLmF1dG9kbWEJPSBOT0RNQSwKLQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkuY2hpcHNldAk9IGlkZV9yejEwMDAsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fRE1BIHwgSURFX0hGTEFHX0JPT1RBQkxFLAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgcnoxMDAwX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYyBiL2RyaXZlcnMvaWRlL3BjaS9zYzEyMDAuYwppbmRleCA1NGM1Yzk4Li5kMmM4YjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2MxMjAwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NjMTIwMC5jCkBAIC0zNjIsMzMgKzM2MiwyNiBAQAogICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NjMTIwMCAoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlpZiAoaHdpZi0+bWF0ZSkKLQkJaHdpZi0+c2VyaWFsaXplZCA9IGh3aWYtPm1hdGUtPnNlcmlhbGl6ZWQgPSAxOwotCiAJaHdpZi0+c2V0X3Bpb19tb2RlID0gJnNjMTIwMF9zZXRfcGlvX21vZGU7CiAJaHdpZi0+c2V0X2RtYV9tb2RlID0gJnNjMTIwMF9zZXRfZG1hX21vZGU7CiAKLQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOwotCWh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKIAkJcmV0dXJuOwogCiAJaHdpZi0+dWRtYV9maWx0ZXIgPSBzYzEyMDBfdWRtYV9maWx0ZXI7CiAJaHdpZi0+aWRlX2RtYV9lbmQgICA9ICZzYzEyMDBfaWRlX2RtYV9lbmQ7Ci0KLSAgICAgICAgaHdpZi0+YXRhcGlfZG1hID0gMTsKLSAgICAgICAgaHdpZi0+dWx0cmFfbWFzayA9IDB4MDc7Ci0gICAgICAgIGh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzYzEyMDBfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHNjMTIwMF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gIlNDMTIwMCIsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zYzEyMDAsCi0JLmF1dG9kbWEJPSBBVVRPRE1BLAotCS5ib290YWJsZQk9IE9OX0JPQVJELAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUyB8IElERV9IRkxBR19QT1NUX1NFVF9NT0RFLAorCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NFUklBTElaRSB8CisJCQkgIElERV9IRkxBR19QT1NUX1NFVF9NT0RFIHwKKwkJCSAgSURFX0hGTEFHX0FCVVNFX0RNQV9NT0RFUyB8CisJCQkgIElERV9IRkxBR19CT09UQUJMRSwKIAkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJLnVkbWFfbWFzawk9IEFUQV9VRE1BMiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjMTIwMF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2NjX3BhdGEuYyBiL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCmluZGV4IGJkNGMxZDMuLmViYjcxMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zY2NfcGF0YS5jCkBAIC00NzIsNyArNDcyLDcgQEAKIAlpZiAoKGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgJiYgKG1hc2sgJiAweEUwKSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogbGltaXQgJXMgdG8gVURNQTRcbiIsCiAJCSAgICAgICBTQ0NfUEFUQV9OQU1FLCBkcml2ZS0+bmFtZSk7Ci0JCW1hc2sgPSAweDFGOworCQltYXNrID0gQVRBX1VETUE0OwogCX0KIAogCXJldHVybiBtYXNrOwpAQCAtNTM4LDEyICs1MzgsMTMgQEAKIC8qKgogICoJaW5pdF9zZXR1cF9zY2MJLQlzZXQgdXAgYW4gU0NDIFBBVEEgQ29udHJvbGxlcgogICoJQGRldjogUENJIGRldmljZQotICoJQGQ6IElERSBQQ0kgZGV2aWNlCisgKglAZDogSURFIHBvcnQgaW5mbwogICoKICAqCVBlcmZvcm0gdGhlIGluaXRpYWwgc2V0IHVwIGZvciB0aGlzIGRldmljZS4KICAqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpbml0X3NldHVwX3NjYyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQorc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9zY2Moc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCiB7CiAJdW5zaWduZWQgbG9uZyBjdGxfYmFzZTsKIAl1bnNpZ25lZCBsb25nIGRtYV9iYXNlOwpAQCAtNjgzLDE3ICs2ODQsMTAgQEAKIAlod2lmLT5pZGVfZG1hX3Rlc3RfaXJxID0gc2NjX2RtYV90ZXN0X2lycTsKIAlod2lmLT51ZG1hX2ZpbHRlciA9IHNjY191ZG1hX2ZpbHRlcjsKIAotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IElERV9UVU5FX0FVVE87Ci0JaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gSURFX1RVTkVfQVVUTzsKLQotCWlmIChpbl9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+Y29uZmlnX2RhdGEgKyAweGZmMCkpICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKLQkJaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7IC8qIDEzM01IeiAqLwotCX0gZWxzZSB7Ci0JCWh3aWYtPnVsdHJhX21hc2sgPSAweDNmOyAvKiAxMDBNSHogKi8KLQl9Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDA7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDA7Ci0JaHdpZi0+YXRhcGlfZG1hID0gMTsKKwlpZiAoaW5fYmUzMigodm9pZCBfX2lvbWVtICopKGh3aWYtPmNvbmZpZ19kYXRhICsgMHhmZjApKSAmIENDS0NUUkxfQVRBQ0xLT0VOKQorCQlod2lmLT51bHRyYV9tYXNrID0gQVRBX1VETUE2OyAvKiAxMzNNSHogKi8KKwllbHNlCisJCWh3aWYtPnVsdHJhX21hc2sgPSBBVEFfVURNQTU7IC8qIDEwME1IeiAqLwogCiAJLyogd2Ugc3VwcG9ydCA4MGMgY2FibGUgb25seS4gKi8KIAlod2lmLT5jYmwgPSBBVEFfQ0JMX1BBVEE4MDsKQEAgLTcwMiwxNiArNjk2LDE0IEBACiAjZGVmaW5lIERFQ0xBUkVfU0NDX0RFVihuYW1lX3N0cikJCQlcCiAgIHsJCQkJCQkJXAogICAgICAgLm5hbWUJCT0gbmFtZV9zdHIsCQkJXAotICAgICAgLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3NjYywJCVwKICAgICAgIC5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAkJXAogICAgICAgLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zY2MsCQlcCi0gICAgICAuYXV0b2RtYQk9IEFVVE9ETUEsCQkJCVwKLSAgICAgIC5ib290YWJsZQk9IE9OX0JPQVJELAkJCQlcCi0gICAgICAuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCQlcCisgICAgICAuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfAkJXAorCQkJICBJREVfSEZMQUdfQk9PVEFCTEUsCQlcCiAgICAgICAucGlvX21hc2sJCT0gQVRBX1BJTzQsCQkJXAogICB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IHNjY19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2NjX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAkvKiAwICovIERFQ0xBUkVfU0NDX0RFVigic2NjSURFIiksCiB9OwogCkBAIC03MjYsOCArNzE4LDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgc2NjX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlpZGVfcGNpX2RldmljZV90ICpkID0gJnNjY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdOwotCXJldHVybiBkLT5pbml0X3NldHVwKGRldiwgZCk7CisJcmV0dXJuIGluaXRfc2V0dXBfc2NjKGRldiwgJnNjY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IGQzZmZjNTIuLmE3MjgwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCkBAIC0xNTgsMTMgKzE1OCw2IEBACiAKIAl1OCB1bHRyYV9lbmFibGUJID0gMCwgdWx0cmFfdGltaW5nID0gMCwgZG1hX3RpbWluZyA9IDA7CiAKLQkvKiBJZiB3ZSBhcmUgYWJvdXQgdG8gcHV0IGEgZGlzayBpbnRvIFVETUEgbW9kZSB3ZSBzY3Jld2VkIHVwLgotCSAgIE91ciBjb2RlIGFzc3VtZXMgd2UgbmV2ZXIgX2V2ZXJfIGRvIHRoaXMgb24gYW4gT1NCNCAqLwotCSAgIAotCWlmKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCAmJgotCQlkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgc3BlZWQgPj0gWEZFUl9VRE1BXzApCi0JCQlCVUcoKTsKLQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgKDB4NTZ8aHdpZi0+Y2hhbm5lbCksICZ1bHRyYV90aW1pbmcpOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg1NCwgJnVsdHJhX2VuYWJsZSk7CiAKQEAgLTM2MCwyMyArMzUzLDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfc3Z3a3MgKGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0JaWYgKCFod2lmLT5pcnEpCi0JCWh3aWYtPmlycSA9IGh3aWYtPmNoYW5uZWwgPyAxNSA6IDE0OwotCiAJaHdpZi0+c2V0X3Bpb19tb2RlID0gJnN2d2tzX3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmc3Z3a3Nfc2V0X2RtYV9tb2RlOwogCWh3aWYtPnVkbWFfZmlsdGVyID0gJnN2d2tzX3VkbWFfZmlsdGVyOwogCi0JaHdpZi0+YXRhcGlfZG1hID0gMTsKLQotCWlmIChod2lmLT5wY2lfZGV2LT5kZXZpY2UgIT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFKQotCQlod2lmLT51bHRyYV9tYXNrID0gMHgzZjsKLQotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwotCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKCFod2lmLT5kbWFfYmFzZSkKIAkJcmV0dXJuOwogCkBAIC0zODYsNzIgKzM2Niw0OSBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9zdndrcyAoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKLXsKLQlyZXR1cm4gaWRlX3NldHVwX3BjaV9kZXZpY2UoZGV2LCBkKTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgaW5pdF9zZXR1cF9jc2I2IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkKQotewotCWlmICghKFBDSV9GVU5DKGRldi0+ZGV2Zm4pICYgMSkpIHsKLQkJZC0+Ym9vdGFibGUgPSBORVZFUl9CT0FSRDsKLQkJaWYgKGRldi0+cmVzb3VyY2VbMF0uc3RhcnQgPT0gMHgwMWYxKQotCQkJZC0+Ym9vdGFibGUgPSBPTl9CT0FSRDsKLQl9Ci0KLQlpZiAoKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERSB8fAotCSAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSAmJgotCSAgICAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKSkKLQkJZC0+aG9zdF9mbGFncyB8PSBJREVfSEZMQUdfU0lOR0xFOwotCWVsc2UKLQkJZC0+aG9zdF9mbGFncyAmPSB+SURFX0hGTEFHX1NJTkdMRTsKLQotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQpOwotfQotCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzZXJ2ZXJ3b3Jrc19jaGlwc2V0c1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2VydmVyd29ya3NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMCAqLwogCQkubmFtZQkJPSAiU3ZyV2tzIE9TQjQiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfc3Z3a3MsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc3Z3a3MsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0xFR0FDWV9JUlFTIHwgSURFX0hGTEFHX0JPT1RBQkxFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gMHgwMCwgLyogVURNQSBpcyBwcm9ibGVtYXRpYyBvbiBPU0I0ICovCiAJfSx7CS8qIDEgKi8KIAkJLm5hbWUJCT0gIlN2cldrcyBDU0I1IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX3N2d2tzLAogCQkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3N2d2tzLAogCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3N2d2tzLAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5ib290YWJsZQk9IE9OX0JPQVJELAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19CT09UQUJMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAl9LHsJLyogMiAqLwogCQkubmFtZQkJPSAiU3ZyV2tzIENTQjYiLAotCQkuaW5pdF9zZXR1cAk9IGluaXRfc2V0dXBfY3NiNiwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zdndrcywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTEVHQUNZX0lSUVMgfCBJREVfSEZMQUdfQk9PVEFCTEUsCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTUsCiAJfSx7CS8qIDMgKi8KIAkJLm5hbWUJCT0gIlN2cldrcyBDU0I2IiwKLQkJLmluaXRfc2V0dXAJPSBpbml0X3NldHVwX2NzYjYsCiAJCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc3Z3a3MsCiAJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc3Z3a3MsCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCi0JCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKKwkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTEVHQUNZX0lSUVMgfCBJREVfSEZMQUdfU0lOR0xFIHwKKwkJCQkgIElERV9IRkxBR19CT09UQUJMRSwKIAkJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkJLnVkbWFfbWFzawk9IEFUQV9VRE1BNSwKIAl9LHsJLyogNCAqLwogCQkubmFtZQkJPSAiU3ZyV2tzIEhUMTAwMCIsCi0JCS5pbml0X3NldHVwCT0gaW5pdF9zZXR1cF9zdndrcywKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zdndrcywKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zdndrcywKLQkJLmF1dG9kbWEJPSBBVVRPRE1BLAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAorCQkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19TSU5HTEUgfAorCQkJCSAgSURFX0hGTEFHX0JPT1RBQkxFLAogCQkucGlvX21hc2sJPSBBVEFfUElPNCwKKwkJLm13ZG1hX21hc2sJPSBBVEFfTVdETUEyLAorCQkudWRtYV9tYXNrCT0gQVRBX1VETUE1LAogCX0KIH07CiAKQEAgLTQ2Niw5ICs0MjMsMjEgQEAKICAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHN2d2tzX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKIHsKLQlpZGVfcGNpX2RldmljZV90ICpkID0gJnNlcnZlcndvcmtzX2NoaXBzZXRzW2lkLT5kcml2ZXJfZGF0YV07CisJc3RydWN0IGlkZV9wb3J0X2luZm8gZDsKKwl1OCBpZHggPSBpZC0+ZHJpdmVyX2RhdGE7CiAKLQlyZXR1cm4gZC0+aW5pdF9zZXR1cChkZXYsIGQpOworCWQgPSBzZXJ2ZXJ3b3Jrc19jaGlwc2V0c1tpZHhdOworCisJaWYgKGlkeCA9PSAyIHx8IGlkeCA9PSAzKSB7CisJCWlmICgoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSA9PSAwKSB7CisJCQlpZiAocGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkgIT0gMHgwMWYxKQorCQkJCWQuaG9zdF9mbGFncyAmPSB+SURFX0hGTEFHX0JPT1RBQkxFOworCQkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19TSU5HTEU7CisJCX0gZWxzZQorCQkJZC5ob3N0X2ZsYWdzICY9IH5JREVfSEZMQUdfU0lOR0xFOworCX0KKworCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsICZkKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2d2tzX3BjaV90YmxbXSA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCmluZGV4IDlhOTQ3NGYuLmRlODIwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYwpAQCAtNTkyLDggKzU5Miw3IEBACiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDQ7CisJaHdpZi0+bXdkbWFfbWFzayA9IEFUQV9NV0RNQTJfT05MWTsKIAogCWh3aWYtPmRtYV9zZXR1cCA9ICZzZ2lpb2M0X2lkZV9kbWFfc2V0dXA7CiAJaHdpZi0+ZG1hX3N0YXJ0ID0gJnNnaWlvYzRfaWRlX2RtYV9zdGFydDsKQEAgLTYxNSw2ICs2MTQsNyBAQAogCXZvaWQgX19pb21lbSAqdmlydF9iYXNlOwogCWlkZV9od2lmX3QgKmh3aWY7CiAJaW50IGg7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAKIAkvKgogCSAqIEZpbmQgYW4gZW1wdHkgSFdJRjsgaWYgbm9uZSBhdmFpbGFibGUsIHJldHVybiAtRU5PTUVNLgpAQCAtNjU1LDEwICs2NTUsMTIgQEAKIAl9CiAKIAlpZiAoaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXSAhPSBjbWRfYmFzZSkgeworCQlod19yZWdzX3QgaHc7CisKIAkJLyogSW5pdGlhbGl6ZSB0aGUgSU8gcmVnaXN0ZXJzICovCi0JCXNnaWlvYzRfaW5pdF9od2lmX3BvcnRzKCZod2lmLT5odywgY21kX2Jhc2UsIGN0bCwgaXJxcG9ydCk7Ci0JCW1lbWNweShod2lmLT5pb19wb3J0cywgaHdpZi0+aHcuaW9fcG9ydHMsCi0JCSAgICAgICBzaXplb2YgKGh3aWYtPmlvX3BvcnRzKSk7CisJCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworCQlzZ2lpb2M0X2luaXRfaHdpZl9wb3J0cygmaHcsIGNtZF9iYXNlLCBjdGwsIGlycXBvcnQpOworCQltZW1jcHkoaHdpZi0+aW9fcG9ydHMsIGh3LmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKIAkJaHdpZi0+bm9wcm9iZSA9ICFod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdOwogCX0KIApAQCAtNjgwLDExICs2ODIsMTAgQEAKIAogCWlkZV9pbml0X3NnaWlvYzQoaHdpZik7CiAKLQlpZiAocHJvYmVfaHdpZl9pbml0KGh3aWYpKQotCQlyZXR1cm4gLUVJTzsKKwlpZHhbMF0gPSBod2lmLT5pbmRleDsKIAotCS8qIENyZWF0ZSAvcHJvYy9pZGUgZW50cmllcyAqLwotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWYgKGlkZV9kZXZpY2VfYWRkKGlkeCkpCisJCXJldHVybiAtRUlPOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OTIsMTQgKzY5MywxMiBAQAogc3RhdGljIHVuc2lnbmVkIGludCBfX2RldmluaXQKIHBjaV9pbml0X3NnaWlvYzQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQl1bnNpZ25lZCBpbnQgY2xhc3NfcmV2OwogCWludCByZXQ7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzc19yZXYpOwotCWNsYXNzX3JldiAmPSAweGZmOwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBJREUgY29udHJvbGxlciBhdCBQQ0kgc2xvdCAlcywgcmV2aXNpb24gJWRcbiIsCi0JCQkgRFJWX05BTUUsIHBjaV9uYW1lKGRldiksIGNsYXNzX3Jldik7Ci0JaWYgKGNsYXNzX3JldiA8IElPQzRfU1VQUE9SVEVEX0ZJUk1XQVJFX1JFVikgeworCQkJIERSVl9OQU1FLCBwY2lfbmFtZShkZXYpLCBkZXYtPnJldmlzaW9uKTsKKworCWlmIChkZXYtPnJldmlzaW9uIDwgSU9DNF9TVVBQT1JURURfRklSTVdBUkVfUkVWKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiU2tpcHBpbmcgJXMgSURFIGNvbnRyb2xsZXIgaW4gc2xvdCAlczogIgogCQkJCSJmaXJtd2FyZSBpcyBvYnNvbGV0ZSAtIHBsZWFzZSB1cGdyYWRlIHRvICIKIAkJCQkicmV2aXNpb240NiBvciBoaWdoZXJcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwppbmRleCA4NWQwYWZkLi42ZDk5NDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogbGludXgvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwkJVmVyc2lvbiAxLjE2CUp1bCAxMyAyMDA3CisgKiBsaW51eC9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCQlWZXJzaW9uIDEuMTgJT2N0IDE4IDIwMDcKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMglBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDAzCQlSZWQgSGF0IDxhbGFuQHJlZGhhdC5jb20+CkBAIC0yNiw3ICsyNiw3IEBACiAgKgogICoJSWYgeW91IGhhdmUgc3RyYW5nZSBwcm9ibGVtcyB3aXRoIG5WaWRpYSBjaGlwc2V0IHN5c3RlbXMgcGxlYXNlCiAgKglzZWUgdGhlIFNJIHN1cHBvcnQgZG9jdW1lbnRhdGlvbiBhbmQgdXBkYXRlIHlvdXIgc3lzdGVtIEJJT1MKLSAqCWlmIG5lY2Nlc3NhcnkKKyAqCWlmIG5lY2Vzc2FyeQogICoKICAqICBUaGUgRGVsbCBEUkFDNCBoYXMgc29tZSBpbnRlcmVzdGluZyBmZWF0dXJlcyBpbmNsdWRpbmcgZWZmZWN0aXZlbHkgaG90CiAgKiAgdW5wbHVnZ2luZy9yZXBsdWdnaW5nIHRoZSB2aXJ0dWFsIENEIGludGVyZmFjZSB3aGVuIHRoZSBEUkFDIGlzIHJlc2V0LgpAQCAtNTcsOCArNTcsOCBAQAogIAogc3RhdGljIGludCBwZGV2X2lzX3NhdGEoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3dpdGNoKHBkZXYtPmRldmljZSkKLQl7CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1NBVEEKKwlzd2l0Y2gocGRldi0+ZGV2aWNlKSB7CiAJCWNhc2UgUENJX0RFVklDRV9JRF9TSUlfMzExMjoKIAkJY2FzZSBQQ0lfREVWSUNFX0lEX1NJSV8xMjEwU0E6CiAJCQlyZXR1cm4gMTsKQEAgLTY2LDkgKzY2LDEwIEBACiAJCQlyZXR1cm4gMDsKIAl9CiAJQlVHKCk7CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KLSAKKwogLyoqCiAgKglpc19zYXRhCQkJLQljaGVjayBpZiBod2lmIGlzIFNBVEEKICAqCUBod2lmOglpbnRlcmZhY2UgdG8gY2hlY2sKQEAgLTEzNiw3ICsxMzcsNyBAQAogICoJU0kzMTEyIFNBVEEgY29udHJvbGxlciBsaWZlIGlzIGEgYml0IHNpbXBsZXIuCiAgKi8KIAotc3RhdGljIHU4IHNpbF91ZG1hX2ZpbHRlcihpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgdTggc2lsX3BhdGFfdWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIGJhc2UgPSAodW5zaWduZWQgbG9uZykgaHdpZi0+aHdpZl9kYXRhOwpAQCAtMTQ3LDIzICsxNDgsMjMgQEAKIAllbHNlCiAJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGh3aWYtPnBjaV9kZXYsIDB4OEEsICZzY3NjKTsKIAotCWlmIChpc19zYXRhKGh3aWYpKSB7Ci0JCW1hc2sgPSBzdHJzdHIoZHJpdmUtPmlkLT5tb2RlbCwgIk1heHRvciIpID8gMHgzZiA6IDB4N2Y7Ci0JCWdvdG8gb3V0OwotCX0KLQogCWlmICgoc2NzYyAmIDB4MzApID09IDB4MTApCS8qIDEzMyAqLwotCQltYXNrID0gMHg3ZjsKKwkJbWFzayA9IEFUQV9VRE1BNjsKIAllbHNlIGlmICgoc2NzYyAmIDB4MzApID09IDB4MjApCS8qIDJ4UENJICovCi0JCW1hc2sgPSAweDdmOworCQltYXNrID0gQVRBX1VETUE2OwogCWVsc2UgaWYgKChzY3NjICYgMHgzMCkgPT0gMHgwMCkJLyogMTAwICovCi0JCW1hc2sgPSAweDNmOworCQltYXNrID0gQVRBX1VETUE1OwogCWVsc2UgCS8qIERpc2FibGVkID8gKi8KIAkJQlVHKCk7Ci1vdXQ6CisKIAlyZXR1cm4gbWFzazsKIH0KIAorc3RhdGljIHU4IHNpbF9zYXRhX3VkbWFfZmlsdGVyKGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlyZXR1cm4gc3Ryc3RyKGRyaXZlLT5pZC0+bW9kZWwsICJNYXh0b3IiKSA/IEFUQV9VRE1BNSA6IEFUQV9VRE1BNjsKK30KKwogLyoqCiAgKglzaWxfc2V0X3Bpb19tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgUElPIG1vZGUKICAqCUBkcml2ZTogZHJpdmUKQEAgLTE4MCw3ICsxODEsNyBAQAogCWNvbnN0IHUxNiBkYXRhX3NwZWVkW10JPSB7IDB4MzI4YSwgMHgyMjgzLCAweDExMDQsIDB4MTBjMywgMHgxMGMxIH07CiAKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JaWRlX2RyaXZlX3QgKnBhaXIJPSAmaHdpZi0+ZHJpdmVzW2RyaXZlLT5kbiBeIDFdOworCWlkZV9kcml2ZV90ICpwYWlyCT0gaWRlX2dldF9wYWlyZWRfZHJpdmUoZHJpdmUpOwogCXUzMiBzcGVlZHQJCT0gMDsKIAl1MTYgc3BlZWRwCQk9IDA7CiAJdW5zaWduZWQgbG9uZyBhZGRyCT0gc2lpbWFnZV9zZWxkZXYoZHJpdmUsIDB4MDQpOwpAQCAtMzQwLDEwICszNDEsMTEgQEAKIHN0YXRpYyBpbnQgc2lpbWFnZV9tbWlvX2lkZV9kbWFfdGVzdF9pcnEgKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7Ci0JdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgYWRkcgk9IHNpaW1hZ2Vfc2VscmVnKGh3aWYsIDB4MSk7CiAKIAlpZiAoU0FUQV9FUlJPUl9SRUcpIHsKKwkJdW5zaWduZWQgbG9uZyBiYXNlID0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOworCiAJCXUzMiBleHRfc3RhdCA9IHJlYWRsKCh2b2lkIF9faW9tZW0gKikoYmFzZSArIDB4MTApKTsKIAkJdTggd2F0Y2hkb2cgPSAwOwogCQlpZiAoZXh0X3N0YXQgJiAoKGh3aWYtPmNoYW5uZWwpID8gMHg0MCA6IDB4MTApKSB7CkBAIC0zNzYsNyArMzc4LDcgQEAKIH0KIAogLyoqCi0gKglzaWltYWdlX2J1c3Byb2MJCS0JYnVzIGlzb2xhdGlvbiBpb2N0bAorICoJc2lsX3NhdGFfYnVzcHJvYwktCWJ1cyBpc29sYXRpb24gSU9DVEwKICAqCUBkcml2ZTogZHJpdmUgdG8gaXNvbGF0ZS9yZXN0b3JlCiAgKglAc3RhdGU6IGJ1cyBzdGF0ZSB0byBzZXQKICAqCkBAIC0zODQsOCArMzg2LDggQEAKICAqCVNBVEEgY29udHJvbGxlciB0aGUgd29yayByZXF1aXJlZCBpcyBxdWl0ZSBsaW1pdGVkLCB3ZSAKICAqCWp1c3QgaGF2ZSB0byBjbGVhbiB1cCB0aGUgc3RhdGlzdGljcwogICovCi0gCi1zdGF0aWMgaW50IHNpaW1hZ2VfYnVzcHJvYyAoaWRlX2RyaXZlX3QgKiBkcml2ZSwgaW50IHN0YXRlKQorCitzdGF0aWMgaW50IHNpbF9zYXRhX2J1c3Byb2MoaWRlX2RyaXZlX3QgKiBkcml2ZSwgaW50IHN0YXRlKQogewogCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKIAl1MzIgc3RhdF9jb25maWcJCT0gMDsKQEAgLTQxNywxNCArNDE5LDE0IEBACiB9CiAKIC8qKgotICoJc2lpbWFnZV9yZXNldF9wb2xsCS0Jd2FpdCBmb3Igc2F0YSByZXNldAorICoJc2lsX3NhdGFfcmVzZXRfcG9sbAktCXdhaXQgZm9yIFNBVEEgcmVzZXQKICAqCUBkcml2ZTogZHJpdmUgd2UgYXJlIHJlc2V0dGluZwogICoKICAqCVBvbGwgdGhlIFNBVEEgcGh5IGFuZCBzZWUgd2hldGhlciBpdCBoYXMgY29tZSBiYWNrIGZyb20gdGhlIGRlYWQKICAqCXlldC4KICAqLwotIAotc3RhdGljIGludCBzaWltYWdlX3Jlc2V0X3BvbGwgKGlkZV9kcml2ZV90ICpkcml2ZSkKKworc3RhdGljIGludCBzaWxfc2F0YV9yZXNldF9wb2xsKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZiAoU0FUQV9TVEFUVVNfUkVHKSB7CiAJCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKQEAgLTQzNiwyNyArNDM4LDIyIEBACiAJCQlIV0dST1VQKGRyaXZlKS0+cG9sbGluZyA9IDA7CiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCX0KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIDA7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qKgotICoJc2lpbWFnZV9wcmVfcmVzZXQJLQlyZXNldCBob29rCisgKglzaWxfc2F0YV9wcmVfcmVzZXQJLQlyZXNldCBob29rCiAgKglAZHJpdmU6IElERSBkZXZpY2UgYmVpbmcgcmVzZXQKICAqCiAgKglGb3IgdGhlIFNBVEEgZGV2aWNlcyB3ZSBuZWVkIHRvIGhhbmRsZSByZWNhbGlicmF0aW9uL2dlb21ldHJ5CiAgKglkaWZmZXJlbnRseQogICovCi0gCi1zdGF0aWMgdm9pZCBzaWltYWdlX3ByZV9yZXNldCAoaWRlX2RyaXZlX3QgKmRyaXZlKQotewotCWlmIChkcml2ZS0+bWVkaWEgIT0gaWRlX2Rpc2spCi0JCXJldHVybjsKIAotCWlmIChpc19zYXRhKEhXSUYoZHJpdmUpKSkKLQl7CitzdGF0aWMgdm9pZCBzaWxfc2F0YV9wcmVfcmVzZXQoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2spIHsKIAkJZHJpdmUtPnNwZWNpYWwuYi5zZXRfZ2VvbWV0cnkgPSAwOwogCQlkcml2ZS0+c3BlY2lhbC5iLnJlY2FsaWJyYXRlID0gMDsKIAl9CkBAIC01MDIsNyArNDk5LDYgQEAKIAkJCWRyaXZlLT5mYWlsdXJlcysrOwogCQl9CiAJfQotCiB9CiAKIC8qKgpAQCAtNjQwLDEzICs2MzYsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fZGV2aW5pdCBpbml0X2NoaXBzZXRfc2lpbWFnZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBjaGFyICpuYW1lKQogewotCXUzMiBjbGFzc19yZXYJPSAwOwotCXU4IHRtcGJ5dGUJPSAwOwotCXU4IEJBNV9FTgk9IDA7CisJdTggcmV2ID0gZGV2LT5yZXZpc2lvbiwgdG1wYnl0ZSA9IDAsIEJBNV9FTiA9IDA7CiAKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKLSAgICAgICAgY2xhc3NfcmV2ICY9IDB4ZmY7Ci0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgKGNsYXNzX3JldikgPyAxIDogMjU1KTsJCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgcmV2ID8gMSA6IDI1NSk7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4OEEsICZCQTVfRU4pOwogCWlmICgoQkE1X0VOICYgMHgwMSkgfHwgKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDUpKSkgewpAQCAtNzYyLDE2ICs3NTQsMTEgQEAKIAkJaHdpZi0+c2F0YV9taXNjW1NBVEFfSUVOX09GRlNFVF0JPSBiYXNlICsgMHgxNDg7CiAJfQogCi0JaHcuaXJxCQkJCT0gaHdpZi0+cGNpX2Rldi0+aXJxOworCW1lbWNweShod2lmLT5pb19wb3J0cywgaHcuaW9fcG9ydHMsIHNpemVvZihod2lmLT5pb19wb3J0cykpOwogCi0JbWVtY3B5KCZod2lmLT5odywgJmh3LCBzaXplb2YoaHcpKTsKLQltZW1jcHkoaHdpZi0+aW9fcG9ydHMsIGh3aWYtPmh3LmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aHcuaW9fcG9ydHMpKTsKKwlod2lmLT5pcnEgPSBkZXYtPmlycTsKIAotCWh3aWYtPmlycQkJCT0gaHcuaXJxOwotCi0gICAgICAgCWJhc2UgPSAodW5zaWduZWQgbG9uZykgYWRkcjsKLQotCWh3aWYtPmRtYV9iYXNlCQkJPSBiYXNlICsgKGNoID8gMHgwOCA6IDB4MDApOworCWh3aWYtPmRtYV9iYXNlID0gKHVuc2lnbmVkIGxvbmcpYWRkciArIChjaCA/IDB4MDggOiAweDAwKTsKIAogCWh3aWYtPm1taW8gPSAxOwogfQpAQCAtODI1LDE5ICs4MTIsMTQgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaW9wc19zaWltYWdlKGlkZV9od2lmX3QgKmh3aWYpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldgk9IGh3aWYtPnBjaV9kZXY7Ci0JdTMyIGNsYXNzX3JldgkJPSAwOwotCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmY2xhc3NfcmV2KTsKLQljbGFzc19yZXYgJj0gMHhmZjsKLQkKIAlod2lmLT5od2lmX2RhdGEgPSBOVUxMOwogCiAJLyogUGVzc2ltYWwgdW50aWwgd2UgZmluaXNoIHByb2JpbmcgKi8KIAlod2lmLT5ycXNpemUgPSAxNTsKIAotCWlmIChwY2lfZ2V0X2RydmRhdGEoZGV2KSA9PSBOVUxMKQorCWlmIChwY2lfZ2V0X2RydmRhdGEoaHdpZi0+cGNpX2RldikgPT0gTlVMTCkKIAkJcmV0dXJuOworCiAJaW5pdF9tbWlvX2lvcHNfc2lpbWFnZShod2lmKTsKIH0KIApAQCAtODczLDM0ICs4NTUsMzIgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl9zaWltYWdlKGlkZV9od2lmX3QgKmh3aWYpCiB7CisJdTggc2F0YSA9IGlzX3NhdGEoaHdpZik7CisKIAlod2lmLT5yZXNldHByb2MgPSAmc2lpbWFnZV9yZXNldDsKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmc2lsX3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmc2lsX3NldF9kbWFfbW9kZTsKLQlod2lmLT5yZXNldF9wb2xsID0gJnNpaW1hZ2VfcmVzZXRfcG9sbDsKLQlod2lmLT5wcmVfcmVzZXQgPSAmc2lpbWFnZV9wcmVfcmVzZXQ7Ci0JaHdpZi0+dWRtYV9maWx0ZXIgPSAmc2lsX3VkbWFfZmlsdGVyOwogCi0JaWYoaXNfc2F0YShod2lmKSkgeworCWlmIChzYXRhKSB7CiAJCXN0YXRpYyBpbnQgZmlyc3QgPSAxOwogCi0JCWh3aWYtPmJ1c3Byb2MgICA9ICZzaWltYWdlX2J1c3Byb2M7CisJCWh3aWYtPmJ1c3Byb2MgPSAmc2lsX3NhdGFfYnVzcHJvYzsKKwkJaHdpZi0+cmVzZXRfcG9sbCA9ICZzaWxfc2F0YV9yZXNldF9wb2xsOworCQlod2lmLT5wcmVfcmVzZXQgPSAmc2lsX3NhdGFfcHJlX3Jlc2V0OworCQlod2lmLT51ZG1hX2ZpbHRlciA9ICZzaWxfc2F0YV91ZG1hX2ZpbHRlcjsKIAogCQlpZiAoZmlyc3QpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gInNpaW1hZ2U6IEZvciBmdWxsIFNBVEEgc3VwcG9ydCB5b3Ugc2hvdWxkIHVzZSB0aGUgbGliYXRhIHNhdGFfc2lsIG1vZHVsZS5cbiIpOwogCQkJZmlyc3QgPSAwOwogCQl9Ci0JfQotCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gMTsKKwl9IGVsc2UKKwkJaHdpZi0+dWRtYV9maWx0ZXIgPSAmc2lsX3BhdGFfdWRtYV9maWx0ZXI7CiAKIAlpZiAoaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKIAkJcmV0dXJuOwogCi0JaHdpZi0+dWx0cmFfbWFzayA9IDB4N2Y7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0KLQlpZiAoIWlzX3NhdGEoaHdpZikpCi0JCWh3aWYtPmF0YXBpX2RtYSA9IDE7CisJaWYgKHNhdGEpCisJCWh3aWYtPmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX05PX0FUQVBJX0RNQTsKIAogCWlmIChod2lmLT5jYmwgIT0gQVRBX0NCTF9QQVRBNDBfU0hPUlQpCiAJCWh3aWYtPmNibCA9IGF0YTY2X3NpaW1hZ2UoaHdpZik7CkBAIC05MTksMTIgKzg5OSwxMyBAQAogCQkuaW5pdF9pb3BzCT0gaW5pdF9pb3BzX3NpaW1hZ2UsCVwKIAkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zaWltYWdlLAlcCiAJCS5maXh1cAkJPSBzaWltYWdlX2ZpeHVwLAlcCi0JCS5hdXRvZG1hCT0gQVVUT0RNQSwJCVwKLQkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCQlcCisJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX0JPT1RBQkxFLAlcCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAkJXAorCQkubXdkbWFfbWFzawk9IEFUQV9NV0RNQTIsCQlcCisJCS51ZG1hX21hc2sJPSBBVEFfVURNQTYsCQlcCiAJfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzaWltYWdlX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzaWltYWdlX2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKIAkvKiAwICovIERFQ0xBUkVfU0lJX0RFVigiU2lJNjgwIiksCiAJLyogMSAqLyBERUNMQVJFX1NJSV9ERVYoIlNpSTMxMTIgU2VyaWFsIEFUQSIpLAogCS8qIDIgKi8gREVDTEFSRV9TSUlfREVWKCJBZGFwdGVjIEFBUi0xMjEwU0EiKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKaW5kZXggNWE1NGUyZS4uNmI3YmI1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlpZiAobW9kZSA+PSBYRkVSX01XX0RNQV8wKSB7CiAJCXQxICY9IH4weDA0OwkvKiBkaXNhYmxlIFVETUEgKi8KIAkJaWR4ID0gbW9kZSAtIFhGRVJfTVdfRE1BXzAgKyA1OwotCX0KKwl9IGVsc2UKIAkJaWR4ID0gbW9kZSAtIFhGRVJfUElPXzA7CiAJdDEgfD0gaW5pX3RpbWVfdmFsdWVbY2xrXVtpZHhdIDw8IDEyOwogCXQxIHw9IGFjdF90aW1lX3ZhbHVlW2Nsa11baWR4XSA8PCAxNjsKQEAgLTU2NCwzOCArNTY0LDMwIEBACiB7CiAJdTggdWRtYV9yYXRlc1tdID0geyAweDAwLCAweDAwLCAweDA3LCAweDFmLCAweDNmLCAweDNmLCAweDdmLCAweDdmIH07CiAKLQlpZiAoIWh3aWYtPmlycSkKLQkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0KIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmc2lzX3NldF9waW9fbW9kZTsKIAlod2lmLT5zZXRfZG1hX21vZGUgPSAmc2lzX3NldF9kbWFfbW9kZTsKIAogCWlmIChjaGlwc2V0X2ZhbWlseSA+PSBBVEFfMTMzKQogCQlod2lmLT51ZG1hX2ZpbHRlciA9IHNpczU1MTNfYXRhMTMzX3VkbWFfZmlsdGVyOwogCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0KIAlod2lmLT51bHRyYV9tYXNrID0gdWRtYV9yYXRlc1tjaGlwc2V0X2ZhbWlseV07Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7CiAKIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQlod2lmLT5jYmwgPSBhdGE2Nl9zaXM1NTEzKGh3aWYpOwogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzaXM1NTEzX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzaXM1NTEzX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiU0lTNTUxMyIsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9zaXM1NTEzLAogCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfc2lzNTUxMywKLQkuYXV0b2RtYQk9IE5PQVVUT0RNQSwKIAkuZW5hYmxlYml0cwk9IHt7MHg0YSwweDAyLDB4MDJ9LCB7MHg0YSwweDA0LDB4MDR9fSwKLQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19MRUdBQ1lfSVJRUyB8IElERV9IRkxBR19OT19BVVRPRE1BIHwKKwkJCSAgSURFX0hGTEFHX0JPT1RBQkxFLAogCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczU1MTNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NsODJjMTA1LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYwppbmRleCA3NzFlZmI4Li4xNDdkNzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2w4MmMxMDUuYwpAQCAtMzYxLDE5ICszNjEsNiBAQAogCWh3aWYtPnNlbGVjdHByb2MJPSAmc2w4MmMxMDVfc2VsZWN0cHJvYzsKIAlod2lmLT5yZXNldHByb2MgCT0gJnNsODJjMTA1X3Jlc2V0cHJvYzsKIAotCS8qCi0JICogV2Ugc3VwcG9ydCAzMi1iaXQgSS9PIG9uIHRoaXMgaW50ZXJmYWNlLCBhbmQKLQkgKiBpdCBkb2Vzbid0IGhhdmUgcHJvYmxlbXMgd2l0aCBpbnRlcnJ1cHRzLgotCSAqLwotCWh3aWYtPmRyaXZlc1swXS5pb18zMmJpdCA9IGh3aWYtPmRyaXZlc1sxXS5pb18zMmJpdCA9IDE7Ci0JaHdpZi0+ZHJpdmVzWzBdLnVubWFzayAgID0gaHdpZi0+ZHJpdmVzWzFdLnVubWFzayAgID0gMTsKLQotCS8qCi0JICogV2UgYWx3YXlzIGF1dG90dW5lIFBJTywgIHRoaXMgaXMgZG9uZSBiZWZvcmUgRE1BIGlzIGNoZWNrZWQsCi0JICogc28gdGhlcmUncyBubyByaXNrIG9mIGFjY2lkZW50YWxseSBkaXNhYmxpbmcgRE1BCi0JICovCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gaHdpZi0+ZHJpdmVzWzFdLmF1dG90dW5lID0gMTsKLQogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCiAJCXJldHVybjsKIApAQCAtMzg4LDggKzM3NSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlod2lmLT5hdGFwaV9kbWEgID0gMTsKLQlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKKwlod2lmLT5td2RtYV9tYXNrID0gQVRBX01XRE1BMjsKIAogCWh3aWYtPmlkZV9kbWFfb24JCT0gJnNsODJjMTA1X2lkZV9kbWFfb247CiAJaHdpZi0+ZG1hX29mZl9xdWlldGx5CQk9ICZzbDgyYzEwNV9kbWFfb2ZmX3F1aWV0bHk7CkBAIC00MDEsMTMgKzM4NywxNSBAQAogCQlod2lmLT5zZXJpYWxpemVkID0gaHdpZi0+bWF0ZS0+c2VyaWFsaXplZCA9IDE7CiB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IHNsODJjMTA1X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzbDgyYzEwNV9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gIlc4MkMxMDUiLAogCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfc2w4MmMxMDUsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zbDgyYzEwNSwKLQkuYXV0b2RtYQk9IE5PQVVUT0RNQSwKIAkuZW5hYmxlYml0cwk9IHt7MHg0MCwweDAxLDB4MDF9LCB7MHg0MCwweDEwLDB4MTB9fSwKLQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19JT18zMkJJVCB8CisJCQkgIElERV9IRkxBR19VTk1BU0tfSVJRUyB8CisJCQkgIElERV9IRkxBR19OT19BVVRPRE1BIHwKKwkJCSAgSURFX0hGTEFHX0JPT1RBQkxFLAogCS5waW9fbWFzawk9IEFUQV9QSU81LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMgYi9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYwppbmRleCBmYThkZjZkLi5lYjQ0NDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2xjOTBlNjYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMJVmVyc2lvbiAwLjE4CUF1ZyA5LCAyMDA3CisgKiAgbGludXgvZHJpdmVycy9pZGUvcGNpL3NsYzkwZTY2LmMJVmVyc2lvbiAwLjE5CVNlcCAyNCwgMjAwNwogICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA3IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgpAQCAtMjEsNiArMjEsOCBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc2xjOTBlNjZfbG9jayk7CisKIHN0YXRpYyB2b2lkIHNsYzkwZTY2X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CkBAIC00MCw3ICs0Miw3IEBACiAJCQkJCXsgMiwgMSB9LAogCQkJCQl7IDIsIDMgfSwgfTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZzbGM5MGU2Nl9sb2NrLCBmbGFncyk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBtYXN0ZXJfcG9ydCwgJm1hc3Rlcl9kYXRhKTsKIAogCWlmIChwaW8gPiAxKQpAQCAtNzEsNyArNzMsNyBAQAogCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIG1hc3Rlcl9wb3J0LCBtYXN0ZXJfZGF0YSk7CiAJaWYgKGlzX3NsYXZlKQogCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBzbGF2ZV9wb3J0LCBzbGF2ZV9kYXRhKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZGVfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNsYzkwZTY2X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2xjOTBlNjZfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCkBAIC0xMzMsMzcgKzEzNSwyOCBAQAogCXU4IHJlZzQ3ID0gMDsKIAl1OCBtYXNrID0gaHdpZi0+Y2hhbm5lbCA/IDB4MDEgOiAweDAyOyAgLyogYml0MDpQcmltYXJ5ICovCiAKLQlpZiAoIWh3aWYtPmlycSkKLQkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0KIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmc2xjOTBlNjZfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZzbGM5MGU2Nl9zZXRfZG1hX21vZGU7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShod2lmLT5wY2lfZGV2LCAweDQ3LCAmcmVnNDcpOwogCi0JaHdpZi0+ZHJpdmVzWzBdLmF1dG90dW5lID0gMTsKLQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOwotCiAJaWYgKGh3aWYtPmRtYV9iYXNlID09IDApCiAJCXJldHVybjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4MWY7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDY7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDQ7Ci0KIAlpZiAoaHdpZi0+Y2JsICE9IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQkvKiBiaXRbMCgxKV06IDA6ODAsIDE6NDAgKi8KIAkJaHdpZi0+Y2JsID0gKHJlZzQ3ICYgbWFzaykgPyBBVEFfQ0JMX1BBVEE0MCA6IEFUQV9DQkxfUEFUQTgwOwogfQogCi1zdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBzbGM5MGU2Nl9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gc2xjOTBlNjZfY2hpcHNldCBfX2RldmluaXRkYXRhID0gewogCS5uYW1lCQk9ICJTTEM5MEU2NiIsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9zbGM5MGU2NiwKLQkuYXV0b2RtYQk9IEFVVE9ETUEsCiAJLmVuYWJsZWJpdHMJPSB7ezB4NDEsMHg4MCwweDgwfSwgezB4NDMsMHg4MCwweDgwfX0sCi0JLmJvb3RhYmxlCT0gT05fQk9BUkQsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTEVHQUNZX0lSUVMgfCBJREVfSEZMQUdfQk9PVEFCTEUsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyX09OTFksCisJLm13ZG1hX21hc2sJPSBBVEFfTVdETUExMl9PTkxZLAorCS51ZG1hX21hc2sJPSBBVEFfVURNQTQsCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzbGM5MGU2Nl9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCmluZGV4IGRlNjJkYjUuLmE2NmViZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIGRyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCVZlcnNpb24gMS4wMAlEZWMgMTIsIDIwMDYKKyAqIGRyaXZlcnMvaWRlL3BjaS90Yzg2YzAwMS5jCVZlcnNpb24gMS4wMQlTZXAgNSwgMjAwNwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiBUb3NoaWJhIENvcnBvcmF0aW9uCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KQEAgLTE3LDcgKzE3LDcgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJdW5zaWduZWQgbG9uZyBzY3JfcG9ydAk9IGh3aWYtPmNvbmZpZ19kYXRhICsgKGRyaXZlLT5kbiA/IDB4MDIgOiAweDAwKTsKLQl1MTYgbW9kZSwgc2NyCQk9IGh3aWYtPklOVyhzY3JfcG9ydCk7CisJdTE2IG1vZGUsIHNjcgkJPSBpbncoc2NyX3BvcnQpOwogCiAJc3dpdGNoIChzcGVlZCkgewogCQljYXNlIFhGRVJfVURNQV80Ogltb2RlID0gMHgwMGMwOyBicmVhazsKQEAgLTY1LDcgKzY1LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmCT0gSFdJRihkcml2ZSk7CiAJaWRlX2V4cGlyeV90ICpleHBpcnkJPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCWlkZV9od2dyb3VwX3QgKmh3Z3JvdXAJPSBIV0dST1VQKGRyaXZlKTsKLQl1OCBkbWFfc3RhdAkJPSBod2lmLT5JTkIoaHdpZi0+ZG1hX3N0YXR1cyk7CisJdTggZG1hX3N0YXQJCT0gaW5iKGh3aWYtPmRtYV9zdGF0dXMpOwogCiAJLyogUmVzdG9yZSBhIGhpZ2hlciBsZXZlbCBkcml2ZXIncyBleHBpcnkgaGFuZGxlciBmaXJzdC4gKi8KIAlod2dyb3VwLT5leHBpcnkJPSBleHBpcnk7CkBAIC03Myw3ICs3Myw3IEBACiAJaWYgKChkbWFfc3RhdCAmIDUpID09IDEpIHsJLyogRE1BIGFjdGl2ZSBhbmQgbm8gaW50ZXJydXB0ICovCiAJCXVuc2lnbmVkIGxvbmcgc2NfYmFzZQk9IGh3aWYtPmNvbmZpZ19kYXRhOwogCQl1bnNpZ25lZCBsb25nIHR3Y3JfcG9ydAk9IHNjX2Jhc2UgKyAoZHJpdmUtPmRuID8gMHgwNiA6IDB4MDQpOwotCQl1OCBkbWFfY21kCQk9IGh3aWYtPklOQihod2lmLT5kbWFfY29tbWFuZCk7CisJCXU4IGRtYV9jbWQJCT0gaW5iKGh3aWYtPmRtYV9jb21tYW5kKTsKIAogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRE1BIGludGVycnVwdCBwb3NzaWJseSBzdHVjaywgIgogCQkgICAgICAgImF0dGVtcHRpbmcgcmVjb3ZlcnkuLi5cbiIsIGRyaXZlLT5uYW1lKTsKQEAgLTEzNSw3ICsxMzUsNyBAQAogCXUxNiBzY3IxOwogCiAJLyogU3lzdGVtIENvbnRyb2wgMSBSZWdpc3RlciBiaXQgMTEgKEFUQSBIYXJkIFJlc2V0KSByZWFkICovCi0Jc2NyMSA9IGh3aWYtPklOVyhzY19iYXNlICsgMHgwMCk7CisJc2NyMSA9IGludyhzY19iYXNlICsgMHgwMCk7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJCWNhc2UgQlVTU1RBVEVfT046CkBAIC0xNjUsNyArMTY1LDcgQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBpbml0X2h3aWZfdGM4NmMwMDEoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAl1bnNpZ25lZCBsb25nIHNjX2Jhc2UJPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaHdpZi0+cGNpX2RldiwgNSk7Ci0JdTE2IHNjcjEJCT0gaHdpZi0+SU5XKHNjX2Jhc2UgKyAweDAwKTs7CisJdTE2IHNjcjEJCT0gaW53KHNjX2Jhc2UgKyAweDAwKTsKIAogCS8qIFN5c3RlbSBDb250cm9sIDEgUmVnaXN0ZXIgYml0IDE1IChTb2Z0IFJlc2V0KSBzZXQgKi8KIAlvdXR3KHNjcjEgfCAgMHg4MDAwLCBzY19iYXNlICsgMHgwMCk7CkBAIC0xODQsOCArMTg0LDYgQEAKIAogCWh3aWYtPmJ1c3Byb2MJPSAmdGM4NmMwMDFfYnVzcHJvYzsKIAotCWh3aWYtPmRyaXZlc1swXS5hdXRvdHVuZSA9IGh3aWYtPmRyaXZlc1sxXS5hdXRvdHVuZSA9IDE7Ci0KIAlpZiAoIWh3aWYtPmRtYV9iYXNlKQogCQlyZXR1cm47CiAKQEAgLTE5OCwxMCArMTk2LDYgQEAKIAkvKiBTZWN0b3IgQ291bnQgUmVnaXN0ZXIgbGltaXQgKi8KIAlod2lmLT5ycXNpemUJID0gMHhmZmZmOwogCi0JaHdpZi0+YXRhcGlfZG1hICA9IDE7Ci0JaHdpZi0+dWx0cmFfbWFzayA9IDB4MWY7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0KIAlod2lmLT5kbWFfc3RhcnQgCT0gJnRjODZjMDAxX2RtYV9zdGFydDsKIAogCWlmIChod2lmLT5jYmwgIT0gQVRBX0NCTF9QQVRBNDBfU0hPUlQpIHsKQEAgLTIwOSw3ICsyMDMsNyBAQAogCQkgKiBTeXN0ZW0gQ29udHJvbCAgMSBSZWdpc3RlciBiaXQgMTMgKFBESUFHTik6CiAJCSAqIDA9ODAtcGluIGNhYmxlLCAxPTQwLXBpbiBjYWJsZQogCQkgKi8KLQkJc2NyMSA9IGh3aWYtPklOVyhzY19iYXNlICsgMHgwMCk7CisJCXNjcjEgPSBpbncoc2NfYmFzZSArIDB4MDApOwogCQlod2lmLT5jYmwgPSAoc2NyMSAmIDB4MjAwMCkgPyBBVEFfQ0JMX1BBVEE0MCA6IEFUQV9DQkxfUEFUQTgwOwogCX0KIH0KQEAgLTIyNCwxNCArMjE4LDE0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgdGM4NmMwMDFfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHRjODZjMDAxX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiVEM4NkMwMDEiLAogCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfdGM4NmMwMDEsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl90Yzg2YzAwMSwKLQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAotCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHX1NJTkdMRSwKKwkuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUgfCBJREVfSEZMQUdfT0ZGX0JPQVJELAogCS5waW9fbWFzawk9IEFUQV9QSU80LAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKKwkudWRtYV9tYXNrCT0gQVRBX1VETUE0LAogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQgdGM4NmMwMDFfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdHJpZmxleC5jCmluZGV4IDQwNzVjOTAuLmEyMjdjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3RyaWZsZXguYwpAQCAtMTAwLDIyICsxMDAsMTYgQEAKIHsKIAlod2lmLT5zZXRfcGlvX21vZGUgPSAmdHJpZmxleF9zZXRfcGlvX21vZGU7CiAJaHdpZi0+c2V0X2RtYV9tb2RlID0gJnRyaWZsZXhfc2V0X21vZGU7Ci0KLQlpZiAoaHdpZi0+ZG1hX2Jhc2UgPT0gMCkKLQkJcmV0dXJuOwotCi0JaHdpZi0+YXRhcGlfZG1hICA9IDE7Ci0JaHdpZi0+bXdkbWFfbWFzayA9IDB4MDc7Ci0JaHdpZi0+c3dkbWFfbWFzayA9IDB4MDc7CiB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IHRyaWZsZXhfZGV2aWNlIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gdHJpZmxleF9kZXZpY2UgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiVFJJRkxFWCIsCiAJLmluaXRfaHdpZgk9IGluaXRfaHdpZl90cmlmbGV4LAotCS5hdXRvZG1hCT0gQVVUT0RNQSwKIAkuZW5hYmxlYml0cwk9IHt7MHg4MCwgMHgwMSwgMHgwMX0sIHsweDgwLCAweDAyLCAweDAyfX0sCi0JLmJvb3RhYmxlCT0gT05fQk9BUkQsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfQk9PVEFCTEUsCiAJLnBpb19tYXNrCT0gQVRBX1BJTzQsCisJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRyaWZsZXhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMgYi9kcml2ZXJzL2lkZS9wY2kvdHJtMjkwLmMKaW5kZXggZTNkOTQzYS4uNTAxMWJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3RybTI5MC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS90cm0yOTAuYwpAQCAtMjUwLDggKzI1MCw2IEBACiAJdTggcmVnID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gaHdpZi0+cGNpX2RldjsKIAotCWh3aWYtPm5vX2xiYTQ4ID0gMTsKLQlod2lmLT5jaGlwc2V0ID0gaWRlX3RybTI5MDsKIAljZmdiYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgNCk7CiAJaWYgKChkZXYtPmNsYXNzICYgNSkgJiYgY2ZnYmFzZSkgewogCQlod2lmLT5jb25maWdfZGF0YSA9IGNmZ2Jhc2U7CkBAIC0zMjEsMTQgKzMxOSwxNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpZGVfcGNpX2RldmljZV90IHRybTI5MF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gdHJtMjkwX2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZQkJPSAiVFJNMjkwIiwKIAkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3RybTI5MCwKLQkuYXV0b2RtYQk9IE5PQVVUT0RNQSwKLQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKKwkuY2hpcHNldAk9IGlkZV90cm0yOTAsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfTk9fQVRBUElfRE1BIHwKICNpZiAwIC8qIHBsYXkgaXQgc2FmZSBmb3Igbm93ICovCi0JLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BLAorCQkJICBJREVfSEZMQUdfVFJVU1RfQklPU19GT1JfRE1BIHwKICNlbmRpZgorCQkJICBJREVfSEZMQUdfTk9fQVVUT0RNQSB8CisJCQkgIElERV9IRkxBR19CT09UQUJMRSB8CisJCQkgIElERV9IRkxBR19OT19MQkE0OCwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRybTI5MF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKaW5kZXggYjI1ZmI2NS4uYTBkM2MxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKgotICogVmVyc2lvbiAzLjQ5CisgKiBWZXJzaW9uIDMuNTAKICAqCiAgKiBWSUEgSURFIGRyaXZlciBmb3IgTGludXguIFN1cHBvcnRlZCBzb3V0aGJyaWRnZXM6CiAgKgpAQCAtNDIyLDY3ICs0MjIsNDAgQEAKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IGluaXRfaHdpZl92aWE4MmN4eHgoaWRlX2h3aWZfdCAqaHdpZikKIHsKLQlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShod2lmLT5wY2lfZGV2KTsKLQlpbnQgaTsKLQogCWh3aWYtPnNldF9waW9fbW9kZSA9ICZ2aWFfc2V0X3Bpb19tb2RlOwogCWh3aWYtPnNldF9kbWFfbW9kZSA9ICZ2aWFfc2V0X2RyaXZlOwogCi0jaWZkZWYgQ09ORklHX1BQQ19DSFJQCi0JaWYobWFjaGluZV9pcyhjaHJwKSAmJiBfY2hycF90eXBlID09IF9DSFJQX1BlZ2Fzb3MpIHsKLQkJaHdpZi0+aXJxID0gaHdpZi0+Y2hhbm5lbCA/IDE1IDogMTQ7Ci0JfQotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCWh3aWYtPmRyaXZlc1tpXS5pb18zMmJpdCA9IDE7Ci0JCWh3aWYtPmRyaXZlc1tpXS51bm1hc2sgPSAodmRldi0+dmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKSA/IDAgOiAxOwotCQlod2lmLT5kcml2ZXNbaV0uYXV0b3R1bmUgPSAxOwotCX0KLQogCWlmICghaHdpZi0+ZG1hX2Jhc2UpCiAJCXJldHVybjsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7Ci0KLQlod2lmLT51bHRyYV9tYXNrID0gdmRldi0+dmlhX2NvbmZpZy0+dWRtYV9tYXNrOwotCWh3aWYtPm13ZG1hX21hc2sgPSAweDA3OwotCWh3aWYtPnN3ZG1hX21hc2sgPSAweDA3OwotCiAJaWYgKGh3aWYtPmNibCAhPSBBVEFfQ0JMX1BBVEE0MF9TSE9SVCkKIAkJaHdpZi0+Y2JsID0gdmlhODJjeHh4X2NhYmxlX2RldGVjdChod2lmKTsKIH0KIAotc3RhdGljIGlkZV9wY2lfZGV2aWNlX3QgdmlhODJjeHh4X2NoaXBzZXRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7CS8qIDAgKi8KLQkJLm5hbWUJCT0gIlZQX0lERSIsCi0JCS5pbml0X2NoaXBzZXQJPSBpbml0X2NoaXBzZXRfdmlhODJjeHh4LAotCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3ZpYTgyY3h4eCwKLQkJLmF1dG9kbWEJPSBOT0FVVE9ETUEsCi0JCS5lbmFibGViaXRzCT0ge3sweDQwLDB4MDIsMHgwMn0sIHsweDQwLDB4MDEsMHgwMX19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVAotCQkJCXwgSURFX0hGTEFHX1BJT19OT19ET1dOR1JBREUKLQkJCQl8IElERV9IRkxBR19QT1NUX1NFVF9NT0RFLAotCQkucGlvX21hc2sJPSBBVEFfUElPNSwKLQl9LHsJLyogMSAqLwotCQkubmFtZQkJPSAiVlBfSURFIiwKLQkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF92aWE4MmN4eHgsCi0JCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfdmlhODJjeHh4LAotCQkuYXV0b2RtYQk9IEFVVE9ETUEsCi0JCS5lbmFibGViaXRzCT0ge3sweDAwLDB4MDAsMHgwMH0sIHsweDAwLDB4MDAsMHgwMH19LAotCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKLQkJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVAotCQkJCXwgSURFX0hGTEFHX1BJT19OT19ET1dOR1JBREUKLQkJCQl8IElERV9IRkxBR19QT1NUX1NFVF9NT0RFLAotCQkucGlvX21hc2sJPSBBVEFfUElPNSwKLQl9CitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gdmlhODJjeHh4X2NoaXBzZXQgX19kZXZpbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiVlBfSURFIiwKKwkuaW5pdF9jaGlwc2V0CT0gaW5pdF9jaGlwc2V0X3ZpYTgyY3h4eCwKKwkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3ZpYTgyY3h4eCwKKwkuZW5hYmxlYml0cwk9IHsgeyAweDQwLCAweDAyLCAweDAyIH0sIHsgMHg0MCwgMHgwMSwgMHgwMSB9IH0sCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfUElPX05PX0JMQUNLTElTVCB8CisJCQkgIElERV9IRkxBR19QSU9fTk9fRE9XTkdSQURFIHwKKwkJCSAgSURFX0hGTEFHX1BPU1RfU0VUX01PREUgfAorCQkJICBJREVfSEZMQUdfSU9fMzJCSVQgfAorCQkJICBJREVfSEZMQUdfQk9PVEFCTEUsCisJLnBpb19tYXNrCT0gQVRBX1BJTzUsCisJLnN3ZG1hX21hc2sJPSBBVEFfU1dETUEyLAorCS5td2RtYV9tYXNrCT0gQVRBX01XRE1BMiwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHZpYV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmlzYSA9IE5VTEw7CiAJc3RydWN0IHZpYV9pc2FfYnJpZGdlICp2aWFfY29uZmlnOworCXU4IGlkeCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBkOworCisJZCA9IHZpYTgyY3h4eF9jaGlwc2V0OworCiAJLyoKIAkgKiBGaW5kIHRoZSBJU0EgYnJpZGdlIGFuZCBjaGVjayB3ZSBrbm93IHdoYXQgaXQgaXMuCiAJICovCkBAIC00OTIsNyArNDY1LDIzIEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlZQX0lERTogVW5rbm93biBWSUEgU291dGhCcmlkZ2UsIGRpc2FibGluZyBETUEuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsICZ2aWE4MmN4eHhfY2hpcHNldHNbaWQtPmRyaXZlcl9kYXRhXSk7CisKKwlpZiAoaWR4ID09IDApCisJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfTk9fQVVUT0RNQTsKKwllbHNlCisJCWQuZW5hYmxlYml0c1sxXS5yZWcgPSBkLmVuYWJsZWJpdHNbMF0ucmVnID0gMDsKKworCWlmICgodmlhX2NvbmZpZy0+ZmxhZ3MgJiBWSUFfTk9fVU5NQVNLKSA9PSAwKQorCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX1VOTUFTS19JUlFTOworCisjaWZkZWYgQ09ORklHX1BQQ19DSFJQCisJaWYgKG1hY2hpbmVfaXMoY2hycCkgJiYgX2NocnBfdHlwZSA9PSBfQ0hSUF9QZWdhc29zKQorCQlkLmhvc3RfZmxhZ3MgfD0gSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTOworI2VuZGlmCisKKwlkLnVkbWFfbWFzayA9IHZpYV9jb25maWctPnVkbWFfbWFzazsKKworCXJldHVybiBpZGVfc2V0dXBfcGNpX2RldmljZShkZXYsICZkKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZpYV9wY2lfdGJsW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wcGMvbXBjOHh4LmMgYi9kcml2ZXJzL2lkZS9wcGMvbXBjOHh4LmMKaW5kZXggZGYyZTkyMC4uNWYwZGEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcHBjL21wYzh4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9tcGM4eHguYwpAQCAtMzE2LDggKzMxNiw4IEBACiAKIAlpZGVfaHdpZnNbZGF0YV9wb3J0XS5waW9fbWFzayA9IEFUQV9QSU80OwogCWlkZV9od2lmc1tkYXRhX3BvcnRdLnNldF9waW9fbW9kZSA9IG04eHhfaWRlX3NldF9waW9fbW9kZTsKKwlpZGVfaHdpZnNbZGF0YV9wb3J0XS5hY2tfaW50ciA9IChpZGVfYWNrX2ludHJfdCAqKWlkZV9pbnRlcnJ1cHRfYWNrOwogCi0JaHctPmFja19pbnRyID0gKGlkZV9hY2tfaW50cl90ICopIGlkZV9pbnRlcnJ1cHRfYWNrOwogCS8qIEVuYWJsZSBIYXJkZGlzayBJbnRlcnJ1cHQsCiAJICogYW5kIG1ha2UgaXQgZWRnZSBzZW5zaXRpdmUKIAkgKi8KQEAgLTQwMiw4ICs0MDIsOCBAQAogCiAJaWRlX2h3aWZzW2RhdGFfcG9ydF0ucGlvX21hc2sgPSBBVEFfUElPNDsKIAlpZGVfaHdpZnNbZGF0YV9wb3J0XS5zZXRfcGlvX21vZGUgPSBtOHh4X2lkZV9zZXRfcGlvX21vZGU7CisJaWRlX2h3aWZzW2RhdGFfcG9ydF0uYWNrX2ludHIgPSAoaWRlX2Fja19pbnRyX3QgKilpZGVfaW50ZXJydXB0X2FjazsKIAotCWh3LT5hY2tfaW50ciA9IChpZGVfYWNrX2ludHJfdCAqKSBpZGVfaW50ZXJydXB0X2FjazsKIAkvKiBFbmFibGUgSGFyZGRpc2sgSW50ZXJydXB0LAogCSAqIGFuZCBtYWtlIGl0IGVkZ2Ugc2Vuc2l0aXZlCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwppbmRleCAxZDI1YTM0Li44MTZiNTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKQEAgLTEwMzksNiArMTAzOSw4IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBtaWYtPm5vZGU7CiAJY29uc3QgaW50ICpiaWRwOworCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OworCWh3X3JlZ3NfdCBodzsKIAogCXBtaWYtPmNhYmxlXzgwID0gMDsKIAlwbWlmLT5icm9rZW5fZG1hID0gcG1pZi0+YnJva2VuX2RtYV93YXJuID0gMDsKQEAgLTExMjQsOCArMTEyNiw5IEBACiAJLyogVGVsbCBjb21tb24gY29kZSBfbm90XyB0byBtZXNzIHdpdGggcmVzb3VyY2VzICovCiAJaHdpZi0+bW1pbyA9IDE7CiAJaHdpZi0+aHdpZl9kYXRhID0gcG1pZjsKLQlwbWFjX2lkZV9pbml0X2h3aWZfcG9ydHMoJmh3aWYtPmh3LCBwbWlmLT5yZWdiYXNlLCAwLCAmaHdpZi0+aXJxKTsKLQltZW1jcHkoaHdpZi0+aW9fcG9ydHMsIGh3aWYtPmh3LmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKKwltZW1zZXQoJmh3LCAwLCBzaXplb2YoaHcpKTsKKwlwbWFjX2lkZV9pbml0X2h3aWZfcG9ydHMoJmh3LCBwbWlmLT5yZWdiYXNlLCAwLCAmaHdpZi0+aXJxKTsKKwltZW1jcHkoaHdpZi0+aW9fcG9ydHMsIGh3LmlvX3BvcnRzLCBzaXplb2YoaHdpZi0+aW9fcG9ydHMpKTsKIAlod2lmLT5jaGlwc2V0ID0gaWRlX3BtYWM7CiAJaHdpZi0+bm9wcm9iZSA9ICFod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdIHx8IHBtaWYtPm1lZGlhYmF5OwogCWh3aWYtPmhvbGQgPSBwbWlmLT5tZWRpYWJheTsKQEAgLTExNjMsMTAgKzExNjYsOSBAQAogCQlwbWFjX2lkZV9zZXR1cF9kbWEocG1pZiwgaHdpZik7CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1BNQUMgKi8KIAotCS8qIFdlIHByb2JlIHRoZSBod2lmIG5vdyAqLwotCXByb2JlX2h3aWZfaW5pdChod2lmKTsKKwlpZHhbMF0gPSBod2lmLT5pbmRleDsKIAotCWlkZV9wcm9jX3JlZ2lzdGVyX3BvcnQoaHdpZik7CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc4MCw3ICsxNzgyLDYgQEAKIAlod2lmLT5kbWFfdGltZW91dCA9ICZpZGVfZG1hX3RpbWVvdXQ7CiAJaHdpZi0+ZG1hX2xvc3RfaXJxID0gJnBtYWNfaWRlX2RtYV9sb3N0X2lycTsKIAotCWh3aWYtPmF0YXBpX2RtYSA9IDE7CiAJc3dpdGNoKHBtaWYtPmtpbmQpIHsKIAkJY2FzZSBjb250cm9sbGVyX3NoX2F0YTY6CiAJCQlod2lmLT51bHRyYV9tYXNrID0gcG1pZi0+Y2FibGVfODAgPyAweDdmIDogMHgwNzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggM2QxMDFmNy4uMDJkMTRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTE0NywxNCArMTQ3LDE1IEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1BDSQogLyoqCiAgKglpZGVfZ2V0X29yX3NldF9kbWFfYmFzZQkJLQlzZXR1cCBCTUlCQQotICoJQGh3aWY6IEludGVyZmFjZQorICoJQGQ6IElERSBwb3J0IGluZm8KKyAqCUBod2lmOiBJREUgaW50ZXJmYWNlCiAgKgogICoJRmV0Y2ggdGhlIERNQSBCdXMtTWFzdGVyLUkvTy1CYXNlLUFkZHJlc3MgKEJNSUJBKSBmcm9tIFBDSSBzcGFjZS4KICAqCVdoZXJlIGEgZGV2aWNlIGhhcyBhIHBhcnRuZXIgdGhhdCBpcyBhbHJlYWR5IGluIERNQSBtb2RlIHdlIGNoZWNrCiAgKglhbmQgZW5mb3JjZSBJREUgc2ltcGxleCBydWxlcy4KICAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpZGVfZ2V0X29yX3NldF9kbWFfYmFzZSAoaWRlX2h3aWZfdCAqaHdpZikKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGlkZV9nZXRfb3Jfc2V0X2RtYV9iYXNlKGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICpkLCBpZGVfaHdpZl90ICpod2lmKQogewogCXVuc2lnbmVkIGxvbmcJZG1hX2Jhc2UgPSAwOwogCXN0cnVjdCBwY2lfZGV2CSpkZXYgPSBod2lmLT5wY2lfZGV2OwpAQCAtMTY1LDE0ICsxNjYsMTUgQEAKIAlpZiAoaHdpZi0+bWF0ZSAmJiBod2lmLT5tYXRlLT5kbWFfYmFzZSkgewogCQlkbWFfYmFzZSA9IGh3aWYtPm1hdGUtPmRtYV9iYXNlIC0gKGh3aWYtPmNoYW5uZWwgPyAwIDogOCk7CiAJfSBlbHNlIHsKLQkJZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCA0KTsKLQkJaWYgKCFkbWFfYmFzZSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZG1hX2Jhc2UgaXMgaW52YWxpZFxuIiwKLQkJCQkJaHdpZi0+Y2RzLT5uYW1lKTsKLQkJfQorCQl1OCBiYXJpZHggPSAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19DUzU1MjApID8gMiA6IDQ7CisKKwkJZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXJpZHgpOworCisJCWlmIChkbWFfYmFzZSA9PSAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRE1BIGJhc2UgaXMgaW52YWxpZFxuIiwgZC0+bmFtZSk7CiAJfQogCi0JaWYgKGRtYV9iYXNlKSB7CisJaWYgKChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0NTNTUyMCkgPT0gMCAmJiBkbWFfYmFzZSkgewogCQl1OCBzaW1wbGV4X3N0YXQgPSAwOwogCQlkbWFfYmFzZSArPSBod2lmLT5jaGFubmVsID8gOCA6IDA7CiAKQEAgLTE4MywxMyArMTg1LDEzIEBACiAJCQljYXNlIFBDSV9ERVZJQ0VfSURfQ01EXzY0MzoKIAkJCWNhc2UgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFOgogCQkJY2FzZSBQQ0lfREVWSUNFX0lEX1JFVk9MVVRJT046Ci0JCQkJc2ltcGxleF9zdGF0ID0gaHdpZi0+SU5CKGRtYV9iYXNlICsgMik7Ci0JCQkJaHdpZi0+T1VUQigoc2ltcGxleF9zdGF0JjB4NjApLChkbWFfYmFzZSArIDIpKTsKLQkJCQlzaW1wbGV4X3N0YXQgPSBod2lmLT5JTkIoZG1hX2Jhc2UgKyAyKTsKKwkJCQlzaW1wbGV4X3N0YXQgPSBpbmIoZG1hX2Jhc2UgKyAyKTsKKwkJCQlvdXRiKHNpbXBsZXhfc3RhdCAmIDB4NjAsIGRtYV9iYXNlICsgMik7CisJCQkJc2ltcGxleF9zdGF0ID0gaW5iKGRtYV9iYXNlICsgMik7CiAJCQkJaWYgKHNpbXBsZXhfc3RhdCAmIDB4ODApIHsKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNpbXBsZXggZGV2aWNlOiAiCi0JCQkJCQkiRE1BIGZvcmNlZFxuIiwKLQkJCQkJCWh3aWYtPmNkcy0+bmFtZSk7CisJCQkJCQkJICJETUEgZm9yY2VkXG4iLAorCQkJCQkJCSBkLT5uYW1lKTsKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgpAQCAtMjEyLDggKzIxNCw4IEBACiAgKi8KIAkJCQkJaWYgKGh3aWYtPm1hdGUgJiYgaHdpZi0+bWF0ZS0+ZG1hX2Jhc2UpIHsKIAkJCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzaW1wbGV4IGRldmljZTogIgotCQkJCQkJCSJETUEgZGlzYWJsZWRcbiIsCi0JCQkJCQkJaHdpZi0+Y2RzLT5uYW1lKTsKKwkJCQkJCQkJICJETUEgZGlzYWJsZWRcbiIsCisJCQkJCQkJCSBkLT5uYW1lKTsKIAkJCQkJCWRtYV9iYXNlID0gMDsKIAkJCQkJfQogCQkJCX0KQEAgLTIyMywxMCArMjI1LDExIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0JMS19ERVZfSURFRE1BX1BDSSAqLwogCi12b2lkIGlkZV9zZXR1cF9wY2lfbm9pc2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQpCit2b2lkIGlkZV9zZXR1cF9wY2lfbm9pc2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElERSBjb250cm9sbGVyIGF0IFBDSSBzbG90ICVzXG4iLAotCQkJIGQtPm5hbWUsIHBjaV9uYW1lKGRldikpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBJREUgY29udHJvbGxlciAoMHglMDR4OjB4JTA0eCByZXYgMHglMDJ4KSBhdCAiCisJCQkgIiBQQ0kgc2xvdCAlc1xuIiwgZC0+bmFtZSwgZGV2LT52ZW5kb3IsIGRldi0+ZGV2aWNlLAorCQkJIGRldi0+cmV2aXNpb24sIHBjaV9uYW1lKGRldikpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0dXBfcGNpX25vaXNlKTsKQEAgLTIzNSwxNSArMjM4LDE1IEBACiAvKioKICAqCWlkZV9wY2lfZW5hYmxlCS0JZG8gUENJIGVuYWJsZXMKICAqCUBkZXY6IFBDSSBkZXZpY2UKLSAqCUBkOiBJREUgcGNpIGRldmljZSBkYXRhCisgKglAZDogSURFIHBvcnQgaW5mbwogICoKICAqCUVuYWJsZSB0aGUgSURFIFBDSSBkZXZpY2UuIFdlIGF0dGVtcHQgdG8gZW5hYmxlIHRoZSBkZXZpY2UgaW4gZnVsbAogICoJYnV0IGlmIHRoYXQgZmFpbHMgdGhlbiB3ZSBvbmx5IG5lZWQgQkFSNCBzbyB3ZSB3aWxsIGVuYWJsZSB0aGF0LgogICoJCiAgKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlCiAgKi8KLSAKLXN0YXRpYyBpbnQgaWRlX3BjaV9lbmFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKKworc3RhdGljIGludCBpZGVfcGNpX2VuYWJsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKIAlpbnQgcmV0OwogCkBAIC0yNTgsOSArMjYxLDkgQEAKIAl9CiAKIAkvKgotCSAqIGFzc3VtZSBhbGwgZGV2aWNlcyBjYW4gZG8gMzItYml0IGRtYSBmb3Igbm93LiB3ZSBjYW4gYWRkIGEKLQkgKiBkbWEgbWFzayBmaWVsZCB0byB0aGUgaWRlX3BjaV9kZXZpY2VfdCBpZiB3ZSBuZWVkIGl0IChvciBsZXQKLQkgKiBsb3dlciBsZXZlbCBkcml2ZXIgc2V0IHRoZSBkbWEgbWFzaykKKwkgKiBhc3N1bWUgYWxsIGRldmljZXMgY2FuIGRvIDMyLWJpdCBETUEgZm9yIG5vdywgd2UgY2FuIGFkZAorCSAqIGEgRE1BIG1hc2sgZmllbGQgdG8gdGhlIHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlmIHdlIG5lZWQgaXQKKwkgKiAob3IgbGV0IGxvd2VyIGxldmVsIGRyaXZlciBzZXQgdGhlIERNQSBtYXNrKQogCSAqLwogCXJldCA9IHBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfMzJCSVRfTUFTSyk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTI4MiwxMyArMjg1LDEzIEBACiAvKioKICAqCWlkZV9wY2lfY29uZmlndXJlCS0JY29uZmlndXJlIGFuIHVuY29uZmlndXJlZCBkZXZpY2UKICAqCUBkZXY6IFBDSSBkZXZpY2UKLSAqCUBkOiBJREUgcGNpIGRldmljZSBkYXRhCisgKglAZDogSURFIHBvcnQgaW5mbwogICoKICAqCUVuYWJsZSBhbmQgY29uZmlndXJlIHRoZSBQQ0kgZGV2aWNlIHdlIGhhdmUgYmVlbiBwYXNzZWQuCiAgKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciBhbiBlcnJvciBjb2RlLgogICovCi0gCi1zdGF0aWMgaW50IGlkZV9wY2lfY29uZmlndXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQpCisKK3N0YXRpYyBpbnQgaWRlX3BjaV9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQpCiB7CiAJdTE2IHBjaWNtZCA9IDA7CiAJLyoKQEAgLTMxNiwxNSArMzE5LDE1IEBACiAKIC8qKgogICoJaWRlX3BjaV9jaGVja19pb21lbQktCWNoZWNrIGEgcmVnaXN0ZXIgaXMgSS9PCi0gKglAZGV2OiBwY2kgZGV2aWNlCi0gKglAZDogaWRlX3BjaV9kZXZpY2UKLSAqCUBiYXI6IGJhciBudW1iZXIKKyAqCUBkZXY6IFBDSSBkZXZpY2UKKyAqCUBkOiBJREUgcG9ydCBpbmZvCisgKglAYmFyOiBCQVIgbnVtYmVyCiAgKgogICoJQ2hlY2tzIGlmIGEgQkFSIGlzIGNvbmZpZ3VyZWQgYW5kIHBvaW50cyB0byBNTUlPIHNwYWNlLiBJZiBzbwogICoJcHJpbnQgYW4gZXJyb3IgYW5kIHJldHVybiBhbiBlcnJvciBjb2RlLiBPdGhlcndpc2UgcmV0dXJuIDAKICAqLwotIAotc3RhdGljIGludCBpZGVfcGNpX2NoZWNrX2lvbWVtKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQsIGludCBiYXIpCisKK3N0YXRpYyBpbnQgaWRlX3BjaV9jaGVja19pb21lbShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwgaW50IGJhcikKIHsKIAl1bG9uZyBmbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIGJhcik7CiAJCkBAIC0zNDYsNyArMzQ5LDcgQEAKIC8qKgogICoJaWRlX2h3aWZfY29uZmlndXJlCS0JY29uZmlndXJlIGFuIElERSBpbnRlcmZhY2UKICAqCUBkZXY6IFBDSSBkZXZpY2UgaG9sZGluZyBpbnRlcmZhY2UKLSAqCUBkOiBJREUgcGNpIGRhdGEKKyAqCUBkOiBJREUgcG9ydCBpbmZvCiAgKglAbWF0ZTogUGFpcmVkIGludGVyZmFjZSBpZiBhbnkKICAqCiAgKglQZXJmb3JtIHRoZSBpbml0aWFsIHNldCB1cCBmb3IgdGhlIGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUuIFRoaXMKQEAgLTM1NSwxMSArMzU4LDEyIEBACiAgKgogICoJUmV0dXJucyB0aGUgbmV3IGhhcmR3YXJlIGludGVyZmFjZSBzdHJ1Y3R1cmUsIG9yIE5VTEwgb24gYSBmYWlsdXJlCiAgKi8KLSAKLXN0YXRpYyBpZGVfaHdpZl90ICppZGVfaHdpZl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCwgaWRlX2h3aWZfdCAqbWF0ZSwgaW50IHBvcnQsIGludCBpcnEpCisKK3N0YXRpYyBpZGVfaHdpZl90ICppZGVfaHdpZl9jb25maWd1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGlkZV9od2lmX3QgKm1hdGUsIGludCBwb3J0LCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgY3RsID0gMCwgYmFzZSA9IDA7CiAJaWRlX2h3aWZfdCAqaHdpZjsKKwl1OCBib290YWJsZSA9IChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0JPT1RBQkxFKSA/IDEgOiAwOwogCiAJaWYgKChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0lTQV9QT1JUUykgPT0gMCkgewogCQkvKiAgUG9zc2libHkgd2Ugc2hvdWxkIGZhaWwgaWYgdGhlc2UgY2hlY2tzIHJlcG9ydCB0cnVlICovCkBAIC0zODAsMjMgKzM4NCwyNCBAQAogCQljdGwgPSBwb3J0ID8gMHgzNzQgOiAweDNmNDsKIAkJYmFzZSA9IHBvcnQgPyAweDE3MCA6IDB4MWYwOwogCX0KLQlpZiAoKGh3aWYgPSBpZGVfbWF0Y2hfaHdpZihiYXNlLCBkLT5ib290YWJsZSwgZC0+bmFtZSkpID09IE5VTEwpCisJaWYgKChod2lmID0gaWRlX21hdGNoX2h3aWYoYmFzZSwgYm9vdGFibGUsIGQtPm5hbWUpKSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsJLyogbm8gcm9vbSBpbiBpZGVfaHdpZnNbXSAqLwogCWlmIChod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdICE9IGJhc2UgfHwKIAkgICAgaHdpZi0+aW9fcG9ydHNbSURFX0NPTlRST0xfT0ZGU0VUXSAhPSAoY3RsIHwgMikpIHsKLQkJbWVtc2V0KCZod2lmLT5odywgMCwgc2l6ZW9mKGh3aWYtPmh3KSk7Ci0jaWZuZGVmIElERV9BUkNIX09CU09MRVRFX0lOSVQKLQkJaWRlX3N0ZF9pbml0X3BvcnRzKCZod2lmLT5odywgYmFzZSwgKGN0bCB8IDIpKTsKLQkJaHdpZi0+aHcuaW9fcG9ydHNbSURFX0lSUV9PRkZTRVRdID0gMDsKKwkJaHdfcmVnc190IGh3OworCisJCW1lbXNldCgmaHcsIDAsIHNpemVvZihodykpOworI2lmbmRlZiBDT05GSUdfSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAorCQlpZGVfc3RkX2luaXRfcG9ydHMoJmh3LCBiYXNlLCBjdGwgfCAyKTsKICNlbHNlCi0JCWlkZV9pbml0X2h3aWZfcG9ydHMoJmh3aWYtPmh3LCBiYXNlLCAoY3RsIHwgMiksIE5VTEwpOworCQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgYmFzZSwgY3RsIHwgMiwgTlVMTCk7CiAjZW5kaWYKLQkJbWVtY3B5KGh3aWYtPmlvX3BvcnRzLCBod2lmLT5ody5pb19wb3J0cywgc2l6ZW9mKGh3aWYtPmlvX3BvcnRzKSk7CisJCW1lbWNweShod2lmLT5pb19wb3J0cywgaHcuaW9fcG9ydHMsIHNpemVvZihod2lmLT5pb19wb3J0cykpOwogCQlod2lmLT5ub3Byb2JlID0gIWh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF07CiAJfQotCWh3aWYtPmNoaXBzZXQgPSBpZGVfcGNpOworCWh3aWYtPmNoaXBzZXQgPSBkLT5jaGlwc2V0ID8gZC0+Y2hpcHNldCA6IGlkZV9wY2k7CiAJaHdpZi0+cGNpX2RldiA9IGRldjsKLQlod2lmLT5jZHMgPSAoc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKikgZDsKKwlod2lmLT5jZHMgPSBkOwogCWh3aWYtPmNoYW5uZWwgPSBwb3J0OwogCiAJaWYgKCFod2lmLT5pcnEpCkBAIC00MTEsMjggKzQxNiwyNSBAQAogLyoqCiAgKglpZGVfaHdpZl9zZXR1cF9kbWEJLQljb25maWd1cmUgRE1BIGludGVyZmFjZQogICoJQGRldjogUENJIGRldmljZQotICoJQGQ6IElERSBwY2kgZGF0YQotICoJQGh3aWY6IEhhcmR3YXJlIGludGVyZmFjZSB3ZSBhcmUgY29uZmlndXJpbmcKKyAqCUBkOiBJREUgcG9ydCBpbmZvCisgKglAaHdpZjogSURFIGludGVyZmFjZQogICoKICAqCVNldCB1cCB0aGUgRE1BIGJhc2UgZm9yIHRoZSBpbnRlcmZhY2UuIEVuYWJsZSB0aGUgbWFzdGVyIGJpdHMgYXMKICAqCW5lY2Vzc2FyeSBhbmQgYXR0ZW1wdCB0byBicmluZyB0aGUgZGV2aWNlIERNQSBpbnRvIGEgcmVhZHkgdG8gdXNlCiAgKglzdGF0ZQogICovCi0gCi0jaWZuZGVmIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0kKLXN0YXRpYyB2b2lkIGlkZV9od2lmX3NldHVwX2RtYShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpZGVfcGNpX2RldmljZV90ICpkLCBpZGVfaHdpZl90ICpod2lmKQorCitzdGF0aWMgdm9pZCBpZGVfaHdpZl9zZXR1cF9kbWEoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGlkZV9od2lmX3QgKmh3aWYpCiB7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgaWRlX2h3aWZfc2V0dXBfZG1hKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQsIGlkZV9od2lmX3QgKmh3aWYpCi17CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1BDSQogCXUxNiBwY2ljbWQ7CisKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmcGNpY21kKTsKIAotCWlmICgoZC0+YXV0b2RtYSA9PSBBVVRPRE1BKSB8fAorCWlmICgoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19BVVRPRE1BKSA9PSAwIHx8CiAJICAgICgoZGV2LT5jbGFzcyA+PiA4KSA9PSBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUgJiYKIAkgICAgIChkZXYtPmNsYXNzICYgMHg4MCkpKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UgPSBpZGVfZ2V0X29yX3NldF9kbWFfYmFzZShod2lmKTsKKwkJdW5zaWduZWQgbG9uZyBkbWFfYmFzZSA9IGlkZV9nZXRfb3Jfc2V0X2RtYV9iYXNlKGQsIGh3aWYpOwogCQlpZiAoZG1hX2Jhc2UgJiYgIShwY2ljbWQgJiBQQ0lfQ09NTUFORF9NQVNURVIpKSB7CiAJCQkvKgogIAkJCSAqIFNldCB1cCBCTS1ETUEgY2FwYWJpbGl0eQpAQCAtNDU2LDEzICs0NTgsMTMgQEAKIAkJCQkiKEJJT1MpXG4iLCBod2lmLT5uYW1lLCBkLT5uYW1lKTsKIAkJfQogCX0KLX0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVETUFfUENJKi8KK30KIAogLyoqCiAgKglpZGVfc2V0dXBfcGNpX2NvbnRyb2xsZXIJLQlzZXQgdXAgSURFIFBDSQogICoJQGRldjogUENJIGRldmljZQotICoJQGQ6IElERSBQQ0kgZGF0YQorICoJQGQ6IElERSBwb3J0IGluZm8KICAqCUBub2lzeTogdmVyYm9zZSBmbGFnCiAgKglAY29uZmlnOiByZXR1cm5lZCBhcyAxIGlmIHdlIGNvbmZpZ3VyZWQgdGhlIGhhcmR3YXJlCiAgKgpAQCAtNDcwLDExICs0NzIsMTAgQEAKICAqCXVwIHRoZSBQQ0kgc2lkZSBvZiB0aGUgZGV2aWNlLCBjaGVja3MgdGhhdCB0aGUgZGV2aWNlIGlzIGVuYWJsZWQKICAqCWFuZCBlbmFibGVzIGl0IGlmIG5lZWQgYmUKICAqLwotIAotc3RhdGljIGludCBpZGVfc2V0dXBfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCwgaW50IG5vaXN5LCBpbnQgKmNvbmZpZykKKworc3RhdGljIGludCBpZGVfc2V0dXBfcGNpX2NvbnRyb2xsZXIoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGludCBub2lzeSwgaW50ICpjb25maWcpCiB7CiAJaW50IHJldDsKLQl1MzIgY2xhc3NfcmV2OwogCXUxNiBwY2ljbWQ7CiAKIAlpZiAobm9pc3kpCkBAIC00OTcsMTAgKzQ5OCw2IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkZXZpY2UgZW5hYmxlZCAoTGludXgpXG4iLCBkLT5uYW1lKTsKIAl9CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjbGFzc19yZXYpOwotCWNsYXNzX3JldiAmPSAweGZmOwotCWlmIChub2lzeSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGNoaXBzZXQgcmV2aXNpb24gJWRcbiIsIGQtPm5hbWUsIGNsYXNzX3Jldik7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUwOCw5ICs1MDUsOSBAQAogLyoqCiAgKglpZGVfcGNpX3NldHVwX3BvcnRzCS0JY29uZmlndXJlIHBvcnRzL2RldmljZXMgb24gUENJIElERQogICoJQGRldjogUENJIGRldmljZQotICoJQGQ6IElERSBwY2kgZGV2aWNlIGluZm8KKyAqCUBkOiBJREUgcG9ydCBpbmZvCiAgKglAcGNpaXJxOiBJUlEgbGluZQotICoJQGluZGV4OiBhdGEgaW5kZXggdG8gdXBkYXRlCisgKglAaWR4OiBBVEEgaW5kZXggdGFibGUgdG8gdXBkYXRlCiAgKgogICoJU2NhbiB0aGUgaW50ZXJmYWNlcyBhdHRhY2hlZCB0byB0aGlzIGRldmljZSBhbmQgZG8gYW55CiAgKgluZWNlc3NhcnkgcGVyIHBvcnQgc2V0dXAuIEF0dGFjaCB0aGUgZGV2aWNlcyBhbmQgYXNrIHRoZQpAQCAtNTIwLDI2ICs1MTcsMjUgQEAKICAqCWJ1dCBpcyBhbHNvIHVzZWQgZGlyZWN0bHkgYXMgYSBoZWxwZXIgZnVuY3Rpb24gYnkgc29tZSBjb250cm9sbGVycwogICoJd2hlcmUgdGhlIGNoaXBzZXQgc2V0dXAgaXMgbm90IHRoZSBkZWZhdWx0IFBDSSBJREUgb25lLgogICovCi0gCi12b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCwgaW50IHBjaWlycSwgYXRhX2luZGV4X3QgKmluZGV4KQorCit2b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmQsIGludCBwY2lpcnEsIHU4ICppZHgpCiB7CiAJaW50IGNoYW5uZWxzID0gKGQtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0lOR0xFKSA/IDEgOiAyLCBwb3J0OwotCWludCBhdF9sZWFzdF9vbmVfaHdpZl9lbmFibGVkID0gMDsKIAlpZGVfaHdpZl90ICpod2lmLCAqbWF0ZSA9IE5VTEw7CiAJdTggdG1wOwogCi0JaW5kZXgtPmFsbCA9IDB4ZjBmMDsKLQogCS8qCiAJICogU2V0IHVwIHRoZSBJREUgcG9ydHMKIAkgKi8KLQkgCisKIAlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgY2hhbm5lbHM7ICsrcG9ydCkgewotCQlpZGVfcGNpX2VuYWJsZWJpdF90ICplID0gJihkLT5lbmFibGViaXRzW3BvcnRdKTsKLQkKKwkJY29uc3QgaWRlX3BjaV9lbmFibGViaXRfdCAqZSA9ICYoZC0+ZW5hYmxlYml0c1twb3J0XSk7CisKIAkJaWYgKGUtPnJlZyAmJiAocGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBlLT5yZWcsICZ0bXApIHx8Ci0JCSAgICAodG1wICYgZS0+bWFzaykgIT0gZS0+dmFsKSkKKwkJICAgICh0bXAgJiBlLT5tYXNrKSAhPSBlLT52YWwpKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogSURFIHBvcnQgZGlzYWJsZWRcbiIsIGQtPm5hbWUpOwogCQkJY29udGludWU7CS8qIHBvcnQgbm90IGVuYWJsZWQgKi8KKwkJfQogCiAJCWlmICgoaHdpZiA9IGlkZV9od2lmX2NvbmZpZ3VyZShkZXYsIGQsIG1hdGUsIHBvcnQsIHBjaWlycSkpID09IE5VTEwpCiAJCQljb250aW51ZTsKQEAgLTU0NywyNyArNTQzLDQ5IEBACiAJCS8qIHNldHVwIHByb3BlciBhbmNlc3RyYWwgaW5mb3JtYXRpb24gKi8KIAkJaHdpZi0+Z2VuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKIAotCQlpZiAoaHdpZi0+Y2hhbm5lbCkgewotCQkJaW5kZXgtPmIuaGlnaCA9IGh3aWYtPmluZGV4OwotCQl9IGVsc2UgewotCQkJaW5kZXgtPmIubG93ID0gaHdpZi0+aW5kZXg7Ci0JCX0KKwkJKihpZHggKyBwb3J0KSA9IGh3aWYtPmluZGV4OwogCiAJCQogCQlpZiAoZC0+aW5pdF9pb3BzKQogCQkJZC0+aW5pdF9pb3BzKGh3aWYpOwogCi0JCWlmIChkLT5hdXRvZG1hID09IE5PRE1BKQotCQkJZ290byBieXBhc3NfbGVnYWN5X2RtYTsKLQotCQlpZihkLT5pbml0X3NldHVwX2RtYSkKLQkJCWQtPmluaXRfc2V0dXBfZG1hKGRldiwgZCwgaHdpZik7Ci0JCWVsc2UKKwkJaWYgKChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0RNQSkgPT0gMCkKIAkJCWlkZV9od2lmX3NldHVwX2RtYShkZXYsIGQsIGh3aWYpOwotYnlwYXNzX2xlZ2FjeV9kbWE6CisKKwkJaWYgKCghaHdpZi0+aXJxICYmIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0xFR0FDWV9JUlFTKSkgfHwKKwkJICAgIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX0ZPUkNFX0xFR0FDWV9JUlFTKSkKKwkJCWh3aWYtPmlycSA9IHBvcnQgPyAxNSA6IDE0OworCisJCWh3aWYtPmZpeHVwID0gZC0+Zml4dXA7CisKIAkJaHdpZi0+aG9zdF9mbGFncyA9IGQtPmhvc3RfZmxhZ3M7CiAJCWh3aWYtPnBpb19tYXNrID0gZC0+cGlvX21hc2s7CiAKKwkJaWYgKChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFUklBTElaRSkgJiYgaHdpZi0+bWF0ZSkKKwkJCWh3aWYtPm1hdGUtPnNlcmlhbGl6ZWQgPSBod2lmLT5zZXJpYWxpemVkID0gMTsKKworCQlpZiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19JT18zMkJJVCkgeworCQkJaHdpZi0+ZHJpdmVzWzBdLmlvXzMyYml0ID0gMTsKKwkJCWh3aWYtPmRyaXZlc1sxXS5pb18zMmJpdCA9IDE7CisJCX0KKworCQlpZiAoZC0+aG9zdF9mbGFncyAmIElERV9IRkxBR19VTk1BU0tfSVJRUykgeworCQkJaHdpZi0+ZHJpdmVzWzBdLnVubWFzayA9IDE7CisJCQlod2lmLT5kcml2ZXNbMV0udW5tYXNrID0gMTsKKwkJfQorCisJCWlmIChod2lmLT5kbWFfYmFzZSkgeworCQkJaHdpZi0+c3dkbWFfbWFzayA9IGQtPnN3ZG1hX21hc2s7CisJCQlod2lmLT5td2RtYV9tYXNrID0gZC0+bXdkbWFfbWFzazsKKwkJCWh3aWYtPnVsdHJhX21hc2sgPSBkLT51ZG1hX21hc2s7CisJCX0KKworCQlod2lmLT5kcml2ZXNbMF0uYXV0b3R1bmUgPSAxOworCQlod2lmLT5kcml2ZXNbMV0uYXV0b3R1bmUgPSAxOworCisJCWlmIChkLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1JRU0laRV8yNTYpCisJCQlod2lmLT5ycXNpemUgPSAyNTY7CisKIAkJaWYgKGQtPmluaXRfaHdpZikKIAkJCS8qIENhbGwgY2hpcHNldC1zcGVjaWZpYyByb3V0aW5lCiAJCQkgKiBmb3IgZWFjaCBlbmFibGVkIGh3aWYKQEAgLTU3NSwxMCArNTkzLDcgQEAKIAkJCWQtPmluaXRfaHdpZihod2lmKTsKIAogCQltYXRlID0gaHdpZjsKLQkJYXRfbGVhc3Rfb25lX2h3aWZfZW5hYmxlZCA9IDE7CiAJfQotCWlmICghYXRfbGVhc3Rfb25lX2h3aWZfZW5hYmxlZCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5laXRoZXIgSURFIHBvcnQgZW5hYmxlZCAoQklPUylcbiIsIGQtPm5hbWUpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcGNpX3NldHVwX3BvcnRzKTsKQEAgLTU5MCwxMyArNjA1LDEzIEBACiAgKgogICogT25lIHRoaW5nIHRoYXQgaXMgbm90IHN0YW5kYXJkaXplZCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlCiAgKiBwcmltYXJ5L3NlY29uZGFyeSBpbnRlcmZhY2UgImVuYWJsZS9kaXNhYmxlIiBiaXRzLiAgRm9yIGNoaXBzZXRzIHRoYXQKLSAqIHdlICJrbm93IiBhYm91dCwgdGhpcyBpbmZvcm1hdGlvbiBpcyBpbiB0aGUgaWRlX3BjaV9kZXZpY2VfdCBzdHJ1Y3Q7CisgKiB3ZSAia25vdyIgYWJvdXQsIHRoaXMgaW5mb3JtYXRpb24gaXMgaW4gdGhlIHN0cnVjdCBpZGVfcG9ydF9pbmZvOwogICogZm9yIGFsbCBvdGhlciBjaGlwc2V0cywgd2UganVzdCBhc3N1bWUgYm90aCBpbnRlcmZhY2VzIGFyZSBlbmFibGVkLgogICovCi1zdGF0aWMgaW50IGRvX2lkZV9zZXR1cF9wY2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKmQsCi0JCQkJICAgYXRhX2luZGV4X3QgKmluZGV4LCB1OCBub2lzeSkKK3N0YXRpYyBpbnQgZG9faWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCwKKwkJCQkgICB1OCAqaWR4LCB1OCBub2lzeSkKIHsKLQlzdGF0aWMgYXRhX2luZGV4X3QgYXRhX2luZGV4ID0geyAuYiA9IHsgLmxvdyA9IDB4ZmYsIC5oaWdoID0gMHhmZiB9IH07CiAJaW50IHRyaWVkX2NvbmZpZyA9IDA7CiAJaW50IHBjaWlycSwgcmV0OwogCkBAIC02NDYsNTEgKzY2MSwzNSBAQAogCiAJLyogRklYTUU6IHNpbGVudCBmYWlsdXJlIGNhbiBoYXBwZW4gKi8KIAotCSppbmRleCA9IGF0YV9pbmRleDsKLQlpZGVfcGNpX3NldHVwX3BvcnRzKGRldiwgZCwgcGNpaXJxLCBpbmRleCk7CisJaWRlX3BjaV9zZXR1cF9wb3J0cyhkZXYsIGQsIHBjaWlycSwgaWR4KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaWRlX3BjaV9kZXZpY2VfdCAqZCkKK2ludCBpZGVfc2V0dXBfcGNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gTlVMTCwgKm1hdGUgPSBOVUxMOwotCWF0YV9pbmRleF90IGluZGV4X2xpc3Q7CisJdTggaWR4WzRdID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CiAJaW50IHJldDsKIAotCXJldCA9IGRvX2lkZV9zZXR1cF9wY2lfZGV2aWNlKGRldiwgZCwgJmluZGV4X2xpc3QsIDEpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dDsKKwlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQsICZpZHhbMF0sIDEpOwogCi0JaWYgKChpbmRleF9saXN0LmIubG93ICYgMHhmMCkgIT0gMHhmMCkKLQkJaHdpZiA9ICZpZGVfaHdpZnNbaW5kZXhfbGlzdC5iLmxvd107Ci0JaWYgKChpbmRleF9saXN0LmIuaGlnaCAmIDB4ZjApICE9IDB4ZjApCi0JCW1hdGUgPSAmaWRlX2h3aWZzW2luZGV4X2xpc3QuYi5oaWdoXTsKKwlpZiAocmV0ID49IDApCisJCWlkZV9kZXZpY2VfYWRkKGlkeCk7CiAKLQlpZiAoaHdpZikKLQkJcHJvYmVfaHdpZl9pbml0X3dpdGhfZml4dXAoaHdpZiwgZC0+Zml4dXApOwotCWlmIChtYXRlKQotCQlwcm9iZV9od2lmX2luaXRfd2l0aF9maXh1cChtYXRlLCBkLT5maXh1cCk7Ci0KLQlpZiAoaHdpZikKLQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChod2lmKTsKLQlpZiAobWF0ZSkKLQkJaWRlX3Byb2NfcmVnaXN0ZXJfcG9ydChtYXRlKTsKLW91dDoKIAlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfc2V0dXBfcGNpX2RldmljZSk7CiAKIGludCBpZGVfc2V0dXBfcGNpX2RldmljZXMoc3RydWN0IHBjaV9kZXYgKmRldjEsIHN0cnVjdCBwY2lfZGV2ICpkZXYyLAotCQkJICBpZGVfcGNpX2RldmljZV90ICpkKQorCQkJICBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldltdID0geyBkZXYxLCBkZXYyIH07Ci0JYXRhX2luZGV4X3QgaW5kZXhfbGlzdFsyXTsKIAlpbnQgcmV0LCBpOworCXU4IGlkeFs0XSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShwZGV2W2ldLCBkLCBpbmRleF9saXN0ICsgaSwgIWkpOworCQlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShwZGV2W2ldLCBkLCAmaWR4W2kqMl0sICFpKTsKIAkJLyoKIAkJICogRklYTUU6IE1vbSwgbW9tLCB0aGV5IHN0b2xlIG1lIHRoZSBoZWxwZXIgZnVuY3Rpb24gdG8gdW5kbwogCQkgKiBkb19pZGVfc2V0dXBfcGNpX2RldmljZSgpIG9uIHRoZSBmaXJzdCBkZXZpY2UhCkBAIC02OTksMjUgKzY5OCw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCXU4IGlkeFsyXSA9IHsgaW5kZXhfbGlzdFtpXS5iLmxvdywgaW5kZXhfbGlzdFtpXS5iLmhpZ2ggfTsKLQkJaW50IGo7Ci0KLQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewotCQkJaWYgKChpZHhbal0gJiAweGYwKSAhPSAweGYwKQotCQkJCXByb2JlX2h3aWZfaW5pdChpZGVfaHdpZnMgKyBpZHhbal0pOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQl1OCBpZHhbMl0gPSB7IGluZGV4X2xpc3RbaV0uYi5sb3csIGluZGV4X2xpc3RbaV0uYi5oaWdoIH07Ci0JCWludCBqOwotCi0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKLQkJCWlmICgoaWR4W2pdICYgMHhmMCkgIT0gMHhmMCkKLQkJCQlpZGVfcHJvY19yZWdpc3Rlcl9wb3J0KGlkZV9od2lmcyArIGlkeFtqXSk7Ci0JCX0KLQl9CisJaWRlX2RldmljZV9hZGQoaWR4KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtNzQyLDkgKzcyMyw2IEBACiAgKgloYW5kcyB0aGUgY29udHJvbGxlcnMgb2ZmIHRvIHRoZSBjb3JlIFBDSSBjb2RlIHRvIGRvIHRoZSByZXN0IG9mCiAgKgl0aGUgd29yay4KICAqCi0gKglUaGUgZHJpdmVyX2RhdGEgb2YgdGhlIGRyaXZlciB0YWJsZSBtdXN0IHBvaW50IHRvIGFuIGlkZV9wY2lfZGV2aWNlX3QKLSAqCWRlc2NyaWJpbmcgdGhlIGludGVyZmFjZS4KLSAqCiAgKglSZXR1cm5zIGFyZSB0aGUgc2FtZSBhcyBmb3IgcGNpX3JlZ2lzdGVyX2RyaXZlcgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKaW5kZXggOTM2NDRmOC4uZDA4ZmIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMKQEAgLTI3OTcsMTEgKzI3OTcsMTIgQEAKIAogc3RhdGljIGludCBjbWFfaW5pdCh2b2lkKQogewotCWludCByZXQsIGxvdywgaGlnaDsKKwlpbnQgcmV0LCBsb3csIGhpZ2gsIHJlbWFpbmluZzsKIAogCWdldF9yYW5kb21fYnl0ZXMoJm5leHRfcG9ydCwgc2l6ZW9mIG5leHRfcG9ydCk7CiAJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZSgmbG93LCAmaGlnaCk7Ci0JbmV4dF9wb3J0ID0gKCh1bnNpZ25lZCBpbnQpIG5leHRfcG9ydCAlIChoaWdoIC0gbG93KSkgKyBsb3c7CisJcmVtYWluaW5nID0gKGhpZ2ggLSBsb3cpICsgMTsKKwluZXh0X3BvcnQgPSAoKHVuc2lnbmVkIGludCkgbmV4dF9wb3J0ICUgcmVtYWluaW5nKSArIGxvdzsKIAogCWNtYV93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJyZG1hX2NtIik7CiAJaWYgKCFjbWFfd3EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCmluZGV4IGEzNDA5ZmQuLjdhN2RhYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCkBAIC01NzksMTIgKzU3OSwxMiBAQAogCQkJCQkJCQkJICAgXAogCXJibG9jayA9IGVoY2FfYWxsb2NfZndfY3RybGJsb2NrKEdGUF9LRVJORUwpOwkJCSAgIFwKIAlpZiAoIXJibG9jaykgewkJCQkJCSAgICAgICAgICAgXAotCQlkZXZfZXJyKGRldiwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CQkgICBcCisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS5cbiIpOyAgICAgICAgICAgXAogCQlyZXR1cm4gMDsJCQkJCQkgICBcCiAJfQkJCQkJCQkJICAgXAogCQkJCQkJCQkJICAgXAogCWlmIChoaXB6X2hfcXVlcnlfaGNhKHNoY2EtPmlwel9oY2FfaGFuZGxlLCByYmxvY2spICE9IEhfU1VDQ0VTUykgeyBcCi0JCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcXVlcnkgZGV2aWNlIHByb3BlcnRpZXMiKTsJICAgCSAgIFwKKwkJZGV2X2VycihkZXYsICJDYW4ndCBxdWVyeSBkZXZpY2UgcHJvcGVydGllc1xuIik7ICAgICAgICAgICBcCiAJCWVoY2FfZnJlZV9md19jdHJsYmxvY2socmJsb2NrKTsJCQkgICAJICAgXAogCQlyZXR1cm4gMDsJCQkJCSAgIAkgICBcCiAJfQkJCQkJCQkJICAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IDFkNjJjOGIuLmU1YjRlOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAogI2RlZmluZSBCSVRTX1BFUl9MT05HX0NPTVBBVCAoc2l6ZW9mKGNvbXBhdF9sb25nX3QpICogOCkKLSNkZWZpbmUgTkJJVFNfQ09NUEFUKHgpICgoKCh4KSAtIDEpIC8gQklUU19QRVJfTE9OR19DT01QQVQpICsgMSkKKyNkZWZpbmUgQklUU19UT19MT05HU19DT01QQVQoeCkgKCgoKHgpIC0gMSkgLyBCSVRTX1BFUl9MT05HX0NPTVBBVCkgKyAxKQogCiAjaWZkZWYgX19CSUdfRU5ESUFOCiBzdGF0aWMgaW50IGJpdHNfdG9fdXNlcih1bnNpZ25lZCBsb25nICpiaXRzLCB1bnNpZ25lZCBpbnQgbWF4Yml0LApAQCAtNTA0LDcgKzUwNCw3IEBACiAJaW50IGxlbiwgaTsKIAogCWlmIChjb21wYXQpIHsKLQkJbGVuID0gTkJJVFNfQ09NUEFUKG1heGJpdCkgKiBzaXplb2YoY29tcGF0X2xvbmdfdCk7CisJCWxlbiA9IEJJVFNfVE9fTE9OR1NfQ09NUEFUKG1heGJpdCkgKiBzaXplb2YoY29tcGF0X2xvbmdfdCk7CiAJCWlmIChsZW4gPiBtYXhsZW4pCiAJCQlsZW4gPSBtYXhsZW47CiAKQEAgLTUxNSw3ICs1MTUsNyBAQAogCQkJCQkgc2l6ZW9mKGNvbXBhdF9sb25nX3QpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAl9IGVsc2UgewotCQlsZW4gPSBOQklUUyhtYXhiaXQpICogc2l6ZW9mKGxvbmcpOworCQlsZW4gPSBCSVRTX1RPX0xPTkdTKG1heGJpdCkgKiBzaXplb2YobG9uZyk7CiAJCWlmIChsZW4gPiBtYXhsZW4pCiAJCQlsZW4gPSBtYXhsZW47CiAKQEAgLTUzMCw4ICs1MzAsOCBAQAogCQkJdW5zaWduZWQgaW50IG1heGxlbiwgdm9pZCBfX3VzZXIgKnAsIGludCBjb21wYXQpCiB7CiAJaW50IGxlbiA9IGNvbXBhdCA/Ci0JCQlOQklUU19DT01QQVQobWF4Yml0KSAqIHNpemVvZihjb21wYXRfbG9uZ190KSA6Ci0JCQlOQklUUyhtYXhiaXQpICogc2l6ZW9mKGxvbmcpOworCQkJQklUU19UT19MT05HU19DT01QQVQobWF4Yml0KSAqIHNpemVvZihjb21wYXRfbG9uZ190KSA6CisJCQlCSVRTX1RPX0xPTkdTKG1heGJpdCkgKiBzaXplb2YobG9uZyk7CiAKIAlpZiAobGVuID4gbWF4bGVuKQogCQlsZW4gPSBtYXhsZW47CkBAIC01NDUsNyArNTQ1LDcgQEAKIHN0YXRpYyBpbnQgYml0c190b191c2VyKHVuc2lnbmVkIGxvbmcgKmJpdHMsIHVuc2lnbmVkIGludCBtYXhiaXQsCiAJCQl1bnNpZ25lZCBpbnQgbWF4bGVuLCB2b2lkIF9fdXNlciAqcCwgaW50IGNvbXBhdCkKIHsKLQlpbnQgbGVuID0gTkJJVFMobWF4Yml0KSAqIHNpemVvZihsb25nKTsKKwlpbnQgbGVuID0gQklUU19UT19MT05HUyhtYXhiaXQpICogc2l6ZW9mKGxvbmcpOwogCiAJaWYgKGxlbiA+IG1heGxlbikKIAkJbGVuID0gbWF4bGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9maXhwLWFyaXRoLmggYi9kcml2ZXJzL2lucHV0L2ZpeHAtYXJpdGguaAppbmRleCBlZDNkMmRhLi4zMDg5ZDczIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2ZpeHAtYXJpdGguaAorKysgYi9kcml2ZXJzL2lucHV0L2ZpeHAtYXJpdGguaApAQCAtMjQsNyArMjQsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKICAqCiAgKiBTaG91bGQgeW91IG5lZWQgdG8gY29udGFjdCBtZSwgdGhlIGF1dGhvciwgeW91IGNhbiBkbyBzbyBieQotICogZS1tYWlsIC0gbWFpbCB5b3VyIG1lc3NhZ2UgdG8gPGRlbmV1eEBpZnJhbmNlLmNvbT4KKyAqIGUtbWFpbCAtIG1haWwgeW91ciBtZXNzYWdlIHRvIDxqb2hhbm4uZGVuZXV4QGdtYWlsLmNvbT4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCAyMDg5NmQ1Li5iZmM2MDYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC0xMzYsNyArMTM2LDggQEAKIAl9CiAKIAlnYW1lcG9ydF9jbG9zZShnYW1lcG9ydCk7Ci0JcmV0dXJuIChjcHVfZGF0YVtyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXS5sb29wc19wZXJfamlmZnkgKiAodW5zaWduZWQgbG9uZylIWiAvICgxMDAwIC8gNTApKSAvICh0eCA8IDEgPyAxIDogdHgpOworCXJldHVybiAoY3B1X2RhdGEocmF3X3NtcF9wcm9jZXNzb3JfaWQoKSkubG9vcHNfcGVyX2ppZmZ5ICoKKwkJKHVuc2lnbmVkIGxvbmcpSFogLyAoMTAwMCAvIDUwKSkgLyAodHggPCAxID8gMSA6IHR4KTsKIAogI2Vsc2UKIApAQCAtNDQ4LDkgKzQ0OSw4IEBACiAJc2V0X2ZyZWV6YWJsZSgpOwogCWRvIHsKIAkJZ2FtZXBvcnRfaGFuZGxlX2V2ZW50KCk7Ci0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShnYW1lcG9ydF93YWl0LAorCQl3YWl0X2V2ZW50X2ZyZWV6YWJsZShnYW1lcG9ydF93YWl0LAogCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpIHx8ICFsaXN0X2VtcHR5KCZnYW1lcG9ydF9ldmVudF9saXN0KSk7Ci0JCXRyeV90b19mcmVlemUoKTsKIAl9IHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJnYW1lcG9ydDoga2dhbWVwb3J0ZCBleGl0aW5nXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCAyZjJiMDIwLi4zMDdjN2I1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC01ODQsMTAgKzU4NCwxMCBAQAogCiAKICNkZWZpbmUgTUFUQ0hfQklUKGJpdCwgbWF4KSBcCi0JCWZvciAoaSA9IDA7IGkgPCBOQklUUyhtYXgpOyBpKyspIFwKKwkJZm9yIChpID0gMDsgaSA8IEJJVFNfVE9fTE9OR1MobWF4KTsgaSsrKSBcCiAJCQlpZiAoKGlkLT5iaXRbaV0gJiBkZXYtPmJpdFtpXSkgIT0gaWQtPmJpdFtpXSkgXAogCQkJCWJyZWFrOyBcCi0JCWlmIChpICE9IE5CSVRTKG1heCkpIFwKKwkJaWYgKGkgIT0gQklUU19UT19MT05HUyhtYXgpKSBcCiAJCQljb250aW51ZTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmlucHV0X21hdGNoX2RldmljZShjb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICppZCwKQEAgLTY5OCw3ICs2OTgsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gTkJJVFMobWF4KSAtIDE7IGkgPiAwOyBpLS0pCisJZm9yIChpID0gQklUU19UT19MT05HUyhtYXgpIC0gMTsgaSA+IDA7IGktLSkKIAkJaWYgKGJpdG1hcFtpXSkKIAkJCWJyZWFrOwogCkBAIC04OTIsNyArODkyLDcgQEAKIAogCWxlbiArPSBzbnByaW50ZihidWYsIG1heChzaXplLCAwKSwgIiVjIiwgbmFtZSk7CiAJZm9yIChpID0gbWluX2JpdDsgaSA8IG1heF9iaXQ7IGkrKykKLQkJaWYgKGJtW0xPTkcoaSldICYgQklUKGkpKQorCQlpZiAoYm1bQklUX1dPUkQoaSldICYgQklUX01BU0soaSkpCiAJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBtYXgoc2l6ZSAtIGxlbiwgMCksICIlWCwiLCBpKTsKIAlyZXR1cm4gbGVuOwogfQpAQCAtOTkxLDcgKzk5MSw3IEBACiAJaW50IGk7CiAJaW50IGxlbiA9IDA7CiAKLQlmb3IgKGkgPSBOQklUUyhtYXgpIC0gMTsgaSA+IDA7IGktLSkKKwlmb3IgKGkgPSBCSVRTX1RPX0xPTkdTKG1heCkgLSAxOyBpID4gMDsgaS0tKQogCQlpZiAoYml0bWFwW2ldKQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMgYi9kcml2ZXJzL2lucHV0L2pveWRldi5jCmluZGV4IDJiMjAxZjkuLjIyYjI3ODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95ZGV2LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lkZXYuYwpAQCAtODQ0LDggKzg0NCw4IEBACiAJewogCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfAogCQkJCUlOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQsCi0JCS5ldmJpdCA9IHsgQklUKEVWX0tFWSkgfSwKLQkJLmtleWJpdCA9IHsgW0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKSB9LAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfSwKKwkJLmtleWJpdCA9IHsgW0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKSB9LAogCX0sCS8qIEF2b2lkIGl0b3VjaHBhZHMsIHRvdWNoc2NyZWVucyBhbmQgdGFibGV0cyAqLwogCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTg1NCwyMCArODU0LDIwIEBACiAJewogCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfAogCQkJCUlOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQsCi0JCS5ldmJpdCA9IHsgQklUKEVWX0FCUykgfSwKLQkJLmFic2JpdCA9IHsgQklUKEFCU19YKSB9LAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0FCUykgfSwKKwkJLmFic2JpdCA9IHsgQklUX01BU0soQUJTX1gpIH0sCiAJfSwKIAl7CiAJCS5mbGFncyA9IElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCB8CiAJCQkJSU5QVVRfREVWSUNFX0lEX01BVENIX0FCU0JJVCwKLQkJLmV2Yml0ID0geyBCSVQoRVZfQUJTKSB9LAotCQkuYWJzYml0ID0geyBCSVQoQUJTX1dIRUVMKSB9LAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0FCUykgfSwKKwkJLmFic2JpdCA9IHsgQklUX01BU0soQUJTX1dIRUVMKSB9LAogCX0sCiAJewogCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfAogCQkJCUlOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQsCi0JCS5ldmJpdCA9IHsgQklUKEVWX0FCUykgfSwKLQkJLmFic2JpdCA9IHsgQklUKEFCU19USFJPVFRMRSkgfSwKKwkJLmV2Yml0ID0geyBCSVRfTUFTSyhFVl9BQlMpIH0sCisJCS5hYnNiaXQgPSB7IEJJVF9NQVNLKEFCU19USFJPVFRMRSkgfSwKIAl9LAogCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2EzZC5jCmluZGV4IGZmNzAxYWIuLjUyYmExNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYTNkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hM2QuYwpAQCAtMzI2LDE0ICszMjYsMTkgQEAKIAogCQlhM2QtPmxlbmd0aCA9IDMzOwogCi0JCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX0FCUykgfCBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCQlpbnB1dF9kZXYtPnJlbGJpdFswXSB8PSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKLQkJaW5wdXRfZGV2LT5hYnNiaXRbMF0gfD0gQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1RIUk9UVExFKSB8IEJJVChBQlNfUlVEREVSKQotCQkJCQl8IEJJVChBQlNfSEFUMFgpIHwgQklUKEFCU19IQVQwWSkgfCBCSVQoQUJTX0hBVDFYKSB8IEJJVChBQlNfSEFUMVkpOwotCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldIHw9IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fTUlERExFKQotCQkJCQkJCXwgQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpOwotCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9KT1lTVElDSyldIHw9IEJJVChCVE5fVFJJR0dFUikgfCBCSVQoQlROX1RIVU1CKSB8IEJJVChCVE5fVE9QKQotCQkJCQkJCXwgQklUKEJUTl9QSU5LSUUpOworCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0FCUykgfCBCSVRfTUFTSyhFVl9LRVkpIHwKKwkJCUJJVF9NQVNLKEVWX1JFTCk7CisJCWlucHV0X2Rldi0+cmVsYml0WzBdIHw9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKKwkJaW5wdXRfZGV2LT5hYnNiaXRbMF0gfD0gQklUX01BU0soQUJTX1gpIHwgQklUX01BU0soQUJTX1kpIHwKKwkJCUJJVF9NQVNLKEFCU19USFJPVFRMRSkgfCBCSVRfTUFTSyhBQlNfUlVEREVSKSB8CisJCQlCSVRfTUFTSyhBQlNfSEFUMFgpIHwgQklUX01BU0soQUJTX0hBVDBZKSB8CisJCQlCSVRfTUFTSyhBQlNfSEFUMVgpIHwgQklUX01BU0soQUJTX0hBVDFZKTsKKwkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gfD0gQklUX01BU0soQlROX1JJR0hUKSB8CisJCQlCSVRfTUFTSyhCVE5fTEVGVCkgfCBCSVRfTUFTSyhCVE5fTUlERExFKSB8CisJCQlCSVRfTUFTSyhCVE5fU0lERSkgfCBCSVRfTUFTSyhCVE5fRVhUUkEpOworCQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fSk9ZU1RJQ0spXSB8PQorCQkJQklUX01BU0soQlROX1RSSUdHRVIpIHwgQklUX01BU0soQlROX1RIVU1CKSB8CisJCQlCSVRfTUFTSyhCVE5fVE9QKSB8IEJJVF9NQVNLKEJUTl9QSU5LSUUpOwogCiAJCWEzZF9yZWFkKGEzZCwgZGF0YSk7CiAKQEAgLTM0OCw5ICszNTMsMTAgQEAKIAl9IGVsc2UgewogCQlhM2QtPmxlbmd0aCA9IDI5OwogCi0JCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKLQkJaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7Ci0JCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX01PVVNFKV0gfD0gQklUKEJUTl9SSUdIVCkgfCBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9NSURETEUpOworCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCQlpbnB1dF9kZXYtPnJlbGJpdFswXSB8PSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CisJCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldIHw9IEJJVF9NQVNLKEJUTl9SSUdIVCkgfAorCQkJQklUX01BU0soQlROX0xFRlQpIHwgQklUX01BU0soQlROX01JRERMRSk7CiAKIAkJYTNkX3JlYWQoYTNkLCBkYXRhKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYWRpLmMKaW5kZXggMjgxNDBjNC4uZDFjYThhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hZGkuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FkaS5jCkBAIC00MzEsNyArNDMxLDcgQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSBhZGlfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gYWRpX2Nsb3NlOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkaS0+YXhlczEwICsgYWRpLT5heGVzOCArIChhZGktPmhhdHMgKyAoYWRpLT5wYWQgIT0gLTEpKSAqIDI7IGkrKykKIAkJc2V0X2JpdChhZGktPmFic1tpXSwgaW5wdXRfZGV2LT5hYnNiaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW1pam95LmMKaW5kZXggYjBmNTU0MS4uNWNmOWYzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbWlqb3kuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FtaWpveS5jCkBAIC0xMzcsOSArMTM3LDEwIEBACiAJCWFtaWpveV9kZXZbaV0tPm9wZW4gPSBhbWlqb3lfb3BlbjsKIAkJYW1pam95X2RldltpXS0+Y2xvc2UgPSBhbWlqb3lfY2xvc2U7CiAKLQkJYW1pam95X2RldltpXS0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCQlhbWlqb3lfZGV2W2ldLT5hYnNiaXRbMF0gPSBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKTsKLQkJYW1pam95X2RldltpXS0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX01JRERMRSkgfCBCSVQoQlROX1JJR0hUKTsKKwkJYW1pam95X2RldltpXS0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKKwkJYW1pam95X2RldltpXS0+YWJzYml0WzBdID0gQklUX01BU0soQUJTX1gpIHwgQklUX01BU0soQUJTX1kpOworCQlhbWlqb3lfZGV2W2ldLT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCWFtaWpveV9kZXZbaV0tPmFic21pbltBQlNfWCArIGpdID0gLTE7CiAJCQlhbWlqb3lfZGV2W2ldLT5hYnNtYXhbQUJTX1ggKyBqXSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9hbmFsb2cuYwppbmRleCBiZGQxNTdjLi4xNTczOTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2FuYWxvZy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svYW5hbG9nLmMKQEAgLTQ1Niw3ICs0NTYsNyBAQAogCWlucHV0X2Rldi0+b3BlbiA9IGFuYWxvZ19vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSBhbmFsb2dfY2xvc2U7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CiAKIAlmb3IgKGkgPSBqID0gMDsgaSA8IDQ7IGkrKykKIAkJaWYgKGFuYWxvZy0+bWFzayAmICgxIDw8IGkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2NvYnJhLmMKaW5kZXggZDMzNTJhOC4uNTU2NDZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9jb2JyYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svY29icmEuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJCWlucHV0X2Rldi0+b3BlbiA9IGNvYnJhX29wZW47CiAJCWlucHV0X2Rldi0+Y2xvc2UgPSBjb2JyYV9jbG9zZTsKIAotCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAtMSwgMSwgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIC0xLCAxLCAwLCAwKTsKIAkJZm9yIChqID0gMDsgY29icmFfYnRuW2pdOyBqKyspCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9kYjkuYwppbmRleCBiMDY5ZWUxLi5hNmNhOWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2RiOS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZGI5LmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDEgVm9qdGVjaCBQYXZsaWsKICAqCiAgKiAgQmFzZWQgb24gdGhlIHdvcmsgb2Y6Ci0gKglBbmRyZWUgQm9ycm1hbm4JCU1hdHMgU2r2dmFsbAorICoJQW5kcmVlIEJvcnJtYW5uCQlNYXRzIFNqw7Z2YWxsCiAgKi8KIAogLyoKQEAgLTYzMSw3ICs2MzEsNyBAQAogCQlpbnB1dF9kZXYtPm9wZW4gPSBkYjlfb3BlbjsKIAkJaW5wdXRfZGV2LT5jbG9zZSA9IGRiOV9jbG9zZTsKIAotCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCQlmb3IgKGogPSAwOyBqIDwgZGI5X21vZGUtPm5fYnV0dG9uczsgaisrKQogCQkJc2V0X2JpdChkYjlfbW9kZS0+YnV0dG9uc1tqXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQlmb3IgKGogPSAwOyBqIDwgZGI5X21vZGUtPm5fYXhpczsgaisrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dhbWVjb24uYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jCmluZGV4IDFhNDUyZTAuLmRmMmE5ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ2FtZWNvbi5jCkBAIC02NTMsMTIgKzY1MywxMiBAQAogCWlucHV0X2Rldi0+Y2xvc2UgPSBnY19jbG9zZTsKIAogCWlmIChwYWRfdHlwZSAhPSBHQ19TTkVTTU9VU0UpIHsKLQkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCArIGksIC0xLCAxLCAwLCAwKTsKIAl9IGVsc2UKLQkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKIAogCWdjLT5wYWRzWzBdIHw9IGdjX3N0YXR1c19iaXRbaWR4XTsKIAlnYy0+cGFkc1twYWRfdHlwZV0gfD0gZ2Nfc3RhdHVzX2JpdFtpZHhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9nZjJrLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYwppbmRleCBkNTE0YWViLi4xZjYzMDJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dmMmsuYwpAQCAtMzE1LDcgKzMxNSw3IEBACiAJaW5wdXRfZGV2LT5vcGVuID0gZ2Yya19vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSBnZjJrX2Nsb3NlOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJZm9yIChpID0gMDsgaSA8IGdmMmtfYXhlc1tnZjJrLT5pZF07IGkrKykKIAkJc2V0X2JpdChnZjJrX2Fic1tpXSwgaW5wdXRfZGV2LT5hYnNiaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYwppbmRleCA3M2ViNWFiLi5mZDM4NTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXAuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJCWlucHV0X2Rldi0+b3BlbiA9IGdyaXBfb3BlbjsKIAkJaW5wdXRfZGV2LT5jbG9zZSA9IGdyaXBfY2xvc2U7CiAKLQkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAogCQlmb3IgKGogPSAwOyAodCA9IGdyaXBfYWJzW2dyaXAtPm1vZGVbaV1dW2pdKSA+PSAwOyBqKyspIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ncmlwX21wLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYwppbmRleCA0ZWQzYTNlLi5jNTdlMjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2dyaXBfbXAuYwpAQCAtNjA2LDcgKzYwNiw3IEBACiAJaW5wdXRfZGV2LT5vcGVuID0gZ3JpcF9vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSBncmlwX2Nsb3NlOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJZm9yIChqID0gMDsgKHQgPSBncmlwX2Fic1twb3J0LT5tb2RlXVtqXSkgPj0gMDsgaisrKQogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIHQsIC0xLCAxLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2d1aWxsZW1vdC5jCmluZGV4IGQ0ZTgwNzMuLmFhNmJmYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svZ3VpbGxlbW90LmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9ndWlsbGVtb3QuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiAJaW5wdXRfZGV2LT5vcGVuID0gZ3VpbGxlbW90X29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IGd1aWxsZW1vdF9jbG9zZTsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAogCWZvciAoaSA9IDA7ICh0ID0gZ3VpbGxlbW90LT50eXBlLT5hYnNbaV0pID49IDA7IGkrKykKIAkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCB0LCAwLCAyNTUsIDAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvTWFrZWZpbGUgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9NYWtlZmlsZQppbmRleCAxN2FlNDJiLi43NGRhZmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBJLUZvcmNlIGRyaXZlcgogIwotIyBCeSBKb2hhbm4gRGVuZXV4IDxkZW5ldXhAaWZyYW5jZS5jb20+CisjIEJ5IEpvaGFubiBEZW5ldXggPGpvaGFubi5kZW5ldXhAZ21haWwuY29tPgogIwogCiAjIEdvYWwgZGVmaW5pdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKaW5kZXggNjgyMjQ0Yi4uNmY4MjZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCkBAIC0zODksNyArMzg5LDggQEAKICAqIFNldCBpbnB1dCBkZXZpY2UgYml0ZmllbGRzIGFuZCByYW5nZXMuCiAgKi8KIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpIHwgQklUKEVWX0ZGX1NUQVRVUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpIHwKKwkJQklUX01BU0soRVZfRkZfU1RBVFVTKTsKIAogCWZvciAoaSA9IDA7IGlmb3JjZS0+dHlwZS0+YnRuW2ldID49IDA7IGkrKykKIAkJc2V0X2JpdChpZm9yY2UtPnR5cGUtPmJ0bltpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLmggYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAppbmRleCA0MGE4NTNhLi5hOTY0YTdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaAorKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UuaApAQCAtNjIsMTMgKzYyLDEzIEBACiAjZGVmaW5lIEZGX0NPUkVfSVNfUExBWUVECTMJLyogRWZmZWN0IGlzIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQgKi8KICNkZWZpbmUgRkZfQ09SRV9TSE9VTERfUExBWQk0CS8qIFVzZXIgd2FudHMgdGhlIGVmZmVjdCB0byBiZSBwbGF5ZWQgKi8KICNkZWZpbmUgRkZfQ09SRV9VUERBVEUJCTUJLyogRWZmZWN0IGlzIGJlaW5nIHVwZGF0ZWQgKi8KLSNkZWZpbmUgRkZfTU9EQ09SRV9NQVgJCTUKKyNkZWZpbmUgRkZfTU9EQ09SRV9DTlQJCTYKIAogc3RydWN0IGlmb3JjZV9jb3JlX2VmZmVjdCB7CiAJLyogSW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgbW9kaWZpZXJzIGFyZSBzdG9yZWQgaW4gdGhlIGRldmljZSdzIG1lbW9yeSAqLwogCXN0cnVjdCByZXNvdXJjZSBtb2QxX2NodW5rOwogCXN0cnVjdCByZXNvdXJjZSBtb2QyX2NodW5rOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3NbTkJJVFMoRkZfTU9EQ09SRV9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzW0JJVFNfVE9fTE9OR1MoRkZfTU9EQ09SRV9DTlQpXTsKIH07CiAKICNkZWZpbmUgRkZfQ01EX0VGRkVDVAkJMHgwMTBlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2ludGVyYWN0LmMKaW5kZXggMWFlYzFlOS4uYmM4ZWE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pbnRlcmFjdC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaW50ZXJhY3QuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAJaW5wdXRfZGV2LT5vcGVuID0gaW50ZXJhY3Rfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gaW50ZXJhY3RfY2xvc2U7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CiAKIAlmb3IgKGkgPSAwOyAodCA9IGludGVyYWN0X3R5cGVbaW50ZXJhY3QtPnR5cGVdLmFic1tpXSkgPj0gMDsgaSsrKSB7CiAJCXNldF9iaXQodCwgaW5wdXRfZGV2LT5hYnNiaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYWdlbGxhbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9tYWdlbGxhbi5jCmluZGV4IGIzNTYwNGUuLjU0ZTY3NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svbWFnZWxsYW4uYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL21hZ2VsbGFuLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAogCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCiAJCXNldF9iaXQobWFnZWxsYW5fYnV0dG9uc1tpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zaWRld2luZGVyLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwppbmRleCAyYWRmNzNmLi43YjQ4NjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NpZGV3aW5kZXIuYwpAQCAtNzU4LDcgKzc1OCw3IEBACiAJCWlucHV0X2Rldi0+b3BlbiA9IHN3X29wZW47CiAJCWlucHV0X2Rldi0+Y2xvc2UgPSBzd19jbG9zZTsKIAotCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJCWZvciAoaiA9IDA7IChiaXRzID0gc3dfYml0W3N3LT50eXBlXVtqXSk7IGorKykgewogCQkJY29kZSA9IHN3X2Fic1tzdy0+dHlwZV1bal07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZWJhbGwuYwppbmRleCBhYmI3YzRjLi5kNDA4N2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2ViYWxsLmMKQEAgLTIyOCwxOCArMjI4LDIzIEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJc3dpdGNoIChpZCkgewogCQljYXNlIFNQQUNFQkFMTF80MDAwRkxYOgogCQljYXNlIFNQQUNFQkFMTF80MDAwRkxYX0w6Ci0JCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl8wKV0gfD0gQklUKEJUTl85KTsKLQkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0EpXSB8PSBCSVQoQlROX0EpIHwgQklUKEJUTl9CKSB8IEJJVChCVE5fQykgfCBCSVQoQlROX01PREUpOworCQkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROXzApXSB8PSBCSVRfTUFTSyhCVE5fOSk7CisJCQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fQSldIHw9IEJJVF9NQVNLKEJUTl9BKSB8CisJCQkJQklUX01BU0soQlROX0IpIHwgQklUX01BU0soQlROX0MpIHwKKwkJCQlCSVRfTUFTSyhCVE5fTU9ERSk7CiAJCWRlZmF1bHQ6Ci0JCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl8wKV0gfD0gQklUKEJUTl8yKSB8IEJJVChCVE5fMykgfCBCSVQoQlROXzQpCi0JCQkJfCBCSVQoQlROXzUpIHwgQklUKEJUTl82KSB8IEJJVChCVE5fNykgfCBCSVQoQlROXzgpOworCQkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROXzApXSB8PSBCSVRfTUFTSyhCVE5fMikgfAorCQkJCUJJVF9NQVNLKEJUTl8zKSB8IEJJVF9NQVNLKEJUTl80KSB8CisJCQkJQklUX01BU0soQlROXzUpIHwgQklUX01BU0soQlROXzYpIHwKKwkJCQlCSVRfTUFTSyhCVE5fNykgfCBCSVRfTUFTSyhCVE5fOCk7CiAJCWNhc2UgU1BBQ0VCQUxMXzMwMDNDOgotCQkJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fMCldIHw9IEJJVChCVE5fMSkgfCBCSVQoQlROXzgpOworCQkJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROXzApXSB8PSBCSVRfTUFTSyhCVE5fMSkgfAorCQkJCUJJVF9NQVNLKEJUTl84KTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlb3JiLmMKaW5kZXggYzQ5MzdmMS4uZjdjZTQwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZW9yYi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2VvcmIuYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCiAJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJc2V0X2JpdChzcGFjZW9yYl9idXR0b25zW2ldLCBpbnB1dF9kZXYtPmtleWJpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3N0aW5nZXIuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3Rpbmdlci5jCmluZGV4IDg1ODFlZTkuLmJhYTEwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3Rpbmdlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3Rpbmdlci5jCkBAIC0xNTYsMTAgKzE1NiwxMSBAQAogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0EpXSA9IEJJVChCVE5fQSkgfCBCSVQoQlROX0IpIHwgQklUKEJUTl9DKSB8IEJJVChCVE5fWCkgfAotCQkJCQkgQklUKEJUTl9ZKSB8IEJJVChCVE5fWikgfCBCSVQoQlROX1RMKSB8IEJJVChCVE5fVFIpIHwKLQkJCQkJIEJJVChCVE5fU1RBUlQpIHwgQklUKEJUTl9TRUxFQ1QpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fQSldID0gQklUX01BU0soQlROX0EpIHwgQklUX01BU0soQlROX0IpIHwKKwkJQklUX01BU0soQlROX0MpIHwgQklUX01BU0soQlROX1gpIHwgQklUX01BU0soQlROX1kpIHwKKwkJQklUX01BU0soQlROX1opIHwgQklUX01BU0soQlROX1RMKSB8IEJJVF9NQVNLKEJUTl9UUikgfAorCQlCSVRfTUFTSyhCVE5fU1RBUlQpIHwgQklUX01BU0soQlROX1NFTEVDVCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgLTY0LCA2NCwgMCwgNCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgLTY0LCA2NCwgMCwgNCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdG1kYy5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKaW5kZXggM2IzNmVlMC4uMGZlZWI4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKKysrIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay90bWRjLmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCWlucHV0X2Rldi0+b3BlbiA9IHRtZGNfb3BlbjsKIAlpbnB1dF9kZXYtPmNsb3NlID0gdG1kY19jbG9zZTsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKIAogCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5hYnNjICYmIGkgPCBUTURDX0FCUzsgaSsrKQogCQlpZiAocG9ydC0+YWJzW2ldID49IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R1cmJvZ3JhZnguYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCmluZGV4IDgzODFjNmYuLmJiZWJkNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svdHVyYm9ncmFmeC5jCkBAIC0yMjksNyArMjI5LDcgQEAKIAkJaW5wdXRfZGV2LT5vcGVuID0gdGdmeF9vcGVuOwogCQlpbnB1dF9kZXYtPmNsb3NlID0gdGdmeF9jbG9zZTsKIAotCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAtMSwgMSwgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIC0xLCAxLCAwLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9qb3lzdGljay90d2lkam95LmMgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R3aWRqb3kuYwppbmRleCBjOTE1MDRlLi4xMDg1Yzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R3aWRqb3kuYworKysgYi9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3R3aWRqb3kuYwpAQCAtMjA3LDcgKzIwNyw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIC01MCwgNTAsIDQsIDQpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIC01MCwgNTAsIDQsIDQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3dhcnJpb3IuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svd2Fycmlvci5jCmluZGV4IDRlODVmNzIuLmU5MjhiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2svd2Fycmlvci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svd2Fycmlvci5jCkBAIC0xNjIsOSArMTYyLDExIEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCkgfCBCSVQoRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9UUklHR0VSKV0gPSBCSVQoQlROX1RSSUdHRVIpIHwgQklUKEJUTl9USFVNQikgfCBCSVQoQlROX1RPUCkgfCBCSVQoQlROX1RPUDIpOwotCWlucHV0X2Rldi0+cmVsYml0WzBdID0gQklUKFJFTF9ESUFMKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCkgfAorCQlCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UUklHR0VSKV0gPSBCSVRfTUFTSyhCVE5fVFJJR0dFUikgfAorCQlCSVRfTUFTSyhCVE5fVEhVTUIpIHwgQklUX01BU0soQlROX1RPUCkgfCBCSVRfTUFTSyhCVE5fVE9QMik7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfRElBTCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgLTY0LCA2NCwgMCwgOCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgLTY0LCA2NCwgMCwgOCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfVEhST1RUTEUsIC0xMTIsIDExMiwgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3hwYWQuYyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCmluZGV4IDYyMzYyOWEuLjZkZDM3NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2sveHBhZC5jCkBAIC02NTgsNyArNjU4LDcgQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSB4cGFkX29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IHhwYWRfY2xvc2U7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CiAKIAkvKiBzZXQgdXAgYnV0dG9ucyAqLwogCWZvciAoaSA9IDA7IHhwYWRfYnRuW2ldID49IDA7IGkrKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWFlZDIwMDBfa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FhZWQyMDAwX2tiZC5jCmluZGV4IDYzZDZlYWQuLjcyYWJjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYWFlZDIwMDBfa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hYWVkMjAwMF9rYmQuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CiAJaW5wdXRfZGV2LT5rZXljb2RlID0gYWFlZGtiZC0+a2V5Y29kZTsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoYWFlZGtiZF9rZXljb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYW1pa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2FtaWtiZC5jCmluZGV4IGM2N2U4NGUuLjgxYmY3NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYW1pa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hbWlrYmQuYwpAQCAtMjA5LDcgKzIwOSw3IEBACiAJYW1pa2JkX2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAlhbWlrYmRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCi0JYW1pa2JkX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRVApOworCWFtaWtiZF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMHg3ODsgaSsrKQogCQlzZXRfYml0KGksIGFtaWtiZF9kZXYtPmtleWJpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0YWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYwppbmRleCBhMTgwMDE1Li40ZTkyMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0YWtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRha2JkLmMKQEAgLTIzNyw3ICsyMzcsNyBAQAogCWF0YWtiZF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJYXRha2JkX2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAotCWF0YWtiZF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKKwlhdGFrYmRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOwogCWF0YWtiZF9kZXYtPmtleWNvZGUgPSBhdGFrYmRfa2V5Y29kZTsKIAlhdGFrYmRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKIAlhdGFrYmRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShhdGFrYmRfa2V5Y29kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKaW5kZXggNDFmYzNkMC4uYjM5YzViMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYwpAQCAtOTAwLDI3ICs5MDAsMzIgQEAKIAogCWlucHV0X3NldF9kcnZkYXRhKGlucHV0X2RldiwgYXRrYmQpOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCkgfCBCSVQoRVZfTVNDKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCkgfAorCQlCSVRfTUFTSyhFVl9NU0MpOwogCiAJaWYgKGF0a2JkLT53cml0ZSkgewotCQlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVChFVl9MRUQpOwotCQlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVChMRURfTlVNTCkgfCBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfU0NST0xMTCk7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfTEVEKTsKKwkJaW5wdXRfZGV2LT5sZWRiaXRbMF0gPSBCSVRfTUFTSyhMRURfTlVNTCkgfAorCQkJQklUX01BU0soTEVEX0NBUFNMKSB8IEJJVF9NQVNLKExFRF9TQ1JPTExMKTsKIAl9CiAKIAlpZiAoYXRrYmQtPmV4dHJhKQotCQlpbnB1dF9kZXYtPmxlZGJpdFswXSB8PSBCSVQoTEVEX0NPTVBPU0UpIHwgQklUKExFRF9TVVNQRU5EKSB8Ci0JCQkJCUJJVChMRURfU0xFRVApIHwgQklUKExFRF9NVVRFKSB8IEJJVChMRURfTUlTQyk7CisJCWlucHV0X2Rldi0+bGVkYml0WzBdIHw9IEJJVF9NQVNLKExFRF9DT01QT1NFKSB8CisJCQlCSVRfTUFTSyhMRURfU1VTUEVORCkgfCBCSVRfTUFTSyhMRURfU0xFRVApIHwKKwkJCUJJVF9NQVNLKExFRF9NVVRFKSB8IEJJVF9NQVNLKExFRF9NSVNDKTsKIAogCWlmICghYXRrYmQtPnNvZnRyZXBlYXQpIHsKIAkJaW5wdXRfZGV2LT5yZXBbUkVQX0RFTEFZXSA9IDI1MDsKIAkJaW5wdXRfZGV2LT5yZXBbUkVQX1BFUklPRF0gPSAzMzsKIAl9CiAKLQlpbnB1dF9kZXYtPm1zY2JpdFswXSA9IGF0a2JkLT5zb2Z0cmF3ID8gQklUKE1TQ19TQ0FOKSA6IEJJVChNU0NfUkFXKSB8IEJJVChNU0NfU0NBTik7CisJaW5wdXRfZGV2LT5tc2NiaXRbMF0gPSBhdGtiZC0+c29mdHJhdyA/IEJJVF9NQVNLKE1TQ19TQ0FOKSA6CisJCUJJVF9NQVNLKE1TQ19SQVcpIHwgQklUX01BU0soTVNDX1NDQU4pOwogCiAJaWYgKGF0a2JkLT5zY3JvbGwpIHsKLQkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfUkVMKTsKLQkJaW5wdXRfZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1dIRUVMKSB8IEJJVChSRUxfSFdIRUVMKTsKKwkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9SRUwpOworCQlpbnB1dF9kZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9XSEVFTCkgfAorCQkJQklUX01BU0soUkVMX0hXSEVFTCk7CiAJCXNldF9iaXQoQlROX01JRERMRSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9jb3JnaWtiZC5jCmluZGV4IDY1NzhiZmYuLjc5MGZlZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvY29yZ2lrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2Nvcmdpa2JkLmMKQEAgLTMyNSw3ICszMjUsOCBAQAogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCkgfCBCSVQoRVZfUFdSKSB8IEJJVChFVl9TVyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApIHwKKwkJQklUX01BU0soRVZfUFdSKSB8IEJJVF9NQVNLKEVWX1NXKTsKIAlpbnB1dF9kZXYtPmtleWNvZGUgPSBjb3JnaWtiZC0+a2V5Y29kZTsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoY29yZ2lrYmRfa2V5Y29kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9ncGlvX2tleXMuYwppbmRleCBlMmEzMjkzLi4zZWRkZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2dwaW9fa2V5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvZ3Bpb19rZXlzLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGlucHV0KTsKIAotCWlucHV0LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSk7CiAKIAlpbnB1dC0+bmFtZSA9IHBkZXYtPm5hbWU7CiAJaW5wdXQtPnBoeXMgPSAiZ3Bpby1rZXlzL2lucHV0MCI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbF9rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCmluZGV4IGNkZDI1NGYuLmFkYmYyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsX2tiZC5jCkBAIC0zMjMsOCArMzIzLDkgQEAKIAkJZ290byBiYWlsMjsKIAl9CiAKLQlrYmQtPmRldi0+ZXZiaXRbMF0JPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRVApOwotCWtiZC0+ZGV2LT5sZWRiaXRbMF0JPSBCSVQoTEVEX05VTUwpIHwgQklUKExFRF9DQVBTTCkgfCBCSVQoTEVEX1NDUk9MTEwpOworCWtiZC0+ZGV2LT5ldmJpdFswXQk9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOworCWtiZC0+ZGV2LT5sZWRiaXRbMF0JPSBCSVRfTUFTSyhMRURfTlVNTCkgfCBCSVRfTUFTSyhMRURfQ0FQU0wpIHwKKwkJQklUX01BU0soTEVEX1NDUk9MTEwpOwogCWtiZC0+ZGV2LT5rZXljb2RlbWF4CT0gSElMX0tFWUNPREVTX1NFVDFfVEJMU0laRTsKIAlrYmQtPmRldi0+a2V5Y29kZXNpemUJPSBzaXplb2YoaGlsX2tiZF9zZXQxWzBdKTsKIAlrYmQtPmRldi0+a2V5Y29kZQk9IGhpbF9rYmRfc2V0MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2hpbGtiZC5jCmluZGV4IDQ5OWI2OTcuLjUwZDgwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvaGlsa2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9oaWxrYmQuYwpAQCAtMjY2LDggKzI2Niw5IEBACiAJCWlmIChocGhpbGtleWJfa2V5Y29kZVtpXSAhPSBLRVlfUkVTRVJWRUQpCiAJCQlzZXRfYml0KGhwaGlsa2V5Yl9rZXljb2RlW2ldLCBoaWxfZGV2LmRldi0+a2V5Yml0KTsKIAotCWhpbF9kZXYuZGV2LT5ldmJpdFswXQk9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCk7Ci0JaGlsX2Rldi5kZXYtPmxlZGJpdFswXQk9IEJJVChMRURfTlVNTCkgfCBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfU0NST0xMTCk7CisJaGlsX2Rldi5kZXYtPmV2Yml0WzBdCT0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CisJaGlsX2Rldi5kZXYtPmxlZGJpdFswXQk9IEJJVF9NQVNLKExFRF9OVU1MKSB8IEJJVF9NQVNLKExFRF9DQVBTTCkgfAorCQlCSVRfTUFTSyhMRURfU0NST0xMTCk7CiAJaGlsX2Rldi5kZXYtPmtleWNvZGVtYXgJPSBISUxfS0VZQ09ERVNfU0VUMV9UQkxTSVpFOwogCWhpbF9kZXYuZGV2LT5rZXljb2Rlc2l6ZT0gc2l6ZW9mKGhwaGlsa2V5Yl9rZXljb2RlWzBdKTsKIAloaWxfZGV2LmRldi0+a2V5Y29kZQk9IGhwaGlsa2V5Yl9rZXljb2RlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sb2NvbW9rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG9jb21va2JkLmMKaW5kZXggN2E0MWIyNy4uNWEwY2ExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sb2NvbW9rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xvY29tb2tiZC5jCkBAIC0yMzMsNyArMjMzLDcgQEAKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOwogCWlucHV0X2Rldi0+a2V5Y29kZSA9IGxvY29tb2tiZC0+a2V5Y29kZTsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUobG9jb21va2JkX2tleWNvZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9uZXd0b25rYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbmV3dG9ua2JkLmMKaW5kZXggYjk3YTQxZS4uNDhkMWNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9uZXd0b25rYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL25ld3RvbmtiZC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNlcmlvLT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CiAJaW5wdXRfZGV2LT5rZXljb2RlID0gbmtiZC0+a2V5Y29kZTsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUobmtiZF9rZXljb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwppbmRleCA3NmYxOTY5Li5iYWJjOTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9vbWFwLWtleXBhZC5jCkBAIC00LDcgKzQsNyBAQAogICogT01BUCBLZXlwYWQgRHJpdmVyCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAzIE5va2lhIENvcnBvcmF0aW9uCi0gKiBXcml0dGVuIGJ5IFRpbW8gVGVy5HMgPGV4dC10aW1vLnRlcmFzQG5va2lhLmNvbT4KKyAqIFdyaXR0ZW4gYnkgVGltbyBUZXLDpHMgPGV4dC10aW1vLnRlcmFzQG5va2lhLmNvbT4KICAqCiAgKiBBZGRlZCBzdXBwb3J0IGZvciBIMiAmIEgzIEtleXBhZAogICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzCkBAIC00ODEsNiArNDgxLDYgQEAKIG1vZHVsZV9pbml0KG9tYXBfa3BfaW5pdCk7CiBtb2R1bGVfZXhpdChvbWFwX2twX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJUaW1vIFRlcuRzIik7CitNT0RVTEVfQVVUSE9SKCJUaW1vIFRlcsOkcyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIEtleXBhZCBEcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcHhhMjd4X2tleWJvYXJkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3B4YTI3eF9rZXlib2FyZC5jCmluZGV4IGI3MDYxYWEuLmJkZDY0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvcHhhMjd4X2tleWJvYXJkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9weGEyN3hfa2V5Ym9hcmQuYwpAQCAtMTgzLDggKzE4Myw5IEBACiAJaW5wdXRfZGV2LT5jbG9zZSA9IHB4YWtiZF9jbG9zZTsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCkgfCBCSVQoRVZfUkVMKTsKLQlpbnB1dF9kZXYtPnJlbGJpdFtMT05HKFJFTF9XSEVFTCldID0gQklUKFJFTF9XSEVFTCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApIHwKKwkJQklUX01BU0soRVZfUkVMKTsKKwlpbnB1dF9kZXYtPnJlbGJpdFtCSVRfV09SRChSRUxfV0hFRUwpXSA9IEJJVF9NQVNLKFJFTF9XSEVFTCk7CiAJZm9yIChyb3cgPSAwOyByb3cgPCBwZGF0YS0+bnJfcm93czsgcm93KyspIHsKIAkJZm9yIChjb2wgPSAwOyBjb2wgPCBwZGF0YS0+bnJfY29sczsgY29sKyspIHsKIAkJCWludCBjb2RlID0gcGRhdGEtPmtleWNvZGVzW3Jvd11bY29sXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3BpdHprYmQuYwppbmRleCA0MWI4MDM4Li40MTBkNzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3NwaXR6a2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zcGl0emtiZC5jCkBAIC0zODEsNyArMzgxLDggQEAKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCkgfCBCSVQoRVZfUFdSKSB8IEJJVChFVl9TVyk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApIHwKKwkJQklUX01BU0soRVZfUFdSKSB8IEJJVF9NQVNLKEVWX1NXKTsKIAlpbnB1dF9kZXYtPmtleWNvZGUgPSBzcGl0emtiZC0+a2V5Y29kZTsKIAlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUoc3BpdHprYmRfa2V5Y29kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N0b3dhd2F5LmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N0b3dhd2F5LmMKaW5kZXggYjQ0YjA2OC4uNzQzNzIxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdG93YXdheS5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Rvd2F3YXkuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOwogCWlucHV0X2Rldi0+a2V5Y29kZSA9IHNrYmQtPmtleWNvZGU7CiAJaW5wdXRfZGV2LT5rZXljb2Rlc2l6ZSA9IHNpemVvZih1bnNpZ25lZCBjaGFyKTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKHNrYmRfa2V5Y29kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9zdW5rYmQuYwppbmRleCAxZDRlMzk2Li5iZTBmNWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3N1bmtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvc3Vua2JkLmMKQEAgLTI3Nyw5ICsyNzcsMTEgQEAKIAogCWlucHV0X2Rldi0+ZXZlbnQgPSBzdW5rYmRfZXZlbnQ7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfTEVEKSB8IEJJVChFVl9TTkQpIHwgQklUKEVWX1JFUCk7Ci0JaW5wdXRfZGV2LT5sZWRiaXRbMF0gPSBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfQ09NUE9TRSkgfCBCSVQoTEVEX1NDUk9MTEwpIHwgQklUKExFRF9OVU1MKTsKLQlpbnB1dF9kZXYtPnNuZGJpdFswXSA9IEJJVChTTkRfQ0xJQ0spIHwgQklUKFNORF9CRUxMKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0xFRCkgfAorCQlCSVRfTUFTSyhFVl9TTkQpIHwgQklUX01BU0soRVZfUkVQKTsKKwlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVF9NQVNLKExFRF9DQVBTTCkgfCBCSVRfTUFTSyhMRURfQ09NUE9TRSkgfAorCQlCSVRfTUFTSyhMRURfU0NST0xMTCkgfCBCSVRfTUFTSyhMRURfTlVNTCk7CisJaW5wdXRfZGV2LT5zbmRiaXRbMF0gPSBCSVRfTUFTSyhTTkRfQ0xJQ0spIHwgQklUX01BU0soU05EX0JFTEwpOwogCiAJaW5wdXRfZGV2LT5rZXljb2RlID0gc3Vua2JkLT5rZXljb2RlOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3h0a2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3h0a2JkLmMKaW5kZXggZjNhNTZlYi4uMTUyYTJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC94dGtiZC5jCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQveHRrYmQuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFUCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApOwogCWlucHV0X2Rldi0+a2V5Y29kZSA9IHh0a2JkLT5rZXljb2RlOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodW5zaWduZWQgY2hhcik7CiAJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRSh4dGtiZF9rZXljb2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKaW5kZXggN2FjYzYzNS4uOGY1YzdiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKQEAgLTcwLDkgKzcwLDkgQEAKIAlzZWxlY3QgTEVEU19DTEFTUwogCXNlbGVjdCBDSEVDS19TSUdOQVRVUkUKIAloZWxwCi0JICBTYXkgWSBoZXJlIGZvciBzdXBwb3J0IG9mIFdpbnN0cm9uIGxhcHRvcCBidXR0b24gaW50ZXJmYWNlLCB1c2VkIG9uCisJICBTYXkgWSBoZXJlIGZvciBzdXBwb3J0IG9mIFdpc3Ryb24gbGFwdG9wIGJ1dHRvbiBpbnRlcmZhY2VzLCB1c2VkIG9uCiAJICBsYXB0b3BzIG9mIHZhcmlvdXMgYnJhbmRzLCBpbmNsdWRpbmcgQWNlciBhbmQgRnVqaXRzdS1TaWVtZW5zLiBJZgotCSAgYXZhaWxhYmxlLCBtYWlsIGFuZCB3aWZpIGxlZHMgd2lsbCBiZSBjb250cm9sYWJsZSB2aWEgL3N5cy9jbGFzcy9sZWRzLgorCSAgYXZhaWxhYmxlLCBtYWlsIGFuZCB3aWZpIExFRHMgd2lsbCBiZSBjb250cm9sbGFibGUgdmlhIC9zeXMvY2xhc3MvbGVkcy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZSB3aWxsCiAJICBiZSBjYWxsZWQgd2lzdHJvbl9idG5zLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGlfcmVtb3RlLmMKaW5kZXggNDcxYWFiMi4uM2E3OTM3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZS5jCkBAIC02NjIsMTAgKzY2MiwxMCBAQAogCXN0cnVjdCBpbnB1dF9kZXYgKmlkZXYgPSBhdGlfcmVtb3RlLT5pZGV2OwogCWludCBpOwogCi0JaWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCWlkZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gKCBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9SSUdIVCkgfAotCQkJCQkgIEJJVChCVE5fU0lERSkgfCBCSVQoQlROX0VYVFJBKSApOwotCWlkZXYtPnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCWlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CisJaWRldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX1JJR0hUKSB8IEJJVF9NQVNLKEJUTl9TSURFKSB8IEJJVF9NQVNLKEJUTl9FWFRSQSk7CisJaWRldi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOwogCWZvciAoaSA9IDA7IGF0aV9yZW1vdGVfdGJsW2ldLmtpbmQgIT0gS0lORF9FTkQ7IGkrKykKIAkJaWYgKGF0aV9yZW1vdGVfdGJsW2ldLnR5cGUgPT0gRVZfS0VZKQogCQkJc2V0X2JpdChhdGlfcmVtb3RlX3RibFtpXS5jb2RlLCBpZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2F0aV9yZW1vdGUyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYwppbmRleCAxMDMxNTQzLi5mMjcwOWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRpX3JlbW90ZTIuYwpAQCAtMzQ2LDkgKzM0NiwxMCBAQAogCWFyMi0+aWRldiA9IGlkZXY7CiAJaW5wdXRfc2V0X2RydmRhdGEoaWRldiwgYXIyKTsKIAotCWlkZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKSB8IEJJVChFVl9SRUwpOwotCWlkZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpOwotCWlkZXYtPnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCWlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWlkZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCUJJVF9NQVNLKEJUTl9SSUdIVCk7CisJaWRldi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOwogCWZvciAoaSA9IDA7IGF0aV9yZW1vdGUyX2tleV90YWJsZVtpXS5rZXlfY29kZSAhPSBLRVlfUkVTRVJWRUQ7IGkrKykKIAkJc2V0X2JpdChhdGlfcmVtb3RlMl9rZXlfdGFibGVbaV0ua2V5X2NvZGUsIGlkZXYtPmtleWJpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGxhc19idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvYXRsYXNfYnRucy5jCmluZGV4IGU0M2U5MmYuLjRlM2FkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9hdGxhc19idG5zLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2F0bGFzX2J0bnMuYwpAQCAtODEsNyArODEsNyBAQAogCWlucHV0X2Rldi0+bmFtZSA9ICJBdGxhcyBBQ1BJIGJ1dHRvbiBkcml2ZXIiOwogCWlucHV0X2Rldi0+cGh5cyA9ICJBU0lNMDAwMC9hdGxhcy9pbnB1dDAiOwogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCWlucHV0X2Rldi0+ZXZiaXRbTE9ORyhFVl9LRVkpXSA9IEJJVChFVl9LRVkpOworCWlucHV0X2Rldi0+ZXZiaXRbQklUX1dPUkQoRVZfS0VZKV0gPSBCSVRfTUFTSyhFVl9LRVkpOwogCiAJc2V0X2JpdChLRVlfRjEsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAlzZXRfYml0KEtFWV9GMiwgaW5wdXRfZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL2NvYmFsdF9idG5zLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwppbmRleCAwNjRiMDc5Li4xYWVmOTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvY29iYWx0X2J0bnMuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJaW5wdXQtPmlkLmJ1c3R5cGUgPSBCVVNfSE9TVDsKIAlpbnB1dC0+Y2Rldi5kZXYgPSAmcGRldi0+ZGV2OwogCi0JaW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7CisJaW5wdXQtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidXR0b25zX21hcCk7IGkrKykgewogCQlzZXRfYml0KGJ1dHRvbnNfbWFwW2ldLmtleWNvZGUsIGlucHV0LT5rZXliaXQpOwogCQlidXR0b25zX21hcFtpXS5jb3VudCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2l4cDR4eC1iZWVwZXIuYwppbmRleCBlNzU5OTQ0Li5kMmFkZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvaXhwNHh4LWJlZXBlci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9peHA0eHgtYmVlcGVyLmMKQEAgLTEwOSw4ICsxMDksOCBAQAogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX1NORCk7Ci0JaW5wdXRfZGV2LT5zbmRiaXRbMF0gPSBCSVQoU05EX0JFTEwpIHwgQklUKFNORF9UT05FKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfU05EKTsKKwlpbnB1dF9kZXYtPnNuZGJpdFswXSA9IEJJVF9NQVNLKFNORF9CRUxMKSB8IEJJVF9NQVNLKFNORF9UT05FKTsKIAlpbnB1dF9kZXYtPmV2ZW50ID0gaXhwNHh4X3Nwa3JfZXZlbnQ7CiAKIAllcnIgPSByZXF1ZXN0X2lycShJUlFfSVhQNFhYX1RJTUVSMiwgJml4cDR4eF9zcGtyX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9rZXlzcGFuX3JlbW90ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKaW5kZXggMWJmZmM5Zi4uZmQ3NDM0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL2tleXNwYW5fcmVtb3RlLmMKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCXVzYl90b19pbnB1dF9pZCh1ZGV2LCAmaW5wdXRfZGV2LT5pZCk7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmludGVyZmFjZS0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOwkJLyogV2Ugd2lsbCBvbmx5IHJlcG9ydCBLRVkgZXZlbnRzLiAqLworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOwkJLyogV2Ugd2lsbCBvbmx5IHJlcG9ydCBLRVkgZXZlbnRzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGtleXNwYW5fa2V5X3RhYmxlKTsgaSsrKQogCQlpZiAoa2V5c3Bhbl9rZXlfdGFibGVbaV0gIT0gS0VZX1JFU0VSVkVEKQogCQkJc2V0X2JpdChrZXlzcGFuX2tleV90YWJsZVtpXSwgaW5wdXRfZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL202OGtzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2MvbTY4a3Nwa3IuYwppbmRleCBlOWYyNmU3Li4wYzY0ZDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvbTY4a3Nwa3IuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvbTY4a3Nwa3IuYwpAQCAtNjUsOCArNjUsOCBAQAogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX1NORCk7Ci0JaW5wdXRfZGV2LT5zbmRiaXRbMF0gPSBCSVQoU05EX0JFTEwpIHwgQklUKFNORF9UT05FKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfU05EKTsKKwlpbnB1dF9kZXYtPnNuZGJpdFswXSA9IEJJVF9NQVNLKFNORF9CRUxMKSB8IEJJVF9NQVNLKFNORF9UT05FKTsKIAlpbnB1dF9kZXYtPmV2ZW50ID0gbTY4a3Nwa3JfZXZlbnQ7CiAKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9wY3Nwa3IuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9wY3Nwa3IuYwppbmRleCBjMTlmNzdmLi40OTQxYTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MvcGNzcGtyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL3Bjc3Brci5jCkBAIC04Niw4ICs4Niw4IEBACiAJcGNzcGtyX2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlwY3Nwa3JfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwogCi0JcGNzcGtyX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfU05EKTsKLQlwY3Nwa3JfZGV2LT5zbmRiaXRbMF0gPSBCSVQoU05EX0JFTEwpIHwgQklUKFNORF9UT05FKTsKKwlwY3Nwa3JfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1NORCk7CisJcGNzcGtyX2Rldi0+c25kYml0WzBdID0gQklUX01BU0soU05EX0JFTEwpIHwgQklUX01BU0soU05EX1RPTkUpOwogCXBjc3Brcl9kZXYtPmV2ZW50ID0gcGNzcGtyX2V2ZW50OwogCiAJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHBjc3Brcl9kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3Bvd2VybWF0ZS5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3Bvd2VybWF0ZS5jCmluZGV4IDQ0OGE0NzAuLjdhN2I4YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9wb3dlcm1hdGUuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MvcG93ZXJtYXRlLmMKQEAgLTM2MywxMCArMzYzLDExIEBACiAKIAlpbnB1dF9kZXYtPmV2ZW50ID0gcG93ZXJtYXRlX2lucHV0X2V2ZW50OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCkgfCBCSVQoRVZfTVNDKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl8wKV0gPSBCSVQoQlROXzApOwotCWlucHV0X2Rldi0+cmVsYml0W0xPTkcoUkVMX0RJQUwpXSA9IEJJVChSRUxfRElBTCk7Ci0JaW5wdXRfZGV2LT5tc2NiaXRbTE9ORyhNU0NfUFVMU0VMRUQpXSA9IEJJVChNU0NfUFVMU0VMRUQpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKSB8CisJCUJJVF9NQVNLKEVWX01TQyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROXzApXSA9IEJJVF9NQVNLKEJUTl8wKTsKKwlpbnB1dF9kZXYtPnJlbGJpdFtCSVRfV09SRChSRUxfRElBTCldID0gQklUX01BU0soUkVMX0RJQUwpOworCWlucHV0X2Rldi0+bXNjYml0W0JJVF9XT1JEKE1TQ19QVUxTRUxFRCldID0gQklUX01BU0soTVNDX1BVTFNFTEVEKTsKIAogCS8qIGdldCBhIGhhbmRsZSB0byB0aGUgaW50ZXJydXB0IGRhdGEgcGlwZSAqLwogCXBpcGUgPSB1c2JfcmN2aW50cGlwZSh1ZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMgYi9kcml2ZXJzL2lucHV0L21pc2Mvc3BhcmNzcGtyLmMKaW5kZXggZTM2ZWMxZC4uYTM2MzdkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3NwYXJjc3Brci5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy9zcGFyY3Nwa3IuYwpAQCAtMTE1LDggKzExNSw4IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9IGRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfU05EKTsKLQlpbnB1dF9kZXYtPnNuZGJpdFswXSA9IEJJVChTTkRfQkVMTCkgfCBCSVQoU05EX1RPTkUpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9TTkQpOworCWlucHV0X2Rldi0+c25kYml0WzBdID0gQklUX01BU0soU05EX0JFTEwpIHwgQklUX01BU0soU05EX1RPTkUpOwogCiAJaW5wdXRfZGV2LT5ldmVudCA9IHN0YXRlLT5ldmVudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmMKaW5kZXggYWIxNTg4MC4uNDYyNzllZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5jCkBAIC05NDUsNyArOTQ1LDcgQEAKIAkvKiBpbnB1dF9kZXYtPmV2ZW50ID0gaW5wdXRfZXY7CVRPRE8gKi8KIAogCS8qIHJlZ2lzdGVyIGF2YWlsYWJsZSBrZXkgZXZlbnRzICovCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOwogCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewogCQlpbnQgayA9IG1hcF9wMWtfdG9fa2V5KGkpOwogCQlpZiAoayA+PSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2FscHMuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCmluZGV4IDY0ZDcwYTkuLjJiNWVkMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvYWxwcy5jCkBAIC00NTUsMjQgKzQ1NSwyNSBAQAogCWlmIChhbHBzX2h3X2luaXQocHNtb3VzZSwgJnZlcnNpb24pKQogCQlnb3RvIGluaXRfZmFpbDsKIAotCWRldjEtPmV2Yml0W0xPTkcoRVZfS0VZKV0gfD0gQklUKEVWX0tFWSk7Ci0JZGV2MS0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gfD0gQklUKEJUTl9UT1VDSCk7Ci0JZGV2MS0+a2V5Yml0W0xPTkcoQlROX1RPT0xfRklOR0VSKV0gfD0gQklUKEJUTl9UT09MX0ZJTkdFUik7Ci0JZGV2MS0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9SSUdIVCk7CisJZGV2MS0+ZXZiaXRbQklUX1dPUkQoRVZfS0VZKV0gfD0gQklUX01BU0soRVZfS0VZKTsKKwlkZXYxLT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gfD0gQklUX01BU0soQlROX1RPVUNIKTsKKwlkZXYxLT5rZXliaXRbQklUX1dPUkQoQlROX1RPT0xfRklOR0VSKV0gfD0gQklUX01BU0soQlROX1RPT0xfRklOR0VSKTsKKwlkZXYxLT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSB8PSBCSVRfTUFTSyhCVE5fTEVGVCkgfAorCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CiAKLQlkZXYxLT5ldmJpdFtMT05HKEVWX0FCUyldIHw9IEJJVChFVl9BQlMpOworCWRldjEtPmV2Yml0W0JJVF9XT1JEKEVWX0FCUyldIHw9IEJJVF9NQVNLKEVWX0FCUyk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoZGV2MSwgQUJTX1gsIDAsIDEwMjMsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldjEsIEFCU19ZLCAwLCA3NjcsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldjEsIEFCU19QUkVTU1VSRSwgMCwgMTI3LCAwLCAwKTsKIAogCWlmIChwcml2LT5pLT5mbGFncyAmIEFMUFNfV0hFRUwpIHsKLQkJZGV2MS0+ZXZiaXRbTE9ORyhFVl9SRUwpXSB8PSBCSVQoRVZfUkVMKTsKLQkJZGV2MS0+cmVsYml0W0xPTkcoUkVMX1dIRUVMKV0gfD0gQklUKFJFTF9XSEVFTCk7CisJCWRldjEtPmV2Yml0W0JJVF9XT1JEKEVWX1JFTCldIHw9IEJJVF9NQVNLKEVWX1JFTCk7CisJCWRldjEtPnJlbGJpdFtCSVRfV09SRChSRUxfV0hFRUwpXSB8PSBCSVRfTUFTSyhSRUxfV0hFRUwpOwogCX0KIAogCWlmIChwcml2LT5pLT5mbGFncyAmIChBTFBTX0ZXX0JLXzEgfCBBTFBTX0ZXX0JLXzIpKSB7Ci0JCWRldjEtPmtleWJpdFtMT05HKEJUTl9GT1JXQVJEKV0gfD0gQklUKEJUTl9GT1JXQVJEKTsKLQkJZGV2MS0+a2V5Yml0W0xPTkcoQlROX0JBQ0spXSB8PSBCSVQoQlROX0JBQ0spOworCQlkZXYxLT5rZXliaXRbQklUX1dPUkQoQlROX0ZPUldBUkQpXSB8PSBCSVRfTUFTSyhCVE5fRk9SV0FSRCk7CisJCWRldjEtPmtleWJpdFtCSVRfV09SRChCVE5fQkFDSyldIHw9IEJJVF9NQVNLKEJUTl9CQUNLKTsKIAl9CiAKIAlzbnByaW50Zihwcml2LT5waHlzLCBzaXplb2YocHJpdi0+cGh5cyksICIlcy9pbnB1dDEiLCBwc21vdXNlLT5wczJkZXYuc2VyaW8tPnBoeXMpOwpAQCAtNDgzLDkgKzQ4NCwxMCBAQAogCWRldjItPmlkLnByb2R1Y3QgPSBQU01PVVNFX0FMUFM7CiAJZGV2Mi0+aWQudmVyc2lvbiA9IDB4MDAwMDsKIAotCWRldjItPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKLQlkZXYyLT5yZWxiaXRbTE9ORyhSRUxfWCldIHw9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOwotCWRldjItPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fUklHSFQpOworCWRldjItPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CisJZGV2Mi0+cmVsYml0W0JJVF9XT1JEKFJFTF9YKV0gfD0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOworCWRldjItPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldIHw9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCUJJVF9NQVNLKEJUTl9NSURETEUpIHwgQklUX01BU0soQlROX1JJR0hUKTsKIAogCWlmIChpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocHJpdi0+ZGV2MikpCiAJCWdvdG8gaW5pdF9mYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hbWltb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hbWltb3VzZS5jCmluZGV4IDIzOWEwZTEuLmExODVhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYW1pbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2FtaW1vdXNlLmMKQEAgLTExMSw5ICsxMTEsMTAgQEAKIAlhbWltb3VzZV9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDI7CiAJYW1pbW91c2VfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCi0JYW1pbW91c2VfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7Ci0JYW1pbW91c2VfZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKLQlhbWltb3VzZV9kZXYtPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gPSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9SSUdIVCk7CisJYW1pbW91c2VfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWFtaW1vdXNlX2Rldi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOworCWFtaW1vdXNlX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gPSBCSVRfTUFTSyhCVE5fTEVGVCkgfAorCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CiAJYW1pbW91c2VfZGV2LT5vcGVuID0gYW1pbW91c2Vfb3BlbjsKIAlhbWltb3VzZV9kZXYtPmNsb3NlID0gYW1pbW91c2VfY2xvc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvYXRhcmltb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hdGFyaW1vdXNlLmMKaW5kZXggYzhjNzI0NC4uOThhMzU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hdGFyaW1vdXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9hdGFyaW1vdXNlLmMKQEAgLTEzNyw5ICsxMzcsMTAgQEAKIAlhdGFtb3VzZV9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDI7CiAJYXRhbW91c2VfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCi0JYXRhbW91c2VfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7Ci0JYXRhbW91c2VfZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKLQlhdGFtb3VzZV9kZXYtPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gPSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9SSUdIVCk7CisJYXRhbW91c2VfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWF0YW1vdXNlX2Rldi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOworCWF0YW1vdXNlX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gPSBCSVRfTUFTSyhCVE5fTEVGVCkgfAorCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CiAJYXRhbW91c2VfZGV2LT5vcGVuID0gYXRhbW91c2Vfb3BlbjsKIAlhdGFtb3VzZV9kZXYtPmNsb3NlID0gYXRhbW91c2VfY2xvc2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvaGlsX3B0ci5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKaW5kZXggNDQ5YmY0ZC4uMjdmODhmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9oaWxfcHRyLmMKQEAgLTI5OCwxMiArMjk4LDEyIEBACiAJaWRkID0gcHRyLT5pZGQgKyAxOwogCXR4dCA9ICJ1bmtub3duIjsKIAlpZiAoKGRpZCAmIEhJTF9JRERfRElEX1RZUEVfTUFTSykgPT0gSElMX0lERF9ESURfVFlQRV9SRUwpIHsKLQkJcHRyLT5kZXYtPmV2Yml0WzBdID0gQklUKEVWX1JFTCk7CisJCXB0ci0+ZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1JFTCk7CiAJCXR4dCA9ICJyZWxhdGl2ZSI7CiAJfQogCiAJaWYgKChkaWQgJiBISUxfSUREX0RJRF9UWVBFX01BU0spID09IEhJTF9JRERfRElEX1RZUEVfQUJTKSB7Ci0JCXB0ci0+ZGV2LT5ldmJpdFswXSA9IEJJVChFVl9BQlMpOworCQlwdHItPmRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9BQlMpOwogCQl0eHQgPSAiYWJzb2x1dGUiOwogCX0KIAlpZiAoIXB0ci0+ZGV2LT5ldmJpdFswXSkKQEAgLTMxMSw3ICszMTEsNyBAQAogCiAJcHRyLT5uYnRuID0gSElMX0lERF9OVU1fQlVUVE9OUyhpZGQpOwogCWlmIChwdHItPm5idG4pCi0JCXB0ci0+ZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfS0VZKTsKKwkJcHRyLT5kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX0tFWSk7CiAKIAluYXhzZXRzID0gSElMX0lERF9OVU1fQVhTRVRTKCppZGQpOwogCXB0ci0+bmF4ZXMgPSBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoKmlkZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9pbnBvcnQuYwppbmRleCA3OWI2MjRmLi42NTVhMzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2lucG9ydC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvaW5wb3J0LmMKQEAgLTE2Myw5ICsxNjMsMTAgQEAKIAlpbnBvcnRfZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCWlucG9ydF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAKLQlpbnBvcnRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7Ci0JaW5wb3J0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX01JRERMRSkgfCBCSVQoQlROX1JJR0hUKTsKLQlpbnBvcnRfZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKKwlpbnBvcnRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWlucG9ydF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX01JRERMRSkgfCBCSVRfTUFTSyhCVE5fUklHSFQpOworCWlucG9ydF9kZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKIAogCWlucG9ydF9kZXYtPm9wZW4gID0gaW5wb3J0X29wZW47CiAJaW5wb3J0X2Rldi0+Y2xvc2UgPSBpbnBvcnRfY2xvc2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xpZmVib29rLmMKaW5kZXggZDdkZTRjNS4uOWVjNTdkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9saWZlYm9vay5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbGlmZWJvb2suYwpAQCAtMjcwLDkgKzI3MCwxMCBAQAogCWRldjItPmlkLnZlcnNpb24gPSAweDAwMDA7CiAJZGV2Mi0+ZGV2LnBhcmVudCA9ICZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldjsKIAotCWRldjItPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKLQlkZXYyLT5yZWxiaXRbTE9ORyhSRUxfWCldID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7Ci0JZGV2Mi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKTsKKwlkZXYyLT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWRldjItPnJlbGJpdFtCSVRfV09SRChSRUxfWCldID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOworCWRldjItPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX1JJR0hUKTsKIAogCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHByaXYtPmRldjIpOwogCWlmIChlcnJvcikKQEAgLTI5NSw5ICsyOTYsOSBAQAogCWlmIChsaWZlYm9va19hYnNvbHV0ZV9tb2RlKHBzbW91c2UpKQogCQlyZXR1cm4gLTE7CiAKLQlkZXYxLT5ldmJpdFswXSA9IEJJVChFVl9BQlMpIHwgQklUKEVWX0tFWSk7CisJZGV2MS0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9BQlMpIHwgQklUX01BU0soRVZfS0VZKTsKIAlkZXYxLT5yZWxiaXRbMF0gPSAwOwotCWRldjEtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisJZGV2MS0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYxLCBBQlNfWCwgMCwgbWF4X2Nvb3JkLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhkZXYxLCBBQlNfWSwgMCwgbWF4X2Nvb3JkLCAwLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpYm0uYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naWJtLmMKaW5kZXggMjZjM2IyZS4uYjIzYTRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpYm0uYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2libS5jCkBAIC0xNTYsOSArMTU2LDEwIEBACiAJbG9naWJtX2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAlsb2dpYm1fZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCi0JbG9naWJtX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCWxvZ2libV9kZXYtPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gPSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9SSUdIVCk7Ci0JbG9naWJtX2Rldi0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7CisJbG9naWJtX2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKKwlsb2dpYm1fZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCUJJVF9NQVNLKEJUTl9NSURETEUpIHwgQklUX01BU0soQlROX1JJR0hUKTsKKwlsb2dpYm1fZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CiAKIAlsb2dpYm1fZGV2LT5vcGVuICA9IGxvZ2libV9vcGVuOwogCWxvZ2libV9kZXYtPmNsb3NlID0gbG9naWJtX2Nsb3NlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wYzExMHBhZC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wYzExMHBhZC5jCmluZGV4IDA1ZDk5MmUuLjg5OTFhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcGMxMTBwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BjMTEwcGFkLmMKQEAgLTE0NCw5ICsxNDQsOSBAQAogCXBjMTEwcGFkX2Rldi0+aWQucHJvZHVjdCA9IDB4MDAwMTsKIAlwYzExMHBhZF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAKLQlwYzExMHBhZF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlwYzExMHBhZF9kZXYtPmFic2JpdFswXSA9IEJJVChBQlNfWCkgfCBCSVQoQUJTX1kpOwotCXBjMTEwcGFkX2Rldi0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKwlwYzExMHBhZF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJcGMxMTBwYWRfZGV2LT5hYnNiaXRbMF0gPSBCSVRfTUFTSyhBQlNfWCkgfCBCSVRfTUFTSyhBQlNfWSk7CisJcGMxMTBwYWRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCiAJcGMxMTBwYWRfZGV2LT5hYnNtYXhbQUJTX1hdID0gMHgxZmY7CiAJcGMxMTBwYWRfZGV2LT5hYnNtYXhbQUJTX1ldID0gMHgwZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYwppbmRleCAwNzM1MjU3Li4yMWE5YzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKQEAgLTkwNiw3ICs5MDYsNyBAQAogCiAvKgogICogcHNtb3VzZV9kZWFjdGl2YXRlKCkgcHV0cyB0aGUgbW91c2UgaW50byBwb2xsIG1vZGUgc28gdGhhdCB3ZSBkb24ndCBnZXQgbW90aW9uCi0gKiByZXBvcnRzIGZyb20gaXQgdW5sZXNzIHdlIGV4cGxpY2l0ZWx5IHJlcXVlc3QgaXQuCisgKiByZXBvcnRzIGZyb20gaXQgdW5sZXNzIHdlIGV4cGxpY2l0bHkgcmVxdWVzdCBpdC4KICAqLwogCiBzdGF0aWMgdm9pZCBwc21vdXNlX2RlYWN0aXZhdGUoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCkBAIC0xMTE1LDkgKzExMTUsMTAgQEAKIAogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX01PVVNFKV0gPSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9SSUdIVCk7Ci0JaW5wdXRfZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1gpIHwgQklUKFJFTF9ZKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gPSBCSVRfTUFTSyhCVE5fTEVGVCkgfAorCQlCSVRfTUFTSyhCVE5fTUlERExFKSB8IEJJVF9NQVNLKEJUTl9SSUdIVCk7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CiAKIAlwc21vdXNlLT5zZXRfcmF0ZSA9IHBzbW91c2Vfc2V0X3JhdGU7CiAJcHNtb3VzZS0+c2V0X3Jlc29sdXRpb24gPSBwc21vdXNlX3NldF9yZXNvbHV0aW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9ycGNtb3VzZS5jCmluZGV4IDM1NWVmZDAuLjE4YTQ4NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvcnBjbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3JwY21vdXNlLmMKQEAgLTc4LDkgKzc4LDEwIEBACiAJcnBjbW91c2VfZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOwogCXJwY21vdXNlX2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAotCXJwY21vdXNlX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCXJwY21vdXNlX2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX01JRERMRSkgfCBCSVQoQlROX1JJR0hUKTsKLQlycGNtb3VzZV9kZXYtPnJlbGJpdFswXQk9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCXJwY21vdXNlX2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKKwlycGNtb3VzZV9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX01JRERMRSkgfCBCSVRfTUFTSyhCVE5fUklHSFQpOworCXJwY21vdXNlX2Rldi0+cmVsYml0WzBdCT0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOwogCiAJcnBjbW91c2VfbGFzdHggPSAoc2hvcnQpIGlvbWRfcmVhZGwoSU9NRF9NT1VTRVgpOwogCXJwY21vdXNlX2xhc3R5ID0gKHNob3J0KSBpb21kX3JlYWRsKElPTURfTU9VU0VZKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2Uvc2VybW91c2UuYwppbmRleCA3N2I4ZWUyLi5lZDkxN2JmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL3Nlcm1vdXNlLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9zZXJtb3VzZS5jCkBAIC0yNjgsOSArMjY4LDEwIEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKTsKLQlpbnB1dF9kZXYtPnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCUJJVF9NQVNLKEJUTl9SSUdIVCk7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CiAKIAlpZiAoYyAmIDB4MDEpIHNldF9iaXQoQlROX01JRERMRSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCWlmIChjICYgMHgwMikgc2V0X2JpdChCVE5fU0lERSwgaW5wdXRfZGV2LT5rZXliaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdG91Y2hraXRfcHMyLmMKaW5kZXggN2I5NzdmZC4uM2ZhZGIyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS90b3VjaGtpdF9wczIuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3RvdWNoa2l0X3BzMi5jCkBAIC04NSw3ICs4NSw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJaWYgKHNldF9wcm9wZXJ0aWVzKSB7Ci0JCWRldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOworCQlkZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CiAJCXNldF9iaXQoQlROX1RPVUNILCBkZXYtPmtleWJpdCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1gsIDAsIFRPVUNIS0lUX01BWF9YQywgMCwgMCk7CiAJCWlucHV0X3NldF9hYnNfcGFyYW1zKGRldiwgQUJTX1ksIDAsIFRPVUNIS0lUX01BWF9ZQywgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlL3ZzeHh4YWEuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCmluZGV4IDRhMzIxNTcuLjQwNGVlZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvdnN4eHhhYS5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIAogCS8qCiAJICogQ2hlY2sgZm9yIFBvd2VyLU9uLVJlc2V0IHBhY2tldHMuIFRoZXNlIGFyZSBzZW50IG91dAotCSAqIGFmdGVyIHBsdWdnaW5nIHRoZSBtb3VzZSBpbiwgb3Igd2hlbiBleHBsaWNpdGVseQorCSAqIGFmdGVyIHBsdWdnaW5nIHRoZSBtb3VzZSBpbiwgb3Igd2hlbiBleHBsaWNpdGx5CiAJICogcmVxdWVzdGVkIGJ5IHNlbmRpbmcgJ1QnLgogCSAqCiAJICogWzBdOgkxCTAJMQkwCVIzCVIyCVIxCVIwCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMgYi9kcml2ZXJzL2lucHV0L21vdXNlZGV2LmMKaW5kZXggNzkxNDZkNi4uNzhjM2VhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZWRldi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvbW91c2VkZXYuYwpAQCAtOTk4LDM0ICs5OTgsMzYgQEAKIAkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUIHwKIAkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklUIHwKIAkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUkVMQklULAotCQkuZXZiaXQgPSB7IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCkgfSwKLQkJLmtleWJpdCA9IHsgW0xPTkcoQlROX0xFRlQpXSA9IEJJVChCVE5fTEVGVCkgfSwKLQkJLnJlbGJpdCA9IHsgQklUKFJFTF9YKSB8IEJJVChSRUxfWSkgfSwKKwkJLmV2Yml0ID0geyBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKSB9LAorCQkua2V5Yml0ID0geyBbQklUX1dPUkQoQlROX0xFRlQpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB9LAorCQkucmVsYml0ID0geyBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSkgfSwKIAl9LAkvKiBBIG1vdXNlIGxpa2UgZGV2aWNlLCBhdCBsZWFzdCBvbmUgYnV0dG9uLAogCQkgICB0d28gcmVsYXRpdmUgYXhlcyAqLwogCXsKIAkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUIHwKIAkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUkVMQklULAotCQkuZXZiaXQgPSB7IEJJVChFVl9LRVkpIHwgQklUKEVWX1JFTCkgfSwKLQkJLnJlbGJpdCA9IHsgQklUKFJFTF9XSEVFTCkgfSwKKwkJLmV2Yml0ID0geyBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfUkVMKSB9LAorCQkucmVsYml0ID0geyBCSVRfTUFTSyhSRUxfV0hFRUwpIH0sCiAJfSwJLyogQSBzZXBhcmF0ZSBzY3JvbGx3aGVlbCAqLwogCXsKIAkJLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklUIHwKIAkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklUIHwKIAkJCQlJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfQUJTQklULAotCQkuZXZiaXQgPSB7IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUykgfSwKLQkJLmtleWJpdCA9IHsgW0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKSB9LAotCQkuYWJzYml0ID0geyBCSVQoQUJTX1gpIHwgQklUKEFCU19ZKSB9LAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpIH0sCisJCS5rZXliaXQgPSB7IFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCkgfSwKKwkJLmFic2JpdCA9IHsgQklUX01BU0soQUJTX1gpIHwgQklUX01BU0soQUJTX1kpIH0sCiAJfSwJLyogQSB0YWJsZXQgbGlrZSBkZXZpY2UsIGF0IGxlYXN0IHRvdWNoIGRldGVjdGlvbiwKIAkJICAgdHdvIGFic29sdXRlIGF4ZXMgKi8KIAl7CiAJCS5mbGFncyA9IElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCB8CiAJCQkJSU5QVVRfREVWSUNFX0lEX01BVENIX0tFWUJJVCB8CiAJCQkJSU5QVVRfREVWSUNFX0lEX01BVENIX0FCU0JJVCwKLQkJLmV2Yml0ID0geyBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpIH0sCi0JCS5rZXliaXQgPSB7IFtMT05HKEJUTl9UT09MX0ZJTkdFUildID0gQklUKEJUTl9UT09MX0ZJTkdFUikgfSwKLQkJLmFic2JpdCA9IHsgQklUKEFCU19YKSB8IEJJVChBQlNfWSkgfCBCSVQoQUJTX1BSRVNTVVJFKSB8Ci0JCQkJQklUKEFCU19UT09MX1dJRFRIKSB9LAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpIH0sCisJCS5rZXliaXQgPSB7IFtCSVRfV09SRChCVE5fVE9PTF9GSU5HRVIpXSA9CisJCQkJQklUX01BU0soQlROX1RPT0xfRklOR0VSKSB9LAorCQkuYWJzYml0ID0geyBCSVRfTUFTSyhBQlNfWCkgfCBCSVRfTUFTSyhBQlNfWSkgfAorCQkJCUJJVF9NQVNLKEFCU19QUkVTU1VSRSkgfAorCQkJCUJJVF9NQVNLKEFCU19UT09MX1dJRFRIKSB9LAogCX0sCS8qIEEgdG91Y2hwYWQgKi8KIAogCXsgfSwJLyogVGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwppbmRleCBiM2JjMTVhLi43ZjUyOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCkBAIC0zODcsOSArMzg3LDggQEAKIAlzZXRfZnJlZXphYmxlKCk7CiAJZG8gewogCQlzZXJpb19oYW5kbGVfZXZlbnQoKTsKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHNlcmlvX3dhaXQsCisJCXdhaXRfZXZlbnRfZnJlZXphYmxlKHNlcmlvX3dhaXQsCiAJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIWxpc3RfZW1wdHkoJnNlcmlvX2V2ZW50X2xpc3QpKTsKLQkJdHJ5X3RvX2ZyZWV6ZSgpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgInNlcmlvOiBrc2VyaW9kIGV4aXRpbmdcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWNlY2FkLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYwppbmRleCBkZDIzMTA0Li5iOTczZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYworKysgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9hY2VjYWQuYwpAQCAtMTkyLDEwICsxOTIsMTQgQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSB1c2JfYWNlY2FkX29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IHVzYl9hY2VjYWRfY2xvc2U7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmFic2JpdFswXSA9IEJJVChBQlNfWCkgfCBCSVQoQUJTX1kpIHwgQklUKEFCU19QUkVTU1VSRSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSA9IEJJVChCVE5fVE9PTF9QRU4pIHxCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKSB8IEJJVChCVE5fU1RZTFVTMik7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+YWJzYml0WzBdID0gQklUX01BU0soQUJTX1gpIHwgQklUX01BU0soQUJTX1kpIHwKKwkJQklUX01BU0soQUJTX1BSRVNTVVJFKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX1JJR0hUKSB8IEJJVF9NQVNLKEJUTl9NSURETEUpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gPSBCSVRfTUFTSyhCVE5fVE9PTF9QRU4pIHwKKwkJQklUX01BU0soQlROX1RPVUNIKSB8IEJJVF9NQVNLKEJUTl9TVFlMVVMpIHwKKwkJQklUX01BU0soQlROX1NUWUxVUzIpOwogCiAJc3dpdGNoIChpZC0+ZHJpdmVyX2luZm8pIHsKIAkJY2FzZSAwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCmluZGV4IGIyY2ExMGYyZi4uZDJjNmRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvZ3Rjby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L2d0Y28uYwpAQCAtNTczLDEwICs1NzMsMTIgQEAKIAlzdHJ1Y3QgZ3RjbyAqZGV2aWNlID0gaW5wdXRfZ2V0X2RydmRhdGEoaW5wdXRkZXYpOwogCiAJLyogV2hpY2ggZXZlbnRzICovCi0JaW5wdXRkZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKSB8IEJJVChFVl9NU0MpOworCWlucHV0ZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpIHwKKwkJQklUX01BU0soRVZfTVNDKTsKIAogCS8qIE1pc2MgZXZlbnQgbWVudSBibG9jayAqLwotCWlucHV0ZGV2LT5tc2NiaXRbMF0gPSBCSVQoTVNDX1NDQU4pfEJJVChNU0NfU0VSSUFMKXxCSVQoTVNDX1JBVykgOworCWlucHV0ZGV2LT5tc2NiaXRbMF0gPSBCSVRfTUFTSyhNU0NfU0NBTikgfCBCSVRfTUFTSyhNU0NfU0VSSUFMKSB8CisJCUJJVF9NQVNLKE1TQ19SQVcpOwogCiAJLyogQWJzb2x1dGUgdmFsdWVzIGJhc2VkIG9uIEhJRCByZXBvcnQgaW5mbyAqLwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0ZGV2LCBBQlNfWCwgZGV2aWNlLT5taW5fWCwgZGV2aWNlLT5tYXhfWCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMgYi9kcml2ZXJzL2lucHV0L3RhYmxldC9rYnRhYi5jCmluZGV4IDkxZTZkMDAuLjExODJmYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2tidGFiLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQva2J0YWIuYwpAQCAtMTUzLDEwICsxNTMsMTMgQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSBrYnRhYl9vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSBrYnRhYl9jbG9zZTsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKSB8IEJJVChFVl9NU0MpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROX0xFRlQpIHwgQklUKEJUTl9SSUdIVCkgfCBCSVQoQlROX01JRERMRSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9QRU4pIHwgQklUKEJUTl9UT1VDSCk7Ci0JaW5wdXRfZGV2LT5tc2NiaXRbMF0gfD0gQklUKE1TQ19TRVJJQUwpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUykgfAorCQlCSVRfTUFTSyhFVl9NU0MpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gfD0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX1JJR0hUKSB8IEJJVF9NQVNLKEJUTl9NSURETEUpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9ESUdJKV0gfD0gQklUX01BU0soQlROX1RPT0xfUEVOKSB8CisJCUJJVF9NQVNLKEJUTl9UT1VDSCk7CisJaW5wdXRfZGV2LT5tc2NiaXRbMF0gfD0gQklUX01BU0soTVNDX1NFUklBTCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgMCwgMHgyMDAwLCA0LCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCAweDE3NTAsIDQsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwLCAweGZmLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvd2Fjb21fc3lzLmMKaW5kZXggMDY0ZTEyMy4uZDY0YjFlYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdGFibGV0L3dhY29tX3N5cy5jCkBAIC0xNDAsNDggKzE0MCw1OCBAQAogCiB2b2lkIGlucHV0X2Rldl9tbyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl8xKSB8IEJJVChCVE5fNSk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSB8PSBCSVRfTUFTSyhCVE5fMSkgfAorCQlCSVRfTUFTSyhCVE5fNSk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfV0hFRUwsIDAsIDcxLCAwLCAwKTsKIH0KIAogdm9pZCBpbnB1dF9kZXZfZzQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7Ci0JaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfTVNDKTsKLQlpbnB1dF9kZXYtPm1zY2JpdFswXSB8PSBCSVQoTVNDX1NFUklBTCk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9GSU5HRVIpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROXzApIHwgQklUKEJUTl80KTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX01TQyk7CisJaW5wdXRfZGV2LT5tc2NiaXRbMF0gfD0gQklUX01BU0soTVNDX1NFUklBTCk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9GSU5HRVIpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gfD0gQklUX01BU0soQlROXzApIHwKKwkJQklUX01BU0soQlROXzQpOwogfQogCiB2b2lkIGlucHV0X2Rldl9nKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX1JFTCk7Ci0JaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpIHwgQklUKEJUTl9TVFlMVVMyKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVF9NQVNLKEVWX1JFTCk7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUX01BU0soUkVMX1dIRUVMKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTEVGVCldIHw9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCUJJVF9NQVNLKEJUTl9SSUdIVCkgfCBCSVRfTUFTSyhCVE5fTUlERExFKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT09MX1JVQkJFUikgfAorCQlCSVRfTUFTSyhCVE5fVE9PTF9NT1VTRSkgfCBCSVRfTUFTSyhCVE5fU1RZTFVTMik7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRpc3RhbmNlX21heCwgMCwgMCk7CiB9CiAKIHZvaWQgaW5wdXRfZGV2X2kzcyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX0ZJTkdFUik7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fMCkgfCBCSVQoQlROXzEpIHwgQklUKEJUTl8yKSB8IEJJVChCVE5fMyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9GSU5HRVIpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gfD0gQklUX01BU0soQlROXzApIHwKKwkJQklUX01BU0soQlROXzEpIHwgQklUX01BU0soQlROXzIpIHwgQklUX01BU0soQlROXzMpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCA0MDk2LCAwLCAwKTsKIH0KIAogdm9pZCBpbnB1dF9kZXZfaTMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCiB7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fNCkgfCBCSVQoQlROXzUpIHwgQklUKEJUTl82KSB8IEJJVChCVE5fNyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0xFRlQpXSB8PSBCSVRfTUFTSyhCVE5fNCkgfAorCQlCSVRfTUFTSyhCVE5fNSkgfCBCSVRfTUFTSyhCVE5fNikgfCBCSVRfTUFTSyhCVE5fNyk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIDQwOTYsIDAsIDApOwogfQogCiB2b2lkIGlucHV0X2Rldl9pKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX01TQykgfCBCSVQoRVZfUkVMKTsKLQlpbnB1dF9kZXYtPm1zY2JpdFswXSB8PSBCSVQoTVNDX1NFUklBTCk7Ci0JaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fU0lERSkgfCBCSVQoQlROX0VYVFJBKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpCXwgQklUKEJUTl9UT09MX0JSVVNIKQotCQl8IEJJVChCVE5fVE9PTF9QRU5DSUwpIHwgQklUKEJUTl9UT09MX0FJUkJSVVNIKSB8IEJJVChCVE5fVE9PTF9MRU5TKSB8IEJJVChCVE5fU1RZTFVTMik7CisJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVRfTUFTSyhFVl9NU0MpIHwgQklUX01BU0soRVZfUkVMKTsKKwlpbnB1dF9kZXYtPm1zY2JpdFswXSB8PSBCSVRfTUFTSyhNU0NfU0VSSUFMKTsKKwlpbnB1dF9kZXYtPnJlbGJpdFswXSB8PSBCSVRfTUFTSyhSRUxfV0hFRUwpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9MRUZUKV0gfD0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJQklUX01BU0soQlROX1JJR0hUKSB8IEJJVF9NQVNLKEJUTl9NSURETEUpIHwKKwkJQklUX01BU0soQlROX1NJREUpIHwgQklUX01BU0soQlROX0VYVFJBKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fRElHSSldIHw9IEJJVF9NQVNLKEJUTl9UT09MX1JVQkJFUikgfAorCQlCSVRfTUFTSyhCVE5fVE9PTF9NT1VTRSkgfCBCSVRfTUFTSyhCVE5fVE9PTF9CUlVTSCkgfAorCQlCSVRfTUFTSyhCVE5fVE9PTF9QRU5DSUwpIHwgQklUX01BU0soQlROX1RPT0xfQUlSQlJVU0gpIHwKKwkJQklUX01BU0soQlROX1RPT0xfTEVOUykgfCBCSVRfTUFTSyhCVE5fU1RZTFVTMik7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRpc3RhbmNlX21heCwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfV0hFRUwsIDAsIDEwMjMsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1RJTFRfWCwgMCwgMTI3LCAwLCAwKTsKQEAgLTE5MiwxMiArMjAyLDEzIEBACiAKIHZvaWQgaW5wdXRfZGV2X3BsKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQogewotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1NUWUxVUzIpIHwgQklUKEJUTl9UT09MX1JVQkJFUik7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fU1RZTFVTMikgfAorCQlCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpOwogfQogCiB2b2lkIGlucHV0X2Rldl9wdChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKIHsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUik7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9SVUJCRVIpOwogfQogCiBzdGF0aWMgaW50IHdhY29tX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0yNDMsMTIgKzI1NCwxMyBAQAogCWlucHV0X2Rldi0+b3BlbiA9IHdhY29tX29wZW47CiAJaW5wdXRfZGV2LT5jbG9zZSA9IHdhY29tX2Nsb3NlOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfUEVOKSB8IEJJVChCVE5fVE9VQ0gpIHwgQklUKEJUTl9TVFlMVVMpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX0RJR0kpXSB8PSBCSVRfTUFTSyhCVE5fVE9PTF9QRU4pIHwKKwkJQklUX01BU0soQlROX1RPVUNIKSB8IEJJVF9NQVNLKEJUTl9TVFlMVVMpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPnhfbWF4LCA0LCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT55X21heCwgNCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUFJFU1NVUkUsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCwgMCwgMCk7Ci0JaW5wdXRfZGV2LT5hYnNiaXRbTE9ORyhBQlNfTUlTQyldIHw9IEJJVChBQlNfTUlTQyk7CisJaW5wdXRfZGV2LT5hYnNiaXRbQklUX1dPUkQoQUJTX01JU0MpXSB8PSBCSVRfTUFTSyhBQlNfTUlTQyk7CiAKIAl3YWNvbV9pbml0X2lucHV0X2RldihpbnB1dF9kZXYsIHdhY29tX3dhYyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKaW5kZXggNTFhZTRmYi4uZjU5YWVjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9hZHM3ODQ2LmMKQEAgLTkxNyw4ICs5MTcsOCBAQAogCWlucHV0X2Rldi0+cGh5cyA9IHRzLT5waHlzOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzcGktPmRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsCiAJCQlwZGF0YS0+eF9taW4gPyA6IDAsCiAJCQlwZGF0YS0+eF9tYXggPyA6IE1BWF8xMkJJVCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vY29yZ2lfdHMuYwppbmRleCBlNmEzMWQxLi5iMWIyZTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2NvcmdpX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9jb3JnaV90cy5jCkBAIC0zMDIsOCArMzAyLDggQEAKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIFhfQVhJU19NSU4sIFhfQVhJU19NQVgsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIFlfQVhJU19NSU4sIFlfQVhJU19NQVgsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCBQUkVTU1VSRV9NSU4sIFBSRVNTVVJFX01BWCwgMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Vsby5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9lbG8uYwppbmRleCA1NTdkNzgxLi5kMjA2ODljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Vsby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZWxvLmMKQEAgLTMyMCw4ICszMjAsOCBAQAogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIGVsbyk7CiAJZXJyID0gc2VyaW9fb3BlbihzZXJpbywgZHJ2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZnVqaXRzdV90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9mdWppdHN1X3RzLmMKaW5kZXggZGFmN2E0YS4uODBiMjE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9mdWppdHN1X3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9mdWppdHN1X3RzLmMKQEAgLTEyMiw4ICsxMjIsOCBAQAogCWlucHV0X2Rldi0+aWQudmVuZG9yID0gU0VSSU9fRlVKSVRTVTsKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAwOwogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKIAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDAsIDQwOTYsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsIDQwOTYsIDAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ndW56ZS5jCmluZGV4IDM5ZDYwMjYuLmE0OGExNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vZ3VuemUuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2d1bnplLmMKQEAgLTEzNyw4ICsxMzcsOCBAQAogCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IDB4MDA1MTsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNlcmlvLT5kZXY7Ci0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgMjQsIDEwMDAsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDI0LCAxMDAwLCAwLCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCmluZGV4IDA5ZWQ3ODAuLjJhZTZjNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKQEAgLTM3Myw4ICszNzMsOSBAQAogCiAJaW5wdXRfZGV2LT5ldmVudCA9IGgzNjAwdHNfZXZlbnQ7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKSB8IEJJVChFVl9MRUQpIHwgQklUKEVWX1BXUik7Ci0JaW5wdXRfZGV2LT5sZWRiaXRbMF0gPSBCSVQoTEVEX1NMRUVQKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUykgfAorCQlCSVRfTUFTSyhFVl9MRUQpIHwgQklUX01BU0soRVZfUFdSKTsKKwlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVF9NQVNLKExFRF9TTEVFUCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWCwgNjAsIDk4NSwgMCwgMCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMzUsIDEwMjQsIDAsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKaW5kZXggMWExNTQ3NS4uYzM4ZDRlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwpAQCAtODEsOCArODEsOCBAQAogCWlmICghaHA2ODBfdHNfZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWhwNjgwX3RzX2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfQUJTKSB8IEJJVChFVl9LRVkpOwotCWhwNjgwX3RzX2Rldi0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKwlocDY4MF90c19kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfQUJTKSB8IEJJVF9NQVNLKEVWX0tFWSk7CisJaHA2ODBfdHNfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCiAJaW5wdXRfc2V0X2Fic19wYXJhbXMoaHA2ODBfdHNfZGV2LCBBQlNfWCwKIAkJSFA2ODBfVFNfQUJTX1hfTUlOLCBIUDY4MF9UU19BQlNfWF9NQVgsIDAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tazcxMi5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tazcxMi5jCmluZGV4IDQ0MTQwZmUuLjgwYTY1ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWs3MTIuYworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21rNzEyLmMKQEAgLTE4Niw4ICsxODYsOCBAQAogCW1rNzEyX2Rldi0+b3BlbiAgICA9IG1rNzEyX29wZW47CiAJbWs3MTJfZGV2LT5jbG9zZSAgID0gbWs3MTJfY2xvc2U7CiAKLQltazcxMl9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQltazcxMl9kZXYtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisJbWs3MTJfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCW1rNzEyX2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhtazcxMl9kZXYsIEFCU19YLCAwLCAweGZmZiwgODgsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKG1rNzEyX2RldiwgQUJTX1ksIDAsIDB4ZmZmLCA4OCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbXRvdWNoLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL210b3VjaC5jCmluZGV4IDRlYzNiMWYuLjkwNzcyMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbXRvdWNoLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9tdG91Y2guYwpAQCAtMTUxLDggKzE1MSw4IEBACiAJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMDsKIAlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAweDAxMDA7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJnNlcmlvLT5kZXY7Ci0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpIHwgQklUKEVWX0FCUyk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fVE9VQ0gpXSA9IEJJVChCVE5fVE9VQ0gpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fVE9VQ0gpXSA9IEJJVF9NQVNLKEJUTl9UT1VDSCk7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMobXRvdWNoLT5kZXYsIEFCU19YLCBNVE9VQ0hfTUlOX1hDLCBNVE9VQ0hfTUFYX1hDLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhtdG91Y2gtPmRldiwgQUJTX1ksIE1UT1VDSF9NSU5fWUMsIE1UT1VDSF9NQVhfWUMsIDAsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3Blbm1vdW50LmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3Blbm1vdW50LmMKaW5kZXggZjJjMGQzYy4uYzdmOWNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9wZW5tb3VudC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vcGVubW91bnQuYwpAQCAtMTEzLDggKzExMyw4IEBACiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZzZXJpby0+ZGV2OwogCi0gICAgICAgIGlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotICAgICAgICBpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisgICAgICAgIGlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfQUJTKTsKKyAgICAgICAgaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogICAgICAgICBpbnB1dF9zZXRfYWJzX3BhcmFtcyhwbS0+ZGV2LCBBQlNfWCwgMCwgMHgzZmYsIDAsIDApOwogICAgICAgICBpbnB1dF9zZXRfYWJzX3BhcmFtcyhwbS0+ZGV2LCBBQlNfWSwgMCwgMHgzZmYsIDAsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RvdWNocmlnaHQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2hyaWdodC5jCmluZGV4IDNkZWY3YmIuLjNhNWMxNDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2hyaWdodC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2hyaWdodC5jCkBAIC0xMjUsOCArMTI1LDggQEAKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAwOwogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyh0ci0+ZGV2LCBBQlNfWCwgVFJfTUlOX1hDLCBUUl9NQVhfWEMsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKHRyLT5kZXYsIEFCU19ZLCBUUl9NSU5fWUMsIFRSX01BWF9ZQywgMCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2h3aW4uYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdG91Y2h3aW4uYwppbmRleCBhYzRiZGNmLi43NjNhNjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3RvdWNod2luLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi90b3VjaHdpbi5jCkBAIC0xMzIsOCArMTMyLDggQEAKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAwOwogCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmc2VyaW8tPmRldjsKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9UT1VDSCldID0gQklUKEJUTl9UT1VDSCk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9UT1VDSCldID0gQklUX01BU0soQlROX1RPVUNIKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyh0dy0+ZGV2LCBBQlNfWCwgVFdfTUlOX1hDLCBUV19NQVhfWEMsIDAsIDApOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKHR3LT5kZXYsIEFCU19ZLCBUV19NSU5fWUMsIFRXX01BWF9ZQywgMCwgMCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdWNiMTQwMF90cy5jIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91Y2IxNDAwX3RzLmMKaW5kZXggODZhZWQ2NC4uNzU0OTkzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91Y2IxNDAwX3RzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91Y2IxNDAwX3RzLmMKQEAgLTMzMywxMCArMzMzLDkgQEAKIAkJCXRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDEwKTsKIAkJfQogCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHVjYi0+dHNfd2FpdCwKKwkJd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh1Y2ItPnRzX3dhaXQsCiAJCQl1Y2ItPmlycV9wZW5kaW5nIHx8IHVjYi0+dHNfcmVzdGFydCB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCksCiAJCQl0aW1lb3V0KTsKLQkJdHJ5X3RvX2ZyZWV6ZSgpOwogCX0KIAogCS8qIFNlbmQgdGhlICJwZW4gb2ZmIiBpZiB3ZSBhcmUgc3RvcHBpbmcgd2l0aCB0aGUgcGVuIHN0aWxsIGFjdGl2ZSAqLwpAQCAtNTE4LDcgKzUxNyw3IEBACiAJaWRldi0+aWQucHJvZHVjdAk9IGlkOwogCWlkZXYtPm9wZW4JCT0gdWNiMTQwMF90c19vcGVuOwogCWlkZXYtPmNsb3NlCQk9IHVjYjE0MDBfdHNfY2xvc2U7Ci0JaWRldi0+ZXZiaXRbMF0JCT0gQklUKEVWX0FCUyk7CisJaWRldi0+ZXZiaXRbMF0JCT0gQklUX01BU0soRVZfQUJTKTsKIAogCXVjYjE0MDBfYWRjX2VuYWJsZSh1Y2IpOwogCXhfcmVzID0gdWNiMTQwMF90c19yZWFkX3hyZXModWNiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vdXNidG91Y2hzY3JlZW4uYwppbmRleCA5ZmIzZDVjLi41ZjM0Yjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3VzYnRvdWNoc2NyZWVuLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi91c2J0b3VjaHNjcmVlbi5jCkBAIC04NjgsOCArODY4LDggQEAKIAlpbnB1dF9kZXYtPm9wZW4gPSB1c2J0b3VjaF9vcGVuOwogCWlucHV0X2Rldi0+Y2xvc2UgPSB1c2J0b3VjaF9jbG9zZTsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9BQlMpOwotCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX1RPVUNIKV0gPSBCSVQoQlROX1RPVUNIKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJaW5wdXRfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX1RPVUNIKV0gPSBCSVRfTUFTSyhCVE5fVE9VQ0gpOwogCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIHR5cGUtPm1pbl94YywgdHlwZS0+bWF4X3hjLCAwLCAwKTsKIAlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCB0eXBlLT5taW5feWMsIHR5cGUtPm1heF95YywgMCwgMCk7CiAJaWYgKHR5cGUtPm1heF9wcmVzcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMgYi9kcml2ZXJzL2lzZG4vYWN0MjAwMC9hY3QyMDAwX2lzYS5jCmluZGV4IDA5ZWE1MGQuLjgxOWVhODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9hY3QyMDAwL2FjdDIwMDBfaXNhLmMKKysrIGIvZHJpdmVycy9pc2RuL2FjdDIwMDAvYWN0MjAwMF9pc2EuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKIC8qCiAgKiBJbnN0YWxsIGludGVycnVwdCBoYW5kbGVyLCBlbmFibGUgaXJxIG9uIGNhcmQuCi0gKiBJZiBpcnEgaXMgLTEsIGNob29zZSBuZXh0IGZyZWUgaXJxLCBlbHNlIGlycSBpcyBnaXZlbiBleHBsaWNpdGVseS4KKyAqIElmIGlycSBpcyAtMSwgY2hvb3NlIG5leHQgZnJlZSBpcnEsIGVsc2UgaXJxIGlzIGdpdmVuIGV4cGxpY2l0bHkuCiAgKi8KIGludAogYWN0MjAwMF9pc2FfY29uZmlnX2lycShhY3QyMDAwX2NhcmQgKiBjYXJkLCBzaG9ydCBpcnEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCmluZGV4IDZkZjMzNmIuLmFjZDQxNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCkBAIC01MzQsNyArNTM0LDggQEAKIAkJCW4gPSBSQlVGU0laRSAtIHRhaWw7CiAJCWlmICghbikgewogCQkJZGV2X2VycihpbmJ1Zi0+Y3MtPmRldiwKLQkJCQkiYnVmZmVyIG92ZXJmbG93ICgldSBieXRlcyBsb3N0KSIsIGJ5dGVzbGVmdCk7CisJCQkJImJ1ZmZlciBvdmVyZmxvdyAoJXUgYnl0ZXMgbG9zdClcbiIsCisJCQkJYnl0ZXNsZWZ0KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChuID4gYnl0ZXNsZWZ0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMS5jCmluZGV4IDdhNjlhMTguLjQ0ODRhNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjEuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxLmMKQEAgLTMyMSwxMiArMzIxLDE1IEBACiAJYXZtY3RybF9pbmZvICpjaW5mbyA9IChhdm1jdHJsX2luZm8gKikoY3RybC0+ZHJpdmVyZGF0YSk7CiAJYXZtY2FyZCAqY2FyZCA9IGNpbmZvLT5jYXJkOwogCXVuc2lnbmVkIGludCBwb3J0ID0gY2FyZC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJYjFfcmVzZXQocG9ydCk7CiAJYjFfcmVzZXQocG9ydCk7CiAKIAltZW1zZXQoY2luZm8tPnZlcnNpb24sIDAsIHNpemVvZihjaW5mby0+dmVyc2lvbikpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJY2FwaWxpYl9yZWxlYXNlKCZjaW5mby0+bmNjaV9oZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJY2FwaV9jdHJfcmVzZXRlZChjdHJsKTsKIH0KIApAQCAtMzYxLDkgKzM2NCw4IEBACiAJdW5zaWduZWQgaW50IHBvcnQgPSBjYXJkLT5wb3J0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljYXBpbGliX3JlbGVhc2VfYXBwbCgmY2luZm8tPm5jY2lfaGVhZCwgYXBwbCk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOworCWNhcGlsaWJfcmVsZWFzZV9hcHBsKCZjaW5mby0+bmNjaV9oZWFkLCBhcHBsKTsKIAliMV9wdXRfYnl0ZShwb3J0LCBTRU5EX1JFTEVBU0UpOwogCWIxX3B1dF93b3JkKHBvcnQsIGFwcGwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKQEAgLTM4MCwyNyArMzgyLDI3IEBACiAJdTggc3ViY21kID0gQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSk7CiAJdTE2IGRsZW4sIHJldHZhbDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJaWYgKENBUElDTUQoY21kLCBzdWJjbWQpID09IENBUElfREFUQV9CM19SRVEpIHsKIAkJcmV0dmFsID0gY2FwaWxpYl9kYXRhX2IzX3JlcSgmY2luZm8tPm5jY2lfaGVhZCwKIAkJCQkJICAgICBDQVBJTVNHX0FQUElEKHNrYi0+ZGF0YSksCiAJCQkJCSAgICAgQ0FQSU1TR19OQ0NJKHNrYi0+ZGF0YSksCiAJCQkJCSAgICAgQ0FQSU1TR19NU0dJRChza2ItPmRhdGEpKTsKLQkJaWYgKHJldHZhbCAhPSBDQVBJX05PRVJST1IpIAorCQlpZiAocmV0dmFsICE9IENBUElfTk9FUlJPUikgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIHJldHZhbDsKKwkJfQogCiAJCWRsZW4gPSBDQVBJTVNHX0RBVEFMRU4oc2tiLT5kYXRhKTsKIAotCSAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJYjFfcHV0X2J5dGUocG9ydCwgU0VORF9EQVRBX0IzX1JFUSk7CiAJCWIxX3B1dF9zbGljZShwb3J0LCBza2ItPmRhdGEsIGxlbik7CiAJCWIxX3B1dF9zbGljZShwb3J0LCBza2ItPmRhdGEgKyBsZW4sIGRsZW4pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKLQkgCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCWIxX3B1dF9ieXRlKHBvcnQsIFNFTkRfTUVTU0FHRSk7CiAJCWIxX3B1dF9zbGljZShwb3J0LCBza2ItPmRhdGEsIGxlbik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm4gQ0FQSV9OT0VSUk9SOwpAQCAtNTM0LDE3ICs1MzYsMTcgQEAKIAogCQlBcHBsSWQgPSAodW5zaWduZWQpIGIxX2dldF93b3JkKGNhcmQtPnBvcnQpOwogCQlNc2dMZW4gPSBiMV9nZXRfc2xpY2UoY2FyZC0+cG9ydCwgY2FyZC0+bXNnYnVmKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQlpZiAoIShza2IgPSBhbGxvY19za2IoTXNnTGVuLCBHRlBfQVRPTUlDKSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGluY29taW5nIHBhY2tldCBkcm9wcGVkXG4iLAogCQkJCQljYXJkLT5uYW1lKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgTXNnTGVuKSwgY2FyZC0+bXNnYnVmLCBNc2dMZW4pOwogCQkJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9EQVRBX0IzX0NPTkYpCiAJCQkJY2FwaWxpYl9kYXRhX2IzX2NvbmYoJmNpbmZvLT5uY2NpX2hlYWQsIEFwcGxJZCwKIAkJCQkJCSAgICAgQ0FQSU1TR19OQ0NJKHNrYi0+ZGF0YSksCiAJCQkJCQkgICAgIENBUElNU0dfTVNHSUQoc2tiLT5kYXRhKSk7Ci0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJCWNhcGlfY3RyX2hhbmRsZV9tZXNzYWdlKGN0cmwsIEFwcGxJZCwgc2tiKTsKIAkJfQogCQlicmVhazsKQEAgLTU1NCwyMSArNTU2LDE3IEBACiAJCUFwcGxJZCA9IGIxX2dldF93b3JkKGNhcmQtPnBvcnQpOwogCQlOQ0NJID0gYjFfZ2V0X3dvcmQoY2FyZC0+cG9ydCk7CiAJCVdpbmRvd1NpemUgPSBiMV9nZXRfd29yZChjYXJkLT5wb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCiAJCWNhcGlsaWJfbmV3X25jY2koJmNpbmZvLT5uY2NpX2hlYWQsIEFwcGxJZCwgTkNDSSwgV2luZG93U2l6ZSk7Ci0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQlicmVhazsKIAogCWNhc2UgUkVDRUlWRV9GUkVFX05DQ0k6CiAKIAkJQXBwbElkID0gYjFfZ2V0X3dvcmQoY2FyZC0+cG9ydCk7CiAJCU5DQ0kgPSBiMV9nZXRfd29yZChjYXJkLT5wb3J0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwotCiAJCWlmIChOQ0NJICE9IDB4ZmZmZmZmZmYpCiAJCQljYXBpbGliX2ZyZWVfbmNjaSgmY2luZm8tPm5jY2lfaGVhZCwgQXBwbElkLCBOQ0NJKTsKLQkgICAgICAgCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKIAljYXNlIFJFQ0VJVkVfU1RBUlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMKaW5kZXggNDI4ODcyYi4uNjY5ZjZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWRtYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYwpAQCAtNDg2LDExICs0ODYsMTMgQEAKIAkJCQkJY2FyZC0+bmFtZSk7CiAJCX0gZWxzZSB7CiAJCQltZW1jcHkoc2tiX3B1dChza2IsIE1zZ0xlbiksIGNhcmQtPm1zZ2J1ZiwgTXNnTGVuKTsKLQkJCWlmIChDQVBJTVNHX0NNRChza2ItPmRhdGEpID09IENBUElfREFUQV9CM19DT05GKQorCQkJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9EQVRBX0IzX0NPTkYpIHsKKwkJCQlzcGluX2xvY2soJmNhcmQtPmxvY2spOwogCQkJCWNhcGlsaWJfZGF0YV9iM19jb25mKCZjaW5mby0+bmNjaV9oZWFkLCBBcHBsSWQsCi0JCQkJCQkgICAgIENBUElNU0dfTkNDSShza2ItPmRhdGEpLAotCQkJCQkJICAgICBDQVBJTVNHX01TR0lEKHNrYi0+ZGF0YSkpOwotCisJCQkJCUNBUElNU0dfTkNDSShza2ItPmRhdGEpLAorCQkJCQlDQVBJTVNHX01TR0lEKHNrYi0+ZGF0YSkpOworCQkJCXNwaW5fdW5sb2NrKCZjYXJkLT5sb2NrKTsKKwkJCX0KIAkJCWNhcGlfY3RyX2hhbmRsZV9tZXNzYWdlKGN0cmwsIEFwcGxJZCwgc2tiKTsKIAkJfQogCQlicmVhazsKQEAgLTUwMCw5ICs1MDIsOSBAQAogCQlBcHBsSWQgPSBfZ2V0X3dvcmQoJnApOwogCQlOQ0NJID0gX2dldF93b3JkKCZwKTsKIAkJV2luZG93U2l6ZSA9IF9nZXRfd29yZCgmcCk7Ci0KKwkJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKIAkJY2FwaWxpYl9uZXdfbmNjaSgmY2luZm8tPm5jY2lfaGVhZCwgQXBwbElkLCBOQ0NJLCBXaW5kb3dTaXplKTsKLQorCQlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CiAJCWJyZWFrOwogCiAJY2FzZSBSRUNFSVZFX0ZSRUVfTkNDSToKQEAgLTUxMCw5ICs1MTIsMTEgQEAKIAkJQXBwbElkID0gX2dldF93b3JkKCZwKTsKIAkJTkNDSSA9IF9nZXRfd29yZCgmcCk7CiAKLQkJaWYgKE5DQ0kgIT0gMHhmZmZmZmZmZikKKwkJaWYgKE5DQ0kgIT0gMHhmZmZmZmZmZikgeworCQkJc3Bpbl9sb2NrKCZjYXJkLT5sb2NrKTsKIAkJCWNhcGlsaWJfZnJlZV9uY2NpKCZjaW5mby0+bmNjaV9oZWFkLCBBcHBsSWQsIE5DQ0kpOwotCisJCQlzcGluX3VubG9jaygmY2FyZC0+bG9jayk7CisJCX0KIAkJYnJlYWs7CiAKIAljYXNlIFJFQ0VJVkVfU1RBUlQ6CkBAIC03NTEsMTAgKzc1NSwxMCBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKICAJYjFkbWFfcmVzZXQoY2FyZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJbWVtc2V0KGNpbmZvLT52ZXJzaW9uLCAwLCBzaXplb2YoY2luZm8tPnZlcnNpb24pKTsKIAljYXBpbGliX3JlbGVhc2UoJmNpbmZvLT5uY2NpX2hlYWQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAljYXBpX2N0cl9yZXNldGVkKGN0cmwpOwogfQogCkBAIC04MDMsOCArODA3LDExIEBACiAJYXZtY2FyZCAqY2FyZCA9IGNpbmZvLT5jYXJkOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdm9pZCAqcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAljYXBpbGliX3JlbGVhc2VfYXBwbCgmY2luZm8tPm5jY2lfaGVhZCwgYXBwbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJc2tiID0gYWxsb2Nfc2tiKDcsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7CkBAIC04MzIsMTAgKzgzOSwxMyBAQAogCXUxNiByZXR2YWwgPSBDQVBJX05PRVJST1I7CiAKICAJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9EQVRBX0IzX1JFUSkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQlyZXR2YWwgPSBjYXBpbGliX2RhdGFfYjNfcmVxKCZjaW5mby0+bmNjaV9oZWFkLAogCQkJCQkgICAgIENBUElNU0dfQVBQSUQoc2tiLT5kYXRhKSwKIAkJCQkJICAgICBDQVBJTVNHX05DQ0koc2tiLT5kYXRhKSwKIAkJCQkJICAgICBDQVBJTVNHX01TR0lEKHNrYi0+ZGF0YSkpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJfQogCWlmIChyZXR2YWwgPT0gQ0FQSV9OT0VSUk9SKSAKIAkJYjFkbWFfcXVldWVfdHgoY2FyZCwgc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYzQuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYzQuYwppbmRleCBkNThmOTI3Li40YmJiYmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2M0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jCkBAIC02NzgsNyArNjc4LDkgQEAKICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IGNhcmQtPm5yX2NvbnRyb2xsZXJzOyBpKyspIHsKIAkJCWF2bWN0cmxfaW5mbyAqY2luZm8gPSAmY2FyZC0+Y3RybGluZm9baV07CiAJCQltZW1zZXQoY2luZm8tPnZlcnNpb24sIDAsIHNpemVvZihjaW5mby0+dmVyc2lvbikpOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJCWNhcGlsaWJfcmVsZWFzZSgmY2luZm8tPm5jY2lfaGVhZCk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCQljYXBpX2N0cl9yZXNldGVkKCZjaW5mby0+Y2FwaV9jdHJsKTsKIAkJfQogCQljYXJkLT5ubG9nY29udHIgPSAwOwpAQCAtNzI3LDYgKzcyOSw3IEBACiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl2b2lkICpwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlza2IgPSBhbGxvY19za2IoMTUsIEdGUF9BVE9NSUMpOwogCWlmICghc2tiKSB7CkBAIC03NDQsMTIgKzc0NywxNSBAQAogCXNrYl9wdXQoc2tiLCAodTggKilwIC0gKHU4ICopc2tiLT5kYXRhKTsKIAogCXNrYl9xdWV1ZV90YWlsKCZjYXJkLT5kbWEtPnNlbmRfcXVldWUsIHNrYik7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAljNF9kaXNwYXRjaF90eChjYXJkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgcXVldWVfc2VuZGNvbmZpZ3dvcmQoYXZtY2FyZCAqY2FyZCwgdTMyIHZhbCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqcDsKIAogCXNrYiA9IGFsbG9jX3NrYigzKzQsIEdGUF9BVE9NSUMpOwpAQCAtNzY2LDcgKzc3Miw5IEBACiAJc2tiX3B1dChza2IsICh1OCAqKXAgLSAodTggKilza2ItPmRhdGEpOwogCiAJc2tiX3F1ZXVlX3RhaWwoJmNhcmQtPmRtYS0+c2VuZF9xdWV1ZSwgc2tiKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCWM0X2Rpc3BhdGNoX3R4KGNhcmQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTg2LDcgKzk5NCw5IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl2b2lkICpwOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAljYXBpbGliX3JlbGVhc2VfYXBwbCgmY2luZm8tPm5jY2lfaGVhZCwgYXBwbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGN0cmwtPmNuciA9PSBjYXJkLT5jYXJkbnIpIHsKIAkJc2tiID0gYWxsb2Nfc2tiKDcsIEdGUF9BVE9NSUMpOwpAQCAtMTAxOSw3ICsxMDI5LDggQEAKIAl1MTYgcmV0dmFsID0gQ0FQSV9OT0VSUk9SOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLSAJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9EQVRBX0IzX1JFUSkgeworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CisJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9EQVRBX0IzX1JFUSkgewogCQlyZXR2YWwgPSBjYXBpbGliX2RhdGFfYjNfcmVxKCZjaW5mby0+bmNjaV9oZWFkLAogCQkJCQkgICAgIENBUElNU0dfQVBQSUQoc2tiLT5kYXRhKSwKIAkJCQkJICAgICBDQVBJTVNHX05DQ0koc2tiLT5kYXRhKSwKQEAgLTEwMjcsMTAgKzEwMzgsOSBAQAogCX0KIAlpZiAocmV0dmFsID09IENBUElfTk9FUlJPUikgewogCQlza2JfcXVldWVfdGFpbCgmY2FyZC0+ZG1hLT5zZW5kX3F1ZXVlLCBza2IpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQljNF9kaXNwYXRjaF90eChjYXJkKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MWlzYS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MWlzYS5jCmluZGV4IGM5MjUwMjAuLjYxMzA3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFpc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKQEAgLTE4MCw4ICsxODAsOCBAQAogCiAJCQlBcHBsSWQgPSAodW5zaWduZWQpIGIxX2dldF93b3JkKGNhcmQtPnBvcnQpOwogCQkJTXNnTGVuID0gdDFfZ2V0X3NsaWNlKGNhcmQtPnBvcnQsIGNhcmQtPm1zZ2J1Zik7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCQlpZiAoIShza2IgPSBhbGxvY19za2IoTXNnTGVuLCBHRlBfQVRPTUlDKSkpIHsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW5jb21pbmcgcGFja2V0IGRyb3BwZWRcbiIsCiAJCQkJCQljYXJkLT5uYW1lKTsKIAkJCX0gZWxzZSB7CkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJCQkJY2FwaWxpYl9kYXRhX2IzX2NvbmYoJmNpbmZvLT5uY2NpX2hlYWQsIEFwcGxJZCwKIAkJCQkJCQkgICAgIENBUElNU0dfTkNDSShza2ItPmRhdGEpLAogCQkJCQkJCSAgICAgQ0FQSU1TR19NU0dJRChza2ItPmRhdGEpKTsKLQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJCQljYXBpX2N0cl9oYW5kbGVfbWVzc2FnZShjdHJsLCBBcHBsSWQsIHNrYik7CiAJCQl9CiAJCQlicmVhazsKQEAgLTIwMCwyMSArMjAwLDE3IEBACiAJCQlBcHBsSWQgPSBiMV9nZXRfd29yZChjYXJkLT5wb3J0KTsKIAkJCU5DQ0kgPSBiMV9nZXRfd29yZChjYXJkLT5wb3J0KTsKIAkJCVdpbmRvd1NpemUgPSBiMV9nZXRfd29yZChjYXJkLT5wb3J0KTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKLQogCQkJY2FwaWxpYl9uZXdfbmNjaSgmY2luZm8tPm5jY2lfaGVhZCwgQXBwbElkLCBOQ0NJLCBXaW5kb3dTaXplKTsKLQorCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBSRUNFSVZFX0ZSRUVfTkNDSToKIAogCQkJQXBwbElkID0gYjFfZ2V0X3dvcmQoY2FyZC0+cG9ydCk7CiAJCQlOQ0NJID0gYjFfZ2V0X3dvcmQoY2FyZC0+cG9ydCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7Ci0KIAkJCWlmIChOQ0NJICE9IDB4ZmZmZmZmZmYpCiAJCQkJY2FwaWxpYl9mcmVlX25jY2koJmNpbmZvLT5uY2NpX2hlYWQsIEFwcGxJZCwgTkNDSSk7Ci0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgUkVDRUlWRV9TVEFSVDoKQEAgLTMzMywxMyArMzI5LDE2IEBACiAJYXZtY3RybF9pbmZvICpjaW5mbyA9IChhdm1jdHJsX2luZm8gKikoY3RybC0+ZHJpdmVyZGF0YSk7CiAJYXZtY2FyZCAqY2FyZCA9IGNpbmZvLT5jYXJkOwogCXVuc2lnbmVkIGludCBwb3J0ID0gY2FyZC0+cG9ydDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJdDFfZGlzYWJsZV9pcnEocG9ydCk7CiAJYjFfcmVzZXQocG9ydCk7CiAJYjFfcmVzZXQocG9ydCk7CiAKIAltZW1zZXQoY2luZm8tPnZlcnNpb24sIDAsIHNpemVvZihjaW5mby0+dmVyc2lvbikpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJY2FwaWxpYl9yZWxlYXNlKCZjaW5mby0+bmNjaV9oZWFkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJY2FwaV9jdHJfcmVzZXRlZChjdHJsKTsKIH0KIApAQCAtNDY2LDI5ICs0NjUsMjYgQEAKIAl1OCBzdWJjbWQgPSBDQVBJTVNHX1NVQkNPTU1BTkQoc2tiLT5kYXRhKTsKIAl1MTYgZGxlbiwgcmV0dmFsOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAlpZiAoQ0FQSUNNRChjbWQsIHN1YmNtZCkgPT0gQ0FQSV9EQVRBX0IzX1JFUSkgewogCQlyZXR2YWwgPSBjYXBpbGliX2RhdGFfYjNfcmVxKCZjaW5mby0+bmNjaV9oZWFkLAogCQkJCQkgICAgIENBUElNU0dfQVBQSUQoc2tiLT5kYXRhKSwKIAkJCQkJICAgICBDQVBJTVNHX05DQ0koc2tiLT5kYXRhKSwKIAkJCQkJICAgICBDQVBJTVNHX01TR0lEKHNrYi0+ZGF0YSkpOwotCQlpZiAocmV0dmFsICE9IENBUElfTk9FUlJPUikgCisJCWlmIChyZXR2YWwgIT0gQ0FQSV9OT0VSUk9SKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gcmV0dmFsOwotCisJCX0KIAkJZGxlbiA9IENBUElNU0dfREFUQUxFTihza2ItPmRhdGEpOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5sb2NrLCBmbGFncyk7CiAJCWIxX3B1dF9ieXRlKHBvcnQsIFNFTkRfREFUQV9CM19SRVEpOwogCQl0MV9wdXRfc2xpY2UocG9ydCwgc2tiLT5kYXRhLCBsZW4pOwogCQl0MV9wdXRfc2xpY2UocG9ydCwgc2tiLT5kYXRhICsgbGVuLCBkbGVuKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAkJYjFfcHV0X2J5dGUocG9ydCwgU0VORF9NRVNTQUdFKTsKIAkJdDFfcHV0X3NsaWNlKHBvcnQsIHNrYi0+ZGF0YSwgbGVuKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwogCX0KLQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCXJldHVybiBDQVBJX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaWZ1bmMuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9jYXBpZnVuYy5jCmluZGV4IDgyZWRjMWMuLjRkNDI1YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9jYXBpZnVuYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9jYXBpZnVuYy5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIAkJCQkgIERCR19CTEsoKCgoY2hhciAqKShsb25nKUdFVF9EV09SRCgmbXNnLmluZm8uZGF0YV9iM19pbmQuRGF0YSkpICsgaSwKIAkJCQkgIAkoKGRsZW5ndGggLSBpKSA8IDI1NikgPyAoZGxlbmd0aCAtIGkpIDogMjU2KSkKIAkJCQkgIGlmICghKG15RHJpdmVyRGVidWdIYW5kbGUuZGJnTWFzayAmIERMX1BSVjApKQotCQkJCQkgIGJyZWFrOyAvKiBub3QgbW9yZSBpZiBub3QgZXhwbGljaXRlbHkgcmVxdWVzdGVkICovCisJCQkJCSAgYnJlYWs7IC8qIG5vdCBtb3JlIGlmIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCAqLwogCQkJCX0KIAkJCX0KIAkJCWJyZWFrOwpAQCAtOTY1LDcgKzk2NSw3IEBACiAJCQkJCSgoR0VUX1dPUkQoJm1zZy0+aW5mby5kYXRhX2IzX3JlcS5EYXRhX0xlbmd0aCkgLSBqKSA8CiAJCQkJCSAgMjU2KSA/IChHRVRfV09SRCgmbXNnLT5pbmZvLmRhdGFfYjNfcmVxLkRhdGFfTGVuZ3RoKSAtIGopIDogMjU2KSkKIAkJCQlpZiAoIShteURyaXZlckRlYnVnSGFuZGxlLmRiZ01hc2sgJiBETF9QUlYwKSkKLQkJCQkJYnJlYWs7CS8qIG5vdCBtb3JlIGlmIG5vdCBleHBsaWNpdGVseSByZXF1ZXN0ZWQgKi8KKwkJCQkJYnJlYWs7CS8qIG5vdCBtb3JlIGlmIG5vdCBleHBsaWNpdGx5IHJlcXVlc3RlZCAqLwogCQkJfQogCQl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvYW1kNzkzMF9mbi5jCmluZGV4IDNiMTljYWUuLmMwZDcwMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9hbWQ3OTMwX2ZuLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2FtZDc5MzBfZm4uYwpAQCAtNzY3LDcgKzc2Nyw3IEBACiAgICAgICAgICAgICAgICAgLyogcmVhZCAqLwogICAgICAgICAgICAgICAgIGlmICgqcHRyKysgPj0gMHgxMDApIHsKIAkJCWlmIChjbWQgPCA4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXR6dCBSZWdpc3RlciB6dXL8Y2sgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmVzZXQgcmVnaXN0ZXIgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgckJ5dGVBTUQoY3MsIGNtZCk7CiAJCQllbHNlIHsKIAkJCQl3Qnl0ZUFNRChjcywgMHgwMCwgY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9lbnRlcm5vd19wY2kuYwppbmRleCBiNzMwMjdmLi4zOWY0MjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvZW50ZXJub3dfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2VudGVybm93X3BjaS5jCkBAIC03NSwxNiArNzUsMTYgQEAKIHN0YXRpYyBjb25zdCBjaGFyICplbnRlcm5vd19wY2lfcmV2ID0gIiRSZXZpc2lvbjogMS4xLjQuNSAkIjsKIAogCi0vKiBm/HIgUG93ZXJJU0ROIFBDSSAqLworLyogZm9yIFBvd2VySVNETiBQQ0kgKi8KICNkZWZpbmUgVEpfQU1EX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCiAjZGVmaW5lIFRKX0xFRDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAogI2RlZmluZSBUSl9MRUQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAKIAogCi0vKiBEYXMgRmVuc3RlciB6dW0gQU1ELi4uCi0gKiBBYiBBZHJlc3NlIGh3Lm5qZXQuYmFzZSArIFRKX0FNRF9QT1JUIHdlcmRlbiB2b20gQU1EIGpld2VpbHMgOCBCaXQgaW4KLSAqIGRlbiBUaWdlckpldCBpL28tUmF1bSBnZW1hcHB0Ci0gKiAtPiAweDAxIGRlcyBBTUQgYmVpIGh3Lm5qZXQuYmFzZSArIDBDNCAqLworLyogVGhlIHdpbmRvdyB0byBbdGhlXSBBTUQgW2NoaXBdLi4uCisgKiBGcm9tIGFkZHJlc3MgaHcubmpldC5iYXNlICsgVEpfQU1EX1BPUlQgb253YXJkcywgdGhlIEFNRAorICogbWFwcyBbY29uc2VjdXRpdmUvbXVsdGlwbGVdIDggYml0cyBpbnRvIHRoZSBUaWdlckpldCBJL08gc3BhY2UKKyAqIC0+IDB4MDEgb2YgdGhlIEFNRCBhdCBody5uamV0LmJhc2UgKyAwQzQgKi8KICNkZWZpbmUgVEpfQU1EX1BPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwCiAKIApAQCAtOTYsMTEgKzk2LDExIEBACiBzdGF0aWMgdW5zaWduZWQgY2hhcgogUmVhZEJ5dGVBbWQ3OTMwKHN0cnVjdCBJc2RuQ2FyZFN0YXRlICpjcywgdW5zaWduZWQgY2hhciBvZmZzZXQpCiB7Ci0JLyogZGlyZWt0ZXMgUmVnaXN0ZXIgKi8KKwkvKiBkaXJlY3QgcmVnaXN0ZXIgKi8KIAlpZihvZmZzZXQgPCA4KQogCQlyZXR1cm4gKGluYihjcy0+aHcubmpldC5pc2FjICsgNCpvZmZzZXQpKTsKIAotCS8qIGluZGlyZWt0ZXMgUmVnaXN0ZXIgKi8KKwkvKiBpbmRpcmVjdCByZWdpc3RlciAqLwogCWVsc2UgewogCQlvdXRiKG9mZnNldCwgY3MtPmh3Lm5qZXQuaXNhYyArIDQqQU1EX0NSKTsKIAkJcmV0dXJuKGluYihjcy0+aHcubmpldC5pc2FjICsgNCpBTURfRFIpKTsKQEAgLTExMSwxMSArMTExLDExIEBACiBzdGF0aWMgdm9pZAogV3JpdGVCeXRlQW1kNzkzMChzdHJ1Y3QgSXNkbkNhcmRTdGF0ZSAqY3MsIHVuc2lnbmVkIGNoYXIgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewotCS8qIGRpcmVrdGVzIFJlZ2lzdGVyICovCisJLyogZGlyZWN0IHJlZ2lzdGVyICovCiAJaWYob2Zmc2V0IDwgOCkKIAkJb3V0Yih2YWx1ZSwgY3MtPmh3Lm5qZXQuaXNhYyArIDQqb2Zmc2V0KTsKIAotCS8qIGluZGlyZWt0ZXMgUmVnaXN0ZXIgKi8KKwkvKiBpbmRpcmVjdCByZWdpc3RlciAqLwogCWVsc2UgewogCQlvdXRiKG9mZnNldCwgY3MtPmh3Lm5qZXQuaXNhYyArIDQqQU1EX0NSKTsKIAkJb3V0Yih2YWx1ZSwgY3MtPmh3Lm5qZXQuaXNhYyArIDQqQU1EX0RSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3BjaS5jCmluZGV4IDA3NzA4MGEuLmZiYThiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfcGNpLmMKKysrIGIvZHJpdmVycy9pc2RuL2hpc2F4L2hmY19wY2kuYwpAQCAtMSw2ICsxLDYgQEAKIC8qICRJZDogaGZjX3BjaS5jLHYgMS40OC4yLjQgMjAwNC8wMi8xMSAxMzoyMTozMyBrZWlsIEV4cCAkCiAgKgotICogbG93IGxldmVsIGRyaXZlciBmb3IgQ0NEtHMgaGZjLXBjaSBiYXNlZCBjYXJkcworICogbG93IGxldmVsIGRyaXZlciBmb3IgQ0NEJ3MgaGZjLXBjaSBiYXNlZCBjYXJkcwogICoKICAqIEF1dGhvciAgICAgICBXZXJuZXIgQ29ybmVsaXVzCiAgKiAgICAgICAgICAgICAgYmFzZWQgb24gZXhpc3RpbmcgZHJpdmVyIGZvciBDQ0QgaGZjIElTQSBjYXJkcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2lzZG5oZGxjLmMgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuYwppbmRleCAyNjhkY2VkLi5jNjlhNzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBpc2RuaGRsYy5jICAtLSAgR2VuZXJhbCBwdXJwb3NlIElTRE4gSERMQyBkZWNvZGVyLgogICoKLSAqQ29weXJpZ2h0IChDKSAyMDAyCVdvbGZnYW5nIE38ZXMgICAgICA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4KKyAqQ29weXJpZ2h0IChDKSAyMDAyCVdvbGZnYW5nIE3DvGVzICAgICAgPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+CiAgKgkJMjAwMSAJRnJvZGUgSXNha3NlbiAgICAgIDxmaXNha3NlbkBiZXdhbi5jb20+CiAgKiAgICAgICAgICAgICAgMjAwMSAJS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+CiAgKgpAQCAtMjcsNyArMjcsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1NT0RVTEVfQVVUSE9SKCJXb2xmZ2FuZyBN/GVzIDx3b2xmZ2FuZ0Bpa3N3LW11ZWVzLmRlPiwgIgorTU9EVUxFX0FVVEhPUigiV29sZmdhbmcgTcO8ZXMgPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+LCAiCiAJICAgICAgIkZyb2RlIElzYWtzZW4gPGZpc2Frc2VuQGJld2FuLmNvbT4sICIKIAkgICAgICAiS2FpIEdlcm1hc2NoZXdza2kgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJhbCBwdXJwb3NlIElTRE4gSERMQyBkZWNvZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNkbmhkbGMuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5oCmluZGV4IDQ1MTY3ZDIuLmNmMGE5NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5oCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2RuaGRsYy5oCkBAIC01LDcgKzUsNyBAQAogICogTmVjY2Vzc2FyeSBiZWNhdXNlIHNvbWUgSVNETiBkZXZpY2VzIGRvbid0IGhhdmUgSERMQwogICogY29udHJvbGxlcnMuIEFsc28gaW5jbHVkZWQ6IGEgYml0IHJldmVyc2FsIHRhYmxlLgogICoKLSAqQ29weXJpZ2h0IChDKSAyMDAyICAgIFdvbGZnYW5nIE38ZXMgICAgICA8d29sZmdhbmdAaWtzdy1tdWVlcy5kZT4KKyAqQ29weXJpZ2h0IChDKSAyMDAyICAgIFdvbGZnYW5nIE3DvGVzICAgICAgPHdvbGZnYW5nQGlrc3ctbXVlZXMuZGU+CiAgKgkJMjAwMSAJRnJvZGUgSXNha3NlbiAgICAgIDxmaXNha3NlbkBiZXdhbi5jb20+CiAgKiAgICAgICAgICAgICAgMjAwMSAJS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuYyBiL2RyaXZlcnMvaXNkbi9oaXNheC9qYWRlLmMKaW5kZXggNDNkNjFkMS4uNzA4NDBhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2phZGUuYworKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvamFkZS5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAljcy0+QkNfV3JpdGVfUmVnKGNzLCAxLCBqYWRlX0hETENfSU1SLCAgMHgwMCk7CiAJLyogU2V0dXAgaG9zdCBhY2Nlc3MgdG8gaGRsYyBjb250cm9sbGVyICovCiAJamFkZV93cml0ZV9pbmRpcmVjdChjcywgamFkZV9IRExDQ05UUkFDQ0VTUywgKGphZGVJTkRJUkVDVF9IQUgxfGphZGVJTkRJUkVDVF9IQUgyKSk7Ci0JLyogVW5tYXNrIEhETEMgaW50IChkb260dCBmb3JnZXQgRFNQIGludCBsYXRlciBvbikqLworCS8qIFVubWFzayBIRExDIGludCAoZG9uJ3QgZm9yZ2V0IERTUCBpbnQgbGF0ZXIgb24pKi8KIAljcy0+QkNfV3JpdGVfUmVnKGNzLCAtMSxqYWRlX0lOVCwgKGphZGVJTlRfSERMQzF8amFkZUlOVF9IRExDMikpOwogCiAJLyogb25jZSBhZ2FpbiBUUkFOU1BBUkVOVCAqLwkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9wY2JpdC9jYXBpLmMgYi9kcml2ZXJzL2lzZG4vcGNiaXQvY2FwaS5jCmluZGV4IDdiNTVlMTUuLmFjNWE5MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9wY2JpdC9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL3BjYml0L2NhcGkuYwpAQCAtMTUsOSArMTUsOSBAQAogCiAvKgogICogICAgICAgIERvY3VtZW50YXRpb246Ci0gKiAgICAgICAgLSAiQ29tbW9uIElTRE4gQVBJIC0gUGVyZmlsIFBvcnR1Z3XqcyAtIFZlcnPjbyAyLjEiLAorICogICAgICAgIC0gIkNvbW1vbiBJU0ROIEFQSSAtIFBlcmZpbCBQb3J0dWd1w6pzIC0gVmVyc8OjbyAyLjEiLAogICogICAgICAgICAgIFRlbGVjb20gUG9ydHVnYWwsIEZldiAxOTkyLgotICogICAgICAgIC0gIkNvbW1vbiBJU0ROIEFQSSAtIEVzcGVjaWZpY2Hn428gZGUgcHJvdG9jb2xvcyBwYXJhIAorICogICAgICAgIC0gIkNvbW1vbiBJU0ROIEFQSSAtIEVzcGVjaWZpY2HDp8OjbyBkZSBwcm90b2NvbG9zIHBhcmEKICAqICAgICAgICAgICBhY2Vzc28gYW9zIGNhbmFpcyBCIiwgSW5lc2MsIEphbiAxOTk0LgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9kZWJ1Zy5oIGIvZHJpdmVycy9pc2RuL3NjL2RlYnVnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZGI5NmUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2RlYnVnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKiAkSWQ6IGRlYnVnLmgsdiAxLjIuOC4xIDIwMDEvMDkvMjMgMjI6MjQ6NTkga2FpIEV4cCAkCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk2ICBTcGVsbENhc3RlciBUZWxlY29tbXVuaWNhdGlvbnMgSW5jLgotICoKLSAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMKLSAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBjb250YWN0IGdwbC1pbmZvQHNwZWxsY2FzdC5jb20gb3Igd3JpdGU6Ci0gKgotICogICAgIFNwZWxsQ2FzdGVyIFRlbGVjb21tdW5pY2F0aW9ucyBJbmMuCi0gKiAgICAgNTYyMSBGaW5jaCBBdmVudWUgRWFzdCwgVW5pdCAjMwotICogICAgIFNjYXJib3JvdWdoLCBPbnRhcmlvICBDYW5hZGEKLSAqICAgICBNMUIgMlQ5Ci0gKiAgICAgKzEgKDQxNikgMjk3LTg1NjUKLSAqICAgICArMSAoNDE2KSAyOTctNjQzMyBGYWNzaW1pbGUKLSAqLwotCi0jZGVmaW5lIFJFUVVFU1RfSVJRKGEsYixjLGQsZSkgcmVxdWVzdF9pcnEoYSxiLGMsZCxlKQotI2RlZmluZSBGUkVFX0lSUShhLGIpIGZyZWVfaXJxKGEsYikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9zYy9pbmNsdWRlcy5oIGIvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmgKaW5kZXggNTI4NmUwYy4uNDc2NmU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmgKKysrIGIvZHJpdmVycy9pc2RuL3NjL2luY2x1ZGVzLmgKQEAgLTE0LDQgKzE0LDMgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pc2RuaWYuaD4KLSNpbmNsdWRlICJkZWJ1Zy5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYyBiL2RyaXZlcnMvaXNkbi9zYy9pbml0LmMKaW5kZXggMGJmNzYzNC4uZDA5Yzg1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL3NjL2luaXQuYworKysgYi9kcml2ZXJzL2lzZG4vc2MvaW5pdC5jCkBAIC00MDQsNyArNDA0LDcgQEAKIAkJLyoKIAkJICogUmVsZWFzZSB0aGUgSVJRCiAJCSAqLwotCQlGUkVFX0lSUShzY19hZGFwdGVyW2ldLT5pbnRlcnJ1cHQsIE5VTEwpOworCQlmcmVlX2lycShzY19hZGFwdGVyW2ldLT5pbnRlcnJ1cHQsIE5VTEwpOwogCiAJCS8qCiAJCSAqIFJlc2V0IGZvciBhIGNsZWFuIHN0YXJ0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1zM2MyNHh4LmMKaW5kZXggNTA5MTQ0My4uMGZkNjQwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtczNjMjR4eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLXMzYzI0eHguYwpAQCAtNDMsNyArNDMsNyBAQAogCXN0cnVjdCBzM2MyNHh4X2dwaW9fbGVkICpsZWQgPSB0b19ncGlvKGxlZF9jZGV2KTsKIAlzdHJ1Y3QgczNjMjR4eF9sZWRfcGxhdGRhdGEgKnBkID0gbGVkLT5wZGF0YTsKIAotCS8qIHRoZXJlIHdpbGwgYmUgYSBzb3J0IGRlbGF5IGJldHdlZW4gc2V0dGluZyB0aGUgb3V0cHV0IGFuZAorCS8qIHRoZXJlIHdpbGwgYmUgYSBzaG9ydCBkZWxheSBiZXR3ZWVuIHNldHRpbmcgdGhlIG91dHB1dCBhbmQKIAkgKiBnb2luZyBmcm9tIG91dHB1dCB0byBpbnB1dCB3aGVuIHVzaW5nIHRyaXN0YXRlLiAqLwogCiAJczNjMjQxMF9ncGlvX3NldHBpbihwZC0+Z3BpbywgKHZhbHVlID8gMSA6IDApIF4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKaW5kZXggMjc2NmU0Zi4uODgzZGE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKQEAgLTc5MSw4ICs3OTEsMTAgQEAKIAkJCWlmIChoaWQtPmtleWNvZGVbaV0pCiAJCQkJc2V0X2JpdChoaWQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKIAotCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfTEVEKSB8IEJJVChFVl9SRVApOwotCQlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVChMRURfU0NST0xMTCkgfCBCSVQoTEVEX0NBUFNMKSB8IEJJVChMRURfTlVNTCk7CisJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwgQklUX01BU0soRVZfTEVEKSB8CisJCQlCSVRfTUFTSyhFVl9SRVApOworCQlpbnB1dF9kZXYtPmxlZGJpdFswXSA9IEJJVF9NQVNLKExFRF9TQ1JPTExMKSB8CisJCQlCSVRfTUFTSyhMRURfQ0FQU0wpIHwgQklUX01BU0soTEVEX05VTUwpOwogCQlpbnB1dF9kZXYtPmV2ZW50ID0gYWRiaGlkX2tiZF9ldmVudDsKIAkJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gS0VZX0ZOOwogCQlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKGhpZC0+a2V5Y29kZVswXSk7CkBAIC04MDEsMTYgKzgwMywxOCBAQAogCWNhc2UgQURCX01PVVNFOgogCQlzcHJpbnRmKGhpZC0+bmFtZSwgIkFEQiBtb3VzZSIpOwogCi0JCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fUklHSFQpOwotCQlpbnB1dF9kZXYtPnJlbGJpdFswXSA9IEJJVChSRUxfWCkgfCBCSVQoUkVMX1kpOworCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CisJCWlucHV0X2Rldi0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJCUJJVF9NQVNLKEJUTl9NSURETEUpIHwgQklUX01BU0soQlROX1JJR0hUKTsKKwkJaW5wdXRfZGV2LT5yZWxiaXRbMF0gPSBCSVRfTUFTSyhSRUxfWCkgfCBCSVRfTUFTSyhSRUxfWSk7CiAJCWJyZWFrOwogCiAJY2FzZSBBREJfTUlTQzoKIAkJc3dpdGNoIChvcmlnaW5hbF9oYW5kbGVyX2lkKSB7CiAJCWNhc2UgMHgwMjogLyogQWRqdXN0YWJsZSBrZXlib2FyZCBidXR0b24gZGV2aWNlICovCiAJCQlzcHJpbnRmKGhpZC0+bmFtZSwgIkFEQiBhZGp1c3RhYmxlIGtleWJvYXJkIGJ1dHRvbnMiKTsKLQkJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRVApOworCQkJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfAorCQkJCUJJVF9NQVNLKEVWX1JFUCk7CiAJCQlzZXRfYml0KEtFWV9TT1VORCwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQkJc2V0X2JpdChLRVlfTVVURSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQkJc2V0X2JpdChLRVlfVk9MVU1FVVAsIGlucHV0X2Rldi0+a2V5Yml0KTsKQEAgLTgxOCw3ICs4MjIsOCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgMHgxZjogLyogUG93ZXJib29rIGJ1dHRvbiBkZXZpY2UgKi8KIAkJCXNwcmludGYoaGlkLT5uYW1lLCAiQURCIFBvd2VyYm9vayBidXR0b25zIik7Ci0JCQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKKwkJCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpIHwKKwkJCQlCSVRfTUFTSyhFVl9SRVApOwogCQkJc2V0X2JpdChLRVlfTVVURSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCQkJc2V0X2JpdChLRVlfVk9MVU1FVVAsIGlucHV0X2Rldi0+a2V5Yml0KTsKIAkJCXNldF9iaXQoS0VZX1ZPTFVNRURPV04sIGlucHV0X2Rldi0+a2V5Yml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY19oaWQuYwppbmRleCAzM2RlZTNhLi44OTMwMjMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9tYWNfaGlkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjX2hpZC5jCkBAIC0xMTcsOSArMTE3LDEwIEBACiAJZW11bW91c2VidG4tPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJZW11bW91c2VidG4tPmlkLnZlcnNpb24gPSAweDAxMDA7CiAKLQllbXVtb3VzZWJ0bi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKSB8IEJJVChFVl9SRUwpOwotCWVtdW1vdXNlYnRuLT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX01JRERMRSkgfCBCSVQoQlROX1JJR0hUKTsKLQllbXVtb3VzZWJ0bi0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7CisJZW11bW91c2VidG4tPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFTCk7CisJZW11bW91c2VidG4tPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSA9IEJJVF9NQVNLKEJUTl9MRUZUKSB8CisJCUJJVF9NQVNLKEJUTl9NSURETEUpIHwgQklUX01BU0soQlROX1JJR0hUKTsKKwllbXVtb3VzZWJ0bi0+cmVsYml0WzBdID0gQklUX01BU0soUkVMX1gpIHwgQklUX01BU0soUkVMX1kpOwogCiAJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGVtdW1vdXNlYnRuKTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21lZGlhYmF5LmMKaW5kZXggYzgwM2QyYi4uNDhkNjQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWVkaWFiYXkuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tZWRpYWJheS5jCkBAIC01NjMsNyArNTYzLDcgQEAKIAkJCQlpZGVfaW5pdF9od2lmX3BvcnRzKCZodywgKHVuc2lnbmVkIGxvbmcpIGJheS0+Y2RfYmFzZSwgKHVuc2lnbmVkIGxvbmcpIDAsIE5VTEwpOwogCQkJCWh3LmlycSA9IGJheS0+Y2RfaXJxOwogCQkJCWh3LmNoaXBzZXQgPSBpZGVfcG1hYzsKLQkJCQliYXktPmNkX2luZGV4ID0gaWRlX3JlZ2lzdGVyX2h3KCZodywgMCwgTlVMTCk7CisJCQkJYmF5LT5jZF9pbmRleCA9IGlkZV9yZWdpc3Rlcl9odygmaHcsIE5VTEwsIDAsIE5VTEwpOwogCQkJCXBtdV9yZXN1bWUoKTsKIAkJCX0KIAkJCWlmIChiYXktPmNkX2luZGV4ID09IC0xKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKaW5kZXggZjdjNTA5Yi4uZGM3NDFkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCXJlcSA9IGN1cnJlbnRfcmVxOwogCQkJLyogCiAJCQkgKiBGb3IgUE1VIHNsZWVwIGFuZCBmcmVxIGNoYW5nZSByZXF1ZXN0cywgd2UgbG9jayB0aGUKLQkJCSAqIFBNVSB1bnRpbCBpdCdzIGV4cGxpY2l0ZWx5IHVubG9ja2VkLiBUaGlzIGF2b2lkcyBhbnkKKwkJCSAqIFBNVSB1bnRpbCBpdCdzIGV4cGxpY2l0bHkgdW5sb2NrZWQuIFRoaXMgYXZvaWRzIGFueQogCQkJICogc3B1cnJpb3VzIGV2ZW50IHBvbGxpbmcgZ2V0dGluZyBpbgogCQkJICovCiAJCQljdXJyZW50X3JlcSA9IHJlcS0+bmV4dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvS2NvbmZpZyBiL2RyaXZlcnMvbWQvS2NvbmZpZwppbmRleCAzNGE4YzYwLi45YjZmYmYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL0tjb25maWcKKysrIGIvZHJpdmVycy9tZC9LY29uZmlnCkBAIC0yNjcsNiArMjY3LDEyIEBACiAJLS0taGVscC0tLQogCSAgTXVsdGlwYXRoIHN1cHBvcnQgZm9yIExTSS9FbmdlbmlvIFJEQUMuCiAKK2NvbmZpZyBETV9NVUxUSVBBVEhfSFAKKyAgICAgICAgdHJpc3RhdGUgIkhQIE1TQSBtdWx0aXBhdGggc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKyAgICAgICAgZGVwZW5kcyBvbiBETV9NVUxUSVBBVEggJiYgQkxLX0RFVl9ETSAmJiBFWFBFUklNRU5UQUwKKyAgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIE11bHRpcGF0aCBzdXBwb3J0IGZvciBIUCBNU0EgKEFjdGl2ZS9QYXNzaXZlKSBzZXJpZXMgaGFyZHdhcmUuCisKIGNvbmZpZyBETV9ERUxBWQogCXRyaXN0YXRlICJJL08gZGVsYXlpbmcgdGFyZ2V0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQkxLX0RFVl9ETSAmJiBFWFBFUklNRU5UQUwKQEAgLTI3Niw0ICsyODIsMTAgQEAKIAogCUlmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBETV9VRVZFTlQKKwlib29sICJETSB1ZXZlbnRzIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gQkxLX0RFVl9ETSAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJR2VuZXJhdGUgdWRldiBldmVudHMgZm9yIERNIGV2ZW50cy4KKwogZW5kaWYgIyBNRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWQvTWFrZWZpbGUKaW5kZXggYzQ5MzY2Yy4uZDlhYTdlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21kL01ha2VmaWxlCkBAIC04LDYgKzgsNyBAQAogZG0tc25hcHNob3Qtb2JqcyA6PSBkbS1zbmFwLm8gZG0tZXhjZXB0aW9uLXN0b3JlLm8KIGRtLW1pcnJvci1vYmpzCTo9IGRtLWxvZy5vIGRtLXJhaWQxLm8KIGRtLXJkYWMtb2Jqcwk6PSBkbS1tcGF0aC1yZGFjLm8KK2RtLWhwLXN3LW9ianMJOj0gZG0tbXBhdGgtaHAtc3cubwogbWQtbW9kLW9ianMgICAgIDo9IG1kLm8gYml0bWFwLm8KIHJhaWQ0NTYtb2Jqcwk6PSByYWlkNS5vIHJhaWQ2YWxnb3MubyByYWlkNnJlY292Lm8gcmFpZDZ0YWJsZXMubyBcCiAJCSAgIHJhaWQ2aW50MS5vIHJhaWQ2aW50Mi5vIHJhaWQ2aW50NC5vIFwKQEAgLTM1LDYgKzM2LDcgQEAKIG9iai0kKENPTkZJR19ETV9ERUxBWSkJCSs9IGRtLWRlbGF5Lm8KIG9iai0kKENPTkZJR19ETV9NVUxUSVBBVEgpCSs9IGRtLW11bHRpcGF0aC5vIGRtLXJvdW5kLXJvYmluLm8KIG9iai0kKENPTkZJR19ETV9NVUxUSVBBVEhfRU1DKQkrPSBkbS1lbWMubworb2JqLSQoQ09ORklHX0RNX01VTFRJUEFUSF9IUCkJKz0gZG0taHAtc3cubwogb2JqLSQoQ09ORklHX0RNX01VTFRJUEFUSF9SREFDKQkrPSBkbS1yZGFjLm8KIG9iai0kKENPTkZJR19ETV9TTkFQU0hPVCkJKz0gZG0tc25hcHNob3Qubwogb2JqLSQoQ09ORklHX0RNX01JUlJPUikJCSs9IGRtLW1pcnJvci5vCkBAIC00OCw2ICs1MCwxMCBAQAogYWx0aXZlY19mbGFncyA6PSAtbWFsdGl2ZWMgLW1hYmk9YWx0aXZlYwogZW5kaWYKIAoraWZlcSAoJChDT05GSUdfRE1fVUVWRU5UKSx5KQorZG0tbW9kLW9ianMJCQkrPSBkbS11ZXZlbnQubworZW5kaWYKKwogdGFyZ2V0cyArPSByYWlkNmludDEuYwogJChvYmopL3JhaWQ2aW50MS5jOiAgIFVOUk9MTCA6PSAxCiAkKG9iaikvcmFpZDZpbnQxLmM6ICAgJChzcmMpL3JhaWQ2aW50LnVjICQoc3JjKS91bnJvbGwucGwgRk9SQ0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaCBiL2RyaXZlcnMvbWQvZG0tYmlvLWxpc3QuaAppbmRleCAzZjdiODI3Li5kNDUwOWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgKKysrIGIvZHJpdmVycy9tZC9kbS1iaW8tbGlzdC5oCkBAIC0yMSwxMSArMjEsNiBAQAogCXJldHVybiBibC0+aGVhZCA9PSBOVUxMOwogfQogCi0jZGVmaW5lIEJJT19MSVNUX0lOSVQgeyAuaGVhZCA9IE5VTEwsIC50YWlsID0gTlVMTCB9Ci0KLSNkZWZpbmUgQklPX0xJU1QoYmwpIFwKLQlzdHJ1Y3QgYmlvX2xpc3QgYmwgPSBCSU9fTElTVF9JTklUCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBiaW9fbGlzdF9pbml0KHN0cnVjdCBiaW9fbGlzdCAqYmwpCiB7CiAJYmwtPmhlYWQgPSBibC0+dGFpbCA9IE5VTEw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggNjRmZWU5MC4uMGViNTQxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMzYsNyArMzYsNiBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogCWF0b21pY190IHBlbmRpbmc7CiAJaW50IGVycm9yOwotCWludCBwb3N0X3Byb2Nlc3M7CiB9OwogCiAvKgpAQCAtNTcsNyArNTYsNyBAQAogCiBzdHJ1Y3QgY3J5cHRfaXZfb3BlcmF0aW9ucyB7CiAJaW50ICgqY3RyKShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgc3RydWN0IGRtX3RhcmdldCAqdGksCi0JICAgICAgICAgICBjb25zdCBjaGFyICpvcHRzKTsKKwkJICAgY29uc3QgY2hhciAqb3B0cyk7CiAJdm9pZCAoKmR0cikoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MpOwogCWNvbnN0IGNoYXIgKigqc3RhdHVzKShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyk7CiAJaW50ICgqZ2VuZXJhdG9yKShzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgdTggKml2LCBzZWN0b3JfdCBzZWN0b3IpOwpAQCAtODAsNiArNzksOCBAQAogCW1lbXBvb2xfdCAqcGFnZV9wb29sOwogCXN0cnVjdCBiaW9fc2V0ICpiczsKIAorCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppb19xdWV1ZTsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY3J5cHRfcXVldWU7CiAJLyoKIAkgKiBjcnlwdG8gcmVsYXRlZCBkYXRhCiAJICovCkBAIC0xMTIsNyArMTEzLDcgQEAKICAqIERpZmZlcmVudCBJViBnZW5lcmF0aW9uIGFsZ29yaXRobXM6CiAgKgogICogcGxhaW46IHRoZSBpbml0aWFsIHZlY3RvciBpcyB0aGUgMzItYml0IGxpdHRsZS1lbmRpYW4gdmVyc2lvbiBvZiB0aGUgc2VjdG9yCi0gKiAgICAgICAgbnVtYmVyLCBwYWRkZWQgd2l0aCB6ZXJvcyBpZiBuZWNjZXNzYXJ5LgorICogICAgICAgIG51bWJlciwgcGFkZGVkIHdpdGggemVyb3MgaWYgbmVjZXNzYXJ5LgogICoKICAqIGVzc2l2OiAiZW5jcnlwdGVkIHNlY3RvcnxzYWx0IGluaXRpYWwgdmVjdG9yIiwgdGhlIHNlY3RvciBudW1iZXIgaXMKICAqICAgICAgICBlbmNyeXB0ZWQgd2l0aCB0aGUgYnVsayBjaXBoZXIgdXNpbmcgYSBzYWx0IGFzIGtleS4gVGhlIHNhbHQKQEAgLTEzNyw3ICsxMzgsNyBAQAogfQogCiBzdGF0aWMgaW50IGNyeXB0X2l2X2Vzc2l2X2N0cihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgc3RydWN0IGRtX3RhcmdldCAqdGksCi0JICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wdHMpCisJCQkgICAgICBjb25zdCBjaGFyICpvcHRzKQogewogCXN0cnVjdCBjcnlwdG9fY2lwaGVyICplc3Npdl90Zm07CiAJc3RydWN0IGNyeXB0b19oYXNoICpoYXNoX3RmbTsKQEAgLTE3NSw2ICsxNzYsNyBAQAogCiAJaWYgKGVycikgewogCQl0aS0+ZXJyb3IgPSAiRXJyb3IgY2FsY3VsYXRpbmcgaGFzaCBpbiBFU1NJViI7CisJCWtmcmVlKHNhbHQpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMTg4LDcgKzE5MCw3IEBACiAJaWYgKGNyeXB0b19jaXBoZXJfYmxvY2tzaXplKGVzc2l2X3RmbSkgIT0KIAkgICAgY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUoY2MtPnRmbSkpIHsKIAkJdGktPmVycm9yID0gIkJsb2NrIHNpemUgb2YgRVNTSVYgY2lwaGVyIGRvZXMgIgotCQkJICAgICAgICAibm90IG1hdGNoIElWIHNpemUgb2YgYmxvY2sgY2lwaGVyIjsKKwkJCSAgICAibm90IG1hdGNoIElWIHNpemUgb2YgYmxvY2sgY2lwaGVyIjsKIAkJY3J5cHRvX2ZyZWVfY2lwaGVyKGVzc2l2X3RmbSk7CiAJCWtmcmVlKHNhbHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTMxOSwxMCArMzIxLDEwIEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkCi1jcnlwdF9jb252ZXJ0X2luaXQoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsIHN0cnVjdCBjb252ZXJ0X2NvbnRleHQgKmN0eCwKLSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYmlvICpiaW9fb3V0LCBzdHJ1Y3QgYmlvICpiaW9faW4sCi0gICAgICAgICAgICAgICAgICAgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgd3JpdGUpCitzdGF0aWMgdm9pZCBjcnlwdF9jb252ZXJ0X2luaXQoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsCisJCQkgICAgICAgc3RydWN0IGNvbnZlcnRfY29udGV4dCAqY3R4LAorCQkJICAgICAgIHN0cnVjdCBiaW8gKmJpb19vdXQsIHN0cnVjdCBiaW8gKmJpb19pbiwKKwkJCSAgICAgICBzZWN0b3JfdCBzZWN0b3IsIGludCB3cml0ZSkKIHsKIAljdHgtPmJpb19pbiA9IGJpb19pbjsKIAljdHgtPmJpb19vdXQgPSBiaW9fb3V0OwpAQCAtMzM4LDcgKzM0MCw3IEBACiAgKiBFbmNyeXB0IC8gZGVjcnlwdCBkYXRhIGZyb20gb25lIGJpbyB0byBhbm90aGVyIG9uZSAoY2FuIGJlIHRoZSBzYW1lIG9uZSkKICAqLwogc3RhdGljIGludCBjcnlwdF9jb252ZXJ0KHN0cnVjdCBjcnlwdF9jb25maWcgKmNjLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb252ZXJ0X2NvbnRleHQgKmN0eCkKKwkJCSBzdHJ1Y3QgY29udmVydF9jb250ZXh0ICpjdHgpCiB7CiAJaW50IHIgPSAwOwogCkBAIC0zNzAsNyArMzcyLDcgQEAKIAkJfQogCiAJCXIgPSBjcnlwdF9jb252ZXJ0X3NjYXR0ZXJsaXN0KGNjLCAmc2dfb3V0LCAmc2dfaW4sIHNnX2luLmxlbmd0aCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT53cml0ZSwgY3R4LT5zZWN0b3IpOworCQkJCQkgICAgICBjdHgtPndyaXRlLCBjdHgtPnNlY3Rvcik7CiAJCWlmIChyIDwgMCkKIAkJCWJyZWFrOwogCkBAIC0zODAsMTMgKzM4MiwxMyBAQAogCXJldHVybiByOwogfQogCi0gc3RhdGljIHZvaWQgZG1fY3J5cHRfYmlvX2Rlc3RydWN0b3Ioc3RydWN0IGJpbyAqYmlvKQotIHsKK3N0YXRpYyB2b2lkIGRtX2NyeXB0X2Jpb19kZXN0cnVjdG9yKHN0cnVjdCBiaW8gKmJpbykKK3sKIAlzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvID0gYmlvLT5iaV9wcml2YXRlOwogCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gaW8tPnRhcmdldC0+cHJpdmF0ZTsKIAogCWJpb19mcmVlKGJpbywgY2MtPmJzKTsKLSB9Cit9CiAKIC8qCiAgKiBHZW5lcmF0ZSBhIG5ldyB1bmZyYWdtZW50ZWQgYmlvIHdpdGggdGhlIGdpdmVuIHNpemUKQEAgLTQ1OCw3ICs0NjAsNyBAQAogICogT25lIG9mIHRoZSBiaW9zIHdhcyBmaW5pc2hlZC4gQ2hlY2sgZm9yIGNvbXBsZXRpb24gb2YKICAqIHRoZSB3aG9sZSByZXF1ZXN0IGFuZCBjb3JyZWN0bHkgY2xlYW4gdXAgdGhlIGJ1ZmZlci4KICAqLwotc3RhdGljIHZvaWQgZGVjX3BlbmRpbmcoc3RydWN0IGRtX2NyeXB0X2lvICppbywgaW50IGVycm9yKQorc3RhdGljIHZvaWQgY3J5cHRfZGVjX3BlbmRpbmcoc3RydWN0IGRtX2NyeXB0X2lvICppbywgaW50IGVycm9yKQogewogCXN0cnVjdCBjcnlwdF9jb25maWcgKmNjID0gKHN0cnVjdCBjcnlwdF9jb25maWcgKikgaW8tPnRhcmdldC0+cHJpdmF0ZTsKIApAQCAtNDc0LDE4ICs0NzYsMzYgQEAKIH0KIAogLyoKLSAqIGtjcnlwdGQ6CisgKiBrY3J5cHRkL2tjcnlwdGRfaW86CiAgKgogICogTmVlZGVkIGJlY2F1c2UgaXQgd291bGQgYmUgdmVyeSB1bndpc2UgdG8gZG8gZGVjcnlwdGlvbiBpbiBhbgogICogaW50ZXJydXB0IGNvbnRleHQuCisgKgorICoga2NyeXB0ZCBwZXJmb3JtcyB0aGUgYWN0dWFsIGVuY3J5cHRpb24gb3IgZGVjcnlwdGlvbi4KKyAqCisgKiBrY3J5cHRkX2lvIHBlcmZvcm1zIHRoZSBJTyBzdWJtaXNzaW9uLgorICoKKyAqIFRoZXkgbXVzdCBiZSBzZXBhcmF0ZWQgYXMgb3RoZXJ3aXNlIHRoZSBmaW5hbCBzdGFnZXMgY291bGQgYmUKKyAqIHN0YXJ2ZWQgYnkgbmV3IHJlcXVlc3RzIHdoaWNoIGNhbiBibG9jayBpbiB0aGUgZmlyc3Qgc3RhZ2VzIGR1ZQorICogdG8gbWVtb3J5IGFsbG9jYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX2tjcnlwdGRfd29ya3F1ZXVlOwogc3RhdGljIHZvaWQga2NyeXB0ZF9kb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBrY3J5cHRkX2RvX2NyeXB0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHN0YXRpYyB2b2lkIGtjcnlwdGRfcXVldWVfaW8oc3RydWN0IGRtX2NyeXB0X2lvICppbykKIHsKKwlzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyA9IGlvLT50YXJnZXQtPnByaXZhdGU7CisKIAlJTklUX1dPUksoJmlvLT53b3JrLCBrY3J5cHRkX2RvX3dvcmspOwotCXF1ZXVlX3dvcmsoX2tjcnlwdGRfd29ya3F1ZXVlLCAmaW8tPndvcmspOworCXF1ZXVlX3dvcmsoY2MtPmlvX3F1ZXVlLCAmaW8tPndvcmspOworfQorCitzdGF0aWMgdm9pZCBrY3J5cHRkX3F1ZXVlX2NyeXB0KHN0cnVjdCBkbV9jcnlwdF9pbyAqaW8pCit7CisJc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MgPSBpby0+dGFyZ2V0LT5wcml2YXRlOworCisJSU5JVF9XT1JLKCZpby0+d29yaywga2NyeXB0ZF9kb19jcnlwdCk7CisJcXVldWVfd29yayhjYy0+Y3J5cHRfcXVldWUsICZpby0+d29yayk7CiB9CiAKIHN0YXRpYyB2b2lkIGNyeXB0X2VuZGlvKHN0cnVjdCBiaW8gKmNsb25lLCBpbnQgZXJyb3IpCkBAIC01MDgsMTMgKzUyOCwxMiBAQAogCX0KIAogCWJpb19wdXQoY2xvbmUpOwotCWlvLT5wb3N0X3Byb2Nlc3MgPSAxOwotCWtjcnlwdGRfcXVldWVfaW8oaW8pOworCWtjcnlwdGRfcXVldWVfY3J5cHQoaW8pOwogCXJldHVybjsKIAogb3V0OgogCWJpb19wdXQoY2xvbmUpOwotCWRlY19wZW5kaW5nKGlvLCBlcnJvcik7CisJY3J5cHRfZGVjX3BlbmRpbmcoaW8sIGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgY2xvbmVfaW5pdChzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvLCBzdHJ1Y3QgYmlvICpjbG9uZSkKQEAgLTU0NCw3ICs1NjMsNyBAQAogCSAqLwogCWNsb25lID0gYmlvX2FsbG9jX2Jpb3NldChHRlBfTk9JTywgYmlvX3NlZ21lbnRzKGJhc2VfYmlvKSwgY2MtPmJzKTsKIAlpZiAodW5saWtlbHkoIWNsb25lKSkgewotCQlkZWNfcGVuZGluZyhpbywgLUVOT01FTSk7CisJCWNyeXB0X2RlY19wZW5kaW5nKGlvLCAtRU5PTUVNKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNTc5LDcgKzU5OCw3IEBACiAJd2hpbGUgKHJlbWFpbmluZykgewogCQljbG9uZSA9IGNyeXB0X2FsbG9jX2J1ZmZlcihpbywgcmVtYWluaW5nKTsKIAkJaWYgKHVubGlrZWx5KCFjbG9uZSkpIHsKLQkJCWRlY19wZW5kaW5nKGlvLCAtRU5PTUVNKTsKKwkJCWNyeXB0X2RlY19wZW5kaW5nKGlvLCAtRU5PTUVNKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC01ODksNyArNjA4LDcgQEAKIAkJaWYgKHVubGlrZWx5KGNyeXB0X2NvbnZlcnQoY2MsICZjdHgpIDwgMCkpIHsKIAkJCWNyeXB0X2ZyZWVfYnVmZmVyX3BhZ2VzKGNjLCBjbG9uZSk7CiAJCQliaW9fcHV0KGNsb25lKTsKLQkJCWRlY19wZW5kaW5nKGlvLCAtRUlPKTsKKwkJCWNyeXB0X2RlY19wZW5kaW5nKGlvLCAtRUlPKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC02MjQsMTcgKzY0MywyMyBAQAogCWNyeXB0X2NvbnZlcnRfaW5pdChjYywgJmN0eCwgaW8tPmJhc2VfYmlvLCBpby0+YmFzZV9iaW8sCiAJCQkgICBpby0+YmFzZV9iaW8tPmJpX3NlY3RvciAtIGlvLT50YXJnZXQtPmJlZ2luLCAwKTsKIAotCWRlY19wZW5kaW5nKGlvLCBjcnlwdF9jb252ZXJ0KGNjLCAmY3R4KSk7CisJY3J5cHRfZGVjX3BlbmRpbmcoaW8sIGNyeXB0X2NvbnZlcnQoY2MsICZjdHgpKTsKIH0KIAogc3RhdGljIHZvaWQga2NyeXB0ZF9kb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbV9jcnlwdF9pbywgd29yayk7CiAKLQlpZiAoaW8tPnBvc3RfcHJvY2VzcykKLQkJcHJvY2Vzc19yZWFkX2VuZGlvKGlvKTsKLQllbHNlIGlmIChiaW9fZGF0YV9kaXIoaW8tPmJhc2VfYmlvKSA9PSBSRUFEKQorCWlmIChiaW9fZGF0YV9kaXIoaW8tPmJhc2VfYmlvKSA9PSBSRUFEKQogCQlwcm9jZXNzX3JlYWQoaW8pOworfQorCitzdGF0aWMgdm9pZCBrY3J5cHRkX2RvX2NyeXB0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgZG1fY3J5cHRfaW8gKmlvID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkbV9jcnlwdF9pbywgd29yayk7CisKKwlpZiAoYmlvX2RhdGFfZGlyKGlvLT5iYXNlX2JpbykgPT0gUkVBRCkKKwkJcHJvY2Vzc19yZWFkX2VuZGlvKGlvKTsKIAllbHNlCiAJCXByb2Nlc3Nfd3JpdGUoaW8pOwogfQpAQCAtNjkwLDcgKzcxNSw3IEBACiAJY2MtPmtleV9zaXplID0ga2V5X3NpemU7IC8qIGluaXRpYWwgc2V0dGluZ3MgKi8KIAogCWlmICgoIWtleV9zaXplICYmIHN0cmNtcChrZXksICItIikpIHx8Ci0JICAgIChrZXlfc2l6ZSAmJiBjcnlwdF9kZWNvZGVfa2V5KGNjLT5rZXksIGtleSwga2V5X3NpemUpIDwgMCkpCisJICAgKGtleV9zaXplICYmIGNyeXB0X2RlY29kZV9rZXkoY2MtPmtleSwga2V5LCBrZXlfc2l6ZSkgPCAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzZXRfYml0KERNX0NSWVBUX0tFWV9WQUxJRCwgJmNjLT5mbGFncyk7CkBAIC03NDYsNyArNzcxLDcgQEAKIAogIAlpZiAoY3J5cHRfc2V0X2tleShjYywgYXJndlsxXSkpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGRlY29kaW5nIGtleSI7Ci0JCWdvdG8gYmFkMTsKKwkJZ290byBiYWRfY2lwaGVyOwogCX0KIAogCS8qIENvbXBhdGlibGl0eSBtb2RlIGZvciBvbGQgZG0tY3J5cHQgY2lwaGVyIHN0cmluZ3MgKi8KQEAgLTc1NywxOSArNzgyLDE5IEBACiAKIAlpZiAoc3RyY21wKGNoYWlubW9kZSwgImVjYiIpICYmICFpdm1vZGUpIHsKIAkJdGktPmVycm9yID0gIlRoaXMgY2hhaW5pbmcgbW9kZSByZXF1aXJlcyBhbiBJViBtZWNoYW5pc20iOwotCQlnb3RvIGJhZDE7CisJCWdvdG8gYmFkX2NpcGhlcjsKIAl9CiAKLQlpZiAoc25wcmludGYoY2MtPmNpcGhlciwgQ1JZUFRPX01BWF9BTEdfTkFNRSwgIiVzKCVzKSIsIGNoYWlubW9kZSwgCi0JCSAgICAgY2lwaGVyKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKSB7CisJaWYgKHNucHJpbnRmKGNjLT5jaXBoZXIsIENSWVBUT19NQVhfQUxHX05BTUUsICIlcyglcykiLAorCQkgICAgIGNoYWlubW9kZSwgY2lwaGVyKSA+PSBDUllQVE9fTUFYX0FMR19OQU1FKSB7CiAJCXRpLT5lcnJvciA9ICJDaGFpbiBtb2RlICsgY2lwaGVyIG5hbWUgaXMgdG9vIGxvbmciOwotCQlnb3RvIGJhZDE7CisJCWdvdG8gYmFkX2NpcGhlcjsKIAl9CiAKIAl0Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKGNjLT5jaXBoZXIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwogCWlmIChJU19FUlIodGZtKSkgewogCQl0aS0+ZXJyb3IgPSAiRXJyb3IgYWxsb2NhdGluZyBjcnlwdG8gdGZtIjsKLQkJZ290byBiYWQxOworCQlnb3RvIGJhZF9jaXBoZXI7CiAJfQogCiAJc3RyY3B5KGNjLT5jaXBoZXIsIGNpcGhlcik7CkBAIC03OTMsMTggKzgxOCwxOCBAQAogCQljYy0+aXZfZ2VuX29wcyA9ICZjcnlwdF9pdl9udWxsX29wczsKIAllbHNlIHsKIAkJdGktPmVycm9yID0gIkludmFsaWQgSVYgbW9kZSI7Ci0JCWdvdG8gYmFkMjsKKwkJZ290byBiYWRfaXZtb2RlOwogCX0KIAogCWlmIChjYy0+aXZfZ2VuX29wcyAmJiBjYy0+aXZfZ2VuX29wcy0+Y3RyICYmCiAJICAgIGNjLT5pdl9nZW5fb3BzLT5jdHIoY2MsIHRpLCBpdm9wdHMpIDwgMCkKLQkJZ290byBiYWQyOworCQlnb3RvIGJhZF9pdm1vZGU7CiAKIAljYy0+aXZfc2l6ZSA9IGNyeXB0b19ibGtjaXBoZXJfaXZzaXplKHRmbSk7CiAJaWYgKGNjLT5pdl9zaXplKQogCQkvKiBhdCBsZWFzdCBhIDY0IGJpdCBzZWN0b3IgbnVtYmVyIHNob3VsZCBmaXQgaW4gb3VyIGJ1ZmZlciAqLwogCQljYy0+aXZfc2l6ZSA9IG1heChjYy0+aXZfc2l6ZSwKLQkJICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkoc2l6ZW9mKHU2NCkgLyBzaXplb2YodTgpKSk7CisJCQkJICAodW5zaWduZWQgaW50KShzaXplb2YodTY0KSAvIHNpemVvZih1OCkpKTsKIAllbHNlIHsKIAkJaWYgKGNjLT5pdl9nZW5fb3BzKSB7CiAJCQlETVdBUk4oIlNlbGVjdGVkIGNpcGhlciBkb2VzIG5vdCBzdXBwb3J0IElWcyIpOwpAQCAtODE3LDEzICs4NDIsMTMgQEAKIAljYy0+aW9fcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbChNSU5fSU9TLCBfY3J5cHRfaW9fcG9vbCk7CiAJaWYgKCFjYy0+aW9fcG9vbCkgewogCQl0aS0+ZXJyb3IgPSAiQ2Fubm90IGFsbG9jYXRlIGNyeXB0IGlvIG1lbXBvb2wiOwotCQlnb3RvIGJhZDM7CisJCWdvdG8gYmFkX3NsYWJfcG9vbDsKIAl9CiAKIAljYy0+cGFnZV9wb29sID0gbWVtcG9vbF9jcmVhdGVfcGFnZV9wb29sKE1JTl9QT09MX1BBR0VTLCAwKTsKIAlpZiAoIWNjLT5wYWdlX3Bvb2wpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBhbGxvY2F0ZSBwYWdlIG1lbXBvb2wiOwotCQlnb3RvIGJhZDQ7CisJCWdvdG8gYmFkX3BhZ2VfcG9vbDsKIAl9CiAKIAljYy0+YnMgPSBiaW9zZXRfY3JlYXRlKE1JTl9JT1MsIE1JTl9JT1MpOwpAQCAtODM0LDI1ICs4NTksMjUgQEAKIAogCWlmIChjcnlwdG9fYmxrY2lwaGVyX3NldGtleSh0Zm0sIGNjLT5rZXksIGtleV9zaXplKSA8IDApIHsKIAkJdGktPmVycm9yID0gIkVycm9yIHNldHRpbmcga2V5IjsKLQkJZ290byBiYWQ1OworCQlnb3RvIGJhZF9kZXZpY2U7CiAJfQogCiAJaWYgKHNzY2FuZihhcmd2WzJdLCAiJWxsdSIsICZ0bXBsbCkgIT0gMSkgewogCQl0aS0+ZXJyb3IgPSAiSW52YWxpZCBpdl9vZmZzZXQgc2VjdG9yIjsKLQkJZ290byBiYWQ1OworCQlnb3RvIGJhZF9kZXZpY2U7CiAJfQogCWNjLT5pdl9vZmZzZXQgPSB0bXBsbDsKIAogCWlmIChzc2NhbmYoYXJndls0XSwgIiVsbHUiLCAmdG1wbGwpICE9IDEpIHsKIAkJdGktPmVycm9yID0gIkludmFsaWQgZGV2aWNlIHNlY3RvciI7Ci0JCWdvdG8gYmFkNTsKKwkJZ290byBiYWRfZGV2aWNlOwogCX0KIAljYy0+c3RhcnQgPSB0bXBsbDsKIAogCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzNdLCBjYy0+c3RhcnQsIHRpLT5sZW4sCi0JICAgICAgICAgICAgICAgICAgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmNjLT5kZXYpKSB7CisJCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZjYy0+ZGV2KSkgewogCQl0aS0+ZXJyb3IgPSAiRGV2aWNlIGxvb2t1cCBmYWlsZWQiOwotCQlnb3RvIGJhZDU7CisJCWdvdG8gYmFkX2RldmljZTsKIAl9CiAKIAlpZiAoaXZtb2RlICYmIGNjLT5pdl9nZW5fb3BzKSB7CkBAIC04NjEsMjcgKzg4Niw0NSBAQAogCQljYy0+aXZfbW9kZSA9IGttYWxsb2Moc3RybGVuKGl2bW9kZSkgKyAxLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFjYy0+aXZfbW9kZSkgewogCQkJdGktPmVycm9yID0gIkVycm9yIGttYWxsb2NpbmcgaXZfbW9kZSBzdHJpbmciOwotCQkJZ290byBiYWQ1OworCQkJZ290byBiYWRfaXZtb2RlX3N0cmluZzsKIAkJfQogCQlzdHJjcHkoY2MtPml2X21vZGUsIGl2bW9kZSk7CiAJfSBlbHNlCiAJCWNjLT5pdl9tb2RlID0gTlVMTDsKIAorCWNjLT5pb19xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrY3J5cHRkX2lvIik7CisJaWYgKCFjYy0+aW9fcXVldWUpIHsKKwkJdGktPmVycm9yID0gIkNvdWxkbid0IGNyZWF0ZSBrY3J5cHRkIGlvIHF1ZXVlIjsKKwkJZ290byBiYWRfaW9fcXVldWU7CisJfQorCisJY2MtPmNyeXB0X3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtjcnlwdGQiKTsKKwlpZiAoIWNjLT5jcnlwdF9xdWV1ZSkgeworCQl0aS0+ZXJyb3IgPSAiQ291bGRuJ3QgY3JlYXRlIGtjcnlwdGQgcXVldWUiOworCQlnb3RvIGJhZF9jcnlwdF9xdWV1ZTsKKwl9CisKIAl0aS0+cHJpdmF0ZSA9IGNjOwogCXJldHVybiAwOwogCi1iYWQ1OgorYmFkX2NyeXB0X3F1ZXVlOgorCWRlc3Ryb3lfd29ya3F1ZXVlKGNjLT5pb19xdWV1ZSk7CitiYWRfaW9fcXVldWU6CisJa2ZyZWUoY2MtPml2X21vZGUpOworYmFkX2l2bW9kZV9zdHJpbmc6CisJZG1fcHV0X2RldmljZSh0aSwgY2MtPmRldik7CitiYWRfZGV2aWNlOgogCWJpb3NldF9mcmVlKGNjLT5icyk7CiBiYWRfYnM6CiAJbWVtcG9vbF9kZXN0cm95KGNjLT5wYWdlX3Bvb2wpOwotYmFkNDoKK2JhZF9wYWdlX3Bvb2w6CiAJbWVtcG9vbF9kZXN0cm95KGNjLT5pb19wb29sKTsKLWJhZDM6CitiYWRfc2xhYl9wb29sOgogCWlmIChjYy0+aXZfZ2VuX29wcyAmJiBjYy0+aXZfZ2VuX29wcy0+ZHRyKQogCQljYy0+aXZfZ2VuX29wcy0+ZHRyKGNjKTsKLWJhZDI6CitiYWRfaXZtb2RlOgogCWNyeXB0b19mcmVlX2Jsa2NpcGhlcih0Zm0pOwotYmFkMToKK2JhZF9jaXBoZXI6CiAJLyogTXVzdCB6ZXJvIGtleSBtYXRlcmlhbCBiZWZvcmUgZnJlZWluZyAqLwogCW1lbXNldChjYywgMCwgc2l6ZW9mKCpjYykgKyBjYy0+a2V5X3NpemUgKiBzaXplb2YodTgpKTsKIAlrZnJlZShjYyk7CkBAIC04OTIsNyArOTM1LDggQEAKIHsKIAlzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYyA9IChzdHJ1Y3QgY3J5cHRfY29uZmlnICopIHRpLT5wcml2YXRlOwogCi0JZmx1c2hfd29ya3F1ZXVlKF9rY3J5cHRkX3dvcmtxdWV1ZSk7CisJZGVzdHJveV93b3JrcXVldWUoY2MtPmlvX3F1ZXVlKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShjYy0+Y3J5cHRfcXVldWUpOwogCiAJYmlvc2V0X2ZyZWUoY2MtPmJzKTsKIAltZW1wb29sX2Rlc3Ryb3koY2MtPnBhZ2VfcG9vbCk7CkBAIC05MTgsOSArOTYyLDEzIEBACiAJaW8gPSBtZW1wb29sX2FsbG9jKGNjLT5pb19wb29sLCBHRlBfTk9JTyk7CiAJaW8tPnRhcmdldCA9IHRpOwogCWlvLT5iYXNlX2JpbyA9IGJpbzsKLQlpby0+ZXJyb3IgPSBpby0+cG9zdF9wcm9jZXNzID0gMDsKKwlpby0+ZXJyb3IgPSAwOwogCWF0b21pY19zZXQoJmlvLT5wZW5kaW5nLCAwKTsKLQlrY3J5cHRkX3F1ZXVlX2lvKGlvKTsKKworCWlmIChiaW9fZGF0YV9kaXIoaW8tPmJhc2VfYmlvKSA9PSBSRUFEKQorCQlrY3J5cHRkX3F1ZXVlX2lvKGlvKTsKKwllbHNlCisJCWtjcnlwdGRfcXVldWVfY3J5cHQoaW8pOwogCiAJcmV0dXJuIERNX01BUElPX1NVQk1JVFRFRDsKIH0KQEAgLTEwMzcsMjUgKzEwODUsMTIgQEAKIAlpZiAoIV9jcnlwdF9pb19wb29sKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCV9rY3J5cHRkX3dvcmtxdWV1ZSA9IGNyZWF0ZV93b3JrcXVldWUoImtjcnlwdGQiKTsKLQlpZiAoIV9rY3J5cHRkX3dvcmtxdWV1ZSkgewotCQlyID0gLUVOT01FTTsKLQkJRE1FUlIoImNvdWxkbid0IGNyZWF0ZSBrY3J5cHRkIik7Ci0JCWdvdG8gYmFkMTsKLQl9Ci0KIAlyID0gZG1fcmVnaXN0ZXJfdGFyZ2V0KCZjcnlwdF90YXJnZXQpOwogCWlmIChyIDwgMCkgewogCQlETUVSUigicmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7Ci0JCWdvdG8gYmFkMjsKKwkJa21lbV9jYWNoZV9kZXN0cm95KF9jcnlwdF9pb19wb29sKTsKIAl9CiAKLQlyZXR1cm4gMDsKLQotYmFkMjoKLQlkZXN0cm95X3dvcmtxdWV1ZShfa2NyeXB0ZF93b3JrcXVldWUpOwotYmFkMToKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koX2NyeXB0X2lvX3Bvb2wpOwogCXJldHVybiByOwogfQogCkBAIC0xMDY2LDcgKzExMDEsNiBAQAogCWlmIChyIDwgMCkKIAkJRE1FUlIoInVucmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7CiAKLQlkZXN0cm95X3dvcmtxdWV1ZShfa2NyeXB0ZF93b3JrcXVldWUpOwogCWttZW1fY2FjaGVfZGVzdHJveShfY3J5cHRfaW9fcG9vbCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZGVsYXkuYyBiL2RyaXZlcnMvbWQvZG0tZGVsYXkuYwppbmRleCA2OTI4YzEzLi5iZGQzN2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWRlbGF5LmMKKysrIGIvZHJpdmVycy9tZC9kbS1kZWxheS5jCkBAIC04Myw3ICs4Myw3IEBACiAJc3RydWN0IGRtX2RlbGF5X2luZm8gKmRlbGF5ZWQsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgbmV4dF9leHBpcmVzID0gMDsKIAlpbnQgc3RhcnRfdGltZXIgPSAwOwotCUJJT19MSVNUKGZsdXNoX2Jpb3MpOworCXN0cnVjdCBiaW9fbGlzdCBmbHVzaF9iaW9zID0geyB9OwogCiAJbXV0ZXhfbG9jaygmZGVsYXllZF9iaW9zX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZWxheWVkLCBuZXh0LCAmZGMtPmRlbGF5ZWRfYmlvcywgbGlzdCkgewpAQCAtMTYzLDM0ICsxNjMsMzIgQEAKIAkJZ290byBiYWQ7CiAJfQogCi0JaWYgKGFyZ2MgPT0gMykgewotCQlkYy0+ZGV2X3dyaXRlID0gTlVMTDsKKwlkYy0+ZGV2X3dyaXRlID0gTlVMTDsKKwlpZiAoYXJnYyA9PSAzKQogCQlnb3RvIG91dDsKLQl9CiAKIAlpZiAoc3NjYW5mKGFyZ3ZbNF0sICIlbGx1IiwgJnRtcGxsKSAhPSAxKSB7CiAJCXRpLT5lcnJvciA9ICJJbnZhbGlkIHdyaXRlIGRldmljZSBzZWN0b3IiOwotCQlnb3RvIGJhZDsKKwkJZ290byBiYWRfZGV2X3JlYWQ7CiAJfQogCWRjLT5zdGFydF93cml0ZSA9IHRtcGxsOwogCiAJaWYgKHNzY2FuZihhcmd2WzVdLCAiJXUiLCAmZGMtPndyaXRlX2RlbGF5KSAhPSAxKSB7CiAJCXRpLT5lcnJvciA9ICJJbnZhbGlkIHdyaXRlIGRlbGF5IjsKLQkJZ290byBiYWQ7CisJCWdvdG8gYmFkX2Rldl9yZWFkOwogCX0KIAogCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzNdLCBkYy0+c3RhcnRfd3JpdGUsIHRpLT5sZW4sCiAJCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZkYy0+ZGV2X3dyaXRlKSkgewogCQl0aS0+ZXJyb3IgPSAiV3JpdGUgZGV2aWNlIGxvb2t1cCBmYWlsZWQiOwotCQlkbV9wdXRfZGV2aWNlKHRpLCBkYy0+ZGV2X3JlYWQpOwotCQlnb3RvIGJhZDsKKwkJZ290byBiYWRfZGV2X3JlYWQ7CiAJfQogCiBvdXQ6CiAJZGMtPmRlbGF5ZWRfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3NsYWJfcG9vbCgxMjgsIGRlbGF5ZWRfY2FjaGUpOwogCWlmICghZGMtPmRlbGF5ZWRfcG9vbCkgewogCQlETUVSUigiQ291bGRuJ3QgY3JlYXRlIGRlbGF5ZWQgYmlvIHBvb2wuIik7Ci0JCWdvdG8gYmFkOworCQlnb3RvIGJhZF9kZXZfd3JpdGU7CiAJfQogCiAJc2V0dXBfdGltZXIoJmRjLT5kZWxheV90aW1lciwgaGFuZGxlX2RlbGF5ZWRfdGltZXIsICh1bnNpZ25lZCBsb25nKWRjKTsKQEAgLTIwMyw2ICsyMDEsMTEgQEAKIAl0aS0+cHJpdmF0ZSA9IGRjOwogCXJldHVybiAwOwogCitiYWRfZGV2X3dyaXRlOgorCWlmIChkYy0+ZGV2X3dyaXRlKQorCQlkbV9wdXRfZGV2aWNlKHRpLCBkYy0+ZGV2X3dyaXRlKTsKK2JhZF9kZXZfcmVhZDoKKwlkbV9wdXRfZGV2aWNlKHRpLCBkYy0+ZGV2X3JlYWQpOwogYmFkOgogCWtmcmVlKGRjKTsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTMwNSw3ICszMDgsNyBAQAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGMtPnN0YXJ0X3JlYWQsCiAJCSAgICAgICBkYy0+cmVhZF9kZWxheSk7CiAJCWlmIChkYy0+ZGV2X3dyaXRlKQotCQkJRE1FTUlUKCIlcyAlbGx1ICV1IiwgZGMtPmRldl93cml0ZS0+bmFtZSwKKwkJCURNRU1JVCgiICVzICVsbHUgJXUiLCBkYy0+ZGV2X3dyaXRlLT5uYW1lLAogCQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGRjLT5zdGFydF93cml0ZSwKIAkJCSAgICAgICBkYy0+d3JpdGVfZGVsYXkpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tZW1jLmMgYi9kcml2ZXJzL21kL2RtLWVtYy5jCmluZGV4IDM0MjUxNzIuLjZiOTFiOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZW1jLmMKKysrIGIvZHJpdmVycy9tZC9kbS1lbWMuYwpAQCAtODEsNyArODEsNyBAQAogCX0KIAogCWlmIChiaW9fYWRkX3BhZ2UoYmlvLCBwYWdlLCBkYXRhX3NpemUsIDApICE9IGRhdGFfc2l6ZSkgewotCQlETUVSUigiZ2V0X2ZhaWxvdmVyX2JpbzogYWxsb2NfcGFnZSgpIGZhaWxlZC4iKTsKKwkJRE1FUlIoImdldF9mYWlsb3Zlcl9iaW86IGJpb19hZGRfcGFnZSgpIGZhaWxlZC4iKTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCWJpb19wdXQoYmlvKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMTEsMTIgKzIxMSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IGVtY19oYW5kbGVyICphbGxvY19lbWNfaGFuZGxlcih2b2lkKQogewotCXN0cnVjdCBlbWNfaGFuZGxlciAqaCA9IGttYWxsb2Moc2l6ZW9mKCpoKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGVtY19oYW5kbGVyICpoID0ga3phbGxvYyhzaXplb2YoKmgpLCBHRlBfS0VSTkVMKTsKIAotCWlmIChoKSB7Ci0JCW1lbXNldChoLCAwLCBzaXplb2YoKmgpKTsKKwlpZiAoaCkKIAkJc3Bpbl9sb2NrX2luaXQoJmgtPmxvY2spOwotCX0KIAogCXJldHVybiBoOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1ody1oYW5kbGVyLmMgYi9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYwppbmRleCBiYWFmYWFiLi4yZWU4NGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYworKysgYi9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuYwpAQCAtOTEsMTIgKzkxLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaHdoX2ludGVybmFsICpfYWxsb2NfaHdfaGFuZGxlcihzdHJ1Y3QgaHdfaGFuZGxlcl90eXBlICpod2h0KQogewotCXN0cnVjdCBod2hfaW50ZXJuYWwgKmh3aGkgPSBrbWFsbG9jKHNpemVvZigqaHdoaSksIEdGUF9LRVJORUwpOworCXN0cnVjdCBod2hfaW50ZXJuYWwgKmh3aGkgPSBremFsbG9jKHNpemVvZigqaHdoaSksIEdGUF9LRVJORUwpOwogCi0JaWYgKGh3aGkpIHsKLQkJbWVtc2V0KGh3aGksIDAsIHNpemVvZigqaHdoaSkpOworCWlmIChod2hpKQogCQlod2hpLT5od2h0ID0gKmh3aHQ7Ci0JfQogCiAJcmV0dXJuIGh3aGk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWh3LWhhbmRsZXIuaCBiL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5oCmluZGV4IGUwODMyZTYuLjQ2ODA5ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5oCisrKyBiL2RyaXZlcnMvbWQvZG0taHctaGFuZGxlci5oCkBAIC01OCw1ICs1OCw2IEBACiAjZGVmaW5lIE1QX0ZBSUxfUEFUSCAxCiAjZGVmaW5lIE1QX0JZUEFTU19QRyAyCiAjZGVmaW5lIE1QX0VSUk9SX0lPICA0CS8qIERvbid0IHJldHJ5IHRoaXMgSS9PICovCisjZGVmaW5lIE1QX1JFVFJZIDgKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWlvY3RsLmMgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKaW5kZXggYjQ0MWQ4Mi4uMTM4MjAwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWQvZG0taW9jdGwuYwpAQCAtNzAwLDcgKzcwMCw3IEBACiAJaW50IHI7CiAJY2hhciAqbmV3X25hbWUgPSAoY2hhciAqKSBwYXJhbSArIHBhcmFtLT5kYXRhX3N0YXJ0OwogCi0JaWYgKG5ld19uYW1lIDwgKGNoYXIgKikgKHBhcmFtICsgMSkgfHwKKwlpZiAobmV3X25hbWUgPCAoY2hhciAqKSBwYXJhbS0+ZGF0YSB8fAogCSAgICBpbnZhbGlkX3N0cihuZXdfbmFtZSwgKHZvaWQgKikgcGFyYW0gKyBwYXJhbV9zaXplKSkgewogCQlETVdBUk4oIkludmFsaWQgbmV3IGxvZ2ljYWwgdm9sdW1lIG5hbWUgc3VwcGxpZWQuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzI2LDcgKzcyNiw3IEBACiAJaWYgKCFtZCkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWlmIChnZW9zdHIgPCAoY2hhciAqKSAocGFyYW0gKyAxKSB8fAorCWlmIChnZW9zdHIgPCAoY2hhciAqKSBwYXJhbS0+ZGF0YSB8fAogCSAgICBpbnZhbGlkX3N0cihnZW9zdHIsICh2b2lkICopIHBhcmFtICsgcGFyYW1fc2l6ZSkpIHsKIAkJRE1XQVJOKCJJbnZhbGlkIGdlb21ldHJ5IHN1cHBsaWVkLiIpOwogCQlnb3RvIG91dDsKQEAgLTEyMzMsNyArMTIzMyw3IEBACiAJaWYgKHIpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHRtc2cgPCAoc3RydWN0IGRtX3RhcmdldF9tc2cgKikgKHBhcmFtICsgMSkgfHwKKwlpZiAodG1zZyA8IChzdHJ1Y3QgZG1fdGFyZ2V0X21zZyAqKSBwYXJhbS0+ZGF0YSB8fAogCSAgICBpbnZhbGlkX3N0cih0bXNnLT5tZXNzYWdlLCAodm9pZCAqKSBwYXJhbSArIHBhcmFtX3NpemUpKSB7CiAJCURNV0FSTigiSW52YWxpZCB0YXJnZXQgbWVzc2FnZSBwYXJhbWV0ZXJzLiIpOwogCQlyID0gLUVJTlZBTDsKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAJaWYgKHRtcC5kYXRhX3NpemUgPCBzaXplb2YodG1wKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkbWkgPSAoc3RydWN0IGRtX2lvY3RsICopIHZtYWxsb2ModG1wLmRhdGFfc2l6ZSk7CisJZG1pID0gdm1hbGxvYyh0bXAuZGF0YV9zaXplKTsKIAlpZiAoIWRtaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE1MTUsMyArMTUxNSwzNSBAQAogCiAJZG1faGFzaF9leGl0KCk7CiB9CisKKy8qKgorICogZG1fY29weV9uYW1lX2FuZF91dWlkIC0gQ29weSBtYXBwZWQgZGV2aWNlIG5hbWUgJiB1dWlkIGludG8gc3VwcGxpZWQgYnVmZmVycworICogQG1kOiBQb2ludGVyIHRvIG1hcHBlZF9kZXZpY2UKKyAqIEBuYW1lOiBCdWZmZXIgKHNpemUgRE1fTkFNRV9MRU4pIGZvciBuYW1lCisgKiBAdXVpZDogQnVmZmVyIChzaXplIERNX1VVSURfTEVOKSBmb3IgdXVpZCBvciBlbXB0eSBzdHJpbmcgaWYgdXVpZCBub3QgZGVmaW5lZAorICovCitpbnQgZG1fY29weV9uYW1lX2FuZF91dWlkKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgY2hhciAqbmFtZSwgY2hhciAqdXVpZCkKK3sKKwlpbnQgciA9IDA7CisJc3RydWN0IGhhc2hfY2VsbCAqaGM7CisKKwlpZiAoIW1kKQorCQlyZXR1cm4gLUVOWElPOworCisJZG1fZ2V0KG1kKTsKKwlkb3duX3JlYWQoJl9oYXNoX2xvY2spOworCWhjID0gZG1fZ2V0X21kcHRyKG1kKTsKKwlpZiAoIWhjIHx8IGhjLT5tZCAhPSBtZCkgeworCQlyID0gLUVOWElPOworCQlnb3RvIG91dDsKKwl9CisKKwlzdHJjcHkobmFtZSwgaGMtPm5hbWUpOworCXN0cmNweSh1dWlkLCBoYy0+dXVpZCA/IDogIiIpOworCitvdXQ6CisJdXBfcmVhZCgmX2hhc2hfbG9jayk7CisJZG1fcHV0KG1kKTsKKworCXJldHVybiByOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggYTY2NDI4ZC4uMDcyZWU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC02OTYsNyArNjk2LDcgQEAKIAkubW9kdWxlID0gVEhJU19NT0RVTEUsCiAJLmN0ciA9IGRpc2tfY3RyLAogCS5kdHIgPSBkaXNrX2R0ciwKLQkuc3VzcGVuZCA9IGRpc2tfZmx1c2gsCisJLnBvc3RzdXNwZW5kID0gZGlza19mbHVzaCwKIAkucmVzdW1lID0gZGlza19yZXN1bWUsCiAJLmdldF9yZWdpb25fc2l6ZSA9IGNvcmVfZ2V0X3JlZ2lvbl9zaXplLAogCS5pc19jbGVhbiA9IGNvcmVfaXNfY2xlYW4sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWxvZy5oIGIvZHJpdmVycy9tZC9kbS1sb2cuaAppbmRleCA4NmEzMDFjLi4zZmFlODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLWxvZy5oCisrKyBiL2RyaXZlcnMvbWQvZG0tbG9nLmgKQEAgLTMyLDcgKzMyLDggQEAKIAkgKiBUaGVyZSBhcmUgdGltZXMgd2hlbiB3ZSBkb24ndCB3YW50IHRoZSBsb2cgdG8gdG91Y2gKIAkgKiB0aGUgZGlzay4KIAkgKi8KLQlpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgZGlydHlfbG9nICpsb2cpOworCWludCAoKnByZXN1c3BlbmQpKHN0cnVjdCBkaXJ0eV9sb2cgKmxvZyk7CisJaW50ICgqcG9zdHN1c3BlbmQpKHN0cnVjdCBkaXJ0eV9sb2cgKmxvZyk7CiAJaW50ICgqcmVzdW1lKShzdHJ1Y3QgZGlydHlfbG9nICpsb2cpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbXBhdGgtaHAtc3cuYyBiL2RyaXZlcnMvbWQvZG0tbXBhdGgtaHAtc3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDRiZjQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9kbS1tcGF0aC1ocC1zdy5jCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgQ2hyaXN0aWUsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUmVkIEhhdCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQXV0aG9yczogTWlrZSBDaHJpc3RpZQorICogICAgICAgICAgRGF2ZSBXeXNvY2hhbnNraQorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMLgorICoKKyAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgdGhlIHNwZWNpZmljIHBhdGggYWN0aXZhdGlvbiBjb2RlIGZvcgorICogSFAgU3RvcmFnZVdvcmtzIGFuZCBGU0MgRmlicmVDYXQgQXN5bW1ldHJpYyAoQWN0aXZlL1Bhc3NpdmUpCisgKiBzdG9yYWdlIGFycmF5cy4KKyAqIFRoZXNlIHN0b3JhZ2UgYXJyYXlzIGhhdmUgY29udHJvbGxlci1iYXNlZCBmYWlsb3Zlciwgbm90CisgKiBMVU4tYmFzZWQgZmFpbG92ZXIuICBIb3dldmVyLCBMVU4tYmFzZWQgZmFpbG92ZXIgaXMgdGhlIGRlc2lnbgorICogb2YgZG0tbXVsdGlwYXRoLiBUaHVzLCB0aGlzIG1vZHVsZSBpcyB3cml0dGVuIGZvciBMVU4tYmFzZWQgZmFpbG92ZXIuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kYmcuaD4KKworI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZG0taHctaGFuZGxlci5oIgorCisjZGVmaW5lIERNX01TR19QUkVGSVggIm11bHRpcGF0aCBocC1zdyIKKyNkZWZpbmUgRE1fSFBfSFdIX05BTUUgImhwLXN3IgorI2RlZmluZSBETV9IUF9IV0hfVkVSICIxLjAuMCIKKworc3RydWN0IGhwX3N3X2NvbnRleHQgeworCXVuc2lnbmVkIGNoYXIgc2Vuc2VbU0NTSV9TRU5TRV9CVUZGRVJTSVpFXTsKK307CisKKy8qCisgKiBocF9zd19lcnJvcl9pc19yZXRyeWFibGUgLSBJcyBhbiBIUC1zcGVjaWZpYyBjaGVjayBjb25kaXRpb24gcmV0cnlhYmxlPworICogQHJlcTogcGF0aCBhY3RpdmF0aW9uIHJlcXVlc3QKKyAqCisgKiBFeGFtaW5lIGVycm9yIGNvZGVzIG9mIHJlcXVlc3QgYW5kIGRldGVybWluZSB3aGV0aGVyIHRoZSBlcnJvciBpcyByZXRyeWFibGUuCisgKiBTb21lIGVycm9yIGNvZGVzIGFyZSBhbHJlYWR5IHJldHJpZWQgYnkgc2NzaS1tbCAoc2VlCisgKiBzY3NpX2RlY2lkZV9kaXNwb3NpdGlvbiksIGJ1dCBzb21lIEhQIHNwZWNpZmljIGNvZGVzIGFyZSBub3QuCisgKiBUaGUgaW50ZW50IG9mIHRoaXMgcm91dGluZSBpcyB0byBzdXBwbHkgdGhlIGxvZ2ljIGZvciB0aGUgSFAgc3BlY2lmaWMKKyAqIGNoZWNrIGNvbmRpdGlvbnMuCisgKgorICogUmV0dXJuczoKKyAqICAxIC0gY29tbWFuZCBjb21wbGV0ZWQgd2l0aCByZXRyeWFibGUgZXJyb3IKKyAqICAwIC0gY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBub24tcmV0cnlhYmxlIGVycm9yCisgKgorICogUG9zc2libGUgb3B0aW1pemF0aW9ucworICogMS4gTW9yZSBoYXJkd2FyZS1zcGVjaWZpYyBlcnJvciBjb2RlcworICovCitzdGF0aWMgaW50IGhwX3N3X2Vycm9yX2lzX3JldHJ5YWJsZShzdHJ1Y3QgcmVxdWVzdCAqcmVxKQoreworCS8qCisJICogTk9UX1JFQURZIGlzIGtub3duIHRvIGJlIHJldHJ5YWJsZQorCSAqIEZvciBub3cgd2UganVzdCBkdW1wIG91dCB0aGUgc2Vuc2UgZGF0YSBhbmQgY2FsbCBpdCByZXRyeWFibGUKKwkgKi8KKwlpZiAoc3RhdHVzX2J5dGUocmVxLT5lcnJvcnMpID09IENIRUNLX0NPTkRJVElPTikKKwkJX19zY3NpX3ByaW50X3NlbnNlKERNX0hQX0hXSF9OQU1FLCByZXEtPnNlbnNlLCByZXEtPnNlbnNlX2xlbik7CisKKwkvKgorCSAqIEF0IHRoaXMgcG9pbnQgd2UgZG9uJ3QgaGF2ZSBjb21wbGV0ZSBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGVycm9yCisJICogY29kZXMgZnJvbSB0aGlzIGhhcmR3YXJlLCBzbyB3ZSBhcmUganVzdCBjb25zZXJ2YXRpdmUgYW5kIHJldHJ5CisJICogd2hlbiBpbiBkb3VidC4KKwkgKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIGhwX3N3X2VuZF9pbyAtIENvbXBsZXRpb24gaGFuZGxlciBmb3IgSFAgcGF0aCBhY3RpdmF0aW9uLgorICogQHJlcTogcGF0aCBhY3RpdmF0aW9uIHJlcXVlc3QKKyAqIEBlcnJvcjogc2NzaS1tbCBlcnJvcgorICoKKyAqICBDaGVjayBzZW5zZSBkYXRhLCBmcmVlIHJlcXVlc3Qgc3RydWN0dXJlLCBhbmQgbm90aWZ5IGRtIHRoYXQKKyAqICBwZyBpbml0aWFsaXphdGlvbiBoYXMgY29tcGxldGVkLgorICoKKyAqIENvbnRleHQ6IHNjc2ktbWwgc29mdGlycQorICoKKyAqLworc3RhdGljIHZvaWQgaHBfc3dfZW5kX2lvKHN0cnVjdCByZXF1ZXN0ICpyZXEsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3QgZG1fcGF0aCAqcGF0aCA9IHJlcS0+ZW5kX2lvX2RhdGE7CisJdW5zaWduZWQgZXJyX2ZsYWdzID0gMDsKKworCWlmICghZXJyb3IpIHsKKwkJRE1ERUJVRygiJXMgcGF0aCBhY3RpdmF0aW9uIGNvbW1hbmQgLSBzdWNjZXNzIiwKKwkJCXBhdGgtPmRldi0+bmFtZSk7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChocF9zd19lcnJvcl9pc19yZXRyeWFibGUocmVxKSkgeworCQlETURFQlVHKCIlcyBwYXRoIGFjdGl2YXRpb24gY29tbWFuZCAtIHJldHJ5IiwKKwkJCXBhdGgtPmRldi0+bmFtZSk7CisJCWVycl9mbGFncyA9IE1QX1JFVFJZOworCQlnb3RvIG91dDsKKwl9CisKKwlETVdBUk4oIiVzIHBhdGggYWN0aXZhdGlvbiBmYWlsIC0gZXJyb3I9MHgleCIsCisJICAgICAgIHBhdGgtPmRldi0+bmFtZSwgZXJyb3IpOworCWVycl9mbGFncyA9IE1QX0ZBSUxfUEFUSDsKKworb3V0OgorCXJlcS0+ZW5kX2lvX2RhdGEgPSBOVUxMOworCV9fYmxrX3B1dF9yZXF1ZXN0KHJlcS0+cSwgcmVxKTsKKwlkbV9wZ19pbml0X2NvbXBsZXRlKHBhdGgsIGVycl9mbGFncyk7Cit9CisKKy8qCisgKiBocF9zd19nZXRfcmVxdWVzdCAtIEFsbG9jYXRlIGFuIEhQIHNwZWNpZmljIHBhdGggYWN0aXZhdGlvbiByZXF1ZXN0CisgKiBAcGF0aDogcGF0aCBvbiB3aGljaCByZXF1ZXN0IHdpbGwgYmUgc2VudCAobmVlZGVkIGZvciByZXF1ZXN0IHF1ZXVlKQorICoKKyAqIFRoZSBTVEFSVCBjb21tYW5kIGlzIHVzZWQgZm9yIHBhdGggYWN0aXZhdGlvbiByZXF1ZXN0LgorICogVGhlc2UgYXJyYXlzIGFyZSBjb250cm9sbGVyLWJhc2VkIGZhaWxvdmVyLCBub3QgTFVOIGJhc2VkLgorICogT25lIFNUQVJUIGNvbW1hbmQgaXNzdWVkIHRvIGEgc2luZ2xlIHBhdGggd2lsbCBmYWlsIG92ZXIgYWxsCisgKiBMVU5zIGZvciB0aGUgc2FtZSBjb250cm9sbGVyLgorICoKKyAqIFBvc3NpYmxlIG9wdGltaXphdGlvbnMKKyAqIDEuIE1ha2UgdGltZW91dCBjb25maWd1cmFibGUKKyAqIDIuIFByZWFsbG9jYXRlIHJlcXVlc3QKKyAqLworc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpocF9zd19nZXRfcmVxdWVzdChzdHJ1Y3QgZG1fcGF0aCAqcGF0aCkKK3sKKwlzdHJ1Y3QgcmVxdWVzdCAqcmVxOworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBwYXRoLT5kZXYtPmJkZXY7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShiZGV2KTsKKwlzdHJ1Y3QgaHBfc3dfY29udGV4dCAqaCA9IHBhdGgtPmh3aGNvbnRleHQ7CisKKwlyZXEgPSBibGtfZ2V0X3JlcXVlc3QocSwgV1JJVEUsIEdGUF9OT0lPKTsKKwlpZiAoIXJlcSkKKwkJZ290byBvdXQ7CisKKwlyZXEtPnRpbWVvdXQgPSA2MCAqIEhaOworCisJcmVxLT5lcnJvcnMgPSAwOworCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9CTE9DS19QQzsKKwlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1QgfCBSRVFfTk9NRVJHRTsKKwlyZXEtPmVuZF9pb19kYXRhID0gcGF0aDsKKwlyZXEtPnNlbnNlID0gaC0+c2Vuc2U7CisJbWVtc2V0KHJlcS0+c2Vuc2UsIDAsIFNDU0lfU0VOU0VfQlVGRkVSU0laRSk7CisKKwltZW1zZXQoJnJlcS0+Y21kLCAwLCBCTEtfTUFYX0NEQik7CisJcmVxLT5jbWRbMF0gPSBTVEFSVF9TVE9QOworCXJlcS0+Y21kWzRdID0gMTsKKwlyZXEtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUocmVxLT5jbWRbMF0pOworCitvdXQ6CisJcmV0dXJuIHJlcTsKK30KKworLyoKKyAqIGhwX3N3X3BnX2luaXQgLSBIUCBwYXRoIGFjdGl2YXRpb24gaW1wbGVtZW50YXRpb24uCisgKiBAaHdoOiBoYXJkd2FyZSBoYW5kbGVyIHNwZWNpZmljIGRhdGEKKyAqIEBieXBhc3NlZDogdW51c2VkOyBpcyB0aGUgcGF0aCBncm91cCBieXBhc3NlZD8gKHNlZSBkbS1tcGF0aC5jKQorICogQHBhdGg6IHBhdGggdG8gc2VuZCBpbml0aWFsaXphdGlvbiBjb21tYW5kCisgKgorICogU2VuZCBhbiBIUC1zcGVjaWZpYyBwYXRoIGFjdGl2YXRpb24gY29tbWFuZCBvbiAncGF0aCcuCisgKiBEbyBub3QgdHJ5IHRvIG9wdGltaXplIGluIGFueSB3YXksIGp1c3Qgc2VuZCB0aGUgYWN0aXZhdGlvbiBjb21tYW5kLgorICogTW9yZSB0aGFuIG9uZSBwYXRoIGFjdGl2YXRpb24gY29tbWFuZCBtYXkgYmUgc2VudCB0byB0aGUgc2FtZSBjb250cm9sbGVyLgorICogVGhpcyBzZWVtcyB0byB3b3JrIGZpbmUgZm9yIGJhc2ljIGZhaWxvdmVyIHN1cHBvcnQuCisgKgorICogUG9zc2libGUgb3B0aW1pemF0aW9ucworICogMS4gRGV0ZWN0IGFuIGluLXByb2dyZXNzIGFjdGl2YXRpb24gcmVxdWVzdCBhbmQgYXZvaWQgc3VibWl0dGluZyBhbm90aGVyIG9uZQorICogMi4gTW9kZWwgdGhlIGNvbnRyb2xsZXIgYW5kIG9ubHkgc2VuZCBhIHNpbmdsZSBhY3RpdmF0aW9uIHJlcXVlc3QgYXQgYSB0aW1lCisgKiAzLiBEZXRlcm1pbmUgdGhlIHN0YXRlIG9mIGEgcGF0aCBiZWZvcmUgc2VuZGluZyBhbiBhY3RpdmF0aW9uIHJlcXVlc3QKKyAqCisgKiBDb250ZXh0OiBrbXBhdGhkIChzZWUgcHJvY2Vzc19xdWV1ZWRfaW9zKCkgaW4gZG0tbXBhdGguYykKKyAqLworc3RhdGljIHZvaWQgaHBfc3dfcGdfaW5pdChzdHJ1Y3QgaHdfaGFuZGxlciAqaHdoLCB1bnNpZ25lZCBieXBhc3NlZCwKKwkJCSAgc3RydWN0IGRtX3BhdGggKnBhdGgpCit7CisJc3RydWN0IHJlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgaHBfc3dfY29udGV4dCAqaDsKKworCXBhdGgtPmh3aGNvbnRleHQgPSBod2gtPmNvbnRleHQ7CisJaCA9IGh3aC0+Y29udGV4dDsKKworCXJlcSA9IGhwX3N3X2dldF9yZXF1ZXN0KHBhdGgpOworCWlmICghcmVxKSB7CisJCURNRVJSKCIlcyBwYXRoIGFjdGl2YXRpb24gY29tbWFuZCAtIGFsbG9jYXRpb24gZmFpbCIsCisJCSAgICAgIHBhdGgtPmRldi0+bmFtZSk7CisJCWdvdG8gcmV0cnk7CisJfQorCisJRE1ERUJVRygiJXMgcGF0aCBhY3RpdmF0aW9uIGNvbW1hbmQgLSBzZW50IiwgcGF0aC0+ZGV2LT5uYW1lKTsKKworCWJsa19leGVjdXRlX3JxX25vd2FpdChyZXEtPnEsIE5VTEwsIHJlcSwgMSwgaHBfc3dfZW5kX2lvKTsKKwlyZXR1cm47CisKK3JldHJ5OgorCWRtX3BnX2luaXRfY29tcGxldGUocGF0aCwgTVBfUkVUUlkpOworfQorCitzdGF0aWMgaW50IGhwX3N3X2NyZWF0ZShzdHJ1Y3QgaHdfaGFuZGxlciAqaHdoLCB1bnNpZ25lZCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlzdHJ1Y3QgaHBfc3dfY29udGV4dCAqaDsKKworCWggPSBrbWFsbG9jKHNpemVvZigqaCksIEdGUF9LRVJORUwpOworCWlmICghaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlod2gtPmNvbnRleHQgPSBoOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhwX3N3X2Rlc3Ryb3koc3RydWN0IGh3X2hhbmRsZXIgKmh3aCkKK3sKKwlzdHJ1Y3QgaHBfc3dfY29udGV4dCAqaCA9IGh3aC0+Y29udGV4dDsKKworCWtmcmVlKGgpOworfQorCitzdGF0aWMgc3RydWN0IGh3X2hhbmRsZXJfdHlwZSBocF9zd19od2ggPSB7CisJLm5hbWUgPSBETV9IUF9IV0hfTkFNRSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCisJLmNyZWF0ZSA9IGhwX3N3X2NyZWF0ZSwKKwkuZGVzdHJveSA9IGhwX3N3X2Rlc3Ryb3ksCisJLnBnX2luaXQgPSBocF9zd19wZ19pbml0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHBfc3dfaW5pdCh2b2lkKQoreworCWludCByOworCisJciA9IGRtX3JlZ2lzdGVyX2h3X2hhbmRsZXIoJmhwX3N3X2h3aCk7CisJaWYgKHIgPCAwKQorCQlETUVSUigicmVnaXN0ZXIgZmFpbGVkICVkIiwgcik7CisJZWxzZQorCQlETUlORk8oInZlcnNpb24gIiBETV9IUF9IV0hfVkVSICIgbG9hZGVkIik7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhwX3N3X2V4aXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBkbV91bnJlZ2lzdGVyX2h3X2hhbmRsZXIoJmhwX3N3X2h3aCk7CisJaWYgKHIgPCAwKQorCQlETUVSUigidW5yZWdpc3RlciBmYWlsZWQgJWQiLCByKTsKK30KKworbW9kdWxlX2luaXQoaHBfc3dfaW5pdCk7Cittb2R1bGVfZXhpdChocF9zd19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJETSBNdWx0aXBhdGggSFAgU3RvcmFnZVdvcmtzIC8gRlNDIEZpYnJlQ2F0IChBL1ApIHN1cHBvcnQiKTsKK01PRFVMRV9BVVRIT1IoIk1pa2UgQ2hyaXN0aWUsIERhdmUgV3lzb2NoYW5za2kgPGRtLWRldmVsQHJlZGhhdC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihETV9IUF9IV0hfVkVSKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbXBhdGgtcmRhYy5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC1yZGFjLmMKaW5kZXggMTZiMTYxMy4uZTA0ZWI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC1yZGFjLmMKKysrIGIvZHJpdmVycy9tZC9kbS1tcGF0aC1yZGFjLmMKQEAgLTY2NCwyMCArNjY0LDIxIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJkYWNfaW5pdCh2b2lkKQogewotCWludCByID0gZG1fcmVnaXN0ZXJfaHdfaGFuZGxlcigmcmRhY19oYW5kbGVyKTsKLQotCWlmIChyIDwgMCkgewotCQlETUVSUigiJXM6IHJlZ2lzdGVyIGZhaWxlZCAlZCIsIFJEQUNfRE1fSFdIX05BTUUsIHIpOwotCQlyZXR1cm4gcjsKLQl9CisJaW50IHI7CiAKIAlyZGFjX3drcWQgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicmRhY193a3FkIik7CiAJaWYgKCFyZGFjX3drcWQpIHsKIAkJRE1FUlIoIkZhaWxlZCB0byBjcmVhdGUgd29ya3F1ZXVlIHJkYWNfd2txZC4iKTsKLQkJZG1fdW5yZWdpc3Rlcl9od19oYW5kbGVyKCZyZGFjX2hhbmRsZXIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlyID0gZG1fcmVnaXN0ZXJfaHdfaGFuZGxlcigmcmRhY19oYW5kbGVyKTsKKwlpZiAociA8IDApIHsKKwkJRE1FUlIoIiVzOiByZWdpc3RlciBmYWlsZWQgJWQiLCBSREFDX0RNX0hXSF9OQU1FLCByKTsKKwkJZGVzdHJveV93b3JrcXVldWUocmRhY193a3FkKTsKKwkJcmV0dXJuIHI7CisJfQorCiAJRE1JTkZPKCIlczogdmVyc2lvbiAlcyBsb2FkZWQiLCBSREFDX0RNX0hXSF9OQU1FLCBSREFDX0RNX0hXSF9WRVIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IDMxMDU2YWIuLjI0YjJiMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJkbS1ody1oYW5kbGVyLmgiCiAjaW5jbHVkZSAiZG0tYmlvLWxpc3QuaCIKICNpbmNsdWRlICJkbS1iaW8tcmVjb3JkLmgiCisjaW5jbHVkZSAiZG0tdWV2ZW50LmgiCiAKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTc1LDYgKzc2LDggQEAKIAl1bnNpZ25lZCBxdWV1ZV9pbzsJCS8qIE11c3Qgd2UgcXVldWUgYWxsIEkvTz8gKi8KIAl1bnNpZ25lZCBxdWV1ZV9pZl9ub19wYXRoOwkvKiBRdWV1ZSBJL08gaWYgbGFzdCBwYXRoIGZhaWxzPyAqLwogCXVuc2lnbmVkIHNhdmVkX3F1ZXVlX2lmX25vX3BhdGg7LyogU2F2ZWQgc3RhdGUgZHVyaW5nIHN1c3BlbnNpb24gKi8KKwl1bnNpZ25lZCBwZ19pbml0X3JldHJpZXM7CS8qIE51bWJlciBvZiB0aW1lcyB0byByZXRyeSBwZ19pbml0ICovCisJdW5zaWduZWQgcGdfaW5pdF9jb3VudDsJCS8qIE51bWJlciBvZiB0aW1lcyBwZ19pbml0IGNhbGxlZCAqLwogCiAJc3RydWN0IHdvcmtfc3RydWN0IHByb2Nlc3NfcXVldWVkX2lvczsKIAlzdHJ1Y3QgYmlvX2xpc3QgcXVldWVkX2lvczsKQEAgLTIyNSw2ICsyMjgsOCBAQAogCQltLT5wZ19pbml0X3JlcXVpcmVkID0gMDsKIAkJbS0+cXVldWVfaW8gPSAwOwogCX0KKworCW0tPnBnX2luaXRfY291bnQgPSAwOwogfQogCiBzdGF0aWMgaW50IF9fY2hvb3NlX3BhdGhfaW5fcGcoc3RydWN0IG11bHRpcGF0aCAqbSwgc3RydWN0IHByaW9yaXR5X2dyb3VwICpwZykKQEAgLTQyNCw2ICs0MjksNyBAQAogCQltdXN0X3F1ZXVlID0gMDsKIAogCWlmIChtLT5wZ19pbml0X3JlcXVpcmVkICYmICFtLT5wZ19pbml0X2luX3Byb2dyZXNzKSB7CisJCW0tPnBnX2luaXRfY291bnQrKzsKIAkJbS0+cGdfaW5pdF9yZXF1aXJlZCA9IDA7CiAJCW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MgPSAxOwogCQlpbml0X3JlcXVpcmVkID0gMTsKQEAgLTY4OSw5ICs2OTUsMTEgQEAKIAlpbnQgcjsKIAl1bnNpZ25lZCBhcmdjOwogCXN0cnVjdCBkbV90YXJnZXQgKnRpID0gbS0+dGk7CisJY29uc3QgY2hhciAqcGFyYW1fbmFtZTsKIAogCXN0YXRpYyBzdHJ1Y3QgcGFyYW0gX3BhcmFtc1tdID0gewotCQl7MCwgMSwgImludmFsaWQgbnVtYmVyIG9mIGZlYXR1cmUgYXJncyJ9LAorCQl7MCwgMywgImludmFsaWQgbnVtYmVyIG9mIGZlYXR1cmUgYXJncyJ9LAorCQl7MSwgNTAsICJwZ19pbml0X3JldHJpZXMgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDUwIn0sCiAJfTsKIAogCXIgPSByZWFkX3BhcmFtKF9wYXJhbXMsIHNoaWZ0KGFzKSwgJmFyZ2MsICZ0aS0+ZXJyb3IpOwpAQCAtNzAxLDEyICs3MDksMjggQEAKIAlpZiAoIWFyZ2MpCiAJCXJldHVybiAwOwogCi0JaWYgKCFzdHJuaWNtcChzaGlmdChhcyksIE1FU0dfU1RSKCJxdWV1ZV9pZl9ub19wYXRoIikpKQotCQlyZXR1cm4gcXVldWVfaWZfbm9fcGF0aChtLCAxLCAwKTsKLQllbHNlIHsKKwlkbyB7CisJCXBhcmFtX25hbWUgPSBzaGlmdChhcyk7CisJCWFyZ2MtLTsKKworCQlpZiAoIXN0cm5pY21wKHBhcmFtX25hbWUsIE1FU0dfU1RSKCJxdWV1ZV9pZl9ub19wYXRoIikpKSB7CisJCQlyID0gcXVldWVfaWZfbm9fcGF0aChtLCAxLCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFzdHJuaWNtcChwYXJhbV9uYW1lLCBNRVNHX1NUUigicGdfaW5pdF9yZXRyaWVzIikpICYmCisJCSAgICAoYXJnYyA+PSAxKSkgeworCQkJciA9IHJlYWRfcGFyYW0oX3BhcmFtcyArIDEsIHNoaWZ0KGFzKSwKKwkJCQkgICAgICAgJm0tPnBnX2luaXRfcmV0cmllcywgJnRpLT5lcnJvcik7CisJCQlhcmdjLS07CisJCQljb250aW51ZTsKKwkJfQorCiAJCXRpLT5lcnJvciA9ICJVbnJlY29nbmlzZWQgbXVsdGlwYXRoIGZlYXR1cmUgcmVxdWVzdCI7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwkJciA9IC1FSU5WQUw7CisJfSB3aGlsZSAoYXJnYyAmJiAhcik7CisKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBtdWx0aXBhdGhfY3RyKHN0cnVjdCBkbV90YXJnZXQgKnRpLCB1bnNpZ25lZCBpbnQgYXJnYywKQEAgLTgzNCw2ICs4NTgsOSBAQAogCWlmIChwZ3BhdGggPT0gbS0+Y3VycmVudF9wZ3BhdGgpCiAJCW0tPmN1cnJlbnRfcGdwYXRoID0gTlVMTDsKIAorCWRtX3BhdGhfdWV2ZW50KERNX1VFVkVOVF9QQVRIX0ZBSUxFRCwgbS0+dGksCisJCSAgICAgIHBncGF0aC0+cGF0aC5kZXYtPm5hbWUsIG0tPm5yX3ZhbGlkX3BhdGhzKTsKKwogCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT50cmlnZ2VyX2V2ZW50KTsKIAogb3V0OgpAQCAtODczLDYgKzkwMCw5IEBACiAJaWYgKCFtLT5ucl92YWxpZF9wYXRocysrICYmIG0tPnF1ZXVlX3NpemUpCiAJCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOwogCisJZG1fcGF0aF91ZXZlbnQoRE1fVUVWRU5UX1BBVEhfUkVJTlNUQVRFRCwgbS0+dGksCisJCSAgICAgIHBncGF0aC0+cGF0aC5kZXYtPm5hbWUsIG0tPm5yX3ZhbGlkX3BhdGhzKTsKKwogCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT50cmlnZ2VyX2V2ZW50KTsKIAogb3V0OgpAQCAtOTc2LDYgKzEwMDYsMjYgQEAKIH0KIAogLyoKKyAqIFNob3VsZCB3ZSByZXRyeSBwZ19pbml0IGltbWVkaWF0ZWx5PworICovCitzdGF0aWMgaW50IHBnX2luaXRfbGltaXRfcmVhY2hlZChzdHJ1Y3QgbXVsdGlwYXRoICptLCBzdHJ1Y3QgcGdwYXRoICpwZ3BhdGgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbGltaXRfcmVhY2hlZCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+bG9jaywgZmxhZ3MpOworCisJaWYgKG0tPnBnX2luaXRfY291bnQgPD0gbS0+cGdfaW5pdF9yZXRyaWVzKQorCQltLT5wZ19pbml0X3JlcXVpcmVkID0gMTsKKwllbHNlCisJCWxpbWl0X3JlYWNoZWQgPSAxOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIGxpbWl0X3JlYWNoZWQ7Cit9CisKKy8qCiAgKiBwZ19pbml0IG11c3QgY2FsbCB0aGlzIHdoZW4gaXQgaGFzIGNvbXBsZXRlZCBpdHMgaW5pdGlhbGlzYXRpb24KICAqLwogdm9pZCBkbV9wZ19pbml0X2NvbXBsZXRlKHN0cnVjdCBkbV9wYXRoICpwYXRoLCB1bnNpZ25lZCBlcnJfZmxhZ3MpCkBAIC05ODUsOCArMTAzNSwxNCBAQAogCXN0cnVjdCBtdWx0aXBhdGggKm0gPSBwZy0+bTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JLyogV2UgaW5zaXN0IG9uIGZhaWxpbmcgdGhlIHBhdGggaWYgdGhlIFBHIGlzIGFscmVhZHkgYnlwYXNzZWQuICovCi0JaWYgKGVycl9mbGFncyAmJiBwZy0+YnlwYXNzZWQpCisJLyoKKwkgKiBJZiByZXF1ZXN0ZWQsIHJldHJ5IHBnX2luaXQgdW50aWwgbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcyBleGNlZWRlZC4KKwkgKiBJZiByZXRyeSBub3QgcmVxdWVzdGVkIGFuZCBQRyBhbHJlYWR5IGJ5cGFzc2VkLCBhbHdheXMgZmFpbCB0aGUgcGF0aC4KKwkgKi8KKwlpZiAoZXJyX2ZsYWdzICYgTVBfUkVUUlkpIHsKKwkJaWYgKHBnX2luaXRfbGltaXRfcmVhY2hlZChtLCBwZ3BhdGgpKQorCQkJZXJyX2ZsYWdzIHw9IE1QX0ZBSUxfUEFUSDsKKwl9IGVsc2UgaWYgKGVycl9mbGFncyAmJiBwZy0+YnlwYXNzZWQpCiAJCWVycl9mbGFncyB8PSBNUF9GQUlMX1BBVEg7CiAKIAlpZiAoZXJyX2ZsYWdzICYgTVBfRkFJTF9QQVRIKQpAQCAtOTk2LDcgKzEwNTIsNyBAQAogCQlieXBhc3NfcGcobSwgcGcsIDEpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmxvY2ssIGZsYWdzKTsKLQlpZiAoZXJyX2ZsYWdzKSB7CisJaWYgKGVycl9mbGFncyAmIH5NUF9SRVRSWSkgewogCQltLT5jdXJyZW50X3BncGF0aCA9IE5VTEw7CiAJCW0tPmN1cnJlbnRfcGcgPSBOVUxMOwogCX0gZWxzZSBpZiAoIW0tPnBnX2luaXRfcmVxdWlyZWQpCkBAIC0xMTQ4LDExICsxMjA0LDE1IEBACiAKIAkvKiBGZWF0dXJlcyAqLwogCWlmICh0eXBlID09IFNUQVRVU1RZUEVfSU5GTykKLQkJRE1FTUlUKCIxICV1ICIsIG0tPnF1ZXVlX3NpemUpOwotCWVsc2UgaWYgKG0tPnF1ZXVlX2lmX25vX3BhdGgpCi0JCURNRU1JVCgiMSBxdWV1ZV9pZl9ub19wYXRoICIpOwotCWVsc2UKLQkJRE1FTUlUKCIwICIpOworCQlETUVNSVQoIjIgJXUgJXUgIiwgbS0+cXVldWVfc2l6ZSwgbS0+cGdfaW5pdF9jb3VudCk7CisJZWxzZSB7CisJCURNRU1JVCgiJXUgIiwgbS0+cXVldWVfaWZfbm9fcGF0aCArCisJCQkgICAgICAobS0+cGdfaW5pdF9yZXRyaWVzID4gMCkgKiAyKTsKKwkJaWYgKG0tPnF1ZXVlX2lmX25vX3BhdGgpCisJCQlETUVNSVQoInF1ZXVlX2lmX25vX3BhdGggIik7CisJCWlmIChtLT5wZ19pbml0X3JldHJpZXMpCisJCQlETUVNSVQoInBnX2luaXRfcmV0cmllcyAldSAiLCBtLT5wZ19pbml0X3JldHJpZXMpOworCX0KIAogCWlmIChod2gtPnR5cGUgJiYgaHdoLT50eXBlLT5zdGF0dXMpCiAJCXN6ICs9IGh3aC0+dHlwZS0+c3RhdHVzKGh3aCwgdHlwZSwgcmVzdWx0ICsgc3osIG1heGxlbiAtIHN6KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcGF0aC1zZWxlY3Rvci5jIGIvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMKaW5kZXggZjEwYTBjOC4uY2ExYmI2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMKKysrIGIvZHJpdmVycy9tZC9kbS1wYXRoLXNlbGVjdG9yLmMKQEAgLTk0LDEyICs5NCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHBzX2ludGVybmFsICpfYWxsb2NfcGF0aF9zZWxlY3RvcihzdHJ1Y3QgcGF0aF9zZWxlY3Rvcl90eXBlICpwc3QpCiB7Ci0Jc3RydWN0IHBzX2ludGVybmFsICpwc2kgPSBrbWFsbG9jKHNpemVvZigqcHNpKSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IHBzX2ludGVybmFsICpwc2kgPSBremFsbG9jKHNpemVvZigqcHNpKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAocHNpKSB7Ci0JCW1lbXNldChwc2ksIDAsIHNpemVvZigqcHNpKSk7CisJaWYgKHBzaSkKIAkJcHNpLT5wc3QgPSAqcHN0OwotCX0KIAogCXJldHVybiBwc2k7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKaW5kZXggZDA5ZmYxNS4uMzExMjNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiAjZGVmaW5lIERNX01TR19QUkVGSVggInJhaWQxIgogI2RlZmluZSBETV9JT19QQUdFUyA2NApAQCAtMTEzLDYgKzExNCw3IEBACiAgKiBNaXJyb3Igc2V0IHN0cnVjdHVyZXMuCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiBzdHJ1Y3QgbWlycm9yIHsKKwlzdHJ1Y3QgbWlycm9yX3NldCAqbXM7CiAJYXRvbWljX3QgZXJyb3JfY291bnQ7CiAJc3RydWN0IGRtX2RldiAqZGV2OwogCXNlY3Rvcl90IG9mZnNldDsKQEAgLTk3NCw2ICs5NzYsNyBAQAogCiAJaWYgKHJoX2luaXQoJm1zLT5yaCwgbXMsIGRsLCByZWdpb25fc2l6ZSwgbXMtPm5yX3JlZ2lvbnMpKSB7CiAJCXRpLT5lcnJvciA9ICJFcnJvciBjcmVhdGluZyBkaXJ0eSByZWdpb24gaGFzaCI7CisJCWRtX2lvX2NsaWVudF9kZXN0cm95KG1zLT5pb19jbGllbnQpOwogCQlrZnJlZShtcyk7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTk5NCw3ICs5OTcsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBfY2hlY2tfcmVnaW9uX3NpemUoc3RydWN0IGRtX3RhcmdldCAqdGksIHVpbnQzMl90IHNpemUpCiB7Ci0JcmV0dXJuICEoc2l6ZSAlIChQQUdFX1NJWkUgPj4gOSkgfHwgKHNpemUgJiAoc2l6ZSAtIDEpKSB8fAorCXJldHVybiAhKHNpemUgJSAoUEFHRV9TSVpFID4+IDkpIHx8ICFpc19wb3dlcl9vZl8yKHNpemUpIHx8CiAJCSBzaXplID4gdGktPmxlbik7CiB9CiAKQEAgLTEwMTUsNiArMTAxOCw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCisJbXMtPm1pcnJvclttaXJyb3JdLm1zID0gbXM7CiAJbXMtPm1pcnJvclttaXJyb3JdLm9mZnNldCA9IG9mZnNldDsKIAogCXJldHVybiAwOwpAQCAtMTE2MywxNiArMTE2NywxNCBAQAogCW1zLT5rbWlycm9yZF93cSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJrbWlycm9yZCIpOwogCWlmICghbXMtPmttaXJyb3JkX3dxKSB7CiAJCURNRVJSKCJjb3VsZG4ndCBzdGFydCBrbWlycm9yZCIpOwotCQlmcmVlX2NvbnRleHQobXMsIHRpLCBtKTsKLQkJcmV0dXJuIC1FTk9NRU07CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlX2NvbnRleHQ7CiAJfQogCUlOSVRfV09SSygmbXMtPmttaXJyb3JkX3dvcmssIGRvX21pcnJvcik7CiAKIAlyID0gcGFyc2VfZmVhdHVyZXMobXMsIGFyZ2MsIGFyZ3YsICZhcmdzX3VzZWQpOwotCWlmIChyKSB7Ci0JCWZyZWVfY29udGV4dChtcywgdGksIG1zLT5ucl9taXJyb3JzKTsKLQkJcmV0dXJuIHI7Ci0JfQorCWlmIChyKQorCQlnb3RvIGVycl9kZXN0cm95X3dxOwogCiAJYXJndiArPSBhcmdzX3VzZWQ7CiAJYXJnYyAtPSBhcmdzX3VzZWQ7CkBAIC0xMTg4LDE5ICsxMTkwLDIyIEBACiAKIAlpZiAoYXJnYykgewogCQl0aS0+ZXJyb3IgPSAiVG9vIG1hbnkgbWlycm9yIGFyZ3VtZW50cyI7Ci0JCWZyZWVfY29udGV4dChtcywgdGksIG1zLT5ucl9taXJyb3JzKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXIgPSAtRUlOVkFMOworCQlnb3RvIGVycl9kZXN0cm95X3dxOwogCX0KIAogCXIgPSBrY29weWRfY2xpZW50X2NyZWF0ZShETV9JT19QQUdFUywgJm1zLT5rY29weWRfY2xpZW50KTsKLQlpZiAocikgewotCQlkZXN0cm95X3dvcmtxdWV1ZShtcy0+a21pcnJvcmRfd3EpOwotCQlmcmVlX2NvbnRleHQobXMsIHRpLCBtcy0+bnJfbWlycm9ycyk7Ci0JCXJldHVybiByOwotCX0KKwlpZiAocikKKwkJZ290byBlcnJfZGVzdHJveV93cTsKIAogCXdha2UobXMpOwogCXJldHVybiAwOworCitlcnJfZGVzdHJveV93cToKKwlkZXN0cm95X3dvcmtxdWV1ZShtcy0+a21pcnJvcmRfd3EpOworZXJyX2ZyZWVfY29udGV4dDoKKwlmcmVlX2NvbnRleHQobXMsIHRpLCBtcy0+bnJfbWlycm9ycyk7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyB2b2lkIG1pcnJvcl9kdHIoc3RydWN0IGRtX3RhcmdldCAqdGkpCkBAIC0xMzAyLDcgKzEzMDcsNyBAQAogCXdhaXRfZXZlbnQoX2ttaXJyb3JkX3JlY292ZXJ5X3N0b3BwZWQsCiAJCSAgICFhdG9taWNfcmVhZCgmbXMtPnJoLnJlY292ZXJ5X2luX2ZsaWdodCkpOwogCi0JaWYgKGxvZy0+dHlwZS0+c3VzcGVuZCAmJiBsb2ctPnR5cGUtPnN1c3BlbmQobG9nKSkKKwlpZiAobG9nLT50eXBlLT5wb3N0c3VzcGVuZCAmJiBsb2ctPnR5cGUtPnBvc3RzdXNwZW5kKGxvZykpCiAJCS8qIEZJWE1FOiBuZWVkIGJldHRlciBlcnJvciBoYW5kbGluZyAqLwogCQlETVdBUk4oImxvZyBzdXNwZW5kIGZhaWxlZCIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCA5OGE2MzNmLi5jZWUxNmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgogCiAjaW5jbHVkZSAiZG0tc25hcC5oIgogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCkBAIC00MTUsNyArNDE2LDcgQEAKIAljaHVua19zaXplID0gcm91bmRfdXAoY2h1bmtfc2l6ZSwgUEFHRV9TSVpFID4+IDkpOwogCiAJLyogQ2hlY2sgY2h1bmtfc2l6ZSBpcyBhIHBvd2VyIG9mIDIgKi8KLQlpZiAoY2h1bmtfc2l6ZSAmIChjaHVua19zaXplIC0gMSkpIHsKKwlpZiAoIWlzX3Bvd2VyX29mXzIoY2h1bmtfc2l6ZSkpIHsKIAkJKmVycm9yID0gIkNodW5rIHNpemUgaXMgbm90IGEgcG93ZXIgb2YgMiI7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCmluZGV4IDUxZjVlMDcuLjk2OTk0NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKKysrIGIvZHJpdmVycy9tZC9kbS1zdHJpcGUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2cyLmg+CiAKICNkZWZpbmUgRE1fTVNHX1BSRUZJWCAic3RyaXBlZCIKIApAQCAtOTksNyArMTAwLDcgQEAKIAkvKgogCSAqIGNodW5rX3NpemUgaXMgYSBwb3dlciBvZiB0d28KIAkgKi8KLQlpZiAoIWNodW5rX3NpemUgfHwgKGNodW5rX3NpemUgJiAoY2h1bmtfc2l6ZSAtIDEpKSB8fAorCWlmICghaXNfcG93ZXJfb2ZfMihjaHVua19zaXplKSB8fAogCSAgICAoY2h1bmtfc2l6ZSA8IChQQUdFX1NJWkUgPj4gU0VDVE9SX1NISUZUKSkpIHsKIAkJdGktPmVycm9yID0gIkludmFsaWQgY2h1bmsgc2l6ZSI7CiAJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IGZiZTQ3N2IuLjg5MzllNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTIxMywxMiArMjEzLDExIEBACiBpbnQgZG1fdGFibGVfY3JlYXRlKHN0cnVjdCBkbV90YWJsZSAqKnJlc3VsdCwgaW50IG1vZGUsCiAJCSAgICB1bnNpZ25lZCBudW1fdGFyZ2V0cywgc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKQogewotCXN0cnVjdCBkbV90YWJsZSAqdCA9IGttYWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJc3RydWN0IGRtX3RhYmxlICp0ID0ga3phbGxvYyhzaXplb2YoKnQpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAJSU5JVF9MSVNUX0hFQUQoJnQtPmRldmljZXMpOwogCWF0b21pY19zZXQoJnQtPmhvbGRlcnMsIDEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jIGIvZHJpdmVycy9tZC9kbS10YXJnZXQuYwppbmRleCA0NzdhMDQxLi44MzVjZjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXRhcmdldC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdGFyZ2V0LmMKQEAgLTg4LDEyICs4OCwxMCBAQAogCiBzdGF0aWMgc3RydWN0IHR0X2ludGVybmFsICphbGxvY190YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KQogewotCXN0cnVjdCB0dF9pbnRlcm5hbCAqdGkgPSBrbWFsbG9jKHNpemVvZigqdGkpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgdHRfaW50ZXJuYWwgKnRpID0ga3phbGxvYyhzaXplb2YoKnRpKSwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAodGkpIHsKLQkJbWVtc2V0KHRpLCAwLCBzaXplb2YoKnRpKSk7CisJaWYgKHRpKQogCQl0aS0+dHQgPSAqdDsKLQl9CiAKIAlyZXR1cm4gdGk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXVldmVudC5jIGIvZHJpdmVycy9tZC9kbS11ZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDM3N2U1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZC9kbS11ZXZlbnQuYwpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIERldmljZSBNYXBwZXIgVWV2ZW50IFN1cHBvcnQgKGRtLXVldmVudCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqIAlBdXRob3I6IE1pa2UgQW5kZXJzb24gPGFuZG1pa2VAbGludXgudm5ldC5pYm0uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG0taW9jdGwuaD4KKworI2luY2x1ZGUgImRtLmgiCisjaW5jbHVkZSAiZG0tdWV2ZW50LmgiCisKKyNkZWZpbmUgRE1fTVNHX1BSRUZJWCAidWV2ZW50IgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwllbnVtIGRtX3VldmVudF90eXBlIHR5cGU7CisJZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb247CisJY2hhciAqbmFtZTsKK30gX2RtX3VldmVudF90eXBlX25hbWVzW10gPSB7CisJe0RNX1VFVkVOVF9QQVRIX0ZBSUxFRCwgS09CSl9DSEFOR0UsICJQQVRIX0ZBSUxFRCJ9LAorCXtETV9VRVZFTlRfUEFUSF9SRUlOU1RBVEVELCBLT0JKX0NIQU5HRSwgIlBBVEhfUkVJTlNUQVRFRCJ9LAorfTsKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpfZG1fZXZlbnRfY2FjaGU7CisKK3N0cnVjdCBkbV91ZXZlbnQgeworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZDsKKwllbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbjsKKwlzdHJ1Y3Qga29ial91ZXZlbnRfZW52IGt1X2VudjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVsaXN0OworCWNoYXIgbmFtZVtETV9OQU1FX0xFTl07CisJY2hhciB1dWlkW0RNX1VVSURfTEVOXTsKK307CisKK3N0YXRpYyB2b2lkIGRtX3VldmVudF9mcmVlKHN0cnVjdCBkbV91ZXZlbnQgKmV2ZW50KQoreworCWttZW1fY2FjaGVfZnJlZShfZG1fZXZlbnRfY2FjaGUsIGV2ZW50KTsKK30KKworc3RhdGljIHN0cnVjdCBkbV91ZXZlbnQgKmRtX3VldmVudF9hbGxvYyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCit7CisJc3RydWN0IGRtX3VldmVudCAqZXZlbnQ7CisKKwlldmVudCA9IGttZW1fY2FjaGVfemFsbG9jKF9kbV9ldmVudF9jYWNoZSwgR0ZQX0FUT01JQyk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmZXZlbnQtPmVsaXN0KTsKKwlldmVudC0+bWQgPSBtZDsKKworCXJldHVybiBldmVudDsKK30KKworc3RhdGljIHN0cnVjdCBkbV91ZXZlbnQgKmRtX2J1aWxkX3BhdGhfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwKKwkJCQkJICAgICAgc3RydWN0IGRtX3RhcmdldCAqdGksCisJCQkJCSAgICAgIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAorCQkJCQkgICAgICBjb25zdCBjaGFyICpkbV9hY3Rpb24sCisJCQkJCSAgICAgIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkJCSAgICAgIHVuc2lnbmVkIG5yX3ZhbGlkX3BhdGhzKQoreworCXN0cnVjdCBkbV91ZXZlbnQgKmV2ZW50OworCisJZXZlbnQgPSBkbV91ZXZlbnRfYWxsb2MobWQpOworCWlmICghZXZlbnQpIHsKKwkJRE1FUlIoIiVzOiBkbV91ZXZlbnRfYWxsb2MoKSBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGVycl9ub21lbTsKKwl9CisKKwlldmVudC0+YWN0aW9uID0gYWN0aW9uOworCisJaWYgKGFkZF91ZXZlbnRfdmFyKCZldmVudC0+a3VfZW52LCAiRE1fVEFSR0VUPSVzIiwgdGktPnR5cGUtPm5hbWUpKSB7CisJCURNRVJSKCIlczogYWRkX3VldmVudF92YXIoKSBmb3IgRE1fVEFSR0VUIGZhaWxlZCIsCisJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyX2FkZDsKKwl9CisKKwlpZiAoYWRkX3VldmVudF92YXIoJmV2ZW50LT5rdV9lbnYsICJETV9BQ1RJT049JXMiLCBkbV9hY3Rpb24pKSB7CisJCURNRVJSKCIlczogYWRkX3VldmVudF92YXIoKSBmb3IgRE1fQUNUSU9OIGZhaWxlZCIsCisJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyX2FkZDsKKwl9CisKKwlpZiAoYWRkX3VldmVudF92YXIoJmV2ZW50LT5rdV9lbnYsICJETV9TRVFOVU09JXUiLAorCQkJICAgZG1fbmV4dF91ZXZlbnRfc2VxKG1kKSkpIHsKKwkJRE1FUlIoIiVzOiBhZGRfdWV2ZW50X3ZhcigpIGZvciBETV9TRVFOVU0gZmFpbGVkIiwKKwkJICAgICAgX19GVU5DVElPTl9fKTsKKwkJZ290byBlcnJfYWRkOworCX0KKworCWlmIChhZGRfdWV2ZW50X3ZhcigmZXZlbnQtPmt1X2VudiwgIkRNX1BBVEg9JXMiLCBwYXRoKSkgeworCQlETUVSUigiJXM6IGFkZF91ZXZlbnRfdmFyKCkgZm9yIERNX1BBVEggZmFpbGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBlcnJfYWRkOworCX0KKworCWlmIChhZGRfdWV2ZW50X3ZhcigmZXZlbnQtPmt1X2VudiwgIkRNX05SX1ZBTElEX1BBVEhTPSVkIiwKKwkJCSAgIG5yX3ZhbGlkX3BhdGhzKSkgeworCQlETUVSUigiJXM6IGFkZF91ZXZlbnRfdmFyKCkgZm9yIERNX05SX1ZBTElEX1BBVEhTIGZhaWxlZCIsCisJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZXJyX2FkZDsKKwl9CisKKwlyZXR1cm4gZXZlbnQ7CisKK2Vycl9hZGQ6CisJZG1fdWV2ZW50X2ZyZWUoZXZlbnQpOworZXJyX25vbWVtOgorCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworfQorCisvKioKKyAqIGRtX3NlbmRfdWV2ZW50cyAtIHNlbmQgdWV2ZW50cyBmb3IgZ2l2ZW4gbGlzdAorICoKKyAqIEBldmVudHM6CWxpc3Qgb2YgZXZlbnRzIHRvIHNlbmQKKyAqIEBrb2JqOglrb2JqZWN0IGdlbmVyYXRpbmcgZXZlbnQKKyAqCisgKi8KK3ZvaWQgZG1fc2VuZF91ZXZlbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmV2ZW50cywgc3RydWN0IGtvYmplY3QgKmtvYmopCit7CisJaW50IHI7CisJc3RydWN0IGRtX3VldmVudCAqZXZlbnQsICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCBuZXh0LCBldmVudHMsIGVsaXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmV2ZW50LT5lbGlzdCk7CisKKwkJLyoKKwkJICogTmVlZCB0byBjYWxsIGRtX2NvcHlfbmFtZV9hbmRfdXVpZCBmcm9tIGhlcmUgZm9yIG5vdy4KKwkJICogQ29udGV4dCBvZiBwcmV2aW91cyB2YXIgYWRkcyBhbmQgbG9ja2luZyB1c2VkIGZvcgorCQkgKiBoYXNoX2NlbGwgbm90IGNvbXBhdGFibGUuCisJCSAqLworCQlpZiAoZG1fY29weV9uYW1lX2FuZF91dWlkKGV2ZW50LT5tZCwgZXZlbnQtPm5hbWUsCisJCQkJCSAgZXZlbnQtPnV1aWQpKSB7CisJCQlETUVSUigiJXM6IGRtX2NvcHlfbmFtZV9hbmRfdXVpZCgpIGZhaWxlZCIsCisJCQkgICAgICBfX0ZVTkNUSU9OX18pOworCQkJZ290byB1ZXZlbnRfZnJlZTsKKwkJfQorCisJCWlmIChhZGRfdWV2ZW50X3ZhcigmZXZlbnQtPmt1X2VudiwgIkRNX05BTUU9JXMiLCBldmVudC0+bmFtZSkpIHsKKwkJCURNRVJSKCIlczogYWRkX3VldmVudF92YXIoKSBmb3IgRE1fTkFNRSBmYWlsZWQiLAorCQkJICAgICAgX19GVU5DVElPTl9fKTsKKwkJCWdvdG8gdWV2ZW50X2ZyZWU7CisJCX0KKworCQlpZiAoYWRkX3VldmVudF92YXIoJmV2ZW50LT5rdV9lbnYsICJETV9VVUlEPSVzIiwgZXZlbnQtPnV1aWQpKSB7CisJCQlETUVSUigiJXM6IGFkZF91ZXZlbnRfdmFyKCkgZm9yIERNX1VVSUQgZmFpbGVkIiwKKwkJCSAgICAgIF9fRlVOQ1RJT05fXyk7CisJCQlnb3RvIHVldmVudF9mcmVlOworCQl9CisKKwkJciA9IGtvYmplY3RfdWV2ZW50X2Vudihrb2JqLCBldmVudC0+YWN0aW9uLCBldmVudC0+a3VfZW52LmVudnApOworCQlpZiAocikKKwkJCURNRVJSKCIlczoga29iamVjdF91ZXZlbnRfZW52IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7Cit1ZXZlbnRfZnJlZToKKwkJZG1fdWV2ZW50X2ZyZWUoZXZlbnQpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGRtX3NlbmRfdWV2ZW50cyk7CisKKy8qKgorICogZG1fcGF0aF91ZXZlbnQgLSBjYWxsZWQgdG8gY3JlYXRlIGEgbmV3IHBhdGggZXZlbnQgYW5kIHF1ZXVlIGl0CisgKgorICogQGV2ZW50X3R5cGU6CXBhdGggZXZlbnQgdHlwZSBlbnVtCisgKiBAdGk6CQkJcG9pbnRlciB0byBhIGRtX3RhcmdldAorICogQHBhdGg6CQlzdHJpbmcgY29udGFpbmluZyBwYXRobmFtZQorICogQG5yX3ZhbGlkX3BhdGhzOgludW1iZXIgb2YgdmFsaWQgcGF0aHMgcmVtYWluaW5nCisgKgorICovCit2b2lkIGRtX3BhdGhfdWV2ZW50KGVudW0gZG1fdWV2ZW50X3R5cGUgZXZlbnRfdHlwZSwgc3RydWN0IGRtX3RhcmdldCAqdGksCisJCSAgIGNvbnN0IGNoYXIgKnBhdGgsIHVuc2lnbmVkIG5yX3ZhbGlkX3BhdGhzKQoreworCXN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCA9IGRtX3RhYmxlX2dldF9tZCh0aS0+dGFibGUpOworCXN0cnVjdCBkbV91ZXZlbnQgKmV2ZW50OworCisJaWYgKGV2ZW50X3R5cGUgPj0gQVJSQVlfU0laRShfZG1fdWV2ZW50X3R5cGVfbmFtZXMpKSB7CisJCURNRVJSKCIlczogSW52YWxpZCBldmVudF90eXBlICVkIiwgX19GVU5DVElPTl9fLCBldmVudF90eXBlKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXZlbnQgPSBkbV9idWlsZF9wYXRoX3VldmVudChtZCwgdGksCisJCQkJICAgICBfZG1fdWV2ZW50X3R5cGVfbmFtZXNbZXZlbnRfdHlwZV0uYWN0aW9uLAorCQkJCSAgICAgX2RtX3VldmVudF90eXBlX25hbWVzW2V2ZW50X3R5cGVdLm5hbWUsCisJCQkJICAgICBwYXRoLCBucl92YWxpZF9wYXRocyk7CisJaWYgKElTX0VSUihldmVudCkpCisJCWdvdG8gb3V0OworCisJZG1fdWV2ZW50X2FkZChtZCwgJmV2ZW50LT5lbGlzdCk7CisKK291dDoKKwlkbV9wdXQobWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZG1fcGF0aF91ZXZlbnQpOworCitpbnQgZG1fdWV2ZW50X2luaXQodm9pZCkKK3sKKwlfZG1fZXZlbnRfY2FjaGUgPSBLTUVNX0NBQ0hFKGRtX3VldmVudCwgMCk7CisJaWYgKCFfZG1fZXZlbnRfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCisJRE1JTkZPKCJ2ZXJzaW9uIDEuMC4zIik7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkbV91ZXZlbnRfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShfZG1fZXZlbnRfY2FjaGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS11ZXZlbnQuaCBiL2RyaXZlcnMvbWQvZG0tdWV2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmVjY2M4YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWQvZG0tdWV2ZW50LmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIERldmljZSBNYXBwZXIgVWV2ZW50IFN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgKiA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqIAlBdXRob3I6IE1pa2UgQW5kZXJzb24gPGFuZG1pa2VAbGludXgudm5ldC5pYm0uY29tPgorICovCisjaWZuZGVmIERNX1VFVkVOVF9ICisjZGVmaW5lIERNX1VFVkVOVF9ICisKK2VudW0gZG1fdWV2ZW50X3R5cGUgeworCURNX1VFVkVOVF9QQVRIX0ZBSUxFRCwKKwlETV9VRVZFTlRfUEFUSF9SRUlOU1RBVEVELAorfTsKKworI2lmZGVmIENPTkZJR19ETV9VRVZFTlQKKworZXh0ZXJuIGludCBkbV91ZXZlbnRfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGRtX3VldmVudF9leGl0KHZvaWQpOworZXh0ZXJuIHZvaWQgZG1fc2VuZF91ZXZlbnRzKHN0cnVjdCBsaXN0X2hlYWQgKmV2ZW50cywgc3RydWN0IGtvYmplY3QgKmtvYmopOworZXh0ZXJuIHZvaWQgZG1fcGF0aF91ZXZlbnQoZW51bSBkbV91ZXZlbnRfdHlwZSBldmVudF90eXBlLAorCQkJICAgc3RydWN0IGRtX3RhcmdldCAqdGksIGNvbnN0IGNoYXIgKnBhdGgsCisJCQkgICB1bnNpZ25lZCBucl92YWxpZF9wYXRocyk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtX3VldmVudF9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgZG1fdWV2ZW50X2V4aXQodm9pZCkKK3sKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbV9zZW5kX3VldmVudHMoc3RydWN0IGxpc3RfaGVhZCAqZXZlbnRzLAorCQkJCSAgIHN0cnVjdCBrb2JqZWN0ICprb2JqKQoreworfQorc3RhdGljIGlubGluZSB2b2lkIGRtX3BhdGhfdWV2ZW50KGVudW0gZG1fdWV2ZW50X3R5cGUgZXZlbnRfdHlwZSwKKwkJCQkgIHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLAorCQkJCSAgdW5zaWduZWQgbnJfdmFsaWRfcGF0aHMpCit7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfRE1fVUVWRU5UICovCisKKyNlbmRpZgkvKiBETV9VRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5jIGIvZHJpdmVycy9tZC9kbS5jCmluZGV4IGQ4MzdkMzcuLjA3Y2JiYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uYworKysgYi9kcml2ZXJzL21kL2RtLmMKQEAgLTcsNiArNyw3IEBACiAKICNpbmNsdWRlICJkbS5oIgogI2luY2x1ZGUgImRtLWJpby1saXN0LmgiCisjaW5jbHVkZSAiZG0tdWV2ZW50LmgiCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMTIsNiArMTEzLDkgQEAKIAkgKi8KIAlhdG9taWNfdCBldmVudF9ucjsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBldmVudHE7CisJYXRvbWljX3QgdWV2ZW50X3NlcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHVldmVudF9saXN0OworCXNwaW5sb2NrX3QgdWV2ZW50X2xvY2s7IC8qIFByb3RlY3QgYWNjZXNzIHRvIHVldmVudF9saXN0ICovCiAKIAkvKgogCSAqIGZyZWV6ZS90aGF3IHN1cHBvcnQgcmVxdWlyZSBob2xkaW5nIG9udG8gYSBzdXBlciBibG9jawpAQCAtMTQzLDExICsxNDcsMTkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJciA9IGRtX3VldmVudF9pbml0KCk7CisJaWYgKHIpIHsKKwkJa21lbV9jYWNoZV9kZXN0cm95KF90aW9fY2FjaGUpOworCQlrbWVtX2NhY2hlX2Rlc3Ryb3koX2lvX2NhY2hlKTsKKwkJcmV0dXJuIHI7CisJfQorCiAJX21ham9yID0gbWFqb3I7CiAJciA9IHJlZ2lzdGVyX2Jsa2RldihfbWFqb3IsIF9uYW1lKTsKIAlpZiAociA8IDApIHsKIAkJa21lbV9jYWNoZV9kZXN0cm95KF90aW9fY2FjaGUpOwogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koX2lvX2NhY2hlKTsKKwkJZG1fdWV2ZW50X2V4aXQoKTsKIAkJcmV0dXJuIHI7CiAJfQogCkBAIC0xNjIsNiArMTc0LDcgQEAKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koX3Rpb19jYWNoZSk7CiAJa21lbV9jYWNoZV9kZXN0cm95KF9pb19jYWNoZSk7CiAJdW5yZWdpc3Rlcl9ibGtkZXYoX21ham9yLCBfbmFtZSk7CisJZG1fdWV2ZW50X2V4aXQoKTsKIAogCV9tYWpvciA9IDA7CiAKQEAgLTc1MSwxNSArNzY0LDEzIEBACiAvKgogICogU3BsaXQgdGhlIGJpbyBpbnRvIHNldmVyYWwgY2xvbmVzLgogICovCi1zdGF0aWMgdm9pZCBfX3NwbGl0X2JpbyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBiaW8gKmJpbykKK3N0YXRpYyBpbnQgX19zcGxpdF9iaW8oc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBzdHJ1Y3QgYmlvICpiaW8pCiB7CiAJc3RydWN0IGNsb25lX2luZm8gY2k7CiAKIAljaS5tYXAgPSBkbV9nZXRfdGFibGUobWQpOwotCWlmICghY2kubWFwKSB7Ci0JCWJpb19pb19lcnJvcihiaW8pOwotCQlyZXR1cm47Ci0JfQorCWlmICh1bmxpa2VseSghY2kubWFwKSkKKwkJcmV0dXJuIC1FSU87CiAKIAljaS5tZCA9IG1kOwogCWNpLmJpbyA9IGJpbzsKQEAgLTc3OSw2ICs3OTAsOCBAQAogCS8qIGRyb3AgdGhlIGV4dHJhIHJlZmVyZW5jZSBjb3VudCAqLwogCWRlY19wZW5kaW5nKGNpLmlvLCAwKTsKIAlkbV90YWJsZV9wdXQoY2kubWFwKTsKKworCXJldHVybiAwOwogfQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ1JVRCBFTkQKQEAgLTc5MCw3ICs4MDMsNyBAQAogICovCiBzdGF0aWMgaW50IGRtX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHN0cnVjdCBiaW8gKmJpbykKIHsKLQlpbnQgcjsKKwlpbnQgciA9IC1FSU87CiAJaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpbyk7CiAJc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gcS0+cXVldWVkYXRhOwogCkBAIC04MTUsMTggKzgyOCwxMSBAQAogCXdoaWxlICh0ZXN0X2JpdChETUZfQkxPQ0tfSU8sICZtZC0+ZmxhZ3MpKSB7CiAJCXVwX3JlYWQoJm1kLT5pb19sb2NrKTsKIAotCQlpZiAoYmlvX3J3KGJpbykgPT0gUkVBREEpIHsKLQkJCWJpb19pb19lcnJvcihiaW8pOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJaWYgKGJpb19ydyhiaW8pICE9IFJFQURBKQorCQkJciA9IHF1ZXVlX2lvKG1kLCBiaW8pOwogCi0JCXIgPSBxdWV1ZV9pbyhtZCwgYmlvKTsKLQkJaWYgKHIgPCAwKSB7Ci0JCQliaW9faW9fZXJyb3IoYmlvKTsKLQkJCXJldHVybiAwOwotCi0JCX0gZWxzZSBpZiAociA9PSAwKQotCQkJcmV0dXJuIDA7CS8qIGRlZmVycmVkIHN1Y2Nlc3NmdWxseSAqLworCQlpZiAociA8PSAwKQorCQkJZ290byBvdXRfcmVxOwogCiAJCS8qCiAJCSAqIFdlJ3JlIGluIGEgd2hpbGUgbG9vcCwgYmVjYXVzZSBzb21lb25lIGNvdWxkIHN1c3BlbmQKQEAgLTgzNSw4ICs4NDEsMTMgQEAKIAkJZG93bl9yZWFkKCZtZC0+aW9fbG9jayk7CiAJfQogCi0JX19zcGxpdF9iaW8obWQsIGJpbyk7CisJciA9IF9fc3BsaXRfYmlvKG1kLCBiaW8pOwogCXVwX3JlYWQoJm1kLT5pb19sb2NrKTsKKworb3V0X3JlcToKKwlpZiAociA8IDApCisJCWJpb19pb19lcnJvcihiaW8pOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTk3Nyw2ICs5ODgsOSBAQAogCWF0b21pY19zZXQoJm1kLT5ob2xkZXJzLCAxKTsKIAlhdG9taWNfc2V0KCZtZC0+b3Blbl9jb3VudCwgMCk7CiAJYXRvbWljX3NldCgmbWQtPmV2ZW50X25yLCAwKTsKKwlhdG9taWNfc2V0KCZtZC0+dWV2ZW50X3NlcSwgMCk7CisJSU5JVF9MSVNUX0hFQUQoJm1kLT51ZXZlbnRfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJm1kLT51ZXZlbnRfbG9jayk7CiAKIAltZC0+cXVldWUgPSBibGtfYWxsb2NfcXVldWUoR0ZQX0tFUk5FTCk7CiAJaWYgKCFtZC0+cXVldWUpCkBAIC0xMDQ0LDEyICsxMDU4LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyB2b2lkIHVubG9ja19mcyhzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOworCiBzdGF0aWMgdm9pZCBmcmVlX2RldihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJaW50IG1pbm9yID0gbWQtPmRpc2stPmZpcnN0X21pbm9yOwogCiAJaWYgKG1kLT5zdXNwZW5kZWRfYmRldikgewotCQl0aGF3X2JkZXYobWQtPnN1c3BlbmRlZF9iZGV2LCBOVUxMKTsKKwkJdW5sb2NrX2ZzKG1kKTsKIAkJYmRwdXQobWQtPnN1c3BlbmRlZF9iZGV2KTsKIAl9CiAJbWVtcG9vbF9kZXN0cm95KG1kLT50aW9fcG9vbCk7CkBAIC0xMDczLDggKzEwODksMTYgQEAKICAqLwogc3RhdGljIHZvaWQgZXZlbnRfY2FsbGJhY2sodm9pZCAqY29udGV4dCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRCh1ZXZlbnRzKTsKIAlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSAoc3RydWN0IG1hcHBlZF9kZXZpY2UgKikgY29udGV4dDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+dWV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X3NwbGljZV9pbml0KCZtZC0+dWV2ZW50X2xpc3QsICZ1ZXZlbnRzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZC0+dWV2ZW50X2xvY2ssIGZsYWdzKTsKKworCWRtX3NlbmRfdWV2ZW50cygmdWV2ZW50cywgJm1kLT5kaXNrLT5rb2JqKTsKKwogCWF0b21pY19pbmMoJm1kLT5ldmVudF9ucik7CiAJd2FrZV91cCgmbWQtPmV2ZW50cSk7CiB9CkBAIC0xMjMzLDcgKzEyNTcsOCBAQAogCXdoaWxlIChjKSB7CiAJCW4gPSBjLT5iaV9uZXh0OwogCQljLT5iaV9uZXh0ID0gTlVMTDsKLQkJX19zcGxpdF9iaW8obWQsIGMpOworCQlpZiAoX19zcGxpdF9iaW8obWQsIGMpKQorCQkJYmlvX2lvX2Vycm9yKGMpOwogCQljID0gbjsKIAl9CiB9CkBAIC0xNDkxLDYgKzE1MTYsMTEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEV2ZW50IG5vdGlmaWNhdGlvbi4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VpbnQzMl90IGRtX25leHRfdWV2ZW50X3NlcShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCit7CisJcmV0dXJuIGF0b21pY19hZGRfcmV0dXJuKDEsICZtZC0+dWV2ZW50X3NlcSk7Cit9CisKIHVpbnQzMl90IGRtX2dldF9ldmVudF9ucihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpCiB7CiAJcmV0dXJuIGF0b21pY19yZWFkKCZtZC0+ZXZlbnRfbnIpOwpAQCAtMTUwMiw2ICsxNTMyLDE1IEBACiAJCQkoZXZlbnRfbnIgIT0gYXRvbWljX3JlYWQoJm1kLT5ldmVudF9ucikpKTsKIH0KIAordm9pZCBkbV91ZXZlbnRfYWRkKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgc3RydWN0IGxpc3RfaGVhZCAqZWxpc3QpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtZC0+dWV2ZW50X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZChlbGlzdCwgJm1kLT51ZXZlbnRfbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWQtPnVldmVudF9sb2NrLCBmbGFncyk7Cit9CisKIC8qCiAgKiBUaGUgZ2VuZGlzayBpcyBvbmx5IHZhbGlkIGFzIGxvbmcgYXMgeW91IGhhdmUgYSByZWZlcmVuY2UKICAqIGNvdW50IG9uICdtZCcuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2tjb3B5ZC5jIGIvZHJpdmVycy9tZC9rY29weWQuYwppbmRleCA3ZTA1MjM3Li5mMzgzMWYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2tjb3B5ZC5jCisrKyBiL2RyaXZlcnMvbWQva2NvcHlkLmMKQEAgLTE5OCw3ICsxOTgsNyBAQAogCSAqIFRoZXNlIGZpZWxkcyBhcmUgb25seSB1c2VkIGlmIHRoZSBqb2IgaGFzIGJlZW4gc3BsaXQKIAkgKiBpbnRvIG1vcmUgbWFuYWdlYWJsZSBwYXJ0cy4KIAkgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2s7CisJc3RydWN0IG11dGV4IGxvY2s7CiAJYXRvbWljX3Qgc3ViX2pvYnM7CiAJc2VjdG9yX3QgcHJvZ3Jlc3M7CiB9OwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJc2VjdG9yX3QgY291bnQgPSAwOwogCXN0cnVjdCBrY29weWRfam9iICpqb2IgPSAoc3RydWN0IGtjb3B5ZF9qb2IgKikgY29udGV4dDsKIAotCWRvd24oJmpvYi0+bG9jayk7CisJbXV0ZXhfbG9jaygmam9iLT5sb2NrKTsKIAogCS8qIHVwZGF0ZSB0aGUgZXJyb3IgKi8KIAlpZiAocmVhZF9lcnIpCkBAIC00ODAsNyArNDgwLDcgQEAKIAkJCWpvYi0+cHJvZ3Jlc3MgKz0gY291bnQ7CiAJCX0KIAl9Ci0JdXAoJmpvYi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZqb2ItPmxvY2spOwogCiAJaWYgKGNvdW50KSB7CiAJCWludCBpOwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJCWRpc3BhdGNoX2pvYihqb2IpOwogCiAJZWxzZSB7Ci0JCWluaXRfTVVURVgoJmpvYi0+bG9jayk7CisJCW11dGV4X2luaXQoJmpvYi0+bG9jayk7CiAJCWpvYi0+cHJvZ3Jlc3MgPSAwOwogCQlzcGxpdF9qb2Ioam9iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggYzA1OWFlNi4uODA4Y2Q5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtNDcxNyw3ICs0NzE3LDcgQEAKIAogdm9pZCBtZF91bnJlZ2lzdGVyX3RocmVhZChtZGtfdGhyZWFkX3QgKnRocmVhZCkKIHsKLQlkcHJpbnRrKCJpbnRlcnJ1cHRpbmcgTUQtdGhyZWFkIHBpZCAlZFxuIiwgdGhyZWFkLT50c2stPnBpZCk7CisJZHByaW50aygiaW50ZXJydXB0aW5nIE1ELXRocmVhZCBwaWQgJWRcbiIsIHRhc2tfcGlkX25yKHRocmVhZC0+dHNrKSk7CiAKIAlrdGhyZWFkX3N0b3AodGhyZWFkLT50c2spOwogCWtmcmVlKHRocmVhZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxLmMgYi9kcml2ZXJzL21kL3JhaWQxLmMKaW5kZXggMTY3NzVhMC4uODU0NzhkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkMS5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEuYwpAQCAtOSw3ICs5LDcgQEAKICAqCiAgKiBCZXR0ZXIgcmVhZC1iYWxhbmNpbmcgY29kZSB3cml0dGVuIGJ5IE1pa2EgS3VvcHBhbGEgPG1pa3VAaWtpLmZpPiwgMjAwMAogICoKLSAqIEZpeGVzIHRvIHJlY29uc3RydWN0aW9uIGJ5IEpha29iINhzdGVyZ2FhcmQiIDxqYWtvYkBvc3RlbmZlbGQuZGs+CisgKiBGaXhlcyB0byByZWNvbnN0cnVjdGlvbiBieSBKYWtvYiDDmHN0ZXJnYWFyZCIgPGpha29iQG9zdGVuZmVsZC5kaz4KICAqIFZhcmlvdXMgZml4ZXMgYnkgTmVpbCBCcm93biA8bmVpbGJAY3NlLnVuc3cuZWR1LmF1PgogICoKICAqIENoYW5nZXMgYnkgUGV0ZXIgVC4gQnJldWVyIDxwdGJAaXQudWMzbS5lcz4gMzEvMS8yMDAzIHRvIHN1cHBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaGxwLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2hscC5jCmluZGV4IGQyOTA1NzIuLjljOTA1MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaGxwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9obHAuYwpAQCAtMzEyLDcgKzMxMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIGJ1YmJsZSBzb3J0IHRoZSBmaXJzdCC0Y291bnS0IGl0ZW1zIG9mIHRoZSBhcnJheSC0dmFsdWVztCAqLworCS8qIGJ1YmJsZSBzb3J0IHRoZSBmaXJzdCBAY291bnQgaXRlbXMgb2YgdGhlIGFycmF5IEB2YWx1ZXMgKi8KIAlmb3IoIHRvcCA9ICpjb3VudDsgdG9wID4gMDsgdG9wLS0pIHsKIAkJZm9yKCBsb3cgPSAwLCBoaWdoID0gMTsgaGlnaCA8IHRvcDsgbG93KyssIGhpZ2grKykgewogCQkJaWYoIHZhbHVlc1tsb3ddID4gdmFsdWVzW2hpZ2hdICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2J0ODc4LmMKaW5kZXggZWNhNjAyZC4uODVlMzZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvYnQ4NzguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9idDg3OC5jCkBAIC0yODAsNyArMjgwLDcgQEAKIAkJaWYgKCEoYXN0YXQgPSAoc3RhdCAmIG1hc2spKSkKIAkJCXJldHVybiBJUlFfTk9ORTsJLyogdGhpcyBpbnRlcnJ1cHQgaXMgbm90IGZvciBtZSAqLwogLyoJCWRwcmludGsoImJ0ODc4KCVkKSBkZWJ1ZzogaXJxIGNvdW50ICVkLCBzdGF0IDB4JTguOHgsIG1hc2sgMHglOC44eFxuIixidC0+bnIsY291bnQsc3RhdCxtYXNrKTsgKi8KLQkJYnR3cml0ZShhc3RhdCwgQlQ4NzhfQUlOVF9TVEFUKTsJLyogdHJ5IHRvIGNsZWFyIGludGVydXB0IGNvbmRpdGlvbiAqLworCQlidHdyaXRlKGFzdGF0LCBCVDg3OF9BSU5UX1NUQVQpOwkvKiB0cnkgdG8gY2xlYXIgaW50ZXJydXB0IGNvbmRpdGlvbiAqLwogCiAKIAkJaWYgKGFzdGF0ICYgKEJUODc4X0FTQ0VSUiB8IEJUODc4X0FPQ0VSUikpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2NpbmVyZ3lUMi9jaW5lcmd5VDIuYwppbmRleCA1YTEyYjU2Li5hMDVlNWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9jaW5lcmd5VDIvY2luZXJneVQyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvY2luZXJneVQyL2NpbmVyZ3lUMi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIFRlcnJhVGVjIENpbmVyZ3kgVLIvcWFudSBVU0IyIERWQi1UIGFkYXB0ZXIuCisgKiBUZXJyYVRlYyBDaW5lcmd5IFTCsi9xYW51IFVTQjIgRFZCLVQgYWRhcHRlci4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQgRGFuaWVsIE1hY2sgPGRhbmllbEBxYW51LmRlPiBhbmQKICAqCQkgICAgSG9sZ2VyIFdhZWNodGxlciA8aG9sZ2VyQHFhbnUuZGU+CkBAIC04MjAsNyArODIwLDcgQEAKIAogCWlucHV0X2Rldi0+bmFtZSA9IERSSVZFUl9OQU1FICIgcmVtb3RlIGNvbnRyb2wiOwogCWlucHV0X2Rldi0+cGh5cyA9IGNpbmVyZ3l0Mi0+cGh5czsKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVQKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX1JFUCk7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmNfa2V5cyk7IGkgKz0gMykKIAkJc2V0X2JpdChyY19rZXlzW2kgKyAyXSwgaW5wdXRfZGV2LT5rZXliaXQpOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCBiMjAzNjQwLi40NDVmMDI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtNTI3LDcgKzUyNyw4IEBACiAJCXVwKCZmZXByaXYtPnNlbSk7CSAgICAvKiBpcyBsb2NrZWQgd2hlbiB3ZSBlbnRlciB0aGUgdGhyZWFkLi4uICovCiByZXN0YXJ0OgogCQl0aW1lb3V0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZmVwcml2LT53YWl0X3F1ZXVlLAotCQkJZHZiX2Zyb250ZW5kX3Nob3VsZF93YWtldXAoZmUpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSwKKwkJCWR2Yl9mcm9udGVuZF9zaG91bGRfd2FrZXVwKGZlKSB8fCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkKKwkJCQl8fCBmcmVlemluZyhjdXJyZW50KSwKIAkJCWZlcHJpdi0+ZGVsYXkpOwogCiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgZHZiX2Zyb250ZW5kX2lzX2V4aXRpbmcoZmUpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKaW5kZXggN2I5ZjM1Yi4uYzBjMmMyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJaWYgKCFpbnB1dF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOwogCWlucHV0X2Rldi0+bmFtZSA9ICJJUi1yZWNlaXZlciBpbnNpZGUgYW4gVVNCIERWQiByZWNlaXZlciI7CiAJaW5wdXRfZGV2LT5waHlzID0gZC0+cmNfcGh5czsKIAl1c2JfdG9faW5wdXRfaWQoZC0+dWRldiwgJmlucHV0X2Rldi0+aWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2lyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwppbmRleCA1ZDE5YzQwLi5hMjgzZTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaXIuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlICJhdjcxMTAuaCIKICNpbmNsdWRlICJhdjcxMTBfaHcuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCmluZGV4IDI4OGU3OWYuLjc5MDJhZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJc3RydWN0IGR2Yl9mcm9udGVuZCogZmU7CiB9OwogCi0vKiB1Z2x5IHdvcmthcm91bmQgLi4uIGRvbid0IGtub3cgd2h5IGl0J3MgbmVjY2Vzc2FyeSB0byByZWFkICovCisvKiB1Z2x5IHdvcmthcm91bmQgLi4uIGRvbid0IGtub3cgd2h5IGl0J3MgbmVjZXNzYXJ5IHRvIHJlYWQgKi8KIC8qIGFsbCByZXN1bHQgY29kZXMuICovCiAKICNkZWZpbmUgREVCVUcgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCmluZGV4IDVlNjkxZmQuLjFlYzk4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKQEAgLTExOTgsNyArMTE5OCw3IEBACiAKIAlpbnB1dF9kZXYtPm5hbWUgPSAidHR1c2JfZGVjIHJlbW90ZSBjb250cm9sIjsKIAlpbnB1dF9kZXYtPnBoeXMgPSBkZWMtPnJjX3BoeXM7Ci0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9LRVkpOworCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOwogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YodTE2KTsKIAlpbnB1dF9kZXYtPmtleWNvZGVtYXggPSAweDFhOwogCWlucHV0X2Rldi0+a2V5Y29kZSA9IHJjX2tleXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IGRkNmE3ZDYuLjNhYmQ5ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC0xMjU5LDcgKzEyNTksNyBAQAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0xJRkVURUNfOTQxNV0gPSB7Ci0JCS8qIFRpbSBS9nN0ZXJtdW5kdCA8cm9zdGVybUB1bmktbXVlbnN0ZXIuZGU+CisJCS8qIFRpbSBSw7ZzdGVybXVuZHQgPHJvc3Rlcm1AdW5pLW11ZW5zdGVyLmRlPgogCQlpbiBkZS5jb21wLm9zLnVuaXgubGludXguaGFyZHdhcmU6CiAJCQlvcHRpb25zIGJ0dHYgY2FyZD0wIHBsbD0xIHJhZGlvPTEgZ3Bpb21hc2s9MHgxOGUwCiAJCQlncGlvbXV4ID0weDQ0YzcxZiwweDQ0ZDcxZiwwLDB4NDRkNzFmLDB4NDRkZmZmCkBAIC0yODI0LDcgKzI4MjQsNyBAQAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDhiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9QVl9NNDkwMF0gPSB7Ci0JCS8qIFPpcmdpbyBGb3J0aWVyIDxzZXJnaW9mb3J0aWVyQHlhaG9vLmNvbS5icj4gKi8KKwkJLyogU8OpcmdpbyBGb3J0aWVyIDxzZXJnaW9mb3J0aWVyQHlhaG9vLmNvbS5icj4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWxWaWV3IFBsYXlUViBNUEVHMiBQVi1NNDkwMCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCiAJCS5hdWRpb19pbnB1dHMgICA9IDEsCkBAIC00NzA5LDE4ICs0NzA5LDE4IEBACiAgKgogICogVGhlIGJvYXJkIGhhcmR3aXJlIFkwICh4cG9pbnQpIHRvIE1VWDEgYW5kIE1VWE9VVCB0byBZaW4uCiAgKiBHUElPIHBpbnMgYXJlIHdpcmVkIGFzOgotICogIEdQSU9bMDozXSAtIEFYWzA6M10gKHhwb2ludCkgLSBQMVswOjNdIChtaWNyb2NvbnRyb2xlcikKLSAqICBHUElPWzQ6Nl0gLSBBWVswOjJdICh4cG9pbnQpIC0gUDFbNDo2XSAobWljcm9jb250cm9sZXIpCi0gKiAgR1BJT1s3XSAgIC0gREFUQSAoeHBvaW50KSAgICAtIFAxWzddIChtaWNyb2NvbnRyb2xlcikKLSAqICBHUElPWzhdICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNV0gKG1pY3JvY29udHJvbGVyKQotICogIEdQSU9bOV0gICAtIFJFU0VUICh4cG9pbnQpICAgLSBQM1s2XSAobWljcm9jb250cm9sZXIpCi0gKiAgR1BJT1sxMF0gIC0gU1RST0JFICh4cG9pbnQpICAtIFAzWzddIChtaWNyb2NvbnRyb2xlcikKLSAqICBHUElOVFIgICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNF0gKG1pY3JvY29udHJvbGVyKQorICogIEdQSU9bMDozXSAtIEFYWzA6M10gKHhwb2ludCkgLSBQMVswOjNdIChtaWNyb2NvbnRyb2xsZXIpCisgKiAgR1BJT1s0OjZdIC0gQVlbMDoyXSAoeHBvaW50KSAtIFAxWzQ6Nl0gKG1pY3JvY29udHJvbGxlcikKKyAqICBHUElPWzddICAgLSBEQVRBICh4cG9pbnQpICAgIC0gUDFbN10gKG1pY3JvY29udHJvbGxlcikKKyAqICBHUElPWzhdICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNV0gKG1pY3JvY29udHJvbGxlcikKKyAqICBHUElPWzldICAgLSBSRVNFVCAoeHBvaW50KSAgIC0gUDNbNl0gKG1pY3JvY29udHJvbGxlcikKKyAqICBHUElPWzEwXSAgLSBTVFJPQkUgKHhwb2ludCkgIC0gUDNbN10gKG1pY3JvY29udHJvbGxlcikKKyAqICBHUElOVFIgICAgLSAgICAgICAgICAgICAgICAgIC0gUDNbNF0gKG1pY3JvY29udHJvbGxlcikKICAqCi0gKiBUaGUgbWljcm9jb250cm9sZXIgaXMgYSA4MEMzMiBsaWtlLiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2hhbmdlIHhwb2ludAotICogY29uZmlndXJhdGlvbiBlaXRoZXIgZGlyZWN0bHkgKGFzIHdlIGFyZSBkb2luZykgb3IgdXNpbmcgdGhlIG1pY3JvY29udHJvbGVyCisgKiBUaGUgbWljcm9jb250cm9sbGVyIGlzIGEgODBDMzIgbGlrZS4gSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGNoYW5nZSB4cG9pbnQKKyAqIGNvbmZpZ3VyYXRpb24gZWl0aGVyIGRpcmVjdGx5IChhcyB3ZSBhcmUgZG9pbmcpIG9yIHVzaW5nIHRoZSBtaWNyb2NvbnRyb2xsZXIKICAqIHdoaWNoIGlzIGFsc28gd2lyZWQgdG8gSTJDIGludGVyZmFjZS4gSSBoYXZlIG5vIGZ1cnRoZXIgaW5mbyBvbiB0aGUKLSAqIG1pY3JvY29udHJvbGVyIGZlYXR1cmVzLCBvbmUgd291bGQgbmVlZCB0byBkaXNhc3NlbWJseSB0aGUgZmlybXdhcmUuCisgKiBtaWNyb2NvbnRyb2xsZXIgZmVhdHVyZXMsIG9uZSB3b3VsZCBuZWVkIHRvIGRpc2Fzc2VtYmx5IHRoZSBmaXJtd2FyZS4KICAqIG5vdGU6IHRoZSB2ZW5kb3IgcmVmdXNlZCB0byBnaXZlIGFueSBpbmZvcm1hdGlvbiBvbiB0aGlzIHByb2R1Y3QsIGFsbAogICogICAgICAgdGhhdCBzdHVmZiB3YXMgZm91bmQgdXNpbmcgYSBtdWx0aW1ldGVyISA6KQogICovCkBAIC00Nzg4LDcgKzQ3ODgsNyBAQAogICogVGhlIGFuYWxvZyBzd2l0Y2ggaXMgY29udHJvbGxlZCBieSB0aGUgIm1hc3RlciIsIGJ1dCB0aGUgZGV0ZWN0aW9uIG9yZGVyCiAgKiBvZiB0aGUgZm91ciBCVDg3OEEgY2hpcHMgaXMgaW4gYW4gb3JkZXIgd2hpY2ggSSBqdXN0IGRvbid0IHVuZGVyc3RhbmQuCiAgKiBUaGUgIm1hc3RlciIgaXMgYWN0dWFsbHkgdGhlIHNlY29uZCBjb250cm9sbGVyIHRvIGJlIGRldGVjdGVkLiAgVGhlCi0gKiBsb2dpYyBvbiB0aGUgYm9hcmQgdXNlcyBsb2dpY2FsIG51bWJlcnMgZm9yIHRoZSA0IGNvbnRyb2xlcnMsIGJ1dAorICogbG9naWMgb24gdGhlIGJvYXJkIHVzZXMgbG9naWNhbCBudW1iZXJzIGZvciB0aGUgNCBjb250cm9sbGVycywgYnV0CiAgKiB0aG9zZSBudW1iZXJzIGFyZSBkaWZmZXJlbnQgZnJvbSB0aGUgZGV0ZWN0aW9uIHNlcXVlbmNlLiAgV2hlbiB3b3JraW5nCiAgKiB3aXRoIHRoZSBhbmFsb2cgc3dpdGNoLCB3ZSBuZWVkIHRvICJtYXAiIGZyb20gdGhlIGRldGVjdGlvbiBzZXF1ZW5jZQogICogb3ZlciB0byB0aGUgYm9hcmQncyBsb2dpY2FsIGNvbnRyb2xsZXIgbnVtYmVyLiAgVGhpcyBtYXBwaW5nIHNlcXVlbmNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCmluZGV4IGI4ZDUzMjcuLmU0Njc2ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jCkBAIC05MDcsNyArOTA3LDcgQEAKIAogCS8qIHN0b3AgaW8gaW4gY2FzZSBpdCBpcyBhbHJlYWR5IGluIHByb2dyZXNzICovCiAJaWYgKGRldi0+c3RyZWFtID09IFNUUkVBTV9PTikgewotCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19TRVRfRk1UOiBpbnRlcnVwdGluZyBzdHJlYW1cbiIpOworCQllbTI4eHhfdmlkZW9kYmcoIlZJRElPQ19TRVRfRk1UOiBpbnRlcnJ1cHRpbmcgc3RyZWFtXG4iKTsKIAkJaWYgKChyZXQgPSBlbTI4eHhfc3RyZWFtX2ludGVycnVwdChkZXYpKSkKIAkJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwppbmRleCA3NTMzZmMyLi42OTI4MzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY/R2ZSA8d3d3LmFsY292ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGPDtHZlIDx3d3cuYWxjb3ZlLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmV3IFRyaWRnZWxsIDx0cmlkZ2VAdmFsaW51eC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAppbmRleCAzMjNkMDA3Li5kNTM1NzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21leWUuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBTdGVsaWFuIFBvcCA8c3RlbGlhbkBwb3BpZXMubmV0PgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY/R2ZSA8d3d3LmFsY292ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGPDtHZlIDx3d3cuYWxjb3ZlLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgQW5kcmV3IFRyaWRnZWxsIDx0cmlkZ2VAdmFsaW51eC5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IGUyMGFhMzYuLmFkMDIzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTE5NiwxMCArMTk2LDEwIEBACiAJcmV0dXJuIGkyY19zZW5kYnVmKHQsIGJ1ZlswXSwgY3QtMSwgYnVmKzEpOwogfQogCi0vKiBHZXQgY291bnQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gSbJDLWRldmljZSBhdCBhZGRyZXNzIGFkciwgc3RvcmUgdGhlbSBpbiBidWYuCisvKiBHZXQgY291bnQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gScKyQy1kZXZpY2UgYXQgYWRkcmVzcyBhZHIsIHN0b3JlIHRoZW0gaW4gYnVmLgogICogU3RhcnQgJiBzdG9wIGhhbmRzaGFraW5nIGlzIGRvbmUgYnkgdGhpcyByb3V0aW5lLCBhY2sgd2lsbCBiZSBzZW50IGFmdGVyIHRoZQogICogbGFzdCBieXRlIHRvIGluaGliaXQgZnVydGhlciBzZW5kaW5nIG9mIGRhdGEuIElmIHVhY2Nlc3MgaXMgJ3RydWUnLCBkYXRhIGlzCi0gKiB3cml0dGVuIHRvIHVzZXItc3BhY2Ugd2l0aCBwdXRfdXNlci4gUmV0dXJucyAtMSBpZiBJskMtZGV2aWNlIGRpZG4ndCBzZW5kCisgKiB3cml0dGVuIHRvIHVzZXItc3BhY2Ugd2l0aCBwdXRfdXNlci4gUmV0dXJucyAtMSBpZiBJwrJDLWRldmljZSBkaWRuJ3Qgc2VuZAogICogYWNrbm93bGVkZ2UsIDAgb3RoZXJ3aXNlCiAgKi8KIHN0YXRpYyBpbnQgaTJjX2dldGRhdGEoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwppbmRleCAxN2YxZTJlLi45NGJiNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwpAQCAtMjkxLDEwICsyOTEsMTAgQEAKIAlyZXR1cm4gaTJjX3NlbmRidWYodCwgYnVmWzBdLCBjdC0xLCBidWYrMSk7CiB9CiAKLS8qIEdldCBjb3VudCBudW1iZXIgb2YgYnl0ZXMgZnJvbSBJskMtZGV2aWNlIGF0IGFkZHJlc3MgYWRyLCBzdG9yZSB0aGVtIGluIGJ1Zi4gU3RhcnQgJiBzdG9wCisvKiBHZXQgY291bnQgbnVtYmVyIG9mIGJ5dGVzIGZyb20gScKyQy1kZXZpY2UgYXQgYWRkcmVzcyBhZHIsIHN0b3JlIHRoZW0gaW4gYnVmLiBTdGFydCAmIHN0b3AKICAqIGhhbmRzaGFraW5nIGlzIGRvbmUgYnkgdGhpcyByb3V0aW5lLCBhY2sgd2lsbCBiZSBzZW50IGFmdGVyIHRoZSBsYXN0IGJ5dGUgdG8gaW5oaWJpdCBmdXJ0aGVyCiAgKiBzZW5kaW5nIG9mIGRhdGEuIElmIHVhY2Nlc3MgaXMgJ3RydWUnLCBkYXRhIGlzIHdyaXR0ZW4gdG8gdXNlci1zcGFjZSB3aXRoIHB1dF91c2VyLgotICogUmV0dXJucyAtMSBpZiBJskMtZGV2aWNlIGRpZG4ndCBzZW5kIGFja25vd2xlZGdlLCAwIG90aGVyd2lzZQorICogUmV0dXJucyAtMSBpZiBJwrJDLWRldmljZSBkaWRuJ3Qgc2VuZCBhY2tub3dsZWRnZSwgMCBvdGhlcndpc2UKICAqLwogCiBzdGF0aWMgaW50IGkyY19nZXRkYXRhKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IGNvdW50LCB1OCAqYnVmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCmluZGV4IDQ5MTUwNWQuLjNlOTNmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKQEAgLTIzOCw4ICsyMzgsOCBAQAogCXVzYl90b19pbnB1dF9pZChkZXYsICZpbnB1dF9kZXYtPmlkKTsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fMCldID0gQklUKEJUTl8wKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fMCldID0gQklUX01BU0soQlROXzApOwogCiAJaW5wdXRfZGV2LT5wcml2YXRlID0gY2FtOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9xdWlja2NhbV9tZXNzZW5nZXIuYwppbmRleCBkZDFhNmQ2Li5kODQ3MjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3F1aWNrY2FtX21lc3Nlbmdlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vcXVpY2tjYW1fbWVzc2VuZ2VyLmMKQEAgLTEwMiw4ICsxMDIsOCBAQAogCXVzYl90b19pbnB1dF9pZChkZXYsICZpbnB1dF9kZXYtPmlkKTsKIAlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7CiAKLQlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSk7Ci0JaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fMCldID0gQklUKEJUTl8wKTsKKwlpbnB1dF9kZXYtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fMCldID0gQklUX01BU0soQlROXzApOwogCiAJaW5wdXRfZGV2LT5wcml2YXRlID0gY2FtOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKaW5kZXggZmY1NTUxMi4uZGIzYzllMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYwpAQCAtOTU1LDcgKzk1NSw3IEBACiAJCXJlcXVlc3RbN10gPSByZWFsU2h1dHRlciA+PiA4OwogCX0KIAotCS8vIFBlciBKb2huIE1hcmt1cyBCavhybmRhbGVuLCBieXRlIGF0IGluZGV4IDggY2F1c2VzIHByb2JsZW1zIGlmIGl0IGlzbid0IDAKKwkvLyBQZXIgSm9obiBNYXJrdXMgQmrDuHJuZGFsZW4sIGJ5dGUgYXQgaW5kZXggOCBjYXVzZXMgcHJvYmxlbXMgaWYgaXQgaXNuJ3QgMAogCXJlcXVlc3RbOF0gPSAwOwogCS8vIGJ5dGVzIDktMTUgZG8gbm90IHNlZW0gdG8gYWZmZWN0IGV4cG9zdXJlIG9yIGltYWdlIHF1YWxpdHkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IDllYWM2NWYuLmRjZjIyYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCVtWSURFT19QQUxFVFRFX1lVVjQyMlBdID0gVjRMMl9QSVhfRk1UX1lVVjQyMlAsCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX3B1cmVfXworc3RhdGljIHVuc2lnbmVkIGludCBfX3B1cmUKIHBhbGV0dGVfdG9fcGl4ZWxmb3JtYXQodW5zaWduZWQgaW50IHBhbGV0dGUpCiB7CiAJaWYgKHBhbGV0dGUgPCBBUlJBWV9TSVpFKHBhbGV0dGUycGl4ZWxmb3JtYXQpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCmluZGV4IGMzNDQwYjIuLjMyMTI0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKQEAgLTM3LDcgKzM3LDcgQEAKICAqIFZpZGVvNGxpbnV4IDEvMiBpbnRlZ3JhdGlvbiBieSBKdXN0aW4gU2Nob2VtYW4KICAqIDxqdXN0aW5Ac3VudGlnZXIuZWUudXAuYWMuemE+CiAgKiAyLjQgUFJPQ0ZTIHN1cHBvcnQgcG9ydGVkIGZyb20gMi40IGtlcm5lbHMgYnkKLSAqICBJ8WFraSBHYXJj7WEgRXR4ZWJhcnJpYSA8Z2FyZXR4ZUBldXNrYWxuZXQubmV0PgorICogIEnDsWFraSBHYXJjw61hIEV0eGViYXJyaWEgPGdhcmV0eGVAZXVza2FsbmV0Lm5ldD4KICAqIE1ha2VmaWxlIGZpeCBieSAiVy4gTWljaGFlbCBQZXR1bGxvIiA8bWlrZUBmbHluLm9yZz4KICAqIDIuNCBkZXZmcyBzdXBwb3J0IHBvcnRlZCBmcm9tIDIuNCBrZXJuZWxzIGJ5CiAgKiAgRGFuIE1lcmlsbGF0IDxkYW5AbWVyaWxsYXQub3JnPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKaW5kZXggMWMxNGZhMi4uNDE5ZTVhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCkBAIC0xMjg1LDcgKzEyODUsNyBAQAogCX0KIAogCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogem9yYW5fb3BlbiglcywgcGlkPVslZF0pLCB1c2VycygtKT0lZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgenItPnVzZXIpOworCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyKTsKIAogCS8qIG5vdywgY3JlYXRlIHRoZSBvcGVuKCktc3BlY2lmaWMgZmlsZV9vcHMgc3RydWN0ICovCiAJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fZmgpLCBHRlBfS0VSTkVMKTsKQEAgLTEzNTgsNyArMTM1OCw3IEBACiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCWRwcmludGsoMSwgS0VSTl9JTkZPICIlczogem9yYW5fY2xvc2UoJXMsIHBpZD1bJWRdKSwgdXNlcnMoKyk9JWRcbiIsCi0JCVpSX0RFVk5BTUUoenIpLCBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIHpyLT51c2VyKTsKKwkJWlJfREVWTkFNRSh6ciksIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlcik7CiAKIAkvKiBrZXJuZWwgbG9ja3MgKGZzL2RldmljZS5jKSwgc28gZG9uJ3QgZG8gdGhhdCBvdXJzZWx2ZXMKIAkgKiAocHJldmVudHMgZGVhZGxvY2tzKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9SRUFETUUgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL1JFQURNRQppbmRleCBhODFmODUxLi45MTFmYzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL1JFQURNRQorKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL1JFQURNRQpAQCAtMzAsMTMgKzMwLDEzIEBACiAJQnVnIGZpeGVzCiAJQ29yZSBjb2RlIGV4dGVuc2lvbnMKIAotQXV2byBI5GtraW5lbiwgVW5pdmVyc2l0eSBvZiBIZWxzaW5raSBGaW5sYW5kCitBdXZvIEjDpGtraW5lbiwgVW5pdmVyc2l0eSBvZiBIZWxzaW5raSBGaW5sYW5kCiAJTEFOIE9TTSBjb2RlCiAJL1Byb2MgaW50ZXJmYWNlIHRvIExBTiBjbGFzcwogCUJ1ZyBmaXhlcwogCUNvcmUgY29kZSBleHRlbnNpb25zCiAKLVRhbmVsaSBW5Gjka2FuZ2FzLCBVbml2ZXJzaXR5IG9mIEhlbHNpbmtpIEZpbmxhbmQKK1RhbmVsaSBWw6Row6RrYW5nYXMsIFVuaXZlcnNpdHkgb2YgSGVsc2lua2kgRmlubGFuZAogCUZpeGVzIHRvIGkyb19jb25maWcKIAogQ1JFRElUUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9leGVjLW9zbS5jCmluZGV4IGNlOGYxYTMuLjZjYmNjMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vZXhlYy1vc20uYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2V4ZWMtb3NtLmMKQEAgLTE1LDggKzE1LDggQEAKICAqCiAgKglGaXhlcy9hZGRpdGlvbnM6CiAgKgkJUGhpbGlwcCBSdW1wZgotICoJCUp1aGEgU2llduRuZW4gPEp1aGEuU2lldmFuZW5AY3MuSGVsc2lua2kuRkk+Ci0gKgkJQXV2byBI5GtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KKyAqCQlKdWhhIFNpZXbDpG5lbiA8SnVoYS5TaWV2YW5lbkBjcy5IZWxzaW5raS5GST4KKyAqCQlBdXZvIEjDpGtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KICAqCQlEZWVwYWsgU2F4ZW5hIDxkZWVwYWtAcGxleGl0eS5uZXQ+CiAgKgkJQm9qaSBUIEthbm5hbnRoYW5hbSA8Ym9qaS50Lmthbm5hbnRoYW5hbUBpbnRlbC5jb20+CiAgKgkJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT46CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19jb25maWcuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCmluZGV4IDg0ZTA0NmUuLmMwZmI3N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2NvbmZpZy5jCkBAIC0xMCwxMiArMTAsMTIgQEAKICAqCQlBZGRlZCBiYXNpYyBpb2N0bCgpIHN1cHBvcnQKICAqCURlZXBhayBTYXhlbmEgKDA2LzA3LzE5OTkpOgogICoJCUFkZGVkIHNvZnR3YXJlIGRvd25sb2FkIGlvY3RsIChzdGlsbCB0ZXN0aW5nKQotICoJQXV2byBI5GtraW5lbiAoMDkvMTAvMTk5OSk6CisgKglBdXZvIEjDpGtraW5lbiAoMDkvMTAvMTk5OSk6CiAgKgkJQ2hhbmdlcyB0byBpMm9fY2ZnX3JlcGx5KCksIGlvY3RsX3Bhcm1zKCkKICAqCQlBZGRlZCBpb2N0X3ZhbGlkYXRlKCkKLSAqCVRhbmVsaSBW5Gjka2FuZ2FzICgwOS8zMC8xOTk5KToKKyAqCVRhbmVsaSBWw6Row6RrYW5nYXMgKDA5LzMwLzE5OTkpOgogICoJCUZpeGVkIGlvY3RsX3N3ZGwoKQotICoJVGFuZWxpIFbkaORrYW5nYXMgKDEwLzA0LzE5OTkpOgorICoJVGFuZWxpIFbDpGjDpGthbmdhcyAoMTAvMDQvMTk5OSk6CiAgKgkJQ2hhbmdlZCBpb2N0bF9zd2RsKCksIGltcGxlbWVudGVkIGlvY3RsX3N3dWwoKSBhbmQgaW9jdGxfc3dkZWwoKQogICoJRGVlcGFrIFNheGVuYSAoMTEvMTgvMTk5OSk6CiAgKgkJQWRkZWQgZXZlbnQgbWFuYWdtZW5ldCBzdXBwb3J0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKaW5kZXggMDY4OTJhYy4uNmZkZDA3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYwpAQCAtMTksOCArMTksOCBAQAogICoKICAqCiAgKglGaXhlcy9hZGRpdGlvbnM6Ci0gKgkJSnVoYSBTaWV25G5lbiAoSnVoYS5TaWV2YW5lbkBjcy5IZWxzaW5raS5GSSksCi0gKgkJQXV2byBI5GtraW5lbiAoQXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GSSkKKyAqCQlKdWhhIFNpZXbDpG5lbiAoSnVoYS5TaWV2YW5lbkBjcy5IZWxzaW5raS5GSSksCisgKgkJQXV2byBIw6Rra2luZW4gKEF1dm8uSGFra2luZW5AY3MuSGVsc2lua2kuRkkpCiAgKgkJVW5pdmVyc2l0eSBvZiBIZWxzaW5raSwgRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlCiAgKgkJCUxBTiBlbnRyaWVzCiAgKgkJTWFya3VzIExpZGVsIDxNYXJrdXMuTGlkZWxAc2hhZG93Y29ubmVjdC5jb20+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwppbmRleCBhMWVjMTZhLi43ODE0YTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKQEAgLTE1LDggKzE1LDggQEAKICAqCiAgKglGaXhlcy9hZGRpdGlvbnM6CiAgKgkJUGhpbGlwcCBSdW1wZgotICoJCUp1aGEgU2llduRuZW4gPEp1aGEuU2lldmFuZW5AY3MuSGVsc2lua2kuRkk+Ci0gKgkJQXV2byBI5GtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KKyAqCQlKdWhhIFNpZXbDpG5lbiA8SnVoYS5TaWV2YW5lbkBjcy5IZWxzaW5raS5GST4KKyAqCQlBdXZvIEjDpGtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KICAqCQlEZWVwYWsgU2F4ZW5hIDxkZWVwYWtAcGxleGl0eS5uZXQ+CiAgKgkJQm9qaSBUIEthbm5hbnRoYW5hbSA8Ym9qaS50Lmthbm5hbnRoYW5hbUBpbnRlbC5jb20+CiAgKgkJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT46CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYwppbmRleCAzNjYxZTZlLi42ODVhODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vcGNpLmMKQEAgLTE1LDggKzE1LDggQEAKICAqCiAgKglGaXhlcy9hZGRpdGlvbnM6CiAgKgkJUGhpbGlwcCBSdW1wZgotICoJCUp1aGEgU2llduRuZW4gPEp1aGEuU2lldmFuZW5AY3MuSGVsc2lua2kuRkk+Ci0gKgkJQXV2byBI5GtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KKyAqCQlKdWhhIFNpZXbDpG5lbiA8SnVoYS5TaWV2YW5lbkBjcy5IZWxzaW5raS5GST4KKyAqCQlBdXZvIEjDpGtraW5lbiA8QXV2by5IYWtraW5lbkBjcy5IZWxzaW5raS5GST4KICAqCQlEZWVwYWsgU2F4ZW5hIDxkZWVwYWtAcGxleGl0eS5uZXQ+CiAgKgkJQm9qaSBUIEthbm5hbnRoYW5hbSA8Ym9qaS50Lmthbm5hbnRoYW5hbUBpbnRlbC5jb20+CiAgKgkJQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT46CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9LY29uZmlnIGIvZHJpdmVycy9tZmQvS2NvbmZpZwppbmRleCBhMjBhNTFlLi4yNTcxNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWZkL0tjb25maWcKQEAgLTEwLDggKzEwLDggQEAKIAkgLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgY29yZSBkcml2ZXIgZm9yIHRoZSBTaWxpY29uIE1vdGlvbiBTTTUwMSBtdWx0aW1lZGlhCiAJICBjb21wYW5pb24gY2hpcC4gVGhpcyBkZXZpY2UgaXMgYSBtdWx0aWZ1bmN0aW9uIGRldmljZSB3aGljaCBtYXkKLQkgIHByb3ZpZGUgbnVtZXJvdXMgaW50ZXJmYWNlcyBpbmNsdWRpbmcgVVNCIGhvc3QgY29udHJvbGxlciBVU0IgZ2FkZ2V0LAotCSAgQXN5bmNyb25vdXMgU2VyaWFsIHBvcnRzLCBBdWRpbyBmdW5jdGlvbnMgYW5kIGEgZHVhbCBkaXNwbGF5IHZpZGVvCisJICBwcm92aWRlIG51bWVyb3VzIGludGVyZmFjZXMgaW5jbHVkaW5nIFVTQiBob3N0IGNvbnRyb2xsZXIsIFVTQiBnYWRnZXQsCisJICBhc3luY2hyb25vdXMgc2VyaWFsIHBvcnRzLCBhdWRpbyBmdW5jdGlvbnMsIGFuZCBhIGR1YWwgZGlzcGxheSB2aWRlbwogCSAgaW50ZXJmYWNlLiBUaGUgZGV2aWNlIG1heSBiZSBjb25uZWN0ZWQgYnkgUENJIG9yIGxvY2FsIGJ1cyB3aXRoCiAJICB2YXJ5aW5nIGZ1bmN0aW9ucyBlbmFibGVkLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IDM0NmM0NGUuLmI1ZTY3YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0xMTEsNiArMTExLDIxIEBACiAKIAkgIElmIHlvdSBoYXZlIGFuIEFDUEktY29tcGF0aWJsZSBBU1VTIGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgogCitjb25maWcgRlVKSVRTVV9MQVBUT1AKKyAgICAgICAgdHJpc3RhdGUgIkZ1aml0c3UgTGFwdG9wIEV4dHJhcyIKKyAgICAgICAgZGVwZW5kcyBvbiBYODYKKyAgICAgICAgZGVwZW5kcyBvbiBBQ1BJCisgICAgICAgIGRlcGVuZHMgb24gQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorICAgICAgICAtLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBsYXB0b3BzIGJ1aWx0IGJ5IEZ1aml0c3U6CisKKwkgICAgKiBQMnh4eC9QNXh4eC9TNnh4eC9TN3h4eCBzZXJpZXMgTGlmZWJvb2tzCisJICAgICogUG9zc2libHkgb3RoZXIgRnVqaXRzdSBsYXB0b3AgbW9kZWxzCisKKwkgIEl0IGFkZHMgc3VwcG9ydCBmb3IgTENEIGJyaWdodG5lc3MgY29udHJvbC4KKworCSAgSWYgeW91IGhhdmUgYSBGdWppdHN1IGxhcHRvcCwgc2F5IFkgb3IgTSBoZXJlLgorCiBjb25maWcgTVNJX0xBUFRPUAogICAgICAgICB0cmlzdGF0ZSAiTVNJIExhcHRvcCBFeHRyYXMiCiAgICAgICAgIGRlcGVuZHMgb24gWDg2CkBAIC0xMzQsNiArMTQ5LDcgQEAKIAl0cmlzdGF0ZSAiU29ueSBMYXB0b3AgRXh0cmFzIgogCWRlcGVuZHMgb24gWDg2ICYmIEFDUEkKIAlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCWRlcGVuZHMgb24gSU5QVVQKIAkgIC0tLWhlbHAtLS0KIAkgIFRoaXMgbWluaS1kcml2ZXIgZHJpdmVzIHRoZSBTTkMgYW5kIFNQSUMgZGV2aWNlcyBwcmVzZW50IGluIHRoZSBBQ1BJCiAJICBCSU9TIG9mIHRoZSBTb255IFZhaW8gbGFwdG9wcy4KQEAgLTE1Niw2ICsxNzIsNyBAQAogCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJc2VsZWN0IEhXTU9OCiAJc2VsZWN0IE5WUkFNCisJZGVwZW5kcyBvbiBJTlBVVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBJQk0gYW5kIExlbm92byBUaGlua1BhZCBsYXB0b3BzLiBJdCBhZGRzCiAJICBzdXBwb3J0IGZvciBGbi1GeCBrZXkgY29tYmluYXRpb25zLCBCbHVldG9vdGggY29udHJvbCwgdmlkZW8KQEAgLTE2Myw3ICsxODAsNyBAQAogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBkcml2ZXIgc2VlIAogCSAgPGZpbGU6RG9jdW1lbnRhdGlvbi90aGlua3BhZC1hY3BpLnR4dD4gYW5kIDxodHRwOi8vaWJtLWFjcGkuc2YubmV0Lz4gLgogCi0JICBUaGlzIGRyaXZlciB3YXMgZm9ybWVseSBrbm93biBhcyBpYm0tYWNwaS4KKwkgIFRoaXMgZHJpdmVyIHdhcyBmb3JtZXJseSBrbm93biBhcyBpYm0tYWNwaS4KIAogCSAgSWYgeW91IGhhdmUgYW4gSUJNIG9yIExlbm92byBUaGlua1BhZCBsYXB0b3AsIHNheSBZIG9yIE0gaGVyZS4KIApAQCAtMTk3LDcgKzIxNCw3IEBACiAJZGVmYXVsdCB5CiAJLS0taGVscC0tLQogCSAgQWxsb3dzIHRoZSB0aGlua3BhZF9hY3BpIGRyaXZlciB0byBoYW5kbGUgcmVtb3ZhYmxlIGJheXMuICBJdCB3aWxsCi0JICBlbGV0cmljYWxseSBkaXNhYmxlIHRoZSBkZXZpY2UgaW4gdGhlIGJheSwgYW5kIGFsc28gZ2VuZXJhdGUKKwkgIGVsZWN0cmljYWxseSBkaXNhYmxlIHRoZSBkZXZpY2UgaW4gdGhlIGJheSwgYW5kIGFsc28gZ2VuZXJhdGUKIAkgIG5vdGlmaWNhdGlvbnMgd2hlbiB0aGUgYmF5IGxldmVyIGlzIGVqZWN0ZWQgb3IgaW5zZXJ0ZWQuCiAKIAkgIElmIHlvdSBhcmUgbm90IHN1cmUsIHNheSBZIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvTWFrZWZpbGUgYi9kcml2ZXJzL21pc2MvTWFrZWZpbGUKaW5kZXggYTI0YzYxNC4uODdmMjY4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWlzYy9NYWtlZmlsZQpAQCAtMTUsNCArMTUsNSBAQAogb2JqLSQoQ09ORklHX1NHSV9JT0M0KQkJKz0gaW9jNC5vCiBvYmotJChDT05GSUdfU09OWV9MQVBUT1ApCSs9IHNvbnktbGFwdG9wLm8KIG9iai0kKENPTkZJR19USElOS1BBRF9BQ1BJKQkrPSB0aGlua3BhZF9hY3BpLm8KK29iai0kKENPTkZJR19GVUpJVFNVX0xBUFRPUCkJKz0gZnVqaXRzdS1sYXB0b3Aubwogb2JqLSQoQ09ORklHX0VFUFJPTV85M0NYNikJKz0gZWVwcm9tXzkzY3g2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9mdWppdHN1LWxhcHRvcC5jIGIvZHJpdmVycy9taXNjL2Z1aml0c3UtbGFwdG9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2NmE2YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWlzYy9mdWppdHN1LWxhcHRvcC5jCkBAIC0wLDAgKzEsMzU4IEBACisvKi0qLWxpbnV4LWMtKi0qLworCisvKgorICBDb3B5cmlnaHQgKEMpIDIwMDcgSm9uYXRoYW4gV29pdGhlIDxqd29pdGhlQHBoeXNpY3MuYWRlbGFpZGUuZWR1LmF1PgorICBCYXNlZCBvbiBlYXJsaWVyIHdvcms6CisgICAgQ29weXJpZ2h0IChDKSAyMDAzIFNoYW5lIFNwZW5jZXIgPHNoYW5lQGJvZ29taXAuY29tPgorICAgIEFkcmlhbiBZZWUgPGJyZXd0LWZ1aml0c3VAYnJld3Qub3JnPgorCisgIFRlbXBsYXRlZCBmcm9tIG1zaS1sYXB0b3AuYyB3aGljaCBpcyBjb3B5cmlnaHQgYnkgaXRzIHJlc3BlY3RpdmUgYXV0aG9ycy4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLyoKKyAqIGZ1aml0c3UtbGFwdG9wLmMgLSBGdWppdHN1IGxhcHRvcCBzdXBwb3J0LCBwcm92aWRpbmcgYWNjZXNzIHRvIGFkZGl0aW9uYWwKKyAqIGZlYXR1cmVzIG1hZGUgYXZhaWxhYmxlIG9uIGEgcmFuZ2Ugb2YgRnVqaXRzdSBsYXB0b3BzIGluY2x1ZGluZyB0aGUKKyAqIFAyeHh4L1A1eHh4L1M2eHh4L1M3eHh4IHNlcmllcy4KKyAqCisgKiBUaGlzIGRyaXZlciBleHBvcnRzIGEgZmV3IGZpbGVzIGluIC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9mdWppdHN1LWxhcHRvcC87CisgKiBvdGhlcnMgbWF5IGJlIGFkZGVkIGF0IGEgbGF0ZXIgZGF0ZS4KKyAqCisgKiAgIGxjZF9sZXZlbCAtIFNjcmVlbiBicmlnaHRuZXNzOiBjb250YWlucyBhIHNpbmdsZSBpbnRlZ2VyIGluIHRoZQorICogICByYW5nZSAwLi43LiAocncpCisgKgorICogSW4gYWRkaXRpb24gdG8gdGhlc2UgcGxhdGZvcm0gZGV2aWNlIGF0dHJpYnV0ZXMgdGhlIGRyaXZlcgorICogcmVnaXN0ZXJzIGl0c2VsZiBpbiB0aGUgTGludXggYmFja2xpZ2h0IGNvbnRyb2wgc3Vic3lzdGVtIGFuZCBpcworICogYXZhaWxhYmxlIHRvIHVzZXJzcGFjZSB1bmRlciAvc3lzL2NsYXNzL2JhY2tsaWdodC9mdWppdHN1LWxhcHRvcC8uCisgKgorICogVGhpcyBkcml2ZXIgaGFzIGJlZW4gdGVzdGVkIG9uIGEgRnVqaXRzdSBMaWZlYm9vayBTNzAyMC4gIEl0IHNob3VsZAorICogd29yayBvbiBtb3N0IFAtc2VyaWVzIGFuZCBTLXNlcmllcyBMaWZlYm9va3MsIGJ1dCBZTU1WLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CisKKyNkZWZpbmUgRlVKSVRTVV9EUklWRVJfVkVSU0lPTiAiMC4zIgorCisjZGVmaW5lIEZVSklUU1VfTENEX05fTEVWRUxTIDgKKworI2RlZmluZSBBQ1BJX0ZVSklUU1VfQ0xBU1MgICAgICAgICAgICAgICJmdWppdHN1IgorI2RlZmluZSBBQ1BJX0ZVSklUU1VfSElEICAgICAgICAgICAgICAgICJGVUowMkIxIgorI2RlZmluZSBBQ1BJX0ZVSklUU1VfRFJJVkVSX05BTUUgICAgICAgICJGdWppdHN1IGxhcHRvcCBGVUowMkIxIEFDUEkgZXh0cmFzIGRyaXZlciIKKyNkZWZpbmUgQUNQSV9GVUpJVFNVX0RFVklDRV9OQU1FICAgICAgICAiRnVqaXRzdSBGVUowMkIxIgorCitzdHJ1Y3QgZnVqaXRzdV90IHsKKwlhY3BpX2hhbmRsZSBhY3BpX2hhbmRsZTsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmxfZGV2aWNlOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBmX2RldmljZTsKKworCXVuc2lnbmVkIGxvbmcgZnVqMDJiMV9zdGF0ZTsKKwl1bnNpZ25lZCBpbnQgYnJpZ2h0bmVzc19jaGFuZ2VkOworCXVuc2lnbmVkIGludCBicmlnaHRuZXNzX2xldmVsOworfTsKKworc3RhdGljIHN0cnVjdCBmdWppdHN1X3QgKmZ1aml0c3U7CisKKy8qIEhhcmR3YXJlIGFjY2VzcyAqLworCitzdGF0aWMgaW50IHNldF9sY2RfbGV2ZWwoaW50IGxldmVsKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCXVuaW9uIGFjcGlfb2JqZWN0IGFyZzAgPSB7IEFDUElfVFlQRV9JTlRFR0VSIH07CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXJnX2xpc3QgPSB7IDEsICZhcmcwIH07CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gTlVMTDsKKworCWlmIChsZXZlbCA8IDAgfHwgbGV2ZWwgPj0gRlVKSVRTVV9MQ0RfTl9MRVZFTFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFmdWppdHN1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShmdWppdHN1LT5hY3BpX2hhbmRsZSwgIlNCTEwiLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiU0JMTCBub3QgcHJlc2VudFxuIikpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlhcmcwLmludGVnZXIudmFsdWUgPSBsZXZlbDsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTlVMTCwgJmFyZ19saXN0LCBOVUxMKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2xjZF9sZXZlbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgc3RhdGUgPSAwOworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCisJLy8gR2V0IHRoZSBCcmlnaHRuZXNzCisJc3RhdHVzID0KKwkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGZ1aml0c3UtPmFjcGlfaGFuZGxlLCAiR0JMTCIsIE5VTEwsICZzdGF0ZSk7CisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlmdWppdHN1LT5mdWowMmIxX3N0YXRlID0gc3RhdGU7CisJZnVqaXRzdS0+YnJpZ2h0bmVzc19sZXZlbCA9IHN0YXRlICYgMHgwZmZmZmZmZjsKKworCWlmIChzdGF0ZSAmIDB4ODAwMDAwMDApCisJCWZ1aml0c3UtPmJyaWdodG5lc3NfY2hhbmdlZCA9IDE7CisJZWxzZQorCQlmdWppdHN1LT5icmlnaHRuZXNzX2NoYW5nZWQgPSAwOworCisJaWYgKHN0YXR1cyA8IDApCisJCXJldHVybiBzdGF0dXM7CisKKwlyZXR1cm4gZnVqaXRzdS0+YnJpZ2h0bmVzc19sZXZlbDsKK30KKworLyogQmFja2xpZ2h0IGRldmljZSBzdHVmZiAqLworCitzdGF0aWMgaW50IGJsX2dldF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiKQoreworCXJldHVybiBnZXRfbGNkX2xldmVsKCk7Cit9CisKK3N0YXRpYyBpbnQgYmxfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYikKK3sKKwlyZXR1cm4gc2V0X2xjZF9sZXZlbChiLT5wcm9wcy5icmlnaHRuZXNzKTsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIGZ1aml0c3VibF9vcHMgPSB7CisJLmdldF9icmlnaHRuZXNzID0gYmxfZ2V0X2JyaWdodG5lc3MsCisJLnVwZGF0ZV9zdGF0dXMgPSBibF91cGRhdGVfc3RhdHVzLAorfTsKKworLyogUGxhdGZvcm0gZGV2aWNlICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbGNkX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisKKwlpbnQgcmV0OworCisJcmV0ID0gZ2V0X2xjZF9sZXZlbCgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIHJldCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2xjZF9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQpCit7CisKKwlpbnQgbGV2ZWwsIHJldDsKKworCWlmIChzc2NhbmYoYnVmLCAiJWkiLCAmbGV2ZWwpICE9IDEKKwkgICAgfHwgKGxldmVsIDwgMCB8fCBsZXZlbCA+PSBGVUpJVFNVX0xDRF9OX0xFVkVMUykpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0ID0gc2V0X2xjZF9sZXZlbChsZXZlbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihsY2RfbGV2ZWwsIDA2NDQsIHNob3dfbGNkX2xldmVsLCBzdG9yZV9sY2RfbGV2ZWwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZnVqaXRzdXBmX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfbGNkX2xldmVsLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZnVqaXRzdXBmX2F0dHJpYnV0ZV9ncm91cCA9IHsKKwkuYXR0cnMgPSBmdWppdHN1cGZfYXR0cmlidXRlcworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZnVqaXRzdXBmX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJmdWppdHN1LWxhcHRvcCIsCisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICB9Cit9OworCisvKiBBQ1BJIGRldmljZSAqLworCitpbnQgYWNwaV9mdWppdHN1X2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKK3sKKwlpbnQgcmVzdWx0ID0gMDsKKwlpbnQgc3RhdGUgPSAwOworCisJQUNQSV9GVU5DVElPTl9UUkFDRSgiYWNwaV9mdWppdHN1X2FkZCIpOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiAtRUlOVkFMOworCisJZnVqaXRzdS0+YWNwaV9oYW5kbGUgPSBkZXZpY2UtPmhhbmRsZTsKKwlzcHJpbnRmKGFjcGlfZGV2aWNlX25hbWUoZGV2aWNlKSwgIiVzIiwgQUNQSV9GVUpJVFNVX0RFVklDRV9OQU1FKTsKKwlzcHJpbnRmKGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksICIlcyIsIEFDUElfRlVKSVRTVV9DTEFTUyk7CisJYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpID0gZnVqaXRzdTsKKworCXJlc3VsdCA9IGFjcGlfYnVzX2dldF9wb3dlcihmdWppdHN1LT5hY3BpX2hhbmRsZSwgJnN0YXRlKTsKKwlpZiAocmVzdWx0KSB7CisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfRVJST1IsCisJCQkJICAiRXJyb3IgcmVhZGluZyBwb3dlciBzdGF0ZVxuIikpOworCQlnb3RvIGVuZDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPIFBSRUZJWCAiJXMgWyVzXSAoJXMpXG4iLAorCSAgICAgICBhY3BpX2RldmljZV9uYW1lKGRldmljZSksIGFjcGlfZGV2aWNlX2JpZChkZXZpY2UpLAorCSAgICAgICAhZGV2aWNlLT5wb3dlci5zdGF0ZSA/ICJvbiIgOiAib2ZmIik7CisKKyAgICAgIGVuZDoKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBhY3BpX2Z1aml0c3VfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSkKK3sKKwlBQ1BJX0ZVTkNUSU9OX1RSQUNFKCJhY3BpX2Z1aml0c3VfcmVtb3ZlIik7CisKKwlpZiAoIWRldmljZSB8fCAhYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlmdWppdHN1LT5hY3BpX2hhbmRsZSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBmdWppdHN1X2RldmljZV9pZHNbXSA9IHsKKwl7QUNQSV9GVUpJVFNVX0hJRCwgMH0sCisJeyIiLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9kcml2ZXIgYWNwaV9mdWppdHN1X2RyaXZlciA9IHsKKwkubmFtZSA9IEFDUElfRlVKSVRTVV9EUklWRVJfTkFNRSwKKwkuY2xhc3MgPSBBQ1BJX0ZVSklUU1VfQ0xBU1MsCisJLmlkcyA9IGZ1aml0c3VfZGV2aWNlX2lkcywKKwkub3BzID0geworCQkuYWRkID0gYWNwaV9mdWppdHN1X2FkZCwKKwkJLnJlbW92ZSA9IGFjcGlfZnVqaXRzdV9yZW1vdmUsCisJCX0sCit9OworCisvKiBJbml0aWFsaXphdGlvbiAqLworCitzdGF0aWMgaW50IF9faW5pdCBmdWppdHN1X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0LCByZXN1bHQ7CisKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmdWppdHN1ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGZ1aml0c3VfdCksIEdGUF9LRVJORUwpOworCWlmICghZnVqaXRzdSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtc2V0KGZ1aml0c3UsIDAsIHNpemVvZihzdHJ1Y3QgZnVqaXRzdV90KSk7CisKKwlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfZnVqaXRzdV9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9hY3BpOworCX0KKworCS8qIFJlZ2lzdGVyIGJhY2tsaWdodCBzdHVmZiAqLworCisJZnVqaXRzdS0+YmxfZGV2aWNlID0KKwkgICAgYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcigiZnVqaXRzdS1sYXB0b3AiLCBOVUxMLCBOVUxMLAorCQkJCSAgICAgICZmdWppdHN1Ymxfb3BzKTsKKwlpZiAoSVNfRVJSKGZ1aml0c3UtPmJsX2RldmljZSkpCisJCXJldHVybiBQVFJfRVJSKGZ1aml0c3UtPmJsX2RldmljZSk7CisKKwlmdWppdHN1LT5ibF9kZXZpY2UtPnByb3BzLm1heF9icmlnaHRuZXNzID0gRlVKSVRTVV9MQ0RfTl9MRVZFTFMgLSAxOworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZnVqaXRzdXBmX2RyaXZlcik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsX2JhY2tsaWdodDsKKworCS8qIFJlZ2lzdGVyIHBsYXRmb3JtIHN0dWZmICovCisKKwlmdWppdHN1LT5wZl9kZXZpY2UgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoImZ1aml0c3UtbGFwdG9wIiwgLTEpOworCWlmICghZnVqaXRzdS0+cGZfZGV2aWNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kcml2ZXI7CisJfQorCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX2FkZChmdWppdHN1LT5wZl9kZXZpY2UpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOworCisJcmV0ID0KKwkgICAgc3lzZnNfY3JlYXRlX2dyb3VwKCZmdWppdHN1LT5wZl9kZXZpY2UtPmRldi5rb2JqLAorCQkJICAgICAgICZmdWppdHN1cGZfYXR0cmlidXRlX2dyb3VwKTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjsKKworCXByaW50ayhLRVJOX0lORk8gImZ1aml0c3UtbGFwdG9wOiBkcml2ZXIgIiBGVUpJVFNVX0RSSVZFUl9WRVJTSU9OCisJICAgICAgICIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOworCisJcmV0dXJuIDA7CisKKyAgICAgIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjoKKworCXBsYXRmb3JtX2RldmljZV9kZWwoZnVqaXRzdS0+cGZfZGV2aWNlKTsKKworICAgICAgZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOgorCisJcGxhdGZvcm1fZGV2aWNlX3B1dChmdWppdHN1LT5wZl9kZXZpY2UpOworCisgICAgICBmYWlsX3BsYXRmb3JtX2RyaXZlcjoKKworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZmdWppdHN1cGZfZHJpdmVyKTsKKworICAgICAgZmFpbF9iYWNrbGlnaHQ6CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZnVqaXRzdS0+YmxfZGV2aWNlKTsKKworICAgICAgZmFpbF9hY3BpOgorCisJa2ZyZWUoZnVqaXRzdSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZnVqaXRzdV9jbGVhbnVwKHZvaWQpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZmdWppdHN1LT5wZl9kZXZpY2UtPmRldi5rb2JqLAorCQkJICAgJmZ1aml0c3VwZl9hdHRyaWJ1dGVfZ3JvdXApOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGZ1aml0c3UtPnBmX2RldmljZSk7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmZ1aml0c3VwZl9kcml2ZXIpOworCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3RlcihmdWppdHN1LT5ibF9kZXZpY2UpOworCisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfZnVqaXRzdV9kcml2ZXIpOworCisJa2ZyZWUoZnVqaXRzdSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJmdWppdHN1LWxhcHRvcDogZHJpdmVyIHVubG9hZGVkLlxuIik7Cit9CisKK21vZHVsZV9pbml0KGZ1aml0c3VfaW5pdCk7Cittb2R1bGVfZXhpdChmdWppdHN1X2NsZWFudXApOworCitNT0RVTEVfQVVUSE9SKCJKb25hdGhhbiBXb2l0aGUiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnVqaXRzdSBsYXB0b3AgZXh0cmFzIHN1cHBvcnQiKTsKK01PRFVMRV9WRVJTSU9OKEZVSklUU1VfRFJJVkVSX1ZFUlNJT04pOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuYyBiL2RyaXZlcnMvbWlzYy9pYm1hc20vcmVtb3RlLmMKaW5kZXggMDU1MGNlMC4uNDc3YmI0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2libWFzbS9yZW1vdGUuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL3JlbW90ZS5jCkBAIC0xNyw3ICsxNyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDQKICAqCi0gKiBBdXRob3JzOiBNYXggQXNi9mNrIDxhbWF4QHVzLmlibS5jb20+CisgKiBBdXRob3JzOiBNYXggQXNiw7ZjayA8YW1heEB1cy5pYm0uY29tPgogICogICAgICAgICAgVmVybm9uIE1hdWVyeSA8dmVybnV4QHVzLmlibS5jb20+CiAgKgogICovCkBAIC0yMjYsOSArMjI2LDkgQEAKIAltb3VzZV9kZXYtPmlkLnByb2R1Y3QgPSBwZGV2LT5kZXZpY2U7CiAJbW91c2VfZGV2LT5pZC52ZXJzaW9uID0gMTsKIAltb3VzZV9kZXYtPmRldi5wYXJlbnQgPSBzcC0+ZGV2OwotCW1vdXNlX2Rldi0+ZXZiaXRbMF0gID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQltb3VzZV9kZXYtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8Ci0JCUJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpOworCW1vdXNlX2Rldi0+ZXZiaXRbMF0gID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJbW91c2VfZGV2LT5rZXliaXRbQklUX1dPUkQoQlROX01PVVNFKV0gPSBCSVRfTUFTSyhCVE5fTEVGVCkgfAorCQlCSVRfTUFTSyhCVE5fUklHSFQpIHwgQklUX01BU0soQlROX01JRERMRSk7CiAJc2V0X2JpdChCVE5fVE9VQ0gsIG1vdXNlX2Rldi0+a2V5Yml0KTsKIAltb3VzZV9kZXYtPm5hbWUgPSAiaWJtYXNtIFJTQSBJIHJlbW90ZSBtb3VzZSI7CiAJaW5wdXRfc2V0X2Fic19wYXJhbXMobW91c2VfZGV2LCBBQlNfWCwgMCwgTU9VU0VfWF9NQVgsIDAsIDApOwpAQCAtMjM5LDcgKzIzOSw3IEBACiAJa2V5YmRfZGV2LT5pZC5wcm9kdWN0ID0gcGRldi0+ZGV2aWNlOwogCWtleWJkX2Rldi0+aWQudmVyc2lvbiA9IDI7CiAJa2V5YmRfZGV2LT5kZXYucGFyZW50ID0gc3AtPmRldjsKLQlrZXliZF9kZXYtPmV2Yml0WzBdICA9IEJJVChFVl9LRVkpOworCWtleWJkX2Rldi0+ZXZiaXRbMF0gID0gQklUX01BU0soRVZfS0VZKTsKIAlrZXliZF9kZXYtPm5hbWUgPSAiaWJtYXNtIFJTQSBJIHJlbW90ZSBrZXlib2FyZCI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgWExBVEVfU0laRTsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvcGhhbnRvbS5jIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwppbmRleCA1MTA4YjdjLi5jZDIyMWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCisrKyBiL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKQEAgLTksNiArOSw3IEBACiAgKiAgWW91IG5lZWQgYW4gdXNlcnNwYWNlIGxpYnJhcnkgdG8gY29vcGVyYXRlIHdpdGggdGhpcyBkcml2ZXIuIEl0IChhbmQgb3RoZXIKICAqICBpbmZvKSBtYXkgYmUgb2J0YWluZWQgaGVyZToKICAqICBodHRwOi8vd3d3LmZpLm11bmkuY3ovfnhzbGFieS9waGFudG9tLmh0bWwKKyAqICBvciBhbHRlcm5hdGl2ZWx5LCB5b3UgbWlnaHQgdXNlIE9wZW5IYXB0aWNzIHByb3ZpZGVkIGJ5IFNlbnNhYmxlLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTI0LDEzICsyNSwxNCBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotI2RlZmluZSBQSEFOVE9NX1ZFUlNJT04JCSJuMC45LjUiCisjZGVmaW5lIFBIQU5UT01fVkVSU0lPTgkJIm4wLjkuNyIKIAogI2RlZmluZSBQSEFOVE9NX01BWF9NSU5PUlMJOAogCiAjZGVmaW5lIFBITl9JUlFDVEwJCTB4NGMgICAgLyogaXJxIGNvbnRyb2wgaW4gY2FkZHIgc3BhY2UgKi8KIAogI2RlZmluZSBQSEJfUlVOTklORwkJMQorI2RlZmluZSBQSEJfTk9UX09ICQkyCiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnBoYW50b21fY2xhc3M7CiBzdGF0aWMgaW50IHBoYW50b21fbWFqb3I7CkBAIC00Nyw3ICs0OSwxMSBAQAogCXN0cnVjdCBjZGV2IGNkZXY7CiAKIAlzdHJ1Y3QgbXV0ZXggb3Blbl9sb2NrOwotCXNwaW5sb2NrX3QgaW9jdGxfbG9jazsKKwlzcGlubG9ja190IHJlZ3NfbG9jazsKKworCS8qIHVzZWQgaW4gTk9UX09IIG1vZGUgKi8KKwlzdHJ1Y3QgcGhtX3JlZ3Mgb3JlZ3M7CisJdTMyIGN0bF9yZWc7CiB9OwogCiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaGFudG9tX2RldmljZXNbUEhBTlRPTV9NQVhfTUlOT1JTXTsKQEAgLTgyLDYgKzg4LDcgQEAKIAlzdHJ1Y3QgcGhtX3JlZ3MgcnM7CiAJc3RydWN0IHBobV9yZWcgcjsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBpOwogCiAJaWYgKF9JT0NfVFlQRShjbWQpICE9IFBIX0lPQ19NQUdJQyB8fApAQCAtOTYsMzIgKzEwMyw0NSBAQAogCQlpZiAoci5yZWcgPiA3KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJc3Bpbl9sb2NrKCZkZXYtPmlvY3RsX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHIucmVnID09IFBITl9DT05UUk9MICYmIChyLnZhbHVlICYgUEhOX0NUTF9JUlEpICYmCiAJCQkJcGhhbnRvbV9zdGF0dXMoZGV2LCBkZXYtPnN0YXR1cyB8IFBIQl9SVU5OSU5HKSl7Ci0JCQlzcGluX3VubG9jaygmZGV2LT5pb2N0bF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cmVnc19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCXByX2RlYnVnKCJwaGFudG9tOiB3cml0aW5nICV4IHRvICV1XG4iLCByLnZhbHVlLCByLnJlZyk7CisKKwkJLyogcHJlc2VydmUgYW1wIGJpdCAoZG9uJ3QgYWxsb3cgdG8gY2hhbmdlIGl0IHdoZW4gaW4gTk9UX09IKSAqLworCQlpZiAoci5yZWcgPT0gUEhOX0NPTlRST0wgJiYgKGRldi0+c3RhdHVzICYgUEhCX05PVF9PSCkpIHsKKwkJCXIudmFsdWUgJj0gflBITl9DVExfQU1QOworCQkJci52YWx1ZSB8PSBkZXYtPmN0bF9yZWcgJiBQSE5fQ1RMX0FNUDsKKwkJCWRldi0+Y3RsX3JlZyA9IHIudmFsdWU7CisJCX0KKwogCQlpb3dyaXRlMzIoci52YWx1ZSwgZGV2LT5pYWRkciArIHIucmVnKTsKIAkJaW9yZWFkMzIoZGV2LT5pYWRkcik7IC8qIFBDSSBwb3N0aW5nICovCiAKIAkJaWYgKHIucmVnID09IFBITl9DT05UUk9MICYmICEoci52YWx1ZSAmIFBITl9DVExfSVJRKSkKIAkJCXBoYW50b21fc3RhdHVzKGRldiwgZGV2LT5zdGF0dXMgJiB+UEhCX1JVTk5JTkcpOwotCQlzcGluX3VubG9jaygmZGV2LT5pb2N0bF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBQSE5fU0VUX1JFR1M6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcnMsIGFyZ3AsIHNpemVvZihycykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkJcHJfZGVidWcoInBoYW50b206IFNSUyAldSByZWdzICV4XG4iLCBycy5jb3VudCwgcnMubWFzayk7Ci0JCXNwaW5fbG9jaygmZGV2LT5pb2N0bF9sb2NrKTsKLQkJZm9yIChpID0gMDsgaSA8IG1pbihycy5jb3VudCwgOFUpOyBpKyspCi0JCQlpZiAoKDEgPDwgaSkgJiBycy5tYXNrKQotCQkJCWlvd3JpdGUzMihycy52YWx1ZXNbaV0sIGRldi0+b2FkZHIgKyBpKTsKLQkJaW9yZWFkMzIoZGV2LT5pYWRkcik7IC8qIFBDSSBwb3N0aW5nICovCi0JCXNwaW5fdW5sb2NrKCZkZXYtPmlvY3RsX2xvY2spOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKKwkJaWYgKGRldi0+c3RhdHVzICYgUEhCX05PVF9PSCkKKwkJCW1lbWNweSgmZGV2LT5vcmVncywgJnJzLCBzaXplb2YocnMpKTsKKwkJZWxzZSB7CisJCQl1MzIgbSA9IG1pbihycy5jb3VudCwgOFUpOworCQkJZm9yIChpID0gMDsgaSA8IG07IGkrKykKKwkJCQlpZiAocnMubWFzayAmIEJJVChpKSkKKwkJCQkJaW93cml0ZTMyKHJzLnZhbHVlc1tpXSwgZGV2LT5vYWRkciArIGkpOworCQkJaW9yZWFkMzIoZGV2LT5pYWRkcik7IC8qIFBDSSBwb3N0aW5nICovCisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBQSE5fR0VUX1JFRzoKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZyLCBhcmdwLCBzaXplb2YocikpKQpAQCAtMTM1LDIwICsxNTUsMzUgQEAKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmciwgc2l6ZW9mKHIpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlicmVhazsKLQljYXNlIFBITl9HRVRfUkVHUzoKKwljYXNlIFBITl9HRVRfUkVHUzogeworCQl1MzIgbTsKKwogCQlpZiAoY29weV9mcm9tX3VzZXIoJnJzLCBhcmdwLCBzaXplb2YocnMpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCisJCW0gPSBtaW4ocnMuY291bnQsIDhVKTsKKwogCQlwcl9kZWJ1ZygicGhhbnRvbTogR1JTICV1IHJlZ3MgJXhcbiIsIHJzLmNvdW50LCBycy5tYXNrKTsKLQkJc3Bpbl9sb2NrKCZkZXYtPmlvY3RsX2xvY2spOwotCQlmb3IgKGkgPSAwOyBpIDwgbWluKHJzLmNvdW50LCA4VSk7IGkrKykKLQkJCWlmICgoMSA8PCBpKSAmIHJzLm1hc2spCisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlZ3NfbG9jaywgZmxhZ3MpOworCQlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQkJaWYgKHJzLm1hc2sgJiBCSVQoaSkpCiAJCQkJcnMudmFsdWVzW2ldID0gaW9yZWFkMzIoZGV2LT5pYWRkciArIGkpOwotCQlzcGluX3VubG9jaygmZGV2LT5pb2N0bF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKIAogCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZycywgc2l6ZW9mKHJzKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CisJfSBjYXNlIFBITl9OT1RfT0g6CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlZ3NfbG9jaywgZmxhZ3MpOworCQlpZiAoZGV2LT5zdGF0dXMgJiBQSEJfUlVOTklORykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJwaGFudG9tOiB5b3UgbmVlZCB0byBzZXQgTk9UX09IICIKKwkJCQkJImJlZm9yZSB5b3Ugc3RhcnQgdGhlIGRldmljZSFcbiIpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZWdzX2xvY2ssIGZsYWdzKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRldi0+c3RhdHVzIHw9IFBIQl9OT1RfT0g7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cmVnc19sb2NrLCBmbGFncyk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU5PVFRZOwogCX0KQEAgLTE3MSw4ICsyMDYsMTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJV0FSTl9PTihkZXYtPnN0YXR1cyAmIFBIQl9OT1RfT0gpOworCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZGV2OwogCisJYXRvbWljX3NldCgmZGV2LT5jb3VudGVyLCAwKTsKIAlkZXYtPm9wZW5lZCsrOwogCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwogCkBAIC0xODcsNiArMjI1LDcgQEAKIAogCWRldi0+b3BlbmVkID0gMDsKIAlwaGFudG9tX3N0YXR1cyhkZXYsIGRldi0+c3RhdHVzICYgflBIQl9SVU5OSU5HKTsKKwlkZXYtPnN0YXR1cyAmPSB+UEhCX05PVF9PSDsKIAogCW11dGV4X3VubG9jaygmZGV2LT5vcGVuX2xvY2spOwogCkBAIC0yMjAsMTIgKzI1OSwzMiBAQAogc3RhdGljIGlycXJldHVybl90IHBoYW50b21faXNyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHBoYW50b21fZGV2aWNlICpkZXYgPSBkYXRhOworCXVuc2lnbmVkIGludCBpOworCXUzMiBjdGw7CiAKLQlpZiAoIShpb3JlYWQzMihkZXYtPmlhZGRyICsgUEhOX0NPTlRST0wpICYgUEhOX0NUTF9JUlEpKQorCXNwaW5fbG9jaygmZGV2LT5yZWdzX2xvY2spOworCWN0bCA9IGlvcmVhZDMyKGRldi0+aWFkZHIgKyBQSE5fQ09OVFJPTCk7CisJaWYgKCEoY3RsICYgUEhOX0NUTF9JUlEpKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnJlZ3NfbG9jayk7CiAJCXJldHVybiBJUlFfTk9ORTsKKwl9CiAKIAlpb3dyaXRlMzIoMCwgZGV2LT5pYWRkcik7CiAJaW93cml0ZTMyKDB4YzAsIGRldi0+aWFkZHIpOworCisJaWYgKGRldi0+c3RhdHVzICYgUEhCX05PVF9PSCkgeworCQlzdHJ1Y3QgcGhtX3JlZ3MgKnIgPSAmZGV2LT5vcmVnczsKKwkJdTMyIG0gPSBtaW4oci0+Y291bnQsIDhVKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorCQkJaWYgKHItPm1hc2sgJiBCSVQoaSkpCisJCQkJaW93cml0ZTMyKHItPnZhbHVlc1tpXSwgZGV2LT5vYWRkciArIGkpOworCisJCWRldi0+Y3RsX3JlZyBePSBQSE5fQ1RMX0FNUDsKKwkJaW93cml0ZTMyKGRldi0+Y3RsX3JlZywgZGV2LT5pYWRkciArIFBITl9DT05UUk9MKTsKKwl9CisJc3Bpbl91bmxvY2soJmRldi0+cmVnc19sb2NrKTsKKwogCWlvcmVhZDMyKGRldi0+aWFkZHIpOyAvKiBQQ0kgcG9zdGluZyAqLwogCiAJYXRvbWljX2luYygmZGV2LT5jb3VudGVyKTsKQEAgLTI5Nyw3ICszNTYsNyBAQAogCX0KIAogCW11dGV4X2luaXQoJnBodC0+b3Blbl9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmcGh0LT5pb2N0bF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcGh0LT5yZWdzX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnBodC0+d2FpdCk7CiAJY2Rldl9pbml0KCZwaHQtPmNkZXYsICZwaGFudG9tX2ZpbGVfb3BzKTsKIAlwaHQtPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKQEAgLTM3OCw2ICs0MzcsOCBAQAogCWlvd3JpdGUzMigwLCBkZXYtPmNhZGRyICsgUEhOX0lSUUNUTCk7CiAJaW9yZWFkMzIoZGV2LT5jYWRkciArIFBITl9JUlFDVEwpOyAvKiBQQ0kgcG9zdGluZyAqLwogCisJc3luY2hyb25pemVfaXJxKHBkZXYtPmlycSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYwppbmRleCBlNzNhNzFmLi5iYjEzODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYworKysgYi9kcml2ZXJzL21pc2Mvc29ueS1sYXB0b3AuYwpAQCAtMTQsNyArMTQsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMjAwNSBOYXJheWFuYW4gUiBTIDxuYXJzQGthZGFtYmEub3JnPgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEFsY/R2ZSA8d3d3LmFsY292ZS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBBbGPDtHZlIDx3d3cuYWxjb3ZlLmNvbT4KICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTWljaGFlbCBBc2hsZXkgPG0uYXNobGV5QHVuc3cuZWR1LmF1PgogICoKQEAgLTI3Nyw3ICsyNzcsNyBAQAogc3RhdGljIERFQ0xBUkVfV09SSyhzb255X2xhcHRvcF9yZWxlYXNlX2tleV93b3JrLAogCQlkb19zb255X2xhcHRvcF9yZWxlYXNlX2tleSk7CiAKLS8qIGZvcndhcmQgZXZlbnQgdG8gdGhlIGlucHV0IHN1YnN5dGVtICovCisvKiBmb3J3YXJkIGV2ZW50IHRvIHRoZSBpbnB1dCBzdWJzeXN0ZW0gKi8KIHN0YXRpYyB2b2lkIHNvbnlfbGFwdG9wX3JlcG9ydF9pbnB1dF9ldmVudCh1OCBldmVudCkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpqb2dfZGV2ID0gc29ueV9sYXB0b3BfaW5wdXQuam9nX2RldjsKQEAgLTQxMSw5ICs0MTEsOSBAQAogCWpvZ19kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSVNBOwogCWpvZ19kZXYtPmlkLnZlbmRvciA9IFBDSV9WRU5ET1JfSURfU09OWTsKIAotCWpvZ19kZXYtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKLQlqb2dfZGV2LT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSA9IEJJVChCVE5fTUlERExFKTsKLQlqb2dfZGV2LT5yZWxiaXRbMF0gPSBCSVQoUkVMX1dIRUVMKTsKKwlqb2dfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCWpvZ19kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSA9IEJJVF9NQVNLKEJUTl9NSURETEUpOworCWpvZ19kZXYtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9XSEVFTCk7CiAKIAllcnJvciA9IGlucHV0X3JlZ2lzdGVyX2RldmljZShqb2dfZGV2KTsKIAlpZiAoZXJyb3IpCkBAIC0xMTczLDcgKzExNzMsOCBAQAogI2RlZmluZSBTT05ZUElfVFlQRTNfT0ZGU0VUCTB4MTIKIAogc3RydWN0IHNvbnlfcGljX2lvcG9ydCB7Ci0Jc3RydWN0IGFjcGlfcmVzb3VyY2VfaW8JaW87CisJc3RydWN0IGFjcGlfcmVzb3VyY2VfaW8JaW8xOworCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lvCWlvMjsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCkBAIC0xNDQzLDExICsxNDQ0LDExIEBACiB7CiAJdTggdjEsIHYyOwogCi0Jd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLm1pbmltdW0gKyA0KSAmIDIsCisJd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsgNCkgJiAyLAogCQkJSVRFUkFUSU9OU19MT05HKTsKLQlvdXRiKGRldiwgc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSArIDQpOwotCXYxID0gaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSArIDQpOwotCXYyID0gaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSk7CisJb3V0YihkZXYsIHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsgNCk7CisJdjEgPSBpbmJfcChzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzEubWluaW11bSArIDQpOworCXYyID0gaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8xLm1pbmltdW0pOwogCWRwcmludGsoInNvbnlfcGljX2NhbGwxOiAweCUuNHhcbiIsICh2MiA8PCA4KSB8IHYxKTsKIAlyZXR1cm4gdjI7CiB9CkBAIC0xNDU2LDEzICsxNDU3LDEzIEBACiB7CiAJdTggdjE7CiAKLQl3YWl0X29uX2NvbW1hbmQoaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSArIDQpICYgMiwKKwl3YWl0X29uX2NvbW1hbmQoaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8xLm1pbmltdW0gKyA0KSAmIDIsCiAJCQlJVEVSQVRJT05TX0xPTkcpOwotCW91dGIoZGV2LCBzcGljX2Rldi5jdXJfaW9wb3J0LT5pby5taW5pbXVtICsgNCk7Ci0Jd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLm1pbmltdW0gKyA0KSAmIDIsCisJb3V0YihkZXYsIHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsgNCk7CisJd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsgNCkgJiAyLAogCQkJSVRFUkFUSU9OU19MT05HKTsKLQlvdXRiKGZuLCBzcGljX2Rldi5jdXJfaW9wb3J0LT5pby5taW5pbXVtKTsKLQl2MSA9IGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLm1pbmltdW0pOworCW91dGIoZm4sIHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtKTsKKwl2MSA9IGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtKTsKIAlkcHJpbnRrKCJzb255X3BpY19jYWxsMjogMHglLjR4XG4iLCB2MSk7CiAJcmV0dXJuIHYxOwogfQpAQCAtMTQ3MSwxMyArMTQ3MiwxMyBAQAogewogCXU4IHYxOwogCi0Jd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLm1pbmltdW0gKyA0KSAmIDIsIElURVJBVElPTlNfTE9ORyk7Ci0Jb3V0YihkZXYsIHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLm1pbmltdW0gKyA0KTsKLQl3YWl0X29uX2NvbW1hbmQoaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSArIDQpICYgMiwgSVRFUkFUSU9OU19MT05HKTsKLQlvdXRiKGZuLCBzcGljX2Rldi5jdXJfaW9wb3J0LT5pby5taW5pbXVtKTsKLQl3YWl0X29uX2NvbW1hbmQoaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSArIDQpICYgMiwgSVRFUkFUSU9OU19MT05HKTsKLQlvdXRiKHYsIHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLm1pbmltdW0pOwotCXYxID0gaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSk7CisJd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsgNCkgJiAyLCBJVEVSQVRJT05TX0xPTkcpOworCW91dGIoZGV2LCBzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzEubWluaW11bSArIDQpOworCXdhaXRfb25fY29tbWFuZChpbmJfcChzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzEubWluaW11bSArIDQpICYgMiwgSVRFUkFUSU9OU19MT05HKTsKKwlvdXRiKGZuLCBzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzEubWluaW11bSk7CisJd2FpdF9vbl9jb21tYW5kKGluYl9wKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtICsgNCkgJiAyLCBJVEVSQVRJT05TX0xPTkcpOworCW91dGIodiwgc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8xLm1pbmltdW0pOworCXYxID0gaW5iX3Aoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8xLm1pbmltdW0pOwogCWRwcmludGsoInNvbnlfcGljX2NhbGwzOiAweCUuNHhcbiIsIHYxKTsKIAlyZXR1cm4gdjE7CiB9CkBAIC0yMDc0LDcgKzIwNzUsMTggQEAKIAogCXN3aXRjaCAocmVzb3VyY2UtPnR5cGUpIHsKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9TVEFSVF9ERVBFTkRFTlQ6CisJCXsKKwkJCS8qIHN0YXJ0IElPIGVudW1lcmF0aW9uICovCisJCQlzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0ICppb3BvcnQgPSBremFsbG9jKHNpemVvZigqaW9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIWlvcG9ydCkKKwkJCQlyZXR1cm4gQUVfRVJST1I7CisKKwkJCWxpc3RfYWRkKCZpb3BvcnQtPmxpc3QsICZkZXYtPmlvcG9ydHMpOworCQkJcmV0dXJuIEFFX09LOworCQl9CisKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9FTkRfREVQRU5ERU5UOgorCQkvKiBlbmQgSU8gZW51bWVyYXRpb24gKi8KIAkJcmV0dXJuIEFFX09LOwogCiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSVJROgpAQCAtMjEwMSw3ICsyMTEzLDcgQEAKIAkJCQlpZiAoIWludGVycnVwdCkKIAkJCQkJcmV0dXJuIEFFX0VSUk9SOwogCi0JCQkJbGlzdF9hZGRfdGFpbCgmaW50ZXJydXB0LT5saXN0LCAmZGV2LT5pbnRlcnJ1cHRzKTsKKwkJCQlsaXN0X2FkZCgmaW50ZXJydXB0LT5saXN0LCAmZGV2LT5pbnRlcnJ1cHRzKTsKIAkJCQlpbnRlcnJ1cHQtPmlycS50cmlnZ2VyaW5nID0gcC0+dHJpZ2dlcmluZzsKIAkJCQlpbnRlcnJ1cHQtPmlycS5wb2xhcml0eSA9IHAtPnBvbGFyaXR5OwogCQkJCWludGVycnVwdC0+aXJxLnNoYXJhYmxlID0gcC0+c2hhcmFibGU7CkBAIC0yMTEzLDE4ICsyMTI1LDI3IEBACiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfSU86CiAJCXsKIAkJCXN0cnVjdCBhY3BpX3Jlc291cmNlX2lvICppbyA9ICZyZXNvdXJjZS0+ZGF0YS5pbzsKLQkJCXN0cnVjdCBzb255X3BpY19pb3BvcnQgKmlvcG9ydCA9IE5VTEw7CisJCQlzdHJ1Y3Qgc29ueV9waWNfaW9wb3J0ICppb3BvcnQgPQorCQkJCWxpc3RfZmlyc3RfZW50cnkoJmRldi0+aW9wb3J0cywgc3RydWN0IHNvbnlfcGljX2lvcG9ydCwgbGlzdCk7CiAJCQlpZiAoIWlvKSB7CiAJCQkJZHByaW50aygiQmxhbmsgSU8gcmVzb3VyY2VcbiIpOwogCQkJCXJldHVybiBBRV9PSzsKIAkJCX0KIAotCQkJaW9wb3J0ID0ga3phbGxvYyhzaXplb2YoKmlvcG9ydCksIEdGUF9LRVJORUwpOwotCQkJaWYgKCFpb3BvcnQpCisJCQlpZiAoIWlvcG9ydC0+aW8xLm1pbmltdW0pIHsKKwkJCQltZW1jcHkoJmlvcG9ydC0+aW8xLCBpbywgc2l6ZW9mKCppbykpOworCQkJCWRwcmludGsoIklPMSBhdCAweCUuNHggKDB4JS4yeClcbiIsIGlvcG9ydC0+aW8xLm1pbmltdW0sCisJCQkJCQlpb3BvcnQtPmlvMS5hZGRyZXNzX2xlbmd0aCk7CisJCQl9CisJCQllbHNlIGlmICghaW9wb3J0LT5pbzIubWluaW11bSkgeworCQkJCW1lbWNweSgmaW9wb3J0LT5pbzIsIGlvLCBzaXplb2YoKmlvKSk7CisJCQkJZHByaW50aygiSU8yIGF0IDB4JS40eCAoMHglLjJ4KVxuIiwgaW9wb3J0LT5pbzIubWluaW11bSwKKwkJCQkJCWlvcG9ydC0+aW8yLmFkZHJlc3NfbGVuZ3RoKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXByaW50ayhLRVJOX0VSUiBEUlZfUEZYICJVbmtub3duIFNQSUMgVHlwZSwgbW9yZSB0aGFuIDIgSU8gUG9ydHNcbiIpOwogCQkJCXJldHVybiBBRV9FUlJPUjsKLQotCQkJbGlzdF9hZGRfdGFpbCgmaW9wb3J0LT5saXN0LCAmZGV2LT5pb3BvcnRzKTsKLQkJCW1lbWNweSgmaW9wb3J0LT5pbywgaW8sIHNpemVvZigqaW8pKTsKKwkJCX0KIAkJCXJldHVybiBBRV9PSzsKIAkJfQogCWRlZmF1bHQ6CkBAIC0yMTk5LDEwICsyMjIwLDIyIEBACiB7CiAJYWNwaV9zdGF0dXMgc3RhdHVzOwogCWludCByZXN1bHQgPSAwOworCS8qIFR5cGUgMSByZXNvdXJjZSBsYXlvdXQgaXM6CisJICogICAgSU8KKwkgKiAgICBJTworCSAqICAgIElSUU5vRmxhZ3MKKwkgKiAgICBFbmQKKwkgKgorCSAqIFR5cGUgMiBhbmQgMyByZXNvdXJjZSBsYXlvdXQgaXM6CisJICogICAgSU8KKwkgKiAgICBJUlFOb0ZsYWdzCisJICogICAgRW5kCisJICovCiAJc3RydWN0IHsKLQkJc3RydWN0IGFjcGlfcmVzb3VyY2UgaW9fcmVzOwotCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSBpcnFfcmVzOwotCQlzdHJ1Y3QgYWNwaV9yZXNvdXJjZSBlbmQ7CisJCXN0cnVjdCBhY3BpX3Jlc291cmNlIHJlczE7CisJCXN0cnVjdCBhY3BpX3Jlc291cmNlIHJlczI7CisJCXN0cnVjdCBhY3BpX3Jlc291cmNlIHJlczM7CisJCXN0cnVjdCBhY3BpX3Jlc291cmNlIHJlczQ7CiAJfSAqcmVzb3VyY2U7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgMCwgTlVMTCB9OwogCkBAIC0yMjE3LDIxICsyMjUwLDQ5IEBACiAJYnVmZmVyLmxlbmd0aCA9IHNpemVvZigqcmVzb3VyY2UpICsgMTsKIAlidWZmZXIucG9pbnRlciA9IHJlc291cmNlOwogCi0JLyogc2V0dXAgaW8gcmVzb3VyY2UgKi8KLQlyZXNvdXJjZS0+aW9fcmVzLnR5cGUgPSBBQ1BJX1JFU09VUkNFX1RZUEVfSU87Ci0JcmVzb3VyY2UtPmlvX3Jlcy5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2UpOwotCW1lbWNweSgmcmVzb3VyY2UtPmlvX3Jlcy5kYXRhLmlvLCAmaW9wb3J0LT5pbywKLQkJCXNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbykpOworCS8qIHNldHVwIFR5cGUgMSByZXNvdXJjZXMgKi8KKwlpZiAoc3BpY19kZXYubW9kZWwgPT0gU09OWVBJX0RFVklDRV9UWVBFMSkgewogCi0JLyogc2V0dXAgaXJxIHJlc291cmNlICovCi0JcmVzb3VyY2UtPmlycV9yZXMudHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9JUlE7Ci0JcmVzb3VyY2UtPmlycV9yZXMubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKLQltZW1jcHkoJnJlc291cmNlLT5pcnFfcmVzLmRhdGEuaXJxLCAmaXJxLT5pcnEsCi0JCQlzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2VfaXJxKSk7Ci0JLyogd2UgcmVxdWVzdGVkIGEgc2hhcmVkIGlycSAqLwotCXJlc291cmNlLT5pcnFfcmVzLmRhdGEuaXJxLnNoYXJhYmxlID0gQUNQSV9TSEFSRUQ7CisJCS8qIHNldHVwIGlvIHJlc291cmNlcyAqLworCQlyZXNvdXJjZS0+cmVzMS50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0lPOworCQlyZXNvdXJjZS0+cmVzMS5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2UpOworCQltZW1jcHkoJnJlc291cmNlLT5yZXMxLmRhdGEuaW8sICZpb3BvcnQtPmlvMSwKKwkJCQlzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2VfaW8pKTsKIAotCXJlc291cmNlLT5lbmQudHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9FTkRfVEFHOworCQlyZXNvdXJjZS0+cmVzMi50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0lPOworCQlyZXNvdXJjZS0+cmVzMi5sZW5ndGggPSBzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2UpOworCQltZW1jcHkoJnJlc291cmNlLT5yZXMyLmRhdGEuaW8sICZpb3BvcnQtPmlvMiwKKwkJCQlzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2VfaW8pKTsKKworCQkvKiBzZXR1cCBpcnEgcmVzb3VyY2UgKi8KKwkJcmVzb3VyY2UtPnJlczMudHlwZSA9IEFDUElfUkVTT1VSQ0VfVFlQRV9JUlE7CisJCXJlc291cmNlLT5yZXMzLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSk7CisJCW1lbWNweSgmcmVzb3VyY2UtPnJlczMuZGF0YS5pcnEsICZpcnEtPmlycSwKKwkJCQlzaXplb2Yoc3RydWN0IGFjcGlfcmVzb3VyY2VfaXJxKSk7CisJCS8qIHdlIHJlcXVlc3RlZCBhIHNoYXJlZCBpcnEgKi8KKwkJcmVzb3VyY2UtPnJlczMuZGF0YS5pcnEuc2hhcmFibGUgPSBBQ1BJX1NIQVJFRDsKKworCQlyZXNvdXJjZS0+cmVzNC50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0VORF9UQUc7CisKKwl9CisJLyogc2V0dXAgVHlwZSAyLzMgcmVzb3VyY2VzICovCisJZWxzZSB7CisJCS8qIHNldHVwIGlvIHJlc291cmNlICovCisJCXJlc291cmNlLT5yZXMxLnR5cGUgPSBBQ1BJX1JFU09VUkNFX1RZUEVfSU87CisJCXJlc291cmNlLT5yZXMxLmxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZSk7CisJCW1lbWNweSgmcmVzb3VyY2UtPnJlczEuZGF0YS5pbywgJmlvcG9ydC0+aW8xLAorCQkJCXNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pbykpOworCisJCS8qIHNldHVwIGlycSByZXNvdXJjZSAqLworCQlyZXNvdXJjZS0+cmVzMi50eXBlID0gQUNQSV9SRVNPVVJDRV9UWVBFX0lSUTsKKwkJcmVzb3VyY2UtPnJlczIubGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBhY3BpX3Jlc291cmNlKTsKKwkJbWVtY3B5KCZyZXNvdXJjZS0+cmVzMi5kYXRhLmlycSwgJmlycS0+aXJxLAorCQkJCXNpemVvZihzdHJ1Y3QgYWNwaV9yZXNvdXJjZV9pcnEpKTsKKwkJLyogd2UgcmVxdWVzdGVkIGEgc2hhcmVkIGlycSAqLworCQlyZXNvdXJjZS0+cmVzMi5kYXRhLmlycS5zaGFyYWJsZSA9IEFDUElfU0hBUkVEOworCisJCXJlc291cmNlLT5yZXMzLnR5cGUgPSBBQ1BJX1JFU09VUkNFX1RZUEVfRU5EX1RBRzsKKwl9CiAKIAkvKiBBdHRlbXB0IHRvIHNldCB0aGUgcmVzb3VyY2UgKi8KIAlkcHJpbnRrKCJFdmFsdWF0aW5nIF9TUlNcbiIpOwpAQCAtMjIzOSw3ICsyMzAwLDcgQEAKIAogCS8qIGNoZWNrIGZvciB0b3RhbCBmYWlsdXJlICovCiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfUEZYICJFcnJvciBldmFsdWF0aW5nIF9TUlMiKTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVl9QRlggIkVycm9yIGV2YWx1YXRpbmcgX1NSU1xuIik7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZW5kOwogCX0KQEAgLTIyNjgsMTEgKzIzMjksMTQgQEAKIAogCXN0cnVjdCBzb255X3BpY19kZXYgKmRldiA9IChzdHJ1Y3Qgc29ueV9waWNfZGV2ICopIGRldl9pZDsKIAotCWV2ID0gaW5iX3AoZGV2LT5jdXJfaW9wb3J0LT5pby5taW5pbXVtKTsKLQlkYXRhX21hc2sgPSBpbmJfcChkZXYtPmN1cl9pb3BvcnQtPmlvLm1pbmltdW0gKyBkZXYtPmV2cG9ydF9vZmZzZXQpOworCWV2ID0gaW5iX3AoZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSk7CisJaWYgKGRldi0+Y3VyX2lvcG9ydC0+aW8yLm1pbmltdW0pCisJCWRhdGFfbWFzayA9IGluYl9wKGRldi0+Y3VyX2lvcG9ydC0+aW8yLm1pbmltdW0pOworCWVsc2UKKwkJZGF0YV9tYXNrID0gaW5iX3AoZGV2LT5jdXJfaW9wb3J0LT5pbzEubWluaW11bSArIGRldi0+ZXZwb3J0X29mZnNldCk7CiAKIAlkcHJpbnRrKCJldmVudCAoWyUuMnhdIFslLjJ4XSkgYXQgcG9ydCAweCUuNHgoKzB4JS4yeClcbiIsCi0JCQlldiwgZGF0YV9tYXNrLCBkZXYtPmN1cl9pb3BvcnQtPmlvLm1pbmltdW0sIGRldi0+ZXZwb3J0X29mZnNldCk7CisJCQlldiwgZGF0YV9tYXNrLCBkZXYtPmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtLCBkZXYtPmV2cG9ydF9vZmZzZXQpOwogCiAJaWYgKGV2ID09IDB4MDAgfHwgZXYgPT0gMHhmZikKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMjMyMyw4ICsyMzg3LDExIEBACiAJfQogCiAJZnJlZV9pcnEoc3BpY19kZXYuY3VyX2lycS0+aXJxLmludGVycnVwdHNbMF0sICZzcGljX2Rldik7Ci0JcmVsZWFzZV9yZWdpb24oc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8ubWluaW11bSwKLQkJCXNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvLmFkZHJlc3NfbGVuZ3RoKTsKKwlyZWxlYXNlX3JlZ2lvbihzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzEubWluaW11bSwKKwkJCXNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5hZGRyZXNzX2xlbmd0aCk7CisJaWYgKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMi5taW5pbXVtKQorCQlyZWxlYXNlX3JlZ2lvbihzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzIubWluaW11bSwKKwkJCQlzcGljX2Rldi5jdXJfaW9wb3J0LT5pbzIuYWRkcmVzc19sZW5ndGgpOwogCiAJc29ueXBpX2NvbXBhdF9leGl0KCk7CiAKQEAgLTIzOTcsMTQgKzI0NjQsMzYgQEAKIAkJZ290byBlcnJfcmVtb3ZlX2lucHV0OwogCiAJLyogcmVxdWVzdCBpbyBwb3J0ICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpbywgJnNwaWNfZGV2LmlvcG9ydHMsIGxpc3QpIHsKLQkJaWYgKHJlcXVlc3RfcmVnaW9uKGlvLT5pby5taW5pbXVtLCBpby0+aW8uYWRkcmVzc19sZW5ndGgsCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGlvLCAmc3BpY19kZXYuaW9wb3J0cywgbGlzdCkgeworCQlpZiAocmVxdWVzdF9yZWdpb24oaW8tPmlvMS5taW5pbXVtLCBpby0+aW8xLmFkZHJlc3NfbGVuZ3RoLAogCQkJCQkiU29ueSBQcm9ncmFtYWJsZSBJL08gRGV2aWNlIikpIHsKLQkJCWRwcmludGsoIkkvTyBwb3J0OiAweCUuNHggKDB4JS40eCkgKyAweCUuMnhcbiIsCi0JCQkJCWlvLT5pby5taW5pbXVtLCBpby0+aW8ubWF4aW11bSwKLQkJCQkJaW8tPmlvLmFkZHJlc3NfbGVuZ3RoKTsKLQkJCXNwaWNfZGV2LmN1cl9pb3BvcnQgPSBpbzsKLQkJCWJyZWFrOworCQkJZHByaW50aygiSS9PIHBvcnQxOiAweCUuNHggKDB4JS40eCkgKyAweCUuMnhcbiIsCisJCQkJCWlvLT5pbzEubWluaW11bSwgaW8tPmlvMS5tYXhpbXVtLAorCQkJCQlpby0+aW8xLmFkZHJlc3NfbGVuZ3RoKTsKKwkJCS8qIFR5cGUgMSBoYXZlIDIgaW9wb3J0cyAqLworCQkJaWYgKGlvLT5pbzIubWluaW11bSkgeworCQkJCWlmIChyZXF1ZXN0X3JlZ2lvbihpby0+aW8yLm1pbmltdW0sCisJCQkJCQlpby0+aW8yLmFkZHJlc3NfbGVuZ3RoLAorCQkJCQkJIlNvbnkgUHJvZ3JhbWFibGUgSS9PIERldmljZSIpKSB7CisJCQkJCWRwcmludGsoIkkvTyBwb3J0MjogMHglLjR4ICgweCUuNHgpICsgMHglLjJ4XG4iLAorCQkJCQkJCWlvLT5pbzIubWluaW11bSwgaW8tPmlvMi5tYXhpbXVtLAorCQkJCQkJCWlvLT5pbzIuYWRkcmVzc19sZW5ndGgpOworCQkJCQlzcGljX2Rldi5jdXJfaW9wb3J0ID0gaW87CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQllbHNlIHsKKwkJCQkJZHByaW50aygiVW5hYmxlIHRvIGdldCBJL08gcG9ydDI6ICIKKwkJCQkJCQkiMHglLjR4ICgweCUuNHgpICsgMHglLjJ4XG4iLAorCQkJCQkJCWlvLT5pbzIubWluaW11bSwgaW8tPmlvMi5tYXhpbXVtLAorCQkJCQkJCWlvLT5pbzIuYWRkcmVzc19sZW5ndGgpOworCQkJCQlyZWxlYXNlX3JlZ2lvbihpby0+aW8xLm1pbmltdW0sCisJCQkJCQkJaW8tPmlvMS5hZGRyZXNzX2xlbmd0aCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJc3BpY19kZXYuY3VyX2lvcG9ydCA9IGlvOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJfQogCWlmICghc3BpY19kZXYuY3VyX2lvcG9ydCkgewpAQCAtMjQxNCw3ICsyNTAzLDcgQEAKIAl9CiAKIAkvKiByZXF1ZXN0IElSUSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaXJxLCAmc3BpY19kZXYuaW50ZXJydXB0cywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShpcnEsICZzcGljX2Rldi5pbnRlcnJ1cHRzLCBsaXN0KSB7CiAJCWlmICghcmVxdWVzdF9pcnEoaXJxLT5pcnEuaW50ZXJydXB0c1swXSwgc29ueV9waWNfaXJxLAogCQkJCQlJUlFGX1NIQVJFRCwgInNvbnktbGFwdG9wIiwgJnNwaWNfZGV2KSkgewogCQkJZHByaW50aygiSVJROiAlZCAtIHRyaWdnZXJpbmc6ICVkIC0gIgpAQCAtMjQ2Miw4ICsyNTUxLDExIEBACiAJZnJlZV9pcnEoc3BpY19kZXYuY3VyX2lycS0+aXJxLmludGVycnVwdHNbMF0sICZzcGljX2Rldik7CiAKIGVycl9yZWxlYXNlX3JlZ2lvbjoKLQlyZWxlYXNlX3JlZ2lvbihzcGljX2Rldi5jdXJfaW9wb3J0LT5pby5taW5pbXVtLAotCQkJc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8uYWRkcmVzc19sZW5ndGgpOworCXJlbGVhc2VfcmVnaW9uKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMS5taW5pbXVtLAorCQkJc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8xLmFkZHJlc3NfbGVuZ3RoKTsKKwlpZiAoc3BpY19kZXYuY3VyX2lvcG9ydC0+aW8yLm1pbmltdW0pCisJCXJlbGVhc2VfcmVnaW9uKHNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMi5taW5pbXVtLAorCQkJCXNwaWNfZGV2LmN1cl9pb3BvcnQtPmlvMi5hZGRyZXNzX2xlbmd0aCk7CiAKIGVycl9yZW1vdmVfY29tcGF0OgogCXNvbnlwaV9jb21wYXRfZXhpdCgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmMKaW5kZXggODFlMDY4Zi4uZTk1MzI3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIAogI2RlZmluZSBJQk1fVkVSU0lPTiAiMC4xNiIKLSNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMTAwMDAKKyNkZWZpbmUgVFBBQ1BJX1NZU0ZTX1ZFUlNJT04gMHgwMjAwMDAKIAogLyoKICAqICBDaGFuZ2Vsb2c6CkBAIC0xMTcsNiArMTE3LDEyIEBACiAKICNkZWZpbmUgX191bnVzZWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpCiAKK3N0YXRpYyBlbnVtIHsKKwlUUEFDUElfTElGRV9JTklUID0gMCwKKwlUUEFDUElfTElGRV9SVU5OSU5HLAorCVRQQUNQSV9MSUZFX0VYSVRJTkcsCit9IHRwYWNwaV9saWZlY3ljbGU7CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTM0Miw2ICszNDgsOSBAQAogewogCXN0cnVjdCBpYm1fc3RydWN0ICppYm0gPSBkYXRhOwogCisJaWYgKHRwYWNwaV9saWZlY3ljbGUgIT0gVFBBQ1BJX0xJRkVfUlVOTklORykKKwkJcmV0dXJuOworCiAJaWYgKCFpYm0gfHwgIWlibS0+YWNwaSB8fCAhaWJtLT5hY3BpLT5ub3RpZnkpCiAJCXJldHVybjsKIApAQCAtNTE3LDggKzUyNiwxMCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0cGFjcGlfcGRldjsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0cGFjcGlfc2Vuc29yc19wZGV2Owogc3RhdGljIHN0cnVjdCBkZXZpY2UgKnRwYWNwaV9od21vbjsKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2ICp0cGFjcGlfaW5wdXRkZXY7CitzdGF0aWMgc3RydWN0IG11dGV4IHRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4OwogCiAKIHN0YXRpYyBpbnQgdHBhY3BpX3Jlc3VtZV9oYW5kbGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCkBAIC01NDMsNiArNTU0LDEyIEBACiAJLnJlc3VtZSA9IHRwYWNwaV9yZXN1bWVfaGFuZGxlciwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRwYWNwaV9od21vbl9wZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gSUJNX0hXTU9OX0RSVlJfTkFNRSwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiB0aGlua3BhZC1hY3BpIGRyaXZlciBhdHRyaWJ1dGVzCkBAIC02OTIsNiArNzA5LDggQEAKIHsKIAljaGFyICplbmRwOwogCisJd2hpbGUgKCpidWYgJiYgaXNzcGFjZSgqYnVmKSkKKwkJYnVmKys7CiAJKnZhbHVlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kcCwgMCk7CiAJd2hpbGUgKCplbmRwICYmIGlzc3BhY2UoKmVuZHApKQogCQllbmRwKys7CkBAIC05ODksNiArMTAwOCw3IEBACiAKIAlpbnQgcmVzLCBpOwogCWludCBzdGF0dXM7CisJaW50IGhrZXl2OwogCiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19JTklULCAiaW5pdGlhbGl6aW5nIGhvdGtleSBzdWJkcml2ZXJcbiIpOwogCkBAIC0xMDE0LDE4ICsxMDM0LDM1IEBACiAJCQlyZXR1cm4gcmVzOwogCiAJCS8qIG1hc2sgbm90IHN1cHBvcnRlZCBvbiA1NzAsIDYwMGUveCwgNzcwZSwgNzcweCwgQTIxZSwgQTJ4bS9wLAotCQkgICBBMzAsIFIzMCwgUjMxLCBUMjAtMjIsIFgyMC0yMSwgWDIyLTI0ICovCi0JCXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrID0KLQkJCWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsIE5VTEwsICJESEtOIiwgInF2Iik7CisJCSAgIEEzMCwgUjMwLCBSMzEsIFQyMC0yMiwgWDIwLTIxLCBYMjItMjQuICBEZXRlY3RlZCBieSBjaGVja2luZworCQkgICBmb3IgSEtFWSBpbnRlcmZhY2UgdmVyc2lvbiAweDEwMCAqLworCQlpZiAoYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgJmhrZXl2LCAiTUhLViIsICJxZCIpKSB7CisJCQlpZiAoKGhrZXl2ID4+IDgpICE9IDEpIHsKKwkJCQlwcmludGsoSUJNX0VSUiAidW5rbm93biB2ZXJzaW9uIG9mIHRoZSAiCisJCQkJICAgICAgICJIS0VZIGludGVyZmFjZTogMHgleFxuIiwgaGtleXYpOworCQkJCXByaW50ayhJQk1fRVJSICJwbGVhc2UgcmVwb3J0IHRoaXMgdG8gJXNcbiIsCisJCQkJICAgICAgIElCTV9NQUlMKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBNSEtWIDB4MTAwIGluIEEzMSwgUjQwLCBSNDBlLAorCQkJCSAqIFQ0eCwgWDMxLCBhbmQgbGF0ZXIKKwkJCQkgKiAqLworCQkJCXRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrID0gMTsKKwkJCX0KKwkJfQogCiAJCXZkYmdfcHJpbnRrKFRQQUNQSV9EQkdfSU5JVCwgImhvdGtleSBtYXNrcyBhcmUgJXNcbiIsCiAJCQlzdHJfc3VwcG9ydGVkKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSk7CiAKIAkJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV9tYXNrKSB7Ci0JCQkvKiBNSEtBIGF2YWlsYWJsZSBpbiBBMzEsIFI0MCwgUjQwZSwgVDR4LCBYMzEsIGFuZCBsYXRlciAqLwogCQkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaG90a2V5X2FsbF9tYXNrLAotCQkJCQkiTUhLQSIsICJxZCIpKQorCQkJCQkiTUhLQSIsICJxZCIpKSB7CisJCQkJcHJpbnRrKElCTV9FUlIKKwkJCQkgICAgICAgIm1pc3NpbmcgTUhLQSBoYW5kbGVyLCAiCisJCQkJICAgICAgICJwbGVhc2UgcmVwb3J0IHRoaXMgdG8gJXNcbiIsCisJCQkJICAgICAgIElCTV9NQUlMKTsKIAkJCQlob3RrZXlfYWxsX21hc2sgPSAweDA4MGNVOyAvKiBGTitGMTIsIEZOK0Y0LCBGTitGMyAqLworCQkJfQogCQl9CiAKIAkJcmVzID0gaG90a2V5X2dldCgmaG90a2V5X29yaWdfc3RhdHVzLCAmaG90a2V5X29yaWdfbWFzayk7CkBAIC0xMTMxLDYgKzExNjgsOCBAQAogCQkJCSAgdW5zaWduZWQgaW50IGtleWNvZGUpCiB7CiAJaWYgKGtleWNvZGUgIT0gS0VZX1JFU0VSVkVEKSB7CisJCW11dGV4X2xvY2soJnRwYWNwaV9pbnB1dGRldl9zZW5kX211dGV4KTsKKwogCQlpbnB1dF9yZXBvcnRfa2V5KHRwYWNwaV9pbnB1dGRldiwga2V5Y29kZSwgMSk7CiAJCWlmIChrZXljb2RlID09IEtFWV9VTktOT1dOKQogCQkJaW5wdXRfZXZlbnQodHBhY3BpX2lucHV0ZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLApAQCAtMTE0Miw2ICsxMTgxLDggQEAKIAkJCWlucHV0X2V2ZW50KHRwYWNwaV9pbnB1dGRldiwgRVZfTVNDLCBNU0NfU0NBTiwKIAkJCQkgICAgc2NhbmNvZGUpOwogCQlpbnB1dF9zeW5jKHRwYWNwaV9pbnB1dGRldik7CisKKwkJbXV0ZXhfdW5sb2NrKCZ0cGFjcGlfaW5wdXRkZXZfc2VuZF9tdXRleCk7CiAJfQogfQogCkBAIC0xMTQ5LDE4ICsxMTkwLDQ3IEBACiB7CiAJaW50IHdsc3c7CiAKLQlpZiAodHBfZmVhdHVyZXMuaG90a2V5X3dsc3cgJiYgIWhvdGtleV9nZXRfd2xzdygmd2xzdykpCisJbXV0ZXhfbG9jaygmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOworCisJaWYgKHRwX2ZlYXR1cmVzLmhvdGtleV93bHN3ICYmICFob3RrZXlfZ2V0X3dsc3coJndsc3cpKSB7CiAJCWlucHV0X3JlcG9ydF9zd2l0Y2godHBhY3BpX2lucHV0ZGV2LAogCQkJCSAgICBTV19SQURJTywgISF3bHN3KTsKKwkJaW5wdXRfc3luYyh0cGFjcGlfaW5wdXRkZXYpOworCX0KKworCW11dGV4X3VubG9jaygmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOwogfQogCiBzdGF0aWMgdm9pZCBob3RrZXlfbm90aWZ5KHN0cnVjdCBpYm1fc3RydWN0ICppYm0sIHUzMiBldmVudCkKIHsKIAl1MzIgaGtleTsKIAl1bnNpZ25lZCBpbnQga2V5Y29kZSwgc2NhbmNvZGU7Ci0JaW50IHNlbmRfYWNwaV9ldiA9IDA7CisJaW50IHNlbmRfYWNwaV9ldjsKKwlpbnQgaWdub3JlX2FjcGlfZXY7CiAKLQlpZiAoZXZlbnQgPT0gMHg4MCAmJiBhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaGtleSwgIk1IS1AiLCAiZCIpKSB7CisJaWYgKGV2ZW50ICE9IDB4ODApIHsKKwkJcHJpbnRrKElCTV9FUlIgInVua25vd24gSEtFWSBub3RpZmljYXRpb24gZXZlbnQgJWRcbiIsIGV2ZW50KTsKKwkJLyogZm9yd2FyZCBpdCB0byB1c2Vyc3BhY2UsIG1heWJlIGl0IGtub3dzIGhvdyB0byBoYW5kbGUgaXQgKi8KKwkJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChpYm0tPmFjcGktPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKKwkJCQkJCWlibS0+YWNwaS0+ZGV2aWNlLT5kZXYuYnVzX2lkLAorCQkJCQkJZXZlbnQsIDApOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKDEpIHsKKwkJaWYgKCFhY3BpX2V2YWxmKGhrZXlfaGFuZGxlLCAmaGtleSwgIk1IS1AiLCAiZCIpKSB7CisJCQlwcmludGsoSUJNX0VSUiAiZmFpbGVkIHRvIHJldHJpZXZlIEhLRVkgZXZlbnRcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGhrZXkgPT0gMCkgeworCQkJLyogcXVldWUgZW1wdHkgKi8KKwkJCXJldHVybjsKKwkJfQorCisJCXNlbmRfYWNwaV9ldiA9IDA7CisJCWlnbm9yZV9hY3BpX2V2ID0gMDsKKwogCQlzd2l0Y2ggKGhrZXkgPj4gMTIpIHsKIAkJY2FzZSAxOgogCQkJLyogMHgxMDAwLTB4MUZGRjoga2V5IHByZXNzZXMgKi8KQEAgLTExODIsOSArMTI1MiwxMSBAQAogCQkJICogZWF0IHVwIGtub3duIExJRCBldmVudHMgKi8KIAkJCWlmIChoa2V5ICE9IDB4NTAwMSAmJiBoa2V5ICE9IDB4NTAwMikgewogCQkJCXByaW50ayhJQk1fRVJSCi0JCQkJCSJ1bmtub3duIExJRC1yZWxhdGVkIGhvdGtleSBldmVudDogMHglMDR4XG4iLAotCQkJCQloa2V5KTsKKwkJCQkgICAgICAgInVua25vd24gTElELXJlbGF0ZWQgSEtFWSBldmVudDogMHglMDR4XG4iLAorCQkJCSAgICAgICBoa2V5KTsKIAkJCQlzZW5kX2FjcGlfZXYgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlpZ25vcmVfYWNwaV9ldiA9IDE7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSA3OgpAQCAtMTIwMiwyMSArMTI3NCwxOCBAQAogCQkJcHJpbnRrKElCTV9OT1RJQ0UgInVuaGFuZGxlZCBIS0VZIGV2ZW50IDB4JTA0eFxuIiwgaGtleSk7CiAJCQlzZW5kX2FjcGlfZXYgPSAxOwogCQl9Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKElCTV9FUlIgInVua25vd24gaG90a2V5IG5vdGlmaWNhdGlvbiBldmVudCAlZFxuIiwgZXZlbnQpOwotCQloa2V5ID0gMDsKLQkJc2VuZF9hY3BpX2V2ID0gMTsKLQl9CiAKLQkvKiBMZWdhY3kgZXZlbnRzICovCi0JaWYgKHNlbmRfYWNwaV9ldiB8fCBob3RrZXlfcmVwb3J0X21vZGUgPCAyKQotCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGlibS0+YWNwaS0+ZGV2aWNlLCBldmVudCwgaGtleSk7CisJCS8qIExlZ2FjeSBldmVudHMgKi8KKwkJaWYgKCFpZ25vcmVfYWNwaV9ldiAmJiAoc2VuZF9hY3BpX2V2IHx8IGhvdGtleV9yZXBvcnRfbW9kZSA8IDIpKSB7CisJCQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGlibS0+YWNwaS0+ZGV2aWNlLCBldmVudCwgaGtleSk7CisJCX0KIAotCS8qIG5ldGxpbmsgZXZlbnRzICovCi0JaWYgKHNlbmRfYWNwaV9ldikgewotCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGlibS0+YWNwaS0+ZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAotCQkJCQkJaWJtLT5hY3BpLT5kZXZpY2UtPmRldi5idXNfaWQsCi0JCQkJCQlldmVudCwgaGtleSk7CisJCS8qIG5ldGxpbmsgZXZlbnRzICovCisJCWlmICghaWdub3JlX2FjcGlfZXYgJiYgc2VuZF9hY3BpX2V2KSB7CisJCQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGlibS0+YWNwaS0+ZGV2aWNlLT5wbnAuZGV2aWNlX2NsYXNzLAorCQkJCQkJCWlibS0+YWNwaS0+ZGV2aWNlLT5kZXYuYnVzX2lkLAorCQkJCQkJCWV2ZW50LCBoa2V5KTsKKwkJfQogCX0KIH0KIApAQCAtMjgxMiw3ICsyODgxLDcgQEAKIAogCXN3aXRjaCh0aGVybWFsX3JlYWRfbW9kZSkgewogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfVFBFQ18xNjoKLQkJcmVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosCisJCXJlcyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmdHBhY3BpX3NlbnNvcnNfcGRldi0+ZGV2LmtvYmosCiAJCQkJJnRoZXJtYWxfdGVtcF9pbnB1dDE2X2dyb3VwKTsKIAkJaWYgKHJlcykKIAkJCXJldHVybiByZXM7CkBAIC0yODIwLDcgKzI4ODksNyBAQAogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfVFBFQ184OgogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfQUNQSV9UTVAwNzoKIAljYXNlIFRQQUNQSV9USEVSTUFMX0FDUElfVVBEVDoKLQkJcmVzID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosCisJCXJlcyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmdHBhY3BpX3NlbnNvcnNfcGRldi0+ZGV2LmtvYmosCiAJCQkJJnRoZXJtYWxfdGVtcF9pbnB1dDhfZ3JvdXApOwogCQlpZiAocmVzKQogCQkJcmV0dXJuIHJlczsKQEAgLTI4MzcsMTMgKzI5MDYsMTMgQEAKIHsKIAlzd2l0Y2godGhlcm1hbF9yZWFkX21vZGUpIHsKIAljYXNlIFRQQUNQSV9USEVSTUFMX1RQRUNfMTY6Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmdHBhY3BpX3BkZXYtPmRldi5rb2JqLAorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnRwYWNwaV9zZW5zb3JzX3BkZXYtPmRldi5rb2JqLAogCQkJCSAgICZ0aGVybWFsX3RlbXBfaW5wdXQxNl9ncm91cCk7CiAJCWJyZWFrOwogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfVFBFQ184OgogCWNhc2UgVFBBQ1BJX1RIRVJNQUxfQUNQSV9UTVAwNzoKIAljYXNlIFRQQUNQSV9USEVSTUFMX0FDUElfVVBEVDoKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmdHBhY3BpX3NlbnNvcnNfcGRldi0+ZGV2LmtvYmosCiAJCQkJICAgJnRoZXJtYWxfdGVtcF9pbnB1dDE2X2dyb3VwKTsKIAkJYnJlYWs7CiAJY2FzZSBUUEFDUElfVEhFUk1BTF9OT05FOgpAQCAtMzYyNiw3ICszNjk1LDcgQEAKIAlfX0FUVFIoZmFuMV9pbnB1dCwgU19JUlVHTywKIAkJZmFuX2ZhbjFfaW5wdXRfc2hvdywgTlVMTCk7CiAKLS8qIHN5c2ZzIGZhbiBmYW5fd2F0Y2hkb2cgKGRyaXZlcikgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogc3lzZnMgZmFuIGZhbl93YXRjaGRvZyAoaHdtb24gZHJpdmVyKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiBzdGF0aWMgc3NpemVfdCBmYW5fZmFuX3dhdGNoZG9nX3Nob3coc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKIAkJCQkgICAgIGNoYXIgKmJ1ZikKIHsKQEAgLTM3NjgsMTAgKzM4MzcsMTAgQEAKIAogCWlmIChmYW5fc3RhdHVzX2FjY2Vzc19tb2RlICE9IFRQQUNQSV9GQU5fTk9ORSB8fAogCSAgICBmYW5fY29udHJvbF9hY2Nlc3NfbW9kZSAhPSBUUEFDUElfRkFOX1dSX05PTkUpIHsKLQkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnRwYWNwaV9wZGV2LT5kZXYua29iaiwKKwkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnRwYWNwaV9zZW5zb3JzX3BkZXYtPmRldi5rb2JqLAogCQkJCQkgJmZhbl9hdHRyX2dyb3VwKTsKIAkJaWYgKCEocmMgPCAwKSkKLQkJCXJjID0gZHJpdmVyX2NyZWF0ZV9maWxlKCZ0cGFjcGlfcGRyaXZlci5kcml2ZXIsCisJCQlyYyA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmdHBhY3BpX2h3bW9uX3Bkcml2ZXIuZHJpdmVyLAogCQkJCQkmZHJpdmVyX2F0dHJfZmFuX3dhdGNoZG9nKTsKIAkJaWYgKHJjIDwgMCkKIAkJCXJldHVybiByYzsKQEAgLTM4NTQsOCArMzkyMyw4IEBACiAJdmRiZ19wcmludGsoVFBBQ1BJX0RCR19FWElULCAiY2FuY2VsbGluZyBhbnkgcGVuZGluZyBmYW4gd2F0Y2hkb2cgdGFza3NcbiIpOwogCiAJLyogRklYTUU6IGNhbiB3ZSByZWFsbHkgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHk/ICovCi0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZ0cGFjcGlfcGRldi0+ZGV2LmtvYmosICZmYW5fYXR0cl9ncm91cCk7Ci0JZHJpdmVyX3JlbW92ZV9maWxlKCZ0cGFjcGlfcGRyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9mYW5fd2F0Y2hkb2cpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmdHBhY3BpX3NlbnNvcnNfcGRldi0+ZGV2LmtvYmosICZmYW5fYXR0cl9ncm91cCk7CisJZHJpdmVyX3JlbW92ZV9maWxlKCZ0cGFjcGlfaHdtb25fcGRyaXZlci5kcml2ZXIsICZkcml2ZXJfYXR0cl9mYW5fd2F0Y2hkb2cpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmZmFuX3dhdGNoZG9nX3Rhc2spOwogCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CkBAIC0zODg4LDYgKzM5NTcsOSBAQAogewogCWludCByYzsKIAorCWlmICh0cGFjcGlfbGlmZWN5Y2xlICE9IFRQQUNQSV9MSUZFX1JVTk5JTkcpCisJCXJldHVybjsKKwogCXByaW50ayhJQk1fTk9USUNFICJmYW4gd2F0Y2hkb2c6IGVuYWJsaW5nIGZhblxuIik7CiAJcmMgPSBmYW5fc2V0X2VuYWJsZSgpOwogCWlmIChyYyA8IDApIHsKQEAgLTM5MDgsNyArMzk4MCw4IEBACiAJaWYgKGZhbl93YXRjaGRvZ19hY3RpdmUpCiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmZhbl93YXRjaGRvZ190YXNrKTsKIAotCWlmIChmYW5fd2F0Y2hkb2dfbWF4aW50ZXJ2YWwgPiAwKSB7CisJaWYgKGZhbl93YXRjaGRvZ19tYXhpbnRlcnZhbCA+IDAgJiYKKwkgICAgdHBhY3BpX2xpZmVjeWNsZSAhPSBUUEFDUElfTElGRV9FWElUSU5HKSB7CiAJCWZhbl93YXRjaGRvZ19hY3RpdmUgPSAxOwogCQlpZiAoIXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZmFuX3dhdGNoZG9nX3Rhc2ssCiAJCQkJbXNlY3NfdG9famlmZmllcyhmYW5fd2F0Y2hkb2dfbWF4aW50ZXJ2YWwKQEAgLTQzMDIsNiArNDM3NSwxOSBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisvKiBzeXNmcyBuYW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3N0YXRpYyBzc2l6ZV90IHRoaW5rcGFkX2FjcGlfcGRldl9uYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIElCTV9OQU1FKTsKK30KKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9hdHRyX3RoaW5rcGFkX2FjcGlfcGRldl9uYW1lID0KKwlfX0FUVFIobmFtZSwgU19JUlVHTywgdGhpbmtwYWRfYWNwaV9wZGV2X25hbWVfc2hvdywgTlVMTCk7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiAvKiAvcHJvYyBzdXBwb3J0ICovCiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2RpcjsKIApAQCAtNDY3NCw2ICs0NzYwLDggQEAKIHsKIAlpbnQgcmV0LCBpOwogCisJdHBhY3BpX2xpZmVjeWNsZSA9IFRQQUNQSV9MSUZFX0lOSVQ7CisKIAkvKiBQYXJhbWV0ZXIgY2hlY2tpbmcgKi8KIAlpZiAoaG90a2V5X3JlcG9ydF9tb2RlID4gMikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzAyLDE5ICs0NzkwLDMxIEBACiAKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRwYWNwaV9wZHJpdmVyKTsKIAlpZiAocmV0KSB7Ci0JCXByaW50ayhJQk1fRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgcGxhdGZvcm0gZHJpdmVyXG4iKTsKKwkJcHJpbnRrKElCTV9FUlIgInVuYWJsZSB0byByZWdpc3RlciBtYWluIHBsYXRmb3JtIGRyaXZlclxuIik7CiAJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJdHBfZmVhdHVyZXMucGxhdGZvcm1fZHJ2X3JlZ2lzdGVyZWQgPSAxOwogCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0cGFjcGlfaHdtb25fcGRyaXZlcik7CisJaWYgKHJldCkgeworCQlwcmludGsoSUJNX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIGh3bW9uIHBsYXRmb3JtIGRyaXZlclxuIik7CisJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJdHBfZmVhdHVyZXMuc2Vuc29yc19wZHJ2X3JlZ2lzdGVyZWQgPSAxOworCiAJcmV0ID0gdHBhY3BpX2NyZWF0ZV9kcml2ZXJfYXR0cmlidXRlcygmdHBhY3BpX3Bkcml2ZXIuZHJpdmVyKTsKKwlpZiAoIXJldCkgeworCQl0cF9mZWF0dXJlcy5wbGF0Zm9ybV9kcnZfYXR0cnNfcmVnaXN0ZXJlZCA9IDE7CisJCXJldCA9IHRwYWNwaV9jcmVhdGVfZHJpdmVyX2F0dHJpYnV0ZXMoJnRwYWNwaV9od21vbl9wZHJpdmVyLmRyaXZlcik7CisJfQogCWlmIChyZXQpIHsKIAkJcHJpbnRrKElCTV9FUlIgInVuYWJsZSB0byBjcmVhdGUgc3lzZnMgZHJpdmVyIGF0dHJpYnV0ZXNcbiIpOwogCQl0aGlua3BhZF9hY3BpX21vZHVsZV9leGl0KCk7CiAJCXJldHVybiByZXQ7CiAJfQotCXRwX2ZlYXR1cmVzLnBsYXRmb3JtX2Rydl9hdHRyc19yZWdpc3RlcmVkID0gMTsKKwl0cF9mZWF0dXJlcy5zZW5zb3JzX3BkcnZfYXR0cnNfcmVnaXN0ZXJlZCA9IDE7CiAKIAogCS8qIERldmljZSBpbml0aWFsaXphdGlvbiAqLwpAQCAtNDcyNyw3ICs0ODI3LDI2IEBACiAJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JdHBhY3BpX2h3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZ0cGFjcGlfcGRldi0+ZGV2KTsKKwl0cGFjcGlfc2Vuc29yc19wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgKKwkJCQkJCQlJQk1fSFdNT05fRFJWUl9OQU1FLAorCQkJCQkJCS0xLCBOVUxMLCAwKTsKKwlpZiAoSVNfRVJSKHRwYWNwaV9zZW5zb3JzX3BkZXYpKSB7CisJCXJldCA9IFBUUl9FUlIodHBhY3BpX3NlbnNvcnNfcGRldik7CisJCXRwYWNwaV9zZW5zb3JzX3BkZXYgPSBOVUxMOworCQlwcmludGsoSUJNX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIGh3bW9uIHBsYXRmb3JtIGRldmljZVxuIik7CisJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ0cGFjcGlfc2Vuc29yc19wZGV2LT5kZXYsCisJCQkJICZkZXZfYXR0cl90aGlua3BhZF9hY3BpX3BkZXZfbmFtZSk7CisJaWYgKHJldCkgeworCQlwcmludGsoSUJNX0VSUgorCQkJInVuYWJsZSB0byBjcmVhdGUgc3lzZnMgaHdtb24gZGV2aWNlIGF0dHJpYnV0ZXNcbiIpOworCQl0aGlua3BhZF9hY3BpX21vZHVsZV9leGl0KCk7CisJCXJldHVybiByZXQ7CisJfQorCXRwX2ZlYXR1cmVzLnNlbnNvcnNfcGRldl9hdHRyc19yZWdpc3RlcmVkID0gMTsKKwl0cGFjcGlfaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnRwYWNwaV9zZW5zb3JzX3BkZXYtPmRldik7CiAJaWYgKElTX0VSUih0cGFjcGlfaHdtb24pKSB7CiAJCXJldCA9IFBUUl9FUlIodHBhY3BpX2h3bW9uKTsKIAkJdHBhY3BpX2h3bW9uID0gTlVMTDsKQEAgLTQ3MzUsNiArNDg1NCw3IEBACiAJCXRoaW5rcGFkX2FjcGlfbW9kdWxlX2V4aXQoKTsKIAkJcmV0dXJuIHJldDsKIAl9CisJbXV0ZXhfaW5pdCgmdHBhY3BpX2lucHV0ZGV2X3NlbmRfbXV0ZXgpOwogCXRwYWNwaV9pbnB1dGRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghdHBhY3BpX2lucHV0ZGV2KSB7CiAJCXByaW50ayhJQk1fRVJSICJ1bmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKQEAgLTQ3NjksNiArNDg4OSw3IEBACiAJCXRwX2ZlYXR1cmVzLmlucHV0X2RldmljZV9yZWdpc3RlcmVkID0gMTsKIAl9CiAKKwl0cGFjcGlfbGlmZWN5Y2xlID0gVFBBQ1BJX0xJRkVfUlVOTklORzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDc3Niw2ICs0ODk3LDggQEAKIHsKIAlzdHJ1Y3QgaWJtX3N0cnVjdCAqaWJtLCAqaXRtcDsKIAorCXRwYWNwaV9saWZlY3ljbGUgPSBUUEFDUElfTElGRV9FWElUSU5HOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoaWJtLCBpdG1wLAogCQkJCQkgJnRwYWNwaV9hbGxfZHJpdmVycywKIAkJCQkJIGFsbF9kcml2ZXJzKSB7CkBAIC00Nzk0LDEyICs0OTE3LDIyIEBACiAJaWYgKHRwYWNwaV9od21vbikKIAkJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIodHBhY3BpX2h3bW9uKTsKIAorCWlmICh0cF9mZWF0dXJlcy5zZW5zb3JzX3BkZXZfYXR0cnNfcmVnaXN0ZXJlZCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZ0cGFjcGlfc2Vuc29yc19wZGV2LT5kZXYsCisJCQkJICAgJmRldl9hdHRyX3RoaW5rcGFkX2FjcGlfcGRldl9uYW1lKTsKKwlpZiAodHBhY3BpX3NlbnNvcnNfcGRldikKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIodHBhY3BpX3NlbnNvcnNfcGRldik7CiAJaWYgKHRwYWNwaV9wZGV2KQogCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih0cGFjcGlfcGRldik7CiAKKwlpZiAodHBfZmVhdHVyZXMuc2Vuc29yc19wZHJ2X2F0dHJzX3JlZ2lzdGVyZWQpCisJCXRwYWNwaV9yZW1vdmVfZHJpdmVyX2F0dHJpYnV0ZXMoJnRwYWNwaV9od21vbl9wZHJpdmVyLmRyaXZlcik7CiAJaWYgKHRwX2ZlYXR1cmVzLnBsYXRmb3JtX2Rydl9hdHRyc19yZWdpc3RlcmVkKQogCQl0cGFjcGlfcmVtb3ZlX2RyaXZlcl9hdHRyaWJ1dGVzKCZ0cGFjcGlfcGRyaXZlci5kcml2ZXIpOwogCisJaWYgKHRwX2ZlYXR1cmVzLnNlbnNvcnNfcGRydl9yZWdpc3RlcmVkKQorCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHBhY3BpX2h3bW9uX3Bkcml2ZXIpOworCiAJaWYgKHRwX2ZlYXR1cmVzLnBsYXRmb3JtX2Rydl9yZWdpc3RlcmVkKQogCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdHBhY3BpX3Bkcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5oIGIvZHJpdmVycy9taXNjL3RoaW5rcGFkX2FjcGkuaAppbmRleCBhY2Q1ODM1Li4zYWJjYzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvdGhpbmtwYWRfYWNwaS5oCisrKyBiL2RyaXZlcnMvbWlzYy90aGlua3BhZF9hY3BpLmgKQEAgLTU4LDEzICs1OCwxNCBAQAogCiAjZGVmaW5lIElCTV9OQU1FICJ0aGlua3BhZCIKICNkZWZpbmUgSUJNX0RFU0MgIlRoaW5rUGFkIEFDUEkgRXh0cmFzIgotI2RlZmluZSBJQk1fRklMRSAidGhpbmtwYWRfYWNwaSIKKyNkZWZpbmUgSUJNX0ZJTEUgSUJNX05BTUUgIl9hY3BpIgogI2RlZmluZSBJQk1fVVJMICJodHRwOi8vaWJtLWFjcGkuc2YubmV0LyIKICNkZWZpbmUgSUJNX01BSUwgImlibS1hY3BpLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCIKIAogI2RlZmluZSBJQk1fUFJPQ19ESVIgImlibSIKICNkZWZpbmUgSUJNX0FDUElfRVZFTlRfUFJFRklYICJpYm0iCiAjZGVmaW5lIElCTV9EUlZSX05BTUUgSUJNX0ZJTEUKKyNkZWZpbmUgSUJNX0hXTU9OX0RSVlJfTkFNRSBJQk1fTkFNRSAiX2h3bW9uIgogCiAjZGVmaW5lIElCTV9MT0cgSUJNX0ZJTEUgIjogIgogI2RlZmluZSBJQk1fRVJSCSAgIEtFUk5fRVJSICAgIElCTV9MT0cKQEAgLTE3MSw2ICsxNzIsNyBAQAogCiAvKiBEZXZpY2UgbW9kZWwgKi8KIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0cGFjcGlfcGRldjsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp0cGFjcGlfc2Vuc29yc19wZGV2Owogc3RhdGljIHN0cnVjdCBkZXZpY2UgKnRwYWNwaV9od21vbjsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHRwYWNwaV9wZHJpdmVyOwogc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKnRwYWNwaV9pbnB1dGRldjsKQEAgLTIzMywyMiArMjM1LDI1IEBACiAKIHN0YXRpYyBzdHJ1Y3QgewogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX0JBWQotCXUxNiBiYXlfc3RhdHVzOjE7Ci0JdTE2IGJheV9lamVjdDoxOwotCXUxNiBiYXlfc3RhdHVzMjoxOwotCXUxNiBiYXlfZWplY3QyOjE7CisJdTMyIGJheV9zdGF0dXM6MTsKKwl1MzIgYmF5X2VqZWN0OjE7CisJdTMyIGJheV9zdGF0dXMyOjE7CisJdTMyIGJheV9lamVjdDI6MTsKICNlbmRpZgotCXUxNiBibHVldG9vdGg6MTsKLQl1MTYgaG90a2V5OjE7Ci0JdTE2IGhvdGtleV9tYXNrOjE7Ci0JdTE2IGhvdGtleV93bHN3OjE7Ci0JdTE2IGxpZ2h0OjE7Ci0JdTE2IGxpZ2h0X3N0YXR1czoxOwotCXUxNiB3YW46MTsKLQl1MTYgZmFuX2N0cmxfc3RhdHVzX3VuZGVmOjE7Ci0JdTE2IGlucHV0X2RldmljZV9yZWdpc3RlcmVkOjE7Ci0JdTE2IHBsYXRmb3JtX2Rydl9yZWdpc3RlcmVkOjE7Ci0JdTE2IHBsYXRmb3JtX2Rydl9hdHRyc19yZWdpc3RlcmVkOjE7CisJdTMyIGJsdWV0b290aDoxOworCXUzMiBob3RrZXk6MTsKKwl1MzIgaG90a2V5X21hc2s6MTsKKwl1MzIgaG90a2V5X3dsc3c6MTsKKwl1MzIgbGlnaHQ6MTsKKwl1MzIgbGlnaHRfc3RhdHVzOjE7CisJdTMyIHdhbjoxOworCXUzMiBmYW5fY3RybF9zdGF0dXNfdW5kZWY6MTsKKwl1MzIgaW5wdXRfZGV2aWNlX3JlZ2lzdGVyZWQ6MTsKKwl1MzIgcGxhdGZvcm1fZHJ2X3JlZ2lzdGVyZWQ6MTsKKwl1MzIgcGxhdGZvcm1fZHJ2X2F0dHJzX3JlZ2lzdGVyZWQ6MTsKKwl1MzIgc2Vuc29yc19wZHJ2X3JlZ2lzdGVyZWQ6MTsKKwl1MzIgc2Vuc29yc19wZHJ2X2F0dHJzX3JlZ2lzdGVyZWQ6MTsKKwl1MzIgc2Vuc29yc19wZGV2X2F0dHJzX3JlZ2lzdGVyZWQ6MTsKIH0gdHBfZmVhdHVyZXM7CiAKIHN0cnVjdCB0aGlua3BhZF9pZF9kYXRhIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAyYTJhMTI1Li5hNTkyZmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC01NCw3ICs1NCw3IEBACiAJaGVscAogCSAgVGhpcyBpcyB0aGUgdG90YWwgd2lkdGggb2YgdGhlIGRhdGEgYnVzIG9mIHRoZSBmbGFzaCBkZXZpY2VzCiAJICBpbiBvY3RldHMuIEZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBhIGRhdGEgYnVzIHdpZHRoIG9mIDMyCi0JICBiaXRzLCB5b3Ugd291bGQgc2V0IHRoZSBidXMgd2lkdGggb2N0ZWN0IHZhbHVlIHRvIDQuIFRoaXMgaXMKKwkgIGJpdHMsIHlvdSB3b3VsZCBzZXQgdGhlIGJ1cyB3aWR0aCBvY3RldCB2YWx1ZSB0byA0LiBUaGlzIGlzCiAJICB1c2VkIGludGVybmFsbHkgYnkgdGhlIENGSSBkcml2ZXJzLgogCSAgSWdub3JlIHRoaXMgb3B0aW9uIGlmIHlvdSB1c2UgcnVuLXRpbWUgcGh5c21hcCBjb25maWd1cmF0aW9uCiAJICAoaS5lLiwgcnVuLXRpbWUgY2FsbGluZyBwaHlzbWFwX2NvbmZpZ3VyZSgpKS4KQEAgLTczLDEyICs3MywxMiBAQAogCWRlcGVuZHMgb24gUE1DX01TUCAmJiBNVERfQ0ZJCiAJc2VsZWN0IE1URF9QQVJUSVRJT05TCiAJaGVscAotCSAgVGhpcyBwcm92aWRlcyBhICdtYXBwaW5nJyBkcml2ZXIgd2hpY2ggc3VwcG9ydCB0aGUgd2F5Ci0gICAgICAgICAgaW4gd2hpY2ggdXNlci1wcm9ncmFtbWFibGUgZmxhc2ggY2hpcHMgYXJlIGNvbm5lY3RlZCBvbiB0aGUKLSAgICAgICAgICBQTUMtU2llcnJhIE1TUCBldmFsL2RlbW8gYm9hcmRzCisJICBUaGlzIHByb3ZpZGVzIGEgJ21hcHBpbmcnIGRyaXZlciB3aGljaCBzdXBwb3J0cyB0aGUgd2F5CisJICBpbiB3aGljaCB1c2VyLXByb2dyYW1tYWJsZSBmbGFzaCBjaGlwcyBhcmUgY29ubmVjdGVkIG9uIHRoZQorCSAgUE1DLVNpZXJyYSBNU1AgZXZhbC9kZW1vIGJvYXJkcy4KIAogY2hvaWNlCi0JcHJvbXB0ICJNYXhpbXVtIG1hcHBhYmxlIG1lbW9yeSBhdmlhbGFibGUgZm9yIGZsYXNoIElPIgorCXByb21wdCAiTWF4aW11bSBtYXBwYWJsZSBtZW1vcnkgYXZhaWxhYmxlIGZvciBmbGFzaCBJTyIKIAlkZXBlbmRzIG9uIE1URF9QTUNfTVNQX0VWTQogCWRlZmF1bHQgTVNQX0ZMQVNIX01BUF9MSU1JVF8zMk0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9zM2MyNDEwLmMgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwppbmRleCBiNzlhOWNmLi4yMWI5MjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL3MzYzI0MTAuYwpAQCAtNjk2LDcgKzY5Niw3IEBACiAKIAlpbmZvLT5jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJuYW5kIik7CiAJaWYgKElTX0VSUihpbmZvLT5jbGspKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgY2xvY2siKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjbG9ja1xuIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZXhpdF9lcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91Ymkvd2wuYyBiL2RyaXZlcnMvbXRkL3ViaS93bC5jCmluZGV4IGE0ZjFiZjMuLjYzMzBjOGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvd2wuYworKysgYi9kcml2ZXJzL210ZC91Ymkvd2wuYwpAQCAtMTMwOSw3ICsxMzA5LDcgQEAKIAlzdHJ1Y3QgdWJpX2RldmljZSAqdWJpID0gdTsKIAogCXViaV9tc2coImJhY2tncm91bmQgdGhyZWFkIFwiJXNcIiBzdGFydGVkLCBQSUQgJWQiLAotCQl1YmktPmJndF9uYW1lLCBjdXJyZW50LT5waWQpOworCQl1YmktPmJndF9uYW1lLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlzZXRfZnJlZXphYmxlKCk7CiAJZm9yICg7OykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggODYyZjQ3Mi4uNmY4ZTdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0xNDkxLDcgKzE0OTEsNyBAQAogCXN0cnVjdCB2b3J0ZXhfcHJpdmF0ZSAqdnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdnAtPmlvYWRkcjsKIAl1bnNpZ25lZCBpbnQgY29uZmlnOwotCWludCBpLCBtaWlfcmVnMSwgbWlpX3JlZzUsIGVycjsKKwlpbnQgaSwgbWlpX3JlZzEsIG1paV9yZWc1LCBlcnIgPSAwOwogCiAJaWYgKFZPUlRFWF9QQ0kodnApKSB7CiAJCXBjaV9zZXRfcG93ZXJfc3RhdGUoVk9SVEVYX1BDSSh2cCksIFBDSV9EMCk7CS8qIEdvIGFjdGl2ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDk3M2I2ODQuLmVlZjZmZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTczLDcgKzczLDcgQEAKIAogCQlKZWFuLUphY3F1ZXMgTWljaGVsIC0gYnVnIGZpeAogCi0JCVRvYmlhcyBSaW5nc3Ry9m0gLSBSeCBpbnRlcnJ1cHQgc3RhdHVzIGNoZWNraW5nIHN1Z2dlc3Rpb24KKwkJVG9iaWFzIFJpbmdzdHLDtm0gLSBSeCBpbnRlcnJ1cHQgc3RhdHVzIGNoZWNraW5nIHN1Z2dlc3Rpb24KIAogCQlBbmRyZXcgTW9ydG9uIC0gQ2xlYXIgYmxvY2tlZCBzaWduYWxzLCBhdm9pZAogCQlidWZmZXIgb3ZlcnJ1biBzZXR0aW5nIGN1cnJlbnQtPmNvbW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA4M2Q1MmM4Li5jZTM0YjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTg1NSw3ICs4NTUsNyBAQAogCWRlcGVuZHMgb24gQkZJTl9NQUMgJiYgQkY1MzcKIAlkZWZhdWx0IHkKIAloZWxwCi0JICBUbyBnZXQgbWF4aW11bSBuZXR3b3JrIHBlcmZvcm1hY2UsIHlvdSBzaG91bGQgdXNlIEwxIG1lbW9yeSBhcyByeC90eCBidWZmZXJzLgorCSAgVG8gZ2V0IG1heGltdW0gbmV0d29yayBwZXJmb3JtYW5jZSwgeW91IHNob3VsZCB1c2UgTDEgbWVtb3J5IGFzIHJ4L3R4IGJ1ZmZlcnMuCiAJICBTYXkgTiBoZXJlIGlmIHlvdSB3YW50IHRvIHJlc2VydmUgTDEgbWVtb3J5IGZvciBvdGhlciB1c2VzLgogCiBjb25maWcgQkZJTl9UWF9ERVNDX05VTQpAQCAtMTI5Myw5ICsxMjkzLDYgQEAKIAkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCiAJICB0aGVuIHNheSBZIGhlcmUuCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KLQogCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCiBjb25maWcgQU1EODExMV9FVEgKQEAgLTEzMTMsNyArMTMxMCw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCBhbWQ4MTExZS4KIAogY29uZmlnIEFNRDgxMTFFX05BUEkKLQlib29sICJFbmFibGUgTkFQSSBzdXBwb3J0IgorCWJvb2wgIlVzZSBSWCBwb2xsaW5nIChOQVBJKSIKIAlkZXBlbmRzIG9uIEFNRDgxMTFfRVRICiAJaGVscAogCSAgTkFQSSBpcyBhIG5ldyBkcml2ZXIgQVBJIGRlc2lnbmVkIHRvIHJlZHVjZSBDUFUgYW5kIGludGVycnVwdCBsb2FkCkBAIC0xMzI0LDkgKzEzMjEsNiBAQAogCSAgZGVwbG95ZWQgb24gcG90ZW50aWFsbHkgdW5mcmllbmRseSBuZXR3b3JrcyAoZS5nLiBpbiBhIGZpcmV3YWxsKSwKIAkgIHRoZW4gc2F5IFkgaGVyZS4KIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dD4gZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uLgotCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBBREFQVEVDX1NUQVJGSVJFCkBAIC0xMzU1LDkgKzEzNDksNiBAQAogCSAgZGVwbG95ZWQgb24gcG90ZW50aWFsbHkgdW5mcmllbmRseSBuZXR3b3JrcyAoZS5nLiBpbiBhIGZpcmV3YWxsKSwKIAkgIHRoZW4gc2F5IFkgaGVyZS4KIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dD4gZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uLgotCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBBQzMyMDAKQEAgLTE0MzEsNyArMTQyMiw3IEBACiAJICBjYWxsZWQgZm9yY2VkZXRoLgogCiBjb25maWcgRk9SQ0VERVRIX05BUEkKLQlib29sICJVc2UgUnggYW5kIFR4IFBvbGxpbmcgKE5BUEkpIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIlVzZSBSeCBQb2xsaW5nIChOQVBJKSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEZPUkNFREVUSCAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKQEAgLTE0NDIsOSArMTQzMyw2IEBACiAJICBkZXBsb3llZCBvbiBwb3RlbnRpYWxseSB1bmZyaWVuZGx5IG5ldHdvcmtzIChlLmcuIGluIGEgZmlyZXdhbGwpLAogCSAgdGhlbiBzYXkgWSBoZXJlLgogCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0PiBmb3IgbW9yZQotCSAgaW5mb3JtYXRpb24uCi0KIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAogY29uZmlnIENTODl4MApAQCAtMTc1Niw5ICsxNzQ0LDYgQEAKIAkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCiAJICB0aGVuIHNheSBZIGhlcmUuCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KLQogY29uZmlnIExBTl9TQUE5NzMwCiAJYm9vbCAiUGhpbGlwcyBTQUE5NzMwIEV0aGVybmV0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORVRfUENJICYmIFBDSSAmJiBNSVBTX0FUTEFTCkBAIC0yMDAzLDkgKzE5ODgsNiBAQAogCSAgZGVwbG95ZWQgb24gcG90ZW50aWFsbHkgdW5mcmllbmRseSBuZXR3b3JrcyAoZS5nLiBpbiBhIGZpcmV3YWxsKSwKIAkgIHRoZW4gc2F5IFkgaGVyZS4KIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dD4gZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uLgotCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBFMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVApAQCAtMjA5OSw3ICsyMDgxLDcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIHI4MTY5LiAgVGhpcyBpcyByZWNvbW1lbmRlZC4KIAogY29uZmlnIFI4MTY5X05BUEkKLQlib29sICJVc2UgUnggYW5kIFR4IFBvbGxpbmcgKE5BUEkpIChFWFBFUklNRU5UQUwpIgorCWJvb2wgIlVzZSBSeCBQb2xsaW5nIChOQVBJKSAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFI4MTY5ICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIE5BUEkgaXMgYSBuZXcgZHJpdmVyIEFQSSBkZXNpZ25lZCB0byByZWR1Y2UgQ1BVIGFuZCBpbnRlcnJ1cHQgbG9hZApAQCAtMjExMCw5ICsyMDkyLDYgQEAKIAkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCiAJICB0aGVuIHNheSBZIGhlcmUuCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KLQogCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCiBjb25maWcgUjgxNjlfVkxBTgpAQCAtMjM2NCw3ICsyMzQzLDcgQEAKIAkgIGFuZCBNUEM4Nnh4IGZhbWlseSBvZiBjaGlwcywgYW5kIHRoZSBGRUMgb24gdGhlIDg1NDAuCiAKIGNvbmZpZyBHRkFSX05BUEkKLQlib29sICJOQVBJIFN1cHBvcnQiCisJYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIgogCWRlcGVuZHMgb24gR0lBTkZBUgogCiBjb25maWcgVUNDX0dFVEgKQEAgLTIzNzYsNyArMjM1NSw3IEBACiAJICB3aGljaCBpcyBhdmFpbGFibGUgb24gc29tZSBGcmVlc2NhbGUgU09Dcy4KIAogY29uZmlnIFVHRVRIX05BUEkKLQlib29sICJOQVBJIFN1cHBvcnQiCisJYm9vbCAiVXNlIFJ4IFBvbGxpbmcgKE5BUEkpIgogCWRlcGVuZHMgb24gVUNDX0dFVEgKIAogY29uZmlnIFVHRVRIX01BR0lDX1BBQ0tFVApAQCAtMjQ5NCw3ICsyNDczLDcgQEAKIAogY29uZmlnIEVIRUEKIAl0cmlzdGF0ZSAiZUhFQSBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSUJNRUJVUworCWRlcGVuZHMgb24gSUJNRUJVUyAmJiBJTkVUCiAJc2VsZWN0IElORVRfTFJPCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElCTSBwU2VyaWVzIGVIRUEgZXRoZXJuZXQgYWRhcHRlci4KQEAgLTI1NTksOSArMjUzOCw2IEBACiAJICBkZXBsb3llZCBvbiBwb3RlbnRpYWxseSB1bmZyaWVuZGx5IG5ldHdvcmtzIChlLmcuIGluIGEgZmlyZXdhbGwpLAogCSAgdGhlbiBzYXkgWSBoZXJlLgogCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL05BUElfSE9XVE8udHh0PiBmb3IgbW9yZQotCSAgaW5mb3JtYXRpb24uCi0KIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAogY29uZmlnIFMySU8KQEAgLTI1ODQsMTQgKzI1NjAsMTEgQEAKIAkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCiAJICB0aGVuIHNheSBZIGhlcmUuCiAKLQkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQ+IGZvciBtb3JlCi0JICBpbmZvcm1hdGlvbi4KLQogCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCiBjb25maWcgTVlSSTEwR0UKIAl0cmlzdGF0ZSAiTXlyaWNvbSBNeXJpLTEwRyBFdGhlcm5ldCBzdXBwb3J0IgotCWRlcGVuZHMgb24gUENJCisJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgQ1JDMzIKIAlzZWxlY3QgSU5FVF9MUk8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCmluZGV4IDFjYzc0ZWMuLmVlYmY1YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwpAQCAtMTExMSw3ICsxMTExLDcgQEAKIAogCXJldHVybiBuZXdfc3RhdHM7CiB9Ci0vKiBUaGlzIGZ1bmN0aW9uIHJlY2FsY3VsYXRlIHRoZSBpbnRlcnVwdCBjb2FsZXNjaW5nICBtb2RlIG9uIGV2ZXJ5IGludGVycnVwdAorLyogVGhpcyBmdW5jdGlvbiByZWNhbGN1bGF0ZSB0aGUgaW50ZXJydXB0IGNvYWxlc2NpbmcgIG1vZGUgb24gZXZlcnkgaW50ZXJydXB0CiBhY2NvcmRpbmcgdG8gdGhlIGRhdGFyYXRlIGFuZCB0aGUgcGFja2V0IHJhdGUuCiAqLwogc3RhdGljIGludCBhbWQ4MTExZV9jYWxjX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMgYi9kcml2ZXJzL25ldC9hcmlhZG5lLmMKaW5kZXggM2ZhM2JjYy4uMTBmM2ExOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJpYWRuZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQW1pZ2EgTGludXgvbTY4ayBBcmlhZG5lIEV0aGVybmV0IERyaXZlcgogICoKLSAqICCpIENvcHlyaWdodCAxOTk1LTIwMDMgYnkgR2VlcnQgVXl0dGVyaG9ldmVuIChnZWVydEBsaW51eC1tNjhrLm9yZykKKyAqICDCqSBDb3B5cmlnaHQgMTk5NS0yMDAzIGJ5IEdlZXJ0IFV5dHRlcmhvZXZlbiAoZ2VlcnRAbGludXgtbTY4ay5vcmcpCiAgKgkJCSAgICAgUGV0ZXIgRGUgU2NocmlqdmVyIChwMkBtaW5kLmJlKQogICoKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyaWFkbmUuaCBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuaAppbmRleCBmNzkxM2Q1Li5iYjYxM2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmlhZG5lLmgKKysrIGIvZHJpdmVycy9uZXQvYXJpYWRuZS5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBBbWlnYSBMaW51eC9tNjhrIEFyaWFkbmUgRXRoZXJuZXQgRHJpdmVyCiAgKgotICogIKkgQ29weXJpZ2h0IDE5OTUgYnkgR2VlcnQgVXl0dGVyaG9ldmVuIChnZWVydEBsaW51eC1tNjhrLm9yZykKKyAqICDCqSBDb3B5cmlnaHQgMTk5NSBieSBHZWVydCBVeXR0ZXJob2V2ZW4gKGdlZXJ0QGxpbnV4LW02OGsub3JnKQogICoJCQlQZXRlciBEZSBTY2hyaWp2ZXIKICAqCQkgICAgICAgKFBldGVyLkRlU2NocmlqdmVyQGxpbnV4LmNjLmt1bGV1dmVuLmFjLmJlKQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwppbmRleCAxODVmOThlLi41MDRiN2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCkBAIC01NDIsNyArNTQyLDcgQEAKIHN0YXRpYyBpbnQgbnVtX2lmczsKIAogLyoKLSAqIFNldHVwIHRoZSBiYXNlIGFkZHJlc3MgYW5kIGludGVydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcworICogU2V0dXAgdGhlIGJhc2UgYWRkcmVzcyBhbmQgaW50ZXJydXB0IG9mIHRoZSBBdTF4eHggZXRoZXJuZXQgbWFjcwogICogYmFzZWQgb24gY3B1IHR5cGUgYW5kIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcyBlbmFibGVkIGluIHN5c19waW5mdW5jCiAgKiByZWdpc3Rlci4gVGhlIGxhc3QgaW50ZXJmYWNlIGlzIGVuYWJsZWQgaWYgU1lTX1BGX05JMiAoYml0IDQpIGlzIDAuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F4ODg3OTYuYyBiL2RyaXZlcnMvbmV0L2F4ODg3OTYuYwppbmRleCA5ZmUwNTE3Li43NDk1YTllIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9heDg4Nzk2LmMKKysrIGIvZHJpdmVycy9uZXQvYXg4ODc5Ni5jCkBAIC05MDAsNyArOTAwLDcgQEAKIAogCQlheC0+bWFwMiA9IGlvcmVtYXAocmVzLT5zdGFydCwgc2l6ZSk7CiAJCWlmIChheC0+bWFwMiA9PSBOVUxMKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgbWFwIHJlc2V0IHJlZ2lzdGVyIik7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgbWFwIHJlc2V0IHJlZ2lzdGVyXG4iKTsKIAkJCXJldCA9IC1FTlhJTzsKIAkJCWdvdG8gZXhpdF9tZW0yOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyLmMgYi9kcml2ZXJzL25ldC9ibngyLmMKaW5kZXggNzhlZDYzMy4uZGE3NjdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Mi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDIuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC01Niw4ICs1Niw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS42LjciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiT2N0b2JlciAxMCwgMjAwNyIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjYuOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJPY3RvYmVyIDE3LCAyMDA3IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtMzA3OSwxNCArMzA3OSwxOCBAQAogCQkJYXV0b25lZyA9IGJwLT5hdXRvbmVnOwogCQkJYWR2ZXJ0aXNpbmcgPSBicC0+YWR2ZXJ0aXNpbmc7CiAKLQkJCWJwLT5hdXRvbmVnID0gQVVUT05FR19TUEVFRDsKLQkJCWJwLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKLQkJCQlBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCB8Ci0JCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKLQkJCQlBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAotCQkJCUFEVkVSVElTRURfQXV0b25lZzsKKwkJCWlmIChicC0+cGh5X3BvcnQgPT0gUE9SVF9UUCkgeworCQkJCWJwLT5hdXRvbmVnID0gQVVUT05FR19TUEVFRDsKKwkJCQlicC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8CisJCQkJCUFEVkVSVElTRURfMTBiYXNlVF9GdWxsIHwKKwkJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKKwkJCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkJQURWRVJUSVNFRF9BdXRvbmVnOworCQkJfQogCi0JCQlibngyX3NldHVwX2NvcHBlcl9waHkoYnApOworCQkJc3Bpbl9sb2NrX2JoKCZicC0+cGh5X2xvY2spOworCQkJYm54Ml9zZXR1cF9waHkoYnAsIGJwLT5waHlfcG9ydCk7CisJCQlzcGluX3VubG9ja19iaCgmYnAtPnBoeV9sb2NrKTsKIAogCQkJYnAtPmF1dG9uZWcgPSBhdXRvbmVnOwogCQkJYnAtPmFkdmVydGlzaW5nID0gYWR2ZXJ0aXNpbmc7CkBAIC0zMDk3LDEwICszMTAxLDE2IEBACiAKIAkJCS8qIEVuYWJsZSBwb3J0IG1vZGUuICovCiAJCQl2YWwgJj0gfkJOWDJfRU1BQ19NT0RFX1BPUlQ7Ci0JCQl2YWwgfD0gQk5YMl9FTUFDX01PREVfUE9SVF9NSUkgfAotCQkJICAgICAgIEJOWDJfRU1BQ19NT0RFX01QS1RfUkNWRCB8CisJCQl2YWwgfD0gQk5YMl9FTUFDX01PREVfTVBLVF9SQ1ZEIHwKIAkJCSAgICAgICBCTlgyX0VNQUNfTU9ERV9BQ1BJX1JDVkQgfAogCQkJICAgICAgIEJOWDJfRU1BQ19NT0RFX01QS1Q7CisJCQlpZiAoYnAtPnBoeV9wb3J0ID09IFBPUlRfVFApCisJCQkJdmFsIHw9IEJOWDJfRU1BQ19NT0RFX1BPUlRfTUlJOworCQkJZWxzZSB7CisJCQkJdmFsIHw9IEJOWDJfRU1BQ19NT0RFX1BPUlRfR01JSTsKKwkJCQlpZiAoYnAtPmxpbmVfc3BlZWQgPT0gU1BFRURfMjUwMCkKKwkJCQkJdmFsIHw9IEJOWDJfRU1BQ19NT0RFXzI1R19NT0RFOworCQkJfQogCiAJCQlSRUdfV1IoYnAsIEJOWDJfRU1BQ19NT0RFLCB2YWwpOwogCkBAIC02NDI4LDcgKzY0MzgsNyBAQAogCS8qIGVuYWJsZSBkZXZpY2UgKGluY2wuIFBDSSBQTSB3YWtldXApLCBhbmQgYnVzLW1hc3RlcmluZyAqLwogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Ml9mdzIuaCBiL2RyaXZlcnMvbmV0L2JueDJfZncyLmgKaW5kZXggNWJkNTJiZS4uNGIxMjliNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54Ml9mdzIuaAorKysgYi9kcml2ZXJzL25ldC9ibngyX2Z3Mi5oCkBAIC0xNSwzMjQ4ICsxNSwzMjcwIEBACiAgKi8KIAogc3RhdGljIHU4IGJueDJfQ09NX2IwOUZ3VGV4dFtdID0gewotLyoJMHgxZiwgMHg4YiwgMHgwOCwgMHgwMCwgMHgwZSwgMHgzNCwgMHhlNywgMHg0NSwgMHgwMCwgMHgwMywgKi8KLQkJCQkJCQkJICAgIDB4ZGMsIDB4NWIsCi0JMHg2ZCwgMHg3MCwgMHg1YywgMHhkNSwgMHg3OSwgMHg3ZSwgMHhlZiwgMHhkOSwgMHhiYiwgMHhmMiwgMHg1YSwgMHg5MiwKLQkweGU1LCAweDZiLCAweDc5LCAweDIzLCAweDE2LCAweDRiLCAweGMwLCAweGFlLCAweDc1LCAweDZkLCAweDY5LCAweGIwLAotCTB4NDMsIDB4MTYsIDB4YTEsIDB4ODAsIDB4OWEsIDB4ZDksIDB4YzAsIDB4YjIsIDB4MmIsIDB4MzMsIDB4OWUsIDB4MGMsCi0JMHg2OSwgMHg2NCwgMHg1MCwgMHg4MCwgMHhiNiwgMHg0YywgMHg0NiwgMHhlYywgMHgxYSwgMHg5YSwgMHg0ZSwgMHg4NywKLQkweGQ2LCAweGE2LCAweDZlLCAweDliLCAweGM5LCAweDM0LCAweDc4LCAweDQ3LCAweDFmLCAweDhkLCAweGE3LCAweDE1LAotCTB4YmEsIDB4MDYsIDB4MWIsIDB4ZDksIDB4ZDMsIDB4ZDAsIDB4YTAsIDB4NmEsIDB4NzEsIDB4ZjEsIDB4OGYsIDB4OGQsCi0JMHhhZiwgMHhmOSwgMHg0OCwgMHhhYSwgMHg0YywgMHg0ZCwgMHhhNSwgMHgxOCwgMHg0OCwgMHg2OSwgMHhhNywgMHg0ZCwKLQkweGZiLCAweGEzLCAweDllLCAweGExLCAweDVmLCAweDg0LCAweDMyLCAweGZkLCAweGMxLCAweDc0LCAweGRhLCAweDRlLAotCTB4M2EsIDB4MjQsIDB4NTMsIDB4MDgsIDB4ODQsIDB4ZWQsIDB4ZjMsIDB4OWMsIDB4N2IsIDB4ZWUsIDB4ZWEsIDB4NmEsCi0JMHgyNSwgMHg3ZiwgMHhmMSwgMHg5MSwgMHgxZiwgMHhkNSwgMHhjYywgMHhmYSwgMHhkZSwgMHhmMywgMHhmZCwgMHg5ZSwKLQkweGY3LCAweGJjLCAweGVmLCAweGYzLCAweDdlLCAweGRjLCAweGUzLCAweDRmLCAweDhhLCAweGI0LCAweDhhLCAweGY5LAotCTB4ZGIsIDB4ODAsIDB4NWYsIDB4ZmEsIDB4YzEsIDB4ZGYsIDB4MmMsIDB4NWYsIDB4MzcsIDB4NzgsIDB4ZGQsIDB4MGQsCi0JMHg3OCwgMHhiZCwgMHg0MSwgMHhjNSwgMHhlYywgMHgxOCwgMHhlYiwgMHhmOSwgMHg0ZiwgMHgxMiwgMHhiZiwgMHgwMSwKLQkweGYzLCAweGJlLCAweGQ2LCAweDlmLCAweDgzLCAweGRmLCAweDliLCAweDY4LCAweDFjLCAweGZiLCAweDBmLCAweDExLAotCTB4ZWIsIDB4M2MsIDB4N2QsIDB4YTIsIDB4N2YsIDB4ZjUsIDB4ZmEsIDB4ODUsIDB4ZGIsIDB4MTUsIDB4NjksIDB4YjksCi0JMHg0MCwgMHg3YiwgMHgyYywgMHg1OCwgMHg1MiwgMHhkMywgMHhjYywgMHg5ZiwgMHgyNCwgMHg1NCwgMHg2ZSwgMHhlYywKLQkweGUxLCAweDgyLCAweDJiLCAweDg5LCAweDU4LCAweDZlLCAweGY3LCAweGMxLCAweGIyLCAweDJiLCAweDkyLCAweGFmLAotCTB4ZWQsIDB4NDgsIDB4MTcsIDB4ZTUsIDB4NjcsIDB4ZjUsIDB4NGEsIDB4ZDIsIDB4MTYsIDB4ZDYsIDB4NWYsIDB4OTUsCi0JMHg3YiwgMHhlZiwgMHhjOSwgMHgxNywgMHg2ZSwgMHhjYSwgMHhmYywgMHg2OCwgMHgyZSwgMHgyNiwgMHgwOSwgMHgyNywKLQkweGY3LCAweGJjLCAweDM4LCAweGRiLCAweDI1LCAweGQxLCAweDgzLCAweDMxLCAweDRmLCAweGY0LCAweGU1LCAweDJkLAotCTB4ZTksIDB4MDgsIDB4ZTcsIDB4N2EsIDB4YjMsIDB4ZmUsIDB4NDIsIDB4OWYsIDB4NTQsIDB4YjYsIDB4ZTQsIDB4MTIsCi0JMHhhMiwgMHg3MiwgMHhkYiwgMHg1ZSwgMHgyZCwgMHhjNCwgMHg5YywgMHhiMSwgMHg1OCwgMHhjZSwgMHg5MSwgMHg0NSwKLQkweDVmLCAweDQ2LCAweGVlLCAweDlmLCAweDk2LCAweDQ0LCAweDIyLCAweGY3LCAweGU1LCAweGM0LCAweGJhLCAweDZkLAotCTB4OTIsIDB4YjAsIDB4NzMsIDB4NGIsIDB4MGYsIDB4ZmYsIDB4YmUsIDB4N2IsIDB4YjAsIDB4YWUsIDB4NWMsIDB4YjcsCi0JMHg3ZiwgMHg1ZSwgMHhkYSwgMHg4NywgMHg0ZSwgMHgwYywgMHhhMiwgMHhiZCwgMHg5NiwgMHhlOSwgMHgxNywgMHhiOSwKLQkweDQ5LCAweDk0LCAweDViLCAweDY5LCAweDhmLCAweGI5LCAweDA5LCAweDI5LCAweGY4LCAweGFlLCAweDE0LCAweDdkLAotCTB4OTEsIDB4YmYsIDB4YWMsIDB4NTksIDB4NzIsIDB4YzIsIDB4ZWQsIDB4OTIsIDB4ZjksIDB4OWQsIDB4ZWYsIDB4ZDUsCi0JMHhmMywgMHhhMCwgMHhlNSwgMHhmYiwgMHhlZSwgMHhkMiwgMHhjMywgMHg5MywgMHgyZSwgMHhlOSwgMHgzZCwgMHg5MCwKLQkweDA4LCAweGU4LCAweGRkLCAweGJiLCAweGFlLCAweGVjLCAweGRhLCAweDMyLCAweDVlLCAweDYzLCAweGRkLCAweGE4LAotCTB4NjIsIDB4NWQsIDB4M2MsIDB4OTcsIDB4NjgsIDB4M2QsIDB4ZTEsIDB4YjYsIDB4OWIsIDB4YmEsIDB4NTcsIDB4NmYsCi0JMHgyOSwgMHg2MCwgMHhiZSwgMHg4OSwgMHgxYSwgMHhmYiwgMHhlNiwgMHhhZiwgMHgyZiwgMHhiYiwgMHg0OSwgMHg1MywKLQkweGJmLCAweDcwLCAweDYzLCAweGMxLCAweDRkLCAweGExLCAweGJlLCAweGM3LCAweGI0LCAweDhkLCAweDNkLCAweDU4LAotCTB4NzYsIDB4NWQsIDB4ZDMsIDB4ZjYsIDB4NzYsIDB4YWMsIDB4ZTAsIDB4ZjYsIDB4OWIsIDB4ZmEsIDB4ZjcsIDB4NmUsCi0JMHgyZSwgMHhiYiwgMHgzYiwgMHg0ZCwgMHg3ZCwgMHgwZiwgMHhlNiwgMHhjYSwgMHg5YSwgMHhmYSwgMHg4NSwgMHg3YiwKLQkweGNhLCAweGVlLCAweGEwLCAweGE5LCAweGRmLCAweDdkLCAweDczLCAweGMxLCAweDFkLCAweDMyLCAweGY1LCAweDg5LAotCTB4YTEsIDB4YjIsIDB4OWIsIDB4NDMsIDB4ZmQsIDB4OTcsIDB4MTMsIDB4NmEsIDB4OWIsIDB4MjMsIDB4NTMsIDB4YjUsCi0JMHgzNCwgMHg3ZSwgMHg3OSwgMHhiNCwgMHgwZCwgMHhhMywgMHg2ZSwgMHgzNywgMHg3ZSwgMHhiNywgMHhlMywgMHhmNywKLQkweGM4LCAweDQ2LCAweGU5LCAweDE4LCAweGMxLCAweGYzLCAweGJmLCAweGJhLCAweDAzLCAweGRlLCAweDgxLCAweDQ3LAotCTB4NWUsIDB4NDIsIDB4NWUsIDB4OGYsIDB4YTUsIDB4ZTQsIDB4ODUsIDB4YmUsIDB4ZDcsIDB4YzEsIDB4NDMsIDB4NDcsCi0JMHg0ZSwgMHhmYiwgMHg2MiwgMHg4ZCwgMHhmNCwgMHhhNSwgMHhjMCwgMHhiYiwgMHhhNCwgMHgzYywgMHhlMywgMHhiNywKLQkweDQ5LCAweGVjLCAweGIxLCAweDE4LCAweDc4LCAweGYzLCAweGNiLCAweDUyLCAweDRhLCAweDI2LCAweDY0LCAweGQzLAotCTB4YWMsIDB4MjUsIDB4NWIsIDB4MDcsIDB4MTIsIDB4OTIsIDB4NzcsIDB4YjgsIDB4MzYsIDB4NGUsIDB4N2IsIDB4MjYsCi0JMHgyOSwgMHhiMSwgMHhkOSwgMHhmYywgMHg2NiwgMHgyNSwgMHhkYiwgMHg5YywgMHhhMiwgMHg1NCwgMHhjMCwgMHhiYiwKLQkweDU3LCAweDI5LCAweDk3LCAweDY4LCAweDRiLCAweDRiLCAweDcxLCAweGZhLCAweDVhLCAweDE5LCAweDczLCAweDQ4LAotCTB4ZDcsIDB4MWYsIDB4NWMsIDB4MTUsIDB4YWMsIDB4OTUsIDB4YjAsIDB4MGEsIDB4YzcsIDB4NDYsIDB4NjUsIDB4Y2EsCi0JMHg2YiwgMHhiNywgMHg4YSwgMHhjNywgMHg2ZSwgMHg5NiwgMHg0MiwgMHg1NiwgMHg5MiwgMHgxOCwgMHg5NywgMHgyYSwKLQkweGExLCAweGE1LCAweDVhLCAweDFiLCAweDk1LCAweDQ5LCAweDRmLCAweGFjLCAweDgyLCAweDQ3LCAweDdlLCAweDc2LAotCTB4YTEsIDB4YmQsIDB4NDMsIDB4ZjcsIDB4NDUsIDB4NWQsIDB4NGYsIDB4NGMsIDB4Y2YsIDB4OWQsIDB4NDAsIDB4YmQsCi0JMHg4MywgMHhmYSwgMHg0ZSwgMHg2YiwgMHg1OCwgMHhjZiwgMHhhMSwgMHhlYiwgMHhkMywgMHgxMywgMHhkMiwgMHgyZSwKLQkweDRmLCAweGQ1LCAweDkyLCAweGE2LCAweDZmLCAweGJkLCAweDVlLCAweGM4LCAweDNhLCAweGU4LCAweDM3LCAweDJhLAotCTB4MTMsIDB4NWUsIDB4NTIsIDB4YzYsIDB4ZjAsIDB4MWMsIDB4ZjcsIDB4YjgsIDB4N2UsIDB4MGEsIDB4MzIsIDB4NzUsCi0JMHhkZCwgMHhjMSwgMHhkMiwgMHg1MSwgMHgzZCwgMHg1ZiwgMHgzYSwgMHg5NiwgMHhlMywgMHg3YywgMHgzZCwgMHhlOCwKLQkweGY3LCAweDEyLCAweGU4LCAweGIyLCAweGM0LCAweGQ2LCAweDY3LCAweDk5LCAweDk3LCAweGQyLCAweGI0LCAweDA1LAotCTB4NzksIDB4YzMsIDB4NTMsIDB4ZjMsIDB4NzUsIDB4MTgsIDB4ZjQsIDB4ZGIsIDB4ZTIsIDB4MGUsIDB4NTgsIDB4NTIsCi0JMHhjNiwgMHg1OSwgMHg1NSwgMHgxYywgMHg5NCwgMHg2YiwgMHgwYiwgMHhhYSwgMHhlMCwgMHhhZCwgMHg5MywgMHhhMiwKLQkweDlkLCAweDk2LCAweGQ4LCAweDBjLCAweDY1LCAweDY5LCAweDRjLCAweDI2LCAweDMwLCAweDQ2LCAweGI5LCAweGVjLAotCTB4ZjMsIDB4MGUsIDB4ZjYsIDB4M2QsIDB4YTYsIDB4Y2YsIDB4YTEsIDB4MjUsIDB4NTcsIDB4NTEsIDB4NDUsIDB4YmYsCi0JMHg0YiwgMHhkNCwgMHhlYywgMHhiZCwgMHhmMiwgMHhkMiwgMHhiNCwgMHgzOCwgMHgzOCwgMHhjNywgMHg3YSwgMHhjMSwKLQkweDlkLCAweDU0LCAweDg1LCAweGE3LCAweDZkLCAweDg5LCAweGNmLCAweDU4LCAweDMyLCAweGU5LCAweDY2LCAweGEwLAotCTB4MDEsIDB4ODcsIDB4ZDQsIDB4MmUsIDB4N2YsIDB4MDEsIDB4ZmQsIDB4MzgsIDB4MGUsIDB4ZmQsIDB4NmEsIDB4MGEsCi0JMHg3YywgMHhlNSwgMHhmYiwgMHgwZSwgMHg0NywgMHg2OSwgMHg3OSwgMHg2NiwgMHgxZiwgMHg5YywgMHgwMSwgMHhmNiwKLQkweGYxLCAweDhjLCAweDg3LCAweDMzLCAweGQxLCAweDY3LCAweDk0LCAweGM2LCAweDE5LCAweDg5LCAweDM1LCAweGRjLAotCTB4MDcsIDB4OTksIDB4M2EsIDB4NmEsIDB4NGIsIDB4MjksIDB4OGIsIDB4N2QsIDB4YTEsIDB4NzcsIDB4MjksIDB4YmIsCi0JMHg0YywgMHhkNywgMHhjNCwgMHg3NCwgMHgzMywgMHg1ZCwgMHgxYywgMHg0NywgMHhiYSwgMHgwMiwgMHg5YSwgMHhjNiwKLQkweDhmLCAweDkyLCAweGJlLCAweDY1LCAweDdhLCAweGE2LCAweGE2LCAweDQzLCAweDFhLCAweGI5LCAweDFlLCAweDY5LAotCTB4MGIsIDB4ZTksIDB4ZTIsIDB4MzgsIDB4ZDIsIDB4YjUsIDB4OTksIDB4NjcsIDB4Y2QsIDB4M2YsIDB4NmIsIDB4MTgsCi0JMHg3NCwgMHg0YywgMHg3OCwgMHgzNiwgMHhjZSwgMHhhOCwgMHg1ZCwgMHg0YSwgMHg0ZSwgMHhjNSwgMHg5YSwgMHgxOCwKLQkweGRhLCAweDkxLCAweDgyLCAweDM2LCAweDViLCAweGUzLCAweDQzLCAweGE0LCAweGQ5LCAweGM1LCAweDM5LCAweGI2LAotCTB4ZTgsIDB4ZjMsIDB4NTYsIDB4YjksIDB4NDksIDB4ZjIsIDB4MGUsIDB4ZmQsIDB4YjksIDB4M2UsIDB4ZGUsIDB4NmIsCi0JMHg4ZSwgMHg0YywgMHhlYSwgMHhmOSwgMHg0OCwgMHhkMywgMHg0NywgMHgzMSwgMHgwZiwgMHg2OSwgMHg3ZCwgMHgwNSwKLQkweGIyLCAweDNhLCAweDA4LCAweDE5LCAweGNkLCAweGNhLCAweDVmLCAweGY4LCAweDNiLCAweGU1LCAweGNmLCAweGZjLAotCTB4N2UsIDB4ZjksIDB4MGUsIDB4ZjQsIDB4ZjYsIDB4ZGIsIDB4N2UsIDB4NWEsIDB4OWUsIDB4ZjcsIDB4N2IsIDB4ZTQsCi0JMHgzOSwgMHgzZiwgMHgyNSwgMHhjZiwgMHg2YSwgMHhmOSwgMHgxZCwgMHgxNiwgMHhlOSwgMHhhMCwgMHg0YywgMHhhNywKLQkweGE1LCAweDEzLCAweGZhLCAweGIzLCAweDA5LCAweGJhLCAweGY5LCAweDM4LCAweGY4LCAweDc3LCAweGI0LCAweDRmLAotCTB4ZjIsIDB4OWIsIDB4NzMsIDB4OTIsIDB4YjgsIDB4MWEsIDB4YmYsIDB4MmIsIDB4ZjAsIDB4ZWIsIDB4Y2EsIDB4ZDksCi0JMHg1YSwgMHg1NiwgMHhlYywgMHgxYywgMHg3OSwgMHg2OCwgMHg0YiwgMHg1MSwgMHhlZiwgMHhkOSwgMHg5NiwgMHgwOSwKLQkweGZmLCAweDkxLCAweGFiLCAweDAzLCAweGQ5LCAweDE1LCAweDE5LCAweDAxLCAweDhmLCAweGQ1LCAweGMwLCAweDRmLAotCTB4ZWEsIDB4NzksIDB4MDcsIDB4ZmIsIDB4MTgsIDB4ZDgsIDB4YTEsIDB4NzksIDB4YWYsIDB4MDYsIDB4MjgsIDB4YjMsCi0JMHg2OSwgMHhjOCwgMHhiZCwgMHg2ZCwgMHgxNSwgMHhiZCwgMHg5MywgMHhjMCwgMHg4ZCwgMHgzNiwgMHhhYiwgMHg3MCwKLQkweGE0LCAweDIyLCAweGU1LCAweDIzLCAweDc1LCAweDI5LCAweDY3LCAweGUzLCAweGYyLCAweDkwLCAweDUzLCAweDk3LAotCTB4ZTEsIDB4NmMsIDB4OGIsIDB4ZWMsIDB4NzcsIDB4YzAsIDB4ZmIsIDB4OWQsIDB4YmYsIDB4NmQsIDB4ODUsIDB4OTgsCi0JMHhmZCwgMHhiOCwgMHhmZiwgMHgzYiwgMHg3OCwgMHg2NywgMHg5ZCwgMHhjOCwgMHg1MSwgMHhmZCwgMHgxZSwgMHhkNCwKLQkweDU3LCAweGZjLCAweGI4LCAweGU0LCAweDkzLCAweDk1LCAweDk0LCAweDJkLCAweDViLCAweDU0LCAweGIwLCAweGVlLAotCTB4NzgsIDB4ZDgsIDB4MDYsIDB4N2UsIDB4MmMsIDB4MDEsIDB4MjcsIDB4MzMsIDB4NWEsIDB4NWYsIDB4NGEsIDB4ZDMsCi0JMHhlYiwgMHhkZiwgMHhjZSwgMHhlYiwgMHg2YSwgMHhmNCwgMHg3NywgMHgwNiwgMHhlNSwgMHhhYywgMHhlNiwgMHg2NywKLQkweDdhLCAweGNjLCAweGNhLCAweDI1LCAweDY1LCAweDZiLCAweDhkLCAweGU1LCAweDIxLCAweGViLCAweDRlLCAweDlmLAotCTB4ZjIsIDB4OGMsIDB4NzcsIDB4OWYsIDB4NzQsIDB4NWUsIDB4ODksIDB4N2UsIDB4MzYsIDB4OWUsIDB4NzksIDB4NDMsCi0JMHg2ZiwgMHg5NCwgMHg0NiwgMHhjZSwgMHg0MywgMHgxYSwgMHhmOSwgMHhmYywgMHg2NiwgMHg4NCwgMHhjNiwgMHgyNywKLQkweDFiLCAweGVmLCAweDQ3LCAweDIzLCAweGVmLCAweDE1LCAweGZmLCAweDhmLCAweDVhLCAweDAzLCAweGRhLCAweDg2LAotCTB4ZTQsIDB4OGQsIDB4OTksIDB4YWYsIDB4OTgsIDB4NzUsIDB4ZjAsIDB4N2UsIDB4OGEsIDB4ZjMsIDB4N2YsIDB4YWIsCi0JMHgxZSwgMHhjOCwgMHg0YiwgMHhlNSwgMHgyMiwgMHhlYiwgMHgyYywgMHg0NCwgMHhkNiwgMHhmOSwgMHg2ZSwgMHg2NCwKLQkweDlkLCAweGVmLCAweDQ2LCAweGQ2LCAweGE5LCAweDgwLCAweGE3LCAweGIyLCAweDUxLCAweDQxLCAweDg2LCAweDRiLAotCTB4MzQsIDB4NjMsIDB4NzIsIDB4MDgsIDB4NzMsIDB4YmUsIDB4MmUsIDB4YjEsIDB4MWMsIDB4ZjUsIDB4M2MsIDB4YzQsCi0JMHg5YiwgMHg3MywgMHhlOCwgMHg5ZiwgMHg5MywgMHhiMywgMHgzMywgMHgxNSwgMHgyOSwgMHgxZCwgMHg4OSwgMHhjYiwKLQkweDFkLCAweGJhLCAweGRmLCAweDI2LCAweDQzLCAweDVmLCAweGI0LCAweDJkLCAweDIxLCAweDdiLCAweDkyLCAweDdjLAotCTB4MGYsIDB4ZGIsIDB4NmMsIDB4ZjAsIDB4OTksIDB4ZTUsIDB4NmYsIDB4NWQsIDB4MTksIDB4OTQsIDB4ZjksIDB4YmUsCi0JMHg2MCwgMHhmNiwgMHgzMiwgMHgxYSwgMHg4YywgMHgzYiwgMHhmNSwgMHhhNiwgMHhjNiwgMHhjMywgMHg0NSwgMHg5ZiwKLQkweGI4LCAweDI1LCAweGQ5LCAweDk4LCAweDJiLCAweGZiLCAweDg2LCAweGIzLCAweDVkLCAweDMyLCAweGUxLCAweDU4LAotCTB4ZDksIDB4ZjEsIDB4ZmUsIDB4NzUsIDB4ZDQsIDB4OGIsIDB4YmMsIDB4NzIsIDB4ZGIsIDB4ODAsIDB4MGQsIDB4OTIsCi0JMHg1NiwgMHhjNCwgMHg3YywgMHhiZCwgMHgyZiwgMHg0YiwgMHgwNSwgMHhmNCwgMHgzYiwgMHgyYywgMHg4ZiwgMHgyOCwKLQkweGI3LCAweGIzLCAweGE5LCAweDllLCAweGJhLCAweDFkLCAweGMzLCAweDNiLCAweDY1LCAweDc4LCAweDk3LCAweDM5LAotCTB4NjMsIDB4MWIsIDB4NjUsIDB4ZTIsIDB4ZjAsIDB4MzUsIDB4YTYsIDB4MWMsIDB4YjYsIDB4NmYsIDB4YjYsIDB4NTcsCi0JMHg5NiwgMHhjZiwgMHg3NiwgMHhhZiwgMHgyYywgMHg4NywgMHgzOCwgMHgxMSwgMHhjNSwgMHg3MCwgMHhlZSwgMHgxNSwKLQkweGY4LCAweGU0LCAweDUyLCAweGVlLCAweGUyLCAweGEwLCAweDM1LCAweDBiLCAweDlkLCAweDViLCAweDY3LCAweDY4LAotCTB4YjgsIDB4YzIsIDB4ZDAsIDB4MDAsIDB4NWEsIDB4ZmIsIDB4MjAsIDB4NTksIDB4NWEsIDB4OTcsIDB4YjQsIDB4NjgsCi0JMHgzNSwgMHg5NSwgMHhjOSwgMHhmYiwgMHhmMCwgMHg3ZCwgMHg4MywgMHg2ZSwgMHgwZiwgMHg3NCwgMHgyZSwgMHg3YywKLQkweDg2LCAweGY4LCAweGZlLCAweDY2LCAweGM0LCAweDVlLCAweGY0LCAweDQwLCAweDY3LCAweDkzLCAweGUwLCAweDU1LAotCTB4ODgsIDB4ZjUsIDB4YzQsIDB4ZTAsIDB4MTQsIDB4ZWMsIDB4MDMsIDB4NjQsIDB4NTUsIDB4NjMsIDB4N2IsIDB4M2IsCi0JMHhmMCwgMHhkMCwgMHgzNiwgMHhkOCwgMHg5YywgMHgzMCwgMHhkOCwgMHhkYywgMHgwZSwgMHg1YywgMHg2NiwgMHhkOSwKLQkweDMxLCAweGU1LCAweGE0LCAweDI5LCAweGE3LCAweDUwLCAweDg2LCAweDFkLCAweDlmLCAweDI1LCAweDJlLCAweDVmLAotCTB4NzcsIDB4NzAsIDB4ZWYsIDB4NTEsIDB4OGQsIDB4ZjcsIDB4YjQsIDB4MTUsIDB4NDAsIDB4NjEsIDB4ZTIsIDB4MzUsCi0JMHg3MSwgMHhiYiwgMHg0NywgMHhlNiwgMHg2YiwgMHg1OCwgMHhhZiwgMHg4MSwgMHg4ZCwgMHhkYywgMHg3YiwgMHg5NCwKLQkweDFlLCAweGQyLCAweGIyLCAweDVlLCAweDE0LCAweDZjLCAweDU3LCAweDNlLCAweDQ5LCAweDdhLCAweDFmLCAweGM0LAotCTB4ZGUsIDB4ODksIDB4M2YsIDB4YTQsIDB4ZmIsIDB4MmEsIDB4ZDAsIDB4Y2EsIDB4N2QsIDB4ZmMsIDB4M2MsIDB4NjksCi0JMHhlNSwgMHg3YSwgMHhjZCwgMHhmNCwgMHg3ZSwgMHg1OCwgMHgxYywgMHgyNCwgMHhlZCwgMHgyNywgMHhiMSwgMHhlNywKLQkweDNjLCAweDMwLCAweDRmLCAweGFjLCAweGQxLCAweGJlLCAweDUxLCAweGVjLCAweDc5LCAweDA0LCAweDc4LCAweDc4LAotCTB4M2IsIDB4ZjAsIDB4NzAsIDB4MzcsIDB4ZjAsIDB4NzAsIDB4MTgsIDB4NzgsIDB4OTgsIDB4MDMsIDB4MTYsIDB4MGUsCi0JMHgwMSwgMHgwYiwgMHgwNywgMHg4MSwgMHg4NSwgMHg1OSwgMHhmMCwgMHgyNiwgMHgyOSwgMHg3MywgMHhjMCwgMHhjNiwKLQkweDM5LCAweDYwLCAweGU0LCAweDFjLCAweGU2LCAweDE4LCAweDlmLCAweDE1LCAweGViLCAweDRiLCAweGQ4LCAweGMzLAotCTB4NjMsIDB4MzMsIDB4OTksIDB4OTMsIDB4OTAsIDB4YTUsIDB4NTQsIDB4NDUsIDB4NDEsIDB4ZmUsIDB4YjMsIDB4NDMsCi0JMHg5MCwgMHhlZCwgMHg3ZSwgMHhhOSwgMHhmYSwgMHhiNiwgMHg5NCwgMHg2OSwgMHg1MywgMHhiNywgMHhmNywgMHg0MiwKLQkweGQ3LCAweDIwLCAweGVmLCAweDI5LCAweDMxLCAweDdmLCAweDFiLCAweGNjLCAweGYzLCAweDFmLCAweDQ1LCAweGRjLAotCTB4YmYsIDB4YTMsIDB4MmMsIDB4YTYsIDB4NDUsIDB4Y2UsIDB4NDgsIDB4YzksIDB4ZWIsIDB4NzUsIDB4MGEsIDB4YWEsCi0JMHgxZiwgMHhmZCwgMHg1OCwgMHhjZSwgMHhhYSwgMHhmYiwgMHg4ZiwgMHg1YywgMHhhZiwgMHhmNiwgMHgxZSwgMHgyMSwKLQkweDVmLCAweGE2LCAweDgxLCAweDU3LCAweDc1LCAweDk5LCAweGNjLCAweDUyLCAweGI3LCAweGVhLCAweDcyLCAweDIyLAotCTB4OWIsIDB4MTksIDB4YWEsIDB4NDgsIDB4OWIsIDB4NGMsIDB4MjUsIDB4YTcsIDB4YjUsIDB4YWQsIDB4YjUsIDB4NzMsCi0JMHg4NywgMHhiNSwgMHhiZCwgMHgyYSwgMHhiYiwgMHg3OCwgMHhkNiwgMHgwNiwgMHg1NCwgMHhlOSwgMHgwOCwgMHhmNywKLQkweGRmLCAweDhiLCAweDVmLCAweDFjLCAweGI0LCAweDcwLCAweDdlLCAweDViLCAweDg2LCAweDA3LCAweDFkLCAweGY1LAotCTB4NDAsIDB4NWYsIDB4MDUsIDB4MDgsIDB4OTYsIDB4NzEsIDB4Y2UsIDB4NjIsIDB4ZTUsIDB4ZTIsIDB4NzQsIDB4NmYsCi0JMHhhYSwgMHhhOCwgMHg2YywgMHgxOSwgMHhiMywgMHgyZCwgMHgxOSwgMHg4NywgMHg3YywgMHgwZiwgMHg2NywgMHhkZiwKLQkweGE5LCAweDRmLCAweDI1LCAweGQ5LCAweGJlLCAweDRlLCAweGJlLCAweGFlLCAweDdkLCAweDBlLCAweGFjLCAweDVkLAotCTB4M2QsIDB4OGEsIDB4NzUsIDB4ZTMsIDB4MzgsIDB4MDMsIDB4YWUsIDB4Y2IsIDB4NzksIDB4NTAsIDB4YWUsIDB4ZDksCi0JMHgyOCwgMHg2NywgMHg0ZSwgMHg1NiwgMHhjNCwgMHg4NywgMHg5ZSwgMHg2YywgMHg5NCwgMHhjMiwgMHhjZSwgMHgxNiwKLQkweGM5LCAweDhmLCAweGE0LCAweDY1LCAweDdjLCAweGM2LCAweDA3LCAweDRlLCAweGUxLCAweDFjLCAweGRkLCAweDU2LAotCTB4MjksIDB4OGQsIDB4YTYsIDB4ZTUsIDB4ZDEsIDB4MTksIDB4ZDYsIDB4OWQsIDB4YzYsIDB4ZmUsIDB4MzMsIDB4ODcsCi0JMHhmMiwgMHhjMiwgMHhmZCwgMHhjNywgMHhmNSwgMHhiZSwgMHhkMiwgMHhlYSwgMHhiNCwgMHhlYywgMHhmNywgMHhkZSwKLQkweDMwLCAweDdhLCAweDE0LCAweDk0LCAweGVmLCAweGM3LCAweDk5LCAweDllLCAweGYwLCAweDE3LCAweGIwLCAweDdmLAotCTB4NTcsIDB4ZTYsIDB4ODEsIDB4ZmYsIDB4YzUsIDB4MjMsIDB4YzAsIDB4NDEsIDB4YjcsIDB4MDMsIDB4OTgsIDB4OTUsCi0JMHg1OSwgMHhhMCwgMHg0ZCwgMHg4ZCwgMHhjMSwgMHhlZiwgMHhhYiwgMHg2YSwgMHg1ZSwgMHhmNywgMHhjOCwgMHg5MSwKLQkweDE5LCAweDI1LCAweGRmLCAweGJlLCAweDMxLCAweDhkLCAweDMyLCAweGIwLCAweDMxLCAweDliLCAweDM5LCAweDNkLAotCTB4YTYsIDB4N2EsIDB4ZTQsIDB4ODYsIDB4Y2UsIDB4MTQsIDB4YzYsIDB4ZTUsIDB4NTQsIDB4YzksIDB4ZGIsIDB4MTgsCi0JMHgwMywgMHgyZiwgMHg4ZiwgMHhhNywgMHgxNSwgMHhmYiwgMHgyYSwgMHgyOSwgMHg2NiwgMHg2MywgMHgzOCwgMHhmZiwKLQkweDBhLCAweGZhLCAweGJmLCAweDhmLCAweGY1LCAweDdhLCAweDY0LCAweDE2LCAweGJlLCAweGQ2LCAweGVjLCAweDRjLAotCTB4MWUsIDB4ZTMsIDB4ODgsIDB4NWQsIDB4OTksIDB4ZTMsIDB4NGIsIDB4MGEsIDB4MTgsIDB4MzMsIDB4MGIsIDB4ZjksCi0JMHgxZSwgMHg4NSwgMHgyZiwgMHgzMywgMHgwMywgMHhkMSwgMHg2OSwgMHg0ZCwgMHhlMywgMHg0YywgMHg3YiwgMHg5ZCwKLQkweDcxLCAweGUwLCAweDQxLCAweGJlLCAweDg3LCAweGVmLCAweDljLCAweGQzLCAweDk1LCAweDEzLCAweDFlLCAweGU1LAotCTB4MzAsIDB4MmQsIDB4NGYsIDB4ZjksIDB4MWMsIDB4ZDcsIDB4YmIsIDB4ZjAsIDB4MWMsIDB4N2MsIDB4OWYsIDB4ZGYsCi0JMHhmNSwgMHhhZSwgMHg0NCwgMHhmZiwgMHg3NywgMHhlMSwgMHgwNywgMHgzYiwgMHg1MiwgMHhjNSwgMHhiOSwgMHg5NSwKLQkweGMxLCAweGNiLCAweDdjLCAweDJhLCAweDI4LCAweDhmLCAweGNmLCAweDY2LCAweDE2LCAweGRlLCAweDUwLCAweDdjLAotCTB4NzcsIDB4MmIsIDB4ZjMsIDB4ZWEsIDB4NWEsIDB4OTEsIDB4NGUsIDB4ZjIsIDB4MzMsIDB4MGIsIDB4NWUsIDB4YmEsCi0JMHg4ZSwgMHg1MiwgMHhkYiwgMHg4ZCwgMHhlZiwgMHg0NywgMHgzZCwgMHg3MiwgMHg0MSwgMHg5ZiwgMHgyZCwgMHhmMywKLQkweDAzLCAweDUxLCAweDNkLCAweGEyLCAweDNkLCAweDBjLCAweGY1LCAweDI4LCAweDkzLCAweDVhLCAweDUyLCAweDBhLAotCTB4ZWQsIDB4YjYsIDB4MWMsIDB4ZDYsIDB4NjUsIDB4MGIsIDB4YjQsIDB4NjYsIDB4NTIsIDB4ZGMsIDB4ZGYsIDB4NDQsCi0JMHhhZCwgMHg1ZiwgMHg5ZSwgMHhmMiwgMHhkOCwgMHgxZiwgMHg3YywgMHg5ZSwgMHg2ZSwgMHgzNywgMHhmZCwgMHg0ZiwKLQkweDgzLCAweDg3LCAweGY0LCAweGRmLCAweGZhLCAweDQxLCAweDczLCAweGEwLCAweDViLCAweGYzLCAweGQzLCAweDQ5LAotCTB4ZGQsIDB4MzYsIDB4ZTUsIDB4MDUsIDB4N2UsIDB4OWEsIDB4ODIsIDB4MmYsIDB4MzcsIDB4MDcsIDB4NWYsIDB4YWUsCi0JMHhhOCwgMHhmNSwgMHhjYywgMHhjOSwgMHhjMywgMHhkNywgMHg4NywgMHg5ZSwgMHgwNCwgMHgzYSwgMHg1NiwgMHhhZCwKLQkweDkxLCAweDk2LCAweGJiLCAweDQwLCAweDVmLCAweGE2LCAweDAyLCAweDYyLCAweDBlLCAweGFiLCAweDFjLCAweGNlLAotCTB4N2QsIDB4NTAsIDB4MmEsIDB4ZjQsIDB4ZjcsIDB4Y2UsIDB4YzYsIDB4OWUsIDB4OTIsIDB4YjEsIDB4MmEsIDB4ZWQsCi0JMHgxMSwgMHg3ZSwgMHg5ZSwgMHhlYiwgMHgzMCwgMHhiZSwgMHhjOCwgMHg2YiwgMHg1YiwgMHhkMSwgMHgwZCwgMHgzOSwKLQkweDgwLCAweDFkLCAweGM5LCAweDZlLCAweDMyLCAweDdlLCAweGNlLCAweDEzLCAweDM4LCAweGNmLCAweDMzLCAweDM4LAotCTB4ZjcsIDB4OWEsIDB4ZWMsIDB4M2QsIDB4ZjYsIDB4MGEsIDB4NjUsIDB4YmEsIDB4YmYsIDB4MmEsIDB4OTksIDB4ZmUsCi0JMHgyOSwgMHhkOSwgMHhlMSwgMHhjYywgMHg0MywgMHgxZiwgMHhmMywgMHhhMywgMHhmNSwgMHg1YiwgMHg1NCwgMHg4ZSwKLQkweDYzLCAweDBlLCAweDYyLCAweDBjLCAweDllLCAweGQ1LCAweDU3LCAweGU0LCAweDIxLCAweDlmLCAweDc1LCAweDBmLAotCTB4ODEsIDB4OWYsIDB4ZDAsIDB4OTUsIDB4YzEsIDB4MjcsIDB4OGMsIDB4MWUsIDB4NjAsIDB4M2UsIDB4M2IsIDB4OWMsCi0JMHhlZiwgMHgxNSwgMHgzMywgMHgxZiwgMHhmYiwgMHhiMSwgMHgwZiwgMHhjNywgMHgyYywgMHhjZiwgMHhiYiwgMHg4YiwKLQkweGI2LCAweDA4LCAweDc4LCAweGI0LCAweDRiLCAweGQ1LCAweDZmLCAweDg5LCAweGEzLCAweGZkLCAweGM0LCAweDIwLAotCTB4ZGYsIDB4MzEsIDB4MGYsIDB4NmMsIDB4OTEsIDB4ZTMsIDB4OWUsIDB4NDEsIDB4NWYsIDB4ZjgsIDB4N2EsIDB4ZGUsCi0JMHg3YSwgMHgyOSwgMHg3NCwgMHg4NSwgMHhmNCwgMHg1MiwgMHgwNiwgMHhlOCwgMHgyNywgMHg2OCwgMHgxYiwgMHhiYywKLQkweDM5LCAweGUwLCAweGZkLCAweDFmLCAweGM2LCAweDAyLCAweDk5LCAweDNjLCAweDgwLCAweDMyLCAweGY1LCAweGVmLAotCTB4ODAsIDB4MTQsIDB4YmQsIDB4MGMsIDB4ZjYsIDB4MDksIDB4MWQsIDB4ZjMsIDB4M2IsIDB4YWMsIDB4NjAsIDB4OGYsCi0JMHhlMCwgMHhmZiwgMHhjOCwgMHgzOSwgMHhmMCwgMHg0MSwgMHgyYSwgMHgwMSwgMHg2ZiwgMHhjOCwgMHgxNywgMHhmMiwKLQkweGE0LCAweDAzLCAweGIyLCAweDBmLCAweGI5LCAweDg3LCAweGRjLCAweDk2LCAweDM0LCAweDBmLCAweGZlLCAweGJkLAotCTB4MzMsIDB4ZjAsIDB4OGIsIDB4MzMsIDB4OTUsIDB4M2MsIDB4ZTMsIDB4YjksIDB4NGUsIDB4ZTIsIDB4MjYsIDB4MzAsCi0JMHhjYywgMHg4NywgMHg3MCwgMHg2MCwgMHhlZSwgMHgyNSwgMHhiNSwgMHg5ZSwgMHhmNCwgMHhhNiwgMHg5NywgMHg2MiwKLQkweDdkLCAweDJjLCAweGY3LCAweDJmLCAweDQxLCAweDg2LCAweGFiLCAweDM4LCAweDlmLCAweGMyLCAweGNlLCAweDVlLAotCTB4ODMsIDB4NWIsIDB4Y2YsIDB4YzYsIDB4MjgsIDB4YWYsIDB4NTUsIDB4NjAsIDB4NGMsIDB4YzksIDB4ZGIsIDB4ZTEsCi0JMHhkYywgMHg0ZCwgMHhiZSwgMHgzOSwgMHg4ZSwgMHgzYywgMHhlNywgMHg0NSwgMHhiMSwgMHgwMywgMHhiNiwgMHhjZiwKLQkweGE1LCAweDFjLCAweDI2LCAweDIxLCAweDA3LCAweDM2LCAweDZjLCAweDY4LCAweDBhLCAweDY3LCAweGZlLCAweDZmLAotCTB4OWQsIDB4YzEsIDB4NWUsIDB4ZjgsIDB4NmUsIDB4Y2IsIDB4OWMsIDB4ODMsIDB4MzUsIDB4YmQsIDB4YzUsIDB4OGQsCi0JMHg0MSwgMHgxZCwgMHhkZiwgMHhiNywgMHhmMCwgMHg4YywgMHgwZSwgMHhhZiwgMHhhNCwgMHg5ZCwgMHhlNywgMHhkYiwKLQkweDdjLCAweGE2LCAweDI3LCAweGIwLCAweDE3LCAweGQ2LCAweGUzLCAweDU5LCAweDNkLCAweDJlLCAweDdiLCAweDg5LAotCTB4OWIsIDB4ODMsIDB4ZGIsIDB4NTIsIDB4MmYsIDB4YTIsIDB4N2YsIDB4MTEsIDB4MzYsIDB4YTEsIDB4NjIsIDB4YjMsCi0JMHhlZCwgMHg2ZCwgMHg2YiwgMHg3OSwgMHg4YywgMHhhMiwgMHg1ZiwgMHgwYSwgMHgxZiwgMHg3OCwgMHhjOSwgMHhmYSwKLQkweDkyLCAweGZmLCAweDkyLCAweDU1LCAweGE4LCAweGJlLCAweDZkLCAweDE1LCAweDIxLCAweDI3LCAweDU1LCAweDhmLAotCTB4ZjEsIDB4MGIsIDB4ZjUsIDB4YzcsIDB4YzEsIDB4ZGEsIDB4OTksIDB4ZDQsIDB4NWIsIDB4YWEsIDB4MzcsIDB4M2QsCi0JMHgwZiwgMHgyYywgMHhiOCwgMHgxZiwgMHgzYSwgMHg1ZCwgMHhiNCwgMHgxNywgMHhhNCwgMHhlYywgMHhkNywgMHhhNCwKLQkweDc0LCAweDZjLCAweDA3LCAweGY0LCAweDJkLCAweDFkLCAweGExLCAweDhiLCAweDc4LCAweDU2LCAweGExLCAweDFmLAotCTB4NmUsIDB4ZWQsIDB4ZjIsIDB4YTQsIDB4ZDIsIDB4OTIsIDB4MjMsIDB4YWUsIDB4NmQsIDB4ODMsIDB4ZWMsIDB4YTAsCi0JMHhhZSwgMHhiNiwgMHgyYywgMHg3ZiwgMHhiNywgMHhhZCwgMHhhMiwgMHgxNSwgMHhiMSwgMHhlZSwgMHhlMCwgMHg0YSwKLQkweDdhLCAweGFiLCAweDcyLCAweDcxLCAweDdhLCAweDc3LCAweDM1LCAweGU4LCAweDI1LCAweDY2LCAweDAwLCAweGZmLAotCTB4M2QsIDB4ZTAsIDB4YmYsIDB4MDcsIDB4ZmMsIDB4ZjcsIDB4ODAsIDB4ZmYsIDB4MWUsIDB4ZjAsIDB4ZGYsIDB4ODMsCi0JMHg2ZCwgMHhmMCwgMHg2MCwgMHgwMywgMHgzYywgMHhkOCwgMHgwMCwgMHgwZiwgMHgzNiwgMHhjMCwgMHg4MywgMHgwZCwKLQkweGYwLCAweDBhLCAweDM4LCAweDI3LCAweGUyLCAweDNjLCAweDZkLCAweGM4LCAweDNkLCAweDBkLCAweGJiLCAweDE5LAotCTB4ZjgsIDB4MzksIDB4NTcsIDB4MWEsIDB4ZGYsIDB4MDEsIDB4ZmEsIDB4ZTcsIDB4NmMsIDB4OTEsIDB4ZjEsIDB4ZmUsCi0JMHgyYiwgMHhiMCwgMHhiNywgMHg1NiwgMHgzYywgMHhkYiwgMHhmMCwgMHhjNCwgMHgxYSwgMHhmZCwgMHg5ZiwgMHgzNSwKLQkweDdhLCAweGYyLCAweDU1LCAweGQwLCAweGE1LCAweDUwLCAweGZlLCAweDA1LCAweGM4LCAweDYxLCAweDBiLCAweGU4LAotCTB4ZjksIDB4OTQsIDB4ZjEsIDB4MzEsIDB4YmUsIDB4NjEsIDB4MDcsIDB4NzIsIDB4ZDgsIDB4ODYsIDB4YmEsIDB4Y2YsCi0JMHhhMCwgMHhhZSwgMHgwZCwgMHg3ZCwgMHhmNiwgMHhhMywgMHgwZiwgMHg3ZCwgMHg5NCwgMHgwZSwgMHg1MywgMHgxNywKLQkweGVkLCAweDQ3LCAweDVmLCAweGU1LCAweDBiLCAweDU4LCAweDJiLCAweDgzLCAweDdlLCAweDFkLCAweDk4LCAweGJiLAotCTB4MDcsIDB4N2QsIDB4NmUsIDB4NDYsIDB4OWYsIDB4YWIsIDB4NTAsIDB4YTYsIDB4NmYsIDB4ZGIsIDB4OGQsIDB4ZjIsCi0JMHhhNywgMHg5YiwgMHhjNiwgMHg1YywgMHg4MywgMHhiYSwgMHhjZiwgMHgzNiwgMHhkNSwgMHg5ZCwgMHg0NSwgMHgxZCwKLQkweDYyLCAweDYyLCAweGU3LCAweDQ1LCAweDMzLCAweGFlLCAweDgyLCAweDcyLCAweDU3LCAweDUzLCAweDlmLCAweDU3LAotCTB4NTAsIDB4MzcsIDB4ODQsIDB4YmEsIDB4YmYsIDB4YzIsIDB4MTMsIDB4YjEsIDB4YjAsIDB4NDMsIDB4OWEsIDB4YzIsCi0JMHgzNiwgMHhmYSwgMHhhOSwgMHg2OSwgMHhkNCwgMHhjNywgMHg4ZCwgMHhhZiwgMHhmOSwgMHgyNCwgMHg3ZCwgMHgyZiwKLQkweGQ4LCAweGRjLCAweDNmLCAweGI2LCAweDAzLCAweGRmLCAweDBjLCAweGRlLCAweGFiLCAweDk2LCAweGMzLCAweGIwLAotCTB4ZmMsIDB4Y2QsIDB4YTYsIDB4MzIsIDB4ZmIsIDB4N2UsIDB4YmYsIDB4YTksIDB4YWUsIDB4NmQsIDB4ZDMsIDB4Y2EsCi0JMHhmMiwgMHg0ZiwgMHhlMywgMHhhYiwgMHhjNywgMHhkYywgMHhkYiwgMHhkNCwgMHhlNywgMHhlYiwgMHg5ZCwgMHgyYiwKLQkweGNiLCAweGJiLCAweDViLCAweDU2LCAweDhmLCAweGQ5LCAweGJlLCAweDcxLCAweDY1LCAweGRkLCAweGFkLCAweDliLAotCTB4NTcsIDB4OTYsIDB4ZTksIDB4MDMsIDB4MjYsIDB4MTEsIDB4YzMsIDB4ODQsIDB4ZmQsIDB4NzcsIDB4N2UsIDB4MjIsCi0JMHg2OCwgMHgyNywgMHg3ZiwgMHg5YiwgMHg2NSwgMHg0OSwgMHgyYiwgMHgyMywgMHhjYSwgMHgwYSwgMHhlNywgMHhiMCwKLQkweDY0LCAweDQxLCAweDlmLCAweDFjLCAweDk1LCAweDdiLCAweGM5LCAweDJhLCAweDQyLCAweGE2LCAweDBhLCAweDdlLAotCTB4MzgsIDB4MWYsIDB4NzUsIDB4YjYsIDB4MzksIDB4NGYsIDB4MTAsIDB4ZTYsIDB4MDcsIDB4ZTgsIDB4NmYsIDB4YjUsCi0JMHg0MywgMHg2ZSwgMHhlZSwgMHhhMiwgMHg0ZCwgMHgzYSwgMHg1NCwgMHg5MSwgMHg2NSwgMHhmZCwgMHhkYywgMHhhYSwKLQkweGNlLCAweGE3LCAweDlmLCAweGY3LCAweDE5LCAweDhjLCAweDNhLCAweDA3LCAweDNhLCAweGViLCAweDMyLCAweDkyLAotCTB4NWQsIDB4NDcsIDB4MWIsIDB4NjMsIDB4YjAsIDB4OGIsIDB4YjgsIDB4NTMsIDB4YWYsIDB4YzcsIDB4YjYsIDB4ZDcsCi0JMHg2NSwgMHg1ZiwgMHhmNiwgMHhkZCwgMHhiYSwgMHg2OCwgMHhjYywgMHhiYiwgMHg1NywgMHhlMywgMHg0ZSwgMHg1YSwKLQkweDc1LCAweGUzLCAweDhjLCAweDFjLCAweGM0LCAweDEyLCAweDg4LCAweGVkLCAweDkzLCAweGI0LCAweDQ5LCAweGM3LAotCTB4ZTksIDB4OWYsIDB4MWMsIDB4MGMsIDB4MzAsIDB4OTUsIDB4YjgsIDB4ODMsIDB4YjIsIDB4M2YsIDB4ODUsIDB4MzksCi0JMHhiOSwgMHgzZSwgMHg5ZSwgMHg1NSwgMHhlMiwgMHhiOCwgMHhhZCwgMHg2ZCwgMHg0YSwgMHhjOSwgMHhlMSwgMHhiYywKLQkweDZiLCAweDYxLCAweGUzLCAweGJmLCAweGQ4LCAweGY0LCAweDBiLCAweDZkLCAweGY3LCAweDI0LCAweGVjLCAweDFiLAotCTB4ZGIsIDB4ZTgsIDB4MmIsIDB4OWMsIDB4YTQsIDB4NWYsIDB4MTIsIDB4YzEsIDB4YWEsIDB4OWIsIDB4NjIsIDB4ZTIsCi0JMHgyZSwgMHg2MywgMHg2NiwgMHhiMCwgMHhhZiwgMHgyZCwgMHhmNCwgMHhmYiwgMHgyZiwgMHg2MSwgMHhhZiwgMHg2YiwKLQkweDYzLCAweDUxLCAweGFmLCAweGJhLCAweGI4LCAweDZlLCAweGVmLCAweDY5LCAweGU4LCAweDc2LCAweDI4LCAweDdiLAotCTB4NmIsIDB4ZTUsIDB4MDMsIDB4NWUsIDB4ZDUsIDB4NjcsIDB4ZjEsIDB4YWMsIDB4OWYsIDB4MzksIDB4NWMsIDB4ODEsCi0JMHgyZSwgMHgyZCwgMHhlYSwgMHhkOCwgMHgzNywgMHgzYywgMHgxNywgMHhmYSwgMHgzOCwgMHg5OSwgMHhlMywgMHg3MywKLQkweDkwLCAweGVkLCAweGJkLCAweDNhLCAweDI2LCAweDYwLCAweDNjLCAweDUwLCAweDk3LCAweDVkLCAweGQ5LCAweDRmLAotCTB4MjUsIDB4YzksIDB4ODcsIDB4YmMsIDB4ZmEsIDB4NzEsIDB4OWMsIDB4M2UsIDB4YzMsIDB4YTIsIDB4NDcsIDB4OWUsCi0JMHg2NSwgMHhkMSwgMHg5ZSwgMHgwNSwgMHgyNiwgMHhmYywgMHhhYiwgMHgxNCwgMHg5MywgMHhhYywgMHg3YiwgMHhhYiwKLQkweDNlLCAweDBmLCAweGJmLCAweDRhLCAweGZiLCAweDQ3LCAweGRhLCAweGRlLCAweGQzLCAweGJmLCAweDgzLCAweDVkLAotCTB4ZjcsIDB4YzksIDB4ZDMsIDB4MjUsIDB4ZjAsIDB4MzksIDB4ZjQsIDB4MDEsIDB4N2UsIDB4NDAsIDB4MWYsIDB4NTUsCi0JMHg1NiwgMHhmYSwgMHhkMiwgMHgyMiwgMHgwZiwgMHhkNSwgMHhmZSwgMHgwMSwgMHgzNiwgMHg0NywgMHgwNSwgMHhiZSwKLQkweDBhLCAweGUzLCAweDY1LCAweDk3LCAweGY1LCAweDM3LCAweGM2LCAweGU5LCAweGNiLCAweDA1LCAweGI2LCAweDNlLAotCTB4ODYsIDB4ZjUsIDB4MTAsIDB4NWYsIDB4ZDcsIDB4ZmUsIDB4ZDMsIDB4MmEsIDB4NzksIDB4M2QsIDB4ZjQsIDB4YjMsCi0JMHhiMCwgMHg3ZiwgMHhmOCwgMHg1MCwgMHgzZSwgMHhkYiwgMHg1OCwgMHg5NywgMHgzMCwgMHhmZSwgMHg3NywgMHhiYiwKLQkweGYxLCAweGI3LCAweDFkLCAweGUzLCAweDZmLCAweDZiLCAweDNhLCAweDEyLCAweDRlLCAweDJlLCAweGY0LCAweDBiLAotCTB4NzgsIDB4NjYsIDB4ZTksIDB4ODMsIDB4NmEsIDB4M2IsIDB4ZmQsIDB4ODIsIDB4MGUsIDB4NTksIDB4ZGIsIDB4MmYsCi0JMHgwOCwgMHg2OSwgMHgzYSwgMHg4NSwgMHg3ZCwgMHhkMiwgMHhjZiwgMHhkMywgMHg3OSwgMHhhMCwgMHhjZSwgMHgyMCwKLQkweGY3LCAweDQ0LCAweDFhLCAweDQyLCAweGZiLCAweGE4LCAweGVkLCAweGYwLCAweDIxLCAweDk4LCAweDNjLCAweGU2LAotCTB4MjQsIDB4NDEsIDB4ZWIsIDB4NmUsIDB4MjksIDB4NGMsIDB4OWYsIDB4MzIsIDB4ZjYsIDB4OTYsIDB4NzEsIDB4MDQsCi0JMHg3ZCwgMHhmOCwgMHg0MCwgMHg2NiwgMHgwYiwgMHhkOSwgMHgwZSwgMHhjYiwgMHhjYywgMHhkMywgMHgwNSwgMHgwYiwKLQkweDE5LCAweGM5LCAweDUxLCAweDcxLCAweDJkLCAweGZhLCAweDMxLCAweGExLCAweDRmLCAweGIzLCAweDYwLCAweDdjLAotCTB4OWEsIDB4MzMsIDB4YjIsIDB4Y2YsIDB4MGIsIDB4ZTIsIDB4ODYsIDB4OTEsIDB4ZGEsIDB4MTIsIDB4ZWEsIDB4MzQsCi0JMHhlZCwgMHgyOSwgMHhmYSwgMHg5NiwgMHgwYSwgMHgzZSwgMHg3NywgMHhmZSwgMHhkZSwgMHgwYywgMHgwMiwgMHg5MCwKLQkweDYwLCAweDJmLCAweDViLCAweGIxLCAweDk3LCAweDZhLCAweDYzLCAweDJmLCAweDZkLCAweDRiLCAweGNkLCAweDNlLAotCTB4MGUsIDB4YzcsIDB4NGUsIDB4YWUsIDB4MWEsIDB4MmIsIDB4ZDgsIDB4YzcsIDB4ZGMsIDB4NzksIDB4ZGEsIDB4YjgsCi0JMHg0NywgMHhmYSwgMHgwZCwgMHg4ZSwgMHhkOSwgMHg2MywgMHg3OCwgMHg0ZSwgMHg4ZiwgMHg2MywgMHg4ZiwgMHg0OSwKLQkweGFiLCAweGE0LCAweDdkLCAweDJkLCAweGZhLCAweDJkLCAweDg4LCAweGIzLCAweDZiLCAweDJmLCAweGUxLCAweDQ5LAotCTB4ZmQsIDB4ZDAsIDB4ZjMsIDB4NjAsIDB4NGYsIDB4ZWQsIDB4N2EsIDB4NGYsIDB4NTMsIDB4ZGUsIDB4MmIsIDB4N2EsCi0JMHgxZiwgMHhmMywgMHhiNSwgMHhiZiwgMHg5MSwgMHhmMiwgMHhiMSwgMHgxZiwgMHhjMCwgMHhlZSwgMHg0NSwgMHg3MywKLQkweDczLCAweGNjLCAweDZiLCAweDkyLCAweDFmLCAweDk1LCAweDA4LCAweDdlLCAweDcyLCAweGFmLCAweGNjLCAweGJiLAotCTB4YmQsIDB4MWMsIDB4MGYsIDB4ZTIsIDB4ODMsIDB4NjksIDB4OWMsIDB4YjEsIDB4MTUsIDB4YjQsIDB4ZWIsIDB4ZjUsCi0JMHg0MywgMHhiZSwgMHhiNiwgMHg0NCwgMHhlOCwgMHhhOSwgMHhjMywgMHhlNywgMHg0YywgMHg4MSwgMHg4NiwgMHhlOCwKLQkweDk4LCAweDAzLCAweDMyLCAweGVjLCAweGYxLCAweDNjLCAweDdhLCAweDUzLCAweDdiLCAweGM1LCAweDc1LCAweDRhLAotCTB4MTIsIDB4ZmEsIDB4MTksIDB4NWMsIDB4OWYsIDB4M2EsIDB4NWYsIDB4ODQsIDB4ZTMsIDB4Y2IsIDB4NWMsIDB4NmEsCi0JMHhjOCwgMHhiYiwgMHg5MCwgMHg2ZiwgMHhlZCwgMHg0YiwgMHhjZCwgMHgzMiwgMHgzMCwgMHg4OSwgMHg1OCwgMHhhYiwKLQkweGVjLCAweDkxLCAweDRmLCAweGExLCAweDZjLCAweDg2LCAweDZiLCAweGJmLCAweDZhLCAweDcxLCAweDNmLCAweDEzLAotCTB4M2EsIDB4N2YsIDB4ZjgsIDB4NGYsIDB4MGQsIDB4MTksIDB4MWQsIDB4MDcsIDB4NzYsIDB4MDQsIDB4MzIsIDB4ZjcsCi0JMHhmNywgMHg4NiwgMHgzNywgMHhhMSwgMHg2YywgMHhiNiwgMHg5YiwgMHg3MywgMHg2NiwgMHgyYywgMHg0OCwgMHhkZCwKLQkweDA5LCAweGU1LCAweDYwLCAweDliLCAweDczLCAweGE3LCAweGU2LCAweDA1LCAweGRiLCAweGI0LCAweGNmLCAweGFkLAotCTB4Y2YsIDB4NzIsIDB4YWMsIDB4NzEsIDB4OTYsIDB4MWIsIDB4OWEsIDB4ZTQsIDB4ZjIsIDB4ZGQsIDB4OGQsIDB4ODEsCi0JMHgxZSwgMHg1MiwgMHhkZiwgMHhhMCwgMHhiNywgMHhlMCwgMHhkNywgMHhiMywgMHgyYiwgMHhmNCwgMHhiYiwgMHhmZiwKLQkweDNjLCAweDM5LCAweGQ5LCAweDc2LCAweDg5LCAweGNkLCAweDdlLCAweDBmLCAweGJjLCAweGJjLCAweDA2LCAweGIxLAotCTB4OGEsIDB4ODgsIDB4M2QsIDB4NDMsIDB4MWMsIDB4YTIsIDB4YmYsIDB4YjEsIDB4ZWMsIDB4ZWYsIDB4Y2UsIDB4Y2IsCi0JMHg1YSwgMHhiZSwgMHhlZSwgMHhjNSwgMHg3YywgMHg4ZCwgMHg0ZiwgMHg1ZSwgMHhhMiwgMHhhZiwgMHgzMSwgMHhkYywKLQkweDIyLCAweGFkLCAweGM0LCAweGEyLCAweDMzLCAweGYwLCAweDZkLCAweDJkLCAweDY5LCAweDcxLCAweGJmLCAweDAxLAotCTB4MWIsIDB4NzYsIDB4ZGEsIDB4NWUsIDB4ZTcsIDB4ODYsIDB4OTgsIDB4ZDAsIDB4MmUsIDB4OWIsIDB4NjYsIDB4YjcsCi0JMHg2OCwgMHg1YywgMHg3MCwgMHg2NiwgMHg5NiwgMHg3MSwgMHg2MSwgMHgxYywgMHhiYywgMHgxZiwgMHgwOSwgMHhmMiwKLQkweGJjLCAweGM5LCAweDRkLCAweDcyLCAweGE5LCAweGYxLCAweGY1LCAweGIyLCAweGRmLCAweDNmLCAweGQ2LCAweGYwLAotCTB4ZmIsIDB4YWYsIDB4NmMsIDB4ZTIsIDB4ZTMsIDB4NWEsIDB4YjgsIDB4NzgsIDB4MWEsIDB4N2MsIDB4Y2IsIDB4MjEsCi0JMHhmZSwgMHg2NSwgMHg1YywgMHgzYiwgMHg4YywgMHg3OCwgMHg5OCwgMHhiMSwgMHg1OCwgMHgxZSwgMHgzMSwgMHg3MSwKLQkweGU2LCAweGI0LCAweGM4LCAweDZlLCAweGM0LCAweGM4LCAweDk5LCAweDFmLCAweDMxLCAweDdmLCAweGY1LCAweGJjLAotCTB4OWYsIDB4OTksIDB4MTMsIDB4YjksIDB4MWQsIDB4N2MsIDB4MWQsIDB4MDQsIDB4NmUsIDB4NjYsIDB4ODEsIDB4YTMsCi0JMHgzYiwgMHhjMSwgMHhkZiwgMHg3ZSwgMHg4ZCwgMHg5ZCwgMHhmNywgMHgxZiwgMHgxMSwgMHhlYiwgMHgwZSwgMHg5ZCwKLQkweGFiLCAweGE2LCAweDNlLCAweDI3LCAweDYxLCAweDQ3LCAweGViLCAweGY1LCAweGZkLCAweGQ5LCAweDVlLCAweGM0LAotCTB4ZjUsIDB4NjksIDB4YjksIDB4ZDUsIDB4NjYsIDB4MWMsIDB4NmIsIDB4ZDksIDB4NWIsIDB4MDcsIDB4ZTYsIDB4NjMsCi0JMHg1MSwgMHg5ZiwgMHhiNCwgMHg3MCwgMHg1MSwgMHgzYiwgMHhiMCwgMHg5YSwgMHhmNywgMHg0NSwgMHg2ZCwgMHgwYiwKLQkweDBlLCAweGM3LCAweDJlLCAweGM0LCAweGZiLCAweDNiLCAweDFhLCAweGJjLCAweDZmLCAweDY5LCAweDk1LCAweGQ2LAotCTB4ZGIsIDB4NzUsIDB4MWUsIDB4NjEsIDB4ZWIsIDB4YzAsIDB4N2UsIDB4ZTIsIDB4NTUsIDB4MTYsIDB4NzYsIDB4MWQsCi0JMHhmNiwgMHhiNywgMHgyZSwgMHhiNywgMHg2NSwgMHhkZiwgMHhhZSwgMHhiZiwgMHhlOCwgMHg2ZSwgMHg5NCwgMHhkMiwKLQkweGNlLCAweGZiLCAweDBjLCAweDY2LCAweDJmLCAweDdkLCAweGFkLCAweGUwLCAweDU2LCAweGEwLCAweDFmLCAweDQxLAotCTB4Y2UsIDB4NzAsIDB4ZWYsIDB4NzQsIDB4MDIsIDB4OTYsIDB4ODAsIDB4N2YsIDB4OWQsIDB4MzIsIDB4M2YsIDB4ZjQsCi0JMHgxNiwgMHhjZSwgMHg3MCwgMHhjNywgMHg0OSwgMHgyNiwgMHg5YywgMHgxNCwgMHg3MCwgMHg3OCwgMHgzZSwgMHhkOSwKLQkweGFlLCAweGYzLCAweGM1LCAweDlmLCAweDcwLCAweDU5LCAweGVmLCAweGUwLCAweDRjLCAweDQ3LCAweDY1LCAweDFlLAotCTB4ZmUsIDB4NDMsIDB4NzUsIDB4MDgsIDB4MzQsIDB4ZWUsIDB4ZWMsIDB4NDIsIDB4N2YsIDB4ZWEsIDB4MWQsIDB4NzksCi0JMHgzZSwgMHgwYSwgMHhkYiwgMHg0YiwgMHg5ZSwgMHgyNiwgMHhkMSwgMHg3ZiwgMHgwZiwgMHhmYSwgMHg3NCwgMHhlMiwKLQkweDc5LCAweDVmLCAweDZjLCAweGRlLCAweDYxLCAweGVjLCAweGZjLCAweDc5LCAweDk0LCAweDM5LCAweDQ3LCAweGQ0LAotCTB4NzYsIDB4N2UsIDB4MmUsIDB4MmUsIDB4N2EsIDB4NGUsIDB4OGUsIDB4ZTksIDB4ZDIsIDB4ZmEsIDB4YmYsIDB4YmMsCi0JMHgxNiwgMHhkNywgMHg2MSwgMHhkYiwgMHhjZiwgMHhlYSwgMHhkNywgMHgwZiwgMHgwYywgMHg0NSwgMHhkNiwgMHhlYiwKLQkweDg4LCAweGFjLCAweDM3LCAweDE0LCAweDU5LCAweDhmLCAweDc0LCAweDc2LCAweDQ2LCAweGU4LCAweGVjLCAweGM0LAotCTB4ZjgsIDB4MjIsIDB4ZDYsIDB4MjYsIDB4M2YsIDB4YTIsIDB4NmIsIDB4M2UsIDB4MTgsIDB4NTksIDB4MzMsIDB4ZGMsCi0JMHg1ZiwgMHg1NywgMHg2NCwgMHhkYywgMHhiYiwgMHg1OCwgMHg4ZiwgMHg3NSwgMHhjOSwgMHg0OCwgMHgxZCwgMHg2OSwKLQkweGQ4LCAweDhjLCAweDNhLCAweDk2LCAweDNiLCAweDIzLCAweDc0LCAweDkxLCAweGQ2LCAweDBkLCAweGE4LCAweGQ3LAotCTB4ZmUsIDB4MTMsIDB4ZjgsIDB4ZGMsIDB4MGEsIDB4YmIsIDB4YTUsIDB4NjAsIDB4M2IsIDB4NWEsIDB4ZTAsIDB4NWYsCi0JMHgzNSwgMHhlZiwgMHhmNSwgMHg1MSwgMHhhYywgMHgxYiwgMHhjZSwgMHg5NywgMHhjNCwgMHgxYywgMHhlYywgMHhjZiwKLQkweGJlLCAweDMxLCAweDMzLCAweDllLCAweGY1LCAweDZjLCAweGZmLCAweGYzLCAweGZhLCAweDlmLCAweDZhLCAweGJlLAotCTB4NmQsIDB4MDYsIDB4ZWQsIDB4M2EsIDB4ZWYsIDB4MjIsIDB4NzMsIDB4OWQsIDB4MzYsIDB4Y2UsIDB4OTMsIDB4ZjEsCi0JMHhiMSwgMHgyNSwgMHg1NywgMHhiYiwgMHhjYSwgMHhlYSwgMHgxZCwgMHhlMCwgMHhkOSwgMHg2ZiwgMHgzNCwgMHg1OCwKLQkweGRhLCAweDZhLCAweDE1LCAweDhlLCAweDMwLCAweDVmLCAweGQwLCAweDY2LCAweDYyLCAweDNlLCAweGM0LCAweDFlLAotCTB4ZGEsIDB4YzYsIDB4ZDgsIDB4YTYsIDB4OWQsIDB4MzYsIDB4ODYsIDB4N2UsIDB4MGIsIDB4ZWQsIDB4ZTcsIDB4NjksCi0JMHhmMywgMHg4ZSwgMHgyNywgMHg2NCwgMHhmOCwgMHg4MSwgMHg2YSwgMHhhNywgMHhiYywgMHhhOCwgMHg3OSwgMHhlYSwKLQkweGM4LCAweGQ5LCAweDA2LCAweDRmLCAweGUzLCAweGU2LCAweGJiLCAweGNjLCAweDAxLCAweGYzLCAweGNkLCAweGEzLAotCTB4MGYsIDB4N2UsIDB4MTEsIDB4ZGUsIDB4NmIsIDB4NzksIDB4ZDAsIDB4OTAsIDB4OTYsIDB4ZGUsIDB4MDEsIDB4YzYsCi0JMHg2ZSwgMHgxNSwgMHgzYywgMHg5OSwgMHhhNywgMHhiMCwgMHhmMCwgMHgwYywgMHhmMiwgMHgxNywgMHhiZCwgMHgwMywKLQkweGIwLCAweDRiLCAweGMwLCAweGExLCAweGRlLCAweDgxLCAweDczLCAweDNhLCAweDllLCAweGFiLCAweGZhLCAweDhlLAotCTB4NzUsIDB4OWIsIDB4MTcsIDB4ZTQsIDB4ODgsIDB4Y2UsIDB4YmEsIDB4MTcsIDB4Y2EsIDB4MTEsIDB4ZGQsIDB4YjMsCi0JMHg4ZSwgMHg3OSwgMHg4ZCwgMHgzMCwgMHg0NywgMHg3NCwgMHg1NiwgMHg3NCwgMHg4ZSwgMHhlOCwgMHhmOCwgMHg0NSwKLQkweDcyLCAweDQ0LCAweGY5LCAweDRiLCAweGNmLCAweDExLCAweDcxLCAweDdlLCAweDViLCAweGVlLCAweDFjLCAweDc0LAotCTB4ZDQsIDB4YWYsIDB4OWEsIDB4MWMsIDB4ZDEsIDB4MWIsIDB4MTIsIDB4ZTQsIDB4ODgsIDB4NWUsIDB4OTQsIDB4YjUsCi0JMHg3MywgMHg0NCwgMHg4NywgMHg5YSwgMHg3MiwgMHg0NCwgMHg5YiwgMHg3NSwgMHg4ZSwgMHg4OCwgMHhmMywgMHgwNCwKLQkweDM5LCAweDIyLCAweDk2LCAweDRiLCAweDAzLCAweDQzLCAweDkxLCAweDVjLCAweDA3LCAweGYwLCAweGQ3LCAweGJiLAotCTB4MDEsIDB4N2MsIDB4NzMsIDB4YWMsIDB4NTEsIDB4MmYsIDB4YzQsIDB4MzQsIDB4NjIsIDB4ZmYsIDB4MTUsIDB4MGQsCi0JMHhmYiwgMHhiNSwgMHg4YywgMHg2ZiwgMHg5NiwgMHg5NiwgMHhiOSwgMHg4YiwgMHhlMSwgMHhkYiwgMHg2OCwgMHhlMCwKLQkweDk3LCAweGFjLCAweGMwLCAweGI2LCAweGM5LCAweDg2LCAweGVmLCAweGUyLCAweGFkLCAweDYzLCAweDBjLCAweDNkLAotCTB4NTEsIDB4NWIsIDB4OWUsIDB4NzcsIDB4MDIsIDB4YmMsIDB4MWUsIDB4NmIsIDB4ZTQsIDB4NDksIDB4Y2UsIDB4ZTcsCi0JMHgxZiwgMHgyNSwgMHhlNSwgMHhjMCwgMHg5YSwgMHhkZiwgMHhiZCwgMHg1MiwgMHhmOSwgMHhkNSwgMHhkZiwgMHhiZCwKLQkweDJjLCAweDQ5LCAweDgyLCAweGNlLCAweGQyLCAweDQwLCAweDQ5LCAweGM3LCAweDVkLCAweGYzLCAweGRlLCAweGFmLAotCTB4YzgsIDB4ZDIsIDB4ZGQsIDB4MGUsIDB4ZjAsIDB4MjcsIDB4Y2MsIDB4OWYsIDB4ZjAsIDB4N2MsIDB4OTcsIDB4NmQsCi0JMHg0YSwgMHg0MSwgMHg3ZCwgMHg3YywgMHgzOSwgMHg5NCwgMHgwNywgMHg3NCwgMHgwZSwgMHhlNSwgMHhjNSwgMHg3NSwKLQkweGQxLCAweDFjLCAweGNhLCAweDU5LCAweGI5LCAweDcwLCAweDBlLCAweGU1LCAweDgxLCAweDM1LCAweDcyLCAweDI4LAotCTB4MmYsIDB4Y2IsIDB4NzIsIDB4MGUsIDB4ZTUsIDB4NjUsIDB4MDksIDB4NzMsIDB4MjgsIDB4MzEsIDB4NTksIDB4ZGEsCi0JMHgxYywgMHg0OCwgMHhlMywgMHgwMywgMHhmZSwgMHgxMiwgMHg3ZSwgMHg2NywgMHhmMCwgMHgwYiwgMHg3MiwgMHgyYSwKLQkweDY3LCAweDFiLCAweGY0LCAweGFmLCAweDk1LCAweDUzLCAweDc5LCAweDdkLCAweGRkLCAweDA3LCAweGM5LCAweGE5LAotCTB4MDQsIDB4MzYsIDB4MjAsIDB4Y2MsIDB4YTksIDB4ZTAsIDB4ZTcsIDB4YzAsIDB4ZTYsIDB4YTgsIDB4NjgsIDB4NGUsCi0JMHhlNSwgMHgyNywgMHhkNCwgMHgwNywgMHhkNCwgMHhiMSwgMHhjYywgMHg3YSwgMHhlOCwgMHgwNSwgMHhlYywgMHg1MiwKLQkweDVlLCAweGU3LCAweDM4LCAweDNlLCAweDY3LCAweDc4LCAweDM4LCAweDg3LCAweDNkLCAweGE3LCAweDcxLCAweDE2LAotCTB4ZTQsIDB4NjMsIDB4YWYsIDB4ZjYsIDB4MmQsIDB4ZjMsIDB4NzYsIDB4Y2EsIDB4MmEsIDB4ZjQsIDB4YzEsIDB4OWEsCi0JMHg0ZCwgMHhmMywgMHhiYiwgMHhiOCwgMHg2ZCwgMHhlZCwgMHhmNSwgMHgyOSwgMHhlMywgMHgwOSwgMHhhYiwgMHg4YywKLQkweGJkLCAweDBjLCAweDRmLCAweGNmLCAweGM5LCAweDVlLCAweDNmLCAweGY0LCAweGE5LCAweDA2LCAweDFhLCAweDczLAotCTB4NTAsIDB4MzcsIDB4ZTcsIDB4ODEsIDB4YjMsIDB4YzAsIDB4ODksIDB4NGIsIDB4YjAsIDB4NTEsIDB4YTcsIDB4NDAsCi0JMHg3MywgMHg3NCwgMHgxZiwgMHg4OCwgMHg4OSwgMHgwNywgMHg1MSwgMHhhNywgMHhjZiwgMHg5YywgMHhiZSwgMHg2NSwKLQkweDQ4LCAweDRiLCAweDlhLCAweDdhLCAweDdlLCAweDA5LCAweGYzLCAweGIxLCAweGVlLCAweDk0LCAweDhlLCAweGM3LAotCTB4Y2EsIDB4ODMsIDB4ZGMsIDB4MmIsIDB4NmQsIDB4ZGQsIDB4MjIsIDB4ZTgsIDB4NDMsIDB4NWQsIDB4OTUsIDB4MzEsCi0JMHgyMCwgMHhlZCwgMHg1ZSwgMHgxOCwgMHhhMywgMHhiNSwgMHhlYiwgMHgxOCwgMHhhZCwgMHg0YiwgMHhmMywgMHg4MywKLQkweGJjLCAweGJlLCAweDM1LCAweDQxLCAweGFjLCAweGVjLCAweDcyLCAweGI5LCAweDg3LCAweDMzLCAweDA2LCAweGViLAotCTB4NTgsIDB4MGUsIDB4NjIsIDB4YzEsIDB4YmMsIDB4ZTIsIDB4ZmIsIDB4ZWYsIDB4ZTEsIDB4NWMsIDB4OTksIDB4YTcsCi0JMHgwOSwgMHhjZiwgMHhlZiwgMHgyYiwgMHg2NiwgMHhkZiwgMHg0MywgMHg1MiwgMHhlOSwgMHg5MiwgMHhjNCwgMHg2NiwKLQkweGQwLCAweDUzLCAweDlhLCAweGExLCAweGRmLCAweGZkLCAweDY5LCAweDFkLCAweDgzLCAweDI0LCAweGRkLCAweGYzLAotCTB4ZWIsIDB4ZWQsIDB4MWQsIDB4OTcsIDB4YTEsIDB4YjcsIDB4MjMsIDB4MTcsIDB4ZDQsIDB4ZGIsIDB4YWYsIDB4MjUsCi0JMHhhMiwgMHg3YSwgMHg3YiwgMHhjNywgMHg2NSwgMHhlOCwgMHhlZCwgMHhiZSwgMHhjYiwgMHhkMiwgMHg1YiwgMHhlZSwKLQkweDhkLCAweDk4LCAweDE0LCAweGU2LCAweGM0LCAweDU2LCAweGZiLCAweDU5LCAweGUxLCAweGJhLCAweGUzLCAweDU4LAotCTB4MzMsIDB4N2YsIDB4OWUsIDB4MzUsIDB4YzcsIDB4Y2UsIDB4OWIsIDB4NWIsIDB4NmQsIDB4ZjYsIDB4YjEsIDB4MmUsCi0JMHhlNSwgMHhiYywgMHgxOSwgMHg1YiwgMHhkMSwgMHhkZSwgMHhiNiwgMHgxYiwgMHhiYiwgMHg3NCwgMHg5ZiwgMHg4OSwKLQkweGU3LCAweGMzLCAweGI4LCAweDNlLCAweGFhLCAweDNmLCAweDk0LCAweDBiLCAweGNhLCAweGMyLCAweDc3LCAweGMwLAotCTB4MmYsIDB4Y2EsIDB4NDMsIDB4YTgsIDB4NzMsIDB4ZGQsIDB4NGQsIDB4MzIsIDB4YjgsIDB4ODgsIDB4NzgsIDB4YmYsCi0JMHhkYiwgMHhjOCwgMHgyMCwgMHhjZiwgMHhiYSwgMHg0ZiwgMHg3ZiwgMHg2NywgMHhhYSwgMHg3YSwgMHg0ZiwgMHgwNSwKLQkweDcxLCAweGJlLCAweDhiLCAweDY3LCAweDM1LCAweGQ0LCAweDM1LCAweGYwLCAweDI0LCAweDE5LCAweGI2LCAweDkxLAotCTB4OGYsIDB4MmUsIDB4N2MsIDB4OWUsIDB4MWQsIDB4ZjAsIDB4ZDcsIDB4YzAsIDB4MjMsIDB4NWQsIDB4YmYsIDB4MzIsCi0JMHgyNywgMHg3YywgMHg2MSwgMHgzYywgMHg5MywgMHg0YSwgMHgxYywgMHg3ZCwgMHg0ZiwgMHgwYywgMHg0MiwgMHhjNywKLQkweDA3LCAweDg5LCAweDUxLCAweDM1LCAweGM0LCAweDNkLCAweDk0LCAweDQzLCAweGNhLCAweGU2LCAweGI2LCAweGZlLAotCTB4NWQsIDB4OGEsIDB4M2UsIDB4ZDUsIDB4MTMsIDB4ODgsIDB4ODMsIDB4MjksIDB4YWYsIDB4NjksIDB4ZDksIDB4ZTUsCi0JMHg2ZiwgMHgzYiwgMHg3ZCwgMHg1NiwgMHg3MSwgMHg4ZCwgMHg3YSwgMHhiZCwgMHhjNCwgMHg1OCwgMHhkMSwgMHgxMSwKLQkweGI1LCAweDc1LCAweGUwLCAweGJmLCAweDEzLCAweGI0LCAweDRiLCAweDU3LCAweGI4LCAweDMxLCAweDIzLCAweDZiLAotCTB4NzksIDB4YmMsIDB4NTMsIDB4NmUsIDB4N2YsIDB4MDgsIDB4N2IsIDB4Y2YsIDB4ZWYsIDB4ZmQsIDB4YWYsIDB4YTEsCi0JMHgzZSwgMHgwNSwgMHg5ZCwgMHhhNywgMHg3ZCwgMHg2NywgMHgzYywgMHg3MiwgMHg5MywgMHhlOSwgMHhkNywgMHhhZCwKLQkweGJmLCAweDU3LCAweDE2LCAweGIyLCAweDM3LCAweDk4LCAweDZmLCAweDU3LCAweGI0LCAweDNmLCAweDE5LCAweGRhLAotCTB4ZWMsIDB4MTUsIDB4ZTcsIDB4Y2MsIDB4ZmIsIDB4MTIsIDB4NDUsIDB4MWQsIDB4Y2YsIDB4NzAsIDB4YmMsIDB4OTYsCi0JMHg0OSwgMHhjNCwgMHgyMCwgMHg3NiwgMHgyNCwgMHg5NywgMHg5ZSwgMHgzMCwgMHhiMSwgMHgxYiwgMHg3NSwgMHhhYywKLQkweDFkLCAweDY3LCAweGU4LCAweDliLCAweDU4LCAweDg1LCAweGYxLCAweGViLCAweGNhLCAweDdiLCAweDEyLCAweDZiLAotCTB4Y2IsIDB4YzAsIDB4OTYsIDB4MGYsIDB4MjAsIDB4MDMsIDB4Y2QsIDB4ZTcsIDB4OTcsIDB4ODAsIDB4ZWUsIDB4ODcsCi0JMHhlNywgMHgxNywgMHhmYSwgMHgzMSwgMHg3MywgMHg2NiwgMHhkZiwgMHhkZCwgMHhjMSwgMHgxOSwgMHhmZSwgMHhiZiwKLQkweGQ4LCAweGE3LCAweDE1LCAweGQ5LCAweDY3LCAweDg4LCAweDQ3LCAweDBmLCAweDk4LCAweDdkLCAweGRlLCAweGQ0LAotCTB4ODQsIDB4NDcsIDB4MjMsIDB4NGQsIDB4M2EsIDB4ZmIsIDB4NzEsIDB4ZTIsIDB4ZDEsIDB4OWYsIDB4YWMsIDB4ZmYsCi0JMHhmOCwgMHhmMSwgMHg4OCwgMHhmYiwgMHhlYSwgMHg1ZSwgMHgxMywgMHg4NywgMHg4MiwgMHg3ZCwgMHgzYywgMHgyMiwKLQkweDJhLCAweGY3LCAweDUxLCAweGM2LCAweDdiLCAweDFmLCAweGU0LCAweDdjLCAweGEyLCAweDM4LCAweGMyLCAweDMzLAotCTB4ZTksIDB4ZDAsIDB4M2UsIDB4NmMsIDB4YTAsIDB4N2IsIDB4YjAsIDB4ZTUsIDB4ZDUsIDB4YjgsIDB4YmMsIDB4N2UsCi0JMHg1NywgMHg0MiwgMHhmZSwgMHhmNywgMHg0NiwgMHg3ZSwgMHgwZiwgMHhiMywgMHg0ZCwgMHg0ZSwgMHg4YiwgMHhlNSwKLQkweGQ3LCAweGQ2LCAweDA3LCAweDc2LCAweGU4LCAweGI1LCAweDRkLCAweDgxLCAweGRkLCAweGUxLCAweDk4LCAweDUwLAotCTB4OWYsIDB4MWQsIDB4YjQsIDB4YjMsIDB4YWQsIDB4NWIsIDB4OTYsIDB4M2EsIDB4MmYsIDB4MjcsIDB4MDYsIDB4ZGMsCi0JMHhlNiwgMHhiYywgMHhhMSwgMHhkNiwgMHg4YSwgMHgwMSwgMHgyZiwgMHg5YywgMHgwZiwgMHg1YywgMHg4ZSwgMHgwMSwKLQkweDg5LCAweGIzLCAweDlkLCAweDVhLCAweDM2LCAweDRhLCAweDQ5LCAweGM2LCAweDNlLCAweDdkLCAweDA2LCAweDNiLAotCTB4ZjksIDB4OGUsIDB4ZDgsIDB4ZDYsIDB4NDMsIDB4YmMsIDB4ZWIsIDB4MjEsIDB4ZDYsIDB4ZjUsIDB4MTAsIDB4ZmYsCi0JMHg3YSwgMHg4OCwgMHg3MSwgMHgzZCwgMHhjNCwgMHhiNiwgMHgxZSwgMHg2MiwgMHg1YiwgMHgwZiwgMHhiMSwgMHhhZCwKLQkweGQ3LCAweDZmLCAweDYyLCAweGU0LCAweDExLCAweDkzLCAweGY3LCAweGU3LCAweDc3LCAweDcyLCAweGU2LCAweDE3LAotCTB4MmEsIDB4YjAsIDB4MjUsIDB4OTMsIDB4YmMsIDB4ZTcsIDB4YTAsIDB4MGEsIDB4ZDksIDB4ZjUsIDB4NjYsIDB4N2YsCi0JMHg2MSwgMHg0ZSwgMHhiYywgMHhjNywgMHhlNCwgMHg2YywgMHg1ZSwgMHhkNywgMHg3OSwgMHg0MywgMHg1MSwgMHhiMywKLQkweGFkLCAweGMxLCAweGI3LCAweDc0LCAweGRlLCAweGM3LCAweGY4LCAweDJkLCAweGY4LCAweDI1LCAweGZhLCAweDNlLAotCTB4MTMsIDB4NzUsIDB4YjQsIDB4YWUsIDB4NzIsIDB4Y2MsIDB4YzksIDB4ODgsIDB4NTIsIDB4YjksIDB4ZWIsIDB4MzEsCi0JMHg2NiwgMHg0NywgMHgxMCwgMHgxMywgMHgyNCwgMHgyNSwgMHhhNiwgMHg3MiwgMHg2ZCwgMHhlNCwgMHhhOSwgMHhhNSwKLQkweDcyLCAweDFiLCAweGNjLCAweDVjLCAweDQ3LCAweDViLCAweDAzLCAweGRmLCAweGFhLCAweDhmLCAweDY1LCAweDViLAotCTB4ZTUsIDB4NmUsIDB4ZTYsIDB4MTMsIDB4ZTcsIDB4MWUsIDB4ZDYsIDB4ZjcsIDB4NzQsIDB4YWUsIDB4NWMsIDB4NmIsCi0JMHg0YSwgMHhlMywgMHg3YiwgMHgyMSwgMHg3YiwgMHgzNywgMHhlNiwgMHhkMywgMHhmNywgMHg4OCwgMHgxYSwgMHhmYywKLQkweDU2LCAweGU3LCAweGU1LCAweGY3LCAweDk0LCAweGUxLCAweDc3LCAweGMwLCAweGUzLCAweDE4LCAweGZiLCAweGU5LAotCTB4YmMsIDB4MzAsIDB4NzksIDB4MWQsIDB4Y2UsIDB4YTcsIDB4ZjMsIDB4N2EsIDB4NTgsIDB4NDcsIDB4ZGYsIDB4YTUsCi0JMHhjMCwgMHg1MywgMHhjNSwgMHhhNSwgMHg2MywgMHhmNCwgMHg5ZSwgMHhiOCwgMHgxYiwgMHg1ZCwgMHgzNywgMHhmYywKLQkweDI2LCAweDdlLCAweDI5LCAweDZiLCAweDc2LCAweGViLCAweGVmLCAweDY4LCAweDgxLCAweGNkLCAweDk4LCAweGQyLAotCTB4MzIsIDB4NjgsIDB4ZTcsIDB4YjgsIDB4YWYsIDB4ZjcsIDB4MjEsIDB4N2YsIDB4NTMsIDB4NWEsIDB4ZmUsIDB4OGEsCi0JMHg4OCwgMHg2MywgMHgyNiwgMHgwNywgMHhiNywgMHhhNSwgMHg2ZCwgMHg3NSwgMHhhMCwgMHg5NSwgMHhmOSwgMHhkNywKLQkweDYxLCAweDNmLCAweGM0LCAweDNkLCAweGFlLCAweGQ3LCAweDZjLCAweGM3LCAweDk5LCAweDU3LCAweDBiLCAweGYxLAotCTB4NGMsIDB4YjYsIDB4MDQsIDB4ZjksIDB4YjYsIDB4MGYsIDB4YTMsIDB4NGIsIDB4YWQsIDB4NGQsIDB4YmEsIDB4MTQsCi0JMHhlZSwgMHg5MywgMHhmYiwgMHhlNywgMHg3MywgMHhlZCwgMHgzYiwgMHgxNSwgMHg4YiwgMHg3ZSwgMHhlNCwgMHhmYiwKLQkweDQ4LCAweDQzLCAweDM2LCAweDc4LCAweGI3LCAweGU0LCAweDhiLCAweDkwLCAweDQxLCAweGZkLCAweDlkLCAweDAyLAotCTB4N2EsIDB4NTQsIDB4YWYsIDB4MGYsIDB4MzMsIDB4YzcsIDB4YmMsIDB4ZjMsIDB4MGIsIDB4ZTYsIDB4ZGUsIDB4ODIsCi0JMHgzYywgMHhjYywgMHhmYywgMHg4MywgMHhiZCwgMHgyYSwgMHhmZiwgMHgzMCwgMHgwYywgMHg1OSwgMHg4MSwgMHgwZiwKLQkweGUwLCAweDc1LCAweDY4LCAweDlmLCAweDRlLCAweGI5LCAweGY0LCAweDA3LCAweDlhLCAweGJmLCAweGJmLCAweDNjLAotCTB4ZGEsIDB4MTYsIDB4ZjAsIDB4ZTEsIDB4ZWQsIDB4ZDYsIDB4ZTAsIDB4MWIsIDB4YzQsIDB4ZGYsIDB4MjYsIDB4NTcsCi0JMHg5NiwgMHgzOSwgMHhmZSwgMHg3ZiwgMHg4YywgMHhhYywgMHgxYywgMHg4NiwgMHg2ZCwgMHgxZSwgMHg4NiwgMHgyYywKLQkweDIyLCAweDI2LCAweGQ3LCAweGYzLCAweDFkLCAweDk2LCAweGQyLCAweGQzLCAweDBiLCAweDlkLCAweDJiLCAweGZiLAotCTB4YTMsIDB4ZWUsIDB4NTgsIDB4ZDgsIDB4ZmYsIDB4YjEsIDB4YTYsIDB4ZmUsIDB4OGYsIDB4YTEsIDB4ZmYsIDB4MGIsCi0JMHg0ZCwgMHhmZCwgMHgxZiwgMHg4YiwgMHhmNCwgMHgzZiwgMHhkYSwgMHhkNCwgMHgxZiwgMHgzMSwgMHhlMiwgMHhkMywKLQkweGZmLCAweGRjLCAweGQ0LCAweGZmLCAweDY4LCAweGE0LCAweGZmLCAweDZjLCAweDUzLCAweGZmLCAweDU5LCAweGY0LAotCTB4N2YsIDB4YWQsIDB4YTksIDB4M2YsIDB4ZWEsIDB4OGUsIDB4YjUsIDB4OTgsIDB4ZWYsIDB4NjIsIDB4YzQsIDB4ZDgsCi0JMHg3ZCwgMHgyNiwgMHgxNiwgMHhjNywgMHhiMywgMHhkNiwgMHhmYywgMHhhZCwgMHg4NSwgMHg3MiwgMHhkNywgMHg4MywKLQkweDMzLCAweDA4LCAweGVmLCAweGI0LCAweDUxLCAweDVmLCAweGYzLCAweGQwLCAweGQ3LCAweDY1LCAweDVmLCAweDI2LAotCTB4OTAsIDB4YzcsIDB4YTgsIDB4MmMsIDB4MTIsIDB4MWYsIDB4MmEsIDB4MTIsIDB4NzMsIDB4N2QsIDB4ZmEsIDB4NDcsCi0JMHg1NiwgMHhiOSwgMHgxYSwgMHhkYSwgMHgyNCwgMHhkZSwgMHg1YiwgMHhlMiwgMHg3ZCwgMHhkNywgMHhjMCwgMHhmNiwKLQkweGM2LCAweGRkLCAweDQ1LCAweDEzLCAweDgzLCAweDVkLCAweGQxLCAweDA2LCAweGRhLCAweDgxLCAweDk3LCAweDIxLAotCTB4NjYsIDB4Y2EsIDB4ZTEsIDB4NDAsIDB4NmYsIDB4MjgsIDB4YmYsIDB4OWMsIDB4ZGYsIDB4ZTgsIDB4MGYsIDB4NjUsCi0JMHhkNSwgMHhhYywgMHgzMywgMHhiYywgMHgwYSwgMHhkNywgMHhkMiwgMHhhYiwgMHg3MiwgMHg1YiwgMHhiMSwgMHg0YiwKLQkweGMwLCAweGI1LCAweDkxLCAweDA2LCAweGFlLCAweDdkLCAweDUxLCAweGU2LCAweDFhLCAweGYxLCAweGY2LCAweDE5LAotCTB4ZDksIDB4ZWYsIDB4ZWQsIDB4ZTEsIDB4M2QsIDB4OWQsIDB4YzMsIDB4NzksIDB4ZjksIDB4NjgsIDB4ZTIsIDB4ZWQsCi0JMHgzZCwgMHgwZCwgMHgzYiwgMHhjOSwgMHgzYiwgMHgxZCwgMHhlOSwgMHg4MywgMHhiYywgMHg4MywgMHgxYiwgMHhlNiwKLQkweDY2LCAweDI3LCAweGJkLCAweDVmLCAweGM3LCAweGZlLCAweDY5LCAweDMzLCAweDJmLCAweDM3LCAweGRlLCAweGU2LAotCTB4N2MsIDB4NDksIDB4ZDksIDB4MWYsIDB4ZGMsIDB4NzcsIDB4NjgsIDB4Y2MsIDB4NWIsIDB4NjksIDB4Y2MsIDB4OWIsCi0JMHgzMiwgMHhmYSwgMHg0NiwgMHgxYiwgMHhiYywgMHg2YywgMHgyZiwgMHg4YiwgMHhiMCwgMHg5NywgMHg2MywgMHg4OCwKLQkweGI5LCAweDE3LCAweGJkLCAweGI1LCAweGYyLCAweGEzLCAweDk3LCAweDZiLCAweDJmLCAweDliLCAweGYzLCAweGNjLAotCTB4Y2QsIDB4ZjYsIDB4OTIsIDB4ZWIsIDB4MzQsIDB4ZTcsIDB4OTYsIDB4ZDMsIDB4NGQsIDB4ZjgsIDB4NGYsIDB4NzksCi0JMHgzYSwgMHg2NywgMHg3YywgMHg2YSwgMHgzYywgMHhhYiwgMHhlNywgMHhhMCwgMHg4ZiwgMHg0YSwgMHhjNiwgMHhiNCwKLQkweGZjLCAweGIyLCAweDFjLCAweGM2LCAweDk2LCAweGY3LCAweDM0LCAweDYyLCAweGNiLCAweGU1LCAweDc4LCAweDEwLAotCTB4YmUsIDB4NmIsIDB4ZmYsIDB4NjcsIDB4MGMsIDB4M2UsIDB4ZDIsIDB4NDcsIDB4NzYsIDB4YWMsIDB4YjIsIDB4YjcsCi0JMHg1YiwgMHhlZCwgMHhkNSwgMHg2ZCwgMHhjYywgMHg5NywgMHg1ZSwgMHgyYiwgMHhiNywgMHhlYSwgMHgzOCwgMHhmZSwKLQkweDhjLCAweGM5LCAweDRkLCAweGNkLCAweDY5LCAweGZmLCAweDlmLCAweGRmLCAweDBiLCAweGNhLCAweGQ5LCAweDRkLAotCTB4YzYsIDB4ZGYsIDB4YmIsIDB4MTgsIDB4YWUsIDB4YWUsIDB4OGMsIDB4NGQsIDB4OTUsIDB4M2EsIDB4ODgsIDB4YjEsCi0JMHg4YywgMHg0ZCwgMHhmYiwgMHhkYiwgMHg4OSwgMHhhMSwgMHgwNSwgMHhmZiwgMHg4MiwgMHhlMywgMHgzMSwgMHg4ZSwKLQkweGUzLCAweGQ5LCAweDQ3LCAweGM3LCAweGExLCAweGU4LCAweGI3LCAweDY4LCAweGM2LCAweDA3LCAweDcxLCAweDY4LAotCTB4YzEsIDB4ZmYsIDB4NzEsIDB4NWIsIDB4ODAsIDB4ODMsIDB4MTcsIDB4OGEsIDB4NTksIDB4M2UsIDB4ZGYsIDB4Y2UsCi0JMHhiYywgMHhkZSwgMHhhMiwgMHg3NywgMHgzMSwgMHg1YSwgMHg1NywgMHhjNywgMHhiZCwgMHhiMSwgMHg1NSwgMHg3MSwKLQkweGFmLCAweDZkLCAweGUyLCAweGRhLCAweDVmLCAweGQyLCAweDcxLCAweDZmLCAweGMwLCAweDYzLCAweGVlLCAweDI1LAotCTB4MWEsIDB4NDcsIDB4YjksIDB4YzAsIDB4NDIsIDB4N2UsIDB4NTMsIDB4MjEsIDB4M2UsIDB4ZDAsIDB4NDcsIDB4ODEsCi0JMHg5ZiwgMHgzNSwgMHhmZCwgMHg4YiwgMHhlMCwgMHg3MywgMHg3MiwgMHgwZCwgMHhiOSwgMHhmOSwgMHhiOCwgMHhlZCwKLQkweDQ0LCAweGI4LCAweGY3LCAweDczLCAweDEyLCAweGU0LCAweGViLCAweDc2LCAweDgzLCAweDE2LCAweGM2LCAweDU2LAotCTB4NzEsIDB4MjMsIDB4MGYsIDB4M2YsIDB4MzUsIDB4ZjcsIDB4MmEsIDB4YzMsIDB4N2UsIDB4NjEsIDB4MWMsIDB4ZGYsCi0JMHhmOCwgMHhlZSwgMHg1YSwgMHhjOSwgMHhhZiwgMHhjOCwgMHg5ZiwgMHg3NCwgMHgzMywgMHgwZCwgMHg4ZCwgMHg3MywKLQkweGNmLCAweDVmLCAweGM2LCAweDc3LCAweDhiLCAweDBmLCAweDczLCAweDNmLCAweGEyLCAweGQ5LCAweGFlLCAweGYxLAotCTB4YmIsIDB4MjksIDB4YmYsIDB4OTUsIDB4OGEsIDB4NzUsIDB4NjcsIDB4OWYsIDB4MGIsIDB4MWQsIDB4ZTAsIDB4YmQsCi0JMHhlMSwgMHgyOCwgMHhiZSwgMHgyNiwgMHhhNCwgMHgzNCwgMHgyYiwgMHg4OSwgMHg2NCwgMHg4ZSwgMHhkZiwgMHgwMCwKLQkweDY4LCAweGZmLCAweDdmLCAweDY4LCAweGY2LCAweDk5LCAweDkyLCAweDdkLCAweDMzLCAweDQxLCAweGNlLCAweDUzLAotCTB4NWQsIDB4ZjAsIDB4NWUsIDB4ZGMsIDB4ZTMsIDB4ZTAsIDB4NDMsIDB4ZTYsIDB4NTAsIDB4OTgsIDB4ZjMsIDB4NTQsCi0JMHhjMSwgMHhiZCwgMHhiOCwgMHg0MywgMHgxZiwgMHhkZCwgMHhiZCwgMHgzOCwgMHhjZSwgMHg2ZiwgMHhjYiwgMHg5ZSwKLQkweDM1LCAweGVlLCAweGM1LCAweGM1LCAweDJlLCAweGYxLCAweDVlLCAweGRjLCAweDI2LCAweDlkLCAweGYzLCAweGU0LAotCTB4M2MsIDB4NDEsIDB4Y2UsIDB4OTMsIDB4ZTUsIDB4YWQsIDB4MDMsIDB4Y2MsIDB4OTUsIDB4ZjAsIDB4ZWUsIDB4ZGIsCi0JMHhhMCwgMHhiZSwgMHgyZiwgMHhiYywgMHg3NSwgMHhlMCwgMHhlNywgMHgxMSwgMHhhMywgMHhmYywgMHg3NSwgMHhmYiwKLQkweGM3LCAweDFmLCAweGEzLCAweDcwLCAweDJmLCAweGJmLCAweDExLCAweDdjLCAweGRmLCAweDk1LCAweGNiLCAweGM5LAotCTB4MDMsIDB4N2MsIDB4YjgsIDB4YmMsIDB4ZTYsIDB4M2UsIDB4OWQsIDB4ZDcsIDB4N2MsIDB4YTcsIDB4M2QsIDB4OWEsCi0JMHhkNywgMHg1NCwgMHgxNywgMHhiOSwgMHgxYiwgMHhiNiwgMHg2ZiwgMHg4ZCwgMHhiYywgMHg2NiwgMHgzYywgMHg3MiwKLQkweDM3LCAweDJjLCAweDZlLCAweGVlLCAweDg2LCAweDZkLCAweDcyLCAweDExLCAweDRiLCAweDlhLCAweDNjLCAweGE2LAotCTB4YmEsIDB4ZTAsIDB4ZGQsIDB4YjAsIDB4Y2UsIDB4MGQsIDB4MWYsIDB4M2UsIDB4OGYsIDB4YjksIDB4ZWEsIDB4NmUsCi0JMHgxOCwgMHg2YywgMHhkZCwgMHgxNiwgMHg0OSwgMHg1ZiwgMHg1NiwgMHhkYywgMHhmMywgMHg2MSwgMHg2MiwgMHgxZSwKLQkweGRlLCAweGFiLCAweDZmLCAweGMxLCAweDllLCAweGUzLCAweGIyLCAweDI3LCAweDQ5LCAweGY5LCAweGU0LCAweGRkLAotCTB4YzYsIDB4M2UsIDB4ZTgsIDB4MDIsIDB4OWUsIDB4M2UsIDB4Y2IsIDB4ZmQsIDB4M2MsIDB4MjMsIDB4NmIsIDB4YTQsCi0JMHg2ZiwgMHhlNSwgMHgzZCwgMHg4NCwgMHhlNSwgMHgzYiwgMHhiZCwgMHg4OSwgMHhjNiwgMHg5ZCwgMHhkZSwgMHgyOSwKLQkweGM4LCAweDhkLCAweDlhLCAweDQ5LCAweGM4LCAweDdjLCAweDQ0LCAweGE2LCAweDI2LCAweDNkLCAweGY4LCAweDRiLAotCTB4YjMsIDB4OGUsIDB4NjksIDB4ZTcsIDB4ZmYsIDB4ZWYsIDB4NDgsIDB4MDIsIDB4ZjMsIDB4NzgsIDB4MGYsIDB4YjgsCi0JMHg0MywgMHg2MiwgMHhiMywgMHhjMSwgMHgzNywgMHhjYiwgMHhlMCwgMHhmZiwgMHhiOCwgMHhhNCwgMHhkMCwgMHg4NywKLQkweDc3LCAweDNjLCAweGUzLCAweGIyLCAweDVmLCAweGU3LCAweDJjLCAweDQyLCAweDU5LCAweGZlLCAweDM1LCAweGYwLAotCTB4NzgsIDB4NzMsIDB4N2UsIDB4YjksIDB4OWMsIDB4NWMsIDB4YzMsIDB4ZWUsIDB4MjcsIDB4YTUsIDB4M2MsIDB4NDMsCi0JMHg3OSwgMHhiZSwgMHhjMSwgMHhmYywgMHhmZiwgMHg4MiwgMHhkMywgMHg1MiwgMHhmNiwgMHg0ZiwgMHg5OSwgMHhmOCwKLQkweDQyLCAweDdmLCAweGRiLCAweDAxLCAweDJmLCAweGI3LCAweDE4LCAweDFiLCAweDhjLCAweDY3LCAweDc1LCAweDBiLAotCTB4NmQsIDB4MWUsIDB4ZDYsIDB4MzgsIDB4MmUsIDB4YzMsIDB4ZDMsIDB4M2IsIDB4NTIsIDB4N2IsIDB4ODEsIDB4NzcsCi0JMHg2MywgMHg3YSwgMHhjZCwgMHhjYiwgMHhlMSwgMHhiOSwgMHg3NSwgMHg5ZSwgMHhlZiwgMHg4ZCwgMHg5NywgMHhjYSwKLQkweGY3LCAweGQwLCAweDNmLCAweGFlLCAweDYyLCAweDdmLCAweDViLCAweDIwLCAweDFmLCAweDVmLCAweDk1LCAweGUyLAotCTB4YjEsIDB4NmIsIDB4NjUsIDB4ZjgsIDB4NjgsIDB4MDYsIDB4ZjQsIDB4YmMsIDB4NWYsIDB4MmYsIDB4NjcsIDB4ZTEsCi0JMHg0YiwgMHgzZiwgMHhjZCwgMHg3YiwgMHg2MywgMHhjMCwgMHg1MCwgMHhmMCwgMHhlZCwgMHhmOSwgMHg1NSwgMHhkZiwKLQkweGIxLCAweGEzLCAweDc3LCAweGNkLCAweGZhLCAweDFiLCAweDc3LCAweDg3LCAweDllLCAweGY1LCAweDI1LCAweGQxLAotCTB4NDksIDB4OWEsIDB4NjcsIDB4OTYsIDB4ZWYsIDB4OGYsIDB4MmYsIDB4ZmEsIDB4YmIsIDB4YjQsIDB4NmQsIDB4N2IsCi0JMHhjNiwgMHg1ZiwgMHg5MSwgMHhmYiwgMHhkMSwgMHg2NywgMHgzOCwgMHg1ZSwgMHhmYiwgMHgxZSwgMHhlYywgMHhkYiwKLQkweDM5LCAweDhiLCAweGY2LCAweDZkLCAweGNhLCAweDkzLCAweGFiLCAweDYzLCAweGMyLCAweGYzLCAweDEwLCAweDBiLAotCTB4M2MsIDB4ZDAsIDB4NzcsIDB4MzgsIDB4ODIsIDB4ZWYsIDB4ZmIsIDB4M2QsIDB4ZmEsIDB4NWMsIDB4MDMsIDB4YWMsCi0JMHg1OCwgMHg4OCwgMHhkYywgMHhjMSwgMHg1OCwgMHgzZSwgMHhkYiwgMHhlMCwgMHg2ZSwgMHg0NiwgMHg3MCwgMHgxNiwKLQkweGMxLCAweGZkLCAweDExLCAweGVkLCAweDZmLCAweDFlLCAweGRjLCAweGUzLCAweDA2LCAweGY3LCAweDQ3LCAweDdhLAotCTB4NjcsIDB4NTksIDB4ZDcsIDB4ZDUsIDB4NjQsIDB4ZmIsIDB4MTIsIDB4OTAsIDB4MDEsIDB4ZGUsIDB4M2IsIDB4ZTIsCi0JMHhiZCwgMHg3MSwgMHhkMiwgMHhhYywgMHg3MywgMHgxZCwgMHhmZiwgMHg0NywgMHhkZCwgMHhkNSwgMHhjNywgMHhiNiwKLQkweDc1LCAweDVkLCAweGY3LCAweGMzLCAweDQ3LCAweGVhLCAweGMzLCAweGI0LCAweDJjLCAweDUzLCAweDMyLCAweDI1LAotCTB4ZDMsIDB4OTYsIDB4MmMsIDB4YmYsIDB4MjcsIDB4M2QsIDB4NTksIDB4NzIsIDB4YWMsIDB4MTQsIDB4YWMsIDB4YWIsCi0JMHhhZCwgMHgwMiwgMHg0NiwgMHhhNCwgMHgwYywgMHg0OSwgMHg3ZiwgMHhiNCwgMHgwOCwgMHgwNiwgMHhmYSwgMHhhMywKLQkweDk5LCAweDhiLCAweDY2LCAweGFiLCAweDRiLCAweGQ5LCAweDRlLCAweDBhLCAweGY0LCAweDBmLCAweGI3LCAweGM1LAotCTB4ODAsIDB4NmMsIDB4NTgsIDB4NjAsIDB4ODYsIDB4YjQsIDB4MTIsIDB4NjMsIDB4NTYsIDB4NGMsIDB4ZDYsIDB4NjYsCi0JMHg4NSwgMHgwYywgMHhkOCwgMHgzMCwgMHg0ZSwgMHg1NCwgMHg5YywgMHgxNCwgMHg1MCwgMHhjNiwgMHgwNCwgMHg2OSwKLQkweDgzLCAweGEyLCAweDU4LCAweDYxLCAweDQ1LCAweDc2LCAweDM2LCAweDZjLCAweDdmLCAweDY1LCAweDQzLCAweGQwLAotCTB4MDUsIDB4OWIsIDB4YjMsIDB4MzgsIDB4NzYsIDB4YjAsIDB4MDYsIDB4NDUsIDB4ZDYsIDB4N2QsIDB4NjIsIDB4MTgsCi0JMHhkMCwgMHgwZCwgMHhkYywgMHhmOSwgMHhkZCwgMHgwZiwgMHhmMiwgMHhmMSwgMHhmMSwgMHg1MSwgMHgxZiwgMHg4OSwKLQkweDMzLCAweDYwLCAweDAyLCAweDA0LCAweGJlLCAweGY3LCAweDc4LCAweGRmLCAweDdiLCAweGY3LCAweDllLCAweDdiLAotCTB4Y2UsIDB4YjksIDB4YmYsIDB4NzMsIDB4ZWUsIDB4MzksIDB4ODcsIDB4OWUsIDB4N2IsIDB4ZGIsIDB4OWIsIDB4ZjMsCi0JMHhiOSwgMHhjYSwgMHg3NywgMHg4ZSwgMHg4YSwgMHg3NywgMHgwZSwgMHgyOCwgMHg5ZCwgMHhhNSwgMHhlMywgMHhjNSwKLQkweDYzLCAweGM2LCAweDZjLCAweDYxLCAweDIyLCAweGUyLCAweDY3LCAweGZlLCAweDllLCAweGFkLCAweGMyLCAweGJlLAotCTB4NmUsIDB4ODcsIDB4ZTEsIDB4ZDYsIDB4YTIsIDB4NjcsIDB4YmMsIDB4ODUsIDB4OWUsIDB4Y2QsIDB4MzIsIDB4YzEsCi0JMHhmNiwgMHg3OCwgMHg1ZCwgMHg3NywgMHg0YiwgMHhkYSwgMHhjOSwgMHhlYiwgMHg4OCwgMHg4NSwgMHhkNywgMHgzMSwKLQkweDBlLCAweDkyLCAweDc2LCAweDc1LCAweDE5LCAweGJhLCAweGUyLCAweDhjLCAweDZmLCAweDY4LCAweGQwLCAweGVlLAotCTB4NzQsIDB4OWQsIDB4NzYsIDB4M2IsIDB4ZmYsIDB4MWYsIDB4ZDEsIDB4ZWUsIDB4MWQsIDB4ODEsIDB4N2YsIDB4NWYsCi0JMHhhZCwgMHgyMiwgMHg2ZSwgMHg0ZCwgMHg2MywgMHgwMCwgMHg5ZCwgMHgzYiwgMHgwNCwgMHgzYSwgMHg0MiwgMHg5ZiwKLQkweDVhLCAweGU1LCAweDE1LCAweDgyLCAweDRlLCAweDQ1LCAweDVjLCAweDcxLCAweGFkLCAweGY2LCAweDVhLCAweGI0LAotCTB4ZWUsIDB4YTcsIDB4NjQsIDB4YmIsIDB4MDQsIDB4ZjYsIDB4MDksIDB4ZmMsIDB4NzksIDB4ZWQsIDB4ZDcsIDB4YzgsCi0JMHg2MywgMHgxZiwgMHg2YiwgMHg4ZCwgMHgwNCwgMHg1NiwgMHg3MiwgMHhkYiwgMHgyNywgMHgwYywgMHgwOCwgMHgxZCwKLQkweGY2LCAweGM5LCAweGIxLCAweDRkLCAweGRhLCAweDI3LCAweGU3LCAweGE1LCAweDdkLCAweDkyLCAweGRkLCAweGI4LAotCTB4N2QsIDB4YjIsIDB4YmIsIDB4MjUsIDB4YWUsIDB4YWIsIDB4MzEsIDB4OWUsIDB4Y2QsIDB4ZGIsIDB4MjcsIDB4YzYsCi0JMHg5YSwgMHhmNiwgMHhjOSwgMHg5MCwgMHhjMywgMHgxNywgMHg4MywgMHhmZSwgMHhmZSwgMHgwNiwgMHg2NSwgMHg4ZiwKLQkweDQzLCAweGM3LCAweDY5LCAweDNhLCAweDgzLCAweGM2LCAweGM3LCAweDVkLCAweDdlLCAweGUxLCAweDRmLCAweDkzLAotCTB4ZDYsIDB4YmYsIDB4ZjgsIDB4M2YsIDB4YTYsIDB4ZjUsIDB4NTAsIDB4OGIsIDB4Y2YsIDB4YmIsIDB4MzEsIDB4MWUsCi0JMHgwYSwgMHhlZiwgMHhkOCwgMHgxNCwgMHg4ZSwgMHg3NywgMHhkMywgMHg3YSwgMHhhOCwgMHhhZCwgMHhlZiwgMHhiNCwKLQkweDdkLCAweGNjLCAweDYyLCAweGIzLCAweGVmLCAweDc0LCAweGQ0LCAweDY4LCAweGE3LCAweGRiLCAweGZmLCAweGQ4LAotCTB4ZTEsIDB4NTMsIDB4NzUsIDB4ZWEsIDB4NzcsIDB4YzgsIDB4MTQsIDB4ZjksIDB4OGUsIDB4NGQsIDB4ZTgsIDB4NzcsCi0JMHg0MSwgMHg5NiwgMHhhYywgMHg2YywgMHg5NiwgMHg2MCwgMHgzMywgMHhlMSwgMHg3ZCwgMHgxMSwgMHgyMSwgMHg2YiwKLQkweDJlLCAweGJjLCAweGM1LCAweGVmLCAweDYzLCAweDdhLCAweGJlLCAweGY4LCAweDg3LCAweDYyLCAweDlkLCAweDkyLAotCTB4ZmUsIDB4MDcsIDB4YjQsIDB4MGYsIDB4ZmIsIDB4Y2UsIDB4ODgsIDB4YjYsIDB4MzIsIDB4YmUsIDB4NDksIDB4ZjksCi0JMHgyMywgMHgxNCwgMHhmNiwgMHg2ZiwgMHhlNywgMHg4NywgMHg2OCwgMHg1ZCwgMHhmMywgMHgzNiwgMHg2NywgMHgyYiwKLQkweDY4LCAweDE5LCAweGRmLCAweGNiLCAweGYzLCAweDEyLCAweDY5LCAweGIyLCAweGI1LCAweGEwLCAweDNmLCAweGNmLAotCTB4MzMsIDB4MmUsIDB4MTgsIDB4YWQsIDB4NjMsIDB4ODIsIDB4ZTYsIDB4YjksIDB4YjksIDB4MjgsIDB4NmMsIDB4M2EsCi0JMHhhZCwgMHgzYiwgMHg1NywgMHg2NCwgMHhlYywgMHhhOSwgMHhiOCwgMHgwZSwgMHg5YywgMHhhNiwgMHg3NSwgMHhhNywKLQkweDFiLCAweDA3LCAweGVmLCAweGY1LCAweGUwLCAweDBiLCAweGNmLCAweGRjLCAweDRmLCAweDNkLCAweDc3LCAweDI2LAotCTB4NjIsIDB4Y2UsIDB4NTMsIDB4OWUsIDB4NzMsIDB4NTcsIDB4Y2YsIDB4ZTEsIDB4Y2EsIDB4MzYsIDB4ZGEsIDB4Y2EsCi0JMHhmYiwgMHg1MywgMHg2MiwgMHg1YywgMHhkZiwgMHhmYywgMHg2MiwgMHgwMiwgMHhiOSwgMHg2YSwgMHhmNSwgMHhmYywKLQkweDIxLCAweDc3LCAweGNlLCAweDE0LCAweGQ2LCAweDAxLCAweDJkLCAweDg3LCAweDNhLCAweDNmLCAweDFiLCAweGI0LAotCTB4MTgsIDB4ZjEsIDB4YzgsIDB4OTksIDB4NzIsIDB4YWUsIDB4MjUsIDB4YjgsIDB4Y2YsIDB4NGQsIDB4OGIsIDB4YzYsCi0JMHgzYSwgMHgzMiwgMHhhNywgMHhkNiwgMHg5MSwgMHg0NSwgMHg4NywgMHgxZSwgMHg2ZiwgMHhjNSwgMHhlZCwgMHhmZCwKLQkweDFlLCAweGI4LCAweGRkLCAweDJiLCAweDZmLCAweDBhLCAweDdkLCAweDdhLCAweDkyLCAweDcxLCAweGM4LCAweDY3LAotCTB4ODAsIDB4NDMsIDB4NDIsIDB4YzgsIDB4NWIsIDB4OTIsIDB4NTgsIDB4MDQsIDB4ZGYsIDB4MTcsIDB4MTksIDB4OGYsCi0JMHg0NCwgMHg5OCwgMHg1NywgMHg3ZSwgMHg0NCwgMHhlNywgMHgxOCwgMHg2YiwgMHg1ZiwgMHhhNywgMHhmZCwgMHhjYSwKLQkweDNlLCAweDgzLCAweGRjLCAweGVhLCAweDM4LCAweDUzLCAweGM0LCAweGYxLCAweGZiLCAweDI4LCAweGZiLCAweDk4LAotCTB4MzUsIDB4MTksIDB4YTcsIDB4MWYsIDB4ZDEsIDB4NTksIDB4MTEsIDB4MzMsIDB4ODMsIDB4ZmQsIDB4M2QsIDB4YzQsCi0JMHgxYywgMHgzYywgMHgyMCwgMHhkZSwgMHgyZiwgMHg3ZCwgMHgxOSwgMHhmNywgMHgyMywgMHhhNiwgMHg2ZSwgMHhlMywKLQkweGYxLCAweGZiLCAweDJhLCAweGI3LCAweDhlLCAweGRiLCAweGUxLCAweDlkLCAweDRiLCAweDRhLCAweGE2LCAweGM0LAotCTB4MzUsIDB4YmUsIDB4ZmYsIDB4NDksIDB4YTMsIDB4ZjUsIDB4ZmUsIDB4YjgsIDB4OTEsIDB4YWEsIDB4YTYsIDB4OGMsCi0JMHg0NCwgMHgwNSwgMHhlZCwgMHg5ZSwgMHgzNCwgMHg5MiwgMHg1NSwgMHhkOCwgMHg5MCwgMHg5YSwgMHg0NywgMHhhYywKLQkweDI4LCAweGU0LCAweDZkLCAweDk1LCAweGQ2LCAweGRmLCAweDhiLCAweDU4LCAweDI0LCAweDU3LCAweDllLCAweGM0LAotCTB4MDYsIDB4ZmEsIDB4N2QsIDB4YjgsIDB4YTksIDB4ZGYsIDB4OWEsIDB4YmUsIDB4MzgsIDB4ODYsIDB4YmYsIDB4ZTcsCi0JMHgxNSwgMHhhNiwgMHhhOSwgMHhjNiwgMHhiNSwgMHg0MSwgMHhmOCwgMHhkNywgMHgyNywgMHhiMywgMHhiNCwgMHgxNiwKLQkweGFlLCAweGI1LCAweDVhLCAweDcwLCAweGVkLCAweGUyLCAweGJhLCAweGZkLCAweGZlLCAweGE0LCAweDMyLCAweDJlLAotCTB4ZjMsIDB4YTMsIDB4ZmQsIDB4YjYsIDB4YzAsIDB4YWYsIDB4ZGMsIDB4ZWYsIDB4MjYsIDB4NmMsIDB4ZWIsIDB4ZTIsCi0JMHgyOSwgMHhiNCwgMHhkMSwgMHg3ZSwgMHg3MCwgMHhlZCwgMHgwNywgMHhlYiwgMHg1NSwgMHhmMSwgMHhjMCwgMHgzYSwKLQkweDNlLCAweDIxLCAweDg4LCAweDdjLCAweGFmLCAweDkwLCAweDhjLCAweDZiLCAweDg1LCAweDhkLCAweGI1LCAweGMyLAotCTB4ZmQsIDB4ODMsIDB4YmQsIDB4MDUsIDB4OWYsIDB4OGYsIDB4YjAsIDB4YjcsIDB4Y2MsIDB4MjQsIDB4NDksIDB4NWYsCi0JMHhmNywgMHg5OSwgMHhhYSwgMHhkMywgMHhiZiwgMHhlYiwgMHg5NSwgMHg0YiwgMHgzOSwgMHhlYSwgMHg5MSwgMHg0YiwKLQkweGU5LCAweDk0LCAweGI1LCAweDgwLCAweDQzLCAweGQ2LCAweDIyLCAweDBlLCAweGRjLCAweDM2LCAweGNjLCAweDc2LAotCTB4NGIsIDB4MGYsIDB4ZWIsIDB4OTAsIDB4MWUsIDB4YjEsIDB4NmQsIDB4ZTIsIDB4YmYsIDB4ZWEsIDB4YjQsIDB4NWIsCi0JMHhkYywgMHg3OSwgMHhmMSwgMHg5MCwgMHgzYiwgMHg2MCwgMHgzMywgMHg2OSwgMHhjMywgMHhhNCwgMHg0YSwgMHhmNSwKLQkweDljLCAweDdhLCAweDFlLCAweDc3LCAweDIzLCAweDZmLCAweGIxLCAweGQyLCAweDkyLCAweDYzLCAweGU5LCAweGQ1LAotCTB4ZGYsIDB4OTEsIDB4OTYsIDB4ZmUsIDB4NjIsIDB4ZmQsIDB4OGEsIDB4YjcsIDB4YzUsIDB4NzQsIDB4NWUsIDB4NzYsCi0JMHhkNSwgMHhmZCwgMHhlYSwgMHg5ZiwgMHg1YiwgMHg5ZiwgMHhlMSwgMHg1ZCwgMHhhMywgMHhjMiwgMHhlNywgMHg5ZCwKLQkweGFkLCAweGViLCAweGIyLCAweDE5LCAweGQ5LCAweGRmLCAweDQyLCAweGIzLCAweDlkLCAweGUxLCAweGJmLCAweDQyLAotCTB4OGEsIDB4NzYsIDB4ZGUsIDB4YmEsIDB4N2QsIDB4NzMsIDB4ZmUsIDB4YjMsIDB4YWQsIDB4NmUsIDB4MWMsIDB4ZGMsCi0JMHgyNywgMHhmZCwgMHg2MiwgMHg3MywgMHgyYSwgMHgwZSwgMHg3YiwgMHg0MCwgMHhkOSwgMHg3YiwgMHhlYiwgMHhmMSwKLQkweDNiLCAweGFlLCAweGNkLCAweDI5LCAweDVmLCAweGEyLCAweDY1LCAweDk2LCAweDA5LCAweDdjLCAweDdlLCAweGZjLAotCTB4NTQsIDB4ODcsIDB4MWQsIDB4NTIsIDB4N2IsIDB4NTksIDB4ZDgsIDB4YWYsIDB4MDIsIDB4ZGYsIDB4ZWIsIDB4ZTcsCi0JMHg0MywgMHg2NywgMHg2ZiwgMHg2NCwgMHhjZSwgMHhjYywgMHg5NiwgMHgzOSwgMHg5MywgMHg3YywgMHgwNSwgMHg1YiwKLQkweDBiLCAweGYxLCAweGM1LCAweDUzLCAweGFlLCAweDE4LCAweGVmLCAweDRmLCAweDQyLCAweDhiLCAweDVlLCAweDhmLAotCTB4YjgsIDB4NjcsIDB4YzQsIDB4MmQsIDB4YjcsIDB4ZWIsIDB4ZTcsIDB4MWQsIDB4MDcsIDB4MmUsIDB4NDcsIDB4N2YsCi0JMHg2YiwgMHhiNSwgMHg1NywgMHhhMiwgMHhiYiwgMHhlNSwgMHg1YSwgMHg1YywgMHhmNSwgMHhjNiwgMHg0OCwgMHhhMSwKLQkweDBkLCAweGY3LCAweGNmLCAweGJkLCAweGY2LCAweGVlLCAweGRhLCAweGUwLCAweGRhLCAweDJiLCAweGVhLCAweDhiLAotCTB4ZjgsIDB4MGUsIDB4MDksIDB4MWQsIDB4ZDAsIDB4NDMsIDB4OTUsIDB4MTIsIDB4ZTIsIDB4YWYsIDB4M2YsIDB4MGIsCi0JMHg5OSwgMHg2NywgMHgzZCwgMHhlYiwgMHhjOCwgMHg0OSwgMHhmMywgMHg5ZSwgMHhjNywgMHhmYSwgMHg5ZSwgMHg0YSwKLQkweDIwLCAweDg2LCAweGJkLCAweDNmLCAweGM0LCAweDk2LCAweGY0LCAweGIzLCAweGVlLCAweDQxLCAweGZiLCAweDcxLAotCTB4ZjMsIDB4MTYsIDB4ZmMsIDB4YmQsIDB4Y2EsIDB4ZmYsIDB4OTQsIDB4NTIsIDB4ZWIsIDB4Y2IsIDB4YTEsIDB4MGQsCi0JMHhlYywgMHhhZCwgMHg2YywgMHg0ZSwgMHg0ZiwgMHg1YiwgMHhlNiwgMHgwYSwgMHg2MSwgMHhkZiwgMHgwNywgMHhmMSwKLQkweGMyLCAweGM3LCAweDdhLCAweGE5LCAweGY3LCAweDJiLCAweDVkLCAweDVkLCAweGY2LCAweDFmLCAweGY0LCAweGM5LAotCTB4YmQsIDB4MjgsIDB4N2MsIDB4ZDcsIDB4NDMsIDB4MmYsIDB4OTQsIDB4MTAsIDB4Y2IsIDB4OGQsIDB4ZWYsIDB4N2UsCi0JMHg4YiwgMHhiZiwgMHhmMywgMHhkMiwgMHg1MSwgMHgzYSwgMHgxNiwgMHgxZCwgMHg1OCwgMHg0ZSwgMHhjZSwgMHg0ZiwKLQkweDk5LCAweDYwLCAweDJiLCAweGQ1LCAweGU4LCAweDZmLCAweGEyLCAweDlmLCAweDkzLCAweGZiLCAweDE5LCAweGQ1LAotCTB4ZmIsIDB4YmQsIDB4NTcsIDB4ZTMsIDB4ZTUsIDB4MmYsIDB4ZmMsIDB4NjksIDB4ZGYsIDB4YzcsIDB4OGQsIDB4OGQsCi0JMHhmYywgMHhkNiwgMHg4NiwgMHhmYywgMHg4NSwgMHhkOCwgMHhlNywgMHhkZiwgMHhjOCwgMHg5ZSwgMHg4OSwgMHhkZSwKLQkweDFiLCAweDllLCAweDE2LCAweDM5LCAweGE3LCAweDRlLCAweDNlLCAweGI4LCAweDNmLCAweGZiLCAweGMzLCAweGUwLAotCTB4ODcsIDB4OTEsIDB4MTYsIDB4NWQsIDB4ZjUsIDB4YzksIDB4ZmQsIDB4ZmQsIDB4NmUsIDB4YmEsIDB4MDYsIDB4M2QsCi0JMHg3ZCwgMHg1NSwgMHhkZSwgMHhmYiwgMHhjMCwgMHhkOCwgMHhmMywgMHg4NywgMHg5ZiwgMHhiYSwgMHg0YSwgMHg2NywKLQkweGFlLCAweDgxLCAweDg3LCAweDBkLCAweGU2LCAweGI2LCAweDMxLCAweGNhLCAweDg3LCAweDkxLCAweDU3LCAweDI0LAotCTB4NzIsIDB4NzMsIDB4ZjQsIDB4YmUsIDB4YTEsIDB4YzgsIDB4MTUsIDB4M2EsIDB4MjMsIDB4NzIsIDB4MjAsIDB4YzcsCi0JMHgyMywgMHhmNywgMHg3OCwgMHgzZCwgMHgzYywgMHg1MywgMHg3ZCwgMHg5YiwgMHhjZSwgMHg1NiwgMHg4MiwgMHhmYywKLQkweGRmLCAweGMwLCAweGVlLCAweGFkLCAweDc5LCAweDkwLCAweGNkLCAweDNjLCAweDdlLCAweDRmLCAweGYwLCAweGY4LAotCTB4ZjAsIDB4OWEsIDB4M2MsIDB4N2UsIDB4YTQsIDB4Y2UsIDB4ZTMsIDB4NWYsIDB4ZTksIDB4OTcsIDB4ZmMsIDB4ZGMsCi0JMHhjYiwgMHhjZiwgMHhlYSwgMHhhNSwgMHg0MywgMHhlMiwgMHhiOSwgMHg2ZiwgMHhmMywgMHhmMSwgMHg1NiwgMHgzYSwKLQkweDE0LCAweDkyLCAweGM3LCAweDY3LCAweDJiLCAweGFjLCAweGUzLCAweDBiLCAweDZmLCAweGQzLCAweGI5LCAweDZiLAotCTB4NTksIDB4NWYsIDB4NGEsIDB4ZTQsIDB4MmYsIDB4MzgsIDB4NmIsIDB4NjksIDB4ZTgsIDB4ZmIsIDB4ZDEsIDB4YWUsCi0JMHgxZCwgMHhmZiwgMHg2YiwgMHhiZCwgMHgyNCwgMHg3MywgMHhhZSwgMHhjYSwgMHg1MiwgMHgzZiwgMHhkMSwgMHg1YiwKLQkweGQxLCAweDIxLCAweDE3LCAweGZmLCAweDM3LCAweGRiLCAweDhlLCAweGU3LCAweGQ1LCAweDFhLCAweDc4LCAweDdjLAotCTB4MGQsIDB4YmYsIDB4NDYsIDB4MmIsIDB4NWYsIDB4ZjYsIDB4NzksIDB4ZTAsIDB4ZTEsIDB4YTcsIDB4ZmIsIDB4ZTUsCi0JMHgzZSwgMHhkNSwgMHg1YSwgMHg3ZSwgMHg4ZCwgMHhhNiwgMHhiOCwgMHgwZSwgMHhlNywgMHhiZSwgMHgzZCwgMHhlYiwKLQkweGZkLCAweDNkLCAweDJhLCAweDE3LCAweGYwLCAweDg3LCAweGZkLCAweDcyLCAweGJkLCAweDQwLCAweDdlLCAweGUwLAotCTB4MGEsIDB4ZDMsIDB4ZTEsIDB4MjIsIDB4NjMsIDB4OTUsIDB4MjEsIDB4ZWEsIDB4YmMsIDB4YWEsIDB4YzcsIDB4M2EsCi0JMHgyNCwgMHhmNCwgMHhhZCwgMHhkMywgMHg0ZiwgMHg3MywgMHg1MSwgMHhlNSwgMHg3NiwgMHhlNywgMHgxYywgMHg2MywKLQkweGJhLCAweDI4LCAweDZjLCAweDljLCAweGY2LCAweGYyLCAweGQ2LCAweDNlLCAweGU2LCAweDZhLCAweGQ4LCAweGI1LAotCTB4MjYsIDB4YjgsIDB4ZjksIDB4MGQsIDB4NzUsIDB4NGEsIDB4MzAsIDB4YmYsIDB4NjQsIDB4NDgsIDB4MWMsIDB4M2MsCi0JMHhjMywgMHhmOCwgMHg3NiwgMHhiMywgMHhmYiwgMHg0NSwgMHg5ZiwgMHgxNCwgMHgyMywgMHhiYSwgMHg2YiwgMHg2MCwKLQkweGI4LCAweDhmLCAweDMxLCAweDBmLCAweGQyLCAweGU2LCAweGM4LCAweGJjLCAweDU4LCAweDE1LCAweGJhLCAweGUwLAotCTB4ZTIsIDB4NTQsIDB4OGQsIDB4OTIsIDB4ZDEsIDB4NmQsIDB4OTQsIDB4OTksIDB4ZTIsIDB4NzcsIDB4Y2YsIDB4ZDgsCi0JMHg2YywgMHg3YiwgMHhmOSwgMHgyOSwgMHhjYiwgMHhmMiwgMHg5YiwgMHg5OSwgMHhkYSwgMHhhMiwgMHhmMCwgMHhhMiwKLQkweGY2LCAweGE3LCAweDc3LCAweGE5LCAweDM4LCAweDg3LCAweDVlLCAweGIxLCAweDJmLCAweDI5LCAweDZiLCAweGY1LAotCTB4ZjAsIDB4NzEsIDB4NDUsIDB4M2YsIDB4MWIsIDB4ZDcsIDB4YzEsIDB4YmIsIDB4OWQsIDB4YWEsIDB4ZGQsIDB4NjUsCi0JMHg0NywgMHgzYiwgMHhiNCwgMHhiOSwgMHhhYywgMHhkYSwgMHhlMiwgMHg5OSwgMHgxYSwgMHg1MywgMHg3NCwgMHgyYiwKLQkweDdkLCAweDBiLCAweDM5LCAweDVjLCAweDUxLCAweGI5LCAweDdhLCAweGMyLCAweDdlLCAweGEwLCAweGQ5LCAweGZhLAotCTB4NTgsIDB4MmUsIDB4NzMsIDB4ZGIsIDB4ZmYsIDB4YWUsIDB4YzUsIDB4ODUsIDB4MmQsIDB4NzcsIDB4OTksIDB4MzEsCi0JMHg2ZiwgMHg1NSwgMHhjOCwgMHg4YSwgMHhiYiwgMHg0ZiwgMHgxOCwgMHg4YiwgMHg1ZiwgMHhlYywgMHgwZiwgMHhmMSwKLQkweGIxLCAweDdhLCAweGNmLCAweGU5LCAweDdhLCAweDlmLCAweDEwLCAweGEzLCAweDYxLCAweDQ1LCAweGU0LCAweGIzLAotCTB4NzQsIDB4YmIsIDB4Y2IsIDB4OGUsIDB4NzYsIDB4NWEsIDB4NTcsIDB4ZTgsIDB4ZmQsIDB4ODcsIDB4OGYsIDB4N2MsCi0JMHhiMywgMHg4NSwgMHhkYiwgMHgzZSwgMHgxOSwgMHhjMywgMHgxYiwgMHgxMiwgMHhmYiwgMHhhNywgMHgzMiwgMHg0NiwKLQkweDQzLCAweDFmLCAweGMzLCAweGJmLCAweDhjLCAweDk4LCAweDBhLCAweGM0LCAweDQ5LCAweDM4LCAweGY1LCAweDhkLAotCTB4MWMsIDB4NmYsIDB4MDAsIDB4NmIsIDB4NTEsIDB4MTUsIDB4ZmIsIDB4YTYsIDB4ZDgsIDB4YWYsIDB4NjgsIDB4ODcsCi0JMHg5ZCwgMHg3NywgMHgyMSwgMHgzNiwgMHg3ZiwgMHgxMywgMHgxOCwgMHg3NCwgMHgyMywgMHhmMiwgMHg2NywgMHg3YSwKLQkweGM4LCAweDlmLCAweGYzLCAweGZkLCAweGM4LCAweDgzLCAweDQzLCAweDNlLCAweDVjLCAweDc2LCAweGQyLCAweGEwLAotCTB4MWEsIDB4ZGIsIDB4MGEsIDB4MDYsIDB4OTUsIDB4NDMsIDB4M2UsIDB4M2EsIDB4NjcsIDB4NWIsIDB4ZDEsIDB4OGEsCi0JMHhjMCwgMHg5YSwgMHg4ZiwgMHhjMCwgMHg3ZiwgMHgzNSwgMHhiOSwgMHg0MiwgMHgwNywgMHg0NCwgMHhjZSwgMHgzOCwKLQkweDZhLCAweDFmLCAweDk0LCAweDc5LCAweDBkLCAweDNlLCAweGNkLCAweDNjLCAweDc4LCAweDk2LCAweGVkLCAweDhmLAotCTB4ZWMsIDB4NDksIDB4ZWMsIDB4YjcsIDB4ZTgsIDB4NzksIDB4NDEsIDB4MGUsIDB4M2MsIDB4M2UsIDB4NGQsIDB4OWUsCi0JMHhiYiwgMHhkZiwgMHhkZCwgMHg0MSwgMHhjMSwgMHgzOCwgMHgzZiwgMHhkMywgMHg4NCwgMHg3ZSwgMHhlMiwgMHhlNywKLQkweGE0LCAweDI5LCAweGMxLCAweDc2LCAweDEyLCAweDZjLCAweGQ2LCAweGQzLCAweDI3LCAweGFkLCAweDUwLCAweDk5LAotCTB4MGMsIDB4NmUsIDB4MGIsIDB4ZGIsIDB4MTUsIDB4Y2YsIDB4YzEsIDB4ZmQsIDB4ZjEsIDB4NTAsIDB4MDcsIDB4YjksCi0JMHg3MywgMHg3MiwgMHg3YiwgMHg0NSwgMHg5ZSwgMHhlMiwgMHg1YiwgMHhkMSwgMHgwNywgMHhjOSwgMHgxOCwgMHg4NCwKLQkweGJlLCAweGMyLCAweGJjLCAweDNkLCAweGEwLCAweGY2LCAweDg5LCAweGI2LCAweGYzLCAweGYxLCAweDg0LCAweDNhLAotCTB4MGUsIDB4OGEsIDB4ZjksIDB4OTQsIDB4YzcsIDB4OWEsIDB4YmYsIDB4ZjEsIDB4ZjcsIDB4ZjMsIDB4MmUsIDB4YjIsCi0JMHhmZCwgMHg2YSwgMHhmZSwgMHg5YSwgMHg2MiwgMHg0MSwgMHgyMiwgMHg2MywgMHg0NiwgMHg5MCwgMHhjZSwgMHg1NywKLQkweGQ2LCAweGYyLCAweGJmLCAweDc4LCAweGU1LCAweGJhLCAweDZlLCAweGRmLCAweDYwLCAweGFlLCAweGViLCAweDRmLAotCTB4NzYsIDB4YzgsIDB4ZGMsIDB4MzIsIDB4NjcsIDB4NWYsIDB4ZmUsIDB4OTMsIDB4ZmIsIDB4ZTIsIDB4ODUsIDB4YzksCi0JMHg1YSwgMHg3MCwgMHgyMiwgMHg4ZiwgMHhiNywgMHg0NiwgMHgzZiwgMHg4YiwgMHg3ZSwgMHg5ZSwgMHhlZSwgMHg4NCwKLQkweDIzLCAweDJhLCAweDY2LCAweDA5LCAweDMxLCAweDRhLCAweDBmLCAweDJhLCAweGJlLCAweGQ2LCAweGJhLCAweDlmLAotCTB4M2MsIDB4NzQsIDB4ZmYsIDB4YTMsIDB4MjIsIDB4NTYsIDB4NTMsIDB4YWUsIDB4MWQsIDB4NDMsIDB4OGEsIDB4MWUsCi0JMHhhMCwgMHg1OSwgMHhjNCwgMHg0MSwgMHhiMywgMHgwMSwgMHgwNywgMHhjZCwgMHgwYywgMHg3NSwgMHhiYywgMHg0ZCwKLQkweDljLCAweDlmLCAweGFmLCAweDNjLCAweGI1LCAweDVkLCAweGU2LCAweDhiLCAweDYzLCAweDJmLCAweGYxLCAweDkyLAotCTB4M2EsIDB4NWUsIDB4NmYsIDB4YmMsIDB4NTYsIDB4OTgsIDB4ODIsIDB4YzIsIDB4ZGYsIDB4ZTQsIDB4MTgsIDB4ZWIsCi0JMHhjYiwgMHg0NCwgMHhmNiwgMHg4MSwgMHg3MCwgMHgyYiwgMHgwZCwgMHg1ZSwgMHg3MywgMHg1YywgMHg0NywgMHgxZiwKLQkweGM3LCAweDFkLCAweDdkLCAweDFjLCAweDc1LCAweGY0LCAweDcxLCAweDZmLCAweDliLCAweDNlLCAweGIyLCAweDhlLAotCTB4ZTcsIDB4ZjcsIDB4OWMsIDB4YWQsIDB4N2UsIDB4ZGMsIDB4YmUsIDB4YTIsIDB4OWYsIDB4YzgsIDB4MjMsIDB4MDYsCi0JMHgzZCwgMHhiNywgMHg1MiwgMHgyZSwgMHgxYywgMHg1MSwgMHg2YiwgMHhjNywgMHgyZiwgMHg1NSwgMHgyZSwgMHhiYSwKLQkweDU3LCAweDlmLCAweGZmLCAweDhlLCAweGRhLCAweGNmLCAweDliLCAweDkzLCAweDU3LCAweDlkLCAweGY5LCAweGM3LAotCTB4ZGYsIDB4YTUsIDB4YTQsIDB4Y2MsIDB4MjMsIDB4NTcsIDB4YjIsIDB4N2QsIDB4YjksIDB4OGQsIDB4MWYsIDB4MWEsCi0JMHhmMSwgMHgxYywgMHhjMCwgMHgyMCwgMHhjMiwgMHgyZSwgMHhkYywgMHgyZCwgMHg2YiwgMHhjMSwgMHgwNSwgMHg2OCwKLQkweGE5LCAweDllLCAweGNiLCAweGViLCAweDU3LCAweGI5LCAweDNiLCAweGM3LCAweGMzLCAweGY3LCAweDM3LCAweDhmLAotCTB4MTcsIDB4ZDcsIDB4ZmYsIDB4NGMsIDB4ZjgsIDB4ZjIsIDB4ZTQsIDB4ZmUsIDB4ZDEsIDB4OGEsIDB4Y2EsIDB4NDcsCi0JMHhiNiwgMHg0YywgMHhjNCwgMHgwNiwgMHgyYywgMHgyZSwgMHhjMywgMHhmZiwgMHhkYSwgMHgyZSwgMHg3NywgMHg1NywKLQkweGVhLCAweGEyLCAweDRjLCAweGJkLCAweDNlLCAweDRhLCAweDU5LCAweGU0LCAweDM1LCAweDQ4LCAweGZmLCAweDk4LAotCTB4Y2MsIDB4YmYsIDB4NWQsIDB4NWMsIDB4YmUsIDB4MjUsIDB4NzIsIDB4NWUsIDB4MTMsIDB4MmEsIDB4OGYsIDB4MzcsCi0JMHg0MywgMHgzZCwgMHgwMiwgMHhlNywgMHg3ZSwgMHhmYywgMHhmYywgMHhkYiwgMHgxNywgMHhjMiwgMHg5YiwgMHhjZiwKLQkweGJmLCAweDc1LCAweGRlLCAweGIzLCAweGI5LCAweGZjLCAweGRiLCAweDEwLCAweDhmLCAweGRkLCAweDU4LCAweDkwLAotCTB4ZjksIDB4YjcsIDB4Y2QsIDB4N2IsIDB4MzIsIDB4MzIsIDB4ZmYsIDB4MzYsIDB4ZTMsIDB4YzAsIDB4MGYsIDB4MTIsCi0JMHhhZiwgMHhiZiwgMHhlNSwgMHg4OCwgMHhkZiwgMHg5NiwgMHhiOSwgMHhiNSwgMHg4YiwgMHg3NSwgMHhjYywgMHgyYSwKLQkweDczLCAweDZiLCAweDY1LCAweGJjLCAweGI3LCAweGIzLCAweDBlLCAweDhjLCAweGRjLCAweGZiLCAweDkxLCAweGVmLAotCTB4ZDksIDB4ZTYsIDB4ZGEsIDB4ZmIsIDB4OTEsIDB4MzksIDB4YjUsIDB4YTYsIDB4ZDEsIDB4Y2UsIDB4ODYsIDB4YzMsCi0JMHgxYSwgMHg4MSwgMHg3YSwgMHgwOCwgMHg3MSwgMHhlNiwgMHhkZCwgMHhhZCwgMHg2ZCwgMHhlYSwgMHgyMSwgMHhjNCwKLQkweGRiLCAweGQ0LCAweDQzLCAweDcwLCAweGVhLCAweDdlLCAweDI3LCAweGM2LCAweDAyLCAweDI2LCAweGM2LCAweGRhLAotCTB4MDgsIDB4MmMsIDB4OGMsIDB4N2EsIDB4MDYsIDB4NTEsIDB4M2EsIDB4NWYsIDB4YzcsIDB4OWUsIDB4MGYsIDB4NTIsCi0JMHg1YSwgMHg2MSwgMHhjZiwgMHhmMywgMHgxNSwgMHhhZCwgMHg4ZiwgMHg0NiwgMHg1ZCwgMHhmYSwgMHhjOCwgMHgwYiwKLQkweDhiLCAweDVhLCAweDJhLCAweGNlLCAweDQ3LCAweGNiLCAweDZiLCAweGQ2LCAweDIxLCAweGFmLCAweDU5LCAweDBmLAotCTB4NzksIDB4YzUsIDB4M2QsIDB4ZDksIDB4MzYsIDB4ZmQsIDB4ZmUsIDB4YTUsIDB4YmEsIDB4MDcsIDB4ZmYsIDB4NGYsCi0JMHg0NiwgMHg1MCwgMHhiMywgMHg4NSwgMHg2OCwgMHhmNywgMHg4MCwgMHhjMiwgMHg3ZiwgMHgwZSwgMHg3OSwgMHgzZCwKLQkweGNiLCAweGYyLCAweGFhLCAweGFmLCAweGEzLCAweGJmLCAweGVkLCAweDZjLCAweDAwLCAweDhkLCAweDE5LCAweDg3LAotCTB4N2MsIDB4ODcsIDB4YWYsIDB4YmQsIDB4MjEsIDB4ZTIsIDB4YTQsIDB4OWEsIDB4ZWQsIDB4NDUsIDB4OGQsIDB4MjcsCi0JMHhmNiwgMHgwOSwgMHg1OSwgMHhiYSwgMHhlMywgMHg0NywgMHhkYywgMHg4YSwgMHhiZSwgMHgxNiwgMHg1MiwgMHg3ZSwKLQkweDMyLCAweDRkLCAweDhiLCAweGNlLCAweDI2LCAweGNjLCAweGQxLCAweGMwLCAweDFiLCAweDIyLCAweGM2LCAweGQ3LAotCTB4ZDEsIDB4YjcsIDB4N2YsIDB4ZTUsIDB4YmUsIDB4ZTksIDB4ZWIsIDB4N2EsIDB4Y2QsIDB4N2MsIDB4YTcsIDB4YzksCi0JMHg5ZiwgMHg3MSwgMHhhMywgMHhhOSwgMHhlZSwgMHgxZiwgMHg3YywgMHg0NywgMHhkYiwgMHhkMiwgMHg4NiwgMHg5ZCwKLQkweDEyLCAweDMxLCAweGE2LCAweDdkLCAweDM2LCAweGZjLCAweDY0LCAweDA5LCAweDk2LCAweGZkLCAweGJlLCAweDM0LAotCTB4ZTIsIDB4OTksIDB4ZmIsIDB4YWUsIDB4OTgsIDB4NzQsIDB4YTIsIDB4NzAsIDB4N2UsIDB4OGYsIDB4ZTQsIDB4OTUsCi0JMHgwYiwgMHhhMiwgMHhhNiwgMHgyNSwgMHg2YSwgMHgyMCwgMHgyNiwgMHg3OSwgMHg3ZCwgMHg0ZSwgMHgzMCwgMHhlOCwKLQkweDljLCAweGFiLCAweDc2LCAweGQxLCAweDIyLCAweGEzLCAweDdiLCAweGJmLCAweDVkLCAweDE2LCAweGJlLCAweDNlLAotCTB4ZDYsIDB4NDksIDB4NDUsIDB4ZDQsIDB4MzYsIDB4MzUsIDB4MTYsIDB4M2EsIDB4ZjksIDB4YjksIDB4ODMsIDB4YjQsCi0JMHg1NCwgMHgxYSwgMHgxNywgMHgzNSwgMHhhMSwgMHg2NCwgMHg3ZCwgMHgxMSwgMHhiNCwgMHhmNSwgMHg1MSwgMHhiZiwKLQkweGZkLCAweDBkLCAweGE2LCAweGRkLCAweGQ3LCAweDQ0LCAweDhjLCAweGU1LCAweDYyLCAweGYxLCAweDgyLCAweGZjLAotCTB4MmMsIDB4M2YsIDB4YTUsIDB4ZGUsIDB4YzEsIDB4ZWYsIDB4YWIsIDB4ZmUsIDB4OTgsIDB4ZTIsIDB4ZmQsIDB4YTYsCi0JMHhjMywgMHg5NiwgMHg3MywgMHhmZSwgMHg3OSwgMHhlMywgMHg5NSwgMHg2MywgMHg5YiwgMHhjMiwgMHgyYiwgMHhkOSwKLQkweDc0LCAweDAzLCAweGFmLCAweDM4LCAweDlmLCAweGFkLCAweGIxLCAweGNiLCAweGU0LCAweGEwLCAweGFjLCAweGY3LAotCTB4MDAsIDB4MWEsIDB4NmMsIDB4MDUsIDB4MTYsIDB4NGIsIDB4ODMsIDB4OTYsIDB4NDYsIDB4Y2MsIDB4OGEsIDB4MjQsCi0JMHhmYywgMHgzMywgMHg5NCwgMHhhZiwgMHg1ZSwgMHhhNywgMHg0YywgMHgxMSwgMHg5OCwgMHg5OSwgMHgzZiwgMHhjYiwKLQkweGU3LCAweDc2LCAweDRhLCAweDFmLCAweDhkLCAweGJlLCAweDA3LCAweDdhLCAweDY1LCAweDA3LCAweGI3LCAweGZmLAotCTB4ZWIsIDB4NDEsIDB4MTksIDB4OTcsIDB4ZWQsIDB4YmMsIDB4ZGUsIDB4Y2IsIDB4ZDcsIDB4YmYsIDB4MTAsIDB4NjksCi0JMHhiZSwgMHhiZSwgMHg4NSwgMHhhZiwgMHhmNywgMHhhNywgMHgzMSwgMHg4NywgMHhjNiwgMHgxNSwgMHhmOCwgMHgyNSwKLQkweDI3LCAweDI5LCAweGM3LCAweGYzLCAweDkzLCAweGFmLCAweGYyLCAweGRhLCAweDdhLCAweDk1LCAweGY1LCAweDU1LAotCTB4NDUsIDB4YjcsIDB4MWIsIDB4NDAsIDB4Y2UsIDB4OGUsIDB4OTgsIDB4MTMsIDB4ODMsIDB4ZGIsIDB4NWMsIDB4MmMsCi0JMHg0YywgMHg3MSwgMHhiYiwgMHgyMSwgMHhmMiwgMHg1ZiwgMHgzNSwgMHgyOSwgMHg1ZiwgMHhkMSwgMHhiYywgMHhhYSwKLQkweGUzLCAweGVkLCAweGRmLCAweDE4LCAweDkwLCAweDMxLCAweDU1LCAweGVmLCAweGVjLCAweDk0LCAweGY0LCAweDliLAotCTB4MTQsIDB4M2UsIDB4NGYsIDB4YzQsIDB4NzMsIDB4M2MsIDB4MjMsIDB4ZjgsIDB4ZDAsIDB4OWEsIDB4MzEsIDB4ZWIsCi0JMHhlZiwgMHhkZiwgMHgwNiwgMHhiZSwgMHg0MiwgMHhkZCwgMHg1NCwgMHgxZSwgMHgwMywgMHhlYiwgMHhjNSwgMHg5OCwKLQkweDFkLCAweGNhLCAweGQ1LCAweDYzLCAweGQ1LCAweDllLCAweGRiLCAweDJkLCAweGVmLCAweGZmLCAweGU5LCAweDgwLAotCTB4YWMsIDB4NTUsIDB4N2EsIDB4NWIsIDB4OWQsIDB4ZWIsIDB4MzUsIDB4MDcsIDB4ZjEsIDB4Y2IsIDB4M2UsIDB4NDEsCi0JMHgxYiwgMHhmZiwgMHgwMiwgMHhmNCwgMHhhNSwgMHhjMSwgMHhjNywgMHgzYywgMHg5ZSwgMHgzNCwgMHhmYSwgMHhmOCwKLQkweGIzLCAweDAxLCAweDVkLCAweDlmLCAweDUwLCAweDhlLCAweGViLCAweDI4LCAweGY3LCAweDM3LCAweGM1LCAweGUzLAotCTB4ZDIsIDB4ZDcsIDB4ZTMsIDB4N2MsIDB4ZWUsIDB4MzUsIDB4YmYsIDB4NzgsIDB4NTYsIDB4MzAsIDB4MmQsIDB4ZWIsCi0JMHg4YiwgMHgwNSwgMHhkMywgMHg5OSwgMHg0OSwgMHgzOSwgMHhjZiwgMHgwZCwgMHg5ZiwgMHg2ZSwgMHhhNCwgMHhlZSwKLQkweGQzLCAweDlkLCAweDJiLCAweGY0LCAweDBmLCAweGMyLCAweGJmLCAweDYxLCAweDVjLCAweGUxLCAweGY5LCAweDBlLAotCTB4M2YsIDB4YzMsIDB4NmQsIDB4OTEsIDB4YWIsIDB4OTAsIDB4ZTMsIDB4Y2YsIDB4MWUsIDB4MTUsIDB4ZDcsIDB4ZDMsCi0JMHhjYSwgMHgyYiwgMHgzMiwgMHg0ZSwgMHg0MiwgMHhhZiwgMHg1YiwgMHhiOCwgMHg3NywgMHg4MCwgMHg5ZiwgMHgyMSwKLQkweGQ3LCAweGFlLCAweGY2LCAweGVmLCAweGExLCAweDk2LCAweDM4LCAweDk4LCAweDU2LCAweDFlLCAweDViLCAweGNiLAotCTB4MGYsIDB4MmIsIDB4ZjYsIDB4MTMsIDB4M2QsIDB4ZjgsIDB4NmMsIDB4YWQsIDB4N2EsIDB4MDYsIDB4ZWYsIDB4MDgsCi0JMHgzZiwgMHg1YSwgMHhiMiwgMHg0NSwgMHg1ZSwgMHgyMSwgMHhjNywgMHgwMSwgMHhmYSwgMHhjZSwgMHg3YywgMHg5NiwKLQkweGI2LCAweGYwLCAweDVjLCAweDdkLCAweGMzLCAweGY4LCAweDM1LCAweGVjLCAweGI3LCAweDkzLCAweDhjLCAweDc5LAotCTB4NjIsIDB4MWEsIDB4MTcsIDB4ZWMsIDB4YzksIDB4YjMsIDB4MDYsIDB4ZDMsIDB4YjksIDB4OTAsIDB4YWQsIDB4MDUsCi0JMHhlYywgMHgxZSwgMHhlYSwgMHg2NCwgMHg1OSwgMHhmZCwgMHgyMiwgMHg4ZCwgMHhiMSwgMHhmZCwgMHgwNywgMHg5OSwKLQkweGI1LCAweDIzLCAweDI5LCAweDgyLCAweGJjLCAweDU5LCAweGExLCAweGMzLCAweGNjLCAweDEzLCAweGM5LCAweDJhLAotCTB4ZjgsIDB4ZDksIDB4YTAsIDB4MjcsIDB4NGEsIDB4NDQsIDB4OGYsIDB4OTcsIDB4YzYsIDB4NDIsIDB4ZGYsIDB4MjcsCi0JMHhkYiwgMHg2YywgMHg3YywgMHg2ZiwgMHg4NSwgMHgxMiwgMHhkYywgMHg4ZiwgMHg1NCwgMHhmNSwgMHg3NywgMHhlOCwKLQkweDQzLCAweDUxLCAweGU3LCAweDA0LCAweDc0LCAweGQ0LCAweGYzLCAweGZlLCAweGRiLCAweDc0LCAweDNhLCAweDhkLAotCTB4N2UsIDB4NmYsIDB4NWMsIDB4M2UsIDB4NGYsIDB4NmMsIDB4NGEsIDB4M2UsIDB4ODMsIDB4MWUsIDB4ZjIsIDB4ZjksCi0JMHhlYSwgMHhhMCwgMHhlNCwgMHg5YiwgMHgxYSwgMHhmMywgMHg2OCwgMHg5MCwgMHg2NiwgMHg4YiwgMHg4OCwgMHgwMSwKLQkweDdiLCAweDE4LCAweDc1LCAweGE3LCAweDhhLCAweDE5LCAweGQ2LCAweDRiLCAweDk5LCAweDg2LCAweDVlLCAweGJhLAotCTB4OTQsIDB4ZjAsIDB4YzcsIDB4MjEsIDB4ZTMsIDB4YTgsIDB4Y2IsIDB4YTYsIDB4ZTIsIDB4N2UsIDB4MzAsIDB4OGUsCi0JMHhkZCwgMHgzNCwgMHhiNiwgMHhiMCwgMHg5NSwgMHhlZiwgMHhhNSwgMHg5NSwgMHhjNCwgMHg3NCwgMHg1YywgMHhlNSwKLQkweGZhLCAweDViLCAweDY2LCAweDkyLCAweGY1LCAweGUzLCAweDFjLCAweGNiLCAweDcyLCAweGFlLCAweGY4LCAweDAwLAotCTB4MmQsIDB4ODYsIDB4ODcsIDB4NjksIDB4NzQsIDB4NDEsIDB4ZDcsIDB4MzcsIDB4YzEsIDB4NTgsIDB4ZmYsIDB4NmQsCi0JMHg0OCwgMHhlYSwgMHgyNCwgMHgzZCwgMHhlZSwgMHg1ZiwgMHgxMSwgMHhiZSwgMHgwYiwgMHhmMywgMHhmYSwgMHhhNywKLQkweDM1LCAweGVlLCAweGFkLCAweGViLCAweGU4LCAweGE1LCAweGJmLCAweDUyLCAweDMyLCAweDViLCAweGJiLCAweDkxLAotCTB4ODgsIDB4NTIsIDB4MzYsIDB4MzEsIDB4ZmQsIDB4OTcsIDB4ODIsIDB4ZmYsIDB4NDcsIDB4YWYsIDB4YzMsIDB4MGYsCi0JMHgwNywgMHgxZCwgMHg2ZCwgMHg1MiwgMHhiYSwgMHhlMCwgMHhhNiwgMHhjNSwgMHgzMCwgMHg4ZiwgMHgxYiwgMHhkZiwKLQkweGQ3LCAweGZlLCAweDc5LCAweDM2LCAweGZhLCAweDk0LCAweDU4LCAweGZiLCAweGM3LCAweGFlLCAweDczLCAweDNiLAotCTB4YjEsIDB4MzYsIDB4NjksIDB4YmQsIDB4ZTEsIDB4YzUsIDB4ODcsIDB4YmEsIDB4OGUsIDB4YTUsIDB4ZTYsIDB4NDUsCi0JMHgxOSwgMHhlYiwgMHhjOSwgMHhmOCwgMHgyZCwgMHg5NCwgMHhmNiwgMHhiYiwgMHg3OSwgMHhmMiwgMHgyMywgMHgzYSwKLQkweDM2LCAweDZmLCAweGQyLCAweGYxLCAweDgyLCAweGY1LCAweDdjLCAweDk2LCAweDY2LCAweDU4LCAweGFlLCAweDlkLAotCTB4ZWIsIDB4MDUsIDB4YjcsIDB4MjcsIDB4ZjAsIDB4NTksIDB4OGMsIDB4NjUsIDB4OWYsIDB4ZWQsIDB4ZTYsIDB4YTIsCi0JMHgyOSwgMHhlMywgMHhlZSwgMHg0NCwgMHhlZCwgMHhiOSwgMHgyZSwgMHhhMSwgMHg0NywgMHg0MywgMHhmNiwgMHgzZiwKLQkweDBkLCAweGVhLCAweGY1LCAweDIwLCAweDUzLCAweDQ0LCAweDFlLCAweDIxLCAweDdmLCAweDk2LCAweGI5LCAweDdkLAotCTB4NjEsIDB4OTAsIDB4MzIsIDB4MjUsIDB4M2MsIDB4MDcsIDB4ZWIsIDB4MWQsIDB4ZmEsIDB4Y2UsIDB4ZTcsIDB4NGIsCi0JMHg3MiwgMHg1ZSwgMHg0NywgMHhmOSwgMHhkOSwgMHhjOCwgMHhiYiwgMHgzZiwgMHg1ZSwgMHg5ZCwgMHgxMiwgMHhiMSwKLQkweDc3LCAweGQwLCAweGNkLCAweDcyLCAweDNlLCAweDYzLCAweDc0LCAweGQxLCAweDUzLCAweGFmLCAweDI4LCAweDRjLAotCTB4ZTksIDB4OTAsIDB4ZWYsIDB4OGMsIDB4OTAsIDB4ZWYsIDB4OTgsIDB4OTgsIDB4OGYsIDB4NGMsIDB4YzksIDB4NjAsCi0JMHhiYywgMHhhNiwgMHg3ZCwgMHgwZiwgMHhmZCwgMHg3YywgMHgxZSwgMHg1MCwgMHgzYSwgMHgwNCwgMHhkZiwgMHgwZCwKLQkweGVjLCAweDE0LCAweDcxLCAweDg5LCAweDM2LCAweGFlLCAweGUzLCAweDMzLCAweDQ2LCAweGNmLCAweDMwLCAweGVlLAotCTB4N2MsIDB4YjYsIDB4ZDAsIDB4NDUsIDB4YjcsIDB4OGEsIDB4NWQsIDB4ZjQsIDB4NjYsIDB4NzEsIDB4OTgsIDB4NmUsCi0JMHhjZSwgMHg2ZiwgMHhhNywgMHg4YiwgMHg4YywgMHg5OSwgMHgyZiwgMHhkYSwgMHgwMSwgMHgzMywgMHhjNywgMHhmNiwKLQkweGM1LCAweDBiLCAweDUxLCAweDExLCAweDMzLCAweGM0LCAweDcyLCAweDg3LCAweGY2LCAweGMwLCAweDdmLCAweDg5LAotCTB4NWQsIDB4Y2MsIDB4NzMsIDB4OGMsIDB4YmQsIDB4YmIsIDB4ZTksIDB4MDMsIDB4N2UsIDB4NjcsIDB4YWUsIDB4YTAsCi0JMHg2MywgMHgxZCwgMHhlMCwgMHg5MywgMHgxZiwgMHhhZiwgMHhlMywgMHhkNywgMHhmNSwgMHg3OSwgMHgyNCwgMHhiNCwKLQkweDBlLCAweDhmLCAweGM0LCAweDg0LCAweGFlLCAweGNmLCAweGNmLCAweGYzLCAweGY3LCAweGYzLCAweGYwLCAweDlmLAotCTB4MzMsIDB4YmQsIDB4NTksIDB4M2YsIDB4N2YsIDB4M2QsIDB4ODAsIDB4ZjYsIDB4YjgsIDB4NjYsIDB4Y2IsIDB4NTgsCi0JMHg0OSwgMHgzMSwgMHhiNiwgMHgwOCwgMHg5ZiwgMHg4MywgMHhiNiwgMHgxMSwgMHg0NSwgMHg4NywgMHg2ZSwgMHgxZSwKLQkweDlmLCAweDRmLCAweGI0LCAweGNmLCAweDJjLCAweDc1LCAweGQzLCAweDk5LCAweDEyLCAweDYzLCAweDkwLCAweDkyLAotCTB4OWYsIDB4NmQsIDB4MTgsIDB4YjQsIDB4MGQsIDB4ZWMsIDB4ZDUsIDB4ZjUsIDB4NWYsIDB4MmYsIDB4NzIsIDB4ZGYsCi0JMHg3MywgMHgyNSwgMHg4OSwgMHg0MSwgMHg3MiwgMHg0YiwgMHhiZCwgMHg5NCwgMHgyZiwgMHhmNSwgMHhhOCwgMHhmMywKLQkweDA3LCAweDQ0LCAweDhjLCAweGJiLCAweGFjLCAweDYzLCAweDg0LCAweGVmLCAweGQ2LCAweGQyLCAweDZmLCAweDZmLAotCTB4MzEsIDB4NGYsIDB4NjEsIDB4NGQsIDB4OTUsIDB4NzYsIDB4MjksIDB4NzQsIDB4Y2QsIDB4OGQsIDB4OTYsIDB4YmEsCi0JMHhjNCwgMHhlMCwgMHhiOSwgMHgxOSwgMHhmYSwgMHgyZSwgMHhhZiwgMHhiNywgMHhhMywgMHg1NywgMHhlMSwgMHgzZiwKLQkweGZlLCAweDJhLCAweGY4LCAweGE2LCAweDBjLCAweDFlLCAweDFiLCAweGJkLCAweDhhLCAweGJhLCAweDQ4LCAweDdlLAotCTB4OTEsIDB4ZTcsIDB4OTQsIDB4MGMsIDB4NGYsIDB4OGEsIDB4ZGMsIDB4MTAsIDB4MjksIDB4YTMsIDB4MjcsIDB4NDUsCi0JMHgyZCwgMHhiYSwgMHgxZiwgMHgwYSwgMHhkZCwgMHg2NCwgMHg2NSwgMHg0ZCwgMHgwMywgMHg3OCwgMHgwNCwgMHgzZSwKLQkweDE4LCAweDE5LCAweDgzLCAweDc1LCAweGMyLCAweGVlLCAweDdiLCAweDZiLCAweDIwLCAweDM2LCAweDQxLCAweGYxLAotCTB4NDEsIDB4ZjAsIDB4YmQsIDB4OTQsIDB4NTksIDB4NTUsIDB4NWYsIDB4NDAsIDB4ZTgsIDB4ZmIsIDB4ZDAsIDB4M2UsCi0JMHg5ZCwgMHgyZiwgMHhhOSwgMHhjZiwgMHhmNSwgMHg1YSwgMHhhMSwgMHhjZiwgMHg3YiwgMHg1YywgMHhkZiwgMHg4NywKLQkweDVjLCAweGRmLCAweGQ3LCAweGUzLCAweGU1LCAweDc4LCAweGNkLCAweGUzLCAweDc1LCAweDllLCAweDY0LCAweDhkLAotCTB4YTIsIDB4Y2MsIDB4ODIsIDB4ZTQsIDB4YmYsIDB4ZDAsIDB4YmUsIDB4ZjEsIDB4ZDAsIDB4OTcsIDB4MTUsIDB4MDYsCi0JMHhjZiwgMHgyYywgMHg4ZiwgMHg0NSwgMHhmYSwgMHg4YywgMHgxZSwgMHg3ZiwgMHg2NiwgMHhlYSwgMHhlZiwgMHg2YiwKLQkweGYxLCAweDM0LCAweDcwLCAweGQxLCAweGRjLCAweDRlLCAweGE5LCAweGUzLCAweGQwLCAweGFmLCAweDZjLCAweDE0LAotCTB4ZDAsIDB4ZWQsIDB4ZTQsIDB4NzIsIDB4MGYsIDB4YWQsIDB4ODgsIDB4OWEsIDB4NWMsIDB4YzAsIDB4MTgsIDB4YjgsCi0JMHgxZiwgMHhjZiwgMHhjOSwgMHg4NiwgMHgzYSwgMHgwOCwgMHgzNSwgMHhkNywgMHgyMSwgMHhlMywgMHgwNywgMHgyMiwKLQkweGQ3LCAweDc5LCAweDNlLCAweDUzLCAweGNiLCAweGZmLCAweDU1LCAweDNiLCAweDJkLCAweDZhLCAweGRjLCAweGEwLAotCTB4MmQsIDB4NjMsIDB4NDgsIDB4ODEsIDB4ZjksIDB4MTksIDB4YmYsIDB4MzQsIDB4ZDksIDB4NTUsIDB4MzMsIDB4ZTgsCi0JMHg2NywgMHgxNiwgMHg3YiwgMHgyYiwgMHg4NiwgMHhmZCwgMHgyMiwgMHhjYiwgMHg5OCwgMHhkYywgMHgyYiwgMHg0ZiwKLQkweGI5LCAweGY2LCAweGNhLCAweDRmLCAweDhhLCAweGJkLCAweDcyLCAweGVjLCAweDkzLCAweDgzLCAweGFlLCAweGEwLAotCTB4YTUsIDB4NTcsIDB4NGMsIDB4MGIsIDB4ZTYsIDB4MzEsIDB4Y2EsIDB4ZjMsIDB4NjgsIDB4ZDIsIDB4YzUsIDB4NmIsCi0JMHg0MiwgMHhkZiwgMHg0NCwgMHg5MywgMHg3ZSwgMHgxOSwgMHg1ZiwgMHg5ZCwgMHhhMiwgMHhhYywgMHg4OCwgMHhiZiwKLQkweDk2LCAweDlmLCAweDcxLCAweDIzLCAweDYxLCAweDViLCAweDkzLCAweGFiLCAweDhjLCAweDI5LCAweDJhLCAweGM1LAotCTB4MmQsIDB4NzQsIDB4YjMsIDB4ZGMsIDB4YzEsIDB4OTgsIDB4ZWYsIDB4NmYsIDB4NjksIDB4YjUsIDB4NGMsIDB4OGMsCi0JMHgwZCwgMHhiNywgMHg1MywgMHgzZSwgMHhjYSwgMHhiYywgMHgzNiwgMHgxOSwgMHhlNCwgMHg3OSwgMHg2NSwgMHg3YywKLQkweDNiLCAweGM5LCAweGYyLCAweGM3LCAweDYzLCAweGE4LCAweDk0LCAweDZhLCAweGVmLCAweGU3LCAweGEyLCAweDcxLAotCTB4MzMsIDB4MzEsIDB4ZGQsIDB4YzMsIDB4ZjYsIDB4NGIsIDB4ODgsIDB4ZmYsIDB4NmQsIDB4ZmUsIDB4ZmYsIDB4NmMsCi0JMHgwNCwgMHhiNCwgMHg1OSwgMHg1YywgMHhjMiwgMHhmNywgMHg4YywgMHg3ZCwgMHgwYSwgMHhiNSwgMHhmNywgMHg2NywKLQkweGI5LCAweGNkLCAweGVjLCAweDM0LCAweGVjLCAweDIwLCAweGQ4LCAweDdiLCAweDM2LCAweGZmLCAweGNiLCAweDM2LAotCTB4MTUsIDB4ZTYsIDB4YmIsIDB4ZGMsIDB4YjUsIDB4NmMsIDB4YzQsIDB4MTAsIDB4M2EsIDB4MWUsIDB4NzUsIDB4NWQsCi0JMHhjNiwgMHhkNCwgMHg2NywgMHhkYywgMHg5OCwgMHhlNSwgMHhiZSwgMHhkYywgMHgyNCwgMHgzYywgMHhjMywgMHhhNCwKLQkweDRjLCAweDc0LCAweDFmLCAweGNiLCAweGMxLCAweDc2LCAweGZlLCAweDQ0LCAweDNlLCAweGQ2LCAweDU2LCAweGNhLAotCTB4NGYsIDB4OGQsIDB4YWIsIDB4N2MsIDB4YWMsIDB4NDgsIDB4OWIsIDB4N2MsIDB4MmMsIDB4ZGMsIDB4YzcsIDB4MzgsCi0JMHg2MCwgMHhiZSwgMHg3NiwgMHg2ZiwgMHgzNiwgMHhlYSwgMHg3YywgMHgyZiwgMHgxOSwgMHg5OSwgMHhlOCwgMHgzNiwKLQkweDgxLCAweDk5LCAweDJhLCAweDRiLCAweGZiLCAweGI5LCAweDBmLCAweDcxLCAweDMzLCAweDMzLCAweGNkLCAweDdkLAotCTB4MmQsIDB4MzksIDB4ZmIsIDB4NWYsIDB4YmIsIDB4OTcsIDB4OGMsIDB4YTIsIDB4OWQsIDB4ZGYsIDB4ZDUsIDB4MmUsCi0JMHg0ZSwgMHhhMiwgMHhlZCwgMHgxMiwgMHhkYSwgMHhkNywgMHhmZSwgMHgyNywgMHgxMSwgMHhkNSwgMHhlMywgMHg3NCwKLQkweGRlLCAweDhiLCAweGYxLCAweDQwLCAweGJlLCAweGY4LCAweGIzLCAweDcyLCAweDliLCAweDZlLCAweDE2LCAweDYxLAotCTB4OGYsIDB4MWIsIDB4Y2MsIDB4ZjcsIDB4ZTgsIDB4OTEsIDB4NDksIDB4ZDksIDB4MGEsIDB4NjMsIDB4YzAsIDB4NmIsCi0JMHg3YiwgMHg3ZCwgMHhhYiwgMHhjNSwgMHgzNywgMHg2YSwgMHg5OSwgMHhhNiwgMHhkOCwgMHg5NiwgMHg2NiwgMHgzZiwKLQkweGJjLCAweGI0LCAweGMxLCAweDg2LCAweGM5LCAweGJlLCAweDgyLCAweDM1LCAweDE0LCAweGViLCAweDY3LCAweGI2LAotCTB4ZTYsIDB4YjcsIDB4ODEsIDB4ZjcsIDB4NjAsIDB4MWIsIDB4NWQsIDB4NjAsIDB4ZmQsIDB4MjUsIDB4ZTMsIDB4OTMsCi0JMHg1OCwgMHg5NywgMHhiMiwgMHgwZSwgMHg5MywgMHhmMiwgMHg5MywgMHg2YSwgMHhmYSwgMHgzOSwgMHgwNCwgMHhjOSwKLQkweGMzLCAweGEzLCAweDhkLCAweGI4LCAweDQ4LCAweGM3LCAweGZlLCAweDdhLCAweGMwLCAweGIxLCAweGJmLCAweDFlLAotCTB4NzIsIDB4YzQsIDB4NDUsIDB4ODYsIDB4MDUsIDB4M2UsIDB4NmIsIDB4NjAsIDB4YWEsIDB4YjAsIDB4YzIsIDB4NTQsCi0JMHhjMCwgMHg1ZSwgMHg1MiwgMHhiNywgMHgyZCwgMHhkNiwgMHg3NSwgMHhkYiwgMHg4ZSwgMHg3NSwgMHg3NCwgMHg5YiwKLQkweDk3LCAweGFkLCAweGJhLCAweGEyLCAweGY0LCAweDg4LCAweDE1LCAweGM1LCAweDFhLCAweDczLCAweDgzLCAweGY1LAotCTB4YzUsIDB4ZWIsIDB4ZDUsIDB4NjksIDB4ZDYsIDB4MjMsIDB4NTEsIDB4ZDYsIDB4MjMsIDB4NTMsIDB4YWMsIDB4NDcsCi0JMHgyNiwgMHg1OSwgMHg4ZiwgMHhkOCwgMHg0YywgMHgwMywgMHg5MywgMHhjNywgMHhmZSwgMHgxMSwgMHhlYiwgMHg2OSwKLQkweGFjLCAweDFmLCAweDMzLCAweGY0LCAweDRjLCAweDE1LCAweDNhLCAweDc5LCAweDhhLCAweDMxLCAweGQwLCAweDQ3LAotCTB4YjQsIDB4M2EsIDB4ZGYsIDB4Y2IsIDB4ZmMsIDB4MmIsIDB4NzEsIDB4NGYsIDB4YjMsIDB4NWQsIDB4ODMsIDB4ZGEsCi0JMHgyYiwgMHhmMCwgMHgxNywgMHhmZiwgMHgzOSwgMHhmNCwgMHhjZSwgMHgyYiwgMHg1OSwgMHgxYSwgMHhmMSwgMHhkZCwKLQkweDJjLCAweDgyLCAweGNlLCAweGFiLCAweGE4LCAweDU1LCAweGYxLCAweDEyLCAweDY0LCAweDFiLCAweDM1LCAweDgyLAotCTB4N2YsIDB4MzAsIDB4MzEsIDB4YzMsIDB4N2QsIDB4MWYsIDB4ZjEsIDB4ZTUsIDB4NzksIDB4NWUsIDB4YmUsIDB4MWQsCi0JMHhjZCwgMHg4NiwgMHhmYSwgMHg1OSwgMHgwNiwgMHg4ZSwgMHgyYiwgMHgxOSwgMHgzOCwgMHhkZSwgMHg5MCwgMHg4MSwKLQkweDZjLCAweDhlLCAweDQ3LCAweGQyLCAweGI3LCAweGIwLCAweDlkLCAweGM2LCAweDBmLCAweDI2LCAweDc2LCAweGY1LAotCTB4YjEsIDB4ZmMsIDB4MjIsIDB4NjYsIDB4YTIsIDB4NTEsIDB4YmYsIDB4YzcsIDB4NGYsIDB4YTcsIDB4YzMsIDB4NDEsCi0JMHg1NSwgMHhmNywgMHhjNywgMHgxNCwgMHgzOSwgMHhlZiwgMHhmOSwgMHhlMiwgMHhiYiwgMHg4YywgMHg0YiwgMHg1OCwKLQkweDRlLCAweDQzLCAweDM4LCAweGJmLCAweDBjLCAweGJmLCAweDI4LCAweGRiLCAweDBkLCAweGRkLCAweGMyLCAweGFmLAotCTB4YjQsIDB4MjgsIDB4ZGEsIDB4ZTIsIDB4ZGMsIDB4OWEsIDB4NjQsIDB4MWQsIDB4MTcsIDB4NWQsIDB4MzEsIDB4YWMsCi0JMHg5OSwgMHhiOCwgMHhmMSwgMHg5YiwgMHhjMywgMHhhOCwgMHhlMSwgMHhmZSwgMHg4MywgMHhlYSwgMHhlNywgMHg4NiwKLQkweGU1LCAweGRlLCAweDVjLCAweDcyLCAweDk3LCAweGQ0LCAweDI3LCAweGNjLCAweGEzLCAweGUxLCAweGI4LCAweGIwLAotCTB4ZGQsIDB4M2EsIDB4YWUsIDB4YzgsIDB4ZjUsIDB4NzMsIDB4OTEsIDB4ZTcsIDB4YmIsIDB4MTIsIDB4OWQsIDB4ZTQsCi0JMHhmOSwgMHhlZSwgMHg1MSwgMHg2YiwgMHg2NywgMHg5NiwgMHhiZiwgMHgxNywgMHhlYiwgMHgzMiwgMHhhZiwgMHhhMSwKLQkweGMzLCAweGE4LCAweDdmLCAweDFmLCAweDEyLCAweDc1LCAweDIyLCAweDRlLCAweGEyLCAweDBlLCAweDRmLCAweDAyLAotCTB4Y2YsIDB4NjMsIDB4ZWUsIDB4ODUsIDB4ZmUsIDB4ZjgsIDB4MDcsIDB4NWUsIDB4YTMsIDB4ZjEsIDB4NWUsIDB4ZjAsCi0JMHgyMywgMHgxZiwgMHg5NywgMHg2NywgMHhlOCwgMHg1MiwgMHg0MSwgMHhmNywgMHhlMSwgMHgzZCwgMHgzMiwgMHhiZSwKLQkweDhiLCAweDdlLCAweGY4LCAweDY4LCAweDg3LCAweGZkLCAweDllLCAweGM4LCAweDA1LCAweDMxLCAweGZlLCAweGM0LAotCTB4ZGQsIDB4YTcsIDB4YTMsIDB4YWEsIDB4NGYsIDB4YTgsIDB4NzUsIDB4ZDksIDB4ODUsIDB4ZGEsIDB4M2UsIDB4ODQsCi0JMHg5YSwgMHg0OCwgMHg4YiwgMHhhMiwgMHgxNiwgMHg2NSwgMHhhNywgMHhiMCwgMHg1OSwgMHgxNywgMHg4NSwgMHhlZCwKLQkweGIxLCAweDdmLCAweDU3LCAweGEzLCAweDNlLCAweGU2LCAweDdlLCAweGQ3LCAweGI1LCAweDNiLCAweGJjLCAweDZlLAotCTB4MWQsIDB4MTIsIDB4MTgsIDB4NmQsIDB4MTQsIDB4ZjUsIDB4ZGEsIDB4NDUsIDB4NWUsIDB4ZWEsIDB4OGMsIDB4ZjgsCi0JMHhjZSwgMHg1OCwgMHhjMCwgMHg3NywgMHgwZiwgMHhhOSwgMHhlZiwgMHgzZSwgMHgyZiwgMHhiMCwgMHhiMSwgMHgxMSwKLQkweGViLCAweDY2LCAweGJkLCAweDI4LCAweGY4LCAweDlkLCAweGU3LCAweGQ5LCAweDllLCAweDY0LCAweDdlLCAweDhmLAotCTB4NTQsIDB4ZjgsIDB4YjksIDB4YTcsIDB4MDUsIDB4M2QsIDB4MzUsIDB4M2QsIDB4NDAsIDB4MGIsIDB4YzgsIDB4NDAsCi0JMHg4ZiwgMHhlMiwgMHg3ZiwgMHhjYiwgMHg0YywgMHhmOSwgMHhmNSwgMHhiOCwgMHhkYiwgMHhkMSwgMHg5OSwgMHhiMSwKLQkweDRlLCAweDAxLCAweDYzLCAweGM1LCAweDk4LCAweDRjLCAweDVmLCAweGJjLCAweDFjLCAweGYxLCAweGU1LCAweGU2LAotCTB4NjEsIDB4ZWIsIDB4MjAsIDB4ZGYsIDB4NjUsIDB4MGYsIDB4ZTIsIDB4YTksIDB4YjgsIDB4MGYsIDB4M2IsIDB4MjksCi0JMHg5ZSwgMHg0NiwgMHhiZiwgMHhkMCwgMHg0ZSwgMHhkMywgMHhjMCwgMHg3NiwgMHhkMSwgMHhjMiwgMHg3OSwgMHhkZiwKLQkweDc2LCAweDc1LCAweDVmLCAweGI3LCAweDk4LCAweDBiLCAweDMyLCAweGYwLCAweDFlLCAweGZkLCAweDZlLCAweGJjLAotCTB4MTcsIDB4ZWYsIDB4YzcsIDB4N2QsIDB4NzgsIDB4OWUsIDB4N2MsIDB4ZWUsIDB4MDAsIDB4ZWIsIDB4ZWQsIDB4YzQsCi0JMHhiNCwgMHg3YywgMHg5NiwgMHg3MSwgMHg1ZCwgMHg3ZSwgMHgzNywgMHg2MCwgMHg3YiwgMHhmNywgMHg1NywgMHhjZSwKLQkweDlmLCAweDRmLCAweGQ1LCAweGYxLCAweGMxLCAweGZjLCAweDZkLCAweGE3LCAweGIyLCAweGYwLCAweDdkLCAweGUyLAotCTB4YmIsIDB4MTEsIDB4OWYsIDB4YjAsIDB4NmIsIDB4NmQsIDB4ZmUsIDB4ZTQsIDB4NzksIDB4OWQsIDB4ZTMsIDB4ZjMsCi0JMHgzMywgMHhjNSwgMHhkYiwgMHhjMiwgMHg2NiwgMHhjZiwgMHhhNSwgMHg0NywgMHg3YywgMHhlNSwgMHgzMiwgMHhjNiwKLQkweDNiLCAweGUyLCAweDRiLCAweGIxLCAweDBjLCAweDI0LCAweDhiLCAweDg5LCAweDVhLCAweDVlLCAweGUyLCAweDAyLAotCTB4M2EsIDB4ZGQsIDB4NmYsIDB4ODUsIDB4NGUsIDB4MWIsIDB4ZWYsIDB4MGYsIDB4Y2IsIDB4OWEsIDB4YjcsIDB4MzgsCi0JMHg2NiwgMHgzOSwgMHgyYywgMHhiMCwgMHgxYywgMHgxNiwgMHg1OCwgMHgwZSwgMHgwYiwgMHgyYywgMHg4NywgMHg2YywKLQkweGFiLCAweGJlLCAweDU2LCAweDYwLCAweDM5LCAweGU0LCAweGI1LCAweGU0LCAweDU1LCAweDVlLCAweDRiLCAweGE0LAotCTB4ZWMsIDB4YzYsIDB4OTUsIDB4N2YsIDB4NTMsIDB4Y2IsIDB4YWUsIDB4M2IsIDB4NmYsIDB4NTMsIDB4Y2IsIDB4MmEsCi0JMHhkNiwgMHg2ZiwgMHhmMiwgMHgxZCwgMHg5OSwgMHg2OCwgMHg5NiwgMHhkOSwgMHg1YiwgMHgyYywgMHhiMywgMHgxZCwKLQkweGIxLCAweDQxLCAweGJhLCAweDViLCAweGMyLCAweDljLCAweDU5LCAweGU2LCAweDFjLCAweGViLCAweGVhLCAweDk0LAotCTB4MWYsIDB4NTgsIDB4MmIsIDB4YzAsIDB4ZjIsIDB4MDQsIDB4YWMsIDB4NjksIDB4MzEsIDB4ZGQsIDB4MDcsIDB4ZTksCi0JMHgxZSwgMHhlYiwgMHhlYiwgMHhiYiwgMHgyNSwgMHhjOCwgMHhmMCwgMHgxZSwgMHg3NSwgMHg2ZSwgMHhiMSwgMHgwYywKLQkweDYzLCAweGZkLCAweGIzLCAweDdkLCAweGI3LCAweDhhLCAweDA2LCAweDYzLCAweGIyLCAweDQwLCAweDI4LCAweDQzLAotCTB4ZDAsIDB4YTcsIDB4MDIsIDB4YTcsIDB4ZjEsIDB4YmMsIDB4YWYsIDB4YjAsIDB4ZGUsIDB4ODcsIDB4MGYsIDB4MGYsCi0JMHhlYiwgMHhjNSwgMHgxOSwgMHgxZiwgMHhhZiwgMHgxNywgMHg5MSwgMHg5YiwgMHhhYywgMHg0ZiwgMHhjZiwgMHg5NywKLQkweDZjLCAweDk2LCAweGZiLCAweDdlLCAweGZhLCAweDU2LCAweDA5LCAweGViLCAweDM0LCAweDY4LCAweGM0LCAweGU3LAotCTB4NjUsIDB4MTIsIDB4YmUsIDB4MzEsIDB4MjMsIDB4ODYsIDB4YjEsIDB4OGYsIDB4NjcsIDB4MGQsIDB4YzEsIDB4MjcsCi0JMHg3ZiwgMHgwYSwgMHgzYSwgMHgzMCwgMHhlZCwgMHg1ZiwgMHhkYywgMHg4NSwgMHhkYSwgMHhmMywgMHg3MSwgMHhhMywKLQkweDUzLCAweGY5LCAweDFhLCAweDcxLCAweDhjLCAweGY2LCAweDY4LCAweDBiLCAweGJhLCAweGUxLCAweGJjLCAweGRkLAotCTB4YmUsIDB4MjQsIDB4N2UsIDB4YjMsIDB4MjEsIDB4MGEsIDB4ZmYsIDB4OWIsIDB4NGIsIDB4N2YsIDB4NWQsIDB4ZTIsCi0JMHhmYiwgMHgwNSwgMHhiZCwgMHg2NiwgMHgxMiwgMHg3ZSwgMHhlNCwgMHg5MCwgMHhkMywgMHhkMywgMHhmZSwgMHhkOCwKLQkweDBjLCAweDNkLCAweDViLCAweDQ1LCAweGJmLCAweGFmLCAweDUyLCAweDNlLCAweDBjLCAweDdkLCAweDY0LCAweDQ1LAotCTB4ZWYsIDB4OTAsIDB4YTQsIDB4NWQsIDB4MzcsIDB4ZTMsIDB4Y2UsIDB4MjcsIDB4YmMsIDB4NzUsIDB4OWMsIDB4OTksCi0JMHgxMCwgMHgzOCwgMHhiOSwgMHg4YiwgMHhmNSwgMHgwYiwgMHg2OCwgMHhmMywgMHgxMywgMHhlNiwgMHgzNSwgMHg3ZSwKLQkweDVmLCAweDQxLCAweGViLCAweGI3LCAweDFmLCAweGIzLCAweGNlLCAweGMxLCAweDljLCAweGUxLCAweDdjLCAweDZkLAotCTB4OWQsIDB4YjYsIDB4YWEsIDB4NzQsIDB4OWEsIDB4ZWQsIDB4ZDAsIDB4NjksIDB4YjksIDB4YmEsIDB4NGUsIDB4NjMsCi0JMHhkZSwgMHgxMCwgMHhiYSwgMHgwYywgMHhiYSwgMHhlYSwgMHg1MSwgMHhjNiwgMHg5MSwgMHhmMiwgMHgxOCwgMHhmOCwKLQkweDcwLCAweDg3LCAweGQwLCAweDVkLCAweGFjLCAweGZiLCAweGQ5LCAweGFlLCAweDU4LCAweGFjLCAweDY2LCAweDdkLAotCTB4ODcsIDB4ODUsIDB4MGUsIDB4ZDEsIDB4ZmMsIDB4YmQsIDB4N2YsIDB4YjcsIDB4OTQsIDB4OGIsIDB4NmUsIDB4YTEsCi0JMHgwZiwgMHg3MiwgMHgyNywgMHhhMSwgMHhiNywgMHhiYywgMHhkYSwgMHg4ZiwgMHg3MywgMHgzYiwgMHhiNCwgMHhiNywKLQkweDIzLCAweDJmLCAweGIxLCAweDNlLCAweDViLCAweDhjLCAweGMyLCAweGE2LCAweGVkLCAweDUxLCAweGI2LCAweDBmLAotCTB4ZWEsIDB4NzIsIDB4NjEsIDB4YWYsIDB4MGIsIDB4NjMsIDB4ZDUsIDB4ZmEsIDB4NmMsIDB4NDAsIDB4ZjksIDB4MzUsCi0JMHhlMCwgMHg4NywgMHhjNCwgMHg5YywgMHhiNywgMHhjNSwgMHgwOCwgMHgyNiwgMHgzMCwgMHgwMiwgMHhkZiwgMHgxMywKLQkweDYwLCAweDdhLCAweDg5LCAweDFhLCAweGUyLCAweDQ0LCAweGVmLCAweGQyLCAweGFhLCAweDkwLCAweDhkLCAweDc3LAotCTB4MDUsIDB4NzYsIDB4YzksIDB4ZjMsIDB4NzcsIDB4YjMsIDB4ZDMsIDB4MDcsIDB4NDUsIDB4M2YsIDB4ZjMsIDB4NGIsCi0JMHgwZCwgMHhmZCwgMHgzOCwgMHg1NywgMHg3OCwgMHgwZiwgMHhlYiwgMHg4NiwgMHhlOCwgMHg2YiwgMHg2NSwgMHg0MiwKLQkweGVhLCAweGMwLCAweGM1LCAweDMyLCAweDZhLCAweDgwLCAweDg5LCAweDNlLCAweDczLCAweDVmLCAweGY1LCAweDM4LAotCTB4ZDEsIDB4MGYsIDB4YWQsIDB4MGYsIDB4MzYsIDB4MjIsIDB4N2IsIDB4OGMsIDB4NmIsIDB4ZmIsIDB4MzEsIDB4NDcsCi0JMHg1OSwgMHgwNywgMHgwZiwgMHgzZCwgMHhjYiwgMHhlZiwgMHhjNywgMHhiNSwgMHhmNSwgMHhjNywgMHg3MywgMHhhZiwKLQkweDNlLCAweDFlLCAweGY4LCAweGY2LCAweDcwLCAweGNmLCAweGJiLCAweDc0LCAweDU3LCAweDhkLCAweGU3LCAweDZlLAotCTB4N2QsIDB4M2MsIDB4Y2YsIDB4YTgsIDB4ZjEsIDB4NTAsIDB4Y2UsIDB4ODgsIDB4MGQsIDB4MjgsIDB4ZGMsIDB4YmYsCi0JMHhlMSwgMHg2NywgMHg3NywgMHgyNywgMHgxOCwgMHhjNywgMHhlNCwgMHg5NiwgMHg0MCwgMHhlNywgMHhmZCwgMHg4YSwKLQkweDlmLCAweDljLCAweDdlLCAweDU0LCAweDY3LCAweDVmLCAweGFkLCAweGM5LCAweDNiLCAweGFjLCAweDdmLCAweGVmLAotCTB4MDksIDB4MWMsIDB4MzMsIDB4YzIsIDB4MzgsIDB4MDYsIDB4ZDcsIDB4MjksIDB4MGYsIDB4M2QsIDB4OWQsIDB4MGIsCi0JMHhhMywgMHg0ZSwgMHhlZCwgMHgwYywgMHg4ZiwgMHg5YiwgMHhlZCwgMHhiMSwgMHg2OSwgMHhmZSwgMHgxNCwgMHhmZSwKLQkweDM1LCAweDNjLCAweDQ3LCAweGRmLCAweGZmLCAweDNjLCAweGRkLCAweDliLCAweDg3LCAweDJlLCAweDA3LCAweDhlLAotCTB4OTUsIDB4YjUsIDB4NmMsIDB4ZWYsIDB4MmQsIDB4NGIsIDB4ZmYsIDB4NmUsIDB4Y2EsIDB4ZDMsIDB4YmYsIDB4MGIsCi0JMHhkZiwgMHhlZSwgMHgzNCwgMHg3MCwgMHg3ZSwgMHgwOCwgMHg3ZSwgMHhlMCwgMHhhNCwgMHhmYSwgMHhhZCwgMHg4ZiwKLQkweDVjLCAweDE1LCAweGNmLCAweGYyLCAweGQyLCAweDRiLCAweDMzLCAweDhlLCAweGQ4LCAweDM4LCAweGM0LCAweGFhLAotCTB4NjQsIDB4NTksIDB4Y2YsIDB4ZDgsIDB4YTEsIDB4MGUsIDB4NDMsIDB4ZTYsIDB4ZGMsIDB4ZGMsIDB4YTgsIDB4NmEsCi0JMHhlYywgMHg3NCwgMHg5NCwgMHhlNywgMHhjYywgMHg4ZSwgMHgxYSwgMHg0NiwgMHg0YSwgMHhmOCwgMHgxYSwgMHhiYSwKLQkweGVkLCAweDFlLCAweGVhLCAweGUyLCAweDc1LCAweGY0LCAweDJjLCAweGExLCAweDk2LCAweDlhLCAweDY1LCAweDYyLAotCTB4MGYsIDB4ZTAsIDB4MTIsIDB4ZjMsIDB4NjQsIDB4M2UsIDB4NmEsIDB4NDUsIDB4MWUsIDB4MTcsIDB4NzYsIDB4MjksCi0JMHhkNiwgMHgxNywgMHgwMywgMHg3NCwgMHg2MiwgMHg1YSwgMHhhMywgMHgwZiwgMHg3YywgMHhiYywgMHg4NCwgMHgzYSwKLQkweDlhLCAweDUxLCAweDFlLCAweDNmLCAweGZjLCAweGM3LCAweDYzLCAweGU2LCAweDliLCAweGJjLCAweDJlLCAweDVkLAotCTB4MTIsIDB4N2UsIDB4OTksIDB4MGIsIDB4OTQsIDB4NjMsIDB4MzksIDB4M2QsIDB4MjIsIDB4ZTQsIDB4ZDQsIDB4MTgsCi0JMHg2MSwgMHgyOSwgMHg2MiwgMHhiOSwgMHg0MiwgMHg2YywgMHhjMiwgMHhiOCwgMHhhOCwgMHhkYiwgMHgyMywgMHg2ZCwKLQkweDFkLCAweDFlLCAweGU1LCAweGIyLCAweGFhLCAweDg3LCAweDkwLCAweDg2LCAweGVlLCAweGQ4LCAweGI4LCAweDRmLAotCTB4MjIsIDB4ZmQsIDB4ODksIDB4N2QsIDB4MzEsIDB4NGUsIDB4NGMsIDB4ZTYsIDB4ZjYsIDB4N2QsIDB4YzMsIDB4YWUsCi0JMHgzMywgMHg0NSwgMHhiZCwgMHg0OCwgMHhkMCwgMHg0ZSwgMHhmOCwgMHgxMywgMHg4ZCwgMHgyOSwgMHhhNiwgMHg5YiwKLQkweGZlLCAweGRkLCAweDE5LCAweGE3LCAweGRmLCAweGUwLCAweDljLCAweGM4LCAweGViLCAweDdmLCAweGE1LCAweDJhLAotCTB4ZDcsIDB4ZTAsIDB4MWMsIDB4ZGIsIDB4ZjQsIDB4ZjksIDB4ODMsIDB4NGUsIDB4NGMsIDB4NjIsIDB4MTUsIDB4OTMsCi0JMHhjMiwgMHg5NywgMHhiMywgMHg5YiwgMHgxMiwgMHgwYiwgMHg1MywgMHhmNCwgMHg2OCwgMHgwMSwgMHgzYSwgMHg4YywKLQkweGVlLCAweDI0LCAweDZjLCAweGZjLCAweGEyLCAweDBjLCAweDY0LCAweDdjLCAweDhhLCAweDUyLCAweDU1LCAweGQwLAotCTB4YzgsIDB4YzcsIDB4NTgsIDB4ODksIDB4NzksIDB4YWYsIDB4ODgsIDB4M2QsIDB4N2YsIDB4M2UsIDB4MmUsIDB4ZTMsCi0JMHg3NywgMHg1NCwgMHg3ZSwgMHg1ZCwgMHhmOSwgMHhjYiwgMHg4NywgMHgyOSwgMHhiOSwgMHg0MCwgMHhkOSwgMHg0YywKLQkweGY0LCAweDRiLCAweGEyLCAweGQ2LCAweDc1LCAweDI2LCAweDNhLCAweGExLCAweDdjLCAweDNiLCAweDExLCAweGJlLAotCTB4MGUsIDB4N2YsIDB4OTksIDB4NDksIDB4NWYsIDB4MmUsIDB4NTgsIDB4ZDksIDB4MGMsIDB4NDksIDB4OWYsIDB4MDUsCi0JMHg3MSwgMHgxZiwgMHgwYywgMHg1ZSwgMHg3YiwgMHg3NywgMHhiMCwgMHgwZSwgMHgzOSwgMHgyMSwgMHhmYywgMHgxNiwKLQkweDhjLCAweDU0LCAweGU2LCAweGQxLCAweDFlLCAweDNlLCAweDg3LCAweDdlLCAweDgyLCAweDlkLCAweDk2LCAweDI5LAotCTB4M2UsIDB4YTUsIDB4ZGEsIDB4ZDYsIDB4MjgsIDB4YzQsIDB4YmMsIDB4MTAsIDB4ZmEsIDB4NTUsIDB4M2IsIDB4MWIsCi0JMHgzNSwgMHgxYSwgMHhmNywgMHhjMywgMHhlNywgMHg3MSwgMHg0MiwgMHhlMCwgMHhjOCwgMHgxMSwgMHhiNiwgMHg3OSwKLQkweDQ0LCAweGJiLCAweGRhLCAweGFjLCAweGYwLCAweDVmLCAweGYwLCAweDc5LCAweGY5LCAweDgxLCAweDIxLCAweGZkLAotCTB4OWIsIDB4MDgsIDB4YjgsIDB4MmUsIDB4ZmQsIDB4MWEsIDB4ZmMsIDB4Y2MsIDB4MzIsIDB4ZjcsIDB4YTMsIDB4MjksCi0JMHg5ZSwgMHg3ZSwgMHg5OCwgMHhlMiwgMHg5YiwgMHhmMCwgMHgzMywgMHg5ZCwgMHhiYywgMHhhZiwgMHg3ZSwgMHgyNiwKLQkweGE2LCAweDM1LCAweGFmLCAweDNkLCAweDM3LCAweDU4LCAweDM2LCAweDVlLCAweDVmLCAweGQ3LCAweGZlLCAweGZiLAotCTB4NTAsIDB4YWYsIDB4ZTEsIDB4NGMsIDB4YWIsIDB4OTAsIDB4ZjgsIDB4ZGQsIDB4MGMsIDB4NjAsIDB4ZjAsIDB4N2MsCi0JMHhmNSwgMHg3MSwgMHhmYywgMHg1ZSwgMHg4YywgMHgyZiwgMHgyZCwgMHhiMCwgMHg3MSwgMHg4NCwgMHhiMSwgMHgwZCwKLQkweDMwLCAweGNlLCAweDk4LCAweGQ4LCAweDE3LCAweDhiLCAweDNmLCAweDE2LCAweGYxLCAweGU1LCAweDk3LCAweDA3LAotCTB4YzksIDB4MGYsIDB4N2YsIDB4OWMsIDB4YWQsIDB4NjMsIDB4MjksIDB4YmEsIDB4NDUsIDB4ZGMsIDB4YmIsIDB4ZGMsCi0JMHg4ZiwgMHhjNCwgMHhmYSwgMHgwYywgMHg5ZCwgMHg3OCwgMHg4NywgMHhlZCwgMHg4NiwgMHgwOSwgMHgxNSwgMHg4NywKLQkweGQzLCAweDIxLCAweDZhLCAweDUzLCAweGM5LCAweGJkLCAweDU0LCAweGFkLCAweDUzLCAweDM0LCAweGVmLCAweGU5LAotCTB4YmQsIDB4MGUsIDB4ZTcsIDB4NmYsIDB4NzMsIDB4NDEsIDB4NzYsIDB4OWQsIDB4OTgsIDB4MDIsIDB4ZmUsIDB4MjksCi0JMHgzMSwgMHg0NywgMHg5NywgMHg4OCwgMHhlNCwgMHgxYywgMHgzNywgMHhmNiwgMHgzMSwgMHhiYSwgMHg3OCwgMHg5ZSwKLQkweDYwLCAweDBmLCAweGMyLCAweGVmLCAweGY3LCAweDM1LCAweGZlLCAweGM0LCAweDdlLCAweGM0LCAweGQ1LCAweDIxLAotCTB4ZTAsIDB4YTgsIDB4M2UsIDB4OWIsIDB4NzksIDB4NjYsIDB4MWEsIDB4ZTcsIDB4ODMsIDB4NmMsIDB4OWYsIDB4NjksCi0JMHhkYywgMHgyYiwgMHg3ZCwgMHg1MSwgMHg2YywgMHhiMywgMHhhOSwgMHhmOSwgMHg4MiwgMHgxZiwgMHg2YSwgMHg1NCwKLQkweGQ1LCAweDI5LCAweGIwLCAweGM4LCAweGVjLCAweDA3LCAweDlkLCAweDNlLCAweDJkLCAweDc5LCAweDVjLCAweDZmLAotCTB4ZWYsIDB4NjIsIDB4MjMsIDB4YjEsIDB4NGUsIDB4ZjgsIDB4ZGQsIDB4MzAsIDB4ZDQsIDB4ZWIsIDB4ZGMsIDB4MGIsCi0JMHhkYSwgMHhmMywgMHgxYywgMHgzOSwgMHhmNywgMHgzNiwgMHgxZSwgMHhkZiwgMHhhNSwgMHg3ZiwgMHhiMywgMHhlOCwKLQkweGZlLCAweGNjLCAweGRiLCAweDE2LCAweDhmLCAweDc5LCAweGZiLCAweGY5LCAweDkwLCAweGRjLCAweDNiLCAweDdiLAotCTB4NTgsIDB4YjUsIDB4ZjEsIDB4OGEsIDB4NmYsIDB4NWQsIDB4ZmUsIDB4MGUsIDB4ZmMsIDB4NTAsIDB4OGQsIDB4ZmMsCi0JMHg4YiwgMHg3NywgMHg4NCwgMHg1ZSwgMHg2OSwgMHhmNSwgMHg4NSwgMHg0NywgMHg1OCwgMHg5ZiwgMHg0YSwgMHgzOSwKLQkweDNlLCAweGUxLCAweDIxLCAweGM3LCAweGZkLCAweDMxLCAweGUwLCAweDk2LCAweDhmLCAweDJmLCAweGM3LCAweGM3LAotCTB4ZGIsIDB4Y2EsIDB4ZjEsIDB4OWUsIDB4NjEsIDB4ZTksIDB4OGIsIDB4NmQsIDB4OTUsIDB4NjMsIDB4ZTQsIDB4MDAsCi0JMHg5ZCwgMHhhOCwgMHhiNiwgMHhmMywgMHg3YiwgMHg2MSwgMHgxZSwgMHg5MCwgMHhjYiwgMHhlZSwgMHhmNCwgMHg5NSwKLQkweDgwLCAweDY2LCAweGRhLCAweDVmLCAweDgyLCAweDdkLCAweDQzLCAweGYwLCAweDI1LCAweGY2LCAweDVlLCAweDRlLAotCTB4MWEsIDB4YTksIDB4NzksIDB4ZjcsIDB4NWUsIDB4ZWEsIDB4NDYsIDB4ZWUsIDB4YmQsIDB4ZWQsIDB4NzEsIDB4MmYsCi0JMHhiMCwgMHgzYiwgMHg2NCwgMHhjMywgMHg4YSwgMHg0OCwgMHg1ZiwgMHg4MCwgMHhhNiwgMHhkZiwgMHhiMCwgMHhlZiwKLQkweDcwLCAweGM5LCAweGNhLCAweDk2LCAweDA5LCAweGJlLCAweGVlLCAweDMwLCAweDlkLCAweGMzLCAweGZlLCAweGI0LAotCTB4ZjIsIDB4MjUsIDB4MWYsIDB4MmIsIDB4NDgsIDB4M2EsIDB4ODQsIDB4MGUsIDB4MGEsIDB4ZmUsIDB4MDAsIDB4YmUsCi0JMHg4ZCwgMHhhNCwgMHhmZCwgMHg2OSwgMHg5ZSwgMHg2MywgMHhlOSwgMHg0NywgMHhjZSwgMHgyYywgMHg0NSwgMHhkNCwKLQkweGJjLCAweDcxLCAweDViLCAweDNjLCAweGNmLCAweDMzLCAweDVmLCAweDEwLCAweGYzLCAweDY1LCAweDNkLCAweGJmLAotCTB4NTIsIDB4OGYsIDB4NGYsIDB4YzYsIDB4ZGEsIDB4NTAsIDB4YTMsIDB4ZmYsIDB4ZTAsIDB4NzUsIDB4Y2YsIDB4N2YsCi0JMHgzMCwgMHgyNCwgMHg2YSwgMHgzNywgMHhkYywgMHhhOCwgMHgxZSwgMHg2NCwgMHhiYywgMHg4OSwgMHgzOSwgMHg4NSwKLQkweDBmLCAweDUyLCAweGZiLCAweDg4LCAweDFmLCAweGRhLCAweDRiLCAweGJkLCAweDA3LCAweDE4LCAweDA1LCAweDE4LAotCTB4NjQsIDB4MzMsIDB4YmUsIDB4MzQsIDB4MGUsIDB4MjIsIDB4Y2UsIDB4ZGMsIDB4ZTQsIDB4N2IsIDB4NTAsIDB4NzMsCi0JMHg2YSwgMHhkYywgMHg0YywgMHg1MSwgMHgwZiwgMHhmYywgMHgxMCwgMHhhOCwgMHgyNSwgMHg2ZCwgMHhlNiwgMHg5YSwKLQkweDY0LCAweGVjLCAweDk0LCAweDkwLCAweGIxLCAweGQ0LCAweGYyLCAweDI5LCAweDI1LCAweDYzLCAweGE3LCAweDk0LAotCTB4MWYsIDB4ZmUsIDB4OTQsIDB4OTIsIDB4YjEsIDB4NTMsIDB4NGEsIDB4YzYsIDB4NGUsIDB4MjksIDB4MTksIDB4M2IsCi0JMHhjNSwgMHg3YywgMHgzZSwgMHhjNiwgMHhmOCwgMHgxNiwgMHg1OCwgMHg0NCwgMHhmYiwgMHg0MSwgMHg3YiwgMHgyOSwKLQkweDUzLCAweGMyLCAweDc1LCAweGFjLCAweGNmLCAweDZlLCAweDM5LCAweDdiLCAweDY5LCAweDQ0LCAweGNhLCAweDE5LAotCTB4NjMsIDB4MTMsIDB4MTksIDB4YWYsIDB4YzcsIDB4ZWYsIDB4YzIsIDB4MWMsIDB4ZmMsIDB4MWUsIDB4ZDMsIDB4ZWYsCi0JMHgyMywgMHgzYSwgMHgzMywgMHg4ZiwgMHhiZSwgMHhmYSwgMHgyOCwgMHgyOSwgMHg2YSwgMHhjOSwgMHg3NiwgMHg1MCwKLQkweGMyLCAweDg5LCAweDg1LCAweDQzLCAweGM4LCAweDBmLCAweDkzLCAweGI2LCAweDVmLCAweGI2LCAweDZkLCAweGFlLAotCTB4OTgsIDB4ZTYsIDB4OTMsIDB4OTgsIDB4OWEsIDB4MmYsIDB4YjcsIDB4NWQsIDB4ZDQsIDB4NDUsIDB4ZTksIDB4MjIsCi0JMHhlOCwgMHg4YSwgMHg5OCwgMHg0YSwgMHg5MywgMHhlNywgMHg0NiwgMHhkMCwgMHg0OSwgMHg4NiwgMHg0NCwgMHhiOSwKLQkweDY4LCAweDcwLCAweDRjLCAweGQxLCAweGUwLCAweGRiLCAweDYyLCAweDhjLCAweDg4LCAweDQ5LCAweDg0LCAweDJmLAotCTB4YjMsIDB4M2QsIDB4MWQsIDB4NzIsIDB4ODUsIDB4MzEsIDB4N2UsIDB4MGUsIDB4Y2IsIDB4YzIsIDB4YzEsIDB4MDgsCi0JMHhlYiwgMHhhNCwgMHg4ZCwgMHhkMywgMHhhMSwgMHgzMSwgMHhmNiwgMHg3NiwgMHhiYSwgMHg2NywgMHhhMywgMHg3OSwKLQkweDM5LCAweDc3LCAweDFjLCAweDZiLCAweDQ5LCAweDQ0LCAweGFkLCAweDIzLCAweDEyLCAweDE3LCAweDZmLCAweGIxLAotCTB4NmIsIDB4NzQsIDB4MzQsIDB4YmEsIDB4OTcsIDB4OGYsIDB4YWQsIDB4NzQsIDB4OTYsIDB4MGUsIDB4OTAsIDB4ZDEsCi0JMHg1NywgMHhhMywgMHhiZiwgMHg2MCwgMHgzOSwgMHhlOCwgMHg2NiwgMHgzOSwgMHgzOCwgMHhhYSwgMHhlYywgMHg5MiwKLQkweGEzLCAweDc1LCAweGJiLCAweDY0LCAweGNmLCAweDFlLCAweGM0LCAweDY1LCAweDY0LCAweGM0LCAweGJlLCAweGQ3LAotCTB4NTYsIDB4NTUsIDB4NDMsIDB4MDAsIDB4YmUsIDB4NmYsIDB4OWMsIDB4NzcsIDB4NTEsIDB4N2MsIDB4MTgsIDB4ZTcsCi0JMHhmOCwgMHgyZCwgMHgyMiwgMHg2YiwgMHgzMiwgMHhlZSwgMHgxYiwgMHhkZiwgMHgyMywgMHhiMCwgMHhiYiwgMHhjZiwKLQkweGMyLCAweDNkLCAweDQ3LCAweGE1LCAweGRlLCAweGYzLCAweDkxLCAweDdmLCAweGZjLCAweDM2LCAweGUzLCAweDg5LAotCTB4MWEsIDB4M2QsIDB4YzEsIDB4ZWYsIDB4Y2MsIDB4MTcsIDB4ZjcsIDB4ZjEsIDB4YjMsIDB4NzUsIDB4NGQsIDB4MDksCi0JMHgzYiwgMHg2ZSwgMHhmOCwgMHhiNiwgMHg5MiwgMHhiZiwgMHhhZiwgMHhkZCwgMHhiYiwgMHgyZCwgMHhjMSwgMHg4ZiwKLQkweDhjLCAweGE3LCAweDhkLCAweGQ5LCAweGU4LCAweDdiLCAweGI1LCAweGQzLCAweDI3LCAweGUxLCAweDYzLCAweDg3LAotCTB4OWMsIDB4NTgsIDB4MjEsIDB4ZDMsIDB4ZTcsIDB4MjUsIDB4MWYsIDB4MTIsIDB4MmIsIDB4MzUsIDB4ZTIsIDB4NjMsCi0JMHgyMSwgMHgyZiwgMHgzNSwgMHhmYSwgMHg3NywgMHgxZSwgMHg1YiwgMHg4OCwgMHhiMCwgMHg3NywgMHgyMiwgMHg5ZiwKLQkweDlmLCAweGE2LCAweDE5LCAweDkxLCAweDgzLCAweDhkLCAweDM4LCAweGU5LCAweDMzLCAweGYzLCAweGZhLCAweDVkLAotCTB4YjYsIDB4ZTIsIDB4OGQsIDB4Y2YsIDB4MjAsIDB4Y2UsIDB4YWQsIDB4YjgsIDB4NDgsIDB4NmIsIDB4YWYsIDB4MzksCi0JMHhmMCwgMHhkNywgMHg4ZCwgMHgyZCwgMHhhYywgMHhmNiwgMHg4NSwgMHg0NSwgMHg0ZSwgMHhmOCwgMHg3NiwgMHhjNiwKLQkweDQ4LCAweDNhLCAweDFlLCAweDdhLCAweDljLCAweDlmLCAweDBmLCAweDNmLCAweDVlLCAweDgwLCAweDkyLCAweDU3LAotCTB4ZDAsIDB4YWUsIDB4OTMsIDB4NDYsIDB4MTcsIDB4NmEsIDB4NWYsIDB4ZTAsIDB4ZWYsIDB4YzUsIDB4ZmUsIDB4NjUsCi0JMHg4NiwgMHhiYSwgMHhkNSwgMHhkZSwgMHg0NCwgMHg4ZiwgMHhkYSwgMHhjZiwgMHg4YSwgMHhiMCwgMHhlYywgMHgzNSwKLQkweDcyLCAweDlkLCAweDQ3LCAweGViLCAweDNlLCAweDNkLCAweGM4LCAweDg0LCAweGRiLCAweGE3LCAweGY3LCAweGY0LAotCTB4M2EsIDB4ZWIsIDB4ZDUsIDB4N2EsIDB4NzIsIDB4ODAsIDB4NTgsIDB4ZDYsIDB4MmUsIDB4NTIsIDB4YmUsIDB4NGEsCi0JMHgzMywgMHg0ZiwgMHgxYiwgMHhjZCwgMHhlOSwgMHhkYiwgMHhmNCwgMHgzZCwgMHhkZCwgMHg5ZCwgMHgzMSwgMHhmMywKLQkweGMyLCAweDliLCAweDc2LCAweDUwLCAweGYxLCAweDVmLCAweDI3LCAweDlkLCAweDI5LCAweDA1LCAweDc5LCAweGNkLAotCTB4ODcsIDB4NmUsIDB4MDUsIDB4YmQsIDB4ZmMsIDB4YzMsIDB4YzgsIDB4NzMsIDB4ZjksIDB4N2EsIDB4YTAsIDB4OTMsCi0JMHg5NiwgMHg5NiwgMHgxMCwgMHg2YiwgMHhmMSwgMHg0NywgMHg3YiwgMHg2NCwgMHg3YywgMHg3MSwgMHg5YSwgMHhlOSwKLQkweDcyLCAweDgwLCAweGQ3LCAweDQ3LCAweDQzLCAweGVkLCAweDFkLCAweGUxLCAweDFhLCAweDc0LCAweDg5LCAweGE4LAotCTB4MzcsIDB4MWEsIDB4ZjgsIDB4ZDIsIDB4NDQsIDB4OTAsIDB4ZWQsIDB4MDIsIDB4YjksIDB4ZjcsIDB4NzAsIDB4ODgsCi0JMHg5ZiwgMHhmZCwgMHhmZCwgMHg1MiwgMHgxYSwgMHhmZSwgMHhiMiwgMHhkMCwgMHgxMSwgMHg3ZSwgMHg3ZSwgMHg5MiwKLQkweGYxLCAweDQ0LCAweDljLCAweDNhLCAweGE5LCAweGIyLCAweGQ0LCAweGM5LCAweDc2LCAweDQxLCAweDI3LCAweGUzLAotCTB4ODksIDB4YjEsIDB4ZDAsIDB4YTgsIDB4NGYsIDB4YmMsIDB4NGIsIDB4ZTQsIDB4ZDQsIDB4M2MsIDB4MWMsIDB4MzgsCi0JMHhjMCwgMHg3YywgMHg4NSwgMHg3NywgMHhiZCwgMHhhZSwgMHhkZSwgMHhlNSwgMHg3ZSwgMHhjNywgMHgyZiwgMHg2YSwKLQkweDM4LCAweDNmLCAweGUyLCAweDM3LCAweDJmLCAweGRjLCAweGMyLCAweGVmLCAweDUxLCAweGNkLCAweGNmLCAweDMwLAotCTB4NzYsIDB4MGUsIDB4NTMsIDB4N2UsIDB4YmUsIDB4ODMsIDB4YzcsIDB4MTAsIDB4NjMsIDB4M2IsIDB4MjIsIDB4Y2EsCi0JMHhlNywgMHg4ZiwgMHg1MCwgMHhiNiwgMHg3YSwgMHg5MiwgMHg3ZSwgMHhiZiwgMHhlYSwgMHhmNCwgMHgwOSwgMHgzZiwKLQkweGMyLCAweDdkLCAweDk2LCAweDM5LCAweGZkLCAweDVkLCAweGRjLCAweGFmLCAweDBmLCAweDZkLCAweGI3LCAweDhlLAotCTB4MDksIDB4OTIsIDB4ZmYsIDB4N2IsIDB4NjEsIDB4ZWEsIDB4N2MsIDB4MGUsIDB4YmUsIDB4OTcsIDB4MWEsIDB4MTUsCi0JMHhhMywgMHhkNiwgMHhhNSwgMHgzYiwgMHgyNCwgMHhmZCwgMHhjZiwgMHgyZiwgMHg4OCwgMHhiOCwgMHg1YSwgMHhiZSwKLQkweDlmLCAweDlmLCAweDM5LCAweDg3LCAweDc2LCAweDJmLCAweDk4LCAweDc0LCAweGQzLCAweDk2LCAweGY0LCAweDdlLAotCTB4MjMsIDB4MTAsIDB4MjYsIDB4ZmYsIDB4Y2IsIDB4ODgsIDB4N2QsIDB4MDIsIDB4NTYsIDB4MzMsIDB4MmYsIDB4ZDgsCi0JMHhmYiwgMHg1OCwgMHhiZiwgMHgzZiwgMHg4NywgMHhmYiwgMHhmOCwgMHhmMywgMHg2NSwgMHg5YywgMHgwNywgMHg3OSwKLQkweDljLCAweDU4LCAweGFmLCAweDExLCAweGVmLCAweDAyLCAweGJkLCAweDc4LCAweDIwLCAweDEyLCAweDEyLCAweGZjLAotCTB4ZjcsIDB4MDgsIDB4ZjMsIDB4NTQsIDB4ODcsIDB4ZjAsIDB4MzUsIDB4ZjYsIDB4YTMsIDB4YWQsIDB4M2QsIDB4YzQsCi0JMHhkOCwgMHhjMiwgMHhiYywgMHgzMCwgMHhiMSwgMHgwZiwgMHhlNywgMHhmMSwgMHgzZSwgMHgzZiwgMHhkMywgMHg0OCwKLQkweGYyLCAweDEwLCAweGM2LCAweGQzLCAweGM0LCAweGRjLCAweDgxLCAweDQzLCAweDEzLCAweGM0LCAweGYzLCAweDA5LAotCTB4ZmMsIDB4YzEsIDB4ZjMsIDB4MTksIDB4NDIsIDB4N2QsIDB4YTcsIDB4MjAsIDB4YTUsIDB4ZjgsIDB4MWQsIDB4YzksCi0JMHg5MiwgMHgxYywgMHhmNywgMHg1YywgMHhkNSwgMHg0ZiwgMHhkMiwgMHg0ZiwgMHg3NSwgMHg3NCwgMHg0NCwgMHhmZiwKLQkweDllLCAweDIxLCAweDBkLCAweGUyLCAweGQ5LCAweDVhLCAweDU2LCAweDcwLCAweGRjLCAweDRiLCAweDc3LCAweDRiLAotCTB4M2QsIDB4NzQsIDB4NGYsIDB4ZWQsIDB4NjksIDB4ZGQsIDB4MTUsIDB4NzYsIDB4MTksIDB4ZWIsIDB4ZjAsIDB4NzQsCi0JMHgyZiwgMHhkZCwgMHg1OSwgMHhlYSwgMHgyMCwgMHhlYSwgMHgwZiwgMHg4YSwgMHgzZCwgMHhlNywgMHhiYiwgMHhhNSwKLQkweDMyLCAweGJmLCAweDNmLCAweDMxLCAweDIyLCAweGZkLCAweDNhLCAweDBkLCAweDFlLCAweGI5LCAweGViLCAweGMxLAotCTB4MjMsIDB4MWYsIDB4MDgsIDB4MWUsIDB4ZDksIDB4MzcsIDB4YjIsIDB4MzYsIDB4OGYsIDB4ZWMsIDB4NTIsIDB4YjYsCi0JMHg0OCwgMHg5MCwgMHgzYSwgMHgxNSwgMHg3ZiwgMHhiYywgMHhjNCwgMHhmYywgMHhmMSwgMHgyYywgMHhmMywgMHhjNywKLQkweGUxLCAweDM2LCAweGZjLCAweDYxLCAweGI4LCAweGY4LCAweGUzLCAweDg4LCAweGUwLCAweDhmLCAweDg3LCAweDQ2LAotCTB4ZDYsIDB4ZTIsIDB4OGYsIDB4YzMsIDB4ZmUsIDB4YjUsIDB4N2MsIDB4NGQsIDB4ZTIsIDB4YjcsIDB4M2MsIDB4MmYsCi0JMHhjYywgMHhkOSwgMHhiYiwgMHg5OSwgMHhkNywgMHg2ZCwgMHhhYSwgMHhjYywgMHgyMywgMHg2NywgMHg2MSwgMHgyNSwKLQkweDZhLCAweGQwLCAweGJmLCAweDA4LCAweDliLCAweDZjLCAweDU1LCAweGQ4LCAweGZjLCAweDMxLCAweDExLCAweGMzLAotCTB4YmEsIDB4MjgsIDB4ZjgsIDB4OGIsIDB4ZDcsIDB4ZmYsIDB4MTgsIDB4NzIsIDB4YWEsIDB4ZGMsIDB4NzMsIDB4ZDEsCi0JMHg0ZCwgMHgzNywgMHhhMywgMHg5OCwgMHgwYiwgMHg1MywgMHhjZCwgMHgwNSwgMHhhZSwgMHg3NSwgMHhlOSwgMHhmYSwKLQkweDkwLCAweDAxLCAweGJlLCAweDdlLCAweGUxLCAweDAzLCAweGYwLCAweGU4LCAweDcyLCAweDRmLCAweDIwLCAweDU5LAotCTB4ZjgsIDB4ZTYsIDB4MDgsIDB4ZjAsIDB4NWYsIDB4N2UsIDB4OTksIDB4MWMsIDB4ZDcsIDB4MDMsIDB4N2MsIDB4M2QsCi0JMHgyYywgMHg3ZSwgMHhmYiwgMHgwOSwgMHhiMiwgMHhmMiwgMHg4ZiwgMHg4OCwgMHg3MSwgMHg2NCwgMHg5ZSwgMHhiYywKLQkweDU5LCAweDFhLCAweGE2LCAweDViLCAweGE1LCAweGRkLCAweGI0LCAweDVhLCAweDFhLCAweGExLCAweDM3LCAweDQ1LAotCTB4MmQsIDB4MGQsIDB4OTksIDB4MWIsIDB4YjksIDB4MmEsIDB4ZTYsIDB4YzgsIDB4YTAsIDB4NDMsIDB4NjEsIDB4NmUsCi0JMHhiMywgMHhiNCwgMHg5YiwgMHg1NiwgMHg5NiwgMHgzNCwgMHg3ZiwgMHg4MywgMHhiNywgMHhjMSwgMHgyZiwgMHhmMSwKLQkweDNlLCAweDk5LCAweDJmLCAweGQ3LCAweGNhLCAweDMzLCAweGM5LCAweDI2LCAweDllLCAweDkxLCAweGY3LCAweDgwLAotCTB4NTcsIDB4ZjIsIDB4YWQsIDB4YjksIDB4YmUsIDB4ZGQsIDB4YTEsIDB4MTgsIDB4NjIsIDB4ZjUsIDB4ODIsIDB4ZDQsCi0JMHg4MSwgMHhiOCwgMHg0NSwgMHhjMywgMHg5YSwgMHgzYywgMHhlNCwgMHgwNywgMHg4NiwgMHhmZSwgMHgyYSwgMHhhZiwKLQkweGI5LCAweDNjLCAweDY3LCAweDM2LCAweGUyLCAweDljLCAweDQ2LCAweDE4LCAweDBmLCAweDZmLCAweDE3LCAweGY4LAotCTB4MzcsIDB4NjEsIDB4MDcsIDB4MjIsIDB4NDksIDB4YWEsIDB4NWQsIDB4MzAsIDB4NmMsIDB4ZDQsIDB4NzMsIDB4NGMsCi0JMHhmMywgMHhmMywgMHgwYywgMHhlNSwgMHg2ZiwgMHhkYSwgMHhlNiwgMHhlMCwgMHgzZiwgMHgzNywgMHhkNiwgMHhjNSwKLQkweDVlLCAweGYyLCAweDYzLCAweGRjLCAweDY3LCAweGFjLCAweGMzLCAweDhkLCAweGZkLCAweDFhLCAweGFhLCAweGVmLAotCTB4ZDcsIDB4NzQsIDB4ZjMsIDB4YjgsIDB4YTUsIDB4ZWMsIDB4Y2QsIDB4ZGEsIDB4ZGMsIDB4YWUsIDB4Y2EsIDB4ZWQsCi0JMHhhYSwgMHhkOCwgMHhmYiwgMHhlMywgMHhlYiwgMHg0YiwgMHhkOCwgMHg3NywgMHgxZSwgMHhhNiwgMHhkNSwgMHg3OSwKLQkweGM4LCAweDI4LCAweGZjLCAweDIxLCAweDhkLCAweGJkLCAweGRlLCAweGQ1LCAweDY1LCAweDVjLCAweDg3LCAweDRmLAotCTB4YTQsIDB4YjEsIDB4ZDcsIDB4YmIsIDB4YWEsIDB4ZjYsIDB4N2EsIDB4NTcsIDB4OTcsIDB4NjMsIDB4NDIsIDB4NmYsCi0JMHhlNywgMHg0YiwgMHg0YywgMHhmNywgMHg5MiwgMHg1ZiwgMHhjNSwgMHgzOSwgMHhlZSwgMHg1MywgMHhiZiwgMHgyZCwKLQkweGY0LCAweDk4LCAweGYwLCAweDY5LCAweGY3LCAweGQ5LCAweDZiLCAweGQzLCAweGYwLCAweDUwLCAweDBiLCAweDBkLAotCTB4NjMsIDB4MDIsIDB4NjcsIDB4YTUsIDB4ZjgsIDB4OTksIDB4YzksIDB4ZDIsIDB4NjMsIDB4ZmYsIDB4M2IsIDB4NjAsCi0JMHg3OCwgMHg0NiwgMHgwMCwgMHhmMywgMHg5ZSwgMHgzMCwgMHgzNCwgMHhlZiwgMHhjMSwgMHhlNiwgMHg4ZSwgMHhmOSwKLQkweDE5LCAweDIwLCAweGY3LCAweDE0LCAweGQ5LCAweDgwLCAweGZiLCAweDE2LCAweDkwLCAweGYyLCAweDRhLCAweDA2LAotCTB4YWQsIDB4YmMsIDB4MDIsIDB4YTYsIDB4MDksIDB4NzUsIDB4ODgsIDB4ZmUsIDB4YTYsIDB4ZjUsIDB4OWYsIDB4ZTUsCi0JMHg2MCwgMHhlMywgMHg4MCwgMHg0ZCwgMHg0MCwgMHg3MywgMHg5YiwgMHhhNywgMHg5MCwgMHgzMiwgMHhmNywgMHgwYywKLQkweGFjLCAweDZmLCAweGIxLCAweGFlLCAweDZkLCAweGI0LCAweDAxLCAweGVmLCAweGIxLCAweDVlLCAweDM0LCAweDg1LAotCTB4ODUsIDB4NjEsIDB4NDksIDB4MGYsIDB4MDMsIDB4YjAsIDB4N2UsIDB4MDAsIDB4YTUsIDB4NzUsIDB4NTAsIDB4MWQsCi0JMHgwMSwgMHg0ZiwgMHhlZiwgMHgwMiwgMHg0ZCwgMHg0MCwgMHhmNywgMHgzOSwgMHgwMSwgMHhkYiwgMHhhMiwgMHhjZSwKLQkweGZkLCAweGNhLCAweGUwLCAweGI1LCAweGIyLCAweDBkLCAweGQwLCAweDczLCAweGFiLCAweDE2LCAweGY1LCAweDg4LAotCTB4YzksIDB4ODMsIDB4ZjIsIDB4OTksIDB4OTMsIDB4MGEsIDB4MDMsIDB4MTksIDB4NzksIDB4ODEsIDB4MGQsIDB4OWEsCi0JMHgxNywgMHhjMCwgMHhlMSwgMHgwNCwgMHg0YywgMHhlYiwgMHhjMCwgMHgzMiwgMHg2YSwgMHg4ZCwgMHgyZSwgMHhkMCwKLQkweDNjLCAweDFlLCAweDE2LCAweDk3LCAweDdlLCAweDkwLCAweDE4LCAweDAzLCAweDU0LCAweDhjLCAweDA1LCAweGM4LAotCTB4OTcsIDB4MDEsIDB4YjYsIDB4MjksIDB4NDEsIDB4N2UsIDB4MDUsIDB4ZTUsIDB4MDUsIDB4OTAsIDB4ZDksIDB4MjAsCi0JMHhiZiwgMHg4MywgMHhjYSwgMHg0ZSwgMHg1MCwgMHg1ZSwgMHgwNCwgMHhiMiwgMHg5NywgMHgwOCwgMHg0MSwgMHhmZCwKLQkweDBjLCAweGE0LCAweDgxLCAweGVjLCAweGU2LCAweDI5LCAweDIyLCAweDYwLCAweDdlLCAweDUyLCAweDgwLCAweDEwLAotCTB4NDMsIDB4MDMsIDB4M2MsIDB4MWYsIDB4MTAsIDB4MWIsIDB4YzYsIDB4MzAsIDB4ZjUsIDB4MzEsIDB4NjQsIDB4ZTQsCi0JMHgxYiwgMHg4OCwgMHgxOSwgMHg4OCwgMHg3YywgMHhjMywgMHhjZSwgMHg3MCwgMHg0MCwgMHgwMCwgMHgxNiwgMHg1NiwKLQkweGZmLCAweGZmLCAweDFmLCAweDUzLCAweDYxLCAweDAxLCAweGE2LCAweDUzLCAweGQwLCAweDNhLCAweGQ2LCAweGRmLAotCTB4ZmYsIDB4MGYsIDB4ODgsIDB4YjAsIDB4MzAsIDB4YjQsIDB4YzAsIDB4ZDcsIDB4MjMsIDB4ZTYsIDB4YzgsIDB4ODMsCi0JMHhjYSwgMHhkMCwgMHgwNSwgMHg0MCwgMHg1NiwgMHgxYiwgMHhiYywgMHg0ZCwgMHhjMCwgMHgwMiwgMHhiZSwgMHhlZiwKLQkweDc5LCAweDAxLCAweGMzLCAweDJmLCAweDYwLCAweDk5LCAweGY1LCAweGZmLCAweGZmLCAweDUyLCAweGI4LCAweDVhLAotCTB4MTAsIDB4MDAsIDB4MDAsIDB4MTksIDB4M2YsIDB4MTYsIDB4MjEsIDB4YzQsIDB4N2QsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKwkweGRjLCAweDViLCAweDZiLCAweDZjLCAweDFjLCAweGQ3LCAweDc1LCAweDNlLCAweDMzLCAweDNiLCAweDRiLCAweGFlLAorCTB4YzgsIDB4MTUsIDB4MzUsIDB4MjIsIDB4NTcsIDB4ZDQsIDB4OWEsIDB4YTIsIDB4ZWQsIDB4NWQsIDB4NzIsIDB4MjgsCisJMHhiMiwgMHg5NiwgMHhlYSwgMHhhZSwgMHgyOSwgMHhhNiwgMHg2MiwgMHhkMywgMHg0ZCwgMHhiNCwgMHhkOSwgMHhhNSwKKwkweDVjLCAweGI1LCAweDc1LCAweDVhLCAweDRhLCAweDI2LCAweGZjLCAweDQ4LCAweDU1LCAweDgzLCAweGRlLCAweGE1LAorCTB4OWMsIDB4YTAsIDB4YTgsIDB4NTMsIDB4YzksIDB4NzYsIDB4ODUsIDB4MjAsIDB4MDUsIDB4YWEsIDB4MDUsIDB4MWYsCisJMHg4OSwgMHg1MiwgMHhiMCwgMHgxYywgMHhjNSwgMHg5MiwgMHgyOSwgMHhiNSwgMHg3MSwgMHg2YiwgMHg5NiwgMHhiNCwKKwkweDZjLCAweDE1LCAweGQ4LCAweDZhLCAweDY1LCAweGM3LCAweDZkLCAweDY4LCAweDU0LCAweDJlLCAweDY1LCAweGNhLAorCTB4NjksIDB4OTUsIDB4MjYsIDB4NDgsIDB4OGQsIDB4YTAsIDB4NDIsIDB4OTUsIDB4M2YsIDB4OGUsIDB4ZTEsIDB4ZjQsCisJMHg4NywgMHg1YiwgMHhmNCwgMHg4NywgMHhkMSwgMHgwNywgMHgyMiwgMHhkNywgMHg4ZiwgMHhlZCwgMHhmNywgMHhkZCwKKwkweGI5LCAweDQzLCAweDBlLCAweDk3LCAweDE0LCAweDQ1LCAweGY5LCAweGY1LCAweGEzLCAweDA0LCAweDU2LCAweDMzLAorCTB4ZjcsIDB4N2QsIDB4ZWUsIDB4YjksIDB4ZTcsIDB4N2MsIDB4ZTcsIDB4MzEsIDB4NTcsIDB4M2YsIDB4MmYsIDB4NTIsCisJMHgyNywgMHhmYSwgMHg2ZiwgMHgzZCwgMHg3ZSwgMHg4OSwgMHg4NywgMHg3ZiwgMHhhZiwgMHg3MCwgMHhmYiwgMHhjZSwKKwkweGRiLCAweDc3LCAweGUwLCAweGY1LCAweDBlLCAweGQzLCAweGE4LCAweDBkLCAweGIxLCAweDllLCAweGZmLCAweGM0LAorCTB4ZjAsIDB4ZWIsIDB4ZDYsIDB4ZWYsIDB4MmIsIDB4ZmQsIDB4ZDksIDB4ZjgsIDB4YmQsIDB4ODksIDB4YzYsIDB4YzEsCisJMHg3ZiwgMHgxNywgMHgzMSwgMHhhZSwgMHhkMSwgMHgyNywgMHhmOCwgMHg1NywgMHhhOSwgMHhhYywgMHhkZSwgMHg2ZSwKKwkweDkyLCAweDk2LCAweDU1LCAweGRhLCAweDQzLCAweGRlLCAweDkyLCAweDhhLCAweDY2LCAweGZlLCAweDI0LCAweDYyLAorCTB4YTYsIDB4MzMsIDB4NDcsIDB4YjIsIDB4OGUsIDB4MTEsIDB4MDksIDB4YTUsIDB4YmIsIDB4OGEsIDB4MDUsIDB4NDcsCisJMHgyNCwgMHg1MywgMHhkYSwgMHg5NiwgMHhjOCwgMHhjOSwgMHg3YiwgMHg5NSwgMHg2MiwgMHhjYywgMHg5MiwgMHhhYywKKwkweDIzLCAweDkxLCAweDliLCAweGQzLCAweGVmLCAweDNlLCAweGY1LCAweGQyLCAweGNlLCAweGU0LCAweDViLCAweDUzLAorCTB4MjEsIDB4ODksIDB4ZDgsIDB4ZTksIDB4MTcsIDB4YzQsIDB4ZGUsIDB4MmEsIDB4OTEsIDB4NTYsIDB4OGMsIDB4NzksCisJMHhiMiwgMHgzMywgMHg2MywgMHg0OCwgMHg4MywgMHgzZiwgMHhkNywgMHg5YiwgMHg5NSwgMHg5NywgMHgzYSwgMHhhNSwKKwkweGQ4LCAweDkyLCAweDhlLCAweDg4LCAweDk5LCAweGVlLCAweGI4LCAweDkyLCAweDBkLCAweGQ5LCAweDgzLCAweGExLAorCTB4YjQsIDB4MmQsIDB4NzMsIDB4NjUsIDB4ZTksIDB4M2YsIDB4MzAsIDB4MmUsIDB4OTEsIDB4NDgsIDB4ZmEsIDB4NGIsCisJMHg5MSwgMHhkYSwgMHgwZSwgMHg4OSwgMHg1OCwgMHhlOSwgMHhhOSwgMHgyMywgMHg1ZiwgMHg3MywgMHg4ZSwgMHg1NCwKKwkweDRjLCAweGM3LCAweGU5LCAweDlhLCAweDk2LCAweDY4LCAweGVmLCAweGU5LCAweDFlLCAweGI0LCAweDk3LCAweDkyLAorCTB4NWQsIDB4MjIsIDB4M2IsIDB4YzUsIDB4NzQsIDB4OGEsIDB4ZDEsIDB4OTAsIDB4MTMsIDB4OTEsIDB4NmMsIDB4ZDksCisJMHg5MSwgMHg1YywgMHg1OSwgMHhlNCwgMHgxZiwgMHg0YSwgMHg4NiwgMHg5YywgMHg3NiwgMHg5YSwgMHg2NSwgMHg3YSwKKwkweGZiLCAweGJiLCAweDk1LCAweDBjLCAweDY4LCAweGY5LCAweDdiLCAweDY3LCAweGVhLCAweGM4LCAweGE4LCAweDQzLAorCTB4N2EsIDB4MWYsIDB4OGIsIDB4OTAsIDB4YWUsIDB4NTAsIDB4N2EsIDB4YTgsIDB4YjYsIDB4ZTAsIDB4NTgsIDB4MzIsCisJMHg1YywgMHg2MiwgMHhkZCwgMHg4MCwgMHhjOSwgMHhiYSwgMHg3MCwgMHgzYSwgMHg1MiwgMHg3NywgMHhkYSwgMHg4OSwKKwkweGVhLCAweGJhLCAweDUyLCAweDI2LCAweDhiLCAweGY5LCAweDQ2LCAweDRhLCAweGVjLCAweDFiLCAweGU5LCAweDJlLAorCTB4MzgsIDB4MzEsIDB4NWQsIDB4M2YsIDB4YmEsIDB4MzMsIDB4ZWIsIDB4YzQsIDB4NTEsIDB4ZGYsIDB4YWEsIDB4ZGIsCisJMHg3YSwgMHhiZSwgMHg1YywgMHg3MCwgMHgxYywgMHhkZCwgMHg3NiwgMHgzNSwgMHg5NCwgMHg3NSwgMHhiYSwgMHg3NCwKKwkweGZkLCAweGFiLCAweGJiLCAweDBhLCAweGNlLCAweDc2LCAweDVkLCAweGZmLCAweGQ2LCAweGFlLCAweGFjLCAweDkzLAorCTB4ZDIsIDB4ZjUsIDB4ZTMsIDB4ZjcsIDB4MTcsIDB4OWMsIDB4MWUsIDB4NWQsIDB4ZGYsIDB4OGEsIDB4ZmEsIDB4NWUsCisJMHg1ZCwgMHhmZiwgMHg4MywgMHhkZSwgMHg4MiwgMHg5MywgMHg0NiwgMHhmZCwgMHg5NywgMHgyMiwgMHg2NiwgMHg4NywKKwkweDJkLCAweDYzLCAweGE1LCAweDA0LCAweDdlLCAweDE5LCAweGI0LCAweGY1LCAweGExLCAweDZlLCAweDBmLCAweDdlLAorCTB4NzcsIDB4ZTEsIDB4MzcsIDB4YmYsIDB4NDEsIDB4MWEsIDB4ZmEsIDB4ZjEsIDB4NmMsIDB4NmIsIDB4ZjUsIDB4NzgsCisJMHgwNywgMHgxZSwgMHhiOSwgMHgxMSwgMHg3OSwgMHgzZCwgMHgxNCwgMHg5NywgMHg5NywgMHgzYSwgMHg1ZiwgMHgwNywKKwkweDBmLCAweDZkLCAweDM5LCAweDU3LCAweDE2LCAweGEzLCAweGJmLCAweDMzLCAweDBlLCAweGRlLCAweGM1LCAweGU0LAorCTB4YjksIDB4NzIsIDB4YmQsIDB4ODQsIDB4MWUsIDB4MGYsIDB4ODEsIDB4MzcsIDB4NWYsIDB4OTAsIDB4N2MsIDB4MmMsCisJMHgyMiwgMHgxYiwgMHgyNywgMHgwZCwgMHg2OSwgMHhlYiwgMHg4ZSwgMHg0OCwgMHhjNiwgMHhlNiwgMHhkYSwgMHgzOCwKKwkweGVkLCAweDg5LCAweDk4LCAweDg0LCAweDI2LCAweDMzLCAweDRkLCAweGE2LCAweDc0LCAweGQ4LCAweDM5LCAweDI5LAorCTB4ODIsIDB4NzcsIDB4NTcsIDB4MjgsIDB4OTcsIDB4NjgsIDB4NGIsIDB4NDgsIDB4NmUsIDB4ZmMsIDB4MzYsIDB4MTksCisJMHhiNCwgMHg0OSwgMHhkNywgMHhkYywgMHhjZCwgMHhkZSwgMHg1YSwgMHgxMSwgMHgyMywgMHg3YiwgMHg3MiwgMHg0MCwKKwkweGM2LCAweGRjLCAweGE4LCAweDkxLCAweDNiLCAweGY5LCAweDU5LCAweGM5LCAweGE2LCAweDI0LCAweDg2LCAweDcxLAorCTB4ZjEsIDB4M2MsIDB4NWEsIDB4NjYsIDB4NGEsIDB4MDMsIDB4MzIsIDB4ZWEsIDB4OGEsIDB4OTEsIDB4NzUsIDB4YzksCisJMHhjZiwgMHg2NiwgMHhiNCwgMHgzNywgMHhhOCwgMHhiZSwgMHhhOCwgMHg2YiwgMHgwZCwgMHhhOSwgMHhiOSwgMHgyMywKKwkweGE4LCAweGI3LCAweDUxLCAweGRmLCAweDY4LCAweGY0LCAweGE5LCAweDM5LCAweDU0LCAweDdkLCAweDYyLCAweDQ0LAorCTB4YTIsIDB4ZjIsIDB4NzQsIDB4MjksIDB4YTYsIDB4ZmIsIDB4NTYsIDB4MmEsIDB4ZDksIDB4OTQsIDB4OGQsIDB4N2UsCisJMHgwMywgMHgzMiwgMHhlMiwgMHhjNiwgMHg2NCwgMHgxMCwgMHhjZiwgMHg2MSwgMHg5NywgMHg3MiwgMHgxNSwgMHg4NywKKwkweDRjLCAweDM1LCAweDE0LCAweGYzLCAweDI3LCAweGQ0LCAweDdjLCAweDg5LCAweDUwLCAweDlhLCAweGYzLCAweGI1LAorCTB4YTIsIDB4ZGYsIDB4ZGIsIDB4YTAsIDB4Y2IsIDB4MTAsIDB4NGIsIDB4OWQsIDB4NjUsIDB4NDYsIDB4ZjIsIDB4ZTMsCisJMHgwNiwgMHhlNCwgMHgwZCwgMHg0ZiwgMHhjNSwgMHhkNywgMHgzZSwgMHhkMCwgMHg2ZiwgMHg4OSwgMHhkMywgMHg2ZCwKKwkweDQ4LCAweDAxLCAweDY3LCAweDU1LCAweGI0LCAweDUxLCAweDJlLCAweGNkLCAweDlhLCAweDU5LCAweGI3LCAweDU2LAorCTB4NzIsIDB4NTYsIDB4NDIsIDB4NDIsIDB4MTMsIDB4OTQsIDB4YTUsIDB4NDEsIDB4MTksIDB4YzEsIDB4MTgsIDB4ZDMsCisJMHg2MSwgMHg5ZiwgMHhiNywgMHhiMSwgMHhlZiwgMHg0MSwgMHg3NSwgMHgwZSwgMHgzNSwgMHhlOSwgMHhhMiwgMHg5OSwKKwkweDJiLCAweDM3LCAweDhiLCAweDM5LCAweGI5LCAweDVmLCAweDVlLCAweDE5LCAweDE3LCAweDNiLCAweDk0LCAweDdlLAorCTB4YjcsIDB4OTIsIDB4NzUsIDB4NDYsIDB4Y2QsIDB4ZWMsIDB4YjMsIDB4OTYsIDB4ODQsIDB4MjcsIDB4MGMsIDB4MTksCisJMHg3NSwgMHg5MiwgMHhkMCwgMHg4MCwgMHhhMywgMHhlNiwgMHhlZSwgMHhmMiwgMHgyYywgMHhmYSwgMHg3MSwgMHgxYywKKwkweGZhLCAweDk1LCAweDRjLCAweGYwLCAweDk1LCAweGVmLCAweGRiLCAweDZjLCAweDUzLCAweGM5LCAweDMzLCAweGZiLAorCTB4ZTAsIDB4MGMsIDB4YjAsIDB4OGYsIDB4ZTcsIDB4NWMsIDB4OWMsIDB4ODksIDB4M2EsIDB4YTMsIDB4MDQsIDB4Y2UsCisJMHg0OCwgMHg4YywgMHhiZSwgMHg0ZSwgMHhjOCwgMHhkNCwgMHgwOSwgMHg0YiwgMHhmMiwgMHgyOSwgMHhlYywgMHgwYiwKKwkweGJkLCAweGYzLCAweGE5LCAweDQ1LCAweGJhLCAweDQ2LCAweGM2LCAweGFiLCAweGU5LCAweGUyLCAweDM4LCAweGQyLAorCTB4ZTUsIDB4ZDEsIDB4MzQsIDB4N2MsIDB4ODIsIDB4ZjQsIDB4MmQsIDB4ZDIsIDB4MzMsIDB4MzYsIDB4ZWUsIDB4ZDMsCisJMHhjOCwgMHhmNSwgMHg0OCwgMHg5YiwgMHg0ZiwgMHgxNywgMHhjNywgMHg5MSwgMHhhZSwgMHgyNiwgMHg5ZSwgMHgzNSwKKwkweGZmLCAweDhjLCAweDNlLCAweGQwLCAweDMxLCAweGUyLCAweDVhLCAweDM4LCAweGEzLCAweGE4LCAweGU0LCAweGVkLAorCTB4YTIsIDB4MzEsIDB4ZDIsIDB4YmIsIDB4MmQsIDB4MGUsIDB4NmQsIDB4MzYsIDB4ODYsIDB4N2IsIDB4NDksIDB4YjMsCisJMHg4MywgMHg3MywgMHhhYywgMHg1MSwgMHhlNywgMHgwZCwgMHhmOSwgMHgyNiwgMHhlZiwgMHhkMCwgMHg5ZiwgMHhlYiwKKwkweGUzLCAweGJkLCAweDY0LCAweGNiLCAweGE4LCAweDlhLCAweDhmLCAweDM0LCAweDdkLCAweDE0LCAweGYzLCAweDkwLAorCTB4ZDYsIDB4NGIsIDB4OTAsIDB4ZDUsIDB4MWUsIDB4YzgsIDB4NjgsIDB4NGEsIDB4ZmUsIDB4YWUsIDB4YmMsIDB4NWQsCisJMHhiZSwgMHg1MywgMHhlZSwgMHg5MiwgMHhiZiwgMHg4MSwgMHhkZSwgMHhmZSwgMHg3NSwgMHgzOSwgMHgyMSwgMHgyZiwKKwkweDk0LCAweDViLCAweGU1LCAweGRiLCAweGU1LCAweGI4LCAweDNjLCAweGFmLCAweGU0LCAweGI3LCAweDRmLCAweGE0LAorCTB4ODEsIDB4MzIsIDB4OWQsIDB4OTAsIDB4NDYsIDB4ZTgsIDB4Y2YsIDB4NDYsIDB4ZTgsIDB4ZTYsIDB4MTMsIDB4ZTAsCisJMHhkZiwgMHg4OSwgMHg0ZSwgMHhjOSwgMHgzNCwgMHhhNSwgMHgyNSwgMHg3MiwgMHgwYiwgMHg3ZSwgMHg5YiwgMHhmMSwKKwkweDZiLCAweDRlLCAweDQzLCAweGVlLCAweDVjLCAweGYyLCAweDhlLCAweDNjLCAweGI0LCAweDI0LCAweGE3LCAweGY2LAorCTB4NmMsIDB4YzksIDB4NDgsIDB4NzksIDB4ZmUsIDB4MTYsIDB4NGYsIDB4NzYsIDB4NDUsIDB4ZmEsIDB4YzEsIDB4NjMsCisJMHhiMywgMHhmYiwgMHg3ZiwgMHgyYSwgMHgxOSwgMHgxYiwgMHhmYiwgMHhlOCwgMHhkZSwgMHhhNiwgMHg3OCwgMHg2ZiwKKwkweDc2LCAweDUzLCAweDY2LCAweDEzLCAweDkwLCAweDdiLCAweGNiLCAweGM4LCAweGI5LCAweDY3LCAweDgwLCAweDFiLAorCTB4ZjUsIDB4NDYsIDB4ZjYsIDB4NzgsIDB4NTEsIDB4MGEsIDB4YzcsIDB4MmIsIDB4NTIsIDB4NDgsIDB4ODUsIDB4ZTUsCisJMHgxMSwgMHhiYiwgMHgyMiwgMHg3ZCwgMHhhOSwgMHgxYSwgMHgzOSwgMHg2NCwgMHg4MywgMHhmNywgMHhkYiwgMHg3ZiwKKwkweGRmLCAweGYwLCAweDMxLCAweGZiLCAweDg5LCAweGYyLCAweDYxLCAweGJjLCAweGIzLCAweDRlLCAweGU0LCAweDg0LAorCTB4N2EsIDB4ZjcsIDB4ZWEsIDB4OGIsIDB4ZTUsIDB4YjAsIDB4NjQsIDB4NjIsIDB4YzUsIDB4YjgsIDB4MjUsIDB4MmQsCisJMHhhNiwgMHhiNywgMHhlZSwgMHhiMCwgMHhkZiwgMHgwNiwgMHg3ZSwgMHg0YywgMHgwMSwgMHgyNywgMHg5MywgMHg0YSwKKwkweDVmLCAweGYyLCAweGUzLCAweGViLCAweGFlLCAweDY2LCAweDU0LCAweDM1LCAweGZhLCAweGRiLCAweDNkLCAweDMyLAorCTB4YWYsIDB4ZjgsIDB4OTksIDB4MTgsIDB4MzQsIDB4ZDIsIDB4MzEsIDB4NjksIDB4MmIsIDB4YjEsIDB4ZGMsIDB4NmIsCisJMHhkYywgMHg1ZCwgMHhhNiwgMHgzYywgMHhlMywgMHhiZCwgMHg0YywgMHgzYSwgMHg2ZiwgMHg0MiwgMHgzZiwgMHgwYiwKKwkweGNmLCAweDhjLCAweGE2LCAweDM3LCAweDQ4LCAweDIzLCAweGU3LCAweDIxLCAweDhkLCAweDdjLCAweGZlLCAweDc5LAorCTB4ODAsIDB4YzYsIDB4YTcsIDB4MTYsIDB4ZGUsIDB4NGYsIDB4MDQsIDB4ZGUsIDB4OGIsIDB4ZTUsIDB4NGIsIDB4NzUsCisJMHgxZSwgMHg2ZCwgMHhiZCwgMHhmMiwgMHhjNiwgMHhjNCwgMHg1NywgMHhmNCwgMHgzYSwgMHg3OCwgMHgzZiwgMHhjYiwKKwkweGY5LCAweGZmLCAweGFhLCAweGUyLCAweGM5LCAweDRiLCAweGYxLCAweDNhLCAweGViLCAweGNjLCAweDA2LCAweGQ2LAorCTB4NzksIDB4MzEsIDB4YjAsIDB4Y2UsIDB4OGIsIDB4ODEsIDB4NzUsIDB4OGEsIDB4ZTAsIDB4YTksIDB4NmMsIDB4MzAsCisJMHgyMSwgMHhjMywgMHg3OSwgMHg5YSwgMHgzMSwgMHgzOSwgMHg4YSwgMHgzOSwgMHg1ZiwgMHg5NywgMHg1MCwgMHg5YSwKKwkweDdhLCAweGVlLCAweGUzLCAweGNkLCAweDY1LCAweGY0LCAweDRmLCAweGNiLCAweGZjLCAweDQ0LCAweDUxLCAweGYyLAorCTB4YzcsIDB4YzMsIDB4YjIsIDB4NGYsIDB4ZjUsIDB4ZGIsIDB4YTUsIDB4ZTksIDB4MGIsIDB4YjYsIDB4NDUsIDB4NjQsCisJMHg2ZiwgMHg4YywgMHhlZiwgMHg3ZSwgMHg5YiwgMHgwNSwgMHgzZSwgMHhiMywgMHhmYywgMHhjNiwgMHg0ZCwgMHg1ZSwKKwkweDk5LCAweGVmLCAweGIzLCAweDdhLCAweDJmLCAweDAzLCAweGRlLCAweGI4LCAweGIzLCAweDZmLCAweDJhLCAweDNjLAorCTB4OWMsIDB4MmIsIDB4MTMsIDB4YjcsIDB4MjQsIDB4MTUsIDB4NzIsIDB4ZTQsIDB4NjAsIDB4NWYsIDB4YWEsIDB4NTksCisJMHg0NiwgMHg2YywgMHgyMywgMHgzNSwgMHhkYywgMHg1NSwgMHg0YiwgMHhiZCwgMHhjOCwgMHg5OCwgMHg0ZSwgMHgzZCwKKwkweGIwLCAweDQxLCAweDEyLCAweDI2LCAweDMxLCAweDVmLCAweGVkLCAweGNiLCAweDMwLCAweDNkLCAweGZhLCAweDZkLAorCTB4OTYsIDB4ZmIsIDB4NGQsIDB4YTcsIDB4YjEsIDB4YWEsIDB4OWUsIDB4YmEsIDB4MWQsIDB4YzIsIDB4M2IsIDB4NjUsCisJMHg3OCwgMHhiNywgMHgzZSwgMHg2MywgMHgwYiwgMHg2NSwgMHhlMiwgMHhmMCwgMHhhZCwgMHhiYSwgMHhlYywgMHhiNywKKwkweGUzLCAweGMwLCAweDk2LCAweDk0LCAweDdmLCAweGI2LCAweDY1LCAweDY5LCAweGQ5LCAweGM3LCAweDg5LCAweDIwLAorCTB4ODYsIDB4NzMsIDB4YWYsIDB4YzAsIDB4MjcsIDB4ODcsIDB4NzIsIDB4MTcsIDB4MDYsIDB4YWQsIDB4MjksIDB4ZTgsCisJMHg1YywgMHhhZCwgMHhhNiwgMHg2MSwgMHhiMywgMHhhNiwgMHgwMSwgMHhiNCwgMHg3NiwgMHg0MiwgMHhiMiwgMHg5NCwKKwkweDJlLCAweDI5LCAweGQxLCAweGFhLCAweDJhLCAweDkzLCAweGY3LCAweGZlLCAweGZiLCAweDdhLCAweGQ1LCAweGVlLAorCTB4ZTksIDB4OWMsIDB4ZmYsIDB4ZjQsIDB4ZjEsIDB4ZmQsIDB4Y2QsIDB4ODAsIDB4YmQsIDB4NjgsIDB4ODUsIDB4Y2UsCisJMHhjNiwgMHhjMCwgMHgyYiwgMHgxZiwgMHhlYiwgMHg4OSwgMHhjMSwgMHg3MSwgMHhkOCwgMHgwNywgMHhjOCwgMHhhYSwKKwkweGMyLCAweGY2LCAweDI4LCAweGYwLCAweGQwLCAweGQyLCAweGQ4LCAweDFjLCAweGQxLCAweGQ4LCAweDFjLCAweDA1LAorCTB4MmUsIDB4YjMsIDB4NmMsIDB4ZWIsIDB4NzIsIDB4NGMsIDB4OTcsIDB4ZTMsIDB4MjgsIDB4YzMsIDB4OGUsIDB4NGYsCisJMHgxMiwgMHhiYiwgMHgxYiwgMHg4YSwgMHg0MywgMHgyNywgMHgxNCwgMHhkZSwgMHhkMywgMHg1NiwgMHgwMCwgMHg4NSwKKwkweDg5LCAweGQ3LCAweGM0LCAweGVkLCAweDU2LCAweDk5LCAweDJlLCAweDYxLCAweGJkLCAweDA1LCAweDZjLCAweGU0LAorCTB4ZGUsIDB4ODMsIDB4ZjQsIDB4OTAsIDB4OTYsIDB4NzUsIDB4NjIsIDB4YzIsIDB4NzYsIDB4NjUsIDB4NjIsIDB4YTQsCisJMHhmNywgMHg2MSwgMHhlYywgMHg5ZCwgMHhmOCwgMHg0MywgMHhiYSwgMHg2ZiwgMHgwNiwgMHhhZCwgMHhkYywgMHhjNywKKwkweDI3LCAweDQ5LCAweDJiLCAweGQ3LCAweGFiLCAweGE2LCAweGY3LCAweGMzLCAweGUyLCAweDIwLCAweDY5LCAweDNmLAorCTB4ODMsIDB4M2QsIDB4NjcsIDB4ODAsIDB4NzksIDB4NjIsIDB4MGMsIDB4NzQsIDB4MGUsIDB4NjAsIDB4Y2YsIDB4ZmQsCisJMHhjMCwgMHhjMywgMHhiYiwgMHg4MCwgMHg4NywgMHg3YiwgMHg4MCwgMHg4NywgMHg3ZCwgMHhjMCwgMHhjMywgMHgzNCwKKwkweGIwLCAweGIwLCAweDE3LCAweDU4LCAweGQ4LCAweDAzLCAweDJjLCAweDRjLCAweDgxLCAweDM3LCAweDMxLCAweDk5LAorCTB4MDIsIDB4MzYsIDB4NGUsIDB4MDEsIDB4MjMsIDB4YTcsIDB4MzAsIDB4YzcsIDB4ZjAsIDB4YTQsIDB4MTgsIDB4MGYsCisJMHg2MCwgMHgwZiwgMHhkZiwgMHg5YywgMHg0OCwgMHg5ZSwgMHg4MiwgMHgyYywgMHhjNSwgMHg4YiwgMHgyNiwgMHhlNCwKKwkweDNmLCAweGQ1LCAweDBiLCAweGQ5LCAweGVlLCAweDkyLCAweDk5LCAweGIyLCAweDI1LCAweDA1LCAweGQ4LCAweGQ0LAorCTB4YjYsIDB4YWQsIDB4ZWQsIDB4ZDAsIDB4MzUsIDB4YzgsIDB4N2IsIDB4NWMsIDB4ZjQsIDB4ZGYsIDB4N2EsIDB4ZmQsCisJMHhmYywgMHhiMSwgMHg4OCwgMHhmMywgMHg0ZiwgMHg5NCwgMHhjNSwgMHg4NCwgMHhjOCwgMHg3OSwgMHhjOSwgMHhiYiwKKwkweGVkLCAweDc2LCAweDliLCAweGQ5LCAweDg1LCAweDdlLCAweDJjLCAweGE3LCAweGNjLCAweDAzLCAweGM3LCAweGVmLAorCTB4MzAsIDB4ODcsIDB4OGUsIDB4MmIsIDB4N2YsIDB4MDUsIDB4NzgsIDB4NTUsIDB4OTEsIDB4ZDEsIDB4MTQsIDB4NzUsCisJMHhhYiwgMHgyMiwgMHhhNywgMHg1MywgMHhjOSwgMHhkZSwgMHhhMiwgMHhkNCwgMHhjYiwgMHg1OCwgMHg2YywgMHg1YywKKwkweGQ5LCAweDVhLCAweDJiLCAweDdkLCAweDRjLCAweGQ5LCAweGFiLCAweDgyLCAweDgzLCAweDY3LCAweGE5LCAweGRiLAorCTB4Y2MsIDB4MWYsIDB4ZTcsIDB4ZmUsIDB4ZGIsIDB4ZjEsIDB4MGIsIDB4ODMsIDB4MTYsIDB4Y2UsIDB4NmYsIDB4NDksCisJMHg1ZiwgMHg4ZiwgMHg2ZCwgMHgzZSwgMHhkNCwgMHg1OSwgMHg4NCwgMHg0MiwgMHgyNCwgMHhlZCwgMHg3OSwgMHhhYywKKwkweDljLCAweDFiLCAweDZmLCAweDhmLCAweGI3LCAweDliLCAweDk2LCAweDBjLCAweDVhLCAweDg2LCAweDBjLCAweDQzLAorCTB4YmUsIDB4ZmIsIDB4NTIsIDB4NmYsIDB4NTcsIDB4YzYsIDB4NjIsIDB4NmMsIDB4YWYsIDB4OTUsIDB4YWYsIDB4MmIsCisJMHg5ZiwgMHgwMywgMHg2YiwgMHhjZiwgMHg5YywgMHhjMCwgMHhiYSwgMHg2MSwgMHg5YywgMHgwMSwgMHhkNywgMHhlNSwKKwkweDNjLCAweDI4LCAweDk3LCAweDJjLCAweDk0LCAweDkzLCAweGE3LCAweDhhLCAweDUyLCAweDg2LCAweDllLCAweDZjLAorCTB4OTAsIDB4ZWMsIDB4ZjYsIDB4MWEsIDB4YzksIDB4ZjQsIDB4MjcsIDB4NjQsIDB4NzgsIDB4YTIsIDB4MGMsIDB4OWMsCisJMHg4YSwgMHgyOCwgMHg1ZCwgMHhjOSwgMHgwZiwgMHgyNCwgMHhlNCwgMHhmMSwgMHgwOSwgMHhkNiwgMHg5ZCwgMHhjMywKKwkweGZlLCAweDkzLCAweGM3LCAweDMyLCAweGMyLCAweGZkLCAweDFiLCAweDkyLCAweGQ5LCAweDdmLCAweDRlLCAweDFlLAorCTB4NzEsIDB4Y2YsIDB4YzksIDB4MTAsIDB4Y2UsIDB4ZjAsIDB4ZTksIDB4ZjIsIDB4YWMsIDB4MWMsIDB4NzAsIDB4MWQsCisJMHgzOSwgMHgwZCwgMHhiYywgMHhjZiwgMHgxZCwgMHgwNywgMHhlZSwgMHgzOSwgMHhlYiwgMHg4MSwgMHg1MSwgMHhjOSwKKwkweDczLCAweGI0LCAweGExLCAweDI2LCAweGZjLCAweGJjLCAweDY5LCAweGYwLCAweGY3LCAweDg5LCAweDA5LCAweGYyLAorCTB4ZDcsIDB4OTQsIDB4NDcsIDB4N2YsIDB4ZDEsIDB4ODAsIDB4M2UsIDB4MjYsIDB4YzAsIDB4Y2YsIDB4NTYsIDB4MzksCisJMHhlYywgMHgyNiwgMHg2NywgMHgzMywgMHgyNiwgMHg3MCwgMHgzMSwgMHg2NSwgMHg4NywgMHhhNCwgMHgyZSwgMHg4ZSwKKwkweDdlLCAweDVlLCAweDlmLCAweDVjLCAweDJhLCAweDg0LCAweGIzLCAweDJlLCAweGEyLCAweGVmLCAweGRiLCAweGEwLAorCTB4OTMsIDB4NjMsIDB4NjMsIDB4ZjgsIDB4NjUsIDB4ZDAsIDB4MGYsIDB4ZjIsIDB4NmIsIDB4MjcsIDB4NjcsIDB4YTcsCisJMHg0YywgMHhmNiwgMHg0ZiwgMHhlMCwgMHhjYywgMHg4MCwgMHgyYiwgMHg5MywgMHgwMCwgMHgxZSwgMHg5YiwgMHhlZiwKKwkweDY5LCAweDMzLCAweDRmLCAweDFhLCAweDVjLCAweGNhLCAweDU5LCAweDAyLCAweDM0LCAweDExLCAweGQzLCAweGRhLAorCTB4Y2YsIDB4N2QsIDB4NDcsIDB4YjgsIDB4Y2UsIDB4NDYsIDB4ZjQsIDB4N2YsIDB4MDcsIDB4N2UsIDB4YWUsIDB4MmQsCisJMHgzMywgMHgzOCwgMHg5NywgMHg5ZiwgMHg4MiwgMHg1NywgMHg5OSwgMHhiOCwgMHg1NywgMHgxZSwgMHg5ZSwgMHg0YywKKwkweDllLCAweDliLCAweDM3LCAweGY5LCAweGVlLCAweDE0LCAweGYzLCAweGU2LCAweDZkLCAweDIyLCAweDhkLCAweGU0LAorCTB4NTcsIDB4MGEsIDB4YmMsIDB4NzIsIDB4NmMsIDB4ZDMsIDB4ZGMsIDB4YWEsIDB4N2QsIDB4M2IsIDB4ZWEsIDB4ODksCisJMHgwMywgMHg5YSwgMHhlMCwgMHg2NywgMHg3NCwgMHgwNywgMHhmNSwgMHg4NCwgMHhmNiwgMHhjZSwgMHhkNywgMHg5MywKKwkweDY0LCAweDdjLCAweGNhLCAweDg0LCAweGZmLCAweGQxLCAweDZkLCAweGM5LCAweDMxLCAweDU1LCAweDA2LCAweDhmLAorCTB4MDYsIDB4OTIsIDB4ZjEsIDB4OGMsIDB4NDksIDB4OWYsIDB4YjcsIDB4NGIsIDB4OWUsIDB4NzYsIDB4ZDksIDB4MWYsCisJMHg3YywgMHgxYywgMHg4ZiwgMHhlYSwgMHhmZSwgMHhlNywgMHgyMCwgMHgyMywgMHhmNCwgMHhjZiwgMHhiYSwgMHg0MCwKKwkweGIzLCAweGE3LCAweDNiLCAweGQzLCAweGUzLCAweDMxLCAweGQ1LCAweDM2LCAweGE2LCAweGY2LCAweDYwLCAweDYwLAorCTB4NWQsIDB4YzgsIDB4MjYsIDB4N2MsIDB4YjUsIDB4OWMsIDB4ZDIsIDB4MjMsIDB4M2IsIDB4MDMsIDB4NWYsIDB4MWUsCisJMHg3YSwgMHhlMCwgMHhlOSwgMHhkMCwgMHg0YywgMHg4OSwgMHhiNCwgMHhkYywgMHg0MywgMHg3ZSwgMHgxNCwgMHg0MSwKKwkweGNjLCAweDMxLCAweDMzLCAweDhkLCAweDczLCAweGVkLCAweDkxLCAweDIyLCAweGZkLCAweGI5LCAweGY5LCAweGQwLAorCTB4ZDMsIDB4MzIsIDB4MzgsIDB4NDMsIDB4N2IsIDB4ODMsIDB4OWYsIDB4ZWIsIDB4ZDgsIDB4OGMsIDB4MWYsIDB4MzIsCisJMHhjYSwgMHgxNiwgMHg2YywgMHhjMSwgMHgzOSwgMHhjMywgMHg0ZSwgMHhhNCwgMHgzNiwgMHg2YSwgMHgzZiwgMHhlNiwKKwkweDQ5LCAweDljLCAweGRiLCAweDc5LCAweDljLCAweDZiLCAweDQ5LCAweDg2LCAweDRlLCAweDVlLCAweGEyLCAweGNjLAorCTB4NzYsIDB4Y2QsIDB4NDgsIDB4YjIsIDB4NmIsIDB4NGMsIDB4YjYsIDB4ZDksIDB4ZDMsIDB4ZDAsIDB4YjcsIDB4Y2MsCisJMHg0MCwgMHg2NSwgMHg5NywgMHg5OSwgMHhlNiwgMHg5OCwgMHgyMywgMHgxOCwgMHg4MywgMHhlNywgMHhjYywgMHgyNSwKKwkweDM5LCAweDU0LCAweDY2LCAweGRkLCAweGVmLCAweDgwLCAweDlmLCAweGIwLCAweDNiLCAweDNkLCAweDRmLCAweDZhLAorCTB4MzksIDB4YzcsIDB4N2MsIDB4OTYsIDB4M2YsIDB4ZGYsIDB4MjUsIDB4M2QsIDB4MWYsIDB4ZmIsIDB4YjEsIDB4MGYsCisJMHhjNywgMHgyYywgMHhjZSwgMHhiYiwgMHg5YiwgMHhiNiwgMHgwNiwgMHg3OCwgMHhkMywgMHg2MSwgMHg1NiwgMHg3NiwKKwkweDg1LCAweGQxLCAweDdlLCAweGJhLCAweDg3LCAweGVmLCAweDk4LCAweDA3LCAweGI2LCAweGM2LCAweDc2LCAweGNlLAorCTB4YTMsIDB4MmYsIDB4ZjYsIDB4ZTUsIDB4YWUsIDB4OTMsIDB4YjYsIDB4NjYsIDB4OWYsIDB4NWUsIDB4OWUsIDB4M2IsCisJMHhmZCwgMHgwMCwgMHg5NiwgMHgxZiwgMHg2ZSwgMHhmMiwgMHg3OCwgMHgzZiwgMHgxMiwgMHhmMiwgMHhiMCwgMHhmYiwKKwkweDJmLCAweDUxLCAweGE2LCAweDdlLCAweDNkLCAweDI2LCAweDM5LCAweDM3LCAweDg5LCAweDdkLCAweDQyLCAweDg3LAorCTB4Y2EsIDB4MGQsIDB4ODYsIDB4YjcsIDB4NDcsIDB4ZjAsIDB4YmYsIDB4ZmYsIDB4MzIsIDB4ZjgsIDB4MjAsIDB4NDUsCisJMHg4ZiwgMHgzNywgMHhlNCwgMHgwYiwgMHg3OSwgMHhkMiwgMHgwMCwgMHhkOSwgMHhhZSwgMHhjMywgMHhiYywgMHg1OCwKKwkweDQ3LCAweGYxLCAweGUwLCAweDk2LCAweDI2LCAweGNmLCAweGVmLCAweDRkLCAweDE2LCAweDMzLCAweDhjLCAweGQ3LAorCTB4MWEsIDB4MjksIDB4YjMsIDB4YzAsIDB4YTgsIDB4ZjIsIDB4ZmQsIDB4MzYsIDB4ZTcsIDB4OWUsIDB4MzIsIDB4ZDcsCisJMHg5MSwgMHhkZSwgMHhjNCwgMHg4NSwgMHhkMCwgMHg3ZSwgMHg5NiwgMHhiYiwgMHhhNiwgMHg0YywgMHhmMCwgMHgxZSwKKwkweGU3LCAweDkzLCAweGRkLCAweGRlLCAweGFlLCAweDcxLCAweGU5LCAweDk5LCAweDEwLCAweDY1LCAweDk0LCAweGYyLAorCTB4OWMsIDB4NzcsIDB4YjcsIDB4ZDksIDB4ZjcsIDB4MDgsIDB4NjUsIDB4MzQsIDB4ODYsIDB4ZjMsIDB4MjYsIDB4MmUsCisJMHhmMCwgMHg2OSwgMHhjMSwgMHgyNiwgMHhjNiwgMHg3MSwgMHhjNiwgMHg1YiwgMHgzNCwgMHhlZCwgMHg3YywgMHhiNywKKwkweDY0LCAweGNhLCAweGM2LCAweDFhLCAweGVlLCAweDdmLCAweDZmLCAweGYwLCAweGVhLCAweGY4LCAweGRlLCAweGMyLAorCTB4MzMsIDB4MzksIDB4YjYsIDB4OTQsIDB4NTYsIDB4OWUsIDB4NjcsIDB4ZjUsIDB4MTksIDB4OWUsIDB4MDYsIDB4ZWQsCisJMHhhYywgMHhjNywgMHg3MywgMHhlNiwgMHgxNCwgMHhmNCwgMHgwZiwgMHg1OCwgMHhkMSwgMHhkMywgMHgxMSwgMHhiZiwKKwkweDg4LCAweGZlLCAweDM5LCAweDYwLCAweDdjLCAweGQxLCAweDYyLCAweGRiLCAweDU1LCAweDYzLCAweDcxLCAweDhjLAorCTB4NDksIDB4M2YsIDB4MTMsIDB4M2UsIDB4ZWQsIDB4MDUsIDB4ZTMsIDB4ODEsIDB4ZjIsIDB4MmIsIDB4NDYsIDB4NzYsCisJMHhlNiwgMHhhYSwgMHg5MSwgMHg4MywgMHg1YywgMHhjYywgMHhiOCwgMHgzYiwgMHgyMCwgMHhjZiwgMHhkNCwgMHgxNywKKwkweDFiLCAweDZiLCAweDI3LCAweGUzLCAweGZmLCAweDYyLCAweGI2LCAweDI3LCAweGE2LCAweGExLCAweGRiLCAweDA3LAorCTB4YzAsIDB4NTgsIDB4ZWYsIDB4MmMsIDB4NWIsIDB4ZDUsIDB4ZDksIDB4Y2UsIDB4OWIsIDB4NjEsIDB4OGQsIDB4NzUsCisJMHgyYywgMHgyNywgMHhlZCwgMHg3YiwgMHhlNSwgMHgzNSwgMHhlYywgMHg3NywgMHgxNiwgMHg3YywgMHg5ZSwgMHg5NSwKKwkweDQyLCAweGI5LCAweDI0LCAweGY5LCAweDkzLCAweGRiLCAweGVjLCAweDYxLCAweGM0LCAweGI4LCAweDhiLCAweGI0LAorCTB4MTMsIDB4YzMsIDB4OGEsIDB4ZjQsIDB4YmQsIDB4OGQsIDB4ZGQsIDB4YWUsIDB4MTQsIDB4NmIsIDB4ZDIsIDB4YzQsCisJMHhiMiwgMHgwZSwgMHhjOCwgMHgxMywgMHhlYSwgMHg0YSwgMHg4YiwgMHgzMiwgMHg3OSwgMHhlNywgMHhiMiwgMHhmZCwKKwkweDIwLCAweGJlLCAweGVkLCAweDU5LCAweGJhLCAweGE3LCAweDE5LCAweGI5LCAweGZlLCAweDllLCAweDc2LCAweDJmLAorCTB4ZWMsIDB4ODksIDB4ZDgsIDB4MDEsIDB4Y2MsIDB4NzcsIDB4ODEsIDB4ZjksIDB4MmUsIDB4MzAsIDB4ZGYsIDB4MDUsCisJMHhlNiwgMHhiYiwgMHhjMCwgMHg3YywgMHgxNywgMHhmNiwgMHhjMCwgMHgwNSwgMHhlZSwgMHhiYiwgMHhjMCwgMHg3ZCwKKwkweDE3LCAweGI4LCAweGVmLCAweDAyLCAweGY3LCAweGRkLCAweDJjLCAweGNlLCAweDhlLCAweGQ4LCAweDRlLCAweGJiLAorCTB4NzEsIDB4ZGYsIDB4ODIsIDB4YWQsIDB4ZjQsIDB4N2MsIDB4OWIsIDB4OWIsIDB4YjQsIDB4YmYsIDB4MDAsIDB4OWQsCisJMHhiNCwgMHg1YiwgMHg2NCwgMHhiOCwgMHg2YiwgMHgzMywgMHhmNiwgMHg1NiwgMHg4NywgMHg2NywgMHgzZCwgMHg5ZSwKKwkweDU4LCAweGEzLCAweGViLCAweDMzLCAweDVhLCAweDc3LCAweGJlLCAweDBhLCAweGJhLCAweDRjLCAweDk0LCAweDdmLAorCTB4MDksIDB4YjIsIDB4NTksIDB4MDMsIDB4N2EsIDB4N2UsIDB4NDEsIDB4ZmIsIDB4MTUsIDB4YTcsIDB4MmMsIDB4NGYsCisJMHgzNiwgMHhlYiwgMHg1MSwgMHhmNywgMHg2OSwgMHhkNCwgMHhkNSwgMHhhMywgMHhjZiwgMHgyMSwgMHhmNCwgMHhhMSwKKwkweDVmLCAweGQyLCAweGEwLCAweGViLCAweDgyLCAweGZkLCAweGU4LCAweDlmLCAweGZjLCAweDI2LCAweGQ2LCAweDRhLAorCTB4YTIsIDB4NWYsIDB4MDMsIDB4ZTYsIDB4NmUsIDB4NDUsIDB4OWYsIDB4Y2YsIDB4YTIsIDB4Y2YsIDB4Y2QsIDB4MjgsCisJMHhkMywgMHg5ZiwgMHhkZCwgMHg4MiwgMHhmMiwgMHhhNywgMHhhYSwgMHhjNiwgMHhkYywgMHg4YSwgMHhiYSwgMHhjZiwKKwkweDU0LCAweGQ1LCAweGNkLCAweGEzLCAweDBlLCAweDcxLCAweGIwLCAweDdkLCAweDUxLCAweDhmLCAweDJiLCAweGEyLAorCTB4ZGMsIDB4NWMsIDB4ZDUsIDB4ZTcsIDB4MTIsIDB4ZWEsIDB4N2EsIDB4NTEsIDB4ZjcsIDB4M2QsIDB4M2MsIDB4MTEsCisJMHhmZiwgMHhkYSwgMHhhNCwgMHhjOSwgMHg2ZiwgMHhhMywgMHg2ZiwgMHg5YSwgMHg0MCwgMHg3ZCwgMHg1OCwgMHhmYiwKKwkweDk3LCAweDRmLCAweGQyLCAweGRmLCAweDgyLCAweDlkLCAweGZkLCAweDUzLCAweGNiLCAweGYzLCAweGM3LCAweDllLAorCTB4YjEsIDB4M2QsIDB4NTksIDB4ZjUsIDB4Y2IsIDB4M2YsIDB4YWEsIDB4MmEsIDB4YjMsIDB4ZWYsIDB4ZmYsIDB4NTYsCisJMHhkNSwgMHhlZCwgMHhkYSwgMHhiOCwgMHhiNCwgMHhmYywgMHg3ZSwgMHg3OCwgMHhmOSwgMHg5OCwgMHhlMywgMHg1NSwKKwkweDdkLCAweDVlLCAweDZlLCAweDVjLCAweDVhLCAweGZlLCAweDdjLCAweGNkLCAweGYyLCAweDMxLCAweGJmLCAweGI1LAorCTB4NjEsIDB4NjksIDB4ZGQsIDB4ZTEsIDB4YTYsIDB4YTUsIDB4NjUsIDB4ZmEsIDB4N2QsIDB4MzEsIDB4YzQsIDB4MmQsCisJMHg3ZSwgMHhmZiwgMHgwNywgMHgzNywgMHg3OSwgMHhlZCwgMHhlNCwgMHg2ZiwgMHhiNSwgMHgyYywgMHgyOSwgMHhlMywKKwkweDhkLCAweGIyLCAweDg5LCAweDczLCAweGI4LCAweDYwLCAweDQwLCAweGU3LCAweDZjLCAweDMzLCAweGZkLCAweDhhLAorCTB4OTEsIDB4ODMsIDB4NGMsIDB4NjUsIDB4Y2IsIDB4ZmUsIDB4N2MsIDB4ZDQsIDB4ZTUsIDB4ZWEsIDB4ZGMsIDB4ODAsCisJMHg5ZiwgMHgxMywgMHhhMCwgMHg4ZiwgMHgxNSwgMHg4NSwgMHhkYywgMHgwMCwgMHg4YiwgMHg2MywgMHhjOSwgMHhhMywKKwkweDQ1LCAweDU5LCAweGQ0LCAweGUxLCAweDM2LCAweGYzLCAweDVhLCAweDNhLCAweDNjLCAweGE5LCAweDcxLCAweGViLAorCTB4MzIsIDB4ZTgsIDB4YWMsIDB4NDgsIDB4N2YsIDB4YWEsIDB4OTYsIDB4NzYsIDB4NDcsIDB4ZTMsIDB4MTksIDB4YjEsCisJMHhhOCwgMHg1MiwgMHgwOSwgMHg2ZCwgMHhhZCwgMHhjOCwgMHhjMSwgMHhkNCwgMHgzYiwgMHgxNSwgMHg1MSwgMHgzOCwKKwkweGY4LCAweDRkLCAweGNkLCAweDU3LCAweGUyLCAweGExLCAweDBkLCAweGI5LCAweDhkLCAweDI5LCAweDNmLCAweDJlLAorCTB4OTQsIDB4M2UsIDB4NDUsIDB4OWYsIDB4ZTQsIDB4ODgsIDB4ODcsIDB4YjMsIDB4YzQsIDB4MjIsIDB4OTQsIDB4Y2IsCisJMHg2MywgMHhlOCwgMHhjMywgMHhmNSwgMHhmMSwgMHg5YywgMHgyMSwgMHhiNiwgMHg1YiwgMHhjYSwgMHhjZSwgMHhlNCwKKwkweDZkLCAweGNlLCAweGJiLCAweDEyLCAweDVlLCAweGZlLCAweGQ4LCAweGEyLCAweDJmLCAweDY4LCAweDM5LCAweDY3LAorCTB4NjAsIDB4ZjMsIDB4ZDgsIDB4NDYsIDB4ZmYsIDB4ZTAsIDB4MGMsIDB4N2QsIDB4OTEsIDB4ODAsIDB4NmYsIDB4ZDMsCisJMHgxMSwgMHgxMiwgMHg2NywgMHgxMSwgMHg0NywgMHhiZCwgMHg3ZCwgMHhiNSwgMHhkMCwgMHhkNywgMHg1ZiwgMHhjMywKKwkweDVlLCAweDU3LCAweGM2LCAweGFiLCAweDc2LCAweGYzLCAweGZhLCAweGJhLCAweGJkLCAweDc3LCAweDQxLCAweGI3LAorCTB4N2QsIDB4ZDksIDB4NWIsIDB4MjksIDB4MDcsIDB4NzAsIDB4NDUsIDB4OWQsIDB4YzUsIDB4ZjMsIDB4ZTUsIDB4ZTQsCisJMHhiMSwgMHgyMiwgMHg3NCwgMHg2OSwgMHg0ZSwgMHhjNSwgMHhiYiwgMHhmZSwgMHhiOSwgMHhkMCwgMHhhZiwgMHg0OSwKKwkweDllLCAweDlhLCAweDgyLCAweDZjLCAweDBmLCAweGE5LCAweDM4LCAweDgwLCAweDMxLCAweDQwLCAweDQ1LCAweDc2LAorCTB4YTcsIDB4ODYsIDB4NjIsIDB4ZTQsIDB4NDMsIDB4YzYsIDB4YmMsIDB4MWEsIDB4YTYsIDB4MWYsIDB4MzEsIDB4ZTcsCisJMHg5MiwgMHg2NywgMHgyOSwgMHhiNCwgMHhhNywgMHhjMCwgMHhkYiwgMHg3ZiwgMHg5NSwgMHg1YywgMHg4YywgMHg3NSwKKwkweGZmLCAweDU1LCAweDk5LCAweDg2LCAweGZmLCAweGEzLCAweDdjLCAweDIyLCAweGU1LCAweDAzLCAweGQwLCAweGE3LAorCTB4ODMsIDB4YWQsIDB4MmYsIDB4OTMsIDB4YTcsIDB4MTcsIDB4YzAsIDB4NjcsIDB4ZGYsIDB4MmYsIDB4YjgsIDB4NGMsCisJMHhiZiwgMHg1NCwgMHg5NiwgMHhmYSwgMHhjZiwgMHgyMiwgMHg4ZiwgMHg5NCwgMHhmZSwgMHgxOSwgMHg3NiwgMHhjOCwKKwkweGM0LCAweDdjLCAweGI0LCAweDc3LCAweGI0LCAweDI5LCAweGFjLCAweGRmLCAweDExLCAweGE2LCAweGZmLCAweGU2LAorCTB4ZDksIDB4ZmYsIDB4MTAsIDB4ZDYsIDB4NDMsIDB4NGMsIDB4NWQsIDB4ZmEsIDB4MGYsIDB4MjMsIDB4ZWYsIDB4YjYsCisJMHhkMiwgMHhiNywgMHhjMiwgMHhmZSwgMHg4OSwgMHhhYiwgMHg2YywgMHg2MywgMHg1ZCwgMHg0NCwgMHhmYiwgMHhkYywKKwkweDUxLCAweGVkLCAweDYzLCAweGRiLCAweGRhLCAweGM3LCAweDI2LCAweDFkLCAweDQ2LCAweGM0LCAweDRlLCAweGZiLAorCTB4YmUsIDB4MDIsIDB4Y2YsIDB4MGMsIDB4NjcsIDB4YjMsIDB4NTUsIDB4ZjksIDB4MGEsIDB4YjIsIDB4YjIsIDB4YWYsCisJMHhlMCwgMHhkMywgMHg3NCwgMHgxNiwgMHhmYiwgMHhhNCwgMHg2ZiwgMHhhNywgMHg3MiwgMHgzZiwgMHg4ZCwgMHg1ZSwKKwkweGJlLCAweDg5LCAweDM0LCAweGY4LCAweDM2LCAweDUzLCAweGQ5LCAweGU2LCAweGEzLCAweDMwLCAweDgzLCAweGQ4LAorCTB4ZGIsIDB4NmYsIDB4ODMsIDB4ZDYsIDB4M2QsIDB4OTIsIDB4MWQsIDB4M2YsIDB4YWIsIDB4NmQsIDB4MzAsIDB4NjMsCisJMHgwNywgMHhmYSwgMHhlZCwgMHg5ZSwgMHhjYywgMHg2NiwgMHg1MywgMHgwZCwgMHg4NiwgMHg5ZSwgMHhhNywgMHgxOSwKKwkweDU2LCAweDMzLCAweDkwLCAweDk3LCAweGUyLCAweDVhLCAweGY0LCAweDZkLCAweDdjLCAweDNmLCAweDY3LCAweDU2LAorCTB4ZmIsIDB4MzksIDB4ZTcsIDB4ZTUsIDB4YTAsIDB4ZWIsIDB4YzUsIDB4MGEsIDB4ZmQsIDB4YTUsIDB4MGIsIDB4YTgsCisJMHg1MywgMHhiNCwgMHhjNywgMHhlOSwgMHg0ZiwgMHg5YSwgMHgyNiwgMHhmZCwgMHhjOSwgMHgyNCwgMHg4MiwgMHgwZSwKKwkweDZmLCAweDJmLCAweDZkLCAweGQ4LCAweGNiLCAweGNjLCAweGMyLCAweDVlLCAweGVhLCAweDJmLCAweDJjLCAweGRkLAorCTB4MGIsIDB4ZTksIDB4YjcsIDB4YzEsIDB4NGYsIDB4NGIsIDB4ZTMsIDB4MTQsIDB4ZTcsIDB4ZmMsIDB4NDYsIDB4OTgsCisJMHgxOCwgMHhkNiwgMHg0ZiwgMHg5ZiwgMHhjOCwgMHhmNSwgMHg3YywgMHhiMSwgMHhhNSwgMHhmMywgMHhjMiwgMHg2MywKKwkweDI4LCAweDRkLCAweDVkLCAweGEzLCAweDhkLCAweGZiLCAweGY3LCAweGY1LCAweGNhLCAweGQyLCAweGQ4LCAweGNlLAorCTB4M2QsIDB4ZmMsIDB4MDksIDB4ZTYsIDB4OGMsIDB4MTksIDB4NzksIDB4ZTUsIDB4OWIsIDB4ZDEsIDB4Y2YsIDB4NDEsCisJMHhkYywgMHg1ZCwgMHg3YSwgMHgwNSwgMHg0ZiwgMHhlYSwgMHg4ZSwgMHg5YSwgMHgwNywgMHhmYiwgMHg4ZCwgMHhhYSwKKwkweGZkLCAweDhlLCAweGI5LCAweDk3LCAweGQ0LCAweDFlLCAweGE3LCAweDRiLCAweDNmLCAweDkwLCAweGMyLCAweGM5LAorCTB4MWYsIDB4YzIsIDB4MjYsIDB4MDYsIDB4NzMsIDB4NzUsIDB4Y2MsIDB4NzMsIDB4OTIsIDB4NTcsIDB4YzUsIDB4MDAsCisJMHhiNiwgMHg5MiwgMHg2NiwgMHhlNiwgMHhlMSwgMHhiZSwgMHgxNywgMHhmNiwgMHhlMiwgMHg4NSwgMHg3MSwgMHg5YywKKwkweGJmLCAweGUxLCAweGI1LCAweGFiLCAweGY1LCAweDdkLCAweDllLCAweGQ3LCAweDA0LCAweGU4LCAweGE5LCAweGMwLAorCTB4NDcsIDB4OGQsIDB4ODMsIDB4ODYsIDB4ZTAsIDB4OTgsIDB4YzcsIDB4YTQsIDB4Y2YsIDB4ZTUsIDB4NTksIDB4YjUsCisJMHhjNywgMHg4NywgMHhjNCwgMHhiMSwgMHhmMywgMHhlMiwgMHhmYiwgMHgyNSwgMHg1YywgMHg5ZiwgMHg3OCwgMHg5MCwKKwkweDQzLCAweDBjLCAweGM1LCAweGRjLCAweGFhLCAweGNmLCAweDU3LCAweDlmLCAweGE3LCAweGQxLCAweDBiLCAweGQ1LAorCTB4ZjIsIDB4MzEsIDB4OGEsIDB4ZDgsIDB4YWIsIDB4ZTAsIDB4OTIsIDB4NGYsIDB4YmUsIDB4ZGMsIDB4ZmEsIDB4NmIsCisJMHg1ZiwgMHgzMSwgMHhiOCwgMHg5ZiwgMHgxMSwgMHg5NSwgMHg0ZiwgMHg3YywgMHg2ZCwgMHg0MSwgMHg3ZSwgMHg4NywKKwkweDgxLCAweDJiLCAweDllLCAweDNjLCAweGJlLCAweGFhLCAweDc5LCAweGUzLCAweGNiLCAweDZkLCAweDU0LCAweGNiLAorCTB4MDAsIDB4NjMsIDB4NDMsIDB4ZWEsIDB4OTUsIDB4MmYsIDB4MjMsIDB4MWQsIDB4ZjYsIDB4ZGQsIDB4OGEsIDB4MTcsCisJMHg2YywgMHg1MywgMHg3OSwgMHg0NiwgMHg3NSwgMHhjZSwgMHg4MywgMHgwYiwgMHhlNywgMHhiYywgMHhiZSwgMHg0YSwKKwkweDY2LCAweDUzLCAweGI2LCAweGE3LCAweGEzLCAweGQ0LCAweDQ1LCAweGU4LCAweDM0LCAweGY4LCAweGY1LCAweGZjLAorCTB4MTIsIDB4ZGQsIDB4ZWYsIDB4YmEsIDB4NDYsIDB4OGUsIDB4MzYsIDB4MmEsIDB4YTEsIDB4YzksIDB4OTcsIDB4YzEsCisJMHhjYiwgMHg1YiwgMHgxMSwgMHhiYiwgMHg4OCwgMHg1OCwgMHgxMywgMHhjNCwgMHgyOCwgMHhmYSwgMHgyMiwgMHg4YiwKKwkweGZlLCAweGYxLCAweGI0LCAweGFjLCAweGU0LCAweDFiLCAweDVmLCAweGNmLCAweDBmLCAweGI5LCAweDdkLCAweDhkLAorCTB4N2UsIDB4YzgsIDB4YWYsIDB4ZDYsIDB4MzAsIDB4OTYsIDB4OTksIDB4ODMsIDB4OWUsIDB4MWUsIDB4YzAsIDB4ZjgsCisJMHgxYSwgMHhlNywgMHg0NywgMHhiMCwgMHg2ZiwgMHhhNywgMHhhZCwgMHg1YSwgMHhjNywgMHhjNywgMHg4YiwgMHhhOCwKKwkweDZjLCAweDljLCAweGRjLCAweGEyLCAweDMwLCAweGMzLCAweDllLCAweDU4LCAweGM0LCAweDhjLCAweDYxLCAweDk3LAorCTB4ZjIsIDB4YWIsIDB4ZjQsIDB4MzQsIDB4YjYsIDB4NTEsIDB4N2MsIDB4OGMsIDB4NzgsIDB4ZDYsIDB4NjIsIDB4YmUsCisJMHg2NywgMHg2NSwgMHgxYywgMHhmMCwgMHg3MiwgMHhiYSwgMHgyYiwgMHhjNywgMHgwYSwgMHgzNywgMHg1NSwgMHhmMSwKKwkweDcyLCAweDI1LCAweGRjLCAweDNjLCAweDA3LCAweGRlLCAweGE1LCAweDExLCAweDEzLCAweDI3LCAweGNmLCAweDg4LAorCTB4ZWMsIDB4NDEsIDB4OWMsIDB4OWMsIDB4N2MsIDB4NGIsIDB4YTQsIDB4MGYsIDB4YjEsIDB4NzIsIDB4NzIsIDB4NTYsCisJMHgyNCwgMHg4MywgMHg3OCwgMHg5OSwgMHhmMSwgMHhkYiwgMHg1ZCwgMHhlMCwgMHg2OSwgMHgyZiwgMHhlMiwgMHhlOSwKKwkweDFlLCAweDYwLCAweDZhLCAweDBhLCAweDE4LCAweGJiLCAweDFkLCAweGZjLCAweGVkLCAweDAyLCAweGJmLCAweDZkLAorCTB4YzQsIDB4NWIsIDB4NjUsIDB4MzksIDB4NzAsIDB4NWMsIDB4OGMsIDB4N2QsIDB4MmEsIDB4N2YsIDB4NGQsIDB4N2QsCisJMHg4ZiwgMHhjMSwgMHhjZSwgMHg1NiwgMHgyYSwgMHg4NywgMHg1MiwgMHhlZCwgMHg4OCwgMHhmNSwgMHgxMywgMHhmMiwKKwkweDM5LCAweDhiLCAweGIxLCAweGFkLCAweDYxLCAweGI1LCAweDc1LCAweDdmLCAweDNmLCAweDE0LCAweGY0LCAweDZiLAorCTB4YjMsIDB4ZDcsIDB4YjUsIDB4MTMsIDB4Y2IsIDB4ZjksIDB4OWYsIDB4NTMsIDB4YjYsIDB4ZTIsIDB4YzUsIDB4ZDAsCisJMHg2YSwgMHhmYywgMHhkZiwgMHhiNywgMHhjMCwgMHhmZiwgMHg5ZSwgMHgzYSwgMHhhOSwgMHhiYiwgMHg0YiwgMHhlNSwKKwkweDE2LCAweGRhLCAweGJhLCAweDBmLCAweDExLCAweGNmLCAweDUyLCAweGIwLCAweGZiLCAweGIwLCAweGNmLCAweDE1LAorCTB4YjksIDB4MzMsIDB4NzUsIDB4YjUsIDB4NzIsIDB4ZDEsIDB4ZDksIDB4MjAsIDB4ZjksIDB4ZWQsIDB4MGYsIDB4NmEsCisJMHg0YywgMHgzZiwgMHhmNSwgMHg4NywgMHg1OSwgMHhhNywgMHgwOCwgMHgxZCwgMHhmMSwgMHhmMiwgMHg4OCwgMHg0MywKKwkweGUzLCAweDExLCAweDU4LCAweDBhLCAweGZlLCAweDM1LCAweGNhLCAweDc0LCAweGVmLCAweDU1LCAweDljLCAweGUzLAorCTB4YjYsIDB4MzMsIDB4NGMsIDB4NDIsIDB4MTEsIDB4NmIsIDB4YTYsIDB4NjMsIDB4NTEsIDB4OTUsIDB4NDMsIDB4ZGUsCisJMHhlNCwgMHhiMCwgMHhkZSwgMHhjNiwgMHhiOSwgMHgwZSwgMHhjOCwgMHgzNCwgMHhmYywgMHg4YiwgMHg5OSwgMHg1ZSwKKwkweGQwLCAweGI4LCAweGJkLCAweDE5LCAweGZkLCAweGE5LCAweDdiLCAweGU0LCAweGY5LCAweDgwLCAweDBjLCAweGM2LAorCTB4YzgsIDB4ZDMsIDB4MTgsIDB4ZmEsIDB4ZWYsIDB4NDUsIDB4OWYsIDB4NDYsIDB4M2MsIDB4ZmYsIDB4MjgsIDB4MzQsCisJMHg2ZCwgMHgzMywgMHg5ZSwgMHhmZSwgMHgzYywgMHhjYSwgMHg5YywgMHgyMywgMHg2OCwgMHg1YiwgMHg3NywgMHg4NSwKKwkweDQ1LCAweGNkLCAweGM5LCAweDMxLCAweGNkLCAweDBhLCAweDAzLCAweDE2LCAweGQ3LCAweGUyLCAweDNhLCAweDZjLAorCTB4N2IsIDB4YWYsIDB4NzIsIDB4NDcsIDB4NzcsIDB4NmYsIDB4NjAsIDB4YmQsIDB4ODYsIDB4YzAsIDB4N2EsIDB4YmQsCisJMHg4MSwgMHhmNSwgMHg0OCwgMHg2NywgMHg2MywgMHg4MCwgMHhjZSwgMHg0NiwgMHg4YywgMHhmZiwgMHg1ZCwgMHhhYywKKwkweDRkLCAweDdlLCAweDA0LCAweGQ3LCAweGNjLCAweDA3LCAweGQ2LCAweGY0LCAweGY3LCAweGQ3LCAweDFjLCAweDE4LAorCTB4ZjcsIDB4MGUsIDB4ZDYsIDB4NjMsIDB4NWQsIDB4MmMsIDB4NTAsIDB4NDcsIDB4MWEsIDB4OWEsIDB4NTAsIDB4YzcsCisJMHg3MiwgMHg2MywgMHg4MCwgMHhhZSwgMHhhOCwgMHg4YSwgMHhmNywgMHhhNywgMHhkNSwgMHgxOSwgMHg5MiwgMHhjZiwKKwkweDc1LCAweGIwLCAweDZiLCAweDI2LCAweDZjLCAweDRiLCAweDBkLCAweGZjLCAweGFmLCAweGVhLCAweGJkLCAweDdlLAorCTB4MGQsIDB4ZWIsIDB4ZmEsIDB4ZjMsIDB4YzUsIDB4MzAsIDB4MDcsIDB4ZmIsIDB4YjMsIDB4NmYsIDB4NDgsIDB4OGYsCisJMHg2NywgMHgzZCwgMHhkYiwgMHhmZiwgMHhiNiwgMHhmMiwgMHg4YywgMHhlMiwgMHg1YiwgMHgxYSwgMHhiNCwgMHg5MywKKwkweGM2LCAweDM2LCAweDk5LCAweDZhLCAweGI0LCAweDcwLCAweDllLCAweGE2LCAweGI2LCAweGE1LCAweGMwLCAweGRhLAorCTB4YjIsIDB4NjksIDB4YjQsIDB4NzcsIDB4ZjMsIDB4ZmMsIDB4MzcsIDB4NjgsIDB4NGMsIDB4YWQsIDB4MzMsIDB4YjIsCisJMHhjNywgMHg5OSwgMHg0YiwgMHhhOCwgMHhkNywgMHhiMSwgMHgyMiwgMHhlMiwgMHgxMywgMHg2NSwgMHg4NywgMHg3YywKKwkweDNiLCAweDQxLCAweDNiLCAweDQ0LCAweGRmLCAweDg2LCAweDM2LCAweGY2LCAweDljLCAweDdlLCAweGM3LCAweDEzLAorCTB4NzIsIDB4ZmMsIDB4ZDAsIDB4NGMsIDB4YTMsIDB4NWMsIDB4NTQsIDB4N2MsIDB4YjUsIDB4NjUsIDB4N2UsIDB4ODEsCisJMHhhZiwgMHg2MSwgMHhmZCwgMHhiZCwgMHhlNiwgMHgzMSwgMHhmZCwgMHgyZCwgMHg2NCwgMHgzZiwgMHg3YywgMHgyNywKKwkweGJjLCAweDk3LCAweDMyLCAweGEwLCAweDIzLCAweDIxLCAweGVkLCAweGRkLCAweGNjLCAweDYxLCAweDE0LCAweGYxLAorCTB4NzQsIDB4ZjAsIDB4MzQsIDB4ZjAsIDB4ODQsIDB4Y2QsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4ZGUsIDB4Y2QsIDB4NTgsCisJMHg1MCwgMHg0MCwgMHhkYiwgMHgxNSwgMHgxNSwgMHgwNywgMHhjZSwgMHg5NCwgMHg2ZCwgMHhlMywgMHg0ZSwgMHhkNywKKwkweGNiLCAweDFkLCAweGNkLCAweDNiLCAweGFiLCAweGU1LCAweDhlLCAweDFlLCAweGE4LCAweGM1LCAweDc5LCAweDljLAorCTB4ZjIsIDB4NzMsIDB4NDcsIDB4ZjMsIDB4YTIsIDB4NzIsIDB4NDcsIDB4YTcsIDB4YWUsIDB4OTMsIDB4M2IsIDB4Y2EsCisJMHhhYywgMHgzZCwgMHg3NywgMHhjNCwgMHhmOSwgMHgyZCwgMHhiOSwgMHhiYiwgMHhjNywgMHgzNiwgMHhiZiwgMHhhOCwKKwkweDczLCAweDQ3LCAweDZmLCAweDg4LCAweDk3LCAweDNiLCAweGJhLCAweDI4LCAweDJiLCAweGU3LCAweDhlLCAweDhlLAorCTB4NTYsIDB4ZTUsIDB4OGUsIDB4OWEsIDB4NTQsIDB4ZWUsIDB4ODgsIDB4ZjMsIDB4NzgsIDB4YjksIDB4MjMsIDB4OTYsCisJMHhmMywgMHhkZCwgMHhiZiwgMHhhYywgMHg3MiwgMHhlOSwgMHhmOSwgMHg2ZSwgMHg2MCwgMHhiMCwgMHhlYiwgMHg2MywKKwkweDljLCAweDZkLCAweDBjLCAweGE4LCAweGY4LCAweGYyLCAweDRhLCAweGI4LCAweGQ5LCAweGYxLCAweDMxLCAweDhlLAorCTB4YjYsIDB4NjAsIDB4ZjMsIDB4ODIsIDB4M2QsIDB4ZjMsIDB4ZjEsIDB4NmUsIDB4NTQsIDB4ZDksIDB4YmQsIDB4ZTUsCisJMHhmOSwgMHhjNSwgMHg3YiwgMHhhYSwgMHhmMiwgMHg4YiwgMHgwMywgMHg5ZSwgMHhkZCwgMHg1MCwgMHgzOCwgMHgzNywKKwkweGE4LCAweDcxLCAweDZlLCAweDc0LCAweGMxLCAweGNmLCAweDM5LCAweDU5LCAweGNiLCAweDE4LCAweDdjLCAweGE0LAorCTB4MTQsIDB4YzQsIDB4NTEsIDB4NGIsIDB4OGQsIDB4ZjUsIDB4ZjIsIDB4MmMsIDB4OGIsIDB4MTgsIDB4N2EsIDB4YjgsCisJMHgwYSwgMHg0MywgMHgxZiwgMHg1YiwgMHhmMSwgMHhiYiwgMHg1OCwgMHgzYywgMHhiMywgMHhmYywgMHhiYiwgMHg5OCwKKwkweDIxLCAweGNkLCAweGY0LCAweDM5LCAweGJhLCAweGYzLCAweGQ4LCAweDAzLCAweDYzLCAweGU2LCAweGZkLCAweDkyLAorCTB4MTksIDB4YjAsIDB4ODEsIDB4NDUsIDB4N2UsIDB4ZmUsIDB4ODUsIDB4ZTcsIDB4YmMsIDB4NjgsIDB4NjMsIDB4YjIsCisJMHhlNiwgMHhjNywgMHg5NywgMHg4MywgMHg3OSwgMHg0OCwgMHhlNSwgMHg2MCwgMHhiZSwgMHg1ZiwgMHgxYiwgMHhjYywKKwkweGMxLCAweGNjLCAweDAzLCAweGIzLCAweDMyLCAweDE2LCAweGYzLCAweDViLCAweDJiLCAweGU3LCAweDYwLCAweDFlLAorCTB4NWEsIDB4MjEsIDB4MDcsIDB4ZjMsIDB4NWQsIDB4NTksIDB4Y2MsIDB4YzEsIDB4N2MsIDB4NTcsIDB4ZmMsIDB4MWMsCisJMHgwYywgMHhlNywgMHgwOCwgMHg2OSwgMHg5ZiwgMHg1NiwgMHgzMCwgMHhlZSwgMHgwMiwgMHg3ZSwgMHhlNywgMHhmMSwKKwkweGYzLCAweGYyLCAweDMyLCAweGYzLCAweDBiLCAweDdiLCAweDU4LCAweDI5LCAweDJmLCAweGYzLCAweDZmLCAweGI1LAorCTB4MWYsIDB4MjQsIDB4MmYsIDB4ZTMsIDB4ZDksIDB4MDQsIDB4M2YsIDB4MmYsIDB4ODMsIDB4OWYsIDB4MGQsIDB4MWIsCisJMHg2NCwgMHgwNiwgMHhmMywgMHgzMiwgMHhlZiwgMHg1MywgMHgzNywgMHg1MCwgMHhjNywgMHgzMiwgMHhlYiwgMHhhMSwKKwkweDIzLCAweGIwLCAweDUzLCAweDE5LCAweGQ4LCAweDk5LCAweDY5LCAweGY3LCAweGQ3LCAweGQ1LCAweDc5LCAweGNjLAorCTB4YjgsIDB4NTMsIDB4ZDgsIDB4NzcsIDB4MDIsIDB4ZTcsIDB4NDEsIDB4NWUsIDB4YjYsIDB4MmIsIDB4NWYsIDB4MzQsCisJMHg2MywgMHhjNSwgMHg4ZCwgMHg2YywgMHgyNywgMHhhYywgMHhkYSwgMHgzOCwgMHhiZiwgMHg5ZCwgMHg1YiwgMHhjNiwKKwkweDUwLCAweDk5LCAweGYyLCAweDFlLCAweDMxLCAweDBhLCAweGQ4LCAweDRiLCAweGRmLCAweGY4LCAweDk0LCAweDBjLAorCTB4OTUsIDB4N2QsIDB4M2YsIDB4YWIsIDB4NWIsIDB4OWYsIDB4YzUsIDB4OTQsIDB4ZDIsIDB4ZDMsIDB4NjksIDB4ZjAsCisJMHgwMCwgMHg5OCwgMHhiMSwgMHgwNiwgMHg5YiwgMHg3NSwgMHgxNiwgMHgzNCwgMHgwNywgMHhmNywgMHg4MSwgMHgxOCwKKwkweGJhLCAweDA3LCAweDc1LCAweGVhLCAweGRjLCAweGU5LCAweDZmLCAweGZhLCAweGI0LCAweDI0LCAweGE4LCAweGYzLAorCTB4NmIsIDB4OTgsIDB4OGYsIDB4NzUsIDB4NjcsIDB4NTUsIDB4ZmMsIDB4NTYsIDB4ZTgsIDB4ZTEsIDB4NWUsIDB4NjksCisJMHhmYiwgMHhlNiwgMHg0MCwgMHgxZiwgMHhlYSwgMHg2NiwgMHgxOCwgMHgzMywgMHhkMiwgMHgwZSwgMHhmYSwgMHgzMSwKKwkweDVkLCAweDU0LCAweGM1LCAweDc0LCAweDliLCAweDE1LCAweDNmLCAweGM4LCAweGViLCAweDVmLCAweDhiLCAweDEwLAorCTB4M2IsIDB4MzcsIDB4M2IsIDB4ZGMsIDB4YzMsIDB4NzksIDB4OGQsIDB4N2IsIDB4MmMsIDB4ZmIsIDB4YjEsIDB4MjMsCisJMHhkZiwgMHhjOSwgMHhhNywgMHhhNywgMHg1NCwgMHhkZSwgMHg2NywgMHhkYSwgMHhmNSwgMHhjZiwgMHhmMCwgMHg1YiwKKwkweGQ4LCAweDNiLCAweGNiLCAweGJkLCAweDcyLCAweGExLCAweDU5LCAweDIyLCAweGIxLCAweDM0LCAweDczLCAweGJkLAorCTB4ZjQsIDB4ZDUsIDB4NzcsIDB4MzAsIDB4ZjcsIDB4NTAsIDB4ZDMsIDB4YjQsIDB4OGEsIDB4ZmUsIDB4ZWUsIDB4NWIsCisJMHg0NSwgMHg3ZiwgMHhlZiwgMHhhZSwgMHhkMiwgMHhkZiwgMHhmZSwgMHg1NSwgMHhmNSwgMHhmNywgMHhlYiwgMHg5MSwKKwkweGEwLCAweGZlLCAweGVlLCAweDViLCAweDQ1LCAweDdmLCAweDFmLCAweGFkLCAweGQyLCAweGRmLCAweDgzLCAweDM3LAorCTB4YTQsIDB4YmYsIDB4M2EsIDB4MzYsIDB4NGUsIDB4ZGQsIDB4YWEsIDB4NzIsIDB4YzYsIDB4YzMsIDB4MTMsIDB4YzQsCisJMHhhYywgMHg0ZiwgMHhlYiwgMHhkYywgMHhkNSwgMHg0YSwgMHhiZSwgMHg5OCwgMHg0ZiwgMHg0MywgMHg1YiwgMHhjZCwKKwkweDQ3LCAweGUzLCAweDg3LCAweGZkLCAweDIzLCAweGY2LCAweGU5LCAweGY5LCAweGEzLCAweGZkLCAweGYwLCAweDY5LAorCTB4YWYsIDB4YmQsIDB4ZWUsIDB4MWYsIDB4OGIsIDB4OTksIDB4ZjYsIDB4N2QsIDB4YzAsIDB4YWQsIDB4MWYsIDB4ZDEsCisJMHhkYSwgMHg2YiwgMHg5MSwgMHgzZiwgMHhjNiwgMHg1NiwgMHhmNCwgMHgwNywgMHhhMiwgMHhkYSwgMHg2NiwgMHg0ZSwKKwkweDZhLCAweDFkLCAweGY0LCAweGYzLCAweDEyLCAweDQxLCAweDdkLCAweGE2LCAweDljLCAweDUyLCAweDM2LCAweDdmLAorCTB4OGEsIDB4M2QsIDB4NTEsIDB4M2UsIDB4N2QsIDB4MGMsIDB4ZDgsIDB4NTIsIDB4YTUsIDB4MTMsIDB4NzMsIDB4NTIsCisJMHgwMCwgMHg2ZSwgMHg3OSwgMHgzYSwgMHg0MSwgMHgzOSwgMHhlYiwgMHhjNCwgMHhiZSwgMHg2MSwgMHgyYiwgMHhkZCwKKwkweGE3LCAweGJkLCAweGIzLCAweDcwLCAweGYwLCAweDljLCAweGYxLCAweDc1LCAweDNmLCAweDgxLCAweDc1LCAweGZkLAorCTB4MzYsIDB4ZGEsIDB4MWUsIDB4MDcsIDB4M2UsIDB4ZDksIDB4MzYsIDB4ZjgsIDB4OTMsIDB4MmQsIDB4YzAsIDB4MTksCisJMHhkNiwgMHgyZiwgMHhjZCwgMHg3MywgMHhhZiwgMHg4ZSwgMHhiMSwgMHg1MiwgMHgwYywgMHhhMywgMHhlZiwgMHhlOSwKKwkweDFlLCAweDYwLCAweDRlLCAweDBmLCAweDcxLCAweGIzLCAweDg0LCAweGQ4LCAweDhjLCAweDdhLCAweDQxLCAweDVkLAorCTB4ZTksIDB4ZTgsIDB4ZGEsIDB4NmQsIDB4ZDIsIDB4ZTcsIDB4N2IsIDB4MTIsIDB4NzEsIDB4ZmMsIDB4MmQsIDB4NGEsCisJMHhhZiwgMHg3NiwgMHg5NywgMHgzYiwgMHg2NiwgMHhkZiwgMHgzMCwgMHhiOSwgMHg0NiwgMHhhNSwgMHg5MiwgMHg1NywKKwkweGRmLCAweDE5LCAweGM0LCAweDZjLCAweGViLCAweGRlLCAweGIyLCAweDhlLCAweDM2LCAweGYzLCAweDE2LCAweDI3LAorCTB4YTQsIDB4ZTUsIDB4M2UsIDB4ODMsIDB4NzcsIDB4ZWEsIDB4ZDEsIDB4ZWIsIDB4ZjAsIDB4NDcsIDB4NzgsIDB4NDcsCisJMHhlMSwgMHgyNywgMHgyYSwgMHg1ZiwgMHgzNywgMHhlZCwgMHhkMiwgMHhmNywgMHg2MCwgMHhjYywgMHhiNCwgMHg1MywKKwkweGY3LCAweGRiLCAweGEyLCAweGJlLCAweGIxLCAweDY2LCAweDUzLCAweDNiLCAweGY0LCAweGY3LCAweDM2LCAweGRhLAorCTB4YzQsIDB4MjQsIDB4MzEsIDB4NzUsIDB4YzksIDB4NzksIDB4ZjMsIDB4OGUsIDB4NDcsIDB4NGUsIDB4YzUsIDB4NWMsCisJMHgxYywgMHhhZiwgMHg3YywgMHg3ZiwgMHhjNCwgMHg0OSwgMHg1NiwgMHhlMCwgMHhmYiwgMHg0MCwgMHg0NCwgMHhjNywKKwkweDk3LCAweGQ0LCAweGY5LCAweGE4LCAweDhhLCAweDdkLCAweGJkLCAweDc4LCAweDhhLCAweGYxLCAweGY3LCAweGQyLAorCTB4YmIsIDB4MWQsIDB4MmIsIDB4Y2IsIDB4NDAsIDB4Y2IsIDB4MDcsIDB4OTAsIDB4ODEsIDB4ZWEsIDB4ZjMsIDB4OGIsCisJMHgwMCwgMHg4YiwgMHhmYywgMHhmMywgMHhmMywgMHg3ZCwgMHhhYywgMHhiZiwgMHhkMCwgMHhmYiwgMHhkZSwgMHhhMiwKKwkweGY1LCAweGU5LCAweGZmLCAweGMzLCAweDNlLCAweDhkLCAweGMwLCAweDNlLCAweDdkLCAweDZjLCAweGZjLCAweGEyLAorCTB4ZGUsIDB4ZTcsIDB4Y2UsIDB4MmEsIDB4NmMsIDB4ZWMsIDB4NDEsIDB4ZmQsIDB4ZTEsIDB4OWEsIDB4OGQsIDB4MWYsCisJMHgxMCwgMHgxYiwgMHhmNywgMHhkZSwgMHgxMCwgMHgzNiwgMHhmZSwgMHg3MCwgMHhkZCwgMHg1YSwgMHhiMSwgMHhmMSwKKwkweGQwLCAweDA3LCAweGM2LCAweDQ2LCAweGVlLCAweDZiLCAweDY1LCAweDNjLCAweGRhLCAweGI3LCAweDBjLCAweDhmLAorCTB4ZmUsIDB4ZTAsIDB4MTMsIDB4YzQsIDB4YTMsIDB4ZDUsIDB4YjAsIDB4ODQsIDB4ZTcsIDB4ZDIsIDB4YTAsIDB4N2MsCisJMHg2YywgMHg0ZiwgMHhmZiwgMHhlMCwgMHg1ZiwgMHhjYywgMHg4NCwgMHhlNSwgMHhjMiwgMHhiZCwgMHgxMSwgMHg3OSwKKwkweDZkLCAweDI3LCAweGZjLCAweDZlLCAweGYyLCAweDQ4LCAweDlkLCAweDA3LCAweGNiLCAweGQxLCAweDNhLCAweGNmLAorCTB4MzYsIDB4YzYsIDB4MWIsIDB4YmQsIDB4OWMsIDB4MDIsIDB4YzcsIDB4ZjgsIDB4M2EsIDB4NmQsIDB4YTMsIDB4OWQsCisJMHg2ZCwgMHg1YiwgMHhlNCwgMHhmNSwgMHhjNiwgMHgxYiwgMHg4OSwgMHg1MywgMHhmOSwgMHg4ZCwgMHg2NiwgMHhhNSwKKwkweDM4LCAweDc1LCAweGY1LCAweDljLCAweGU2LCAweDYyLCAweDljLCAweDRhLCAweGFjLCAweDZkLCAweGQ0LCAweDc5LAorCTB4MmMsIDB4YzYsIDB4NjcsIDB4ZmIsIDB4MzUsIDB4N2UsIDB4ZjIsIDB4MWQsIDB4ZjEsIDB4YjgsIDB4OGIsIDB4NTgsCisJMHhkYywgMHg0NSwgMHgxYywgMHhlZSwgMHgyMiwgMHg0NiwgMHg4NywgMHg2ZCwgMHg3ZSwgMHgwMSwgMHgzMiwgMHhmNywKKwkweDZkLCAweDE3LCAweDMxLCAweGI4LCAweDhiLCAweDE4LCAweGRjLCAweGVkLCAweGQyLCAweDcxLCAweDdjLCAweGJmLAorCTB4ZmUsIDB4NzYsIDB4YzEsIDB4ZWYsIDB4ZmIsIDB4Y2MsIDB4ODMsIDB4MTQsIDB4NjEsIDB4NTcsIDB4NDYsIDB4NzksCisJMHgzZiwgMHhjMywgMHhjYywgMHhhNiwgMHhkNiwgMHhlOSwgMHhmZCwgMHhmOSwgMHg3OSwgMHhmZCwgMHg1NiwgMHg5ZCwKKwkweDViLCAweGRhLCAweGI0LCAweDQ5LCAweGY5LCAweDBiLCAweGU2LCAweDJiLCAweDc1LCAweGRlLCAweDFkLCAweDAwLAorCTB4ZGUsIDB4MjMsIDB4NzksIDB4MTQsIDB4YmUsIDB4OTIsIDB4YmEsIDB4ODcsIDB4NDUsIDB4M2QsIDB4YWQsIDB4OTgsCisJMHg2OSwgMHhlNiwgMHg4ZSwgMHhjNCwgMHgzNCwgMHhkMywgMHg3NywgMHg2MCwgMHhjYywgMHgzNiwgMHgyZiwgMHg2NiwKKwkweDg5LCAweDQ5LCAweGM4LCAweDRjLCAweGQ3LCAweDkzLCAweGE3LCAweDg2LCAweDk5LCAweDVlLCAweGFmLCAweGU3LAorCTB4OWEsIDB4YWYsIDB4ZjMsIDB4ZmMsIDB4YmQsIDB4NGUsIDB4OTYsIDB4MmQsIDB4MzMsIDB4ZmQsIDB4NTksIDB4M2UsCisJMHg3MSwgMHhlZSwgMHg3ZSwgMHhmZCwgMHgzZCwgMHg4ZCwgMHg0YiwgMHhkNywgMHgxYSwgMHg1MywgMHgxOCwgMHg5ZiwKKwkweDRkLCAweGRkLCAweDhiLCAweGY5LCAweGQ0LCAweGZkLCAweGE3LCAweDA1LCAweDdlLCAweDliLCAweGQ3LCAweGU0LAorCTB4ZjcsIDB4OTgsIDB4ZTYsIDB4YjcsIDB4YzcsIDB4ZTMsIDB4MTAsIDB4ZmIsIDB4YTksIDB4ZGMsIDB4MzYsIDB4NzksCisJMHhlZCwgMHhjZiwgMHhhNywgMHg3MiwgMHg5MywgMHg1OCwgMHg0NywgMHhkZCwgMHgwMSwgMHhjMSwgMHhiMywgMHg2MiwKKwkweDQ5LCAweGMzLCAweGMwLCAweDdkLCAweDYxLCAweDI3LCAweGI4LCAweGFlLCAweGZmLCAweDJkLCAweDdmLCAweDJkLAorCTB4NmIsIDB4NmUsIDB4NTEsIDB4ZGYsIDB4MDcsIDB4M2QsIDB4YmIsIDB4MzEsIDB4YTYsIDB4NjQsIDB4ZDAsIDB4NGEsCisJMHg3MywgMHg1ZiwgMHhlZiwgMHg0MywgMHhmZSwgMHhjNiwgMHg5NCwgMHhmYywgMHhlNSwgMHgxMCwgMHg2NywgMHg4ZCwKKwkweGY2LCAweDc0LCAweDI0LCAweDJjLCAweDczLCAweGJhLCAweDhlLCAweDM5LCAweGU0LCAweGJlLCAweGIyLCAweDhmLAorCTB4N2QsIDB4NWMsIDB4YWYsIDB4ZGEsIDB4YTYsIDB4MzMsIDB4ZmYsIDB4ZTcsIDB4NjMsIDB4OWEsIDB4YjQsIDB4NzgsCisJMHg3OSwgMHhjMSwgMHhiNSwgMHhkZSwgMHhhOSwgMHg1OCwgMHhkNCwgMHhhNSwgMHhjMSwgMHgwNSwgMHg1ZCwgMHhhYSwKKwkweGFiLCAweGQyLCAweDI1LCAweDdmLCAweDlmLCAweGViLCAweGM1LCAweGZmLCAweGU2LCAweGJlLCAweGQyLCAweDVkLAorCTB4OTAsIDB4YjksIDB4NzIsIDB4ZTAsIDB4MWIsIDB4Y2YsIDB4ODIsIDB4NmMsIDB4ZjAsIDB4NGUsIDB4Y2MsIDB4M2QsCisJMHg5MCwgMHg0MSwgMHg3ZSwgMHhkZiwgMHhkOCwgMHgwMywgMHgzZCwgMHhhYSwgMHg1NCwgMHhmYSwgMHg5OCwgMHgyNywKKwkweGRmLCAweGRlLCAweGFmLCAweGVmLCAweDViLCAweDVjLCAweDUxLCAweDM5LCAweDEyLCAweDZiLCAweDU5LCAweDhlLAorCTB4YTQsIDB4MGYsIDB4YjIsIDB4MDIsIDB4M2YsIDB4MDAsIDB4M2EsIDB4OTgsIDB4NTcsIDB4NjcsIDB4NDksIDB4OWYsCisJMHhhMCwgMHhmYSwgMHgxYiwgMHhkMiwgMHhjNSwgMHg3YSwgMHg4ZiwgMHgwZiwgMHg5ZCwgMHhmNSwgMHhkZSwgMHg3NywKKwkweDE0LCAweDczLCAweGQzLCAweGQyLCAweDMyLCAweGM3LCAweDI3LCAweGVhLCAweDNkLCAweDU5LCAweDM5LCAweDA2LAorCTB4ZmIsIDB4ZGMsIDB4MDcsIDB4NTksIDB4YWMsIDB4OTEsIDB4OWMsIDB4OWEsIDB4ZWYsIDB4OTgsIDB4ZTQsIDB4OWYsCisJMHhmZCwgMHhjZiwgMHhjNiwgMHhhNSwgMHhmZCwgMHg1MSwgMHg3NywgMHhkMiwgMHhlZiwgMHhmZiwgMHg3OCwgMHg1NSwKKwkweGZmLCAweGM3LCAweGQxLCAweGZmLCAweDY3LCAweDU1LCAweGZkLCAweDFmLCAweDBmLCAweGY0LCAweDNmLCAweGExLAorCTB4ZmIsIDB4ZDcsIDB4YTIsIDB4YmYsIDB4ZDIsIDB4ODMsIDB4MjYsIDB4ZGYsIDB4MmYsIDB4MzYsIDB4MWQsIDB4YzQsCisJMHhiMywgMHhjZiwgMHhmYSwgMHg2MywgMHg0ZSwgMHgwNCwgMHhjNiwgMHg0YywgMHg1NiwgMHhhZCwgMHgzMSwgMHg4OSwKKwkweDdlLCAweGYxLCAweGE2LCAweGE1LCAweDZiLCAweGEwLCAweGVlLCAweDY0LCAweDhkLCAweGZlLCAweGJlLCAweDQ3LAorCTB4OWYsIDB4ZTUsIDB4YTAsIDB4Y2UsIDB4MTcsIDB4ZTAsIDB4NTksIDB4MGEsIDB4N2UsIDB4MzMsIDB4ZTIsIDB4NzcsCisJMHgwYSwgMHhjYSwgMHg5ZSwgMHhmZiwgMHg4ZCwgMHhjMiwgMHhiZiwgMHg5MywgMHg0NywgMHhiZCwgMHhjZCwgMHg0MCwKKwkweDZmLCAweDE3LCAweGZkLCAweDFhLCAweDRmLCAweDJlLCAweDgzLCAweDMyLCAweDQ5LCAweDljLCAweDI4LCAweDRhLAorCTB4YzgsIDB4MjksIDB4ZDMsIDB4NTcsIDB4MzIsIDB4MGEsIDB4MzMsIDB4YmUsIDB4N2QsIDB4ZTIsIDB4YmQsIDB4MmIsCisJMHhkZSwgMHhkNywgMHhmNSwgMHhlYywgMHg3MCwgMHhkOCwgMHg5OSwgMHhkMywgMHgzMSwgMHhlMiwgMHhhZiwgMHg5MCwKKwkweDdlLCAweGUwLCAweGE2LCAweDhmLCAweDlkLCAweDcyLCAweGNjLCAweGQzLCAweDFmLCAweGNhLCAweDMxLCAweGU3LAorCTB4ZDcsIDB4N2EsIDB4NDQsIDB4OTksIDB4ZDUsIDB4ZWIsIDB4ZjQsIDB4MmQsIDB4YzMsIDB4YjcsIDB4YzQsIDB4YjIsCisJMHgzYywgMHg1YywgMHg2OCwgMHgwZCwgMHhmOCwgMHhkNiwgMHhiZiwgMHg4MCwgMHg2ZiwgMHhmNywgMHhjYSwgMHg5NCwKKwkweDlkLCAweDUwLCAweDc5LCAweGQwLCAweDQzLCAweDBiLCAweDc5LCAweDgxLCAweGMzLCAweDkxLCAweDQ2LCAweDg3LAorCTB4NzksIDB4ODEsIDB4ZTQsIDB4YTksIDB4OGMsIDB4N2MsIDB4YjAsIDB4YmMsIDB4YzAsIDB4YmUsIDB4MmEsIDB4MWQsCisJMHhkOSwgMHhiYiwgMHhhYSwgMHhlZCwgMHhmYywgMHhiMywgMHhmYSwgMHhiNSwgMHhlNiwgMHgwNSwgMHgxZSwgMHhhOSwKKwkweGIyLCAweDYzLCAweDg3LCAweDZlLCAweGMwLCAweDc2LCAweGU2LCAweDk1LCAweGVkLCAweGU0LCAweDVlLCAweGFmLAorCTB4ZTcsIDB4Y2IsIDB4N2YsIDB4MjUsIDB4ZjIsIDB4ZDEsIDB4ZDgsIDB4Y2UsIDB4ZDUsIDB4NzIsIDB4ZTIsIDB4NDEsCisJMHg3YiwgMHg0MCwgMHhiOSwgMHhiYSwgMHhhYywgMHhmZCwgMHg2YywgMHgzYywgMHg2NywgMHgyZSwgMHg0MywgMHgzZiwKKwkweDRkLCAweDE5LCAweDU0LCAweGIyLCAweGNjLCAweGIyLCAweDFmLCAweGZmLCAweGRlLCAweGI3LCAweDEwLCAweGZmLAorCTB4MmUsIDB4YzYsIDB4YWMsIDB4ZjAsIDB4NjcsIDB4YmIsIDB4ZmMsIDB4ZDgsIDB4ODgsIDB4N2UsIDB4YjMsIDB4NmQsCisJMHgxNCwgMHhkYywgMHgzZCwgMHhlNiwgMHg5MCwgMHg2YSwgMHg2MywgMHg4ZSwgMHhmNywgMHgzNiwgMHhmOSwgMHg5YywKKwkweGJhLCAweDI3LCAweDcwLCAweDVlLCAweGU3LCAweGQyLCAweGE2LCAweDU0LCAweDRjLCAweGMwLCAweGVmLCAweDFjLAorCTB4ODUsIDB4ZDQsIDB4NDYsIDB4ZWQsIDB4MDMsIDB4NWUsIDB4MGYsIDB4NjcsIDB4OTcsIDB4YzYsIDB4Y2YsIDB4YTYsCisJMHg3OSwgMHgwNCwgMHg2MywgMHgxOSwgMHgzZiwgMHg3ZiwgMHgyMSwgMHg0YSwgMHg0YywgMHhjZCwgMHg5NiwgMHg1NywKKwkweDFkLCAweDhmLCAweDcxLCAweDFjLCAweGNmLCAweDNlLCAweDJhLCAweDU2LCAweDQ2LCAweGJmLCAweDM5LCAweDNkLAorCTB4ZGUsIDB4OGIsIDB4OTUsIDB4YjMsIDB4ZTUsIDB4YWQsIDB4NTEsIDB4MGYsIDB4MTcsIDB4NTcsIDB4OGIsIDB4NjMsCisJMHg4ZSwgMHg0NCwgMHg5OSwgMHg4YiwgMHg5YywgMHg3MywgMHhhZiwgMHg0NywgMHhlYiwgMHhmMiwgMHhkOCwgMHgzYywKKwkweGI0LCAweDJjLCAweDM2LCAweGI3LCAweDc0LCAweGVjLCAweDdkLCAweGJmLCAweDhhLCAweGNkLCAweDNkLCAweDFlLAorCTB4NzMsIDB4MmYsIDB4YzEsIDB4ZDgsIDB4Y2EsIDB4MDEsIDB4MzYsIDB4ZjIsIDB4NWIsIDB4MTAsIDB4YjEsIDB4ODIsCisJMHgzZSwgMHgwYiwgMHhlNCwgMHg2NywgMHhmYywgMHgzNywgMHg5NCwgMHgxZiwgMHhiMywgMHg1YywgMHg3ZSwgMHgzZSwKKwkweDZlLCAweGJiLCAweGUxLCAweGVmLCAweGZkLCAweGIyLCAweDc4LCAweGY5LCAweGM1LCAweDNkLCAweGEwLCAweDg1LAorCTB4ZjEsIDB4NTYsIDB4NTgsIDB4Y2IsIDB4YzMsIDB4Y2YsIDB4NjksIDB4ZmMsIDB4ZjYsIDB4ZmIsIDB4ZjksIDB4YjksCisJMHg4NiwgMHg4NSwgMHg2ZiwgMHhjOSwgMHhjNSwgMHhjYywgMHg5MiwgMHgxYywgMHhjZiwgMHgxNiwgMHhhNiwgMHhjZSwKKwkweDcxLCAweGVlLCAweDk5LCAweDFiLCAweGY4LCAweGRlLCAweGYyLCAweDYxLCAweGVlLCAweDdjLCAweDU0LCAweGRiLAorCTB4YjksIDB4NTcsIDB4MjEsIDB4ZmIsIDB4MDksIDB4N2QsIDB4ZmYsIDB4YWYsIDB4MGIsIDB4M2EsIDB4YzAsIDB4M2IsCisJMHhkMCwgMHhkNSwgMHg1OCwgMHhhYiwgMHhlZSwgMHhmOSwgMHg0NSwgMHgzNiwgMHhhNSwgMHhmOSwgMHhlZCwgMHg4MiwKKwkweDNlLCAweGMxLCAweDRmLCAweGY0LCAweDVlLCAweGUzLCAweDcyLCAweDZjLCAweGMyLCAweGNiLCAweGQzLCAweDlhLAorCTB4YWIsIDB4ZGUsIDB4ZjEsIDB4YmIsIDB4MDQsIDB4NWUsIDB4MjQsIDB4OGYsIDB4ZmEsIDB4NzksIDB4NWEsIDB4ZDMsCisJMHhiYiwgMHhlMywgMHg3NywgMHhmNCwgMHhhMywgMHhiYiwgMHhlMywgMHhjNywgMHhmOSwgMHgyZCwgMHhkOSwgMHhiYiwKKwkweGMyLCAweDFkLCAweGJmLCAweGQwLCAweDFhLCAweGVmLCAweGY4LCAweDZkLCAweDU0LCAweDc5LCAweDVhLCAweGNlLAorCTB4ZTMsIDB4ZTUsIDB4NjksIDB4NTksIDB4NmUsIDB4ZWIsIDB4ZmUsIDB4OTQsIDB4YzIsIDB4YTgsIDB4ZTksIDB4MDksCisJMHhlNiwgMHg3NSwgMHgxZSwgMHg1YywgMHhmNywgMHhjOSwgMHhlNCwgMHg3NSwgMHhkZSwgMHg4YiwgMHg3ZSwgMHhmYywKKwkweDc5LCAweDFkLCAweDdlLCAweDE3LCAweGY4LCAweGIyLCAweGY3LCAweGRkLCAweDVhLCAweDZlLCAweDI0LCAweDNmLAorCTB4ZjAsIDB4ZTEsIDB4NzIsIDB4YjAsIDB4MDcsIDB4NTUsIDB4MGUsIDB4NzYsIDB4ZmIsIDB4ZmEsIDB4NjAsIDB4MGUsCisJMHhkNiwgMHhiYywgMHhjZSwgMHgzZCwgMHhiOCwgMHg4MywgMHgyYiwgMHhlNCwgMHg2MCwgMHhjMywgMHg4MSwgMHg3YiwKKwkweDcwLCAweDYxLCAweDdkLCAweDBmLCAweDZlLCAweGEzLCAweDgzLCAweDE4LCAweDUzLCAweGU3LCAweDViLCAweGNkLAorCTB4NTUsIDB4ZWYsIDB4YzEsIDB4ZWQsIDB4NWUsIDB4ZmYsIDB4ZTEsIDB4ZjMsIDB4YWQsIDB4Y2IsIDB4ZWUsIDB4YzEsCisJMHgxZCwgMHhjZCwgMHg0OCwgMHg4YiwgMHgyNCwgMHg2ZSwgMHgyOCwgMHgxNiwgMHhmYSwgMHgzMCwgMHg3MSwgMHgxMCwKKwkweGZmLCAweDhmLCAweDQwLCAweDBkLCAweGY2LCAweDBjLCAweDk5LCAweDhmLCAweDUxLCAweDNlLCAweDI5LCAweDc3LAorCTB4NjksIDB4MzMsIDB4NWYsIDB4ZTYsIDB4N2IsIDB4MTcsIDB4Y2YsIDB4YzcsIDB4ZTgsIDB4ZWYsIDB4NWMsIDB4N2EsCisJMHhiNywgMHg2MiwgMHhmMSwgMHg2ZSwgMHg3MiwgMHg2NCwgMHhlMSwgMHg2ZSwgMHhmMiwgMHgxOCwgMHg2NCwgMHhjNiwKKwkweDljLCAweDg4LCAweGM4LCAweDc0LCAweGMwLCAweGI2LCAweDhlLCAweGJhLCAweGYwLCAweDliLCAweDI2LCAweDZkLAorCTB4ZGQsIDB4Y2UsIDB4ZmYsIDB4YTcsIDB4ODIsIDB4YjgsIDB4YjAsIDB4YzQsIDB4ZmIsIDB4Y2MsIDB4MGQsIDB4MTIsCisJMHg5YSwgMHg1NCwgMHg5OCwgMHgxYSwgMHhmMywgMHhmZSwgMHhhZiwgMHg0ZSwgMHgxYywgMHg3ZCwgMHg3OCwgMHg3NywKKwkweDM1LCAweDJjLCAweDg3LCAweDYyLCAweDk0LCAweDY1LCAweDVmLCAweDhlLCAweGJmLCAweDA1LCAweGZlLCAweDM2LAorCTB4NjUsIDB4MTYsIDB4Y2IsIDB4MzEsIDB4MmQsIDB4ZDcsIDB4OTQsIDB4NjksIDB4NWYsIDB4ZmUsIDB4NjIsIDB4MzIsCisJMHgzMiwgMHg0MSwgMHg1OSwgMHhkZSwgMHhhMSwgMHhmZiwgMHg5ZiwgMHhjNCwgMHgzOSwgMHgyOSwgMHg5NCwgMHhjZiwKKwkweGVhLCAweDc4LCAweDQzLCAweDdkLCAweDhiLCAweDAyLCAweDFmLCAweDViLCAweGI0LCAweDBkLCAweGM2LCAweDczLAorCTB4YTYsIDB4ODUsIDB4MzYsIDB4OGYsIDB4ZGYsIDB4MWUsIDB4YTUsIDB4NmYsIDB4N2MsIDB4NWIsIDB4N2MsIDB4MDgsCisJMHg3OCwgMHgzNywgMHhhOCwgMHg3MiwgMHgyNywgMHgzNywgMHhjMiwgMHg2ZiwgMHhlMywgMHgxYSwgMHhkZiwgMHg0OCwKKwkweGQ3LCAweGNhLCAweDczLCAweGRmLCAweDVmLCAweGJlLCAweDhjLCAweGZkLCAweGI1LCAweDQwLCAweDM2LCAweGJlLAorCTB4MmEsIDB4YjksIDB4OTMsIDB4YjcsIDB4NDksIDB4ZGYsIDB4ODksIDB4MjQsIDB4ZTgsIDB4NzksIDB4YmYsIDB4NTIsCisJMHg0OCwgMHhjMSwgMHhiNywgMHg3ZSwgMHg5NiwgMHg3NywgMHhlMSwgMHg4MCwgMHhhMSwgMHgyZSwgMHgzMCwgMHgxNCwKKwkweGJjLCAweDdiLCAweDYxLCAweDk5LCAweGJmLCAweDExLCAweGJjLCAweDQzLCAweDk3LCAweDVhLCAweGI4LCAweDEzLAorCTB4ZjUsIDB4N2MsIDB4NTksIDB4MjIsIDB4OGQsIDB4YTQsIDB4N2IsIDB4NjIsIDB4ZjEsIDB4MmUsIDB4ZmMsIDB4NWMsCisJMHgzOSwgMHhhNywgMHhlYywgMHhkYiwgMHg3MywgMHhlNSwgMHgyNSwgMHgzOSwgMHgyMSwgMHg3NSwgMHg4ZSwgMHhjMywKKwkweGE1LCAweDk3LCAweDYxLCAweGUzLCAweDJlLCAweDFiLCAweGI0LCAweDcxLCAweDYzLCAweGFlLCAweGRjLCAweDEyLAorCTB4MTIsIDB4OWUsIDB4ODksIDB4MTgsIDB4ZTAsIDB4ODMsIDB4YmEsIDB4OWIsIDB4ZTIsIDB4ZGQsIDB4NGQsIDB4NjgsCisJMHg1NSwgMHg2NywgMHhmYiwgMHg3ZiwgMHhkNCwgMHg1ZCwgMHg3ZCwgMHg2YywgMHg1YiwgMHhkNywgMHg3NSwgMHgzZiwKKwkweDdjLCAweGE0LCAweDNlLCAweDRjLCAweGNiLCAweGQyLCAweDkzLCAweDRjLCAweGM5LCAweGI0LCAweDJkLCAweGNiLAorCTB4OGYsIDB4ZDIsIDB4OTMsIDB4YTUsIDB4YzQsIDB4NGEsIDB4YzEsIDB4NzksIDB4ZGEsIDB4YWEsIDB4MDEsIDB4NWEsCisJMHhjNywgMHg1MiwgMHhmNCwgMHhjNywgMHg4MiwgMHg2MCwgMHhhNSwgMHg2NSwgMHgyNSwgMHhmMywgMHhkMiwgMHgyYywKKwkweDUxLCAweDI5LCAweGRiLCAweGM5LCAweGZlLCAweDE4LCAweGUwLCAweDI1LCAweGQ5LCAweDlhLCAweGZkLCAweDUxLAorCTB4ZTQsIDB4OTUsIDB4OTQsIDB4MTIsIDB4NjMsIDB4NTYsIDB4NGQsIDB4YzYsIDB4ZTYsIDB4ODQsIDB4MDIsIDB4MGIsCisJMHgzNiwgMHg1NiwgMHg5MiwgMHg5ZCwgMHgxNCwgMHg1MCwgMHhjMCwgMHgyNCwgMHg2ZCwgMHg4NywgMHgyYywgMHg2ZCwKKwkweDExLCAweDU1LCAweDc2LCAweGRhLCAweDdmLCAweDhkLCAweDJkLCAweGMwLCAweGIyLCAweDJlLCAweDY5LCAweDE0LAorCTB4M2IsIDB4YzgsIDB4MDIsIDB4MmMsIDB4NTgsIDB4YmIsIDB4NmUsIDB4MjgsIDB4ZjYsIDB4NGYsIDB4YzcsIDB4OWQsCisJMHhkZiwgMHhmZCwgMHgyMCwgMHgxZiwgMHhjOSwgMHg0NywgMHg3ZCwgMHgyNCwgMHg2ZSwgMHg4MSwgMHgwOSwgMHgxMCwKKwkweGM4LCAweGY3LCAweGRlLCAweDdkLCAweGVmLCAweGRkLCAweDdiLCAweGVlLCAweGY5LCAweGY4LCAweDlkLCAweDczLAorCTB4Y2YsIDB4YjksIDB4OTQsIDB4YmEsIDB4ZTIsIDB4MzUsIDB4NTcsIDB4NmUsIDB4NDksIDB4NjUsIDB4N2UsIDB4NjUsCisJMHhjZSwgMHg4OSwgMHg5YywgMHgwZiwgMHg5NSwgMHg0MywgMHgwYiwgMHg5YSwgMHgzYSwgMHgyNywgMHg2ZCwgMHg5OSwKKwkweDE3LCAweDMzLCAweGIwLCAweDgwLCAweDczLCAweDNkLCAweDM1LCAweGY2LCAweGFmLCAweDk1LCAweGY5LCAweGMwLAorCTB4MTQsIDB4MzEsIDB4ODUsIDB4NjksIDB4MTMsIDB4N2QsIDB4ZGUsIDB4MmIsIDB4ZjQsIDB4ODEsIDB4ZjcsIDB4YmEsCisJMHg3YywgMHg0MCwgMHhlOSwgMHhiYywgMHg1NiwgMHhhNSwgMHhhMywgMHgzNiwgMHhjMiwgMHg2ZiwgMHhmMiwgMHg5ZCwKKwkweGZkLCAweGUyLCAweDlkLCAweGRkLCAweDRhLCAweDY3LCAweGU5LCAweGRjLCAweGY3LCAweDcxLCAweDYzLCAweGJhLAorCTB4MDgsIDB4NWYsIDB4OWIsIDB4ZTksIDB4NTIsIDB4ODcsIDB4ZGYsIDB4YWMsIDB4NGQsIDB4ZTgsIDB4ZjgsIDB4YjksCisJMHgzYSwgMHgzYSwgMHg1NiwgMHhjYiwgMHgwMywgMHhmYiwgMHhlNiwgMHg2NSwgMHg5ZCwgMHgyZCwgMHg2OSwgMHgyNiwKKwkweGNmLCAweDIzLCAweDlmLCAweDVmLCAweGU3LCAweDY1LCAweDQ4LCAweDlhLCAweDk1LCAweGU1LCAweGU3LCAweDkyLAorCTB4M2IsIDB4MjcsIDB4YTMsIDB4NDIsIDB4YjMsIDB4ZTksIDB4MzIsIDB4Y2QsIDB4ZjYsIDB4ZmMsIDB4M2YsIDB4YTAsCisJMHhkOSwgMHg0ZCwgMHg4MSwgMHg3OSwgMHg1ZiwgMHgyOSwgMHgyMiwgMHhmZiwgMHg2ZSwgMHg1OCwgMHhlNCwgMHgyZSwKKwkweGFjLCAweGQyLCAweDg4LCAweGIyLCAweGZmLCAweGVlLCAweDFhLCAweDI4LCAweGQwLCAweDEyLCAweGJhLCAweDM0LAorCTB4NTIsIDB4NTgsIDB4YTcsIDB4OTgsIDB4OGMsIDB4NDMsIDB4OTgsIDB4YTUsIDB4ZDIsIDB4NzcsIDB4YTIsIDB4OTAsCisJMHgzZiwgMHhmOCwgMHgyNCwgMHhmMCwgMHg1MSwgMHgxMCwgMHhkZiwgMHgzYiwgMHhjOSwgMHg2MywgMHhmYiwgMHg5NywKKwkweDYwLCAweGQ3LCAweDA2LCAweDM2LCAweGYyLCAweGU0LCAweDM2LCAweDdjLCAweDk0LCAweDhhLCAweDhkLCAweDA0LAorCTB4NWUsIDB4MjIsIDB4MjcsIDB4NmUsIDB4NTcsIDB4ZjIsIDB4NWUsIDB4NjYsIDB4YjMsIDB4M2YsIDB4NmMsIDB4NjcsCisJMHgzZiwgMHg5MiwgMHg2OSwgMHg1YywgMHg3OSwgMHhlZSwgMHhkNiwgMHg3YywgMHgxNCwgMHgzYywgMHg0ZiwgMHhkYSwKKwkweGM5LCAweGQ5LCAweDZjLCAweGU1LCAweGI5LCAweDRlLCAweGY5LCAweGI5LCAweDYxLCAweDBmLCAweDVkLCAweDY1LAorCTB4ZDEsIDB4Y2MsIDB4YTUsIDB4N2QsIDB4NzUsIDB4ZjksIDB4NmEsIDB4OTUsIDB4ZjEsIDB4NDgsIDB4NWYsIDB4NDUsCisJMHg4ZiwgMHhlNywgMHhjOSwgMHg0ZCwgMHhmMSwgMHhhNSwgMHhjYywgMHgzYiwgMHhhYiwgMHhlNCwgMHhmMCwgMHhkNCwKKwkweGZhLCAweDI5LCAweGZiLCAweDVkLCAweGYxLCAweDE5LCAweGQwLCAweGY4LCAweDBmLCAweDY5LCAweDc1LCAweDEyLAorCTB4N2EsIDB4YWUsIDB4OTYsIDB4ZDYsIDB4ZWYsIDB4ZmYsIDB4OWEsIDB4NjgsIDB4MWQsIDB4ZTksIDB4ZjgsIDB4ZjUsCisJMHhkMiwgMHg3YSwgMHg3ZiwgMHg1ZCwgMHgyYywgMHhiYywgMHgzMiwgMHgxZSwgMHgwYSwgMHg3NSwgMHg2ZiwgMHgwYiwKKwkweGNiLCAweGQ3LCAweGQyLCAweDdhLCAweDdmLCAweGMzLCAweDc4LCAweDZhLCAweGUzLCAweDVjLCAweGNjLCAweGVhLAorCTB4NzgsIDB4NmEsIDB4YmYsIDB4YzEsIDB4MzIsIDB4OTIsIDB4NjUsIDB4NzksIDB4NjksIDB4YTgsIDB4ZTMsIDB4ZmYsCisJMHhjZSwgMHgxNSwgMHg2ZiwgMHg3NSwgMHhlYiwgMHg3OSwgMHhjOCwgMHgxYSwgMHhmOSwgMHg0ZSwgMHgwZSwgMHhlOSwKKwkweDc3LCAweDQyLCAweGFlLCAweDIyLCAweDhlLCAweDQzLCAweGYwLCAweDlmLCAweGYwLCAweDVlLCAweGU0LCAweDYyLAorCTB4ZDUsIDB4ZTEsIDB4MmUsIDB4N2UsIDB4MmYsIDB4Y2IsIDB4ZmYsIDB4MGIsIDB4Y2YsIDB4MGIsIDB4OWIsIDB4MjUsCisJMHg2MywgMHgxMiwgMHg2OCwgMHgxZiwgMHhmMiwgMHg5ZCwgMHgxMSwgMHg2ZCwgMHg2NSwgMHg4ZSwgMHg5NiwgMHg4YSwKKwkweDUxLCAweDI4LCAweDNmLCAweGEwLCAweDUxLCAweDZjLCAweGEyLCAweGRlLCAweGZlLCAweDZkLCAweGNmLCAweDZmLAorCTB4ZDAsIDB4ZjEsIDB4ODgsIDB4ODMsIDB4M2MsIDB4M2YsIDB4ZTEsIDB4MmEsIDB4YmYsIDB4MGIsIDB4ZmEsIDB4ZjQsCisJMHgzYywgMHg2MywgMHg4NCwgMHhmZSwgMHgzMiwgMHgzZSwgMHhhOCwgMHg5ZSwgMHhhMywgMHg1OSwgMHhlMSwgMHhkZiwKKwkweDY5LCAweDVkLCAweGJhLCAweDJhLCAweDczLCAweDZiLCAweGM1LCAweDc5LCAweGUwLCAweGI1LCAweGIyLCAweDJlLAorCTB4YWQsIDB4YzEsIDB4YzMsIDB4MDcsIDB4M2QsIDB4ZjgsIDB4YzMsIDB4YjMsIDB4OWUsIDB4NTUsIDB4Y2YsIDB4YTEsCisJMHg4NSwgMHg5YywgMHhmYSwgMHg4NCwgMHhlNywgMHgxYywgMHg5NiwgMHhlYiwgMHhkMiwgMHg5YywgMHg0YSwgMHg1YiwKKwkweDc5LCAweDdmLCAweDQyLCAweDhjLCAweDZiLCAweGVhLCAweGRlLCAweDM4LCAweGVhLCAweGVmLCAweGNhLCAweDM1LAorCTB4NTEsIDB4YjUsIDB4NzUsIDB4NjAsIDB4YjAsIDB4MGIsIDB4NWEsIDB4MWUsIDB4NzUsIDB4Y2QsIDB4MzksIDB4NjgsCisJMHhkMSwgMHhlNywgMHg1MSwgMHgwNywgMHhlNiwgMHhiNiwgMHgyZCwgMHhiOCwgMHhhZiwgMHg5NiwgMHgxNiwgMHgxNSwKKwkweGJiLCAweDMyLCAweGE3LCAweGVjLCAweGNhLCAweGEyLCAweDRiLCAweGFmLCAweGQ3LCAweGUzLCAweGY3LCAweDJlLAorCTB4MGYsIDB4ZmMsIDB4ZWUsIDB4NTUsIDB4MGIsIDB4ODYsIDB4M2UsIDB4M2QsIDB4YzUsIDB4OTgsIDB4ZTQsIDB4MzMsCisJMHhjMCwgMHgyNCwgMHgyNiwgMHg2YSwgMHhiMSwgMHgyNCwgMHgyZSwgMHhjMSwgMHhmNSwgMHgxYywgMHg2MywgMHg5MywKKwkweDMwLCAweGYzLCAweGNhLCAweDZiLCAweDc0LCAweDhlLCAweDMxLCAweGY3LCAweDM1LCAweGJhLCAweDRiLCAweGY5LAorCTB4NjksIDB4OTAsIDB4NWYsIDB4OWQsIDB4NDcsIDB4OGIsIDB4NWEsIDB4MDYsIDB4MWYsIDB4MzksIDB4MGYsIDB4NDUsCisJMHg4NiwgMHg2MywgMHhmNCwgMHgxYSwgMHg5ZCwgMHgxNSwgMHhmOSwgMHgzZSwgMHg1OCwgMHhmZiwgMHg0MywgMHg5ZSwKKwkweGM0LCAweGRkLCAweGUyLCAweGZkLCAweDMyLCAweGFlLCAweDcxLCAweDI3LCAweGYyLCAweDAyLCAweGI3LCAweDVlLAorCTB4OWYsIDB4YTAsIDB4ZWEsIDB4MDUsIDB4YjksIDB4MWQsIDB4ZGUsIDB4YjksIDB4YWMsIDB4NjQsIDB4NGEsIDB4OWMsCisJMHhlMywgMHhmYiwgMHg5ZiwgMHgzMiwgMHhlYSwgMHhlZiwgMHg4ZiwgMHgxOSwgMHg4OSwgMHg2MiwgMHhjMiwgMHg4OCwKKwkweDJmLCAweGExLCAweGRkLCAweDUzLCAweGM2LCAweDQ0LCAweDExLCAweGJlLCAweGE0LCAweGU2LCAweDkxLCAweDQ4LAorCTB4MTQsIDB4ZjIsIDB4YjYsIDB4NDYsIDB4OWIsIDB4YWYsIDB4NTMsIDB4MmMsIDB4NTIsIDB4NGQsIDB4YWQsIDB4YzgsCisJMHgxNiwgMHhmYSwgMHg3ZCwgMHhhYywgMHhhYSwgMHhkZiwgMHg5YSwgMHhiZSwgMHhmOCwgMHg4ZSwgMHhkOCwgMHhjZiwKKwkweGNiLCAweDRjLCAweDUzLCAweDhkLCAweDcxLCAweDgzLCAweDg4LCAweGJkLCAweDBmLCAweDNiLCAweGI0LCAweDExLAorCTB4YzYsIDB4OGQsIDB4ZDQsIDB4NjEsIDB4ZGMsIDB4YzUsIDB4NGQsIDB4ZmIsIDB4ZmQsIDB4NjksIDB4NjUsIDB4NWMsCisJMHhkNiwgMHg3YywgMHhmYiwgMHg2ZCwgMHg4MSwgMHg2NSwgMHhiOSwgMHhkZiwgMHg1NSwgMHgzOCwgMHhiNywgMHg4NiwKKwkweGE3LCAweGQwLCAweDQ2LCAweGM3LCAweGM4LCAweDc1LCAweDRjLCAweGFjLCAweDVkLCAweGM1LCAweDc0LCAweDc1LAorCTB4M2UsIDB4NDUsIDB4NTAsIDB4YzUsIDB4YjQsIDB4NzEsIDB4MWQsIDB4YmUsIDB4ZDYsIDB4MmEsIDB4ZjcsIDB4MGYsCisJMHg3ZSwgMHgxNywgMHhlMiwgMHgzZiwgMHg2ZSwgMHhiZiwgMHhjYiwgMHgxZCwgMHhmMywgMHhmNSwgMHhhYSwgMHgwZCwKKwkweGVkLCAweGY3LCAweGE4LCAweDBkLCAweDc1LCAweGNiLCAweDU5LCAweGMwLCAweDI1LCAweDY3LCAweDYxLCAweDE3LAorCTB4ODYsIDB4ZWIsIDB4NjUsIDB4ZmYsIDB4YTUsIDB4OGQsIDB4ZjUsIDB4MDcsIDB4ZmMsIDB4OTcsIDB4MjAsIDB4ZjksCisJMHgyZiwgMHhiYiwgMHhmZCwgMHg5NywgMHhkYSwgMHgzYSwgMHg3ZiwgMHhjOCwgMHgxYywgMHg3MCwgMHg5YSwgMHhmNCwKKwkweDY1LCAweDEyLCAweGY5LCAweGYyLCAweDFlLCAweDAxLCAweDNjLCAweGU2LCAweDRhLCAweDFkLCAweGU2LCAweDUyLAorCTB4NWQsIDB4Y2QsIDB4YTgsIDB4NTcsIDB4N2YsIDB4ZmIsIDB4ZWEsIDB4ZmEsIDB4MGIsIDB4MWIsIDB4MTYsIDB4NmIsCisJMHg4OCwgMHhlZiwgMHhiYywgMHhmYywgMHhhYiwgMHgzYiwgMHhkNSwgMHhiZiwgMHg1YSwgMHg1ZCwgMHg4NiwgMHg3NywKKwkweGY1LCAweDhiLCAweDE4LCAweGI4LCAweDUzLCAweGQ2LCAweDYzLCAweDYzLCAweGIyLCAweGJmLCAweGQ5LCAweDZhLAorCTB4NWYsIDB4YzMsIDB4N2YsIDB4ODksIDB4MTQsIDB4ZWQsIDB4YmMsIDB4ZjUsIDB4ZmEsIDB4ZjYsIDB4ZTIsIDB4NjgsCisJMHgzYiwgMHg2YiwgMHg2YywgMHhlZiwgMHg3OCwgMHhhNywgMHg4YywgMHg4ZiwgMHhjZCwgMHhhOSwgMHgzYywgMHhmMiwKKwkweDZlLCAweGU1LCAweGY3LCAweDZkLCAweGM2LCAweGViLCAweDM4LCAweDM3LCAweGE3LCAweDYyLCAweDhhLCAweDExLAorCTB4YWIsIDB4NDAsIDB4ZTAsIDB4ZjEsIDB4YzksIDB4ZDMsIDB4NGQsIDB4YjYsIDB4YTksIDB4ZDYsIDB4YjgsIDB4YjAsCisJMHg4ZSwgMHgwNSwgMHg5ZSwgMHhkNywgMHhjZiwgMHg5NywgMHgzNSwgMHg2NSwgMHg5YiwgMHhjZiwgMHg5OSwgMHg1NSwKKwkweDM3LCAweDY3LCAweDkyLCAweGFmLCAweGUwLCAweDZmLCAweDIxLCAweDNmLCAweDdhLCAweGE0LCAweDI2LCAweDQ3LAorCTB4ZmQsIDB4ZDMsIDB4ZDAsIDB4YTIsIDB4ZGQsIDB4MjMsIDB4NmYsIDB4MWIsIDB4NzksIDB4ZDcsIDB4OGQsIDB4ZmEsCisJMHhiOSwgMHhlZSwgMHhjMiwgMHhlYSwgMHhiMiwgMHg2ZSwgMHg2MywgMHg5NSwgMHhkMCwgMHhlZiwgMHg1MiwgMHhlOSwKKwkweGU1LCAweDI4LCAweGIwLCAweDY5LCAweDZmLCAweDFkLCAweGFmLCAweDY5LCAweGJjLCAweDY0LCAweGJhLCAweGZhLAorCTB4ZjksIDB4ZjgsIDB4YzYsIDB4ZmQsIDB4YWMsIDB4YjEsIDB4YmYsIDB4N2IsIDB4M2QsIDB4ZWMsIDB4NmYsIDB4MjMsCisJMHg1ZiwgMHg0MiwgMHhlYywgMHg5ZCwgMHhlMiwgMHgzYiwgMHgyYSwgMHg3NCwgMHg0MSwgMHgxYiwgMHgyZCwgMHhlNSwKKwkweDkxLCAweDRiLCAweGZlLCAweDFiLCAweGE4LCAweDY3LCAweDY1LCAweDdkLCAweGViLCAweGFhLCAweGNmLCAweGYzLAorCTB4OWUsIDB4ZDMsIDB4ZjIsIDB4N2EsIDB4NGIsIDB4NjAsIDB4MWMsIDB4ZWIsIDB4ODMsIDB4YzgsIDB4NDEsIDB4ZTksCisJMHg2MiwgMHgxZCwgMHg4NCwgMHhmNiwgMHg4MywgMHhkNiwgMHgwZCwgMHhjNCwgMHg4MCwgMHg1NSwgMHgzYywgMHgyYSwKKwkweGExLCAweGVjLCAweGNjLCAweGQxLCAweDJkLCAweGFjLCAweGJiLCAweDZjLCAweDRmLCAweDVmLCAweDQ3LCAweGFjLAorCTB4NTUsIDB4YzIsIDB4OWEsIDB4MTAsIDB4ZjIsIDB4OWUsIDB4OWQsIDB4NzYsIDB4NmEsIDB4YmYsIDB4YmYsIDB4YTUsCisJMHhjNSwgMHhiZSwgMHhkOSwgMHgyOSwgMHhkNywgMHhhYSwgMHg3MCwgMHhhZCwgMHg4ZCwgMHhhZSwgMHhlNiwgMHg5MSwKKwkweDk3LCAweDhlLCAweDZiLCAweDBmLCAweGYyLCAweDM1LCAweDJmLCAweDdkLCAweGY1LCAweGI2LCAweGUyLCAweDI1LAorCTB4NjAsIDB4M2EsIDB4MzksIDB4NDcsIDB4MDUsIDB4OTIsIDB4NzMsIDB4YjYsIDB4NGUsIDB4ZjAsIDB4YTUsIDB4NGEsCisJMHhmNCwgMHg0ZiwgMHhkMSwgMHhkZiwgMHgxNCwgMHhmZSwgMHg1ZiwgMHg2NSwgMHhhZSwgMHhiNiwgMHhiNywgMHg4ZSwKKwkweDUzLCAweDliLCAweDAzLCAweDMxLCAweGI5LCAweDYxLCAweDFjLCAweGIxLCAweGEzLCAweDZiLCAweGFiLCAweGViLAorCTB4MzgsIDB4YjUsIDB4MzksIDB4MTAsIDB4OGYsIDB4NmYsIDB4MjksIDB4OGUsIDB4MTgsIDB4YjEsIDB4YTYsIDB4MzcsCisJMHhhYywgMHgzMywgMHg3MCwgMHhhZiwgMHhhOSwgMHhlOCwgMHhiNSwgMHhlNCwgMHg1MSwgMHg1MSwgMHg3YiwgMHhlYiwKKwkweGU2LCAweDg5LCAweDNiLCAweGIzLCAweDllLCAweDBjLCAweGRlLCAweGU4LCAweGFiLCAweGQzLCAweDYxLCAweDc3LAorCTB4NjAsIDB4M2QsIDB4YTAsIDB4ODYsIDB4YjYsIDB4NDEsIDB4Y2YsIDB4NTgsIDB4OTYsIDB4ZjcsIDB4YmEsIDB4MzEsCisJMHg3MiwgMHgwNCwgMHgxMCwgMHhjMywgMHgyZSwgMHhkMiwgMHg5OSwgMHgyYiwgMHhlMCwgMHg2NywgMHg4MywgMHgzOSwKKwkweDZmLCAweDgwLCAweDMyLCAweDIxLCAweGQ0LCAweDUyLCAweDg5LCAweGJhLCAweDI4LCAweGJkLCAweGJlLCAweDI4LAorCTB4ZWEsIDB4YTMsIDB4Y2UsIDB4ODgsIDB4YmEsIDB4Y2YsIDB4YzEsIDB4ZjAsIDB4NmQsIDB4YjYsIDB4OTEsIDB4NjcsCisJMHg4YSwgMHg2ZiwgMHhkMSwgMHhkOSwgMHhhNSwgMHgyMCwgMHhmZiwgMHg1NywgMHhmMCwgMHg3YywgMHg3ZCwgMHhlZCwKKwkweDY3LCAweDM1LCAweGJmLCAweGRmLCAweDE2LCAweGZjLCAweGRlLCAweGJiLCAweDIxLCAweGJmLCAweDFmLCAweDJmLAorCTB4ZjMsIDB4M2IsIDB4NzcsIDB4MjgsIDB4MjgsIDB4NmIsIDB4MmIsIDB4NTMsIDB4NTcsIDB4ZGEsIDB4ZTksIDB4YTgsCisJMHg3OCwgMHhlZSwgMHg1YiwgMHhmYywgMHg3ZCwgMHgyNywgMHgxZCwgMHgzNSwgMHhlNSwgMHhmNywgMHhiMywgMHg0YiwKKwkweGFjLCAweGZiLCAweGIzLCAweDZmLCAweGQxLCAweGI5LCAweDJiLCAweDhlLCAweDJmLCAweDIxLCAweGVhLCAweDMyLAorCTB4ZGMsIDB4N2IsIDB4ODYsIDB4ZTgsIDB4ZmIsIDB4ZDEsIDB4Y2UsIDB4NGIsIDB4MTYsIDB4ZWEsIDB4ZjUsIDB4NTUsCisJMHg0MSwgMHhlYSwgMHgyYiwgMHhiYSwgMHgyOSwgMHg2MiwgMHgyMCwgMHhkZSwgMHhmYSwgMHgwYSwgMHhmYywgMHg3OSwKKwkweDVlLCAweGQ5LCAweGM2LCAweGM5LCAweDBkLCAweDYyLCAweDFmLCAweGY1LCAweGJjLCAweGQ5LCAweGU5LCAweDgxLAorCTB4OTEsIDB4YmYsIDB4ZGIsIDB4MjUsIDB4ZDcsIDB4YjEsIDB4MzYsIDB4OGEsIDB4ODEsIDB4NTQsIDB4ZTUsIDB4ODEsCisJMHhiOCwgMHhkNywgMHhmOSwgMHhkOSwgMHgxZSwgMHg0YywgMHhhYSwgMHg3NSwgMHhmNywgMHg5ZiwgMHg3NiwgMHg0OSwKKwkweDNiLCAweDgyLCAweDlhLCAweGM4LCAweDU1LCAweGE2LCAweGMzLCAweDNmLCAweDMwLCAweDdlLCAweGQ5LCAweDRmLAorCTB4Y2QsIDB4OTcsIDB4ZjUsIDB4NTgsIDB4ZjcsIDB4MGIsIDB4N2YsIDB4YzgsIDB4MWQsIDB4Y2IsIDB4OTksIDB4NTUsCisJMHgzNSwgMHhlZSwgMHg2OSwgMHhkNywgMHg5OCwgMHg2NiwgMHg4NSwgMHhkZiwgMHhmMywgMHg0OSwgMHhkNiwgMHgzMSwKKwkweDdiLCAweDZiLCAweDZjLCAweDQ1LCAweDJkLCAweGJmLCAweDYxLCAweDNmLCAweDE2LCAweGNjLCAweDJmLCAweDE5LAorCTB4MTIsIDB4MWIsIDB4OGYsIDB4MzEsIDB4ZTYsIDB4ZGQsIDB4ZWUsIDB4N2EsIDB4ZDIsIDB4YTcsIDB4YzUsIDB4OGQsCisJMHhiNSwgMHg3YiwgMHg3ZCwgMHhkNCwgMHg3ZSwgMHhjNywgMHgzYywgMHg0OCwgMHgzZiwgMHgyNCwgMHhmNSwgMHg0MiwKKwkweDUxLCAweGU4LCAweDgyLCAweGQ5LCAweDkxLCAweDEyLCAweDRkLCAweDQ0LCAweDc3LCAweDUxLCAweDZhLCAweDg0LAorCTB4ZGYsIDB4M2QsIDB4NjYsIDB4YjMsIDB4M2YsIDB4ZTYsIDB4MjcsIDB4ODcsIDB4ZTUsIDB4MzcsIDB4MzUsIDB4YjIsCisJMHg0MywgMHhkNSwgMHhjYywgMHhlOSwgMHg1OCwgMHg3YiwgMHg4YiwgMHhjMiwgMHg5MCwgMHhlZCwgMHg2MiwgMHhkZCwKKwkweDUyLCAweGVlLCAweDQ5LCAweGM0LCAweGRmLCAweDk3LCAweGY0LCAweGIzLCAweDcxLCAweDFlLCAweGJjLCAweGRiLAorCTB4YWMsIDB4ZGEsIDB4NWQsIDB4NzQsIDB4YjUsIDB4NDMsIDB4OWIsIDB4OGIsIDB4YWEsIDB4MmQsIDB4OWUsIDB4YTksCisJMHhiMSwgMHg4NiwgMHhhZSwgMHhkMywgMHg4MiwgMHgxYywgMHhhZSwgMHhhYSwgMHhmYSwgMHg0NCwgMHhmOSwgMHhiYywKKwkweDk5LCAweGUyLCAweDQ1LCAweDZlLCAweGQzLCAweGE1LCAweGFlLCAweDVmLCAweDY0LCAweGZjLCAweDViLCAweDE0LAorCTB4MzIsIDB4MjIsIDB4ZmIsIDB4ZDIsIDB4NTQsIDB4ZWUsIDB4OGIsIDB4YzQsIDB4ZWQsIDB4YjgsIDB4YTcsIDB4NWQsCisJMHhlNSwgMHg2MiwgMHhiZSwgMHgyNSwgMHhkNywgMHgwNSwgMHg1NCwgMHgxZiwgMHhlNCwgMHg3NSwgMHhmZSwgMHg1YywKKwkweGFhLCAweGY2LCAweDI5LCAweGRmLCAweDI4LCAweGVhLCAweDc1LCAweDg4LCAweDhmLCAweDdkLCAweDMzLCAweGQ5LAorCTB4NzcsIDB4N2MsIDB4MzIsIDB4ZTcsIDB4ZDgsIDB4MTQsIDB4NmIsIDB4YTksIDB4MzIsIDB4N2YsIDB4NDMsIDB4N2YsCisJMHg0NywgMHhhYywgMHgxOSwgMHgzOSwgMHgxNiwgMHhjOCwgMHg5ZiwgMHg3MCwgMHhlYiwgMHgxNiwgMHgzOSwgMHhiNiwKKwkweDAwLCAweDZjLCAweDUwLCAweDExLCAweDZiLCAweGE4LCAweDFiLCAweGUxLCAweGU3LCAweGJkLCAweGNjLCAweDliLAorCTB4ZTYsIDB4MzYsIDB4NzAsIDB4ZTgsIDB4NTYsIDB4NjQsIDB4Y2QsIDB4ZjIsIDB4OTAsIDB4MzUsIDB4ZjcsIDB4ZmIsCisJMHg1MSwgMHhjYiwgMHg4NywgMHg5YSwgMHgzZSwgMHg2NywgMHhkOCwgMHhhMCwgMHgxMiwgMHhmYiwgMHgwYSwgMHgwNiwKKwkweDE1LCAweDRjLCAweDFmLCAweDlkLCAweGIzLCAweDIzLCAweGQxLCAweDI1LCAweDgxLCAweDM3LCAweGVmLCAweDQzLAorCTB4Y2UsIDB4Y2YsIDB4ZjAsIDB4MmEsIDB4MWQsIDB4MzYsIDB4Y2YsIDB4OTIsIDB4ZGMsIDB4ZWYsIDB4YTEsIDB4YzAsCisJMHhiNiwgMHg3NywgMHg5YSwgMHhmOSwgMHhlZCwgMHgyYywgMHhmYiwgMHgxZiwgMHhjZSwgMHgxNCwgMHhkNiwgMHg1ZCwKKwkweDM0LCAweGNkLCAweGIwLCAweDBmLCAweDAwLCAweDNlLCAweDJkLCAweDllLCAweGE3LCAweGUyLCAweDZlLCAweDBhLAorCTB4YzYsIDB4ZjgsIDB4OTksIDB4MTYsIDB4NzQsIDB4MTEsIDB4M2YsIDB4MjcsIDB4NDksIDB4NzEsIDB4ZjYsIDB4OTMsCisJMHhlMCwgMHhiMywgMHg0ZSwgMHg0ZiwgMHg0NSwgMHhjYywgMHgwMiwgMHgxOSwgMHhkYywgMHgxNiwgMHhiZSwgMHgyYiwKKwkweDllLCAweDgzLCAweGZiLCAweDYzLCAweDY2LCAweDEzLCAweGQ1LCAweGQ2LCAweDFjLCAweGI3LCAweDhiLCAweDNhLAorCTB4Y2MsIDB4OWIsIDB4ZDEsIDB4N2IsIDB4YzgsIDB4ZTgsIDB4ODEsIDB4NmUsIDB4YzIsIDB4OWMsIDB4ZGQsIDB4YWQsCisJMHhkNiwgMHg4YiwgMHgzYSwgMHhmOCwgMHhmYiwgMHg5MCwgMHhmYSwgMHgyZSwgMHhlNywgMHg1YSwgMHg3ZSwgMHhkNywKKwkweGJjLCAweDhjLCAweGJmLCAweDBmLCAweDViLCAweGM4LCAweGZlLCAweDVkLCAweDM1LCAweDdmLCAweGQ1LCAweGViLAorCTB4NjYsIDB4ZmQsIDB4NDYsIDB4OTAsIDB4Y2UsIDB4N2IsIDB4YWUsIDB4OWIsIDB4NmQsIDB4NTQsIDB4Y2IsIDB4ZGIsCisJMHhiMSwgMHhjNSwgMHg1YSwgMHhkZSwgMHg5ZiwgMHhlZiwgMHg5NiwgMHhmNSwgMHg3MSwgMHhlZSwgMHhiZSwgMHhmYywKKwkweDljLCAweGZiLCAweGUyLCAweDE1LCAweDBmLCAweDcxLCAweGViLCAweDVlLCAweGFkLCAweDczLCAweDRiLCAweGY0LAorCTB4NmYsIDB4ZDEsIDB4Y2YsIDB4ZDIsIDB4N2EsIDB4MjgsIDB4YWMsIDB4ZjIsIDB4OTksIDB4OTAsIDB4YmYsIDB4NzQsCisJMHg4ZiwgMHhlMiwgMHg1NSwgMHhhZCwgMHhlNywgMHhjOSwgMHg0MywgMHhjZiwgMHgzZiwgMHgyMCwgMHhmMiwgMHg4ZSwKKwkweGE1LCAweDlkLCAweGQ4LCAweGFmLCAweGU4LCAweDAxLCAweDlhLCAweDg1LCAweDVkLCAweDM0LCAweGViLCAweDc2LAorCTB4ZDEsIDB4Y2MsIDB4NTAsIDB4ZGYsIDB4NzcsIDB4ODksIDB4ZTMsIDB4ZjMsIDB4NGIsIDB4YWYsIDB4NzYsIDB4YzgsCisJMHg3YSwgMHg3OCwgMHhhYywgMHgyOSwgMHg3ZSwgMHg1ZiwgMHg3ZCwgMHhkZiwgMHg2YywgMHhiYywgMHgwZiwgMHg4NCwKKwkweDI4LCAweDI4LCAweGUyLCAweDRkLCAweGFlLCAweGIxLCAweGJlLCAweDQ0LCAweDY0LCAweGIzLCAweDM3LCAweDVjLAorCTB4NDcsIDB4ODMsIDB4NmYsIDB4YjksIDB4Y2UsIDB4YTMsIDB4OGYsIDB4ODMsIDB4YWUsIDB4M2UsIDB4ZjYsIDB4YmIsCisJMHhmYSwgMHg3OCwgMHhiMCwgMHg0MSwgMHgxZiwgMHg1OSwgMHg5ZiwgMHhmMywgMHg3YiwgMHhjZSwgMHgxNiwgMHgzZiwKKwkweDY5LCAweDVmLCAweGQxLCAweDRmLCAweGQ0LCAweDQ5LCAweDgzLCAweDllLCAweDNiLCAweDI5LCAweDFkLCAweDBhLAorCTB4MmIsIDB4M2IsIDB4MTEsIDB4NTUsIDB4ZjUsIDB4MDMsIDB4NWUsIDB4N2QsIDB4ZmUsIDB4MzEsIDB4MzUsIDB4OWUsCisJMHgzNywgMHgzNywgMHhhZiwgMHhiYSwgMHhlYiwgMHhhYiwgMHg5ZiwgMHhhMywgMHgwOSwgMHg1OSwgMHgyNywgMHhhZiwKKwkweDY0LCAweGZiLCAweDYyLCAweDgzLCAweDc4LCAweDM0LCAweDcyLCAweDNiLCAweDgwLCAweDM3LCAweDg0LCAweDZmLAorCTB4YjgsIDB4NGYsIDB4ZWUsIDB4NmYsIDB4MTcsIDB4YTAsIDB4ZTUsIDB4NzIsIDB4YWQsIDB4YjIsIDB4NWYsIDB4ZDUsCisJMHhmMCwgMHgzZCwgMHgxYiwgMHhiYSwgMHhiMywgMHg3NSwgMHhjYSwgMHgzOCwgMHhmZiwgMHgzZCwgMHgxMSwgMHhjYiwKKwkweDkzLCAweGViLCAweDQ4LCAweGFiLCAweGFhLCAweGRlLCAweDNhLCAweDYyLCAweDIxLCAweDQ3LCAweDYwLCAweDcxLAorCTB4MDUsIDB4NzEsIDB4ZDgsIDB4NDYsIDB4YjUsIDB4YzksIDB4NTIsIDB4MTcsIDB4YTUsIDB4Y2EsIDB4N2IsIDB4YzIsCisJMHgxNCwgMHg0NCwgMHgxZCwgMHg4NiwgMHg4YywgMHg4ZiwgMHhjOSwgMHgxYSwgMHhlMiwgMHhjNSwgMHg5NSwgMHgxYiwKKwkweGEyLCAweDZlLCAweDM3LCAweGFlLCAweDZhLCAweDkxLCAweDUzLCAweGQ0LCAweDI2LCAweDcwLCAweGVkLCAweDI3LAorCTB4YWYsIDB4MjEsIDB4ZmUsIDB4NzEsIDB4NjgsIDB4ZmIsIDB4MzUsIDB4YzQsIDB4ZWUsIDB4N2IsIDB4YjYsIDB4NTcsCisJMHg0MywgMHg2YywgMHhmMiwgMHhkOCwgMHg4ZCwgMHgwNSwgMHg1OSwgMHg0MywgMHg1YywgMHhiZCwgMHg0NiwgMHgyMywKKwkweDZiLCAweDg4LCAweDUzLCAweDJlLCAweGFjLCAweDIwLCAweGYxLCAweGY5LCAweDRkLCAweDU3LCAweDdlLCAweGI3LAorCTB4YWMsIDB4MGYsIDB4NWUsIDB4MmMsIDB4ZTMsIDB4NTMsIDB4NTksIDB4MWYsIDB4MmMsIDB4ZjMsIDB4YzEsIDB4ZGQsCisJMHg3YiwgMHhkZiwgMHhjOCwgMHhiNSwgMHgyMCwgMHhmOSwgMHg5ZSwgMHg1ZCwgMHgzNSwgMHg2YiwgMHg0MSwgMHhiMiwKKwkweDJlLCAweGQ4LCAweDMyLCAweGJjLCAweGY4LCAweDRlLCAweGRiLCAweDI1LCAweGVjLCAweGY3LCAweDEwLCAweDYzLAorCTB4ZGUsIDB4ZGQsIDB4ZDksIDB4NjAsIDB4YmYsIDB4ODcsIDB4NTgsIDB4ODMsIDB4ZmQsIDB4MWUsIDB4ZGMsIDB4YmEsCisJMHhkZiwgMHg4ZCwgMHhhNywgMHg4MCwgMHg3ZiwgMHg2MSwgMHgxNywgMHg4MSwgMHg3YiwgMHhiMSwgMHg1ZiwgMHg0MywKKwkweDk0LCAweGNlLCAweDk3LCAweDcxLCAweGU2LCAweDNkLCAweDk0LCAweDU0LCAweDM4LCAweGYzLCAweGZjLCAweDkyLAorCTB4ZDYsIDB4NDcsIDB4ZmQsIDB4MzUsIDB4ZmEsIDB4YzgsIDB4MGIsIDB4NzcsIDB4NDYsIDB4NTQsIDB4Y2UsIDB4OGYsCisJMHg5NiwgMHg1NywgMHhjNywgMHgyNSwgMHhhZiwgMHg4ZSwgMHg4NywgMHhiYywgMHhlMiwgMHgxZSwgMHhhNywgMHg0MSwKKwkweGJmLCAweDQxLCAweDEzLCAweGRjLCAweDgzLCAweGZmLCAweDk3LCAweGMyLCAweGQ4LCAweGE3LCAweDg2LCAweGU4LAorCTB4MGIsIDB4ZGQsIDB4MGEsIDB4ZWIsIDB4YjksIDB4ZTQsIDB4ZjUsIDB4MmMsIDB4Y2IsIDB4YWIsIDB4M2UsIDB4OGYsCisJMHhmZSwgMHgzNiwgMHhjMiwgMHhmYiwgMHgxYSwgMHgxZiwgMHhlZSwgMHhmNywgMHgxZCwgMHhiYiwgMHhmMiwgMHgwYiwKKwkweDkxLCAweDE3LCAweDUwLCAweGVkLCAweDI3LCAweDZhLCAweDBjLCAweDcxLCAweDQ4LCAweGM4LCAweGQyLCAweGJhLAorCTB4MWYsIDB4ZjksIDB4MmIsIDB4ZmEsIDB4MWMsIDB4NmEsIDB4YTcsIDB4MjAsIDB4N2YsIDB4OWEsIDB4MTYsIDB4Y2QsCisJMHgzNSwgMHgzOCwgMHhhMywgMHg1ZCwgMHhlMSwgMHgwOCwgMHg5MSwgMHhmZiwgMHhlYiwgMHhlYSwgMHhkYiwgMHg3ZiwKKwkweDcyLCAweGRmLCAweGY0LCAweDc5LCAweDZkLCAweDMzLCAweGRmLCAweGFlLCAweDhhLCAweDY5LCAweDU0LCAweGU3LAorCTB4NGQsIDB4MjIsIDB4N2UsIDB4YjQsIDB4MmIsIDB4NjksIDB4ZDgsIDB4MDksIDB4OTEsIDB4N2YsIDB4ZGEsIDB4NjksCisJMHgyMywgMHg1NiwgMHgxNiwgMHg2NywgMHhkOSwgMHhlZiwgMHg0YywgMHgyMiwgMHhkNywgMHhiOSwgMHhmMywgMHg5MiwKKwkweDQ1LCAweGE3LCAweGIyLCAweDU3LCAweDBmLCAweDQ4LCAweDVlLCAweDc5LCAweDVhLCAweGVjLCAweGQzLCAweDg5LAorCTB4N2QsIDB4MWQsIDB4MjcsIDB4ZDgsIDB4M2UsIDB4YzcsIDB4MTksIDB4NjAsIDB4Y2UsIDB4MTUsIDB4NWIsIDB4NjgsCisJMHg5MSwgMHg5MSwgMHhiYywgMHhkZiwgMHgyZSwgMHg4OCwgMHg1OCwgMHgxZiwgMHhlYiwgMHhhNCwgMHgxYywgMHhmNiwKKwkweDZiLCAweDM1LCAweDE2LCAweDlhLCAweGY5LCAweGI5LCAweDNkLCAweGI0LCAweDljLCAweDA3LCAweGNmLCAweDM1LAorCTB4YTksIDB4ZmQsIDB4NTMsIDB4ZDAsIDB4ZDYsIDB4NDcsIDB4NWQsIDB4ZjYsIDB4ZGYsIDB4MzIsIDB4ZWQsIDB4MWUsCisJMHgxMSwgMHg3OSwgMHg5NywgMHg4YiwgMHhiOSwgMHhhNywgMHhlNSwgMHg2NywgMHhlMSwgMHg1NSwgMHhmNSwgMHgwZSwKKwkweDdlLCAweDVmLCAweGYxLCAweDc1LCAweDhhLCAweDc1LCAweGI5LCAweGYzLCAweDAwLCAweGRkLCAweDdmLCAweGRlLAorCTB4NzgsIDB4ZTUsIDB4ZTQsIDB4YjYsIDB4ZjAsIDB4OGEsIDB4OTMsIDB4YWMsIDB4ZTAsIDB4MTUsIDB4ZjcsIDB4YjMsCisJMHgzNSwgMHg3NiwgMHhmOSwgMHhlMywgMHgxZSwgMHhiOSwgMHg5ZiwgMHgwNSwgMHg2OCwgMHhiMCwgMHgxMywgMHg1OCwKKwkweDJjLCAweDA5LCAweDVhLCAweDFhLCAweGUzLCAweDkxLCAweDcwLCAweGRjLCAweDNmLCAweDQ2LCAweDk5LCAweGUyLAorCTB4MzUsIDB4NGEsIDB4ZTUsIDB4NjAsIDB4ZTcsIDB4ZjksIDB4YjMsIDB4ZjAsIDB4MzcsIDB4N2IsIDB4NjQsIDB4OWMsCisJMHg0NiwgMHhkZiwgMHgwMywgMHhiZCwgMHhiMiwgMHg5YiwgMHhkYiwgMHgzNywgMHhlZiwgMHg5MSwgMHgzOSwgMHhkYiwKKwkweGVlLCAweGYzLCAweGVkLCAweDdjLCAweGZlLCAweGM5LCAweDcwLCAweGY1LCAweGY5LCAweDFkLCAweDdjLCAweGJlLAorCTB4MmIsIDB4ODksIDB4MzksIDB4MzQsIDB4MmUsIDB4MjEsIDB4MzYsIDB4MzksIDB4NGMsIDB4NjksIDB4OWUsIDB4OWYsCisJMHg0YywgMHg5MSwgMHg2ZCwgMHhlYiwgMHg2NSwgMHhkNiwgMHg1NywgMHg0YiwgMHhiYSwgMHg1ZCwgMHgzNywgMHhiNywKKwkweDBiLCAweDg5LCAweDM5LCAweDMxLCAweGI4LCAweGNkLCAweDZjLCAweDc2LCAweDg0LCAweGRiLCAweGVkLCAweDI3LAorCTB4ZmYsIDB4NjUsIDB4OGIsIDB4MzIsIDB4NGIsIDB4OWEsIDB4NTcsIDB4NzUsIDB4MmUsIDB4ZmUsIDB4MmYsIDB4YmEsCisJMHg2NSwgMHg2ZSwgMHhkNSwgMHhhZSwgMHhiMCwgMHhhNCwgMHhkZiwgMHhiMCwgMHg4OCwgMHg3YiwgMHgyMiwgMHhiNywKKwkweGUzLCAweDE5LCAweGMxLCAweDg3LCAweDkxLCAweDMxLCAweGFiLCAweGZjLCAweDdlLCAweGVjLCAweDMxLCAweDI2LAorCTB4ZjYsIDB4N2MsIDB4ZTUsIDB4MzEsIDB4YjAsIDB4NWUsIDB4MWMsIDB4YjcsIDB4Y2QsIDB4NzQsIDB4MzksIDB4NmYsCisJMHg2ZCwgMHg2ZCwgMHg5ZiwgMHhiYywgMHg3ZiwgMHg2NywgMHg4ZiwgMHhkYywgMHg3ZiwgMHhiNSwgMHg1MywgMHhlZCwKKwkweDE1LCAweGE4LCAweDZkLCAweGNlLCAweDE3LCAweDkwLCAweGE3LCAweDJkLCAweDY4LCAweGUzLCAweDVmLCAweDgwLAorCTB4YmUsIDB4MzQsIDB4ZjgsIDB4M2IsIDB4OGYsIDB4MjcsIDB4ODksIDB4M2UsIDB4ZjYsIDB4ZjYsIDB4ZTgsIDB4M2QsCisJMHgxNywgMHhlNSwgMHhiOCwgMHg0ZSwgMHg3MCwgMHg3ZiwgMHgxMywgMHgzYywgMHgyZSwgMHg3ZCwgMHgzZSwgMHhjNiwKKwkweGM3LCAweDVlLCAweGYzLCAweDhiLCAweDY3LCAweDA1LCAweGY5LCAweDM5LCAweDJjLCAweDAzLCAweDUzLCAweGMxLAorCTB4NjQsIDB4NmEsIDB4NTgsIDB4Y2UsIDB4NzMsIDB4MjUsIDB4YWUsIDB4MWIsIDB4MmUsIDB4YzcsIDB4NzUsIDB4ZTcsCisJMHhiMiwgMHhjNywgMHg3YiwgMHgxMCwgMHhjZiwgMHgzMCwgMHgyZSwgMHhmMSwgMHg3YywgMHg4NywgMHg5ZSwgMHhlMSwKKwkweGI2LCAweGE4LCAweDYzLCAweDQ4LCAweGYzLCAweDY3LCAweDliLCAweGNhLCAweGVmLCAweGE5LCAweGU3LCAweDE1LAorCTB4OTksIDB4MmYsIDB4YTEsIDB4ZWQsIDB4MTYsIDB4ZWUsIDB4YmQsIDB4OTcsIDB4OWYsIDB4MjEsIDB4NmQsIDB4NTcsCisJMHhlMywgMHhmNywgMHg1MCwgMHg1ZCwgMHg0ZSwgMHg0YywgMHgzZCwgMHg4ZiwgMHg2ZCwgMHgxNCwgMHg4YiwgMHgxNSwKKwkweGViLCAweDhhLCAweDFlLCAweDdjLCAweGI2LCAweDUxLCAweGFjLCAweDQ0LCAweGU0LCAweDM5LCAweGZiLCAweDI2LAorCTB4ZWEsIDB4ZTQsIDB4MTUsIDB4NzIsIDB4MWMsIDB4YTAsIDB4MjcsIDB4ZTYsIDB4MWQsIDB4ZGEsIDB4YzEsIDB4NzMsCisJMHhmNSwgMHgyNywgMHgwNiwgMHhlYSwgMHg4NiwgMHg0YiwgMHgyNCwgMHg3MywgMHg5ZiwgMHg5OCwgMHhjNiwgMHg1OSwKKwkweDdiLCAweGY4LCAweGFjLCAweGMxLCAweDc0LCAweGNlLCAweDNhLCAweGE1LCAweDgwLCAweGRkLCAweDQ2LCAweGNkLAorCTB4MmMsIDB4YWIsIDB4YmYsIDB4NGYsIDB4MDMsIDB4ZWMsIDB4ZWIsIDB4NDEsIDB4NjYsIDB4ZWQsIDB4NzAsIDB4ODIsCisJMHgyMCwgMHg2ZiwgMHgxMSwgMHhmMywgMHgxOCwgMHhmMywgMHhjNCwgMHg0NCwgMHgxMSwgMHhmYywgMHg2YywgMHhkMCwKKwkweDYzLCAweDc5LCAweGEyLCAweDQ3LCAweGYzLCAweDAzLCAweGU2LCAweDM3LCAweGM5LCAweGI2LCAweDJhLCAweGQ3LAorCTB4MjMsIDB4NjYsIDB4OWMsIDB4ZmIsIDB4OTEsIDB4MjgsIDB4ZmUsIDB4MjUsIDB4N2QsIDB4MjQsIDB4ZjYsIDB4NzEsCisJMHgwMSwgMHgxZCwgMHhmNSwgMHhiYywgMHhmZiwgMHgzOSwgMHg0ZCwgMHgyNywgMHhkMSwgMHhlZiwgMHhhZCwgMHhjYiwKKwkweGU3LCAweGE5LCAweDZkLCAweGM5LCAweDY3LCAweGQwLCAweDQzLCAweDNlLCAweDNmLCAweDU0LCAweDdjLCAweDUzLAorCTB4NjIsIDB4MWUsIDB4MGQsIDB4ZDIsIDB4NGMsIDB4MGUsIDB4YjksIDB4NjAsIDB4OWYsIDB4NDcsIDB4MGQsIDB4NjYsCisJMHgyZSwgMHhjNSwgMHg3YSwgMHgyOSwgMHg1NSwgMHhkMSwgMHg0YiwgMHgxNywgMHhlMiwgMHhmZSwgMHgxOCwgMHg2NCwKKwkweDFjLCAweDdiLCAweGQxLCAweGE5LCAweDFjLCAweDIwLCAweDhjLCAweDYzLCAweDFmLCAweDBkLCAweDJjLCAweGVjLAorCTB4ZTQsIDB4N2IsIDB4NjksIDB4MzUsIDB4M2UsIDB4MWEsIDB4NTMsIDB4N2IsIDB4MTUsIDB4NDQsIDB4YWMsIDB4MDksCisJMHhkNiwgMHg4ZiwgMHg3MywgMHgyYywgMHhjYiwgMHhlOSwgMHhkYywgMHhkZCwgMHhiNCwgMHgxOCwgMHhlYSwgMHhhNSwKKwkweGZlLCAweDA1LCAweGJkLCAweDdmLCAweDBiLCAweGM2LCAweDNhLCAweGQ0LCAweDJiLCAweDc1LCAweDkyLCAweDFlLAorCTB4ZjcsIDB4NmYsIDB4ODksIDB4MzgsIDB4ODUsIDB4NzUsIDB4ZWQsIDB4NTcsIDB4MzUsIDB4ZWUsIDB4OWQsIDB4OWIsCisJMHhlOCwgMHhhNSwgMHg5MiwgMHg5MiwgMHhkOSwgMHhkMiwgMHgxYiwgMHhmMSwgMHgyOCwgMHgzOSwgMHhmMSwgMHhkMSwKKwkweGZmLCAweDE1LCAweGZjLCAweGRmLCAweDdmLCAweDBkLCAweGI1LCAweDM4LCAweGQwLCAweGQxLCAweDE2LCAweDI1LAorCTB4YjMsIDB4YjUsIDB4YjQsIDB4ZTgsIDB4ZTUsIDB4NzEsIDB4ZTMsIDB4N2EsIDB4ZTksIDB4YTcsIDB4MzMsIDB4ZDEsCisJMHg1NywgMHg4NSwgMHhlZCwgMHgxZiwgMHhiOCwgMHhjNiwgMHhlZCwgMHg4NCwgMHg2ZCwgMHhkMiwgMHg3YSwgMHhjMywKKwkweDhiLCAweDBmLCAweGY1LCAweGRlLCAweDljLCAweDlhLCAweDE3LCAweDY1LCAweGNlLCAweDI3LCAweGUzLCAweDM3LAorCTB4MzMsIDB4ZTksIDB4YWYsIDB4ZTUsIDB4YzksIDB4OGYsIDB4ZTksIDB4ZTQsIDB4YmMsIDB4NDUsIDB4OTMsIDB4NTksCisJMHhlYywgMHg4MSwgMHgzOCwgMHhjNiwgMHg3MiwgMHhlZCwgMHhiNiwgMHgxNywgMHhkYywgMHg5ZSwgMHhjMCwgMHg2NywKKwkweGUzLCAweDJjLCAweGZiLCAweGVjLCAweGI3LCAweGU3LCAweDJjLCAweDk5LCAweDdmLCAweDI3LCAweGY2LCAweGRiLAorCTB4NmIsIDB4MTEsIDB4N2EsIDB4ZDQsIDB4YjQsIDB4ZmIsIDB4ZjcsIDB4NjgsIDB4N2IsIDB4OTAsIDB4Y2EsIDB4YTEsCisJMHhjZSwgMHg5MCwgMHgzZiwgMHgwYiwgMHhkYywgMHgzZSwgMHhkYiwgMHg0MywgMHhhOSwgMHgzYywgMHg5ZSwgMHgwMywKKwkweDdiLCAweDg3LCAweGJlLCAweGYzLCAweGYxLCAweGIyLCAweDljLCAweGQ3LCAweDdlLCAweDdlLCAweDM2LCAweGY2LAorCTB4MGUsIDB4OTgsIDB4MmMsIDB4OGUsIDB4ODgsIDB4MWMsIDB4M2MsIDB4ZTgsIDB4NjYsIDB4MzksIDB4OWYsIDB4ZTMsCisJMHgzNCwgMHhlYiwgMHhhOSwgMHg1NywgMHgxNCwgMHhhNiwgMHg3NCwgMHhjOSwgMHg3NywgMHg0YSwgMHhjOCwgMHhmNywKKwkweGI4LCAweDk4LCAweDhmLCAweDU0LCAweGRlLCAweDYwLCAweGJjLCAweGE2LCAweGUzLCAweDBjLCAweDVkLCAweDdjLAorCTB4MWMsIDB4NTAsIDB4M2EsIDB4MDQsIDB4ZDcsIDB4ZWUsIDB4ZGQsIDB4MjMsIDB4ZjIsIDB4MTMsIDB4NmQsIDB4OWMsCisJMHhjNywgMHhlNywgMHgzOCwgMHgzZCwgMHhjMywgMHhiOCwgMHhmMywgMHhkOSwgMHg2YywgMHgwYiwgMHhkZCwgMHhjOCwKKwkweGI1LCAweGQwLCAweDliLCAweGI5LCAweDVlLCAweGJhLCAweDNlLCAweGRmLCAweDQxLCAweGIzLCAweDhjLCAweDk5LAorCTB4NjcsIDB4ZWQsIDB4ODAsIDB4OTUsIDB4NjYsIDB4ZmYsIDB4ZTIsIDB4NmEsIDB4NTQsIDB4ZTQsIDB4MTAsIDB4YjEsCisJMHhkYywgMHhhMSwgMHgzZCwgMHhmMCwgMHg1ZiwgMHg3YywgMHgyZiwgMHhmMywgMHgxYywgMHg2MywgMHhlZiwgMHg1NiwKKwkweGZhLCAweDgwLCAweGRmLCAweDk5LCAweGNlLCAweGVhLCAweDljLCAweDA3LCAweGM0LCAweGUzLCAweDA3LCAweGNiLAorCTB4ZjgsIDB4NzUsIDB4NzMsIDB4MWUsIDB4MzEsIDB4MzcsIDB4ZTEsIDB4OTEsIDB4NzEsIDB4YTEsIDB4ZWIsIDB4MzMsCisJMHhmMywgMHg3YywgMHg3ZCwgMHgxZSwgMHg3MSwgMHg3MywgMHg0YiwgMHhjNCwgMHgyNCwgMHhiZSwgMHgxNCwgMHg0MCwKKwkweDdiLCAweDljLCAweGIzLCAweDY1LCAweGNlLCAweGE0LCAweDE4LCAweDViLCAweDk4LCAweDhmLCAweDQxLCAweGRiLAorCTB4YjAsIDB4YTIsIDB4NDMsIDB4MmIsIDB4OGYsIDB4NGYsIDB4YzYsIDB4MzAsIDB4NTIsIDB4Y2IsIDB4YWQsIDB4NzQsCisJMHgyNiwgMHhjZiwgMHgxOCwgMHgyNCwgMHhlZiwgMHg2NywgMHgxZiwgMHgwNiwgMHg2ZCwgMHg3ZiwgMHhlNywgMHhhMCwKKwkweGRlLCAweGQzLCAweDc2LCAweDk2LCAweGZiLCAweDllLCAweGNlLCAweDRiLCAweDBjLCAweDkyLCAweDVlLCAweDZlLAorCTB4YTcsIDB4NGMsIDB4YmUsIDB4NGQsIDB4MWQsIDB4ZGYsIDB4MmQsIDB4ZjIsIDB4ZGQsIDB4ZTUsIDB4ZGUsIDB4MTIsCisJMHhiOCwgMHhiNiwgMHg5MSwgMHg3ZSwgMHg0MywgMHhhZSwgMHgxMSwgMHg2YywgMHhhYSwgMHhmNCwgMHg0YiwgMHhhMSwKKwkweDZiLCAweGJjLCAweGYzLCAweDhjLCAweGM2LCAweGU4LCAweDM5LCAweGI2LCAweGI3LCAweGZkLCAweDk3LCAweDExLAorCTB4MmIsIDB4ZmUsIDB4MjIsIDB4ZjgsIDB4YTYsIDB4MDAsIDB4MWUsIDB4ZWIsIDB4YmYsIDB4OGMsIDB4N2QsIDB4OWYsCisJMHhmYywgMHgyMiwgMHhmNywgMHg2OCwgMHgyMiwgMHgzNCwgMHgyYywgMHg2YSwgMHg0NiwgMHhhNCwgMHg4YywgMHg0ZSwKKwkweDg5LCAweGJhLCAweGVjLCAweGVmLCAweDA4LCAweGRkLCAweDE0LCAweDcxLCAweDJjLCAweDAzLCAweDc4LCAweDI0LAorCTB4MTIsIDB4MjYsIDB4OTIsIDB4MzksIDB4NTksIDB4YTcsIDB4ZWMsIDB4Y2UsIDB4OWIsIDB4ZGQsIDB4ZTMsIDB4NDMsCisJMHgxNCwgMHhlYiwgMHgwMSwgMHhkZiwgMHg0YiwgMHg5OSwgMHg5NSwgMHg3YiwgMHgyMiwgMHg5MCwgMHhkMCwgMHhmNywKKwkweGU2LCAweDIxLCAweDVkLCAweDYzLCAweGEwLCAweDhmLCAweGI1LCAweGFkLCAweGQwLCAweGM3LCAweDZkLCAweDM1LAorCTB4ZDcsIDB4Y2QsIDB4OWEsIDB4ZWIsIDB4MWEsIDB4N2YsIDB4NjMsIDB4YWQsIDB4OGMsIDB4ZWQsIDB4M2MsIDB4YzksCisJMHgzZCwgMHg5OCwgMHg1MiwgMHgwYiwgMHg5MiwgMHhmZiwgMHhjYywgMHg0MywgMHg4MywgMHhlNiwgMHhmZCwgMHgwYSwKKwkweDgzLCAweGE3LCAweDU2LCAweDA2LCAweGMyLCAweDlkLCAweDQ2LCAweDliLCAweDNmLCAweDM1LCAweGYyLCAweGFmLAorCTB4YTUsIDB4NTgsIDB4MTIsIDB4YjgsIDB4ZTgsIDB4ZjUsIDB4M2QsIDB4NTIsIDB4YzcsIDB4YTEsIDB4NWYsIDB4NGUsCisJMHgxNCwgMHhkMCwgMHg2ZCwgMHg2YSwgMHhhNSwgMHg4ZCwgMHg1NiwgMHhjNSwgMHg5ZSwgMHg2MywgMHhjMCwgMHgxOCwKKwkweGI4LCAweDFmLCAweGNmLCAweDcxLCAweGNjLCAweDI2LCAweGMyLCAweDNlLCAweGYyLCAweDkwLCAweGYxLCAweGMzLAorCTB4ZTEsIDB4NmIsIDB4M2MsIDB4OWYsIDB4ODksIDB4OTUsIDB4ZmYsIDB4MjksIDB4NGQsIDB4OGIsIDB4N2QsIDB4N2EsCisJMHhkMCwgMHg5NiwgMHgzMSwgMHhhNCwgMHhjMCwgMHhmYywgMHg4YywgMHg1ZiwgMHhhYSwgMHhmYywgMHhhYSwgMHgzMSwKKwkweGY0LCAweGQzLCAweGMxLCAweDlhLCAweDhhLCAweDYxLCAweGJmLCAweGMwLCAweDMyLCAweDI2LCAweGQ3LCAweGNhLAorCTB4MTMsIDB4MzUsIDB4NmIsIDB4ZTUsIDB4NTMsIDB4NjIsIDB4YWQsIDB4MWMsIDB4ZWIsIDB4ZTQsIDB4MWIsIDB4ZTUsCisJMHgyZCwgMHhlYSwgMHgzYywgMHgxNiwgMHg4YiwgMHg2NiwgMHhhZiwgMHgwOCwgMHg3ZCwgMHgxMywgMHg5ZCwgMHhmMCwKKwkweGNiLCAweDNjLCAweGViLCAweDA0LCAweGJiLCAweDM3LCAweDg2LCAweGE4LCAweDZkLCAweGMwLCAweDY3LCAweGNjLAorCTB4ODgsIDB4ZGIsIDB4OTEsIDB4ZTEsIDB4MzUsIDB4YzYsIDB4MTQsIDB4NGIsIDB4YjksIDB4MWQsIDB4NzQsIDB4YmQsCisJMHhkMCwgMHhjNCwgMHg5OCwgMHhlZiwgMHg5ZiwgMHg2OSwgMHhhZCwgMHg0MCwgMHg4YywgMHgwZCwgMHgzYiwgMHgyOCwKKwkweDEzLCAweDY1LCAweDVlLCAweDFiLCAweDBlLCAweGYyLCAweGJjLCAweDMyLCAweGJlLCAweDFkLCAweDY2LCAweGY5LAorCTB4ZTMsIDB4MzEsIDB4MmMsIDB4ZTUsIDB4NGIsIDB4ZWYsIDB4YTcsIDB4YTMsIDB4MzEsIDB4MmIsIDB4M2UsIDB4ZGEsCisJMHhjNiwgMHhmZSwgMHg4YiwgMHhjOSwgMHhmZiwgMHgzNiwgMHhmZiwgMHg5ZiwgMHgwYiwgMHg4MywgMHgzNiwgMHg4YiwKKwkweGNiLCAweGI4LCAweGNlLCAweGQ4LCAweDI3LCAweDViLCAweDdhLCAweDdmLCAweDg2LCAweGRiLCAweGNjLCAweDhjLAorCTB4YzIsIDB4MGYsIDB4ODIsIDB4YmYsIDB4NjcsIDB4ZjMsIDB4YmYsIDB4NmMsIDB4YjMsIDB4YzQsIDB4N2MsIDB4OTcsCisJMHhiZSwgMHhlMiwgMHg4NCwgMHgwZCwgMHhhMSwgMHhlMywgMHhiMSwgMHgyZiwgMHhjZCwgMHg4MCwgMHhmYSwgMHg4YywKKwkweDE5LCAweDMzLCAweGRjLCAweDk3LCAweGViLCAweDg0LCAweDY3LCAweDU4LCAweDk0LCAweDhhLCAweDFlLCAweDYyLAorCTB4MzksIDB4ZTgsIDB4ZTAsIDB4NGYsIDB4ZDQsIDB4NmEsIDB4ZWQsIDB4YTQsIDB4Y2MsIDB4YzgsIDB4YTAsIDB4YWEsCisJMHhkNSwgMHhmYSwgMHg1OSwgMHg4MywgMHg1YSwgMHgyZCwgMHhkYywgMHhjNywgMHgzOCwgMHg2MCwgMHhiZSwgMHg3NCwKKwkweDdiLCAweDI2LCAweGVhLCAweDdlLCAweDJmLCAweDE5LCAweGE5LCAweGU4LCAweDJlLCAweDgxLCAweDk5LCAweDk2LAorCTB4OTYsIDB4MWYsIDB4ZTYsIDB4M2UsIDB4YzQsIDB4YWMsIDB4ZDQsIDB4MjgsIDB4ZjcsIDB4MzUsIDB4ZWYsIDB4ZWUsCisJMHg3ZiwgMHhlOSwgMHhmNiwgMHg0NCwgMHgxNCwgMHhlZCwgMHhmYywgMHgzNSwgMHhlZCwgMHg2MiwgMHgyNCwgMHhkYSwKKwkweDJlLCAweGEzLCAweDdkLCAweGU5LCAweDk3LCAweGYxLCAweGE4LCAweDFlLCAweGE3LCAweGZiLCAweDVlLCAweDhjLAorCTB4MDcsIDB4ZjIsIDB4YzUsIDB4OWYsIDB4NGIsIDB4ZWYsIDB4ZDAsIDB4ZjUsIDB4MWMsIDB4ZmMsIDB4NzEsIDB4NDMsCisJMHhkNSwgMHg1ZiwgMHg1OSwgMHhlNCwgMHgyYywgMHgzMSwgMHgwNiwgMHhiYywgMHg3MiwgMHhkMCwgMHhiNywgMHg5NiwKKwkweGZiLCAweDQxLCAweDI5LCAweDU1LCAweDk1LCAweGRiLCAweDUyLCAweDFkLCAweDczLCAweDk3LCAweDNlLCAweDU4LAorCTB4MmYsIDB4ZDksIDB4OTcsIDB4NjAsIDB4NDMsIDB4NjEsIDB4M2YsIDB4OWQsIDB4OTIsIDB4ZGYsIDB4MDYsIDB4ZGUsCisJMHg4MywgMHg2ZiwgMHhmNCwgMHgzNCwgMHhlYiwgMHgyZiwgMHg5OSwgMHg5ZiwgMHhjNCwgMHhiYSwgMHg5NCwgMHg3NSwKKwkweDk4LCAweDk0LCAweDlmLCAweDQ0LCAweGQ1LCAweDRmLCAweDNjLCAweDQ4LCAweDFlLCAweGVlLCAweGFmLCAweGU0LAorCTB4NDksIDB4YmEsIDB4ZDYsIDB4ZDgsIDB4MDMsIDB4YWUsIDB4MzUsIDB4NzYsIDB4ZDMsIDB4OTUsIDB4MjcsIDB4MTksCisJMHgxMiwgMHhmOCwgMHhhYywgMHg4MiwgMHhhOSwgMHg0MiwgMHgwYSwgMHg1MywgMHgwMSwgMHg3YiwgMHg0OSwgMHhkZCwKKwkweGI2LCAweDU4LCAweGQ2LCAweDZkLCAweGJiLCAweDM3LCAweGQxLCAweDZkLCAweDVlLCAweGJlLCAweGVhLCAweGFhLAorCTB4ZDIsIDB4MjMsIDB4OTEsIDB4MjgsIDB4NmMsIDB4MGMsIDB4ZjYsIDB4NTksIDB4ZmEsIDB4ZmIsIDB4ZTIsIDB4MjgsCisJMHhlYiwgMHg5MSwgMHgyOCwgMHhlYiwgMHg5MSwgMHgxMSwgMHhkNiwgMHgyMywgMHhjMywgMHhhYywgMHg0NywgMHg2YywKKwkweGE2LCAweDgxLCAweGM1LCAweDYzLCAweGZmLCAweDk4LCAweGY1LCAweDM0LCAweGVjLCAweGM3LCAweDE4LCAweDNkLAorCTB4NTMsIDB4ODQsIDB4NGUsIDB4MWUsIDB4NjEsIDB4MGMsIDB4ZjQsIDB4MzEsIDB4YWQsIDB4Y2QsIDB4YjcsIDB4MzMsCisJMHhmZiwgMHg0YSwgMHhkYywgMHg1MywgMHhlZCwgMHhkNywgMHg2MCwgMHhkZiwgMHgxOCwgMHhjNCwgMHg4NiwgMHg3ZiwKKwkweDA4LCAweGJkLCAweGYzLCAweGIyLCAweDQzLCAweDdkLCAweGJlLCAweGViLCAweDM5LCAweGQwLCAweDc5LCAweDBkLAorCTB4N2IsIDB4NmIsIDB4YmMsIDB4MDgsIDB4ZDksIDB4YzYsIDB4YmUsIDB4YzcsIDB4ZGYsIDB4MWUsIDB4MWEsIDB4ZTMsCisJMHhiZSwgMHhmNywgMHhmOSwgMHgzMiwgMHgzYywgMHgyZiwgMHg4ZiwgMHg0NywgMHgxZCwgMHhiMywgMHg4YiwgMHg2NSwKKwkweDYwLCAweDUyLCAweGM5LCAweGMwLCAweDY0LCAweDQ1LCAweDA2LCAweDljLCAweDM0LCAweDhmLCAweGE0LCAweDczLAorCTB4YTEsIDB4ODMsIDB4MDYsIDB4OGYsIDB4YzQsIDB4ZjcsIDB4NzYsIDB4YjIsIDB4ZmMsIDB4MjIsIDB4NjcsIDB4YTIsCisJMHhiMiwgMHhmZiwgMHg5MCwgMHg5ZiwgMHhhNiwgMHg0MywgMHg0MSwgMHhiNSwgMHg2ZiwgMHg5MSwgMHhjNSwgMHg3NiwKKwkweGYzLCAweDI3LCAweDk0LCAweGM5LCAweGJkLCAweGNiLCAweGI4LCAweDg0LCAweGU1LCAweGQ0LCAweGM0LCAweGYxLAorCTB4NDUsIDB4YzQsIDB4NDUsIDB4ZDksIDB4NmYsIDB4NjgsIDB4MTUsIDB4NzEsIDB4YTUsIDB4NDUsIDB4ZDEsIDB4MTYsCisJMHhjNywgMHg5MSwgMHg2MSwgMHhkNiwgMHg3MSwgMHhkMSwgMHg1NSwgMHgyMywgMHgzMiwgMHgxNiwgMHgzMywgMHgyZSwKKwkweGY3LCAweDYyLCAweDVmLCAweGZhLCAweDZmLCAweDE3LCAweDFmLCAweGViLCAweDk1LCAweGY1LCAweGI5LCAweDRmLAorCTB4ZWQsIDB4OTUsIDB4ZmEsIDB4ODQsIDB4NzksIDB4MzQsIDB4MTQsIDB4MTMsIDB4YmUsIDB4NWIsIDB4ZDMsIDB4MjUsCisJMHg2OSwgMHgzZiwgMHgxNywgMHg3OSwgMHhiZSwgMHg5NywgMHhhMiwgMHhjMywgMHgzYywgMHhkZiwgMHg2ZCwgMHhjYSwKKwkweDc2LCAweDNhLCAweDdjLCAweDVkLCAweGQ4LCAweDY1LCAweGI2LCAweGExLCAweGJkLCAweGQ4LCAweGQzLCAweGRmLAorCTB4OGMsIDB4NDcsIDB4OWYsIDB4ZTIsIDB4NzcsIDB4NjIsIDB4MWYsIDB4YTEsIDB4MmYsIDB4ZTMsIDB4NzksIDB4Y2MsCisJMHhiZCwgMHhkMCwgMHgxZiwgMHgzZiwgMHg2MSwgMHgxYiwgMHg4ZCwgMHhmNywgMHg4MiwgMHgxZiwgMHhmOSwgMHg3YiwKKwkweDYxLCAweDhjLCAweDJlLCAweDY0LCAweDc1LCAweDFmLCAweGRlLCAweDIzLCAweGUzLCAweDM5LCAweGY0LCAweGMzLAorCTB4NDcsIDB4YmIsIDB4ZWQsIDB4ZjcsIDB4NDQsIDB4NGQsIDB4ODgsIDB4ZjEsIDB4OGQsIDB4ZGEsIDB4M2UsIDB4N2QsCisJMHg0NSwgMHhmNSwgMHgwOSwgMHg3YiwgMHg3OSwgMHhiNiwgMHhmMCwgMHgxOCwgMHg3NiwgMHgxMywgMHhmNiwgMHg3NCwKKwkweDVhLCAweDE0LCAweDdiLCAweDZkLCAweDM2LCAweDBiLCAweDlmLCAweDc1LCAweDUxLCAweGY4LCAweDFlLCAweDBmLAorCTB4ZWYsIDB4YWQsIDB4ZWMsIDB4ZmYsIDB4NzksIDB4NTcsIDB4Y2QsIDB4YjksIDB4NzUsIDB4YjYsIDB4NWIsIDB4NDcsCisJMHgwNSwgMHg0NiwgMHhlYiwgMHhjNywgMHgxZSwgMHhmNCwgMHhhMiwgMHg2NiwgMHhmNSwgMHg0ZiwgMHhjNSwgMHgzNSwKKwkweDYzLCAweDAxLCAweGQ3LCAweDNlLCAweGE3LCAweGFlLCAweDdkLCAweDU2LCAweDYwLCAweDYzLCAweDYzLCAweGJjLAorCTB4OTUsIDB4ZjUsIDB4YTIsIDB4ZTAsIDB4NzcsIDB4OWUsIDB4NjcsIDB4N2IsIDB4OTgsIDB4ZjksIDB4M2QsIDB4YmMsCisJMHhjNCwgMHhjZiwgMHg5ZCwgMHgxNiwgMHhmNCwgMHhkNCwgMHhmNCwgMHgwMCwgMHgyZCwgMHgyMCwgMHgwMywgMHg2ZCwKKwkweDhhLCAweGZmLCAweDIzLCAweDU2LCAweGMyLCAweGFmLCAweGM3LCAweGRkLCAweDg4LCAweGNlLCAweDYzLCAweGIwLAorCTB4Y2YsIDB4M2MsIDB4NTYsIDB4OGMsIDB4YzksIDB4ZjIsIDB4YzUsIDB4MGEsIDB4NjEsIDB4NWYsIDB4N2EsIDB4MWUsCisJMHhiZSwgMHgwZSwgMHhlYSwgMHg1ZSwgMHgwZSwgMHgyMCwgMHg5ZiwgMHg4YSwgMHhmYiwgMHhiMCwgMHg4NywgMHg2MiwKKwkweDQ5LCAweGY0LCAweDBiLCAweGVkLCAweDM0LCAweDBkLCAweGZlLCAweGE4LCAweDg2LCAweDE2LCAweGVlLCAweGZiLAorCTB4M2EsIDB4ZDQsIDB4N2QsIDB4YWQsIDB4NjIsIDB4MmUsIDB4YzgsIDB4YzAsIDB4N2IsIDB4ZjQsIDB4YmIsIDB4ZjEsCisJMHg1ZSwgMHhiYywgMHgxZiwgMHhmNywgMHhlMSwgMHg3OSwgMHhmMiwgMHhiOSwgMHhkZCwgMHhhYywgMHhiNywgMHhlMywKKwkweGEzLCAweGYyLCAweDU5LCAweGM2LCAweDM1LCAweDc5LCAweGFkLCAweGRiLCAweGY2LCAweGVlLCAweGFmLCAweDljLAorCTB4M2YsIDB4OWYsIDB4ZGEsIDB4ODMsIDB4MDgsIDB4ZjMsIDB4ZDcsIDB4NDEsIDB4MDUsIDB4MTEsIDB4ZmIsIDB4YzQsCisJMHhiNSwgMHgzZSwgMHg5ZiwgMHhmMCwgMHg2YiwgMHg2ZCwgMHhmZSwgMHhlNCwgMHg3OSwgMHg5ZCwgMHhlMywgMHhlMywKKwkweDMzLCAweGI5LCAweDc3LCAweDg0LCAweGNmLCAweDllLCAweDRlLCAweGY2LCAweGY5LCAweDBhLCAweDA1LCAweDhjLAorCTB4YjcsIDB4Y2YsIDB4OTcsIDB4NjAsIDB4MTksIDB4OTgsIDB4YzgsIDB4YzUsIDB4NGIsIDB4MTksIDB4YTEsIDB4NmIsCisJMHgxOCwgMHhlYiwgMHg3NiwgMHg0NSwgMHhjYywgMHg2OSwgMHhhMywgMHg0NywgMHg2MCwgMHgzZSwgMHg3ZSwgMHgxZiwKKwkweDdmLCAweDY3LCAweDM5LCAweGNjLCAweGIyLCAweDFjLCAweDY2LCAweDU5LCAweDBlLCAweGIzLCAweDJjLCAweDg3LAorCTB4ZWMsIDB4YWIsIDB4N2UsIDB4MmIsIDB4Y2IsIDB4NzIsIDB4YzgsIDB4YjYsIDB4ZTQsIDB4MTUsIDB4YjYsIDB4MjUsCisJMHg1MiwgMHg3NiwgMHg2MywgMHgyYSwgMHhiZSwgMHhhOSwgMHg2NSwgMHgxNywgMHhlYiwgMHg3ZiwgMHg2ZSwgMHgxZiwKKwkweDQ3LCAweGNiLCAweDJhLCAweGVjLCAweDM3LCAweGY5LCAweDhlLCAweDBmLCAweDU1LCAweGNiLCAweGVjLCAweDBkLAorCTB4OTYsIDB4ZDksIDB4YTYsIDB4ZjEsIDB4MWUsIDB4YmEsIDB4OTUsIDB4YzcsIDB4OWMsIDB4NDUsIDB4YWMsIDB4MzksCisJMHhkNiwgMHhkNSwgMHgwOSwgMHgzZiwgMHhiMCwgMHg1NiwgMHg4MCwgMHhlNSwgMHgwOSwgMHg1OCwgMHgzMywgMHhjMiwKKwkweDc0LCAweGVmLCAweGExLCAweGRiLCAweGFjLCAweGFmLCAweDZmLCAweGU1LCAweDIxLCAweGMzLCAweDA3LCAweGQ0LAorCTB4NzEsIDB4ODQsIDB4NjUsIDB4MTgsIDB4ZjYsIDB4Y2YsIDB4ZjYsIDB4ZGQsIDB4YzgsIDB4MTksIDB4OGMsIDB4YzksCisJMHgwMiwgMHg2NiwgMHg4YSwgMHhhMCwgMHg0ZiwgMHgwNSwgMHg0ZSwgMHhlMywgMHg3OSwgMHg1ZiwgMHg2NSwgMHhiZCwKKwkweDhmLCAweDE4LCAweDFlLCAweGVjLCAweGM1LCAweDE5LCAweDFmLCAweGRiLCAweDhiLCAweGYwLCAweDc1LCAweGQ2LAorCTB4YTcsIDB4ZTcsIDB4ZjMsIDB4MzYsIDB4Y2IsIDB4N2QsIDB4MTcsIDB4ZmQsIDB4NTksIDB4MWUsIDB4NzYsIDB4MWEsCisJMHgzNCwgMHhlMiwgMHhlMywgMHgwMiwgMHg4OSwgMHhkOCwgMHg5OCwgMHgzMSwgMHg4ZSwgMHhiMSwgMHgwZiwgMHgzYSwKKwkweDg2LCAweGUwLCAweDkzLCAweGRiLCAweDk4LCAweDIzLCAweGE2LCAweGZkLCAweDNiLCAweDdiLCAweGIxLCAweDlmLAorCTB4N2UsIDB4Y2MsIDB4NjgsIDB4NTYsIDB4YjEsIDB4NDYsIDB4N2MsIDB4NDcsIDB4ZmIsIDB4MWUsIDB4ODUsIDB4NGQsCisJMHg3MSwgMHhkYywgMHg2OCwgMHgwZCwgMHgxMiwgMHhiZiwgMHg0MywgMHgxMSwgMHg2NSwgMHg3YSwgMHhkNCwgMHhlYSwKKwkweGFmLCAweDBiLCAweDdjLCAweGJmLCAweGEwLCAweGQ3LCAweDU4LCAweGRjLCAweDhmLCAweGZhLCAweDcyLCAweGZhLAorCTB4YWEsIDB4N2YsIDB4N2MsIDB4OGMsIDB4OWUsIDB4MmQsIDB4YTIsIDB4ZGYsIDB4OTcsIDB4MjksIDB4MTMsIDB4ODIsCisJMHgzZSwgMHg4YSwgMHg0NCwgMHhkNywgMHg0OSwgMHhkMiwgMHhhZSwgMHg5NSwgMHg3MSwgMHhlNywgMHg2MywgMHhkZSwKKwkweDNhLCAweGNlLCAweDhhLCAweDBiLCAweDljLCAweGRjLCAweGMyLCAweGZhLCAweDA1LCAweGI0LCAweGY5LCAweDNlLAorCTB4ZjMsIDB4NWEsIDB4MTQsIDB4NzUsIDB4NjksIDB4NGEsIDB4YmYsIDB4YmQsIDB4Y2UsIDB4M2EsIDB4MDcsIDB4NzMsCisJMHg4NiwgMHhlMywgMHg4ZCwgMHg3NSwgMHhkYSwgMHg5YSwgMHhkMiwgMHg2OSwgMHhiNiwgMHg0YiwgMHhhNywgMHhhNSwKKwkweGNiLCAweDNhLCAweDhkLCAweDc5LCAweDQzLCAweGU4LCAweGIyLCAweGEwLCAweGE4LCAweDhkLCAweDRlLCAweGFiLAorCTB4ZWYsIDB4YzAsIDB4ODcsIDB4YmIsIDB4ODUsIDB4ZWUsIDB4NjIsIDB4ZGQsIDB4M2YsIDB4ODQsIDB4M2QsIDB4YzgsCisJMHgxYywgMHhkZiwgMHgzMSwgMHhhMSwgMHg0MywgMHgzNCwgMHg3ZiwgMHgzZiwgMHhiYywgMHg0ZiwgMHhjYSwgMHg0NSwKKwkweGFiLCAweGQwLCAweDA3LCAweGU5LCAweDI5LCAweGU4LCAweDJkLCAweGFmLCAweGY2LCAweDBmLCAweDcyLCAweDNiLAorCTB4YjQsIDB4YjcsIDB4YzMsIDB4MmYsIDB4YjIsIDB4M2UsIDB4NWIsIDB4OGMsIDB4YzIsIDB4YTcsIDB4NmQsIDB4NTMsCisJMHhiZSwgMHgwZiwgMHhmNiwgMHgxNCwgMHhjMywgMHg1YSwgMHgxNywgMHhjNiwgMHhhYSwgMHhmNSwgMHg1OSwgMHhiNywKKwkweDhhLCAweDZiLCAweDIwLCAweDBlLCAweDg5LCAweDM5LCAweDZmLCAweDg4LCAweDExLCAweDJjLCAweDYwLCAweDA0LAorCTB4YmUsIDB4MjcsIDB4YzAsIDB4ZjQsIDB4ODIsIDB4N2UsIDB4NjEsIDB4M2IsIDB4ZjAsIDB4MmUsIDB4YWQsIDB4MDksCisJMHhkOSwgMHg3OCwgMHg1NywgMHg2MCwgMHg5NywgMHgwYywgMHg1ZiwgMHg5YiwgMHgxOSwgMHg3ZCwgMHg1NCwgMHhmNCwKKwkweDMzLCAweGIzLCAweDVjLCAweGQxLCAweDhmLCAweDczLCAweGQ5LCAweGY3LCAweDYwLCAweDM3LCAweDQ0LCAweDVmLAorCTB4OTcsIDB4ODYsIDB4YTQsIDB4MGUsIDB4NWMsIDB4MmMsIDB4OTgsIDB4ZDgsIDB4ZTMsIDB4MGMsIDB4N2QsIDB4ZTYsCisJMHhiZSwgMHhlYSwgMHg3MSwgMHhhMiwgMHgxZiwgMHg1YSwgMHgxZiwgMHg2YywgMHg0NSwgMHhmNiwgMHgxOCwgMHhkNywKKwkweDc2LCAweDYxLCAweDhlLCAweDFjLCAweDE3LCAweDBmLCAweDdkLCAweDhmLCAweGRmLCAweDhmLCAweDczLCAweDliLAorCTB4OGYsIDB4ZTcsIDB4NzYsIDB4NzksIDB4M2MsIDB4ODgsIDB4ZWQsIDB4ZTEsIDB4OWUsIDB4NzcsIDB4ZTksIDB4OTYsCisJMHgxYSwgMHhjZiwgMHhhZCwgMHhmMiwgMHg3OCwgMHhiZSwgMHhhYiwgMHhjNiwgMHg0MywgMHg2OSwgMHg2MywgMHhiYywKKwkweDViLCAweGUxLCAweGZlLCAweDJkLCAweDNmLCAweGJiLCAweDM1LCAweGNlLCAweDM4LCAweDI2LCAweGJkLCAweDBjLAorCTB4M2EsIDB4ZGYsIDB4YTUsIDB4ZjgsIDB4YzksIDB4MWQsIDB4NDcsIDB4NzUsIDB4ZjcsIDB4MzUsIDB4MzIsIDB4YmMsCisJMHhjZSwgMHhmYSwgMHhmNywgMHhiNiwgMHhjMCwgMHgzMSwgMHg3ZCwgMHg4YywgMHg2MywgMHg3MCwgMHg5ZSwgMHgzMiwKKwkweGQwLCAweGQzLCAweGU5LCAweDEwLCAweGY2LCAweGUxLCAweDFkLCAweGUzLCAweDcxLCAweGIzLCAweDNmLCAweDM2LAorCTB4Y2EsIDB4OWYsIDB4MjIsIDB4YmUsIDB4MjYsIDB4ZTIsIDB4YmUsIDB4ZWEsIDB4ZmUsIDB4YWYsIDB4ZDMsIDB4ZWQsCisJMHg3OSwgMHhlOCwgMHg3MiwgMHhlMCwgMHg1OCwgMHhiOSwgMHg1NywgMHhlZiwgMHhlZCwgMHgxNSwgMHgxOSwgMHhkZiwKKwkweDRkLCAweDc4LCAweGM2LCAweDc3LCAweDExLCAweGRiLCAweDFkLCAweDA1LCAweGNlLCAweDM3LCAweDExLCAweDA3LAorCTB4OWUsIDB4NTAsIDB4YmYsIDB4NWYsIDB4OTIsIDB4MmUsIDB4ZTIsIDB4NTksIDB4NWUsIDB4N2EsIDB4NjksIDB4Y2MsCisJMHg5NSwgMHgxZiwgMHg4NywgMHhiYywgMHgxNCwgMHg4NywgMHhmNSwgMHg4YywgMHg2ZCwgMHgzNiwgMHgxOSwgMHg0NywKKwkweDY1LCAweDljLCAweGI5LCAweGE4LCAweGIxLCAweGQzLCAweDA5LCAweDllLCAweDMzLCAweDNiLCAweDZhLCAweDE4LAorCTB4MDksIDB4MTEsIDB4NmIsIDB4NjgsIDB4YjUsIDB4ZGIsIDB4YTgsIDB4ODUsIDB4ZWQsIDB4ZTgsIDB4NTksIDB4YzIsCisJMHgzZSwgMHg3MCwgMHgxMSwgMHgwYiwgMHg2YiwgMHgwMCwgMHgxNywgMHg5OCwgMHgyNywgMHgzMywgMHhkMSwgMHg0OCwKKwkweGY4LCAweDUxLCAweGUxLCAweDk3LCAweGMyLCAweGJlLCAweDE4LCAweGEwLCAweDEzLCAweGQzLCAweDFhLCAweDdkLAorCTB4ZTAsIDB4ZWYsIDB4Y2IsIDB4ZDgsIDB4MGIsIDB4MzQsIDB4Y2EsIDB4ZTMsIDB4NDcsIDB4ZmMsIDB4NzgsIDB4YzAsCisJMHg3YSwgMHg5MywgMHhlZCwgMHhkMiwgMHgwNSwgMHgxMSwgMHg5NywgMHg3OSwgMHg5YSwgMHhkMiwgMHgyYywgMHhhNywKKwkweGM3LCAweDg1LCAweDljLCAweDFhLCAweDdkLCAweDJjLCAweDQ1LCAweDJjLCAweDU3LCAweGM4LCAweDQzLCAweDE4LAorCTB4NDQsIDB4MGMsIDB4NTAsIDB4ZjksIDB4M2EsIDB4M2MsIDB4Y2EsIDB4MTUsIDB4YjUsIDB4NTcsIDB4NDIsIDB4MTIsCisJMHhiYSwgMHg2MywgMHhlYiwgMHgzMSwgMHg4OSwgMHhlNCwgMHhhNywgMHg4ZSwgMHhjNSwgMHhiOCwgMHgzMSwgMHg1OSwKKwkweGEzLCAweGRhLCAweDUxLCAweGY4LCAweDY5LCAweDJhLCAweDllLCAweDg4LCAweGZjLCAweGY4LCAweGYyLCAweDZmLAorCTB4ZTksIDB4YjgsIDB4ZTMsIDB4MDYsIDB4ZTcsIDB4NDQsIDB4NmUsIDB4ZTgsIDB4Y2IsIDB4NDUsIDB4NjksIDB4ODMsCisJMHhkMywgMHhlYywgMHhkMywgMHg2NywgMHg4ZSwgMHhiOCwgMHgzMSwgMHg0OSwgMHgyNCwgMHgzNywgMHgyMSwgMHg2MiwKKwkweDM5LCAweGZiLCAweDI4LCAweGJlLCAweDMwLCAweDQyLCAweDBmLCAweDY0LCAweGExLCAweGMzLCAweDY4LCAweDNkLAorCTB4NmUsIDB4ZTMsIDB4NTcsIDB4NzIsIDB4MjAsIDB4ZTMsIDB4MjMsIDB4OTQsIDB4MjgsIDB4ODIsIDB4NDYsIDB4M2UsCisJMHhjNiwgMHg0YSwgMHhjYywgMHg3YiwgMHgzOSwgMHhhYywgMHhlZiwgMHhmMywgMHhmNywgMHgwMiwgMHg3ZSwgMHgxYiwKKwkweGU2LCAweDBmLCAweDU0LCAweGJjLCAweGJjLCAweDk3LCAweDI2LCAweDE2LCAweGM4LCAweDQ5LCAweDQ1LCAweGVmLAorCTB4MTUsIDB4N2IsIDB4NzksIDB4YTcsIDB4YTIsIDB4NDMsIDB4MmEsIDB4YjYsIDB4MTMsIDB4ZTYsIDB4ZjMsIDB4ODgsCisJMHg5NywgMHg1OSwgMHg3NCwgMHg3ZiwgMHgzNiwgMHhlMiwgMHhhNCwgMHg0OCwgMHhjNiwgMHgyYywgMHg4OCwgMHhmYiwKKwkweDYwLCAweGIwLCAweGVkLCAweGRkLCAweGNkLCAweDNhLCAweGU0LCAweDk0LCAweDg4LCAweDViLCAweDMwLCAweDUyLAorCTB4OTksIDB4NDcsIDB4N2IsIDB4YzQsIDB4MWMsIDB4YmEsIDB4MDgsIDB4N2UsIDB4NWEsIDB4MmEsIDB4ZjcsIDB4YWEsCisJMHg2YSwgMHg1YiwgMHgyMiwgMHg5MywgMHg3OSwgMHhjMSwgMHhmYywgMHg2ZCwgMHhkYiwgMHg4OSwgMHgxYSwgMHg5NSwKKwkweGZiLCAweDExLCAweGYzLCAweDM4LCAweDI1LCAweDcwLCAweDY0LCAweDFmLCAweGZiLCAweDNjLCAweGEyLCAweDVkLAorCTB4NjksIDB4NDYsIDB4YzQsIDB4MmYsIDB4ZjgsIDB4YjgsIDB4ZjAsIDB4YzgsIDB4N2UsIDB4YTksIDB4ZGIsIDB4ZTQsCisJMHg3OSwgMHgxOSwgMHhkNywgMHhlMCwgMHg2NywgMHgxNiwgMHhiOCwgMHgxZiwgMHg1NSwgMHhmOSwgMHhmNCwgMHhiZCwKKwkweDE0LCAweGRiLCAweDQ2LCAweDljLCAweDY5LCAweGVhLCAweDhlLCAweGM2LCAweDk5LCAweDk4LCAweGQ2LCAweGM1LAorCTB4Y2QsIDB4NmEsIDB4MWEsIDB4YjQsIDB4ZmYsIDB4ZjcsIDB4OTEsIDB4YjYsIDB4ZTEsIDB4NGMsIDB4MmIsIDB4NTMsCisJMHhmYywgMHgxNiwgMHgwOCwgMHgzMCwgMHg3OCwgMHhhNiwgMHhmOCwgMHgzYywgMHg3ZSwgMHgwMywgMHhjNywgMHg5NywKKwkweDE0LCAweGQ4LCAweDM4LCAweGNjLCAweGQ4LCAweDA2LCAweDE4LCAweDY3LCAweDQwLCAweGFjLCAweDhiLCAweGM1LAorCTB4MWUsIDB4MGEsIDB4ZmIsIDB4MzIsIDB4MmIsIDB4M2QsIDB4ZTQsIDB4NDcsIDB4M2MsIDB4Y2UsIDB4ZDYsIDB4YjksCisJMHgxYywgMHhhZCwgMHgyMiwgMHhlZiwgMHg1ZCwgMHhhZSwgMHg0NywgMHhjMiwgMHgzZSwgMHg0MywgMHgyNywgMHhhZSwKKwkweGIzLCAweGRmLCAweGYwLCAweDkwLCAweGNhLCAweGI5LCAweDQxLCAweGNkLCAweGE2LCAweGNlLCAweGI5LCAweGQxLAorCTB4M2EsIDB4NDUsIDB4ZjMsIDB4OWUsIDB4NWUsIDB4ZWIsIDB4NzAsIDB4ZmYsIDB4ZGUsIDB4MTgsIDB4NjQsIDB4ZDcsCisJMHg4ZCwgMHgyOSwgMHgxMCwgMHg5ZiwgMHgxMiwgMHg3MywgMHg3NCwgMHg4MSwgMHg0OCwgMHhjZSwgMHg3MSwgMHg2NSwKKwkweDFkLCAweGEzLCAweDg1LCAweGU3LCAweDA5LCAweGZlLCAweDIwLCAweGUyLCAweDdlLCAweDhmLCAweGYwLCAweDI3LAorCTB4ZDYsIDB4MjMsIDB4N2UsIDB4YjQsIDB4MWYsIDB4MzgsIDB4YWEsIDB4ZDMsIDB4NjYsIDB4OWUsIDB4MTksIDB4YzUsCisJMHg3MSwgMHgwZiwgMHhmYiwgMHg2NywgMHgxYSwgMHhmNywgMHhjYSwgMHg1OCwgMHgxNCwgMHhmYiwgMHg2YywgMHg2YSwKKwkweGJlLCAweDEwLCAweDg3LCAweGVhLCAweDk3LCAweDM5LCAweDRjLCAweGQ5LCAweDA4LCAweDU5LCAweDVkLCAweGEwLAorCTB4ZDMsIDB4YWYsIDB4NGEsIDB4MWUsIDB4MzcsIDB4NWIsIDB4YmIsIDB4ZDgsIDB4NGEsIDB4NWUsIDB4MTMsIDB4N2UsCisJMHgwYiwgMHgwZCwgMHhmYiwgMHg4ZCwgMHgxZSwgMHgwNCwgMHhlZCwgMHg3OSwgMHg4ZSwgMHhkYywgMHg2YiwgMHgxYiwKKwkweGNmLCAweGVmLCAweGQ1LCAweGJmLCAweGMzLCAweDc0LCAweDY3LCAweGU2LCAweDZkLCAweDg3LCAweGM3LCAweGJjLAorCTB4MWQsIDB4ZWMsIDB4OTUsIDB4NmIsIDB4NjcsIDB4N2YsIDB4YTEsIDB4ZGEsIDB4NzgsIDB4ZTUsIDB4YjgsIDB4M2EsCisJMHg0ZiwgMHgyMiwgMHgwZSwgMHg1NSwgMHhhOSwgMHhiZiwgMHg3OCwgMHg1YiwgMHhlOCwgMHg5NSwgMHhmYSwgMHg1OCwKKwkweDc4LCAweDk4LCAweGY1LCAweGE5LCAweDk0LCAweGUzLCAweDUzLCAweDFlLCAweDcyLCAweGRjLCAweDM1LCAweDBlLAorCTB4ZGMsIDB4ZjIsIDB4YzksIDB4ZTUsIDB4NzgsIDB4YjIsIDB4YTEsIDB4MWMsIDB4NGYsIDB4ZjYsIDB4Y2EsIDB4NTgsCisJMHg2YywgMHhiZCwgMHgxYywgMHhiZiwgMHg4MSwgMHhiZSwgMHgxNCwgMHgzNywgMHhjYSwgMHg4MSwgMHg0NCwgMHg0ZCwKKwkweGJiLCAweDNiLCAweDU2LCAweDAyLCAweDlhLCAweGU5LCAweDc4LCAweDA5LCAweGQ2LCAweDBkLCAweGMxLCAweDk3LAorCTB4NTgsIDB4N2IsIDB4OTksIDB4MzIsIDB4MTIsIDB4ZjMsIDB4YjUsIDB4NmIsIDB4YTksIDB4NWIsIDB4YjksIDB4MTcsCisJMHhlYiwgMHgzNCwgMHhiNSwgMHhmNywgMHgwMiwgMHhiYiwgMHg0MywgMHgzNiwgMHgyMiwgMHg2MSwgMHgxOSwgMHgwYiwKKwkweGQwLCAweGY0LCAweGViLCAweGY1LCAweDFkLCAweGNiLCAweDQ3LCAweDljLCAweDAyLCAweDIxLCAweGQ2LCAweDFkLAorCTB4YTIsIDB4NzMsIDB4NTgsIDB4OWYsIDB4NTYsIDB4YjEsIDB4ZTQsIDB4OTMsIDB4NTksIDB4NDksIDB4MDcsIDB4ZjMsCisJMHg4OCwgMHhlMCwgMHgwZiwgMHhlMCwgMHhkYiwgMHg3MCwgMHhkMiwgMHg5ZiwgMHhlNCwgMHgzOSwgMHg5NiwgMHg3MSwKKwkweGU0LCAweGQ0LCAweDcyLCAweDU4LCAweGNkLCAweDFiLCAweGI3LCAweGM1LCAweGYzLCAweGFhLCAweGY2LCAweDkyLAorCTB4ZDcsIDB4NzEsIDB4MDcsIDB4Y2MsIDB4NTcsIDB4ZTQsIDB4ZWIsIDB4OTUsIDB4ZGMsIDB4NjQsIDB4ZDgsIDB4ODYsCisJMHgxMiwgMHhmZCwgMHgzNywgMHhkYiwgMHgzZCwgMHhmZiwgMHgxMSwgMHg1MywgMHhlYywgMHhlMywgMHhmMCwgMHg0NiwKKwkweGYxLCAweDA4LCAweGUzLCAweDRkLCAweGNjLCAweDI5LCAweDYyLCAweDkwLCAweDNhLCAweDQ2LCAweGZjLCAweGM0LAorCTB4NDEsIDB4NmEsIDB4M2YsIDB4Y2MsIDB4MjgsIDB4YzAsIDB4MjAsIDB4OWIsIDB4ZjEsIDB4YTUsIDB4NzEsIDB4MDQsCisJMHhiOSwgMHhlNiwgMHgxNiwgMHhkZiwgMHg4MywgMHhmZCwgMHhhOCwgMHgwNiwgMHhhZCwgMHgwNCwgMHhiNSwgMHgyMSwKKwkweDBlLCAweDgxLCAweGZkLCAweGIwLCAweGFkLCAweDc0LCAweDk1LCAweDhjLCAweDlkLCAweDE2LCAweDMyLCAweDk2LAorCTB4NTgsIDB4MzksIDB4YWQsIDB4NjQsIDB4ZWMsIDB4YjQsIDB4OGEsIDB4YzMsIDB4OWYsIDB4NTYsIDB4MzIsIDB4NzYsCisJMHg1YSwgMHhjOSwgMHhkOCwgMHg2OSwgMHgyNSwgMHg2MywgMHhhNywgMHg5OSwgMHhjZiwgMHgwNywgMHgxOCwgMHhkZiwKKwkweDAyLCAweDhiLCAweGU4LCAweDM4LCAweDY4LCAweDNiLCAweGE1LCAweGYyLCAweDM4LCAweDBmLCAweGZiLCAweDVjLAorCTB4MmIsIDB4NjcsIDB4ZWYsIDB4ZjYsIDB4NDksIDB4MzksIDB4NjMsIDB4NmMsIDB4MjIsIDB4ZWIsIDB4YzksIDB4ZjgsCisJMHg1ZCwgMHg5OCwgMHg4MywgMHg1NywgMHg5OCwgMHhlNiwgMHgxZiwgMHhkMywgMHg5OSwgMHg3OSwgMHhmNCwgMHhkNSwKKwkweDQ3LCAweDEzLCAweDYyLCAweDFmLCAweGRjLCAweDI2LCAweDhhLCAweGJiLCAweGIxLCAweGIwLCAweGM5LCAweDYzLAorCTB4Y2QsIDB4NGEsIDB4ZGYsIDB4Y2YsIDB4MzEsIDB4NmMsIDB4YzEsIDB4MjcsIDB4ZGUsIDB4N2EsIDB4MTUsIDB4N2MsCisJMHgzMiwgMHhhZSwgMHhlNiwgMHhhYiwgMHhkNiwgMHgyZiwgMHg2YSwgMHhhMSwgMHg2NCwgMHgwZSwgMHg3NCwgMHg0NSwKKwkweGZlLCAweGE0LCAweGM1LCAweDczLCAweDIzLCAweGU4LCAweGU0LCAweDk4LCAweDFlLCAweDM0LCAweDM4LCAweGE5LAorCTB4NjgsIDB4ZjAsIDB4YjgsIDB4MTgsIDB4MjMsIDB4ZjIsIDB4MGYsIDB4MTEsIDB4Y2IsIDB4NmMsIDB4NGMsIDB4ODcsCisJMHg3NCwgMHg3NiwgMHg4MCwgMHg5ZiwgMHhjMywgMHhiMiwgMHg3MCwgMHgyNCwgMHhjYywgMHgzYSwgMHg2OSwgMHhlYiwKKwkweDc0LCAweGE4LCAweDhjLCAweGJkLCAweDkxLCAweGVlLCAweGQ5LCAweDZhLCAweDVkLCAweGNlLCAweGJhLCAweGNiLAorCTB4OTYsIDB4ODQsIDB4OTUsIDB4MWQsIDB4OTEsIDB4YjgsIDB4NzgsIDB4ODcsIDB4NWQsIDB4YTIsIDB4MTMsIDB4ZDEsCisJMHg4MywgMHhmYywgMHgzZCwgMHg5MiwgMHg3NCwgMHhlOCwgMHgzMCwgMHgxOSwgMHg5ZCwgMHgyNSwgMHhmYSwgMHgxMSwKKwkweGNiLCAweDQxLCAweDJiLCAweGNiLCAweGMxLCAweDA5LCAweGU1LCAweDk3LCAweDljLCAweDI4LCAweGZiLCAweDI1LAorCTB4OTMsIDB4MDcsIDB4OTAsIDB4OTcsIDB4OTEsIDB4MTIsIDB4ZWIsIDB4NWUsIDB4M2IsIDB4Y2IsIDB4YmYsIDB4YzMsCisJMHgwMiwgMHgzZCwgMHhiNiwgMHg4OCwgMHhmZCwgMHgyOCwgMHg3YSwgMHg3MSwgMHg2YywgMHhkMiwgMHg1NSwgMHhmNiwKKwkweGFiLCAweDYzLCAweGJlLCAweDA3LCAweDBmLCAweDA4LCAweGVjLCAweGVlLCAweDdiLCAweDAwLCAweGY3LCAweDljLAorCTB4OTAsIDB4N2EsIDB4Y2YsIDB4NDcsIDB4ZmUsIDB4YzEsIDB4NzcsIDB4MTgsIDB4NGYsIDB4OTQsIDB4ZTgsIDB4MzEsCisJMHg3ZSwgMHg2NywgMHgyNiwgMHg3NywgMHg4OCwgMHg5ZiwgMHhhZCwgMHhmNywgMHg5NiwgMHhiMCwgMHg2MywgMHg4NiwKKwkweDZmLCAweDI3LCAweGY5LCAweDNiLCAweDFiLCAweGJkLCAweDNiLCAweDIyLCAweGY4LCAweDkxLCAweGYxLCAweGI0LAorCTB4MzEsIDB4MTMsIDB4N2QsIDB4YWYsIDB4MzQsIDB4M2QsIDB4ODUsIDB4MTgsIDB4M2IsIDB4ZTQsIDB4MjQsIDB4NjIsCisJMHg1YSwgMHgzZSwgMHgyZiwgMHhmOSwgMHg5MCwgMHg1OCwgMHhhOSwgMHg5MiwgMHgwYiwgMHgyYiwgMHhmMywgMHhjMiwKKwkweGZmLCAweDhiLCAweGM3LCAweDY2LCAweDEyLCAweGQ2LCAweDRlLCAweGU0LCAweGYzLCAweDkzLCAweDA0LCAweDlmLAorCTB4MDAsIDB4ZmIsIDB4NTMsIDB4NTgsIDB4NGMsIDB4NjcsIDB4ZmQsIDB4MmUsIDB4NWIsIDB4ZjEsIDB4YzYsIDB4NjcsCisJMHg5MCwgMHhlNywgMHg5NiwgMHg1YiwgMHhhNCwgMHg4ZCwgMHg2ZCwgMHgwZSwgMHhlMiwgMHg3NSwgMHgwMywgMHgwYiwKKwkweDZiLCAweDlkLCAweDIxLCAweDUxLCAweDFiLCAweGRlLCAweGMxLCAweDE4LCAweDQ5LCAweGU3LCAweDNlLCAweDBmLAorCTB4ZjIsIDB4ZjMsIDB4MTEsIDB4YzcsIDB4MGIsIDB4ZDAsIDB4YzQsIDB4MjUsIDB4YjQsIDB4NmIsIDB4YTYsIDB4ZmUsCisJMHg4NSwgMHhkMiwgMHhlZiwgMHhmMSwgMHg3NSwgMHhiMSwgMHg3ZSwgMHg5OSwgMHhhMiwgMHg1NiwgMHhiNSwgMHgzNiwKKwkweGExLCAweGY3LCAweGFkLCAweDA4LCAweGIzLCAweGVjLCAweDU1LCAweDZhLCAweDlmLCAweGZiLCAweGNiLCAweDMxLAorCTB4M2QsIDB4MjEsIDB4MTMsIDB4MzUsIDB4MzEsIDB4YmQsIDB4YWYsIDB4NmUsIDB4NjIsIDB4YWYsIDB4MzYsIDB4OTMsCisJMHgwMywgMHhlNCwgMHhkNCwgMHhiNSwgMHg5MCwgMHg4YSwgMHg1NSwgMHg1YSwgMHgxOSwgMHhkYSwgMHg2YSwgMHg0ZCwKKwkweGRmLCAweDc2LCAweGVmLCAweGYxLCAweGI1LCAweDM2LCAweDhmLCAweDkzLCAweGYzLCAweGE2LCAweDFkLCAweDU0LAorCTB4ZmMsIDB4ZDcsIDB4NGMsIDB4NjcsIDB4ZjIsIDB4NDEsIDB4YjYsIDB4ZjksIDB4ZDAsIDB4YWQsIDB4YTAsIDB4OTcsCisJMHhiZiwgMHgxNywgMHhiNSwgMHgyZSwgMHg1ZiwgMHgwYSwgMHgzNCwgMHhkMywgMHhmMiwgMHgzMiwgMHg3MiwgMHgyZCwKKwkweGZlLCAweGYxLCAweDgwLCAweGNjLCAweDI1LCAweDRlLCAweDMyLCAweDVkLCAweDBlLCAweGIzLCAweDdkLCAweDM0LAorCTB4ZDQsIDB4ZGEsIDB4MTEsIDB4Y2UsIDB4NDEsIDB4OTcsIDB4ODgsIDB4ZGYsIDB4MjEsIDB4MGEsIDB4ZGMsIDB4M2IsCisJMHgxNCwgMHg2NCwgMHhiZiwgMHg0MCwgMHhhZSwgMHgzZCwgMHgxYywgMHhlNSwgMHg2NywgMHg3ZiwgMHgzMywgMHg5ZiwKKwkweDQ0LCAweGJjLCAweGNjLCAweDNjLCAweGNlLCAweGNmLCAweDlmLCAweDYwLCAweDNjLCAweDExLCAweGEzLCAweDY2LAorCTB4NWEsIDB4NWEsIDB4NmUsIDB4NjYsIDB4YmYsIDB4YTAsIDB4OTksIDB4ZjEsIDB4YzQsIDB4ODAsIDB4ZDksIDB4ZWYsCisJMHgxMywgMHhlZiwgMHgxMiwgMHg3NSwgMHgzNSwgMHg5ZiwgMHgwZiwgMHgxYywgMHg2NiwgMHhiZSwgMHhjMiwgMHhiYiwKKwkweGZlLCAweDVkLCAweGJkLCAweGFiLCAweGY2LCAweDFkLCAweGZmLCAweDUxLCAweGMyLCAweGYxLCAweDcxLCAweDNmLAorCTB4MzksIDB4MzcsIDB4ZjAsIDB4MWIsIDB4NWMsIDB4ZjMsIDB4NjMsIDB4OGMsIDB4OWQsIDB4NDMsIDB4OTQsIDB4OTksCisJMHg2ZiwgMHhlMiwgMHgzMSwgMHg4YywgMHhiMywgMHgxZiwgMHgxMSwgMHhlNSwgMHhlMywgMHhmYiwgMHhjOCwgMHgyOSwKKwkweDRlLCAweGQxLCAweDVmLCAweDE1LCAweGRkLCAweDMxLCAweGUxLCAweGZiLCAweGI4LCAweGNmLCAweGIyLCAweGI2LAorCTB4YmYsIDB4ODUsIDB4ZmIsIDB4ZjUsIDB4OTEsIDB4NWQsIDB4YWIsIDB4NjMsIDB4ODIsIDB4ZTQsIDB4ZmYsIDB4ZWIsCisJMHgxMCwgMHgzNSwgMHg3ZiwgMHgwZCwgMHhiMSwgMHg5NywgMHgxMiwgMHhlNSwgMHhhMiwgMHhhOCwgMHg1NywgMHg5MCwKKwkweGYxLCAweGU3LCAweGFiLCAweDIyLCAweDg3LCAweDk2LCAweGVmLCAweGU3LCAweDY3LCAweGNlLCAweGExLCAweGRkLAorCTB4NTUsIDB4OGIsIDB4YWUsIDB4ZGIsIDB4OTIsIDB4ZGUsIDB4M2YsIDB4MDgsIDB4ODQsIDB4YzgsIDB4ZmYsIDB4MTIsCisJMHg3MiwgMHg5ZiwgMHhjNCwgMHhmZSwgMHgxYSwgMHg4ZSwgMHg3ZCwgMHg4OCwgMHhmNSwgMHhmYiwgMHhkNywgMHg3MCwKKwkweDFmLCAweDdmLCAweGJlLCAweDg0LCAweGUzLCAweDIwLCAweDhmLCAweDEzLCAweGY2LCAweDFhLCAweGY5LCAweDJlLAorCTB4ZDAsIDB4OGIsIDB4ODcsIDB4YzMsIDB4YTYsIDB4ZTAsIDB4YmYsIDB4ZmIsIDB4OTgsIDB4YTcsIDB4OWEsIDB4NDQsCisJMHhhYywgMHhiMSwgMHgwYiwgMHg2ZCwgMHhlZCwgMHhmZCwgMHhjMCwgMHgxNiwgMHhjZSwgMHhkMCwgMHgyMSwgMHgxYywKKwkweGM3LCAweDNhLCAweGZkLCAweDRjLCAweDIzLCAweGM5LCAweDQzLCAweDE4LCAweDRmLCAweDE1LCAweDczLCAweDA3LAorCTB4OGUsIDB4MGUsIDB4MTEsIDB4Y2YsIDB4MjcsIDB4ZjAsIDB4YzcsIDB4MmYsIDB4ZjEsIDB4MWIsIDB4OTEsIDB4NGUsCisJMHgzZiwgMHhiZiwgMHgyMywgMHhjMSwgMHhlZiwgMHg5OCwgMHhjOCwgMHhjYiwgMHg3MSwgMHhjZiwgMHgxNSwgMHhmZCwKKwkweDI0LCAweGUzLCAweDU0LCAweDVmLCAweGU5LCAweGQzLCAweGJmLCAweGQxLCAweDQ4LCAweDNkLCAweDc4LCAweDc2LAorCTB4NTksIDB4NTYsIDB4ZjgsIDB4N2IsIDB4M2IsIDB4ZGQsIDB4Y2EsIDB4YjcsIDB4ZDEsIDB4NmQsIDB4YjUsIDB4YTYsCisJMHg3NSwgMHg0YiwgMHhmOCwgMHg2NSwgMHhhYywgMHhjMywgMHg5MywgMHhlZCwgMHhiNCwgMHhiZSwgMHhkYywgMHg0NCwKKwkweGQ0LCAweDE1LCAweDE0LCAweDZiLCAweGNlLCAweGI3LCAweGYyLCAweDA1LCAweDdlLCAweGZmLCAweDk3LCAweGZiLAorCTB4NjQsIDB4NWMsIDB4YTcsIDB4YzIsIDB4MjMsIDB4YjcsIDB4M2MsIDB4NzgsIDB4ZTQsIDB4MDMsIDB4YzEsIDB4MjMsCisJMHg1ZiwgMHhlYywgMHhkYiwgMHg5OCwgMHg0NywgMHg1MCwgMHhmMywgMHgwZiwgMHhkZSwgMHgwOCwgMHg1MiwgMHhiMywKKwkweGUyLCAweDhmLCAweDE3LCAweDk5LCAweDNmLCAweDllLCAweDY1LCAweGZlLCAweDM4LCAweGQ2LCAweDgwLCAweDNmLAorCTB4OGMsIDB4MWEsIDB4ZmUsIDB4MzgsIDB4MmUsIDB4ZjgsIDB4ZTMsIDB4ODksIDB4YmUsIDB4OGQsIDB4ZjgsIDB4ZTMsCisJMHg5OCwgMHg3ZiwgMHhhMywgMHg1OCwgMHg5MywgMHhhZiwgMHgzNSwgMHhjMCwgMHhlZiwgMHg5ZSwgMHhiMywgMHhmNywKKwkweDMxLCAweGFmLCAweGRiLCAweGI0LCAweDM0LCAweDhmLCAweGZhLCAweDg0LCAweGQ1LCAweGE4LCAweDQxLCAweDNmLAorCTB4MTMsIDB4M2UsIDB4ZDksIDB4OWEsIDB4ZjAsIDB4ZjksIDB4YzcsIDB4NDUsIDB4Y2QsIDB4YzEsIDB4YTIsIDB4ZTAsCisJMHgyZiwgMHhiNiwgMHhmZiwgMHhlMywgMHhhOCwgMHhhYiwgMHhhYSwgMHg5ZCwgMHg4YiwgMHg1NiwgMHhiYSwgMHgxZSwKKwkweGM1LCAweDVjLCAweDU4LCAweDdhLCAweDJlLCAweDA4LCAweGViLCAweGJiLCAweDZhLCAweGVmLCAweGM4LCAweDQwLAorCTB4M2MsIDB4NGIsIDB4Y2UsIDB4MDcsIDB4ZTAsIDB4ZDEsIDB4OTUsIDB4YjYsIDB4YzAsIDB4NDQsIDB4ZjYsIDB4MWIsCisJMHg3ZCwgMHhjMCwgMHg3ZiwgMHg5OSwgMHgxNSwgMHg3MiwgMHg5ZCwgMHgwZiwgMHhmMCwgMHhmOSwgMHg5MCwgMHhmOCwKKwkweDZkLCAweDJiLCAweGM4LCAweGNhLCAweDg3LCAweGM4LCAweDcxLCAweDY0LCAweDllLCAweGJjLCAweDllLCAweGVmLAorCTB4YTUsIDB4MWIsIDB4ZjksIDB4N2QsIDB4YjQsIDB4OTYsIDB4ZWYsIDB4YTMsIDB4MzcsIDB4YzUsIDB4YmUsIDB4MWEsCisJMHhiMiwgMHgzNiwgMHg3MiwgMHg0ZCwgMHhjYywgMHg5MSwgMHg0MSwgMHg0NywgMHg0MywgMHhkYywgMHg2NiwgMHg3OSwKKwkweDFmLCAweGFkLCAweDJlLCAweDZiLCAweGZlLCAweDA2LCAweDZmLCAweDgzLCAweDVmLCAweDYyLCAweDlkLCAweGIyLAorCTB4NjYsIDB4YWUsIDB4OWUsIDB4NjcsIDB4MjYsIDB4YWEsIDB4NzksIDB4NDYsIDB4ZGMsIDB4MDMsIDB4NWUsIDB4YzksCisJMHhkNCwgMHhkNSwgMHhmYSwgMHgyMiwgMHg1ZiwgMHgxMSwgMHhiOSwgMHg3YSwgMHg0MSwgMHg2YSwgMHg0MiwgMHhkZSwKKwkweGEyLCAweDExLCAweDE5LCAweDNlLCAweGVhLCAweDA3LCAweDg2LCAweGNlLCAweGIxLCAweGNkLCAweGU1LCAweDM5LAorCTB4YjMsIDB4OTEsIDB4ZTcsIDB4ZDQsIDB4YzcsIDB4NzgsIDB4YjgsIDB4NDMsIDB4ZTAsIDB4ZGYsIDB4YjgsIDB4MWQsCisJMHgwOCwgMHg0ZiwgMHg1MCwgMHhlOSwgMHg2OSwgMHhjMywgMHhjNiwgMHg1ZSwgMHg4ZiwgMHg0OSwgMHg3ZSwgMHg5ZSwKKwkweGExLCAweGUyLCAweDRkLCAweGJiLCAweDVjLCAweGZjLCAweDU3LCAweDhiLCAweDc1LCAweGIxLCAweDk2LCAweGZjLAorCTB4MTAsIDB4ZjcsIDB4MTksIDB4NzYsIDB4YjgsIDB4YjIsIDB4NWUsIDB4NDMsIDB4ZTUsIDB4ZjUsIDB4OWEsIDB4NTYsCisJMHgxZSwgMHhiNywgMHg5NCwgMHhiZCwgMHgxOSwgMHg5YiwgMHhkYiwgMHgxNSwgMHhmZiwgMHg2ZiwgMHg0MCwgMHg3NSwKKwkweGViLCAweDQxLCAweDczLCAweDdmLCAweDQwLCAweGYxLCAweDI1LCAweGEwLCAweDc5LCAweDY3LCAweDE5LCAweDg2LAorCTB4NDMsIDB4M2QsIDB4YTAsIDB4M2MsIDB4MGEsIDB4MWEsIDB4MGYsIDB4NDEsIDB4Y2MsIDB4ZjUsIDB4MWUsIDB4NWEsCisJMHgwMywgMHgxMiwgMHgwNywgMHg4ZCwgMHg4OSwgMHgyMCwgMHhlNiwgMHg3YSwgMHgwZiwgMHg0MSwgMHhlNywgMHg3YSwKKwkweDBmLCAweGFkLCAweGIxLCAweDAxLCAweDk3LCAweGRiLCAweGNkLCAweDUzLCAweDgwLCAweGUxLCAweDNlLCAweDg1LAorCTB4MTksIDB4YmEsIDB4Y2UsIDB4NTEsIDB4MGQsIDB4N2EsIDB4NzcsIDB4NTIsIDB4MGMsIDB4NzgsIDB4NGMsIDB4NWIsCisJMHg1MCwgMHgwNSwgMHg3ZiwgMHgxOCwgMHhiYSwgMHg2MiwgMHg4NCwgMHhhMSwgMHgwZCwgMHhiOCwgMHg5ZCwgMHhlNSwKKwkweDAyLCAweDM0LCAweGQzLCAweDc5LCAweDRhLCAweDBjLCAweDMwLCAweDNjLCAweDIzLCAweDgwLCAweDc5LCAweDRmLAorCTB4MTgsIDB4OWEsIDB4ZjcsIDB4NjAsIDB4NzMsIDB4YzcsIDB4ZmMsIDB4MGMsIDB4OTAsIDB4N2IsIDB4OTgsIDB4NmMsCisJMHhjMCwgMHg3ZCwgMHgwYiwgMHg0OCwgMHg3OSwgMHgyNSwgMHg4MywgMHg1NiwgMHg1ZSwgMHgwMSwgMHhkMywgMHg4NCwKKwkweDNhLCAweDQ0LCAweDdmLCAweGQzLCAweDdhLCAweDBkLCAweDc5LCAweGQ4LCAweDM4LCAweDYwLCAweDEzLCAweGQwLAorCTB4ZGMsIDB4ZTYsIDB4MjksIDB4YTQsIDB4Y2MsIDB4M2QsIDB4MDMsIDB4ZWIsIDB4NWIsIDB4YWMsIDB4NmIsIDB4MWIsCisJMHg2ZCwgMHhjMCwgMHg3YiwgMHhhYywgMHgxNywgMHg0ZCwgMHg2MSwgMHg2MSwgMHg1OCwgMHhkMiwgMHhjMywgMHgwMCwKKwkweGFjLCAweDFmLCAweDQwLCAweDY5LCAweDFkLCAweDU0LCAweDQ3LCAweGMwLCAweGQzLCAweGJiLCAweDQwLCAweDEzLAorCTB4ZDAsIDB4N2QsIDB4NGUsIDB4YzAsIDB4YjYsIDB4YTgsIDB4NzMsIDB4YmYsIDB4MzIsIDB4NzgsIDB4YWQsIDB4NmMsCisJMHgwMywgMHhmNCwgMHhmYywgMHhhYSwgMHg0NSwgMHgzZCwgMHhkZSwgMHhmMiwgMHhhMCwgMHg3YywgMHhlNiwgMHhhNCwKKwkweGMyLCAweDQwLCAweDQ2LCAweDVlLCAweDYwLCAweDgzLCAweGU2LCAweDA1LCAweDcwLCAweDM4LCAweDAxLCAweGQzLAorCTB4M2EsIDB4YjAsIDB4OGMsIDB4NWEsIDB4OTMsIDB4MDQsIDB4MzQsIDB4OGYsIDB4ODcsIDB4YzUsIDB4YTUsIDB4MWYsCisJMHgyNCwgMHhjNiwgMHgwMCwgMHgxNSwgMHg2MywgMHgwMSwgMHhmMiwgMHg2NSwgMHg4MCwgMHg2ZCwgMHg0YSwgMHg5MCwKKwkweDVmLCAweDQxLCAweDc5LCAweDAxLCAweDY0LCAweDM2LCAweGM4LCAweGVmLCAweGEwLCAweGIyLCAweDEzLCAweDk0LAorCTB4MTcsIDB4ODEsIDB4ZWMsIDB4MjUsIDB4NDIsIDB4NTAsIDB4M2YsIDB4MDMsIDB4NjksIDB4MjAsIDB4YmIsIDB4NzksCisJMHg4YSwgMHgwOCwgMHg5OCwgMHg5ZiwgMHgxNCwgMHgyMCwgMHhjNCwgMHhkMCwgMHgwMCwgMHhjZiwgMHgwNywgMHhjNCwKKwkweDg2LCAweDMxLCAweDRjLCAweDdkLCAweDBjLCAweDE5LCAweGY5LCAweDA2LCAweDYyLCAweDA2LCAweDIyLCAweGRmLAorCTB4YjAsIDB4MzMsIDB4MWMsIDB4MTAsIDB4ODAsIDB4ODUsIDB4ZDUsIDB4ZmYsIDB4ZmYsIDB4YzcsIDB4NTQsIDB4NTgsCisJMHg4MCwgMHhlOSwgMHgxNCwgMHhiNCwgMHg4ZSwgMHhmNSwgMHhmNywgMHhmZiwgMHgwMywgMHgyMiwgMHgyYywgMHgwYywKKwkweDJkLCAweGYwLCAweGY1LCAweDg4LCAweDBiLCAweGU1LCAweDQxLCAweDY1LCAweGU4LCAweDAyLCAweDIwLCAweGFiLAorCTB4MGQsIDB4ZGUsIDB4MjYsIDB4NjAsIDB4MDEsIDB4ZGYsIDB4NjEsIDB4YmQsIDB4ODAsIDB4ZTEsIDB4MTcsIDB4YjAsCisJMHhjYywgMHhmYSwgMHhmZiwgMHg3ZiwgMHgyOSwgMHg1YywgMHgyZCwgMHgwOCwgMHgwMCwgMHgwMCwgMHhmZiwgMHg4OCwKKwkweDc4LCAweGI1LCAweDk4LCAweDdlLCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9DT01fYjA5RndEYXRhWygweDAvNCkgKyAxXSA9IHsgMHgwIH07CiBzdGF0aWMgY29uc3QgdTMyIGJueDJfQ09NX2IwOUZ3Um9kYXRhWygweDg4LzQpICsgMV0gPSB7Ci0JMHgwODAwMWI2OCwgMHgwODAwMWJhNCwgMHgwODAwMWJhNCwgMHgwODAwMWJhNCwgMHgwODAwMWJhNCwgMHgwODAwMWJhNCwKLQkweDA4MDAxYWI0LCAweDA4MDAxYmE0LCAweDA4MDAxYjI4LCAweDA4MDAxYmE0LCAweDA4MDAxYTNjLCAweDA4MDAxYmE0LAotCTB4MDgwMDFiYTQsIDB4MDgwMDFiYTQsIDB4MDgwMDFhNDgsIDB4MDAwMDAwMDAsIDB4MDgwMDJhYmMsIDB4MDgwMDJiMGMsCi0JMHgwODAwMmIzYywgMHgwODAwMmI2YywgMHgwODAwMmI5YywgMHgwMDAwMDAwMCwgMHgwODAwNjA0YywgMHgwODAwNjA0YywKLQkweDA4MDA2MDRjLCAweDA4MDA2MDRjLCAweDA4MDA2MDRjLCAweDA4MDA2MDc4LCAweDA4MDA2MDc4LCAweDA4MDA2MGI4LAotCTB4MDgwMDYwYzQsIDB4MDgwMDYwYzQsIDB4MDgwMDYwNGMsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfTsKKwkweDA4MDAxYjdjLCAweDA4MDAxYmI4LCAweDA4MDAxYmI4LCAweDA4MDAxYmI4LCAweDA4MDAxYmI4LCAweDA4MDAxYmI4LAorCTB4MDgwMDFhYzgsIDB4MDgwMDFiYjgsIDB4MDgwMDFiM2MsIDB4MDgwMDFiYjgsIDB4MDgwMDFhNTAsIDB4MDgwMDFiYjgsCisJMHgwODAwMWJiOCwgMHgwODAwMWJiOCwgMHgwODAwMWE1YywgMHgwMDAwMDAwMCwgMHgwODAwMmI3NCwgMHgwODAwMmJjNCwKKwkweDA4MDAyYmY0LCAweDA4MDAyYzI0LCAweDA4MDAyYzU4LCAweDAwMDAwMDAwLCAweDA4MDA2MTIwLCAweDA4MDA2MTIwLAorCTB4MDgwMDYxMjAsIDB4MDgwMDYxMjAsIDB4MDgwMDYxMjAsIDB4MDgwMDYxNGMsIDB4MDgwMDYxNGMsIDB4MDgwMDYxOGMsCisJMHgwODAwNjE5OCwgMHgwODAwNjE5OCwgMHgwODAwNjEyMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9OwogCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml9jb21fZndfMDkgPSB7CisJLyogRmlybXdhcmUgdmVyc2lvbjogIDMuNy4xICovCiAJLnZlcl9tYWpvcgkJCT0gMHgzLAotCS52ZXJfbWlub3IJCQk9IDB4NCwKLQkudmVyX2ZpeAkJCT0gMHgzLAorCS52ZXJfbWlub3IJCQk9IDB4NywKKwkudmVyX2ZpeAkJCT0gMHgxLAogCiAJLnN0YXJ0X2FkZHIJCQk9IDB4MDgwMDAwYjQsCiAKIAkudGV4dF9hZGRyCQkJPSAweDA4MDAwMDAwLAotCS50ZXh0X2xlbgkJCT0gMHg3ZGMwLAorCS50ZXh0X2xlbgkJCT0gMHg3ZTk0LAogCS50ZXh0X2luZGV4CQkJPSAweDAsCiAJLmd6X3RleHQJCQk9IGJueDJfQ09NX2IwOUZ3VGV4dCwKIAkuZ3pfdGV4dF9sZW4JCQk9IHNpemVvZihibngyX0NPTV9iMDlGd1RleHQpLAogCi0JLmRhdGFfYWRkcgkJCT0gMHgwODAwN2U2MCwKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDA3ZjQwLAogCS5kYXRhX2xlbgkJCT0gMHgwLAogCS5kYXRhX2luZGV4CQkJPSAweDAsCiAJLmRhdGEJCQkJPSBibngyX0NPTV9iMDlGd0RhdGEsCiAKLQkuc2Jzc19hZGRyCQkJPSAweDA4MDA3ZTYwLAorCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDdmNDAsCiAJLnNic3NfbGVuCQkJPSAweDYwLAogCS5zYnNzX2luZGV4CQkJPSAweDAsCiAKLQkuYnNzX2FkZHIJCQk9IDB4MDgwMDdlYzAsCisJLmJzc19hZGRyCQkJPSAweDA4MDA3ZmEwLAogCS5ic3NfbGVuCQkJPSAweDg4LAogCS5ic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwN2RjMCwKKwkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDdlOTgsCiAJLnJvZGF0YV9sZW4JCQk9IDB4ODgsCiAJLnJvZGF0YV9pbmRleAkJCT0gMHgwLAogCS5yb2RhdGEJCQkJPSBibngyX0NPTV9iMDlGd1JvZGF0YSwKIH07CiAKIHN0YXRpYyB1OCBibngyX0NQX2IwOUZ3VGV4dFtdID0gewotLyoJMHgxZiwgMHg4YiwgMHgwOCwgMHgwMCwgMHgwZiwgMHgzNCwgMHhlNywgMHg0NSwgMHgwMCwgMHgwMywgKi8KLQkJCQkJCQkJICAgIDB4YmQsIDB4N2QsCi0JMHgwZCwgMHg3NCwgMHg1YywgMHg1NywgMHg3ZCwgMHhlNywgMHhmZiwgMHhkZCwgMHgxOSwgMHg0OSwgMHg2MywgMHg1OSwKLQkweDk2LCAweDlmLCAweGU1LCAweDg5LCAweDMyLCAweDUxLCAweDg0LCAweDNkLCAweDIzLCAweDNkLCAweGQ5LCAweDIyLAotCTB4MTIsIDB4ZTEsIDB4YzUsIDB4MTEsIDB4YWMsIDB4ZGEsIDB4MmEsIDB4ZTksIDB4MzAsIDB4OTIsIDB4M2YsIDB4MTIsCi0JMHgwMiwgMHhhYiwgMHgxMCwgMHg0MywgMHhiMywgMHgxYywgMHg0YSwgMHhjNSwgMHg0OCwgMHg0ZSwgMHgwMiwgMHgwNCwKLQkweGVhLCAweDQwLCAweGU4LCAweDg2LCAweGRkLCAweGVjLCAweDY2LCAweDMyLCAweDkyLCAweDNmLCAweDlhLCAweDhlLAotCTB4M2QsIDB4OTMsIDB4NDQsIDB4ODksIDB4YmQsIDB4ZGQsIDB4OWMsIDB4YWQsIDB4OTAsIDB4MTQsIDB4M2IsIDB4NzQsCi0JMHgwNywgMHg0ZiwgMHhlMiwgMHg5OCwgMHg5NiwgMHg3MywgMHgwYSwgMHg4ZCwgMHg1MCwgMHg4YywgMHg5YiwgMHhlNiwKLQkweGIwLCAweGRkLCAweGQwLCAweGE2LCAweDM0LCAweGRiLCAweDg2LCAweDIyLCAweDhjLCAweDgxLCAweGY0LCAweDJjLAotCTB4ZGQsIDB4ODYsIDB4NDIsIDB4NzcsIDB4ZDMsIDB4MzYsIDB4ZTUsIDB4ZWQsIDB4ZWYsIDB4NzcsIDB4ZWYsIDB4N2QsCi0JMHg5YSwgMHg5MSwgMHgzNCwgMHhjZSwgMHgwNywgMHhkZCwgMHhhZCwgMHhjZiwgMHg3OSwgMHg3ZSwgMHhmMywgMHhlZSwKLQkweGJiLCAweDFmLCAweGZmLCAweGZiLCAweGJmLCAweGZmLCAweGVmLCAweGZiLCAweGJmLCAweDRmLCAweDk3LCAweDhiLAotCTB4MzQsIDB4OGIsIDB4ZmQsIDB4YjcsIDB4MDEsIDB4ZDcsIDB4ZDUsIDB4YzksIDB4ZmQsIDB4ZTMsIDB4NTcsIDB4NWYsCi0JMHgzOSwgMHg3MCwgMHgyNSwgMHg5ZiwgMHhhMywgMHg5MSwgMHg2OCwgMHg0NCwgMHhkZSwgMHhjNCwgMHhiZiwgMHhlNCwKLQkweDFiLCAweGE4LCAweDgzLCAweDBlLCAweGRkLCAweDcwLCAweDJjLCAweDVlLCAweDEyLCAweDUzLCAweDQzLCAweGRlLAotCTB4ZmUsIDB4OGMsIDB4MjcsIDB4YjEsIDB4YzgsIDB4NTAsIDB4ZWUsIDB4Y2UsIDB4NzEsIDB4NGYsIDB4MjQsIDB4NWQsCi0JMHhlZSwgMHg0YiwgMHgwZSwgMHhjYiwgMHgzZiwgMHgwNSwgMHhiOSwgMHg3OCwgMHg1NCwgMHg1OCwgMHhmZSwgMHg5NiwKLQkweGExLCAweDU3LCAweDdmLCAweGViLCAweDJiLCAweGZmLCAweDJhLCAweGY1LCAweGYyLCAweDRjLCAweDQ0LCAweDYyLAotCTB4ZWUsIDB4ZDAsIDB4ZWQsIDB4ZTIsIDB4NmUsIDB4OTMsIDB4NTgsIDB4ZTcsIDB4NTAsIDB4NzIsIDB4ZmYsIDB4MjMsCi0JMHhkYiwgMHg5NywgMHg0NCwgMHg1YSwgMHhjMywgMHhiZSwgMHg1ZSwgMHgwYSwgMHhiZSwgMHhiMiwgMHg1ZCwgMHg3MiwKLQkweDFkLCAweDQzLCAweDg5LCAweGIxLCAweDg2LCAweDIxLCAweDU3LCAweDllLCAweGFhLCAweGM4LCAweGU4LCAweDg5LAotCTB4YzIsIDB4Y2IsIDB4NDEsIDB4NzQsIDB4MjgsIDB4ODgsIDB4NGMsIDB4MGQsIDB4MzgsIDB4MTIsIDB4MTksIDB4OTIsCi0JMHhiMywgMHhlMywgMHgwMywgMHhmNywgMHgwNCwgMHhjYSwgMHhmMywgMHhmYywgMHg0NSwgMHg2OSwgMHgxOSwgMHgzYywKLQkweDM3LCAweDgwLCAweGY3LCAweDY1LCAweDQxLCAweGRkLCAweGJkLCAweGQ3LCAweDljLCAweDI4LCAweGM0LCAweDQ0LAotCTB4MGQsIDB4ZjUsIDB4YmMsIDB4OTAsIDB4ODksIDB4NWMsIDB4MjUsIDB4N2MsIDB4N2YsIDB4NTYsIDB4N2EsIDB4ZmMsCi0JMHhhNywgMHgwNSwgMHhlNSwgMHhlNSwgMHg5OCwgMHg2NCwgMHgyYSwgMHhkMiwgMHg4MiwgMHgzMiwgMHhkYywgMHg5YiwKLQkweDUxLCAweDI3LCAweGU1LCAweDY2LCAweDIyLCAweGFlLCAweGU0LCAweDJiLCAweDNmLCAweDVlLCAweDY3LCAweGM2LAotCTB4OWQsIDB4YjMsIDB4ZjcsIDB4YmYsIDB4OGUsIDB4OTksIDB4M2IsIDB4YzYsIDB4MmQsIDB4YzYsIDB4NjQsIDB4MjksCi0JMHg5MiwgMHgxMCwgMHhjMCwgMHg4MiwgMHg3OSwgMHgyNSwgMHg2NCwgMHhiMiwgMHg5OCwgMHg5NCwgMHg0YywgMHg4MSwKLQkweGIwLCAweDQ1LCAweDI1LCAweGViLCAweDEyLCAweGFlLCAweDA0LCAweGRhLCAweGI3LCAweDM5LCAweGY1LCAweGViLAotCTB4YjMsIDB4ZWUsIDB4MGIsIDB4YTgsIDB4OWIsIDB4NDQsIDB4YmQsIDB4NGUsIDB4NzksIDB4MTIsIDB4NzUsIDB4NGYsCi0JMHg1NywgMHhlMiwgMHhmMiwgMHg0NCwgMHhlNSwgMHg1NywgMHgyNSwgMHg4ZCwgMHhiNiwgMHg4ZiwgMHg1NywgMHgzMCwKLQkweDc2LCAweGIxLCAweDUxLCAweDg2LCAweGE3LCAweDliLCAweDI1LCAweDMzLCAweGRkLCAweDlkLCAweGM4LCAweDRhLAotCTB4MTAsIDB4N2MsIDB4ZGEsIDB4ZmYsIDB4YTgsIDB4OGMsIDB4YjUsIDB4YTEsIDB4N2UsIDB4OTEsIDB4ZWYsIDB4MTIsCi0JMHgyYiwgMHhkZSwgMHg2NSwgMHhmZCwgMHgzZSwgMHgzNywgMHhhYiwgMHgxYywgMHg0OSwgMHhlZiwgMHg0ZCwgMHgyNSwKLQkweGM2LCAweDE0LCAweDlmLCAweDFiLCAweDI0LCAweGQzLCAweDhmLCAweGU3LCAweGQxLCAweGE4LCAweDQ0LCAweGJjLAotCTB4MjAsIDB4YjgsIDB4YzMsIDB4YmYsIDB4MGMsIDB4NzAsIDB4YTQsIDB4OTIsIDB4NDksIDB4YzUsIDB4YjYsIDB4NmMsCi0JMHg5NywgMHhjYSwgMHgyNSwgMHg1NSwgMHg1YywgMHg3MiwgMHg5NSwgMHgyYiwgMHgyNSwgMHhkOSwgMHgxNiwgMHgwNCwKLQkweGVmLCAweGYzLCAweDNiLCAweDUxLCAweDJlLCAweDMyLCAweDVjLCAweDkwLCAweGZkLCAweDU4LCAweDIzLCAweGY0LAotCTB4MjksIDB4YmUsIDB4MWEsIDB4ZGEsIDB4OGMsIDB4NzksIDB4ZjQsIDB4YjksIDB4YzMsIDB4ZDIsIDB4MjgsIDB4ZTksCi0JMHhiOCwgMHhhNCwgMHhkNSwgMHg5MCwgMHgyNCwgMHhkNSwgMHhkMCwgMHgzYSwgMHg5NCwgMHgzOSwgMHhkMiwgMHhlMCwKLQkweDdkLCAweGMxLCAweGQyLCAweGQyLCAweDQ2LCAweDNjLCAweGNiLCAweGE4LCAweDFhLCAweDZhLCAweDViLCAweDU1LAotCTB4OWUsIDB4NGEsIDB4OGEsIDB4NWEsIDB4MDcsIDB4NWMsIDB4YTUsIDB4N2EsIDB4ZDMsIDB4OGEsIDB4NjUsIDB4YjgsCi0JMHhlYiwgMHhiMiwgMHgwZiwgMHgzNiwgMHhhZCwgMHgyZCwgMHhkYiwgMHhlZiwgMHhhYywgMHgyYywgMHhiYiwgMHhiZCwKLQkweDg1LCAweGIwLCAweDhhLCAweGUyLCAweGVmLCAweGI4LCAweDllLCAweDZiLCAweDNhLCAweGRlLCAweGVkLCAweDM2LAotCTB4NjAsIDB4NWUsIDB4YTMsIDB4N2UsIDB4Y2EsIDB4ZGQsIDB4YTksIDB4OWUsIDB4MGYsIDB4YTQsIDB4OWQsIDB4MzAsCi0JMHhmMywgMHg5ZCwgMHhjMiwgMHgzYiwgMHg1NCwgMHgxZCwgMHhmMiwgMHhiMSwgMHg2ZSwgMHhhZSwgMHgxYywgMHhjMiwKLQkweGRjLCAweGNlLCAweDRmLCAweGE3LCAweGRjLCAweDJlLCAweDg1LCAweGZiLCAweDNjLCAweDdmLCAweDA3LCAweDQxLAotCTB4YzYsIDB4Y2YsIDB4ZTksIDB4MzUsIDB4ZmQsIDB4ZWUsIDB4NzQsIDB4MDIsIDB4Y2YsIDB4ODAsIDB4M2YsIDB4OWUsCi0JMHg0ZSwgMHg2ZCwgMHg5MiwgMHhhYiwgMHhlZCwgMHhiYSwgMHg3YywgMHgxMywgMHg2MywgMHg3NiwgMHhiYiwgMHg3NywKLQkweGE4LCAweDZlLCAweGQ3LCAweDU3LCAweDI5LCAweDc3LCAweDU2LCAweGNlLCAweGUwLCAweDM5LCAweDA4LCAweDZlLAotCTB4ZjQsIDB4NTMsIDB4ODksIDB4MWMsIDB4ZDYsIDB4ZWMsIDB4NDIsIDB4MjEsIDB4MmUsIDB4ZGYsIDB4MmIsIDB4YTQsCi0JMHg0MCwgMHhjNSwgMHhhOSwgMHhkZSwgMHgzOSwgMHhlOSwgMHhmMywgMHhlNywgMHgwMCwgMHg2ZiwgMHgxZSwgMHhkNywKLQkweDQxLCAweGJlLCAweDJiLCAweGUzLCAweDVkLCAweDk5LCAweDZkLCAweDgzLCAweGUwLCAweDI2LCAweGZmLCAweDM3LAotCTB4ODMsIDB4YjEsIDB4NzYsIDB4YzMsIDB4MTcsIDB4NGYsIDB4MTUsIDB4YjEsIDB4OWUsIDB4ODAsIDB4ZjksIDB4NzQsCi0JMHgxMSwgMHhlYiwgMHg4OSwgMHhiNSwgMHg3YSwgMHg1YywgMHhhZiwgMHg3YiwgMHgyZiwgMHhkNiwgMHg5ZCwgMHhiNCwKLQkweDQxLCAweGJhLCAweGQ4LCAweDYxLCAweDY5LCAweGY5LCAweDAzLCAweGY2LCAweDJlLCAweDkyLCAweDI5LCAweDNhLAotCTB4OTIsIDB4ZjEsIDB4ZmYsIDB4MzEsIDB4NDgsIDB4NmIsIDB4N2UsIDB4MTEsIDB4NjcsIDB4YjgsIDB4NDgsIDB4NWEsCi0JMHg2YywgMHgwMCwgMHhhYywgMHg3YywgMHhjYywgMHhkYSwgMHg3YSwgMHgxYiwgMHgxZCwgMHhlMCwgMHg5NiwgMHhlYiwKLQkweGMwLCAweGY3LCAweDMxLCAweGU1LCAweDM1LCAweGQ5LCAweGY3LCAweDIxLCAweDVmLCAweGYwLCAweGRmLCAweDI2LAotCTB4NDcsIDB4YmMsIDB4NmEsIDB4YmQsIDB4MGMsIDB4NjksIDB4YjIsIDB4OTIsIDB4OTMsIDB4ZWMsIDB4ODMsIDB4ODEsCi0JMHgwYywgMHhmYiwgMHhjMCwgMHgxMywgMHhmYiwgMHg3NCwgMHg3ZCwgMHhkMSwgMHg2ZCwgMHg1ZCwgMHhkNiwgMHhkMSwKLQkweDc1LCAweGYxLCAweDZmLCAweDdkLCAweDIzLCAweGM2LCAweDcwLCAweDQ2LCAweDhhLCAweGQ1LCAweGI2LCAweDIzLAotCTB4YzUsIDB4ZmMsIDB4NjYsIDB4MGIsIDB4MWYsIDB4OWUsIDB4MDcsIDB4OWQsIDB4NGMsIDB4ZTUsIDB4ODIsIDB4NWQsCi0JMHhkYiwgMHg3MCwgMHgxZSwgMHg1NywgMHhkNywgMHhhMSwgMHg2ZCwgMHgxNywgMHg3YywgMHhlMCwgMHg0YSwgMHhiNiwKLQkweDMwLCAweDg4LCAweDcxLCAweGUzLCAweGI4LCAweDA3LCAweGMxLCAweDk0LCAweDlmLCAweDRlLCAweDQ1LCAweDY1LAotCTB4MDgsIDB4Y2YsIDB4YTMsIDB4ZTQsIDB4M2QsIDB4ZTAsIDB4NGYsIDB4YTIsIDB4OTksIDB4ZWQsIDB4YmUsIDB4OGMsCi0JMHg4MCwgMHhlZSwgMHhmMywgMHg5NSwgMHhkNywgMHg5NywgMHgyMiwgMHg3YSwgMHgwZSwgMHhmZSwgMHgzZiwgMHg1OSwKLQkweGRjLCAweDcwLCAweDFjLCAweDMzLCAweGU2LCAweDU0LCAweGIxLCAweDQzLCAweGYyLCAweGQzLCAweDllLCAweDRjLAotCTB4MTYsIDB4MTYsIDB4N2EsIDB4OTUsIDB4YmMsIDB4NGMsIDB4N2UsIDB4YzcsIDB4ZmEsIDB4YTUsIDB4NDAsIDB4YmIsCi0JMHg0MywgMHgzMiwgMHg1YywgMHhmMSwgMHgyNCwgMHg1ZiwgMHhjMCwgMHhiZCwgMHhkOCwgMHgwZCwgMHhmYSwgMHg4ZCwKLQkweDRhLCAweDNhLCAweDYxLCAweGQ2LCAweDI2LCAweDVmLCAweDE4LCAweGMxLCAweGZjLCAweDgwLCAweDZiLCAweDhmLAotCTB4YmYsIDB4MDcsIDB4MmQsIDB4NGMsIDB4YWUsIDB4NjQsIDB4MDYsIDB4NDgsIDB4M2YsIDB4NmYsIDB4MDYsIDB4OTYsCi0JMHg5OCwgMHhjYywgMHhmYSwgMHhlMCwgMHgwYiwgMHhkNywgMHhjMCwgMHg5MiwgMHgyZiwgMHhjNiwgMHhhMiwgMHhjMywKLQkweDk4LCAweGY3LCAweDcwLCAweGY5LCAweDU3LCAweGQwLCAweDdmLCAweDhiLCAweGZlLCAweDBkLCAweDdlLCAweGIyLAotCTB4NjUsIDB4NTEsIDB4ZGMsIDB4ZTMsIDB4YjgsIDB4MTMsIDB4ZTYsIDB4OTAsIDB4NTYsIDB4MjEsIDB4MWIsIDB4YTYsCi0JMHgzYiwgMHg2NSwgMHgxMiwgMHhiNCwgMHgzYSwgMHgyYywgMHhmOCwgMHgzZCwgMHhjZiwgMHhiOSwgMHgxMCwgMHhhZSwKLQkweDBlLCAweGZkLCAweDdiLCAweDcyLCAweDdhLCAweDhiLCAweDdlLCAweGNlLCAweDhlLCAweDc2LCAweDQ4LCAweDZlLAotCTB4M2UsIDB4OWMsIDB4MzMsIDB4ZTUsIDB4MDUsIDB4NjUsIDB4NDQsIDB4ZWEsIDB4YjAsIDB4MDgsIDB4NjUsIDB4NDYsCi0JMHgxMCwgMHgzYywgMHhlOCwgMHg1MywgMHg2ZSwgMHgwNCwgMHhjMSwgMHg2OSwgMHg5ZiwgMHg3MiwgMHhlNCwgMHgwYywKLQkweGU0LCAweDAzLCAweDY1LCAweDA3LCAweDc5LCAweGQ5LCAweDUzLCAweDVjLCAweGFiLCAweDRjLCAweGExLCAweDE3LAotCTB4ZWIsIDB4ZDEsIDB4MjgsIDB4ZDksIDB4ZmUsIDB4ZTMsIDB4ODQsIDB4MTUsIDB4NzIsIDB4ZTcsIDB4YTUsIDB4NGYsCi0JMHg2NiwgMHhiYywgMHg1YywgMHgyMiwgMHhhMiwgMHhmMSwgMHgwNCwgMHhjYSwgMHg4MiwgMHgzYywgMHg0YywgMHhlYiwKLQkweDk5LCAweDc1LCAweDQ5LCAweGJlLCAweGJmLCAweDY0LCAweGViLCAweGM4LCAweGFmLCAweGIyLCAweDRlLCAweDc0LAotCTB4NGQsIDB4OWQsIDB4N2YsIDB4YTcsIDB4MGMsIDB4NWYsIDB4ZjYsIDB4NjIsIDB4ZGQsIDB4M2EsIDB4MTQsIDB4ZjEsCi0JMHhkOCwgMHhiNSwgMHg4ZCwgMHhjZiwgMHgxMiwgMHg2YiwgMHgxOCwgMHhmYSwgMHgzZCwgMHhiYywgMHg3YiwgMHhlZSwKLQkweDUzLCAweDhmLCAweDdhLCAweGY1LCAweGRlLCAweGZkLCAweDI4LCAweGJhLCAweGY2LCAweGRkLCAweDk0LCAweDQ0LAotCTB4YmQsIDB4NTQsIDB4ZWYsIDB4OGQsIDB4ZWEsIDB4NGYsIDB4MWEsIDB4YTQsIDB4MzUsIDB4MDgsIDB4MWUsIDB4ZjUsCi0JMHhjMywgMHhmMiwgMHhjNiwgMHg4NiwgMHhiNSwgMHg2MywgMHg1YywgMHg1NSwgMHhhNywgMHhlYywgMHg2OCwgMHg5ZCwKLQkweGIyLCAweGNmLCAweGQ3LCAweDI5LCAweDdiLCAweDdiLCAweGUzLCAweGRhLCAweGIyLCAweGRiLCAweGViLCAweDk0LAotCTB4Y2QsIDB4ZDYsIDB4MjksIDB4ZmIsIDB4NjksIDB4OWQsIDB4MzIsIDB4NjksIDB4NWEsIDB4NWIsIDB4MTYsIDB4YTksCi0JMHg1MywgMHhkNiwgMHg1NywgMHhhNywgMHgyYywgMHgwYSwgMHhiZSwgMHhkYiwgMHgyNiwgMHhmOSwgMHhmOCwgMHhiZCwKLQkweDljLCAweGJiLCAweGM1LCAweDRkLCAweDI5LCAweGIyLCAweDE2LCAweDM3LCAweDBkLCAweGE4LCAweGQ3LCAweGI5LAotCTB4YWEsIDB4ZGUsIDB4MTcsIDB4ZWIsIDB4ZDQsIDB4NmIsIDB4NDQsIDB4YmQsIDB4YjYsIDB4NTUsIDB4ZjUsIDB4NzYsCi0JMHhkNCwgMHhjMSwgMHg3NSwgMHgxMywgMHhlYSwgMHhjNSwgMHg1NiwgMHhkNSwgMHg3YiwgMHhiMCwgMHg0ZSwgMHgzZCwKLQkweDk2LCAweDdmLCAweGM2LCAweDhlLCAweGQzLCAweDA3LCAweDJkLCAweGY0LCAweDVhLCAweGViLCAweGQ1LCAweDI4LAotCTB4ZDIsIDB4Y2UsIDB4ZjIsIDB4NWUsIDB4ZTgsIDB4OTAsIDB4MGUsIDB4NjUsIDB4ZTQsIDB4MDIsIDB4NjUsIDB4MTAsCi0JMHhjYiwgMHgzYSwgMHg0MSwgMHhlNywgMHg3MSwgMHhkMCwgMHgxZCwgMHhlNSwgMHgyOCwgMHhmOCwgMHg4YywgMHg3MywKLQkweGE5LCAweDZjLCAweDkwLCAweGIxLCAweDc4LCAweDlmLCAweDdiLCAweGI1LCAweDZhLCAweDAxLCAweDhkLCAweGE1LAotCTB4ZGMsIDB4YTQsIDB4MjIsIDB4ZmYsIDB4NDksIDB4MmUsIDB4MzIsIDB4ZTQsIDB4ZTUsIDB4ODYsIDB4NDUsIDB4YzUsCi0JMHg5NSwgMHgwNCwgMHgzMiwgMHhlMiwgMHhhYiwgMHgzNiwgMHgyNSwgMHhmNywgMHg4MCwgMHhiZiwgMHhkMiwgMHhkMCwKLQkweDU5LCAweDM3LCAweDA2LCAweGMzLCAweDlhLCAweGI3LCAweDRjLCAweGRkLCAweDhiLCAweGNiLCAweDU0LCAweDVmLAotCTB4MGUsIDB4NTIsIDB4MTYsIDB4MGUsIDB4OGQsIDB4N2UsIDB4MmEsIDB4ZTMsIDB4MmQsIDB4MGMsIDB4MzYsIDB4ODIsCi0JMHg2NiwgMHhjZiwgMHhhMywgMHhjZCwgMHg2ZSwgMHhiNCwgMHhkYywgMHg1NywgMHg4ZSwgMHhjYSwgMHg0OCwgMHg3OSwKLQkweDAwLCAweGJjLCAweGUwLCAweGM4LCAweDM5LCAweDZmLCAweGEzLCAweDljLCAweGYzLCAweDUxLCAweGI3LCAweDEyLAotCTB4OTEsIDB4YzUsIDB4YjgsIDB4MjMsIDB4OGIsIDB4NzgsIDB4Y2UsIDB4ZjgsIDB4NzgsIDB4NTcsIDB4MDksIDB4NzksCi0JMHg2YiwgMHg0MCwgMHgwZSwgMHgxNCwgMHg3ZCwgMHgzOSwgMHg1YywgMHhiYywgMHg0MSwgMHg4NSwgMHg3YSwgMHg2ZCwKLQkweGE3LCAweGJmLCAweDVlLCAweDFlLCAweDczLCAweDRkLCAweGRmLCAweGJiLCAweGJkLCAweDA1LCAweDY4LCAweGQ0LAotCTB4YTgsIDB4OWMsIDB4ZjcsIDB4NTIsIDB4ODksIDB4NDUsIDB4Y2QsIDB4MTMsIDB4ZmYsIDB4MjcsIDB4MTgsIDB4NDEsCi0JMHgzZiwgMHhiMywgMHg1ZSwgMHhjYSwgMHhmZCwgMHgwMywgMHgzYywgMHg4ZiwgMHg5NSwgMHg2OSwgMHhjYiwgMHg1NCwKLQkweGZiLCAweDlhLCAweDQ0LCAweDVmLCAweDg3LCAweDhhLCAweDFiLCAweGU0LCAweDU2LCAweGRiLCAweDdlLCAweDk3LAotCTB4YjcsIDB4ZDAsIDB4MGIsIDB4OWUsIDB4NzMsIDB4NGYsIDB4NTAsIDB4ODYsIDB4MTQsIDB4MDAsIDB4ZDcsIDB4NWUsCi0JMHhmMCwgMHgzNiwgMHhkYSwgMHg3ZSwgMHg0ZCwgMHhjYiwgMHgzMywgMHhkOCwgMHgzZSwgMHg4NSwgMHg4ZCwgMHg5MCwKLQkweGNmLCAweDdmLCAweDE3LCAweGRjLCAweDFhLCAweDY3LCAweDdkLCAweDk2LCAweDUxLCAweGU3LCAweDQ4LCAweDQ5LAotCTB4MGQsIDB4NDEsIDB4MjYsIDB4MGMsIDB4NTAsIDB4NjYsIDB4MjYsIDB4MjEsIDB4MmYsIDB4MjEsIDB4N2IsIDB4OGEsCi0JMHgzZiwgMHgwZCwgMHhkMiwgMHhkMSwgMHg1YSwgMHgzOSwgMHgyOCwgMHhiOSwgMHg2YSwgMHgxZCwgMHg5NiwgMHgyNSwKLQkweDhkLCAweDVjLCAweDJkLCAweDJlLCAweDJkLCAweGNiLCAweDhhLCAweDFjLCAweGU0LCAweGNiLCAweDUzLCAweDE1LAotCTB4Y2EsIDB4ODUsIDB4MGYsIDB4ODIsIDB4NDcsIDB4M2IsIDB4NjUsIDB4YTQsIDB4OTAsIDB4Y2EsIDB4YTUsIDB4NjUsCi0JMHgxYiwgMHhkNiwgMHhlZiwgMHhkNywgMHhiMSwgMHhhNiwgMHg1MSwgMHg1YywgMHgwZiwgMHhhZCwgMHg5NywgMHg1NiwKLQkweDFmLCAweGJhLCAweDliLCAweGU1LCAweGU4LCAweGI0LCAweDlkLCAweDM2LCAweGQyLCAweDZmLCAweDAzLCAweDBmLAotCTB4OTMsIDB4NWMsIDB4ZjMsIDB4NDQsIDB4MjYsIDB4ZTIsIDB4OGMsIDB4ZDIsIDB4NWUsIDB4MTksIDB4ODUsIDB4N2MsCi0JMHhjYywgMHg5NiwgMHhkOSwgMHgzNywgMHhlMSwgMHg0ZCwgMHhkOCwgMHhkZiwgMHhiMCwgMHg5YiwgMHgwYSwgMHg5ZCwKLQkweGY2LCAweDc3LCAweDBiLCAweDdlLCAweDI3LCAweGVkLCAweDZmLCAweGM4LCAweGQ0LCAweDgyLCAweDY3LCAweDdmLAotCTB4YzcsIDB4YjUsIDB4MWMsIDB4MzIsIDB4YmYsIDB4MTMsIDB4ZjgsIDB4ZGQsIDB4YWYsIDB4N2YsIDB4NGYsIDB4MTUsCi0JMHg3NywgMHhlZCwgMHg1MiwgMHhkZSwgMHg5NSwgMHg5MiwgMHg5ZCwgMHhlZiwgMHg5NCwgMHgwMywgMHg4NSwgMHg3NywKLQkweDU4LCAweGQ5LCAweDgyLCAweDRiLCAweGJlLCAweGU0LCAweDk4LCAweDc5LCAweDI2LCAweGY0LCAweGJhLCAweGU3LAotCTB4OGIsIDB4MzksIDB4NjcsIDB4OTQsIDB4ZjAsIDB4ZTMsIDB4ZjcsIDB4NzAsIDB4YTEsIDB4Y2YsIDB4ZGQsIDB4MjQsCi0JMHhhNCwgMHg4MSwgMHgyOSwgMHg2NywgMHhiOCwgMHhlMiwgMHhhNCwgMHgyMywgMHg0MywgMHgzZCwgMHg4OSwgMHg0OSwKLQkweDM5LCAweDhjLCAweGRmLCAweGUyLCAweDQ2LCAweDg2LCAweGJlLCAweDg0LCAweGJiLCAweGMxLCAweGMxLCAweDU3LAotCTB4YjYsIDB4NDMsIDB4YjYsIDB4MTYsIDB4MjksIDB4MmYsIDB4M2QsIDB4Y2MsIDB4M2QsIDB4MjksIDB4NjcsIDB4NTYsCi0JMHhkOCwgMHg1OCwgMHhjNCwgMHg4NSwgMHg5MiwgMHhlYywgMHg3NCwgMHhlYSwgMHg3OCwgMHg0ZSwgMHg1MiwgMHhiOSwKLQkweDE5LCAweDMwLCAweGM0LCAweDhkLCAweDdlLCAweDU0LCAweGRlLCAweGU3LCAweDgzLCAweDc2LCAweGFmLCAweDc0LAotCTB4NjQsIDB4ZDcsIDB4OTUsIDB4NTEsIDB4ZDgsIDB4NDQsIDB4ZGUsIDB4Y2MsIDB4MmUsIDB4YzgsIDB4NTgsIDB4YzgsCi0JMHhiZSwgMHgwOCwgMHhlOSwgMHg0MSwgMHg5ZCwgMHg5MiwgMHhiMSwgMHhlOCwgMHgxMCwgMHhiMCwgMHg3ZCwgMHhhYSwKLQkweDdmLCAweDY0LCAweGIyLCAweDkwLCAweGJkLCAweDVkLCAweDBkLCAweGVkLCAweGZmLCAweDZjLCAweDY2LCAweGUwLAotCTB4YWQsIDB4OTIsIDB4ZGQsIDB4YWIsIDB4ODAsIDB4YTMsIDB4ZjYsIDB4MzEsIDB4YzgsIDB4NGMsIDB4Y2MsIDB4MmIsCi0JMHgwOCwgMHg0MCwgMHhjZiwgMHg5MCwgMHhlNywgMHgzNywgMHhkZCwgMHgxNCwgMHgxOSwgMHg2YSwgMHg5MCwgMHhlMSwKLQkweGJkLCAweGVkLCAweDY4LCAweGMzLCAweDc3LCAweGM0LCAweGQ3LCAweDc5LCAweGUwLCAweDMzLCAweDk1LCAweDFjLAotCTB4MTEsIDB4YjksIDB4N2IsIDB4NmEsIDB4NjAsIDB4YzksIDB4OTksIDB4MmMsIDB4N2QsIDB4MTAsIDB4M2MsIDB4NzksCi0JMHgxNSwgMHhkYSwgMHgzZiwgMHg4MCwgMHhmNiwgMHgyZiwgMHgzYiwgMHhmOSwgMHhlOSwgMHg1NywgMHg5YywgMHhjOSwKLQkweGU5LCAweGJmLCAweDc1LCAweGE2LCAweGE2LCAweGI3LCAweDZjLCAweGQ5LCAweDM5LCAweGI4LCAweDY1LCAweGNiLAotCTB4ZjgsIDB4NjAsIDB4ZDQsIDB4ZWEsIDB4OTcsIDB4MmQsIDB4NWIsIDB4YTYsIDB4MDYsIDB4MDcsIDB4ODEsIDB4ODMsCi0JMHgzZSwgMHg3NywgMHg0NCwgMHgzYywgMHg3NywgMHg5NywgMHg4MCwgMHg3ZiwgMHhlMiwgMHgxYywgMHg5MywgMHhmYSwKLQkweDI3LCAweDg1LCAweGY3LCAweDZjLCAweGVmLCAweGU5LCAweGY3LCAweGMzLCAweGQyLCAweDk3LCAweDY4LCAweDEzLAotCTB4OGUsIDB4MWYsIDB4YjEsIDB4NzUsIDB4ZGEsIDB4MDEsIDB4ZmIsIDB4MDMsIDB4NzYsIDB4N2QsIDB4MGIsIDB4YWEsCi0JMHhjMSwgMHg2MywgMHgzOSwgMHhlNywgMHhjMiwgMHg3MiwgMHhhZSwgMHhlZCwgMHg4ZiwgMHhhYywgMHgyZCwgMHhiYiwKLQkweDExLCAweGU1LCAweDdjLCAweDI2LCAweGNlLCAweDg4LCAweDE3LCAweGRhLCAweDIyLCAweDBkLCAweGRhLCAweDc2LAotCTB4Y2MsIDB4MTYsIDB4NDgsIDB4MzMsIDB4NTEsIDB4OTksIDB4MjgsIDB4YjQsIDB4YTEsIDB4MGQsIDB4ZTgsIDB4ZTIsCi0JMHg5NCwgMHhiZCwgMHg4ZSwgMHgwMiwgMHhiNiwgMHhiZCwgMHhlOCwgMHhlYiwgMHhlOCwgMHgyMSwgMHhiNCwgMHhhMywKLQkweGNjLCAweDQ4LCAweGY1LCAweDhhLCAweGZhLCAweDA0LCAweGVhLCAweGY0LCAweGI5LCAweDliLCAweDg1LCAweDM2LAotCTB4YzcsIDB4NzEsIDB4YzksIDB4MTYsIDB4YzksIDB4ZGYsIDB4M2QsIDB4ODAsIDB4MjcsIDB4MjYsIDB4YzksIDB4NzYsCi0JMHgzYywgMHg1NywgMHgwZSwgMHhjMCwgMHgwZSwgMHg2OSwgMHhiMCwgMHgzYSwgMHgzMywgMHg5NCwgMHgxNywgMHhmYywKLQkweDc3LCAweDg3LCAweDEyLCAweGVmLCAweDgwLCAweDhjLCAweGNkLCAweDVkLCAweDhlLCAweDdhLCAweDBlLCAweGYwLAotCTB4NDIsIDB4M2IsIDB4MDUsIDB4MzYsIDB4Y2IsIDB4NWMsIDB4NWEsIDB4MzIsIDB4ZGIsIDB4ZWUsIDB4YzUsIDB4ZGQsCi0JMHhjNSwgMHg3MywgMHgxZSwgMHhmNywgMHhiNywgMHhlMCwgMHgzZSwgMHg4OSwgMHg3YiwgMHgwOCwgMHgyNywgMHhmMCwKLQkweGVhLCAweDQ3LCAweGFjLCAweGNlLCAweGJhLCAweDA2LCAweDYzLCAweGZmLCAweDZiLCAweGM5LCAweDk0LCAweDEyLAotCTB4YjQsIDB4MzksIDB4MzYsIDB4NjYsIDB4YmMsIDB4YjQsIDB4YWIsIDB4NDQsIDB4NmQsIDB4NTYsIDB4MzIsIDB4ODUsCi0JMHhmYSwgMHhmMCwgMHgwOSwgMHhiYywgMHg4MywgMHgzMiwgMHg3ZSwgMHgxMiwgMHhiZiwgMHgxZiwgMHhhNCwgMHg0ZCwKLQkweDNjLCAweDI1LCAweGUzLCAweDczLCAweDFjLCAweGE3LCAweDAwLCAweDk4LCAweDRhLCAweDkyLCAweDNkLCAweGY5LAotCTB4MDAsIDB4YWUsIDB4NjksIDB4NWMsIDB4MGYsIDB4ZTMsIDB4ZTIsIDB4ZGMsIDB4ZDgsIDB4ZmYsIDB4ZTIsIDB4MjYsCi0JMHgwNSwgMHg1YywgMHhmMywgMHgzOSwgMHg0YiwgMHgzYSwgMHhhZSwgMHhlMCwgMHgzNywgMHg2OSwgMHhiOCwgMHg0MiwKLQkweGRiLCAweDA2LCAweGY0LCAweDViLCAweDA5LCAweGU5LCAweGRhLCAweGI3LCAweGJmLCAweDEzLCAweDlhLCAweGFmLAotCTB4NzMsIDB4NmQsIDB4YTAsIDB4OTksIDB4Y2EsIDB4YTAsIDB4OTYsIDB4MzksIDB4MTksIDB4MGYsIDB4ZjcsIDB4MGEsCi0JMHg2YywgMHg4ZiwgMHgzNiwgMHhjZSwgMHhkMSwgMHhiMywgMHg2NSwgMHg5ZSwgMHgyZSwgMHg0YiwgMHhlYSwgMHhiMiwKLQkweDdlLCAweDViLCAweDg2LCAweDdiLCAweGE1LCAweDQxLCAweGM2LCAweGRhLCAweDAxLCAweDMxLCAweGU1LCAweGIzLAotCTB4ODQsIDB4ZjgsIDB4YTQsIDB4MGMsIDB4MDAsIDB4ZmQsIDB4YzIsIDB4NjYsIDB4MzgsIDB4NzMsIDB4NTEsIDB4ZjksCi0JMHhiNywgMHhhNCwgMHg2ZCwgMHhiMSwgMHhjNywgMHgyYiwgMHhhNCwgMHg2MywgMHhkMiwgMHg3NiwgMHgxMCwgMHhkYywKLQkweGVmLCAweDM3LCAweGExLCAweDdmLCAweGYyLCAweGJjLCAweDQ4LCAweGMzLCAweGQxLCAweGE4LCAweGNjLCAweGI4LAotCTB4YTQsIDB4ODUsIDB4NzcsIDB4YjQsIDB4OTAsIDB4MDYsIDB4MWEsIDB4M2QsIDB4ZDIsIDB4NzAsIDB4MmQsIDB4N2YsCi0JMHg3MSwgMHgwZCwgMHhkOSwgMHg1ZiwgMHgwZSwgMHhmNiwgMHgxZCwgMHhlZCwgMHhiYywgMHgxZSwgMHhkOCwgMHhjZSwKLQkweDFjLCAweGUzLCAweDMwLCAweDlmLCAweDVkLCAweDA1LCAweDllLCAweGNhLCAweDJjLCAweGYzLCAweDk0LCAweGM4LAotCTB4NmMsIDB4ODEsIDB4YjgsIDB4MDksIDB4ZWQsIDB4M2YsIDB4YWUsIDB4MzMsIDB4ZjEsIDB4ZjMsIDB4MzgsIDB4ZTYsCi0JMHhjYywgMHhmYiwgMHgxOSwgMHg4YiwgMHhhNywgMHgyZiwgMHg1OSwgMHgzYywgMHg3ZCwgMHhkOSwgMHhkZSwgMHg1ZCwKLQkweDI3LCAweGFiLCAweDZkLCAweGMxLCAweDA1LCAweDNjLCAweDczLCAweDdkLCAweGEyLCAweDFhLCAweDY3LCAweGQ5LAotCTB4YzIsIDB4MGMsIDB4ZWUsIDB4YTgsIDB4NWIsIDB4N2MsIDB4NWMsIDB4YzYsIDB4YjUsIDB4OWQsIDB4MTYsIDB4OTEsCi0JMHg3NywgMHg2OSwgMHhkOSwgMHgwNiwgMHgyMSwgMHhkZCwgMHg1YywgMHgwMCwgMHhjYywgMHgwZCwgMHg5MiwgMHg4YiwKLQkweDQ3LCAweGY0LCAweGRhLCAweDQ3LCAweGJkLCAweDAzLCAweDUxLCAweDQzLCAweGFiLCAweGM0LCAweGM5LCAweDBhLAotCTB4NWYsIDB4YWEsIDB4MDYsIDB4YTYsIDB4YjgsIDB4OTUsIDB4NzMsIDB4ODQsIDB4OGIsIDB4YjQsIDB4ZmIsIDB4ODgsCi0JMHg4NiwgMHhlYiwgMHgxNiwgMHhjOCwgMHhiYiwgMHg5YywgMHhhOCwgMHhmNiwgMHg0NiwgMHhiOSwgMHgwYywgMHhiNCwKLQkweGEwLCAweGUyLCAweGQwLCAweDVjLCAweGMxLCAweGQzLCAweGIwLCAweDliLCAweGIyLCAweDczLCAweGI0LCAweGExLAotCTB4YmIsIDB4ZTgsIDB4YjcsIDB4YzQsIDB4YjIsIDB4ZmQsIDB4YWQsIDB4YTQsIDB4MjMsIDB4YTUsIDB4NjAsIDB4N2YsCi0JMHhlMSwgMHg1OSwgMHg2NSwgMHhmYiwgMHgzNSwgMHg5ZCwgMHgzYSwgMHhjYSwgMHg4YiwgMHg2YiwgMHgzYiwgMHgxOSwKLQkweGJjLCAweDEyLCAweGIxLCAweGJlLCAweDczLCAweDU0LCAweDc5LCAweDliLCAweDU3LCAweDk3LCAweDI1LCAweGE5LAotCTB4ODcsIDB4ZDEsIDB4MmUsIDB4OTksIDB4ZWQsIDB4NmYsIDB4MjcsIDB4OGYsIDB4YjksIDB4Y2EsIDB4MDMsIDB4MmUsCi0JMHgzZCwgMHhlZCwgMHgxYiwgMHhlNSwgMHhkNCwgMHhjMCwgMHhjNiwgMHg1NSwgMHhmNSwgMHhmNSwgMHhkZCwgMHhiMSwKLQkweGNmLCAweDUxLCAweDdiLCAweDc3LCAweGVkLCAweDNkLCAweDY5LCAweGVmLCAweGI5LCAweGU4LCAweDAwLCAweGVmLAotCTB4OGUsIDB4NDQsIDB4ODcsIDB4NzgsIDB4YzcsIDB4MWEsIDB4MGUsIDB4YjEsIDB4MGYsIDB4Y2QsIDB4NTcsIDB4NTYsCi0JMHhjZSwgMHhmNCwgMHhiOCwgMHg3OSwgMHgyMSwgMHg1ZiwgMHhmZCwgMHhhOSwgMHhkYywgMHgzMiwgMHg2NywgMHhlNCwKLQkweGVmLCAweDJlLCAweGM4LCAweDIwLCAweGY4LCAweDZmLCAweGVlLCAweGEyLCAweDAwLCAweGZlLCAweGJkLCAweDY1LAotCTB4YjksIDB4YTUsIDB4NDIsIDB4YmMsIDB4ZmQsIDB4MDYsIDB4ZjAsIDB4YjcsIDB4MzUsIDB4NGEsIDB4ZGUsIDB4NzQsCi0JMHg4NSwgMHg3MiwgMHhmNywgMHg0ZSwgMHhkMSwgMHhmNiwgMHg2OSwgMHg4MSwgMHgzOCwgMHgzZiwgMHgyYiwgMHg1YywKLQkweDliLCAweDdjLCAweGUxLCAweDE5LCAweGJkLCAweDM2LCAweDA3LCAweDBiLCAweDhiLCAweGMwLCAweGNmLCAweGQ3LAotCTB4NDEsIDB4ZjcsIDB4NDEsIDB4YjAsIDB4ZTgsIDB4ZTcsIDB4NDEsIDB4MzksIDB4N2YsIDB4ODQsIDB4ZGYsIDB4ZTgsCi0JMHhiYiwgMHhmMCwgMHgxYywgMHhkZSwgMHhiNywgMHg0YSwgMHhiZSwgMHg0NCwgMHg5ZSwgMHg4YiwgMHg1YSwgMHgxZSwKLQkweDNlLCAweDA1LCAweDdlLCAweGJhLCAweDBjLCAweGZkLCAweGEyLCAweDZjLCAweDgwLCAweGJmLCAweGZmLCAweDExLAotCTB4ZWYsIDB4NzAsIDB4OWYsIDB4YzMsIDB4MjIsIDB4YjYsIDB4ZDMsIDB4ZDYsIDB4ZTEsIDB4ZDgsIDB4NWMsIDB4M2IsCi0JMHhhZSwgMHg1OSwgMHg1YywgMHhmYiwgMHhhZCwgMHg4ZiwgMHgyZiwgMHhhZiwgMHgxYiwgMHhkNywgMHgyYiwgMHhkNSwKLQkweDliLCAweDkzLCAweDcwLCAweGNkLCAweDQ0LCAweDFlLCAweDJmLCAweGIwLCAweDNlLCAweGU5LCAweGZmLCAweDFmLAotCTB4NjIsIDB4NDYsIDB4MTcsIDB4ZmMsIDB4YzksIDB4M2EsIDB4NzMsIDB4NWYsIDB4ZGQsIDB4OTYsIDB4NmIsIDB4NWUsCi0JMHg0YiwgMHg4MywgMHhmNCwgMHg2ZiwgMHg1MiwgMHg4MywgMHgzOSwgMHhjOCwgMHg5ZCwgMHhhOCwgMHhkNywgMHgyYSwKLQkweDIzLCAweGRhLCAweDI3LCAweDIyLCAweDRkLCAweDkwLCAweDA2LCAweDZlLCAweDU2LCAweDg2LCAweDM2LCAweDNmLAotCTB4YTQsIDB4MGMsIDB4NmQsIDB4M2UsIDB4MDMsIDB4NWEsIDB4YzQsIDB4NTUsIDB4NWMsIDB4NzIsIDB4MGMsIDB4NmQsCi0JMHg3ZSwgMHgxZCwgMHg3NywgMHg1YywgMHhjNSwgMHgwYiwgMHg0ZSwgMHhjOCwgMHhjNywgMHhjMywgMHhmMCwgMHhmOSwKLQkweDc2LCAweDE1LCAweGEyLCAweGNlLCAweDc4LCAweDA1LCAweGY0LCAweDViLCAweDhjLCAweGExLCAweDdjLCAweDgxLAotCTB4MzgsIDB4YzcsIDB4ZmMsIDB4MzksIDB4Y2UsIDB4NTYsIDB4ZGIsIDB4ZmYsIDB4ZTMsIDB4MzIsIDB4NTEsIDB4MGMsCi0JMHhiNCwgMHg1ZCwgMHg5NSwgMHg5ZCwgMHhiYiwgMHgxNywgMHhmNywgMHhmNSwgMHg1YSwgMHhjZSwgMHgyOCwgMHgyZiwKLQkweGFkLCAweDhjLCAweGJjLCAweDdhLCAweDE3LCAweGVlLCAweGRkLCAweDg5LCAweDgzLCAweGQyLCAweGVkLCAweDQ2LAotCTB4ZTQsIDB4MzksIDB4ZjQsIDB4ZjUsIDB4NDMsIDB4NjcsIDB4YTIsIDB4ZjIsIDB4MzIsIDB4YWUsIDB4OWYsIDB4ZTAsCi0JMHg3YSwgMHgxNSwgMHhkNywgMHgyYiwgMHhlOCwgMHhmNywgMHg0NSwgMHg5NCwgMHhhZiwgMHg5NywgMHgwNSwgMHhiNywKLQkweDE5LCAweGY1LCAweDQ1LCAweDhkLCAweDU3LCAweDVlLCAweDcwLCAweGM2LCAweDRlLCAweGJlLCAweDg0LCAweDJiLAotCTB4YWEsIDB4MjYsIDB4MmEsIDB4Y2YsIDB4M2IsIDB4ZDksIDB4YjksIDB4NjAsIDB4ZTMsIDB4YTIsIDB4NDcsIDB4MTksCi0JMHhmNiwgMHhhNywgMHg4ZSwgMHhlOSwgMHg3YiwgMHgwOCwgMHg3MywgMHgwMCwgMHg0ZCwgMHgxNywgMHgxNywgMHgzMCwKLQkweGY2LCAweDMzLCAweDlhLCAweDY3LCAweDQ2LCAweDIwLCAweGYzLCAweGIzLCAweGIwLCAweDRiLCAweGM2LCAweDM0LAotCTB4NGMsIDB4OTcsIDB4MDMsIDB4M2UsIDB4ZjgsIDB4YmEsIDB4MDMsIDB4YjgsIDB4Y2YsIDB4MzUsIDB4Y2EsIDB4NTIsCi0JMHg5YywgMHg3NiwgMHhlNCwgMHg5NywgMHg3NSwgMHhmZCwgMHg2YywgMHhiMSwgMHg1YiwgMHhlMywgMHg3NiwgMHg2NiwKLQkweDBkLCAweGZmLCAweGQwLCAweDNmLCAweDBiLCAweGU1LCAweDgxLCAweDkxLCAweGM2LCAweGIzLCAweDA1LCAweGNhLAotCTB4MDIsIDB4ZTgsIDB4OWYsIDB4YzIsIDB4MTQsIDB4ZWUsIDB4OGQsIDB4NWEsIDB4MjYsIDB4ZTQsIDB4MjUsIDB4OTQsCi0JMHgwNywgMHg2YywgMHg0NywgMHg5OSwgMHg1MCwgMHgyYiwgMHg3NywgMHgyOCwgMHg2YiwgMHgyOCwgMHg3YiwgMHgyOCwKLQkweDRiLCAweGNjLCAweDdhLCAweDhjLCAweDNmLCAweDQ4LCAweDE5LCAweDdlLCAweDJkLCAweGZjLCAweDUzLCAweGRhLAotCTB4MWYsIDB4OWQsIDB4YzYsIDB4MDcsIDB4OTksIDB4Y2UsIDB4MjgsIDB4MjMsIDB4NGYsIDB4ZjcsIDB4ZTgsIDB4YjUsCi0JMHg5OCwgMHgyOCwgMHhhOCwgMHgzOCwgMHgyMCwgMHg0NywgMHgxOSwgMHhhZSwgMHg2MywgMHg3YiwgMHg3MSwgMHhjZiwKLQkweGFhLCAweDA5LCAweDVjLCAweGQ5LCAweDYzLCAweDFmLCAweGMwLCAweDZmLCAweGFlLCAweGNkLCAweDA0LCAweGVhLAotCTB4ZTEsIDB4MmEsIDB4OGUsIDB4ZTIsIDB4OGUsIDB4MGIsIDB4YjYsIDB4OTksIDB4OTEsIDB4MjMsIDB4NWMsIDB4ZDMsCi0JMHg4NCwgMHg1ZCwgMHhkMywgMHgyZiwgMHgwMywgMHgwZiwgMHg5YywgMHg5ZiwgMHhkMiwgMHhmMSwgMHgwNywgMHhlNSwKLQkweGVkLCAweDAwLCAweGRlLCAweDJiLCAweGQ2LCAweGRmLCAweDZkLCAweDE1LCAweGMzLCAweDgzLCAweGI4LCAweDdhLAotCTB4YzksIDB4Y2YsIDB4MmQsIDB4NjYsIDB4YmQsIDB4MzQsIDB4ZWQsIDB4N2UsIDB4MzcsIDB4NmEsIDB4NzgsIDB4MzEsCi0JMHg4ZSwgMHhiMiwgMHgwOCwgMHhjYSwgMHhkYSwgMHg0NSwgMHhmMywgMHhmZSwgMHgzMiwgMHgxZSwgMHhkMywgMHgxNiwKLQkweDhmLCAweGZjLCAweGFkLCAweGVjLCAweDZmLCAweGQwLCAweDEzLCAweDZjLCAweGRhLCAweDhjLCAweDM3LCAweDgwLAotCTB4NzEsIDB4MzEsIDB4OTcsIDB4NjMsIDB4N2IsIDB4ZDQsIDB4MzgsIDB4ZTQsIDB4ZjcsIDB4YjgsIDB4NDcsIDB4MTksCi0JMHhjZSwgMHgzOCwgMHgwMywgMHhlNywgMHhjNywgMHg3ZSwgMHg1MSwgMHhhZSwgMHg3MSwgMHhlMCwgMHg0YiwgMHhkNSwKLQkweDg3LCAweGZmLCAweDMyLCAweGQ2LCAweGVjLCAweDcxLCAweGQ5LCAweDU3LCAweGJjLCAweDVhLCAweGZiLCAweGQ0LAotCTB4OGQsIDB4NDcsIDB4Y2QsIDB4N2EsIDB4ODgsIDB4MGEsIDB4ZWIsIDB4YTEsIDB4ZWYsIDB4MzgsIDB4NmQsIDB4OWIsCi0JMHgzMSwgMHhmZCwgMHgzZSwgMHg3YSwgMHg5NCwgMHhiZiwgMHgyOSwgMHg5ZiwgMHg2YiwgMHhlNSwgMHhiZCwgMHhiMSwKLQkweDZiLCAweGYyLCAweDJiLCAweDY0LCAweDFkLCAweDZkLCAweDBiLCAweGFjLCAweDU5LCAweGI5LCAweDE2LCAweGVmLAotCTB4ZjQsIDB4ZjEsIDB4MjksIDB4ZjMsIDB4YzgsIDB4NGYsIDB4MDcsIDB4YzEsIDB4MTMsIDB4YWEsIDB4YzEsIDB4ZjAsCi0JMHgzZSwgMHg3ZCwgMHg4ZCwgMHg3YSwgMHhmYywgMHgwNCwgMHhmYiwgMHgwYiwgMHhiYywgMHg3MiwgMHgwMiwgMHhiNiwKLQkweGRiLCAweGFlLCAweGU1LCAweDNlLCAweDIwLCAweDJiLCAweGUzLCAweDMxLCAweDM5LCAweDU5LCAweDY4LCAweDkxLAotCTB4YjksIDB4ODIsIDB4ODIsIDB4YzEsIDB4NjAsIDB4NjQsIDB4NjcsIDB4NDQsIDB4MTIsIDB4NWEsIDB4ZmYsIDB4ZDIsCi0JMHhiZSwgMHgxYiwgMHg5ZSwgMHg4ZSwgMHg1OCwgMHhiYSwgMHg4MywgMHhjMywgMHhkMiwgMHhmYywgMHgxYiwgMHhkMCwKLQkweGIxLCAweDY1LCAweGU4LCAweGQ4LCAweDU2LCAweGU4LCAweGUwLCAweGQ1LCAweDMyLCAweGEyLCAweGFiLCAweDYxLAotCTB4YWQsIDB4OGMsIDB4NjAsIDB4OWIsIDB4MTQsIDB4YmMsIDB4ZjIsIDB4ODMsIDB4NjgsIDB4MTcsIDB4ZDIsIDB4NWYsCi0JMHg0YywgMHhkMywgMHg1YSwgMHg1NiwgMHg3MiwgMHhjZSwgMHhhZSwgMHhjYSwgMHg5NCwgMHhiMywgMHhiYiwgMHhiMiwKLQkweDVhLCAweDA3LCAweGY1LCAweGI5LCAweDUxLCAweDMxLCAweGIwLCAweDllLCAweGQ0LCAweDcxLCAweGJjLCAweDk0LAotCTB4OWYsIDB4MDEsIDB4NGUsIDB4NzYsIDB4ODMsIDB4ZWUsIDB4OWUsIDB4MmUsIDB4YzEsIDB4OGYsIDB4YTcsIDB4NWMsCi0JMHgwNiwgMHhjYywgMHg4ZiwgMHgwMSwgMHhlNiwgMHhkOSwgMHg5MiwgMHgxMywgMHhkYSwgMHgwNiwgMHhjMiwgMHhlMCwKLQkweGM5LCAweGVjLCAweDc0LCAweGJmLCAweDJjLCAweGNlLCAweDkzLCAweDBlLCAweDIxLCAweDAzLCAweDRhLCAweDU4LAotCTB4NGYsIDB4N2YsIDB4MWQsIDB4ZWMsIDB4MDAsIDB4OGUsIDB4MGYsIDB4YjksIDB4M2QsIDB4ZGQsIDB4YTEsIDB4ZGYsCi0JMHgxOSwgMHg3ZCwgMHhkZSwgMHgyOSwgMHg4YiwgMHhlNSwgMHhmNywgMHg1OCwgMHhkOCwgMHgwZSwgMHhkNywgMHhjMCwKLQkweGI2LCAweDZlLCAweDE5LCAweGI2LCAweGRkLCAweDgwLCAweDZkLCAweDRmLCAweDVkLCAweGQ4LCAweGVhLCAweGU5LAotCTB4ZTIsIDB4MmUsIDB4ZDgsIDB4MzQsIDB4ZTQsIDB4OGYsIDB4MTAsIDB4YWYsIDB4ZWQsIDB4OTYsIDB4MWUsIDB4NmUsCi0JMHhiNywgMHhmNiwgMHgyZSwgMHg2ZCwgMHhhMiwgMHg5ZiwgMHgwMiwgMHgxZSwgMHhkMiwgMHgxOCwgMHg3ZSwgMHhjZiwKLQkweDNkLCAweDRhLCAweDU5LCAweDg2LCAweDcyLCAweDNlLCAweDdmLCAweDA2LCAweDc1LCAweGYwLCAweDNjLCAweGY3LAotCTB4ZTcsIDB4NTYsIDB4MGUsIDB4ZGUsIDB4NjUsIDB4NjEsIDB4YTEsIDB4OWQsIDB4OTAsIDB4ODYsIDB4NGQsIDB4M2MsCi0JMHhlMiwgMHg2NCwgMHhlNiwgMHgwOCwgMHg0MywgMHgwZSwgMHhmMCwgMHhlMiwgMHg1ZCwgMHhhNSwgMHhiNiwgMHg0ZiwKLQkweGRlLCAweGQ5LCAweGVmLCAweDE1LCAweGI2LCAweDFmLCAweGY2LCAweDFkLCAweGNlLCAweDY1LCAweGJkLCAweGQ1LAotCTB4ZjMsIDB4MjEsIDB4N2QsIDB4ODUsIDB4ZjYsIDB4ZjUsIDB4OTQsIDB4OTMsIDB4NWUsIDB4MzMsIDB4YWYsIDB4NWEsCi0JMHg5YSwgMHhhMywgMHhiYywgMHg4ZCwgMHhjYSwgMHg0ZSwgMHhkMCwgMHhjOSwgMHhjZSwgMHgxNSwgMHhiNCwgMHhhNiwKLQkweGRkLCAweDEwLCAweDRiLCAweGM3LCAweGViLCAweGVjLCAweGZjLCAweDBlLCAweDE4LCAweGJlLCAweGYxLCAweDYzLAotCTB4ZDAsIDB4ODcsIDB4OTQsIDB4MzcsIDB4MzcsIDB4MWIsIDB4ZGYsIDB4NWMsIDB4NGUsIDB4MDAsIDB4ZDYsIDB4ZjAsCi0JMHg5OSwgMHhiNCwgMHhjOSwgMHhkZiwgMHg5NCwgMHg0OSwgMHg1NSwgMHg1YSwgMHgzNCwgMHhiZSwgMHg0YiwgMHhhNywKLQkweDhlLCAweDlmLCAweDU2LCAweGVkLCAweGY1LCAweGE4LCAweDhjLCAweDlhLCAweDM1LCAweDNmLCAweGNjLCAweDM1LAotCTB4YTcsIDB4MmYsIDB4ZDIsIDB4ZmQsIDB4YzAsIDB4YTgsIDB4ZTUsIDB4YWYsIDB4NTQsIDB4MjksIDB4MjcsIDB4YmIsCi0JMHhlZCwgMHhkYywgMHhiZiwgMHg1YywgMHg2NywgMHhlZCwgMHg1YSwgMHg5NywgMHhkNywgMHg2ZSwgMHhiNCwgMHhiMiwKLQkweDdhLCAweDhlLCAweDIyLCAweDVkLCAweDBmLCAweDQ0LCAweGI1LCAweDZmLCAweDJiLCAweGNhLCAweDk3LCAweDQ2LAotCTB4OGYsIDB4ZjIsIDB4OTMsIDB4YjYsIDB4MTIsIDB4Y2EsIDB4NjcsIDB4ZmIsIDB4ZGMsIDB4MzYsIDB4ZDAsIDB4ZGIsCi0JMHg1MywgMHg2YiwgMHhlYywgMHhhZSwgMHhhNCwgMHg5NSwgMHg5YiwgMHhmNCwgMHg4MywgMHhjMywgMHgzMSwgMHg3MiwKLQkweDU2LCAweDRlLCAweGU2LCAweGQwLCAweGZmLCAweDk0LCAweGIzLCAweGIzLCAweDUyLCAweDRmLCAweDVlLCAweDg2LAotCTB4NzIsIDB4OTIsIDB4ZjMsIDB4YjksIDB4NTcsIDB4ZWUsIDB4NzgsIDB4OTAsIDB4M2MsIDB4N2EsIDB4YmIsIDB4YjYsCi0JMHhhZiwgMHhhZiwgMHhkYSwgMHg3MSwgMHgwMCwgMHhmOCwgMHgyMywgMHhmYywgMHg4YiwgMHg5YiwgMHg2MCwgMHgzMiwKLQkweDQwLCAweGU3LCAweGE2LCAweDY1LCAweGRjLCAweGFlLCAweGRiLCAweGY4LCAweGYyLCAweGZhLCAweGYzLCAweDZhLAotCTB4YzcsIDB4NmYsIDB4YzYsIDB4NTksIDB4OTUsIDB4ODUsIDB4NTksIDB4ZGIsIDB4YjEsIDB4YjAsIDB4ZWIsIDB4NTYsCi0JMHhkYiwgMHhiMiwgMHg5YywgMHgwMywgMHhlZCwgMHhkOSwgMHg0NiwgMHg2MywgMHgwYiwgMHgxNiwgMHg2OSwgMHg3ZiwKLQkweDUyLCAweDc2LCAweGQxLCAweGZlLCAweDhjLCAweDM1LCAweDRhLCAweDMzLCAweGU3LCAweDMzLCAweDY4LCAweGNiLAotCTB4NjgsIDB4YTcsIDB4YWUsIDB4OWUsIDB4ZGYsIDB4NmEsIDB4ZmYsIDB4OTEsIDB4NzAsIDB4MTIsIDB4NmUsIDB4NDMsCi0JMHg1YiwgMHg0OSwgMHg0NSwgMHhkOCwgMHgwMiwgMHgxOSwgMHhmNSwgMHhhZiwgMHhkNSwgMHg2YiwgMHhhMCwgMHg2OCwKLQkweGJiLCAweGVlLCAweGY4LCAweDc2LCAweDgzLCAweDg5LCAweDMxLCAweDI3LCAweGQxLCAweDNmLCAweGM3LCAweDI0LAotCTB4ZmYsIDB4ZjEsIDB4NGUsIDB4M2IsIDB4YmYsIDB4OWUsIDB4MmMsIDB4YWIsIDB4ZDUsIDB4M2QsIDB4OTcsIDB4MmQsCi0JMHhlMywgMHg2ZiwgMHhlNywgMHg4YSwgMHgzNSwgMHgwYSwgMHhmMSwgMHgxNywgMHhkMiwgMHg0NSwgMHgyZCwgMHgwZSwKLQkweDQ5LCAweDEzLCAweGE0LCAweDg1LCAweDkwLCAweDE2LCAweGI3LCAweDVhLCAweDdkLCAweDEzLCAweGQyLCAweGRlLAotCTB4YTUsIDB4YTAsIDB4YmQsIDB4ZmIsIDB4ODAsIDB4MjcsIDB4Y2EsIDB4NzAsIDB4YzYsIDB4ZWQsIDB4MzYsIDB4ZTMsCi0JMHhmOSwgMHgwOCwgMHg5ZSwgMHg0MywgMHgzZSwgMHhiOSwgMHg5OCwgMHgwYywgMHhhNywgMHhmYywgMHg2NiwgMHg5YiwKLQkweDhjLCAweDk1LCAweGZiLCAweGExLCAweDlmLCAweGNiLCAweDM2LCAweDljLCAweDM3LCAweGU1LCAweGZmLCAweDU3LAotCTB4ZTksIDB4NzcsIDB4MzUsIDB4MWEsIDB4M2IsIDB4ZmQsIDB4NDMsIDB4OGQsIDB4OTQsIDB4YWYsIDB4OWIsIDB4ZTQsCi0JMHg2MCwgMHg0ZCwgMHhkOSwgMHhjNSwgMHhlNCwgMHg3NywgMHhlZCwgMHg5YywgMHgyZiwgMHhmZiwgMHg3ZiwgMHgzMCwKLQkweGU3LCAweGM0LCAweGFhLCAweDM5LCAweGJiLCAweDc2LCAweGNlLCAweDE1LCAweGJjLCAweDZmLCAweGMzLCAweGZiLAotCTB4MTYsIDB4ZWEsIDB4ODIsIDB4NjQsIDB4NTUsIDB4ZGUsIDB4NTgsIDB4NWMsIDB4ZTgsIDB4NzksIDB4ZDUsIDB4Y2EsCi0JMHg4OSwgMHg1MCwgMHg0NiwgMHg3MCwgMHg1ZSwgMHgxZiwgMHhiMSwgMHg3MywgMHg3OCwgMHhhMCwgMHg2NiwgMHg1ZSwKLQkweDFmLCAweDc5LCAweDEzLCAweGYzLCAweGVhLCAweDVjLCAweDMxLCAweGFmLCAweDVkLCAweDE3LCAweDlkLCAweDU3LAotCTB4M2QsIDB4MWUsIDB4MjcsIDB4MmYsIDB4ODcsIDB4ZjMsIDB4OGIsIDB4YzksIDB4OGQsIDB4MDUsIDB4Y2UsIDB4NzEsCi0JMHgyNywgMHhlNiwgMHg0OCwgMHgxOCwgMHhjMiwgMHgzOSwgMHgwZSwgMHhkOSwgMHgzOSwgMHg4YSwgMHhlYSwgMHhkYSwKLQkweGYxLCAweDczLCAweGY4LCAweDVkLCAweDNiLCAweDNmLCAweGVhLCAweGZlLCAweDFmLCAweDgzLCAweGE2LCAweDliLAotCTB4MjQsIDB4ZDMsIDB4ZGYsIDB4NjQsIDB4ZTUsIDB4ZmYsIDB4OTcsIDB4ZTUsIDB4ZDYsIDB4MjIsIDB4ZDcsIDB4M2EsCi0JMHg5NSwgMHgxNiwgMHhkOSwgMHhhMywgMHhmNiwgMHgxNSwgMHg5ZiwgMHg2ZCwgMHg2NCwgMHg4YywgMHg3ZiwgMHg5NywKLQkweDZmLCAweGY1LCAweDE4LCAweGY0LCAweGM1LCAweDZlLCAweGQ4LCAweDdjLCAweDNiLCAweDBiLCAweDZhLCAweDIwLAotCTB4MjIsIDB4NDEsIDB4NzAsIDB4OWIsIDB4ZGYsIDB4OGMsIDB4YjEsIDB4MzcsIDB4NmEsIDB4NWYsIDB4NzUsIDB4NmQsCi0JMHg3YywgMHhmZCwgMHg5OSwgMHg0NiwgMHhmMSwgMHg2OCwgMHg2ZiwgMHg1MCwgMHg5ZiwgMHg0MywgMHhkZiwgMHgxZCwKLQkweGEzLCAweDBkLCAweDk2LCAweDgxLCAweDlkLCAweDljLCAweDRlLCAweDQ0LCAweGI0LCAweDJkLCAweDQ2LCAweDlkLAotCTB4OTgsIDB4NGEsIDB4YTQsIDB4YTUsIDB4MmMsIDB4ZDksIDB4NjMsIDB4ZTksIDB4ODQsIDB4MTIsIDB4OGUsIDB4MDEsCi0JMHg1YiwgMHgwZCwgMHgzNiwgMHhlNCwgMHhhZCwgMHg5MCwgMHgzNSwgMHhiNywgMHg1NiwgMHhmNiwgMHhhYSwgMHg1YiwKLQkweDYwLCAweGVmLCAweGRjLCAweDcyLCAweGYyLCAweDAzLCAweGVhLCAweDM2LCAweGQ4LCAweDNhLCAweGI3LCAweDlkLAotCTB4YmMsIDB4NDEsIDB4ZWQsIDB4ODMsIDB4NmQsIDB4YjMsIDB4MGYsIDB4NzYsIDB4Y2UsIDB4YmUsIDB4MGEsIDB4NmQsCi0JMHhjZiwgMHg5YiwgMHg0MSwgMHg3YiwgMHg5ZCwgMHgzNSwgMHhiNCwgMHg0NiwgMHgxYiwgMHg4NywgMHhmMywgMHgyMywKLQkweGVlLCAweDhmLCAweDcxLCAweDBkLCAweGZjLCAweGE0LCAweDdhLCAweDQ1LCAweGFmLCAweDRiLCAweGRiLCAweDhhLAotCTB4YjIsIDB4ZDcsIDB4OTIsIDB4NTUsIDB4YTEsIDB4N2UsIDB4ZGEsIDB4NjAsIDB4ZTMsIDB4NDYsIDB4OTQsIDB4YjcsCi0JMHhhZiwgMHg0NSwgMHg1YiwgMHhhNCwgMHgxMSwgMHgxNywgMHg3OCwgMHgyNiwgMHhmZSwgMHg0OCwgMHg1YiwgMHhiNSwKLQkweGYzLCAweGRmLCAweGQ0LCAweDI0LCAweDVlLCAweDY3LCAweDkzLCAweDM0LCAweGRmLCAweDBiLCAweGY5LCAweDVhLAotCTB4NGIsIDB4NTMsIDB4YmMsIDB4YmIsIDB4NTYsIDB4ZDcsIDB4OTAsIDB4YjYsIDB4MjgsIDB4ODMsIDB4NDMsIDB4N2EsCi0JMHhkOCwgMHhmYSwgMHgxYSwgMHhmMiwgMHhmNywgMHhhMiwgMHhmNCwgMHg3NCwgMHg0ZiwgMHg2NCwgMHgyOCwgMHgwOCwKLQkweGM2LCAweDA3LCAweDY0LCAweDIzLCAweGUzLCAweDAxLCAweDk5LCAweDRhLCAweDM1LCAweDI2LCAweGEwLCAweGJjLAotCTB4ZGEsIDB4OTgsIDB4MDAsIDB4ZmQsIDB4YWMsIDB4NDcsIDB4ODAsIDB4ZGYsIDB4MTksIDB4NWMsIDB4MjIsIDB4NjMsCi0JMHg4YywgMHgzYiwgMHg1NCwgMHg0MiwgMHhiYiwgMHhmYywgMHgxYiwgMHhkNiwgMHgyZSwgMHgwZiwgMHhlMSwgMHg0OCwKLQkweDAyLCAweDBlLCAweDIzLCAweDlmLCAweGQ3LCAweGVhLCAweGI5LCAweDk1LCAweGZhLCAweDNiLCAweGI3LCAweDZjLAotCTB4ZDMsIDB4MjYsIDB4ZTUsIDB4YzYsIDB4MjIsIDB4ZTcsIDB4NGQsIDB4MTksIDB4NGMsIDB4ZGMsIDB4ZDQsIDB4Y2EsCi0JMHhlMCwgMHg4NCwgMHhiNSwgMHhhMywgMHg1MCwgMHg0NywgMHhjYiwgMHhjZiwgMHhiNSwgMHhiMiwgMHg5MywgMHg3MiwKLQkweDhmLCAweGYxLCAweGY5LCAweDA3LCAweDdjLCAweGQyLCAweGZhLCAweDdiLCAweDI0LCAweGJkLCAweDFjLCAweDlmLAotCTB4MTcsIDB4ZDAsIDB4OWIsIDB4ZjgsIDB4OTEsIDB4MjEsIDB4YmQsIDB4ZGYsIDB4ZTYsIDB4Y2UsIDB4Y2EsIDB4NmUsCi0JMHgxOSwgMHg4ZSwgMHgzMywgMHhkNiwgMHhjOSwgMHg3OCwgMHg5ZSwgMHg5NywgMHg5YiwgMHgwNSwgMHgwZiwgMHg0YywKLQkweDE2LCAweDE1LCAweDJjLCAweGY4LCAweDQ2LCAweDE5LCAweDczLCAweDAzLCAweGQ5LCAweGU1LCAweDNiLCAweDNhLAotCTB4NzYsIDB4NmMsIDB4NzQsIDB4ZWQsIDB4NGMsIDB4OTMsIDB4YjEsIDB4NWQsIDB4MWQsIDB4MWQsIDB4ZmYsIDB4NWQsCi0JMHgwNCwgMHhmNSwgMHgyZCwgMHg2YSwgMHhmYiwgMHg1NiwgMHg2OSwgMHhmZCwgMHhiYiwgMHhhMCwgMHhlYiwgMHg3YywKLQkweGFlLCAweDI5LCAweDhjLCAweDYzLCAweDJlLCAweGJhLCAweDExLCAweDViLCAweGFmLCAweGI2LCAweGZjLCAweDhiLAotCTB4MzYsIDB4M2UsIDB4OWQsIDB4ODQsIDB4ZWMsIDB4MGYsIDB4Y2IsIDB4ZmUsIDB4YjAsIDB4NGUsIDB4ZDksIDB4YjcsCi0JMHhlYSwgMHg5NCwgMHhmZCwgMHhjZiwgMHgzYSwgMHg2NSwgMHgyNiwgMHgyZSwgMHhiOCwgMHhiMywgMHhmMCwgMHhmNywKLQkweDc4LCAweDM3LCAweGE1LCAweDdkLCAweDc3LCAweGIxLCAweGZiLCAweDYxLCAweGI5LCAweGU1LCAweDNhLCAweDFiLAotCTB4YWMsIDB4NWYsIDB4YzYsIDB4MTgsIDB4YjEsIDB4ODksIDB4MGQsIDB4NjcsIDB4NzUsIDB4NmMsIDB4YjgsIDB4Y2YsCi0JMHhkZCwgMHhhMSwgMHhmNCwgMHg1ZSwgMHhjYSwgMHg3ZSwgMHhjNiwgMHgxOSwgMHhmNywgMHg2OSwgMHhiYywgMHgxMCwKLQkweDI3LCAweDVmLCAweDYxLCAweDBjLCAweDM4LCAweGM3LCAweGJkLCAweGQ4LCAweGE0LCAweGJhLCAweDE4LCAweDZkLAotCTB4NTcsIDB4NmQsIDB4MTMsIDB4YjMsIDB4NmUsIDB4YjQsIDB4OGIsIDB4NWIsIDB4NjQsIDB4MDQsIDB4YjYsIDB4YzIsCi0JMHhjZSwgMHg0MiwgMHg5YiwgMHhlYywgMHg5YSwgMHgxZSwgMHg1OCwgMHg0NywgMHhiZCwgMHhiNSwgMHg3YiwgMHhkYSwKLQkweGY4LCAweDgzLCAweGZiLCAweGMwLCAweDU3LCAweDY5LCAweDIxLCAweDhjLCAweDI5LCAweDVmLCAweDg0LCAweDM2LAotCTB4ZjEsIDB4NWEsIDB4NWIsIDB4ZjgsIDB4YjUsIDB4ZmIsIDB4ZmIsIDB4YTUsIDB4OGIsIDB4ZjQsIDB4ZTcsIDB4YzAsCi0JMHg3NiwgMHg3OCwgMHhhMywgMHhmZCwgMHgzNSwgMHhjYiwgMHhjOCwgMHg3NCwgMHg4OCwgMHgyYiwgMHhmNSwgMHgzMywKLQkweGI2LCAweDhiLCAweDVjLCAweGE0LCAweDlkLCAweGI2LCAweDRiLCAweGU0LCAweGU5LCAweDY1LCAweDU5LCAweGJjLAotCTB4MTUsIDB4MzYsIDB4OTMsIDB4MDQsIDB4OTksIDB4MDEsIDB4ZTksIDB4OGMsIDB4ODgsIDB4OGUsIDB4ZjEsIDB4ZjgsCi0JMHg0NiwgMHgzNiwgMHhmNywgMHg3MCwgMHg2ZiwgMHgwNywgMHhmNCwgMHg2ZiwgMHg2YywgMHgxNSwgMHgxMywgMHgzNywKLQkweDBkLCAweGVkLCAweDk0LCAweDdhLCAweGI0LCAweDdiLCAweDlkLCAweGE1LCAweDVkLCAweGVlLCAweGI5LCAweGVlLAotCTB4YTYsIDB4Y2MsIDB4ZDUsIDB4NmIsIDB4NDIsIDB4M2EsIDB4ZGUsIDB4NTUsIDB4OTAsIDB4NjQsIDB4NDgsIDB4YzcsCi0JMHg4YiwgMHg5MiwgMHg1ZSwgMHg0MSwgMHhjNywgMHg4YiwgMHgzMiwgMHhhNCwgMHhlOSwgMHhiOCwgMHg3MSwgMHgwNSwKLQkweDFkLCAweDc3LCAweDVhLCAweDNhLCAweGRlLCAweDEzLCAweDMzLCAweDc0LCAweGExLCAweGI0LCAweDllLCAweDIyLAotCTB4OWQsIDB4MWEsIDB4M2EsIDB4NzYsIDB4MzQsIDB4MWQsIDB4MmYsIDB4ZTIsIDB4MWUsIDB4ZjUsIDB4YWUsIDB4YjMsCi0JMHg3NSwgMHgyMiwgMHhiNiwgMHg4YywgMHhiZiwgMHhjMywgMHgzMiwgMHhjYSwgMHhjNSwgMHg0ZiwgMHhjNiwgMHg4YywKLQkweDVlLCAweDFhLCAweDAyLCAweDFkLCAweDg1LCAweGU1LCAweGZiLCAweDZkLCAweGZjLCAweGEwLCAweGI2LCAweGNjLAotCTB4YzQsIDB4NDcsIDB4NzYsIDB4MTYsIDB4YzYsIDB4NjIsIDB4MmIsIDB4ZTksIDB4NzMsIDB4MDgsIDB4ZjQsIDB4MTksCi0JMHhkNiwgMHg3OSwgMHgyZCwgMHhmYSwgMHg2YywgMHhiNiwgMHhmYiwgMHgxNiwgMHg3MSwgMHhiZCwgMHgyZiwgMHg5ZiwKLQkweDhlLCAweDFiLCAweDVhLCAweGJkLCAweDQ1LCAweGNmLCAweDlkLCAweGYzLCAweDNlLCAweGZiLCAweDA2LCAweDY4LAotCTB4ZDUsIDB4YWMsIDB4Y2QsIDB4YjksIDB4YWEsIDB4YmYsIDB4Y2QsIDB4NTgsIDB4NTQsIDB4ZDIsIDB4YzQsIDB4YjAsCi0JMHgxOSwgMHgyNywgMHhiZCwgMHg5OCwgMHhlZCwgMHg2OCwgMHhlNCwgMHg1MywgMHg4MywgMHg5NiwgMHg0ZiwgMHhhZCwKLQkweDYzLCAweGNjLCAweDM1LCAweGE4LCAweGNhLCAweGVjLCAweDAxLCAweGU4LCAweDBhLCAweGRhLCAweGQ4LCAweDVhLAotCTB4NGUsIDB4ZTMsIDB4NWQsIDB4NjcsIDB4MzIsIDB4NTMsIDB4NzgsIDB4MzUsIDB4ODgsIDB4NzgsIDB4OGMsIDB4MGYsCi0JMHg3MSwgMHg1ZiwgMHg0MCwgMHhjNiwgMHgxYywgMHg5NCwgMHg3NSwgMHg5NSwgMHhjZCwgMHhiYywgMHg5NCwgMHhkNywKLQkweDhhLCAweGU3LCAweDAxLCAweGU5LCAweDJhLCAweDJiLCAweGY5LCAweGU4LCAweDc0LCAweDhiLCAweGVjLCAweDJmLAotCTB4NDQsIDB4ZTUsIDB4ZTMsIDB4NjgsIDB4ZmYsIDB4YjEsIDB4ODIsIDB4MGIsIDB4N2YsIDB4ZmMsIDB4NGMsIDB4OGMsCi0JMHg3NiwgMHhlMSwgMHhiZSwgMHgwMiwgMHhmNywgMHgyNywgMHg1OSwgMHgzNywgMHhiZSwgMHg2YSwgMHg3ZiwgMHgzNiwKLQkweDIyLCAweDVkLCAweDNkLCAweDc5LCAweDc4LCAweDJhLCAweDEyLCAweGRkLCAweDAzLCAweDM4LCAweDlhLCAweDg2LAotCTB4ODYsIDB4ZTQsIDB4MDcsIDB4MDMsIDB4MWIsIDB4NTEsIDB4ZjYsIDB4YjIsIDB4MWQsIDB4NmYsIDB4ZDQsIDB4MzEsCi0JMHhmMSwgMHhkZSwgMHg0MSwgMHg3OSwgMHg3NywgMHg2NSwgMHg0OCwgMHhhZSwgMHhhZiwgMHg5OCwgMHgzZCwgMHhkNSwKLQkweGVhLCAweDllLCAweDY5LCAweGNhLCAweDVkLCAweDgwLCAweGZlLCAweDQ5LCAweGJiLCAweDQxLCAweDcwLCAweGNlLAotCTB4YzMsIDB4YWEsIDB4MWYsIDB4ODksIDB4NGEsIDB4YWMsIDB4MjcsIDB4OTUsIDB4NTgsIDB4MTAsIDB4ZjMsIDB4N2MsCi0JMHhiZSwgMHhmYywgMHgwZiwgMHhjMSwgMHg1OCwgMHgzYywgMHgyYSwgMHgzZiwgMHhmMCwgMHgzOCwgMHhjNywgMHg0MSwKLQkweGI5LCAweGFlLCAweDVjLCAweDNiLCAweDM2LCAweDk3LCAweGYzLCAweDBmLCAweDYzLCAweGRjLCAweGE3LCAweGM4LAotCTB4NTQsIDB4MTYsIDB4NjIsIDB4OGMsIDB4YTUsIDB4ZDMsIDB4ZTcsIDB4ZTgsIDB4N2EsIDB4MWIsIDB4ZmMsIDB4MzgsCi0JMHg0OCwgMHhlZSwgMHhhZSwgMHhiNywgMHg4MSwgMHg2ZSwgMHhlMiwgMHhkMCwgMHhmOSwgMHg1NywgMHgwMSwgMHhjNiwKLQkweGFiLCAweDE4LCAweGZiLCAweDYyLCAweGNjLCAweDhiLCAweGNmLCAweDVmLCAweGM3LCAweGI4LCAweDZjLCAweGZiLAotCTB4MWIsIDB4ZDYsIDB4NWUsIDB4ZTYsIDB4ZmEsIDB4MWIsIDB4ZGUsIDB4YTksIDB4YWYsIDB4NzcsIDB4NWEsIDB4YzcsCi0JMHg2MiwgMHg0MywgMHhlMiwgMHhjNCwgMHhkZSwgMHg5MSwgMHg5MCwgMHg3NSwgMHg1ZSwgMHhlZCwgMHhmOCwgMHhkYywKLQkweDI3LCAweDg2LCAweGM1LCAweDM4LCAweDIwLCAweGQxLCAweGRkLCAweGRiLCAweDA3LCAweDY1LCAweDA0LCAweGYzLAotCTB4ZGIsIDB4YjksIDB4NjYsIDB4N2UsIDB4ZjcsIDB4MDgsIDB4ZTMsIDB4YWIsIDB4ZTcsIDB4MGIsIDB4OWMsIDB4NDMsCi0JMHg3NSwgMHg1ZSwgMHhlYSwgMHgwYiwgMHg2NiwgMHg1ZSwgMHhiMSwgMHg5ZSwgMHhkNSwgMHhmMywgMHhkMSwgMHhlZCwKLQkweGQ1LCAweDA5LCAweGMwLCAweGYyLCAweDM1LCAweDlkLCAweDU3LCAweDEwLCAweDA0LCAweDZmLCAweGVkLCAweDM5LAotCTB4MWYsIDB4MjQsIDB4MmYsIDB4NDksIDB4ZjUsIDB4MmUsIDB4NTQsIDB4ZjcsIDB4NzcsIDB4YzYsIDB4MjIsIDB4NDMsCi0JMHg2OSwgMHhhZCwgMHhjZiwgMHhmMCwgMHg5YywgMHhjYywgMHg5NiwgMHhkMywgMHg1OCwgMHg0NywgMHg4OSwgMHg2NiwKLQkweGZiLCAweGEzLCAweDlhLCAweDRmLCAweGIyLCAweDVlLCAweGRhLCAweGVlLCAweDYxLCAweDg1LCAweDNlLCAweDU0LAotCTB4MTAsIDB4MjgsIDB4NmYsIDB4YjUsIDB4ZGMsIDB4YTAsIDB4YmUsIDB4YzIsIDB4ZGMsIDB4ZTUsIDB4ZGYsIDB4ZGEsCi0JMHgxYywgMHg5NiwgMHg1ZSwgMHhjNiwgMHhiMywgMHhjNiwgMHhhMiwgMHg0MywgMHhiMSwgMHg2NCwgMHhiZSwgMHhlYywKLQkweGUxLCAweDc3LCAweDBiLCAweGVlLCAweDNiLCAweDYwLCAweGFmLCAweGY4LCAweGIwLCAweDY3LCAweDI0LCAweGFlLAotCTB4OGMsIDB4NmMsIDB4MDAsIDB4MmQsIDB4ZjcsIDB4ZTQsIDB4OTQsIDB4MjIsIDB4NmYsIDB4YmEsIDB4YzksIDB4YzksCi0JMHg3MiwgMHgzYywgMHg1OSwgMHgyYSwgMHg3ZiwgMHg5NiwgMHhlZCwgMHg1MSwgMHhiNywgMHg1ZSwgMHgyYywgMHhjZiwKLQkweGM4LCAweDg2LCAweGE3LCAweDJhLCAweDFjLCAweDgzLCAweGZlLCAweGVmLCAweDFiLCAweDE5LCAweDIzLCAweDZhLAotCTB4ZmIsIDB4NjYsIDB4OWYsIDB4MjEsIDB4NWUsIDB4YTIsIDB4NzQsIDB4YzksIDB4ZjEsIDB4MmYsIDB4NmQsIDB4N2QsCi0JMHgxMywgMHhjZSwgMHhlZiwgMHhiMywgMHgxNiwgMHhlZSwgMHhkNSwgMHhlMywgMHhiZSwgMHhhMCwgMHhlZCwgMHg5NywKLQkweGQzLCAweDE1LCAweGRhLCAweDhjLCAweGRjLCAweGRmLCAweDQ5LCAweDFkLCAweDlmLCAweDExLCAweGMyLCAweDExLAotCTB4MDQsIDB4Y2YsIDB4ZjksIDB4NDYsIDB4NzcsIDB4M2YsIDB4NTUsIDB4ZTEsIDB4MWUsIDB4NDcsIDB4MTAsIDB4ZmMsCi0JMHg4OCwgMHg3NiwgMHhmMSwgMHhkZSwgMHgyMiwgMHhjNiwgMHgwYiwgMHg3MSwgMHhiMCwgMHgzNSwgMHgxNywgMHg4NSwKLQkweDVjLCAweDljLCAweDFhLCAweDIwLCAweDdlLCAweDA1LCAweDFlLCAweDZhLCAweDhmLCAweDdiLCAweGEzLCAweGM0LAotCTB4OTIsIDB4OWYsIDB4MmEsIDB4YjcsIDB4MjQsIDB4M2YsIDB4NWQsIDB4NzYsIDB4ODEsIDB4NjcsIDB4Y2UsIDB4M2IsCi0JMHg5ZSwgMHg5YywgMHhiMCwgMHg3MywgMHhjZSwgMHg5NiwgMHg4OSwgMHhkZiwgMHhkNywgMHhkYSwgMHg4NywgMHg3YywKLQkweDYxLCAweDg1LCAweGJmLCAweDQ0LCAweDk4LCAweGFhLCAweGIwLCAweDEwLCAweGI2LCAweGE0LCAweGM1LCAweDRkLAotCTB4MTAsIDB4ZmMsIDB4ZDgsIDB4MzcsIDB4NmIsIDB4M2EsIDB4NTUsIDB4OTQsIDB4MjksIDB4OGMsIDB4OWIsIDB4ZGIsCi0JMHhhYywgMHg4OCwgMHg4NywgMHg1OCwgMHhmMiwgMHgwZSwgMHg4YywgMHhmZCwgMHgyOSwgMHg4YywgMHhiZCwgMHhiZiwKLQkweGNjLCAweGYxLCAweDIwLCAweDJiLCAweDMwLCAweGY3LCAweGE5LCAweDRhLCAweDA4LCAweDZmLCAweGJkLCAweGIxLAotCTB4YzMsIDB4MzUsIDB4ZWYsIDB4YjUsIDB4MzYsIDB4NWUsIDB4ZjgsIDB4YWMsIDB4MTEsIDB4ZDksIDB4YWUsIDB4YmMsCi0JMHg3ZSwgMHhkMCwgMHhkNywgMHhlMiwgMHhhNiwgMHhhOCwgMHhmYywgMHgyMiwgMHhlNCwgMHg2ZSwgMHgyMCwgMHg4ZiwKLQkweDQyLCAweDllLCAweDJkLCAweDZhLCAweGJhLCAweGM5LCAweDVjLCAweGNlLCAweGZmLCAweDIzLCAweGYyLCAweGViLAotCTB4ZWIsIDB4MTgsIDB4NWYsIDB4MWUsIDB4ZjYsIDB4NjgsIDB4YmIsIDB4MmUsIDB4MDUsIDB4OGIsIDB4MWUsIDB4ZTUsCi0JMHhmMywgMHgwNiwgMHg5OSwgMHg3MSwgMHg3MywgMHhiZCwgMHhkMCwgMHgxNSwgMHgyOCwgMHg2YiwgMHhhNSwgMHhiZiwKLQkweDlkLCAweGNjLCAweDQ0LCAweDUyLCAweGM5LCAweDQ5LCAweDYxLCAweDNlLCAweDE0LCAweDczLCAweDE1LCAweDk4LAotCTB4MjMsIDB4NDQsIDB4ZDksIDB4MTAsIDB4ODUsIDB4Y2MsIDB4ZTMsIDB4MWEsIDB4OWEsIDB4ZjEsIDB4MjYsIDB4Y2IsCi0JMHhkNSwgMHhiYSwgMHgwNywgMHg4NCwgMHg3YiwgMHg4NiwgMHhhOSwgMHhjNCwgMHgzZSwgMHg2ZCwgMHg5ZiwgMHg4OCwKLQkweDhjLCAweDE3LCAweDU4LCAweDc3LCAweDNiLCAweGFjLCAweDEzLCAweGFmLCAweGE2LCAweGJlLCAweGNlLCAweGUxLAotCTB4MDIsIDB4OWYsIDB4ODcsIDB4NzEsIDB4YWMsIDB4NTgsIDB4MmMsIDB4NTMsIDB4OTAsIDB4OTcsIDB4MjMsIDB4MDMsCi0JMHhmMiwgMHgzMiwgMHhlZCwgMHhjZSwgMHg2MSwgMHhkMCwgMHhiNiwgMHhlYiwgMHhmMSwgMHhiZCwgMHgyOSwgMHhjZiwKLQkweGY4LCAweGIyLCAweDk0LCAweDE5LCAweGVjLCAweGEzLCAweDlkLCAweDlkLCAweDUzLCAweDlhLCAweDI3LCAweDQ0LAotCTB4YTEsIDB4NmQsIDB4MmMsIDB4NWIsIDB4OTYsIDB4OTEsIDB4NmMsIDB4YzEsIDB4YzYsIDB4N2EsIDB4NDYsIDB4MzksCi0JMHhlNywgMHgwZCwgMHgzNSwgMHg3MywgMHg2ZiwgMHg5NSwgMHgyOCwgMHg2MCwgMHgxYSwgMHg4OSwgMHgyNCwgMHg5ZCwKLQkweDA2LCAweGVmLCAweDIzLCAweDJkLCAweDQ2LCAweGU3LCAweDQzLCAweGVlLCAweGI3LCAweGRkLCAweGRmLCAweGNlLAotCTB4M2QsIDB4NTMsIDB4MDUsIDB4MWYsIDB4NWEsIDB4YjUsIDB4ZGYsIDB4N2UsIDB4OGQsIDB4MWEsIDB4ZmEsIDB4ZjMsCi0JMHgwNCwgMHhmNCwgMHhhMCwgMHg5NSwgMHg5NSwgMHhiMSwgMHg5MSwgMHhhZSwgMHg2NSwgMHhmYSwgMHhlNiwgMHhmOCwKLQkweGQyLCAweDFlLCAweGYxLCAweDkyLCAweDIzLCAweGMzLCAweDY1LCAweDUxLCAweDkxLCAweDIxLCAweDM3LCAweDM2LAotCTB4NWMsIDB4NWUsIDB4NDksIDB4ZjMsIDB4NGYsIDB4NTUsIDB4ZmUsIDB4YmQsIDB4YjUsIDB4MDUsIDB4NmIsIDB4NjMsCi0JMHhhYSwgMHhiNSwgMHhlZiwgMHhjOCwgMHg3NywgMHgyYiwgMHhmNiwgMHgyYiwgMHg5MiwgMHgyNiwgMHgwNywgMHg4NiwKLQkweGZiLCAweGI0LCAweDVjLCAweDkzLCAweGY0LCAweDViLCAweDFiLCAweGEwLCAweDdjLCAweDY2LCAweGI0LCAweDhmLAotCTB4YzYsIDB4OWMsIDB4OGIsIDB4OTgsIDB4Y2QsIDB4M2QsIDB4MzMsIDB4YjgsIDB4NGUsIDB4OTcsIDB4MWQsIDB4OTksCi0JMHg4MiwgMHg3YywgMHgzOCwgMHgyMCwgMHg3ZiwgMHgxZiwgMHhhNCwgMHhlMywgMHhlNiwgMHhiZCwgMHg1OSwgMHg1ZiwKLQkweGQ2LCAweGU3LCAweDVlLCAweDQ0LCAweGIzLCAweGU0LCAweDRmLCAweDQ2LCAweDI1LCAweDc3LCAweDkyLCAweDdiLAotCTB4NjAsIDB4Y2YsIDB4ZWQsIDB4YWYsIDB4ZTYsIDB4NmQsIDB4NTAsIDB4MGUsIDB4NzAsIDB4YmYsIDB4ZDYsIDB4OTEsCi0JMHgzYywgMHhmYywgMHhkYSwgMHgxMSwgMHhlZSwgMHhjMywgMHhmNywgMHhmZiwgMHgxZiwgMHhmNCwgMHhjMSwgMHg3YSwKLQkweDYxLCAweGRiLCAweDE2LCAweGI0LCAweDZkLCAweGI0LCAweDZkLCAweDQ3LCAweGVmLCAweDc4LCAweDczLCAweDZkLAotCTB4NWIsIDB4ZDEsIDB4MzYsIDB4MTYsIDB4OGUsIDB4ZmIsIDB4MDYsIDB4ZGIsIDB4NmEsIDB4N2MsIDB4NWUsIDB4MzMsCi0JMHg1YywgMHgyOCwgMHgyZSwgMHhjMSwgMHg0ZiwgMHg0ZSwgMHg0YywgMHg0OCwgMHhkYSwgMHgxOSwgMHgxZiwgMHhkMCwKLQkweGYzLCAweGI5LCAweDY2LCAweGI4LCAweDBjLCAweDM4LCAweGUyLCAweDQxLCAweDkwLCAweGY3LCAweDQzLCAweDNkLAotCTB4Y2MsIDB4N2YsIDB4YzcsIDB4NDQsIDB4M2MsIDB4OTYsIDB4NzEsIDB4ZGYsIDB4OTIsIDB4ZmUsIDB4MDQsIDB4YTMsCi0JMHhhNCwgMHgyZSwgMHhmMywgMHhkOSwgMHgyNCwgMHhjZiwgMHhmZCwgMHhjOSwgMHhmOCwgMHg0NiwgMHhkYywgMHg1NSwKLQkweDE3LCAweDcxLCAweDkyLCAweGY1LCAweDE4LCAweGVmLCAweGRkLCAweDY4LCAweGNiLCAweDIzLCAweDJjLCAweDRmLAotCTB4NDUsIDB4MjEsIDB4NGIsIDB4NGMsIDB4NzksIDB4YzQsIDB4OTYsIDB4MDMsIDB4MjYsIDB4M2YsIDB4OWYsIDB4MDQsCi0JMHhiNywgMHhkOSwgMHg3MiwgMHgzZSwgMHgyYiwgMHg1ZCwgMHg2ZSwgMHg5ZSwgMHgwZCwgMHgwZiwgMHg4ZCwgMHgwOSwKLQkweGUzLCAweDNhLCAweDk5LCAweGViLCAweDFhLCAweDY0LCAweDJiLCAweGQ2LCAweDg3LCAweDNlLCAweGEzLCAweDIzLAotCTB4Y2QsIDB4ODAsIDB4ZTMsIDB4OWMsIDB4ZmYsIDB4NzYsIDB4ZDgsIDB4ZDYsIDB4ODEsIDB4ZmMsIDB4YzAsIDB4MzcsCi0JMHhmNCwgMHgzZiwgMHgyYiwgMHgzZCwgMHg2OSwgMHhlNSwgMHgzMCwgMHgwNywgMHgyMCwgMHg5MCwgMHg5ZCwgMHhmZSwKLQkweGI2LCAweGM0LCAweDJlLCAweGZjLCAweDFlLCAweGVmLCAweDRmLCAweGNhLCAweGVjLCAweDIwLCAweGU4LCAweGIxLAotCTB4OWYsIDB4YmMsIDB4YjEsIDB4MTUsIDB4MzYsIDB4MGYsIDB4N2UsIDB4ZjcsIDB4YjQsIDB4YzgsIDB4OTIsIDB4OWIsCi0JMHg3MywgMHhkNywgMHhjMSwgMHg1ZiwgMHgxYiwgMHhjMSwgMHhhYywgMHhlNiwgMHgwYSwgMHg5ZSwgMHg3YiwgMHgxYiwKLQkweDg0LCAweDVjLCAweGRhLCAweGVkLCAweGMxLCAweGJkLCAweDc2LCAweGJlLCAweGRmLCAweGMyLCAweDdjLCAweDdmLAotCTB4YWQsIDB4NTksIDB4OWEsIDB4NTksIDB4NWUsIDB4NWIsIDB4YjcsIDB4NTEsIDB4ZjYsIDB4YjgsIDB4ZGIsIDB4ZGQsCi0JMHhkOCwgMHg4YSwgMHhiYSwgMHhlNywgMHg1MSwgMHg5NywgMHg2NSwgMHg5ZSwgMHhjYiwgMHgxYywgMHg5ZCwgMHhkOSwKLQkweDMyLCAweGU5LCAweGNjLCAweGMwLCAweGRhLCAweGQ1LCAweDEzLCAweDA0LCAweGQ3LCAweGY5LCAweDFjLCAweDM3LAotCTB4MDgsIDB4YWUsIDB4ZjcsIDB4ZmIsIDB4ZGMsIDB4NjcsIDB4ZTUsIDB4ZjksIDB4YzAsIDB4ZDgsIDB4NTQsIDB4MjEsCi0JMHhlZCwgMHgzYywgMHg2NywgMHhlNSwgMHg3NSwgMHgxMCwgMHhiYywgMHhlYywgMHhmNywgMHhjYSwgMHhlZiwgMHg1NCwKLQkweDUyLCAweDhmLCAweGQzLCAweGU3LCAweDNlLCAweDgzLCAweGU3LCAweDMzLCAweGJlLCAweGM5LCAweDJiLCAweGZhLAotCTB4MTMsIDB4YjQsIDB4OGIsIDB4YWIsIDB4N2UsIDB4ZDAsIDB4YjAsIDB4MjcsIDB4NWYsIDB4ZDQsIDB4M2UsIDB4M2EsCi0JMHhmMSwgMHg2NywgMHg2MiwgMHhmYywgMHg1NSwgMHgxOCwgMHgzMCwgMHg2MSwgMHgyZiwgMHhiMywgMHhjOSwgMHg2NSwKLQkweDdlLCAweGEwLCAweGE2LCAweGRmLCAweGRhLCAweDc3LCAweDBhLCAweGVmLCAweDU4LCAweDE2LCAweDA0LCAweDk3LAotCTB4MGMsIDB4ZmMsIDB4MzEsIDB4ZTYsIDB4OTQsIDB4MmEsIDB4NzEsIDB4ZWYsIDB4ZWUsIDB4MDMsIDB4OWEsIDB4ZmYsCi0JMHgwNCwgMHg3ZSwgMHgzZCwgMHhlOSwgMHgyNCwgMHhlYSwgMHgyYSwgMHhlNSwgMHgxZCwgMHhlZSwgMHg1MiwgMHhhOSwKLQkweDljLCAweGM4LCAweDViLCAweGIwLCAweGZlLCAweDVjLCAweDYzLCAweDMwLCAweDQ4LCAweDFiLCAweDYwLCAweGRmLAotCTB4YjYsIDB4YmQsIDB4ZDksIDB4YzQsIDB4OTIsIDB4ZTgsIDB4NGIsIDB4YTcsIDB4MzcsIDB4YzEsIDB4ZDcsIDB4ZDUsCi0JMHhmNiwgMHg0YywgMHgxNCwgMHg3YywgMHgzZCwgMHhkMSwgMHgxNiwgMHgwNCwgMHhlZiwgMHhmNywgMHhjMywgMHgzNSwKLQkweGIzLCAweGIxLCAweDZhLCAweGU4LCAweGY4LCAweDZjLCAweGZmLCAweGI5LCAweDY2LCAweDYzLCAweGM3LCAweDMxLAotCTB4NGYsIDB4MzAsIDB4YTksIDB4ZTMsIDB4ZmEsIDB4YWEsIDB4MWQsIDB4M2EsIDB4NjQsIDB4ZGIsIDB4NTcsIDB4MzksCi0JMHg3ZSwgMHg4ZSwgMHhlNSwgMHhlZiwgMHhmMywgMHg0MywgMHg5OCwgMHhhYSwgMHhlZCwgMHhiMywgMHhmZCwgMHhlYiwKLQkweGFjLCAweGNkLCAweDE5LCAweDA1LCAweDJlLCAweDNkLCAweGI3LCAweDRiLCAweGZkLCAweDRkLCAweDYwLCAweDc0LAotCTB4NmIsIDB4NDgsIDB4YzMsIDB4N2YsIDB4MTcsIDB4M2MsIDB4MTgsIDB4MzcsIDB4Y2YsIDB4OTksIDB4NmQsIDB4ZWMsCi0JMHg2MywgMHhhYiwgMHg0YywgMHg2ZSwgMHhjMywgMHg3MywgMHhmNCwgMHg1YSwgMHhkYywgMHg4NywgMHgyZiwgMHg4YiwKLQkweGM4LCAweDE1LCAweDg5LCAweDYxLCAweGI1LCAweGNkLCAweDdkLCAweDUwLCAweGZhLCAweGFjLCAweDhjLCAweGZiLAotCTB4MWEsIDB4ZjQsIDB4N2QsIDB4MGUsIDB4ZmUsIDB4NzgsIDB4OTMsIDB4M2MsIDB4MDgsIDB4OWEsIDB4NTYsIDB4MDMsCi0JMHhhOSwgMHhlNCwgMHg4MiwgMHg0YSwgMHhmNSwgMHhjZSwgMHhhOCwgMHg5NCwgMHgzZiwgMHhhNiwgMHhhZSwgMHhlNywKLQkweGJjLCAweDA2LCAweDg5LCAweDhiLCAweDE5LCAweGUyLCAweGI3LCAweDA4LCAweGZjLCAweDE3LCAweDgxLCAweGUzLAotCTB4OGIsIDB4ZWUsIDB4ZjEsIDB4ZmEsIDB4NTYsIDB4YjcsIDB4MTgsIDB4ZmQsIDB4OTYsIDB4ZDMsIDB4YjQsIDB4NjksCi0JMHhlYywgMHhmMiwgMHgzZiwgMHhmNiwgMHhjMywgMHgzNSwgMHg4NCwgMHg2ZCwgMHhjOCwgMHgxYywgMHg5OSwgMHhiYSwKLQkweDZiLCAweDk0LCAweGU1LCAweDFhLCAweDQxLCAweDMxLCAweGU0LCAweDQwLCAweGY3LCAweGE5LCAweGU0LCAweDg0LAotCTB4NWEsIDB4MGEsIDB4MzYsIDB4ZWQsIDB4ZTgsIDB4ZWUsIDB4N2QsIDB4NDIsIDB4ZjcsIDB4OTMsIDB4ZjIsIDB4ZDMsCi0JMHgyYSwgMHgwZiwgMHg3OCwgMHhiNiwgMHg0YSwgMHhkMywgMHgwZSwgMHhlMiwgMHg5OSwgMHhiMCwgMHhjNiwgMHgxOCwKLQkweDRmLCAweDcyLCAweGVmLCAweDQwLCAweGRkLCAweDMxLCAweGE1LCAweGY3LCAweGEwLCAweDZkLCAweDFkLCAweGMyLAotCTB4MWMsIDB4NWYsIDB4MmYsIDB4Y2QsIDB4ZDQsIDB4NDMsIDB4OGMsIDB4OTMsIDB4YmQsIDB4OTYsIDB4MmUsIDB4ODQsCi0JMHg0YywgMHgzYSwgMHg0NiwgMHgxOSwgMHgxOCwgMHgzMSwgMHhiMSwgMHhkZiwgMHhjYSwgMHhjZiwgMHhhMSwgMHg5ZCwKLQkweGNlLCAweDY3LCAweDg5LCAweDQ1LCAweDIxLCAweGEzLCAweGE2LCAweGMwLCAweGM1LCAweDg3LCAweDhlLCAweDQ5LAotCTB4YjQsIDB4YzEsIDB4ZmIsIDB4NWYsIDB4Y2QsIDB4YzYsIDB4NmYsIDB4YTIsIDB4MGYsIDB4YzUsIDB4YjEsIDB4MWIsCi0JMHgyNCwgMHhiZiwgMHgyNiwgMHhkZSwgMHg1MiwgMHgwMiwgMHhmYywgMHhjZCwgMHgzMiwgMHg3OSwgMHg4YywgMHg2YiwKLQkweDExLCAweDg1LCAweGNjLCAweGUxLCAweGQ4LCAweDEyLCAweGNkLCAweGY0LCAweDA3LCAweGMxLCAweDM4LCAweGNiLAotCTB4NGYsIDB4OTIsIDB4N2YsIDB4MjUsIDB4YzUsIDB4NzcsIDB4YjksIDB4OTMsIDB4MGIsIDB4OWIsIDB4ZDQsIDB4MGEsCi0JMHg1OSwgMHhkYiwgMHg2MiwgMHhlMSwgMHhkMCwgMHg3OCwgMHg5MiwgMHg5MiwgMHg5NiwgMHgyMywgMHhkNCwgMHgzNywKLQkweGI3LCAweGQ1LCAweGMwLCAweDMzLCAweDdhLCAweGM3LCAweDk0LCAweGQ3LCAweGY4LCAweDI2LCAweGUwLCAweGY5LAotCTB4M2QsIDB4YzAsIDB4ZDMsIDB4NjIsIDB4ZTEsIDB4NjksIDB4NWMsIDB4MDUsIDB4NGYsIDB4NGIsIDB4MDgsIDB4MGYsCi0JMHhlNCwgMHgxYywgMHhlNSwgMHg2YSwgMHhlYywgMHg5YSwgMHg3NCwgMHg1OSwgMHg5YywgMHhiYywgMHgyNywgMHg5ZCwKLQkweDRhLCAweGZiLCAweDJmLCAweGQ0LCAweDM3LCAweDhkLCAweGVlLCAweGY4LCAweDgwLCAweDJiLCAweGUzLCAweDVhLAotCTB4ZDcsIDB4NDQsIDB4YWYsIDB4ZTksIDB4MmUsIDB4MmYsIDB4YzAsIDB4N2EsIDB4MTUsIDB4MjcsIDB4ZTMsIDB4MTEsCi0JMHhmNiwgMHg3YSwgMHg3NiwgMHhkNSwgMHgzZCwgMHg5MCwgMHhmZiwgMHg4YiwgMHhhOSwgMHhhOCwgMHhiNSwgMHgyNSwKLQkweDRhLCAweDNlLCAweGZkLCAweDk2LCAweGI4LCAweGRlLCAweGRiLCAweGFmLCAweGMyLCAweGY0LCAweDEyLCAweDYwLAotCTB4ODIsIDB4M2MsIDB4M2UsIDB4ZDYsIDB4ZTcsIDB4OGUsIDB4Y2EsIDB4YTUsIDB4ZGEsIDB4MzcsIDB4YjMsIDB4YjgsCi0JMHhjNiwgMHhkYywgMHg2MiwgMHgzNSwgMHg3MywgMHg4MywgMHhmZSwgMHg1MywgMHhlMSwgMHhkYywgMHgyMCwgMHgxMywKLQkweDUxLCAweGFmLCAweDI0LCAweGY3LCAweDViLCAweDVjLCAweGI0LCAweDYyLCAweDRlLCAweGIxLCAweDlhLCAweGY5LAotCTB4NzQsIDB4MjcsIDB4ZjYsIDB4YjMsIDB4Y2MsIDB4Y2MsIDB4YTcsIDB4MjcsIDB4ZWYsIDB4YzUsIDB4MmMsIDB4N2UsCi0JMHg1NywgMHhjMywgMHg1OCwgMHhmNSwgMHgxNywgMHg2NywgMHgyNCwgMHg5MCwgMHgyOSwgMHgxZiwgMHg2YiwgMHhkNCwKLQkweDRiLCAweGZmLCAweDI0LCAweDY2LCAweGYzLCAweDk4LCAweDE1LCAweDllLCAweDM3LCAweDU4LCAweGZlLCAweDcyLAotCTB4MjUsIDB4YWYsIDB4ZmQsIDB4YjcsIDB4MmYsIDB4YWQsIDB4MzcsIDB4N2MsIDB4MWEsIDB4YjUsIDB4ZjksIDB4NmIsCi0JMHhmYywgMHhkZCwgMHhiMSwgMHhkZSwgMHhlZSwgMHhlZiwgMHhlNywgMHhkMiwgMHhmMiwgMHhmYiwgMHhlYiwgMHg2OSwKLQkweDk3LCAweDM0LCAweDc4LCAweDQzLCAweGFiLCAweGNhLCAweDYyLCAweDI4LCAweGJiLCAweDdkLCAweGJkLCAweDk1LAotCTB4MGIsIDB4MjgsIDB4YmIsIDB4MDcsIDB4N2UsIDB4MWEsIDB4ZjMsIDB4MzQsIDB4ZjgsIDB4OGUsIDB4MzIsIDB4YjgsCi0JMHgxNiwgMHgyNywgMHg3ZCwgMHg2MCwgMHg0NSwgMHhmMiwgMHgzYywgMHhlNSwgMHgyMiwgMHg2ZCwgMHg0YSwgMHhjYywKLQkweDUxLCAweDdkLCAweDI3LCAweDhjLCAweGEzLCAweGUzLCAweDc3LCAweDNkLCAweGRiLCAweDlmLCAweGY4LCAweDI2LAotCTB4YWUsIDB4ZTUsIDB4ZGIsIDB4NTMsIDB4ZTAsIDB4ZmIsIDB4MDMsIDB4YmUsIDB4MTMsIDB4OWQsIDB4NjUsIDB4MWUsCi0JMHg4MCwgMHhhNiwgMHhlMSwgMHhkYSwgMHhiZSwgMHhhZiwgMHg0NywgMHhkZiwgMHgyMSwgMHgyZCwgMHg5MywgMHg1ZSwKLQkweGFlLCAweGQ3LCAweDc0LCAweGQzLCAweDQ0LCAweDVkLCAweDdjLCAweDhjLCAweGY0LCAweGM3LCAweDU4LCAweDcyLAotCTB4YjMsIDB4ZDYsIDB4OGYsIDB4ZDUsIDB4NzUsIDB4NmMsIDB4ODIsIDB4YWUsIDB4ODksIDB4MWIsIDB4MWUsIDB4NzUsCi0JMHhjZCwgMHg3ZSwgMHg3NywgMHhiNSwgMHhiZiwgMHgzMSwgMHhmNCwgMHg0NywgMHgzYiwgMHgwZCwgMHg3ZSwgMHhiYSwKLQkweGM3LCAweDY4LCAweDBlLCAweGU1LCAweDk3LCAweDEzLCAweDU1LCAweDU3LCAweDZhLCAweDNmLCAweDMzLCAweGE2LAotCTB4ZjMsIDB4OGUsIDB4OTYsIDB4ZWIsIDB4NGUsIDB4ZDgsIDB4YjEsIDB4NDksIDB4YjcsIDB4MjYsIDB4ZmUsIDB4NWYsCi0JMHgxZCwgMHg1ZiwgMHgxYywgMHhiNSwgMHg0ZCwgMHg0MCwgMHg2NSwgMHg4ZCwgMHgzMiwgMHgzNSwgMHg0MCwgMHgxYSwKLQkweGU1LCAweGRjLCAweGI1LCAweDBkLCAweDc1LCAweDBkLCAweGVkLCAweDA4LCAweDQzLCAweDlmLCAweGI0LCAweDlkLAotCTB4YTIsIDB4ZDcsIDB4NjQsIDB4MGIsIDB4OGQsIDB4YzYsIDB4NjcsIDB4ODksIDB4Y2IsIDB4ZTYsIDB4MDYsIDB4OWQsCi0JMHg0NywgMHg4MCwgMHhiMiwgMHg3MiwgMHhhOCwgMHhjYiwgMHhhMiwgMHgzMiwgMHhkYiwgMHhmZiwgMHhiZiwgMHg4MywKLQkweGY0LCAweDVlLCAweGQ2LCAweGFkLCAweGJiLCAweDZmLCAweDlmLCAweDk4LCAweDExLCAweDhkLCAweGE3LCAweGJmLAotCTB4YTgsIDB4ZTIsIDB4YzksIDB4Y2UsIDB4MmQsIDB4YmUsIDB4N2EsIDB4NmUsIDB4MDUsIDB4YzAsIDB4N2IsIDB4MGYsCi0JMHg2NCwgMHgyNywgMHhkNywgMHhjOSwgMHhlNCwgMHg2ZiwgMHgzZiwgMHgyZSwgMHg0ZSwgMHgzNCwgMHhkMywgMHg1YiwKLQkweDZmLCAweDZlLCAweGE1LCAweDEwLCAweGFmLCAweDljLCAweDFiLCAweDY4LCAweDM1LCAweDljLCAweDE3LCAweDY5LAotCTB4M2IsIDB4YWUsIDB4ZjcsIDB4ODksIDB4OTQsIDB4MjIsIDB4MmMsIDB4YWQsIDB4YWIsIDB4NzAsIDB4MWIsIDB4ZDIsCi0JMHg5ZCwgMHhhMSwgMHhiOSwgMHhhNywgMHgzNCwgMHhjZCwgMHhiNSwgMHg1OCwgMHg5YSwgMHg0MywgMHg1ZCwgMHg5NywKLQkweGZiLCAweGRlLCAweGEzLCAweDJkLCAweDU1LCAweDlhLCAweGRiLCAweDYwLCAweDY5LCAweGVlLCAweDk5LCAweGY1LAotCTB4NjYsIDB4NGYsIDB4ZmMsIDB4ZmQsIDB4MmQsIDB4NjYsIDB4NGYsIDB4ZWEsIDB4MmYsIDB4NTcsIDB4M2QsIDB4NmYsCi0JMHhhMiwgMHhjZCwgMHgwOCwgMHg1ZiwgMHgyYywgMHg3YywgMHhhZSwgMHg4NSwgMHhmNSwgMHgwYywgMHg2MCwgMHhhZCwKLQkweDk1LCAweDM1LCAweDRkLCAweDM2LCAweGVlLCAweGM2LCAweGZkLCAweDczLCAweGZhLCAweDdkLCAweDUxLCAweDc5LAotCTB4MTQsIDB4NzYsIDB4NTAsIDB4YmUsIDB4ZmMsIDB4OGYsIDB4YzEsIDB4MDIsIDB4N2MsIDB4YmYsIDB4YTksIDB4NjUsCi0JMHhkZCwgMHg3YiwgMHg1YiwgMHgwYiwgMHhmOSwgMHg2ZCwgMHgwNiwgMHhiZiwgMHgwZSwgMHhkNiwgMHhmOCwgMHgzYywKLQkweDk4LCAweDJmLCAweGNhLCAweGZlLCAweDAxLCAweGViLCAweDAxLCAweGI5LCAweGJjLCAweDVjLCAweDk3LCAweDMxLAotCTB4MGIsIDB4ZTMsIDB4ZTMsIDB4MzAsIDB4NjYsIDB4NjgsIDB4ZjYsIDB4MTMsIDB4MjksIDB4ZTcsIDB4ZWYsIDB4ODQsCi0JMHg0ZiwgMHg3NCwgMHgwZiwgMHhmNCwgMHgyNCwgMHhlOSwgMHhmYiwgMHhhNSwgMHgxNiwgMHg5MywgMHhlNywgMHgxYiwKLQkweDg3LCAweDFlLCAweGZiLCAweDY1LCAweDliLCAweDBiLCAweDc1LCAweGY4LCAweDU3LCAweGViLCAweGU3LCAweGY4LAotCTB4ODIsIDB4ZjYsIDB4MWQsIDB4ZDIsIDB4Y2MsIDB4ZGYsIDB4YjcsIDB4OTgsIDB4OTgsIDB4ZjEsIDB4YjcsIDB4NWEsCi0JMHhjOCwgMHg2NywgMHg2YSwgMHhkYiwgMHgwZiwgMHgzNywgMHg2OCwgMHhiZSwgMHg3MCwgMHhjMiwgMHhlNywgMHhjZiwKLQkweGI0LCAweGFlLCAweDdjLCAweDBlLCAweGRiLCAweDNkLCAweGQ5LCAweGJhLCAweGIyLCAweDVkLCAweDU4LCAweGZlLAotCTB4NzMsIDB4MWIsIDB4NTcsIDB4OTYsIDB4NWYsIDB4ZTMsIDB4YWUsIDB4NmMsIDB4ZmYsIDB4ZjUsIDB4NTUsIDB4Y2YsCi0JMHgyZCwgMHg5YiwgMHg1NiwgMHgzZSwgMHg1ZiwgMHhiZCwgMHhlYSwgMHg3OSwgMHg2YSwgMHhkNSwgMHhmMywgMHg4NSwKLQkweDU1LCAweGNmLCAweDU3LCAweGI1LCAweGFkLCAweDdjLCAweGJlLCAweGJkLCAweGFkLCAweDNlLCAweGJjLCAweDg3LAotCTB4ZGIsIDB4NTYsIDB4YzIsIDB4NzUsIDB4YTcsIDB4OGUsIDB4ZjcsIDB4Y2YsIDB4NTQsIDB4YTIsIDB4YjIsIDB4YWIsCi0JMHg4MCwgMHhmNywgMHg0ZSwgMHhlNywgMHg2NiwgMHhhMywgMHhkNywgMHg2YSwgMHhkZiwgMHgzMywgMHhiZSwgMHhmNiwKLQkweGQ3LCAweGFiLCAweGZhLCAweGFiLCAweGI2LCAweGRiLCAweDVkLCAweDZkLCAweGU3LCAweDU3LCAweGRiLCAweDE5LAotCTB4ZDksIDB4MzYsIDB4NWIsIDB4ZTEsIDB4M2IsIDB4OTYsIDB4ODcsIDB4ZmQsIDB4OWEsIDB4YjYsIDB4NTMsIDB4YzUsCi0JMHg0ZSwgMHg5ZCwgMHgwYiwgMHgzYiwgMHhhYSwgMHg3MywgMHg2MSwgMHg5MywgMHhlMCwgMHhjMywgMHgzYiwgMHg3NSwKLQkweDRjLCAweDY5LCAweDkzLCAweDQyLCAweDc5LCAweGE1LCAweDU1LCAweGM3LCAweDk1LCAweDc0LCAweDJjLCAweGI1LAotCTB4MzAsIDB4MGEsIDB4ZGIsIDB4OTYsIDB4MzksIDB4YjAsIDB4ODEsIDB4ZWMsIDB4ZjEsIDB4Y2QsIDB4ZGQsIDB4ZTQsCi0JMHhjNCwgMHgxZSwgMHgwZSwgMHg4NiwgMHhkZCwgMHgyMCwgMHg5OCwgMHhmNCwgMHg2ZSwgMHhiMywgMHhmOSwgMHg2MiwKLQkweGI4LCAweDU3LCAweDRjLCAweDFiLCAweGVhLCAweGUwLCAweDI3LCAweGEwLCAweDgzLCAweGFiLCAweGJhLCAweGY3LAotCTB4NGUsIDB4OGMsIDB4YjUsIDB4MDAsIDB4OWEsIDB4MTksIDB4OTAsIDB4ZGYsIDB4YWQsIDB4YTQsIDB4YmUsIDB4MjQsCi0JMHhmYSwgMHhjYywgMHg0ZCwgMHgzZiwgMHg2YywgMHhiOCwgMHhhNSwgMHg0ZiwgMHhiZCwgMHhkZiwgMHhmMywgMHg2MSwKLQkweGViLCAweDA1LCAweGYyLCAweGIwLCAweDNmLCAweDA4LCAweDFhLCAweGVhLCAweDg1LCAweGJkLCAweGU3LCAweDY5LAotCTB4YmYsIDB4ZjQsIDB4YjQsIDB4YTYsIDB4MmQsIDB4ZDIsIDB4NTgsIDB4OGIsIDB4Y2UsIDB4ZDcsIDB4N2YsIDB4ZDQsCi0JMHg3NywgMHg2MiwgMHg5OSwgMHhmZSwgMHgzZiwgMHgzMiwgMHg3MSwgMHgxYSwgMHhiZiwgMHhkYiwgMHhmZCwgMHgxYSwKLQkweGY4LCAweDc2LCAweGE3LCAweGI3LCAweDA1LCAweDNlLCAweDBhLCAweDY5LCAweDg4LCAweGYxLCAweGFmLCAweGNiLAotCTB4NzUsIDB4MWUsIDB4MjEsIDB4MDMsIDB4NjgsIDB4MzMsIDB4NTEsIDB4YzYsIDB4MDksIDB4NTMsIDB4ODMsIDB4NjMsCi0JMHhjMiwgMHg3OSwgMHhhNywgMHgxMiwgMHg0OSwgMHhhNSwgMHhlZCwgMHhhYSwgMHhlMCwgMHg0NiwgMHg5ZiwgMHgzOSwKLQkweGI2LCAweGRjLCAweDYzLCAweDIxLCAweDNmLCAweGVmLCAweGZmLCAweGY0LCAweDk0LCAweDk3LCAweDczLCAweDIzLAotCTB4MzYsIDB4MmYsIDB4MzcsIDB4NTMsIDB4MzAsIDB4YjQsIDB4MzksIDB4NDEsIDB4ZGEsIDB4ODQsIDB4M2YsIDB4YjUsCi0JMHhkOCwgMHhmZiwgMHhiNywgMHgwMSwgMHhlZCwgMHhmYiwgMHhhNCwgMHgyMiwgMHhlZCwgMHhmZiwgMHg0ZCwgMHgzMCwKLQkweDE3LCAweDY1LCAweDVmLCAweDg0LCAweDdiLCAweGZmLCAweGE3LCAweDMzLCAweDFhLCAweDU3LCAweDc3LCAweGNhLAotCTB4ODEsIDB4MjIsIDB4NmQsIDB4ZTEsIDB4OTgsIDB4Y2UsIDB4ZTcsIDB4MTgsIDB4ZjcsIDB4NjksIDB4YTcsIDB4YzUsCi0JMHg4MCwgMHhjNywgMHgwZiwgMHgwMSwgMHg3ZiwgMHgyZCwgMHhiMCwgMHhiOSwgMHg0NywgMHg1MCwgMHgyNywgMHgyMiwKLQkweDYzLCAweDYwLCAweGYxLCAweGQ5LCAweDAyLCAweGY5LCAweDkzLCAweGY3LCAweDI4LCAweGVhLCAweGJiLCAweDMyLAotCTB4NWYsIDB4YjgsIDB4NTksIDB4ZTcsIDB4ZGIsIDB4OWQsIDB4NDYsIDB4ZGIsIDB4MjcsIDB4NzEsIDB4Y2QsIDB4MTYsCi0JMHgyNiwgMHhkMCwgMHg2NiwgMHhhZiwgMHhhZSwgMHgzZiwgMHg1YiwgMHg2MiwgMHg4ZSwgMHhiMiwgMHg0MCwgMHgyZSwKLQkweGVkLCAweDk3LCAweGZjLCAweDVjLCAweDk3LCAweDhjLCAweGM1LCAweDE3LCAweDY2LCAweGEyLCAweGNiLCAweDcxLAotCTB4OTksIDB4OGYsIDB4NmYsIDB4ZTAsIDB4MWUsIDB4NDcsIDB4ZmUsIDB4NGEsIDB4ZWUsIDB4MDcsIDB4NGIsIDB4NzQsCi0JMHg3NCwgMHhiYiwgMHhlYSwgMHg2ZCwgMHhkMywgMHgzZSwgMHhkNywgMHhhMCwgMHhlYywgMHhhYywgMHgwYywgMHhjOSwKLQkweDRkLCAweDk1LCAweGNmLCAweDZlLCAweDM2LCAweGIxLCAweGE4LCAweDE1LCAweGYxLCAweGFkLCAweGMzLCAweGM0LAotCTB4OGEsIDB4M2EsIDB4MWEsIDB4ZTUsIDB4YjksIDB4MjUsIDB4OTksIDB4M2QsIDB4MjUsIDB4MTIsIDB4MzksIDB4MWEsCi0JMHhjNiwgMHgxMiwgMHg1OSwgMHhlNiwgMHg0YSwgMHhkNywgMHg5NSwgMHg4MCwgMHhlYiwgMHgxNCwgMHg2NCwgMHg2YiwKLQkweDNjLCAweDI2LCAweDVmLCAweGRjLCAweDE2LCAweDhlLCAweDk1LCAweDBiLCAweGE2LCAweGI3LCAweGU1LCAweGU0LAotCTB4ZDMsIDB4YjgsIDB4YjIsIDB4NTcsIDB4YTYsIDB4NGEsIDB4MTksIDB4YzUsIDB4NzEsIDB4YmYsIDB4MTMsIDB4NTAsCi0JMHg5NiwgMHhhOSwgMHgyMSwgMHg0ZiwgMHg3MiwgMHg2ZCwgMHhlMSwgMHhkOCwgMHhmMCwgMHg2ZiwgMHg3NiwgMHg4NCwKLQkweGUzLCAweGQzLCAweGU2LCAweDM2LCAweDY3LCAweDFlLCAweGYyLCAweGRjLCAweDc3LCAweDAxLCAweGZkLCAweDQ1LAotCTB4ODYsIDB4ZWUsIDB4ZGUsIDB4NDAsIDB4ZGYsIDB4NjEsIDB4NTgsIDB4ZDgsIDB4MGUsIDB4MzIsIDB4NWQsIDB4YjEsCi0JMHg2ZiwgMHhjMiwgMHg0OSwgMHhmOCwgMHg2YiwgMHhlMSwgMHg1YywgMHg0YywgMHhjNiwgMHg4MSwgMHhhMywgMHhkYywKLQkweGViLCAweGMyLCAweGRiLCAweGU3LCAweDdhLCAweGFhLCAweDFlLCAweGJjLCAweGEzLCAweDM2LCAweDk2LCAweGM4LAotCTB4ZjgsIDB4ZTAsIDB4M2EsIDB4ZTAsIDB4YWQsIDB4MDUsIDB4ZTUsIDB4MWYsIDB4OTQsIDB4YTksIDB4NjMsIDB4NmYsCi0JMHhkYiwgMHhjYywgMHhiZCwgMHhlYywgMHgwNiwgMHhjZiwgMHhiMSwgMHgzOSwgMHhhNywgMHgzYywgMHhiZiwgMHg3MywKLQkweDM3LCAweGVhLCAweGYwLCAweGZkLCAweGNkLCAweDY4LCAweDkzLCAweGNhLCAweDY1LCAweDIyLCAweDliLCAweGUxLAotCTB4MTMsIDB4NzEsIDB4ZGMsIDB4MjAsIDB4ZDIsIDB4YjUsIDB4YTMsIDB4NTksIDB4ZTcsIDB4OTAsIDB4Y2EsIDB4MjksCi0JMHhlYSwgMHhmMywgMHhiMCwgMHhlZCwgMHhkZCwgMHgzYSwgMHg0NywgMHgwMywgMHg3ZSwgMHg3YiwgMHg2ZSwgMHgyNCwKLQkweDQyLCAweGY5LCAweGQ1LCAweDJiLCAweGMzLCAweGQ0LCAweDI3LCAweGE3LCAweDZlLCAweGQ2LCAweGI0LCAweGRmLAotCTB4YmQsIDB4OGQsIDB4NjcsIDB4OTksIDB4ZmEsIDB4OGMsIDB4OGQsIDB4MWUsIDB4MjcsIDB4OGMsIDB4YTMsIDB4MjgsCi0JMHg4NywgMHhmZCwgMHhmZSwgMHg5YSwgMHgzMCwgMHhkYywgMHhmNSwgMHgyNiwgMHg2MSwgMHhiOCwgMHhlYiwgMHg0ZCwKLQkweGMyLCAweDQwLCAweDVjLCAweDAwLCAweDhlLCAweGNhLCAweDVmLCAweDZjLCAweDA4LCAweDYzLCAweGQ1LCAweDk3LAotCTB4NjIsIDB4MWUsIDB4MDcsIDB4OGIsIDB4NzcsIDB4YzksIDB4YTEsIDB4YTIsIDB4YTMsIDB4ZTMsIDB4OGUsIDB4MGIsCi0JMHg4YSwgMHgzMiwgMHhjMSwgMHgwNSwgMHg0ZiwgMHg4MiwgMHhmNywgMHg4YSwgMHhlMCwgMHhjZCwgMHgyMiwgMHg3OCwKLQkweGIxLCAweDA4LCAweGJlLCAweDg0LCAweGZkLCAweDdmLCAweDA2LCAweGY2LCAweGZmLCAweDkzLCAweDU4LCAweDliLAotCTB4ZDMsIDB4MmIsIDB4NzgsIDB4MzksIDB4YWQsIDB4NzksIDB4MzksIDB4NWYsIDB4YTQsIDB4YWYsIDB4ZDYsIDB4N2YsCi0JMHgxMSwgMHg3ZSwgMHg4ZCwgMHhjYSwgMHg3MCwgMHgyMSwgMHgwNSwgMHg1NSwgMHhlMiwgMHg0NCwgMHhiMywgMHhmZCwKLQkweDlmLCAweDI0LCAweGJmLCAweGNhLCAweDgzLCAweGZlLCAweDBkLCAweDY4LCAweDczLCAweDE4LCAweDM0LCAweDllLAotCTB4YTIsIDB4MWQsIDB4NDgsIDB4ZmIsIDB4MjcsIDB4MDcsIDB4ZGUsIDB4M2MsIDB4NGMsIDB4NWYsIDB4NGQsIDB4NWQsCi0JMHhiOSwgMHg0OSwgMHhhOCwgMHg1ZiwgMHhhMiwgMHgzYiwgMHg5OCwgMHg3YiwgMHhjOCwgMHhiOSwgMHgyNiwgMHg1NywKLQkweGUxLCAweGM5LCAweGYwLCAweGVmLCAweDg0LCAweDQ3LCAweDNkLCAweDQzLCAweGJlLCAweDdkLCAweDk5LCAweDdjLAotCTB4NWIsIDB4YzMsIDB4YWIsIDB4MDEsIDB4ZTcsIDB4MTcsIDB4YjgsIDB4ZGIsIDB4ZWEsIDB4YjUsIDB4YWQsIDB4ZDYsCi0JMHhkZiwgMHhiNCwgMHg1YywgMHg1ZiwgMHg4ZiwgMHg1ZiwgMHgyMiwgMHgzZiwgMHg0MiwgMHgyNywgMHgxMSwgMHhmNywKLQkweGM5LCAweDRjLCAweDY0LCAweDhiLCAweGM1LCAweDNkLCAweDZjLCAweGI3LCAweDFkLCAweDk3LCAweDAwLCAweGY3LAotCTB4OWQsIDB4OTIsIDB4OWIsIDB4MGYsIDB4YzQsIDB4ZGIsIDB4MTEsIDB4ZjYsIDB4NTksIDB4ZWQsIDB4YzcsIDB4YjUsCi0JMHhmZCwgMHg4YywgMHgxNywgMHgxYywgMHgxOSwgMHhkOSwgMHhjNiwgMHg3ZCwgMHgwOCwgMHgwNywgMHg3YSwgMHgzZSwKLQkweDVjLCAweDBmLCAweGQ4LCAweGZiLCAweDdhLCAweGNkLCAweDI5LCAweDYzLCAweDI5LCAweDViLCAweDViLCAweDZjLAotCTB4ZmMsIDB4ODksIDB4ZmQsIDB4MWQsIDB4NWUsIDB4YjUsIDB4NGUsIDB4MTcsIDB4MDIsIDB4OWUsIDB4MTEsIDB4OWIsCi0JMHhmMiwgMHg2ZSwgMHhhOCwgMHhhMSwgMHg5NSwgMHhmYiwgMHgyYywgMHhhZCwgMHhhOCwgMHg1NSwgMHhmMywgMHhiOCwKLQkweGRkLCAweGQyLCAweDRhLCAweDA4LCAweDZmLCAweDNjLCAweGE0LCAweDk1LCAweGE2LCAweDkwLCAweDU2LCAweDcyLAotCTB4MzMsIDB4MjEsIDB4YWQsIDB4YjAsIDB4ZWQsIDB4ZWQsIDB4MjEsIDB4YWQsIDB4MjQsIDB4NmIsIDB4NjksIDB4MjUsCi0JMHgzNywgMHhlMywgMHhlMCwgMHg1YSwgMHgwZCwgMHgwNywgMHhlOSwgMHg4NSwgMHhmZCwgMHg5MCwgMHg1ZSwgMHgwMCwKLQkweDRiLCAweGU1LCAweGQ2LCAweGQ2LCAweDkwLCAweDVlLCAweGUyLCAweGU4LCAweGU3LCAweDUwLCAweGQxLCAweGU0LAotCTB4NzQsIDB4YzAsIDB4ZWYsIDB4YjIsIDB4M2EsIDB4YzQsIDB4YzUsIDB4OWEsIDB4MWIsIDB4MWYsIDB4YjEsIDB4M2UsCi0JMHg4ZCwgMHhmOCwgMHg5NiwgMHg0NiwgMHhhYSwgMHg3OSwgMHhlZSwgMHhhYiwgMHg2OCwgMHgwMywgMHhiOCwgMHg2NywKLQkweDJlLCAweGViLCAweDc2LCAweDRkLCAweDFiLCAweGY3LCAweGZiLCAweDUzLCAweGE4LCAweGJiLCAweDA3LCAweGI0LAotCTB4MTEsIDB4ZTIsIDB4ZTAsIDB4N2EsIDB4OGIsIDB4ODMsIDB4ZDUsIDB4NmIsIDB4MzksIDB4NjYsIDB4NzEsIDB4YjAsCi0JMHhjNywgMHhlMiwgMHg0MCwgMHhmMywgMHg0YiwgMHg4ZSwgMHg2YiwgMHhhNiwgMHgzNCwgMHgwZSwgMHg5YSwgMHgzNCwKLQkweDBlLCAweDQ0LCAweDg1LCAweDZkLCAweGM3LCAweGVhLCAweGUwLCAweDgwLCAweDc1LCAweGY2LCAweGU4LCAweGY5LAotCTB4NDcsIDB4MzAsIDB4ZmYsIDB4ZmQsIDB4OTgsIDB4YmYsIDB4ZDIsIDB4ZjMsIDB4ZTcsIDB4M2EsIDB4NzAsIDB4ZmUsCi0JMHg4MCwgMHhhNSwgMHg3MiwgMHg3MiwgMHg3OSwgMHhmZSwgMHg2ZCwgMHhlOCwgMHhlMywgMHg2MCwgMHgzMSwgMHhhMiwKLQkweGU3LCAweDBmLCAweGRiLCAweDdlLCAweDMwLCAweDljLCAweGZmLCAweGU5LCAweDhhLCAweGM5LCAweDdmLCAweDNlLAotCTB4YmQsIDB4NDYsIDB4Y2YsIDB4NGQsIDB4NTksIDB4ZGUsIDB4ZjAsIDB4YjQsIDB4NWYsIDB4Y2MsIDB4OTgsIDB4ZjYsCi0JMHgxOSwgMHhlOCwgMHhiNiwgMHg2OSwgMHgzZiwgMHg2OSwgMHhjZiwgMHg0MywgMHgxOSwgMHg3YiwgMHhlOSwgMHgxYiwKLQkweDNlLCAweDc5LCAweGU3LCAweGUzLCAweDNhLCAweDBmLCAweGU1LCAweDcxLCAweGRhLCAweDRkLCAweGM1LCAweDM2LAotCTB4MTksIDB4OTksIDB4YWUsIDB4ODUsIDB4OWIsIDB4ZjAsIDB4ZTYsIDB4YjQsIDB4MWMsIDB4Y2QsIDB4NjIsIDB4N2UsCi0JMHhlMywgMHg3ZSwgMHgyZiwgMHhlNCwgMHg5YiwgMHhhNiwgMHgyNSwgMHg5NCwgMHhhNywgMHg3MiwgMHhjMywgMHg5MSwKLQkweDI2LCAweDUxLCAweDBmLCAweDdjLCAweDA4LCAweDczLCAweDhlLCAweGNhLCAweDY2LCAweGFmLCAweGRiLCAweGRkLAotCTB4YTEsIDB4YTgsIDB4MGIsIDB4MmYsIDB4YWIsIDB4ZDEsIDB4ODUsIDB4ZWQsIDB4NTYsIDB4MTcsIDB4NmUsIDB4YTIsCi0JMHgyZSwgMHgwNCwgMHhkYywgMHg3NywgMHhjYSwgMHhlMSwgMHgyMiwgMHhkNywgMHgyZiwgMHg5NywgMHg2YywgMHg4MiwKLQkweGZlLCAweGZmLCAweDgxLCAweGM3LCAweGIzLCAweDI3LCAweDNhLCAweDZlLCAweDk2LCAweDM4LCAweGFjLCAweDY5LAotCTB4OTksIDB4M2EsIDB4MmQsIDB4YTUsIDB4Y2YsIDB4NmEsIDB4MmMsIDB4ZDIsIDB4YzYsIDB4OGUsIDB4MzMsIDB4MTYsCi0JMHg0YSwgMHhiZCwgMHhmNywgMHhlMywgMHhlMCwgMHg3MywgMHg3NSwgMHhmNCwgMHhkZSwgMHg2NCwgMHhkMSwgMHhkOCwKLQkweDZmLCAweDBkLCAweGIwLCAweDA5LCAweGU1LCAweDQ0LCAweDNiLCAweGFlLCAweDhkLCAweDNjLCAweGFiLCAweGQwLAotCTB4ZGIsIDB4YTMsIDB4OWEsIDB4YTUsIDB4ZTEsIDB4NDQsIDB4YWIsIDB4NGMsIDB4NGMsIDB4MWIsIDB4MWIsIDB4NTcsCi0JMHg5ZCwgMHgwMCwgMHhmZSwgMHg0ZiwgMHgzMCwgMHhkZiwgMHg1NSwgMHg3NCwgMHg3ZSwgMHg3ZSwgMHhiNiwgMHgwNCwKLQkweDNiLCAweDc3LCAweGY2LCAweDRlLCAweDkzLCAweGI3LCAweDMyLCAweGRkLCAweGEwLCAweDdmLCAweGQzLCAweDA2LAotCTB4YzksIDB4ZmIsIDB4NjksIDB4ZTgsIDB4YmIsIDB4OTgsIDB4NGMsIDB4YTAsIDB4Y2YsIDB4ZWUsIDB4NmQsIDB4OGQsCi0JMHg5OCwgMHg3MywgMHgxYywgMHg2ZCwgMHhlOSwgMHhmMywgMHgzMSwgMHg4ZSwgMHhkNiwgMHgyOCwgMHhkMSwgMHhkOSwKLQkweGI4LCAweGNlLCAweGFkLCAweGU3LCAweGQ5LCAweGQxLCAweGNjLCAweDYwLCAweDFiLCAweGRlLCAweDMxLCAweDlmLAotCTB4YzEsIDB4YzUsIDB4NTgsIDB4YTEsIDB4ZWMsIDB4NDcsIDB4YmYsIDB4NDcsIDB4YzUsIDB4ZWUsIDB4ZjcsIDB4MGMsCi0JMHg2OSwgMHhmZCwgMHgxNywgMHgzOSwgMHhlYSwgMHhkYSwgMHgzMywgMHg3NCwgMHg4MywgMHg1OCwgMHhmNywgMHg3YSwKLQkweDdhLCAweGQxLCAweDE4LCAweGI5LCAweDE5LCAweGFjLCAweDlmLCAweDNhLCAweDE1LCAweGM1LCAweGJkLCAweDEzLAotCTB4ZjcsIDB4YjAsIDB4YmYsIDB4NTAsIDB4OGYsIDB4NDAsIDB4MzcsIDB4YmUsIDB4YjMsIDB4NmYsIDB4YTMsIDB4MzQsCi0JMHgwMywgMHhkZiwgMHhiMywgMHgwYSwgMHhiOCwgMHgzNiwgMHgzOSwgMHg1OSwgMHgzOSwgMHhjZCwgMHgwYiwgMHg1NSwKLQkweDdhLCAweDc4LCAweGYyLCAweDc1LCAweGY5LCAweDgxLCAweDM0LCAweDQxLCAweDVhLCAweGEwLCAweDVjLCAweDI0LAotCTB4NmQsIDB4NTAsIDB4MjYsIDB4M2EsIDB4ZmEsIDB4NmMsIDB4MDMsIDB4ZTksIDB4ZTEsIDB4MDksIDB4ZGYsIDB4OGIsCi0JMHg3MCwgMHhkZiwgMHhkZSwgMHhjNCwgMHhlNSwgMHg0OSwgMHgxYiwgMHhhNCwgMHhmOSwgMHhhNCwgMHg4ZSwgMHhkNywKLQkweGE3LCAweGU1LCAweDdiLCAweDkyLCAweDZlLCAweGViLCAweDg2LCAweDVkLCAweGY2LCAweDJmLCAweGJiLCAweGM2LAotCTB4ZTYsIDB4ZGMsIDB4YWQsIDB4YTYsIDB4MzksIDB4ZTgsIDB4MjYsIDB4ZTYsIDB4ZDAsIDB4ZjUsIDB4Y2EsIDB4ZmIsCi0JMHgyYSwgMHgzOSwgMHhlMCwgMHhlMSwgMHg1ZSwgMHgyOCwgMHhlNSwgMHgzYiwgMHg3NSwgMHg1ZSwgMHhlMiwgMHhlZSwKLQkweGMyLCAweDQ2LCAweGI5LCAweGM1LCAweDhmLCAweGQ5LCAweGI4LCAweGZiLCAweDQxLCAweGQwLCAweGMxLCAweGEyLAotCTB4MjMsIDB4MjcsIDB4Y2UsIDB4ZTIsIDB4M2EsIDB4ZTcsIDB4NzAsIDB4ZmQsIDB4Y2UsIDB4ZmIsIDB4ZTksIDB4OTQsCi0JMHgyMiwgMHhiMywgMHg3YiwgMHhkMSwgMHhjNCwgMHhhMiwgMHhmNCwgMHhiOSwgMHgxMywgMHhmYSwgMHgwYywgMHhjOCwKLQkweDgyLCAweGQzLCAweDc0LCAweGUyLCAweGQwLCAweDQ2LCAweGUzLCAweDRiLCAweDAzLCAweDE2LCAweGFmLCAweGQxLAotCTB4MWQsIDB4YTEsIDB4MmQsIDB4ZTcsIDB4MDcsIDB4NDEsIDB4OTYsIDB4NzYsIDB4ODMsIDB4MjgsIDB4ZWQsIDB4MjMsCi0JMHhjMSwgMHhlNywgMHg0MywgMHgxOSwgMHhlMywgMHgxMywgMHg1YiwgMHg5ZCwgMHhjNiwgMHg1MywgMHgyZiwgMHg1YSwKLQkweDVhLCAweDkxLCAweDg4LCAweDFhLCAweDdhLCAweGM2LCAweDY5LCAweDM4LCAweDcxLCAweDljLCAweDZiLCAweGE2LAotCTB4ZjMsIDB4YTQsIDB4MGQsIDB4NWQsIDB4M2QsIDB4ZTcsIDB4NTQsIDB4ZTksIDB4ZWEsIDB4MWIsIDB4ZjYsIDB4YjcsCi0JMHgxYSwgMHg2YSwgMHg5MiwgMHg3NCwgMHhhYSwgMHgwOSwgMHhmMywgMHgxZCwgMHgyZSwgMHg4NCwgMHgzMCwgMHg3ZSwKLQkweDFmLCAweDcwLCAweDExLCAweDFlLCAweGQwLCAweGVkLCAweGVjLCAweDlmLCAweGUxLCAweDVhLCAweDAyLCAweDJjLAotCTB4ZjcsIDB4MDEsIDB4ZWUsIDB4ZjMsIDB4ODAsIDB4ZjksIDB4MDIsIDB4MmUsIDB4ZDUsIDB4MTEsIDB4OTEsIDB4M2YsCi0JMHg3NiwgMHgyMiwgMHhiMywgMHhiNSwgMHhmMCwgMHgxMiwgMHhjNiwgMHhkMywgMHgxNiwgMHhkZSwgMHhkNywgMHg4MiwKLQkweGQ1LCAweDk1LCAweGM1LCAweDgxLCAweDJlLCAweGMwLCAweDQzLCAweDM4LCAweDVmLCAweDAyLCAweDhjLCAweGI0LAotCTB4NWIsIDB4OWYsIDB4YzcsIDB4YjMsIDB4MGIsIDB4ZjgsIDB4NWUsIDB4YjAsIDB4MzAsIDB4ODEsIDB4MWUsIDB4YTcsCi0JMHhmZiwgMHg0NywgMHhmNSwgMHg3NywgMHg4MSwgMHg3NiwgMHhmNCwgMHg5ZiwgMHhkYiwgMHhlNywgMHhjZSwgMHg1NSwKLQkweDMyLCAweGEwLCAweGM3LCAweDIxLCAweDllLCAweGE3LCAweDhhLCAweDRiLCAweGI0LCAweDAzLCAweGMwLCAweGY3LAotCTB4M2YsIDB4OTQsIDB4YzgsIDB4YTksIDB4ODQsIDB4MWMsIDB4MmEsIDB4NzAsIDB4MGYsIDB4ZTgsIDB4MjQsIDB4ZjAsCi0JMHhhMSwgMHhjZiwgMHhhNCwgMHhhMCwgMHhjZSwgMHgxNSwgMHhiOCwgMHhhMCwgMHhlYywgMHg2NywgMHhiNywgMHhlMywKLQkweGVhLCAweGM1LCAweGY1LCAweDU2LCAweDVjLCAweDIwLCAweDg3LCAweGQ5LCAweDEzLCAweGI4LCAweGZhLCAweGQwLAotCTB4YjcsIDB4OGEsIDB4MzcsIDB4MDksIDB4NzMsIDB4YTksIDB4YmUsIDB4OGQsIDB4MzYsIDB4ZGEsIDB4YjYsIDB4Y2MsCi0JMHhhOSwgMHhhMSwgMHgwMSwgMHhlMCwgMHg2ZiwgMHgwMCwgMHhiMCwgMHgyNSwgMHg3MCwgMHgzMSwgMHhmZiwgMHhmOCwKLQkweDg3LCAweDhlLCAweDljLCAweDdhLCAweDE5LCAweDE3LCAweDE4LCAweGVjLCAweDE0LCAweDA4LCAweGYzLCAweGQ0LAotCTB4MjAsIDB4MmUsIDB4MjgsIDB4YjEsIDB4NTMsIDB4NjksIDB4NWMsIDB4MjMsIDB4YjgsIDB4ZmUsIDB4ZDIsIDB4MzEsCi0JMHgzYywgMHhkNywgMHgwOSwgMHg3YywgMHg4NSwgMHgzYywgMHgwMiwgMHg5YywgMHhhZiwgMHhlMCwgMHhiOSwgMHhhZiwKLQkweDNiLCAweDZmLCAweDljLCAweGU3LCAweDdlLCAweGUyLCAweDE4LCAweDllLCAweDdiLCAweGM1LCAweGE5LCAweGYyLAotCTB4ZGMsIDB4NTksIDB4NDcsIDB4M2QsIDB4ZmMsIDB4OGMsIDB4MTMsIDB4NzksIDB4OTgsIDB4YmUsIDB4YzQsIDB4NTksCi0JMHhjNywgMHhmMCwgMHg3ZiwgMHg0NCwgMHg4NiwgMHhmNywgMHg4MiwgMHg5NiwgMHgxZSwgMHg1ZSwgMHhjMCwgMHg0NSwKLQkweGJhLCAweDdhLCAweDE2LCAweGU1LCAweDJmLCAweGFjLCAweDFhLCAweGY3LCAweGY5LCAweDM3LCAweDMxLCAweGVlLAotCTB4YWIsIDB4NzYsIDB4NWMsIDB4NTEsIDB4ZDUsIDB4NzEsIDB4MmYsIDB4YTAsIDB4ZWYsIDB4OTcsIDB4ZWMsIDB4YjgsCi0JMHgxNywgMHg2YSwgMHhjNiwgMHgwNSwgMHhhZCwgMHgzYywgMHhiYywgMHg4NCwgMHg4YiwgMHg3NCwgMHhmMSwgMHgyMiwKLQkweGNhLCAweDQzLCAweDk5LCAweDgwLCAweDg1LCAweDZlLCAweDZlLCAweGQwLCAweDY3LCAweDlkLCAweGUyLCAweDVlLAotCTB4YzMsIDB4YjIsIDB4NmUsIDB4NGMsIDB4ZDcsIDB4ZTgsIDB4ODcsIDB4MzcsIDB4YTIsIDB4MWYsIDB4MjcsIDB4OGIsCi0JMHhiNCwgMHgxMSwgMHgxNywgMHg2YSwgMHhlNCwgMHgwMiwgMHg3ZCwgMHhhMywgMHg0MCwgMHg4ZSwgMHg2OSwgMHgzZiwKLQkweDg4LCAweDNlLCAweDExLCAweGZkLCAweGEzLCAweGQ1LCAweGI2LCAweGQ1LCAweDI3LCAweDc1LCAweGVlLCAweGQ4LAotCTB4YWYsIDB4MTUsIDB4M2EsIDB4ZTUsIDB4ZDMsIDB4MDUsIDB4ZGEsIDB4ODQsIDB4YTQsIDB4OTcsIDB4MjAsIDB4OTgsCi0JMHhkOCwgMHg0MSwgMHhmYiwgMHgzNCwgMHgxNywgMHg1YywgMHhlMiwgMHg5MSwgMHg0ZSwgMHgzYywgMHhmNywgMHgzMywKLQkweDZiLCAweDc1LCAweDQ2LCAweDY5LCAweDE4LCAweGJlLCAweDdiLCAweGU2LCAweGU4LCAweGFmLCAweDQwLCAweDY3LAotCTB4MzQsIDB4MDAsIDB4NmUsIDB4ZDIsIDB4NWIsIDB4ODcsIDB4ZGMsIDB4NTgsIDB4NTIsIDB4NTMsIDB4OWIsIDB4MjUsCi0JMHgyMSwgMHgzNywgMHgxNSwgMHgxYSwgMHg2MSwgMHhmNywgMHgzMCwgMHhhZiwgMHhhYSwgMHg1OSwgMHhiYSwgMHg3NywKLQkweGM0LCAweDRjLCAweGRlLCAweGI3LCAweDFiLCAweGM3LCAweDZmLCAweGQ3LCAweGU0LCAweGExLCAweGM3LCAweDEzLAotCTB4NzgsIDB4ZmYsIDB4N2IsIDB4MmUsIDB4ZTUsIDB4NjAsIDB4ZGMsIDB4YmIsIDB4NTYsIDB4ZTcsIDB4ZjQsIDB4NzQsCi0JMHhlZCwgMHhhMCwgMHhkZCwgMHg3MiwgMHhiZCwgMHhkNiwgMHhlMSwgMHhkMSwgMHgzNSwgMHg3NiwgMHg5MiwgMHhlYSwKLQkweDcwLCAweGE1LCAweDZhLCAweGEzLCAweDhkLCAweDE3LCAweDUyLCAweDQ5LCAweGMyLCAweGY1LCAweDkwLCAweDcwLAotCTB4ZmYsIDB4ZWIsIDB4MWUsIDB4YzksIDB4ZmIsIDB4YWQsIDB4ZjAsIDB4MGIsIDB4MTgsIDB4M2IsIDB4NGYsIDB4ZjUsCi0JMHhkMiwgMHgzNiwgMHg5YSwgMHg5ZCwgMHg3NiwgMHg2ZCwgMHg1ZSwgMHhmNCwgMHg0NiwgMHg3OSwgMHg0ZSwgMHg4ZiwKLQkweGQzLCAweGE4LCAweDYxLCAweDM0LCAweDY3LCAweDI1LCAweGI4LCAweDhmLCAweDEwLCAweGQzLCAweGU3LCAweDczLAotCTB4NjYsIDB4Y2IsIDB4MmQsIDB4NWEsIDB4ZWYsIDB4Y2MsIDB4OTYsIDB4OTksIDB4ODcsIDB4MGYsIDB4N2YsIDB4YWEsCi0JMHhjYywgMHhiYywgMHg3YiwgMHg1ZiwgMHhkYywgMHg3NywgMHhjMiwgMHhjZiwgMHgyZCwgMHg2ZiwgMHg5MSwgMHhmMSwKLQkweGU5LCAweDc1LCAweGQyLCAweGU4LCAweGE5LCAweGY4LCAweDY2LCAweGM4LCAweDQ3LCAweGI2LCAweGU5LCAweGRhLAotCTB4MDEsIDB4ZmYsIDB4NzAsIDB4NjYsIDB4YWIsIDB4M2MsIDB4MzksIDB4YzMsIDB4YmUsIDB4M2IsIDB4NjQsIDB4NmUsCi0JMHg1ZSwgMHgxYywgMHhmNywgMHg5ZCwgMHhlYiwgMHg1MSwgMHgwNywgMHg3MiwgMHg3ZCwgMHgwNywgMHhjYiwgMHg5MiwKLQkweGI4LCAweDhiLCAweDcyLCAweGRmLCAweDE5LCAweDk1LCAweDczLCAweDAzLCAweDdjLCAweDY2LCAweGVlLCAweGJmLAotCTB4NDQsIDB4ZDksIDB4ZGYsIDB4YjksIDB4ODEsIDB4NGUsIDB4NzksIDB4N2MsIDB4MWUsIDB4MzQsIDB4MDEsIDB4YjksCi0JMHgzZiwgMHg3MiwgMHg4MiwgMHgzMCwgMHg4OSwgMHhlYywgMHg5YSwgMHg2NSwgMHgyYywgMHhiZCwgMHhkYiwgMHg2NSwKLQkweGRjLCAweDk0LCAweGZiLCAweDM0LCAweGI3LCAweDBjLCAweDcwLCAweDJjLCAweGU4LCAweDI1LCAweGU4LCAweGI4LAotCTB4YWUsIDB4MWQsIDB4NDYsIDB4MTYsIDB4YTQsIDB4NjcsIDB4MWIsIDB4NTAsIDB4Y2UsIDB4N2UsIDB4ZTEsIDB4M2YsCi0JMHhlZSwgMHg2NSwgMHgzZiwgMHg2MSwgMHg1YiwgMHg4NSwgMHgzOSwgMHgzNSwgMHg2YSwgMHg3YSwgMHg1OSwgMHg1YSwKLQkweGE1LCAweDNmLCAweGNlLCAweGZjLCAweDRjLCAweGY2LCAweDM3LCAweGZiLCAweGU4LCAweGQ1LCAweDdiLCAweDIxLAotCTB4ZGMsIDB4NTMsIDB4MzYsIDB4YjYsIDB4MTUsIDB4ZDcsIDB4NDQsIDB4ZWYsIDB4MjksIDB4YzAsIDB4YWUsIDB4YmEsCi0JMHg0MiwgMHhkYiwgMHgxNywgMHg3MywgMHgxNSwgMHhhZSwgMHgyMCwgMHg2MywgMHg1MSwgMHhlMSwgMHgxYSwgMHgyNSwKLQkweGU0LCAweGQxLCAweGUyLCAweGYyLCAweDNhLCAweDZkLCAweDY5LCAweDU4LCAweGI5LCAweDRlLCAweGE0LCAweDE1LAotCTB4N2YsIDB4Y2MsIDB4ZGEsIDB4MWUsIDB4OGIsIDB4OTIsIDB4ODMsIDB4NWQsIDB4ZDYsIDB4YWIsIDB4ZDcsIDB4NmMsCi0JMHgxMSwgMHhiNiwgMHhhYywgMHg1ZCwgMHgzMywgMHg2ZCwgMHhjZiwgMHhlNiwgMHhjMywgMHgzNSwgMHgxYiwgMHg4NSwKLQkweGM2LCAweDI5LCAweGFiLCAweDRkLCAweDVjLCAweDMzLCAweDk3LCAweGYxLCAweDZlLCAweGUwLCAweDNkLCAweDg3LAotCTB4NzUsIDB4Y2EsIDB4NjEsIDB4OGQsIDB4NzIsIDB4ZTUsIDB4MGUsIDB4OTksIDB4M2QsIDB4YTYsIDB4M2EsIDB4MWIsCi0JMHg0NCwgMHg5MiwgMHhlMywgMHg1ZSwgMHg4NywgMHg0YywgMHhjZSwgMHgzMywgMHg5NiwgMHhiMCwgMHgwNSwgMHgzNiwKLQkweGQ4LCAweDU2LCAweDVjLCAweDlkLCAweDc4LCAweDY2LCAweDNiLCAweGYwLCAweDU0LCAweDU5LCAweGExLCAweDZkLAotCTB4ZDMsIDB4MWEsIDB4M2IsIDB4ZWIsIDB4NzEsIDB4OGMsIDB4Y2QsIDB4MWMsIDB4ZTEsIDB4MjcsIDB4ODAsIDB4ODcsCi0JMHgyYSwgMHhlZiwgMHg0YywgMHhkNSwgMHhjNCwgMHg5ZiwgMHgzOCwgMHg1NywgMHhhZCwgMHg0MywgMHgzMSwgMHhkZiwKLQkweGI4LCAweDVlLCAweDRmLCAweDFkLCAweDg3LCAweDJhLCAweDM2LCAweGJlLCAweDE5LCAweDdiLCAweDJhLCAweDQxLAotCTB4N2IsIDB4MmEsIDB4NWIsIDB4NzIsIDB4Y2QsIDB4ZjksIDB4ODAsIDB4NTEsIDB4ZjgsIDB4NGUsIDB4NWUsIDB4ZWYsCi0JMHgyNiwgMHhkMiwgMHhmYSwgMHhkOCwgMHgwYywgMHhlMSwgMHg4YSwgMHg4NSwgMHg3MCwgMHhhZCwgMHg1OCwgMHgzMywKLQkweDllLCAweGU3LCAweDVhLCAweDFiLCAweGU3LCAweDk4LCAweDVhLCAweGNlLCAweDVmLCAweDM0LCAweGIxLCAweDdkLAotCTB4YzYsIDB4NTEsIDB4M2EsIDB4ZWIsIDB4YzAsIDB4NzQsIDB4YTcsIDB4YjYsIDB4NjEsIDB4NDUsIDB4OGQsIDB4YzksCi0JMHg4MSwgMHgyMiwgMHhjZiwgMHg4MiwgMHgzMSwgMHg5ZSwgMHg3OCwgMHgyMywgMHhlMywgMHg0OSwgMHhiZCwgMHhiMywKLQkweGYyLCAweDVlLCAweDhjLCAweGNkLCAweDVjLCAweDFkLCAweDY1LCAweGUzLCAweDM3LCAweDFiLCAweDZjLCAweDhlLAotCTB4NDgsIDB4NmQsIDB4MGMsIDB4YzcsIDB4ZTQsIDB4ZjIsIDB4YWMsIDB4Y2MsIDB4OGIsIDB4NGUsIDB4OGQsIDB4MmUsCi0JMHg2MSwgMHg5ZCwgMHg3ZiwgMHg1ZCwgMHhlZiwgMHgwZCwgMHg0YSwgMHgyOSwgMHgwMiwgMHhlZCwgMHgzNywgMHgzZSwKLQkweDkwLCAweDFhLCAweDM0LCAweGU3LCAweDYwLCAweDkyLCAweGIyLCAweGIzLCAweDY4LCAweGU2LCAweDdmLCAweDVlLAotCTB4ZTcsIDB4ZjQsIDB4OTgsIDB4ZGMsIDB4NDUsIDB4OTMsIDB4ZWYsIDB4NzMsIDB4OGYsIDB4OWMsIDB4ODcsIDB4MGUsCi0JMHhhZiwgMHhhZSwgMHg2ZCwgMHg5MywgMHg0YywgMHgwMiwgMHgxNywgMHg1OSwgMHhiZCwgMHgyZiwgMHg5MSwgMHg5NCwKLQkweGVjLCAweGMwLCAweGM3LCAweDM3LCAweGYxLCAweDljLCAweDQ0LCAweDBjLCAweGViLCAweDkzLCAweDlmLCAweGUxLAotCTB4ZDksIDB4NDksIDB4ZjYsIDB4N2IsIDB4YjEsIDB4YmUsIDB4MjgsIDB4NjYsIDB4OTksIDB4ODcsIDB4MGYsIDB4NTksCi0JMHhmOSwgMHhiNiwgMHhiZSwgMHg0NCwgMHhiMywgMHg3ZSwgMHhiZiwgMHhjZSwgMHhlNiwgMHg1YiwgMHgzYiwgMHgyMiwKLQkweDM3LCAweDA2LCAweGYyLCAweDg3LCAweDEwLCAweDlmLCAweDhmLCAweGQ5LCAweDM5LCAweDI1LCAweDc1LCAweGNjLAotCTB4NGEsIDB4ODIsIDB4NzMsIDB4N2UsIDB4YzIsIDB4YzYsIDB4MmMsIDB4MzksIDB4OTcsIDB4MWIsIDB4MmMsIDB4N2QsCi0JMHgxYiwgMHhmYiwgMHhhNywgMHg2YSwgMHg0MywgMHg5YiwgMHg3ZCwgMHhiZiwgMHgyNywgMHhiNSwgMHgyYywgMHhlYywKLQkweGI3LCAweGI2LCAweGIzLCAweDhlLCAweGYzLCAweDFjLCAweDE3LCAweDlkLCAweDEzLCAweDEwLCAweGZhLCAweDQ2LAotCTB4M2QsIDB4MzUsIDB4N2UsIDB4ODEsIDB4ZjEsIDB4ZTUsIDB4ZjIsIDB4ZDMsIDB4ZjUsIDB4NjQsIDB4NTQsIDB4ZDUsCi0JMHgyNywgMHhhNCwgMHgyZiwgMHgzNywgMHhiMSwgMHg4ZCwgMHhkZiwgMHgyZCwgMHgwOCwgMHg3ZCwgMHhiOSwgMHg3ZSwKLQkweGViLCAweGNiLCAweGI1LCAweDZhLCAweDVmLCAweGNlLCAweGM0LCAweDFlLCAweDVhLCAweDk3LCAweDdkLCAweGI5LAotCTB4ZmMsIDB4NzQsIDB4MGUsIDB4YjQsIDB4MTIsIDB4N2UsIDB4NjcsIDB4YzEsIDB4ZDgsIDB4NDIsIDB4OTMsIDB4MDUsCi0JMHg5ZSwgMHg3OSwgMHg2OSwgMHg5NCwgMHhlYywgMHhhOCwgMHg4MiwgMHhkZiwgMHg2MCwgMHg3YywgMHgyYywgMHhjNiwKLQkweDJhLCAweDk0LCAweGZhLCAweDk2LCAweGY1LCAweDJmLCAweDNhLCAweDI1LCAweGRkLCAweGJlLCAweDBlLCAweGYzLAotCTB4YmUsIDB4NTMsIDB4YWYsIDB4ZjksIDB4NWMsIDB4YzEsIDB4ZWMsIDB4N2QsIDB4NjYsIDB4ZjcsIDB4MzIsIDB4MjYsCi0JMHhjNCwgMHg3MywgMHg0ZCwgMHg5YSwgMHhiZiwgMHg5MiwgMHhjMywgMHg5MSwgMHg1ZSwgMHg2MywgMHhjZiwgMHg3YSwKLQkweGRmLCAweDA0LCAweGRlLCAweDRmLCAweDAyLCAweGU3LCAweDMxLCAweDNiLCAweDZlLCAweDEyLCAweDMwLCAweDFkLAotCTB4YzAsIDB4ZGEsIDB4NWMsIDB4NmIsIDB4NjUsIDB4MzIsIDB4YzcsIDB4ZGUsIDB4ZDMsIDB4YzQsIDB4ZDgsIDB4YzAsCi0JMHg3YywgMHgyMSwgMHg4YywgMHgxMSwgMHg0NiwgMHhlYywgMHg5OSwgMHg0YSwgMHgyZiwgMHhkMiwgMHhlOCwgMHhhZCwKLQkweGFiLCAweDZiLCAweGFiLCAweDllLCAweDdlLCAweDVkLCAweGRkLCAweDQ0LCAweDVhLCAweGJhLCAweDUzLCAweGU3LAotCTB4YjksIDB4YWMsIDB4MWYsIDB4NDgsIDB4ZWQsIDB4ZDEsIDB4MzksIDB4ZjIsIDB4M2EsIDB4YzYsIDB4OTgsIDB4MTMsCi0JMHhlNiwgMHg5NCwgMHg3ZCwgMHg1NywgMHhkZSwgMHhhMSwgMHg2NSwgMHhmZSwgMHgwMSwgMHg5ZiwgMHhmYSwgMHg2YiwKLQkweDg3LCAweGZlLCAweGRkLCAweDM4LCAweDE0LCAweDA0LCAweGU3LCAweDA2LCAweGVlLCAweDg2LCAweGFkLCAweGUyLAotCTB4YjksIDB4ZGYsIDB4OTcsIDB4ZWUsIDB4YzQsIDB4YjAsIDB4YjYsIDB4OWQsIDB4YjAsIDB4NDYsIDB4N2IsIDB4OWIsCi0JMHg2NSwgMHg5ZCwgMHg3NywgMHhiMywgMHhjZCwgMHg5OSwgMHhjOSwgMHg0MSwgMHg2ZSwgMHhhNiwgMHg2MCwgMHgzMywKLQkweGYxLCAweDRjLCAweDcwLCAweDhmLCAweDdkLCAweDk3LCAweDBiLCAweDlhLCAweDQxLCAweDQ3LCAweDFmLCAweDEzLAotCTB4MjMsIDB4NjMsIDB4YjIsIDB4NTUsIDB4MTksIDB4YzMsIDB4NWMsIDB4ODMsIDB4MzQsIDB4MDksIDB4MzksIDB4N2EsCi0JMHg0NCwgMHg1MiwgMHhmYywgMHhlZSwgMHgwNywgMHhjNywgMHhjZSwgMHhjYiwgMHhhNSwgMHhkMCwgMHhjYiwgMHg2YywKLQkweGE3LCAweGJmLCAweGQ5LCAweDgzLCAweDY3LCAweGVlLCAweGUxLCAweDc4LCAweGVlLCAweDQxLCAweGU4LCAweDk2LAotCTB4ZWIsIDB4ZDcsIDB4ZWEsIDB4OTYsIDB4MDQsIDB4ZmQsIDB4ZmEsIDB4NmMsIDB4ODksIDB4YmUsIDB4ZTEsIDB4N2EsCi0JMHhiNCwgMHhlOSwgMHg5MCwgMHg4ZiwgMHg0ZiwgMHg3NywgMHhiNywgMHg5MSwgMHhiNywgMHhjNiwgMHgyMCwgMHhkNywKLQkweGQ1LCAweGZkLCAweGUxLCAweDU5LCAweDIwLCAweDk2LCAweGYxLCAweDNkLCAweGZiLCAweDZkLCAweDkyLCAweGU0LAotCTB4ZmIsIDB4NWQsIDB4ZjksIDB4N2MsIDB4MjUsIDB4OTUsIDB4NWMsIDB4ODIsIDB4NmUsIDB4MWEsIDB4NzMsIDB4N2UsCi0JMHhmMSwgMHg3MiwgMHgxMywgMHg1MywgMHg3ZCwgMHg3YiwgMHg5YiwgMHgzOSwgMHgzYiwgMHhkMCwgMHg0YywgMHg5YiwKLQkweGRkLCAweGM2LCAweDU5LCAweDZiLCAweDY5LCAweDc2LCAweGM5LCAweGNhLCAweGUzLCAweDIwLCAweDY4LCAweDFlLAotCTB4ZDAsIDB4MzIsIDB4NzgsIDB4MGYsIDB4NjUsIDB4ZjAsIDB4MDEsIDB4YmYsIDB4YzcsIDB4ZDAsIDB4YmUsIDB4ZjYsCi0JMHg5OSwgMHgwMiwgMHhhYywgMHgyMywgMHhmMCwgMHgzMCwgMHgxMCwgMHg2NSwgMHg3ZSwgMHg5ZSwgMHhlNSwgMHg0ZiwKLQkweDJmLCAweGJkLCAweDY4LCAweGU1LCAweDkyLCAweDcyLCAweGQ2LCAweGYyLCAweGE1LCAweGJhLCAweDJhLCAweGI2LAotCTB4NDIsIDB4ZTYsIDB4MWUsIDB4OWEsIDB4YTYsIDB4M2UsIDB4ZjYsIDB4MTcsIDB4YmUsIDB4MGIsIDB4MzksIDB4OTUsCi0JMHhkNSwgMHg3OCwgMHhlOCwgMHg5MCwgMHhmYiwgMHhhNiwgMHgyNSwgMHg3ZCwgMHgxZSwgMHhiYSwgMHgyYSwgMHgzZiwKLQkweGJmLCAweDkyLCAweDM3LCAweGQ3LCAweGY2LCAweGM3LCAweGI5LCAweDdlLCAweGI4LCAweGNkLCAweGY4LCAweGI2LAotCTB4MmIsIDB4ZTcsIDB4YmEsIDB4ODAsIDB4YjksIDB4YTYsIDB4ZjUsIDB4NWMsIDB4YjksIDB4NmYsIDB4ZjMsIDB4MzEsCi0JMHgzYiwgMHhkNywgMHhmNSwgMHhlMSwgMHg1YywgMHgwNywgMHg1NywgMHhjZSwgMHgzNSwgMHhmNCwgMHhlZCwgMHg0MywKLQkweGI5LCAweDliLCAweGQ0LCAweGY5LCAweGYyLCAweDNhLCAweDRmLCAweDdiLCAweDdhLCAweGJkLCAweDBjLCAweDk3LAotCTB4NWEsIDB4YWQsIDB4YmMsIDB4NzQsIDB4YTEsIDB4N2IsIDB4OTgsIDB4YzMsIDB4YmUsIDB4NzAsIDB4YWYsIDB4MmIsCi0JMHgxNiwgMHg2NywgMHg4YSwgMHg3OCwgMHhhMCwgMHhhYywgMHg2ZCwgMHhkMywgMHg2NywgMHg2YywgMHg2NiwgMHhlMSwKLQkweDVmLCAweGRkLCAweDVhLCAweDYwLCAweGRkLCAweGYwLCAweGZkLCAweGM1LCAweDYyLCAweGM3LCAweGExLCAweDRmLAotCTB4NGQsIDB4YmYsIDB4YTksIDB4NzcsIDB4NGQsIDB4NGMsIDB4YzEsIDB4YzQsIDB4ODcsIDB4MTksIDB4MTcsIDB4MzYsCi0JMHg2NywgMHg3ZiwgMHg5OSwgMHg4YiwgMHg3OCwgMHgwNywgMHg3OCwgMHhlYSwgMHg1MywgMHg4NSwgMHhkNCwgMHg2MCwKLQkweDI2LCAweDQyLCAweDM5LCAweDdhLCAweDVjLCAweDBlLCAweDU1LCAweDQ2LCAweGE0LCAweDRiLCAweDlmLCAweGZmLAotCTB4N2MsIDB4ZGQsIDB4ZDgsIDB4NzEsIDB4YmEsIDB4MzYsIDB4NzYsIDB4Y2MsIDB4NzQsIDB4MDIsIDB4YzYsIDB4OGUsCi0JMHhmNywgMHhmYywgMHgwYywgMHhiMSwgMHg2MywgMHg3MSwgMHg0YywgMHhlYywgMHhiOCwgMHg5ZSwgMHg3ZiwgMHgzNSwKLQkweDU1LCAweDNjLCAweDhlLCAweDc5LCAweDM1LCAweDQzLCAweDk2LCAweDJjLCAweDNhLCAweGQ5LCAweGY5LCAweDE2LAotCTB4ZGMsIDB4Y2YsIDB4ZTIsIDB4MWUsIDB4YzMsIDB4ZmQsIDB4M2MsIDB4ZWUsIDB4MmUsIDB4ZWUsIDB4MTcsIDB4NzAsCi0JMHg4ZiwgMHhjYiwgMHhkNCwgMHhiMiwgMHhjZSwgMHgzOCwgMHgwZSwgMHhiOSwgMHg0MSwgMHg1ZCwgMHhjNiwgMHhiNiwKLQkweGM2LCAweDFmLCAweDk4LCAweDJiLCAweGI3LCAweGYzLCAweDdiLCAweDJkLCAweGNlLCAweGVjLCAweDNjLCAweGU3LAotCTB4ZDAsIDB4MmEsIDB4OTMsIDB4ZDMsIDB4OTQsIDB4ZDksIDB4NmQsIDB4NTIsIDB4OWEsIDB4MGUsIDB4NmQsIDB4ZGIsCi0JMHg5ZiwgMHhlZiwgMHhlMCwgMHg5ZSwgMHhjMSwgMHg5OCwgMHg4NCwgMHhiNiwgMHhlYiwgMHgzZCwgMHgxZCwgMHg2NiwKLQkweGFmLCAweGYxLCAweDNiLCAweDU4LCAweGUzLCAweDhkLCAweDU4LCAweDgzLCAweDkzLCAweDcyLCAweDdlLCAweDY2LAotCTB4ZTMsIDB4MGEsIDB4MWIsIDB4MzYsIDB4NjksIDB4NjMsIDB4ODIsIDB4MzMsIDB4NTYsIDB4ZjcsIDB4ZDYsIDB4OTcsCi0JMHgxMSwgMHhiNSwgMHhlYiwgMHg5ZiwgMHhiMCwgMHg2NywgMHhjYiwgMHhjMiwgMHgxYywgMHhhMSwgMHhhNCwgMHg1ZSwKLQkweDlmLCAweGQxLCAweGNhLCAweDcxLCAweDhjLCAweDM3LCAweDI4LCAweGU5LCAweDE5LCAweGNlLCAweDczLCAweGY5LAotCTB4OWIsIDB4MTEsIDB4OTAsIDB4ODcsIDB4MjcsIDB4YTAsIDB4NTcsIDB4NTcsIDB4ZDAsIDB4MjUsIDB4ZTgsIDB4OTYsCi0JMHg3MywgMHg3MywgMHg0MCwgMHhiYiwgMHg4ZiwgMHhjYSwgMHg2YywgMHg4OSwgMHhmMCwgMHhmNSwgMHgyNCwgMHgyMiwKLQkweGZhLCAweGFjLCAweDE5LCAweDllLCAweDY3LCAweDRjLCAweDhlLCAweGZiLCAweDcwLCAweDI1LCAweDNjLCAweDY3LAotCTB4YjYsIDB4ODksIDB4NjcsIDB4MDcsIDB4NTcsIDB4OWQsIDB4MzUsIDB4YjMsIDB4ZmEsIDB4NTksIDB4ZGIsIDB4MGUsCi0JMHgzYywgMHg3MywgMHgxNiwgMHhjZSwgMHhhMSwgMHgxZSwgMHgzZCwgMHgwNSwgMHgzMiwgMHhhOSwgMHhmMywgMHhjZSwKLQkweDM2LCAweGNiLCAweDYzLCAweDBmLCAweDJlLCAweGU3LCAweGJjLCAweGI2LCAweGMxLCAweDQ2LCAweGU5LCAweDg0LAotCTB4ODksIDB4M2MsIDB4MWEsIDB4MWQsIDB4ZWEsIDB4ODEsIDB4OGYsIDB4YzcsIDB4M2MsIDB4OTksIDB4OWUsIDB4YzQsCi0JMHg2ZCwgMHgzYSwgMHgxNywgMHhiOSwgMHg3YSwgMHhlZSwgMHhhZiwgMHg5YSwgMHg4ZiwgMHgxYywgMHg5ZSwgMHhiMywKLQkweDRhLCAweGU4LCAweGVmLCAweDVhLCAweGVjLCAweGQ0LCAweGU1LCAweDcxLCAweGNjLCAweDg3LCAweGZiLCAweDdlLAotCTB4MWEsIDB4MGYsIDB4MDksIDB4N2UsIDB4YTcsIDB4ZWIsIDB4MjksIDB4ZTAsIDB4NjAsIDB4YjIsIDB4ZjIsIDB4NmQsCi0JMHhkMCwgMHhiYiwgMHg2MywgMHhjZiwgMHg5YywgMHg5MSwgMHhjNiwgMHgwNiwgMHg2NCwgMHhhMiwgMHg5YywgMHg3MCwKLQkweDI2LCAweGNhLCAweDAzLCAweGNlLCAweGJlLCAweGIyLCAweDdkLCAweDM3LCAweGIwLCAweDY3LCAweGIzLCAweDM0LAotCTB4ZTMsIDB4ZjcsIDB4NGMsIDB4OTcsIDB4MzMsIDB4MDYsIDB4N2MsIDB4ZTUsIDB4OGIsIDB4ZGQsIDB4NGUsIDB4NWEsCi0JMHhkZiwgMHgzZCwgMHg3YiwgMHg4NywgMHgxYywgMHhjMCwgMHg1YSwgMHgwZCwgMHhjZiwgMHhjNCwgMHhiNSwgMHg5YywKLQkweGFmLCAweDdlLCAweDViLCAweDJhLCAweDVjLCAweDU3LCAweDdlLCAweDEzLCAweDg5LCAweDdjLCAweDdjLCAweDVjLAotCTB4N2YsIDB4ZTcsIDB4YzgsIDB4ZDgsIDB4MGUsIDB4MjcsIDB4ZDEsIDB4ZGYsIDB4NzEsIDB4MWIsIDB4MTMsIDB4ZWYsCi0JMHg3MywgMHhiMiwgMHhiYSwgMHgxZiwgMHhiMywgMHgxZSwgMHhmOSwgMHhlMiwgMHgwOSwgMHhkYywgMHg1NywgMHg5ZiwKLQkweDc5LCAweDBlLCAweGY1LCAweDhjLCAweDg1LCAweGJiLCAweDEwLCAweGRjLCAweDYzLCAweGU0LCAweGQ1LCAweDcxLAotCTB4OTksIDB4YWEsIDB4MzAsIDB4N2YsIDB4YzQsIDB4ZDEsIDB4N2MsIDB4MzQsIDB4NTksIDB4M2UsIDB4MDAsIDB4OWQsCi0JMHhiNCwgMHhmMiwgMHhjYywgMHhkZiwgMHhjZSwgMHhlYSwgMHgzYSwgMHgyNCwgMHg2NywgMHg4NCwgMHhiMCwgMHg3MCwKLQkweDBkLCAweDU2LCAweDllLCAweDg3LCAweGJmLCAweGY4LCAweGJmLCAweDcwLCAweDVmLCAweGQxLCAweGM4LCAweDUwLAotCTB4MGIsIDB4NDcsIDB4OWEsIDB4ZjIsIDB4Y2UsIDB4YzgsIDB4OTUsIDB4NjksIDB4MzksIDB4MDgsIDB4NzgsIDB4MGUsCi0JMHhlMywgMHg1MiwgMHhmNywgMHhmMywgMHgzYiwgMHgyYywgMHhmMywgMHg5MiwgMHg5ZiwgMHhiYiwgMHg0ZiwgMHhkNCwKLQkweDQzLCAweGU3LCAweDlkLCAweGU4LCAweDQzLCAweDA3LCAweDI1LCAweGYyLCAweGQwLCAweGEyLCAweGQzLCAweGYwLAotCTB4NTAsIDB4YjcsIDB4ZjYsIDB4Y2IsIDB4NzcsIDB4ZmIsIDB4ZGQsIDB4ODksIDB4N2QsIDB4NzIsIDB4NTIsIDB4YTIsCi0JMHhmNywgMHgyYiwgMHg3ZCwgMHhmZSwgMHgyYiwgMHhlZiwgMHgzMiwgMHhjNiwgMHg3NywgMHg1MiwgMHgyMiwgMHhmNywKLQkweGM3LCAweGVjLCAweGQ5LCAweDUxLCAweDEzLCAweGQ3LCAweDViLCAweGQyLCAweDdjLCAweGZmLCAweDliLCAweDcxLAotCTB4ZTIsIDB4NmMsIDB4NDksIDB4OGUsIDB4NmIsIDB4ZGUsIDB4MTksIDB4ODYsIDB4OWUsIDB4YzgsIDB4OTQsIDB4OTIsCi0JMHhjYiwgMHg3NSwgMHg0YywgMHhiZSwgMHhlNywgMHhmMywgMHg5YiwgMHgwZCwgMHhiZiwgMHhiMCwgMHg0ZSwgMHg4ZiwKLQkweGMzLCAweGVmLCAweDM4LCAweDE4LCAweDlkLCAweDkxLCAweGI5LCAweDJjLCAweGNjLCAweGZkLCAweDM0LCAweDZiLAotCTB4Y2EsIDB4ZjcsIDB4NjcsIDB4YjEsIDB4ODYsIDB4M2QsIDB4NTgsIDB4MmYsIDB4OGUsIDB4ZTcsIDB4ZTgsIDB4ZmQsCi0JMHg1YywgMHg5ZSwgMHg5ZCwgMHg3NSwgMHhhNSwgMHgyZiwgMHhkMSwgMHhiNCwgMHg2YywgMHgwNywgMHhiMSwgMHhlZSwKLQkweDdkLCAweGQyLCAweDA0LCAweGI4LCAweGQ1LCAweDQzLCAweDc5LCAweDYzLCAweGQ3LCAweDA5LCAweGU5LCAweDU0LAotCTB4MjAsIDB4YjksIDB4NDksIDB4YjMsIDB4M2QsIDB4ODMsIDB4YmIsIDB4ZjUsIDB4MWEsIDB4ZGUsIDB4NmIsIDB4NjksCi0JMHg2NiwgMHg5ZCwgMHhiMSwgMHgxZiwgMHhmMSwgMHg2YywgMHhlOCwgMHgyMiwgMHgyZiwgMHhiYiwgMHhhNiwgMHg3ZiwKLQkweDA4LCAweDNkLCAweGNmLCAweDdkLCAweDE3LCAweDZkLCAweDJmLCAweGQ2LCAweGIxLCAweDA1LCAweGM5LCAweDRiLAotCTB4Y2YsIDB4NTgsIDB4YmYsIDB4MzIsIDB4MDgsIDB4YTYsIDB4N2QsIDB4MWYsIDB4NzgsIDB4YWMsIDB4ZTcsIDB4NGIsCi0JMHg2ZSwgMHg3MSwgMHhlNiwgMHg0YSwgMHg1YiwgMHg5ZCwgMHhkOSwgMHg1MiwgMHgyMCwgMHgxMywgMHgzZSwgMHhiZiwKLQkweGUzLCAweGMxLCAweDFjLCAweDAwLCAweGRhLCAweDViLCAweDJjLCAweGViLCAweDg2LCAweDZlLCAweGZkLCAweGViLAotCTB4Y2QsIDB4M2MsIDB4OGYsIDB4NzQsIDB4OTMsIDB4ZjcsIDB4YTIsIDB4OTgsIDB4N2EsIDB4YzQsIDB4MzEsIDB4N2QsCi0JMHhlNCwgMHhlZSwgMHhlMywgMHg1OSwgMHhlMSwgMHhmNywgMHgzNCwgMHhmYSwgMHgxMiwgMHg3MSwgMHhmZCwgMHg1ZCwKLQkweDhmLCAweGNmLCAweGExLCAweDFkLCAweGM2LCAweDI4LCAweDcyLCAweGRjLCAweDY3LCAweDlkLCAweDU5LCAweGM4LAotCTB4YjMsIDB4YjksIDB4NjksIDB4OWUsIDB4ZTEsIDB4NjcsIDB4M2UsIDB4NmQsIDB4YTQsIDB4NTMsIDB4YzksIDB4MTUsCi0JMHhlZSwgMHhhNCwgMHhmZCwgMHgwNiwgMHg1YywgMHgwZSwgMHgyZSwgMHg1MCwgMHg0NCwgMHg5NywgMHhmNSwgMHhiOSwKLQkweGUzLCAweGNiLCAweGRmLCAweDg1LCAweDBiLCAweGNiLCAweGMyLCAweGVmLCAweGMzLCAweDI5LCAweDlkLCAweDNiLAotCTB4MGQsIDB4NWYsIDB4ZjYsIDB4YjEsIDB4MzEsIDB4ZjksIDB4ODksIDB4MzMsIDB4NWYsIDB4NzgsIDB4YzUsIDB4NzksCi0JMHhiNCwgMHg5MCwgMHhiZSwgMHhlYSwgMHgxMiwgMHhkMCwgMHhjNywgMHgzOSwgMHhiZiwgMHg5NywgMHhmMiwgMHgwYiwKLQkweDM2LCAweDVmLCAweDQxLCAweDcyLCAweDk1LCAweDA5LCAweDk5LCAweGU5LCAweGU4LCAweDc2LCAweGVmLCAweGQ3LAotCTB4NmIsIDB4MzMsIDB4MDMsIDB4OWMsIDB4N2QsIDB4MWIsIDB4ZWIsIDB4ZjcsIDB4YzksIDB4MzgsIDB4ZjUsIDB4ZGIsCi0JMHg3OCwgMHg0MSwgMHg4MSwgMHg5NywgMHhkNSwgMHhjZiwgMHhlMywgMHg4MiwgMHg2ZCwgMHhkYiwgMHhhOCwgMHg2ZCwKLQkweDk0LCAweDdkLCAweDNlLCAweGViLCAweDZkLCAweDc1LCAweDg2LCAweDRiLCAweDViLCAweGIwLCAweDhlLCAweDdiLAotCTB4YTEsIDB4M2YsIDB4MWQsIDB4ZDgsIDB4NjksIDB4YTAsIDB4NmQsIDB4OTQsIDB4NGQsIDB4MDIsIDB4MDcsIDB4ZTMsCi0JMHhiZSwgMHg5MSwgMHhlNywgMHhjMywgMHg5MiwgMHhkMywgMHgzZSwgMHg5ZSwgMHhiOSwgMHhhNywgMHg5NSwgMHg4OSwKLQkweDk5LCAweDA1LCAweGMxLCAweDFjLCAweGVjLCAweDgzLCAweDZjLCAweDdmLCAweDA5LCAweGJjLCAweGYwLCAweDA4LAotCTB4YWUsIDB4YjcsIDB4ZGIsIDB4M2QsIDB4ZWQsIDB4MTcsIDB4MmUsIDB4YjIsIDB4YTcsIDB4ZWQsIDB4Y2EsIDB4YzksCi0JMHg4YSwgMHgzZSwgMHhkNywgMHhhZSwgMHhmMywgMHhhYiwgMHg5MiwgMHhlYSwgMHhiZiwgMHg1ZiwgMHhhMiwgMHhkNywKLQkweDRhLCAweGY1LCAweGU4LCAweDljLCAweGI0LCAweGI0LCAweDdjLCAweDM4LCAweDZlLCAweGY0LCAweDMwLCAweDYxLAotCTB4NGEsIDB4MDIsIDB4OWUsIDB4YWQsIDB4YzAsIDB4MDUsIDB4ZTEsIDB4MzEsIDB4NmQsIDB4NDQsIDB4NmQsIDB4YmEsCi0JMHg5NCwgMHhmYSwgMHg3MCwgMHg0OSwgMHgzZSwgMHgxMiwgMHgwZiwgMHhjZiwgMHgxNCwgMHhhMCwgMHgxZiwgMHhjOCwKLQkweGI4LCAweDhmLCAweDVkLCAweDZhLCAweGY0LCAweGU0LCAweGU2LCAweDNhLCAweGZkLCAweDg0LCAweDczLCAweDczLAotCTB4ZWMsIDB4ZGMsIDB4NDgsIDB4YjcsIDB4N2YsIDB4OTYsIDB4YTAsIDB4NGYsIDB4YjEsIDB4MjQsIDB4NGQsIDB4YWIsCi0JMHhlYSwgMHgzMywgMHhhNiwgMHhiZiwgMHhlMSwgMHg3MiwgMHg3MywgMHg0NiwgMHg4MSwgMHg3NSwgMHg1ZCwgMHhkOCwKLQkweGE2LCAweGI0LCAweDczLCAweDg5LCAweDQ3LCAweGJkLCAweDZlLCAweDA1LCAweDI1LCAweDNjLCAweDY3LCAweDAwLAotCTB4NmUsIDB4YWUsIDB4NWMsIDB4ZTEsIDB4YmUsIDB4NDMsIDB4OTEsIDB4MGUsIDB4NDMsIDB4NWMsIDB4N2YsIDB4NWIsCi0JMHhmMywgMHhjOSwgMHg3OCwgMHg4MSwgMHhiMSwgMHg5NSwgMHg0NywgMHg4MywgMHhmNCwgMHgyOCwgMHg3OSwgMHg4YywKLQkweDdkLCAweGYwLCAweDdkLCAweDQxLCAweGM3LCAweDczLCAweGY3LCAweGZhLCAweDhjLCAweDE1LCAweDc1LCAweDFmLAotCTB4YmYsIDB4NDMsIDB4ODUsIDB4NzIsIDB4MGEsIDB4ZmEsIDB4YjcsIDB4YjgsIDB4ZTgsIDB4ZjAsIDB4MWIsIDB4NzgsCi0JMHgzNywgMHgwYSwgMHhlZSwgMHhmMywgMHg4YiwgMHhjZSwgMHg3NywgMHhhNywgMHg5ZiwgMHhjNSwgMHg3MywgMHg4MywKLQkweGZkLCAweGVlLCAweDlkLCAweGQxLCAweDUzLCAweDIyLCAweGM1LCAweDcwLCAweGJlLCAweDg5LCAweDFjLCAweGQ2LAotCTB4ZmUsIDB4MDIsIDB4ZDYsIDB4YmUsIDB4ZmUsIDB4NzcsIDB4ZWUsIDB4ZjAsIDB4YWUsIDB4OGMsIDB4NzcsIDB4ZTUsCi0JMHgwZiwgMHgwNywgMHhlOSwgMHgzNiwgMHhkMiwgMHgyMiwgMHhlOSwgMHhlZiwgMHhiNSwgMHhmYywgMHhlNiwgMHg0MSwKLQkweGNkLCAweDE3LCAweDkzLCAweGM1LCAweGM3LCAweGMxLCAweDE3LCAweDY5LCAweGVlLCAweDM3LCAweDA3LCAweDBmLAotCTB4ZmIsIDB4MzcsIDB4ODAsIDB4MmYsIDB4ZjYsIDB4YzgsIDB4ZWYsIDB4YzMsIDB4MmUsIDB4ZjgsIDB4ZGQsIDB4Y2EsCi0JMHgxMCwgMHhmOCwgMHg2MywgMHgxMCwgMHhmYywgMHgzMiwgMHgwMCwgMHgxZSwgMHhmMSwgMHhiNSwgMHg4ZCwgMHhmYywKLQkweDA0LCAweGY0LCAweDFmLCAweGY0LCAweDlhLCAweGIzLCAweGFmLCAweGQ0LCAweGU1LCAweDY0LCAweDRiLCAweDllLAotCTB4MzMsIDB4NTEsIDB4ZTIsIDB4ZjcsIDB4NWEsIDB4ZDQsIDB4NWIsIDB4MWIsIDB4MjQsIDB4OWEsIDB4OTgsIDB4MTMsCi0JMHhmMiwgMHg0MiwgMHgzNywgMHg3MywgMHgxYywgMHhkYiwgMHg4MSwgMHhhYiwgMHg1MywgMHhjNCwgMHhkNSwgMHg1YywKLQkweGE1LCAweGNmLCAweGJkLCAweDA0LCAweDNjLCAweGQxLCAweGFlLCAweDc5LCAweGEyLCAweGQ1LCAweDQ5LCAweGJiLAotCTB4MzcsIDB4NTgsIDB4OWUsIDB4NzgsIDB4MTEsIDB4M2MsIDB4NzEsIDB4N2UsIDB4MGQsIDB4NGYsIDB4M2MsIDB4NmQsCi0JMHhlOSwgMHg3ZiwgMHhhMSwgMHg4NiwgMHgyNywgMHhlNiwgMHg2YywgMHhkOSwgMHhjYywgMHg0NSwgMHg3OCwgMHhlMiwKLQkweDUyLCAweDJmLCAweGY1LCAweGE1LCAweDMxLCAweDc5LCAweDE1LCAweDNjLCAweDIxLCAweDhhLCAweDNjLCAweDcxLAotCTB4YTksIDB4ZTYsIDB4MDksIDB4YzYsIDB4OGUsIDB4YzgsIDB4MTcsIDB4OWQsIDB4OTAsIDB4MjMsIDB4ZTQsIDB4OGIsCi0JMHhiMywgMHhiMiwgMHgwNCwgMHhiZSwgMHg3OCwgMHg1ZSwgMHg3MSwgMHhlYywgMHgxOSwgMHhkYSwgMHgwYSwgMHgyNSwKLQkweGZhLCAweDY0LCAweDI3LCAweDhhLCAweDVkLCAweGUwLCAweDc3LCAweDI1LCAweGZmLCAweDY1LCAweDNhLCAweDA4LAotCTB4MTYsIDB4ZTEsIDB4YTcsIDB4M2YsIDB4MDgsIDB4N2IsIDB4M2UsIDB4YWEsIDB4YmYsIDB4YTksIDB4YjgsIDB4MDAsCi0JMHhiYSwgMHgwZiwgMHhlOSwgMHg3ZCwgMHhjMiwgMHgwMSwgMHhiZCwgMHgxZiwgMHg5ZSwgMHhjNSwgMHgxYywgMHgyNiwKLQkweGQ0LCAweDdmLCAweDg2LCAweDJmLCAweGVjLCAweDYyLCAweDVkLCAweDY5LCAweGU3LCAweDFmLCAweGQzLCAweDNjLAotCTB4ZDQsIDB4MDAsIDB4N2QsIDB4ZjAsIDB4ZTgsIDB4MDAsIDB4NjMsIDB4NGQsIDB4OWUsIDB4YmIsIDB4NGYsIDB4NzUsCi0JMHhlNywgMHg0NiwgMHgwMCwgMHg3MywgMHg0NCwgMHhkZCwgMHgyZiwgMHg4YywgMHg3MywgMHhiNCwgMHhhZCwgMHhiMiwKLQkweGYzLCAweDI5LCAweDIzLCAweDQ2LCAweDIxLCAweGViLCAweGNjLCAweGJiLCAweDVjLCAweGQwLCAweDA0LCAweDliLAotCTB4YjQsIDB4NDksIDB4MTksIDB4MWIsIDB4NWQsIDB4ZWQsIDB4NDgsIDB4YjksIDB4MWYsIDB4ODQsIDB4MDAsIDB4NmQsCi0JMHg4NCwgMHhiZCwgMHhiMCwgMHgwYiwgMHhhYiwgMHgzZCwgMHg1MiwgMHhhOCwgMHhiNSwgMHhmMSwgMHhmZiwgMHgwMywKLQkweDZjLCAweDdjLCAweGI2LCAweDkxLCAweGE4LCAweGIxLCAweGYxLCAweDdmLCAweGNkLCAweGYyLCAweDFhLCAweDdmLAotCTB4YmIsIDB4ZGEsIDB4ZGUsIDB4M2YsIDB4MDAsIDB4ZjgsIDB4NzYsIDB4MmYsIDB4ZGIsIDB4ZmIsIDB4ZWMsIDB4ODMsCi0JMHg3NiwgMHg4NywgMHhjOCwgMHhmNSwgMHhiMCwgMHhmOSwgMHhkZSwgMHgwZCwgMHgxZSwgMHhiYywgMHgwMSwgMHhiZSwKLQkweGQ0LCAweDdiLCAweDBhLCAweGFlLCAweGVjLCAweDI5LCAweGI0LCAweGMzLCAweGU3LCAweGVlLCAweDk0LCAweGY3LAotCTB4NGUsIDB4NmYsIDB4OTUsIDB4OWQsIDB4MjUsIDB4ZmYsIDB4MTIsIDB4NjksIDB4ZWUsIDB4ODAsIDB4OGQsIDB4NWEsCi0JMHgwMCwgMHg5YywgMHgxMSwgMHgyYiwgMHhiNywgMHhjZiwgMHgwMiwgMHg2ZiwgMHhkZCwgMHhjOSwgMHg5ZiwgMHhhOCwKLQkweDE3LCAweGFkLCAweDVkLCAweGM0LCAweGIzLCAweDhlLCAweGY1LCAweGZhLCAweDg5LCAweGEzLCAweDNkLCAweDYzLAotCTB4MjksIDB4MWQsIDB4NzIsIDB4ZWEsIDB4MTgsIDB4YmQsIDB4YWYsIDB4MjQsIDB4ZWMsIDB4NzIsIDB4MWYsIDB4MzYsCi0JMHhjOSwgMHgxNiwgMHhmNCwgMHhjNywgMHg3OCwgMHhmMiwgMHg0NiwgMHg3OSwgMHhmYSwgMHhhYSwgMHhlOCwgMHg1ZCwKLQkweDU5LCAweGNkLCAweDg3LCAweDlkLCAweDRlLCAweDY2LCAweDFhLCAweDNlLCAweGMwLCAweGRlLCAweDE4LCAweGU2LAotCTB4YTAsIDB4ZGEsIDB4MzcsIDB4Y2IsIDB4NzUsIDB4YjIsIDB4NTMsIDB4Y2YsIDB4NjcsIDB4NDYsIDB4MGUsIDB4NDIsCi0JMHgzNywgMHhmZiwgMHg0MSwgMHg2MSwgMHhhNywgMHgyYywgMHg4ZCwgMHhiNiwgMHhlMSwgMHgzOSwgMHgyNiwgMHg0ZiwKLQkweDE3LCAweGZhLCAweGUwLCAweGZiLCAweGJjLCAweDBiLCAweDM4LCAweDZhLCAweGM0LCAweDczLCAweGEzLCAweDBjLAotCTB4NWYsIDB4NDIsIDB4NWUsIDB4NmQsIDB4OTEsIDB4NDUsIDB4OTQsIDB4YmYsIDB4NWIsIDB4N2UsIDB4YzEsIDB4OTYsCi0JMHhiMywgMHg4YywgMHhiYywgMHhkMSwgMHg4MiwgMHhiNiwgMHgzMSwgMHgzOSwgMHg1NywgMHhhMCwgMHg1ZCwgMHhhOSwKLQkweDc5LCAweDYyLCAweGYwLCAweDdiLCAweGQyLCAweDk3LCAweGZlLCAweDFlLCAweGVjLCAweGQ0LCAweGIzLCAweGI4LAotCTB4OWUsIDB4OTEsIDB4ZDQsIDB4OWUsIDB4NzEsIDB4YTcsIDB4MmYsIDB4ZDksIDB4ZWQsIDB4NDAsIDB4NzcsIDB4ZTIsCi0JMHg4YSwgMHgzYSwgMHg3ZCwgMHg2ZSwgMHhhMywgMHg3MywgMHg4NSwgMHhlZCwgMHhhMywgMHg0MSwgMHg5ZSwgMHhkOSwKLQkweGFiLCAweDEyLCAweDJkLCAweDU4LCAweDkzLCAweGVkLCAweDRlLCAweDhmLCAweDJkLCAweGUzLCAweDczLCAweGNhLAotCTB4NzgsIDB4NDAsIDB4YTcsIDB4ZDQsIDB4OTYsIDB4MGQsIDB4MjIsIDB4NWQsIDB4MmQsIDB4YjAsIDB4NzksIDB4MjYsCi0JMHg0NCwgMHhiNSwgMHhiNywgMHg0OCwgMHg1NCwgMHhiYSwgMHg2NywgMHg1NSwgMHgyNywgMHhjYSwgMHgzYywgMHg1YiwKLQkweDE2LCAweDZmLCAweDgxLCAweDdlLCAweDQwLCAweDU5LCAweDA3LCAweGNhLCAweGI2LCAweGQ5LCAweGIyLCAweGI2LAotCTB4MTYsIDB4NjksIDB4NDQsIDB4ZDksIDB4OGMsIDB4ZTYsIDB4ZjksIDB4ZjMsIDB4M2QsIDB4OWUsIDB4OWIsIDB4NzUsCi0JMHg5YSwgMHhhNSwgMHhlYiwgMHg0NCwgMHgwYiwgMHg2NCwgMHhjMywgMHg0NiwgMHg1OSwgMHhiYywgMHhhYSwgMHg0OSwKLQkweGJhLCAweGYwLCAweDhlLCAweDcxLCAweDZlLCAweGZmLCAweDQ0LCAweDRjLCAweGFlLCAweDNkLCAweGQxLCAweDlkLAotCTB4ZjgsIDB4MzgsIDB4ZTYsIDB4ZDAsIDB4N2QsIDB4OGEsIDB4NzEsIDB4ZWYsIDB4ZmMsIDB4MjUsIDB4OGMsIDB4ZmIsCi0JMHg3NCwgMHg5ZCwgMHhlMiwgMHhiZCwgMHg0OSwgMHhjYiwgMHgxZiwgMHhlMiwgMHhjMywgMHg3YywgMHg5MywgMHg4OCwKLQkweDMyLCAweGY5LCAweDI0LCAweGZjLCAweDVjLCAweGVhLCAweGYwLCAweDZlLCAweGZiLCAweGZkLCAweDhjLCAweGUzLAotCTB4OTcsIDB4ZDAsIDB4NmYsIDB4OWIsIDB4YTUsIDB4NWQsIDB4NTIsIDB4MjQsIDB4M2YsIDB4NTIsIDB4MGYsIDB4ZTEsCi0JMHgzZSwgMHhlMywgMHg0OCwgMHhiZSwgMHgyYSwgMHhiMywgMHhlNiwgMHhjOSwgMHg1NywgMHhjNywgMHgxNCwgMHg3MywKLQkweDU5LCAweDUwLCAweDU2LCAweGY5LCAweGM1LCAweGMwLCAweGFjLCAweDMxLCAweDc5LCAweGMxLCAweGM4LCAweGE1LAotCTB4MGYsIDB4MTgsIDB4YjksIDB4ZjQsIDB4ZDgsIDB4OTksIDB4MTUsIDB4NzIsIDB4ZTksIDB4YmMsIDB4OTYsIDB4NGIsCi0JMHg3YiwgMHgwNSwgMHhmNywgMHhmOSwgMHhmMywgMHg5MCwgMHg0YiwgMHgyZiwgMHhlMiwgMHhkOSwgMHhkNSwgMHg3MiwKLQkweDI5LCAweDJlLCAweGQ2LCAweDVlLCAweDk2LCAweGFmLCAweGVhLCAweGYxLCAweGU3LCAweDhhLCAweDUxLCAweDZkLAotCTB4NTcsIDB4ZTUsIDB4NjcsIDB4NjAsIDB4OTMsIDB4MTQsIDB4YTcsIDB4YWMsIDB4ZmUsIDB4OTYsIDB4YTEsIDB4MzYsCi0JMHhlOSwgMHgxOSwgMHhmYywgMHhhOSwgMHg4NCwgMHgzNiwgMHhlNywgMHg3ZiwgMHhiYSwgMHg4NCwgMHhkZiwgMHhlZSwKLQkweDdjLCAweDVlLCAweDUxLCAweDg2LCAweGJkLCAweDBhLCAweDE5LCAweDI2LCAweGFhLCAweGJlLCAweDBjLCAweGMzLAotCTB4YmIsIDB4MzIsIDB4ZGUsIDB4OTUsIDB4ZDksIDB4ZWYsIDB4OGYsIDB4N2UsIDB4M2EsIDB4ZTYsIDB4NTIsIDB4N2UsCi0JMHg1MCwgMHg2NiwgMHg0MCwgMHgyNiwgMHgxNSwgMHgyMSwgMHg5MywgMHg4YSwgMHg5MCwgMHg1MywgMHg0NSwgMHhjOCwKLQkweDI1LCAweGQ4LCAweDZjLCAweDY3LCAweDhhLCAweDkwLCAweDRiLCAweDQ1LCAweGM4LCAweDI1LCAweGM4LCAweGI4LAotCTB4MjcsIDB4MjAsIDB4ZTMsIDB4OGMsIDB4NGMsIDB4MWIsIDB4ODUsIDB4NGMsIDB4OWIsIDB4OTEsIDB4ZmIsIDB4YWMsCi0JMHhhZSwgMHgzNywgMHhiMSwgMHg5MiwgMHg3ZSwgMHhlYiwgMHgyMywgMHgwZCwgMHhlOCwgMHgxOCwgMHhmMiwgMHg5OSwKLQkweDlhLCAweGQ4LCAweGUwLCAweDhkLCAweDQ3LCAweDM0LCAweGJmLCAweGJiLCAweDllLCAweGJhLCAweGMyLCAweDYxLAotCTB4MGUsIDB4Y2QsIDB4NGYsIDB4YjQsIDB4ZmYsIDB4YmUsIDB4OWQsIDB4YmYsIDB4YTUsIDB4MDksIDB4N2MsIDB4ZmQsCi0JMHgwMywgMHhjYiwgMHhkNywgMHhkYiwgMHg5NywgMHhmOSwgMHgzYSwgMHhlNSwgMHgzMCwgMHg1NiwgMHg1YywgMHg5ZiwKLQkweGFmLCAweDNiLCAweGVjLCAweGJiLCAweDVjLCAweGIwLCAweDBlLCAweDdjLCAweGJkLCAweDZlLCAweDE1LCAweDVmLAotCTB4YzcsIDB4YzAsIDB4ZDcsIDB4N2IsIDB4ZDYsIDB4ZjAsIDB4ZjUsIDB4MDYsIDB4NjcsIDB4NTgsIDB4YjcsIDB4ZTEsCi0JMHgxOSwgMHgwOSwgMHgzZSwgMHgzNywgMHgzYSwgMHg1NSwgMHhiZSwgMHhiZSwgMHg0NywgMHhmMywgMHhmNSwgMHgyMSwKLQkweGYwLCAweGY1LCAweDc1LCAweDM1LCAweDdjLCAweGJkLCAweDQ3LCAweDUyLCAweDM3LCAweDY3LCAweDIyLCAweDViLAotCTB4NjUsIDB4ZmMsIDB4N2UsIDB4ZDUsIDB4YmUsIDB4NDksIDB4ZmUsIDB4NDksIDB4NGMsIDB4N2IsIDB4YzMsIDB4NjMsCi0JMHhjMywgMHhkMywgMHhlZCwgMHg5MiwgMHg3ZCwgMHhlOCwgMHgxNSwgMHg5NCwgMHg5MSwgMHhjZiwgMHg1MiwgMHg2MywKLQkweDY5LCAweGM3LCAweDk1LCAweDgzLCAweDQ3LCAweDdlLCAweDIyLCAweDBiLCAweDlhLCAweGI3LCAweDQ0LCAweDI2LAotCTB4OGUsIDB4YzQsIDB4NjQsIDB4ZjIsIDB4MDgsIDB4ZTMsIDB4MTAsIDB4N2YsIDB4NjMsIDB4ZTksIDB4YmQsIDB4NDksCi0JMHgyNiwgMHhmNywgMHgzMiwgMHg2ZiwgMHgyZSwgMHgyYSwgMHhlMywgMHg0NywgMHhlMCwgMHg2ZiwgMHgxZCwgMHg2MSwKLQkweDFjLCAweGUyLCAweGE1LCAweDY1LCAweDFlLCAweDViLCAweDgwLCAweDZjLCAweDE5LCAweDNmLCAweGMyLCAweGI1LAotCTB4OGUsIDB4YTEsIDB4OWYsIDB4MTYsIDB4MzksIDB4NzQsIDB4NDQsIDB4ZTQsIDB4YjYsIDB4MjMsIDB4NTEsIDB4ZjksCi0JMHhlOCwgMHg5MSwgMHg2NSwgMHg1ZSwgMHgxYiwgMHgwZCwgMHg3OSwgMHhlZCwgMHg1OSwgMHhmMCwgMHg1YSwgMHhiNywKLQkweGU1LCAweDM1LCAweGI1LCAweGNjLCAweDZiLCAweDdmLCAweDVhLCAweGMzLCAweDZiLCAweDZjLCAweDRmLCAweDVlLAotCTB4N2IsIDB4Y2UsIDB4OTYsIDB4ZjEsIDB4MzksIDB4MmEsIDB4ZmIsIDB4OGUsIDB4NzQsIDB4Y2EsIDB4ZjgsIDB4NDMsCi0JMHg2ZiwgMHg5MSwgMHg4OSwgMHhmYiwgMHgwOSwgMHhhYiwgMHhmOSwgMHg4ZSwgMHgxMywgMHg2ZCwgMHhiMSwgMHg5OSwKLQkweDRhLCAweDM3LCAweGZhLCAweDBmLCAweDczLCAweDg4LCAweGY0LCAweGY3LCAweDEwLCAweDdhLCAweDY3LCAweDI1LAotCTB4OTUsIDB4ZTMsIDB4NzgsIDB4OGQsIDB4ZjAsIDB4YTMsIDB4NGYsIDB4YzAsIDB4YmYsIDB4ZDgsIDB4MDcsIDB4OTgsCi0JMHg2ZSwgMHgzOSwgMHgyMiwgMHhhOSwgMHhhOCwgMHhiYywgMHgyYywgMHg1MywgMHhmZSwgMHgyNywgMHgyZSwgMHgzNywKLQkweGY2LCAweDA0LCAweDZjLCAweDExLCAweDZkLCAweGZiLCAweGE0LCAweDI1LCAweGZiLCAweGNlLCAweDQwLCAweGZiLAotCTB4MTgsIDB4YTUsIDB4YjIsIDB4MzAsIDB4MTYsIDB4YzAsIDB4YjgsIDB4YjksIDB4NjMsIDB4YmUsIDB4YzcsIDB4YzQsCi0JMHhmYywgMHhjNywgMHgwNiwgMHg3ZCwgMHhlNiwgMHg0NSwgMHhjNywgMHg2YywgMHgwNywgMHhmOCwgMHg5ZSwgMHhjZiwKLQkweGIwLCAweDY3LCAweGY0LCAweDU5LCAweDQzLCAweGI2LCAweDdmLCAweDQ0LCAweDdmLCAweDFiLCAweDkxLCAweDMxLAotCTB4ZjUsIDB4N2MsIDB4OTksIDB4ZGYsIDB4YjAsIDB4ODEsIDB4ZmYsIDB4NTksIDB4ZTYsIDB4YjcsIDB4YjAsIDB4ZjYsCi0JMHhiNywgMHg5YiwgMHhmOCwgMHgyYywgMHhmOSwgMHhlZSwgMHg4NywgMHgwZSwgMHhiZiwgMHg1ZCwgMHgzNSwgMHhhNSwKLQkweDczLCAweGJkLCAweGYwLCAweGJiLCAweGNjLCAweDY3LCAweGQ2LCAweDdmLCAweDg0LCAweGYxLCAweDhlLCAweDY0LAotCTB4NTIsIDB4YmQsIDB4ZjcsIDB4NzIsIDB4ZTYsIDB4MWUsIDB4ZWMsIDB4OWQsIDB4NjcsIDB4ZGQsIDB4YWQsIDB4OTYsCi0JMHg0NywgMHhiNywgMHg2YSwgMHhiZiwgMHg4MywgMHgzNiwgMHhkNiwgMHg3OCwgMHhlOSwgMHg0NSwgMHhjOSwgMHhkMywKLQkweDM2LCAweDE5LCAweGRkLCAweGVhLCAweGU0LCAweDY2LCAweDkyLCAweDk3LCAweDFiLCAweGZiLCAweDc5LCAweGRkLAotCTB4YTUsIDB4Y2MsIDB4M2IsIDB4NGMsIDB4YWIsIDB4YjUsIDB4MzIsIDB4ZjksIDB4ODQsIDB4ODQsIDB4MzIsIDB4MzksCi0JMHg3NSwgMHgzMywgMHhiZiwgMHhiNywgMHg5YiwgMHgzZCwgMHhhMiwgMHhiZiwgMHgyZiwgMHg5NSwgMHhlYywgMHg1NiwKLQkweDljLCAweGQzLCAweGE3LCAweDIxLCAweDVmLCAweDQzLCAweDVhLCAweDQ4LCAweGM4LCAweDI3LCAweDhmLCAweDkwLAotCTB4MWUsIDB4NTQsIDB4YmMsIDB4NTUsIDB4M2UsIDB4NjEsIDB4ZTksIDB4NjEsIDB4NDYsIDB4MGEsIDB4OTAsIDB4M2IsCi0JMHg0NywgMHg4ZSwgMHg3YywgMHg1NCwgMHg2NiwgMHg2ZSwgMHg1YywgMHg0ZCwgMHgwZiwgMHgxMywgMHg1NSwgMHg3YSwKLQkweDg4LCAweGMzLCAweDNlLCAweDczLCAweDZhLCAweGU5LCAweGUxLCAweDk3LCAweDk3LCAweGU5LCAweDYxLCAweGM2LAotCTB4ZjksIDB4ZTcsIDB4ZDIsIDB4YzMsIDB4ZjUsIDB4MmIsIDB4ZTgsIDB4NjEsIDB4NGEsIDB4ZDMsIDB4YzMsIDB4Y2UsCi0JMHg2NSwgMHg3YSwgMHg5OCwgMHgzYSwgMHhjMiwgMHg3MSwgMHhmNSwgMHhkZSwgMHhhOCwgMHhiYiwgMHhlOCwgMHg3MCwKLQkweGNkLCAweDk3LCAweDY5LCAweDIxLCAweDM5LCAweGE5LCAweGYzLCAweGY1LCAweDUzLCAweDM5LCAweDllLCAweDZmLAotCTB4ZGEsIDB4YTAsIDB4MTgsIDB4MjcsIDB4YTksIDB4YWUsIDB4N2YsIDB4ZWIsIDB4YmYsIDB4ZTgsIDB4ZmEsIDB4YmYsCi0JMHhmYywgMHhmZiwgMHg3OSwgMHhmZCwgMHhkNSwgMHhhNSwgMHhjYywgMHhkZCwgMHhlNywgMHg5OSwgMHg1NSwgMHgyMywKLQkweDhmLCAweDQzLCAweDdhLCAweDg4LCAweDVkLCAweDZhLCAweGY0LCAweDAyLCAweGQ3LCAweDk4LCAweGNmLCAweDkwLAotCTB4NjcsIDB4OTAsIDB4N2YsIDB4NjcsIDB4MjAsIDB4ZmYsIDB4OWUsIDB4ODQsIDB4ZmMsIDB4M2IsIDB4YmQsIDB4NjIsCi0JMHg0ZiwgMHg2MCwgMHhkMCwgMHhjNiwgMHgyMywgMHgwMiwgMHgzOSwgMHhlOCwgMHg1NywgMHhmMSwgMHhiMSwgMHgzOCwKLQkweDQwLCAweDdjLCAweDk4LCAweGZjLCAweDEzLCAweGU2LCAweGZlLCAweGFlLCAweGM0LCAweDQ5LCAweDU0LCAweGU3LAotCTB4MWMsIDB4M2QsIDB4ZWEsIDB4ZDcsIDB4ZTIsIDB4ODQsIDB4NzAsIDB4YmYsIDB4NWMsIDB4MzMsIDB4NDcsIDB4ZmMsCi0JMHgyZSwgMHhmMywgMHg3OSwgMHg0NiwgMHhlNywgMHg5MSwgMHhlNCwgMHhmNSwgMHgxZSwgMHgxNCwgMHhmMSwgMHhjMiwKLQkweDNkLCAweDI4LCAweGUyLCAweDI0LCAweGFhLCAweGVkLCAweGZkLCAweDdjLCAweGI5LCAweDQ5LCAweGU3LCAweGQwLAotCTB4MWYsIDB4OTgsIDB4OGYsIDB4Y2IsIDB4NjIsIDB4OWMsIDB4MzEsIDB4M2UsIDB4N2UsIDB4OTcsIDB4OTAsIDB4N2UsCi0JMHhiMywgMHg5NywgMHhjOCwgMHg0YiwgMHg4ZSwgMHhiOSwgMHg3MiwgMHhlMCwgMHhlOSwgMHgwZCwgMHg5NiwgMHhiNiwKLQkweDE5LCAweDFiLCAweGU0LCAweDk5LCAweGRkLCAweDcwLCAweDJmLCAweGEyLCAweGQ3LCAweGNhLCAweGJhLCAweDk2LAotCTB4OWEsIDB4OTgsIDB4MjUsIDB4ZjAsIDB4M2UsIDB4MmQsIDB4YzksIDB4Y2MsIDB4MDAsIDB4ZWUsIDB4ZjMsIDB4MWMsCi0JMHg3YiwgMHhiZiwgMHg0YywgMHgzZCwgMHgzOCwgMHgwMSwgMHg1YiwgMHg2ZSwgMHgyZiwgMHg3NCwgMHgwZSwgMHhjZiwKLQkweDlmLCAweDk5LCAweGVmLCAweDcwLCAweDEzLCAweDg2LCAweDU5LCAweGZkLCAweGRkLCAweDI5LCAweGZhLCAweDgwLAotCTB4YTQsIDB4ODcsIDB4MDQsIDB4OWUsIDB4NjcsIDB4NmMsIDB4NWMsIDB4MjksIDB4MjEsIDB4ZjksIDB4YzIsIDB4MDUsCi0JMHhmMywgMHg2ZCwgMHhjYiwgMHhjMiwgMHg0YiwgMHhiOCwgMHhiZiwgMHhkZSwgMHg3YSwgMHgxOCwgMHgzZiwgMHg2NCwKLQkweGQ0LCAweGRjLCAweGQxLCAweGQ3LCAweDkyLCAweGE0LCAweGNiLCAweDI2LCAweGM3LCAweGE1LCAweDFhLCAweDM3LAotCTB4OTksIDB4OTEsIDB4YzMsIDB4ZGEsIDB4N2UsIDB4MWUsIDB4YjIsIDB4YjksIDB4MmQsIDB4YTksIDB4ZDEsIDB4OWMsCi0JMHgxOCwgMHgxYiwgMHhmYSwgMHg3NywgMHg2MCwgMHg0MywgMHg3ZiwgMHhiMSwgMHg5MiwgMHhkNiwgMHhmYiwgMHg1OCwKLQkweGE3LCAweDYxLCAweDQzLCAweDNmLCAweDAxLCAweGRkLCAweDQzLCAweDlkLCAweDEzLCAweGI3LCAweDNhLCAweDY3LAotCTB4NGEsIDB4ZGQsIDB4YTgsIDB4NzUsIDB4Y2UsIDB4MzcsIDB4YjUsIDB4Y2UsIDB4NzksIDB4ZWYsIDB4MWEsIDB4OWQsCi0JMHg3MywgMHg0OCwgMHg3NSwgMHg5NywgMHhhOCwgMHg3MywgMHg4NiwgMHhkNSwgMHgxZSwgMHg4NywgMHhmNiwgMHhlMiwKLQkweGU2LCAweDNhLCAweDNhLCAweGU3LCAweDdkLCAweGYyLCAweDJlLCAweGZiLCAweGVlLCAweDFlLCAweDc5LCAweGZmLAotCTB4MGUsIDB4YmQsIDB4NzcsIDB4ZTMsIDB4Y2UsIDB4MmEsIDB4N2UsIDB4NmIsIDB4YzksIDB4ZTgsIDB4YTAsIDB4ZWIsCi0JMHg1NCwgMHhhZiwgMHhkZSwgMHhmMywgMHhmZCwgMHg0NiwgMHg4ZCwgMHhjZSwgMHhlOSwgMHg1MiwgMHgwMywgMHhjZSwKLQkweGIwLCAweDZlLCAweGMzLCAweGQ4LCAweDA0LCAweDlmLCAweDdkLCAweDI3LCAweDNkLCAweGRhLCAweDg0LCAweGU3LAotCTB4ODQsIDB4NDQsIDB4OGUsIDB4NjAsIDB4ZWUsIDB4ZTYsIDB4N2IsIDB4NTAsIDB4Y2EsIDB4YmMsIDB4N2IsIDB4YWIsCi0JMHg3ZCwgMHhhNywgMHhjMiwgMHhmMiwgMHhhOCwgMHgyOSwgMHhlZiwgMHhiNiwgMHhlNSwgMHg0NiwgMHg1NywgMHg3NSwKLQkweGE5LCAweDRlLCAweGFkLCAweGFiLCAweGI2LCAweDgzLCAweGExLCAweDY2LCAweGExLCAweDVmLCAweDY3LCAweDhiLAotCTB4YTEsIDB4Y2UsIDB4ZTIsIDB4NmYsIDB4YzYsIDB4OWUsIDB4MTksIDB4YTMsIDB4MDgsIDB4NjMsIDB4ZDgsIDB4NDksCi0JMHhkNCwgMHhjMSwgMHg1NSwgMHgwYywgMHg2ZCwgMHg0YSwgMHhmZSwgMHg4NiwgMHhhZiwgMHg4MCwgMHg2YiwgMHgxZSwKLQkweDc4LCAweGJkLCAweDE5LCAweGZjLCAweGYzLCAweDZmLCAweDBhLCAweDhjLCAweDgxLCAweGI2LCAweGNiLCAweGQxLAotCTB4ZTksIDB4ZGEsIDB4NzcsIDB4OWQsIDB4ZjIsIDB4OWUsIDB4ZTksIDB4MmQsIDB4YjIsIDB4YmYsIDB4ZjQsIDB4MmQsCi0JMHhmMCwgMHhjMSwgMHg1NiwgMHg5OSwgMHgyYSwgMHgxNSwgMHhmNCwgMHg3OSwgMHhmNSwgMHg0ZCwgMHhmYSwgMHgzYiwKLQkweDFlLCAweGZjLCAweGJlLCAweDhkLCAweDkxLCAweDkxLCAweDNiLCAweDFkLCAweDIzLCAweDIzLCAweGQzLCAweGFhLAotCTB4NmEsIDB4YjMsIDB4ODYsIDB4N2QsIDB4ZjIsIDB4ZGIsIDB4MjEsIDB4MjMsIDB4YTUsIDB4ODQsIDB4ZmUsIDB4YzYsCi0JMHhlOSwgMHg2YywgMHhlNSwgMHgwYSwgMHhmOSwgMHhjMiwgMHgzMSwgMHg3NSwgMHhhNywgMHhhYSwgMHg5ZSwgMHhlZiwKLQkweGQ1LCAweDM2LCAweGViLCAweGRjLCAweDBhLCAweDliLCAweGY1LCAweGFmLCAweDY0LCAweGYxLCAweGZkLCAweDMxLAotCTB4Y2MsIDB4MTMsIDB4MzQsIDB4N2MsIDB4ZTUsIDB4ZjcsIDB4YjgsIDB4MTcsIDB4ZGEsIDB4MWUsIDB4OTcsIDB4MGIsCi0JMHgzMiwgMHhhMiwgMHhmMSwgMHg0NywgMHg3OSwgMHhkYSwgMHgwMiwgMHgzOSwgMHhiOCwgMHhhNCwgMHhmNSwgMHhlYiwKLQkweDY2LCAweGQwLCAweDIwLCAweDY1LCAweGU5LCAweGM3LCAweGU0LCAweDQ1LCAweDJkLCAweGNmLCAweDM2LCAweDViLAotCTB4ZGIsIDB4NzUsIDB4ODEsIDB4YjEsIDB4ZDQsIDB4MjMsIDB4YjQsIDB4NWQsIDB4YmYsIDB4NjksIDB4Y2IsIDB4NTksCi0JMHg5NiwgMHg0YSwgMHgyYywgMHgwOSwgMHhmNSwgMHg1ZCwgMHgxYywgMHgzMiwgMHg5NCwgMHhmMiwgMHhmNCwgMHg4ZCwKLQkweGRhLCAweGFlLCAweDVmLCAweGIzLCAweDdkLCAweDUwLCAweDdlLCAweDFhLCAweGQ5LCAweGJkLCAweGRkLCAweDU5LAotCTB4YjAsIDB4NjUsIDB4N2MsIDB4MGUsIDB4ZTMsIDB4ZTksIDB4NWUsIDB4M2EsIDB4NmIsIDB4ZjksIDB4NGMsIDB4MzksCi0JMHg1ZiwgMHhjMiwgMHhmYiwgMHg0ZCwgMHg3OCwgMHg0ZiwgMHgzZSwgMHgzYiwgMHhhZCwgMHhmOSwgMHg0YywgMHhkYiwKLQkweDI3LCAweDRlLCAweGJmLCAweGRkLCAweDVmLCAweDU4LCAweGRlLCAweDFiLCAweGM4LCAweDkxLCAweGNmLCAweGQ0LAotCTB4NTEsIDB4NzcsIDB4YzEsIDB4YzgsIDB4MDMsIDB4ZTYsIDB4YTksIDB4N2UsIDB4MWUsIDB4YmEsIDB4ODMsIDB4NmQsCi0JMHg1MSwgMHhmZSwgMHg3MCwgMHg5YSwgMHhiZSwgMHgyZCwgMHhmYywgMHg5ZiwgMHg1NiwgMHgzYywgMHhiNywgMHhlMywKLQkweDc5LCAweDU2LCAweGRlLCAweGJiLCAweDM3LCAweGE2LCAweGU3LCAweDNkLCAweDg1LCAweDc5LCAweDFjLCAweDM4LAotCTB4ODIsIDB4MzksIDB4MzksIDB4YzYsIDB4NzYsIDB4OGUsIDB4OWUsIDB4OGEsIDB4NGEsIDB4YzMsIDB4MjksIDB4ZjIsCi0JMHgxZCwgMHhjZiwgMHhkYSwgMHgwNCwgMHhjMSwgMHhiZSwgMHg3ZSwgMHhkMiwgMHg2ZCwgMHhjYSwgMHhkZCwgMHhhOSwKLQkweGNmLCAweDk2LCAweDZlLCAweDRmLCAweDQ0LCAweDgwLCAweDkzLCAweDAzLCAweDU4LCAweDhmLCAweGE5LCAweDgyLAotCTB4ZTcsIDB4NjYsIDB4MWMsIDB4MmYsIDB4ODEsIDB4NzksIDB4YzIsIDB4MDYsIDB4ZWMsIDB4ODYsIDB4MmQsIDB4ZDgsCi0JMHgwZCwgMHgzYiwgMHhiMCwgMHgxYiwgMHg3NiwgMHhlMCwgMHg0NiwgMHgzOSwgMHg3MSwgMHgxNSwgMHg3MywgMHg0YywKLQkweDcyLCAweGQ3LCAweGMyLCAweDJiLCAweDk3LCAweGVmLCAweGU4LCAweDM4LCAweDdkLCAweGUzLCAweGNkLCAweDIzLAotCTB4ZjAsIDB4ZDksIDB4YzUsIDB4NGQsIDB4OGQsIDB4MzIsIDB4MGYsIDB4N2YsIDB4YzksIDB4NmQsIDB4YmMsIDB4NzksCi0JMHhhNywgMHg3NCwgMHgwZiwgMHhlMiwgMHhmZCwgMHhlMCwgMHgwNSwgMHhlOSwgMHhiOSwgMHhmOSwgMHg1NiwgMHhhNywKLQkweDcxLCAweDc0LCAweDA0LCAweDc4LCAweDRjLCAweDNiLCAweGE5LCAweGM0LCAweDk4LCAweGIzLCAweDgwLCAweDcxLAotCTB4MzIsIDB4ZGIsIDB4MjMsIDB4YzIsIDB4YjgsIDB4ZTUsIDB4MDIsIDB4NjMsIDB4MTEsIDB4MzcsIDB4NzcsIDB4NDcsCi0JMHhmYSwgMHg5MiwgMHhlMywgMHg0ZSwgMHg2YSwgMHg1NCwgMHg0NSwgMHg1MiwgMHhhMywgMHgyMywgMHg0ZSwgMHg1OCwKLQkweDhmLCAweGRmLCAweDQ4LCAweDg1LCAweDljLCAweDAxLCAweGFjLCAweDA3LCAweDhhLCAweGQzLCAweGEwLCAweGE3LAotCTB4ZmYsIDB4MjgsIDB4ZjksIDB4NjMsIDB4MmQsIDB4MzIsIDB4NWYsIDB4ZTgsIDB4NzYsIDB4MzMsIDB4MmEsIDB4YWUsCi0JMHg3MywgMHg0YiwgMHhkNCwgMHgwOSwgMHgxMCwgMHhmZCwgMHhhOSwgMHg5OCwgMHhjYywgMHg5NiwgMHhiNiwgMHg4YSwKLQkweGQyLCAweGI2LCAweDdiLCAweDg3LCAweDY0LCAweGE2LCAweDRiLCAweDcyLCAweDZlLCAweDQwLCAweGRhLCAweDE0LAotCTB4ZmEsIDB4ZTcsIDB4YjcsIDB4NjcsIDB4ZDUsIDB4MDksIDB4ZWUsIDB4MjUsIDB4ODYsIDB4YmMsIDB4NzAsIDB4MzksCi0JMHhmOSwgMHhhNCwgMHgwNCwgMHgxYywgMHg4MiwgMHg2ZSwgMHgxOSwgMHhlMywgMHg2ZCwgMHgxMiwgMHhjYSwgMHhiZCwKLQkweDhmLCAweGVhLCAweGY4LCAweDI5LCAweDYzLCAweGI2LCAweGI1LCAweDdiLCAweDBmLCAweGU0LCAweDhmLCAweDU4LAotCTB4NWQsIDB4ZmUsIDB4OTgsIDB4MmIsIDB4NzIsIDB4OWYsIDB4NDYsIDB4NzIsIDB4NTEsIDB4YzYsIDB4ODgsIDB4M2QsCi0JMHhmYywgMHg5ZSwgMHg2MSwgMHhkZCwgMHgyNiwgMHg5OSwgMHgxYSwgMHhjOCwgMHhkOSwgMHgzYywgMHg4ZiwgMHg0NywKLQkweDEyLCAweGNjLCAweDIxLCAweDI2LCAweDRlLCAweGM2LCAweDA3LCAweGM4LCAweGViLCAweGFiLCAweGY3LCAweDM2LAotCTB4NjIsIDB4MzUsIDB4ZjIsIDB4YzAsIDB4OTEsIDB4YzUsIDB4NTIsIDB4YjgsIDB4MTcsIDB4YzIsIDB4ZmUsIDB4ZjAsCi0JMHgzYywgMHg2MywgMHhlNCwgMHg2ZCwgMHg2NiwgMHg0ZCwgMHgzYiwgMHhjMiwgMHhjNSwgMHhmZCwgMHhjYSwgMHg5NSwKLQkweDMyLCAweDU2LCAweDc5LCAweDk0LCAweGE5LCAweGFlLCAweDk2LCAweGFmLCAweDhmLCAweDU1LCAweDhjLCAweDZjLAotCTB4OWQsIDB4YTksIDB4ODQsIDB4YmEsIDB4MjUsIDB4NjYsIDB4NzQsIDB4ZTksIDB4MWEsIDB4N2QsIDB4NjIsIDB4YTIsCi0JMHg5OSwgMHg1NSwgMHg3ZCwgMHg0MiwgMHhiZCwgMHhhOCwgMHhlNCwgMHgwMywgMHhmMywgMHgxZCwgMHgxMiwgMHg3ZCwKLQkweDU4LCAweDk2LCAweGE2LCAweGJjLCAweGVjLCAweGU1LCAweGNjLCAweGQ1LCAweDk4LCAweGYyLCAweGRmLCAweDhjLAotCTB4N2UsIDB4ZmMsIDB4NmYsIDB4MDksIDB4ZWEsIDB4YzMsIDB4MzEsIDB4ZjUsIDB4NzUsIDB4ZGMsIDB4MzcsIDB4NjksCi0JMHhmYSwgMHgwMywgMHg0ZiwgMHhlMSwgMHhkOSwgMHhmOCwgMHgwOSwgMHhiZiwgMHgwMywgMHgzZiwgMHhlMSwgMHg4YiwKLQkweGQwLCAweDc1LCAweDY3LCAweGUwLCAweDI3LCAweDNjLCAweDA5LCAweDNmLCAweGUxLCAweDM0LCAweGZjLCAweDg0LAotCTB4MjcsIDB4YTAsIDB4MjcsIDB4NmIsIDB4ZmQsIDB4ODMsIDB4YzksIDB4MTUsIDB4ZmUsIDB4NDEsIDB4YTAsIDB4ZjksCi0JMHg5ZiwgMHhmMSwgMHhjMCwgMHgyNywgMHg2YiwgMHg3YywgMHg4MywgMHg3ZCwgMHg0NiwgMHg1ZiwgMHhjMSwgMHhlZiwKLQkweDM3LCAweDdjLCAweGQ0LCAweGE1LCAweDZlLCAweGQyLCAweGZhLCAweGQxLCAweGU0LCAweGVkLCAweDhlLCAweDJlLAotCTB4ZWIsIDB4YWIsIDB4MmUsIDB4NjUsIDB4ZjQsIDB4ZDUsIDB4NmMsIDB4NTUsIDB4NWYsIDB4MTksIDB4M2UsIDB4N2EsCi0JMHhiOCwgMHgyNCwgMHgxMSwgMHhhZiwgMHhiNCwgMHg5MCwgMHhmMSwgMHg3NywgMHg2OSwgMHgxZSwgMHg2YSwgMHhmMywKLQkweGI2LCAweDRhLCAweGU0LCAweDAxLCAweGQ1LCAweGRlLCAweDIwLCAweDE5LCAweGZiLCAweDBjLCAweGZhLCAweDNhLAotCTB4M2EsIDB4OGQsIDB4YmUsIDB4YWUsIDB4OTUsIDB4YWMsIDB4YjYsIDB4Y2YsIDB4MmUsIDB4OGUsIDB4ZWYsIDB4MjcsCi0JMHg1NiwgMHhlMSwgMHgzYiwgMHg1ZiwgMHhiYywgMHg1YiwgMHhlMywgMHhmYywgMHhmZSwgMHgzMiwgMHhmNywgMHg1OSwKLQkweDVhLCAweDY0LCAweGIyLCAweDFjLCAweGUyLCAweDljLCAweGU3LCAweDU5LCAweDk5LCAweDhiLCAweGQxLCAweDI5LAotCTB4OTEsIDB4ODcsIDB4M2IsIDB4NzgsIDB4Y2UsIDB4NGEsIDB4NjUsIDB4ZmQsIDB4ZjUsIDB4M2EsIDB4ODcsIDB4ZTUsCi0JMHhjNCwgMHg4MCwgMHgyNCwgMHhiMiwgMHgwMywgMHhhNCwgMHhkNSwgMHhmYiwgMHg2NCwgMHg1NiwgMHhhZiwgMHg0NSwKLQkweDg3LCAweDM0LCAweDNjLCAweDRjLCAweDFiLCAweDI1LCAweGRjLCAweGNmLCAweGViLCAweGJhLCAweGNjLCAweDdlLAotCTB4MjMsIDB4MzUsIDB4NjYsIDB4ZWEsIDB4ODksIDB4MWMsIDB4ZDQsIDB4ZWIsIDB4NzUsIDB4NWMsIDB4ZTcsIDB4MTksCi0JMHhkZSwgMHgzNCwgMHhjZiwgMHhiOCwgMHgzYywgMHhiZiwgMHg0NywgMHhjNSwgMHg5OCwgMHhmYywgMHgzZiwgMHg2NywKLQkweGZkLCAweDdlLCAweGUxLCAweDMyLCAweDYzLCAweGNmLCAweDZjLCAweGIyLCAweDc2LCAweDhjLCAweDg5LCAweDUzLAotCTB4ZDUsIDB4YjcsIDB4NjEsIDB4ZDgsIDB4NGYsIDB4ZWQsIDB4MzcsIDB4MTQsIDB4YjcsIDB4MzgsIDB4OTMsIDB4YTUsCi0JMHhhZCwgMHg0ZSwgMHhiZSwgMHhjNCwgMHhiZCwgMHg2YywgMHhmYiwgMHhmNywgMHgyZSwgMHhkYywgMHgzZCwgMHhjZSwKLQkweDAxLCAweDZmLCAweDBiLCAweGNhLCAweDE4LCAweGIzLCAweDY0LCAweGNjLCAweGU2LCAweDk3LCAweDJlLCAweDYzLAotCTB4OGMsIDB4MzYsIDB4ZTMsIDB4NzEsIDB4NmMsIDB4OTYsIDB4NmQsIDB4NzEsIDB4YTYsIDB4NGEsIDB4ZGQsIDB4ZjAsCi0JMHhjZCwgMHg3OSwgMHhhZSwgMHg4YSwgMHhlZiwgMHg3NywgMHg3MiwgMHhlZCwgMHhhMCwgMHg4MywgMHg1ZCwgMHg3ZCwKLQkweDY2LCAweDc3LCAweDQyLCAweGFlLCAweGIwLCAweDMxLCAweDY4LCAweGVhLCAweGUxLCAweDlmLCAweDVmLCAweGIxLAotCTB4NzcsIDB4N2IsIDB4MDgsIDB4N2EsIDB4ZWMsIDB4MTYsIDB4YzgsIDB4MjMsIDB4ZWEsIDB4ZTEsIDB4NDMsIDB4NzIsCi0JMHhiNSwgMHhhNSwgMHhlNywgMHg5NSwgMHg3YSwgMHhmOCwgMHhiYywgMHgzMCwgMHg0ZSwgMHhkYywgMHg4ZiwgMHg3NywKLQkweGI5LCAweDIwLCAweDA2LCAweDdhLCAweDM4LCAweDVjLCAweGUzLCAweGFiLCAweGQxLCAweGVmLCAweDZiLCAweDFhLAotCTB4MzIsIDB4ZmIsIDB4NjEsIDB4MmIsIDB4ZmQsIDB4M2UsIDB4YzgsIDB4ODEsIDB4NzgsIDB4ZTgsIDB4ZTcsIDB4MzUsCi0JMHgyZSwgMHhlZiwgMHhkNywgMHhlZSwgMHhiMSwgMHg2ZCwgMHhhNywgMHhmYywgMHhmYiwgMHg4OSwgMHhhMywgMHhlNCwKLQkweDIxLCAweGU5LCAweDgxLCAweDJlLCAweDYzLCAweDBlLCAweGM4LCAweDZmLCAweDY5LCAweDljLCAweDg5LCAweDIyLAotCTB4ZWQsIDB4NmQsIDB4ZDIsIDB4MzAsIDB4NWEsIDB4MzksIDB4OWYsIDB4MGMsIDB4NzMsIDB4MzgsIDB4ZjIsIDB4YjYsCi0JMHhlZCwgMHg4NCwgMHhkZCwgMHg5MywgMHhjZiwgMHhjYiwgMHhkYywgMHg2NSwgMHhkNCwgMHg4MywgMHgyMywgMHg5MSwKLQkweGY1LCAweGZjLCAweDdlLCAweDIyLCAweGRhLCAweGY2LCAweDE4LCAweGJkLCAweDI4LCAweDYxLCAweDVmLCAweDdjLAotCTB4NmUsIDB4YTgsIDB4ZTksIDB4OWIsIDB4NzYsIDB4MTQsIDB4ZWYsIDB4YWIsIDB4Y2YsIDB4OTEsIDB4M2QsIDB4YTMsCi0JMHhmNywgMHgxOSwgMHhjZCwgMHhmNywgMHgxMiwgMHg0MiwgMHgzZSwgMHgyMSwgMHhlZiwgMHgyNCwgMHhmNSwgMHg1OSwKLQkweDI3LCAweGVmLCAweDYxLCAweGRhLCAweDNkLCAweGRjLCAweDgzLCAweDc1LCAweDE3LCAweDI2LCAweGZkLCAweDRmLAotCTB4ZTgsIDB4NmYsIDB4ZmMsIDB4Y2QsIDB4ODgsIDB4MzgsIDB4NzksIDB4ZmYsIDB4MzYsIDB4OWQsIDB4N2IsIDB4OTIsCi0JMHhkNywgMHhiMSwgMHhlNiwgMHgxYywgMHhlZSwgMHg1NSwgMHgxZiwgMHhiNSwgMHhlYiwgMHg2MSwgMHhmZSwgMHg0ZCwKLQkweDBiLCAweDk2LCAweDY1LCAweDAxLCAweDFiLCAweDc1LCAweDA4LCAweDY1LCAweDZmLCAweDVjLCAweGJhLCAweDhlLAotCTB4N2UsIDB4NTgsIDB4ZjMsIDB4YzIsIDB4NjYsIDB4ZjgsIDB4MDIsIDB4YzMsIDB4NDcsIDB4YTEsIDB4YWIsIDB4OGYsCi0JMHgyNiwgMHg2NCwgMHhlNywgMHg1MSwgMHhhZCwgMHgxYiwgMHhkMywgMHg2YiwgMHg2MywgMHgwNSwgMHg3ZCwgMHg2ZSwKLQkweGQ0LCAweDc5LCAweDhmLCAweDNlLCAweGM3LCAweGY2LCAweGQ2LCAweGEzLCAweDExLCAweDM5LCAweDFjLCAweGVmLAotCTB4NzMsIDB4N2IsIDB4OWMsIDB4ZjcsIDB4NWEsIDB4NWQsIDB4MTgsIDB4YzYsIDB4YjAsIDB4NWIsIDB4ZDAsIDB4ZmUsCi0JMHhmNSwgMHhlMiwgMHhkOCwgMHg2MSwgMHhmYywgMHgzYSwgMHgyMiwgMHgzMywgMHg3YiwgMHgzYiwgMHgwMSwgMHhkYiwKLQkweDVmLCAweDVkLCAweDY2LCAweGNlLCAweDIwLCAweDYzLCAweGFkLCAweGY0LCAweGI3LCAweGU3LCAweGEzLCAweDA5LAotCTB4Y2EsIDB4YjIsIDB4MmUsIDB4YzAsIDB4MzIsIDB4NzIsIDB4OTQsIDB4ZmEsIDB4Y2MsIDB4ZDMsIDB4M2MsIDB4MGUsCi0JMHgxOCwgMHhkYywgMHgwNiwgMHhlZCwgMHg4NywgMHg5MCwgMHgyZiwgMHhkZiwgMHgyMiwgMHhkZSwgMHgwMywgMHg5MCwKLQkweDcxLCAweDQ3LCAweDYzLCAweGQyLCAweDczLCAweGI0LCAweDQ1LCAweGI2LCAweDFkLCAweGE1LCAweDFmLCAweDUyLAotCTB4ZWIsIDB4OTcsIDB4ZDIsIDB4MmUsIDB4N2QsIDB4MDQsIDB4NzMsIDB4N2MsIDB4YjcsIDB4OTYsIDB4OTMsIDB4ZGMsCi0JMHhkMywgMHhkYywgMHg0ZiwgMHhkZSwgMHg0NSwgMHhkZCwgMHgyYywgMHg2YywgMHhlNiwgMHhjYywgMHg1MSwgMHg1NywKLQkweGVmLCAweDkxLCAweDY2LCAweDMwLCAweGU3LCAweDZjLCAweGQ5LCAweGM1LCAweDM4LCAweDQ2LCAweGU2LCAweGU0LAotCTB4ZTksIDB4YTcsIDB4OGMsIDB4NzYsIDB4MDAsIDB4YzcsIDB4ZWYsIDB4YjUsIDB4YmMsIDB4YjMsIDB4YmUsIDB4YzMsCi0JMHhmMiwgMHhlOCwgMHhjZiwgMHhjOCwgMHg3YiwgMHg1YiwgMHgzYSwgMHg4YywgMHhlYywgMHg3YywgMHg0YiwgMHgwNywKLQkweDczLCAweDkzLCAweDM2LCAweDdiLCAweGJjLCAweDM3LCAweDY5LCAweDdiLCAweGMyLCAweGM4LCAweGQwLCAweGQ3LAotCTB4ZTIsIDB4NDUsIDB4MDEsIDB4OGUsIDB4YzIsIDB4N2QsIDB4MjksIDB4N2QsIDB4OTYsIDB4MmYsIDB4MzgsIDB4ZTcsCi0JMHhlYiwgMHhmMywgMHgyYiwgMHhmZSwgMHhhMiwgMHhmZSwgMHgzYiwgMHgyMSwgMHhkYywgMHgyMywgMHhhYiwgMHg3ZSwKLQkweDZmLCAweDY1LCAweDU3LCAweDg1LCAweDcxLCAweGYyLCAweGNmLCAweDg2LCAweDdmLCAweDk3LCAweGE0LCAweDI2LAotCTB4ZWYsIDB4YjAsIDB4NzYsIDB4MGYsIDB4OGMsIDB4YjEsIDB4YTYsIDB4ZTUsIDB4ZGMsIDB4YTAsIDB4YTAsIDB4YTQsCi0JMHhiZiwgMHg1ZiwgMHhmNCwgMHg5YywgMHg3MywgMHhiZSwgMHg3MCwgMHhkNiwgMHhmOSwgMHhlZSwgMHhiNCwgMHgwNCwKLQkweDUxLCAweGVmLCAweDI3LCAweGNlLCAweGY3LCAweDNkLCAweGVlLCAweDk5LCAweDdmLCAweGRkLCAweGY5LCAweDVlLAotCTB4YzEsIDB4MDMsIDB4MWYsIDB4ZGUsIDB4ODcsIDB4NzksIDB4YmMsIDB4ZTIsIDB4ZmMsIDB4MDAsIDB4ZWIsIDB4N2IsCi0JMHhiMCwgMHg5OCwgMHg0ZSwgMHhiOSwgMHgzNiwgMHgyNiwgMHg3ZSwgMHhiNiwgMHhmMCwgMHg4YSwgMHhmMywgMHhiNSwKLQkweDZhLCAweDNjLCAweDY5LCAweDMwLCAweGE0LCAweDkxLCAweDQzLCAweDdjLCAweDU3LCAweGM2LCAweGJiLCAweGIyLAotCTB4ZGUsIDB4ZmYsIDB4NzEsIDB4ZTYsIDB4YTYsIDB4NmQsIDB4N2UsIDB4ODksIDB4ZTYsIDB4ZTMsIDB4ODUsIDB4ZTUsCi0JMHg3ZCwgMHg5OSwgMHg1MSwgMHhiZCwgMHg1NywgMHhmMSwgMHhhYywgMHgzMywgMHgzNywgMHg3ZiwgMHg3NywgMHg4NywKLQkweGM5LCAweDMzLCAweDNhLCAweDhiLCAweDc3LCAweDI2LCAweGU3LCAweDcyLCAweDc2LCAweGZlLCAweDJjLCAweGVhLAotCTB4M2MsIDB4ZTMsIDB4Y2MsIDB4ZWEsIDB4ZjgsIDB4OTcsIDB4ZjYsIDB4YzUsIDB4OWQsIDB4OTksIDB4ZjksIDB4NjcsCi0JMHg5YywgMHg3OSwgMHhiZCwgMHgwNywgMHg3ZCwgMHhjZSwgMHg3OSwgMHg3NCwgMHg5YSwgMHg3ZCwgMHg5ZiwgMHg0MywKLQkweDlkLCAweDA1LCAweGU3LCAweDA0LCAweGZhLCAweDliLCAweDlmLCAweGU2LCAweDc5LCAweGRjLCAweDZlLCAweGQ4LAotCTB4MDUsIDB4ZmMsIDB4N2IsIDB4M2YsIDB4ZmMsIDB4MWUsIDB4YzcsIDB4YjMsIDB4Y2UsIDB4ZmMsIDB4NzIsIDB4YmYsCi0JMHg4YiwgMHhlOCwgMHg4NywgMHg3NSwgMHg0OSwgMHg4YiwgMHgxYywgMHhmNywgMHg1OSwgMHhmNCwgMHhiZiwgMHg3NiwKLQkweGFmLCAweDZhLCAweDJkLCAweDRlLCAweDVlLCAweDAwLCAweDRlLCAweDJlLCAweDU4LCAweDljLCAweGJjLCAweDZhLAotCTB4NzEsIDB4ZjIsIDB4N2MsIDB4MGQsIDB4NGUsIDB4NDQsIDB4YWQsIDB4YzQsIDB4YzksIDB4YWIsIDB4YzAsIDB4ODksCi0JMHhhOCwgMHhmYSwgMHgzOCwgMHhjMSwgMHhiYiwgMHgzMiwgMHhkZSwgMHg2OSwgMHg5YywgMHhiYywgMHhiNCwgMHgwYSwKLQkweDI3LCAweDRiLCAweGNiLCAweDcxLCAweDc5LCAweDgzLCAweDkzLCAweDE3LCAweDgxLCAweDkzLCAweGFmLCAweDVhLAotCTB4ZDgsIDB4MmYsIDB4NTgsIDB4OWMsIDB4ZTAsIDB4M2UsIDB4N2YsIDB4MDEsIDB4NzUsIDB4NWUsIDB4YWEsIDB4YzEsCi0JMHhjOSwgMHgwNSwgMHhlMCwgMHhlNCwgMHgyNSwgMHg4YiwgMHg5MywgMHhlZiwgMHg1YiwgMHg5YywgMHg3YywgMHgxZiwKLQkweDc1LCAweDk2LCAweDgwLCAweDkzLCAweGYzLCAweDc1LCAweDcwLCAweGYyLCAweDIyLCAweDcwLCAweDEyLCAweGY2LAotCTB4N2IsIDB4MWUsIDB4ZmQsIDB4N2MsIDB4YmYsIDB4MDYsIDB4MjcsIDB4MmYsIDB4ZDYsIDB4YzEsIDB4MDksIDB4ZjcsCi0JMHg2MiwgMHhjMywgMHg5YywgMHhlZSwgMHg5OSwgMHhkNywgMHhjOSwgMHhlOSwgMHg5NiwgMHgzYiwgMHg1ZiwgMHgzZiwKLQkweGE3LCAweDliLCAweDc1LCAweDY2LCAweGE0LCAweGZhLCAweDM3LCAweDI1LCAweGVlLCAweGI2LCAweDM5LCAweDZhLAotCTB4MjYsIDB4MTcsIDB4YjAsIDB4ZmEsIDB4Y2QsIDB4YTYsIDB4NmUsIDB4ZjAsIDB4NzksIDB4M2UsIDB4ZTcsIDB4OGEsCi0JMHhjOSwgMHgyOSwgMHg4ZCwgMHhlZSwgMHhmOCwgMHgxMCwgMHg3OCwgMHg2ZCwgMHg5NywgMHgxYywgMHgzOCwgMHhkNiwKLQkweDc4LCAweDM4LCAweDZiLCAweGNiLCAweGJjLCAweDFkLCAweGRkLCAweDM5LCAweGE1LCAweGY4LCAweDJlLCAweGNjLAotCTB4NDksIDB4YTAsIDB4NWYsIDB4ZDIsIDB4YzAsIDB4NmYsIDB4MGIsIDB4ZjYsIDB4YTYsIDB4YTUsIDB4NzYsIDB4NGYsCi0JMHhiYSwgMHhjMCwgMHg2ZiwgMHgzNCwgMHg2MSwgMHhlYywgMHgyNSwgMHhmZSwgMHhmZCwgMHg4YiwgMHgyNCwgMHhmMywKLQkweGFjLCAweGYyLCAweDFhLCAweGRlLCAweDE0LCAweGY0LCAweGM3LCAweGEwLCAweGNlLCAweGFkLCAweGNhLCAweDE0LAotCTB4NjgsIDB4NzMsIDB4MjcsIDB4OTksIDB4YTMsIDB4MDYsIDB4NWIsIDB4NzksIDB4YzgsIDB4OWUsIDB4MDksIDB4ZjMsCi0JMHhmNSwgMHgzOSwgMHg5NSwgMHgyYSwgMHhmZiwgMHhkNCwgMHg5ZSwgMHg4NywgMHgyNiwgMHhkZiwgMHg1NSwgMHhlOSwKLQkweGU2LCAweGUwLCAweGYyLCAweDc3LCAweDAyLCAweDRmLCAweGNhLCAweGQzLCAweDNhLCAweDU2LCAweGRjLCAweDhjLAotCTB4ZjUsIDB4MDksIDB4ODIsIDB4YzcsIDB4N2MsIDB4MTMsIDB4YTMsIDB4NWQsIDB4ZDQsIDB4MzEsIDB4NWEsIDB4ODEsCi0JMHgzNywgMHgzZSwgMHg2OSwgMHhlMywgMHhiNCwgMHgzZCwgMHg4MywgMHgyZiwgMHgyZCwgMHhjNywgMHg2OCwgMHg2YiwKLQkweGYzLCAweDU5LCAweGNjLCAweGZlLCAweDdhLCAweGE2LCAweGY0LCAweDg4LCAweGNlLCAweGQxLCAweDE5LCAweGUxLAotCTB4ZjcsIDB4MzcsIDB4MjAsIDB4MjMsIDB4MjYsIDB4NjYsIDB4ZTYsIDB4NjUsIDB4ZjIsIDB4NDEsIDB4M2UsIDB4NTMsCi0JMHhiZiwgMHg0NSwgMHhhMCwgMHhjMywgMHgyOCwgMHhjMywgMHg3MywgMHg5MiwgMHgxOSwgMHg2NCwgMHg5OSwgMHg2OSwKLQkweDMzLCAweGEyLCAweGZkLCAweGU1LCAweDkzLCAweDMyLCAweGJjLCAweDNjLCAweDNlLCAweGYxLCAweDdiLCAweDU3LAotCTB4Y2QsIDB4NzcsIDB4YWIsIDB4NjksIDB4ZjMsIDB4YTQsIDB4OWQsIDB4NGMsIDB4ODUsIDB4ZWYsIDB4YzMsIDB4M2QsCi0JMHhmMiwgMHhiYiwgMHhlYywgMHhiNywgMHhiMywgMHhmOCwgMHhiZSwgMHhmNiwgMHg1YiwgMHhhZCwgMHg1YSwgMHg3NCwKLQkweGUwLCAweDM3LCAweGJmLCAweDg3LCAweDM2LCAweGU1LCAweDhjLCAweGEwLCAweGNkLCAweDgyLCAweGRiLCAweDMyLAotCTB4YWEsIDB4ODYsIDB4NmUsIDB4MTgsIDB4ZTUsIDB4YjksIDB4YjksIDB4ZDksIDB4MzUsIDB4ZGYsIDB4YmEsIDB4YWUsCi0JMHhlYSwgMHhjNSwgMHhiYywgMHg1ZSwgMHg1MywgMHhlNiwgMHg2NywgMHhkZCwgMHgwNSwgMHg1YSwgMHhkNCwgMHhiNCwKLQkweGE1LCAweGU5LCAweGZmLCAweGMwLCAweGIyLCAweGJlLCAweGE0LCAweDllLCAweDM1LCAweGRmLCAweDllLCAweDMxLAotCTB4ZmEsIDB4MzIsIDB4OTUsIDB4MTgsIDB4YzEsIDB4ZjgsIDB4ZmEsIDB4NmYsIDB4MmEsIDB4ZDgsIDB4NzMsIDB4YmQsCi0JMHhkOSwgMHhmOSwgMHhkYiwgMHhiNSwgMHhhZSwgMHg5ZiwgMHhmMiwgMHhkMywgMHhjOSwgMHhhOCwgMHhkNCwgMHhhOSwKLQkweDViLCAweGFhLCAweGE5LCAweGFiLCAweGU3LCAweGVkLCAweGNhLCAweDdmLCAweGM1LCAweGRhLCAweDdjLCAweGJlLAotCTB4NTgsIDB4OTYsIDB4ZTEsIDB4ZTksIDB4YmYsIDB4ODQsIDB4ZmYsIDB4OTgsIDB4OTAsIDB4ZGYsIDB4MmUsIDB4OTYsCi0JMHg0MCwgMHhhZiwgMHhiOSwgMHhjZCwgMHhmNiwgMHg1YiwgMHg0ZCwgMHgxOSwgMHhjMCwgMHhjZCwgMHg2ZiwgMHhhZiwKLQkweGU4LCAweDdjLCAweGUyLCAweGM4LCAweDE3LCAweDQwLCAweDE3LCAweDlmLCAweDJiLCAweDcxLCAweDBjLCAweGMwLAotCTB4MTIsIDB4ODEsIDB4NmQsIDB4MGYsIDB4M2IsIDB4NjEsIDB4YTYsIDB4YTQsIDB4NzMsIDB4ZTcsIDB4YWUsIDB4MmIsCi0JMHg5NywgMHg3NCwgMHhjYywgMHg2MiwgMHg2NywgMHhiOSwgMHg1MywgMHg3NiwgMHg5NSwgMHg1YiwgMHg2NCwgMHgzNywKLQkweGY0LCAweGMyLCAweGVlLCAweGIyLCAweDg3LCAweDJiLCAweDI2LCAweGVmLCAweDJlLCAweDliLCAweDc1LCAweGZhLAotCTB4NTgsIDB4OTksIDB4ZWIsIDB4YmQsIDB4NDMsIDB4NjYsIDB4OGYsIDB4YWQsIDB4ZmUsIDB4M2UsIDB4ZTcsIDB4NDIsCi0JMHgyZSwgMHhmYywgMHgzYiwgMHg0YiwgMHg0YSwgMHgzMSwgMHhiZiwgMHg4YywgMHhiNCwgMHg4NCwgMHhhYiwgMHg5OCwKLQkweDNhLCAweGJjLCAweGEwLCAweGYxLCAweGMwLCAweDBjLCAweGQ3LCAweDU0LCAweDY5LCAweDQ5LCAweDk4LCAweGE3LAotCTB4Y2YsIDB4YmYsIDB4YWQsIDB4MzQsIDB4NzMsIDB4MzksIDB4Y2YsIDB4NGQsIDB4ZjMsIDB4NWIsIDB4NWUsIDB4M2IsCi0JMHgyYiwgMHg2MSwgMHhkZSwgMHg3OCwgMHhiZCwgMHg5YywgMHg3MSwgMHhkOCwgMHhmOSwgMHgzYiwgMHhjMiwgMHgxYywKLQkweGJmLCAweDE4LCAweDczLCAweGM2LCAweGE1LCAweGViLCAweDU0LCAweDBiLCAweGVlLCAweGE3LCAweDJmLCAweGQ3LAotCTB4NjcsIDB4OWIsIDB4NGYsIDB4ODksIDB4MmQsIDB4ZDMsIDB4ZjksIDB4ZTQsIDB4NzgsIDB4NWUsIDB4ZmQsIDB4N2QsCi0JMHhiNSwgMHg5MCwgMHgxZiwgMHhhYSwgMHg3ZiwgMHhhNywgMHg0MCwgMHhlNCwgMHhmZiwgMHgwMiwgMHhmYiwgMHgyZSwKLQkweDg4LCAweDcxLCAweGVjLCAweDZlLCAweDAwLCAweDAwLCAweDAwIH07CisJMHhiZCwgMHg3ZCwgMHgwZCwgMHg3NCwgMHg1YywgMHhkNywgMHg1ZCwgMHhlNywgMHhmZiwgMHhkZCwgMHg3OSwgMHg5MiwKKwkweGM2LCAweGIyLCAweDZjLCAweDNmLCAweGNiLCAweDEzLCAweDc5LCAweDYyLCAweGFiLCAweGY2LCAweDhjLCAweGY0LAorCTB4NjQsIDB4YWIsIDB4OTEsIDB4MDgsIDB4MmYsIDB4YWUsIDB4MjgsIDB4ODIsIDB4OWQsIDB4ODQsIDB4ZTksIDB4NDgsCisJMHhiMiwgMHg5ZCwgMHgzNCwgMHhlZCwgMHhjYSwgMHg4ZCwgMHg1YiwgMHhiMiwgMHg5YywgMHgwMiwgMHg2MiwgMHgyNCwKKwkweDI3LCAweGU5LCAweDc3LCAweGQyLCAweDA0LCAweGI2LCAweGVjLCAweGM5LCAweDZlLCAweDI2LCAweDIzLCAweGY5LAorCTB4ODMsIDB4NzQsIDB4ZWMsIDB4NTEsIDB4MTIsIDB4MjUsIDB4Y2UsIDB4YTEsIDB4M2QsIDB4YmIsIDB4YWEsIDB4YTQsCisJMHhkOCwgMHgwNiwgMHgwNiwgMHg4ZiwgMHg5MywgMHhiOCwgMHhhNSwgMHhlYywgMHhhNiwgMHg1NCwgMHgyOCwgMHhhZSwKKwkweDA5LCAweGExLCAweDA3LCAweDUyLCAweDQ4LCAweGQ5LCAweDQwLCAweDUzLCAweDJhLCAweGRjLCAweGI0LCAweGNkLAorCTB4OWUsIDB4NTMsIDB4YjYsIDB4MDEsIDB4Y2EsIDB4MTIsIDB4NjgsIDB4ZTgsIDB4ZGIsIDB4ZGYsIDB4ZWYsIDB4ZGUsCisJMHhmYiwgMHgzNCwgMHhhMywgMHgwZiwgMHhlNywgMHhhMywgMHhlYywgMHhlMiwgMHg3MywgMHg5ZSwgMHhkZiwgMHhiYywKKwkweGZiLCAweGVlLCAweGM3LCAweGZmLCAweGZlLCAweGVmLCAweGZmLCAweGZiLCAweGZlLCAweGVmLCAweGQzLCAweDc2LAorCTB4OTEsIDB4NjYsIDB4YjEsIDB4ZmYsIDB4MzYsIDB4ZTAsIDB4N2EsIDB4NWIsIDB4ZWEsIDB4ZjYsIDB4ZDEsIDB4NmIsCisJMHhhZSwgMHhmZSwgMHhjOSwgMHhhYiwgMHhmOSwgMHhlYywgMHgzYSwgMHg0ZCwgMHgzMSwgMHg3OSwgMHgxMywgMHhmZiwKKwkweDUyLCAweDZmLCAweGEwLCAweDBlLCAweDNhLCAweGY0LCAweGEyLCAweGIxLCAweDc4LCAweDQ5LCAweDVjLCAweDY1LAorCTB4ZGMsIDB4M2IsIDB4NzIsIDB4YmUsIDB4YzQsIDB4NjMsIDB4OTksIDB4OTEsIDB4NWYsIDB4MWUsIDB4ZjUsIDB4NDUsCisJMHhiMiwgMHg5NSwgMHg5ZSwgMHhkNCwgMHg4MCwgMHhmYywgMHg0YiwgMHg1OCwgMHg0OCwgMHhiOCwgMHhjMiwgMHhmMiwKKwkweGI3LCAweDY0LCAweDVlLCAweGZkLCAweDZmLCAweDVmLCAweGY4LCAweGM5LCAweGY0LCAweGNiLCAweGQzLCAweDMxLAorCTB4ODksIDB4N2IsIDB4OTksIDB4MGYsIDB4OGIsIDB4YjcsIDB4NGIsIDB4ZTIsIDB4ZWQsIDB4MTksIDB4YjksIDB4ZTMsCisJMHhkMywgMHhiYiwgMHhmZiwgMHg0NiwgMHg2NCwgMHg2MywgMHhkNCwgMHhkNywgMHg0YiwgMHhlMSwgMHgxNywgMHg3NiwKKwkweDRiLCAweDYxLCAweDViLCAweDI2LCAweDM5LCAweGQyLCAweDkwLCAweDQ5LCAweGM4LCAweDE3LCAweGFiLCAweDllLAorCTB4OWMsIDB4YWIsIDB4Y2EsIDB4ZjAsIDB4YTksIDB4ZDIsIDB4Y2IsIDB4YTEsIDB4OWIsIDB4MDksIDB4NjMsIDB4MTMsCisJMHg3ZCwgMHg4ZSwgMHhjNCwgMHgzMiwgMHg3MiwgMHg2MSwgMHhiNCwgMHhlZiwgMHg5ZSwgMHg1MCwgMHhmOSwgMHgzMiwKKwkweGUyLCAweDY1LCAweGZjLCAweDYwLCAweDQxLCAweDVhLCAweGZhLCAweDJmLCAweGY2LCAweGExLCAweDRlLCAweGU1LAorCTB4ZTAsIDB4YjUsIDB4OGQsIDB4MjcsIDB4ZTIsIDB4YTIsIDB4MzIsIDB4NWQsIDB4Y2YsIDB4ZTcsIDB4NjIsIDB4ZDcsCisJMHg4OCwgMHhmMiwgMHhmZCwgMHhlMCwgMHg4MiwgMHg3NCwgMHgwNSwgMHg0ZiwgMHgwOSwgMHhjYSwgMHhjZiwgMHhjNiwKKwkweDI1LCAweDU3LCAweDk1LCAweDE2LCAweDk0LCAweGUxLCAweGRlLCAweDhjLCAweDNhLCAweDY5LCAweDJmLCAweDE3LAorCTB4NGIsIDB4NDgsIDB4YjEsIDB4ZmEsIDB4NjMsIDB4Y2QsIDB4NjYsIDB4ZWMsIDB4YWYsIDB4YWYsIDB4MzMsIDB4ZjcsCisJMHhkZCwgMHhmNiwgMHhiZSwgMHhlZSwgMHg2NywgMHhkZCwgMHg0YywgMHgzYywgMHhhZSwgMHg0ZSwgMHhjOCwgMHhjYiwKKwkweDEzLCAweDdkLCAweDJmLCAweDg3LCAweDMxLCAweGRmLCAweGY3LCAweDA2LCAweGE0LCAweDQxLCAweDA2LCAweDEzLAorCTB4ODAsIDB4YTksIDB4ZWMsIDB4YTAsIDB4ZWYsIDB4MTQsIDB4ZGEsIDB4ZmUsIDB4MTIsIDB4NzAsIDB4MGUsIDB4ZjgsCisJMHhjYSwgMHgyOSwgMHgyOSwgMHgxMCwgMHhjZSwgMHg3MiwgMHg1YywgMHgxNiwgMHg2MywgMHg0OSwgMHgwMSwgMHhmYywKKwkweGMwLCAweDQ1LCAweGJiLCAweDhjLCAweGEzLCAweDNjLCAweDU3LCAweGUyLCAweDdjLCAweDVjLCAweGM5LCAweDdiLAorCTB4MWUsIDB4ZTYsIDB4ZDIsIDB4OGUsIDB4MzYsIDB4M2IsIDB4MWQsIDB4ZDMsIDB4M2YsIDB4OWUsIDB4OTcsIDB4ZDUsCisJMHg2NywgMHhkZCwgMHhlNywgMHg1MSwgMHgzNywgMHhhNSwgMHhlYiwgMHgzZCwgMHg1MSwgMHg0ZCwgMHhjYSwgMHhlMywKKwkweGQ1LCAweDg0LCAweDNjLCAweDU2LCAweGZkLCAweDk4LCAweDY0LCAweDNkLCAweGUyLCAweDAwLCAweGIwLCAweDk2LAorCTB4MWIsIDB4NjUsIDB4NjAsIDB4YWEsIDB4NTksIDB4NzIsIDB4NTMsIDB4OWQsIDB4YzksIDB4YmMsIDB4ODQsIDB4ZTEsCisJMHg5ZCwgMHhjMSwgMHgwNywgMHg2NCwgMHhhNCwgMHgxNSwgMHhmNSwgMHhjYiwgMHg3YywgMHg5NywgMHg1YywgMHhmNiwKKwkweDJlLCAweDFmLCAweGY0LCAweDc4LCAweDc5LCAweGU1LCAweDQ4LCAweGY2LCAweDYwLCAweDNhLCAweDM5LCAweGEyLAorCTB4ZjgsIDB4ZGMsIDB4MjAsIDB4YjksIDB4NWUsIDB4M2MsIDB4MGYsIDB4YmIsIDB4MTIsIDB4ZjMsIDB4YzMsIDB4ZjAsCisJMHg4ZSwgMHg2MCwgMHgxNywgMHhlMCwgMHg0OCwgMHhhNywgMHg1MiwgMHg4YSwgMHg2ZCwgMHhkOSwgMHgyZSwgMHg1ZCwKKwkweDQ4LCAweGE5LCAweDI0LCAweGU2LCAweDcxLCAweGI1LCAweGE0LCAweDVhLCAweGMzLCAweGYwLCAweDNkLCAweDgxLAorCTB4OGYsIDB4NzIsIDB4OTEsIDB4ODEsIDB4OTIsIDB4ZGMsIDB4YWUsIDB4MzIsIDB4M2UsIDB4ZmEsIDB4OTQsIDB4NDAsCisJMHg2NSwgMHhiNiwgMHg2MCwgMHgxZSwgMHgzZCwgMHhjMCwgMHg0MywgMHhhMywgMHg2NCwgMHgxMywgMHg5MiwgMHg1NSwKKwkweDE5LCAweDQ5LCAweGE5LCAweGNjLCAweDNhLCAweDk0LCAweDM5LCAweGQyLCAweGUwLCAweGZmLCAweDc3LCAweDRiLAorCTB4N2YsIDB4OWIsIDB4ZjAsIDB4MmMsIDB4YzMsIDB4MmEsIDB4ZDMsIDB4YmEsIDB4YTIsIDB4M2MsIDB4OWQsIDB4MTIsCisJMHhmNSwgMHhlMywgMHg3MSwgMHg4YywgMHhkOSwgMHg5ZCwgMHg1NSwgMHgyYywgMHhjMywgMHg1ZCwgMHg5NywgMHgxNSwKKwkweDlhLCAweDU2LCAweDk3LCAweDRkLCAweDNhLCAweGNiLCAweGNiLCAweDRlLCAweGI1LCAweDEwLCAweDU2LCAweDUxLAorCTB4ZmMsIDB4OWQsIDB4ZDQsIDB4NzMsIDB4Y2QsIDB4MjYsIDB4M2EsIDB4YmQsIDB4MDYsIDB4Y2MsIDB4NmIsIDB4MzgsCisJMHg0OCwgMHg3YiwgMHg0MywgMHhlYSwgMHhiOSwgMHg1MCwgMHhkYSwgMHgwOCwgMHgzMywgMHhkZiwgMHgyOSwgMHhiYywKKwkweDQzLCAweGQ1LCAweDRjLCAweDgwLCAweDc1LCAweDRlLCAweGM4LCAweDUxLCAweGNjLCAweGVkLCAweGQyLCAweDU0LAorCTB4ZGEsIDB4ZWIsIDB4NTAsIDB4YjgsIDB4Y2YsIDB4ZjEsIDB4NzcsIDB4MTgsIDB4ZTYsIDB4ODIsIDB4ODIsIDB4YTYsCisJMHg4MSwgMHg2ZiwgMHg0ZSwgMHgyNSwgMHhmMSwgMHgwYywgMHhmOCwgMHgxMywgMHhkOSwgMHhmNCwgMHg2NiwgMHhiOSwKKwkweGM5LCAweGFlLCAweGNiLCAweDM3LCAweDMxLCAweDY2LCAweGE3LCAweDc3LCAweDg3LCAweGVhLCAweGY0LCAweDAyLAorCTB4OTUsIDB4ZjYsIDB4NjYsIDB4ZTQsIDB4ZjcsIDB4ZjEsIDB4MWMsIDB4ODYsIDB4MDcsIDB4ODIsIDB4NzQsIDB4YjIsCisJMHg4MCwgMHgzNSwgMHg3YiwgMHhiMSwgMHg5NCwgMHg5MCwgMHg2ZiwgMHg5NSwgMHhkMiwgMHhhMCwgMHhmYywgMHg3NCwKKwkweGY3LCAweGFjLCAweGY0LCAweDA0LCAweGIzLCAweDgwLCAweGI3LCAweDg4LCAweGViLCAweDA4LCAweGRmLCAweDU1LAorCTB4ZjAsIDB4YWUsIDB4YzIsIDB4YjYsIDB4NjEsIDB4NzgsIDB4NTMsIDB4ZjAsIDB4ZWIsIDB4ZTEsIDB4NDgsIDB4OWIsCisJMHhlMSwgMHhhNSwgMHgyZiwgMHg5NiwgMHhiMSwgMHg5ZSwgMHg4MCwgMHhmOSwgMHg3MSwgMHhhYywgMHhkMywgMHg2MywKKwkweGU1LCAweDg4LCAweDRlLCAweGJhLCAweGIxLCAweGVlLCAweGE0LCAweDBkLCAweGQyLCAweGM1LCAweDFlLCAweDRiLAorCTB4ZmYsIDB4YTMsIDB4ZjYsIDB4MmUsIDB4OTIsIDB4MDMsIDB4OGQsIDB4ZTUsIDB4ODIsIDB4MWYsIDB4ODQsIDB4NTksCisJMHhjZCwgMHg2MywgMHhlMiwgMHgwYywgMHg5NCwgMHg0OSwgMHhiYiwgMHgwZCwgMHg4MCwgMHg5NSwgMHg4ZiwgMHgxZiwKKwkweGIzLCAweGY1LCAweGRhLCAweDFkLCAweGUwLCAweDk2LCAweGViLCAweGMwLCAweGY3LCAweDcxLCAweGU1LCAweDM3LAorCTB4ZDksIDB4ZjcsIDB4MTEsIDB4MmYsIDB4ZjEsIDB4MWYsIDB4ZTgsIDB4Y2QsIDB4YWYsIDB4ZDUsIDB4Y2IsIDB4OTEsCisJMHgyNiwgMHhhYiwgMHgwNSwgMHhjOSwgMHgzZiwgMHgxOCwgMHhjYSwgMHg0MCwgMHgwMCwgMHgzYywgMHhiMSwgMHg0ZiwKKwkweDJmLCAweDEwLCAweGRkLCAweGQ2LCAweDYzLCAweDFkLCAweDVkLCAweDE3LCAweGZmLCAweGFlLCAweDY5LCAweGM0LAorCTB4MTgsIDB4Y2UsIDB4NjAsIDB4YjksIDB4ZDYsIDB4NzYsIDB4YjAsIDB4ZmMsIDB4ZTQsIDB4MTYsIDB4MGIsIDB4MWYsCisJMHg5ZSwgMHhmYiwgMHg5ZCwgMHg1YywgMHhmNSwgMHg2ZiwgMHhlZCwgMHhkYSwgMHg0NiwgMHhmMywgMHhiOCwgMHg2OSwKKwkweDBkLCAweGRhLCAweDBlLCAweGMzLCAweDg5LCAweDQwLCAweDQ2LCAweDU0LCAweDY2LCAweDMxLCAweDllLCAweDJiLAorCTB4ODksIDB4ZDMsIDB4OTAsIDB4ZjEsIDB4YmQsIDB4MjEsIDB4NTksIDB4MjcsIDB4NzYsIDB4NWUsIDB4YjYsIDB4ZGMsCisJMHgwMywgMHhhZiwgMHg3NCwgMHhhMSwgMHhkYywgMHgxMSwgMHhjOCwgMHg4ZCwgMHgxMSwgMHgwNywgMHg2NSwgMHgxZCwKKwkweDE1LCAweDk0LCAweDYxLCAweGZkLCAweGM2LCAweDgxLCAweGFmLCAweDdjLCAweGE5LCAweDVmLCAweGFmLCAweDY1LAorCTB4YmUsIDB4MzQsIDB4MGMsIDB4ZGUsIDB4Y2YsIDB4ZTAsIDB4NzcsIDB4NzYsIDB4YjMsIDB4MmIsIDB4NWQsIDB4YTAsCisJMHg0MywgMHhhZSwgMHhiMSwgMHhiOCwgMHhiOSwgMHhkZCwgMHhhMCwgMHhkNSwgMHhlYSwgMHhlYiwgMHg0YiwgMHgyYywKKwkweDNkLCAweGY3LCAweGUwLCAweDVmLCAweDg4LCAweGQzLCAweDI1LCAweDc4LCAweDYyLCAweDE5LCAweGYyLCAweGY1LAorCTB4ZjMsIDB4MjEsIDB4ZTgsIDB4MTksIDB4NjUsIDB4ODQsIDB4OTksIDB4MzUsIDB4MTMsIDB4MzIsIDB4NTEsIDB4ZGUsCisJMHgyNiwgMHhjNSwgMHgyOSwgMHg1ZiwgMHhjNiwgMHg0YiwgMHhmMywgMHhkZCwgMHg0YSwgMHg1ZSwgMHg4NiwgMHhhYywKKwkweGYxLCAweDQxLCAweDBiLCAweDY5LCAweGYwLCAweDQxLCAweDQ2LCAweDA2LCAweGFhLCAweDE4LCAweGFmLCAweDg0LAorCTB4N2IsIDB4YjksIDB4MTMsIDB4NmQsIDB4NWQsIDB4YzksIDB4MjYsIDB4Y2QsIDB4M2EsIDB4MTcsIDB4NGIsIDB4NjMsCisJMHhjMCwgMHgxNSwgMHhkNiwgMHg4ZCwgMHhiMiwgMHg0MSwgMHhjMywgMHgzYywgMHgwYywgMHgzYSwgMHhmNCwgMHgyNCwKKwkweGQ3LCAweGE3LCAweGUxLCAweDdjLCAweDEzLCAweGYwLCAweGM1LCAweDY1LCAweDI2LCAweDY4LCAweGI0LCAweDM4LAorCTB4MjIsIDB4N2YsIDB4YzYsIDB4ZGQsIDB4MDEsIDB4ZTAsIDB4NjEsIDB4YTAsIDB4NzIsIDB4MGYsIDB4ZmEsIDB4NmYsCisJMHhjMSwgMHg2ZiwgMHg5NiwgMHg4OSwgMHgyZCwgMHg3MywgMHhmNSwgMHhmMywgMHg0MCwgMHg4NSwgMHgzMCwgMHg0NywKKwkweDc0LCAweDBmLCAweDNlLCAweDk4LCAweDgyLCAweGZjLCAweDAxLCAweGRkLCAweDBmLCAweDkwLCAweDVmLCAweGU2LAorCTB4MzgsIDB4MTcsIDB4YzIsIDB4YjUsIDB4NGQsIDB4ZmYsIDB4MWUsIDB4OWYsIDB4ZGEsIDB4YTEsIDB4OWYsIDB4ZjMsCisJMHhjMywgMHhkYiwgMHhhNCwgMHgzMCwgMHgxNywgMHhjZCwgMHg5OSwgMHhiMiwgMHg4NywgMHhmMiwgMHgyNiwgMHg3ZCwKKwkweDBjLCAweDc0LCAweDA1LCAweGY5LCAweDEzLCAweDg2LCAweDBmLCAweDA2LCAweDk0LCAweDQxLCAweDYxLCAweGY4LAorCTB4NzgsIDB4NDAsIDB4OTksIDB4NzQsIDB4MWUsIDB4YjIsIDB4ODYsIDB4NzIsIDB4ODgsIDB4NzIsIDB4NjEsIDB4NTAsCisJMHg3MSwgMHhkZCwgMHg3MywgMHhhNSwgMHgwMCwgMHhlYiwgMHhkMywgMHgyOCwgMHhmOSwgMHhkZSwgMHg0NywgMHgwOCwKKwkweDJiLCAweDY0LCAweGQ4LCAweGIzLCAweDFmLCAweGNiLCAweGY5LCAweDg1LCAweDY0LCAweDRjLCAweGUzLCAweDQ5LAorCTB4YjAsIDB4NWUsIDB4NzEsIDB4YzksIDB4ZWEsIDB4OTksIDB4NzUsIDB4NDgsIDB4YjEsIDB4NzcsIDB4ZDIsIDB4ZDYsCisJMHg3OSwgMHg0OSwgMHhkNywgMHg3MSwgMHg1NywgMHhkNSwgMHhmOSwgMHg3NSwgMHg2NSwgMHg3OCwgMHgzYywgMHhjMCwKKwkweDVhLCAweGZlLCAweGI0LCAweDIyLCAweDFlLCAweDNiLCAweDc2LCAweGYxLCAweDU5LCAweGUyLCAweDBkLCAweDk5LAorCTB4YWYsIDB4ZTEsIDB4ZGQsIDB4YjksIDB4M2IsIDB4MWYsIDB4ZjUsIDB4ZDcsIDB4N2EsIDB4YjcsIDB4YjUsIDB4NjEsCisJMHhmNSwgMHhiYiwgMHgwOSwgMHg3MSwgMHhmZCwgMHg3NCwgMHhmNywgMHgwMSwgMHhmNSwgMHg0ZiwgMHg3OCwgMHgxNywKKwkweDg2LCAweDhmLCAweDA2LCAweDUxLCAweDc5LCAweDZmLCAweGMzLCAweGVhLCAweDMxLCAweDdlLCAweDc2LCAweDhkLAorCTB4YjIsIDB4ZjMsIDB4NmIsIDB4OTQsIDB4ZmQsIDB4YzksIDB4MWEsIDB4NjUsIDB4ZWYsIDB4NmQsIDB4NWMsIDB4NWQsCisJMHhmNiwgMHhjMCwgMHgxYSwgMHg2NSwgMHg0ZiwgMHhhZiwgMHg1MSwgMHhlNiwgMHgzNywgMHhhZCwgMHgyZSwgMHhkYiwKKwkweGI1LCAweDQ2LCAweGQ5LCAweDViLCAweGQ3LCAweDI4LCAweDNiLCAweGIwLCAweDQ2LCAweDk5LCAweDBiLCAweDFlLAorCTB4ZGUsIDB4MjUsIDB4YzUsIDB4YzQsIDB4YmQsIDB4OWMsIDB4YmIsIDB4YzUsIDB4Y2QsIDB4ZTcsIDB4NjIsIDB4YWIsCisJMHg3MSwgMHhkMywgMHg4MCwgMHg3YSwgMHhlZCwgMHgyYiwgMHhlYSwgMHg3ZCwgMHg2ZCwgMHg4ZCwgMHg3YSwgMHg4ZCwKKwkweGE4LCAweGQ3LCAweGJhLCAweGEyLCAweGRlLCAweGNkLCAweGVlLCAweGVhLCAweDdhLCAweDRkLCAweGE4LCAweDE3LAorCTB4NWYsIDB4NTEsIDB4ZWYsIDB4NzcsIDB4ZDcsIDB4YTgsIDB4YzcsIDB4ZjIsIDB4NGYsIDB4ZDksIDB4NzEsIDB4N2EsCisJMHhhMCwgMHhkMSwgMHg1ZSwgMHg2YiwgMHhiZCwgMHgxYSwgMHg0NSwgMHhkYSwgMHg1OCwgMHgxZSwgMHg0MCwgMHgxZiwKKwkweGZkLCAweGI0LCAweDMyLCAweDMyLCAweDg2LCAweGYyLCAweDRjLCAweGUzLCAweDBkLCAweDc0LCAweDllLCAweDA0LAorCTB4ZGQsIDB4NTEsIDB4MjYsIDB4ODMsIDB4Y2YsIDB4N2MsIDB4ZjIsIDB4ZmUsIDB4MDYsIDB4MTksIDB4NDksIDB4ZjQsCisJMHg3OCwgMHg2ZiwgMHg1MywgMHgyZCwgMHhhMCwgMHhiMSwgMHhiNCwgMHg5NywgMHg1MiwgMHhlNCwgMHgzZiwgMHgyOSwKKwkweDgwLCAweGI3LCAweDBiLCAweDAzLCAweGEyLCAweDEyLCAweDRhLCAweDQyLCAweDE5LCAweDBjLCAweDU0LCAweGFiLAorCTB4OTIsIDB4N2IsIDB4YzAsIDB4NWYsIDB4NTksIDB4ZTgsIDB4YmYsIDB4MDMsIDB4ZTEsIDB4ODAsIDB4ZTYsIDB4MmQsCisJMHg1MywgMHhmNywgMHhmMiwgMHhmMiwgMHhiOSwgMHg1ZiwgMHg4ZSwgMHg1MCwgMHhhZSwgMHg2NiwgMHg4MiwgMHgzYiwKKwkweDczLCAweGZlLCAweDdjLCAweDdmLCAweDIzLCAweDY4LCAweGY2LCAweDEyLCAweGRhLCAweGVjLCAweDQzLCAweGNiLAorCTB4NDMsIDB4MTUsIDB4NTcsIDB4MDYsIDB4MmIsIDB4MTksIDB4ZjAsIDB4ODIsIDB4MjMsIDB4MTcsIDB4ZmQsIDB4NGQsCisJMHg3MiwgMHgzMSwgMHg0MCwgMHhkZCwgMHg2YSwgMHg0YywgMHgxNiwgMHgxMiwgMHg4ZSwgMHgyYywgMHhlMCwgMHgzOSwKKwkweDE3LCAweGUwLCAweDVkLCAweDM1LCAweGUyLCAweGFkLCAweDhjLCAweDFjLCAweDJlLCAweGY3LCAweGNiLCAweGIxLAorCTB4ZjIsIDB4ODcsIDB4NTUsIDB4YTQsIDB4MjMsIDB4ODcsIDB4ODIsIDB4ZjUsIDB4NzIsIDB4YzYsIDB4MzMsIDB4N2QsCisJMHhlZiwgMHhmMywgMHhlNywgMHhhMSwgMHg5ZCwgMHg1ZCwgMHhiOSwgMHhlNCwgMHhhNywgMHg5MywgMHgwYiwgMHg5YSwKKwkweDI3LCAweGZlLCAweDMxLCAweDFjLCAweDQ0LCAweDNmLCAweDMzLCAweDdlLCAweGRhLCAweGZiLCAweDAzLCAweDBhLAorCTB4YzksIDB4MGEsIDB4NmQsIDB4YTksIDB4NWEsIDB4NWYsIDB4ZTMsIDB4ZTgsIDB4ZWIsIDB4NjgsIDB4NzksIDB4ODMsCisJMHhkYywgMHg2YSwgMHhkYiwgMHhlZiwgMHhmNSwgMHhlNywgMHhiYiwgMHhjMSwgMHg3MywgMHhkZSwgMHgyOSwgMHhjYSwKKwkweDkwLCAweDEyLCAweGUwLCAweDNhLCAweDA4LCAweGRlLCAweDQ2LCAweGRiLCAweDJmLCAweDA5LCAweGRiLCAweGMwLAorCTB4ZjYsIDB4MmEsIDB4NmQsIDB4ODIsIDB4YWMsIDB4ZmYsIDB4ODcsIDB4ZjAsIDB4ZDYsIDB4MDQsIDB4ZWIsIDB4YjMsCisJMHg4YywgMHhmYSwgMHg0YiwgMHgyNiwgMHg1NSwgMHgwNiwgMHgzMiwgMHhhMSwgMHhhZiwgMHgwYiwgMHhmYSwgMHgyYiwKKwkweDI1LCAweDgzLCAweDU1LCAweGM4LCAweDllLCAweGYyLCAweDBmLCAweGMzLCAweGFjLCAweGNiLCAweDMxLCAweGEyLAorCTB4YjEsIDB4YTQsIDB4NTAsIDB4YWIsIDB4YzMsIDB4MzIsIDB4ZDYsIDB4MjMsIDB4ZmYsIDB4MmYsIDB4MmUsIDB4YzksCisJMHg4YSwgMHgwMiwgMHhlNCwgMHg4YiwgMHhiMSwgMHhkMSwgMHhmZSwgMHgxMywgMHg3OCwgMHhiNCwgMHg1ZCwgMHgwNiwKKwkweDRiLCAweGU5LCAweDQyLCAweDU2LCAweDc2LCAweDYxLCAweGZkLCAweDdlLCAweDBkLCAweDZiLCAweGVhLCAweGUyLAorCTB4ZmEsIDB4OTMsIDB4ZjUsIDB4YjIsIDB4MzEsIDB4ODAsIDB4MWQsIDB4YzAsIDB4NzIsIDB4NzQsIDB4ZGEsIDB4NDYsCisJMHhmYiwgMHhlYywgMHgxOSwgMHhlMCwgMHg2MSwgMHg5YywgMHg2YiwgMHg5ZSwgMHhjYywgMHhjNSwgMHg5YywgMHg2MSwKKwkweGRhLCAweDNlLCAweGMzLCAweDkwLCAweDhmLCAweGY5LCAweDBhLCAweGZiLCAweDI2LCAweGJjLCAweDQ5LCAweGZiLAorCTB4MWIsIDB4MzYsIDB4NWIsIDB4YTksIDB4ZGQsIDB4ZmUsIDB4NmUsIDB4YzEsIDB4ZWYsIDB4OTQsIDB4ZmQsIDB4MGQsCisJMHg5OSwgMHg1YSwgMHhmMiwgMHhlZCwgMHhlZiwgMHgwNCwgMHg3ZSwgMHg3NywgMHhkYiwgMHhkZiwgMHg0OSwgMHhmYywKKwkweGVlLCAweGQ1LCAweGJmLCAweDI3LCAweGNhLCAweDdiLCAweGY3LCAweDJhLCAweGZmLCAweDZhLCAweGM5LCAweGNmLAorCTB4YjUsIDB4Y2IsIDB4ZTEsIDB4ZDIsIDB4N2IsIDB4YWQsIDB4NmMsIDB4YzEsIDB4MjUsIDB4OWYsIDB4NzcsIDB4Y2MsCisJMHgzYywgMHgwMSwgMHg3NywgMHg5OSwgMHg2ZCwgMHgwYSwgMHhjZSwgMHhiMCwgMHhiNiwgMHhkZCwgMHhkYSwgMHg2MSwKKwkweGViLCAweGY0LCAweDc4LCAweDliLCAweDg1LCAweDM0LCAweDMwLCAweGUxLCAweDBjLCAweDU0LCAweDlkLCAweDZjLAorCTB4MmMsIDB4ZDMsIDB4OTUsIDB4MWMsIDB4OTcsIDB4NjMsIDB4ZjgsIDB4MmQsIDB4NWUsIDB4MmMsIDB4ZjMsIDB4NzksCisJMHhkYywgMHgwZCwgMHgwZSwgMHhiZSwgMHgwMCwgMHg3ZCwgMHgzMywgMHg1ZSwgMHhhNiwgMHhiYywgMHhmNCwgMHgzMSwKKwkweGY3LCAweDk0LCAweDljLCAweDVmLCAweDY2LCAweGFmLCAweDExLCAweDE3LCAweDRhLCAweGYyLCAweDUzLCAweGU5LAorCTB4NDcsIDB4MGEsIDB4OTIsIDB4MmUsIDB4NGMsIDB4ODMsIDB4MjEsIDB4MGUsIDB4MDQsIDB4YWUsIDB4YmMsIDB4MjcsCisJMHgwMCwgMHhlZCwgMHg1ZSwgMHhlZCwgMHhjOCwgMHhkZSwgMHhhYiwgMHg1ZCwgMHhkOCwgMHg1NywgMHhmZSwgMHhmNCwKKwkweDVlLCAweGM4LCAweGQ4LCAweDdjLCAweGU5LCAweGVhLCAweDE4LCAweGU5LCAweDQxLCAweDlkLCAweDk1LCAweDExLAorCTB4MzcsIDB4MDMsIDB4NmMsIDB4OWYsIDB4ZWQsIDB4MWQsIDB4MWMsIDB4MmYsIDB4ZTUsIDB4M2YsIDB4YWMsIDB4MzIsCisJMHhiNywgMHhmZiwgMHg2YSwgMHhhZSwgMHg2ZiwgMHgxNywgMHg3NCwgMHg3OSwgMHgxOCwgMHhjNiwgMHgzMiwgMHg2ZCwKKwkweGQwLCAweDRiLCAweDVjLCAweDU3LCAweGVhLCAweGE5LCAweDliLCAweDZlLCAweDhhLCAweDY1LCAweDFhLCAweDY0LAorCTB4ZTAsIDB4NjAsIDB4MWIsIDB4ZWEsIDB4YjMsIDB4OWMsIDB4YjgsIDB4NzIsIDB4ZDAsIDB4NDcsIDB4M2EsIDB4MzUsCisJMHgyOCwgMHg3MiwgMHhmNywgMHg0NCwgMHhkZiwgMHhhMiwgMHgzMywgMHgzZSwgMHhmOSwgMHg3MywgMHhlMCwgMHhjNywKKwkweDdlLCAweGM5LCAweDFmLCAweDdjLCAweDAwLCAweGY4LCAweDdkLCAweGQ5LCAweDI5LCAweDRlLCAweGJkLCAweGUyLAorCTB4OGMsIDB4NGYsIDB4ZmQsIDB4OWQsIDB4MzMsIDB4MzEsIDB4YjUsIDB4NjMsIDB4YzcsIDB4NTAsIDB4ZmYsIDB4OGUsCisJMHgxZCwgMHhhMywgMHhmZCwgMHhhZSwgMHhkNSwgMHgyZCwgMHgzYiwgMHg3NiwgMHg0YywgMHhmNCwgMHg2NywgMHgzMSwKKwkweGZmLCAweDFlLCAweDZmLCAweDUwLCAweDdjLCAweDZmLCAweDJmLCAweDk1LCAweDdjLCAweGMyLCAweGFjLCAweGZkLAorCTB4NGMsIDB4ZDAsIDB4OGQsIDB4ZjcsIDB4NmMsIDB4ZGYsIDB4YWIsIDB4ZGYsIDB4MGYsIDB4NDgsIDB4NGYsIDB4YjIsCisJMHg1NSwgMHgzOCwgMHg3ZSwgMHg4NywgMHhkNSwgMHg0OSwgMHg2YywgMHgwNywgMHg3YSwgMHhlOSwgMHhhNSwgMHgxZCwKKwkweGE4LCAweDUwLCAweDJmLCAweDA1LCAweDdjLCAweGQwLCAweDI2LCAweGRlLCAweDA2LCAweDFiLCAweDgyLCAweGVkLAorCTB4OTQsIDB4NWQsIDB4ZjcsIDB4OTIsIDB4NmEsIDB4ZjAsIDB4NjMsIDB4YmEsIDB4NWYsIDB4NzUsIDB4MzYsIDB4MTMsCisJMHgzMywgMHg2YiwgMHhkZSwgMHg2MywgMHhlZCwgMHhlYiwgMHg0ZCwgMHgyOCwgMHhlNywgMHgzMywgMHg3MSwgMHg0OSwKKwkweDdjLCAweGQxLCAweGRlLCAweDY5LCAweGQwLCAweGY2LCAweDY5LCAweGJlLCAweDQ0LCAweDVhLCAweDcyLCAweDY1LAorCTB4YWMsIDB4ZDQsIDB4OGYsIDB4MzYsIDB4YTAsIDB4OTcsIDB4YjMsIDB4ZjYsIDB4M2EsIDB4ODEsIDB4ZjEsIDB4MGUsCisJMHhhMiwgMHhhZiwgMHgxMywgMHg0NywgMHhkMSwgMHg4ZSwgMHhiMiwgMHgyNCwgMHhkZCwgMHgyZCwgMHhlYSwgMHg0MSwKKwkweGQ0LCAweGU5LCAweGYxLCAweGI2LCAweDA4LCAweGVkLCAweDlhLCAweDQ3LCAweDI0LCAweDVmLCAweDI2LCAweGRmLAorCTB4ZDMsIDB4MzYsIDB4ODgsIDB4NGIsIDB4YWEsIDB4MGQsIDB4Y2YsIDB4ZDUsIDB4YzMsIDB4YjAsIDB4NzUsIDB4MWEsCisJMHgyMiwgMHg3YiwgMHg0MywgMHg2YSwgMHg3NiwgMHhkMSwgMHhhZiwgMHgyYSwgMHhmMSwgMHgwZiwgMHhjYiwgMHhjOCwKKwkweGVjLCAweDc2LCAweGQ0LCAweDMzLCAweGY2LCAweGJjLCAweGYyLCAweDYxLCAweDE3LCAweGNkLCAweDY2LCAweDI1LAorCTB4YjcsIDB4ZWIsIDB4NWUsIDB4ZGMsIDB4M2QsIDB4M2MsIDB4MTcsIDB4NzEsIDB4N2YsIDB4MGIsIDB4ZWUsIDB4ZTMsCisJMHhiOCwgMHg0NywgMHg3MCwgMHgwMiwgMHhlNywgMHg0MSwgMHhjYywgMHhlYSwgMHhiMiwgMHg1MSwgMHg4YywgMHhmZCwKKwkweGVmLCAweDI1LCAweDM3LCAweDA5LCAweDdhLCAweDJkLCAweDg1LCAweDliLCAweDcyLCAweDdlLCAweGQ2LCAweDUzLAorCTB4YTIsIDB4YjYsIDB4MjgsIDB4OTksIDB4NDAsIDB4N2QsIDB4ZjgsIDB4MjksIDB4ZmUsIDB4MTEsIDB4MTksIDB4M2QsCisJMHg4ZCwgMHhkZiwgMHgwZiwgMHhkMiwgMHhlZSwgMHg5ZSwgMHg5MCwgMHhkMSwgMHg1OSwgMHg4ZSwgMHg1MywgMHgwMiwKKwkweDRjLCAweDkzLCAweDkyLCAweDNmLCAweGZkLCAweDAwLCAweGFlLCAweDI5LCAweDVjLCAweDBmLCAweGUzLCAweGUyLAorCTB4ZGMsIDB4ZDgsIDB4ZmYsIDB4YzIsIDB4NjYsIDB4MjUsIDB4MmQsIDB4ZmEsIDB4MzksIDB4NGYsIDB4ZmEsIDB4YWUsCisJMHhlMiwgMHgzNywgMHg2OSwgMHhiYiwgMHg0YSwgMHgxYiwgMHgwOCwgMHg3NCwgMHg1ZCwgMHg4ZCwgMHhlOCwgMHgzZCwKKwkweGIwLCAweGJmLCAweDkzLCAweDlhLCAweGRmLCAweDBiLCAweGFkLCAweGEwLCAweGE1LCAweDZhLCAweDU2LCAweGNiLAorCTB4MjIsIDB4YzAsIDB4MDAsIDB4YjksIDB4MDMsIDB4OWIsIDB4YTQsIDB4OTUsIDB4NzMsIDB4ZWMsIDB4YjUsIDB4NjUsCisJMHhiZCwgMHhiYSwgMHgyYywgMHhhNSwgMHhjYiwgMHhmYSwgMHg2YywgMHgxOSwgMHhlZSwgMHhkNSwgMHgwNiwgMHgxOSwKKwkweDY5LCAweDAzLCAweGM0LCAweDk0LCAweGRiLCAweDEyLCAweGUxLCAweDkzLCAweGIyLCAweDAxLCAweDc0LCAweDhkLAorCTB4ZjUsIDB4M2QsIDB4N2YsIDB4NTksIDB4YjksIDB4YjgsIDB4YTgsIDB4ZWQsIDB4YmQsIDB4NzMsIDB4NTUsIDB4ZDIsCisJMHgzNywgMHg2OSwgMHgzZSwgMHgwYywgMHhlZiwgMHgwZiwgMHg5YSwgMHhkMCwgMHgzZiwgMHg2NSwgMHg4MSwgMHg0OCwKKwkweGMzLCAweDA5LCAweDU3LCAweGE2LCAweDNkLCAweGQyLCAweGMwLCAweGM3LCAweDVhLCAweDQ4LCAweDAzLCAweDhkLAorCTB4M2UsIDB4NjksIDB4YmIsIDB4OWUsIDB4ZWYsIDB4YjgsIDB4ODYsIDB4ZWMsIDB4YWYsIDB4MDAsIDB4MWIsIDB4OTIsCisJMHhiNiwgMHg2NCwgMHgxNywgMHhlYywgMHg3MywgMHg4ZSwgMHg3MSwgMHg4YywgMHhjZiwgMHg5ZSwgMHgwMiwgMHhhZiwKKwkweGU1LCAweDk2LCAweDc4LCAweDRkLCAweDY0LCAweGE2LCAweDQ0LCAweGRjLCAweDQ0LCAweDM2LCAweDI2LCAweGQ3LAorCTB4OTksIDB4ZjgsIDB4MzksIDB4ODcsIDB4MzksIDB4ZjMsIDB4N2UsIDB4ZGUsIDB4ZTIsIDB4ZTksIDB4ZjMsIDB4MTYsCisJMHg0ZiwgMHg0ZiwgMHhkYSwgMHhiYiwgMHhlNywgMHhlNCwgMHhiNSwgMHhjZCwgMHgzOCwgMHg4ZiwgMHg2NywgMHhhZSwKKwkweDBmLCAweGU4LCAweGFhLCAweDRhLCAweDllLCAweDliLCAweGM2LCAweDFkLCAweDc1LCAweGNiLCAweGU3LCAweDY0LAorCTB4NTQsIDB4ZGIsIDB4NmYsIDB4MzEsIDB4NzksIDB4ODcsIDB4OTYsIDB4NzksIDB4NWYsIDB4YzUsIDB4NWEsIDB4OTYsCisJMHgwMCwgMHg3MywgMHg4MywgMHgxNCwgMHgxMiwgMHgzMSwgMHhiZCwgMHhmNiwgMHhhZSwgMHhmZiwgMHg1YiwgMHhhZSwKKwkweGExLCAweDU1LCAweGUyLCAweDY0LCAweDk5LCAweGJmLCAweDU2LCAweDA3LCAweDUzLCAweGU0LCAweGEzLCAweDEyLAorCTB4MmUsIDB4ZDIsIDB4ZWUsIDB4YTcsIDB4MzUsIDB4NWMsIDB4YjcsIDB4NDAsIDB4MGUsIDB4MTYsIDB4NDQsIDB4YjUsCisJMHgzNSwgMHhjYSwgMHg5NSwgMHhhMCwgMHgwNSwgMHg5NSwgMHg4MCwgMHg0NiwgMHgwYiwgMHg5ZiwgMHg4MiwgMHgzZCwKKwkweDk1LCAweDlmLCAweGE1LCAweDlkLCAweGRlLCAweDQxLCAweGRmLCAweDI4LCAweDllLCAweGVmLCAweGRkLCAweDQ4LAorCTB4M2EsIDB4NTIsIDB4ODYsIDB4NmYsIDB4MWMsIDB4OTUsIDB4ZWYsIDB4ZDUsIDB4NzQsIDB4ZWEsIDB4MjgsIDB4M2YsCisJMHhhMSwgMHg2ZCwgMHg3MSwgMHhkNywgMHhkZiwgMHhlYSwgMHg1YSwgMHg5ZiwgMHhkZSwgMHg1NSwgMHhmZSwgMHg5NiwKKwkweDk1LCAweDY1LCAweDI5LCAweGVhLCAweDY3LCAweGI0LCAweDRiLCAweGU1LCAweDdiLCAweGRiLCAweGM4LCAweDYzLAorCTB4MWUsIDB4ZmMsIDB4ZTEsIDB4YWMsIDB4ZjIsIDB4YjUsIDB4ZmYsIDB4NTUsIDB4NTAsIDB4N2QsIDB4OWIsIDB4NTYsCisJMHhkNCwgMHhkNywgMHg3NywgMHhjNywgMHgzZSwgMHhiYiwgMHhmNiwgMHhlZSwgMHhkOSwgMHg3YiwgMHhjYSwgMHhkZSwKKwkweDBiLCAweDZlLCAweDFmLCAweGVmLCAweDhlLCAweGI4LCAweDE5LCAweGRlLCAweGIxLCAweDg2LCAweDE5LCAweGY2LAorCTB4YTEsIDB4ZjksIDB4MmEsIDB4MzQsIDB4YjYsIDB4NzIsIDB4OTcsIDB4NTcsIDB4MTQsIDB4ZjIsIDB4ZDUsIDB4NTcsCisJMHhlNSwgMHg5NiwgMHg1OSwgMHgyMywgMHg5NywgMHhmNywgMHg5NiwgMHhjMiwgMHgxMCwgMHgzZSwgMHhhMiwgMHhiNywKKwkweDAwLCAweGZmLCAweDM4LCAweDdiLCAweGIwLCAweDIyLCAweGI3LCAweDU0LCAweDg5LCAweGI3LCAweDRmLCAweDAyLAorCTB4N2YsIDB4NDMsIDB4MmUsIDB4NzksIDB4ZDMsIDB4MTMsIDB4Y2EsIDB4ZTMsIDB4YmIsIDB4ODQsIDB4ZjYsIDB4NmEsCisJMHhiMSwgMHg0NCwgMHg5YywgMHg1ZiwgMHgxMCwgMHhhZSwgMHg0ZCwgMHhiMSwgMHhmNCwgMHhiNCwgMHg1ZSwgMHg5YiwKKwkweDIzLCAweGE1LCAweDA1LCAweGUwLCAweGU3LCAweGNiLCAweGEwLCAweGZiLCAweDMwLCAweDVjLCAweDA4LCAweDhhLAorCTB4YTAsIDB4OWMsIDB4M2YsIDB4YzYsIDB4NmYsIDB4ZDgsIDB4MjgsIDB4YTUsIDB4NjcsIDB4ZjEsIDB4N2UsIDB4YTMsCisJMHgxNCwgMHgyNywgMHhjOSwgMHg3MywgMHhhZSwgMHhlNSwgMHhlMSwgMHhiMywgMHhlMCwgMHhhNywgMHg5ZiwgMHg0MSwKKwkweGJmLCAweDI4LCAweGViLCAweGUzLCAweGVmLCAweDFmLCAweGUwLCAweDFkLCAweGVlLCAweGIzLCAweDU4LCAweGM0LAorCTB4MzYsIDB4ZGEsIDB4NDAsIDB4MWMsIDB4OWIsIDB4NmIsIDB4YzcsIDB4MzUsIDB4YTMsIDB4YWYsIDB4NWUsIDB4ZWYsCisJMHg5NywgMHg3MywgMHhiZCwgMHhkMiwgMHhkZCwgMHgwNSwgMHg1OSwgMHg4YSwgMHgyYiwgMHhjOCwgMHhiOSwgMHgxMiwKKwkweGViLCAweDkzLCAweGZlLCAweGZiLCAweGQ2LCAweDE5LCAweDFkLCAweGIxLCAweGExLCAweGQ5LCAweGRjLCAweDU3LAorCTB4YjYsIDB4ZTUsIDB4OWEsIDB4ZDcsIDB4ZDMsIDB4MjAsIDB4N2QsIDB4YTgsIDB4NzQsIDB4N2YsIDB4MDEsIDB4NzIsCisJMHhjNywgMHhmNSwgMHgzNywgMHhjYSwgMHhhMCwgMHg5NiwgMHg5ZCwgMHhhNCwgMHgwOSwgMHhkMiwgMHhjMCwgMHhjZCwKKwkweGNhLCAweGQwLCAweGU2LCAweGZiLCAweDk1LCAweGExLCAweGNkLCAweGE3LCAweDQxLCAweDhiLCAweGI4LCAweGNhLAorCTB4OGIsIDB4OGUsIDB4YTEsIDB4Y2QsIDB4MmYsIDB4ZTMsIDB4OGUsIDB4YWIsIDB4ZmMsIDB4YTIsIDB4MTMsIDB4ZjEsCisJMHhmMSwgMHgwMCwgMHhmYywgMHhjYSwgMHhiZCwgMHgyNSwgMHhkNywgMHgxOSwgMHhhZCwgMHg4MiwgMHg3ZSwgMHhjYiwKKwkweDcxLCAweDk0LCAweGNmLCAweDEzLCAweGU3LCAweDk4LCAweDNmLCAweGM3LCAweGQ5LCAweDY5LCAweGZiLCAweDNmLAorCTB4MjcsIDB4NjMsIDB4ZTUsIDB4NTAsIDB4ZGIsIDB4NWIsIDB4ZjksIDB4ZDksIDB4N2IsIDB4NzEsIDB4NWYsIDB4YWYsCisJMHhlNSwgMHg4YywgMHhmMiwgMHhiMywgMHhjYSwgMHhjOCwgMHhhYiwgMHg3NywgMHhlMCwgMHhkZSwgMHg5OSwgMHgzYywKKwkweDIyLCAweDlkLCAweDVlLCAweDRjLCAweDllLCAweDQ1LCAweDVmLCAweGRmLCAweDc1LCAweGM2LCAweGFhLCAweDJmLAorCTB4ZTMsIDB4ZmEsIDB4M2UsIDB4YWUsIDB4NTcsIDB4NzEsIDB4YmQsIDB4ODIsIDB4N2UsIDB4NWYsIDB4NDAsIDB4ZjksCisJMHg3YSwgMHg5OSwgMHhmNywgMHg5YSwgMHg1MSwgMHg1ZiwgMHhkNCwgMHg2OCwgMHhmNSwgMHg3OSwgMHg2NywgMHhlNCwKKwkweGY0LCAweDRiLCAweGI4LCAweDVjLCAweDM1LCAweDU2LCAweDdkLCAweGNlLCAweGM5LCAweGNmLCAweDg2LCAweDliLAorCTB4MTYsIDB4N2MsIDB4Y2EsIDB4YjAsIDB4YWYsIDB4M2EsIDB4YTYsIDB4ZWYsIDB4MGMsIDB4ZTYsIDB4MDAsIDB4OWEsCisJMHgyZSwgMHhjZiwgMHg2MywgMHhlYywgMHhhNywgMHgzNSwgMHhjZiwgMHgwYywgMHg0MiwgMHgxZiwgMHhlNCwgMHg2MSwKKwkweGFmLCAweDhjLCAweDY4LCAweDk4LCAweGI2LCAweDAzLCAweDNlLCAweGY4LCAweGQzLCAweDdkLCAweGI4LCAweGNmLAorCTB4MzYsIDB4Y2EsIDB4NjIsIDB4ODIsIDB4ZjYsIDB4ZTUsIDB4OTMsIDB4YmEsIDB4N2UsIDB4YmUsIDB4N2MsIDB4YmQsCisJMHhjNiwgMHhlZCwgMHhmNCwgMHgyYSwgMHhmZSwgMHhhMSwgMHg0ZiwgMHgxOCwgMHhjOSwgMHgwMywgMHgyMywgMHg4ZCwKKwkweDY3LCAweDRhLCAweDk0LCAweDA1LCAweGQwLCAweDRkLCAweGE1LCAweDA5LCAweGRjLCAweDFiLCAweGI1LCAweDRjLAorCTB4MjgsIDB4NGEsIDB4MjQsIDB4MGYsIDB4ZDgsIDB4OGUsIDB4MzIsIDB4YTEsIDB4NWUsIDB4ZWUsIDB4NTAsIDB4ZDYsCisJMHg1MCwgMHhmNiwgMHg1MCwgMHg5NiwgMHg5OCwgMHhmNSwgMHgxOCwgMHg3ZCwgMHg5MCwgMHgzMiwgMHhmYywgMHgzYSwKKwkweGU4LCAweDRkLCAweGRhLCAweDI1LCAweGJlLCAweGYxLCAweDRkLCAweGE2LCAweDcyLCAweGNhLCAweGM4LCAweGQzLAorCTB4ZmQsIDB4N2EsIDB4MmQsIDB4YzYsIDB4NGEsIDB4MmEsIDB4MDEsIDB4YzgsIDB4NTEsIDB4ODYsIDB4ZWIsIDB4ZTQsCisJMHg0MSwgMHhkYywgMHhmMywgMHg2YSwgMHgwYywgMHg1NywgMHhmZSwgMHhlNCwgMHhmYiwgMHhmMCwgMHg5YiwgMHg2YiwKKwkweDMzLCAweDg2LCAweDdhLCAweGI4LCAweGNhLCAweGMzLCAweGI4LCAweGUzLCAweDJhLCAweGRmLCAweGE4LCAweDhjLAorCTB4MWMsIDB4ZTEsIDB4OWEsIDB4MjYsIDB4ZWQsIDB4OWEsIDB4M2UsIDB4MDksIDB4M2MsIDB4NzAsIDB4N2UsIDB4NGEsCisJMHhjNywgMHgzOCwgMHg5NCwgMHhiZiwgMHgwNywgMHg3OCwgMHhhZiwgMHg1YSwgMHg5ZiwgMHg3YSwgMHhhMywgMHgxOCwKKwkweDFlLCAweGM0LCAweGQ1LCAweDRkLCAweDdlLCAweDZlLCAweDMxLCAweGViLCAweGE1LCAweDY5LCAweDc3LCAweDVkLAorCTB4ODMsIDB4ZTEsIDB4YzUsIDB4MDQsIDB4Y2EsIDB4NjIsIDB4MjgsIDB4NmIsIDB4MzMsIDB4M2EsIDB4NzMsIDB4MDksCisJMHg4ZiwgMHg1OSwgMHg4YiwgMHg0NywgMHhmZSwgMHg1NiwgMHhmNiwgMHgzNywgMHhlOCwgMHgwOSwgMHhiNiwgMHgyZSwKKwkweGU0LCAweDM1LCAweGM2LCAweGM1LCAweDVjLCAweDRlLCAweGVlLCAweDU3LCAweGEzLCAweDY1LCAweGZhLCAweGM5LAorCTB4OTQsIDB4ZTEsIDB4OGMsIDB4NjUsIDB4NzAsIDB4N2UsIDB4ZWMsIDB4MTcsIDB4ZTUsIDB4MWEsIDB4MDcsIDB4ODEsCisJMHhkNCwgMHhlMiwgMHgwNCwgMHg0ZiwgMHg2MiwgMHhjZCwgMHhjZSwgMHhjOSwgMHhhMSwgMHhmMiwgMHg0NywgMHhiNCwKKwkweGRmLCAweGRlLCAweDc4LCAweGMyLCAweGFjLCAweDg3LCAweGE4LCAweGE4LCAweDFlLCAweGZhLCAweDRlLCAweGQwLAorCTB4ZTYsIDB4ZjksIDB4NzUsIDB4ZmQsIDB4ZGUsIDB4M2QsIDB4YzEsIDB4ZGYsIDB4NDksIDB4MWQsIDB4NGYsIDB4YWEsCisJMHhjOSwgMHg3YiwgMHg2MywgMHhlZiwgMHgxNCwgMHg5NywgMHhjOSwgMHgzYSwgMHhkYSwgMHgxZCwgMHg1OCwgMHhiMywKKwkweDRhLCAweDNkLCAweGRlLCAweDE5LCAweDQ3LCAweGEwLCAweGNjLCAweDIzLCAweDNmLCAweDFkLCAweDAxLCAweDRmLAorCTB4NjAsIDB4ZjIsIDB4OWEsIDB4ZjcsIDB4ZTksIDB4ODMsIDB4YWMsIDB4YzUsIDB4NGYsIDB4M2UsIDB4NmMsIDB4NjIsCisJMHg1NywgMHg0ZSwgMHhjMSwgMHhhNiwgMHhkYiwgMHhiYiwgMHhkNCwgMHgwNywgMHg2NCwgMHg2NSwgMHgyMiwgMHgyZSwKKwkweGE3LCAweDRiLCAweDJkLCAweDMyLCAweDViLCAweDUyLCAweDZkLCAweDMxLCAweDJiLCAweDNiLCAweDYzLCAweDkyLAorCTB4ZDQsIDB4ZmEsIDB4OTcsIDB4NzYsIDB4ZGYsIDB4YzAsIDB4NTQsIDB4Y2MsIDB4ZDIsIDB4ZGQsIDB4OGQsIDB4ZTgsCisJMHhmZiwgMHg5MywgMHhkMCwgMHhiMSwgMHgxNSwgMHhlOCwgMHhkOCwgMHg4ZCwgMHhkMCwgMHhjMSwgMHgyYiwgMHg2NSwKKwkweGM0LCAweGZlLCAweDg2LCAweGQ1LCAweDMyLCAweDgyLCAweDZkLCAweGQyLCAweGYwLCAweGQ2LCAweDhmLCAweGEwLAorCTB4NWQsIDB4NDQsIDB4N2YsIDB4NzEsIDB4NGQsIDB4NmIsIDB4NzksIDB4MjksIDB4MzgsIDB4N2IsIDB4YWIsIDB4MTMsCisJMHhjZSwgMHhiZSwgMHhlYSwgMHg0YSwgMHgxZCwgMHhkNCwgMHhlMywgMHhiOSwgMHg2MiwgMHg2MCwgMHgzZCwgMHg1ZCwKKwkweGEyLCAweGVkLCAweDlhLCAweDBlLCAweDcyLCAweGMwLCAweGM5LCAweDNlLCAweGQwLCAweGRkLCAweDUzLCAweDkzLAorCTB4ZjAsIDB4ZWYsIDB4MjksIDB4OTcsIDB4MDEsIDB4ZjMsIDB4MTksIDB4YzAsIDB4M2MsIDB4MzMsIDB4ZTksIDB4NDQsCisJMHhiNiwgMHg4MSwgMHgzMCwgMHg0MCwgMHgzMywgMHgzMywgMHhkNSwgMHgyYiwgMHgwYiwgMHg3MywgMHhhNCwgMHg0MywKKwkweGM4LCAweDgwLCAweDQ5LCAweGFjLCAweDY3LCAweGIwLCAweDBlLCAweDc2LCAweDAwLCAweGM3LCAweDg3LCAweGRjLAorCTB4OWUsIDB4ZGEsIDB4YTYsIDB4ZGYsIDB4MTksIDB4N2QsIDB4ZGUsIDB4MmUsIDB4MGIsIDB4OTUsIDB4M2IsIDB4MmQsCisJMHg2YywgMHhjNywgMHhlYSwgMHg2MCwgMHg1YiwgMHhiNywgMHgwNCwgMHhkYiwgMHgzZSwgMHhjMCwgMHhiNiwgMHg3ZiwKKwkweDRkLCAweGQ4LCAweGQ2LCAweGQyLCAweGM1LCAweDFkLCAweGIwLCAweDY5LCAweGM4LCAweDFmLCAweDExLCAweDVlLAorCTB4ZGIsIDB4MmMsIDB4M2QsIDB4OTQsIDB4YWMsIDB4MWQsIDB4NGMsIDB4OWIsIDB4ZTgsIDB4ODcsIDB4ODAsIDB4ODcsCisJMHgzNCwgMHg4NiwgMHhkZiwgMHhiMywgMHg4ZiwgMHg1MiwgMHg5NiwgMHhhMSwgMHg5YywgMHhjZiwgMHgwZiwgMHhhMSwKKwkweDBlLCAweDllLCAweDY3LCAweDEzLCAweDU2LCAweDBlLCAweDdlLCAweGMyLCAweGMyLCAweDQyLCAweDNiLCAweDIxLAorCTB4MGIsIDB4NWIsIDB4NzksIDB4ZDAsIDB4YzksIDB4Y2QsIDB4MTIsIDB4ODYsIDB4NTMsIDB4ODAsIDB4MTcsIDB4ZWYsCisJMHhhYSwgMHhmNSwgMHg3ZCwgMHhmMiwgMHhjZSwgMHg3ZSwgMHhhZiwgMHhiMiwgMHhmZCwgMHhiMCwgMHhlZiwgMHg2OCwKKwkweDJlLCAweGViLCAweGFkLCAweDllLCAweDhmLCAweGU4LCAweDJiLCAweGIyLCAweGJiLCAweDI3LCAweDljLCAweGVjLAorCTB4YWEsIDB4NzksIDB4ZDUsIDB4ZDMsIDB4MWMsIDB4ZTUsIDB4YWQsIDB4MmIsIDB4NDMsIDB4YTAsIDB4OTMsIDB4YTEsCisJMHg2NSwgMHhiNCwgMHhhNiwgMHhkZCwgMHgxMywgMHg0YiwgMHhjNywgMHhlYiwgMHhlYywgMHhmYywgMHgwZSwgMHgxYiwKKwkweGJlLCAweDA5LCAweGUyLCAweGQwLCAweDg3LCAweDk0LCAweDM3LCAweGZmLCAweGM1LCAweGY4LCAweGVjLCAweGYyLAorCTB4ZTUsIDB4MDYsIDB4YzYsIDB4NjksIDB4Y2QsIDB4MzMsIDB4NjksIDB4OTMsIDB4YmYsIDB4MjksIDB4OTMsIDB4NmEsCisJMHhiNCwgMHg2OCwgMHg3YywgMHg5YSwgMHg3NiwgMHg4YywgMHg1NSwgMHg2ZiwgMHhjNywgMHhiYiwgMHgzMiwgMHg2YywKKwkweGQ2LCAweGZjLCAweDE4LCAweGQ3LCAweDljLCAweDNlLCAweDRhLCAweGU3LCAweDAzLCAweGMzLCAweDk2LCAweGJmLAorCTB4ZDIsIDB4OTMsIDB4MDUsIDB4YjksIDB4ZDUsIDB4Y2UsIDB4ZmQsIDB4ZDIsIDB4MWEsIDB4NmIsIDB4YjcsIDB4NzEsCisJMHg2OSwgMHhlZCwgMHg4NiwgMHhhYiwgMHgyYiwgMHhlNywgMHgyOCwgMHhkMiwgMHhmMSwgMHg4MCwgMHhhYiwgMHg3ZCwKKwkweDVlLCAweGZhLCAweGYwLCAweDhkLCAweDNlLCAweGU1LCAweDI3LCAweDZkLCAweDI1LCAweDk0LCAweGNmLCAweGY0LAorCTB4NzgsIDB4YWQsIDB4ZjAsIDB4MGQsIDB4YmUsIDB4YjgsIDB4Y2EsIDB4ZWUsIDB4NGEsIDB4NTksIDB4YjksIDB4NDksCisJMHhmZiwgMHgzOCwgMHgxYSwgMHhhMywgMHg2MCwgMHhlNSwgMHg2NCwgMHgwMSwgMHhmZCwgMHg0ZiwgMHgzOCwgMHg0MywKKwkweGQ1LCAweGI1LCAweGU0LCAweDY1LCAweDI0LCAweDI3LCAweDM5LCAweDlmLCAweDdiLCAweGU1LCAweDhlLCAweDA3LAorCTB4YzksIDB4YTMsIDB4MjUsIDB4NmQsIDB4NWYsIDB4NWYsIDB4YjMsIDB4ZTcsIDB4MzAsIDB4ZjAsIDB4NDcsIDB4ZjgsCisJMHgxNywgMHgzNiwgMHhjMywgMHg2NCwgMHg4MCwgMHhjZSwgMHhjZCwgMHhjYSwgMHhhOCwgMHg1ZCwgMHhiNywgMHhkMSwKKwkweGE1LCAweGY1LCAweGU3LCAweDM1LCAweDBjLCAweGRkLCAweGM4LCAweDU4LCAweGFlLCAweGIyLCAweDMwLCAweDZiLAorCTB4M2IsIDB4MTYsIDB4NzYsIDB4ZGQsIDB4NGEsIDB4NWIsIDB4OTYsIDB4NzMsIDB4YTAsIDB4M2QsIDB4ZGIsIDB4NjgsCisJMHg2YywgMHhjMSwgMHgzMiwgMHhlZCwgMHg0ZiwgMHhjYSwgMHgyZSwgMHhkYSwgMHg5ZiwgMHg1NywgMHgzNywgMHg0YSwKKwkweDMzLCAweGU3LCAweDkzLCAweGI1LCAweDY1LCAweGI0LCAweDUzLCAweDU3LCAweGNlLCAweDZmLCAweGE1LCAweDVmLAorCTB4NDksIDB4MzgsIDB4MDksIDB4YjcsIDB4YTEsIDB4YWQsIDB4OTQsIDB4MjIsIDB4NmMsIDB4YTEsIDB4MGMsIDB4MDcsCisJMHhkNywgMHhlOSwgMHgzNSwgMHg1MCwgMHhiNCwgMHg1ZCwgMHhmNywgMHgzNCwgMHgzNCwgMHg5YSwgMHgzOCwgMHhmNiwKKwkweDVlLCAweGY0LCAweGNmLCAweDMxLCAweGM5LCAweDdmLCAweGJjLCAweGQzLCAweGNlLCAweDVmLCAweDRiLCAweDk2LAorCTB4ZDUsIDB4ZWIsIDB4OWUsIDB4MmIsIDB4OTcsIDB4ZjAsIDB4MzcsIDB4YjQsIDB4NmMsIDB4OGQsIDB4MjIsIDB4ZmMsCisJMHg0NSwgMHg3NCwgMHg1MSwgMHg4ZiwgMHg0MywgMHhkMiwgMHgwNCwgMHg2OSwgMHgyMSwgMHhhMiwgMHhjNSwgMHg5ZCwKKwkweDU2LCAweGRmLCAweDQ0LCAweGI0LCAweGI3LCAweDE1LCAweGI0LCAweDc3LCAweDFmLCAweGYwLCAweDQ0LCAweDE5LAorCTB4Y2UsIDB4NzgsIDB4ZGUsIDB4MTYsIDB4M2MsIDB4MWYsIDB4YzcsIDB4NzMsIDB4YzQsIDB4MjcsIDB4OTEsIDB4MGMsCisJMHhhNywgMHg0ZCwgMHhiNCwgMHg1MiwgMHg4ZSwgMHg1MywgMHg4NiwgMHhjNywgMHg2MSwgMHhmNywgMHg1MCwgMHhkNiwKKwkweDZmLCAweGI3LCAweGZjLCAweDk0LCAweGIzLCAweGJjLCAweDQ0LCAweDVkLCAweGYwLCAweGZiLCAweGU4LCAweGU3LAorCTB4ODYsIDB4NDYsIDB4NjMsIDB4YTcsIDB4MTcsIDB4MWIsIDB4MjksIDB4NWYsIDB4MzcsIDB4Y2IsIDB4OTEsIDB4YmEsCisJMHhiMiwgMHhjYiwgMHhjOSwgMHhlZiwgMHhmYSwgMHgzOSwgMHg2ZiwgMHhmZiwgMHg3ZiwgMHgzMCwgMHhlNywgMHhlNCwKKwkweDhhLCAweDM5LCAweDdiLCAweDc2LCAweGNlLCAweDU1LCAweGJjLCAweDZmLCAweGM1LCAweGZiLCAweDE2LCAweGVhLAorCTB4ODIsIDB4NTQsIDB4NGQsIDB4ZGUsIDB4NTgsIDB4NWMsIDB4NjgsIDB4N2QsIDB4NTYsIDB4MmYsIDB4MjcsIDB4MjIsCisJMHgxOSwgMHhjMSwgMHg3OSwgMHgxZCwgMHhiNSwgMHg3MywgMHhmOCwgMHg3YywgMHhkZCwgMHhiYywgMHg4ZSwgMHhiZSwKKwkweDg5LCAweDc5LCAweGI1LCAweDJmLCAweDliLCAweGQ3LCAweGRlLCAweGNiLCAweGNlLCAweDZiLCAweDJkLCAweDFlLAorCTB4MjcsIDB4MmYsIDB4NDcsIDB4ZjMsIDB4OGIsIDB4Y2IsIDB4ODEsIDB4MTIsIDB4ZTcsIDB4MzgsIDB4ODQsIDB4MzksCisJMHgxMiwgMHg4NiwgMHg2OCwgMHg4ZSwgMHgxOSwgMHgzYiwgMHg0NywgMHg1MSwgMHgxZCwgMHg3YiwgMHg3ZSwgMHgwYSwKKwkweGJmLCAweGViLCAweGU3LCAweDQ3LCAweGRkLCAweGZmLCAweGY3LCAweGEwLCAweGU5LCAweDI2LCAweGY4LCAweGM0LAorCTB4NGQsIDB4NTYsIDB4ZmUsIDB4M2YsIDB4MjksIDB4YjcsIDB4OTYsIDB4YjksIDB4ZDYsIDB4ZTksIDB4YWMsIDB4YzgsCisJMHg3ZSwgMHg3NSwgMHhhOCwgMHhmYywgMHg3MiwgMHgyMywgMHhmNywgMHgxMSwgMHhmNiwgMHgwNiwgMHg1NiwgMHg4ZiwKKwkweDQxLCAweDVmLCAweGVjLCAweDgzLCAweGNkLCAweDM3LCAweDU0LCAweDUyLCAweDdkLCAweDMxLCAweDA5LCAweGMzLAorCTB4ZGIsIDB4ODIsIDB4NjYsIDB4OGMsIDB4YmQsIDB4NDksIDB4ZmIsIDB4YWEsIDB4YWIsIDB4NjMsIDB4ZjgsIDB4Y2YsCisJMHgzNiwgMHg4YSwgMHg0ZiwgMHg3YiwgMHg4MywgMHhmYSwgMHgxYywgMHhmYSwgMHhlZSwgMHgyNCwgMHg2ZCwgMHhiMCwKKwkweDFjLCAweGVjLCAweGU0LCAweDZjLCAweDMyLCAweGE2LCAweDZkLCAweDMxLCAweGVhLCAweGM0LCAweDc0LCAweDMyLAorCTB4MmIsIDB4MTUsIDB4YzksIDB4OWYsIDB4Y2MsIDB4MjYsIDB4ZTEsIDB4ZDgsIDB4NjIsIDB4MGMsIDB4ZDgsIDB4NmEsCisJMHhiMCwgMHgyMSwgMHg2ZiwgMHg4NSwgMHhhYywgMHhiOSwgMHhiNSwgMHg3YSwgMHg1MCwgMHhkZCwgMHgwMiwgMHg3YiwKKwkweGU3LCAweDk2LCAweGQzLCAweGVmLCAweDUzLCAweGI3LCAweGMxLCAweGQ2LCAweGI5LCAweGVkLCAweGY0LCAweDhkLAorCTB4ZWEsIDB4MTAsIDB4NmMsIDB4OWIsIDB4NDMsIDB4YjAsIDB4NzMsIDB4MGUsIDB4NTUsIDB4NjksIDB4N2IsIDB4ZGUsCisJMHgwYywgMHhiYSwgMHg2YiwgMHg4NywgMHgxZSwgMHhlMiwgMHg1YywgMHhiOCwgMHgyNiwgMHhiNCwgMHg3MSwgMHgzOCwKKwkweDNmLCAweGUyLCAweGZlLCAweDBiLCAweDVjLCAweDgzLCAweDIwLCAweGE1LCAweDc2LCAweDM0LCAweDcxLCAweDVkLAorCTB4NWEsIDB4OTcsIDB4OTUsIDB4YmQsIDB4OTYsIDB4YWMsIDB4OGEsIDB4ZjQsIDB4ZDMsIDB4MDYsIDB4MWIsIDB4NGYsCisJMHgzMiwgMHg3ZSwgMHhlNSwgMHhlNSwgMHg2OSwgMHg4YiwgMHgzNCwgMHhlMiwgMHgwMSwgMHhjZiwgMHhjNCwgMHgxZiwKKwkweDY5LCAweGFiLCAweDdlLCAweGZlLCAweDU3LCAweDM2LCAweDg5LCAweDlmLCAweGMzLCAweGY4LCAweGY3LCAweDQyLAorCTB4YmUsIDB4ZDYsIDB4ZDMsIDB4MTQsIDB4ZWYsIDB4NWUsIDB4MWQsIDB4N2YsIDB4NTAsIDB4MDYsIDB4NDcsIDB4ZjQsCisJMHhiMCwgMHhmMywgMHgzNSwgMHhlNCwgMHhlZiwgMHg2NSwgMHhlOSwgMHhlOSwgMHg5ZSwgMHg1OCwgMHgyNiwgMHgwYywKKwkweDQ3LCAweGZiLCAweDY0LCAweDEzLCAweGUzLCAweDAxLCAweGI5LCAweDZhLCAweDJkLCAweDI2LCAweGEwLCAweGZjLAorCTB4ZmEsIDB4OTgsIDB4MDAsIDB4ZmQsIDB4YWMsIDB4NGYsIDB4MDMsIDB4YmYsIDB4ZDMsIDB4YjgsIDB4NDQsIDB4NDYsCisJMHgxOCwgMHg3NywgMHhhOCwgMHg0NiwgMHg3NiwgMHhmOSwgMHg1NywgMHhhYywgMHg1ZCwgMHgxZSwgMHhjMSwgMHg5MSwKKwkweDAyLCAweDFjLCAweDQ2LCAweDNlLCAweGFmLCAweGQ2LCAweDczLCAweGNiLCAweGY1LCAweDc3LCAweDYxLCAweGM5LAorCTB4YTYsIDB4NGQsIDB4YzksIDB4ODEsIDB4YjIsIDB4YjYsIDB4MTMsIDB4MjEsIDB4ODMsIDB4ODksIDB4OWIsIDB4N2EsCisJMHgxOSwgMHg5YywgMHhiNCwgMHg3NiwgMHgxNCwgMHhlYSwgMHg2OCwgMHhmOSwgMHhiOSwgMHg1YSwgMHg3NiwgMHg1MiwKKwkweGVlLCAweDMxLCAweDZlLCAweGZmLCAweDQwLCAweDQwLCAweDVhLCAweDdmLCAweDk3LCAweDY0LCAweDk3LCAweGUyLAorCTB4ZjYsIDB4MDIsIDB4N2EsIDB4OTMsIDB4MjAsIDB4OTYsIDB4ZDEsIDB4N2IsIDB4N2EsIDB4ZGUsIDB4OGMsIDB4ZWMsCisJMHg5MywgMHg4MSwgMHgwNCwgMHg2MywgMHhhMCwgMHg4YywgMHhmMywgMHhmOSwgMHg4NSwgMHgxOSwgMHhlOSwgMHg2NiwKKwkweDhjLCAweDAzLCAweDE2LCAweDdjLCAweGEzLCAweDhjLCAweDc4LCAweGExLCAweGVjLCAweDBkLCAweDFjLCAweDFkLAorCTB4NTMsIDB4MzYsIDB4YmEsIDB4ZjYsIDB4NjIsIDB4OTMsIDB4YjEsIDB4NWQsIDB4MWQsIDB4MWQsIDB4MTcsIDB4NWUsCisJMHgwMCwgMHhmNSwgMHgyZCwgMHg2OCwgMHhmYiwgMHg1NiwgMHg2OSwgMHhmZCwgMHgzYiwgMHhhZiwgMHhlYiwgMHhmYywKKwkweDQxLCAweDUzLCAweDE0LCAweGRmLCAweDVjLCAweGYwLCAweDYyLCAweGI2LCAweDVlLCAweDdkLCAweGY5LCAweGQ3LAorCTB4NmMsIDB4ZGMsIDB4YmEsIDB4MWIsIDB4YjIsIDB4M2YsIDB4MmEsIDB4ZmIsIDB4ZGUsIDB4MWEsIDB4NjUsIDB4YjEsCisJMHhmOCwgMHhlYSwgMHhiMiwgMHhjZCwgMHg2YiwgMHg5NCwgMHg5OSwgMHg3OCwgMHhlMSwgMHg1MCwgMHg2OSwgMHgyNywKKwkweGRlLCAweDRkLCAweDY4LCAweGRmLCAweDVkLCAweGY0LCAweDllLCAweDViLCAweGI3LCAweDE0LCAweDk2LCAweGVhLAorCTB4NmMsIDB4YjAsIDB4N2UsIDB4MTksIDB4NjMsIDB4YzcsIDB4MjYsIDB4NjYsIDB4OWMsIDB4ZDcsIDB4MzEsIDB4ZTMsCisJMHgxZSwgMHg2ZiwgMHg4ZiwgMHhkMiwgMHg3YiwgMHgyYywgMHhiNywgMHgzMywgMHhmZSwgMHg3OCwgMHg0OCwgMHhlMywKKwkweDg1LCAweDM4LCAweGY5LCAweDAyLCAweDYzLCAweGMzLCAweDA1LCAweGVlLCAweDBmLCAweGE3LCAweGQ0LCAweGU1LAorCTB4NjgsIDB4YmIsIDB4NjYsIDB4OWIsIDB4OTgsIDB4NzUsIDB4YTMsIDB4NWQsIDB4ZGMsIDB4MjIsIDB4ODMsIDB4YjAsCisJMHgxNSwgMHg4NiwgMHg0YSwgMHhhZCwgMHhiMiwgMHg3NywgMHhlYSwgMHhhMywgMHhlYiwgMHhhOCwgMHhiNywgMHhmNiwKKwkweDRkLCAweDE5LCAweDdmLCAweGYwLCAweDEwLCAweGY4LCAweDJhLCAweDJiLCAweDg0LCAweDMxLCAweDFkLCAweDg4LAorCTB4ZDAsIDB4MjYsIDB4NWUsIDB4NmQsIDB4MGIsIDB4YmYsIDB4NzYsIDB4N2YsIDB4ZjcsIDB4NWYsIDB4YTYsIDB4M2YsCisJMHgwNywgMHhiNiwgMHhjMywgMHgxYiwgMHhlZCwgMHhhZiwgMHg1OSwgMHgwNiwgMHhhNywgMHgyMiwgMHg1YywgMHhhOSwKKwkweDFmLCAweGIxLCAweDVkLCAweGVjLCAweDMyLCAweGVkLCAweGI0LCAweDVkLCAweDIyLCAweDRmLCAweDJkLCAweGM5LAorCTB4ZTIsIDB4OWQsIDB4YjAsIDB4OTksIDB4MjQsIDB4Y2MsIDB4ZjUsIDB4NDksIDB4N2IsIDB4NGMsIDB4NzQsIDB4OGMsCisJMHgyNywgMHgzMCwgMHhiMiwgMHhiOSwgMHg4YiwgMHg3YiwgMHgzZSwgMHhhMCwgMHg3ZiwgMHg2MywgMHhhYiwgMHg5OCwKKwkweDc4LCAweDZhLCAweDY0LCAweGE3LCAweGFjLCAweDQ1LCAweGJiLCAweGQ3LCAweDViLCAweGRhLCAweGU1LCAweGJlLAorCTB4ZWUsIDB4M2UsIDB4Y2EsIDB4NWMsIDB4YWMsIDB4ODksIDB4YTEsIDB4ZTMsIDB4YmQsIDB4MjUsIDB4NDksIDB4NDUsCisJMHg3NCwgMHhiYywgMHgyMCwgMHhkOSwgMHg2NSwgMHg3NCwgMHhiYywgMHgyMCwgMHg4MywgMHg5YSwgMHg4ZSwgMHgxYiwKKwkweDk3LCAweGQxLCAweDcxLCAweGJiLCAweGE1LCAweGUzLCAweDhmLCAweGM2LCAweDBkLCAweDVkLCAweDI4LCAweGFkLAorCTB4YTcsIDB4NDgsIDB4YTcsIDB4ODYsIDB4OGUsIDB4MWQsIDB4NGQsIDB4YzcsIDB4MGIsIDB4YjgsIDB4YmIsIDB4ZmUsCisJMHhjNywgMHg2YywgMHg5ZCwgMHg5OCwgMHgyZCwgMHhlMywgMHhlZiwgMHhhOCwgMHg4YywgMHg3MiwgMHg3MSwgMHgyYSwKKwkweDZlLCAweGY0LCAweGQyLCAweDIwLCAweGU4LCAweDI4LCAweDJhLCAweGZmLCAweDRkLCAweDRiLCAweDlmLCAweGY1LAorCTB4NjUsIDB4MjYsIDB4M2UsIDB4MzIsIDB4NTQsIDB4M2EsIDB4YjIsIDB4ODIsIDB4M2UsIDB4MDcsIDB4NDEsIDB4OWYsCisJMHg1MSwgMHg5ZCwgMHhkNywgMHhhMiwgMHhjZiwgMHg2NiwgMHhiYiwgMHg5ZiwgMHg5MSwgMHhkNCwgMHg3YiwgMHhmZiwKKwkweGQ5LCAweDg0LCAweGExLCAweGQ1LCAweDViLCAweGY0LCAweGRjLCAweDM5LCAweGVmLCAweDBiLCAweDZmLCAweDgwLAorCTB4NTYsIDB4Y2QsIDB4ZGEsIDB4NWMsIDB4YWMsIDB4ZjksIDB4ZGIsIDB4OGMsIDB4NDUsIDB4YTUsIDB4NGMsIDB4NmMsCisJMHg5YiwgMHg3MSwgMHhkMiwgMHhjYiwgMHhkOSwgMHg4ZSwgMHgyZiwgMHhkNSwgMHhmOSwgMHgxNSwgMHgxYiwgMHhhNCwKKwkweGMwLCAweGJjLCAweDg3LCAweGVhLCAweDQ2LCAweGM2LCAweGEyLCAweDQ3LCAweGRjLCAweDRjLCAweDlmLCAweDY0LAorCTB4MmIsIDB4ZWQsIDB4YTksIDB4NjIsIDB4ODksIDB4N2UsIDB4ZDEsIDB4YWIsIDB4MzYsIDB4MzcsIDB4MDIsIDB4Y2YsCisJMHg5NSwgMHgxNiwgMHg3OSwgMHhiNCwgMHg0NCwgMHhkYSwgMHgzYSwgMHg2MiwgMHg3MCwgMHhiMSwgMHgyNiwgMHhhZCwKKwkweDczLCAweGFkLCAweGQ5LCAweDRmLCAweGJkLCAweDBlLCAweGU4LCAweDgzLCAweGVlLCAweGExLCAweGNkLCAweGFlLAorCTB4ZTUsIDB4M2UsIDB4ZGUsIDB4YjUsIDB4YTcsIDB4NzIsIDB4YTUsIDB4YTgsIDB4NWYsIDB4ZWUsIDB4M2YsIDB4NzAsCisJMHg0ZiwgMHhiOCwgMHgzZCwgMHhkNSwgMHg1MSwgMHhmMSwgMHg2ZCwgMHg5YywgMHg3OSwgMHgyMywgMHg5ZSwgMHhmYiwKKwkweGE0LCAweGEzLCAweGEyLCAweGU0LCAweDAzLCAweDUzLCAweDJkLCAweDcyLCAweDdiLCAweGM5LCAweDk1LCAweDBmLAorCTB4YTEsIDB4ZmQsIDB4MDcsIDB4NGIsIDB4MWUsIDB4ZmMsIDB4ZmIsIDB4ZmYsIDB4MWQsIDB4YTcsIDB4OWQsIDB4NzksCisJMHhhOCwgMHhjNCwgMHg3ZCwgMHg1MCwgMHg0NywgMHhkYiwgMHgyYSwgMHhjYiwgMHhmNywgMHg4NiwgMHg2MywgMHhkMiwKKwkweGQxLCAweDU1LCAweDg0LCAweGU3LCAweDIzLCAweGVlLCAweDdlLCAweGMwLCAweGQxLCAweDk0LCAweGM5LCAweGM4LAorCTB4NzcsIDB4ZmEsIDB4MzYsIDB4YTEsIDB4MmMsIDB4Y2EsIDB4ZjEsIDB4MTgsIDB4NzYsIDB4NGMsIDB4ZmMsIDB4YjgsCisJMHg1ZiwgMHhkZSwgMHg1OSwgMHhjZCwgMHhjOCwgMHgwZCwgMHg1NSwgMHhiMywgMHg3NywgMHg1YiwgMHhkYiwgMHg5YiwKKwkweDRkLCAweDdiLCAweGYzLCAweGQwLCAweDY3LCAweDU5LCAweDJmLCAweDBjLCAweDJmLCAweGZhLCAweGEwLCAweGEyLAorCTB4ZTMsIDB4YWUsIDB4YzQsIDB4YmIsIDB4ZDIsIDB4YzksIDB4NzksIDB4MzEsIDB4Y2YsIDB4OTcsIDB4MmEsIDB4ZmYsCisJMHgxYywgMHg4ZSwgMHgyNCwgMHg1YywgMHhmOSwgMHg4ZSwgMHhjZiwgMHgzOSwgMHhmNiwgMHhjYiwgMHhmNSwgMHg5NSwKKwkweGZhLCAweGIxLCAweGI5LCAweDNmLCAweDFiLCAweDViLCAweGM3LCAweGZkLCAweDkwLCAweDVjLCAweGY1LCAweDlmLAorCTB4ZTMsIDB4OGMsIDB4ZGIsIDB4ZDMsIDB4ODcsIDB4ZTksIDB4ZjgsIDB4MzEsIDB4ZWUsIDB4ODcsIDB4YmIsIDB4YjgsCisJMHg4MywgMHgwZSwgMHgxMywgMHhiMCwgMHgyMSwgMHhhZSwgMHgwMSwgMHg4YywgMHhkNywgMHgzMCwgMHg5NiwgMHhjNiwKKwkweDE4LCAweDFhLCAweDlmLCAweGJmLCAweDhjLCAweDcxLCAweGQ5LCAweGY2LCAweDkzLCAweGQ2LCAweGZlLCAweDNlLAorCTB4YjIsIDB4YzQsIDB4OGIsIDB4NmIsIDB4ZWIsIDB4YjEsIDB4OGQsIDB4MjMsIDB4ZjEsIDB4OGMsIDB4MzgsIDB4ZjEsCisJMHg5ZiwgMHg0OCwgMHhjYSwgMHgzYSwgMHhiZiwgMHg3ZSwgMHg3YywgMHhlZSwgMHg0NywgMHhjMywgMHhhMiwgMHhlYywKKwkweDEzLCAweDc3LCAweGRmLCAweGVlLCAweDdlLCAweDE5LCAweGM0LCAweGZjLCAweDg2LCAweDU2LCAweGNkLCAweGVmLAorCTB4MWUsIDB4NjEsIDB4YmMsIDB4ZjYsIDB4NTIsIDB4ODksIDB4NzMsIDB4YTgsIDB4Y2QsIDB4NGIsIDB4ZmQsIDB4YjYsCisJMHg5OSwgMHg1NywgMHhiYywgMHg2YiwgMHhlNSwgMHg3YywgMHg3NCwgMHg3YiwgMHg3NSwgMHgwYSwgMHhiMCwgMHg3YywKKwkweDQ5LCAweGU3LCAweDQyLCAweDg0LCAweGUxLCAweDViLCAweGJiLCAweDJlLCAweDg1LCAweGE5LCAweDJiLCAweGQyLAorCTB4ZGQsIDB4ZjMsIDB4YjUsIDB4N2QsIDB4YTQsIDB4OTEsIDB4NTgsIDB4MjYsIDB4YWIsIDB4ZjUsIDB4MjMsIDB4OWUsCisJMHg1MywgMHhmOSwgMHhjYSwgMHg3ZSwgMHhhYywgMHhhMywgMHhiOCwgMHhmOSwgMHg1ZSwgMHg1NywgMHhmMywgMHg1ZCwKKwkweGRlLCAweGRmLCAweDZmLCAweGY3LCAweGNhLCAweDIyLCAweDlmLCAweDJjLCAweDBjLCAweDk1LCAweGJmLCAweDUyLAorCTB4MGUsIDB4NTEsIDB4ZmYsIDB4NjEsIDB4ZWUsIDB4ZjIsIDB4OTgsIDB4ZGQsIDB4M2YsIDB4ZTgsIDB4NjYsIDB4N2MsCisJMHgwYywgMHhiNCwgMHgxOCwgMHgwNywgMHhkZCwgMHhmOSwgMHhmOCwgMHhkZCwgMHg4MiwgMHhmYiwgMHgxZSwgMHhkOCwKKwkweDNmLCAweDAxLCAweGVjLCAweDIzLCAweDQ5LCAweDI4LCAweDIzLCAweDZiLCAweGMwLCAweDFiLCAweDVkLCAweDA1LAorCTB4YTUsIDB4YzgsIDB4ZWIsIDB4NWUsIDB4NmEsIDB4YmMsIDB4OTIsIDB4NDgsIDB4NGQsIDB4NTYsIDB4OWUsIDB4NjAsCisJMHg3YiwgMHhkNCwgMHg1ZCwgMHgyYiwgMHgzNiwgMHg2OCwgMHhmMiwgMHg2YywgMHhiZSwgMHg1OCwgMHhlNSwgMHgxOCwKKwkweGE0LCAweGZiLCAweDM3LCAweDMyLCAweDg2LCAweDZiLCAweGZiLCAweDY2LCAweDlmLCAweDExLCAweDVlLCAweDVjLAorCTB4YmEsIDB4ZjgsIDB4ZjgsIDB4YjcsIDB4ZGYsIDB4ZmEsIDB4M2EsIDB4OWMsIDB4ZGYsIDB4MTMsIDB4MTYsIDB4ZWUsCisJMHg5NSwgMHhlMywgMHgzZSwgMHhhZiwgMHhlZCwgMHhhMSwgMHhjNywgMHhhYiwgMHhiNCwgMHg0MSwgMHhiOSwgMHg4ZiwKKwkweDk0LCAweDdlLCAweDY0LCAweDVhLCAweDA4LCAweDQ3LCAweDE4LCAweDNlLCAweDFiLCAweDE4LCAweDViLCAweGUwLAorCTB4OGIsIDB4NTUsIDB4ZWUsIDB4OTksIDB4ODQsIDB4ZTEsIDB4ZGYsIDB4ZDIsIDB4Y2UsIDB4M2UsIDB4NTgsIDB4YzYsCisJMHg3OCwgMHgxMSwgMHgwZSwgMHg3NiwgMHgxNiwgMHg1YywgMHhjOCwgMHhkOSwgMHg4OSwgMHgzZSwgMHhlMiwgMHg1NywKKwkweGUwLCAweGYxLCAweDc2LCAweDc5LCAweDA3LCAweDI0LCAweDllLCAweGZhLCAweDc4LCAweGE1LCAweDI1LCAweDc1LAorCTB4NjcsIDB4YzUsIDB4MDMsIDB4OWUsIDB4MzksIDB4ZWYsIDB4NDQsIDB4NmEsIDB4Y2MsIDB4Y2UsIDB4MzksIDB4NWYsCisJMHgyMSwgMHg3ZSwgMHg1ZiwgMHg2YiwgMHhiZiwgMHhmMywgMHhmOSwgMHg2NSwgMHhmZSwgMHgxNywgMHg2MSwgMHhhYSwKKwkweGMxLCAweDQyLCAweGQ4LCAweDUyLCAweDE2LCAweDM3LCAweDYxLCAweGY4LCAweGY3LCAweDAxLCAweGM3LCAweGRjLAorCTB4MGYsIDB4MWYsIDB4NDYsIDB4MjYsIDB4MzAsIDB4NmUsIDB4NjEsIDB4OGIsIDB4MjIsIDB4MWUsIDB4ZTIsIDB4YTksCisJMHgzYiwgMHgzMCwgMHhmNiwgMHhjNywgMHgzMSwgMHhmNiwgMHhlZCwgMHgxNSwgMHg4ZSwgMHgwNywgMHhkOSwgMHg4MywKKwkweGI5LCAweDRmLCAweDU0LCAweDIzLCAweDc4LCAweGQ3LCAweDFhLCAweDNiLCAweDVhLCAweGYzLCAweDZlLCAweDZiLAorCTB4MzMsIDB4NDYsIDB4Y2YsIDB4MWEsIDB4OTEsIDB4NmQsIDB4MGEsIDB4YmUsIDB4NjMsIDB4YWUsIDB4YmEsIDB4YjAsCisJMHhkOSwgMHg5NSwgMHg5ZiwgMHg4MSwgMHgxYywgMHgwZiwgMHhlNSwgMHg1MSwgMHhjOCwgMHhjNywgMHgwNSwgMHg0ZCwKKwkweDM3LCAweGI5LCAweGVkLCAweGZjLCAweDNmLCAweDI2LCAweDRmLCAweGFkLCAweDYzLCAweGJjLCAweDdhLCAweGMwLAorCTB4YTcsIDB4MmQsIDB4YmMsIDB4MTgsIDB4MmUsIDB4ZjgsIDB4OTQsIDB4ZjcsIDB4MWIsIDB4NjQsIDB4ZGEsIDB4MmIsCisJMHg3NCwgMHg0MywgMHhmNywgMHhhMCwgMHg2YywgMHgyMywgMHhmZCwgMHhmNywgMHg1NCwgMHgyZSwgMHg5NiwgMHg0ZSwKKwkweDhkLCAweDBiLCAweDczLCAweGJlLCAweDk4LCAweDEzLCAweGMxLCAweGJjLCAweDI2LCAweGNhLCAweDA2LCAweDE3LAorCTB4MzIsIDB4OTQsIDB4NmIsIDB4NjgsIDB4YzYsIDB4MWIsIDB4YWYsIDB4ZDQsIDB4ZWEsIDB4MWUsIDB4MTYsIDB4ZWUsCisJMHg0ZCwgMHhhNiwgMHg5MywgMHg4NywgMHhiNCwgMHhiZCwgMHgyMywgMHgzMiwgMHg1YSwgMHg2MiwgMHhkZCwgMHhkZCwKKwkweGIwLCAweDc2LCAweGZjLCAweGJhLCAweGZhLCAweDNhLCAweDU3LCAweDBkLCAweDdjLCAweDFlLCAweGM1LCAweGM1LAorCTB4ZTIsIDB4Y2MsIDB4MjksIDB4NzksIDB4MzksIDB4ZDYsIDB4MjcsIDB4MmYsIDB4ZDMsIDB4OGUsIDB4MWQsIDB4MDAsCisJMHg2ZCwgMHg3YiwgMHhiZSwgMHhjZSwgMHgyYiwgMHhkMSwgMHhlNSwgMHhiOSwgMHg0MCwgMHgxNiwgMHg3MywgMHhmZCwKKwkweDNkLCAweGI0LCAweGRiLCAweDBiLCAweDRhLCAweGYzLCAweDg0LCAweDI4LCAweGI0LCAweDhkLCAweGU3LCAweDJiLAorCTB4MzIsIDB4OTgsIDB4MmYsIDB4ZDksIDB4ZDgsIDB4ZDEsIDB4MzAsIDB4ZTcsIDB4YmMsIDB4YTEsIDB4NmUsIDB4ZWUsCisJMHgxYiwgMHhjNSwgMHgwNSwgMHg0YywgMHg4MywgMHhiMSwgMHg5NCwgMHhkMywgMHhlMCwgMHg3ZiwgMHhhYSwgMHhjNSwKKwkweGQ4LCAweDEwLCAweGQwLCAweDIzLCAweGFkLCAweGY3LCAweGI3LCAweDcxLCAweDZmLCAweDU2LCAweGMxLCAweDI3LAorCTB4NTcsIDB4NmQsIDB4MWYsIDB4YmUsIDB4NTYsIDB4NjUsIDB4ZmUsIDB4MzIsIDB4MDksIDB4YmQsIDB4NmEsIDB4NjUsCisJMHg2NSwgMHg3YywgMHhiMCwgMHg2MywgMHg4OSwgMHhiZSwgMHgzOSwgMHhiZSwgMHhiNCwgMHhjNSwgMHhmYywgMHhkNCwKKwkweGUwLCAweDQwLCAweDQ1LCAweDU0LCAweDJjLCAweGUzLCAweGM1LCAweDA3LCAweDJhLCAweGNiLCAweDY5LCAweGZlLAorCTB4OGIsIDB4ZDUsIDB4Y2YsIDB4NWEsIDB4ZGIsIDB4YjIsIDB4M2UsIDB4NDYsIDB4NWIsIDB4ZmYsIDB4OGUsIDB4N2MsCisJMHhiNywgMHg2YywgMHhmZiwgMHgyMywgMHgwNSwgMHhiZSwgMHhiMiwgMHhmYiwgMHhjNiwgMHg1YywgMHg5MywgMHhlYywKKwkweDViLCAweDE5LCAweGQ4LCAweDljLCAweGQ2LCAweDNlLCAweDFmLCAweDczLCAweDNiLCAweGUyLCAweDM2LCAweGJmLAorCTB4Y2UsIDB4ZTAsIDB4M2EsIDB4NWIsIDB4NzEsIDB4NjQsIDB4MDIsIDB4ZjIsIDB4ZTEsIDB4YjAsIDB4ZmMsIDB4NTMsCisJMHg5OCwgMHg0ZCwgMHg5OCwgMHhmNywgMHg2NiwgMHg3ZCwgMHg1OSwgMHg5ZiwgMHg3YiwgMHgxYiwgMHhjZCwgMHg1MiwKKwkweDNjLCAweGVkLCAweDRhLCAweGUxLCAweDM0LCAweGY3LCAweGQ0LCAweGNlLCAweGRkLCAweDUxLCAweGNiLCAweDBmLAorCTB4YTEsIDB4MWMsIDB4ZTAsIDB4YmUsIDB4YjAsIDB4MjMsIDB4NDUsIDB4ZjgsIDB4YzgsIDB4ODMsIDB4ZGMsIDB4ZWYsCisJMHhlZiwgMHhmZCwgMHg0NywgMHhlNiwgMHhlYSwgMHhjNCwgMHhiOSwgMHg0ZSwgMHhhNiwgMHg2ZCwgMHgwYiwgMHhkYSwKKwkweDM2LCAweGRhLCAweGI2LCAweGMxLCAweGM3LCAweGRmLCAweDVjLCAweGRiLCAweDhkLCAweDY4LCAweDFiLCAweDhmLAorCTB4YzYsIDB4N2QsIDB4ODMsIDB4NmQsIDB4MzUsIDB4M2UsIDB4YWYsIDB4MWQsIDB4MjgsIDB4OTUsIDB4MTcsIDB4NWQsCisJMHhkZiwgMHg0ZiwgMHg4ZSwgMHg0OSwgMHhkNiwgMHgxOSwgMHhlZCwgMHhkMywgMHhmMywgMHhiOSwgMHg3NiwgMHhhMCwKKwkweDAyLCAweDM4LCAweDEyLCAweDYxLCAweDU4LCAweDBjLCAweDIyLCAweGJkLCAweGNlLCAweDdmLCAweDI3LCAweGExLAorCTB4ZGUsIDB4NTksIDB4YzYsIDB4N2QsIDB4NTAsIDB4ZmEsIDB4MjcsIDB4OGMsIDB4YmEsIDB4N2EsIDB4Y2MsIDB4YzEsCisJMHg5MywgMHgyMiwgMHhmNywgMHgzYiwgMHgxMywgMHg5YiwgMHg3MCwgMHg1NywgMHgxZCwgMHhjNCwgMHg0OSwgMHhkZSwKKwkweDY3LCAweGZjLCAweDc4LCAweDkzLCAweDJkLCAweDhmLCAweGIxLCAweDNjLCAweGVkLCAweDQyLCAweDk2LCAweDk4LAorCTB4ZjIsIDB4OTgsIDB4MmQsIDB4MDcsIDB4NGMsIDB4NDEsIDB4MzEsIDB4MDUsIDB4NmUsIDB4YjMsIDB4ZTUsIDB4N2MsCisJMHg1NiwgMHhiYSwgMHhkYywgMHgzYywgMHgxYiwgMHgxZSwgMHgxYSwgMHgxMSwgMHhjNiwgMHg4OSwgMHg3MiwgMHhkNywKKwkweDM3LCAweGM4LCAweDRlLCAweGFjLCAweDBmLCAweDdkLCAweDUwLCAweDQ3LCAweDlhLCAweDAxLCAweGM3LCAweGM1LAorCTB4ZTAsIDB4YzcsIDB4NjEsIDB4YWIsIDB4ODcsIDB4ZjIsIDB4OWQsIDB4YzAsIDB4ZDAsIDB4ZmYsIDB4OGMsIDB4NzQsCisJMHg2NSwgMHg5NSwgMHhjMywgMHg1YywgMHg4MywgMHg1MCwgMHg4NiwgMHg4MiwgMHg1ZCwgMHhjOSwgMHhiZCwgMHhmOCwKKwkweDNkLCAweGRhLCAweDliLCAweDkyLCAweDk5LCAweDdlLCAweGQwLCAweDYzLCAweDJmLCAweDc5LCAweDYzLCAweDI3LAorCTB4NmMsIDB4MjgsIDB4ZmMsIDB4ZWUsIDB4NmEsIDB4OTEsIDB4NDUsIDB4YWYsIDB4ZTAsIDB4YWQsIDB4ODMsIDB4ZmYsCisJMHgzNywgMHg4OCwgMHg1OSwgMHhjZCwgMHg5NiwgMHg3YywgMHhlZiwgMHgzNiwgMHgwOCwgMHhiOSwgMHhhYywgMHhkNywKKwkweDg1LCAweDdiLCAweGZkLCAweDdjLCAweGJmLCAweDhlLCAweGY5LCAweDllLCAweDZiLCAweDk2LCAweDY2LCAweDk2LAorCTB4ZDcsIDB4ZDcsIDB4NmQsIDB4OTQsIDB4ZmQsIDB4ZGUsIDB4NmUsIDB4MmYsIDB4YmUsIDB4YWMsIDB4ZWUsIDB4MjUsCisJMHhkNCwgMHg2NSwgMHg5OSwgMHhlZiwgMHgzMSwgMHgxNywgMHg2OCwgMHhhNiwgMHg0MiwgMHgzYSwgMHgzMywgMHhiMCwKKwkweDc2LCAweDc0LCAweDg1LCAweGUxLCAweGY1LCAweDAxLCAweGM3LCAweDBkLCAweGMzLCAweDFiLCAweDgyLCAweDFlLAorCTB4ZWYsIDB4MTksIDB4NzksIDB4MmUsIDB4MzQsIDB4MzYsIDB4NWEsIDB4NDQsIDB4M2IsIDB4Y2YsIDB4NWEsIDB4NzksCisJMHgxZCwgMHg4NiwgMHgyZiwgMHgwNywgMHhkZCwgMHhmMiwgMHhiOSwgMHg2YSwgMHhmYSwgMHgxYywgMHg3ZCwgMHhmOCwKKwkweGYzLCAweDc4LCAweDNlLCAweDFmLCAweDk4LCAweGZjLCAweGE1LCAweDNmLCAweDQzLCAweGJiLCAweDg0LCAweGVhLAorCTB4MDUsIDB4MGQsIDB4ZmIsIDB4ZjIsIDB4NTksIDB4ZWQsIDB4ZjMsIDB4MTMsIDB4N2YsIDB4NjYsIDB4Y2YsIDB4YTAsCisJMHgwNiwgMHgwMywgMHgyNiwgMHhlYywgMHhlNywgMHgzNiwgMHg3YiwgMHhjYywgMHg2OSwgMHhkNCwgMHhmNCwgMHg1YiwKKwkweGZmLCAweDRlLCAweGUxLCAweDFkLCAweGNiLCAweGMyLCAweGYwLCAweDhhLCAweGJlLCAweDk2LCAweGY1LCAweGQwLAorCTB4ZDcsIDB4OTMsIDB4ZGMsIDB4MGIsIDB4N2MsIDB4OWYsIDB4ZTYsIDB4M2YsIDB4OTEsIDB4MDMsIDB4ZGMsIDB4ZjcsCisJMHgwMiwgMHgwZSwgMHg5NSwgMHhmMiwgMHg4ZiwgMHg3NSwgMHhhOCwgMHg3NCwgMHg0MSwgMHhlNCwgMHgyZCwgMHg1OCwKKwkweDdmLCAweGFlLCAweDMxLCAweDE4LCAweGE0LCAweDE1LCAweGIwLCAweGVmLCAweGZhLCAweGE1LCAweDY2LCAweDEzLAorCTB4OWIsIDB4YTIsIDB4NmYsIDB4OWUsIDB4ZGQsIDB4MGMsIDB4ZGYsIDB4NTksIDB4ZGIsIDB4MzMsIDB4ZGMsIDB4NTcsCisJMHgxZiwgMHg2YiwgMHgwZCwgMHhjMywgMHhmNywgMHgwNiwgMHhkMSwgMHg5YSwgMHhkOSwgMHhkOCwgMHgzNywgMHg3NCwKKwkweDdjLCAweGJlLCAweDU3LCAweGQ2LCAweDFiLCAweGJiLCAweDkwLCAweGI5LCAweDhkLCAweDI5LCAweGJkLCAweDRmLAorCTB4YTAsIDB4ZGEsIDB4YTAsIDB4NDMsIDB4NzYsIDB4ZmQsIDB4MDAsIDB4MzgsIDB4ZTUsIDB4MTgsIDB4Y2MsIDB4NzMsCisJMHg4YywgMHg2MCwgMHhhYSwgMHhiNSwgMHhjZiwgMHhmNywgMHhhZSwgMHhiMywgMHgzNiwgMHhhYywgMHgwYiwgMHg1YywKKwkweGZhLCAweDVlLCAweDg3LCAweGZhLCAweDVlLCAweDY4LCAweDc0LCAweDZiLCAweDQ0LCAweGMzLCAweGZmLCAweDEwLAorCTB4M2UsIDB4OTgsIDB4MzAsIDB4Y2YsIDB4YjksIDB4NWQsIDB4ZWMsIDB4NjMsIDB4YTcsIDB4OGMsIDB4ZWYsIDB4YzIsCisJMHhiMywgMHg3YiwgMHgxZCwgMHhlZSwgMHgwMywgMHg1NywgMHhjNiwgMHhlNCwgMHhhYSwgMHhlNCwgMHg4MCwgMHhkYSwKKwkweGU1LCAweDNkLCAweDI4LCAweDNkLCAweDU2LCAweGM2LCAweDdkLCAweDA5LCAweGZhLCAweGJlLCAweDAwLCAweGZmLAorCTB4YmUsIDB4NDksIDB4MWUsIDB4MDQsIDB4NGQsIDB4YWIsIDB4YmUsIDB4NzQsIDB4NmEsIDB4NWUsIDB4YTUsIDB4YmIsCisJMHhhNywgMHg1NSwgMHgzYSwgMHgxOCwgMHg1MSwgMHgxMywgMHg5YywgMHg1NywgMHgzZiwgMHg3MSwgMHgzMSwgMHg0ZCwKKwkweGZjLCAweDk2LCAweDgxLCAweGZmLCAweDMyLCAweDcwLCAweDdjLCAweGQ5LCAweDNkLCAweGUzLCAweGMwLCAweGVhLAorCTB4MTYsIDB4YTMsIDB4ZGYsIDB4MGEsIDB4OWEsIDB4MzYsIDB4OGQsIDB4OWQsIDB4ZmYsIDB4YTcsIDB4NDEsIDB4YjQsCisJMHg4NiwgMHgzZCwgMHg1ZSwgMHgwMywgMHg3MywgMHg3MSwgMHhkNiwgMHg1YywgMHhhMywgMHgzYywgMHhkNywgMHgwOCwKKwkweDhhLCAweGExLCAweDAwLCAweGJhLCAweDRmLCAweGE3LCAweGM2LCAweGQ0LCAweDYyLCAweGI4LCAweDc5LCAweDRmLAorCTB4NjcsIDB4ZjcsIDB4NjMsIDB4YmEsIDB4OWYsIDB4NzQsIDB4OTAsIDB4NTUsIDB4NGYsIDB4MDIsIDB4OWUsIDB4OWQsCisJMHhkMiwgMHhiNCwgMHg4NywgMHg3OCwgMHgyNiwgMHhhYywgMHg3MSwgMHhjNiwgMHhhNywgMHhiYywgMHgzYiwgMHg1MCwKKwkweDc3LCAweDQ0LCAweGU5LCAweDNkLCAweDZkLCAweDViLCAweDg3LCAweDMwLCAweGJmLCAweDFiLCAweGY4LCAweGE1LAorCTB4MWUsIDB4NjIsIDB4Y2MsIDB4ZWQsIDB4YjUsIDB4NzQsIDB4MjEsIDB4NjQsIDB4ZDIsIDB4NDksIDB4Y2EsIDB4YzAsCisJMHg5OCwgMHg4OSwgMHgyNSwgMHg1NywgMHhlZiwgMHhlNCwgMHhmYSwgMHhkMywgMHgxMywgMHg4OCwgMHhiYiwgMHg5MCwKKwkweDUxLCAweDEzLCAweGUwLCAweGUyLCAweGEzLCAweDI3LCAweGM1LCAweDZkLCAweGYwLCAweGJiLCAweGQ3LCAweDFiLAorCTB4M2YsIDB4OGMsIDB4M2UsIDB4MTksIDB4YzcsIDB4NmUsIDB4OTAsIDB4ZTIsIDB4YWEsIDB4ZjgsIDB4Y2QsIDB4MjQsCisJMHhlMCwgMHg2ZiwgMHg5NiwgMHhmMSwgMHg5MywgMHg1YywgMHgwYiwgMHgxNywgMHgzMiwgMHg4NywgMHg2MywgMHg4YiwKKwkweDliLCAweGViLCAweDBkLCAweGMzLCAweDUxLCAweDk2LCAweDlmLCAweDI2LCAweGZmLCAweDRhLCAweDlhLCAweGVmLAorCTB4MGEsIDB4YTcsIDB4ZTcsIDB4MzcsIDB4YWIsIDB4NjUsIDB4YjIsIDB4YjYsIDB4YzUsIDB4YzIsIDB4YTEsIDB4ZjEsCisJMHgyNCwgMHg5MywgMHg1YSwgMHg4ZSwgMHg1MCwgMHhkZiwgMHhjYywgMHhkNCwgMHhjMSwgMHgxMywgMHg3YywgMHg3YywKKwkweGMyLCAweDZmLCAweDdjLCAweDEzLCAweGYwLCAweGZjLCAweDBmLCAweGMwLCAweGQzLCAweDYyLCAweGUxLCAweDY5LAorCTB4NWMsIDB4MDEsIDB4NGYsIDB4NGIsIDB4MDQsIDB4MGYsIDB4ZTQsIDB4MWMsIDB4ZTUsIDB4NmEsIDB4ZmMsIDB4ZGEsCisJMHg2YywgMHg0NSwgMHg5YywgMHhhMiwgMHgyZiwgMHhlZCwgMHg0YSwgMHhmYiwgMHg0MywgMHhkNCwgMHgzNywgMHg4ZCwKKwkweGRlLCAweDY4LCAweDlmLCAweDI3LCAweGEzLCAweDVhLCAweGQ3LCAweGI4LCAweGQ3LCAweDc2LCAweDU2LCAweGU2LAorCTB4NjEsIDB4YmQsIDB4OGEsIDB4OTMsIDB4ZjMsIDB4MDksIDB4ZmIsIDB4NWEsIDB4NzYsIDB4ZDUsIDB4M2QsIDB4OTAsCisJMHhmZiwgMHgwYiwgMHg2OSwgMHhkNywgMHhkYSwgMHgxMiwgMHg5MywgMHgwMSwgMHhmZCwgMHhhMCwgMHg4NCwgMHhjZSwKKwkweDE1LCAweGE4LCAweGMxLCAweGY0LCAweDEyLCAweDYwLCAweDgyLCAweDNjLCAweDNlLCAweGQ5LCAweGUzLCAweDBkLAorCTB4Y2IsIDB4NTYsIDB4ZWQsIDB4ZWIsIDB4NTksIDB4NWMsIDB4NjMsIDB4NmUsIDB4ZjEsIDB4YmEsIDB4YjksIDB4NDEsCisJMHhmZiwgMHhhOSwgMHg2OCwgMHg2ZSwgMHg5MCwgMHg4OSwgMHhhOCwgMHgzNywgMHgyOSwgMHg3ZiwgMHg2NCwgMHg3MSwKKwkweGIxLCAweDExLCAweDczLCAweDhhLCAweGQ3LCAweGNkLCAweGE3LCAweDMzLCAweDc5LCAweDNiLCAweGNiLCAweGNjLAorCTB4N2MsIDB4YmEsIDB4OGEsIDB4N2UsIDB4ZGMsIDB4ZTIsIDB4NzcsIDB4MmQsIDB4OWYsIDB4YzQsIDB4ZDgsIDB4M2QsCisJMHhkMywgMHgxMiwgMHhjYSwgMHg0NCwgMHg4MCwgMHgzNSwgMHhlYSwgMHhhNiwgMHg3ZiwgMHgxMiwgMHhiNywgMHhiOSwKKwkweGQ3LCAweDBhLCAweGNmLCAweDFiLCAweDJjLCAweDdmLCAweDc5LCAweDUyLCAweGQ0LCAweGZlLCAweGUwLCAweGRmLAorCTB4NTksIDB4M2UsIDB4NzUsIDB4NmQsIDB4OWUsIDB4MWMsIDB4N2YsIDB4MWYsIDB4NWMsIDB4NmYsIDB4ZjMsIDB4MDUsCisJMHgwYSwgMHg1OSwgMHg3OSwgMHg2NSwgMHgzZCwgMHhlZCwgMHg5MiwgMHgwNiwgMHhmZiwgMHg1NywgMHg1NiwgMHg5NCwKKwkweGM1LCAweDUxLCAweDc2LCAweDZhLCAweGJkLCAweDk1LCAweDBiLCAweDI4LCAweGJiLCAweDA3LCAweDdlLCAweDFmLAorCTB4ZjMsIDB4M2UsIDB4ZjgsIDB4OGUsIDB4MzIsIDB4YjgsIDB4MWUsIDB4MjcsIDB4M2QsIDB4NjAsIDB4NDUsIDB4ZjIsCisJMHgzYywgMHhlNSwgMHgyMiwgMHg2ZCwgMHg0YSwgMHhjYywgMHg1MSwgMHg2ZCwgMHg4ZiwgMHhlMiwgMHhmMiwgMHhmOCwKKwkweGJkLCAweDk2LCAweGVkLCAweDRmLCAweDdjLCAweDEzLCAweGQ3LCAweGYyLCAweDhkLCAweDA5LCAweGYwLCAweGZkLAorCTB4ZTEsIDB4YzAsIDB4NzEsIDB4NjcsIDB4OTgsIDB4NTcsIDB4YTAsIDB4NjksIDB4YjgsIDB4YmUsIDB4ZWYsIDB4MWIsCisJMHgxOCwgMHgyNiwgMHhiNCwgMHhiNCwgMHg0YywgMHg3YSwgMHgyMSwgMHg0ZiwgMHgzYiwgMHhkMiwgMHg0NCwgMHg1ZCwKKwkweDdjLCAweGQyLCAweGQzLCAweDM5LCAweGVlLCAweDM5LCAweGFkLCAweDk3LCAweGViLCAweGQ3LCAweGIxLCAweDA5LAorCTB4YmEsIDB4MjYsIDB4NjEsIDB4NzgsIDB4ZDQsIDB4MzMsIDB4ZmIsIDB4ZTcsIDB4YjUsIDB4ZmUsIDB4NDYsIDB4ZDAsCisJMHgxZiwgMHhlZCwgMHgzNCwgMHhmOCwgMHhmZCwgMHgzZSwgMHhhMywgMHg0MywgMHg5NCwgMHg1ZiwgMHg4ZSwgMHhhYiwKKwkweGFlLCAweGQ2LCAweDdlLCAweDZiLCAweDVjLCAweGU3LCAweDM3LCAweDJkLCAweGQ1LCAweDFkLCAweGIzLCAweDYzLAorCTB4OTMsIDB4NmUsIDB4Y2QsIDB4N2UsIDB4NDIsIDB4NmQsIDB4N2MsIDB4NzEsIDB4ZDQsIDB4MmUsIDB4MDEsIDB4OTUsCisJMHgzNSwgMHhjYSwgMHg0NCwgMHgxZiwgMHg2OSwgMHg5NCwgMHg3MywgMHhkNywgMHgzNiwgMHhkNCwgMHhiNSwgMHhiNCwKKwkweDIzLCAweDBjLCAweDdkLCAweGQyLCAweDc2LCAweDcyLCAweGFmLCAweGNkLCAweDk3LCAweDFhLCAweDhkLCAweGNmLAorCTB4OTIsIDB4OTAsIDB4MmQsIDB4MGQsIDB4M2EsIDB4MmYsIDB4MDEsIDB4NjUsIDB4OTUsIDB4NDgsIDB4OTcsIDB4YjksCisJMHgzMiwgMHhkMywgMHhmYiwgMHg3ZiwgMHhjMiwgMHhlYywgMHg0MSwgMHhkNiwgMHg1ZCwgMHgzMywgMHgwZiwgMHgyMCwKKwkweDM5LCAweDJkLCAweDFhLCAweDRmLCAweDVmLCAweGFiLCAweGUxLCAweGM5LCAweGNlLCAweDJkLCAweGIxLCAweDcyLAorCTB4NmUsIDB4NzAsIDB4NmEsIDB4ZmQsIDB4N2IsIDB4MjAsIDB4M2IsIDB4YjksIDB4NGUsIDB4MjYsIDB4ZTcsIDB4ZmMsCisJMHg5YywgMHgzOCwgMHg2ZSwgMHhhZSwgMHg3YiwgMHhhZCwgMHhiOSwgMHg0ZCwgMHg0NiwgMHg3OCwgMHhlNSwgMHhkYywKKwkweDQwLCAweGFiLCAweGQxLCAweGJjLCAweDQ4LCAweGRiLCAweDA5LCAweGJkLCAweGVmLCAweGE0LCAweDE0LCAweDYxLAorCTB4ZDksIDB4YjgsIDB4MDIsIDB4YjcsIDB4MTEsIDB4ZGQsIDB4MTksIDB4OWEsIDB4ZmIsIDB4YTIsIDB4YTYsIDB4YjksCisJMHgxNiwgMHg0YiwgMHg3MywgMHhhOCwgMHhlYiwgMHg3MSwgMHgxZiwgMHhmZCwgMHhiZSwgMHg5NiwgMHgxYSwgMHhjZCwKKwkweDZkLCAweGIwLCAweDM0LCAweGE3LCAweDVhLCAweGNjLCAweDFlLCAweDdiLCAweGI5LCAweGM1LCAweGVjLCAweDcxLAorCTB4MjUsIDB4NTcsIDB4M2MsIDB4YmYsIDB4OTMsIDB4Y2YsIDB4ZjAsIDB4YzUsIDB4YTIsIDB4ZTcsIDB4N2EsIDB4NTgsCisJMHhjZiwgMHgwMywgMHhkNiwgMHg3YSwgMHg1OSwgMHhkMywgMHg2NCwgMHhlMywgMHg3OCwgMHhkYywgMHg4ZiwgMHhhNywKKwkweGRmLCAweGU3LCAweGNhLCAweGEzLCAweGIwLCAweDgzLCAweDhhLCAweDk1LCAweDFmLCAweDg0LCAweGYzLCAweGYwLAorCTB4ZmQsIDB4MjYsIDB4OTYsIDB4NzQsIDB4ZWYsIDB4NGMsIDB4MGIsIDB4ZjksIDB4NmQsIDB4MWEsIDB4YmYsIDB4OGUsCisJMHhkNCwgMHhmOSwgMHgzYywgMHg5OCwgMHgyZiwgMHhjYSwgMHhmZSwgMHgxOSwgMHhlYiwgMHgwMSwgMHhiOSwgMHhiYywKKwkweDU0LCAweDk3LCAweDMxLCAweDEwLCAweGUzLCAweGUzLCAweDljLCAweGFiLCAweGI2LCAweGRiLCAweGZkLCAweDQ5LAorCTB4Y2EsIDB4ZjksIDB4YmIsIDB4ZTEsIDB4MTMsIDB4ZGQsIDB4MDMsIDB4M2QsIDB4NDksIDB4ZmEsIDB4ZWUsIDB4ZDgsCisJMHg2MCwgMHhmMiwgMHg4OSwgMHgxMywgMHhkMCwgMHg2MywgMHgzZiwgMHg2ZiwgMHg3MywgMHhhYiwgMHg2ZSwgMHhiZiwKKwkweDdkLCAweGVkLCAweDVjLCAweDYyLCAweGQwLCAweGJlLCAweDQzLCAweDlhLCAweDc5LCAweGRiLCAweDA2LCAweDEzLAorCTB4ODMsIDB4ZGUsIDB4YmEsIDB4ODEsIDB4N2MsIDB4YTYsIDB4NzYsIDB4ZWQsIDB4ZGEsIDB4YTgsIDB4ZjksIDB4YzIsCisJMHg4OSwgMHg5ZSwgMHhhYiwgMHgyYiwgMHg5ZSwgMHhhMywgMHg3NiwgMHg3ZiwgMHhiMywgMHg3MSwgMHg3OSwgMHhiYiwKKwkweGE4LCAweGZjLCAweGNlLCAweDRkLCAweGNiLCAweGNiLCAweGZmLCAweGEzLCAweGI3LCAweGJjLCAweDdkLCAweGUzLAorCTB4ZTYsIDB4ZTUsIDB4Y2YsIDB4N2IsIDB4NTcsIDB4M2MsIDB4N2YsIDB4NjQsIDB4YzUsIDB4ZjMsIDB4ZWYsIDB4YWQsCisJMHg3OCwgMHhkZSwgMHhkMSwgMHhiYSwgMHhmYywgMHhmOSwgMHg0MywgMHgyYiwgMHg5ZSwgMHg0ZiwgMHhiNSwgMHhhZSwKKwkweDBkLCAweGVmLCAweDQyLCAweGViLCAweDcyLCAweGI4LCAweGVlLCAweGQ2LCAweGZiLCAweDA3LCAweGQzLCAweDU1LAorCTB4NTcsIDB4ZjYsIDB4OTYsIDB4ZjAsIDB4ZGUsIDB4NzksIDB4ZGYsIDB4MTYsIDB4YTMsIDB4ZDcsIDB4ZWEsIDB4ZGYsCisJMHgzMywgMHg1ZSwgMHhiNywgMHg3YiwgMHhjYiwgMHhmMiwgMHhmZSwgMHg2YSwgMHhlZCwgMHhmNiwgMHhkNSwgMHhkYSwKKwkweDA1LCAweGI1LCAweDc2LCAweDQ2LCAweGI2LCAweGNkLCAweDU0LCAweGY5LCAweDhlLCAweGU1LCAweDUxLCAweGJmLAorCTB4YTYsIDB4ZWQsIDB4NDQsIDB4ZDksIDB4ZDcsIDB4MzksIDB4YjcsIDB4YzMsIDB4M2EsIDB4ZTcsIDB4MzYsIDB4MDUsCisJMHgzZSwgMHhiYywgMHg1YiwgMHhjNywgMHhhOCwgMHgzNiwgMHhjMywgMHg1MCwgMHgxZSwgMHhhZiwgMHg2ZSwgMHhkNCwKKwkweDcxLCAweDJhLCAweGQxLCAweDc5LCAweGI3LCAweGMzLCAweGIwLCAweDZkLCAweDk5LCAweDZiLCAweDFiLCAweGNhLAorCTB4ZmUsIDB4YzAsIDB4ZGMsIDB4NGQsIDB4ZWUsIDB4ZWQsIDB4YjEsIDB4NzAsIDB4YzAsIDB4MGIsIDB4YzMsIDB4NzEsCisJMHhmZiwgMHg3NiwgMHg5YiwgMHg3ZiwgMHg4NiwgMHg3YiwgMHhkNSwgMHhiNCwgMHhhMSwgMHgwZSwgMHg3ZSwgMHgwYywKKwkweDNhLCAweGI4LCAweGE2LCAweDdiLCAweGVmLCAweGM2LCAweDU4LCAweGYzLCAweGEwLCAweDk5LCAweDNlLCAweGY5LAorCTB4OWQsIDB4NmEsIDB4ZmEsIDB4ZjMsIDB4YTIsIDB4Y2YsIDB4MTYsIDB4ZjUsIDB4YzIsIDB4ODYsIDB4OWIsIDB4YmYsCisJMHhmMywgMHhiZCwgMHg3ZSwgMHgwMCwgMHg1YiwgMHgyZiwgMHg5NCwgMHg4NywgMHg4MywgMHg3ZSwgMHhkMCwgMHg1MCwKKwkweDM3LCAweGVjLCAweDNkLCAweDVmLCAweGZiLCAweGE1LCAweDhmLCAweDZiLCAweGRhLCAweDIyLCAweDhkLCAweDMxLAorCTB4ZGYsIDB4ODYsIDB4NzYsIDB4ODEsIDB4MTMsIDB4Y2YsIDB4ZjUsIDB4ZmUsIDB4YjEsIDB4ODksIDB4ZDMsIDB4MDQsCisJMHg5ZCwgMHhkZSwgMHg5NywgMHhjMCwgMHhiNywgMHg0MywgMHhmZSwgMHgwZSwgMHhmOCwgMHgyOCwgMHhhNCwgMHgyMSwKKwkweGM2LCAweGQzLCAweGI2LCAweGRiLCAweDdjLCAweGM3LCAweDM2LCAweDk5LCAweDc2LCAweDE5LCAweDc3LCAweDRjLAorCTB4ZjcsIDB4OGYsIDB4MDgsIDB4ZTcsIDB4OWQsIDB4NGUsIDB4YTYsIDB4OTQsIDB4YjYsIDB4YWIsIDB4YzIsIDB4MDMsCisJMHgwMSwgMHg3MywgMHg3OSwgMHhiOSwgMHg2NywgMHg0MywgMHg3ZSwgMHgxZSwgMHhiZSwgMHg2YiwgMHhjMiwgMHgyZiwKKwkweDc4LCAweDMxLCAweDliLCAweGZmLCAweDliLCAweDJiLCAweDE5LCAweGRhLCAweDFjLCAweDIzLCAweDZkLCAweGMyLAorCTB4OWYsIDB4NWEsIDB4ZTgsIDB4ZmQsIDB4YmIsIDB4OTAsIDB4ZjYsIDB4N2QsIDB4NGEsIDB4OTEsIDB4ZjYsIDB4YmYsCisJMHgxNywgMHhjZSwgMHhiYSwgMHhlYywgMHg4YiwgMHg3MCwgMHgwZiwgMHhkZiwgMHg5NSwgMHhkMywgMHhiOCwgMHhiYSwKKwkweDViLCAweDBlLCAweDk3LCAweDY5LCAweDBiLCAweGM3LCAweDc1LCAweDdlLCAweGM4LCAweDY4LCAweDQwLCAweDNiLAorCTB4MmQsIDB4MGUsIDB4M2MsIDB4OGUsIDB4MDEsIDB4N2YsIDB4MmQsIDB4YjAsIDB4YjksIDB4NmYsIDB4NDQsIDB4OWQsCisJMHg5OCwgMHg4YywgMHgwYywgMHhiNywgMHg4MCwgMHhmNywgMHhjOCwgMHg5ZiwgMHhiYywgMHhiYiwgMHhhOCwgMHhlZiwKKwkweGM5LCAweDVjLCAweDY5LCAweDQ0LCAweGU3LCAweGVmLCAweDNkLCAweDhlLCAweGI2LCAweDRmLCAweGUwLCAweDlhLAorCTB4MjksIDB4N2QsIDB4MTgsIDB4NmQsIDB4ZGUsIDB4YWYsIDB4ZWIsIDB4Y2YsIDB4NGMsIDB4MzIsIDB4MTcsIDB4NWEsCisJMHgyMCwgMHg5NywgMHgzZSwgMHgyMSwgMHhjNSwgMHhkOSwgMHgwZSwgMHgxOSwgMHg0OSwgMHhjYywgMHg0ZiwgMHhiYiwKKwkweDRiLCAweDcxLCAweDk5LCAweDQ3LCAweDM3LCAweDcwLCAweGNmLCAweGE0LCAweDc4LCAweDM1LCAweGY3LCAweDk3LAorCTB4YzUsIDB4MWQsIDB4ZGUsIDB4YWQsIDB4YmEsIDB4NWIsIDB4YjUsIDB4Y2YsIDB4ZDUsIDB4MmYsIDB4NDMsIDB4ZDUsCisJMHg4YywgMHhkYywgMHg1NCwgMHg3ZCwgMHg2MiwgMHg4YiwgMHg4OSwgMHg0NSwgMHgyZCwgMHg4YiwgMHg2ZiwgMHgxZCwKKwkweGQzLCAweDUyLCAweGU1LCAweDg0LCAweGNiLCAweGYzLCAweDU5LCAweDMyLCAweDczLCAweDU2LCAweDI0LCAweDc2LAorCTB4MjIsIDB4OGEsIDB4NGQsIDB4YjIsIDB4Y2MsIDB4OTMsIDB4OGUsIDB4YWIsIDB4MDEsIDB4ZDcsIDB4NTksIDB4YzgsCisJMHhkNiwgMHg0NCwgMHg1YywgMHgzZSwgMHhiYiwgMHgyYiwgMHgxYSwgMHhhYiwgMHgxMCwgMHg0ZSwgMHhlZCwgMHgyYSwKKwkweGM4LCAweDlkLCAweGI4LCAweGYyLCAweDU3LCAweGE3LCAweDI3LCAweDczLCAweDhhLCAweGUzLCAweGZlLCAweDc1LAorCTB4NDgsIDB4NTksIDB4YTYsIDB4MzIsIDB4YmUsIDB4MTQsIDB4NWEsIDB4YTMsIDB4YjEsIDB4ZTEsIDB4ZGYsIDB4ZWMsCisJMHg4OSwgMHhjNiwgMHhhNywgMHhjZCwgMHg2ZCwgMHhjZSwgMHg1NiwgMHgxNCwgMHhiOSwgMHg4ZiwgMHgwMywgMHhmYSwKKwkweDhiLCAweDY1LCAweDNlLCAweGI3LCAweDgxLCAweGJlLCAweGMzLCAweDgwLCAweGIwLCAweDFkLCAweDY0LCAweGJhLAorCTB4NjIsIDB4ZGYsIDB4ODQsIDB4OTMsIDB4ZjAsIDB4ZDcsIDB4YzMsIDB4YjksIDB4OTAsIDB4NGEsIDB4MDAsIDB4NDcsCisJMHg4NSwgMHhkNywgMHg4NSwgMHhiNywgMHhjNywgMHhmMywgMHhkNSwgMHg1YSwgMHhmMCwgMHhkZSwgMHg2YywgMHg2MywKKwkweDg5LCAweDhjLCAweDBmLCAweGFlLCAweDAzLCAweGRlLCAweDVhLCAweDUwLCAweDllLCAweDk3LCAweDg5LCAweDkzLAorCTB4YjcsIDB4NmUsIDB4ZTEsIDB4ZGUsIDB4NzgsIDB4ODMsIDB4ZWYsIDB4ZDgsIDB4MWMsIDB4NTYsIDB4OWUsIDB4MzksCisJMHg5YSwgMHg0MCwgMHgxZCwgMHhiZSwgMHgxZiwgMHg0MSwgMHg5YiwgMHg3NCwgMHgyMSwgMHgxNywgMHhkYiwgMHgwMiwKKwkweDlmLCAweDg4LCAweGUzLCAweDg2LCAweGIxLCAweDhlLCAweDNkLCAweGNkLCAweDNhLCAweDI3LCAweDU1LCAweGNlLAorCTB4NTIsIDB4OWYsIDB4NDcsIDB4NmQsIDB4MjcsIDB4NzQsIDB4Y2UsIDB4MDcsIDB4ZmMsIDB4ZjYsIDB4YzIsIDB4NjAsCisJMHg4YywgMHhmMiwgMHhhYiwgMHg1YiwgMHgwNiwgMHhhOCwgMHg0ZiwgMHhjZSwgMHg4ZSwgMHg2OCwgMHhkYSwgMHhlZiwKKwkweGRjLCAweGM1LCAweGYzLCAweDU3LCAweDNkLCAweGM2LCAweDQ2LCAweDRmLCAweDEwLCAweGM2LCAweDliLCAweDUxLAorCTB4MGUsIDB4ZmIsIDB4ZmQsIDB4MzUsIDB4NjEsIDB4MjgsIDB4YmMsIDB4NDksIDB4MTgsIDB4MGEsIDB4NmYsIDB4MTIsCisJMHgwNiwgMHhlMiwgMHgwMiwgMHg3MCwgMHg1NCwgMHhhZiwgMHhkOCwgMHgxOCwgMHhjNSwgMHhiZSwgMHhiNywgMHg2MiwKKwkweDFlLCAweDQ3LCAweGNhLCAweDA1LCAweDM5LCAweDVhLCAweDc2LCAweDc0LCAweGRjLCAweDcxLCAweDVlLCAweDUxLAorCTB4MjYsIDB4NzgsIDB4ZTAsIDB4NDksIDB4ZjAsIDB4NWUsIDB4MTksIDB4YmMsIDB4NTksIDB4MDYsIDB4MmYsIDB4OTYsCisJMHhjMSwgMHg5NywgMHhiMCwgMHhmZiwgMHhjZiwgMHg0MywgMHgzZSwgMHgzYywgMHg4MSwgMHhiNSwgMHg3OSwgMHg3YywKKwkweDE5LCAweDJmLCAweDY3LCAweDM1LCAweDJmLCAweDE3LCAweGNiLCAweGY0LCAweGQ1LCAweDdhLCAweDJmLCAweGMzLAorCTB4YWYsIDB4YWUsIDB4MGMsIDB4OTQsIDB4ZDIsIDB4NTAsIDB4MjUsIDB4OGUsIDB4OWIsIDB4ZWYsIDB4ZmQsIDB4MjgsCisJMHhmOSwgMHg1NSwgMHgxZSwgMHgwYywgMHgwZSwgMHhhMiwgMHhjZCwgMHgyNCwgMHg2OCwgMHgzYywgMHg0ZCwgMHgzYiwKKwkweDkwLCAweGY2LCAweDRmLCAweDAxLCAweGJjLCAweDc5LCAweDhjLCAweGJlLCAweDlhLCAweGJhLCAweDdhLCAweGIzLAorCTB4NTAsIDB4YmYsIDB4YjgsIDB4N2IsIDB4OTgsIDB4Y2IsIDB4YzgsIDB4YjksIDB4YTYsIDB4NTYsIDB4ZTAsIDB4YzksCisJMHhmMCwgMHhlZiwgMHg5OCwgMHg0ZiwgMHgzZCwgMHg0MywgMHhiZSwgMHg3ZCwgMHg5NiwgMHg3YywgMHg1YiwgMHhjNywKKwkweGFiLCAweDNmLCAweGM1LCAweGY5LCAweDg1LCAweGRlLCAweGFlLCAweGI1LCAweGRhLCAweGQ2LCAweGVhLCAweDZmLAorCTB4NWUsIDB4YWEsIDB4YWYsIDB4YzcsIDB4OWYsIDB4MjQsIDB4M2YsIDB4YWEsIDB4Y2MsIDB4MjQsIDB4NzEsIDB4OWYsCisJMHhjYSwgMHhjNSwgMHg3NiwgMHg1OCwgMHhkYywgMHhjMywgMHg3NiwgMHhkYiwgMHg3MywgMHgwNSwgMHg3MCwgMHhkZiwKKwkweDJlLCAweDg1LCAweGI5LCAweDUwLCAweGZjLCAweDNkLCAweDUxLCAweDlmLCAweGI1LCAweDdlLCAweDNjLCAweGRiLAorCTB4Y2YsIDB4NjgsIDB4YzksIDB4OTEsIDB4YzEsIDB4NWQsIDB4ZGMsIDB4ZDcsIDB4NzAsIDB4YTAsIDB4ZTcsIDB4YTMsCisJMHhmNSwgMHg4MCwgMHhiZCwgMHhhZiwgMHhkNywgMHg5YywgMHgzMiwgMHg5NiwgMHhiMiwgMHhiNSwgMHhjNSwgMHhjNiwKKwkweDlmLCAweGQ4LCAweGRmLCAweGU0LCAweDhhLCAweDc1LCAweDdhLCAweDMxLCAweGU0LCAweGI5LCAweGI2LCAweDA5LAorCTB4ZmYsIDB4NjAsIDB4MWQsIDB4YWQsIDB4M2MsIDB4NjAsIDB4NjksIDB4NDUsIDB4YWQsIDB4OTgsIDB4YzcsIDB4NWQsCisJMHg5NiwgMHg1NiwgMHgyMiwgMHg3OCwgMHgxMywgMHgxMSwgMHhhZCwgMHgzNCwgMHg0NSwgMHhiNCwgMHg1MiwgMHg5OCwKKwkweDhlLCAweDY4LCAweDg1LCAweDZkLCAweGVmLCAweDhhLCAweDY4LCAweDI1LCAweDU1LCAweDRmLCAweDJiLCAweDg1LAorCTB4NjksIDB4MDcsIDB4ZDcsIDB4NGEsIDB4MzgsIDB4NDgsIDB4MmYsIDB4ZWMsIDB4ODcsIDB4ZjQsIDB4MDIsIDB4NTgsCisJMHhhYSwgMHg5ZiwgMHg1OSwgMHhhMiwgMHg5NywgMHgwNCwgMHhmYSwgMHgzOSwgMHg1YSwgMHgzNiwgMHgzOSwgMHgyMiwKKwkweGYwLCAweGJiLCAweGFjLCAweDBlLCAweGYxLCAweGIwLCAweGU2LCAweGM2LCAweDQ3LCAweDVjLCAweDliLCAweDQ2LAorCTB4MDIsIDB4NGIsIDB4MjMsIDB4YjUsIDB4N2MsIDB4ZmEsIDB4MTUsIDB4YjQsIDB4MDEsIDB4ZGMsIDB4MzMsIDB4MzcsCisJMHg3NiwgMHhiNywgMHhhNiwgMHg4ZCwgMHhmYiwgMHg4MywgMHgxMiwgMHhlYSwgMHgwZSwgMHg4MywgMHgzNiwgMHgyMiwKKwkweDFjLCAweGJjLCAweGM3LCAweGUyLCAweDYwLCAweGU1LCAweDVhLCAweGRlLCAweDY2LCAweDcxLCAweDMwLCAweDZjLAorCTB4NzEsIDB4YTAsIDB4ZjksIDB4YTUsIDB4YzAsIDB4MzUsIDB4NTMsIDB4MWEsIDB4MDcsIDB4NGQsIDB4MWEsIDB4MDcsCisJMHhhMiwgMHhhMiwgMHhiNiwgMHhiNywgMHhhZCwgMHg4MSwgMHgwMywgMHhkNiwgMHgxOSwgMHhkNiwgMHhmMywgMHg4ZiwKKwkweDYxLCAweGZlLCAweGI3LCAweDYzLCAweGZlLCAweDRhLCAweGNmLCAweDlmLCAweGViLCAweDYwLCAweDcyLCAweGI5LAorCTB4OGIsIDB4ZDUsIDB4YmYsIDB4NWUsIDB4OWEsIDB4N2YsIDB4MmIsIDB4ZmEsIDB4MzgsIDB4NTIsIDB4OGUsIDB4ZTksCisJMHhmOSwgMHhjMywgMHhiNiwgMHhlZiwgMHg4ZiwgMHhlNiwgMHhmZiwgMHg3OCwgMHhkNSwgMHhlNCwgMHg1MywgMHgzZiwKKwkweGJlLCAweDRhLCAweGNmLCAweDk1LCAweDJjLCAweDZmLCAweGY4LCAweGRhLCAweDJmLCAweDY2LCAweDRjLCAweGZiLAorCTB4M2MsIDB4NzQsIDB4ZGIsIDB4NTQsIDB4OTAsIDB4YjIsIDB4ZTcsIDB4YWUsIDB4OGMsIDB4YmQsIDB4ZjQsIDB4OTUsCisJMHg4MCwgMHhiYywgMHhmMywgMHgyMSwgMHg5ZCwgMHhkNywgMHg3MiwgMHg4ZSwgMHg3NiwgMHg1MywgMHhiOSwgMHg1NSwKKwkweDA2LCAweGE3LCAweGVhLCAweGUxLCAweDI2LCAweGJjLCAweDA1LCAweDJkLCAweDQ3LCAweGYzLCAweDk4LCAweGRmLAorCTB4NjgsIDB4ZDAsIDB4MGQsIDB4ZjksIDB4YTYsIDB4NjksIDB4MDksIDB4ZTUsIDB4ZTksIDB4YzIsIDB4NDAsIDB4YWMsCisJMHg0OSwgMHhkNCwgMHgwMywgMHhlZiwgMHhjNywgMHg5YywgMHg1ZCwgMHhkOSwgMHhlMiwgMHg3NywgMHg3YSwgMHg3YiwKKwkweDE0LCAweDc1LCAweGUxLCAweDk1LCAweDc1LCAweGJhLCAweGIwLCAweGNkLCAweGVhLCAweGMyLCAweGNkLCAweGQ0LAorCTB4ODUsIDB4ODAsIDB4ZmIsIDB4NmUsIDB4MzksIDB4NTYsIDB4ZTYsIDB4ZmEsIDB4MTUsIDB4NTIsIDB4NGQsIDB4ZDAsCisJMHhmZiwgMHhkZiwgMHhmMSwgMHg3OSwgMHhjNiwgMHg0NSwgMHhjNywgMHhjZCwgMHg5MiwgMHhjNywgMHgzNCwgMHgyZCwKKwkweDUzLCAweGE3LCAweGE1LCAweGY1LCAweDk5LCAweDkwLCAweDA1LCAweGRhLCAweGQ4LCAweDA5LCAweGM2LCAweDQyLAorCTB4YTksIDB4ZjcsIDB4ZmUsIDB4M2UsIDB4ZmMsIDB4Y2MsIDB4MWEsIDB4N2EsIDB4NmYsIDB4YmMsIDB4NmMsIDB4ZWMsCisJMHhiNywgMHgwNiwgMHhkOCwgMHg4NCwgMHg3MiwgMHhhYSwgMHgwZCwgMHhkNywgMHgyNiwgMHg5ZSwgMHg4OSwgMHhlOCwKKwkweGVlLCAweDUyLCAweGNkLCAweGQyLCAweDcwLCAweDZhLCAweGEzLCAweDhjLCAweDRkLCAweDE5LCAweDFiLCAweDU3LAorCTB4OWQsIDB4MDIsIDB4ZmUsIDB4NGYsIDB4MzEsIDB4N2YsIDB4NTYsIDB4NzQsIDB4YmUsIDB4N2YsIDB4N2UsIDB4MTIsCisJMHg3NiwgMHhlZSwgMHhjYywgMHhkZCwgMHhlNiwgMHgxYywgMHhjOCwgMHg1NCwgMHg4MywgMHhmZSwgMHg0ZCwgMHgxYiwKKwkweGE0LCAweDE4LCAweDY0LCAweGExLCAweGVmLCAweGUyLCAweDMyLCAweDg2LCAweDNlLCAweDNiLCAweDc3LCAweDM1LAorCTB4NjIsIDB4Y2UsIDB4MDksIDB4YjQsIDB4YTUsIDB4Y2YsIDB4YzcsIDB4MzgsIDB4NWEsIDB4YTMsIDB4YjgsIDB4MzMsCisJMHg0OSwgMHg5ZCwgMHhhYiwgMHhjZiwgMHhmMywgMHhhZSwgMHhiOSwgMHhmZSwgMHg1NiwgMHhiYywgMHg2MywgMHg3ZSwKKwkweDg0LCAweDg3LCAweGIxLCAweDIyLCAweGQ5LCAweDhmLCAweDdlLCAweDRmLCAweDg4LCAweGRkLCAweGVmLCAweGM5LAorCTB4NjgsIDB4ZmQsIDB4MTcsIDB4M2IsIDB4ZTEsIDB4ZDksIDB4YjMsIDB4N2EsIDB4ZmQsIDB4NTgsIDB4ZjcsIDB4YjUsCisJMHhmNCwgMHhhMiwgMHgzMSwgMHg3MiwgMHg3MywgMHg1OCwgMHgzZiwgMHg3NSwgMHhkNiwgMHhjNSwgMHhiZCwgMHgxZCwKKwkweGY3LCAweGE4LCAweGJmLCAweDQ4LCAweDhmLCAweDQwLCAweDM3LCAweGJlLCAweGZkLCAweGQwLCAweDI2LCAweDY5LAorCTB4MDYsIDB4YmUsIDB4NjcsIDB4MTQsIDB4NzAsIDB4NmQsIDB4NzIsIDB4YmMsIDB4MGEsIDB4OWEsIDB4MTcsIDB4NmEsCisJMHhmNCwgMHhmMCwgMHhjNCwgMHhlYiwgMHhmMiwgMHgwMywgMHg2OSwgMHg4MiwgMHhiNCwgMHg0MCwgMHhiOSwgMHg0OCwKKwkweGRhLCAweGEwLCAweDRjLCAweDI0LCAweDZkLCAweDFiLCAweDdhLCAweDc4LCAweDJjLCAweGYwLCAweDYzLCAweGNjLAorCTB4MDMsIDB4MzAsIDB4NzEsIDB4NzksIDB4ZDIsIDB4MDYsIDB4NjksIDB4M2UsIDB4YTUsIDB4ZTMsIDB4ZjUsIDB4NTksCisJMHhmOSwgMHg5NiwgMHg2NCwgMHg1YiwgMHgzYiwgMHg2MSwgMHg5NywgMHhmZCwgMHhkYiwgMHhhZSwgMHhiMSwgMHgzOSwKKwkweDJiLCAweGFjLCAweDY5LCAweDBlLCAweGJhLCAweDg5LCAweDM5LCAweDc5LCAweGRkLCAweGYyLCAweDllLCAweDZhLAorCTB4MDEsIDB4NzgsIDB4YjgsIDB4MTcsIDB4NGEsIDB4ZjksIDB4NmUsIDB4OWQsIDB4ZTcsIDB4YjgsIDB4YWYsIDB4YjQsCisJMHg0OSwgMHg2ZSwgMHgwOSwgMHhlMiwgMHgzNiwgMHhlZSwgMHg3ZSwgMHgwNCwgMHg3NCwgMHhiMCwgMHhlMCwgMHhjOCwKKwkweGE5LCAweDBiLCAweGI4LCAweDJlLCAweDNhLCAweDVjLCAweGJmLCAweDRiLCAweDQxLCAweDM2LCAweGFkLCAweGM4LAorCTB4ZWMsIDB4YmUsIDB4OWIsIDB4NWMsIDB4OTAsIDB4MWUsIDB4NmYsIDB4NGMsIDB4MTgsIDB4ZWIsIDB4OTgsIDB4NzcsCisJMHg5YSwgMHg0ZSwgMHhmZCwgMHhmZSwgMHgyNiwgMHhlMywgMHg0YiwgMHgwMywgMHgxNiwgMHhiZiwgMHhkMSwgMHgxYiwKKwkweGE0LCAweDJkLCAweDE3LCAweDg0LCAweDYxLCAweDllLCAweDc2LCAweDgzLCAweDI4LCAweGVkLCAweDIzLCAweGMxLAorCTB4ZTcsIDB4NDMsIDB4MTksIDB4ZTMsIDB4MTMsIDB4M2IsIDB4OWQsIDB4YzYsIDB4YjMsIDB4MmYsIDB4NTgsIDB4NWEsCisJMHg5MSwgMHg5OCwgMHhjYSwgMHgzYywgMHhlZCwgMHgzNCwgMHg5YywgMHg3YSwgMHg4NCwgMHg2YiwgMHhhNiwgMHhmMywKKwkweGFlLCAweDBkLCAweDVkLCAweDNkLCAweGViLCAweGQ0LCAweGU4LCAweGVhLCAweDJiLCAweGY2LCAweGI3LCAweGNhLAorCTB4MzQsIDB4NDksIDB4MzYsIDB4ZGQsIDB4ODQsIDB4ZjksIDB4MGUsIDB4OTQsIDB4MjIsIDB4MTgsIDB4YmYsIDB4MGQsCisJMHhiOCwgMHgwOCwgMHgwZiwgMHhlOCwgMHg3NiwgMHhlNiwgMHg3ZiwgMHhlMiwgMHg1YSwgMHgwNCwgMHgyYywgMHhmNywKKwkweDAxLCAweGVlLCAweDRiLCAweDgwLCAweGY5LCAweDQ1LCAweDVjLCAweDZhLCAweDViLCAweDRjLCAweGZlLCAweGQ0LAorCTB4ODksIDB4Y2QsIDB4ZDQsIDB4YzMsIDB4NGIsIDB4MTgsIDB4YmYsIDB4NmIsIDB4ZTEsIDB4N2QsIDB4MmQsIDB4NTgsCisJMHgzZCwgMHg1OSwgMHhlOCwgMHhlYiwgMHgwMCwgMHgzYywgMHg4NCwgMHhmMywgMHgyNSwgMHhjMCwgMHg0OCwgMHhiYiwKKwkweGY1LCAweDM5LCAweDNjLCAweDdiLCAweDgwLCAweGVmLCAweDc5LCAweDBiLCAweDEzLCAweGU4LCAweDcxLCAweGVhLAorCTB4MmYsIDB4NmEsIDB4YmYsIDB4NGIsIDB4YjQsIDB4YTMsIDB4ZmYsIDB4ZDIsIDB4M2UsIDB4YjcsIDB4YWYsIDB4OTAsCisJMHgwMSwgMHg1ZCwgMHgwZSwgMHhmMSwgMHgzYywgMHg1MSwgMHg1ZSwgMHhhNCwgMHgxZCwgMHgwMCwgMHhiZSwgMHhmZiwKKwkweGFlLCAweGM0LCAweGNlLCAweDI2LCAweGU1LCAweDY4LCAweDg5LCAweDdiLCAweDQwLCAweGE3LCAweDgxLCAweDBmLAorCTB4N2QsIDB4YzYsIDB4MDUsIDB4NzUsIDB4YWUsIDB4YzIsIDB4MDUsIDB4NjUsIDB4M2YsIDB4YjMsIDB4MWIsIDB4NTcsCisJMHgzNywgMHhhZSwgMHhiNywgMHhlMiwgMHgwMiwgMHgzOSwgMHhjYywgMHg5YywgMHhjMiwgMHhkNSwgMHg4MywgMHhiZSwKKwkweDU1LCAweGEyLCAweDQ5LCAweDk4LCAweDliLCAweGY1LCAweDBkLCAweGI0LCAweGQxLCAweGI2LCAweDY1LCAweDQxLAorCTB4NjUsIDB4ZmEsIDB4ODAsIDB4YmYsIDB4M2UsIDB4YzAsIDB4OTYsIDB4YzQsIDB4YzUsIDB4N2MsIDB4ZTYsIDB4ZWYsCisJMHgzYSwgMHg3MiwgMHhmNiwgMHg2NSwgMHg1YywgMHg2MCwgMHhiMCwgMHhiMywgMHgyMCwgMHhjYywgMHhiMywgMHhmZCwKKwkweGI4LCAweGEwLCAweGM0LCAweGNlLCAweDY2LCAweDcxLCAweDBkLCAweGUyLCAweGZhLCAweDJiLCAweGM3LCAweGYwLAorCTB4NWMsIDB4M2IsIDB4ZjAsIDB4MTUsIDB4ZjEsIDB4MDgsIDB4NzAsIDB4YmUsIDB4OGMsIDB4ZTcsIDB4YmUsIDB4ZWMsCisJMHhiYywgMHg3MSwgMHg5ZSwgMHhmYiwgMHhiZSwgMHg2MywgMHg3OCwgMHhlZSwgMHgxNSwgMHhhNywgMHhjNiwgMHg3MywKKwkweDE3LCAweDFjLCAweGY1LCAweGYwLCAweGQzLCAweDRlLCAweGVjLCAweDYxLCAweGZhLCAweDEyLCAweDE3LCAweDFjLAorCTB4YzMsIDB4ZmYsIDB4MzEsIDB4MTksIDB4MzgsIDB4MDgsIDB4NWEsIDB4N2EsIDB4NzgsIDB4MWUsIDB4MTcsIDB4ZTksCisJMHhlYSwgMHgxOSwgMHg5NCwgMHgzZiwgMHhiZiwgMHg2MiwgMHhkYywgMHhlNywgMHhkZSwgMHhjNCwgMHhiOCwgMHhhZiwKKwkweGRhLCAweDcxLCAweDQ1LCAweGQ1LCAweGM2LCAweDdkLCAweDExLCAweDdkLCAweGJmLCAweDY0LCAweGM3LCAweDdkLAorCTB4YjEsIDB4NmUsIDB4NWMsIDB4ZDAsIDB4Y2EsIDB4YzMsIDB4OGIsIDB4YjgsIDB4NDgsIDB4MTcsIDB4MmYsIDB4YTAsCisJMHgzYywgMHg5MiwgMHgwOSwgMHgxZiwgMHhmNCwgMHhhNCwgMHhiOSwgMHgwMSwgMHhiYywgMHgxYiwgMHg4NywgMHg3ZSwKKwkweDZjLCAweDU4LCAweGQyLCAweDhkLCAweGQ5LCAweDNhLCAweGZkLCAweGYwLCAweDQ2LCAweGY0LCAweGUzLCAweDc4LAorCTB4OTksIDB4MzYsIDB4ZTIsIDB4N2MsIDB4OWQsIDB4NWMsIDB4YTAsIDB4NmYsIDB4MTQsIDB4Y2EsIDB4NDksIDB4ZWQsCisJMHgwNywgMHhkMSwgMHgyNywgMHhhMiwgMHg3ZiwgMHhiNCwgMHhkMiwgMHhiNiwgMHhmYSwgMHhhOCwgMHhjZSwgMHg0NSwKKwkweGZiLCAweDk1LCAweDUyLCAweGJiLCAweGRjLCAweDU5LCAweGEyLCAweDRkLCAweDQ4LCAweDdhLCAweDA5LCAweGMzLAorCTB4YjEsIDB4M2QsIDB4YjQsIDB4NGYsIDB4MGIsIDB4ZTEsIDB4MTUsIDB4M2UsIDB4ZTksIDB4YzQsIDB4ZjcsIDB4N2UsCisJMHg3OSwgMHhiNSwgMHhjZSwgMHg5OCwgMHgxYywgMHg4MCwgMHhlZiwgMHg5ZSwgMHgzYiwgMHhmMSwgMHg4YiwgMHhkMCwKKwkweDE5LCAweDBkLCAweDgwLCAweDliLCAweGY0LCAweGI2LCAweDRkLCAweDBlLCAweDRjLCAweGFhLCAweDg5LCAweDJkLAorCTB4OTAsIDB4MjUsIDB4MzcsIDB4OTUsIDB4MWEsIDB4NjEsIDB4ZjcsIDB4MzAsIDB4NGYsIDB4YWIsIDB4NTksIDB4M2EsCisJMHhmNywgMHhjNCwgMHg0ZCwgMHgxZSwgMHhiOSwgMHg5NywgMHhjMCwgMHg2ZiwgMHhjZiwgMHhlNCwgMHhiNSwgMHgyNywKKwkweDkyLCAweDc4LCAweGZmLCAweDBmLCAweDFlLCAweGU1LCAweDYwLCAweGMyLCAweGJmLCAweDRlLCAweGU3LCAweDA4LAorCTB4NzUsIDB4ZWMsIDB4YTEsIDB4ZGQsIDB4NzIsIDB4ODMsIDB4ZDYsIDB4ZTEsIDB4ZWUsIDB4MmEsIDB4M2IsIDB4NDksCisJMHg2ZCwgMHhmMywgMHhhNCwgMHg2NiwgMHhhMywgMHg4ZCwgMHg5NiwgMHhkMiwgMHgyOSwgMHhjMiwgMHhmNSwgMHg5MCwKKwkweDcwLCAweGZmLCAweGViLCAweDFlLCAweDI5LCAweDA2LCAweDFiLCAweGUxLCAweDE3LCAweDMwLCAweDc2LCAweDllLAorCTB4ZWUsIDB4YTYsIDB4NmQsIDB4MzQsIDB4MzMsIDB4ZTUsIDB4ZDksIDB4M2MsIDB4ZWIsIDB4NGQsIDB4ZjIsIDB4YWMsCisJMHgxZSwgMHhhNywgMHg1MSwgMHhjMywgMHg2OCwgMHhjZSwgMHg1ZSwgMHg3MCwgMHgxZiwgMHgyMSwgMHhhZSwgMHhjZiwKKwkweGZiLCAweGNjLCAweDU0LCAweDVhLCAweGI0LCAweGRlLCAweDk5LCAweGE5LCAweDMwLCAweGFmLCAweDFmLCAweGZlLAorCTB4NTQsIDB4ODUsIDB4NzksIDB4ZmMsIDB4ODEsIDB4NzgsIDB4NmYsIDB4ODcsIDB4OWYsIDB4NWIsIDB4ZDksIDB4MjEsCisJMHhhMywgMHg1MywgMHhlYiwgMHhhNCwgMHhkMSwgMHg1NywgMHg4OSwgMHgyZCwgMHhkMCwgMHgxZiwgMHg2YywgMHhkMywKKwkweGIxLCAweDA3LCAweGZlLCAweGUxLCAweGY0LCAweDRlLCAweDc5LCAweDYyLCAweDlhLCAweDdkLCAweDZmLCAweDkzLAorCTB4ZDksIDB4MzksIDB4NzEsIDB4YmMsIDB4YjcsIDB4YWYsIDB4NDcsIDB4MWQsIDB4YzgsIDB4ZjUsIDB4M2QsIDB4MmMsCisJMHg0YiwgMHhlMSwgMHgyZSwgMHhjYSwgMHg3YiwgMHhiYiwgMHgyYiwgMHgxNywgMHhmYiwgMHhmOCwgMHhjYywgMHhiMywKKwkweDA0LCAweGUyLCAweGIyLCAweGJmLCAweDhiLCAweDdkLCAweGVkLCAweDcyLCAweDZlLCAweDBlLCAweDM0LCAweDAxLAorCTB4YjksIDB4M2YsIDB4NzgsIDB4OGEsIDB4MzAsIDB4ODksIDB4ZWMsIDB4OWQsIDB4NjEsIDB4MmMsIDB4YmQsIDB4ZDMsCisJMHg2MywgMHhkYywgMHg5NCwgMHhmYiwgMHgzNCwgMHhiNywgMHhmNCwgMHg3MSwgMHgyYywgMHhlOCwgMHgyNSwgMHhlOCwKKwkweGI4LCAweDhlLCAweDNkLCAweDQ2LCAweDE2LCAweDY0LCAweDY3LCAweDFhLCAweDUwLCAweGNlLCAweDdlLCAweGUxLAorCTB4M2YsIDB4MWUsIDB4NjQsIDB4M2YsIDB4NTEsIDB4NWIsIDB4ODUsIDB4MzksIDB4MzUsIDB4NmEsIDB4N2EsIDB4NTksCisJMHg1YywgMHhhMSwgMHgzZiwgMHhjZSwgMHhmZiwgMHg0OCwgMHhmNiwgMHgzNywgMHhmYiwgMHhlOCwgMHhkNiwgMHg3YiwKKwkweDIxLCAweGRjLCAweDUzLCAweDM2LCAweGI2LCAweDE1LCAweGQ3LCAweDQ0LCAweGVmLCAweDI5LCAweGMwLCAweGFlLAorCTB4YmEsIDB4NGEsIDB4ZGIsIDB4MTcsIDB4YjMsIDB4NTUsIDB4YWUsIDB4MjAsIDB4NjMsIDB4NTEsIDB4ZDEsIDB4MWEsCisJMHgyNSwgMHhlNSwgMHhkMSwgMHhmMiwgMHhkMiwgMHgzYSwgMHhlZCwgMHg2OCwgMHg1OCwgMHhiZSwgMHg0ZSwgMHhhNCwKKwkweDk1LCAweDYwLCAweGM0LCAweGRhLCAweDFlLCAweDBiLCAweDcyLCAweDBjLCAweDc2LCAweDU5LCAweGI3LCAweDVlLAorCTB4YjMsIDB4MDUsIDB4ZDgsIDB4YjIsIDB4NzYsIDB4Y2QsIDB4YjQsIDB4M2QsIDB4NWIsIDB4OGMsIDB4ZDYsIDB4NmMsCisJMHgxOCwgMHgxYSwgMHhhNywgMHg5MiwgMHhkOSwgMHhjYywgMHgzNSwgMHhmMywgMHgxOCwgMHhlZiwgMHgwNiwgMHhkZSwKKwkweDBiLCAweDU4LCAweGE3LCAweDAyLCAweGQ2LCAweGE4LCAweDUwLCAweGQ5LCAweDI2LCAweDMzLCAweDI3LCAweDU1LAorCTB4N2IsIDB4ODMsIDB4NDgsIDB4NmEsIDB4ZDQsIDB4ZGYsIDB4MjYsIDB4ZTMsIDB4NzMsIDB4OGMsIDB4MjUsIDB4ZWMsCisJMHg4MCwgMHgwZCwgMHhiNiwgMHgxMywgMHg1NywgMHgzYiwgMHg5ZSwgMHhkOSwgMHgyZSwgMHgyMSwgMHhjNSwgMHg4YSwKKwkweDQyLCAweGRiLCAweGE2LCAweDU1LCAweDc2LCAweGQ2LCAweDM5LCAweDhjLCAweGNkLCAweDMzLCAweDlkLCAweDhmLAorCTB4MDEsIDB4MGYsIDB4MzUsIDB4ZGUsIDB4MjksIDB4ZDUsIDB4YzUsIDB4OWYsIDB4MzgsIDB4NTcsIDB4YWQsIDB4NDMsCisJMHgzMSwgMHhkZiwgMHg4NCwgMHg1ZSwgMHg0ZiwgMHgxZCwgMHg4NywgMHgyYSwgMHgzNywgMHhiZSwgMHgxOSwgMHg3YiwKKwkweDJhLCAweDQ5LCAweDdiLCAweDJhLCAweDNmLCAweGU5LCAweDk5LCAweGYzLCAweDA2LCAweGMzLCAweGYwLCAweDlkLAorCTB4ZmMsIDB4ZmMsIDB4NjYsIDB4ZDIsIDB4ZmEsIDB4YzgsIDB4MzQsIDB4ZTEsIDB4OGEsIDB4NDcsIDB4NzAsIDB4MmQsCisJMHg1YiwgMHgzMywgMHg5ZSwgMHgwZiwgMHg1YiwgMHgxZCwgMHhlNywgMHgyOCwgMHgyZCwgMHhlNSwgMHg0MywgMHg5YSwKKwkweGQ4LCAweDNlLCAweGUzLCAweDI4LCAweGVkLCAweDZiLCAweGMwLCAweDc0LCAweGI3LCAweGI2LCAweDYxLCAweDQ1LAorCTB4ZGQsIDB4MjYsIDB4ODcsIDB4Y2IsIDB4M2MsIDB4NWIsIDB4YzYsIDB4NzgsIDB4ZTIsIDB4MjcsIDB4MTksIDB4NWYsCisJMHhlYSwgMHg5ZSwgMHg5MSwgMHg2MywgMHgxOCwgMHg5YiwgMHhiOSwgMHgzZiwgMHhjYSwgMHhjNiwgMHg2ZiwgMHgzNiwKKwkweGQ4LCAweDFjLCAweDkxLCAweGZhLCAweDE4LCAweDhlLCAweGM5LCAweDBkLCAweDVhLCAweDllLCAweDY3LCAweDlkLAorCTB4MWUsIDB4NWUsIDB4YzQsIDB4M2EsIDB4ZmYsIDB4OWEsIDB4ZGUsIDB4MWIsIDB4OTQsIDB4YzksIDB4MTgsIDB4YjQsCisJMHhkZiwgMHg2OCwgMHg1ZiwgMHhiYSwgMHhkZiwgMHg5YywgMHhhYiwgMHg0OSwgMHhjOSwgMHg1MCwgMHhkOSwgMHhjYywKKwkweGZmLCAweDkyLCAweGNlLCAweDExLCAweDMyLCAweGI5LCAweDkwLCAweDI2LCAweDdmLCAweGU4LCAweDFlLCAweGI5LAorCTB4MDQsIDB4MWQsIDB4NWUsIDB4NWIsIDB4ZGIsIDB4MjYsIDB4MTksIDB4MDcsIDB4MmUsIDB4ZjIsIDB4N2EsIDB4NWYsCisJMHgyMiwgMHgyNSwgMHhmOSwgMHhiZSwgMHg0NywgMHgzNywgMHhmMywgMHhkYywgMHg0NSwgMHgxYywgMHhlYiwgMHg1MywKKwkweDljLCAweGU2LCAweDU5LCAweDRjLCAweGY2LCAweDdiLCAweGI5LCAweGJlLCAweDI4LCAweDY2LCAweDk5LCAweGQ3LAorCTB4MGYsIDB4NTksIDB4ZjksIDB4NjMsIDB4M2QsIDB4YzksIDB4NjYsIDB4ZmQsIDB4N2UsIDB4OWQsIDB4Y2QsIDB4ZGYsCisJMHg3NiwgMHg0NCwgMHgwZSwgMHg4NCwgMHhmMiwgMHg4NywgMHhkMCwgMHg5MywgMHg2NywgMHhlYywgMHg5YywgMHg1MiwKKwkweDNhLCAweDY2LCAweDI1LCAweGUxLCAweGM1LCAweDIwLCAweDY5LCAweDYzLCAweDk2LCAweDljLCAweGNiLCAweDQxLAorCTB4NGIsIDB4ZGYsIDB4YzYsIDB4ZmUsIDB4YTksIDB4ZDksIDB4ZDAsIDB4NjYsIDB4ZGYsIDB4ZWYsIDB4MDksIDB4MmQsCisJMHgwYiwgMHg3YiwgMHhhZCwgMHhlZCwgMHhhYywgMHhlMywgMHgzYywgMHg4ZiwgMHg4OCwgMHhjZSwgMHgwOSwgMHg4OCwKKwkweDdjLCAweGEzLCAweGFlLCAweDNhLCAweGJmLCAweGMwLCAweGY4LCAweDcyLCAweGM1LCAweGE5LCAweGI1LCAweDY0LAorCTB4NTQsIDB4Y2QsIDB4MjcsIDB4YTQsIDB4MmYsIDB4MzcsIDB4YjYsIDB4OGIsIDB4ZGYsIDB4NDcsIDB4ODgsIDB4N2MsCisJMHhiOSwgMHg1ZSwgMHhlYiwgMHhjYiwgMHg2ZCwgMHhkNCwgMHhiZSwgMHg5YywgMHg4OSwgMHgzZCwgMHg2YywgMHg1YywKKwkweGYyLCAweGU1LCAweDhhLCAweDUzLCAweDA1LCAweGQwLCAweDRhLCAweGY0LCAweDNkLCAweDA3LCAweDYzLCAweDBiLAorCTB4OGQsIDB4OTcsIDB4NzgsIDB4ODYsIDB4YTYsIDB4NTEsIDB4ZjIsIDB4YzMsIDB4MGEsIDB4N2UsIDB4ODMsIDB4ZjEsCisJMHhiMSwgMHgxOCwgMHhhYiwgMHg1MCwgMHhlYSwgMHhlYiwgMHhkNiwgMHhiZiwgMHg2OCwgMHg5NywgMHg2YywgMHhkYiwKKwkweDNhLCAweGNjLCAweGZiLCAweDZlLCAweGJkLCAweGU2LCAweGIzLCAweDI1LCAweGIzLCAweGY3LCAweDk5LCAweDNmLAorCTB4YzgsIDB4OTgsIDB4MTAsIDB4Y2YsIDB4NDksIDB4NjksIDB4ZmUsIDB4NGEsIDB4MGQsIDB4YzQsIDB4YmEsIDB4OGQsCisJMHgzZCwgMHhlYiwgMHg3YiwgMHhhZCwgMHhkMiwgMHg3YywgMHgxYSwgMHgzOCwgMHg4ZiwgMHhkYiwgMHg3MSwgMHg1MywKKwkweDgwLCAweGU5LCAweDMwLCAweGQ2LCAweGU2LCAweDNhLCAweDJiLCAweDkzLCAweDM5LCAweGY2LCAweDQ3LCAweDliLAorCTB4MTgsIDB4MWIsIDB4OTgsIDB4MmIsIDB4NDUsIDB4MzEsIDB4YzIsIDB4OTgsIDB4M2QsIDB4YTMsIDB4ZTksIDB4YzcsCisJMHgxYSwgMHhmZCwgMHg3NSwgMHg2YiwgMHhkYSwgMHhhYSwgMHg4ZiwgMHhiZiwgMHhhZSwgMHg2ZSwgMHgyMiwgMHgyZCwKKwkweGRkLCAweGFkLCAweGYzLCAweDVjLCAweGQ2LCAweGY3LCAweGE1LCAweGY3LCAweGViLCAweDljLCAweDdiLCAweDFkLAorCTB4NjMsIDB4MmMsIDB4MDgsIDB4NzMsIDB4ZDQsIDB4YmUsIDB4MjksIDB4M2YsIDB4YTEsIDB4NjUsIDB4ZmUsIDB4ZTEsCisJMHg4MCwgMHhmYSwgMHg2YiwgMHg4ZiwgMHhmZSwgMHhkZCwgMHg5OCwgMHgwOSwgMHhjMywgMHg4YiwgMHg3ZCwgMHgxMywKKwkweDhjLCAweDI5LCAweDdhLCAweGRmLCAweDk2LCAweGNlLCAweGU0LCAweDgwLCAweGI2LCAweDlkLCAweGIwLCAweDQ2LAorCTB4MDcsIDB4OWIsIDB4NjUsIDB4OWQsIDB4M2YsIDB4NjIsIDB4NzMsIDB4NjYsIDB4MGEsIDB4OTAsIDB4OWIsIDB4NjksCisJMHhkOCwgMHg0YywgMHgzYywgMHg3ZiwgMHhkYywgMHg2NSwgMHhkZiwgMHgxNSwgMHhjMiwgMHg2NiwgMHhkMCwgMHhkMSwKKwkweDA3LCAweGM1LCAweGM4LCAweDk4LCAweDdjLCAweDRkLCAweGM2LCAweDMwLCAweGQ3LCAweDIwLCAweDRiLCAweDQyLAorCTB4NzYsIDB4OGYsIDB4NGIsIDB4OWEsIDB4ZGYsIDB4MmEsIDB4ZTEsIDB4ZDgsIDB4NDUsIDB4ZDksIDB4MGEsIDB4YmQsCisJMHhjYywgMHg3NiwgMHhiNCwgMHg1NSwgMHhmOSwgMHhjYywgMHgzZCwgMHgxYywgMHhkZiwgMHgzYiwgMHgwMiwgMHhkZCwKKwkweDcyLCAweGMzLCAweDZhLCAweGRkLCAweDkyLCAweGE0LCAweDVmLCAweDlmLCAweDlmLCAweGE0LCAweDZmLCAweGI4LAorCTB4MWUsIDB4NmQsIDB4YjYsIDB4YzksIDB4ODcsIDB4YTYsIDB4N2UsIDB4YmUsIDB4OTUsIDB4YmMsIDB4MzUsIDB4MDIsCisJMHhiOSwgMHhhZSwgMHhlZSwgMHg4ZiwgMHhjZSwgMHgxNiwgMHhiMSwgMHg4YywgMHhlZiwgMHhkOSwgMHg2ZiwgMHg5MywKKwkweGE0LCAweGRlLCAweGViLCAweGM5LCAweDZmLCAweDU0LCAweGQzLCAweGE5LCAweDQ1LCAweGU4LCAweGE2LCAweDExLAorCTB4ZTcsIDB4NTcsIDB4YjcsIDB4OWIsIDB4OTgsIDB4ZWEsIDB4MDcsIDB4NWEsIDB4Y2QsIDB4NTksIDB4ODQsIDB4NjYsCisJMHhlMCwgMHgzNCwgMHg4YSwgMHhiMywgMHhkNiwgMHhkMywgMHhlYywgMHhhMiwgMHg5NSwgMHhjNywgMHg2MSwgMHhkOCwKKwkweGRjLCAweGE3LCAweDY1LCAweGYwLCAweDdlLCAweGNhLCAweGUwLCAweGMzLCAweDQxLCAweDk3LCAweGExLCAweDdkLAorCTB4ZWQsIDB4MzMsIDB4ODUsIDB4NTgsIDB4NDcsIDB4ZTAsIDB4YTEsIDB4Y2YsIDB4NjUsIDB4YmUsIDB4OWYsIDB4ZTUsCisJMHg0ZiwgMHgzZiwgMHhiYiwgMHg2MCwgMHhlNSwgMHg5MiwgMHg3MiwgMHg1NiwgMHhmMywgMHhhNSwgMHhiYSwgMHgyNiwKKwkweGJlLCAweDRjLCAweGU2LCAweDFlLCAweDlkLCAweGEyLCAweDNlLCAweDBlLCAweGU2LCAweGJmLCAweDA5LCAweDM5LAorCTB4OTUsIDB4ZDcsIDB4NzgsIDB4ZDgsIDB4MjYsIDB4ZjcsIDB4NGQsIDB4NDksIDB4ZjYsIDB4MTIsIDB4NzQsIDB4NTUsCisJMHg3MSwgMHg2ZSwgMHgzOSwgMHg2ZiwgMHhhZSwgMHhlZSwgMHg4ZiwgMHg3MywgMHg3ZCwgMHhhNCwgMHhkNSwgMHhmOCwKKwkweGI2LCAweGNiLCAweGU3LCAweDNhLCAweDhmLCAweGI5LCAweDY2LCAweGY1LCAweDVjLCAweGI5LCAweDZmLCAweDMzLAorCTB4NjcsIDB4ZTcsIDB4YmEsIDB4M2UsIDB4OWEsIDB4NmIsIDB4ZmYsIDB4ZjIsIDB4YjksIDB4NDYsIDB4YmUsIDB4N2QsCisJMHgyNCwgMHg3NywgMHg1MywgMHgzYSwgMHhmZiwgMHg1ZSwgMHhlNywgMHg3ZCwgMHg0ZiwgMHhhZCwgMHg5NywgMHg4MSwKKwkweGM5LCAweDhkLCAweDU2LCAweDVlLCAweDdhLCAweGQwLCAweDNkLCAweGNjLCAweDg5LCAweDlmLCAweGJmLCAweGQ3LAorCTB4MTMsIDB4OGIsIDB4MzMsIDB4NDUsIDB4M2MsIDB4NTAsIDB4ZDYsIDB4YjYsIDB4ZWEsIDB4MzMsIDB4M2IsIDB4MzMsCisJMHhmMCwgMHhhZiwgMHg2ZSwgMHgyZCwgMHhiMSwgMHg2ZSwgMHhmNCwgMHhmZSwgMHg3MiwgMHhiMSwgMHhlMywgMHhjOCwKKwkweGE3LCAweGE2LCAweGRmLCAweGQ0LCAweGJkLCAweDJhLCAweGE2LCAweDYwLCAweGUyLCAweGMzLCAweDhjLCAweDBiLAorCTB4OWIsIDB4YjMsIDB4YzQsIDB4Y2MsIDB4NDUsIDB4YmMsIDB4MDMsIDB4M2MsIDB4ZjUsIDB4ZjEsIDB4NTIsIDB4YmEsCisJMHgzZiwgMHgxNywgMHhhMywgMHgxYywgMHg5ZCwgMHg5NiwgMHhhMywgMHhkNSwgMHg0MSwgMHhlOSwgMHhkMCwgMHhlNywKKwkweDQ5LCAweDVmLCAweDM3LCAweDc2LCAweDljLCAweGFkLCAweDhmLCAweDFkLCAweDMzLCAweDlkLCAweDgwLCAweGIxLAorCTB4ZTMsIDB4ZmQsIDB4M2YsIDB4NDIsIDB4ZWMsIDB4NTgsIDB4MWMsIDB4MTMsIDB4M2IsIDB4NWUsIDB4Y2IsIDB4YmYsCisJMHg5YSwgMHgyOCwgMHg0ZiwgMHg2MywgMHg1ZSwgMHhjZCwgMHg5MCwgMHgyNSwgMHgwYiwgMHg0ZSwgMHg3ZSwgMHhhZSwKKwkweDA1LCAweGY3LCAweDBiLCAweGI4LCAweGM3LCAweDcxLCAweGJmLCAweDg0LCAweGJiLCAweDg3LCAweGZiLCAweDhiLAorCTB4YjgsIDB4MjcsIDB4NjQsIDB4NjIsIDB4NDksIDB4NjcsIDB4NGMsIDB4NDMsIDB4NmUsIDB4NTAsIDB4OTcsIDB4YjEsCisJMHhhZCwgMHhmMSwgMHgwNywgMHg2NiwgMHgyYiwgMHg2ZCwgMHhmYywgMHgyZSwgMHg4YywgMHgzMywgMHgzMywgMHhjNywKKwkweDM5LCAweDZjLCAweDk0LCAweGYxLCAweDI5LCAweGNhLCAweGVjLCAweDU2LCAweDk5LCAweDljLCAweDhhLCAweDZjLAorCTB4ZGIsIDB4YmIsIDB4YjYsIDB4NzEsIDB4Y2YsIDB4NjAsIDB4NDQsIDB4MjIsIDB4ZGIsIDB4ZjUsIDB4NzcsIDB4YjcsCisJMHhkOSwgMHg1YywgMHhmYiwgMHgyZCwgMHhkMiwgMHhiYywgMHgwOSwgMHg2YiwgMHg3MCwgMHg1YSwgMHgyZSwgMHg0ZCwKKwkweDZmLCAweDVhLCAweDY2LCAweGMzLCAweGE2LCAweDZjLCAweDRjLCAweDcwLCAweGRhLCAweGVhLCAweGRlLCAweGI1LAorCTB4NjUsIDB4NDQsIDB4ZmQsIDB4ZmEsIDB4MjcsIDB4NmQsIDB4NGUsIDB4NjksIDB4OTQsIDB4MjMsIDB4OTQsIDB4ZDIsCisJMHhlYiwgMHgzMywgMHg1YywgMHg5ZCwgMHhjNiwgMHg3OCwgMHhmZCwgMHg5MiwgMHg5ZCwgMHhlNiwgMHgzYywgMHg5NywKKwkweGJlLCAweDRkLCAweDAxLCAweDc5LCAweDc4LCAweDBhLCAweDdhLCAweDc1LCAweDE5LCAweDVkLCAweDgyLCAweDZlLAorCTB4MzksIDB4MzcsIDB4MDcsIDB4YjQsIDB4ZmIsIDB4YTgsIDB4Y2MsIDB4NGMsIDB4MTIsIDB4YmUsIDB4YWUsIDB4NjQsCisJMHg0YywgMHg5ZiwgMHg1ZCwgMHhjMywgMHhmMywgMHhiNCwgMHhjOSwgMHg5OSwgMHgxZiwgMHhhOCwgMHg0NiwgMHhlNywKKwkweGQ2LCAweDM2LCAweGViLCAweGVmLCAweDExLCAweDJjLCAweDNmLCAweGJiLCAweDY2LCAweGY1LCAweGIzLCAweGI2LAorCTB4MWQsIDB4NzgsIDB4ODYsIDB4MmQsIDB4OWEsIDB4YzMsIDB4NWEsIDB4ZjQsIDB4MTQsIDB4Y2EsIDB4YjgsIDB4Y2UsCisJMHgzYiwgMHhkYiwgMHgyMiwgMHg2NywgMHgxZSwgMHg1YywgMHhjYSwgMHhhMSwgMHg2ZCwgMHg4NSwgMHg4ZCwgMHhkMiwKKwkweDBlLCAweDEzLCAweDc5LCAweGQ4LCAweGNkLCAweDc0LCAweGMxLCAweGM3LCAweDYzLCAweDllLCAweDRjLCAweDU3LAorCTB4ZjIsIDB4MzYsIDB4OWQsIDB4ZGIsIDB4NWMsIDB4M2IsIDB4NDcsIDB4NTgsIDB4Y2IsIDB4NmYsIDB4OGUsIDB4Y2UsCisJMHg2ZCwgMHgyNSwgMHg2NSwgMHgxMCwgMHg3NCwgMHgzOCwgMHhhNCwgMHhjYiwgMHgxMywgMHg5OCwgMHgwZiwgMHhmNywKKwkweGZkLCAweDM0LCAweDFlLCAweDIwLCAweDdiLCAweGI4LCAweGU3LCAweDg3LCAweGI5LCAweDU3LCAweGJmLCAweDAxLAorCTB4N2EsIDB4NzcsIDB4ZWMsIDB4MTksIDB4MzYsIDB4ZDIsIDB4NTgsIDB4OWYsIDB4OGMsIDB4NTUsIDB4OTIsIDB4Y2UsCisJMHg1OCwgMHhhNSwgMHhjZiwgMHgzOSwgMHg1NCwgMHhiMSwgMHhlZiwgMHhmYSwgMHg4YSwgMHg1OCwgMHgwZiwgMHhmYywKKwkweDllLCAweGVlLCAweDcwLCAweDQ2LCAweDgwLCAweGFmLCAweDYyLCAweGI5LCAweGQzLCAweGM5LCAweGVhLCAweGJiLAorCTB4NmYsIDB4ZWYsIDB4OTAsIDB4MDMsIDB4NTgsIDB4YWIsIDB4ODEsIDB4ZTksIDB4YTQsIDB4OTYsIDB4ZjMsIDB4YjUsCisJMHhlZiwgMHg2MSwgMHg0NSwgMHhlYiwgMHhmYSwgMHhhNCwgMHhkZSwgMHgxYiwgMHg5YSwgMHg5NywgMHg2OSwgMHhmZCwKKwkweDdkLCAweDI1LCAweDYzLCAweDNiLCAweDljLCAweDQ2LCAweDdmLCAweGQzLCAweDM2LCAweDI2LCAweGRlLCAweGUzLAorCTB4ZTQsIDB4NzUsIDB4M2YsIDB4NjYsIDB4M2QsIDB4OGEsIDB4ZTUsIDB4NTMsIDB4YjgsIDB4YWYsIDB4M2MsIDB4NDMsCisJMHgxZCwgMHhlOSwgMHgxOSwgMHhjMiwgMHhmZCwgMHgwOCwgMHhmNCwgMHg1OSwgMHg3OCwgMHg4ZiwgMHg5MSwgMHg1NywKKwkweGQzLCAweDMyLCAweDUxLCAweDY1LCAweGZlLCAweDA4LCAweGZiLCAweDQxLCAweDc5LCAweGU1LCAweDMwLCAweDc0LAorCTB4ZDIsIDB4ZjIsIDB4MzMsIDB4ODQsIDB4NDMsIDB4YjUsIDB4NzUsIDB4NDgsIDB4NGQsIDB4MGIsIDB4NjEsIDB4ZTEsCisJMHgxYSwgMHgyYywgMHgzZiwgMHg1ZiwgMHg3ZiwgMHhmOSwgMHg3ZiwgMHhkMSwgMHhiZSwgMHhhMiwgMHg5MSwgMHhhMSwKKwkweDE2LCAweDhlLCAweDJjLCAweGU1LCAweDlkLCAweDkxLCAweDJiLCAweDlmLCAweDk2LCAweDIzLCAweGMwLCAweGUzLAorCTB4MzEsIDB4YzAsIDB4YTQsIDB4ZWUsIDB4ZTcsIDB4ZjcsIDB4NWUsIDB4MmEsIDB4NTIsIDB4OWMsIDB4YmQsIDB4NGYsCisJMHhkNCwgMHg0MywgMHg5NywgMHgxYywgMHhmNywgMHhhMSwgMHgyMywgMHgxMiwgMHg3YiwgMHg2OCwgMHhjMSwgMHg2OSwKKwkweDc4LCAweGE4LCAweDUzLCAweGZiLCAweGU1LCAweGZiLCAweDgyLCAweGNlLCAweGU0LCAweDIxLCAweDM5LCAweDJkLAorCTB4ZWUsIDB4ZmQsIDB4NGEsIDB4OWYsIDB4MjcsIDB4MmIsIDB4N2EsIDB4OGMsIDB4ZjEsIDB4OWQsIDB4OTYsIDB4ZDgsCisJMHhmZCwgMHg3MSwgMHg3YiwgMHgxNiwgMHhkNSwgMHhjNCwgMHhmNSwgMHgxNiwgMHgzNSwgMHhkZiwgMHgzZiwgMHg5NywKKwkweDIwLCAweGNlLCAweDE2LCAweDY1LCAweDVhLCAweGYzLCAweGNlLCAweDAwLCAweGY0LCAweDQ0LCAweDZlLCAweDMyLAorCTB4YjUsIDB4NTQsIDB4YzcsIDB4ZTQsIDB4N2IsIDB4NmUsIDB4NGMsIDB4MTgsIDB4N2UsIDB4NjEsIDB4OWQsIDB4MmUsCisJMHg4NywgMHhkZiwgMHg4NSwgMHhiMCwgMHgzYSwgMHhmZiwgMHhjYSwgMHgyOCwgMHhmNywgMHhkMywgMHhhYywgMHgyOSwKKwkweGRmLCAweGZmLCAweDEwLCAweDZiLCAweGQ4LCAweDg1LCAweGY1LCAweGUyLCAweDc4LCAweDhlLCAweGRlLCAweGNmLAorCTB4ZTUsIDB4NTksIDB4NWMsIDB4NGYsIDB4N2EsIDB4OTIsIDB4NGQsIDB4NGIsIDB4NzYsIDB4MTAsIDB4ZWIsIDB4ZGUsCisJMHgyNywgMHg0ZCwgMHg4MCwgMHg1YiwgMHgzZCwgMHg1NCwgMHgzNCwgMHg3NiwgMHg5ZCwgMHg5MCwgMHg0ZSwgMHgwNSwKKwkweDkyLCAweDliLCAweDM0LCAweGRiLCAweGQ1LCAweGJmLCAweDRmLCAweGFmLCAweGUxLCAweGJkLCAweDk2LCAweDY2LAorCTB4ZDYsIDB4MTksIDB4ZmIsIDB4MTEsIDB4Y2YsIDB4ODYsIDB4MmUsIDB4OGEsIDB4YjIsIDB4NzcsIDB4ZWEsIDB4YmIsCisJMHhkMCwgMHhmMywgMHhkYywgMHg3NywgMHhkMSwgMHhmNiwgMHhlMiwgMHgxYSwgMHhiNiwgMHgyMCwgMHg3OSwgMHhlOSwKKwkweDY5LCAweGViLCAweDU3LCAweDg2LCAweGUxLCAweDU0LCAweDEwLCAweDAwLCAweDhmLCAweDZiLCAweGY5LCAweDkyLAorCTB4M2IsIDB4OWMsIDB4ZDksIDB4YzksIDB4OWQsIDB4Y2UsIDB4Y2MsIDB4NjQsIDB4MjgsIDB4NjMsIDB4MDEsIDB4YmYsCisJMHgxOSwgMHhjMiwgMHgxYywgMHgwMCwgMHhkYSwgMHg1YiwgMHgyYywgMHhlYiwgMHg4NCwgMHg2ZSwgMHhkZCwgMHg5ZCwKKwkweGUwLCAweGY5LCAweGE2LCAweDliLCAweGZjLCAweDE3LCAweGM0LCAweGQ0LCAweDIzLCAweDhlLCAweGU5LCAweDIzLAorCTB4NzcsIDB4M2UsIDB4OTIsIDB4MTcsIDB4N2UsIDB4OWYsIDB4YTMsIDB4MjcsIDB4OTksIDB4ZDAsIDB4ZGYsIDB4MTAsCisJMHhmOSwgMHgwYywgMHhkYSwgMHg2MSwgMHg4YywgMHgzMiwgMHhjNywgMHg3ZCwgMHhjNiwgMHg5OSwgMHg4MSwgMHgzYywKKwkweDliLCAweDlkLCAweGUyLCAweDM3LCAweDAxLCAweDk4LCAweDRmLCAweDFiLCAweDZiLCAweDU3LCAweDcyLCAweDk1LAorCTB4MzcsIDB4NmUsIDB4YmYsIDB4NWIsIDB4NTcsIDB4ODAsIDB4MGIsIDB4MTQsIDB4ZDMsIDB4NjUsIDB4M2QsIDB4ZGUsCisJMHhlOCwgMHhkMiwgMHhiNywgMHhlYywgMHhhMiwgMHhiMiwgMHhlOCwgMHg5YiwgMHg3NiwgMHg0YSwgMHhlNywgMHg0ZSwKKwkweGMzLCAweDk3LCAweDNkLCAweDMzLCAweDIyLCAweGRmLCAweDc3LCAweGU2LCAweDRhLCAweGFmLCAweDM4LCAweDhmLAorCTB4OTYsIDB4YjIsIDB4ZDcsIDB4NWMsIDB4MDEsIDB4ZmEsIDB4YjgsIDB4MTgsIDB4ZTQsIDB4MjksIDB4YmYsIDB4NjAsCisJMHhmMywgMHg0ZCwgMHg0OSwgMHhhMSwgMHgzYSwgMHgyNiwgMHhkMywgMHhkYiwgMHgzYSwgMHhiZCwgMHhmYiwgMHhmNSwKKwkweGRhLCAweDljLCAweDAxLCAweGNlLCAweGJlLCAweDgxLCAweGY1LCAweDNiLCAweDkzLCAweGEwLCAweDdlLCAweDFiLAorCTB4MmQsIDB4MjksIDB4ZjAsIDB4YjIsIDB4ZmEsIDB4NjksIDB4NWMsIDB4YjAsIDB4NmQsIDB4MWIsIDB4YjUsIDB4OGQsCisJMHg3MiwgMHgyOCwgMHg2MCwgMHhiZCwgMHg5ZCwgMHhjZSwgMHhjMCwgMHhlNCwgMHgwZSwgMHhhYywgMHhlMywgMHg0MSwKKwkweGU4LCAweDRmLCAweDA3LCAweDc2LCAweDFhLCAweDY4LCAweDFiLCAweDY1LCAweGUzLCAweGMwLCAweGMxLCAweDY4LAorCTB4NjAsIDB4ZTQsIDB4ZjksIDB4ODAsIDB4MTQsIDB4YjQsIDB4OGYsIDB4NjcsIDB4ZWUsIDB4NTksIDB4NjUsIDB4NjIsCisJMHg2NiwgMHg2MSwgMHgzOCwgMHgwYiwgMHhmYiwgMHg4MCwgMHhkZiwgMHhjNSwgMHg5YSwgMHhhOCwgMHhjZSwgMHhlMSwKKwkweGZhLCAweDcxLCAweGJiLCAweGE3LCAweDNkLCAweDdmLCAweDk5LCAweDNkLCAweDZkLCAweDRmLCAweDRlLCAweDU3LAorCTB4ZjUsIDB4MzksIDB4NzksIDB4OWQsIDB4NWYsIDB4OTUsIDB4NTIsIDB4ZWIsIDB4ZGEsIDB4ZjQsIDB4NWEsIDB4YTksCisJMHgyZSwgMHg5ZCwgMHg5MywgMHg5NiwgMHg5NSwgMHg0NywgMHgxMiwgMHg0NiwgMHgwZiwgMHgxMywgMHhhNiwgMHgxNCwKKwkweGUwLCAweGQ5LCAweDA5LCAweDVjLCAweDEwLCAweDFlLCAweGQzLCAweDQ2LCAweGQ0LCAweDNiLCAweGI3LCAweDUyLAorCTB4MWYsIDB4MmUsIDB4Y2EsIDB4YTcsIDB4MTIsIDB4ZDEsIDB4MTksIDB4MDUsIDB4ZjQsIDB4MDMsIDB4MTksIDB4MzcsCisJMHhiNywgMHhkNSwgMHhlOCwgMHhjOSwgMHgyZCwgMHg2YiwgMHhmNCwgMHgxMywgMHhjZCwgMHhjZCwgMHhiMSwgMHg3MywKKwkweDIzLCAweGRkLCAweDZlLCAweGJlLCAweDkyLCAweDNlLCAweGM1LCAweGEyLCAweDM0LCAweGFkLCAweGE4LCAweGNmLAorCTB4OTgsIDB4ZmUsIDB4YmUsIDB4ZWQsIDB4ZTYsIDB4Y2MsIDB4MDMsIDB4ZWIsIDB4N2EsIDB4YjAsIDB4NGQsIDB4NjksCisJMHhlNywgMHgxMiwgMHg4ZiwgMHg3YSwgMHhkZCwgMHg0YSwgMHg0YSwgMHg3OCwgMHg2ZSwgMHhlMSwgMHgwYywgMHg2NCwKKwkweGNiLCAweDU1LCAweGRlLCAweDRmLCAweDI4LCAweGQyLCAweDYxLCAweDg0LCAweGViLCAweDZmLCAweDY4LCAweDNlLAorCTB4MTksIDB4MmQsIDB4MzEsIDB4YjYsIDB4ZjIsIDB4NjgsIDB4OTgsIDB4MWQsIDB4MjYsIDB4OGYsIDB4YjEsIDB4MGYsCisJMHhiZSwgMHg5ZiwgMHhkMiwgMHhmMSwgMHhkYywgMHg4MywgMHgwMSwgMHg2MywgMHg0NSwgMHg5ZCwgMHg4ZiwgMHhkYywKKwkweGExLCAweDIyLCAweDM5LCAweDA1LCAweGZkLCAweDViLCAweDVlLCAweDcwLCAweGY4LCAweGRkLCAweGJlLCAweDAzLAorCTB4ODIsIDB4ZmIsIDB4ZGMsIDB4ODIsIDB4ZjMsIDB4Y2QsIDB4YTksIDB4NjcsIDB4ZjAsIDB4ZGMsIDB4NjAsIDB4YmYsCisJMHhkNSwgMHg2NywgMHhmNCwgMHg5NCwgMHhjOCwgMHgxZiwgMHg0NiwgMHhmMywgMHg0ZCwgMHgxNiwgMHhiMCwgMHhmNiwKKwkweDJmLCAweDYyLCAweGVkLCAweGQ3LCAweGZlLCAweDM2LCAweDFmLCAweGRlLCAweDU1LCAweGYwLCAweGFlLCAweGYyLAorCTB4MGIsIDB4NjEsIDB4YjYsIDB4OTUsIDB4YjQsIDB4MTgsIDB4ZTgsIDB4YjMsIDB4YTksIDB4OTcsIDB4ZjcsIDB4OWIsCisJMHhmYiwgMHgzNSwgMHg1ZiwgMHg4YywgMHg5NywgMHhjZiwgMHg4MSwgMHgyZiwgMHhiMiwgMHhkYywgMHg2ZiwgMHgwZSwKKwkweDFmLCAweDBlLCAweDZlLCAweDA0LCAweDVmLCAweGVjLCAweDk3LCAweGRmLCAweDgzLCAweDVkLCAweGYwLCAweDNiLAorCTB4ZDUsIDB4MGMsIDB4ZjgsIDB4YTMsIDB4MWYsIDB4ZmMsIDB4ZDIsIDB4MDcsIDB4MWUsIDB4MDksIDB4YjQsIDB4OGQsCisJMHhmYywgMHgxOCwgMHhmNCwgMHgxZiwgMHhmNCwgMHg5YSwgMHg3MywgMHg2OCwgMHhiMiwgMHhjMywgMHhjOSwgMHg0ZiwKKwkweGZhLCAweGNlLCAweGQ4LCAweDI0LCAweGJmLCAweGZmLCAweGEyLCAweGRlLCAweGRhLCAweDIwLCAweDZlLCAweDcyLAorCTB4NTYsIDB4YzgsIDB4MGIsIDB4OWQsIDB4Y2MsIDB4NzEsIDB4NmMsIDB4MDMsIDB4YWUsIDB4Y2UsIDB4MTIsIDB4NTcsCisJMHhiMywgMHhkNSwgMHgxZSwgMHhlZiwgMHgwYSwgMHhmMCwgMHg0NCwgMHg5YiwgMHhlNiwgMHg4OSwgMHg4ZCwgMHg0ZSwKKwkweGQ2LCAweGJiLCAweGQxLCAweGYyLCAweGM0LCAweDBiLCAweGUwLCAweDg5LCAweDRiLCAweGFiLCAweDc4LCAweGUyLAorCTB4MjksIDB4NGIsIDB4ZmYsIDB4ZjMsIDB4NzUsIDB4M2MsIDB4MzEsIDB4NmIsIDB4Y2IsIDB4YTYsIDB4MmYsIDB4YzMsCisJMHgxMywgMHg1YiwgMHhmZCwgMHhmNCwgMHhlNywgMHg0NywgMHhlNCwgMHg1NSwgMHhmMCwgMHg4NCwgMHgyOCwgMHhmMiwKKwkweGM0LCAweDU2LCAweGNkLCAweDEzLCAweDhjLCAweDFkLCAweDkxLCAweDJmLCAweGRhLCAweDIxLCAweDQ3LCAweGM4LAorCTB4MTcsIDB4MTcsIDB4NjQsIDB4MTEsIDB4N2MsIDB4ZjEsIDB4OWMsIDB4ZTIsIDB4ZDgsIDB4NjcsIDB4NjgsIDB4MmIsCisJMHg0YywgMHhkMiwgMHgyNywgMHgzYiwgMHg1NSwgMHhlZSwgMHgwMCwgMHhiZiwgMHgyYiwgMHhmOSwgMHhhZiwgMHg1MywKKwkweDYxLCAweGI4LCAweDAwLCAweDNmLCAweGZkLCAweDQxLCAweGQ4LCAweGYzLCAweGFlLCAweGZlLCAweDBlLCAweGU0LAorCTB4M2MsIDB4ZTgsIDB4M2UsIDB4YTIsIDB4ZjcsIDB4MzEsIDB4MDcsIDB4ZjQsIDB4N2UsIDB4NmMsIDB4MDYsIDB4NzMsCisJMHgxOCwgMHg1MywgMHg5ZiwgMHg4MiwgMHgyZiwgMHhlYywgMHg2MSwgMHg1ZCwgMHg2OSwgMHhlNywgMHg5ZiwgMHhkNCwKKwkweDNjLCAweGQ0LCAweDAwLCAweDdkLCAweGYwLCAweDY4LCAweDFmLCAweDYzLCAweDRkLCAweGJlLCAweDc3LCAweDQ4LAorCTB4NzUsIDB4MTYsIDB4MDYsIDB4MDEsIDB4NzMsIDB4NGMsIDB4ZGQsIDB4MmYsIDB4OGMsIDB4NzMsIDB4YjQsIDB4YWUsCisJMHhiMCwgMHhmMywgMHgyOSwgMHgyMywgMHg4NiwgMHgyMSwgMHhlYiwgMHhjYywgMHhiYiwgMHg0MiwgMHhkOCwgMHgwNCwKKwkweDliLCAweGI0LCAweDQ5LCAweDE5LCAweDFiLCAweDVkLCAweGVkLCAweDQ5LCAweDdiLCAweDNmLCAweDA3LCAweDAxLAorCTB4ZGEsIDB4MDgsIDB4N2IsIDB4NjEsIDB4MmYsIDB4NTYsIDB4N2IsIDB4YjAsIDB4NTQsIDB4NmYsIDB4ZTMsIDB4ZmYsCisJMHg2NywgMHhkOCwgMHhmOCwgMHg2YywgMHgyMywgMHhhZSwgMHhiMSwgMHhmMSwgMHg3ZiwgMHhjNSwgMHhmMiwgMHgxYSwKKwkweDdmLCAweDdiLCAweGRhLCAweGRlLCAweDNmLCAweDBjLCAweGY4LCAweGY2LCAweDJkLCAweGQ5LCAweGZiLCAweGVjLAorCTB4ODMsIDB4NzYsIDB4ODcsIDB4YzgsIDB4MGQsIDB4YjAsIDB4ZjksIDB4ZGUsIDB4MDksIDB4MWUsIDB4YmMsIDB4MTEsCisJMHhiZSwgMHhkNCwgMHhiYiwgMHg0YSwgMHg5ZSwgMHhlYywgMHgyZiwgMHhiNSwgMHhjMSwgMHhlNywgMHg2ZSwgMHg5NywKKwkweDc3LCAweDRmLCAweGVkLCAweDk0LCAweGExLCAweGM5LCAweDBmLCAweDVlLCAweDIxLCAweGNkLCAweGRiLCAweDYwLAorCTB4YTMsIDB4NGUsIDB4MDEsIDB4Y2UsIDB4OTgsIDB4OTUsIDB4ZGIsIDB4M2YsIDB4MDQsIDB4ZGUsIDB4M2EsIDB4NTMsCisJMHhkZiwgMHg1NywgMHg2ZCwgMHhkYiwgMHg4ZCwgMHg5YywgMHhlNywgMHhkOSwgMHhjOSwgMHhiNSwgMHhmYSwgMHg0OSwKKwkweGEwLCAweDNkLCAweDYzLCAweDI5LCAweGRiLCAweGU0LCAweGVjLCAweDQ5LCAweDdhLCAweDVmLCAweDI5LCAweGQ4LAorCTB4ZTUsIDB4MDEsIDB4NmMsIDB4OTIsIDB4MWQsIDB4ZTgsIDB4OGYsIDB4ZjEsIDB4ZTQsIDB4NGQsIDB4ZjIsIDB4ZDQsCisJMHgzNSwgMHhlZSwgMHgyNywgMHhmMiwgMHg5YSwgMHgwZiwgMHhkYiwgMHg5ZCwgMHhkYywgMHhkNCwgMHg4ZCwgMHg1MiwKKwkweDNjLCAweDE4LCAweGM3LCAweDFjLCAweDU0LCAweGRiLCAweDE2LCAweGI5LCAweDVlLCAweDg2LCAweGY0LCAweDdjLAorCTB4Y2UsIDB4YzgsIDB4MTEsIDB4ZTgsIDB4ZTYsIDB4M2YsIDB4MjgsIDB4MGQsIDB4YzksIDB4ZTIsIDB4NzAsIDB4MmIsCisJMHg5ZSwgMHhlMywgMHhmMiwgMHg1NCwgMHhhOSwgMHgwNywgMHhiZSwgMHhjZiwgMHgzYiwgMHg4MCwgMHhhMywgMHg0NiwKKwkweDNjLCAweDM3LCAweGNhLCAweGMwLCAweDE1LCAweGU0LCAweGQ1LCAweDE2LCAweDU5LCAweDQwLCAweGY5LCAweDNiLAorCTB4ZTUsIDB4ZGYsIDB4ZDksIDB4NzIsIDB4OTYsIDB4OTEsIDB4MzcsIDB4NWEsIDB4ZDAsIDB4MzYsIDB4MmUsIDB4MTcsCisJMHg0YiwgMHhiNCwgMHgyYiwgMHgzNSwgMHg0ZiwgMHhmNCwgMHg3ZiwgMHg0YiwgMHg3YSwgMHhiMiwgMHhkZiwgMHg4MiwKKwkweDlkLCAweDdhLCAweDAxLCAweGQ3LCAweGQzLCAweDkyLCAweGRlLCAweDNmLCAweGVhLCAweGY0LCAweGE0LCAweDNhLAorCTB4MWQsIDB4ZTgsIDB4NGUsIDB4NWMsIDB4YWUsIDB4ZDMsIDB4ZTMsIDB4MzUsIDB4M2EsIDB4NTcsIDB4ZDksIDB4M2UsCisJMHgxYSwgMHhlNCwgMHhlOSwgMHg4MywgMHgyYSwgMHhkOSwgMHg4MiwgMHgzNSwgMHhkOSwgMHhlZCwgMHg3NCwgMHhkOSwKKwkweDMyLCAweDNlLCAweGViLCAweDljLCAweDNjLCAweGU5LCAweDNjLCAweGFiLCAweDc2LCAweDZjLCAweDEwLCAweGU5LAorCTB4NjgsIDB4ODEsIDB4Y2QsIDB4MzMsIDB4MjYsIDB4YWEsIDB4YWQsIDB4NDUsIDB4NWMsIDB4ZTksIDB4OWMsIDB4NTEsCisJMHhlZCwgMHgyOCwgMHhmMywgMHg2ZCwgMHg1OSwgMHhhMiwgMHgwNSwgMHhmYSwgMHgwMSwgMHg2NSwgMHhkYiwgMHg1MCwKKwkweGI2LCAweGNiLCAweDk2LCAweGI1LCAweGI2LCAweDQ4LCAweDIzLCAweGNhLCAweGNlLCAweDY4LCAweDllLCAweGJmLAorCTB4ZDQsIDB4ZTUsIDB4N2IsIDB4NzksIDB4YTcsIDB4NTksIDB4M2EsIDB4NGUsIDB4YjUsIDB4NDAsIDB4MzYsIDB4NmMsCisJMHg5MiwgMHg4NSwgMHg2YiwgMHg5YSwgMHhhNCwgMHgwMywgMHhlZiwgMHgxOCwgMHhlNywgMHgwZSwgMHg0ZSwgMHhjNSwKKwkweGU1LCAweGJhLCAweDUzLCAweDlkLCAweGM5LCAweDBmLCAweDYxLCAweDBlLCAweDlkLCAweDY3LCAweDE5LCAweGY3LAorCTB4N2UsIDB4ZjIsIDB4MGEsIDB4YzYsIDB4N2QsIDB4M2EsIDB4Y2UsIDB4ZjIsIDB4ZGUsIDB4YTQsIDB4ZTUsIDB4MGYsCisJMHhmMSwgMHg2MSwgMHhiZSwgMHg3MSwgMHg0NCwgMHg5OSwgMHg3YywgMHgxYSwgMHg3ZSwgMHgyZSwgMHg3NSwgMHg3OCwKKwkweGE3LCAweGZkLCAweDFlLCAweGM3LCAweDlmLCAweDVlLCAweDQxLCAweGJmLCAweDZkLCAweDg2LCAweGY2LCAweDU0LAorCTB4OTksIDB4ZmMsIDB4NDgsIDB4M2QsIDB4ODQsIDB4ZmIsIDB4YjQsIDB4MjMsIDB4YzUsIDB4OWEsIDB4Y2MsIDB4OWEsCisJMHgyMywgMHg1ZiwgMHg5ZCwgMHg1NCwgMHhjYywgMHg2NSwgMHg0MSwgMHg1OSwgMHhmNSwgMHg2NywgMHg0MiwgMHhiMywKKwkweGM2LCAweGU0LCAweDA1LCAweDIzLCAweDk3LCAweGRlLCAweDY3LCAweGU0LCAweGQyLCAweDk5LCAweGYzLCAweGNiLAorCTB4ZTQsIDB4ZDIsIDB4MjUsIDB4MmQsIDB4OTcsIDB4MGUsIDB4MGEsIDB4ZWUsIDB4NzMsIDB4OTcsIDB4MjAsIDB4OTcsCisJMHg1ZSwgMHhjMCwgMHhiMywgMHhhNywgMHhlNSwgMHg1MiwgMHg0MiwgMHhhYywgMHhiZCwgMHgyYywgMHgzZiwgMHhkMCwKKwkweGUzLCAweGNmLCAweDk2LCAweDVkLCAweDZkLCAweDU3LCAweDE1LCAweGE3LCAweDYxLCAweDkzLCAweDk0LCAweDI3LAorCTB4YWMsIDB4ZmUsIDB4OTYsIDB4NGMsIDB4YWIsIDB4NzQsIDB4ZjUsIDB4ZmYsIDB4NTAsIDB4MjIsIDB4OWIsIDB4ZjMsCisJMHhjZiwgMHhhZSwgMHhlMCwgMHhmNywgMHg0NiwgMHg5ZiwgMHg1MywgMHg5NCwgMHg2MSwgMHhhZiwgMHg0MiwgMHg4NiwKKwkweDg5LCAweDVhLCAweDViLCAweDg2LCAweGUxLCAweDVkLCAweDA1LCAweGVmLCAweDJhLCAweGVjLCAweGY3LCAweDZmLAorCTB4N2YsIDB4MzgsIDB4ZTIsIDB4NTEsIDB4N2UsIDB4NTAsIDB4NjYsIDB4NDAsIDB4MjYsIDB4OTUsIDB4MjEsIDB4OTMsCisJMHhjYSwgMHg5MCwgMHg1MywgMHg2NSwgMHhjOCwgMHgyNSwgMHhkOCwgMHg2YywgMHhlNywgMHhjYiwgMHg5MCwgMHg0YiwKKwkweDY1LCAweGM4LCAweDI1LCAweGM4LCAweGI4LCAweGM3LCAweDIwLCAweGUzLCAweDhjLCAweDRjLCAweDFiLCAweDg2LAorCTB4NGMsIDB4M2IsIDB4MjMsIDB4ZjcsIDB4NTksIDB4NWQsIDB4NmYsIDB4NjIsIDB4MjUsIDB4YmQsIDB4ZDYsIDB4NDcsCisJMHhlYSwgMHhkMywgMHgzMSwgMHhlNCwgMHhmMywgMHg3NSwgMHhiMSwgMHhjMSwgMHgwMywgMHhjNywgMHgzNSwgMHhiZiwKKwkweDdiLCAweGJlLCAweGJhLCAweGNhLCAweDYxLCAweDBlLCAweGNkLCAweGY3LCAweGI1LCAweGZmLCAweGJlLCAweDliLAorCTB4YmYsIDB4YTUsIDB4MDksIDB4N2MsIDB4ZmQsIDB4MWQsIDB4Y2IsIDB4ZDcsIDB4YmIsIDB4OTcsIDB4ZjgsIDB4M2EsCisJMHhlZCwgMHgzMCwgMHg1NiwgMHhiYywgMHgzNiwgMHg1ZiwgMHg2ZiwgMHhiMywgMHhlZiwgMHgwYSwgMHhlMSwgMHgzYSwKKwkweGYwLCAweGY1LCAweGJhLCAweDE1LCAweDdjLCAweDFkLCAweDA3LCAweDVmLCAweGVmLCAweDVmLCAweGM1LCAweGQ3LAorCTB4MWIsIDB4OWMsIDB4MDEsIDB4ZGQsIDB4ODYsIDB4NjcsIDB4MjQsIDB4ZjgsIDB4ZGMsIDB4ZTgsIDB4ZDQsIDB4ZjgsCisJMHhmYSwgMHgxZSwgMHhjZCwgMHhkNywgMHg0NywgMHhjMSwgMHhkNywgMHhkNywgMHhkNywgMHhmMSwgMHhmNSwgMHg3ZSwKKwkweDQ5LCAweGRmLCAweDljLCAweDhiLCAweGVkLCAweDk0LCAweGQxLCAweGZiLCAweDU1LCAweGRiLCAweDY2LCAweGY5LAorCTB4MTcsIDB4MzEsIDB4ZWQsIDB4MGQsIDB4OGYsIDB4MGQsIDB4NGMsIDB4YjUsIDB4NDksIDB4ZmUsIDB4YTEsIDB4NTcsCisJMHg1MCwgMHg0NiwgMHgzZSwgMHg0YiwgMHg4ZiwgMHg2NCwgMHgxZCwgMHg0ZiwgMHg4ZSwgMHgxYywgMHhmZiwgMHhiZSwKKwkweGNjLCAweDZiLCAweGRlLCAweDEyLCAweDE5LCAweDNiLCAweDFlLCAweDk3LCAweGYxLCAweGUzLCAweDhjLCAweDQzLAorCTB4N2MsIDB4Y2YsIDB4ZDIsIDB4N2IsIDB4OTMsIDB4OGMsIDB4MWYsIDB4NjQsIDB4ZGUsIDB4OWMsIDB4MmIsIDB4YTMsCisJMHhjNywgMHhlMSwgMHg2ZiwgMHgxZCwgMHg2NywgMHgxYywgMHhlMiwgMHhhNSwgMHgyNSwgMHgxZSwgMHg5YiwgMHg4NywKKwkweDZjLCAweDE5LCAweDNkLCAweGNlLCAweGI1LCAweDhlLCAweGEzLCAweDlmLCAweDE2LCAweDM5LCAweDdhLCAweDVjLAorCTB4ZTQsIDB4YjYsIDB4ZTMsIDB4YWUsIDB4N2MsIDB4ZTAsIDB4ZjgsIDB4MTIsIDB4YWYsIDB4MGQsIDB4NDcsIDB4YmMsCisJMHhmNiwgMHgwYywgMHg3OCwgMHhhZCwgMHhkMywgMHhmMiwgMHg5YSwgMHg1YSwgMHhlMiwgMHhiNSwgMHhhZiwgMHhkNiwKKwkweGYxLCAweDFhLCAweGRiLCAweDkzLCAweGQ3LCAweDllLCAweGI1LCAweDY1LCAweDdjLCAweDc2LCAweGU1LCAweGQwLAorCTB4ZjEsIDB4NzYsIDB4MTksIDB4N2QsIDB4ZTgsIDB4MmQsIDB4MzIsIDB4NzYsIDB4M2YsIDB4NjEsIDB4MzUsIDB4ZGYsCisJMHg4NSwgMHhhMiwgMHgyZCwgMHgzNiwgMHg1ZCwgMHhlZCwgMHg0NCwgMHhmZiwgMHg1MSwgMHgwZSwgMHgxMSwgMHg3MSwKKwkweGVkLCAweDc3LCAweGNmLCAweDQ4LCAweGJhLCAweGMwLCAweGYxLCAweDFhLCAweGUxLCAweDQ3LCAweDlmLCAweDgyLAorCTB4N2YsIDB4NzEsIDB4MDgsIDB4MzAsIDB4ZGQsIDB4NzIsIDB4NWMsIDB4ZDIsIDB4YWUsIDB4YmMsIDB4MmMsIDB4MTMsCisJMHhjMSwgMHhlOSwgMHhlZCwgMHhjNiwgMHg5ZSwgMHg4MCwgMHgyZCwgMHhhMiwgMHg2ZCwgMHg5ZiwgMHhhYywgMHhlNCwKKwkweGRmLCAweDFlLCAweDZhLCAweDFmLCAweDYzLCAweGIyLCAweDIyLCAweDhjLCAweDA1LCAweDMwLCAweDZlLCAweDZlLAorCTB4YmYsIDB4ODUsIDB4Y2EsIDB4ZmMsIDB4YzcsIDB4MDYsIDB4N2QsIDB4ZTYsIDB4NDUsIDB4YzcsIDB4NmMsIDB4ZmIsCisJMHhmOCwgMHg5ZSwgMHhjZiwgMHhiMCwgMHg2NywgMHhmNCwgMHhkOSwgMHg0NSwgMHhiNiwgMHg2NywgMHgzZiwgMHgwOSwKKwkweDFkLCAweDUzLCAweDJmLCAweDU2LCAweGY4LCAweDRkLCAweDFjLCAweGY4LCAweDlmLCAweDE1LCAweDdlLCAweDViLAorCTB4ZWIsIDB4MzcsIDB4ZGIsIDB4NGMsIDB4N2MsIDB4OTYsIDB4N2MsIDB4ZjcsIDB4NWQsIDB4MjcsIDB4NWYsIDB4OWEsCisJMHhkMywgMHhkZiwgMHgzOCwgMHhjOCwgMHhmOSwgMHhmOCwgMHg1ZCwgMHhlMSwgMHgzMywgMHhlYiwgMHhjZiwgMHgzMSwKKwkweGRlLCAweDkxLCAweDRhLCAweGE5LCAweDYzLCAweGRiLCAweDk5LCAweDdiLCAweDcwLCAweDcwLCAweDhlLCAweDc1LAorCTB4NzcsIDB4NWEsIDB4MWUsIDB4ZGQsIDB4YTksIDB4ZmQsIDB4MGUsIDB4ZGEsIDB4NTgsIDB4YTMsIDB4OTMsIDB4MmYsCisJMHg0OCwgMHg5MSwgMHhiNiwgMHhjOSwgMHhmMCwgMHg0ZSwgMHhhNywgMHgzMCwgMHhmZCwgMHg3MywgMHhkYiwgMHg4ZCwKKwkweGZkLCAweDNjLCAweGIwLCAweDk1LCAweDc5LCAweDg3LCAweDU5LCAweGI1LCAweDVhLCAweDI2LCAweDlmLCAweDkyLAorCTB4NDgsIDB4MjYsIDB4YTcsIDB4NmYsIDB4Y2UsIDB4YzIsIDB4Y2UsIDB4Y2UsIDB4MWYsIDB4ZDcsIDB4ZGYsIDB4YWIsCisJMHg0YSwgMHg3NSwgMHgyYSwgMHhjZSwgMHhlOSwgMHg0ZSwgMHhjOCwgMHhkNywgMHg4OCwgMHgxNiwgMHg5MiwgMHhmMiwKKwkweGQxLCAweGUzLCAweGE0LCAweDA3LCAweDk1LCAweGQ4LCAweDI4LCAweDFmLCAweGIxLCAweGY0LCAweDcwLCAweDQ2LAorCTB4NGEsIDB4OTAsIDB4M2IsIDB4YzcsIDB4OGYsIDB4N2YsIDB4NDAsIDB4YTYsIDB4MGYsIDB4YWMsIDB4YTQsIDB4ODcsCisJMHhiMSwgMHgxYSwgMHgzZCwgMHgyNCwgMHg2MCwgMHg5ZiwgMHgzOSwgMHhmNSwgMHhmNCwgMHhmMCwgMHhmMywgMHg0YiwKKwkweGY0LCAweDMwLCAweGVkLCAweGZjLCAweDZiLCAweGU5LCAweGUxLCAweDg2LCAweDY1LCAweGY0LCAweDMwLCAweGExLAorCTB4ZTksIDB4NjEsIDB4NjgsIDB4ODksIDB4MWUsIDB4MjYsIDB4OGUsIDB4NzMsIDB4NWMsIDB4YmQsIDB4MzcsIDB4ZWEsCisJMHgyZCwgMHgzOCwgMHg1YywgMHhmMywgMHgyNSwgMHg1YSwgMHg0OCwgMHg4ZCwgMHhlYiwgMHg3YywgMHhmZCwgMHg3NCwKKwkweDgxLCAweGU3LCAweDliLCAweDM2LCAweDI4LCAweGM2LCAweDQ5LCAweDZhLCAweGViLCAweGJmLCAweGYxLCAweGRmLAorCTB4NzQsIDB4ZmQsIDB4YWYsIDB4ZGEsIDB4ZmEsIDB4ZmYsIDB4NzcsIDB4ZmQsIDB4MzMsIDB4NWIsIDB4OTksIDB4YmIsCisJMHhjZiwgMHgzMywgMHhiMCwgMHg0NiwgMHgxZSwgMHg0NywgMHhmNCwgMHg5MCwgMHhkYiwgMHg2YSwgMHhmNCwgMHgwMiwKKwkweGQ3LCAweDk4LCAweGNmLCAweDkwLCAweDY3LCAweDkwLCAweDdmLCAweGU3LCAweDIxLCAweGZmLCAweDllLCAweDgwLAorCTB4ZmMsIDB4N2IsIDB4N2MsIDB4ZDksIDB4OWUsIDB4NDAsIDB4YmYsIDB4OGQsIDB4NDcsIDB4ODQsIDB4NzIsIDB4MjQsCisJMHhhOCwgMHhlMSwgMHg2MywgMHhhMSwgMHg4ZiwgMHhmOCwgMHgzMCwgMHhmOSwgMHgyNywgMHhjYywgMHhmZCwgMHg1ZCwKKwkweDhlLCAweDEzLCAweDU3LCAweGU3LCAweDFjLCAweDNkLCAweDFhLCAweGQ0LCAweGUzLCAweDg0LCAweDcwLCAweGJmLAorCTB4NWMsIDB4MzcsIDB4NDcsIDB4ZmMsIDB4YWUsIDB4ZjAsIDB4ZjksIDB4OGMsIDB4Y2UsIDB4MjMsIDB4MjksIDB4ZWEsCisJMHgzZCwgMHgyOCwgMHhlMiwgMHg4NSwgMHg3YiwgMHg1MCwgMHhjNCwgMHg4OSwgMHhhYiwgMHhlZCwgMHhmZCwgMHg2MiwKKwkweGE1LCAweDQ5LCAweGU3LCAweGQwLCAweDFmLCAweDllLCAweDRiLCAweGM4LCAweDQyLCAweDgyLCAweDMxLCAweDNlLAorCTB4N2UsIDB4ZTcsIDB4OTAsIDB4N2UsIDB4YjMsIDB4OWYsIDB4MmMsIDB4NGEsIDB4ODEsIDB4YjksIDB4NzIsIDB4ZTAsCisJMHhlOSwgMHgwZCwgMHg5NiwgMHhiNiwgMHgxOSwgMHgxYiwgMHhlNCwgMHgxOSwgMHhlMCwgMHg2OCwgMHgyZiwgMHhhMiwKKwkweGRiLCAweGNhLCAweGJhLCAweDk2LCAweGJhLCAweDk4LCAweDI1LCAweGYwLCAweDNlLCAweDI1LCAweGE5LCAweDVjLAorCTB4MWYsIDB4ZWUsIDB4NzMsIDB4MWMsIDB4ZmIsIDB4MTMsIDB4MzIsIDB4ZjEsIDB4ZTAsIDB4ODcsIDB4NjEsIDB4Y2IsCisJMHhiZCwgMHgxZiwgMHgzYSwgMHg4NywgMHhlNywgMHhjZiwgMHhiOCwgMHhmNywgMHhlMCwgMHg2OSwgMHgxOCwgMHg2NiwKKwkweGY0LCAweDc3LCAweGFjLCAweGU4LCAweDAzLCAweDkyLCAweDFlLCAweDkyLCAweDc4LCAweDNlLCAweDYzLCAweGUzLAorCTB4NGEsIDB4NDksIDB4MjksIDB4OTYsIDB4NWUsIDB4OTQsIDB4N2MsIDB4ODUsIDB4ZGYsIDB4NWMsIDB4N2IsIDB4MDksCisJMHhmNywgMHhkNywgMHg1YiwgMHgwZiwgMHhlMywgMHg4NywgMHgwYywgMHhlYiwgMHgzYiwgMHhkNywgMHg2NiwgMHg1MSwKKwkweGIyLCAweDE1LCAweDkzLCAweGUzLCAweDUyLCAweDhiLCAweDliLCAweDljLCAweDkxLCAweDYzLCAweGRhLCAweDdlLAorCTB4Y2UsIDB4ZDgsIDB4ZGMsIDB4OTYsIDB4ZjQsIDB4NzAsIDB4NDEsIDB4OGMsIDB4MGQsIDB4ZmQsIDB4MzksIDB4ZDgsCisJMHhkMCwgMHg5ZiwgMHhhZCwgMHg2NiwgMHhmNSwgMHgzZSwgMHhkNiwgMHhlMywgMHhiMCwgMHhhMSwgMHgxZiwgMHg4MywKKwkweGVlLCAweGExLCAweGNlLCAweDQ5LCAweDU4LCAweDlkLCAweDMzLCAweGExLCAweDBlLCAweDY4LCAweDlkLCAweGYzLAorCTB4ZTcsIDB4NWEsIDB4ZTcsIDB4YmMsIDB4N2IsIDB4OTUsIDB4Y2UsIDB4MzksIDB4YWEsIDB4M2EsIDB4MjcsIDB4YTksCisJMHg3MywgMHgwNiwgMHhkNCwgMHg3ZSwgMHg4NywgMHhmNiwgMHhlMiwgMHg5NiwgMHgzNSwgMHg3NCwgMHhjZSwgMHg3YiwKKwkweGU0LCAweDFkLCAweGY2LCAweGRkLCAweDNkLCAweGYyLCAweGRlLCAweDNkLCAweDdhLCAweGVmLCAweGM2LCAweDliLAorCTB4NTEsIDB4ZmMsIDB4NzYsIDB4OTMsIDB4ZDEsIDB4NDEsIDB4ZDcsIDB4YWIsIDB4NmUsIDB4YmQsIDB4ZTcsIDB4ZmIsCisJMHg5NSwgMHgzYSwgMHg5ZCwgMHhkMywgMHhhMSwgMHhmYSwgMHg5YywgMHgwMSwgMHhkZCwgMHg4NiwgMHhiMSwgMHgwOSwKKwkweDNlLCAweDA3LCAweDRlLCAweDc2LCAweGI4LCAweDA5LCAweGNmLCAweDQ5LCAweDg5LCAweDFkLCAweGM3LCAweGRjLAorCTB4Y2QsIDB4ZjcsIDB4YTUsIDB4OTQsIDB4NzksIDB4ZjcsIDB4NTYsIDB4ZmIsIDB4NGUsIDB4NDUsIDB4ZTUsIDB4YWUsCisJMHgyOSwgMHhlZiwgMHhiNCwgMHhlNSwgMHg0NiwgMHg1NywgMHg3NSwgMHhhOCwgMHg3NiwgMHhhZCwgMHhhYiwgMHg3NiwKKwkweDgzLCAweGExLCAweDY2LCAweGEwLCAweDVmLCAweDY3LCAweGNhLCAweDkxLCAweGNlLCAweGUyLCAweDZmLCAweGM2LAorCTB4OWUsIDB4MTksIDB4YTMsIDB4ODgsIDB4NjIsIDB4ZDgsIDB4MjksIDB4ZDQsIDB4YzEsIDB4NTUsIDB4OGUsIDB4NmMsCisJMHg0YSwgMHhmZSwgMHg4NiwgMHhhZiwgMHg4MCwgMHg2YiwgMHgwZSwgMHg3OCwgMHhiZCwgMHgxOSwgMHhmYywgMHhmMywKKwkweDFmLCAweDRhLCAweDhjLCAweDgxLCAweGI2LCAweGM5LCAweDg5LCAweGE5LCAweGZhLCAweDc3LCAweGVkLCAweGYyLAorCTB4YWUsIDB4YTksIDB4MWQsIDB4NzIsIDB4ZmIsIDB4ZTQsIDB4ZDYsIDB4YTQsIDB4MzQsIDB4ZWYsIDB4OTQsIDB4ODksCisJMHhjOSwgMHgyOSwgMHg3ZCwgMHhmZSwgMHg3ZCwgMHhiMywgMHhmZSwgMHgyZSwgMHgwOCwgMHhiZiwgMHg5NywgMHg2MywKKwkweDY0LCAweGU0LCAweDkwLCAweDYzLCAweDY0LCAweDY0LCAweDU2LCAweGQ1LCAweDZjLCAweGQ2LCAweGE4LCAweDRmLAorCTB4N2UsIDB4OGIsIDB4NjQsIDB4NzAsIDB4MzIsIDB4YTksIDB4YmYsIDB4YTUsIDB4M2EsIDB4NTMsIDB4YmQsIDB4NGEsCisJMHg3ZSwgMHhmYiwgMHhhNCwgMHhiYSwgMHg0YiwgMHhkNSwgMHhjZSwgMHhmNywgMHg2YSwgMHg5YiwgMHg3NSwgMHg3NiwKKwkweDk5LCAweGNkLCAweGZhLCAweGJmLCAweDY0LCAweGUxLCAweGJkLCAweDcxLCAweGNjLCAweDEzLCAweDM0LCAweDdjLAorCTB4ZjUsIDB4YjcsIDB4YjgsIDB4MTcsIDB4ZGEsIDB4OTYsIDB4OTAsIDB4MTcsIDB4NjUsIDB4NTAsIDB4ZTMsIDB4OGYsCisJMHhmMiwgMHhiNCwgMHgwNSwgMHg3MiwgMHg3MCwgMHg1MSwgMHhlYiwgMHhkNywgMHgyZCwgMHhhMCwgMHg0MSwgMHhjYSwKKwkweGQyLCAweDBmLCAweGNhLCAweDBiLCAweDVhLCAweDllLCAweDZkLCAweGIxLCAweGI2LCAweGViLCAweDNjLCAweGJmLAorCTB4NmQsIDB4N2QsIDB4OWMsIDB4YjYsIDB4ZWIsIDB4OWYsIDB4ZGIsIDB4NzIsIDB4OTYsIDB4YTUsIDB4OTMsIDB4OGIsCisJMHg0MiwgMHg3ZCwgMHg5NywgMHg4MCwgMHgwYywgMHhhNSwgMHgzYywgMHg3ZCwgMHhhMywgMHhiNiwgMHhlYiwgMHg5NywKKwkweDZjLCAweDFmLCAweDk0LCAweDlmLCAweDQ2LCAweDc2LCAweGVmLCAweDc2LCAweGU2LCAweDZkLCAweDE5LCAweDlmLAorCTB4YTMsIDB4NzgsIDB4YmEsIDB4OWYsIDB4Y2QsIDB4NWIsIDB4M2UsIDB4NTMsIDB4Y2UsIDB4ZTcsIDB4ZjEsIDB4N2UsCisJMHgzMywgMHhkZSwgMHg5MywgMHhjZiwgMHgxZSwgMHhkNywgMHg3YywgMHhhNiwgMHhlZCwgMHgxMywgMHhhNywgMHhkNywKKwkweGVlLCAweDJmLCAweDJjLCAweGVkLCAweDBkLCAweDE0LCAweGM4LCAweDY3LCAweGVhLCAweDg0LCAweDM3LCAweDZmLAorCTB4ZTQsIDB4MDEsIDB4ZjMsIDB4NTQsIDB4N2YsIDB4MDMsIDB4YmEsIDB4ODMsIDB4NmQsIDB4NTEsIDB4ZmUsIDB4NzAsCisJMHg5NiwgMHhiZSwgMHgyZCwgMHhmYywgMHg5ZiwgMHg4ZCwgMHg3OCwgMHg2ZSwgMHhjMywgMHhmMywgMHg4YywgMHhiYywKKwkweGZiLCAweDYwLCAweDVjLCAweGNmLCAweDdiLCAweDAyLCAweGYzLCAweDM4LCAweDdjLCAweDFjLCAweDczLCAweDcyLAorCTB4OGMsIDB4ZWQsIDB4ZWMsIDB4OWUsIDB4NzUsIDB4YTUsIDB4ZTEsIDB4MmMsIDB4ZjksIDB4OGUsIDB4NjcsIDB4NmQsCisJMHhjMiwgMHhmMCwgMHg1MCwgMHgyZiwgMHhlOSwgMHgzNiwgMHhlZCwgMHgwZCwgMHhlOSwgMHhiMywgMHhhNSwgMHhiYiwKKwkweDkzLCAweDMxLCAweGUwLCAweGU0LCAweDMwLCAweGQ2LCAweDYzLCAweGEyLCAweGU0LCAweDdiLCAweDM5LCAweGM3LAorCTB4NGYsIDB4NjIsIDB4OWUsIDB4YjAsIDB4MDEsIDB4M2IsIDB4NjEsIDB4MGIsIDB4NzYsIDB4YzIsIDB4MGUsIDB4ZWMsCisJMHg4NCwgMHgxZCwgMHhiOCwgMHg0OSwgMHg0ZSwgMHg1ZCwgMHhjMywgMHgxYywgMHg5MywgMHhjMiwgMHg3NSwgMHhmMCwKKwkweGNhLCAweGU1LCAweGFmLCAweDc1LCAweDljLCAweGJlLCAweGYxLCAweGU2LCAweDQxLCAweGY4LCAweGVjLCAweGUyLAorCTB4YTUsIDB4ODcsIDB4OTksIDB4ODcsIDB4YmYsIDB4ZTgsIDB4MzUsIDB4ZGUsIDB4M2MsIDB4MjQsIDB4OWQsIDB4ZmQsCisJMHg3OCwgMHhkZiwgMHhmZiwgMHhhMiwgMHg3NCwgMHhkZCwgMHg3YywgMHhhYiwgMHhkMywgMHgzOCwgMHgzYywgMHgwOCwKKwkweDNjLCAweDY2LCAweDlkLCAweDc0LCAweDcyLCAweGM0LCAweDk5LCAweGM3LCAweDM4LCAweGI5LCAweGRkLCAweDMxLAorCTB4NjEsIDB4ZGMsIDB4NzIsIDB4OWUsIDB4YjEsIDB4ODgsIDB4OWIsIDB4M2IsIDB4NjMsIDB4M2QsIDB4YTksIDB4NTEsCisJMHgyNywgMHgzZCwgMHhhYywgMHg2MiwgMHhlOSwgMHhlMSwgMHg0MSwgMHgyNywgMHhhYSwgMHhjNywgMHg2ZiwgMHhhZSwKKwkweDQyLCAweGNlLCAweDAwLCAweGQ2LCAweGMzLCAweGU1LCAweDRmLCAweDgzLCAweDllLCAweDhlLCAweDQ4LCAweGYxLAorCTB4NjQsIDB4OGIsIDB4Y2MsIDB4OTUsIDB4M2EsIDB4YmQsIDB4OWMsIDB4NGEsIDB4ZTgsIDB4ZGMsIDB4MTIsIDB4NzUsCisJMHgwYSwgMHg0NCwgMHg3ZiwgMHgzNiwgMHgyZSwgMHgzMywgMHg5MywgMHgzYiwgMHg0NSwgMHg2OSwgMHhkYiwgMHg3ZCwKKwkweDliLCAweGU0LCAweGE2LCAweDI2LCAweGU1LCAweDYyLCAweDlmLCAweGI0LCAweDJhLCAweGY0LCAweGNmLCAweDZmLAorCTB4ZGMsIDB4YWEsIDB4NTMsIDB4ZGMsIDB4NGIsIDB4OGMsIDB4NzgsIDB4NjEsIDB4M2IsIDB4ZjksIDB4NjQsIDB4MTIsCisJMHgzOCwgMHgwNCwgMHhkZCwgMHgzMiwgMHhjNiwgMHhkYiwgMHgyNCwgMHg5NCwgMHg3YiwgMHgxZiwgMHhkMCwgMHhmMSwKKwkweDUzLCAweGM2LCAweDZjLCAweGViLCAweGY3LCAweDFlLCAweGM4LCAweDFmLCAweGYxLCAweDM1LCAweGY5LCAweDYzLAorCTB4YjYsIDB4Y2MsIDB4N2QsIDB4MWEsIDB4MjksIDB4YjgsIDB4OGMsIDB4MTEsIDB4ZmIsIDB4ZjgsIDB4M2QsIDB4Y2QsCisJMHhiYSwgMHg0ZCwgMHgzMiwgMHhkMSwgMHg1NywgMHhiMCwgMHg3OSwgMHgxZSwgMHg3ZiwgMHg5ZSwgMHg2NCwgMHgwZSwKKwkweDMxLCAweDcxLCAweDMyLCAweGRhLCAweDQ3LCAweDVlLCAweDVmLCAweGI5LCAweGI3LCAweDExLCAweGFmLCAweDkzLAorCTB4MDcsIDB4OGUsIDB4MmMsIDB4NGMsIDB4NDYsIDB4N2IsIDB4MjEsIDB4ZWMsIDB4MGYsIDB4Y2YsIDB4ZDMsIDB4NDYsCisJMHhkZSwgMHhlNiwgMHg1NiwgMHhiNSwgMHgyMywgMHg1YywgMHhkYywgMHhhZiwgMHg1YywgMHgyZSwgMHg2MywgMHg5NSwKKwkweDRmLCAweDk5LCAweGVhLCAweDY5LCAweGY5LCAweDdhLCAweGE2LCAweDZhLCAweDY0LCAweGViLCAweDc0LCAweDM1LAorCTB4ZDIsIDB4MmQsIDB4NzEsIDB4YTMsIDB4NGIsIDB4NTcsIDB4ZTksIDB4MTMsIDB4MTMsIDB4Y2QsIDB4YWMsIDB4ZTksCisJMHgxMywgMHhlYSwgMHg0NSwgMHgyNSwgMHhlZiwgMHg5YiwgMHhkYiwgMHgyNiwgMHhlZSwgMHhjMywgMHhiMiwgMHgzOCwKKwkweGUxLCAweDdmLCAweDdhLCAweDNiLCAweDczLCAweDM1LCAweDI2LCAweDgyLCAweDM3LCAweGEzLCAweDFmLCAweDliLAorCTB4YWUsIDB4YTQsIDB4M2UsIDB4MWMsIDB4NTEsIDB4OGQsIDB4YjgsIDB4NmYsIDB4ZDYsIDB4ZjQsIDB4MDcsIDB4OWUsCisJMHhjMiwgMHhiMywgMHhmMSwgMHgxMywgMHgzZSwgMHgwNywgMHgzZiwgMHhlMSwgMHhiMywgMHhkMCwgMHg3NSwgMHhlNywKKwkweGUxLCAweDI3LCAweDNjLCAweDAxLCAweDNmLCAweGUxLCAweDcxLCAweGY4LCAweDA5LCAweDhmLCAweDQxLCAweDRmLAorCTB4ZDYsIDB4ZmIsIDB4MDcsIDB4ZTMsIDB4Y2IsIDB4ZmMsIDB4ODMsIDB4NTAsIDB4ZjMsIDB4M2YsIDB4ZTMsIDB4ODEsCisJMHg0ZiwgMHhkNCwgMHhmOSwgMHgwNiwgMHg4NywgMHg4YywgMHhiZSwgMHg4MiwgMHhkZiwgMHg2ZiwgMHhmOCwgMHhhOCwKKwkweDQzLCAweGRkLCAweGE0LCAweGY1LCAweGEzLCAweGM5LCAweGRiLCAweDFkLCAweDVlLCAweGQyLCAweDU3LCAweDFkLAorCTB4Y2EsIDB4ZTgsIDB4YWIsIDB4OTksIDB4OWEsIDB4YmUsIDB4MzIsIDB4N2MsIDB4ZjQsIDB4ZjAsIDB4YTQsIDB4YzQsCisJMHhmYywgMHhjOSwgMHhmOSwgMHg1YywgMHhiMCwgMHg1NywgMHhmMywgMHg1MCwgMHhhYiwgMHhiZiwgMHg1MywgMHg2MiwKKwkweDBmLCAweGE4LCAweGI2LCAweDA2LCAweGM5LCAweGQ5LCAweDY3LCAweGQwLCAweGQ3LCAweDg5LCAweDRmLCAweGEzLAorCTB4YWYsIDB4ZWIsIDB4MjQsIDB4YWYsIDB4ZWQsIDB4YjMsIDB4Y2IsIDB4ZTMsIDB4ZmIsIDB4YjEsIDB4MTUsIDB4ZjgsCisJMHgyZSwgMHg5NiwgMHgyNywgMHgzNCwgMHhjZSwgMHhlZiwgMHhhZiwgMHg3MCwgMHg5ZiwgMHhhNSwgMHg0NSwgMHhjNiwKKwkweDJiLCAweDExLCAweGNlLCAweDc5LCAweDllLCAweDk1LCAweGI5LCAweDE4LCAweGVkLCAweDEyLCAweDdiLCAweDc4LAorCTB4MWIsIDB4Y2YsIDB4NTksIDB4YTksIDB4N2MsIDB4YjAsIDB4NWUsIDB4ZTcsIDB4YjAsIDB4OWMsIDB4ZWEsIDB4OTMsCisJMHg2NCwgMHhiZSwgMHg4ZiwgMHhiNCwgMHg3YSwgMHg5ZiwgMHhjYywgMHhlOCwgMHhiNSwgMHhkOCwgMHgyNiwgMHgwZCwKKwkweDBmLCAweGQzLCAweDQ2LCAweDg5LCAweGY2LCAweGYzLCAweGRlLCAweDdmLCAweGE1LCAweGZkLCAweGU2LCAweDZhLAorCTB4ZGMsIDB4ZDQsIDB4MTMsIDB4MzksIDB4YTIsIDB4ZDcsIDB4NmIsIDB4NWEsIDB4ZTcsIDB4MTksIDB4ZGUsIDB4MzQsCisJMHhjNywgMHhiOCwgMHgzYywgMHhiZiwgMHg2ZiwgMHhjNSwgMHg5OCwgMHhmYywgMHhiZiwgMHg2NiwgMHhmZCwgMHg3ZSwKKwkweGY5LCAweDRhLCAweDYzLCAweGNmLCAweDZjLCAweGI2LCAweDc2LCAweDhjLCAweDg5LCAweDUzLCAweGFkLCAweDZkLAorCTB4YzMsIDB4YjAsIDB4OWYsIDB4ZmEsIDB4NmYsIDB4MzIsIDB4ZWUsIDB4NzAsIDB4YzYsIDB4MjcsIDB4NzcsIDB4M2EsCisJMHhjNSwgMHg0OSwgMHhlZSwgMHg2NSwgMHhkYiwgMHhiZiwgMHhkMSwgMHhlMSwgMHhlZCwgMHg3NywgMHgwZSwgMHhmYiwKKwkweDNiLCAweDUwLCAweGM2LCAweDk4LCAweDI1LCAweDYzLCAweDM2LCAweGY3LCAweDVmLCAweGM5LCAweDE4LCAweDZkLAorCTB4Y2UsIDB4ZTcsIDB4ZDgsIDB4MmMsIDB4ZGIsIDB4ZTEsIDB4NGMsIDB4NGMsIDB4NzYsIDB4YzIsIDB4MzcsIDB4ZTcsCisJMHhiOSwgMHgyYSwgMHhiZSwgMHgxZiwgMHhlMiwgMHhkYSwgMHg0MSwgMHgwNywgMHg3YiwgMHhmYSwgMHhjYywgMHhlZSwKKwkweDk4LCAweDVjLCAweDY1LCAweDYzLCAweGQwLCAweGQ0LCAweGMzLCAweDNmLCAweGJkLCAweDZjLCAweGVmLCAweGY2LAorCTB4MjgsIDB4ZjQsIDB4ZDgsIDB4MmQsIDB4OTAsIDB4NDcsIDB4ZDQsIDB4YzMsIDB4NDcsIDB4ZTUsIDB4NmQsIDB4OTYsCisJMHg5ZSwgMHg5NywgMHhlYiwgMHhlMSwgMHg0YiwgMHhjMiwgMHgzOCwgMHg3MSwgMHgyZiwgMHhkZSwgMHgxNSwgMHhjMiwKKwkweDM4LCAweGU4LCAweGUxLCAweDU4LCAweDlkLCAweGFmLCAweDQ2LCAweGJmLCAweGFmLCAweDI5LCAweDYzLCAweGY2LAorCTB4YzMsIDB4OTYsIDB4ZmIsIDB4N2QsIDB4OTAsIDB4MDMsIDB4ODksIDB4YzgsIDB4Y2YsIDB4NmIsIDB4NWMsIDB4ZGEsCisJMHhhZiwgMHhkZCwgMHg2ZiwgMHhkYiwgMHg0ZSwgMHgwNCwgMHg3ZiwgMHg0NCwgMHgxYywgMHhhNSwgMHg4ZSwgMHhjYSwKKwkweDJmLCAweDQyLCAweGE3LCAweDMxLCAweDA3LCAweGU0LCAweDJmLCAweDM0LCAweGNlLCAweDQ0LCAweDkxLCAweGY2LAorCTB4MzYsIDB4NmIsIDB4MTgsIDB4YWQsIDB4OWMsIDB4NGYsIDB4NDUsIDB4MzksIDB4MWMsIDB4NDUsIDB4ZGIsIDB4NzYsCisJMHhjYywgMHhlZSwgMHhjOSwgMHgxNywgMHhlNSwgMHhlYiwgMHg4YywgMHg3MywgMHhhNiwgMHgwNiwgMHg2MywgMHhlYiwKKwkweGY5LCAweDNkLCAweDQ2LCAweGI0LCAweGZkLCAweDQ1LCAweGVkLCAweGI3LCAweDY3LCAweDI1LCAweGVhLCAweDhiLAorCTB4Y2YsIDB4MGQsIDB4NzUsIDB4N2QsIDB4ZDMsIDB4OGUsIDB4ZTIsIDB4N2QsIDB4ZTUsIDB4MzksIDB4YjIsIDB4YTcsCisJMHhmNSwgMHgzZSwgMHhhMywgMHhmOSwgMHg1ZSwgMHg0MiwgMHhjNCwgMHgyNywgMHhlNCwgMHg5ZCwgMHg5NCwgMHgzZSwKKwkweGViLCAweGU0LCAweDNmLCAweDRjLCAweGJiLCAweDg3LCAweDdiLCAweGIwLCAweGRlLCAweGZjLCAweDc4LCAweGYwLAorCTB4MTEsIDB4ZmQsIDB4Y2QsIDB4YzAsIDB4NjksIDB4MTEsIDB4YTcsIDB4MTgsIDB4ZGMsIDB4YTYsIDB4NzMsIDB4NGYsCisJMHg4YSwgMHgzYSwgMHhkNiwgMHg1YywgMHhjMCwgMHhiZCwgMHhlNiwgMHhhMywgMHg3NiwgMHgzYywgMHhjYywgMHhiZiwKKwkweGMzLCAweGMxLCAweGIyLCAweDNjLCAweDYwLCAweGEzLCAweDBlLCAweGExLCAweGVjLCAweDRkLCAweDQ4LCAweGM3LAorCTB4ODksIDB4NWYsIDB4ZDAsIDB4YmMsIDB4YjAsIDB4MDUsIDB4YmUsIDB4YzAsIDB4YzAsIDB4MDksIDB4ZTgsIDB4ZWEsCisJMHgxMywgMHg0OSwgMHgxOSwgMHgzYSwgMHhhMSwgMHg3NSwgMHg2MywgMHg3NiwgMHg3NSwgMHhhYywgMHhhMCwgMHhjNywKKwkweDczLCAweDlkLCAweDc3LCAweGU5LCAweDczLCAweDZjLCAweDZmLCAweDNkLCAweDExLCAweDkzLCAweDYzLCAweDg5LAorCTB4MWUsIDB4YWYsIDB4Y2IsIDB4NzksIDB4YjcsIDB4ZDUsIDB4ODUsIDB4NTEsIDB4MGMsIDB4YmIsIDB4MDUsIDB4ZWQsCisJMHg1ZiwgMHgyZiwgMHg4ZSwgMHgxZCwgMHhjNSwgMHhhZiwgMHg2MywgMHgzMiwgMHg3ZCwgMHhiMCwgMHgxZCwgMHhiMCwKKwkweDc1LCAweDZlLCAweDMzLCAweDY3LCAweDkwLCAweGIxLCAweDU2LCAweGZhLCAweDFiLCAweGY3LCAweDZlLCAweDkyLAorCTB4YjIsIDB4YWMsIDB4MDMsIDB4YjAsIDB4MGMsIDB4OWUsIDB4YTAsIDB4M2UsIDB4ZjMsIDB4MzUsIDB4OGYsIDB4MDMsCisJMHgwNiwgMHhhZiwgMHg0MSwgMHhmYiwgMHgyMSwgMHhlNCwgMHhjYiwgMHhiNywgMHg4OCwgMHhmZiwgMHgwMCwgMHg2NCwKKwkweGRjLCAweDg5LCAweGI4LCAweDc0LCAweDlkLCAweDY4LCAweDkxLCAweDVkLCAweDI3LCAweGU4LCAweDg3LCAweGQ0LAorCTB4ZmIsIDB4YTUsIDB4YjQsIDB4NGIsIDB4ZTcsIDB4MzAsIDB4YzcsIDB4NzcsIDB4NmEsIDB4MzksIDB4YzksIDB4M2QsCisJMHhjZCwgMHhkYiwgMHhjOSwgMHhiYiwgMHhhOCwgMHg5YiwgMHg4NywgMHhjZCwgMHg5YywgMHgzYiwgMHhlMSwgMHhlOSwKKwkweDNkLCAweGQyLCAweDFjLCAweGU2LCAweDljLCAweGFmLCAweDc4LCAweDE4LCAweGM3LCAweGM4LCAweDljLCAweDIyLAorCTB4ZmQsIDB4OTQsIDB4ZTEsIDB4NmQsIDB4YzAsIDB4ZjEsIDB4MzEsIDB4Y2IsIDB4M2IsIDB4NDMsIDB4ZGIsIDB4MmMsCisJMHg4ZiwgMHhmZSwgMHg4OCwgMHhiYywgMHg3NywgMHhmMywgMHgzNiwgMHgyMywgMHgzYiwgMHg3ZiwgMHg3NiwgMHgxYiwKKwkweDczLCAweDkzLCAweGI2LCAweGY4LCAweGJjLCAweDM3LCAweDY5LCAweDdiLCAweGMyLCAweGM4LCAweGQwLCAweGQ3LAorCTB4ZTIsIDB4NDUsIDB4MDEsIDB4OGUsIDB4YTIsIDB4N2QsIDB4MjksIDB4N2QsIDB4OTYsIDB4MmYsIDB4YmMsIDB4MTgsCisJMHhlOCwgMHhmMywgMHgyYiwgMHhjMSwgMHgwMiwgMHhmMywgMHgwOCwgMHhmNSwgMHg3NywgMHgxNCwgMHg2YSwgMHhkZiwKKwkweDViLCAweGQ5LCAweDViLCAweDY1LCAweDljLCAweGZjLCAweDg5LCAweGU4LCAweDZmLCAweGE5LCAweGQ0LCAweGU1LAorCTB4MWQsIDB4ZDYsIDB4ZWYsIDB4ODEsIDB4MzEsIDB4ZDYsIDB4YjQsIDB4OTQsIDB4MWIsIDB4MTQsIDB4NGUsIDB4ZWEsCisJMHhlZiwgMHgyMSwgMHgzZCwgMHhlYiwgMHg1YywgMHgyYSwgMHg1ZCwgMHg3MCwgMHhiZSwgMHgzOSwgMHgyNSwgMHhhMSwKKwkweGViLCAweDdmLCAweGRmLCAweGY5LCAweGI2LCAweGNmLCAweDNkLCAweGYzLCAweDJmLCAweDNiLCAweGRmLCAweDJhLAorCTB4ZjksIDB4ZTAsIDB4YzMsIDB4MGIsIDB4OTgsIDB4YzcsIDB4MmIsIDB4Y2UsIDB4NzcsIDB4YjAsIDB4YmUsIDB4NDcsCisJMHhjYSwgMHhkOSwgMHhiNCwgMHg2NywgMHg2MywgMHhlMiwgMHgxNywgMHg0YSwgMHhhZiwgMHgzOCwgMHg1ZiwgMHhhYSwKKwkweGM1LCAweDkzLCAweGZhLCAweDIzLCAweDFhLCAweDM5LCAweGNhLCAweDc3LCAweDE1LCAweGJjLCAweGFiLCAweGU4LAorCTB4ZmQsIDB4MWYsIDB4NjcsIDB4NzYsIDB4Y2EsIDB4ZTYsIDB4OTcsIDB4NjgsIDB4M2UsIDB4OWUsIDB4NWYsIDB4ZGEsCisJMHg5NywgMHgxOSwgMHhkNiwgMHg3YiwgMHgxNSwgMHhjZiwgMHgzOCwgMHhiMywgMHg3MywgMHg5ZiwgMHhkYiwgMHg2NiwKKwkweGYyLCAweDhjLCAweDJlLCAweGUwLCAweDlkLCAweGM5LCAweGI5LCAweDljLCAweDk5LCAweGJiLCAweDgwLCAweDNhLAorCTB4NGYsIDB4M2IsIDB4MzMsIDB4M2EsIDB4ZmUsIDB4YzUsIDB4NzYsIDB4MTcsIDB4OWMsIDB4ZTksIDB4YjksIDB4YTcsCisJMHg5ZCwgMHgzOSwgMHhiZCwgMHgwNywgMHg3ZCwgMHhkMSwgMHg3OSwgMHg3NCwgMHg4YSwgMHg3ZCwgMHg1ZiwgMHg0NCwKKwkweDlkLCAweDc5LCAweGU3LCAweDE0LCAweGZhLCAweDliLCAweDliLCAweGUyLCAweDc5LCAweGRjLCAweDRlLCAweGQ4LAorCTB4MDUsIDB4ZmMsIDB4MWIsIDB4NDUsIDB4ZmMsIDB4MWUsIDB4YzcsIDB4MzMsIDB4Y2UsIDB4ZGMsIDB4NTIsIDB4YmYsCisJMHgwYiwgMHhlOCwgMHg4NywgMHg3NSwgMHg0OSwgMHg4YiwgMHgxYywgMHhmNywgMHgxOSwgMHhmNCwgMHhiZiwgMHg3YSwKKwkweGFmLCAweDZhLCAweDM1LCAweDRlLCAweDllLCAweDA3LCAweDRlLCAweDVlLCAweGI0LCAweDM4LCAweDc5LCAweGQ1LAorCTB4ZTIsIDB4ZTQsIDB4YjksIDB4M2EsIDB4OWMsIDB4ODgsIDB4NWEsIDB4OGUsIDB4OTMsIDB4NTcsIDB4ODEsIDB4MTMsCisJMHg1MSwgMHg2YiwgMHhlMywgMHgwNCwgMHhlZiwgMHgyYSwgMHg3OCwgMHhhNywgMHg3MSwgMHhmMiwgMHhkMiwgMHgwYSwKKwkweDljLCAweDJjLCAweDJlLCAweGM1LCAweGU1LCAweDBkLCAweDRlLCAweDVlLCAweDAwLCAweDRlLCAweDdlLCAweDYwLAorCTB4NjEsIDB4N2YsIDB4ZDEsIDB4ZTIsIDB4MDQsIDB4ZjcsIDB4YjksIDB4MTcsIDB4NTEsIDB4ZTcsIDB4YTUsIDB4M2EsCisJMHg5YywgMHhiYywgMHgwOCwgMHg5YywgMHhiYywgMHg2NCwgMHg3MSwgMHhmMiwgMHg2ZCwgMHg4YiwgMHg5MywgMHg2ZiwKKwkweGEzLCAweGNlLCAweDIyLCAweDcwLCAweDcyLCAweDY5LCAweDBkLCAweDljLCAweGJjLCAweDAwLCAweDljLCAweDQ0LAorCTB4ZmQsIDB4NWUsIDB4NDIsIDB4M2YsIDB4ZGYsIDB4YWUsIDB4YzMsIDB4YzksIDB4MGIsIDB4NmIsIDB4ZTAsIDB4ODQsCisJMHg3YiwgMHhiMSwgMHg1MSwgMHg0ZSwgMHhmNywgMHg5OSwgMHhkNywgMHhjOSwgMHhlOSwgMHg1ZSwgMHg3YywgMHgwMywKKwkweDM5LCAweGRkLCAweGFjLCAweDczLCAweDQ2LCAweDZhLCAweDdmLCAweGJiLCAweDYyLCAweGMyLCAweGU2LCAweGE4LAorCTB4OTksIDB4NWMsIDB4YzAsIDB4ZGEsIDB4MzcsIDB4OWIsIDB4M2EsIDB4YzEsIDB4ZTcsIDB4YzUsIDB4MDIsIDB4YmMsCisJMHgxMSwgMHg5ZCwgMHg1MywgMHhlYSwgMHhlZSwgMHgxOSwgMHgwMywgMHhhZiwgMHhiZCwgMHg1YiwgMHgwZSwgMHg5ZiwKKwkweDZjLCAweDNjLCAweDk2LCAweGI3LCAweDY1LCAweGZlLCAweDllLCAweGNlLCAweDgyLCAweDUyLCAweDdjLCAweDE3LAorCTB4ZTUsIDB4MjQsIDB4ZDAsIDB4MmYsIDB4NjksIDB4ZTAsIDB4YjcsIDB4MGEsIDB4YmIsIDB4YjMsIDB4NTIsIDB4YmYsCisJMHgyNywgMHgzZCwgMHhjNSwgMHg2ZiwgMHgzNCwgMHg3MSwgMHg3ZiwgMHg4YywgMHg3ZiwgMHg2NywgMHgyMywgMHhjNSwKKwkweDNjLCAweGFiLCAweGEyLCAweDg2LCAweDM3LCAweDBkLCAweGZkLCAweGQxLCAweGFmLCAweDczLCAweGFiLCAweGY4LAorCTB4MzcsIDB4ODIsIDB4NjIsIDB4ZjAsIDB4ZmIsIDB4NDcsIDB4ZmIsIDB4NjgsIDB4MmIsIDB4NjcsIDB4ZWMsIDB4OTksCisJMHhiMCwgMHg0MCwgMHg5ZiwgMHg1MywgMHhhOSwgMHhmMSwgMHg0ZiwgMHhmZCwgMHg3OSwgMHg2OCwgMHhmMiwgMHg1ZCwKKwkweDhkLCAweDZlLCAweDhlLCAweDJjLCAweDdkLCAweDc3LCAweGYwLCAweGI0LCAweDNjLCAweGE1LCAweDYzLCAweGM1LAorCTB4Y2QsIDB4ZmEsIDB4ZWYsIDB4MmIsIDB4OWMsIDB4MDksIDB4NGMsIDB4OGMsIDB4NzYsIDB4NDEsIDB4YzcsIDB4NjgsCisJMHgwNSwgMHhkZSwgMHhmOCwgMHhiOCwgMHg4ZCwgMHhkMywgMHg3NiwgMHhmNSwgMHhiZiwgMHhiNCwgMHgxNCwgMHhhMywKKwkweGFkLCAweGNmLCAweDY3LCAweDMxLCAweGZiLCAweGViLCAweGI5LCAweGM5LCAweDM5LCAweDlkLCAweGEzLCAweDMzLAorCTB4YzgsIDB4ZWYsIDB4NmYsIDB4NDAsIDB4NDYsIDB4OGMsIDB4NGQsIDB4NTcsIDB4NjQsIDB4ZmMsIDB4NDEsIDB4M2UsCisJMHg1MywgMHhiZiwgMHhjNSwgMHhhMCwgMHhjMywgMHgyOCwgMHhjMywgMHgwYiwgMHg5MiwgMHhlYiwgMHg2NywgMHg5OSwKKwkweDY5LCAweDMzLCAweGE4LCAweGZkLCAweGU1LCAweGQzLCAweDMyLCAweGIwLCAweDM0LCAweDNlLCAweGYxLCAweGZiLAorCTB4ODksIDB4YmEsIDB4ZWYsIDB4NjAsIDB4ZDMsIDB4ZTYsIDB4YzksIDB4M2EsIDB4YjksIDB4MmEsIDB4ZGYsIDB4NDcsCisJMHg3YiwgMHhlNCwgMHg5ZiwgMHhiMCwgMHhkZiwgMHgwYSwgMHhlNCwgMHhmYiwgMHhmYSwgMHg2ZiwgMHhiZiwgMHg2YSwKKwkweGQxLCAweDgxLCAweGRmLCAweGZjLCAweGJlLCAweGRhLCAweDg0LCAweDMzLCAweDg4LCAweDM2LCAweGYzLCAweDVlLAorCTB4Y2IsIDB4YjAsIDB4Y2EsIDB4ZGMsIDB4MzgsIDB4Y2MsIDB4NzMsIDB4NzMsIDB4MzMsIDB4YWIsIDB4YmUsIDB4OWQsCisJMHg1ZCwgMHhkMywgMHg4YiwgMHg0NSwgMHhiZCwgMHhhNiwgMHhjYywgMHhjZiwgMHgyYSwgMHg4MCwgMHgxNiwgMHgzNSwKKwkweDZkLCAweDY5LCAweGZhLCAweDNmLCAweGJjLCAweGE0LCAweDJmLCAweGE5LCAweDY3LCAweGNkLCAweGI3LCAweDY3LAorCTB4OGMsIDB4YmUsIDB4NGMsIDB4MjcsIDB4MDcsIDB4MzEsIDB4YmUsIDB4ZmUsIDB4MWIsIDB4MGQsIDB4ZjYsIDB4NWMsCisJMHg2ZiwgMHg3ZSwgMHhlZSwgMHgyZSwgMHhhZCwgMHhlYiwgMHgyNywgMHg4MiwgMHg2YywgMHhjYSwgMHg5NSwgMHgzNSwKKwkweGVhLCAweDRlLCAweGQ2LCAweGQ1LCAweGQ1LCAweGYzLCAweGY2LCAweGU0LCAweGI3LCAweGIwLCAweDM2LCAweGJmLAorCTB4NTEsIDB4YWUsIDB4YzgsIDB4YzAsIDB4ZDQsIDB4NWYsIDB4YzEsIDB4N2YsIDB4NGMsIDB4Y2EsIDB4NmYsIDB4OTYsCisJMHgxZiwgMHgwMSwgMHhiZCwgMHgxNiwgMHhiNiwgMHhkOCwgMHg2ZiwgMHgzNSwgMHhlNSwgMHgwMCwgMHgzNywgMHhiZiwKKwkweGJkLCAweGEyLCAweGYzLCAweDg5LCAweDYzLCAweGJmLCAweDBkLCAweGJhLCAweGY4LCAweGNjLCAweDIzLCAweDFjLAorCTB4MDMsIDB4YjAsIDB4YzQsIDB4NjAsIDB4ZGIsIDB4YzMsIDB4NGUsIDB4OTgsIDB4N2UsIDB4NDQsIDB4ZTcsIDB4Y2UsCisJMHg1ZCwgMHg1ZiwgMHg3OSwgMHg0NCwgMHhjNywgMHgyYywgMHg4NiwgMHgyYSwgMHhlZCwgMHhiMiwgMHhiNywgMHhkMiwKKwkweDIyLCAweGZiLCAweGEwLCAweDE3LCAweGY2LCAweDU1LCAweDdjLCAweDVjLCAweDcxLCAweDc5LCAweDY3LCAweGM1LAorCTB4YWMsIDB4ZDMsIDB4MDcsIDB4MmIsIDB4NWMsIDB4ZWYsIDB4M2QsIDB4MzIsIDB4NzMsIDB4NzIsIDB4ZTUsIDB4ZjcsCisJMHgzZSwgMHhlNywgMHgwYiwgMHhkMSwgMHhkZiwgMHg3MywgMHg1MiwgMHg4YSwgMHhmOSwgMHg2NSwgMHhhNCwgMHgyNSwKKwkweDVjLCAweGU1LCAweGY0LCAweGIxLCAweDc5LCAweDhkLCAweDA3LCAweDY2LCAweGI4LCAweGE2LCAweDI3LCAweDE3LAorCTB4ODUsIDB4NzksIDB4ZmEsIDB4ZmMsIDB4MWIsIDB4NGUsIDB4N2YsIDB4YjksIDB4OWQsIDB4ZTcsIDB4YTYsIDB4ZjksCisJMHgyZCwgMHhhZiwgMHhhMSwgMHg2YSwgMHg5NCwgMHgzNywgMHhiZSwgMHg1NiwgMHhjZSwgMHgzOCwgMHhlYywgMHhmYywKKwkweDNkLCAweDUxLCAweDhlLCAweDVmLCAweDljLCAweDM5LCAweGUzLCAweGQyLCAweDcxLCAweGI2LCAweDA1LCAweGY3LAorCTB4ZWYsIDB4NmUsIDB4ZDcsIDB4NjcsIDB4OWIsIDB4Y2YsIDB4OGEsIDB4MmQsIDB4ZDMsIDB4ZjksIDB4ZTQsIDB4NzgsCisJMHg1ZSwgMHhmOSwgMHhiZCwgMHhiNiwgMHg4OCwgMHgxZiwgMHg2YSwgMHg3ZiwgMHhmNywgMHg0MCwgMHhlNCwgMHhmZiwKKwkweDAyLCAweDA2LCAweDg2LCAweGU1LCAweDBhLCAweGQ0LCAweDZmLCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9DUF9iMDlGd0RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9DUF9iMDlGd1JvZGF0YVsoMHgxMTgvNCkgKyAxXSA9IHsKLQkweDA4MDAwNjFjLCAweDA4MDAwODNjLCAweDA4MDAwNzgwLCAweDA4MDAwN2E4LCAweDA4MDAwN2QwLCAweDA4MDAwN2Y4LAotCTB4MDgwMDA2NTQsIDB4MDgwMDA2NDAsIDB4MDgwMDA4NjQsIDB4MDgwMDA4NjQsIDB4MDgwMDA2NzAsIDB4MDgwMDA2OGMsCi0JMHgwODAwMDY4YywgMHgwODAwMDg2NCwgMHgwODAwMDZhNCwgMHgwODAwMDZiOCwgMHgwODAwMDg2NCwgMHgwODAwMDZjYywKLQkweDA4MDAwODY0LCAweDA4MDAwODY0LCAweDA4MDAwNmUwLCAweDA4MDAwODY0LCAweDA4MDAwODY0LCAweDA4MDAwODY0LAotCTB4MDgwMDA4NjQsIDB4MDgwMDA4NjQsIDB4MDgwMDA4NjQsIDB4MDgwMDA4NjQsIDB4MDgwMDA4NjQsIDB4MDgwMDA4NjQsCi0JMHgwODAwMDg2NCwgMHgwODAwMDZmNCwgMHgwODAwMDg2NCwgMHgwODAwMDcwOCwgMHgwODAwMDcxYywgMHgwODAwMDczMCwKLQkweDA4MDAwODY0LCAweDA4MDAwNzQ0LCAweDA4MDAwNzU4LCAweDA4MDAwNzZjLCAweDA4MDAzMjAwLCAweDA4MDAzMjE4LAotCTB4MDgwMDMyMjgsIDB4MDgwMDMyMzgsIDB4MDgwMDMyNTAsIDB4MDgwMDMyNjgsIDB4MDgwMDMyNzgsIDB4MDgwMDMyODgsCi0JMHgwODAwMzJhOCwgMHgwODAwMzJiOCwgMHgwODAwMzJjOCwgMHgwODAwMzM1OCwgMHgwODAwMzI5OCwgMHgwODAwMzJkOCwKLQkweDA4MDAzMmU4LCAweDA4MDAzMzAwLCAweDA4MDAzMzIwLCAweDA4MDAzMzU4LCAweDA4MDAzMzM4LCAweDA4MDAzMzM4LAotCTB4MDgwMDUwZDQsIDB4MDgwMDUwZDQsIDB4MDgwMDUwZDQsIDB4MDgwMDUwZDQsIDB4MDgwMDUwZDQsIDB4MDgwMDUwZmMsCi0JMHgwODAwNTBmYywgMHgwODAwNTEyNCwgMHgwODAwNTE3NCwgMHgwODAwNTE0NCwgMHgwMDAwMDAwMCB9OworCTB4MDgwMDA2OWMsIDB4MDgwMDA4YmMsIDB4MDgwMDA4MDAsIDB4MDgwMDA4MjgsIDB4MDgwMDA4NTAsIDB4MDgwMDA4NzgsCisJMHgwODAwMDZkNCwgMHgwODAwMDZjMCwgMHgwODAwMDhlNCwgMHgwODAwMDhlNCwgMHgwODAwMDZmMCwgMHgwODAwMDcwYywKKwkweDA4MDAwNzBjLCAweDA4MDAwOGU0LCAweDA4MDAwNzI0LCAweDA4MDAwNzM4LCAweDA4MDAwOGU0LCAweDA4MDAwNzRjLAorCTB4MDgwMDA4ZTQsIDB4MDgwMDA4ZTQsIDB4MDgwMDA3NjAsIDB4MDgwMDA4ZTQsIDB4MDgwMDA4ZTQsIDB4MDgwMDA4ZTQsCisJMHgwODAwMDhlNCwgMHgwODAwMDhlNCwgMHgwODAwMDhlNCwgMHgwODAwMDhlNCwgMHgwODAwMDhlNCwgMHgwODAwMDhlNCwKKwkweDA4MDAwOGU0LCAweDA4MDAwNzc0LCAweDA4MDAwOGU0LCAweDA4MDAwNzg4LCAweDA4MDAwNzljLCAweDA4MDAwN2IwLAorCTB4MDgwMDA4ZTQsIDB4MDgwMDA3YzQsIDB4MDgwMDA3ZDgsIDB4MDgwMDA3ZWMsIDB4MDgwMDMyZTgsIDB4MDgwMDMzMDAsCisJMHgwODAwMzMxMCwgMHgwODAwMzMyMCwgMHgwODAwMzMzOCwgMHgwODAwMzM1MCwgMHgwODAwMzM2MCwgMHgwODAwMzM3MCwKKwkweDA4MDAzMzkwLCAweDA4MDAzM2EwLCAweDA4MDAzM2IwLCAweDA4MDAzNDQwLCAweDA4MDAzMzgwLCAweDA4MDAzM2MwLAorCTB4MDgwMDMzZDAsIDB4MDgwMDMzZTgsIDB4MDgwMDM0MDgsIDB4MDgwMDM0NDAsIDB4MDgwMDM0MjAsIDB4MDgwMDM0MjAsCisJMHgwODAwNTFiYywgMHgwODAwNTFiYywgMHgwODAwNTFiYywgMHgwODAwNTFiYywgMHgwODAwNTFiYywgMHgwODAwNTFlNCwKKwkweDA4MDA1MWU0LCAweDA4MDA1MjBjLCAweDA4MDA1MjVjLCAweDA4MDA1MjJjLCAweDAwMDAwMDAwIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZndfaW5mbyBibngyX2NwX2Z3XzA5ID0geworCS8qIEZpcm13YXJlIHZlcnNpb246ICAzLjcuMSAqLwogCS52ZXJfbWFqb3IJCQk9IDB4MywKLQkudmVyX21pbm9yCQkJPSAweDQsCi0JLnZlcl9maXgJCQk9IDB4MywKKwkudmVyX21pbm9yCQkJPSAweDcsCisJLnZlcl9maXgJCQk9IDB4MSwKIAogCS5zdGFydF9hZGRyCQkJPSAweDA4MDAwMDZjLAogCiAJLnRleHRfYWRkcgkJCT0gMHgwODAwMDAwMCwKLQkudGV4dF9sZW4JCQk9IDB4NmVlOCwKKwkudGV4dF9sZW4JCQk9IDB4NmZkMCwKIAkudGV4dF9pbmRleAkJCT0gMHgwLAogCS5nel90ZXh0CQkJPSBibngyX0NQX2IwOUZ3VGV4dCwKIAkuZ3pfdGV4dF9sZW4JCQk9IHNpemVvZihibngyX0NQX2IwOUZ3VGV4dCksCiAKLQkuZGF0YV9hZGRyCQkJPSAweDA4MDA3MDIwLAorCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDcxMDAsCiAJLmRhdGFfbGVuCQkJPSAweDAsCiAJLmRhdGFfaW5kZXgJCQk9IDB4MCwKIAkuZGF0YQkJCQk9IGJueDJfQ1BfYjA5RndEYXRhLAogCi0JLnNic3NfYWRkcgkJCT0gMHgwODAwNzAyNCwKLQkuc2Jzc19sZW4JCQk9IDB4YTEsCisJLnNic3NfYWRkcgkJCT0gMHgwODAwNzEwNCwKKwkuc2Jzc19sZW4JCQk9IDB4YTksCiAJLnNic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5ic3NfYWRkcgkJCT0gMHgwODAwNzBkMCwKKwkuYnNzX2FkZHIJCQk9IDB4MDgwMDcxYjAsCiAJLmJzc19sZW4JCQk9IDB4M2IwLAogCS5ic3NfaW5kZXgJCQk9IDB4MCwKIAotCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNmVlOCwKKwkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDZmZDAsCiAJLnJvZGF0YV9sZW4JCQk9IDB4MTE4LAogCS5yb2RhdGFfaW5kZXgJCQk9IDB4MCwKIAkucm9kYXRhCQkJCT0gYm54Ml9DUF9iMDlGd1JvZGF0YSwKIH07CiAKIHN0YXRpYyB1OCBibngyX1JYUF9iMDlGd1RleHRbXSA9IHsKLS8qCTB4MWYsIDB4OGIsIDB4MDgsIDB4MDAsIDB4MGUsIDB4MzQsIDB4ZTcsIDB4NDUsIDB4MDAsIDB4MDMsICovCi0JCQkJCQkJCSAgICAweGVjLCAweDVjLAotCTB4NWQsIDB4NmMsIDB4MWMsIDB4ZDcsIDB4NzUsIDB4M2UsIDB4ZjMsIDB4NDMsIDB4NmEsIDB4NDksIDB4ZjEsIDB4NjcsCi0JMHhiOCwgMHg1YywgMHhiMSwgMHgyYiwgMHg5OSwgMHg5NiwgMHg3NywgMHhjOSwgMHg5MSwgMHhjOCwgMHg1OCwgMHg4YSwKLQkweDMxLCAweGEyLCAweDA5LCAweDViLCAweDQ4LCAweDE3LCAweGY2LCAweDc2LCAweDc2LCAweDI1LCAweGIxLCAweGIxLAotCTB4MDMsIDB4NTMsIDB4YjYsIDB4NjIsIDB4MDcsIDB4NDUsIDB4NmEsIDB4YjAsIDB4NGIsIDB4YjksIDB4MGUsIDB4OGMsCi0JMHgwNiwgMHg5MCwgMHhmZiwgMHg1MiwgMHhiZiwgMHhiMCwgMHhkZSwgMHgyYywgMHhhOSwgMHg1OCwgMHg0ZCwgMHgxNywKLQkweDljLCAweGI1LCAweDRkLCAweDliLCAweDBlLCAweDYwLCAweGI3LCAweDBiLCAweDkyLCAweDEyLCAweGY1LCAweGIwLAotCTB4ZDAsIDB4YjIsIDB4YTksIDB4ZGIsIDB4ZWEsIDB4YzEsIDB4OGUsIDB4MDksIDB4NTYsIDB4YjEsIDB4NTMsIDB4YTAsCi0JMHgyZCwgMHg1YywgMHgyNywgMHg2OSwgMHhmYywgMHgxMCwgMHgxNCwgMHhhYSwgMHhlYywgMHhjNCwgMHg0MiwgMHhkMSwKLQkweGEyLCAweDAyLCAweDEyLCAweGQ4LCAweDI5LCAweDIyLCAweDdiLCAweGZhLCAweDdkLCAweDc3LCAweDY2LCAweGM4LAotCTB4MjUsIDB4MmQsIDB4ZGIsIDB4NDEsIDB4MWYsIDB4ZmEsIDB4ZDIsIDB4YmQsIDB4YzAsIDB4NjIsIDB4ZWUsIDB4YmQsCi0JMHg3MywgMHhlZSwgMHhiOSwgMHhlNywgMHg5ZSwgMHhmZiwgMHg3MywgMHg4NywgMHhkMiwgMHgxZiwgMHg3NCwgMHg0OCwKLQkweGJiLCAweDg0LCAweGFkLCAweDEzLCAweGJmLCAweGQ0LCAweDg5LCAweDI3LCAweDFlLCAweGI5LCAweDY5LCAweGY0LAotCTB4YTYsIDB4OWIsIDB4ZDEsIDB4YmQsIDB4ZDksIDB4MzAsIDB4NGMsIDB4MjMsIDB4OWEsIDB4NmYsIDB4YjYsIDB4NjYsCi0JMHg2YiwgMHhiNiwgMHg2NiwgMHg2YiwgMHhiNiwgMHg2NiwgMHg2YiwgMHhiNiwgMHg2NiwgMHg2YiwgMHhiNiwgMHg2NiwKLQkweDZiLCAweGI2LCAweDY2LCAweDZiLCAweGI2LCAweDY2LCAweDZiLCAweGI2LCAweDY2LCAweDZiLCAweGI2LCAweDY2LAotCTB4NmIsIDB4YjYsIDB4NjYsIDB4NmIsIDB4YjYsIDB4NjYsIDB4NmIsIDB4YjYsIDB4NjYsIDB4NmIsIDB4YjYsIDB4NjYsCi0JMHg2YiwgMHhiNiwgMHg2NiwgMHg2YiwgMHhiNiwgMHg2NiwgMHg2YiwgMHhiNiwgMHg2NiwgMHg2YiwgMHhiNiwgMHg2NiwKLQkweDZiLCAweGI2LCAweDY2LCAweDZiLCAweGI2LCAweDY2LCAweDZiLCAweGI2LCAweDY2LCAweDZiLCAweGI2LCAweDY2LAotCTB4NmIsIDB4YjYsIDB4NjYsIDB4NmIsIDB4YjYsIDB4NjYsIDB4NmIsIDB4YjYsIDB4NjYsIDB4ZmIsIDB4ZmYsIDB4ZGUsCi0JMHgwYywgMHgxMSwgMHg4YiwgMHhjZiwgMHhjZSwgMHhmMCwgMHgyNywgMHgzMSwgMHgzZCwgMHgyMywgMHgwZiwgMHhiOSwKLQkweGI2LCAweGM0LCAweDhjLCAweGNjLCAweGQ1LCAweGE5LCAweDQ5LCAweDViLCAweDI0LCAweDViLCAweGRiLCAweDk3LAotCTB4Y2EsIDB4YzksIDB4ODcsIDB4N2UsIDB4MzEsIDB4NjEsIDB4MGEsIDB4ZTcsIDB4YWYsIDB4Y2YsIDB4NWMsIDB4ZmQsCi0JMHg4YiwgMHg1NywgMHg2ZiwgMHg0ZCwgMHg1ZiwgMHhhOSwgMHgxYSwgMHgxMiwgMHhiMywgMHgzMiwgMHgzMywgMHgwNywKLQkweGFjLCAweGJkLCAweDEyLCAweGViLCAweGM3LCAweDlhLCAweDE3LCAweDg3LCAweGZlLCAweGE5LCAweDRiLCAweGJhLAotCTB4MjIsIDB4NWMsIDB4MjIsIDB4MGIsIDB4ZTUsIDB4YjQsIDB4NzMsIDB4MTgsIDB4Y2YsIDB4MzMsIDB4YjUsIDB4N2QsCi0JMHhjZSwgMHg5YSwgMHg5OCwgMHhiMiwgMHg2YSwgMHgwNSwgMHgzYiwgMHg5NiwgMHhjYSwgMHgxYSwgMHhmMSwgMHg0OCwKLQkweGE5LCAweDE2LCAweDkzLCAweDhiLCAweGVhLCAweGRmLCAweDc5LCAweDYwLCAweDRmLCAweDliLCAweGZkLCAweGYzLAotCTB4OWEsIDB4NWIsIDB4ZjcsIDB4ZmQsIDB4ZDMsIDB4OGUsIDB4ZWYsIDB4YmYsIDB4OGUsIDB4ZGYsIDB4N2IsIDB4MGUsCi0JMHhjNiwgMHhkZSwgMHg0NywgMHg3ZSwgMHhkNiwgMHgzNCwgMHg0NCwgMHhiNywgMHhmZiwgMHg0YywgMHg3MywgMHgxNywKLQkweDViLCAweGE1LCAweDM0LCAweDJmLCAweDMyLCAweGVkLCAweGM1LCAweGU0LCAweDk0LCAweDU3LCAweGQ0LCAweGYyLAotCTB4ZjUsIDB4YjIsIDB4NzYsIDB4NjgsIDB4NzksIDB4NTYsIDB4M2IsIDB4YmMsIDB4N2MsIDB4NGEsIDB4M2IsIDB4YjIsCi0JMHg1YywgMHhkMSwgMHhkYywgMHg2NSwgMHgyOSwgMHhlYSwgMHgwNywgMHgzYSwgMHgyNCwgMHg2YiwgMHg5ZCwgMHhkNSwKLQkweDcyLCAweGY1LCAweDNlLCAweGNkLCAweDlkLCAweGJmLCAweGVhLCAweGJiLCAweDRlLCAweGRhLCAweGZhLCAweDNkLAotCTB4MzEsIDB4YjMsIDB4ZGMsIDB4Y2YsIDB4MmQsIDB4ZmIsIDB4MTgsIDB4OWIsIDB4OTIsIDB4NGQsIDB4ZjgsIDB4YmUsCi0JMHg5ZSwgMHhmMSwgMHg5ZiwgMHg3NCwgMHg0NywgMHg2ZCwgMHg0YiwgMHhkNywgMHg2MiwgMHg1MiwgMHhhYSwgMHhiNywKLQkweDAzLCAweDZmLCAweDg3LCAweDk2LCAweDliLCAweDM3LCAweGI1LCAweGJjLCAweGU3LCAweGJmLCAweGU2LCAweDNhLAotCTB4ZDIsIDB4NmYsIDB4ODgsIDB4ZWYsIDB4Y2YsIDB4MzgsIDB4N2IsIDB4OTIsIDB4YzcsIDB4ZTUsIDB4MGMsIDB4ZjAsCi0JMHhkNiwgMHg4MCwgMHg0ZiwgMHgyYywgMHgzZCwgMHg0MywgMHhmYSwgMHgyMiwgMHg5YSwgMHg4YiwgMHg1YSwgMHg2ZSwKLQkweDI4LCAweGEyLCAweDRmLCAweDUyLCAweGE0LCAweGJmLCAweGIwLCAweGE0LCAweDgzLCAweGNlLCAweGVkLCAweDUyLAotCTB4YTgsIDB4NWEsIDB4MzIsIDB4YjEsIDB4YjQsIDB4MTUsIDB4ZmUsIDB4YTIsIDB4ZmYsIDB4ZWEsIDB4NTAsIDB4NDIsCi0JMHhmZSwgMHhiMiwgMHg5ZSwgMHgzZSwgMHg1NSwgMHgwNCwgMHgyZiwgMHg2NiwgMHhiYywgMHg5NCwgMHg4MCwgMHhjZiwKLQkweDU5LCAweDc3LCAweGI0LCAweDVmLCAweDVlLCAweGFiLCAweDI3LCAweGU1LCAweGJiLCAweDc1LCAweDNiLCAweDU5LAotCTB4OTIsIDB4NmQsIDB4NTIsIDB4NDgsIDB4NTgsIDB4YjIsIDB4ODIsIDB4MzUsIDB4ZDMsIDB4YTAsIDB4NDMsIDB4YjcsCi0JMHg2ZCwgMHhhYiwgMHgwNCwgMHhkOCwgMHg1MiwgMHhmZCwgMHgyNywgMHhmYywgMHhiNywgMHgzMiwgMHhkNiwgMHhlNCwKLQkweGE4LCAweDVhLCAweDUzLCAweDA0LCAweGRkLCAweDIxLCAweDJjLCAweGNmLCAweGExLCAweDYwLCAweGQ1LCAweDU5LAotCTB4MDIsIDB4NTgsIDB4MjksIDB4NGUsIDB4OGUsIDB4NjIsIDB4YWUsIDB4ZmUsIDB4ODUsIDB4NTAsIDB4MTYsIDB4YWQsCi0JMHgzOCwgMHgyZiwgMHg5ZiwgMHhiYiwgMHg3MSwgMHhiZSwgMHhkZCwgMHhlMCwgMHg4OSwgMHgyNCwgMHg3NCwgMHhkOSwKLQkweDkzLCAweDJjLCAweDYwLCAweDY2LCAweGJhLCAweGRlLCAweDgxLCAweDMxLCAweDY5LCAweGYxLCAweGZkLCAweDIzLAotCTB4OGUsIDB4NTgsIDB4MjUsIDB4YTcsIDB4MWIsIDB4YmMsIDB4NGIsIDB4NDksIDB4YzksIDB4ZTksIDB4YzIsIDB4OWEsCi0JMHgxNiwgMHhiMSwgMHg2YywgMHg5ZSwgMHg4MSwgMHg3OCwgMHhkYiwgMHgzMCwgMHhlZiwgMHg3NywgMHgxYSwgMHgxOSwKLQkweGRmLCAweDlmLCAweDFjLCAweDk1LCAweGFlLCAweDYwLCAweDZlLCAweDFmLCAweDcwLCAweDk4LCAweDMyLCAweDMxLAotCTB4YWUsIDB4MDEsIDB4ZWUsIDB4MDMsIDB4ZDIsIDB4MTcsIDB4OGIsIDB4NjcsIDB4ZDgsIDB4ZTcsIDB4NzMsIDB4NTQsCi0JMHhkYywgMHhkOSwgMHg1NCwgMHhiOCwgMHg2ZiwgMHg4NywgMHg5NCwgMHhiYywgMHhlYiwgMHhjMywgMHgzZSwgMHg3OCwKLQkweGVkLCAweGUxLCAweGNjLCAweGNlLCAweDRlLCAweDhjLCAweGI1LCAweDFiLCAweDgwLCAweGM3LCAweDI5LCAweDA5LAotCTB4ZjcsIDB4ZDgsIDB4MjEsIDB4NmIsIDB4MDksIDB4ZDEsIDB4MmYsIDB4MzksIDB4YmQsIDB4MjEsIDB4NWMsIDB4MTcsCi0JMHg2OCwgMHg4ZCwgMHg2NCwgMHhkZSwgMHgyZSwgMHgzMywgMHhmMywgMHhhZCwgMHg3MiwgMHg3MiwgMHg5ZSwgMHhiYywKLQkweDJkLCAweDQzLCAweDE2LCAweDc4LCAweGRlLCAweDUyLCAweGQ0LCAweGIyLCAweGY1LCAweDUzLCAweGU4LCAweDliLAotCTB4MzIsIDB4NjksIDB4ZmIsIDB4YWYsIDB4Y2QsIDB4MzgsIDB4YjMsIDB4NWEsIDB4NmUsIDB4ZjksIDB4OGMsIDB4OTYsCi0JMHg4NywgMHgwZSwgMHgxYywgMHg1YSwgMHgzZSwgMHhhZiwgMHgxZCwgMHhhZSwgMHhhZiwgMHg3NiwgMHg0YSwgMHg3YiwKLQkweDFhLCAweGRhLCAweDY2LCAweGNhLCAweDQ5LCAweDRmLCAweDEzLCAweGQyLCAweGJiLCAweDAwLCAweDdlLCAweDY1LAotCTB4MmQsIDB4NzAsIDB4ZGUsIDB4ZWUsIDB4ZDIsIDB4MGUsIDB4MDMsIDB4NTcsIDB4OGIsIDB4ZmQsIDB4YWQsIDB4MGUsCi0JMHhlOSwgMHgzMiwgMHg2NCwgMHg5YiwgMHgxZCwgMHhjMSwgMHhjNiwgMHhlNCwgMHg1YiwgMHhhMCwgMHg2ZCwgMHhjZCwKLQkweDQ5LCAweDAwLCAweDRlLCAweGJhLCAweDgzLCAweDM1LCAweDNkLCAweDIxLCAweDNkLCAweGQ0LCAweDI1LCAweGVhLAotCTB4OTEsIDB4OWUsIDB4Y2QsIDB4Y2YsIDB4ZmQsIDB4NjksIDB4NmYsIDB4NjksIDB4ZmYsIDB4NzYsIDB4YzIsIDB4YzAsCi0JMHgzZSwgMHg1MiwgMHgwZiwgMHg0ZCwgMHhkYSwgMHg2ZSwgMHg4ZiwgMHgyOSwgMHg0NSwgMHg0YiwgMHg5NywgMHhiNCwKLQkweDk1LCAweDkzLCAweDFiLCAweDY0LCAweGM2LCAweDExLCAweGM5LCAweDQxLCAweGJmLCAweDc1LCAweGRiLCAweDA0LAotCTB4OGYsIDB4NmMsIDB4ZjAsIDB4NjgsIDB4Y2YsIDB4YTksIDB4NDEsIDB4ZmQsIDB4MGUsIDB4NDksIDB4ZjUsIDB4MTUsCi0JMHgzNSwgMHgzMywgMHhlNCwgMHhlNywgMHg4MiwgMHhkYywgMHhhNiwgMHhkNiwgMHhlYiwgMHgxOSwgMHgwNywgMHgzYSwKLQkweGQ5LCAweGNlLCAweDNlLCAweGY2LCAweDhkLCAweGE5LCAweDdkLCAweDhkLCAweDhjLCAweDlkLCAweDVjLCAweDE0LAotCTB4ZDEsIDB4ZjQsIDB4Y2MsIDB4M2UsIDB4ZTAsIDB4YTMsIDB4YWUsIDB4MTIsIDB4ZWUsIDB4MjksIDB4ZDAsIDB4NDgsCi0JMHhkYSwgMHhkOSwgMHhiNywgMHhiMSwgMHgyNiwgMHgyNiwgMHhhZSwgMHhkMywgMHhkOSwgMHg0MCwgMHgyNywgMHhlOCwKLQkweDQ5LCAweDkwLCAweGU3LCAweGU0LCAweGExLCAweDNhLCAweGE3LCAweGI2LCAweDcxLCAweGNlLCAweDVmLCAweGZiLAotCTB4ZGIsIDB4NDYsIDB4NGMsIDB4NzksIDB4NWQsIDB4OWQsIDB4OTcsIDB4NzYsIDB4NDUsIDB4MzgsIDB4NzUsIDB4NDYsCi0JMHgyMSwgMHg3ZiwgMHhhNiwgMHgzZCwgMHhkMSwgMHgwYSwgMHg4ZSwgMHhiNSwgMHg4ZSwgMHgwYiwgMHg3YSwgMHhhMSwKLQkweDFiLCAweDk5LCAweDBlLCAweGM5LCAweDI5LCAweGZhLCAweDBlLCAweDYyLCAweDJmLCAweGRhLCAweDFiLCAweGVjLAotCTB4YzYsIDB4ZTYsIDB4NTksIDB4MzgsIDB4OTcsIDB4ODEsIDB4ZWQsIDB4YTYsIDB4OTUsIDB4ZmUsIDB4MTQsIDB4MmEsCi0JMHhmNCwgMHgwNywgMHhhNCwgMHg2ZCwgMHgzNSwgMHhhZCwgMHg0YiwgMHg4MCwgMHhhZiwgMHhmNCwgMHg2YywgMHgzNywKLQkweDY4LCAweGUzLCAweDE4LCAweGI2LCAweDY3LCAweGUzLCAweGZkLCAweDdlLCAweGQ4LCAweGZhLCAweGMxLCAweDQxLAotCTB4ZjAsIDB4ODcsIDB4NzAsIDB4NzYsIDB4MGEsIDB4ZjIsIDB4Y2UsIDB4YmEsIDB4ZDgsIDB4ZDMsIDB4NzUsIDB4NmUsCi0JMHg1NiwgMHgzYywgMHhlOCwgMHhjMSwgMHg3OSwgMHgwNiwgMHg2NywgMHhjOSwgMHhhZiwgMHg3NiwgMHhlOCwgMHhiMywKLQkweDI2LCAweDA1LCAweDI3LCAweDlkLCAweGEyLCAweGZjLCAweDAzLCAweGRhLCAweDc1LCAweGQ5LCAweDc2LCAweDRiLAotCTB4MjMsIDB4ZWQsIDB4OTEsIDB4YWMsIDB4YTgsIDB4OGYsIDB4YTYsIDB4YzQsIDB4NDcsIDB4MDgsIDB4NGIsIDB4MzgsCi0JMHhjMiwgMHhhNywgMHgwZiwgMHg4YSwgMHhmZSwgMHg2YiwgMHhkZiwgMHhkYSwgMHg3NCwgMHg1NiwgMHg1YiwgMHgwNiwKLQkweDY2LCAweDQxLCAweDQzLCAweGMwLCAweDViLCAweGYwLCAweGU0LCAweGIzLCAweDYwLCAweGM5LCAweGQ3LCAweGFkLAotCTB4ZmMsIDB4MjMsIDB4NmMsIDB4MjMsIDB4MWMsIDB4NzQsIDB4YTIsIDB4OGYsIDB4MzQsIDB4YWMsIDB4NzQsIDB4MDQsCi0JMHhmNiwgMHgxNSwgMHhkMSwgMHgxNCwgMHhjOSwgMHg0NiwgMHgwYiwgMHg3MSwgMHg3YywgMHhkYSwgMHgzOSwgMHgwOCwKLQkweDBmLCAweGJiLCAweGY3LCAweDYwLCAweGY3LCAweDFlLCAweDdjLCAweDgyLCAweDA3LCAweDliLCAweGY3LCAweGU4LAotCTB4MjcsIDB4NTIsIDB4ZjIsIDB4ZWEsIDB4MTAsIDB4ZmMsIDB4ZGEsIDB4ODYsIDB4NWYsIDB4NDEsIDB4MWIsIDB4NDMsCi0JMHg1ZiwgMHgxNywgMHgwMywgMHg3ZSwgMHg2NSwgMHhiYSwgMHhhYSwgMHhjMywgMHg3NiwgMHg2MSwgMHg0MywgMHg0YiwKLQkweDljLCAweGIzLCAweGYwLCAweGNjLCAweGUzLCAweDY5LCAweGMzLCAweDhmLCAweDUyLCAweGFmLCAweDIyLCAweGZmLAotCTB4NDksIDB4M2YsIDB4OTMsIDB4ODQsIDB4NGYsIDB4YTEsIDB4YWYsIDB4YTEsIDB4MmYsIDB4MjEsIDB4YWMsIDB4ZWYsCi0JMHhlNywgMHgxZCwgMHhhZSwgMHhmNSwgMHg2NSwgMHhkYywgMHhhMSwgMHgxZCwgMHg3NSwgMHg4OCwgMHgxZSwgMHgyZiwKLQkweDZhLCAweDQ3LCAweDg3LCAweDYwLCAweDYzLCAweDM3LCAweGI2LCAweDgwLCAweDU2LCAweGRhLCAweGRhLCAweDc1LAotCTB4NzQsIDB4MTUsIDB4NjgsIDB4YmYsIDB4ZTgsIDB4MGMsIDB4ZmUsIDB4NWQsIDB4ZGUsIDB4MzYsIDB4YzAsIDB4MjgsCi0JMHhhMSwgMHg3NiwgMHgwNSwgMHhlMywgMHhiNiwgMHhkMCwgMHg5ZiwgMHhmMCwgMHg3ZCwgMHgzYSwgMHg5NSwgMHg5NSwKLQkweGRkLCAweGUxLCAweDk4LCAweGZkLCAweDc1LCAweDdhLCAweDFkLCAweGZkLCAweDk2LCAweDk4LCAweDBjLCAweDljLAotCTB4MDksIDB4ZmMsIDB4ZTAsIDB4YzAsIDB4ODIsIDB4MjUsIDB4ZjYsIDB4OTksIDB4ODAsIDB4YzYsIDB4ODEsIDB4NzMsCi0JMHg5MSwgMHgzZiwgMHg2YywgMHgwMSwgMHgzZSwgMHhkMCwgMHhlNywgMHg2ZCwgMHhjNCwgMHgwOSwgMHg5MSwgMHhmNywKLQkweDM0LCAweDk4LCAweDBhLCAweGU2LCAweGI2LCAweGYyLCAweDgyLCAweDNlLCAweDk4LCAweGY2LCAweDY2LCAweDM1LAotCTB4ZGEsIDB4ZGIsIDB4MDEsIDB4ZDgsIDB4OWIsIDB4ZDMsIDB4MmEsIDB4NjksIDB4ZTcsIDB4ZWYsIDB4NjAsIDB4NmYsCi0JMHg0ZiwgMHgzOSwgMHgxYSwgMHg3OCwgMHgyMywgMHg3MiwgMHhhMSwgMHhkYywgMHgwMSwgMHg1YiwgMHgzNywgMHg5MywKLQkweGVmLCAweGM4LCAweDllLCAweGQ0LCAweGI0LCAweDY4LCAweDcyLCAweDlhLCAweDczLCAweDM1LCAweGNjLCAweDI5LAotCTB4ZmYsIDB4MWIsIDB4ZDgsIDB4ZjcsIDB4NDUsIDB4ZTMsIDB4NjksIDB4ZDAsIDB4ZTUsIDB4ZmIsIDB4ZDMsIDB4YzAsCi0JMHg1OSwgMHhkOCwgMHg2ZiwgMHg4NCwgMHhiNiwgMHgxNSwgMHhjZCwgMHhhNywgMHgxMCwgMHhmMywgMHhkYywgMHhjZiwKLQkweDE5LCAweDUyLCAweDFjLCAweDZlLCAweDkxLCAweGY0LCAweGYwLCAweDAyLCAweDcwLCAweDRmLCAweDNhLCAweDgxLAotCTB4MWQsIDB4NTMsIDB4ZDcsIDB4MTcsIDB4ODEsIDB4N2YsIDB4YzYsIDB4MWIsIDB4ODIsIDB4MWUsIDB4ZDMsIDB4MGUsCi0JMHg0MCwgMHgxNywgMHhmMCwgMHgyZiwgMHgwMiwgMHhmZiwgMHg0YywgMHhiZCwgMHg0NSwgMHhiZSwgMHg2OSwgMHg0NiwKLQkweGIxLCAweDM0LCAweDNhLCAweDRmLCAweDFiLCAweGMwLCAweGEyLCAweDdkLCAweDRmLCAweGM4LCAweDE3LCAweGJkLAotCTB4YjgsIDB4ZTYsIDB4M2UsIDB4NGIsIDB4M2YsIDB4NWIsIDB4MWEsIDB4ODYsIDB4OWQsIDB4NjgsIDB4MjUsIDB4ODcsCi0JMHg3YiwgMHgxYiwgMHhiMiwgMHhiOCwgMHgwZSwgMHgyMywgMHhkOSwgMHg1MiwgMHg2MCwgMHg4MywgMHg1OSwgMHg3NywKLQkweGE4LCAweDk4LCAweDM0LCAweDk0LCAweDJmLCAweDExLCAweDM5LCAweDVjLCAweDM2LCAweDAxLCAweGMzLCAweDMxLAotCTB4ZTcsIDB4ODMsIDB4YjksIDB4YjEsIDB4NzIsIDB4MWYsIDB4N2MsIDB4MjMsIDB4YzcsIDB4NTcsIDB4ZmQsIDB4NDksCi0JMHgyNywgMHg5OCwgMHhmYiwgMHhkZCwgMHg3MiwgMHg4MSwgMHgzMiwgMHg2MiwgMHhkYywgMHg0ZSwgMHg5NSwgMHg5YywKLQkweDdmLCAweGY3LCAweGExLCAweGJmLCAweDliLCAweGQ2LCAweDVjLCAweDFiLCAweDRmLCAweDdhLCAweDJjLCAweDhjLAotCTB4ZjUsIDB4ZGEsIDB4MTEsIDB4NWIsIDB4ZWYsIDB4NmIsIDB4MGQsIDB4N2QsIDB4ZDgsIDB4MTEsIDB4NGMsIDB4MWUsCi0JMHgyYSwgMHg5NywgMHg3YSwgMHg1YiwgMHhlNSwgMHhhYSwgMHhjMSwgMHhkOCwgMHg3OSwgMHgwOSwgMHg0NiwgMHhlZCwKLQkweDk2LCAweGY3LCAweDgyLCAweDFmLCAweGE1LCAweDllLCAweDg2LCAweGI5LCAweDU4LCAweGJlLCAweGVjLCAweGNiLAotCTB4OWEsIDB4MTMsIDB4YWMsIDB4YzEsIDB4YjgsIDB4MjMsIDB4NTcsIDB4ZDYsIDB4ZmIsIDB4NjIsIDB4YjIsIDB4M2UsCi0JMHhiNiwgMHhiOCwgMHg2NiwgMHg0OSwgMHhmNiwgMHgwZSwgMHgyZiwgMHg4YSwgMHg1YSwgMHhkYiwgMHgxYiwgMHhkYiwKLQkweDU4LCAweDliLCAweGM4LCAweDk3LCAweDRiLCAweDNkLCAweDBkLCAweGUzLCAweDY0LCAweDBlLCAweGI4LCAweGY0LAotCTB4MDMsIDB4ZWIsIDB4NmIsIDB4ZmIsIDB4MzcsIDB4ZDYsIDB4ZWUsIDB4OTAsIDB4NTQsIDB4MGYsIDB4ZDcsIDB4ZWIsCi0JMHg3ZCwgMHg2ZCwgMHgxYiwgMHhiOCwgMHg1MywgMHgyMSwgMHgzZCwgMHhiZCwgMHg2ZCwgMHgxYiwgMHgzOCwgMHg2YywKLQkweGUyLCAweDZjLCAweDE4LCAweDBmLCAweDEzLCAweGU3LCAweGMwLCAweDA2LCAweGNlLCAweGZkLCAweDliLCAweGU5LAotCTB4MzksIDB4MjEsIDB4ZjAsIDB4NDEsIDB4YjEsIDB4ZDYsIDB4OGMsIDB4MWMsIDB4YjgsIDB4NTAsIDB4MWUsIDB4MWMsCi0JMHhmZiwgMHhhMiwgMHgyMCwgMHhlNiwgMHhlZCwgMHhkZiwgMHgxNiwgMHhmYSwgMHg2NCwgMHhmMywgMHg4MCwgMHgwYiwKLQkweDVlLCAweDk5LCAweDQyLCAweDFmLCAweGE3LCAweDQ5LCAweDA5LCAweDcyLCAweDdlLCAweGE4LCAweDI2LCAweDA3LAotCTB4ZDYsIDB4NmEsIDB4MTIsIDB4ZWEsIDB4MTIsIDB4NzUsIDB4ZTIsIDB4MzIsIDB4NmMsIDB4NGMsIDB4OGEsIDB4YmIsCi0JMHgzMiwgMHgxZCwgMHgxMywgMHg2NiwgMHhjNiwgMHg4MiwgMHhhZCwgMHhjOSwgMHg3OCwgMHgwOSwgMHgzZSwgMHhkOSwKLQkweGM4LCAweGVjLCAweDc5LCAweDNiLCAweDY3LCAweDNjLCAweGU5LCAweDFiLCAweDg4LCAweGRiLCAweDM5LCAweGU5LAotCTB4MzgsIDB4ZTgsIDB4OGUsIDB4NjIsIDB4YmUsIDB4NDYsIDB4ZGIsIDB4ODIsIDB4NWYsIDB4YTksIDB4MTMsIDB4ZjcsCi0JMHg3YywgMHhiNywgMHg3NCwgMHgyMSwgMHgyZSwgMHhkNiwgMHg1ZSwgMHhkYSwgMHgxMSwgMHhkOCwgMHg4ZSwgMHg5OCwKLQkweDI2LCAweDdjLCAweGVkLCAweGNjLCAweDI4LCAweGUzLCAweDc4LCAweDZiLCAweDBjLCAweGYwLCAweDEzLCAweDQ2LAotCTB4NjYsIDB4NmMsIDB4ZTcsIDB4ZjEsIDB4ZGEsIDB4OWQsIDB4M2IsIDB4MGIsIDB4YjUsIDB4ZTIsIDB4Y2UsIDB4NDIsCi0JMHhkOSwgMHhhMiwgMHg5ZCwgMHhlOCwgMHhlZSwgMHgyOCwgMHhmYSwgMHgyYSwgMHg1NywgMHg0YSwgMHhjMiwgMHgyNiwKLQkweDJlLCAweGFiLCAweDNjLCAweGUyLCAweGI1LCAweDdhLCAweDFkLCAweGY2LCAweDQ3LCAweGZiLCAweDE2LCAweDE5LAotCTB4ZjcsIDB4YjAsIDB4YzcsIDB4YzgsIDB4ODcsIDB4OTAsIDB4M2IsIDB4NjgsIDB4ODMsIDB4NGYsIDB4Y2IsIDB4ZTIsCi0JMHhkNCwgMHhmYSwgMHhjOCwgMHhiZiwgMHg4NSwgMHhmNiwgMHhjOSwgMHhmZSwgMHhmYiwgMHg3ZSwgMHhlMCwgMHhlZiwKLQkweGVmLCAweGU4LCAweDBlLCAweGU2LCAweGRlLCAweDBhLCAweDZkLCAweDNhLCAweGMyLCAweDQ1LCAweDNjLCAweGMzLAotCTB4ZGEsIDB4MzgsIDB4NzIsIDB4OTIsIDB4ZjEsIDB4YmEsIDB4YTksIDB4ZDEsIDB4M2YsIDB4ZTcsIDB4M2MsIDB4ZTYsCi0JMHgxMiwgMHhjYywgMHgyMywgMHhhNiwgMHg0MywgMHgzZiwgMHgyNywgMHhkOSwgMHgxYywgMHhmYywgMHg4OCwgMHg4ZSwKLQkweGRjLCAweGEyLCAweDAwLCAweGJiLCAweDMxLCAweDMzLCAweDU3LCAweDY0LCAweDQ2LCAweGY5LCAweDQ4LCAweDg5LAotCTB4YjUsIDB4NjQsIDB4OWUsIDB4MDAsIDB4Y2MsIDB4N2YsIDB4YzAsIDB4ZTYsIDB4ZGEsIDB4YmEsIDB4NDMsIDB4M2QsCi0JMHgwYywgMHg3ZCwgMHhiYywgMHhmMiwgMHhiYiwgMHg4MCwgMHhiZCwgMHhiYywgMHgwNSwgMHhmNiwgMHhkZCwgMHg0NiwKLQkweDU4LCAweGJjLCAweGJmLCAweGI4LCAweGU1LCAweGZkLCAweDRmLCAweDY5LCAweGJmLCAweDc4LCAweGI3LCAweDBhLAotCTB4N2YsIDB4ZGEsIDB4MWEsIDB4ZGEsIDB4ZmUsIDB4MDUsIDB4MjksIDB4YzAsIDB4YjcsIDB4OWEsIDB4MzYsIDB4NzMsCi0JMHhjNywgMHhkYiwgMHhiMCwgMHgxNiwgMHhlMywgMHgxYSwgMHg2OCwgMHg4NCwgMHhiZiwgMHg0MCwgMHhjYywgMHgwNCwKLQkweGJmLCAweDExLCAweDEzLCAweDEyLCAweDM3LCAweDMwLCAweDNmLCAweGEyLCAweDlmLCAweDAwLCAweDJjLCAweGZkLAotCTB4MmYsIDB4NjEsIDB4NWYsIDB4ZTksIDB4MjAsIDB4Y2YsIDB4MGIsIDB4MzUsIDB4YWUsIDB4YTEsIDB4YWYsIDB4MTIsCi0JMHhkZiwgMHgxZCwgMHg2ZCwgMHg4MywgMHg0NiwgMHhmOSwgMHhhZiwgMHgxOSwgMHg3NiwgMHgwNCwgMHgxYiwgMHhlMSwKLQkweGRkLCAweDBhLCAweGNiLCAweDdjLCAweDg1LCAweGI4LCAweGJiLCAweGMzLCAweDNjLCAweDYwLCAweDRjLCAweGIyLAotCTB4ZjUsIDB4MmMsIDB4N2UsIDB4NDUsIDB4OTksIDB4N2MsIDB4MTYsIDB4YjksIDB4OTgsIDB4ZGQsIDB4NDIsIDB4NWUsCi0JMHg5MCwgMHgzNSwgMHg1NiwgMHhjMCwgMHhhMywgMHg2OCwgMHhkZCwgMHgxMywgMHhiZCwgMHg5YiwgMHhjNywgMHhmNywKLQkweGM1LCAweDM3LCAweDdjLCAweDI1LCAweDJkLCAweDRkLCAweGIyLCAweDg4LCAweDE1LCAweGUwLCAweDcxLCAweDZhLAotCTB4NDIsIDB4Y2YsIDB4MjQsIDB4MjQsIDB4NTcsIDB4MGIsIDB4ZjgsIDB4OGIsIDB4NzgsIDB4MGIsIDB4ZmYsIDB4YzgsCi0JMHgyZSwgMHg2NCwgMHhiMiwgMHhlZSwgMHgwNywgMHgyMywgMHg5OSwgMHg1MywgMHhjZiwgMHhiMiwgMHg5MCwgMHg0ZCwKLQkweDBhLCAweGJhLCAweDM0LCAweDg2LCAweGI1LCAweDcyLCAweDAyLCAweDM4LCAweDE4LCAweDg3LCAweDFkLCAweDNkLAotCTB4MTMsIDB4OTcsIDB4ODIsIDB4YzUsIDB4N2MsIDB4NDEsIDB4ZTUsIDB4N2EsIDB4NTksIDB4ZmEsIDB4MDEsIDB4M2QsCi0JMHhkMywgMHg4NiwgMHgzOSwgMHhmNiwgMHgxZiwgMHhlZSwgMHgwZSwgMHg2NCwgMHhkZCwgMHhjOSwgMHhmMSwgMHhiOCwKLQkweDllLCAweGU5LCAweGRlLCAweDMyLCAweGZmLCAweDdhLCAweDY3LCAweDQwLCAweDliLCAweDFhLCAweDYzLCAweGZlLAotCTB4NWYsIDB4YjYsIDB4OGMsIDB4YmYsIDB4MWUsIDB4ZGYsIDB4M2MsIDB4N2UsIDB4NjAsIDB4NjcsIDB4YTQsIDB4MGYsCi0JMHg3YSwgMHhlNiwgMHg4OSwgMHg5MCwgMHg1ZSwgMHhlYSwgMHhlOSwgMHg1NiwgMHg1YSwgMHg3ZiwgMHgxMywgMHg3ZCwKLQkweDc5LCAweDBlLCAweDM4LCAweDk1LCAweDhlLCAweGZmLCAweDA2LCAweGZhLCAweGIyLCAweDBlLCAweGZiLCAweDA5LAotCTB4ZmEsIDB4ZDIsIDB4NDgsIDB4YzMsIDB4N2EsIDB4NWQsIDB4NTEsIDB4ZDEsIDB4OTEsIDB4OTMsIDB4YmEsIDB4YTMsCi0JMHg3YiwgMHg5MCwgMHg3NywgMHhhNCwgMHgyNCwgMHg1ZiwgMHgwNywgMHhlZiwgMHhkNiwgMHhlMywgMHhlYSwgMHgzYSwKLQkweDRjLCAweDcxLCAweDAzLCAweDI2LCAweDg4LCAweDNiLCAweGY5LCAweGJhLCAweDhmLCAweDNjLCAweGFlLCAweDMxLAotCTB4MDYsIDB4MGYsIDB4YTMsIDB4NWYsIDB4YzQsIDB4NTksIDB4NTcsIDB4NjQsIDB4ZDIsIDB4NWIsIDB4Y2IsIDB4ZWEsCi0JMHhmNiwgMHhhOSwgMHgyMCwgMHgwZiwgMHhiNSwgMHhiZiwgMHhhZCwgMHhlNSwgMHgxNywgMHg5OSwgMHhhMywgMHhjNiwKLQkweGQwLCAweDU3LCAweGY1LCAweDA3LCAweDYyLCAweGRjLCAweDMzLCAweDVhLCAweDc2LCAweDc5LCAweDBlLCAweGY5LAotCTB4ZTksIDB4MTIsIDB4N2UsIDB4NjcsIDB4ZjEsIDB4YWIsIDB4ZTEsIDB4MTcsIDB4ZDUsIDB4MDEsIDB4MmYsIDB4YTAsCi0JMHg4ZSwgMHg1MCwgMHhmZSwgMHgxZSwgMHhiMSwgMHgyOSwgMHhkOCwgMHhmZiwgMHg2NywgMHg0YiwgMHhjOCwgMHg4ZiwKLQkweGU3LCAweDEyLCAweGYyLCAweDk0LCAweGFkLCAweGY3LCAweGVhLCAweDgxLCAweDhmLCAweGNiLCAweDIyLCAweGI3LAotCTB4YjYsIDB4MmUsIDB4Y2IsIDB4OTcsIDB4YzIsIDB4MWMsIDB4NGQsIDB4ZTQsIDB4OWQsIDB4MGEsIDB4NjQsIDB4YjksCi0JMHhmZiwgMHg0OCwgMHhlOCwgMHg5ZiwgMHhiZSwgMHhmNiwgMHhhMCwgMHhhYiwgMHg3YywgMHg3OSwgMHg5OCwgMHg4MywKLQkweGMxLCAweGVmLCAweDY0LCAweDE1LCAweGQ0LCAweDFiLCAweGUwLCAweDhmLCAweDI2LCAweGVmLCAweDQxLCAweDhmLAotCTB4ZGYsIDB4YTksIDB4YjQsIDB4ODMsIDB4MWUsIDB4NWIsIDB4MGEsIDB4YzcsIDB4OTAsIDB4YmIsIDB4NjgsIDB4ODMsCi0JMHhkNiwgMHgzNiwgMHhhZCwgMHgxZCwgMHg3OSwgMHgxOCwgMHhmYywgMHg4ZSwgMHgxYSwgMHg5MywgMHg2NywgMHgxNywKLQkweGE3LCAweDE2LCAweGNhLCAweDNhLCAweDYwLCAweGMxLCAweGYzLCAweDUxLCAweGY0LCAweGExLCAweDdmLCAweDk3LAotCTB4MmEsIDB4NWMsIDB4YTcsIDB4Y2IsIDB4YmIsIDB4MTUsIDB4NDMsIDB4N2UsIDB4OGUsIDB4YmMsIDB4ZWUsIDB4M2QsCi0JMHhmYiwgMHhlMiwgMHgxNCwgMHg2YywgMHhiMCwgMHgwZiwgMHhmMSwgMHgwYSwgMHhiNSwgMHhkMCwgMHgxZSwgMHhjNiwKLQkweDhjLCAweDAxLCAweDEzLCAweGNmLCAweDNjLCAweDdlLCAweDg3LCAweDkxLCAweGU3LCAweDVkLCAweDdiLCAweGNkLAotCTB4MjcsIDB4YzEsIDB4OTMsIDB4YjYsIDB4MTgsIDB4ZDYsIDB4MTAsIDB4ZGUsIDB4MDQsIDB4NmQsIDB4NWQsIDB4ZDAsCi0JMHhjMSwgMHhiNCwgMHgzNSwgMHgyMSwgMHhkZCwgMHg5NiwgMHhjYSwgMHg5ZCwgMHgzNCwgMHhjZSwgMHgwNywgMHg3ZSwKLQkweGYyLCAweGUzLCAweGYzLCAweGU0LCAweGIzLCAweDAxLCAweDFkLCAweGUyLCAweDk4LCAweGVmLCAweGU4LCAweGNmLAotCTB4ODksIDB4MmYsIDB4N2QsIDB4MzAsIDB4OGIsIDB4YzMsIDB4NWMsIDB4YWEsIDB4MDQsIDB4ZmQsIDB4NjgsIDB4NGUsCi0JMHhiNCwgMHgyOCwgMHhhNiwgMHhkMiwgMHg0ZiwgMHhlNywgMHg2MSwgMHhhYiwgMHgxYywgMHg4ZiwgMHg4YiwgMHg5MiwKLQkweGMxLCAweDI2LCAweDc5LCAweDUyLCAweDhmLCAweDU2LCAweGE3LCAweDY2LCAweDZjLCAweGNhLCAweGQ1LCAweDkyLAotCTB4ZTksIDB4NzIsIDB4MjQsIDB4NTcsIDB4Y2EsIDB4MDgsIDB4NzUsIDB4NjYsIDB4ZTUsIDB4ZGIsIDB4OTAsIDB4YWIsCi0JMHgxZSwgMHhkNiwgMHgyMCwgMHhmMCwgMHgwMywgMHg3MywgMHg5NCwgMHgyZiwgMHhlYSwgMHhjNCwgMHgwYSwgMHhmMiwKLQkweGIwLCAweDhhLCAweGM0LCAweDgzLCAweDFhLCAweGVhLCAweDE5LCAweGQ0LCAweDFkLCAweDkwLCAweDVmLCAweDc5LAotCTB4MGUsIDB4MzgsIDB4MTIsIDB4NzgsIDB4MmUsIDB4ZTEsIDB4OTksIDB4YzQsIDB4ZjMsIDB4MmMsIDB4OWUsIDB4ZmQsCi0JMHg3OCwgMHhkNiwgMHg2OCwgMHgxZiwgMHg2MSwgMHhkZSwgMHhmMywgMHgzMSwgMHg3YSwgMHg2MCwgMHgyNywgMHg3OSwKLQkweGRhLCAweGI0LCAweDdjLCAweGFmLCAweDllLCAweDkxLCAweGJmLCAweGFkLCAweDFmLCAweDk0LCAweGJmLCAweGE5LAotCTB4OGYsIDB4Y2EsIDB4NWYsIDB4ZDcsIDB4MWQsIDB4NzksIDB4YjksIDB4YmUsIDB4NWYsIDB4ZmUsIDB4YWEsIDB4M2UsCi0JMHhjYywgMHg5YSwgMHgxMCwgMHgzOSwgMHg1YywgMHgwYSwgMHhiZSwgMHhmOSwgMHhiYywgMHgzYywgMHhlOCwgMHhkNSwKLQkweGUxLCAweDczLCAweDI4LCAweGZmLCAweDhiLCAweDUzLCAweGQ5LCAweGRhLCAweDc1LCAweDUyLCAweDc4LCAweGQ2LAotCTB4NDIsIDB4OWUsIDB4NjksIDB4YjAsIDB4MmUsIDB4OTMsIDB4YzcsIDB4OWMsIDB4M2IsIDB4ZTIsIDB4OTQsIDB4YmQsCi0JMHg2ZSwgMHhiMywgMHg0ZSwgMHgzOSwgMHg0OSwgMHgzOCwgMHhkNCwgMHhiYiwgMHgxYSwgMHhmMiwgMHg5NywgMHgxNiwKLQkweDk5LCAweDQ4LCAweGE0LCAweDU3LCAweDVjLCAweDIzLCAweDE5LCAweGZhLCAweGEzLCAweDNiLCAweDAxLCAweDg3LAotCTB4M2QsIDB4YmQsIDB4MGUsIDB4NTksIDB4N2IsIDB4MWUsIDB4YjYsIDB4ZTAsIDB4YTAsIDB4NTYsIDB4NGUsIDB4YzQsCi0JMHhlMCwgMHhmYiwgMHg1NCwgMHg3ZSwgMHhhMiwgMHg3YywgMHg0YiwgMHhlMCwgMHg0YiwgMHhhMywgMHg5YSwgMHg5MSwKLQkweDczLCAweGQ5LCAweDcwLCAweDhlLCAweGYxLCAweGQxLCAweDAyLCAweGVjLCAweDcyLCAweDE4LCAweDQzLCAweGI2LAotCTB4ZTIsIDB4YTQsIDB4NmYsIDB4M2MsIDB4MTYsIDB4ZmEsIDB4YzcsIDB4MTUsIDB4MzksIDB4ZTEsIDB4MGQsIDB4NjYsCi0JMHhhZiwgMHgyMCwgMHhmNiwgMHg2OCwgMHgyZCwgMHg1MSwgMHg1ZSwgMHhiNCwgMHgwYiwgMHhiNCwgMHhmOSwgMHhmZSwKLQkweGRkLCAweGFjLCAweGJmLCAweGUzLCAweGE2LCAweGZjLCAweDcwLCAweDM2LCAweDZkLCAweDNkLCAweGEyLCAweGNmLAotCTB4NDAsIDB4Y2UsIDB4YmUsIDB4N2YsIDB4ZDQsIDB4NGUsIDB4OWYsIDB4OWEsIDB4ZDAsIDB4M2IsIDB4ZTUsIDB4MjcsCi0JMHhjZiwgMHgzMCwgMHgyNiwgMHhhZiwgMHg0ZSwgMHg3ZCwgMHgxZiwgMHg3YSwgMHg1MCwgMHg1ZCwgMHg2YSwgMHg5NSwKLQkweDZhLCAweGQ1LCAweDk0LCAweDRiLCAweDIzLCAweDgzLCAweDZhLCAweGRmLCAweDZhLCAweDJkLCAweDhlLCAweDNjLAotCTB4YWYsIDB4NGQsIDB4YTYsIDB4ZmIsIDB4OTQsIDB4YjIsIDB4YzMsIDB4NmYsIDB4MGYsIDB4MmIsIDB4YmYsIDB4ZWQsCi0JMHhkYSwgMHg3OCwgMHhkNiwgMHg5MiwgMHhkNiwgMHg2NiwgMHg1YSwgMHg1ZSwgMHg5NiwgMHg4MiwgMHgwNywgMHgxZCwKLQkweDhiLCAweGVmLCAweDAyLCAweDRmLCAweGQ4LCAweDFmLCAweGI0LCAweDBhLCAweDNhLCAweDYyLCAweGEwLCAweDM5LAotCTB4NjgsIDB4M2QsIDB4YTgsIDB4ZmYsIDB4ZDIsIDB4ZmYsIDB4MWQsIDB4OTMsIDB4N2MsIDB4N2MsIDB4MWIsIDB4YjEsCi0JMHg4NSwgMHhiMSwgMHg1MiwgMHg1MywgMHg3YSwgMHhiNywgMHhiMCwgMHhmNCwgMHg1MywgMHg4YiwgMHhmZSwgMHg2NSwKLQkweGE1LCAweGI2LCAweDJiLCAweDFjLCAweGQzLCAweGJmLCAweDczLCAweGRjLCAweDJlLCAweDJmLCAweDU3LCAweGI3LAotCTB4Y2IsIDB4NjIsIDB4OTUsIDB4ZWYsIDB4NWIsIDB4NjUsIDB4YTEsIDB4M2EsIDB4NzgsIDB4YTUsIDB4NTcsIDB4ZWYsCi0JMHg5MywgMHhkNSwgMHhlYiwgMHg2ZSwgMHhiNCwgMHhlZSwgMHhkNywgMHhjMSwgMHg5MywgMHg2MywgMHgxZiwgMHhjOSwKLQkweDA3LCAweDIzLCAweGRkLCAweGYyLCAweGQ2LCAweDdkLCAweGU5LCAweDE3LCAweGZlLCAweDQ0LCAweDg3LCAweDNlLAotCTB4OGUsIDB4NzQsIDB4ZDAsIDB4Y2UsIDB4ZDAsIDB4ZTcsIDB4N2MsIDB4ZmEsIDB4NGEsIDB4NTYsIDB4YTcsIDB4OWUsCi0JMHhmZCwgMHgwMCwgMHhmYSwgMHg5NSwgMHhhZSwgMHgwNCwgMHgzYSwgMHg0OSwgMHhkYywgMHhjNCwgMHgwYiwgMHhmOSwKLQkweGQ4LCAweDZmLCAweDAwLCAweDI3LCAweGRlLCAweGQ1LCAweDA2LCAweDgxLCAweGViLCAweDBkLCAweGM1LCAweDhiLAotCTB4YmIsIDB4OWQsIDB4ZjQsIDB4MTUsIDB4ODQsIDB4MjgsIDB4ZmYsIDB4OTIsIDB4M2QsIDB4MzgsIDB4M2MsIDB4YTAsCi0JMHhlZiwgMHg5MiwgMHg2YSwgMHhmMiwgMHg0NiwgMHhlYiwgMHhiYiwgMHg4OCwgMHgwNywgMHhkOSwgMHg0NCwgMHhmYSwKLQkweGQ0LCAweDQ1LCAweDU5LCAweDlkLCAweGJhLCAweDYwLCAweDUzLCAweDE3LCAweDY5LCAweGMzLCAweGZmLCAweDgwLAotCTB4OWMsIDB4ZDQsIDB4OTIsIDB4NGEsIDB4OGQsIDB4YmUsIDB4OGIsIDB4YjgsIDB4NTgsIDB4MTcsIDB4ZWMsIDB4YjUsCi0JMHg0ZSwgMHg4MCwgMHgwNiwgMHg3NywgMHgzZiwgMHhkZSwgMHg2MSwgMHhkZSwgMHhmOCwgMHgzYywgMHhlNSwgMHhkNiwKLQkweGMyLCAweGI1LCAweGMzLCAweDU5LCAweGJkLCAweDdmLCAweDBiLCAweDhmLCAweDA2LCAweGFkLCAweDQzLCAweDNhLAotCTB4ZjcsIDB4ZmIsIDB4MmYsIDB4ZWMsIDB4ZmIsIDB4M2UsIDB4NjgsIDB4MWQsIDB4YzQsIDB4NWEsIDB4YzQsIDB4ZDAsCi0JMHg2NCwgMHhlMywgMHgxZSwgMHgzZiwgMHg1MiwgMHg3YiwgMHgzYywgMHg1YiwgMHg0MywgMHgwZSwgMHhiOCwgMHhiZSwKLQkweDA3LCAweGU2LCAweDZhLCAweDNhLCAweGNlLCAweDY5LCAweDJhLCAweGI5LCAweDVjLCAweDFhLCAweDIxLCAweDdmLAotCTB4NmYsIDB4ZWYsIDB4NjEsIDB4MmMsIDB4MzcsIDB4MzIsIDB4MmYsIDB4ODUsIDB4NzksIDB4NDYsIDB4NGMsIDB4N2UsCi0JMHg4YywgMHhiYSwgMHg2YiwgMHgxMiwgMHhmZSwgMHg3ZiwgMHg2MSwgMHhlZiwgMHgyMCwgMHg2OCwgMHg0MCwgMHg3ZCwKLQkweDlhLCAweDU0LCAweGYxLCAweDdjLCAweGNhLCAweDA1LCAweDhlLCAweDljLCAweGMyLCAweGZkLCAweGE2LCAweDJjLAotCTB4MDEsIDB4ZjcsIDB4MzgsIDB4ZjksIDB4MDAsIDB4ZGMsIDB4MzMsIDB4OWMsIDB4NTcsIDB4MzIsIDB4YzAsIDB4N2MsCi0JMHgyZCwgMHgwNSwgMHhiYywgMHhiZCwgMHhhMSwgMHhmZiwgMHg4YiwgMHg0MywgMHg1NywgMHhmNywgMHg1OSwgMHg3NywKLQkweDRiLCAweDJjLCAweGY0LCAweDdmLCAweDcxLCAweDc5LCAweGViLCAweDc5LCAweGU4LCAweDdkLCAweDljLCAweGZhLAotCTB4OTMsIDB4ZTgsIDB4ZDksIDB4ZDAsIDB4OWYsIDB4NDYsIDB4ZmMsIDB4YWQsIDB4OTIsIDB4YWYsIDB4YzQsIDB4ODAsCi0JMHgxNywgMHgzOSwgMHhmNywgMHgyOCwgMHhmMSwgMHg2MiwgMHg1YywgMHhhNSwgMHgyZSwgMHgxNywgMHg0MywgMHg1ZCwKLQkweGVlLCAweDA4LCAweDcxLCAweGFmLCAweDQxLCAweDk3LCAweGQzLCAweGE5LCAweDU1LCAweDlkLCAweGY1LCAweGQ1LAotCTB4NGUsIDB4NTUsIDB4ZjMsIDB4MWEsIDB4YjAsIDB4YWYsIDB4NDIsIDB4OTksIDB4YjEsIDB4ODgsIDB4YjYsIDB4NzUsCi0JMHg3MSwgMHg2YSwgMHgxMiwgMHgzNSwgMHg2YywgMHhhMSwgMHg3YywgMHg1MCwgMHgyZiwgMHhkNCwgMHg0NywgMHhmNSwKLQkweDgyLCAweDQ3LCAweDdkLCAweGRiLCAweDZiLCAweDJkLCAweDI4LCAweDFlLCAweDI3LCAweDY1LCAweGExLCAweGZlLAotCTB4ODEsIDB4NWYsIDB4ZGEsIDB4YmIsIDB4MGQsIDB4N2QsIDB4ZTgsIDB4ZmUsIDB4MzgsIDB4ZTUsIDB4N2IsIDB4M2QsCi0JMHhlOSwgMHg0MiwgMHg1MCwgMHgyNywgMHhiZiwgMHgxMywgMHg3MiwgMHg2NiwgMHhlOCwgMHg3YiwgMHhkZCwgMHhjYywKLQkweGQxLCAweDk2LCAweDg3LCAweDg4LCAweDFmLCAweDc0LCAweDI0LCAweDEyLCAweGIyLCAweGU4LCAweDcxLCAweDhmLAotCTB4ZDUsIDB4MjksIDB4ZjIsIDB4YjIsIDB4MzAsIDB4NjcsIDB4YzksIDB4MDksIDB4MjUsIDB4M2YsIDB4OWUsIDB4OWIsCi0JMHhmNywgMHg0NywgMHg4NiwgMHg0YywgMHhjNiwgMHgwNywgMHhhZCwgMHg0NywgMHgyNSwgMHg3ZCwgMHg2NSwgMHhjZCwKLQkweDQ4LCAweGJmLCAweDMwLCAweDgxLCAweGI4LCAweGJhLCAweDMwLCAweDZmLCAweDg4LCAweGFiLCAweGVhLCAweDMwLAotCTB4Y2EsIDB4MjgsIDB4NWQsIDB4ODEsIDB4MzUsIDB4ODYsIDB4NjcsIDB4YmYsIDB4YTcsIDB4ZTEsIDB4ZWMsIDB4NWQsCi0JMHg3MiwgMHhlMSwgMHhmOSwgMHhjZiwgMHhjMywgMHhlZSwgMHg1ZiwgMHg4MSwgMHgyYywgMHhjYywgMHhkNCwgMHg3MSwKLQkweGU0LCAweDE5LCAweGNmLCAweGM5LCAweGEwLCAweDU1LCAweDQyLCAweGZlLCAweDBjLCAweGJlLCAweGEzLCAweGJkLAotCTB4YTIsIDB4NmMsIDB4NjAsIDB4NDEsIDB4YzcsIDB4YjgsIDB4OWYsIDB4N2MsIDB4ZTIsIDB4NzgsIDB4YjcsIDB4MmMsCi0JMHhmNCwgMHgwNSwgMHgzNiwgMHhjZSwgMHg3NywgMHgwMywgMHhjMCwgMHgxMSwgMHhiYywgMHhlMywgMHhmOCwgMHhiNywKLQkweDY0LCAweDQwLCAweGJkLCAweGFiLCAweGFhLCAweDc1LCAweDI1LCAweGU5LCAweDBkLCAweGU1LCAweGY3LCAweDE4LAotCTB4ZjYsIDB4MjQsIDB4OGYsIDB4YTMsIDB4ZjksIDB4NGUsIDB4MDksIDB4NmMsIDB4MjksIDB4ZTIsIDB4YmIsIDB4MjUsCi0JMHg0NywgMHg2YiwgMHgwOSwgMHhiOSwgMHhhNywgMHg5NiwgMHg5NCwgMHgyZiwgMHhkNywgMHhmYSwgMHgyNSwgMHgwZiwKLQkweDM5LCAweDRlLCAweDhlLCAweDNlLCAweGQ5LCAweGMzLCAweGIzLCAweGU1LCAweDk2LCAweGQyLCAweDJmLCAweDg4LAotCTB4NGUsIDB4NWEsIDB4YWIsIDB4NzIsIDB4ZGMsIDB4OGIsIDB4ZTgsIDB4ZTksIDB4MDgsIDB4ZTksIDB4MzMsIDB4YzMsCi0JMHg3MSwgMHgyYywgMHhhNCwgMHhhMSwgMHgxMSwgMHg1ZiwgMHgwNywgMHg3MCwgMHg2NSwgMHg4MSwgMHhlNywgMHhhNSwKLQkweDEwLCAweDBmLCAweGZkLCAweDA4LCAweDY4LCAweDNkLCAweDk2LCAweDk0LCAweDI1LCAweDhmLCAweDc0LCAweDZjLAotCTB4OTcsIDB4NTIsIDB4ODIsIDB4ZmQsIDB4NTcsIDB4YTAsIDB4NmYsIDB4YzQsIDB4YjMsIDB4OGQsIDB4ZjksIDB4Y2QsCi0JMHgyNiwgMHgxZSwgMHgzZiwgMHg1YywgMHgyYiwgMHg4MiwgMHhjNywgMHhlNCwgMHgyZiwgMHhlMSwgMHhlMCwgMHhhZiwKLQkweGJmLCAweDQwLCAweGY5LCAweGVkLCAweDQzLCAweDhlLCAweDZmLCAweDA3LCAweGJhLCAweDY5LCAweDZkLCAweGVjLAotCTB4OTksIDB4OWYsIDB4ZWIsIDB4ODIsIDB4YWMsIDB4YjgsIDB4NmYsIDB4YmIsIDB4MWMsIDB4ODMsIDB4ZGQsIDB4ZTcsCi0JMHhhYSwgMHhkYywgMHhmZiwgMHgxOCwgMHhmNCwgMHhlOCwgMHgyZCwgMHhiNSwgMHg3ZiwgMHg3ZSwgMHhhOSwgMHgyZiwKLQkweDVjLCAweGNmLCAweGI1LCAweDVkLCAweDViLCAweGQ2LCAweGI2LCAweGNhLCAweGExLCAweDhhLCAweDc1LCAweDhkLAotCTB4ZjUsIDB4YmYsIDB4OGYsIDB4ZjUsIDB4YmEsIDB4OWMsIDB4MWUsIDB4ZTUsIDB4N2EsIDB4ZTIsIDB4MDEsIDB4NWMsCi0JMHgzNSwgMHhmMSwgMHgyOSwgMHg3OCwgMHhlMiwgMHhhYSwgMHhkZSwgMHhjZiwgMHg1NSwgMHg1YiwgMHgyNSwgMHg1NywKLQkweDg5LCAweDcwLCAweDExLCAweGNmLCAweDQ3LCAweGE4LCAweDg3LCAweGJmLCAweGFhLCAweDcwLCAweDRkLCAweDJhLAotCTB4NWMsIDB4NzgsIDB4NWYsIDB4YTUsIDB4Y2YsIDB4YjksIDB4MTUsIDB4ZWIsIDB4M2IsIDB4ZTgsIDB4ZmYsIDB4YTUsCi0JMHgxNCwgMHhlZiwgMHg5NCwgMHg5MiwgMHhhYSwgMHhlOSwgMHhkYiwgMHg5NSwgMHhhZiwgMHgyOSwgMHhjNSwgMHhkYiwKLQkweGYwLCAweGJlLCAweDEzLCAweDM2LCAweGJmLCAweDBmLCAweGI5LCAweDQ1LCAweDE3LCAweGViLCAweGRjLCAweDJkLAotCTB4NzMsIDB4NWIsIDB4ZTksIDB4OGYsIDB4NmQsIDB4YTEsIDB4M2YsIDB4MDYsIDB4YjgsIDB4NWUsIDB4ZWMsIDB4MTksCi0JMHhjMCwgMHhlNSwgMHgwMSwgMHgzNywgMHgzZCwgMHgwNywgMHgzZSwgMHgzYiwgMHhmNCwgMHgyYiwgMHg4YywgMHg5MywKLQkweGQ3LCAweDI5LCAweDVhLCAweGE2LCAweDk3LCAweGZlLCAweDFiLCAweGU3LCAweGVhLCAweGMzLCAweGRhLCAweDY4LAotCTB4MWMsIDB4ZjAsIDB4ZTEsIDB4NjksIDB4ZTAsIDB4OTksIDB4YWIsIDB4YWEsIDB4YmIsIDB4MGIsIDB4YzgsIDB4NjAsCi0JMHg3YiwgMHg5YywgMHg2NywgMHgyZiwgMHg1NSwgMHgzZiwgMHg4YiwgMHg2NywgMHhkNywgMHgzNSwgMHhmMCwgMHg4YiwKLQkweGJjLCAweDIyLCAweGJkLCAweGE0LCAweDk1LCAweGY3LCAweDQ4LCAweGIwLCAweDM3LCAweDA3LCAweDdhLCAweDFjLAotCTB4MzcsIDB4MjQsIDB4M2YsIDB4NmEsIDB4MjEsIDB4M2YsIDB4ZTcsIDB4M2QsIDB4MmMsIDB4ZWQsIDB4ZDIsIDB4ZTIsCi0JMHhkZCwgMHg2NywgMHg0YywgMHhiNywgMHgxOSwgMHg2YiwgMHg0ZCwgMHg3NSwgMHhmNiwgMHhlMywgMHg0YiwgMHhiYywKLQkweDhiLCAweDRkLCAweGYxLCAweGVlLCAweDZlLCAweDk4LCAweGQ3LCAweDE4LCAweDhmLCAweDJjLCAweGQ5LCAweGYyLAotCTB4NzgsIDB4NmQsIDB4NTgsIDB4MWUsIDB4YWQsIDB4YTUsIDB4YWQsIDB4ZmIsIDB4ZTEsIDB4MDMsIDB4MGEsIDB4ZWIsCi0JMHg3NywgMHhiNCwgMHg0MywgMHg3MSwgMHhmYSwgMHgyZiwgMHgxMywgMHg3OSwgMHg2MCwgMHg4YiwgMHgxZCwgMHhlNCwKLQkweDA1LCAweDI1LCAweGQ2LCAweDZjLCAweDczLCAweDY5LCAweGRlLCAweGUzLCAweDU4LCAweDU1LCAweGQ5LCAweDlhLAotCTB4M2IsIDB4ZmMsIDB4NWYsIDB4ZTYsIDB4MGQsIDB4ZGMsIDB4OWYsIDB4ZmUsIDB4MWEsIDB4NzksIDB4ODIsIDB4ODcsCi0JMHgzYywgMHhjMSwgMHg0MywgMHg5ZSwgMHhlMCwgMHgyMSwgMHg0ZiwgMHhmMCwgMHg5MCwgMHgyNywgMHg3OCwgMHhjOCwKLQkweDEzLCAweDNjLCAweGU0LCAweDA5LCAweDFlLCAweGYyLCAweDA0LCAweGM0LCAweGVlLCAweGEwLCAweDVlLCAweDE4LAotCTB4NDMsIDB4ZmUsIDB4MGIsIDB4ZmYsIDB4ZTUsIDB4ZGQsIDB4MDYsIDB4M2UsIDB4ZjEsIDB4ZmUsIDB4OTIsIDB4MzEsCi0JMHg4NywgMHhiMSwgMHg5OSwgMHg3MywgMHhhYiwgMHhkYiwgMHg1YywgMHhjYSwgMHg0ZCwgMHhmOSwgMHhiZSwgMHgzYiwKLQkweDMxLCAweDM3LCAweDFlLCAweGU2LCAweDIzLCAweDg0LCAweDg5LCAweDYyLCAweDM3LCAweGUxLCAweGU0LCAweGEwLAotCTB4ZWIsIDB4NjgsIDB4YjAsIDB4MzEsIDB4ZTYsIDB4MmIsIDB4NDEsIDB4Y2MsIDB4MGEsIDB4NzIsIDB4ZTUsIDB4YjcsCi0JMHg5MSwgMHhiMywgMHhhNCwgMHg5MCwgMHhiMywgMHhmNCwgMHgyMywgMHgzZiwgMHhlMSwgMHg5ZCwgMHg3NSwgMHg3NCwKLQkweGM3LCAweDk0LCAweGQ1LCAweDhlLCAweDdhLCAweDYzLCAweGRhLCAweDNkLCAweDFlLCAweDczLCAweDY5LCAweDNiLAotCTB4NTUsIDB4ZDAsIDB4ZjUsIDB4YjksIDB4NWUsIDB4ZjEsIDB4MjUsIDB4MzcsIDB4ZjIsIDB4NGQsIDB4ZTQsIDB4YWQsCi0JMHhjZiwgMHhhOSwgMHhmYiwgMHhiNCwgMHhmMSwgMHgyMSwgMHhjYSwgMHhiYywgMHhmMiwgMHgwOSwgMHhiOSwgMHg2YiwKLQkweGM0LCAweGRmLCAweGUwLCAweDFlLCAweDUwLCAweDVmLCAweDIwLCAweGZmLCAweDQ0LCAweDdhLCAweGNlLCAweDgxLAotCTB4ZTEsIDB4ZTcsIDB4NjIsIDB4MTIsIDB4M2YsIDB4YjMsIDB4MWQsIDB4NzMsIDB4OTYsIDB4ZjQsIDB4YWEsIDB4YmIsCi0JMHgyNCwgMHg4OCwgMHhmMiwgMHhkYywgMHg1NSwgMHhjOCwgMHhjYiwgMHgxNiwgMHhmZCwgMHgxYywgMHg2ZiwgMHgxYywKLQkweDg4LCAweDk3LCAweGZlLCAweDc1LCAweDY1LCAweDJhLCAweDU3LCAweDVkLCAweDUxLCAweDNhLCAweDc1LCAweGI0LAotCTB4OTYsIDB4NDcsIDB4N2QsIDB4ZDQsIDB4ZDMsIDB4MmIsIDB4ZWQsIDB4MjYsIDB4NmEsIDB4YWIsIDB4MDgsIDB4MzcsCi0JMHg3MSwgMHhmZSwgMHgzMiwgMHhhZSwgMHg2YSwgMHg5ZSwgMHg3MywgMHhlYiwgMHhmMiwgMHg4NCwgMHhhYywgMHhiOSwKLQkweGNmLCAweGNhLCAweDU0LCAweGE5LCAweDkyLCAweDRlLCAweGIyLCAweDU2LCAweGNlLCAweDVhLCAweDJiLCAweDUzLAotCTB4MjcsIDB4ODEsIDB4NjMsIDB4MTEsIDB4YjksIDB4ODEsIDB4YTEsIDB4ZjYsIDB4NWUsIDB4OTksIDB4OWEsIDB4YWUsCi0JMHgwNCwgMHhmNywgMHg1OSwgMHgwMSwgMHgwZCwgMHg4YywgMHg1NywgMHhlZCwgMHg2MiwgMHgyYywgMHgwNCwgMHhmNywKLQkweDVhLCAweGJhLCAweDVhLCAweGNiLCAweDc1LCAweDVjLCAweDZmLCAweDYyLCAweDFkLCAweGU1LCAweDM2LCAweDhjLAotCTB4YjUsIDB4OTQsIDB4MWQsIDB4NjksIDB4NTgsIDB4OTksIDB4MmEsIDB4NTYsIDB4MWIsIDB4NjksIDB4MjAsIDB4MWUsCi0JMHhlMiwgMHg4ZCwgMHhjZSwgMHhjMywgMHhiMywgMHhjNCwgMHg0NSwgMHgzZiwgMHhlMywgMHhmYiwgMHg4NSwgMHg5MSwKLQkweGZlLCAweDMwLCAweGVmLCAweDNhLCAweDg5LCAweGZjLCAweGNlLCAweDBjLCAweGY0LCAweDVjLCAweDhkLCAweGJmLAotCTB4YTMsIDB4ZTIsIDB4NTQsIDB4NGEsIDB4ZTcsIDB4M2MsIDB4OWYsIDB4NzgsIDB4MzcsIDB4YmEsIDB4ODAsIDB4MzksCi0JMHg4YywgMHgxNywgMHgyMywgMHg1OCwgMHgzZCwgMHg4NCwgMHhlZCwgMHg2YywgMHhlMCwgMHg2NywgMHg0YiwgMHhiOCwKLQkweDFmLCAweDY5LCAweGUyLCAweDM5LCAweDJmLCAweDYxLCAweDJmLCAweGQyLCAweDQ1LCAweDk4LCAweDM4LCAweDY4LAotCTB4ODMsIDB4MmMsIDB4YmQsIDB4ZmYsIDB4MmQsIDB4ZWYsIDB4MWIsIDB4Y2YsIDB4NDQsIDB4OWUsIDB4OWEsIDB4NTgsCi0JMHg0MywgMHg3OCwgMHhlMiwgMHg4OCwgMHhkNiwgMHhlMCwgMHhjNSwgMHhiOSwgMHg2MCwgMHg5ZCwgMHhiZSwgMHg3ZSwKLQkweGZmLCAweGY3LCAweDY5LCAweGZiLCAweDM2LCAweGQyLCAweDFhLCAweGVkLCAweDFmLCAweGUxLCAweDE5LCAweDBlLAotCTB4ZTQsIDB4YjYsIDB4YmUsIDB4NWUsIDB4ZmQsIDB4OWYsIDB4NjEsIDB4NzgsIDB4NDIsIDB4MTcsIDB4M2YsIDB4NzYsCi0JMHg4ZiwgMHgzYSwgMHhkYywgMHg1MCwgMHg4NywgMHg0NiwgMHhmNywgMHgxNywgMHhiYywgMHgwZiwgMHg2MCwgMHg3ZCwKLQkweGNmLCAweDZmLCAweDA3LCAweDhkLCAweGI1LCAweGUyLCAweGNiLCAweDYxLCAweDJjLCAweGRiLCAweDI5LCAweDU5LAotCTB4OTMsIDB4NzUsIDB4YzMsIDB4ZjksIDB4NzAsIDB4YmMsIDB4MDMsIDB4YjEsIDB4OGQsIDB4ZTMsIDB4M2EsIDB4ZjgsCi0JMHgwYiwgMHg1ZCwgMHg3NiwgMHhkYSwgMHhjMywgMHhiYSwgMHgyNSwgMHgxZSwgMHg3YywgMHhlMywgMHgxOSwgMHhhNiwKLQkweDFkLCAweGIxLCAweGVlLCAweDZiLCAweDBiLCAweGU3LCAweDIyLCAweDNiLCAweGEyLCAweDFmLCAweDM2LCAweGMzLAotCTB4MzksIDB4ZmEsIDB4NWIsIDB4MWQsIDB4YjUsIDB4MGIsIDB4ZmIsIDB4YzAsIDB4YjMsIDB4ZDgsIDB4NjgsIDB4NGIsCi0JMHhkMSwgMHgzMywgMHgyZSwgMHg2NywgMHhlNywgMHgyMywgMHhiZiwgMHgwNSwgMHg5ZiwgMHgzMiwgMHg2NCwgMHg4NiwKLQkweGJlLCAweGJmLCAweDAzLCAweGJlLCAweGFmLCAweDRiLCAweDBlLCAweGMxLCAweDY3LCAweDFkLCAweDg2LCAweGNmLAotCTB4M2EsIDB4ODIsIDB4N2EsIDB4NzEsIDB4NmMsIDB4YTksIDB4ZjEsIDB4OWUsIDB4OTcsIDB4MzUsIDB4NmEsIDB4OTcsCi0JMHg3NiwgMHg1YywgMHhjOSwgMHhiZiwgMHhlOCwgMHgxYiwgMHhmNiwgMHg0NywgMHhkMCwgMHgwMSwgMHhkNiwgMHg1ZCwKLQkweDkxLCAweDRlLCAweGMwLCAweGRmLCAweDNhLCAweDcxLCAweGU4LCAweGM0LCAweGQ2LCAweGZiLCAweGU0LCAweDYxLAotCTB4ZDgsIDB4NDYsIDB4N2IsIDB4NTYsIDB4YzUsIDB4ODYsIDB4YTUsIDB4ODAsIDB4ZjcsIDB4YTUsIDB4NmEsIDB4YzAsCi0JMHg3YiwgMHhmOCwgMHg2NSwgMHhlMCwgMHgzNywgMHhhNSwgMHg1OCwgMHhiMywgMHhhNCwgMHg4OCwgMHg3ZCwgMHg4YiwKLQkweGQ4LCAweGI3LCAweDg4LCAweDNhLCAweDZmLCAweGJhLCAweGQ2LCAweGY4LCAweDFkLCAweGFiLCAweDMzLCAweGE0LAotCTB4OWQsIDB4NmIsIDB4YTMsIDB4YmUsIDB4ZDUsIDB4NzAsIDB4ZmUsIDB4ZTgsIDB4NzksIDB4MGEsIDB4ZmMsIDB4N2YsCi0JMHgwYywgMHhmYywgMHgzZiwgMHg4MSwgMHhmYSwgMHhlNiwgMHg4ZiwgMHg1MCwgMHhkZiwgMHg3YywgMHgwZCwgMHhmNSwKLQkweGNkLCAweDcxLCAweGQ0LCAweDM3LCAweDEzLCAweGE4LCAweDZmLCAweGJlLCAweDBhLCAweGZmLCAweGYxLCAweDE1LAotCTB4ZjgsIDB4OGYsIDB4NjMsIDB4ZjAsIDB4MWYsIDB4ZTMsIDB4ZWEsIDB4ZWUsIDB4ZTksIDB4YTgsIDB4YjcsIDB4ZjUsCi0JMHg0ZSwgMHgyNSwgMHhkYSwgMHg4YiwgMHhlZCwgMHg2NywgMHgyMiwgMHg3NiwgMHgxMSwgMHg2NywgMHgxYSwgMHg5MywKLQkweDZhLCAweDlkLCAweGY1LCAweDhkLCAweDIzLCAweGVlLCAweDQxLCAweGQ2LCAweDM3LCAweGM3LCAweGI0LCAweDA5LAotCTB4ZTQsIDB4ZWYsIDB4ZjcsIDB4ZWYsIDB4NjcsIDB4ZGQsIDB4MTMsIDB4ZDcsIDB4NzIsIDB4YWEsIDB4ZWUsIDB4NDksCi0JMHg5ZiwgMHg3NywgMHg5MSwgMHgyMiwgMHgyMSwgMHhmNywgMHhjMywgMHg5OSwgMHhkMywgMHg2NywgMHg3MywgMHhhMCwKLQkweDI1LCAweGM4LCAweGY5LCAweDdhLCAweDQyLCAweGJmLCAweGQ3LCAweDIxLCAweDhiLCAweGIzLCAweGE4LCAweDE5LAotCTB4YmMsIDB4MWYsIDB4NmIsIDB4MDUsIDB4ZTUsIDB4MWIsIDB4MmQsIDB4OGMsIDB4NTEsIDB4MmIsIDB4N2IsIDB4ZmYsCi0JMHgxYywgMHg4ZSwgMHg0NywgMHg2NCwgMHg3MiwgMHgxZSwgMHhiNSwgMHhlZCwgMHhmMywgMHhmZiwgMHhhOCwgMHhlNSwKLQkweGQ0LCAweGQ4LCAweGMxLCAweDE4LCAweGY5LCAweGVlLCAweGYzLCAweDdmLCAweDFmLCAweDhlLCAweDhiLCAweGExLAotCTB4M2UsIDB4ODQsIDB4YjQsIDB4NWEsIDB4MGUsIDB4OWUsIDB4ZGQsIDB4NjEsIDB4Y2UsIDB4ZjEsIDB4NmEsIDB4ZWYsCi0JMHhlNiwgMHhmZiwgMHhkMywgMHg4ZSwgMHhhZCwgMHg0NSwgMHgxMywgMHhmYiwgMHgxYiwgMHgzYiwgMHg4MiwgMHhmYSwKLQkweGFjLCAweDcxLCAweGJlLCAweGFiLCAweDYxLCAweGZlLCAweDhhLCAweGZhLCAweGNlLCAweDVhLCAweDI4LCAweGI3LAotCTB4ZmQsIDB4MGEsIDB4MWUsIDB4NTgsIDB4OTYsIDB4ODYsIDB4OTgsIDB4ZTcsIDB4N2QsIDB4ZTQsIDB4ZjMsIDB4ZmIsCi0JMHg5ZiwgMHhhYiwgMHhiNywgMHhhYiwgMHg2ZiwgMHg3MiwgMHhhZSwgMHhjYSwgMHhiNywgMHg2MSwgMHhlNywgMHgyMywKLQkweGE1LCAweDFkLCAweDgxLCAweDJmLCAweDYwLCAweDNmLCAweGExLCAweDA1LCAweGZlLCAweGZkLCAweDhmLCAweDgxLAotCTB4MDcsIDB4YmMsIDB4ZjYsIDB4MWEsIDB4NmIsIDB4MzgsIDB4MmIsIDB4YmMsIDB4NGIsIDB4YjksIDB4MzIsIDB4YzUsCi0JMHhkYywgMHhiYSwgMHhhNCwgMHg3MCwgMHhiMywgMHhkNiwgMHg2MywgMHhkZCwgMHgxNywgMHhjNSwgMHg4MCwgMHgwOCwKLQkweGQ3LCAweGNmLCAweDEzLCAweDAxLCAweGRkLCAweGUzLCAweGE4LCAweGU5LCAweDA4LCAweDEzLCAweDhkLCAweDFiLAotCTB4ZWIsIDB4YmYsIDB4OGUsIDB4ZjAsIDB4MWUsIDB4ZWUsIDB4NGEsIDB4OTAsIDB4NTcsIDB4MjksIDB4N2MsIDB4NjYsCi0JMHg4OCwgMHhlZiwgMHgzZiwgMHhmZCwgMHhjMCwgMHhmNywgMHg3MCwgMHhiZCwgMHhkNSwgMHhiMCwgMHhmZSwgMHgzYywKLQkweDcyLCAweDNkLCAweGRlLCAweDk5LCAweGVjLCAweDUyLCAweGRmLCAweDE5LCAweGRmLCAweDlmLCAweGVkLCAweDk0LAotCTB4NWYsIDB4M2MsIDB4ZTMsIDB4ZmIsIDB4ZTMsIDB4NGUsIDB4N2EsIDB4ZjgsIDB4NGQsIDB4ZDQsIDB4MWUsIDB4NjcsCi0JMHg2OCwgMHgyNywgMHgyMywgMHhhNCwgMHg3MywgMHgzMCwgMHgzNSwgMHgyZCwgMHgwMywgMHhiZCwgMHg0MSwgMHgyZSwKLQkweGZlLCAweDc1LCAweGVkLCAweGUzLCAweDc0LCAweGViLCAweGUxLCAweDNlLCAweDNmLCAweDZjLCAweGQ4LCAweDI3LAotCTB4ZDUsIDB4YjAsIDB4Y2YsIDB4MGEsIDB4NmQsIDB4YjYsIDB4N2EsIDB4MmYsIDB4Y2UsIDB4NWMsIDB4ZGMsIDB4NzUsCi0JMHhhMywgMHg5NSwgMHgwOCwgMHhlYiwgMHhiMiwgMHg0NywgMHg0NywgMHhkYSwgMHhhNCwgMHhkMiwgMHg5NywgMHg1ZSwKLQkweGY5LCAweDExLCAweGYyLCAweGY1LCAweGMyLCAweDA4LCAweGU2LCAweDEyLCAweDgzLCAweDc4LCAweGM3LCAweGY5LAotCTB4NzQsIDB4MTUsIDB4YjksIDB4ZTgsIDB4NGEsIDB4NTUsIDB4ODYsIDB4YjAsIDB4M2UsIDB4NWQsIDB4MTQsIDB4ZTEsCi0JMHgzYywgMHhmYiwgMHg4YSwgMHhiNiwgMHg2YSwgMHhlOCwgMHgwMywgMHg5MiwgMHg2YiwgMHgzOCwgMHhmMywgMHgwNCwKLQkweGVhLCAweGFmLCAweDEzLCAweGViLCAweGY1LCAweDMwLCAweGY3LCAweGI5LCAweDU5LCAweDViLCAweDUzLCAweGI5LAotCTB4ZjEsIDB4MDEsIDB4YWQsIDB4OTgsIDB4MDgsIDB4Y2UsIDB4ZjgsIDB4ODcsIDB4ZjAsIDB4MTcsIDB4ODYsIDB4Y2UsCi0JMHhiNSwgMHhlZiwgMHgwMywgMHhiNywgMHgyNiwgMHgwYiwgMHhjZiwgMHgxOCwgMHhlYSwgMHgwZSwgMHhiNiwgMHgzMCwKLQkweDQyLCAweDU5LCAweGYzLCAweDc5LCAweDJkLCAweGRlLCAweDQ1LCAweDY3LCAweGZhLCAweGYzLCAweGYwLCAweDRjLAotCTB4ZDksIDB4YjAsIDB4OWUsIDB4OGUsIDB4Y2UsIDB4MTQsIDB4OTMsIDB4NzcsIDB4NjcsIDB4MmQsIDB4YWMsIDB4ZmQsCi0JMHgxYywgMHhmOCwgMHg5MSwgMHg5NywgMHhhNSwgMHg3YSwgMHhlYSwgMHgzMywgMHhmMCwgMHg5NCwgMHgxYiwgMHg3OCwKLQkweDYzLCAweDZlLCAweDkxLCAweDYxLCAweDcxLCAweGEzLCAweDg2LCAweDFmLCAweDRmLCAweGMyLCAweDBlLCAweGJmLAotCTB4ZDEsIDB4MWIsIDB4ZGQsIDB4MGQsIDB4MWIsIDB4YjYsIDB4Y2YsIDB4YmEsIDB4MDcsIDB4OGQsIDB4ZjMsIDB4ZmQsCi0JMHhiMCwgMHhjNSwgMHgxNCwgMHhlYywgMHg5MywgMHgzOSwgMHg1MywgMHg5ZSwgMHhiNSwgMHgwYSwgMHhlZCwgMHhjOSwKLQkweDcyLCAweDhkLCAweGI0LCAweDc1LCAweDRjLCAweDg2LCAweDUxLCAweGVmLCAweGYwLCAweGZjLCAweDE5LCAweDU5LAotCTB4YWMsIDB4NDcsIDB4MzQsIDB4OGMsIDB4YzIsIDB4MWUsIDB4MGYsIDB4ZTIsIDB4YjcsIDB4MWYsIDB4ZWYsIDB4MWMsCi0JMHhmYywgMHg1OCwgMHgyYiwgMHhhZCwgMHhjOCwgMHhlMywgMHgyYSwgMHgxNywgMHg0NywgMHhhZSwgMHgzZCwgMHg0NCwKLQkweGZhLCAweGVlLCAweDA0LCAweDNjLCAweGY1LCAweDk5LCAweDdhLCAweDdhLCAweGE3LCAweGI4LCAweDdkLCAweGY0LAotCTB4MTUsIDB4NDksIDB4ZTAsIDB4YzYsIDB4MWEsIDB4ZWYsIDB4MjIsIDB4NmMsIDB4YmQsIDB4MWYsIDB4Y2YsIDB4YjQsCi0JMHg1NSwgMHgyMCwgMHg2ZiwgMHgxNSwgMHg3ZSwgMHhkZiwgMHgzNywgMHg0NiwgMHhmOSwgMHg4ZCwgMHhlMiwgMHg3YywKLQkweDM4LCAweDFlLCAweGI0LCAweGJlLCAweDRjLCAweGRkLCAweDRiLCAweGVlLCAweDk2LCAweDk1LCAweGY5LCAweDI4LAotCTB4MGUsIDB4OWUsIDB4ODYsIDB4MGQsIDB4ZjIsIDB4Y2UsIDB4NzYsIDB4MGMsIDB4N2MsIDB4ZTEsIDB4NTgsIDB4MGIsCi0JMHhlMywgMHgyMSwgMHhlNiwgMHgxNywgMHg5NywgMHg3MSwgMHhlZSwgMHg4YywgMHg5YywgMHg0MSwgMHhmZCwgMHgyZiwKLQkweDdkLCAweDdjLCAweGE2LCAweDgwLCAweDdmLCAweDdiLCAweGE4LCAweGVmLCAweDliLCAweGQ3LCAweDFiLCAweDM2LAotCTB4ZmIsIDB4NjMsIDB4YTAsIDB4Y2YsIDB4NmMsIDB4NTgsIDB4Y2YsIDB4MzUsIDB4NDEsIDB4N2QsIDB4YjIsIDB4MjYsCi0JMHg4OCwgMHhjNywgMHg0OSwgMHhmZiwgMHg3NiwgMHgzZCwgMHhmMywgMHhhMiwgMHgzYywgMHhhMCwgMHhjZSwgMHg1NCwKLQkweDkzLCAweGUzLCAweGYzLCAweGJlLCAweGVmLCAweDhlLCAweDBlLCAweDBlLCAweDJmLCAweDRhLCAweDdhLCAweGY4LAotCTB4YTQsIDB4ZWMsIDB4YjMsIDB4MGUsIDB4YjEsIDB4MWUsIDB4YjMsIDB4ODgsIDB4YzcsIDB4YmYsIDB4YmQsIDB4MjUsCi0JMHhlMywgMHhmYiwgMHhhNywgMHg0MSwgMHhmYiwgMHhmNywgMHhkNSwgMHgzZSwgMHgyZiwgMHg4MiwgMHg3ZSwgMHhmMCwKLQkweDRhLCAweGQ1LCAweDI0LCAweGE0LCAweDE1LCAweGNmLCAweDA0LCAweGU5LCAweDJkLCAweGNiLCAweGYxLCAweGZhLAotCTB4ODUsIDB4NTAsIDB4MzYsIDB4OGYsIDB4ODksIDB4ZWIsIDB4NWQsIDB4MzYsIDB4NWMsIDB4YmIsIDB4MGMsIDB4ZDgsCi0JMHg4NSwgMHg5MCwgMHhiNiwgMHgwYywgMHhlOCwgMHhjNSwgMHhmZSwgMHhmNSwgMHhiNywgMHgxMywgMHhmNCwgMHgwZCwKLQkweDk0LCAweGI5LCAweDhiLCAweGFjLCAweGQxLCAweDFkLCAweDQxLCAweDFlLCAweDk1LCAweGY4LCAweDI0LCAweDNmLAotCTB4MTAsIDB4OTcsIDB4Y2QsIDB4N2UsIDB4ODAsIDB4ZWIsIDB4ZTIsIDB4ZDcsIDB4ZDAsIDB4MTUsIDB4ZDIsIDB4NTEsCi0JMHg1NCwgMHhmZSwgMHg1MywgMHhjNSwgMHgyZCwgMHg4NSwgMHhjZiwgMHhkOCwgMHhlMiwgMHgwYiwgMHgyYSwgMHhlYSwKLQkweGI5LCAweDZhLCAweGQwLCAweDM3LCAweDMxLCAweGZlLCAweDUxLCAweDg3LCAweGJiLCAweGUwLCAweGZmLCAweGEwLAotCTB4ODMsIDB4YjAsIDB4ZTMsIDB4ZGMsIDB4M2MsIDB4ZWYsIDB4MjcsIDB4ODYsIDB4NzgsIDB4YWYsIDB4NzQsIDB4MzYsCi0JMHgwZiwgMHhkOSwgMHgyZSwgMHhmMCwgMHhmYiwgMHg2MywgMHgyMiwgMHhhOCwgMHgzMSwgMHg4MywgMHhmYSwgMHgyYiwKLQkweDQ1LCAweDVmLCAweDg4LCAweGI2LCAweGE0LCAweGZjLCAweDY0LCAweDVlLCAweDdkLCAweDZmLCAweDhjLCAweDAzLAotCTB4YzYsIDB4YTcsIDB4ZWYsIDB4NmMsIDB4ZjgsIDB4OWIsIDB4ODksIDB4MWYsIDB4NjQsIDB4ODMsIDB4YmYsIDB4OTksCi0JMHgwOCwgMHhiZiwgMHhmZCwgMHg1NiwgMHg4MywgMHgzYywgMHhlMiwgMHhlMSwgMHg5YSwgMHgyOSwgMHgxMywgMHhiNSwKLQkweGU4LCAweDZmLCAweDI4LCAweDI4LCAweDA3LCAweGY4LCAweGU2LCAweDVhLCAweDk0LCAweDNiLCAweGY4LCAweDQxLAotCTB4NGQsIDB4YjMsIDB4NDksIDB4OTYsIDB4NGIsIDB4NjEsIDB4NGUsIDB4YzQsIDB4MWEsIDB4ODAsIDB4M2MsIDB4YzQsCi0JMHg3OCwgMHgzMSwgMHhhYSwgMHgyZiwgMHgwNywgMHgyMCwgMHgzZiwgMHhmMCwgMHgxYywgMHg3NCwgMHhiZCwgMHgzYiwKLQkweDFiLCAweGQ0LCAweGI5LCAweDI1LCAweGZhLCAweGM1LCAweGZlLCAweGE4LCAweGVlLCAweGRkLCAweDI1LCAweGE1LAotCTB4NjMsIDB4N2MsIDB4MWYsIDB4OTMsIDB4NzcsIDB4NjYsIDB4NjMsIDB4ZWEsIDB4N2QsIDB4NDEsIDB4NjIsIDB4ZTEsCi0JMHg3YiwgMHg4ZSwgMHhlMywgMHg1MiwgMHg1MCwgMHhlZiwgMHhhYiwgMHgyMSwgMHgzZSwgMHhkNCwgMHg2OSwgMHg1ZiwKLQkweDg5LCAweGM2LCAweGE2LCAweDc2LCAweGJjLCAweDFlLCAweGFjLCAweDliLCAweGFjLCAweDU3LCAweGU1LCAweGYxLAotCTB4ZmEsIDB4MmEsIDB4Y2UsIDB4YWYsIDB4NDksIDB4NmUsIDB4YmMsIDB4MjgsIDB4YmIsIDB4NmQsIDB4NGIsIDB4YzUsCi0JMHg3ZCwgMHgzNywgMHg0ZSwgMHgxZCwgMHhhMywgMHg3ZSwgMHg4ZCwgMHhhOSwgMHhiYSwgMHhiMywgMHg4OCwgMHg3YywKLQkweGExLCAweDMwLCAweGMyLCAweDZmLCAweDNjLCAweGJmLCAweGJhLCAweGFiLCAweDUwLCAweDRlLCAweDViLCAweDU5LAotCTB4ZjksIDB4ZDAsIDB4NzcsIDB4NGQsIDB4OGUsIDB4NDUsIDB4NDcsIDB4M2QsIDB4NzQsIDB4ZDcsIDB4YzMsIDB4YjUsCi0JMHgwYiwgMHg3NywgMHgwNSwgMHg2NywgMHhjNSwgMHhmYiwgMHgxYSwgMHg2MSwgMHgwZCwgMHhmNSwgMHg2ZCwgMHhmNiwKLQkweDVmLCAweDZmLCAweDM1LCAweDY1LCAweGVkLCAweDU2LCAweGRmLCAweGJmLCAweGRmLCAweGIxLCAweGM0LCAweDBkLAotCTB4NmIsIDB4NTcsIDB4NGIsIDB4ZDUsIDB4YWUsIDB4ZWQsIDB4MmEsIDB4MDcsIDB4NzEsIDB4NDcsIDB4NTIsIDB4NWEsCi0JMHgxZSwgMHhmNiwgMHg3YSwgMHhjNiwgMHg0MywgMHg5ZCwgMHhhMywgMHhhNywgMHgwZiwgMHhhZSwgMHhlYSwgMHgxNiwKLQkweDYyLCAweDZlLCAweDNhLCAweDM1LCAweDI3LCAweDZlLCAweDJmLCAweGJmLCAweDM3LCAweGNmLCAweDM4LCAweDg0LAotCTB4ZDksIDB4MTksIDB4ZGMsIDB4NzUsIDB4ZGQsIDB4MzQsIDB4YWUsIDB4ZmMsIDB4YWMsIDB4NDgsIDB4MTgsIDB4N2IsCi0JMHg2ZSwgMHg2YSwgMHhiNCwgMHg4OSwgMHhjNiwgMHhkYywgMHg5MiwgMHhiNiwgMHgyMCwgMHgxMywgMHgyNiwgMHg2OCwKLQkweDI5LCAweDk1LCAweGEzLCAweDNjLCAweDhkLCAweDdmLCAweDFiLCAweGIwLCAweDdhLCAweGQ3LCAweGQzLCAweGEwLAotCTB4NzMsIDB4MWEsIDB4NzQsIDB4ZjIsIDB4MWMsIDB4ZDMsIDB4YjUsIDB4NDgsIDB4ZTcsIDB4YTIsIDB4NWEsIDB4ODEsCi0JMHg3ZCwgMHhjNCwgMHg3YywgMHgwZiwgMHgzMSwgMHhkZiwgMHg0MywgMHhjYywgMHhmNywgMHgxMCwgMHhmMywgMHgzZCwKLQkweGM0LCAweDdjLCAweDBmLCAweDMxLCAweGRmLCAweDQzLCAweGNjLCAweGY3LCAweDEwLCAweGYzLCAweGJkLCAweGYxLAotCTB4MzAsIDB4NGYsIDB4N2IsIDB4NjIsIDB4M2QsIDB4NGYsIDB4NWIsIDB4YTksIDB4ZjMsIDB4M2IsIDB4OTQsIDB4YTIsCi0JMHhhNSwgMHg1OCwgMHg5NCwgMHgyMCwgMHhjZiwgMHgxNSwgMHg5ZCwgMHgzOSwgMHg0ZCwgMHg5NCwgMHhlNywgMHg1ZSwKLQkweGZiLCAweDliLCAweDQ4LCAweGIwLCAweDhlLCAweDM5LCAweDFlLCAweGQ3LCAweDE1LCAweDM1LCAweGRkLCAweGU2LAotCTB4YmEsIDB4MjAsIDB4Y2YsIDB4NjMsIDB4NmQsIDB4YjUsIDB4NzksIDB4MGQsIDB4ZjIsIDB4YjUsIDB4MGMsIDB4ZmQsCi0JMHgxOSwgMHhlZCwgMHgyMiwgMHgxMSwgMHhkNCwgMHg4YiwgMHg5OSwgMHhmMywgMHhmNywgMHhiYSwgMHg4OCwgMHhiZiwKLQkweDg1LCAweDlhLCAweDhhLCAweGMxLCAweGJjLCAweDE3LCAweGJjLCAweDk3LCAweDdmLCAweGI3LCAweDAwLCAweDM5LAotCTB4ZjAsIDB4ZGQsIDB4N2QsIDB4YWMsIDB4MjcsIDB4MGEsIDB4YjUsIDB4YTQsIDB4MTQsIDB4MTcsIDB4YTMsIDB4ZmMsCi0JMHgwNywgMHhlYiwgMHhiYywgMHg3ZCwgMHg1YSwgMHhiZSwgMHg0MiwgMHhkOSwgMHhlYSwgMHgzMiwgMHg5ZCwgMHgwMCwKLQkweDUzLCAweGVjLCAweGM2LCAweGJjLCAweGVlLCAweDRkLCAweDU1LCAweDIzLCAweGFkLCAweGQ0LCAweDQ5LCAweGNmLAotCTB4N2UsIDB4ZDAsIDB4MTYsIDB4ZGQsIDB4ZTMsIDB4OGEsIDB4MTgsIDB4YjMsIDB4MDksIDB4ZDEsIDB4NjcsIDB4OTEsCi0JMHhkMywgMHhkYSwgMHg0MywgMHhlYSwgMHg2ZiwgMHgxZCwgMHg3YSwgMHhiMCwgMHg4ZiwgMHgzZSwgMHgzYiwgMHgxMCwKLQkweGZkLCAweDJkLCAweDA2LCAweGViLCAweGFlLCAweGVjLCAweGM2LCAweGZkLCAweDJiLCAweGNmLCAweDkxLCAweDgwLAotCTB4YmQsIDB4N2UsIDB4NjksIDB4MjcsIDB4Y2UsIDB4MDYsIDB4YjksIDB4NWUsIDB4ZGUsIDB4YTEsIDB4ZjIsIDB4NmUsCi0JMHhmOCwgMHhjZSwgMHhkMywgMHg0MywgMHhlOSwgMHgzZSwgMHhlOSwgMHhkYSwgMHgyNSwgMHg2NywgMHg4NiwgMHg1OCwKLQkweGEzLCAweGI1LCAweDAxLCAweDFmLCAweDYxLCAweDc5LCAweGU3LCAweGI0LCAweDRiLCAweDk2LCAweGU3LCAweGUxLAotCTB4NWIsIDB4ZTcsIDB4ZDMsIDB4MGUsIDB4ZmYsIDB4YmUsIDB4NjAsIDB4MDEsIDB4MjEsIDB4NmQsIDB4YTEsIDB4M2UsCi0JMHhkNiwgMHhjNywgMHg5OCwgMHhiYywgMHg1OCwgMHhhNywgMHhhZSwgMHhmNCwgMHg2MCwgMHg3ZCwgMHgzZiwgMHg3NCwKLQkweDcxLCAweDFiLCAweDZjLCAweDQ4LCAweGM3LCAweGZlLCAweDExLCAweGVlLCAweGY3LCAweDE0LCAweGVlLCAweDFlLAotCTB4ZmIsIDB4YjcsIDB4NzcsIDB4MmEsIDB4ZGQsIDB4ZDAsIDB4ZDMsIDB4NTYsIDB4NGEsIDB4MDcsIDB4ZWQsIDB4MWYsCi0JMHhhYiwgMHgyZCwgMHgxZCwgMHhlMSwgMHhmNywgMHhjMiwgMHg2OSwgMHhhZiwgMHhmMSwgMHhiYiwgMHhlMSwgMHgzZSwKLQkweGFkLCAweDUwLCAweGUxLCAweGRmLCAweDM4LCAweDBjLCAweGM5LCAweDIxLCAweDhiLCAweDdmLCAweGZmLCAweGIzLAotCTB4NGYsIDB4N2IsIDB4YTAsIDB4NGEsIDB4MTgsIDB4MWIsIDB4N2QsIDB4ZDYsIDB4ZTEsIDB4Y2IsIDB4YjAsIDB4ZTUsCi0JMHhmZiwgMHgyOSwgMHhkYywgMHhlYSwgMHg2MiwgMHhkYiwgMHgzYSwgMHhjYiwgMHhmMCwgMHhmYiwgMHgxZCwgMHhlNywKLQkweGM3LCAweDRkLCAweGRkLCAweGU0LCAweDM0LCAweDcxLCAweDEyLCAweDI3LCAweGNhLCAweGMwLCAweGM3LCAweDM5LAotCTB4NDksIDB4M2QsIDB4MzksIDB4ZDUsIDB4NGUsIDB4YTIsIDB4MTQsIDB4MjIsIDB4ODgsIDB4ODQsIDB4ZTUsIDB4ZmMsCi0JMHhjYywgMHg2MywgMHgxNCwgMHgzYywgMHhjOCwgMHhhNiwgMHg0ZSwgMHg0MiwgMHg1NSwgMHg5NCwgMHg3NCwgMHg1YiwKLQkweDI3LCAweGVlLCAweGI4LCAweDQwLCAweDVjLCAweDgwLCAweDZhLCAweDM5LCAweDY5LCAweGU5LCAweDg2LCAweDNkLAotCTB4YTcsIDB4NWIsIDB4YmEsIDB4MDAsIDB4NTcsIDB4OWUsIDB4ZTMsIDB4YTQsIDB4NGQsIDB4ZTcsIDB4Y2MsIDB4MWEsCi0JMHgwMywgMHg2OSwgMHg3MCwgMHg0MSwgMHgyMywgMHgzMywgMHg2ZCwgMHhlMywgMHg2NiwgMHgzNywgMHg0OCwgMHg1YywKLQkweDU3LCAweDI5LCAweDgzLCAweDAyLCAweDZiLCAweDJiLCAweGI4LCAweGUxLCAweGVmLCAweGUyLCAweGYwLCAweDNjLAotCTB4ZGYsIDB4MzksIDB4NzYsIDB4ZDMsIDB4YzAsIDB4NDQsIDB4MjQsIDB4ZWIsIDB4N2MsIDB4ZTcsIDB4M2IsIDB4ZGYsCi0JMHhmZiwgMHhmNywgMHhiZSwgMHhjZiwgMHhmYiwgMHg5YiwgMHg2ZSwgMHhiOSwgMHgwOCwgMHgzYSwgMHhjZSwgMHg4ZCwKLQkweGI1LCAweGZhLCAweGZlLCAweGQ2LCAweDBlLCAweDlmLCAweDg3LCAweDA3LCAweGZiLCAweDdjLCAweDE5LCAweGE1LAotCTB4NzUsIDB4YzksIDB4OWMsIDB4ZDYsIDB4YTcsIDB4YmIsIDB4MGUsIDB4N2QsIDB4N2IsIDB4MTYsIDB4NmIsIDB4OGEsCi0JMHhlMCwgMHgxYywgMHgxZSwgMHhlOSwgMHhkMywgMHg3OCwgMHg2NCwgMHhmMCwgMHhiZCwgMHhmZiwgMHhkMCwgMHg3YiwKLQkweGRmLCAweGExLCAweGY3LCAweGRlLCAweGZmLCAweGQxLCAweDllLCAweGU1LCAweGMzLCAweGY0LCAweGMwLCAweDc1LAotCTB4NWEsIDB4NTMsIDB4MWEsIDB4ZmQsIDB4ZjIsIDB4OTMsIDB4NmEsIDB4MzksIDB4NmYsIDB4MjUsIDB4YTksIDB4MGIsCi0JMHhjYywgMHg4OCwgMHhhYiwgMHg2NiwgMHg5YywgMHgzNiwgMHg2MCwgMHg1YywgMHg5YiwgMHhhYywgMHhhZSwgMHg4MywKLQkweGU2LCAweGIxLCAweDhmLCAweDc2LCAweDliLCAweGYxLCAweGYyLCAweDg5LCAweDNlLCAweGYyLCAweDRjLCAweDEwLAotCTB4ZDcsIDB4NjAsIDB4ZDgsIDB4YzMsIDB4MTEsIDB4YjQsIDB4NzMsIDB4NWYsIDB4NzQsIDB4MTIsIDB4ZTYsIDB4MzksCi0JMHhlZCwgMHhiZiwgMHhhMSwgMHgwZSwgMHhlMywgMHhhYSwgMHg5YywgMHhjZSwgMHhmZCwgMHg2MCwgMHg5YiwgMHgxNiwKLQkweGI5LCAweDZkLCAweGE3LCAweGJhLCAweGZkLCAweGRjLCAweDIwLCAweGQ4LCAweGJiLCAweGE5LCAweDNlLCAweGVhLAotCTB4MTcsIDB4MmYsIDB4MzgsIDB4Y2QsIDB4M2EsIDB4NzMsIDB4NWYsIDB4OTgsIDB4NzcsIDB4MDUsIDB4YTIsIDB4NzksCi0JMHg0YSwgMHhhNCwgMHg1NCwgMHgxMSwgMHhiOSwgMHg4NiwgMHhkZiwgMHg2ZiwgMHgyYSwgMHg3ZSwgMHhmYywgMHg0MiwKLQkweGQxLCAweGQ2LCAweDllLCAweDk2LCAweDFiLCAweGM1LCAweDJmLCAweDQ4LCAweDE1LCAweDMyLCAweDY3LCAweGM3LAotCTB4NzEsIDB4ZGQsIDB4M2IsIDB4NGUsIDB4NTQsIDB4OWYsIDB4ZjksIDB4MGYsIDB4ZjIsIDB4NGEsIDB4NjIsIDB4ZTMsCi0JMHg5NCwgMHg2OSwgMHg2ZCwgMHhmMiwgMHhjMywgMHg3NSwgMHhlNiwgMHhkNSwgMHg1OSwgMHhlNiwgMHgxZCwgMHg2MSwKLQkweDdlLCAweDViLCAweDQ0LCAweGQyLCAweGUxLCAweDgwLCAweGQ2LCAweDRiLCAweGU1LCAweDY5LCAweDY4LCAweDEyLAotCTB4ZjgsIDB4ZjYsIDB4ODcsIDB4ZjUsIDB4YjMsIDB4N2QsIDB4ZjQsIDB4YjksIDB4N2MsIDB4YmMsIDB4Y2UsIDB4NzcsCi0JMHgwMywgMHg0ZiwgMHg0MywgMHhlYSwgMHg3NiwgMHgwMCwgMHhmYSwgMHgyYiwgMHg4MCwgMHhjNywgMHhlNCwgMHhiOSwKLQkweDczLCAweGJmLCAweGNmLCAweDczLCAweDZkLCAweGE4LCAweGEzLCAweDBkLCAweGRiLCAweDI2LCAweGI5LCAweDExLAotCTB4ZTAsIDB4YTAsIDB4MWEsIDB4ZDYsIDB4ZjksIDB4NDcsIDB4ZjUsIDB4YjAsIDB4YzYsIDB4ZTUsIDB4NDAsIDB4OTksCi0JMHg3ZSwgMHg3YiwgMHhmMywgMHhhOCwgMHhjNiwgMHhlOCwgMHhkNCwgMHhlZSwgMHhmNywgMHhmNCwgMHg1ZSwgMHg1MCwKLQkweGNlLCAweDk2LCAweDFkLCAweGQyLCAweGFhLCAweDI5LCAweDNiLCAweGUwLCAweGI1LCAweGViLCAweGI1LCAweDM3LAotCTB4ZmEsIDB4NzksIDB4NTcsIDB4MzcsIDB4NmEsIDB4ZGYsIDB4ZWYsIDB4ZjMsIDB4NmMsIDB4MzQsIDB4ZDYsIDB4NWQsCi0JMHhlOCwgMHhmMywgMHhlYSwgMHhhMiwgMHhiZSwgMHhjZCwgMHg0NSwgMHhkYiwgMHhhYywgMHg4NCwgMHhiZCwgMHg3ZCwKLQkweDViLCAweDZhLCAweDFiLCAweGRmLCAweDk1LCAweDc3LCAweDhiLCAweGRmLCAweDkxLCAweDVmLCAweDZjLCAweDljLAotCTB4ODEsIDB4Y2UsIDB4NjEsIDB4OTUsIDB4YjIsIDB4OTAsIDB4MjcsIDB4NmYsIDB4ZDcsIDB4NWMsIDB4ZjcsIDB4NmQsCi0JMHg2NywgMHgwMSwgMHhmNiwgMHg4MSwgMHhlYiwgMHhmZSwgMHhkNiwgMHhkOSwgMHg5MywgMHhkOCwgMHhjNCwgMHgzNywKLQkweGIxLCAweGU3LCAweDBjLCAweDc4LCAweDg4LCAweDU4LCAweDk4LCAweDA2LCAweGJkLCAweDdkLCAweGIxLCAweDVmLAotCTB4M2EsIDB4NDIsIDB4OWEsIDB4NGUsIDB4ODYsIDB4MjcsIDB4NWEsIDB4YjEsIDB4MDcsIDB4YzMsIDB4ZDcsIDB4YzMsCi0JMHhiOSwgMHg5NywgMHhlOSwgMHg3ZSwgMHhkMiwgMHg4YywgMHg1MSwgMHhmYiwgMHgwOSwgMHhlNiwgMHg2ZiwgMHgwNSwKLQkweDVmLCAweDFjLCAweGM1LCAweDRmLCAweGM5LCAweDlkLCAweDcxLCAweGFjLCAweDc1LCAweDljLCAweGI0LCAweGQ3LAotCTB4MmEsIDB4YjEsIDB4YzcsIDB4YjAsIDB4OGYsIDB4NGMsIDB4OGIsIDB4ZGMsIDB4Y2IsIDB4NmYsIDB4ZjYsIDB4ZDEsCi0JMHg5ZiwgMHg3NywgMHgyZiwgMHhjZiwgMHhiMiwgMHhmMSwgMHhiOSwgMHg0ZSwgMHg3MSwgMHhhNSwgMHgwNSwgMHhmMiwKLQkweDdiLCAweDc1LCAweGQyLCAweGQzLCAweDk1LCAweDdlLCAweGFkLCAweDRlLCAweGEwLCAweGJkLCAweDlkLCAweDdkLAotCTB4NGYsIDB4NTEsIDB4YjcsIDB4Y2IsIDB4YmEsIDB4YWQsIDB4ZDAsIDB4YzUsIDB4ZTcsIDB4YTAsIDB4MDMsIDB4YTUsCi0JMHg2YSwgMHgxNywgMHhhNCwgMHgzZSwgMHgxZSwgMHg0MiwgMHgxYiwgMHhlYSwgMHgyOCwgMHgxYSwgMHg0YiwgMHg2NCwKLQkweDI2LCAweGNmLCAweDdjLCAweDJkLCAweGU2LCAweDRlLCAweDYxLCAweDhkLCAweDBiLCAweGM0LCAweDBkLCAweGFlLAotCTB4YjEsIDB4OGQsIDB4MzEsIDB4MzgsIDB4YmYsIDB4Y2UsIDB4MDYsIDB4OGQsIDB4YjAsIDB4OGUsIDB4ZjQsIDB4OWQsCi0JMHgwNCwgMHg0ZiwgMHgyNiwgMHgyOSwgMHgzNywgMHgzMSwgMHhkZSwgMHgxOCwgMHhjNiwgMHg2MywgMHhiOSwgMHgxMywKLQkweGUzLCAweDVkLCAweDkwLCAweDk0LCAweGQzLCAweDE4LCAweDczLCAweDBhLCAweDZkLCAweDg4LCAweDMzLCAweDUzLAotCTB4ZDAsIDB4MWYsIDB4ODYsIDB4ZDQsIDB4ZWMsIDB4N2EsIDB4MTgsIDB4ZjIsIDB4YmIsIDB4NGYsIDB4NjYsIDB4Y2QsCi0JMHgyMywgMHgwNywgMHhmNiwgMHg5OCwgMHhkNSwgMHhmNiwgMHg4MSwgMHg2MSwgMHg4YywgMHhmOSwgMHg2YiwgMHhlYSwKLQkweDNjLCAweGIwLCAweDI2LCAweGY2LCAweGM3LCAweDBmLCAweGI2LCAweDcxLCAweDZhLCAweDdkLCAweDBkLCAweDM4LAotCTB4YjUsIDB4ZjYsIDB4NjEsIDB4Y2EsIDB4MzksIDB4MmIsIDB4MzMsIDB4NjEsIDB4YWUsIDB4ODksIDB4ZjUsIDB4NjEsCi0JMHhhYywgMHg5OSwgMHg3ZSwgMHhhYywgMHg2NywgMHg4MSwgMHg0MywgMHg0NywgMHhmYywgMHgzYSwgMHhiNiwgMHgxNSwKLQkweDIzLCAweDg1LCAweGIzLCAweGY3LCAweGVjLCAweDVhLCAweGQ2LCAweDdkLCAweDU2LCAweDUyLCAweDZiLCAweDE5LAotCTB4OTksIDB4ZDcsIDB4ZmQsIDB4NzgsIDB4ODYsIDB4ODMsIDB4NWEsIDB4ZjcsIDB4MjAsIDB4YWYsIDB4YzYsIDB4N2EsCi0JMHg3MCwgMHg5NiwgMHg4OSwgMHgwNywgMHgzNiwgMHg3MCwgMHhiNCwgMHg0NywgMHhjYiwgMHhjYywgMHg3ZSwgMHg4ZiwKLQkweDY3LCAweGYxLCAweGFkLCAweDg3LCAweDc3LCAweGQ0LCAweDI2LCAweGIxLCAweDZmLCAweDQwLCAweDQ2LCAweGU2LAotCTB4MWIsIDB4ZjUsIDB4MjEsIDB4ZjksIDB4MjQsIDB4ZGYsIDB4ZDEsIDB4Y2YsIDB4MzgsIDB4Y2IsIDB4ZGQsIDB4YmMsCi0JMHgyOSwgMHgxZiwgMHhlNywgMHg3NSwgMHgyYywgMHg3NCwgMHgzMSwgMHgyMCwgMHhkNiwgMHg3OSwgMHhjZiwgMHgzZSwKLQkweDFmLCAweDU5LCAweDVjLCAweDU1LCAweGZjLCAweDNlLCAweDcyLCAweDdlLCAweDRiLCAweDA1LCAweGQxLCAweDM2LAotCTB4ODQsIDB4NzYsIDB4NWMsIDB4ODcsIDB4MjksIDB4NzMsIDB4ZjksIDB4YmYsIDB4YjksIDB4NGIsIDB4YTMsIDB4YWUsCi0JMHgzYiwgMHhhZiwgMHhmMywgMHhjMywgMHgxMiwgMHhlNiwgMHhhYSwgMHg2YSwgMHhlOCwgMHhlNCwgMHg3MSwgMHhjOSwKLQkweDg3LCAweGRiLCAweDMxLCAweDU3LCAweGMyLCAweGRjLCAweDUyLCAweDIzLCAweDU4LCAweDBmLCAweGNiLCAweDNkLAotCTB4ZTQsIDB4ODksIDB4YzgsIDB4OWUsIDB4NzAsIDB4N2MsIDB4MmIsIDB4YmQsIDB4YTksIDB4MTIsIDB4ZDEsIDB4NjEsCi0JMHg2NSwgMHgyNSwgMHg3MywgMHhmOCwgMHhiNSwgMHgyOCwgMHgxZCwgMHg0NywgMHg4YywgMHg0NCwgMHgxNSwgMHg3OCwKLQkweDE3LCAweDdiLCAweGIyLCAweDRmLCAweGJhLCAweDZlLCAweGRhLCAweDY2LCAweDdkLCAweGMyLCAweDBjLCAweDI5LAotCTB4ZmEsIDB4NWIsIDB4M2EsIDB4NzQsIDB4YmMsIDB4ZjEsIDB4NzIsIDB4NmYsIDB4YzIsIDB4M2MsIDB4YTksIDB4OGUsCi0JMHhmYiwgMHhlZiwgMHg1MywgMHhjMCwgMHhjYywgMHhlNiwgMHg3OCwgMHg2NywgMHgzNiwgMHg5NSwgMHgyOSwgMHgyZiwKLQkweGU1LCAweDEzLCAweGQxLCAweDY1LCAweDY1LCAweDY1LCAweDMwLCAweDY2LCAweDY2LCAweDU2LCAweDExLCAweDM3LAotCTB4MTIsIDB4NjYsIDB4ODcsIDB4YTIsIDB4NGYsIDB4YjQsIDB4NWQsIDB4ZWYsIDB4M2IsIDB4OGQsIDB4ZmUsIDB4MDksCi0JMHhkNSwgMHhlMiwgMHhhZiwgMHg4NywgMHhmNywgMHhmNSwgMHhlMywgMHg3ZSwgMHg4ZiwgMHg2NywgMHg4OCwgMHgzOSwKLQkweGEzLCAweGMwLCAweDRjLCAweGU2LCAweDlhLCAweGU5LCAweGRjLCAweDg2LCAweDY0LCAweDZjLCAweDYyLCAweDU0LAotCTB4NjMsIDB4ZTgsIDB4ZmQsIDB4NTMsIDB4N2YsIDB4NDcsIDB4MWQsIDB4Y2EsIDB4MjUsIDB4ZDYsIDB4YzUsIDB4N2QsCi0JMHg3ZSwgMHgxYiwgMHhkNSwgMHgzYSwgMHhmMywgMHhmZCwgMHg1MywgMHg1OSwgMHg5ZCwgMHhjNywgMHg1OCwgMHg1NywKLQkweDMxLCAweDdmLCAweGRmLCAweGNkLCAweDNiLCAweDhiLCAweGE2LCAweDljLCAweDQ3LCAweDM4LCAweGNlLCAweDVhLAotCTB4NjAsIDB4YmEsIDB4NWQsIDB4OTgsIDB4MjMsIDB4M2EsIDB4NTcsIDB4NmMsIDB4ZDAsIDB4MDYsIDB4ZmQsIDB4MDEsCi0JMHhjYywgMHgxNywgMHg2OCwgMHhjNCwgMHhiZCwgMHgyZiwgMHg4OCwgMHgzMSwgMHgxMSwgMHgzYywgMHg0MCwgMHgyNywKLQkweGQwLCAweDM1LCAweGExLCAweGEzLCAweDU2LCAweDMwLCAweDRlLCAweDZlLCAweDVkLCAweGIyLCAweDVlLCAweDdmLAotCTB4MDksIDB4MzIsIDB4MjcsIDB4MzUsIDB4NTcsIDB4ZjksIDB4YjQsIDB4MzEsIDB4MzgsIDB4MzcsIDB4ZTYsIDB4YzAsCi0JMHhmYiwgMHhmZCwgMHg1MywgMHhhNCwgMHg0ZiwgMHg5ZSwgMHg0ZCwgMHg1NCwgMHhjZCwgMHg2ZCwgMHg3MCwgMHgzZCwKLQkweDgzLCAweDMyLCAweGJmLCAweDNlLCAweDI0LCAweGNiLCAweGY4LCAweGFkLCAweGFlLCAweDdiLCAweGY3LCAweGI2LAotCTB4MGQsIDB4ZGQsIDB4N2EsIDB4M2UsIDB4NmYsIDB4NmEsIDB4N2UsIDB4NWQsIDB4NzYsIDB4MTgsIDB4MzMsIDB4MDEsCi0JMHhhZiwgMHhlOCwgMHg5YywgMHgyYSwgMHhmNiwgMHg2NSwgMHg1ZSwgMHhlMSwgMHgxMCwgMHhlNSwgMHhhMywgMHg1MywKLQkweDg3LCAweDVjLCAweGRkLCAweGFlLCAweDUxLCAweDRmLCAweDY1LCAweGJkLCAweDM1LCAweDE1LCAweDBkLCAweDc0LAotCTB4YzksIDB4MmEsIDB4ZjAsIDB4YWUsIDB4MGMsIDB4ZDksIDB4OTksIDB4N2IsIDB4MjUsIDB4MjQsIDB4Y2IsIDB4NzksCi0JMHgxZCwgMHg0ZiwgMHg4ZSwgMHhmZSwgMHg1ZSwgMHgzOSwgMHg1MiwgMHhhZCwgMHg0ZCwgMHhjYSwgMHg2ZSwgMHgyZCwKLQkweGFlLCAweGJmLCAweDUxLCAweGFlLCAweGU1LCAweDVlLCAweDM3LCAweGU0LCAweGY5LCAweDUxLCAweDlkLCAweDU3LAotCTB4MTcsIDB4MmYsIDB4NGIsIDB4ZWYsIDB4MDAsIDB4NzUsIDB4OWUsIDB4MmQsIDB4OWQsIDB4NjMsIDB4MDcsIDB4ZWMsCi0JMHg4MCwgMHhjZSwgMHhmMSwgMHgzMywgMHhlOCwgMHgxYywgMHhlZiwgMHg0MCwgMHhlNywgMHhmOCwgMHg2OSwgMHgxMSwKLQkweGY4LCAweDUyLCAweDRjLCAweGZiLCAweGY4LCAweGJmLCAweDA4LCAweDFjLCAweGEyLCAweGFjLCAweGI2LCAweGNlLAotCTB4ZTAsIDB4NGUsIDB4MTcsIDB4YjMsIDB4YTAsIDB4YzEsIDB4NWIsIDB4OTIsIDB4MDYsIDB4ZGUsIDB4YTYsIDB4ZTQsCi0JMHhmYSwgMHhjNiwgMHhiYywgMHhlYywgMHg2YywgMHg3OCwgMHg3OSwgMHhjOCwgMHgxZiwgMHgzMCwgMHgwNywgMHg2YywKLQkweDljLCAweGY3LCAweDE0LCAweDA3LCAweDBlLCAweDFkLCAweDkxLCAweGQ4LCAweDQ5LCAweGUyLCAweDQ3LCAweDUwLAotCTB4MzYsIDB4MGIsIDB4ZWYsIDB4NjgsIDB4MWMsIDB4ZGEsIDB4MmMsIDB4YjAsIDB4MWMsIDB4MTAsIDB4OWQsIDB4NGYsCi0JMHhiNiwgMHhiMCwgMHgyNywgMHg2NSwgMHhlNywgMHg5NywgMHhhOCwgMHgzZiwgMHhhNiwgMHg3ZCwgMHg0MCwgMHg5ZSwKLQkweDRmLCAweDllLCAweDc4LCAweGY5LCAweDY3LCAweGZmLCAweGVlLCAweDk1LCAweGNlLCAweGIzLCAweDViLCAweDMyLAotCTB4YmIsIDB4ZDAsIDB4YWUsIDB4ODEsIDB4NWQsIDB4YzMsIDB4NWUsIDB4Y2MsIDB4NWIsIDB4ZmQsIDB4MDUsIDB4NmQsCi0JMHgzMCwgMHg0NywgMHhiMSwgMHg0YiwgMHhiNiwgMHgyMSwgMHg0MywgMHhlYSwgMHhmMSwgMHgyZSwgMHhhZCwgMHhmYiwKLQkweGQ1LCAweGUzLCAweDQzLCAweDNhLCAweDE3LCAweDk3LCAweGUzLCAweGU0LCAweDBhLCAweGI2LCAweGFjLCAweDE0LAotCTB4YWMsIDB4NjgsIDB4MTYsIDB4ZjQsIDB4YjcsIDB4MGIsIDB4NWIsIDB4ZWQsIDB4M2EsIDB4ZWUsIDB4NjAsIDB4MDcsCi0JMHg2NywgMHg3MCwgMHhhMywgMHg0NiwgMHgzOSwgMHg3ZiwgMHg1NywgMHg2MywgMHhlZiwgMHg2NiwgMHhlZCwgMHg0ZiwKLQkweDE4LCAweGM3LCAweDNhLCAweDkzLCAweDk0LCAweDNmLCAweGY2LCAweDEzLCAweDAzLCAweGU5LCAweDhmLCAweDlhLAotCTB4ZDEsIDB4ZmQsIDB4YmQsIDB4N2UsIDB4ZDcsIDB4ZDEsIDB4NzYsIDB4YTcsIDB4NDYsIDB4M2MsIDB4MTYsIDB4YjksCi0JMHg5NCwgMHhiNywgMHgyMSwgMHg0YiwgMHg1ZSwgMHg4ZiwgMHg1MCwgMHgwNywgMHgyOCwgMHhhOSwgMHg0NiwgMHgzZiwKLQkweGQ3LCAweDVmLCAweGIzLCAweGViLCAweDFlLCAweGI1LCAweGI5LCAweGFlLCAweGI4LCAweDhmLCAweGRiLCAweDk0LAotCTB4ZmQsIDB4N2IsIDB4NWEsIDB4ZWUsIDB4ZTcsIDB4OGIsIDB4NjcsIDB4ZTUsIDB4MmQsIDB4ZGMsIDB4YjcsIDB4YTcsCi0JMHhlMywgMHg2NCwgMHhlNCwgMHg0ZCwgMHhlOCwgMHg3OCwgMHhiNSwgMHg2MiwgMHgyMywgMHg2ZiwgMHg3YiwgMHgxYSwKLQkweGU3LCAweDY0LCAweGE5LCAweDk1LCAweDJiLCAweDJmLCAweGNiLCAweGU1LCAweGFiLCAweGZiLCAweGVhLCAweGE1LAotCTB4YWIsIDB4MzEsIDB4ZjUsIDB4ZjIsIDB4OTUsIDB4NjEsIDB4OTUsIDB4YmIsIDB4ZTIsIDB4YmEsIDB4ZmYsIDB4NzQsCi0JMHg5NiwgMHhlNCwgMHhkZCwgMHgwZCwgMHg1NywgMHg0ZSwgMHgzYiwgMHhjNiwgMHg0MCwgMHg0MCwgMHgxYSwgMHhiOSwKLQkweDc1LCAweGFlLCAweDFiLCAweDA0LCAweDM2LCAweGRmLCAweGU4LCAweDc1LCAweGRkLCAweDQ3LCAweGM3LCAweGM3LAotCTB4MjUsIDB4ZGUsIDB4NGIsIDB4MWQsIDB4ZTUsIDB4ZjMsIDB4MTEsIDB4ZTYsIDB4YmIsIDB4MTIsIDB4NzMsIDB4NTIsCi0JMHhiNiwgMHg3ZCwgMHhiZSwgMHhhYywgMHgxNCwgMHhmMCwgMHhhZCwgMHhjYiwgMHhkMywgMHg1ZiwgMHgxZSwgMHgzYiwKLQkweGU2LCAweGM3LCAweDRhLCAweDdlLCAweGY0LCAweDIyLCAweDdkLCAweGM5LCAweDkxLCAweGZmLCAweGYyLCAweDI1LAotCTB4OWIsIDB4NzIsIDB4YWUsIDB4ZjAsIDB4MTksIDB4ZjQsIDB4MGYsIDB4Y2IsIDB4YjcsIDB4MGEsIDB4YTEsIDB4NDMsCi0JMHg2NSwgMHgxMywgMHhjZiwgMHgzMSwgMHg5NSwgMHgyYiwgMHhkYywgMHg3MywgMHg4NywgMHg3NSwgMHhjYywgMHgwMCwKLQkweDNhLCAweDg5LCAweGU5LCAweGJhLCAweGNiLCAweDBlLCAweGU3LCAweGViLCAweGMyLCAweDdjLCAweDdiLCAweGU2LAotCTB4MzEsIDB4YzgsIDB4ZmYsIDB4ZDMsIDB4NWEsIDB4M2UsIDB4OWYsIDB4NTMsIDB4YjAsIDB4N2QsIDB4YzEsIDB4ZGYsCi0JMHg2MSwgMHg5OSwgMHgyZCwgMHg0MCwgMHhjNiwgMHgyYiwgMHhlNiwgMHg5YywgMHg1MiwgMHg1NywgMHhiMCwgMHgyMiwKLQkweGNiLCAweGMwLCAweDhlLCAweDI1LCAweGUwLCAweGNkLCAweDkzLCAweDNhLCAweGI2LCAweGRhLCAweGEzLCAweGIxLAotCTB4NjcsIDB4ODUsIDB4ZTUsIDB4OGMsIDB4MjQsIDB4Y2IsIDB4NGUsIDB4YjcsIDB4M2UsIDB4YmYsIDB4ZmQsIDB4ZGQsCi0JMHg1NywgMHgyMywgMHhkZSwgMHg5ZCwgMHg4MywgMHg4ZiwgMHgzMywgMHg0YSwgMHhkYSwgMHg2MCwgMHgwMywgMHhjZCwKLQkweDZjLCAweDJkLCAweDgwLCAweDI3LCAweDIyLCAweDM4LCAweGRiLCAweDU2LCAweGNkLCAweDBmLCAweDc1LCAweGM4LAotCTB4ZWYsIDB4YmEsIDB4ZjYsIDB4MjMsIDB4N2EsIDB4ZjEsIDB4OGEsIDB4YmEsIDB4YzksIDB4NzYsIDB4Y2YsIDB4YTAsCi0JMHg1ZiwgMHhiYiwgMHhhNCwgMHhhZSwgMHhiNCwgMHg2OSwgMHg1YywgMHg3ZCwgMHhiOCwgMHgyZSwgMHgwOSwgMHgzZCwKLQkweGU0LCAweDY5LCAweDk0LCAweDAzLCAweGE4LCAweDhiLCAweGZhLCAweDY1LCAweDAzLCAweGU1LCAweDQ1LCAweDk0LAotCTB4NWIsIDB4ZjAsIDB4NjQsIDB4OWIsIDB4MTEsIDB4ZTgsIDB4MTUsIDB4NzgsIDB4YmUsIDB4ODEsIDB4ZjEsIDB4YzYsCi0JMHhiMSwgMHhlNiwgMHg4YywgMHgyOSwgMHgxZiwgMHg5ZCwgMHhhMiwgMHgyYywgMHgxOSwgMHg1MywgMHhjYywgMHg0YiwKLQkweDVlLCAweGI2LCAweGYxLCAweGFjLCAweDBlLCAweGFiLCAweDk5LCAweDM1LCAweDk2LCAweGYxLCAweDJjLCAweDc5LAotCTB4ZGYsIDB4MWYsIDB4YzIsIDB4MjQsIDB4ZjQsIDB4NDksIDB4NWQsIDB4ZjUsIDB4MzAsIDB4ZTksIDB4YTMsIDB4MjYsCi0JMHgyNiwgMHhiMSwgMHhhZSwgMHg1ZCwgMHg2NiwgMHhhZiwgMHg5MCwgMHhkNywgMHg0ZCwgMHhkMCwgMHg1YiwgMHg4NywKLQkweGNjLCAweDVjLCAweDBkLCAweDZiLCAweDdkLCAweGI0LCAweDBjLCAweDVhLCAweGRjLCAweDA2LCAweDVkLCAweDZkLAotCTB4ODIsIDB4YTYsIDB4NTIsIDB4MDUsIDB4NmIsIDB4NmEsIDB4NTEsIDB4NDUsIDB4YjUsIDB4MmYsIDB4ZTAsIDB4MDksCi0JMHhkMCwgMHg2YiwgMHhmMCwgMHgxNSwgMHhlYSwgMHhhMiwgMHhlNCwgMHhlNSwgMHgzOCwgMHg2OCwgMHg0ZiwgMHhkYywKLQkweGEwLCAweDZkLCAweGE3LCAweGUzLCAweGNhLCAweDA2LCAweDBkLCAweDgyLCAweDJlLCAweDBiLCAweDFlLCAweDRmLAotCTB4YmYsIDB4YTcsIDB4MzQsIDB4YWUsIDB4NGUsIDB4ZGQsIDB4OTYsIDB4NDQsIDB4ZjIsIDB4YjYsIDB4NTgsIDB4YzAsCi0JMHgwMiwgMHhjYiwgMHhmOSwgMHg1MCwgMHgxYywgMHg4YywgMHgzOSwgMHgyOSwgMHhkNywgMHgzMCwgMHg4ZiwgMHgwMSwKLQkweGZlLCAweDFlLCAweDNkLCAweGExLCAweGY5LCAweDdiLCAweDRhLCAweDAyLCAweDg3LCAweDc5LCAweDFjLCAweGY0LAotCTB4MDYsIDB4MGMsIDB4ZjIsIDB4NzgsIDB4M2EsIDB4ZTksIDB4ZDMsIDB4ZTgsIDB4ZDcsIDB4YzEsIDB4YmYsIDB4MTYsCi0JMHgyYywgMHhiMSwgMHhiMCwgMHhhYywgMHg4MiwgMHhmZiwgMHhiNywgMHhmMSwgMHhmZCwgMHg2NiwgMHg2ZCwgMHg0NCwKLQkweGFkLCAweGFjLCAweDI5LCAweDNmLCAweDk3LCAweGU0LCAweDE5LCAweGU4LCAweGM5LCAweGI3LCAweDcwLCAweDc2LAotCTB4OWQsIDB4NWEsIDB4NzcsIDB4OGYsIDB4OGQsIDB4MzMsIDB4N2UsIDB4OTYsIDB4NTYsIDB4OTcsIDB4ZWQsIDB4OTMsCi0JMHhiMiwgMHgzZiwgMHgzNiwgMHg4OSwgMHhmMiwgMHgzMSwgMHgzYywgMHgwZCwgMHg5YywgMHg0MywgMHg0OCwgMHhjNywKLQkweGJmLCAweDM3LCAweGYzLCAweDhlLCAweGYyLCAweGZlLCAweDY3LCAweDYxLCAweDQyLCAweGU3LCAweGU3LCAweDFiLAotCTB4NzYsIDB4MmYsIDB4YmUsIDB4ZDMsIDB4MTcsIDB4YzMsIDB4YmQsIDB4NDEsIDB4NjcsIDB4NTIsIDB4MTEsIDB4OWQsCi0JMHg2ZiwgMHg1YSwgMHg4NiwgMHgyZSwgMHhiMSwgMHg4NSwgMHhmMSwgMHhkZSwgMHhhNywgMHgyZiwgMHhhZiwgMHgwYSwKLQkweDFlLCAweDFlLCAweGZiLCAweDk3LCAweDliLCAweDBjLCAweDMzLCAweDQ3LCAweGZkLCAweDZlLCAweGM0LCAweDkzLAotCTB4N2YsIDB4OWYsIDB4YjgsIDB4ZmIsIDB4ZjYsIDB4Y2EsIDB4OTQsIDB4ODEsIDB4OTcsIDB4NWIsIDB4NjYsIDB4MTgsCi0JMHg2ZCwgMHgyMSwgMHhjYiwgMHgyMCwgMHg4YiwgMHg0YSwgMHg5YSwgMHg3ZSwgMHhkOSwgMHhjZSwgMHhlYiwgMHg5YiwKLQkweGFiLCAweDI2LCAweGNjLCAweDBmLCAweGM0LCAweGViLCAweGJiLCAweDZhLCAweDUzLCAweGVlLCAweGI0LCAweDAzLAotCTB4NWYsIDB4YTIsIDB4NWEsIDB4YWYsIDB4N2MsIDB4ZGYsIDB4Y2UsIDB4MDIsIDB4MTUsIDB4YWMsIDB4NjgsIDB4MWEsCi0JMHgzNCwgMHhkYSwgMHgyNiwgMHg1NiwgMHg3YywgMHg0ZSwgMHgxZSwgMHhjYywgMHhiYiwgMHhhYywgMHhmYiwgMHhiMiwKLQkweDZkLCAweGEzLCAweDZmLCAweDYzLCAweDVlLCAweGFlLCAweDlmLCAweDdiLCAweGUxLCAweDFlLCAweGU4LCAweDliLAotCTB4MzYsIDB4MzUsIDB4OGQsIDB4ZDYsIDB4YWIsIDB4ZGQsIDB4MDMsIDB4MWUsIDB4OGQsIDB4MzYsIDB4ZjYsIDB4MTEsCi0JMHhmZSwgMHgzZiwgMHhmYiwgMHgyMCwgMHg5ZCwgMHgzOCwgMHhjYSwgMHhjYiwgMHhiYiwgMHhjMCwgMHhiMywgMHhjYSwKLQkweGYzLCAweDFjLCAweDAxLCAweDZkLCAweDFjLCAweGE0LCAweDlmLCAweDg2LCAweDZmLCAweGQxLCAweGEzLCAweDlmLAotCTB4NDcsIDB4OWIsIDB4ZjQsIDB4NDMsIDB4YmEsIDB4ZTksIDB4OTAsIDB4ZDksIDB4YWIsIDB4YjYsIDB4Y2MsIDB4MTcsCi0JMHhmNCwgMHg3ZCwgMHg0MywgMHhkNywgMHhhNCwgMHhjZiwgMHg2OCwgMHgxMiwgMHg3NCwgMHg0MywgMHg1YSwgMHgyNywKLQkweDZmLCAweDk5LCAweDUyLCAweDAyLCAweDFkLCAweDk1LCAweDgwLCAweDRmLCAweDI1LCAweGQwLCAweDU0LCAweDE5LAotCTB4ZjgsIDB4NTYsIDB4MDIsIDB4YmUsIDB4OTUsIDB4NmEsIDB4NTYsIDB4YmMsIDB4ODIsIDB4M2QsIDB4NTMsIDB4NjYsCi0JMHg2ZiwgMHg4MSwgMHg4ZSwgMHhiNiwgMHg2YiwgMHhiYywgMHg3ZiwgMHhiZCwgMHg2NiwgMHg5MywgMHg3MiwgMHhmMCwKLQkweDY2LCAweGYzLCAweGVlLCAweGZmLCAweDgxLCAweGJiLCAweDFmLCAweDkyLCAweDVkLCAweGQ4LCAweDJkLCAweDZmLAotCTB4MTUsIDB4YzcsIDB4ODAsIDB4NDksIDB4MDIsIDB4OGMsIDB4NzIsIDB4NDAsIDB4MWIsIDB4NTMsIDB4NzIsIDB4YmQsCi0JMHgzOCwgMHgyZCwgMHgzYiwgMHg5MCwgMHg0ZiwgMHgzNywgMHgzNiwgMHg2MiwgMHhkMCwgMHhhNywgMHgyMywgMHhiMiwKLQkweGYyLCAweGRhLCAweGE4LCAweGJjLCAweGI5LCAweGExLCAweDY0LCAweDA5LCAweGY0LCAweDliLCAweGRiLCAweGE0LAotCTB4ZGYsIDB4MWQsIDB4ZjQsIDB4NWMsIDB4ZWEsIDB4ZDAsIDB4NzEsIDB4ZmEsIDB4ZDksIDB4OGEsIDB4ZTcsIDB4N2YsCi0JMHg5ZiwgMHhhYiwgMHg3NCwgMHhjYSwgMHg3YywgMHhjNSwgMHg5NCwgMHhjNywgMHgyYiwgMHhkZCwgMHhmMiwgMHhlNSwKLQkweDRhLCAweDU4LCAweDRlLCAweGMzLCAweDBlLCAweGZjLCAweDRhLCAweDY1LCAweDUwLCAweDllLCAweGFjLCAweDBjLAotCTB4YzksIDB4NTcsIDB4YWIsIDB4NTEsIDB4ZjksIDB4NWEsIDB4ZDUsIDB4OTYsIDB4NGMsIDB4MzUsIDB4MmUsIDB4ZTksCi0JMHhlYSwgMHg5OCwgMHgzYywgMHg1MSwgMHhhNSwgMHg1ZiwgMHgxZCwgMHhmMywgMHhlMSwgMHgzNywgMHhkMywgMHhmNCwKLQkweDU3LCAweDcwLCAweDVkLCAweDQxLCAweGFjLCAweDJiLCAweGFlLCAweGU2LCAweDc0LCAweDljLCAweDUyLCAweDMyLAotCTB4OWUsIDB4Y2YsIDB4NDMsIDB4ZTQsIDB4MzksIDB4OGMsIDB4NzUsIDB4ZjEsIDB4MzUsIDB4MjUsIDB4NjUsIDB4M2QsCi0JMHg3ZiwgMHhlMywgMHhmZiwgMHg0NiwgMHg0MiwgMHhkYSwgMHgzNiwgMHg3YSwgMHhhZSwgMHgzNCwgMHg4OCwgMHgzNiwKLQkweDkwLCAweDdiLCAweGY5LCAweDg2LCAweGVmLCAweGEzLCAweGUxLCAweGYzLCAweDZmLCAweGQ4LCAweDVlLCAweDg2LAotCTB4ZjYsIDB4NWIsIDB4ZGYsIDB4YTQsIDB4ZWQsIDB4YTUsIDB4Y2YsIDB4OWUsIDB4ZjgsIDB4NDEsIDB4M2IsIDB4ZTcsCi0JMHg5YSwgMHhmNiwgMHg5YiwgMHgzYywgMHg4OCwgMHg2ZCwgMHgzNCwgMHhlNiwgMHhiZCwgMHg5OCwgMHg3OSwgMHhmOCwKLQkweGZmLCAweDUzLCAweGJjLCAweDE4LCAweGQ1LCAweGI5LCAweGVhLCAweDIwLCAweGZmLCAweDRmLCAweDA1LCAweDZiLAotCTB4ZjksIDB4ZjQsIDB4ZGMsIDB4ZjEsIDB4ZjksIDB4ZTIsIDB4YWMsIDB4N2EsIDB4YmMsIDB4NDgsIDB4OGQsIDB4YzYsCi0JMHg5NSwgMHg4YiwgMHhjZCwgMHg5YywgMHhiOCwgMHgyZiwgMHhjOSwgMHhhNiwgMHgxMywgMHhkMiwgMHg2YiwgMHhmMCwKLQkweGYzLCAweDFmLCAweDc1LCAweDdlLCAweGRjLCAweGVjLCAweDA5LCAweGQyLCAweDFmLCAweDYzLCAweDZmLCAweDlkLAotCTB4N2UsIDB4M2MsIDB4MDEsIDB4YmEsIDB4YWQsIDB4NjMsIDB4Y2EsIDB4YTUsIDB4OGEsIDB4ZTcsIDB4YjMsIDB4NWEsCi0JMHhkMSwgMHhmNCwgMHhmMiwgMHgyYiwgMHhkMCwgMHgxYywgMHg2MywgMHgwZSwgMHhkZSwgMHgzMywgMHg1YiwgMHhmMiwKLQkweGZhLCAweGNlLCAweGUwLCAweGRlLCAweDYwLCAweDhmLCAweDYzLCAweGJmLCAweDQ2LCAweDM3LCAweGU3LCAweGUyLAotCTB4ZmYsIDB4ZTksIDB4YTAsIDB4ZWMsIDB4YWYsIDB4OTcsIDB4YjksIDB4YzYsIDB4YjYsIDB4YTYsIDB4NDUsIDB4MmYsCi0JMHhhZSwgMHgxYiwgMHg5NywgMHgxNywgMHg3MCwgMHg3ZSwgMHg2NSwgMHg5MywgMHhlYiwgMHgwZiwgMHg0YSwgMHgzOSwKLQkweDRlLCAweGRiLCAweDk2LCAweGY4LCAweDdkLCAweDQyLCAweDRhLCAweDk4LCAweGE3LCAweDFjLCAweDZmLCAweGY4LAotCTB4YzMsIDB4M2MsIDB4OWMsIDB4MmQsIDB4OWIsIDB4MGYsIDB4ZTYsIDB4NWQsIDB4MmMsIDB4MWQsIDB4YzcsIDB4M2IsCi0JMHhlYSwgMHhlMiwgMHhkMCwgMHg5OSwgMHgxNiwgMHhmOCwgMHg3ZSwgMHgxMSwgMHg2NSwgMHhmYSwgMHg0NiwgMHg1NiwKLQkweGYwLCAweDhjLCAweGY4LCAweDc1LCAweGQ1LCAweDAxLCAweGFkLCAweGFiLCAweDRmLCAweDNmLCAweGU4LCAweGI3LAotCTB4NTQsIDB4YjIsIDB4YjIsIDB4YTksIDB4NDAsIDB4NDIsIDB4MTksIDB4YWYsIDB4ZmUsIDB4N2MsIDB4ODAsIDB4OTgsCi0JMHg3YiwgMHhkYywgMHhlNiwgMHgyZiwgMHgyNCwgMHg3ZiwgMHgzNSwgMHhiNSwgMHg0ZiwgMHhjMSwgMHhmZiwgMHg3NiwKLQkweDQ0LCAweDllLCAweDMyLCAweDk5LCAweGM3LCAweDllLCAweDU0LCAweGIzLCAweGM1LCAweDljLCAweDlmLCAweGUzLAotCTB4OWIsIDB4NTAsIDB4YzcsIDB4Y2IsIDB4MzcsIDB4MDcsIDB4YmMsIDB4OWMsIDB4NzcsIDB4OGUsIDB4N2QsIDB4MzAsCi0JMHhjZiwgMHhmZCwgMHgyMCwgMHg5ZCwgMHgzMCwgMHhkZiwgMHhiZCwgMHhiZCwgMHhmOSwgMHgzZiwgMHg1MiwgMHhlNSwKLQkweDNjLCAweGYwLCAweGNlLCAweDZlLCAweGQxLCAweGZjLCAweDk4LCAweGFiLCAweGZlLCAweGRiLCAweGRkLCAweGQzLAotCTB4ZmMsIDB4ZGMsIDB4ZjAsIDB4MzEsIDB4ZmMsIDB4NmUsIDB4ODAsIDB4YjYsIDB4MmQsIDB4NzEsIDB4ZTMsIDB4OTIsCi0JMHg5NywgMHgzYiwgMHhhYSwgMHg2ZCwgMHg2OCwgMHg2MCwgMHgwNSwgMHhlYSwgMHhjOCwgMHhhYiwgMHhlMCwgMHg5MywKLQkweDY2LCAweDViLCAweGZlLCAweGZkLCAweDA3LCAweDY5LCAweDNmLCAweDUxLCAweDQyLCAweDZjLCAweDY3LCAweDAwLAotCTB4MDAsIDB4MDAgfTsKKwkweGVjLCAweDVjLCAweDdkLCAweDZjLCAweDFjLCAweGM3LCAweDc1LCAweDdmLCAweDNiLCAweGJiLCAweGE0LCAweDhlLAorCTB4ZDQsIDB4OTEsIDB4NWMsIDB4MWUsIDB4NGYsIDB4Y2MsIDB4NTEsIDB4YTYsIDB4ZWQsIDB4NWIsIDB4NzEsIDB4MjUsCisJMHg5ZSwgMHg0ZCwgMHhjNiwgMHg1OSwgMHhkMSwgMHgwNywgMHg5YiwgMHgyOCwgMHgwZSwgMHhjOSwgMHg2NiwgMHhlZiwKKwkweDI0LCAweGIxLCAweDg2LCAweDViLCAweDUzLCAweDM1LCAweDFkLCAweDFiLCAweDZkLCAweGVhLCAweGIyLCAweDQ3LAorCTB4YjUsIDB4MjksIDB4OGMsIDB4MDYsIDB4OTAsIDB4YmYsIDB4MDAsIDB4MTcsIDB4YTgsIDB4ZTQsIDB4Y2IsIDB4OTEsCisJMHg4YSwgMHg1NSwgMHhmNywgMHhjMCwgMHhiZCwgMHhjOCwgMHg4YywgMHgxOCwgMHgyMCwgMHg2ZSwgMHg3ZCwgMHgyNSwKKwkweDI5LCAweDRhLCAweDA4LCAweDBlLCAweDNhLCAweGE2LCAweDcxLCAweDFhLCAweGZkLCAweDYxLCAweGQ3LCAweDA0LAorCTB4MmIsIDB4MWIsIDB4NmUsIDB4OTEsIDB4ZDYsIDB4NzIsIDB4ZTMsIDB4YjYsIDB4NDYsIDB4NTAsIDB4MDQsIDB4ODQsCisJMHhlYywgMHgzNCwgMHg2ZSwgMHhkMCwgMHgwZiwgMHhhMSwgMHgyZSwgMHg2YywgMHgwMywgMHg5NiwgMHhiZCwgMHhmZCwKKwkweGJkLCAweGQ5LCAweDVkLCAweGYyLCAweDQ4LCAweDViLCAweDc2LCAweGQwLCAweDNmLCAweGZhLCAweDRmLCAweDc3LAorCTB4ODAsIDB4YzMsIDB4Y2UsIDB4Y2MsIDB4YmUsIDB4ZjcsIDB4ZTYsIDB4Y2QsIDB4OWIsIDB4ZjcsIDB4MzksIDB4NGIsCisJMHhlOSwgMHhiNywgMHhlMywgMHhkNCwgMHg0ZSwgMHg0MSwgMHhlYiwgMHhjMCwgMHgyZiwgMHg3ZCwgMHhmNCwgMHhiMSwKKwkweDg3LCAweDZlLCAweGI5LCAweGZkLCAweDk2LCAweDViLCAweGQxLCAweGRkLCAweGFmLCAweDJhLCAweDNiLCAweGQ0LAorCTB4NzAsIDB4M2UsIDB4NmEsIDB4NTEsIDB4OGIsIDB4NWEsIDB4ZDQsIDB4YTIsIDB4MTYsIDB4YjUsIDB4YTgsIDB4NDUsCisJMHgyZCwgMHg2YSwgMHg1MSwgMHg4YiwgMHg1YSwgMHhkNCwgMHhhMiwgMHgxNiwgMHhiNSwgMHhhOCwgMHg0NSwgMHgyZCwKKwkweDZhLCAweDUxLCAweDhiLCAweDVhLCAweGQ0LCAweGEyLCAweDE2LCAweGI1LCAweGE4LCAweDQ1LCAweDJkLCAweDZhLAorCTB4NTEsIDB4OGIsIDB4NWEsIDB4ZDQsIDB4YTIsIDB4MTYsIDB4YjUsIDB4YTgsIDB4NDUsIDB4MmQsIDB4NmEsIDB4NTEsCisJMHg4YiwgMHg1YSwgMHhkNCwgMHhhMiwgMHgxNiwgMHhiNSwgMHhhOCwgMHg0NSwgMHgyZCwgMHg2YSwgMHg1MSwgMHg4YiwKKwkweDVhLCAweGQ0LCAweGEyLCAweDE2LCAweGI1LCAweGE4LCAweDQ1LCAweGVkLCAweGZmLCAweDdiLCAweDUzLCAweDg5LAorCTB4NzQsIDB4N2UsIDB4NzYsIDB4MDQsIDB4M2YsIDB4OGEsIDB4ODksIDB4NWMsIDB4ZmEsIDB4MDEsIDB4YzcsIDB4YTQsCisJMHg5OCwgMHg5YSwgMHhlYiwgMHgzZiwgMHgzZSwgMHg2NSwgMHgxMiwgMHhkOSwgMHhmNSwgMHhhMSwgMHg3NCwgMHg5ZSwKKwkweDNlLCAweGYwLCAweDRhLCAweDQ5LCAweDhkLCAweDc4LCAweGZlLCAweGZhLCAweGRjLCAweGQ1LCAweDY3LCAweDllLAorCTB4YmYsIDB4ZGQsIDB4YjgsIDB4NTIsIDB4NTMsIDB4MjksIDB4YTYsIDB4ZTcsIDB4NjYsIDB4ZjYsIDB4ZWIsIDB4ZmIsCisJMHgyOCwgMHhkNiwgMHgwZiwgMHg5YywgMHhhNywgMHgwNywgMHhmZiwgMHhiMSwgMHg5MywgMHgzYSwgMHg0MywgMHg1YSwKKwkweDQ0LCAweDBiLCAweDE1LCAweGMzLCAweDNhLCAweDg4LCAweGU3LCAweDcyLCAweDdkLCAweGM4LCAweDVhLCAweDIzLAorCTB4OGQsIDB4NTYsIDB4NzUsIDB4N2YsIDB4YzUsIDB4NzIsIDB4NDUsIDB4NjEsIDB4M2EsIDB4NTQsIDB4YWUsIDB4YzcsCisJMHg2OCwgMHg1ZCwgMHhmZSwgMHgzYiwgMHgwZiwgMHhhYywgMHg2OSwgMHg3MiwgMHhmZiwgMHg4MiwgMHhlMiwgMHgzNCwKKwkweDNjLCAweGVmLCAweDhjLCAweGU1LCAweDc5LCAweDJmLCAweGUxLCAweGY3LCAweDMzLCAweDBiLCAweDYzLCAweGY3LAorCTB4NDMsIDB4Y2YsIDB4ZDYsIDB4NTQsIDB4MTIsIDB4ZTYsIDB4MWYsIDB4MmIsIDB4Y2UsIDB4NjIsIDB4MmIsIDB4OTUsCisJMHhlNywgMHg4OSwgMHhhNiwgMHhkZCwgMHgxOCwgMHg5ZCwgMHg3NCwgMHg0YiwgMHg0YSwgMHhhMSwgMHg1MSwgMHg1MSwKKwkweDBlLCAweDljLCAweDlkLCAweDU1LCAweDBlLCAweDllLCAweDNkLCAweGE5LCAweDFjLCAweDNhLCAweDViLCAweDU1LAorCTB4OWMsIDB4YjMsIDB4NTQsIDB4MTIsIDB4ZmIsIDB4ZTMsIDB4NjQsIDB4ZWIsIDB4ZTcsIDB4OTQsIDB4N2MsIDB4YTMsCisJMHg1NywgMHg3MSwgMHhlNiwgMHhhZiwgMHg3YSwgMHg4ZSwgMHg2NSwgMHhlOCwgMHhiZiwgMHg0ZSwgMHg5YSwgMHhjZCwKKwkweGViLCAweDM5LCAweDE1LCAweDBmLCAweDYzLCAweDhkLCAweGVjLCAweGE0LCAweGU3LCAweDg5LCAweDljLCAweGY3LAorCTB4YjgsIDB4OTMsIDB4MzUsIDB4NzUsIDB4YTEsIDB4YzQsIDB4YTgsIDB4ZGMsIDB4NjgsIDB4MDcsIDB4NWQsIDB4NGQsCisJMHhjOSwgMHhiYiwgMHhkZSwgMHgwYiwgMHg4ZSwgMHhiNSwgMHgwYywgMHgzYSwgMHg3NSwgMHhlMCwgMHg5MywgMHgyZSwKKwkweDcyLCAweGNjLCAweDRmLCAweGM4LCAweDYzLCAweDQ5LCAweGM5LCAweDBmLCAweDg2LCAweGZjLCAweDUwLCAweDlhLAorCTB4ZjksIDB4MmQsIDB4MmUsIDB4MDksIDB4ZjAsIDB4YjUsIDB4OTMsIDB4OGEsIDB4MzUsIDB4OWQsIDB4MjYsIDB4OTcsCisJMHhiNiwgMHhjMywgMHhhZiwgMHg3YiwgMHhjZiwgMHgwZiwgMHhlYSwgMHhiNCwgMHhkMiwgMHgzMCwgMHg0YSwgMHgyNSwKKwkweGVjLCAweDdkLCAweGM2LCAweDRkLCAweDkzLCAweGM4LCAweDkxLCAweGVkLCAweDY0LCAweGZiLCAweGU5LCAweDg1LAorCTB4NDYsIDB4OGEsIDB4ZmUsIDB4YmMsIDB4NjEsIDB4YTYsIDB4Y2EsIDB4YjQsIDB4ODMsIDB4OGEsIDB4YzksIDB4MjQsCisJMHg3ZCwgMHgxNywgMHgzOCwgMHhkMywgMHg1OCwgMHg1YiwgMHg5OCwgMHhhNiwgMHg1ZSwgMHgwNiwgMHg2YywgMHhiOSwKKwkweGYxLCAweDIzLCAweGZlLCAweGI3LCAweDMxLCAweGZhLCAweDU0LCAweDU2LCAweGUyLCAweDk0LCAweGMwLCAweDY3LAorCTB4MDAsIDB4Y2IsIDB4N2MsIDB4NGIsIDB4NTgsIDB4YzksIDB4YmIsIDB4MGYsIDB4NGIsIDB4YTUsIDB4YTksIDB4MmMsCisJMHhlNiwgMHgxYSwgMHg0ZSwgMHgyMCwgMHhmYiwgMHg1NiwgMHhlYywgMHg4ZiwgMHg5ZiwgMHgzNywgMHgyOCwgMHhmOSwKKwkweGY5LCAweDFiLCAweDIwLCAweDAzLCAweDRhLCAweDBhLCAweGRhLCAweDliLCAweDJhLCAweDYyLCAweDY2LCAweGJhLAorCTB4MTEsIDB4YzcsIDB4OTgsIDB4NzksIDB4ZjEsIDB4YmMsIDB4NDMsIDB4MTYsIDB4ZTksIDB4NjUsIDB4YWIsIDB4MGIsCisJMHhiMiwgMHg0YSwgMHg1MywgMHhkOSwgMHhlYSwgMHgwNCwgMHg0ZSwgMHgwYiwgMHg3NSwgMHg5YiwgMHhiYywgMHgwNywKKwkweGE2LCAweGRiLCAweDg2LCAweDc5LCAweGFmLCAweDQzLCAweGNkLCAweDc5LCAweGRlLCAweDU0LCAweDk2LCAweDNhLAorCTB4ZmQsIDB4YjksIDB4MjEsIDB4ZDAsIDB4ZDAsIDB4NjgsIDB4NzIsIDB4NWMsIDB4MDEsIDB4ZGMsIDB4ZGIsIDB4Y2MsCisJMHg1ZiwgMHgyYywgMHg5MSwgMHhlMywgMHgzZSwgMHgzZiwgMHhiMywgMHhlNCwgMHhjYywgMHhhNiwgMHg4MywgMHg3NSwKKwkweGUzLCAweDU0LCAweDc2LCAweGFmLCAweDBmLCAweGZhLCAweDkwLCAweGFkLCAweDhiLCAweDNkLCAweDViLCAweDdkLAorCTB4MTgsIDB4MmIsIDB4MzcsIDB4ODIsIDB4OGUsIDB4NTUsIDB4MjYsIDB4NWUsIDB4NjMsIDB4MTcsIDB4YWQsIDB4MjUsCisJMHg0OSwgMHg1YywgMHhiNiwgMHg3YSwgMHgwMiwgMHhiOCwgMHg0ZSwgMHhmMCwgMHgxYSwgMHg5ZSwgMHg3MSwgMHgzYiwKKwkweGNkLCAweGNjLCAweGI3LCAweGQyLCAweDg5LCAweDc5LCAweDk2LCAweDZkLCAweDA1LCAweDY3LCAweDIxLCAweDY4LAorCTB4Y2YsIDB4NmQsIDB4MjUsIDB4YzUsIDB4NmUsIDB4OWMsIDB4NDQsIDB4NWYsIDB4YTMsIDB4MjksIDB4ZDMsIDB4N2IsCisJMHg2MSwgMHhjNiwgMHg5YSwgMHg1NSwgMHhmMiwgMHg2NywgMHg5NywgMHg5NSwgMHgwMiwgMHhjZSwgMHhmYywgMHhjMCwKKwkweGQ5LCAweDBiLCAweGNhLCAweGMxLCAweGM2LCAweGNiLCAweDFkLCAweGQ0LCAweDZlLCAweDQwLCAweGJiLCAweDM0LAorCTB4M2EsIDB4ZTEsIDB4MmEsIDB4YzQsIDB4ZmMsIDB4MmUsIDB4NDAsIDB4NWUsIDB4YjYsIDB4MGUsIDB4YzksIDB4OWIsCisJMHg5ZCwgMHhjYSwgMHg0MSwgMHhkMCwgMHg2YSwgMHgzMSwgMHhiZiwgMHgxZSwgMHhhNywgMHg0ZSwgMHg5NSwgMHg3NiwKKwkweDk4LCAweDIxLCAweDZjLCAweDhjLCAweGJlLCAweDBlLCAweGRlLCAweGQ2LCAweGFjLCAweDI0LCAweGUwLCAweGE4LAorCTB4Y2IsIDB4YzcsIDB4ZTksIDB4MGUsIDB4ZjgsIDB4NjEsIDB4ZGQsIDB4NjEsIDB4YmQsIDB4MTEsIDB4NzYsIDB4NjEsCisJMHhlZSwgMHg4ZiwgMHg3YSwgMHhjYSwgMHhjMywgMHgzYiwgMHgxOSwgMHgwNiwgMHhmNiwgMHg2MCwgMHgzZiwgMHgzMCwKKwkweDY1LCAweDNhLCAweGRkLCAweDFhLCAweDk1LCAweDc0LCAweDQxLCAweDg2LCAweDllLCAweGE3LCAweDFiLCAweDY5LAorCTB4YzYsIDB4MjIsIDB4Y2EsIDB4NDMsIDB4OWYsIDB4ODUsIDB4YTksIDB4NDEsIDB4NDYsIDB4MjYsIDB4NjQsIDB4YjQsCisJMHhiNywgMHhhNCwgMHg4YSwgMHg3YiwgMHg0MSwgMHhhMiwgMHhhNCwgMHg2OCwgMHg4MSwgMHgzYywgMHgxNywgMHhlOCwKKwkweDBlLCAweDg5LCAweDJmLCAweDcyLCAweDE2LCAweDc0LCAweGIwLCAweDlkLCAweGZiLCAweDU4LCAweDM3LCAweDI2LAorCTB4ZDcsIDB4NTUsIDB4NzMsIDB4NjYsIDB4NmEsIDB4OTEsIDB4NDgsIDB4MTEsIDB4YjksIDB4MjEsIDB4ZDAsIDB4NjMsCisJMHhkZCwgMHg2NCwgMHgzOCwgMHgxNywgMHgzYywgMHgzMiwgMHhlZiwgMHhkYywgMHgzNywgMHg4MSwgMHgxMywgMHgyMywKKwkweGM3LCAweGVhLCAweDY4LCAweGUyLCAweDEzLCAweGZjLCAweDI0LCAweDU5LCAweGU2LCAweDJjLCAweDQzLCAweGI5LAorCTB4NGYsIDB4NjUsIDB4NzMsIDB4OWYsIDB4ZWYsIDB4N2IsIDB4ODMsIDB4MjMsIDB4MWEsIDB4YmQsIDB4MjQsIDB4ZjcsCisJMHhjYiwgMHg3NiwgMHhjNCwgMHg3MCwgMHg3MiwgMHg4ZiwgMHhjNCwgMHhmMiwgMHg5OSwgMHg3NiwgMHg0OSwgMHgyOSwKKwkweDVhLCAweGZhLCAweDA2LCAweDJkLCAweGU4LCAweDg1LCAweDUwLCAweDczLCAweDcxLCAweGNhLCAweDRiLCAweGZlLAorCTB4NDYsIDB4YjEsIDB4MTYsIDB4ZGIsIDB4MTcsIDB4ZWMsIDB4YzQsIDB4ZTQsIDB4YmQsIDB4ZjAsIDB4NWMsIDB4MGUsCisJMHhiNiwgMHg2YSwgMHg0OCwgMHhmZCwgMHgyOSwgMHg1NiwgMHhkOSwgMHhmZSwgMHg5OSwgMHhiNywgMHg1NSwgMHg0MywKKwkweDUwLCAweDQ4LCAweDRmLCAweGY0LCAweGFhLCAweGQ0LCAweDQ1LCAweGUzLCAweGQ2LCAweDU1LCAweDRmLCAweGVjLAorCTB4YzMsIDB4ZmIsIDB4ZTEsIDB4MTQsIDB4NzgsIDB4MzMsIDB4ZDIsIDB4YjAsIDB4YjYsIDB4ODQsIDB4NGEsIDB4YjAsCisJMHg3MywgMHg2YiwgMHgyOCwgMHhhNSwgMHg5MywgMHg4OSwgMHhiZCwgMHgyNSwgMHhjOCwgMHgxZSwgMHg1ZiwgMHg4NSwKKwkweGUwLCAweGFmLCAweGM1LCAweGE3LCAweDRmLCAweDE3LCAweDZjLCAweGRhLCAweDBlLCAweDc4LCAweDc0LCAweGFjLAorCTB4NWIsIDB4YTUsIDB4Y2MsIDB4NzQsIDB4ZWMsIDB4NWYsIDB4OWQsIDB4NjUsIDB4ZjksIDB4YjYsIDB4NDMsIDB4ZmYsCisJMHgxNSwgMHgyYSwgMHg1YSwgMHg0YywgMHgzYiwgMHhhNCwgMHgyMSwgMHg2OCwgMHhmMCwgMHhiNiwgMHg2NiwgMHgxYSwKKwkweGUxLCAweGQ5LCAweGIyLCAweGZlLCAweDZhLCAweDM0LCAweDMyLCAweGMyLCAweGIwLCAweDBjLCAweGM3LCAweGYwLAorCTB4YzYsIDB4NjgsIDB4NWEsIDB4YmMsIDB4ZWYsIDB4ZWQsIDB4ZGYsIDB4YjIsIDB4YTYsIDB4NDksIDB4NjIsIDB4MTYsCisJMHgzYywgMHhmYiwgMHg2NywgMHgwMSwgMHgxOSwgMHg3ZSwgMHgxYSwgMHgyYywgMHg5ZiwgMHhjMywgMHg3NiwgMHg3OSwKKwkweDMzLCAweDZjLCAweDMzLCAweDFjLCAweDc0LCAweGE4LCAweDk3LCAweDc5LCAweGE4LCAweGM3LCAweDdkLCAweDdiLAorCTB4MGMsIDB4NzksIDB4MGEsIDB4Y2YsIDB4NTIsIDB4MDksIDB4NjgsIDB4N2MsIDB4ZDIsIDB4M2UsIDB4MTgsIDB4MWUsCisJMHg3ZSwgMHhjMiwgMHg4NSwgMHg5ZiwgMHg3MCwgMHhlMSwgMHgxZiwgMHg1YywgMHhmOCwgMHgxMSwgMHg5NywgMHhmZCwKKwkweDRhLCAweDlhLCAweDllLCAweDFmLCAweDg0LCAweGRmLCAweGRiLCAweGY0LCAweDQzLCAweDY4LCAweDYzLCAweGU4LAorCTB4MGIsIDB4NTIsIDB4ZTEsIDB4ODcsIDB4YTYsIDB4NmIsIDB4MDIsIDB4YjYsIDB4MGUsIDB4OWIsIDB4NWIsIDB4ZTIsCisJMHgzOSwgMHgxZCwgMHhjZiwgMHgwMiwgMHg5ZSwgMHgyNiwgMHhmYywgMHgyYywgMHhlYiwgMHg2MSwgMHhlOCwgMHg1ZiwKKwkweGQ5LCAweDJmLCAweGE1LCAweGUwLCAweDgzLCAweGQ4LCAweGVmLCAweGIwLCAweDdmLCAweDYyLCAweDU4LCAweGNmLAorCTB4MmIsIDB4NTgsIDB4OGMsIDB4ZWIsIDB4ZTEsIDB4MWMsIDB4ZDksIDB4ZWUsIDB4ZTIsIDB4MjQsIDB4MTIsIDB4MjUsCisJMHhlNSwgMHhmMCwgMHgyMCwgMHg2YywgMHhmMiwgMHhlNiwgMHgxNiwgMHhmMCwgMHhjYSwgMHhiNiwgMHg3OSwgMHgxZCwKKwkweGJiLCAweDE2LCAweGI0LCAweGY3LCAweDNiLCAweGZjLCAweDdmLCAweGI3LCAweGI3LCAweDAzLCAweDMwLCAweGQyLAorCTB4YzYsIDB4M2IsIDB4ZmQsIDB4NzEsIDB4NzcsIDB4ZTAsIDB4N2YsIDB4ZjgsIDB4YmQsIDB4OTEsIDB4YjYsIDB4NjksCisJMHg1ZiwgMHgzMCwgMHhlNiwgMHhmZSwgMHgwNiwgMHhiZiwgMHg5NiwgMHhiOCwgMHgyZCwgMHg0NiwgMHg3YiwgMHg5NiwKKwkweDdkLCAweGJmLCAweGI5LCAweDY3LCAweDAxLCAweDlhLCAweGIxLCAweGVjLCAweGYzLCAweGI4LCAweGU3LCAweDdjLAorCTB4ZTgsIDB4M2YsIDB4M2IsIDB4NDAsIDB4MGYsIDB4ZmMsIDB4YjksIDB4OWIsIDB4NzEsIDB4ODQsIDB4ZTgsIDB4YmYsCisJMHgxNCwgMHg5OCwgMHgxNiwgMHhlNiwgMHhiNiwgMHhjYiwgMHhjMiwgMHhmMywgMHg2NiwgMHgyYywgMHhiNiwgMHg0ZiwKKwkweGJkLCAweGQ5LCAweDNlLCAweGY3LCAweGMzLCAweDNlLCAweGFkLCAweDU2LCAweDMyLCAweGFjLCAweGJmLCAweDgyLAorCTB4N2QsIDB4M2UsIDB4NjEsIDB4MjksIDB4OTAsIDB4MGQsIDB4ZDEsIDB4YzUsIDB4NGEsIDB4MWMsIDB4YmUsIDB4NDEsCisJMHg0YiwgMHhiZCwgMHg0MSwgMHg3YiwgMHhkMywgMHhkMywgMHhkMCwgMHhjYiwgMHgzMywgMHgzYywgMHg4NywgMHgyMywKKwkweDNhLCAweDIxLCAweGZkLCAweGI1LCAweGVmLCAweDBmLCAweGQ2LCAweGQ1LCAweDZmLCAweDgwLCAweDJmLCAweGNmLAorCTB4OWIsIDB4MDYsIDB4Y2QsIDB4ZTIsIDB4YjAsIDB4MWEsIDB4ZDgsIDB4NjIsIDB4MzgsIDB4NmYsIDB4MjMsIDB4MjYsCisJMHgzYSwgMHgzNywgMHhhOSwgMHg1NCwgMHhjYSwgMHhiNCwgMHg5MCwgMHg5MSwgMHg1OSwgMHgwMCwgMHhlZCwgMHgyOSwKKwkweGNiLCAweGI3LCAweDdiLCAweGI2LCAweDhkLCAweDQ1LCAweGQwLCAweDlmLCAweDcxLCAweDA3LCAweGUxLCAweDE3LAorCTB4ZDgsIDB4NmUsIDB4YzAsIDB4MTcsIDB4ZTgsIDB4MmYsIDB4ODIsIDB4ZmUsIDB4NGMsIDB4YTMsIDB4ODUsIDB4YmUsCisJMHhhNiwgMHg4NSwgMHhiMSwgMHgzNiwgMHhkYywgMHgwZiwgMHg0NCwgMHg2ZCwgMHg4NiwgMHhlYiwgMHgxZSwgMHhhNSwKKwkweDNiLCAweGRjLCAweDg0LCAweGUyLCAweDNjLCAweGM1LCAweDdlLCAweGI5LCAweDljLCAweDgxLCAweDVkLCAweDI5LAorCTB4NjUsIDB4OGIsIDB4ZDcsIDB4NTYsIDB4NjksIDB4NzEsIDB4MDMsIDB4ODYsIDB4ZWMsIDB4YjIsIDB4NmYsIDB4YjMsCisJMHhiNiwgMHgzMywgMHg1OCwgMHg0YSwgMHhhOSwgMHhkMiwgMHhmNywgMHgxMCwgMHgxZCwgMHhhYywgMHg2OCwgMHg4MCwKKwkweGUxLCAweDMxLCAweGNmLCAweGZiLCAweDczLCAweDYzLCAweDk1LCAweDVlLCAweGY4LCAweDUyLCAweDFlLCAweDVmLAorCTB4ZjUsIDB4YTYsIDB4MmMsIDB4N2YsIDB4ZWUsIDB4OTcsIDB4MmIsIDB4MGYsIDB4ZjAsIDB4MTksIDB4NjEsIDB4MmYsCisJMHg5NCwgMHgyZSwgMHg1YiwgMHgzZiwgMHhmNywgMHhhMCwgMHhiZiwgMHg1YiwgMHg3MCwgMHgzZSwgMHg5ZSwgMHg4ZSwKKwkweDMxLCAweGU2LCAweGViLCAweDJjLCAweDI5LCAweDg3LCAweDRjLCAweGQxLCAweGRiLCAweDFhLCAweGY4LCAweGJjLAorCTB4NDMsIDB4OTgsIDB4M2MsIDB4NTAsIDB4MjksIDB4ZjcsIDB4YjQsIDB4ZDIsIDB4NTUsIDB4OTUsIDB4NjMsIDB4ZWIsCisJMHg2NSwgMHgzOCwgMHgwMSwgMHhhNywgMHhiMiwgMHgwZiwgMHhmMiwgMHgyOCwgMHg3NywgMHgzNywgMHhjZCwgMHhjNSwKKwkweDBhLCAweDE1LCAweDhmLCAweGQ2LCAweDJjLCAweDFmLCAweDA3LCAweGUzLCAweDc4LCAweGJlLCAweDIyLCAweDdhLAorCTB4NjMsIDB4YjQsIDB4MzEsIDB4ZDYsIDB4MTksIDB4NjcsIDB4ODksIDB4ZjYsIDB4NjUsIDB4MTYsIDB4NDksIDB4ZTIsCisJMHhmNiwgMHhjNCwgMHgzNiwgMHg3MSwgMHg5MywgMHg4NSwgMHg0YSwgMHhiOSwgMHhiYiwgMHg2OSwgMHg5YywgMHhjYSwKKwkweDgzLCAweDk2LCAweGQ4LCAweGJmLCAweDgxLCAweGRiLCAweGJmLCAweDg5LCAweGJiLCAweDhiLCAweGQyLCAweGRkLAorCTB4OGMsIDB4MmYsIDB4N2EsIDB4ZGIsIDB4MzYsIDB4NjksIDB4YTcsIDB4MDMsIDB4N2UsIDB4N2EsIDB4ZGEsIDB4MzYsCisJMHg2OSwgMHg5OCwgMHg0YywgMHhiMywgMHg2OSwgMHg5YywgMHg2MSwgMHg5YSwgMHg3YiwgMHgzNiwgMHg2OSwgMHgwZSwKKwkweDZmLCAweGU1LCAweGU3LCAweDI4LCAweGMxLCAweDA3LCAweGM1LCAweDVhLCAweDczLCAweGI0LCAweGZmLCAweDYyLAorCTB4NjUsIDB4NjAsIDB4ZmMsIDB4MGUsIDB4NDIsIDB4OGMsIDB4MWMsIDB4ZGUsIDB4MTEsIDB4ZjgsIDB4NzAsIDB4NmQsCisJMHhiZiwgMHgwMywgMHg1OSwgMHg2OSwgMHhjNCwgMHgzZSwgMHg1MSwgMHhhMSwgMHgzMiwgMHhjZSwgMHhmOSwgMHg4MSwKKwkweDNhLCAweGVkLCAweDVmLCAweGFiLCAweDUzLCAweGEwLCAweDRiLCAweGFjLCAweDEzLCAweDZmLCAweGMxLCAweGM2LAorCTB4YTgsIDB4YjQsIDB4M2IsIDB4MTcsIDB4OWYsIDB4ZDQsIDB4NzIsIDB4M2EsIDB4NmMsIDB4OGQsIDB4YzYsIDB4Y2IsCisJMHhmMCwgMHhlMSwgMHg2YSwgMHg2ZSwgMHhlZiwgMHhlYiwgMHg3OSwgMHhmNSwgMHg3MSwgMHg0ZiwgMHgzNSwgMHhkOSwKKwkweDFmLCAweGM2LCAweDQ3LCAweDlkLCAweDJjLCAweGU2LCAweGViLCAweDZjLCAweDViLCAweGYwLCAweDJiLCAweDBkLAorCTB4YTYsIDB4ZmQsIDB4NGMsIDB4MTcsIDB4NzUsIDB4MjIsIDB4OGUsIDB4ZDYsIDB4Y2YsIDB4ZWMsIDB4ZjIsIDB4NmQsCisJMHg4NywgMHgzNCwgMHgwZCwgMHhiZSwgMHg3OSwgMHgyNiwgMHhjYiwgMHg3MSwgMHhiZiwgMHgzNSwgMHgwNiwgMHhmOCwKKwkweDQ5LCAweDM1LCAweDM3LCAweGQ2LCAweDc3LCAweGE0LCAweDdlLCAweDY3LCAweDVmLCAweGIxLCAweDVlLCAweGVhLAorCTB4MmIsIDB4NTYsIDB4NzQsIDB4YjYsIDB4MTMsIDB4ZTEsIDB4NjQsIDB4ZDEsIDB4OTcsIDB4YjksIDB4NTQsIDB4MGEsCisJMHgzNiwgMHhjMSwgMHg2YiwgMHgyNywgMHhiMSwgMHhlNiwgMHgwZiwgMHg2MCwgMHg3ZiwgMHg2YywgMHhkZiwgMHg0NCwKKwkweGUzLCAweDJlLCAweGQ2LCAweDE4LCAweGY5LCAweDAwLCAweGU3LCAweDBlLCAweGRlLCAweGUwLCAweGQzLCAweDZjLAorCTB4ZWMsIDB4NWEsIDB4OGMsIDB4ZmMsIDB4NmIsIDB4NjAsIDB4OWYsIDB4ZGMsIDB4N2YsIDB4YzcsIDB4ZjMsIDB4ZTMsCisJMHhjMywgMHhkZCwgMHg1ZCwgMHhmZSwgMHhkYywgMHg4ZiwgMHgwMywgMHg5YiwgMHgwZSwgMHg2OSwgMHgzMSwgMHg5ZCwKKwkweDhjLCAweDMyLCAweDhlLCAweDFjLCAweDY2LCAweGJjLCAweGExLCAweDI5LCAweGVjLCAweDlmLCAweGYzLCAweDJlLAorCTB4ZTcsIDB4MWUsIDB4OWMsIDB4NzcsIDB4NGMsIDB4MDcsIDB4N2UsIDB4OGUsIDB4NmMsIDB4ZTQsIDB4NGYsIDB4OWUsCisJMHg0MCwgMHgyZSwgMHg1MiwgMHg4NCwgMHhkZCwgMHg2OCwgMHhiOSwgMHgyYiwgMHgzNCwgMHgyMywgMHg3ZCwgMHgyNCwKKwkweGM1LCAweDVhLCAweDcyLCAweDhmLCAweDAxLCAweGU2LCAweGRmLCAweDYwLCAweDczLCAweGRkLCAweDVkLCAweDgxLAorCTB4MWUsIDB4MDYsIDB4M2UsIDB4NWUsIDB4ZmEsIDB4NWQsIDB4YzAsIDB4YmUsIDB4YjUsIDB4MGQsIDB4ZjYsIDB4Y2QsCisJMHg2NiwgMHg1OCwgMHhiYywgMHg1ZiwgMHhkZiwgMHhmNiwgMHhmZSwgMHg5ZiwgMHhkOSwgMHg3ZSwgMHhmMSwgMHg2ZSwKKwkweDE1LCAweGZlLCAweGI0LCAweDM1LCAweGIwLCAweGZkLCAweDhiLCAweDU0LCAweDg0LCAweDZmLCAweGQ1LCAweDRjLAorCTB4Y2UsIDB4MmQsIDB4MGYsIDB4MDIsIDB4MTcsIDB4ZTMsIDB4M2EsIDB4NzgsIDB4ODQsIDB4YmYsIDB4NDAsIDB4OGMsCisJMHg4NSwgMHhiYywgMHgxMSwgMHgxMywgMHg5MiwgMHgzNywgMHg3MiwgMHgzZSwgMHgwNSwgMHhkOCwgMHgzNCwgMHg2MCwKKwkweGQ5LCAweGZmLCAweDMyLCAweGVjLCAweDg1LCAweDM4LCAweGNiLCAweGJjLCAweDU4LCAweDY3LCAweDFjLCAweGY2LAorCTB4NTUsIDB4ZTQsIDB4MzksIDB4ZDksIDB4MzYsIDB4NjgsIDB4OTQsIDB4ZjcsIDB4ODIsIDB4NmEsIDB4ODYsIDB4YjAsCisJMHgyMSwgMHhkZCwgMHhlZCwgMHhiMCwgMHg5YywgMHhkZiwgMHgzMCwgMHhlZCwgMHhhZSwgMHgyMCwgMHg2ZiwgMHgxOCwKKwkweDIzLCAweGJiLCAweDYxLCAweGUzLCAweDU3LCAweGEyLCAweGE5LCAweGE3LCAweDkwLCAweGJiLCAweDk5LCAweDJkLAorCTB4MmMsIDB4MGIsIDB4OWUsIDB4ZDcsIDB4N2QsIDB4MTksIDB4ODUsIDB4NzgsIDB4YTUsIDB4OWUsIDB4YWQsIDB4ZTMsCisJMHhkZiwgMHg0YSwgMHg2YywgMHhmYSwgMHg0YSwgMHhiNiwgMHgzNCwgMHhiMiwgMHgxMSwgMHgyYiwgMHgyMCwgMHhlMywKKwkweGY0LCAweGE0LCAweGM4LCAweDI1LCAweDI5LCAweDVmLCAweGY3LCAweGU1LCAweDhiLCAweGY4LCAweDBjLCAweGZmLAorCTB4MjgsIDB4ZmQsIDB4MDcsIDB4Y2UsIDB4M2QsIDB4ZjQsIDB4ODMsIDB4ZTEsIDB4OTksIDB4YjMsIDB4OWUsIDB4ZDksCisJMHgzOCwgMHg5YiwgMHgzNCwgMHg3NCwgMHg2OSwgMHgwYywgMHhiOCwgMHg3NCwgMHgxNCwgMHgzNCwgMHgzOCwgMHg2ZSwKKwkweDViLCAweDIyLCAweDk3LCAweGEwLCAweGEyLCAweGNlLCAweGY5LCAweDg1LCAweGNjLCAweDBkLCAweDZkLCAweGY2LAorCTB4MDMsIDB4MjIsIDB4ZDcsIDB4ODYsIDB4MzksIDB4ZWUsIDB4ZmYsIDB4NDEsIDB4OTcsIDB4N2YsIDB4ZDYsIDB4MWQsCisJMHgzYywgMHgxZSwgMHgxNywgMHhiOSwgMHhhZSwgMHg2ZCwgMHhmMywgMHg3ZiwgMHhkNywgMHhlMSwgMHhmMywgMHgyNiwKKwkweGM3LCAweDk4LCAweGZmLCAweGM5LCAweGI2LCAweGYxLCAweGEzLCAweDg5LCAweGFkLCAweGUzLCAweGFmLCAweGY2LAorCTB4ODUsIDB4ZmEsIDB4MjAsIDB4NzIsIDB4OGYsIDB4MDUsIDB4ZmMsIDB4YjIsIDB4OWUsIDB4NmUsIDB4ZTcsIDB4ZjUsCisJMHgxNywgMHhkMSwgMHg5NywgMHgzZiwgMHgwMSwgMHg0ZCwgMHhhOSwgMHhlMywgMHhiZiwgMHg4MCwgMHhiZSwgMHg2YywKKwkweGMwLCAweDVlLCAweDQzLCAweDVmLCAweDlhLCAweDc5LCAweGQ4LCAweGE4LCAweDNiLCAweGFhLCAweDAyLCAweDM5LAorCTB4YWMsIDB4OTMsIDB4ZGQsIDB4OWIsIDB4MmUsIDB4YzMsIDB4YzYsIDB4MGIsIDB4MGQsIDB4YzgsIDB4NmUsIDB4MjMsCisJMHhhZSwgMHg2ZSwgMHhjMCwgMHg5NCwgMHgzNiwgMHg2MSwgMHhmYywgMHhiOCwgMHg1MywgMHg2OCwgMHg3OCwgMHhjOCwKKwkweGZiLCAweDlhLCAweDYzLCAweDcwLCAweDA2LCAweGZkLCAweDEyLCAweGY2LCAweGJhLCAweDQyLCAweDUzLCAweGVlLAorCTB4OWEsIDB4MmQsIDB4Y2MsIDB4OTMsIDB4MzIsIDB4NmYsIDB4MTUsIDB4ZTYsIDB4OTMsIDB4NGEsIDB4NjEsIDB4OTEsCisJMHg3MywgMHhkYSwgMHgxOCwgMHhmYSwgMHhiMiwgMHgzZSwgMHg0MSwgMHg4YywgMHgzYiwgMHhhNSwgMHhkOCwgMHg2NywKKwkweGU3LCAweDkwLCAweGNmLCAweDJlLCAweGUxLCAweDc3LCAweDBlLCAweGJmLCAweDNhLCAweDdlLCAweDYxLCAweGRkLAorCTB4ZjAsIDB4MmQsIDB4ZDQsIDB4MWQsIDB4ZDIsIDB4ZGYsIDB4MjMsIDB4MzYsIDB4ZjksIDB4ZWIsIDB4ZmYsIDB4NzQsCisJMHgwOSwgMHhmOSwgMHhmNCwgMHg1YywgMHg5MiwgMHg5ZSwgMHgzMCwgMHg0NSwgMHg4ZiwgMHhmMCwgMHg3ZCwgMHg5YywKKwkweDhkLCAweDVjLCAweDVjLCAweDdmLCAweDhiLCAweDdlLCAweDI1LCAweGM4LCAweGU5LCAweDg4LCAweGRlLCAweGE4LAorCTB4ZTIsIDB4MmMsIDB4ODcsIDB4MGYsIDB4MDUsIDB4ZmUsIDB4ZTksIDB4ZTQsIDB4NTcsIDB4MWMsIDB4ZTksIDB4Y2IsCisJMHg4MywgMHg5YywgMHgwZCwgMHg3ZSwgMHhjNywgMHg5NiwgMHg1MCwgMHhhZiwgMHg0MCwgMHgzZSwgMHgwYSwgMHhmZCwKKwkweDBjLCAweDdhLCAweGZjLCAweDQ2LCAweGI1LCAweDFkLCAweGZjLCAweDk4LCAweDU0LCAweDljLCAweDMwLCAweDQ2LAorCTB4NDksIDB4MTksIDB4ZDAsIDB4NzcsIDB4MjgsIDB4ZWQsIDB4YzgsIDB4ZGIsIDB4ZTAsIDB4NzcsIDB4ZTQsIDB4OTgsCisJMHg2NSwgMHg0NiwgMHhjNywgMHgxNywgMHgyYSwgMHgwMiwgMHhiMCwgMHg5MCwgMHg3OSwgMHgxNiwgMHg3ZCwgMHhlOCwKKwkweGRmLCAweGU1LCAweDJhLCAweGUzLCAweDA5LCAweDdhLCAweGIzLCAweGFhLCAweGQyLCAweGJmLCAweDIwLCAweDBmLAorCTB4YzQsIDB4YmIsIDB4ZTMsIDB4YjAsIDB4YzEsIDB4NWUsIDB4YzQsIDB4YWIsIDB4N2UsIDB4OTUsIDB4ZjYsIDB4NzIsCisJMHhjYywgMHhkOCwgMHhhMywgMHhlMSwgMHg1OSwgMHhjMCwgMHhlZiwgMHgyMCwgMHhmMiwgMHhjMiwgMHg2YiwgMHhlMCwKKwkweDVjLCAweDAzLCAweDllLCAweDc5LCAweDhiLCAweDAxLCAweDg3LCAweGUxLCAweDM1LCAweGYwLCAweGQ2LCAweDA5LAorCTB4MWQsIDB4MzQsIDB4ZjQsIDB4NDksIDB4ZmEsIDB4OGMsIDB4MmUsIDB4NzMsIDB4MjcsIDB4ODUsIDB4ZTcsIDB4N2QsCisJMHgzZiwgMHhmOSwgMHhkMSwgMHg3OSwgMHg5NiwgMHhiMywgMHgwYSwgMHgxZCwgMHhlMiwgMHgzMSwgMHhiZiwgMHg2MywKKwkweDdmLCAweGNlLCAweGY0LCAweDhjLCAweDUxLCAweDFiLCAweDliLCAweGI5LCAweDVjLCAweGY1LCAweGZiLCAweGUxLAorCTB4MWMsIDB4MjksIDB4NjEsIDB4NGMsIDB4NjUsIDB4M2YsIDB4NWQsIDB4ODAsIDB4YWQsIDB4ZjIsIDB4NzgsIDB4OWMsCisJMHhlNCwgMHgxOSwgMHg2YywgMHgzOSwgMHg0ZiwgMHhhOSwgMHg0NywgMHhjNywgMHg2NiwgMHg0YywgMHgzZSwgMHg1NywKKwkweDlkLCAweGE2LCAweDJiLCAweGUxLCAweGI5LCAweGYyLCAweDE5LCAweGExLCAweDBlLCAweGFkLCAweDNlLCAweDg5LAorCTB4NzMsIDB4MTUsIDB4NDEsIDB4Y2QsIDB4MDIsIDB4M2YsIDB4MzAsIDB4YzcsIDB4ZTcsIDB4OGIsIDB4M2EsIDB4YjIsCisJMHg4YSwgMHgzYywgMHhhYywgMHg0YSwgMHgwOSwgMHhiZiwgMHhlNiwgMHgzYSwgMHg4NSwgMHgzYSwgMHgwNSwgMHhlNywKKwkweDU3LCAweDk5LCAweDAzLCAweDhkLCAweDI0LCAweDllLCAweDRiLCAweDc4LCAweGE2LCAweGYwLCAweDNjLCAweDg3LAorCTB4NjcsIDB4M2YsIDB4OWUsIDB4NzUsIDB4YjYsIDB4OGYsIDB4MjAsIDB4ZWYsIDB4ZjksIDB4MDgsIDB4M2YsIDB4YjAsCisJMHg5MywgMHgwMiwgMHhkYiwgMHgzNCwgMHhmZCwgMHg2NSwgMHgyMywgMHg0NywgMHgzZiwgMHg2OCwgMHg4YywgMHhkMiwKKwkweDVmLCAweDM0LCAweGIyLCAweGY0LCAweGZkLCAweDg2LCAweDQ1LCAweGNmLCAweDM2LCAweDg2LCAweGU5LCAweDdiLAorCTB4OGQsIDB4MGMsIDB4ZDcsIDB4OTAsIDB4YzgsIDB4ZTEsIDB4ZDIsIDB4ZjAsIDB4Y2QsIDB4MTcsIDB4ZTgsIDB4MmIsCisJMHg2ZSwgMHgwMywgMHgzZSwgMHg0NywgMHhmYSwgMHhjYiwgMHhlMywgMHg3NiwgMHhmZCwgMHgzYSwgMHgyYSwgMHgzZSwKKwkweGE1LCAweDIzLCAweGNmLCAweDU0LCAweGI5LCAweDhlLCAweGEzLCAweDQ3LCAweGFkLCAweGJiLCAweDEzLCAweDdjLAorCTB4ZjYsIDB4YzIsIDB4ZTQsIDB4YmEsIDB4ZTYsIDB4MDQsIDB4YzMsIDB4YTEsIDB4MWUsIDB4NTYsIDB4OTAsIDB4YmYsCisJMHhiNCwgMHhkMCwgMHg2NCwgMHhkMiwgMHg1OCwgMHg3MSwgMHhkNCwgMHg3NCwgMHhlMCwgMHg4ZiwgMHgyNiwgMHgwMCwKKwkweDg3LCAweDM1LCAweGRkLCAweDM4LCAweGFkLCAweDlkLCAweDg2LCAweDJkLCAweDU4LCAweGE4LCAweGE1LCAweDkzLAorCTB4MzEsIDB4ZjgsIDB4M2UsIDB4OTksIDB4OWYsIDB4NDgsIDB4ZGYsIDB4ZTIsIDB4ZmIsIDB4ZDIsIDB4YjAsIDB4YzYsCisJMHhlNCwgMHgzOSwgMHgzYiwgMHg5OCwgMHhlMywgMHhmOCwgMHhhOCwgMHgwMywgMHhiNiwgMHgxMSwgMHhjNCwgMHg5MCwKKwkweGVkLCAweDM0LCAweGQ5LCAweDM3LCAweDRlLCAweDA0LCAweGZlLCAweDcxLCAweDg1LCAweDFlLCAweDc2LCAweDA3LAorCTB4ZWMsIDB4YjcsIDB4MTEsIDB4N2IsIDB4OTQsIDB4OTYsIDB4MzAsIDB4MmYsIDB4ZGEsIDB4MGQsIDB4ZGUsIDB4M2MsCisJMHhlZiwgMHgzMCwgMHhlYSwgMHhmMywgMHg3NCwgMHg0MiwgMHhhMywgMHhiZiwgMHg5ZiwgMHgzNSwgMHhmNCwgMHhjMywKKwkweDAyLCAweDAxLCAweGFlLCAweGRkLCAweGYzLCAweGM2LCAweDRkLCAweGEzLCAweDY0LCAweDhiLCAweDBlLCAweGZhLAorCTB4YTcsIDB4NTMsIDB4MWMsIDB4OTMsIDB4ZDcsIDB4OGYsIDB4YmQsIDB4MDgsIDB4M2QsIDB4YTgsIDB4MmQsIDB4YjUsCisJMHg1MiwgMHhhZCwgMHhhNiwgMHhkMSwgMHhlNSwgMHg5MSwgMHgwMSwgMHhiOSwgMHg2ZSwgMHhhZCwgMHg5ZSwgMHg0MCwKKwkweDllLCAweGQ3LCAweDQ2LCAweDhiLCAweGJkLCAweDUyLCAweGQ5LCAweGUxLCAweGI3LCAweDMzLCAweGQyLCAweDZmLAorCTB4M2IsIDB4MjYsIDB4OWUsIDB4ZjUsIDB4YjQsIDB4YmUsIDB4OTUsIDB4OTcsIDB4NjcsIDB4YTksIDB4ZTgsIDB4NzYsCisJMHhhMiwgMHg0MiwgMHhkOSwgMHgwZCwgMHg5OSwgMHg3MCwgMHg3ZiwgMHg0MCwgMHg3NywgMHgwNCwgMHg2MiwgMHhhMCwKKwkweDM2LCAweGEwLCAweDFmLCAweDEyLCAweGZmLCAweGVkLCAweDdkLCAweDUxLCAweDYzLCAweDM5LCAweGJlLCAweDhlLAorCTB4ZDgsIDB4YzIsIDB4YjEsIDB4NTIsIDB4OTEsIDB4N2EsIDB4YjcsIDB4YjAsIDB4ZjQsIDB4YTYsIDB4Y2UsIDB4ZmUsCisJMHhlNSwgMHg3YiwgMHhmNSwgMHhkZCwgMHhjMSwgMHg5OCwgMHhmZCwgMHgzYiwgMHg4ZiwgMHhkYiwgMHhlOSwgMHhmYiwKKwkweGI1LCAweDlkLCAweGI0LCAweDU4LCAweGUzLCAweGY3LCAweGFkLCAweGI0LCAweDUwLCAweDFiLCAweGI4LCAweGYyLAorCTB4OTAsIDB4ZTgsIDB4YTUsIDB4ZDUsIDB4ZWIsIDB4NmUsIDB4ZDYsIDB4M2YsIDB4MmYsIDB4MjAsIDB4OTMsIDB4ODksCisJMHgwZiwgMHhlOSwgMHhkZCwgMHg5MSwgMHgyZSwgMHg3YSwgMHhmNSwgMHg1ZSwgMHhhMywgMHg3YSwgMHhiZiwgMHg4MCwKKwkweDNlLCAweDhlLCAweGM0LCAweGQ5LCAweGNlLCAweGQwLCAweGU3LCAweDc5LCAweGUzLCAweDRhLCAweDVhLCAweGIwLAorCTB4OWUsIDB4YmQsIDB4MGMsIDB4ZmQsIDB4MzIsIDB4NGUsIDB4ZmEsIDB4M2EsIDB4YzksIDB4YjQsIDB4OTksIDB4MmUsCisJMHhjZSwgMHhjNywgMHg3YywgMHgwNSwgMHgzNCwgMHhmMSwgMHhhZSwgMHgzZSwgMHgwMCwgMHg1YSwgMHhhZiwgMHg0OCwKKwkweDU5LCAweDFjLCAweGI2LCAweDhjLCAweDJiLCAweDA4LCAweDUxLCAweGRlLCAweDY1LCAweDczLCAweDIwLCAweDIzLAorCTB4YzQsIDB4NmUsIDB4YWEsIDB4YTUsIDB4NmUsIDB4ZDYsIDB4YmYsIDB4OGIsIDB4NzgsIDB4ODAsIDB4OWEsIDB4YWIsCisJMHhiNCwgMHg0ZSwgMHhlYiwgMHhjNywgMHgyZSwgMHg5YSwgMHhhYywgMHg4YiwgMHg2YywgMHhjMywgMHgzZiwgMHg0NCwKKwkweDRlLCAweGFhLCAweGQzLCAweDUzLCAweDc1LCAweGY2LCAweDVkLCAweDRjLCAweDhiLCAweGViLCAweDgyLCAweDdkLAorCTB4ZmEsIDB4ZGQsIDB4ZTAsIDB4YzEsIDB4MTksIDB4YzYsIDB4M2IsIDB4Y2MsIDB4YWIsIDB4OWYsIDB4ZTUsIDB4NzMsCisJMHg2YiwgMHg2MSwgMHhkYywgMHg0YywgMHg5YSwgMHgzNywgMHhiMywgMHg0NSwgMHg0NiwgMHgwMywgMHhmYSwgMHg1ZSwKKwkweGMxLCAweGViLCAweGJkLCAweDhiLCAweDc1LCAweGRmLCAweDAxLCAweGFmLCAweDAzLCAweGMwLCAweDQ1LCAweDBjLAorCTB4NGQsIDB4MzUsIDB4YWYsIDB4ZjEsIDB4OWEsIDB4NWMsIDB4ZTMsIDB4NTQsIDB4MWQsIDB4MzksIDB4ZTAsIDB4YzYsCisJMHgxYSwgMHg5OCwgMHhhYiwgMHgwYiwgMHhlYywgMHhmMywgMHg1NywgMHg2NSwgMHhmZSwgMHhhYywgMHgyMiwgMHhmZiwKKwkweGI5LCAweDNjLCAweGYyLCAweDRjLCAweDkwLCAweDVmLCAweDNjLCAweDA3LCAweDU5LCAweGM3LCAweGU4LCAweGI1LAorCTB4NTksIDB4YWUsIDB4MmYsIDB4MGYsIDB4NTEsIDB4MzksIDB4YjEsIDB4N2UsIDB4NmMsIDB4Y2EsIDB4NDQsIDB4NGQsCisJMHg4ZiwgMHgzOCwgMHg1MCwgMHhkZSwgMHgzNywgMHhlMCwgMHhlYiwgMHg1NSwgMHgzZiwgMHhlMywgMHgzYywgMHgyNywKKwkweGNmLCAweGE0LCAweDJjLCAweDVhLCAweGU5LCAweDhiLCAweDVhLCAweDFhLCAweGY4LCAweDNjLCAweDc3LCAweDI5LAorCTB4MzgsIDB4Y2YsIDB4NmYsIDB4ODMsIDB4MWYsIDB4ZjQsIDB4ZWIsIDB4M2QsIDB4ODEsIDB4ZmYsIDB4NGIsIDB4NDAsCisJMHg1NywgMHg4NywgMHhmNCwgMHhjMywgMHgxNCwgMHgwYiwgMHhmYywgMHg1ZiwgMHg4MiwgMHg1ZSwgMHgzZCwgMHhhZCwKKwkweDQyLCAweDg3LCAweDU4LCAweDdmLCAweGZhLCAweGJiLCAweDM3LCAweGY1LCAweDg3LCAweGRmLCAweGFkLCAweDFmLAorCTB4NzMsIDB4YzAsIDB4NjMsIDB4N2UsIDB4YWUsIDB4OTUsIDB4MGEsIDB4ZDUsIDB4MTgsIDB4NGQsIDB4NjUsIDB4OTEsCisJMHg3MywgMHgyMywgMHhmZSwgMHhlNCwgMHhhMSwgMHg0YiwgMHg4NSwgMHgxYSwgMHhlYiwgMHg3MiwgMHgyOSwgMHhkMCwKKwkweGU1LCAweDc4LCAweDQwLCAweGZiLCAweDZmLCAweGEwLCAweGNiLCAweDQ2LCAweDdhLCAweDU1LCAweDcwLCAweDdkLAorCTB4ZDUsIDB4MjcsIDB4NmIsIDB4NjQsIDB4MTUsIDB4ZjYsIDB4NTUsIDB4YWMsIDB4NzAsIDB4MmMsIDB4NjIsIDB4ZGIsCisJMHhhMiwgMHhlMywgMHhjYywgMHg3ZiwgMHhiMSwgMHgzMiwgMHgyYSwgMHg4YSwgMHg4ZCwgMHhhYywgMHgyOCwgMHhiYSwKKwkweGNjLCAweGRmLCAweDNlLCAweGYwLCAweGFkLCAweGM4LCAweDNhLCAweDc4LCAweGExLCAweGYxLCAweGFlLCAweGI3LAorCTB4YjAsIDB4NmYsIDB4MDcsIDB4ZmEsIDB4ZDAsIDB4ZmQsIDB4NzEsIDB4M2UsIDB4ZGYsIDB4ZWIsIDB4OTksIDB4YWYsCisJMHhiNCwgMHgyZCwgMHg1OCwgMHhkZSwgMHg0OSwgMHg1YSwgMHgxZSwgMHg3YywgMHhhOSwgMHg4YiwgMHg3MywgMHhiNCwKKwkweGIzLCAweDgzLCAweDRjLCAweDFmLCAweDdjLCAweDI0LCAweDkzLCAweGI0LCAweGU4LCAweGYyLCAweDFhLCAweDJjLAorCTB4MTcsIDB4ZjgsIDB4YmEsIDB4MzksIDB4OWQsIDB4MWUsIDB4OTYsIDB4ZTcsIDB4YzcsIDB4YmEsIDB4YzUsIDB4ZjcsCisJMHg0ZCwgMHgyYSwgMHhlNSwgMHgxMywgMHgwMywgMHhmYSwgMHg0MywgMHg2NCwgMHg1YywgMHg1OSwgMHg1MywgMHg4ZCwKKwkweGVhLCAweDI0LCAweGUyLCAweGVhLCAweGMyLCAweGJjLCAweDRhLCAweDdiLCAweDY0LCAweDFkLCAweGM2LCAweDY3LAorCTB4NjQsIDB4OWMsIDB4ODQsIDB4MzUsIDB4MDYsIDB4N2IsIDB4ZmYsIDB4OGQsIDB4YTYsIDB4YmQsIDB4NzcsIDB4ZDIsCisJMHhjNSwgMHhkMywgMHg5ZiwgMHg4NSwgMHhkZCwgMHhiMywgMHg1YywgMHhiNSwgMHhmNCwgMHgxMSwgMHhlNCwgMHgxOSwKKwkweDczLCAweDA0LCAweGY5LCAweDIyLCAweDdmLCAweGI2LCAweDUzLCAweGUxLCAweGI5LCAweGIwLCAweGJjLCAweDc3LAorCTB4NDksIDB4ZjksIDB4MGIsIDB4MjksIDB4ZmYsIDB4MWIsIDB4YTgsIDB4ZGMsIDB4ZWIsIDB4ZGIsIDB4MzgsIDB4YmYsCisJMHgxMywgMHhhMCwgMHhlMSwgMHhiZiwgMHhlMywgMHhmMSwgMHg2NywgMHg5MCwgMHgxZiwgMHhmMSwgMHhiYiwgMHg5YSwKKwkweDhmLCAweDQ3LCAweDNkLCAweDRjLCAweDA3LCAweGVmLCAweGZlLCAweDEwLCAweDZiLCAweGIyLCAweDhjLCAweGMzLAorCTB4ZjksIDB4MGUsIDB4ZjIsIDB4NmQsIDB4MjksIDB4OTQsIDB4M2IsIDB4MTIsIDB4OGMsIDB4N2EsIDB4OTIsIDB4N2UsCisJMHhhZCwgMHg5ZSwgMHhhMiwgMHg4OSwgMHg3YSwgMHgzZiwgMHgxNSwgMHhlYSwgMHg2OSwgMHg5YywgMHhjMSwgMHgxMywKKwkweGRkLCAweGJjLCAweGI3LCAweGZjLCAweDEyLCAweGY2LCAweDIzLCAweDk4LCAweGQ3LCAweDFhLCAweDFkLCAweDcxLAorCTB4NDMsIDB4N2UsIDB4ZTIsIDB4MDEsIDB4N2YsIDB4NWEsIDB4MzAsIDB4OGUsIDB4MDUsIDB4M2MsIDB4MzQsIDB4ZDMsCisJMHg4YiwgMHg4MywgMHg5NiwgMHgwZCwgMHgzYSwgMHg2NywgMHgwMiwgMHgzYSwgMHhlYywgMHg0NywgMHhjMCwgMHhlYiwKKwkweDQ0LCAweDhhLCAweDk2LCAweDVjLCAweGU2LCAweDYzLCAweDI3LCAweDk1LCAweDkzLCAweGRjLCAweDdmLCAweDBlLAorCTB4N2EsIDB4YzYsIDB4NzQsIDB4NzYsIDB4NzAsIDB4N2UsIDB4YjMsIDB4NDUsIDB4YzYsIDB4NDcsIDB4ZWIsIDB4MjUsCisJMHhjOCwgMHg5OCwgMHhlNSwgMHhjYiwgMHg3MCwgMHg3MSwgMHg1YSwgMHhmOCwgMHgyNSwgMHgzZSwgMHhiZiwgMHgyMSwKKwkweGU0LCAweGY4LCAweGFjLCAweDBiLCAweDNiLCAweDAzLCAweGJkLCAweGYyLCAweGQ3LCAweDJjLCAweGNjLCAweDc1LAorCTB4ZTIsIDB4YWMsIDB4NzgsIDB4ZGQsIDB4NzYsIDB4YmEsIDB4MDcsIDB4NzYsIDB4OWYsIDB4YWYsIDB4ZjEsIDB4ZmEsCisJMHgxMywgMHhkMCwgMHhhMywgMHgxZiwgMHhjYiwgMHhmNSwgMHgwYiwgMHg0YiwgMHhiZCwgMHgwMSwgMHgzZSwgMHhlMywKKwkweDc2LCAweDZlLCAweGMzLCAweDZkLCAweGE1LCAweDAzLCAweDU1LCAweGZkLCAweDYzLCAweGYwLCAweDdmLCAweDEzLAorCTB4ZjgsIDB4ODIsIDB4Y2UsIDB4NjQsIDB4MTksIDB4OWYsIDB4ZTksIDB4MDAsIDB4YWUsIDB4OTYsIDB4ZmMsIDB4MDQsCisJMHgzYSwgMHgwOSwgMHg1OSwgMHhlZiwgMHhlNywgMHg2YiwgMHhhZCwgMHg5NCwgMHhhZiwgMHg4NiwgMHhiNCwgMHg5OCwKKwkweGNlLCAweDg3LCAweGE4LCAweDg3LCAweGJmLCAweDJjLCAweDY5LCAweDRkLCAweDQ5LCAweDVhLCAweDc4LCAweDVmLAorCTB4NjMsIDB4OWYsIDB4NzMsIDB4M2IsIDB4ZjAsIDB4ZTMsIDB4ZWMsIDB4ZmYsIDB4NjksIDB4MjEsIDB4ZDEsIDB4NDEsCisJMHgwYiwgMHhiMiwgMHhhNiwgMHg2ZiwgMHhmNywgMHg3ZCwgMHg0ZCwgMHhhMiwgMHgwZCwgMHhlZiwgMHg3NywgMHhjMSwKKwkweGU2LCAweDg3LCAweDkwLCAweDViLCAweDc0LCAweDYyLCAweDJlLCAweGJkLCAweDZkLCAweDZlLCAweDNiLCAweGZmLAorCTB4YjEsIDB4NmQsIDB4ZmMsIDB4ZWIsIDB4ODAsIDB4ZWIsIDB4YzEsIDB4OWEsIDB4M2UsIDB4NWMsIDB4MDEsIDB4NzAsCisJMHhkMywgMHg3MywgMHg5MCwgMHhiMywgMHhjNSwgMHg3ZSwgMHg4NSwgMHhlMywgMHhlNCwgMHg3NSwgMHg5MiwgMHg5NywKKwkweGU5LCAweDI1LCAweDA1LCAweDcwLCAweGJkLCAweGMwLCAweDBkLCAweGM3LCAweGJlLCAweDFjLCAweGFhLCAweGEwLAorCTB4ZjMsIDB4Y2QsIDB4OWEsIDB4YmMsIDB4YmIsIDB4YzAsIDB4MTksIDB4ZjQsIDB4MjQsIDB4NzgsIDB4ZWYsIDB4ZTUsCisJMHhkYSwgMHhhNywgMHhjOSwgMHhlYywgMHhiYSwgMHgyNiwgMHg3OSwgMHhiMSwgMHhhYywgMHg5OCwgMHg1ZiwgMHhlNiwKKwkweDE1LCAweDdhLCAweDhhLCAweDM4LCAweGU0LCAweDU4LCAweGE4LCAweDBiLCAweDEzLCAweDJhLCAweDE1LCAweGIyLAorCTB4M2EsIDB4ZjIsIDB4NzMsIDB4YmUsIDB4YjcsIDB4NjUsIDB4YmIsIDB4ZDQsIDB4ZjksIDB4YWUsIDB4MzQsIDB4MjYsCisJMHg0YywgMHg4ZSwgMHhiNSwgMHg5YSwgMHhkYywgMHhmYiwgMHg5MSwgMHgyNSwgMHhiZSwgMHhiYiwgMHg0ZCwgMHhmMywKKwkweDVkLCAweDVmLCAweDg2LCAweGIwLCAweGY3LCAweDA3LCAweDk3LCAweDRjLCAweDdhLCAweGE0LCAweDllLCAweGExLAorCTB4ODcsIDB4ZWEsIDB4ODYsIDB4N2UsIDB4M2YsIDB4N2MsIDB4NDAsIDB4NzEsIDB4ZTMsIDB4NGUsIDB4ZjcsIDB4NzMsCisJMHgwOSwgMHhhZSwgMHg0NSwgMHgzNCwgMHhlNCwgMHg4MSwgMHgyZCwgMHhhNiwgMHg5ZiwgMHgxNywgMHg5NCwgMHhiOSwKKwkweDY2LCAweDliLCAweDMzLCAweGY4LCAweDFlLCAweDQ3LCAweGFmLCAweGQxLCAweGY2LCAweGRjLCAweGUxLCAweGZmLAorCTB4MzIsIDB4NmYsIDB4ZTAsIDB4ZjUsIDB4ZDksIDB4NWYsIDB4MjMsIDB4NGYsIDB4NzAsIDB4OTEsIDB4MjcsIDB4YjgsCisJMHhjOCwgMHgxMywgMHg1YywgMHhlNCwgMHgwOSwgMHgyZSwgMHhmMiwgMHgwNCwgMHgxNywgMHg3OSwgMHg4MiwgMHg4YiwKKwkweDNjLCAweGMxLCAweDQ1LCAweDllLCAweDgwLCAweGQ4LCAweGVkLCAweGQ3LCAweDBiLCAweDYzLCAweGM4LCAweDdmLAorCTB4ZTEsIDB4YmYsIDB4ZGMsIDB4Y2YsIDB4NDMsIDB4NGUsIDB4N2MsIDB4ZGYsIDB4YzksIDB4MzEsIDB4ODcsIDB4NjMsCisJMHgzMywgMHhjZiwgMHhhZCwgMHhlZSwgMHg3MCwgMHhmOCwgMHhkYywgMHhhNCwgMHhlZiwgMHhiYiwgMHgxMywgMHg3MywKKwkweGUzLCAweDQxLCAweDNlLCAweGMyLCAweDMwLCAweDYxLCAweGVjLCAweDY2LCAweDM4LCAweDFhLCAweDc1LCAweDJjLAorCTB4MDUsIDB4MzYsIDB4YzYsIDB4ZjksIDB4OGEsIDB4MWYsIDB4YjMsIDB4ZmMsIDB4NWMsIDB4ZjksIDB4NzUsIDB4ZTQsCisJMHgyYywgMHg2OSwgMHhlNCwgMHgyYywgMHhmZCwgMHhjOCwgMHg0ZiwgMHhmOCwgMHg4ZSwgMHgzYiwgMHhiYywgMHg2MywKKwkweGIyLCAweDk1LCAweGMzLCAweGVlLCAweDk4LCAweDcyLCAweGI3LCAweGNiLCAweGI5LCAweGI0LCAweDk5LCAweDJlLAorCTB4MGEsIDB4MzEsIDB4ZDcsIDB4NDMsIDB4MWUsIDB4ZTUsIDB4NDcsIDB4YmUsIDB4ODYsIDB4YmMsIDB4ZjUsIDB4OWIsCisJMHhmMiwgMHgzZSwgMHg2ZCwgMHg3YywgMHg5MCwgMHhjZiwgMHg3YywgMHhlNSwgMHgxYSwgMHhiOSwgMHg2YiwgMHgyOCwKKwkweDVmLCAweGZmLCAweDFlLCAweDUwLCAweDJjLCAweGIwLCAweGZjLCAweDg4LCAweGJhLCAweGNmLCAweDQzLCAweGUwLAorCTB4ZTcsIDB4NjMsIDB4OTQsIDB4NTgsIDB4ZGUsIDB4ODksIDB4MzksIDB4OWQsIDB4N2EsIDB4ZTQsIDB4NWQsIDB4MTIsCisJMHg4ZSwgMHhmMiwgMHhiYywgMHhkNiwgMHg0MywgMHhlZCwgMHgyNiwgMHg4OSwgMHhmMywgMHg3YywgMHhlMywgMHhjMCwKKwkweDc0LCAweGQ5LCAweGJmLCAweDVlLCAweDNhLCAweDk2LCAweGFmLCAweDVkLCAweDkyLCAweDNhLCAweDc1LCAweGI4LAorCTB4NWUsIDB4NDAsIDB4N2QsIDB4ZDQsIDB4MDcsIDB4MTgsIDB4MGQsIDB4YjUsIDB4NTUsIDB4NDgsIDB4OWIsIDB4NjksCisJMHg1ZSwgMHg0ZCwgMHhjOCwgMHg5YSwgMHhlNywgMHhmYywgMHhjNiwgMHg3OSwgMHhlMiwgMHhhYywgMHg3OSwgMHg5ZCwKKwkweDRiLCAweGM3LCAweGNhLCAweDU1LCAweDIzLCAweGM1LCAweGI1LCAweGIyLCAweGFkLCAweDVmLCAweDNhLCAweDc2LAorCTB4MDIsIDB4MzQsIDB4MTYsIDB4OTEsIDB4MWIsIDB4YTgsIDB4NzIsIDB4ZWQsIDB4NGIsIDB4YzcsIDB4YTYsIDB4YWIsCisJMHhmZSwgMHg3ZCwgMHg5NiwgMHhjZiwgMHgwMywgMHhlMiwgMHg2MCwgMHhiNiwgMHg5ZCwgMHhkNCwgMHgwNSwgMHhmZiwKKwkweDVlLCAweDRiLCAweDQ4LCAweDVjLCAweGM2LCAweDYzLCAweDdjLCAweDBkLCAweDc4LCAweDdjLCAweDZlLCAweDE5LAorCTB4ZTAsIDB4ZjIsIDB4ZDksIDB4MzEsIDB4MGYsIDB4OTcsIDB4OGUsIDB4OTUsIDB4NmEsIDB4Y2QsIDB4M2MsIDB4MzAsCisJMHgxZCwgMHhhNiwgMHgxYiwgMHhlZSwgMHg4NywgMHhmNywgMHg5MiwgMHgyMCwgMHhiMSwgMHhlYywgMHg3OSwgMHhjNSwKKwkweDkxLCAweGZlLCAweDIwLCAweGVmLCAweDNhLCAweDgxLCAweGZjLCAweDRlLCAweDkzLCAweDdhLCAweGVlLCAweDhmLAorCTB4ZmYsIDB4NGMsIDB4YzYsIDB4YTksIDB4YjQsIDB4ZTAsIDB4NzksIDB4N2UsIDB4ZTIsIDB4NWQsIDB4ZjYsIDB4M2IsCisJMHg5OCwgMHhjMywgMHg3OCwgMHgzMSwgMHg4NCwgMHgxNSwgMHgwMSwgMHg2YywgMHg0NywgMHg5MywgMHgzYywgMHg1YiwKKwkweDgyLCAweGY1LCAweDk4LCAweDI3LCAweGRlLCAweGU3LCAweGNmLCAweGIxLCAweDdmLCAweDc5LCAweDA3LCAweGM3LAorCTB4ZjksIDB4MTgsIDB4ZDYsIDB4YzUsIDB4NTksIDB4YmEsIDB4ZmYsIDB4NWIsIDB4ZDksIDB4MzcsIDB4ZWYsIDB4ODksCisJMHg2NSwgMHhhYSwgMHgwMSwgMHg4NywgMHhlMSwgMHg5OSwgMHg0NiwgMHg4OCwgMHg4MywgMHgxNywgMHhlNywgMHg3ZCwKKwkweDNjLCAweGIxLCAweDcxLCAweGZmLCAweGY3LCAweDQ5LCAweGViLCAweDM2LCAweGYzLCAweDFhLCAweGFlLCAweDFmLAorCTB4ZDIsIDB4YzksIDB4ZjgsIDB4ZTcsIDB4YjYsIDB4ODEsIDB4MmYsIDB4ZmYsIDB4NGYsIDB4MzEsIDB4M2MsIDB4YTEsCisJMHg4YiwgMHgxZiwgMHhiOSwgMHg0NywgMHhjZCwgMHgzNCwgMHhkNSwgMHhhMSwgMHhlMSwgMHhmZCwgMHgwNSwgMHhkZiwKKwkweDA3LCAweDcwLCAweDdkLCAweGNmLCAweGRmLCAweDFhLCAweDlhLCAweDZiLCAweGM1LCAweDY3LCAweDgzLCAweDU4LAorCTB4ZDYsIDB4NDcsIDB4YjYsIDB4YzYsIDB4NzUsIDB4YzMsIDB4ODUsIDB4NjAsIDB4YmMsIDB4MGIsIDB4YjEsIDB4OGQsCisJMHhjNywgMHgwZCwgMHhjOCwgMHgxNywgMHhiYSwgMHg2YywgMHhiNSwgMHgwNywgMHg3NSwgMHg0YiwgMHhjMiwgMHhmZiwKKwkweDI2LCAweDk0LCAweDYxLCAweDNiLCAweGUyLCAweGJhLCAweGFmLCAweDJkLCAweDk4LCAweDBiLCAweGVkLCAweDg4LAorCTB4ZmQsIDB4YjAsIDB4MTYsIDB4Y2MsIDB4YjEsIDB4YmYsIDB4MTUsIDB4YTgsIDB4NWQsIDB4YjgsIDB4MGYsIDB4M2EsCisJMHg4YiwgMHhjZCwgMHhiNiwgMHgxNCwgMHgzZSwgMHgxMywgMHg3NCwgMHg2ZSwgMHgzZSwgMHhmNCwgMHg1YiwgMHhmMCwKKwkweDI5LCAweDgzLCAweDVhLCAweGUwLCAweGZiLCAweGUzLCAweGYwLCAweDdkLCAweDlkLCAweDc0LCAweDAwLCAweDNlLAorCTB4ZWIsIDB4MjAsIDB4N2MsIDB4ZDYsIDB4MjEsIDB4ZDQsIDB4OGIsIDB4NjMsIDB4NGIsIDB4Y2QsIDB4ZjcsIDB4YmMsCisJMHg1YywgMHhhMywgMHg3NiwgMHgyYSwgMHg0NywgMHhlNCwgMHhmOSwgMHg5NywgMHgzYywgMHhkNSwgMHhmYywgMHgxMCwKKwkweDNhLCAweGMwLCAweDc1LCAweDU3LCAweGE4LCAweDEzLCAweGYwLCAweGI3LCAweDU2LCAweDAyLCAweDNhLCAweGIxLAorCTB4ZmQsIDB4M2UsIDB4MzksIDB4MDMsIDB4ZGIsIDB4NjgsIDB4YjcsIDB4ODUsIDB4Y2MsIDB4ZTUsIDB4N2MsIDB4ZDksCisJMHg5NywgMHg2YiwgMHhiZSwgMHhlYywgMHhlMSwgMHg5NywgMHg0MSwgMHg1ZiwgMHhhMywgMHg1MiwgMHg1ZCwgMHhhNywKKwkweDEyLCAweGQ2LCAweDJkLCAweDYxLCAweGRkLCAweDEyLCAweGVhLCAweGJjLCAweGU5LCAweDdhLCAweGYzLCAweDc3LAorCTB4YWYsIDB4OGUsIDB4ODAsIDB4NzcsIDB4YzYsIDB4MGQsIDB4ZmIsIDB4N2EsIDB4ZDMsIDB4ZmUsIDB4YzMsIDB4ZTcsCisJMHg0OSwgMHhjOCwgMHhmZiwgMHgxMSwgMHhjOCwgMHhmZiwgMHgyOCwgMHhlYSwgMHg5YiwgMHhkZiwgMHg0NywgMHg3ZCwKKwkweGYzLCAweDdiLCAweGE4LCAweDZmLCAweDhlLCAweGEwLCAweGJlLCAweDk5LCAweDQ0LCAweDdkLCAweGYzLCAweDY1LAorCTB4ZjgsIDB4OGYsIDB4ZmIsIDB4ZTAsIDB4M2YsIDB4MjYsIDB4ZTAsIDB4M2YsIDB4YzYsIDB4ZTUsIDB4ZGQsIDB4ZDMsCisJMHg2MSwgMHg3NywgMHhmYiwgMHg5ZCwgMHg0YSwgMHhiOCwgMHgxNiwgMHhiNywgMHg5ZiwgMHgxMiwgMHg5OSwgMHgyNSwKKwkweGVjLCAweDY5LCAweDhjLCAweDZhLCAweDBkLCAweGFlLCAweDZmLCAweDJjLCAweDcyLCAweDQ2LCAweGI5LCAweGJlLAorCTB4OTksIDB4NTAsIDB4MjYsIDB4OTEsIDB4YmYsIDB4ZGYsIDB4M2YsIDB4Y2MsIDB4NzUsIDB4NGYsIDB4NDIsIDB4YzksCisJMHhjYiwgMHhiYSwgMHhjNywgMHhiOCwgMHhlMCwgMHgyMCwgMHg3NSwgMHg0MywgMHhlZSwgMHg4NywgMHgzZCwgMHgxYiwKKwkweGU3LCAweGYyLCAweGUwLCAweGM1LCAweGNmLCAweGY5LCAweGJhLCAweDAzLCAweGJmLCAweDE3LCAweGE3LCAweGM1LAorCTB4NTksIDB4ZDQsIDB4MGMsIDB4ZWUsIDB4M2YsIDB4MjgsIDB4NDUsIDB4ZTksIDB4MWIsIDB4NzUsIDB4OGMsIDB4NTEsCisJMHgyYiwgMHhiYiwgMHhhZiwgMHgwNiwgMHhlMywgMHgxMSwgMHg5YSwgMHg5YSwgMHg0NywgMHg2ZCwgMHg3YiwgMHhmYSwKKwkweDZmLCAweDk1LCAweGJjLCAweDFjLCAweDViLCAweDE4LCAweDIzLCAweGRmLCAweDNkLCAweGZkLCAweGQ3LCAweGMxLAorCTB4YjgsIDB4MTQsIDB4ZTgsIDB4NDMsIDB4YzAsIDB4YWIsIDB4NmUsIDB4ZTEsIDB4ZDksIDB4MTUsIDB4ZTQsIDB4MWMsCisJMHgyZiwgMHhmNiwgMHg2YywgMHhmZCwgMHgzZiwgMHhlZiwgMHhiOCwgMHhiNSwgMHgyOCwgMHg2NCwgMHgxZSwgMHhkZiwKKwkweGU1LCAweGQ3LCAweDY3LCAweGNkLCAweGYzLCAweDlkLCAweDRkLCAweGYzLCAweGJhLCAweGZjLCAweDBlLCAweDViLAorCTB4YWMsIDB4YjQsIDB4YmQsIDB4MDcsIDB4MGYsIDB4NGMsIDB4NGIsIDB4ODMsIDB4NDYsIDB4ZDUsIDB4YTYsIDB4MGYsCisJMHgzZCwgMHhmZSwgMHg1ZSwgMHhlOCwgMHg4OCwgMHg3NiwgMHhmOSwgMHgwZCwgMHhjZiwgMHg5MSwgMHhmNywgMHg3YSwKKwkweGIwLCAweGYzLCAweDkxLCAweDI3LCAweDc3LCAweGY5LCAweGJlLCAweDgwLCAweGZiLCAweDQ5LCAweGM1LCAweGY3LAorCTB4ZWYsIDB4OGYsIDB4ODMsIDB4MGUsIDB4NjQsIDB4ZWQsIDB4MzYsIDB4ZDcsIDB4NzAsIDB4N2EsIDB4NzAsIDB4OTcsCisJMHhhMiwgMHgxZiwgMHg5ZiwgMHhlMSwgMHhiMywgMHg5NiwgMHhiNCwgMHhiOSwgMHhkNiwgMHhlMywgMHhiYSwgMHgyZiwKKwkweDhjLCAweDAxLCAweDIxLCAweGFkLCAweGZmLCAweDQ4LCAweGZhLCAweDdjLCAweGRmLCAweDg3LCAweDlhLCAweDhlLAorCTB4NjEsIDB4YzIsIDB4NzEsIDB4NzMsIDB4ZmQsIDB4MTcsIDB4MGYsIDB4ZWUsIDB4ZTEsIDB4OTgsIDB4ZDcsIDB4NTgsCisJMHhjMCwgMHhhYiwgMHgxNiwgMHhkMCwgMHhmYiwgMHg3NywgMHhjZiwgMHhmNywgMHgzZCwgMHg4YywgMHhhZiwgMHgzNywKKwkweGUxLCAweDVmLCAweDQwLCAweGFlLCAweGM3LCAweDc3LCAweDI2LCAweGJiLCAweGU1LCAweDc3LCAweGM5LCAweDc3LAorCTB4NjYsIDB4M2IsIDB4ZTgsIDB4ZWQsIDB4NTMsIDB4YzgsIDB4NTksIDB4MmQsIDB4MjMsIDB4NzMsIDB4MDksIDB4YjUsCisJMHhjNywgMHgzMiwgMHhkYiwgMHhjOSwgMHgwOCwgMHhmMywgMHgzOSwgMHg5MCwgMHg5ZSwgMHhhNiwgMHg5YiwgMHg3YiwKKwkweGZjLCAweDVjLCAweGZjLCAweGFiLCAweGNhLCAweDQ3LCAweGY5LCAweDE2LCAweGMxLCAweDNhLCAweDNmLCAweDZhLAorCTB4NWEsIDB4MjcsIDB4ZGQsIDB4YjQsIDB4Y2UsIDB4MGEsIDB4ZGIsIDB4NmMsIDB4ZWQsIDB4NGIsIDB4ZDgsIDB4NzMsCisJMHg2OSwgMHhmNywgMHhjZCwgMHg3YSwgMHgzMiwgMHhhOCwgMHhjYiwgMHgxZSwgMHgxZSwgMHg2OSwgMHhhMywgMHg2YSwKKwkweGFmLCAweGIxLCAweGYyLCAweDFhLCAweGYyLCAweGY1LCAweGUyLCAweDA4LCAweGU2LCAweDkyLCAweDAzLCAweDc4LAorCTB4YzcsIDB4ZjMsIDB4NDYsIDB4OGQsIDB4ODQsIDB4YjEsIDB4NTIsIDB4YTMsIDB4Y2YsIDB4MDEsIDB4ZGYsIDB4MjgsCisJMHgxMSwgMHhmMSwgMHgzYywgMHhmNywgMHgyNSwgMHg2ZiwgMHhiNSwgMHhjMCwgMHgwNywgMHhhNCwgMHhkNiwgMHhiMCwKKwkweGU3LCAweDQ5LCAweGQ0LCAweDVmLCAweDQ3LCAweDM3LCAweGVhLCAweDYxLCAweDVlLCAweGU3LCAweDU2LCAweDY1LAorCTB4NGQsIDB4ZTYsIDB4YzYsIDB4ZmIsIDB4OTUsIDB4NTIsIDB4ZDIsIDB4ZGYsIDB4ZTMsIDB4ZWYsIDB4YzIsIDB4NWYsCisJMHhhOCwgMHg4MiwgMHg3MSwgMHhkZiwgMHgwMSwgMHg2ZCwgMHg4NSwgMHgxNiwgMHg0ZSwgMHhhOSwgMHhmMiwgMHgwZSwKKwkweGI2LCAweDM4LCAweGMyLCAweDY3LCAweGNkLCAweGNmLCAweDhmLCAweDkzLCAweDVkLCAweGI4LCAweGE3LCAweDNmLAorCTB4MGQsIDB4ZjYsIDB4MzQsIDB4MTYsIDB4ZDQsIDB4ZDMsIDB4ZTEsIDB4OWUsIDB4NjIsIDB4ZjQsIDB4ZTYsIDB4YWMsCisJMHgwZSwgMHhkYywgMHg5YiwgMHgyMCwgMHg4ZiwgMHgwMiwgMHgyZCwgMHgzNSwgMHhkMiwgMHg5ZiwgMHg0MiwgMHhhNywKKwkweGQyLCAweDI0LCAweDFiLCAweDZkLCAweGRiLCAweDE5LCAweDk2LCAweDM2LCAweDZiLCAweGY4LCAweGYxLCAweDE0LAorCTB4ZWMsIDB4ZjAsIDB4NzgsIDB4NGYsIDB4NzgsIDB4MzcsIDB4YWMsIDB4OWEsIDB4MWUsIDB4ZDcsIDB4M2QsIDB4NjgsCisJMHgzYywgMHhkZiwgMHgwZiwgMHg1YiwgMHg0YywgMHhjMywgMHgzZSwgMHgzOSwgMHg2NywgMHgyYSwgMHg3MCwgMHhhZCwKKwkweGMyLCAweGY2LCAweGE0LCAweDNiLCAweGFhLCAweGExLCAweDRmLCAweDUwLCAweDA2LCAweGY1LCAweDBlLCAweGVmLAorCTB4M2YsIDB4NDcsIDB4OGIsIDB4OGQsIDB4OTAsIDB4ODcsIDB4MmMsIDB4ZWMsIDB4NzEsIDB4MTQsIDB4YmYsIDB4NjEsCisJMHhiYywgMHhiMywgMHhmMCwgMHhlMywgMHg1YSwgMHg2OSwgMHg4NSwgMHgxZSwgMHg5NSwgMHhiOSwgMHgzOCwgMHg3MiwKKwkweGVkLCAweDQxLCAweGU2LCAweGVmLCAweDRlLCAweGMwLCAweGIzLCAweDNlLCAweGIzLCAweDllLCAweGRlLCAweDQ5LAorCTB4NGUsIDB4MmYsIDB4ZmIsIDB4OGEsIDB4MTQsIDB4NjgsIDB4MDMsIDB4YzcsIDB4NWQsIDB4ODcsIDB4YWQsIDB4ZjcsCisJMHhlMywgMHg2OSwgMHhlOCwgMHg0NSwgMHg5NiwgMHhhZCwgMHhhNCwgMHhlZiwgMHg3OSwgMHg2YSwgMHg5NiwgMHhiZiwKKwkweDUxLCAweDVjLCAweDA4LCAweGM2LCAweDAzLCAweGZhLCAweDNkLCAweGFjLCAweDdiLCAweGE5LCAweDFiLCAweDY4LAorCTB4NjUsIDB4M2UsIDB4OGMsIDB4ODMsIDB4NjcsIDB4NjAsIDB4ODMsIDB4N2MsIDB4NjcsIDB4M2IsIDB4MDYsIDB4YjksCisJMHhmMCwgMHg1OCwgMHgwOSwgMHhlMiwgMHgyMSwgMHhlNiwgMHgxNywgMHg5MSwgMHg5NCwgMHhiNCwgMHhlNywgMHg2OCwKKwkweDE5LCAweGY1LCAweDNmLCAweGY1LCAweGYyLCAweDEzLCAweGY5LCAweGFlLCAweGJiLCAweDMzLCAweGQwLCAweGY3LAorCTB4YWQsIDB4ZjgsIDB4YWEsIDB4YzksIDB4ZmQsIDB4MzEsIDB4ZjAsIDB4YTcsIDB4MzUsIDB4ZTEsIDB4MzMsIDB4OGUsCisJMHg1ZiwgMHg5ZiwgMHhhYywgMHgxMSwgMHhlMiwgMHg3MSwgMHhjYSwgMHhmYiwgMHg4MiwgMHhjOCwgMHgzZCwgMHg0ZCwKKwkweGJmLCAweDIzLCAweGY3LCAweDU0LCAweGE3LCAweDIzLCAweGYzLCAweGE4LCAweDZkLCAweGIzLCAweDAzLCAweDk5LAorCTB4NDUsIDB4MzIsIDB4MzIsIDB4MjcsIDB4NjgsIDB4NDgsIDB4M2YsIDB4NDAsIDB4YWEsIDB4ZmMsIDB4ZDYsIDB4OTcsCisJMHgxNiwgMHhkZSwgMHgxNywgMHg1YSwgMHg3MiwgMHg5ZSwgMHg3NywgMHgwNiwgMHhiYywgMHhiZiwgMHgyOCwgMHhkNywKKwkweDc5LCAweDFhLCAweGZjLCAweDQzLCAweDU2LCAweGIyLCAweDI2LCAweDYxLCAweDVlLCAweGYxLCAweDRjLCAweDMyLAorCTB4YmYsIDB4MTUsIDB4M2EsIDB4ZDIsIDB4ZjgsIDB4NjEsIDB4NzAsIDB4MzYsIDB4OGYsIDB4OTAsIDB4ZTMsIDB4YmUsCisJMHhhNSwgMHgzYSwgMHg2NiwgMHgwNSwgMHhiMCwgMHhkZiwgMHgwOSwgMHg3OCwgMHhjYiwgMHg4MSwgMHg1ZiwgMHhhYywKKwkweGRmLCAweDU4LCAweDRmLCAweGIyLCAweDZmLCAweGUwLCAweDMzLCAweDc3LCAweDkwLCAweDM1LCAweDNhLCAweDIzLAorCTB4YzgsIDB4YTMsIDB4OTIsIDB4ZDcsIDB4ZjIsIDB4MDMsIDB4MDksIDB4ZGEsIDB4ZWEsIDB4MDcsIDB4MTgsIDB4MmYsCisJMHhmMSwgMHgzMSwgMHhiYSwgMHhjMiwgMHg3YywgMHg5NCwgMHhhNCwgMHhmZiwgMHg5NCwgMHg3MSwgMHg0YiwgMHhkMiwKKwkweDUzLCAweGI3LCAweGY5LCAweDgyLCAweDZmLCAweGM5LCAweGU3LCAweGFhLCAweGNhLCAweGJlLCAweDg5LCAweGUzLAorCTB4MWYsIDB4ZWIsIDB4NzAsIDB4MjcsIDB4ZmMsIDB4MWYsIDB4NzQsIDB4MTAsIDB4NzYsIDB4OWMsIDB4OWYsIDB4ZTcsCisJMHhmYiwgMHg4OSwgMHg0MSwgMHhiZSwgMHg1NywgMHgzYSwgMHg1NywgMHhjMCwgMHhkOSwgMHgyZSwgMHhmMCwgMHhmNywKKwkweGM3LCAweGE0LCAweDVmLCAweDYzLCAweGZhLCAweGY1LCAweDU3LCAweDlhLCAweDdkLCAweDIxLCAweGRhLCAweDkyLAorCTB4ZjQsIDB4OTMsIDB4MDUsIDB4ZjksIDB4YmQsIDB4MzEsIDB4MDEsIDB4MTgsIDB4OGYsIDB4N2QsIDB4NjcsIDB4ZDMsCisJMHhkZiwgMHg1OCwgMHhiYywgMHg2YywgMHhmYiwgMHg3ZiwgMHg2MywgMHgxMSwgMHg3YywgMHhmYiwgMHhhZCwgMHhmOSwKKwkweDc5LCAweGM0LCAweDgzLCAweDc1LCAweDhkLCAweDI2LCAweGViLCAweGUxLCAweGRmLCAweDVjLCAweGYwLCAweDM5LAorCTB4YzAsIDB4MzcsIDB4ZDcsIDB4YzMsIDB4ZGMsIDB4YzEsIDB4OTMsIDB4ZjEsIDB4YTUsIDB4YmMsIDB4ZTUsIDB4MmMsCisJMHg5NywgMHg4MiwgMHg5YywgMHg4OCwgMHg2YiwgMHgwMCwgMHg5NiwgMHgyMSwgMHhjNiwgMHg4YiwgMHhmZSwgMHhmOSwKKwkweDJkLCAweDg4LCAweDNkLCAweDM4LCAweDNmLCAweGM4LCAweDFjLCAweDdjLCAweGJkLCAweDM5LCAweGViLCAweGQ3LAorCTB4YjksIDB4NjUsIDB4ZjYsIDB4OGIsIDB4ZmQsIDB4NjEsIDB4ZGQsIDB4YmIsIDB4OWIsIDB4Y2EsIDB4MTMsIDB4ZmMsCisJMHgzZSwgMHg0NiwgMHg2ZiwgMHhjYywgMHhjNiwgMHhlNCwgMHhmYiwgMHgyMiwgMHhjNSwgMHg4MiwgMHhmNywgMHgzYywKKwkweDRlLCAweDUwLCAweDUxLCAweGJlLCAweGFmLCAweDA1LCAweGY0LCAweDUwLCAweGE3LCAweGRkLCAweDE3LCAweDhlLAorCTB4MzUsIDB4ZTUsIDB4NDgsIDB4YzMsIDB4YzcsIDB4OWIsIDB4NmEsIDB4ZDQsIDB4ZTgsIDB4ZDEsIDB4YzYsIDB4MmEsCisJMHhmNiwgMHhhZiwgMHg1MCwgMHg3ZSwgMHhiYywgMHg0NCwgMHgzNywgMHg5OCwgMHhiYSwgMHg4YywgMHhmYiwgMHg0ZSwKKwkweDgyLCAweDc1LCAweDhjLCAweGY1LCAweDZiLCAweDRjLCAweGQ2LCAweDlkLCAweDI1LCAweGU0LCAweDBiLCAweGM1LAorCTB4MTEsIDB4ZmUsIDB4YzYsIDB4ZjMsIDB4ZGUsIDB4NWQsIDB4YzUsIDB4OGEsIDB4YTEsIDB4ZGIsIDB4ZjQsIDB4ODEsCisJMHhlNywgMHg2OCwgMHgzYywgMHgyNiwgMHgyMSwgMHg3MiwgMHhhYiwgMHg3NywgMHgzZCwgMHg1OCwgMHhiZiwgMHg3OCwKKwkweDk3LCAweGJmLCAweDU3LCAweGJjLCAweGFmLCAweDMzLCAweGFjLCAweDJhLCAweGJmLCAweGNkLCAweGZlLCAweGU0LAorCTB4NzYsIDB4OGQsIDB4ZDYsIDB4NmUsIDB4ZjcsIDB4YmMsIDB4ZmIsIDB4MmQsIDB4OWQsIDB4OWMsIDB4YTAsIDB4NzYsCisJMHhmNSwgMHhiZiwgMHhiOSwgMHhiNywgMHhjYiwgMHgxYywgMHhjNCwgMHgxOSwgMHg0OSwgMHgyYiwgMHgwNSwgMHhkOCwKKwkweGViLCAweGIyLCAweDhiLCAweDNhLCAweDQ3LCAweDE4LCAweGEzLCAweGFiLCAweDQyLCAweDQ3LCAweGNjLCAweGU1LAorCTB4M2IsIDB4ODAsIDB4M2IsIDB4N2EsIDB4ZjgsIDB4N2IsIDB4ZjMsIDB4OGMsIDB4YzUsIDB4MzAsIDB4N2QsIDB4ZmUsCisJMHg1ZCwgMHhkNywgMHgyZCwgMHhmNywgMHg0OSwgMHgzZiwgMHg0YiwgMHgxNCwgMHhjNCwgMHg5ZSwgMHg1YiwgMHg5YSwKKwkweDZkLCAweGEyLCAweDM5LCAweGI3LCAweDY0LCAweDViLCAweGEwLCAweDQ5LCAweDBkLCAweGJjLCAweDk0LCAweDJiLAorCTB4NjEsIDB4OWUsIDB4YzYsIDB4N2YsIDB4NGIsIDB4YjAsIDB4N2EsIDB4ZDcsIDB4MzcsIDB4YzAsIDB4ZTcsIDB4MzQsCisJMHhmOCwgMHhlNCwgMHg3ZCwgMHg0YywgMHhkNywgMHg0MywgMHg5ZCwgMHgwYiwgMHg2YiwgMHgwNSwgMHhlZSwgMHgyMywKKwkweGU2LCAweGJiLCAweDg4LCAweGY5LCAweDJlLCAweDYyLCAweGJlLCAweDhiLCAweDk4LCAweGVmLCAweDIyLCAweGU2LAorCTB4YmIsIDB4ODgsIDB4ZjksIDB4MmUsIDB4NjIsIDB4YmUsIDB4OGIsIDB4OTgsIDB4ZWYsIDB4OGUsIDB4MDcsIDB4NzksCisJMHhkYSwgMHg2MywgMHgxYiwgMHg3OSwgMHhkYSwgMHg0YSwgMHg4MywgMHhiZiwgMHg0MywgMHg0OSwgMHg1ZSwgMHg0YSwKKwkweDI1LCAweGYyLCAweGYzLCAweDVjLCAweDEyLCAweDljLCAweGQzLCAweDg0LCAweDc5LCAweGVlLCAweGM3LCAweDdmLAorCTB4MTMsIDB4ZjEsIDB4ZjEsIDB4MzgsIDB4YzcsIDB4NjMsIDB4YmMsIDB4OTIsIDB4MjIsIDB4NGMsIDB4YzYsIDB4ZjMsCisJMHhmMywgMHgzYywgMHhhZSwgMHhhZCwgMHhiNiwgMHhlMiwgMHgyMCwgMHg1ZiwgMHhjYiwgMHhiMSwgMHgzZiwgMHg2MywKKwkweGJiLCAweDQ4LCAweGZhLCAweGY1LCAweDYyLCAweGVlLCAweGY1LCAweDJmLCAweGExLCAweDc2LCAweDNjLCAweDVlLAorCTB4YWMsIDB4Y2IsIDB4MTgsIDB4OGMsIDB4ZjEsIDB4N2IsIDB4MTgsIDB4NmIsIDB4YWMsIDB4NzMsIDB4ZmMsIDB4ZWUsCisJMHg1ZSwgMHhhZSwgMHgyNywgMHg4YSwgMHhmNSwgMHgxNCwgMHg5NSwgMHgxNiwgMHhjMywgMHhmYywgMHgwNywgMHg3OCwKKwkweGVlLCAweDkwLCAweDUyLCAweGE4LCAweGYyLCAweGQ5LCAweDBhLCAweDlhLCAweDRlLCAweDQyLCAweDI4LCAweDY2LAorCTB4NzMsIDB4NWUsIDB4NzcsIDB4NDksIDB4ZDYsIDB4NDgsIDB4ZmUsIDB4ZGYsIDB4MDUsIDB4MGQsIDB4ODMsIDB4YjcsCisJMHhmMCwgMHgxZSwgMHg5NywgMHg0OCwgMHg5ZCwgMHg0ZCwgMHhjYSwgMHhiZiwgMHgzMSwgMHg0OCwgMHg5OCwgMHg4MywKKwkweGYyLCAweDZmLCAweDFkLCAweGJhLCAweGIxLCAweDhlLCAweDk4LCAweGRkLCAweDEzLCAweGZlLCAweGVkLCAweDA2LAorCTB4ZDcsIDB4NWQsIDB4ZjYsIDB4ZTYsIDB4ZmQsIDB4MmIsIDB4ZWYsIDB4MjMsIDB4MDksIDB4N2IsIDB4YmQsIDB4YTcsCisJMHgwZiwgMHg3YiwgMHhjMywgMHhiOSwgMHg1ZSwgMHhkOSwgMHgyNSwgMHhmMywgMHg2ZSwgMHhmOCwgMHhjZSwgMHgzMywKKwkweDgzLCAweDM3LCAweGY1LCAweDUyLCAweGU3LCAweDZlLCAweDVhLCAweDFlLCAweGU0LCAweDFhLCAweGFkLCAweDBkLAorCTB4ZjQsIDB4MTgsIDB4ZDYsIDB4YzgsIDB4ZDgsIDB4NjIsIDB4MzcsIDB4OWQsIDB4OWQsIDB4ODcsIDB4NmYsIDB4OWQsCisJMHgzNywgMHgyYywgMHhmZSwgMHhmYiwgMHg4MiwgMHg4NSwgMHhjMSwgMHgyNCwgMHg3YywgMHhmMiwgMHg3OCwgMHgyZiwKKwkweGM3LCAweGU0LCAweGM1LCAweDA2LCAweGViLCAweDRhLCAweDM3LCAweGYwLCAweGZiLCAweGExLCAweDhiLCAweDNiLAorCTB4NjAsIDB4NDMsIDB4MDIsIDB4ZWIsIDB4ODcsIDB4YjQsIDB4ZmYsIDB4NTMsIDB4ZDIsIDB4ZWUsIDB4MzYsIDB4ZjMsCisJMHg3ZCwgMHg1MiwgMHgzNywgMHg4NCwgMHhhMSwgMHhhNywgMHgwNSwgMHg3OCwgMHhmZiwgMHg0OCwgMHg2ZCwgMHg2OSwKKwkweDExLCAweDdmLCAweDJmLCAweDljLCAweDc2LCAweDliLCAweGJmLCAweDFiLCAweDBlLCAweDI5LCAweGM1LCAweDJhLAorCTB4ZmYsIDB4OGQsIDB4YzMsIDB4MjAsIDB4ZmQsIDB4NGYsIDB4ZTEsIDB4NTYsIDB4MTcsIDB4ZDMsIDB4ZDYsIDB4NzksCisJMHg4NiwgMHhkZiwgMHhjZiwgMHhlNiwgMHgyZiwgMHhjNCwgMHg4MSwgMHgxMywgMHhlMiwgMHg4MCwgMHg0MSwgMHg1NCwKKwkweGYzLCAweDMxLCAweDA3LCAweGUyLCAweGNhLCAweDQ0LCAweDNkLCAweDIwLCAweDMyLCAweDU5LCAweDE1LCAweDUyLAorCTB4MmQsIDB4ZGIsIDB4NTAsIDB4YjcsIDB4NWQsIDB4MzYsIDB4NzcsIDB4Y2IsIDB4YTYsIDB4NGMsIDB4ZGEsIDB4MjIsCisJMHgwNiwgMHg0OSwgMHg5YiwgMHg2YSwgMHhkMiwgMHgyZSwgMHg3NiwgMHgzMSwgMHhlZCwgMHgyZSwgMHg5NiwgMHg4MSwKKwkweDM0LCAweGNkLCAweGVjLCAweDFhLCAweDU2LCAweDMyLCAweGE0LCAweDVkLCAweDRjLCAweGFlLCAweDMxLCAweDA0LAorCTB4ODgsIDB4NTMsIDB4YWIsIDB4NWIsIDB4MmYsIDB4MzIsIDB4NGQsIDB4NTMsIDB4OTAsIDB4NTcsIDB4MjUsIDB4ZGQsCisJMHg0ZCwgMHg2ZiwgMHg3NiwgMHgzZiwgMHg1NSwgMHg2NCwgMHhhZCwgMHg3MiwgMHhkMSwgMHgyNSwgMHg2YSwgMHhhNywKKwkweDZhLCAweDdmLCAweDE3LCAweDY3LCAweGNmLCAweGYzLCAweDlkLCAweDYzLCAweDIwLCAweDZjLCAweGQ1LCAweDkwLAorCTB4YWMsIDB4ZjMsIDB4OWQsIDB4ZWYsIDB4N2MsIDB4ZmYsIDB4ZGYsIDB4ZmIsIDB4M2UsIDB4ZWYsIDB4MmYsIDB4NTMsCisJMHhhMCwgMHgyZiwgMHhjMywgMHg4YSwgMHhhOSwgMHg0YiwgMHg2NSwgMHhiNiwgMHhiMSwgMHg1MCwgMHhhNiwgMHgxZCwKKwkweDdlLCAweDEzLCAweGJjLCAweGRjLCAweDIzLCAweDhiLCAweGEwLCAweGUzLCAweGZjLCAweDY4LCAweGFiLCAweGU3LAorCTB4NmYsIDB4ZWQsIDB4ZjQsIDB4NzgsIDB4MzgsIDB4ZDIsIDB4ZWIsIDB4YzksIDB4MjgsIDB4YWQsIDB4NGIsIDB4ZTYsCisJMHhiNSwgMHgzZSwgMHhkZCwgMHg3ZCwgMHhlOCwgMHhkYiwgMHgwZiwgMHhiMCwgMHhhNiwgMHgxMCwgMHhjZSwgMHg2MSwKKwkweGI4LCAweDU3LCAweGUzLCAweDkxLCAweDhmLCAweGVmLCAweDdkLCAweDg3LCAweGRlLCAweDdiLCAweDBmLCAweGJkLAorCTB4OWYsIDB4ZmMsIDB4MWYsIDB4ZWQsIDB4NTksIDB4M2UsIDB4NGMsIDB4MGYsIDB4NWMsIDB4YTcsIDB4MTksIDB4ZTcsCisJMHgyYywgMHhmOSwgMHhjMiwgMHg4NCwgMHg5YSwgMHgyYiwgMHg5OCwgMHgwOSwgMHhlYSwgMHgwMiwgMHgyOSwgMHg3MSwKKwkweDU0LCAweGNhLCAweDZlLCAweDAzLCAweGM2LCAweGI1LCAweGM5LCAweGMyLCAweDBhLCAweDY4LCAweDFlLCAweGZiLAorCTB4NjgsIDB4YjcsIDB4MTgsIDB4MmYsIDB4N2YsIDB4YjYsIDB4OTcsIDB4M2MsIDB4ZDMsIDB4ODEsIDB4NmIsIDB4ZjAsCisJMHg1OSwgMHg0MywgMHgyMSwgMHhiNCwgMHg3MywgMHg1ZSwgMHhiMywgMHg2MywgMHhjNiwgMHg0NSwgMHhlZCwgMHhiZiwKKwkweGExLCAweDBlLCAweGUzLCAweGE4LCAweGJjLCAweGNlLCAweGZkLCAweDYwLCAweDliLCAweDE2LCAweDc5LCAweDYwLAorCTB4MjUsIDB4N2IsIDB4YmMsIDB4NWMsIDB4MjIsIDB4ZDgsIDB4YmIsIDB4MmYsIDB4ZjYsIDB4NTIsIDB4YmYsIDB4NzgsCisJMHhkNSwgMHhkZSwgMHhhYiwgMHgzMywgMHg3NiwgMHg4NSwgMHg3OSwgMHg1YSwgMHgyMCwgMHg5YSwgMHg5NywgMHg0NSwKKwkweGNhLCAweDU1LCAweDkxLCAweDliLCAweGY4LCAweGZkLCAweGIxLCAweGVhLCAweGM1LCAweDJmLCAweDE0LCAweDZkLAorCTB4ZWQsIDB4NDksIDB4ZDksIDB4MmUsIDB4M2QsIDB4MmIsIDB4MzUsIDB4YzgsIDB4OWMsIDB4MmQsIDB4ZGIsIDB4NzEsCisJMHgxZSwgMHhkYSwgMHg2MSwgMHg3ZCwgMHhlNiwgMHhhZiwgMHgxNywgMHg5NCwgMHg0NCwgMHhjNiwgMHgyOCwgMHhkMywKKwkweGRhLCAweGU0LCAweDY3LCAweDJiLCAweGNjLCAweGJiLCAweDMzLCAweDhkLCAweDg3LCAweGMyLCAweGZjLCAweGI3LAorCTB4OTAsIDB4NjQsIDB4ODIsIDB4N2UsIDB4YWQsIDB4OTcsIDB4Y2EsIDB4YjcsIDB4NDUsIDB4M2UsIDB4YzEsIDB4YjcsCisJMHg0ZiwgMHg1NiwgMHg1ZSwgMHhlOSwgMHhhNSwgMHhjZiwgMHhlNSwgMHhlMywgMHgxNSwgMHhiZSwgMHhmYiwgMHhmMCwKKwkweGY0LCAweDQ5LCAweGMzLCAweGYyLCAweDQzLCAweDdmLCAweDA1LCAweGYwLCAweDE4LCAweDNjLCAweDc3LCAweGVlLAorCTB4ZjcsIDB4NDcsIDB4NWMsIDB4MWIsIDB4ZWEsIDB4NjgsIDB4YzMsIDB4YjYsIDB4NDksIDB4N2UsIDB4MTgsIDB4MzgsCisJMHhhOCwgMHg4NiwgMHg3NCwgMHhiZSwgMHg1MiwgMHgyMywgMHhhOCwgMHg3MSwgMHhkOSwgMHg1ZiwgMHg2MSwgMHg1ZSwKKwkweDlkLCAweDcxLCAweDU0LCAweDYzLCAweDc0LCAweGYyLCAweGY2LCAweDgyLCAweGRlLCAweDBiLCAweGNhLCAweGI5LAorCTB4OGEsIDB4NGQsIDB4NWEsIDB4MzUsIDB4NjQsIDB4MGIsIDB4YmMsIDB4YjYsIDB4NTksIDB4ZGYsIDB4ZWEsIDB4ZTMsCisJMHg1ZCwgMHg2ZCwgMHhkNywgMHgxNywgMHg3YiwgMHg1ZCwgMHgxYiwgMHg4ZCwgMHg3NSwgMHhhZiwgMHhmNywgMHhiYSwKKwkweDc1LCAweDYxLCAweGNmLCAweGU2LCAweGEyLCAweDZkLCAweDU2LCAweGM2LCAweGRlLCAweDdlLCAweDJjLCAweGY1LAorCTB4ZDUsIDB4OWYsIDB4Y2EsIDB4OWQsIDB4ZDIsIDB4NGYsIDB4ZTQsIDB4YjcsIDB4YWIsIDB4ZTcsIDB4YTEsIDB4NzMsCisJMHg5OCwgMHhlNSwgMHgxYywgMHhlNCwgMHhjOSwgMHhiYiwgMHg3NSwgMHhjNywgMHg3OSwgMHhkNywgMHgzZSwgMHgwNywKKwkweGZiLCAweGMwLCAweDcxLCAweGZlLCAweDY0LCAweGVmLCAweDQ4LCAweDY0LCAweGZjLCAweDdiLCAweGQ4LCAweDczLAorCTB4MTYsIDB4M2MsIDB4NDQsIDB4MmMsIDB4Y2MsIDB4ODAsIDB4ZGUsIDB4NTIsIDB4N2QsIDB4ZDIsIDB4MTksIDB4ZDAsCisJMHg3NCwgMHgzMiwgMHgzNCwgMHhkZSwgMHg4YSwgMHgzZCwgMHhmOCwgMHgzYywgMHgzZCwgMHg5YywgMHg3YiwgMHg0OSwKKwkweGY3LCAweDkxLCAweDY2LCAweDdjLCAweGY1LCAweDBhLCAweGU2LCAweDZmLCAweDA1LCAweDVmLCAweDFjLCAweGM1LAorCTB4NGYsIDB4YzksIDB4YzMsIDB4MzEsIDB4YWMsIDB4NzUsIDB4OGMsIDB4YjQsIDB4ZDcsIDB4MmEsIDB4OTEsIDB4NjcsCisJMHhiMCwgMHg4ZiwgMHg2YywgMHg4YiwgMHgzYywgMHgyYSwgMHhkYywgMHhlYSwgMHhhNSwgMHgzZiwgMHhlZiwgMHg1MSwKKwkweDgxLCAweDY1LCAweGRmLCAweDU3LCAweGJiLCAweGM0LCAweDkxLCAweDE2LCAweGM4LCAweGVmLCAweDg1LCAweDA5LAorCTB4NTcsIDB4NTcsIDB4ZmEsIDB4ODMsIDB4M2EsIDB4ODUsIDB4ZjYsIDB4NTYsIDB4ZWUsIDB4N2QsIDB4NDUsIDB4ZGQsCisJMHgyZSwgMHhlNywgMHhiNCwgMHg0MiwgMHgxNywgMHg5ZiwgMHg4MiwgMHgwZSwgMHg5NCwgMHhhYywgMHg1ZiwgMHg5MSwKKwkweGM2LCAweDU4LCAweDAwLCAweDZkLCAweGE4LCAweGEzLCAweDY4LCAweDJjLCAweDkxLCAweDU0LCAweDgxLCAweGY5LAorCTB4NWQsIDB4Y2MsIDB4YjUsIDB4YzIsIDB4MWEsIDB4Y2YsIDB4MTEsIDB4MzcsIDB4YjgsIDB4YzYsIDB4MzYsIDB4YzYsCisJMHhlMCwgMHhiYywgMHgzYSwgMHgwYiwgMHgzNCwgMHhjMiwgMHgzYSwgMHhkMiwgMHg3NywgMHgwMiwgMHgzYywgMHg5OSwKKwkweGEwLCAweGRjLCAweGM0LCAweDc4LCAweGEzLCAweDE4LCAweDhmLCAweGU1LCAweDJlLCAweDhjLCAweDc3LCAweDQ1LAorCTB4OTIsIDB4NzYsIDB4NzMsIDB4Y2MsIDB4MzgsIDB4ZGEsIDB4MTAsIDB4NjcsIDB4ZTIsIDB4ZDAsIDB4MWYsIDB4MDYsCisJMHg1NSwgMHg3YSwgMHgyNSwgMHgwOCwgMHhmOSwgMHhkZCwgMHgyYiwgMHg2OSwgMHhlMywgMHhjOCwgMHg4MSwgMHgzZCwKKwkweGU2LCAweGI0LCAweDdkLCAweGUwLCAweGYzLCAweDhkLCAweDdhLCAweDZiLCAweGVhLCAweDNhLCAweGIwLCAweDI2LAorCTB4ZjYsIDB4YzcsIDB4MGYsIDB4YjYsIDB4NzEsIDB4NzIsIDB4NjUsIDB4MDksIDB4MzgsIDB4YjUsIDB4ZjQsIDB4NDEsCisJMHhkMiwgMHhiZSwgMHgyMCwgMHhhOSwgMHgyMCwgMHhkNywgMHhjNCwgMHhmYSwgMHgyMCwgMHhkNiwgMHg0YywgMHgzZiwKKwkweGQ2LCAweDc3LCAweDgxLCAweDQzLCAweDQ3LCAweGJjLCAweDNhLCAweGI2LCAweDE1LCAweDVmLCAweDEyLCAweDY3LAorCTB4ZWYsIDB4ZGEsIDB4YjUsIDB4YWMsIDB4ZmIsIDB4OGEsIDB4MjQsIDB4OTcsIDB4YjIsIDB4MzIsIDB4YWQsIDB4ZmIsCisJMHhmMSwgMHgwYywgMHgwNywgMHhiNCwgMHhlZSwgMHg0MSwgMHg1ZSwgMHg4ZCwgMHg5YywgMHhjMCwgMHg1OSwgMHhjNiwKKwkweGY2LCAweDZkLCAweGUwLCAweGYwLCAweDA5LCAweDcyLCAweDkxLCAweGQxLCAweGU3LCAweGYyLCAweDJjLCAweGJlLAorCTB4OWQsIDB4ZTAsIDB4MWQsIDB4YjUsIDB4NDksIDB4ZTQsIDB4NWIsIDB4OTAsIDB4OTEsIDB4ODUsIDB4NjYsIDB4N2QsCisJMHg0MCwgMHgzZSwgMHgyZCwgMHhmNCwgMHhmNCwgMHgzMSwgMHhjZSwgMHhmMiwgMHhkNywgMHg4MiwgMHgyMSwgMHgxZiwKKwkweDE3LCAweDc0LCAweDJjLCAweDc0LCAweGM2LCAweDJmLCAweGU2LCAweDY1LCAweGQ3LCAweDNlLCAweDFmLCAweDllLAorCTB4NTksIDB4NTAsIDB4ZmMsIDB4M2UsIDB4N2MsIDB4NzksIDB4NWQsIDB4NzUsIDB4YTAsIDB4NmQsIDB4MDAsIDB4ZWQsCisJMHhiOCwgMHgwZSwgMHg0MywgMHhhNiwgMHgwYSwgMHg5ZiwgMHgzYiwgMHhiMywgMHgyMywgMHg4ZSwgMHgzMywgMHhhZCwKKwkweGYzLCAweGMzLCAweDYyLCAweGM2LCAweDgyLCAweDZhLCAweGVhLCAweGU0LCAweDUxLCAweDI5LCAweDA0LCAweGRiLAorCTB4MzEsIDB4NTcsIDB4Y2MsIDB4NTgsIDB4NTcsIDB4YzMsIDB4NTgsIDB4MGYsIDB4Y2IsIDB4MjcsIDB4YzgsIDB4MTMsCisJMHhhMSwgMHgxZCwgMHhlMSwgMHhmOCwgMHg2NiwgMHg2NiwgMHg0ZCwgMHhjNSwgMHhjMiwgMHg0MywgMHhjYSwgMHg0YywKKwkweGU0LCAweGYxLCAweDZiLCAweDUxLCAweDNhLCAweDhlLCAweDE4LCAweDBhLCAweDJiLCAweGYwLCAweDJlLCAweGY2LAorCTB4NjQsIDB4OWQsIDB4NzYsIDB4OWMsIDB4OGMsIDB4YzUsIDB4ZmEsIDB4OTgsIDB4MTEsIDB4NTAsIDB4ZjQsIDB4YjcsCisJMHg3NCwgMHhlYSwgMHg3OCwgMHhlMywgMHhiNSwgMHg5MywgMHgzMSwgMHhlMywgMHhiNCwgMHgzYSwgMHhlZSwgMHhiZCwKKwkweGM3LCAweDgxLCAweDk5LCAweDdiLCAweGUzLCAweDlkLCAweDVmLCAweDUzLCAweDg2LCAweGJjLCAweDUxLCAweDg4LAorCTB4ODUsIDB4ZTcsIDB4OTQsIDB4OTksIDB4YzUsIDB4OTgsIDB4ZDksIDB4YjQsIDB4MjIsIDB4NmUsIDB4YzQsIDB4OGMsCisJMHg0ZSwgMHg0NSwgMHg5ZiwgMHg2OCwgMHhiYiwgMHhkZSwgMHg3NywgMHgwNiwgMHhmZCwgMHg2MywgMHhhYSwgMHhjNSwKKwkweDViLCAweDBmLCAweGVmLCAweGViLCAweGVkLCAweDNlLCAweDk3LCAweDY3LCAweDg4LCAweDM5LCAweDIzLCAweGMwLAorCTB4NGMsIDB4ZTYsIDB4OWEsIDB4ZTksIDB4ZGMsIDB4ODYsIDB4NDQsIDB4NjQsIDB4N2MsIDB4NDQsIDB4NjMsIDB4ZTgsCisJMHhlMywgMHgzMywgMHg3ZiwgMHg0NywgMHgxZCwgMHhjYSwgMHg2NSwgMHhkNiwgMHg0NSwgMHgzZCwgMHg3ZSwgMHgxYiwKKwkweGQxLCAweDNhLCAweGYzLCAweGUzLCAweDMzLCAweDM5LCAweDlkLCAweGY3LCAweGQ4LCAweDUwLCAweDExLCAweDZmLAorCTB4ZGYsIDB4N2IsIDB4NzcsIDB4MTYsIDB4NGUsIDB4ZGEsIDB4NGYsIDB4NzEsIDB4OWMsIDB4MjUsIDB4ZmYsIDB4NjQsCisJMHhiYiwgMHgzMCwgMHhhNywgMHg3NCwgMHhhYSwgMHhkNCwgMHhhNCwgMHgwZCwgMHhmYSwgMHgwMywgMHg5OCwgMHgyZiwKKwkweGQwLCAweDhjLCAweDdiLCAweDVmLCAweDExLCAweGRmLCAweDc4LCAweGM3LCAweDAxLCAweDNhLCAweDgxLCAweGFlLAorCTB4MDksIDB4MWQsIDB4YjUsIDB4OGEsIDB4NzEsIDB4ZjIsIDB4MmIsIDB4OTIsIDB4NzMsIDB4ZmIsIDB4NGIsIDB4MDcsCisJMHg3MywgMHg1OCwgMHhmMywgMHhkNSwgMHgyZiwgMHgxYiwgMHg4MywgMHg3MywgMHg2MywgMHgwZSwgMHhiYywgMHgzZiwKKwkweDNlLCAweDQzLCAweGZhLCAweGU0LCAweGQ5LCAweDg0LCAweGQ1LCAweGQ0LCAweDJhLCAweGQ3LCAweDMzLCAweDIwLAorCTB4ZDMsIDB4MmIsIDB4ODMsIDB4MzIsIDB4ODcsIDB4ZGYsIDB4YzIsIDB4OGEsIDB4N2IsIDB4NmYsIDB4MWIsIDB4ZDAsCisJMHhhZCwgMHhhNywgMHgwYiwgMHg4NiwgMHhlNiwgMHhkNywgMHgzOSwgMHg5YiwgMHgzMSwgMHgxMywgMHhmMCwgMHg4YSwKKwkweGNlLCAweGE5LCAweDYyLCAweDVmLCAweGM2LCAweDg5LCAweDA2LCAweDI5LCAweDFmLCAweGVkLCAweDA2LCAweGU0LAorCTB4ZWEsIDB4NDYsIDB4OWQsIDB4N2EsIDB4MmEsIDB4ZWIsIDB4Y2QsIDB4NzgsIDB4ZDgsIDB4ZGYsIDB4MmQsIDB4MGIsCisJMHhjMCwgMHhiYiwgMHgwYSwgMHg2NCwgMHg2NywgMHhmZSwgMHhjZCwgMHg4MCwgMHhjYywgMHgxNSwgMHg3NCwgMHgzYywKKwkweDM5LCAweGZjLCAweDE3LCAweDY1LCAweDRiLCAweGFkLCAweDNlLCAweDIxLCAweGI3LCAweGViLCAweDUxLCAweGZkLAorCTB4OGQsIDB4NzIsIDB4MmQsIDB4ZmYsIDB4MGIsIDB4OWYsIDB4YmMsIDB4MzIsIDB4YTIsIDB4ZjMsIDB4ZWEsIDB4YTIsCisJMHgxNSwgMHg3OSwgMHhhYSwgMHg5ZiwgMHgzYSwgMHhjZiwgMHhiYSwgMHhjZSwgMHhiMSwgMHgwMywgMHg3NiwgMHg0MCwKKwkweGU3LCAweDc4LCAweDBmLCAweDNhLCAweGM3LCAweDZmLCAweGEwLCAweDczLCAweGZjLCAweGJhLCAweDA0LCAweDdjLAorCTB4MjksIDB4NjUsIDB4M2MsIDB4ZmMsIDB4OWYsIDB4MDEsIDB4MGUsIDB4NTEsIDB4NTYsIDB4OWIsIDB4ZTcsIDB4NzEsCisJMHhhNywgMHgzMywgMHgzOSwgMHhkMCwgMHhlMCwgMHg0NywgMHg5MiwgMHgwMSwgMHhkZSwgMHgyNiwgMHg2NSwgMHg3MywKKwkweDc1LCAweDVhLCAweGI2LCAweDU2LCAweGRkLCAweDNjLCAweGU1LCAweGZiLCAweGNjLCAweDAxLCAweDFiLCAweGUzLAorCTB4M2QsIDB4NDUsIDB4ODEsIDB4NDMsIDB4NDcsIDB4MjQsIDB4NzIsIDB4OWEsIDB4ZjgsIDB4ZDEsIDB4MjEsIDB4NmIsCisJMHhjNSwgMHhkZiwgMHg2OSwgMHgxYywgMHg1YSwgMHgyYiwgMHhiMiwgMHhlYywgMHgxNywgMHg5ZCwgMHg0ZiwgMHg3NiwKKwkweDZlLCAweDQ3LCAweDJhLCAweDc2LCAweDAzLCAweGY1LCAweGM3LCAweGI0LCAweDBmLCAweGM4LCAweGY1LCAweGM5LAorCTB4MTMsIDB4MmYsIDB4M2YsIDB4ZjcsIDB4ZWUsIDB4NWUsIDB4ZTksIDB4M2MsIDB4YmIsIDB4NTksIDB4YTMsIDB4MWIsCisJMHhlZCwgMHg5YSwgMHhkOCwgMHgzNSwgMHhlNCwgMHhjNiwgMHhiYywgMHhkNSwgMHhkZiwgMHhkMCwgMHgwNiwgMHg3MywKKwkweDk0LCAweGJhLCAweDY1LCAweDAzLCAweDMyLCAweGE0LCAweDExLCAweGVkLCAweGQ2LCAweGJhLCAweDVmLCAweDIzLAorCTB4M2EsIDB4YTgsIDB4NzMsIDB4NzcsIDB4MzksIDB4NGUsIDB4YmUsIDB4NjgsIDB4YzksIDB4N2MsIDB4ZDEsIDB4MGMsCisJMHhlNywgMHg0MCwgMHg3ZiwgMHhiNywgMHg2MSwgMHhhYiwgMHg2ZCwgMHhlMiwgMHgwZSwgMHhiNiwgMHg3MCwgMHgwNiwKKwkweGRiLCAweDc1LCAweGNhLCAweGY5LCAweDJmLCAweDM0LCAweGY2LCAweGFlLCAweGQ1LCAweDNmLCAweGMzLCAweDM4LAorCTB4ZTYsIDB4ZjksIDB4ODQsIDB4M2MsIDB4ZWUsIDB4MjMsIDB4MDYsIDB4ZDIsIDB4MWYsIDB4OTUsIDB4ZDIsIDB4ZmQsCisJMHhkZCwgMHg3ZSwgMHg5YiwgMHg2OCwgMHhiYiwgMHg1NSwgMHgyNywgMHgxZSwgMHg4YiwgMHg1YywgMHgyZCwgMHg1OCwKKwkweDkwLCAweDI1LCAweGJmLCAweDBhLCAweDUxLCAweDA3LCAweDI4LCAweGFiLCAweDY2LCAweDNmLCAweGM3LCAweDViLAorCTB4YjMsIDB4ZTMsIDB4MWMsIDB4YjUsIDB4YjgsIDB4YWUsIDB4YTgsIDB4ODcsIDB4ZGIsIDB4OTQsIDB4ZmQsIDB4M2IsCisJMHg1YSwgMHhlZSwgMHgxNywgMHg0YSwgMHgxNywgMHhlNCwgMHgxZCwgMHhkYywgMHhiNywgMHhhYiwgMHhlMywgMHg2NCwKKwkweGU1LCAweDE2LCAweDc0LCAweGJjLCAweDdhLCAweGE5LCAweDk5LCAweGQ3LCAweDNkLCAweDg5LCAweDczLCAweDMyLAorCTB4ZDUsIDB4ZmMsIDB4ZjIsIDB4NzUsIDB4YjksIDB4NzYsIDB4NjMsIDB4NTcsIDB4YmQsIDB4NzEsIDB4MjMsIDB4YTIsCisJMHhhZSwgMHgyZiwgMHgwZiwgMHhhOSwgMHhmYywgMHhiMiwgMHhlMywgMHhmYywgMHhkMywgMHg5ZSwgMHg5NSwgMHgzYiwKKwkweGFiLCAweDhlLCAweDljLCAweGI1LCAweDdkLCAweGZkLCAweDdlLCAweDY5LCAweGU2LCAweGQ2LCAweDM5LCAweDRlLAorCTB4MDcsIDB4YjAsIDB4NzksIDB4ZmIsIDB4YTQsIDB4ZTMsIDB4M2MsIDB4M2QsIDB4MzYsIDB4MjYsIDB4ZDEsIDB4OTMsCisJMHhkNCwgMHg1MSwgMHg5ZSwgMHgwYiwgMHgzMSwgMHgzZiwgMHg5NiwgMHg5OCwgMHg5MywgMHhiNCwgMHhhYywgMHhjYiwKKwkweDE1LCAweGE1LCAweDgwLCAweDZmLCAweGRkLCAweGFlLCAweGZlLCAweGYyLCAweGNjLCAweDMxLCAweDJmLCAweDU2LAorCTB4NzIsIDB4ZTcsIDB4MzUsIDB4ZmEsIDB4OTIsIDB4NDMsIDB4ZmYsIDB4ZTUsIDB4NGIsIDB4MzYsIDB4ZTQsIDB4NjIsCisJMHg3MSwgMHgwNCwgMHhmZCwgMHg4MywgMHhmMiwgMHhjMywgMHg2MiwgMHhlMCwgMHg1MCwgMHhkOSwgMHhjMCwgMHg3MywKKwkweDU0LCAweGU1LCAweDhiLCAweDhmLCAweDljLCAweDIxLCAweDFkLCAweDMzLCAweDgwLCAweDRlLCAweDYyLCAweDM4LAorCTB4Y2UsIDB4OWMsIDB4Y2QsIDB4ZjksIDB4YmEsIDB4MzEsIDB4ZGYsIDB4OGUsIDB4NzEsIDB4MGMsIDB4ZjIsIDB4ZmYsCisJMHhhYywgMHg5NiwgMHhjZiwgMHgxNywgMHgxNSwgMHg2YywgMHg1ZiwgMHhmMCwgMHg3NywgMHg1MCwgMHhkMiwgMHg0NSwKKwkweGM4LCAweDc4LCAweGM1LCAweDljLCAweDUzLCAweGVhLCAweDBhLCAweDY2LCAweDY4LCAweDBlLCAweGQ4LCAweDMxLAorCTB4MGIsIDB4YmMsIDB4NzksIDB4NDksIDB4YzcsIDB4NTYsIDB4NGYsIDB4NjgsIDB4ZWMsIDB4OTksIDB4NjcsIDB4MzksCisJMHgyYiwgMHg4OSwgMHg4YSwgMHhkZCwgMHhhMywgMHhjZiwgMHg2ZiwgMHhmNywgMHhmNiwgMHgyZiwgMHg0MywgMHhlZSwKKwkweDlkLCAweDgzLCAweDhmLCAweGIzLCAweDRhLCAweGRhLCAweDYwLCAweDAzLCAweGE1LCAweGQ2LCAweGNmLCAweDgxLAorCTB4MjcsIDB4NDIsIDB4MzgsIDB4ZGIsIDB4NTYsIDB4Y2QsIDB4MGYsIDB4MGQsIDB4YzgsIDB4ZWYsIDB4ODYsIDB4ZjYsCisJMHgyMywgMHhiYSwgMHhmMSwgMHg4YSwgMHg4NiwgMHhjMSwgMHg3NiwgMHgxNywgMHhkMCwgMHhhZiwgMHg1ZCwgMHg5MiwKKwkweGNiLCAweDZkLCAweDFhLCAweDU3LCAweDlmLCAweGFjLCAweDRiLCAweDQwLCAweDBmLCAweGY5LCAweDNlLCAweGNhLAorCTB4N2UsIDB4ZDQsIDB4ODUsIDB4YmQsIDB4YjIsIDB4MGYsIDB4ZTUsIDB4MTksIDB4OTQsIDB4NWIsIDB4ZjAsIDB4NjQsCisJMHg5YiwgMHg2MSwgMHhlOCwgMHgxNSwgMHg3OCwgMHhiZSwgMHg4ZCwgMHhmMSwgMHhjNiwgMHhiMCwgMHhlNiwgMHhhYywKKwkweDIxLCAweDFmLCAweDllLCAweGExLCAweDJjLCAweDE5LCAweDU1LCAweGNjLCAweDYzLCAweDllLCAweGIzLCAweGYwLAorCTB4YWMsIDB4MGQsIDB4YTksIDB4ZDQsIDB4MTIsIDB4Y2IsIDB4NzgsIDB4OTYsIDB4ZGQsIDB4ZWYsIDB4NGYsIDB4NjAsCisJMHgxMiwgMHhmYSwgMHgyNCwgMHg2ZiwgMHhiOCwgMHg5OCwgMHhmNCwgMHhlMSwgMHgxZSwgMHgyNiwgMHhiMSwgMHhhZSwKKwkweDVkLCAweGQyLCAweGNiLCAweGU0LCAweDc1LCAweDAzLCAweGY0LCAweGQ2LCAweDI5LCAweGE5LCAweDFiLCAweDQxLAorCTB4YWQsIDB4OGYsIDB4NTYsIDB4NDAsIDB4OGIsIDB4MWIsIDB4YTAsIDB4YWIsIDB4MzUsIDB4ZDAsIDB4NTQsIDB4YjIsCisJMHg2OCwgMHhjNiwgMHg2NywgMHg1NCwgMHg1OCwgMHhmYiwgMHgwMiwgMHg1ZSwgMHgwMCwgMHhiZCwgMHg3NiwgMHhiYywKKwkweDQ5LCAweDVkLCAweDk0LCAweGJjLCAweDFjLCAweDA1LCAweGVkLCAweDg5LCAweGQzLCAweDYxLCAweDU5LCAweDk5LAorCTB4YTgsIDB4YjIsIDB4NDAsIDB4ODMsIDB4YTAsIDB4Y2IsIDB4YTIsIDB4Y2IsIDB4ZDMsIDB4ZWYsIDB4MmIsIDB4OGQsCisJMHhhYiwgMHhmMSwgMHgwNywgMHgxMiwgMHg0YiwgMHgzYywgMHgxMCwgMHgxMywgMHg1OCwgMHg2MCwgMHhkYSwgMHgxZiwKKwkweDg4LCAweDhkLCAweDMxLCAweDI3LCAweGU0LCAweDI2LCAweGU2LCAweGYxLCAweDgxLCAweGJmLCAweDQ3LCAweDRlLAorCTB4NjksIDB4ZmUsIDB4OGUsIDB4OGIsIDB4ZmYsIDB4MzAsIDB4OGYsIDB4ODMsIDB4ZGUsIDB4ODAsIDB4NDEsIDB4MmUsCisJMHg0ZiwgMHgyNywgMHgzYywgMHgxYSwgMHhmZCwgMHgyNiwgMHhmOCwgMHhkNywgMHg4NCwgMHgyNSwgMHgxNiwgMHg5NCwKKwkweDA1LCAweGYwLCAweGZmLCAweDA2LCAweGJlLCAweGRmLCAweGFkLCAweDBmLCAweGFiLCAweGY5LCAweDI1LCAweGU1LAorCTB4ZTUsIDB4OTIsIDB4N2MsIDB4MDcsIDB4N2EsIDB4ZjIsIDB4NDMsIDB4OWMsIDB4NWQsIDB4OTcsIDB4ZDYsIDB4ZGQsCisJMHgyMywgMHg2MywgMHg4YywgMHg5ZiwgMHg2NSwgMHhkNCwgMHgzNSwgMHhlYiwgMHhiNCwgMHhlYywgMHg4ZSwgMHg0ZSwKKwkweGEwLCAweDdjLCAweDBjLCAweDRmLCAweDFmLCAweGNlLCAweDIxLCAweGEwLCAweGUzLCAweGRmLCAweDZiLCAweDA1LAorCTB4NWIsIDB4YjksIDB4ZmYsIDB4ZDMsIDB4MzAsIDB4OGUsIDB4YmUsIDB4YzQsIDB4YjIsIDB4OTMsIDB4ZjgsIDB4NGUsCisJMHg1ZiwgMHgwYywgMHhmNywgMHgwNiwgMHg5ZCwgMHg0OSwgMHg4NSwgMHg3NCwgMHhiZSwgMHg2OSwgMHgwNSwgMHhiYSwKKwkweGM0LCAweDNhLCAweGM2LCAweGJiLCAweDQ3LCAweDVmLCAweDVlLCAweDBkLCAweDNjLCAweDNjLCAweGZhLCAweDJmLAorCTB4MjcsIDB4MTEsIDB4NjQsIDB4NGUsIDB4ZmIsIDB4MTcsIDB4MjEsIDB4NTcsIDB4ZmUsIDB4N2QsIDB4ZWEsIDB4ZWMsCisJMHg1YSwgMHhmMywgMHg3MSwgMHgxZiwgMHg1ZSwgMHgzZSwgMHgzMiwgMHg4MiwgMHg2OCwgMHgwYiwgMHg1OSwgMHgwNiwKKwkweDU5LCAweDU0LCAweGQ2LCAweGY0LCAweGNiLCAweDc2LCAweDZlLCAweGRmLCAweDdjLCAweDJkLCAweDY2LCAweGRjLAorCTB4MTcsIDB4YjcsIDB4ZWYsIDB4ODIsIDB4NDUsIDB4YjksIDB4ZDMsIDB4MGUsIDB4N2MsIDB4MDksIDB4NmIsIDB4YmQsCisJMHhmMiwgMHg5ZSwgMHg5NSwgMHgwMywgMHgyYSwgMHg5OCwgMHhlMSwgMHgwYywgMHg2OCwgMHhiNCwgMHg0ZCwgMHhjYywKKwkweGU4LCAweDk0LCAweGVjLCAweGNmLCAweDNiLCAweGE3LCAweGZiLCAweGIyLCAweDZkLCAweGIzLCAweDZmLCAweDczLAorCTB4NWUsIDB4YWUsIDB4OWYsIDB4N2IsIDB4ZTEsIDB4MWUsIDB4ZTgsIDB4OWIsIDB4MzYsIDB4MzQsIDB4OGQsIDB4MzYsCisJMHg2YSwgMHgwMywgMHhmZCwgMHgyZSwgMHg4ZCwgMHgzNiwgMHhmNywgMHgxMSwgMHhmYywgMHgzZiwgMHhmYiwgMHgyMCwKKwkweDlkLCAweGQ4LCAweGNhLCAweDhkLCAweGQzLCAweGUzLCAweDU5LCAweGUzLCAweDc5LCAweDBlLCAweDgzLCAweDM2LAorCTB4MGUsIDB4ZDIsIDB4NGYsIDB4ZDMsIDB4YjcsIDB4ZTgsIDB4ZDIsIDB4Y2YsIDB4ZDMsIDB4N2IsIDB4ZjQsIDB4NDMsCisJMHhiYSwgMHhlOSwgMHg5NCwgMHhmNCwgMHgwZCwgMHg0YiwgMHhhNiwgMHg4YiwgMHhmYSwgMHhiZSwgMHhhMSwgMHg2YiwKKwkweGQyLCAweDY3LCAweDM0LCAweDAxLCAweGJhLCAweDIxLCAweGFkLCAweDkzLCAweGI3LCAweDBjLCAweDI5LCAweDgzLAorCTB4OGUsIDB4Y2EsIDB4YzAsIDB4YTcsIDB4MzIsIDB4NjgsIDB4YWEsIDB4MDIsIDB4N2MsIDB4MmIsIDB4MDMsIDB4ZGYsCisJMHhjYSwgMHg3NSwgMHgzMywgMHg1YSwgMHhjNSwgMHg5ZSwgMHgyOSwgMHhiMywgMHhkNywgMHg0MSwgMHg0NywgMHgxYiwKKwkweDc1LCAweGRlLCAweGJmLCAweDVlLCAweGIzLCAweDQxLCAweDM5LCAweDc4LCAweDc3LCAweGVmLCAweGVlLCAweGZmLAorCTB4ODEsIDB4YmIsIDB4MWYsIDB4OTQsIDB4ZGIsIDB4YjAsIDB4NWIsIDB4ZGUsIDB4MjksIDB4OGQsIDB4MDIsIDB4OTMsCisJMHgwNCwgMHgxOCwgMHg2NSwgMHg4MywgMHgzNiwgMHhlMiwgMHhiMiwgMHg1OSwgMHg5YSwgMHg5NCwgMHgyZCwgMHhjOCwKKwkweGE3LCAweGVkLCAweGQ1LCAweDA4LCAweGY0LCAweGU5LCAweDkwLCAweGNjLCAweGJmLCAweDM1LCAweDIyLCAweGI3LAorCTB4NTYsIDB4OTUsIDB4Y2MsIDB4ODIsIDB4N2UsIDB4ZjMsIDB4NmIsIDB4ZjQsIDB4YmIsIDB4ODMsIDB4OWUsIDB4Y2IsCisJMHg5ZCwgMHgzYSwgMHg0ZSwgMHg5ZiwgMHhhZSwgMHhiYSwgMHhmZSwgMHhmNywgMHhhOSwgMHg2YSwgMHg5NywgMHg0YywKKwkweDU3LCAweDBkLCAweDc5LCAweGJlLCAweGRhLCAweDIzLCAweDJmLCAweDU2LCAweDgzLCAweDcyLCAweDE2LCAweDc2LAorCTB4ZTAsIDB4ZDcsIDB4YWEsIDB4MDMsIDB4ZjIsIDB4NTIsIDB4NzUsIDB4NTAsIDB4YmUsIDB4NWUsIDB4MGIsIDB4Y2IsCisJMHgzNywgMHg2YSwgMHg5NiwgMHg2NCwgMHg2YiwgMHg1MSwgMHhjOSwgMHhkNCwgMHg0NiwgMHhlNSwgMHg4NSwgMHgxYSwKKwkweGZkLCAweGVhLCAweDk4LCAweDBmLCAweGJmLCAweGQ0LCAweDllLCAweGJmLCAweDgyLCAweGViLCAweGVhLCAweGMwLAorCTB4YmEsIDB4YTIsIDB4NmEsIDB4NGEsIDB4YzcsIDB4MjksIDB4MjUsIDB4ZWIsIDB4ZmEsIDB4M2MsIDB4NDQsIDB4MmUsCisJMHg2MSwgMHhhYywgMHhjNSwgMHhiNywgMHg5NCwgMHg1NCwgMHhmNCwgMHhmYywgMHhjZCwgMHhmZiwgMHgzMywgMHgwOSwKKwkweDY4LCAweGRiLCAweGU4LCAweDUyLCAweDc5LCAweDAwLCAweDZkLCAweDIwLCAweGY3LCAweDBhLCAweDRkLCAweGRmLAorCTB4NDcsIDB4ZDMsIDB4ZTcsIDB4ZGYsIDB4YjQsIDB4YmQsIDB4N2MsIDB4ZGEsIDB4NmYsIDB4N2QsIDB4OTcsIDB4YjYsCisJMHg5NywgMHgzZSwgMHg3YiwgMHhlMiwgMHgwNywgMHhlZCwgMHg5YywgMHg5YiwgMHhkYSwgMHg2ZiwgMHhiMiwgMHgxZiwKKwkweGRiLCAweDY4LCAweGNlLCAweGJiLCAweDk4LCAweDdkLCAweGYyLCAweGZmLCAweDU5LCAweGRjLCAweDE4LCAweGQ1LAorCTB4YzUsIDB4ZGEsIDB4MDAsIDB4ZmYsIDB4YWYsIDB4MDUsIDB4NmIsIDB4ZjksIDB4ZjIsIDB4ZGMsIDB4ZjEsIDB4ZTksCisJMHg1MiwgMHg1YSwgMHgzZCwgMHg1ZiwgMHhhMiwgMHg0NiwgMHhlMywgMHhjOCwgMHhlMiwgMHg1ZSwgMHg0ZSwgMHhkYywKKwkweDczLCAweGIyLCAweDY2LCAweDA3LCAweGY0LCAweDFhLCAweDVjLCAweDVmLCAweDdkLCAweDQyLCAweGU3LCAweGM3LAorCTB4YTUsIDB4NGYsIDB4OTEsIDB4ZmUsIDB4MTgsIDB4N2IsIDB4ZWIsIDB4ZjIsIDB4ZTIsIDB4MDksIDB4ZDAsIDB4NmQsCisJMHg2ZCwgMHg0MywgMHhhZSwgMHg1NiwgMHg1ZCwgMHg5ZiwgMHhkNSwgMHhiYywgMHhhNiwgMHg5NywgMHg3YiwgMHhhMCwKKwkweDM5LCAweGM2LCAweDFjLCAweGRjLCAweDY3LCAweGFlLCAweGVjLCAweGY2LCAweDRkLCAweGUxLCAweGRlLCAweDYwLAorCTB4OGYsIDB4NjMsIDB4YmYsIDB4YmUsIDB4MWUsIDB4Y2UsIDB4YzUsIDB4ZmYsIDB4ZTMsIDB4NDEsIDB4ZDksIDB4NWIsCisJMHgyZiwgMHg3MywgMHg4ZCwgMHgyZCwgMHg0ZCwgMHg4YiwgMHg2ZSwgMHg1YywgMHgzNywgMHgyYSwgMHhhZiwgMHhlMiwKKwkweGZjLCAweDJhLCAweDA2LCAweGQ3LCAweGRmLCAweDIxLCAweDk1LCAweDI4LCAweDZkLCAweDViLCAweGUyLCAweGY3LAorCTB4MjksIDB4MjksIDB4NjMsIDB4OWUsIDB4NGEsIDB4YjQsIDB4ZTksIDB4MGYsIDB4NzMsIDB4NzEsIDB4YjYsIDB4NjIsCisJMHhlYywgMHhjZiwgMHgzYiwgMHg1MywgMHgzZSwgMHg4ZSwgMHg3NywgMHhkNCwgMHg0NSwgMHhhMSwgMHgzMywgMHg5ZCwKKwkweGUzLCAweGZiLCAweDIyLCAweGNhLCAweGY0LCAweDhkLCAweGNjLCAweGUzLCAweDE5LCAweGYyLCAweGVhLCAweGRlLAorCTB4ZWIsIDB4ZDcsIDB4YmEsIDB4ZmEsIDB4ZTQsIDB4N2UsIDB4YmYsIDB4ZDksIDB4YjIsIDB4OTksIDB4NGIsIDB4ZmEsCisJMHg2MywgMHhjYSwgMHhmNywgMHhmMywgMHhkZiwgMHhmNywgMHgxMywgMHg3MywgMHg4ZiwgMHg1YiwgMHhmYywgMHgwNSwKKwkweGU0LCAweDMzLCAweDQzLCAweGZiLCAweDE0LCAweGJjLCAweDZmLCAweDQ3LCAweGU0LCAweDY1LCAweDgzLCAweDc5LAorCTB4ZWMsIDB4MDksIDB4OTUsIDB4MmUsIDB4NWQsIDB4ZjcsIDB4NzIsIDB4N2MsIDB4NjMsIDB4ZWEsIDB4NzgsIDB4ZTUsCisJMHg3ZSwgMHhiZiwgMHg5YiwgMHhmMywgMHhjZSwgMHhiMSwgMHgwZiwgMHhlNiwgMHhiOSwgMHgxZiwgMHhhNCwgMHgxMywKKwkweGU2LCAweGJiLCAweGI3LCAweGVmLCAweGZkLCAweDBmLCAweDU1LCAweGE1LCAweDAwLCAweGJjLCAweGIzLCAweDVhLAorCTB4MzQsIDB4M2YsIDB4ZTYsIDB4NmIsIDB4ZmYsIDB4NzYsIDB4NzYsIDB4MzQsIDB4M2YsIDB4MzcsIDB4N2QsIDB4MGMsCisJMHg3ZiwgMHhlZSwgMHhhNywgMHg2ZCwgMHg0YiwgMHhkYywgMHhiOCwgMHhlYSwgMHhlNiwgMHg4ZSwgMHg2YSwgMHgxYiwKKwkweDFhLCAweDU4LCAweDgxLCAweDNhLCAweGYyLCAweDJhLCAweGY4LCAweDY0LCAweGFmLCAweDJkLCAweGZmLCAweGZlLAorCTB4MDMsIDB4OWEsIDB4YjgsIDB4OGEsIDB4NmMsIDB4OGMsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MDAgfTsKIAogc3RhdGljIGNvbnN0IHUzMiBibngyX1JYUF9iMDlGd0RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9SWFBfYjA5RndSb2RhdGFbKDB4Mjc4LzQpICsgMV0gPSB7Ci0JMHgwODAwNDA1MCwgMHgwODAwM2Y1MCwgMHgwODAwM2ZmNCwgMHgwODAwNDAwYywgMHgwODAwNDAyNCwgMHgwODAwNDA0NCwKLQkweDA4MDA0MDUwLCAweDA4MDA0MDUwLCAweDA4MDAzZjU4LCAweDAwMDAwMDAwLCAweDA4MDA0YTBjLCAweDA4MDA0YTQ0LAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRhN2MsIDB4MDgwMDRjNDAsCi0JMHgwODAwNGI4OCwgMHgwODAwNGJjMCwgMHgwODAwNGM0MCwgMHgwODAwNGIxMCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwKLQkweDA4MDA0YmMwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjMDAsCi0JMHgwODAwNGM0MCwgMHgwODAwNGMwMCwgMHgwODAwNGI4OCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGMwMCwKLQkweDA4MDA0YzAwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsCi0JMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwKLQkweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsCi0JMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwKLQkweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsCi0JMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwKLQkweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsCi0JMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwKLQkweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsIDB4MDgwMDRjNDAsCi0JMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwgMHgwODAwNGM0MCwKLQkweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLCAweDA4MDA0YzQwLAotCTB4MDgwMDRhZWMsIDB4MDAwMDAwMDAsIDB4MDgwMDYwNTgsIDB4MDgwMDYwNzAsIDB4MDgwMDYwNzAsIDB4MDgwMDYwNzAsCi0JMHgwODAwNjA1OCwgMHgwODAwNjA3MCwgMHgwODAwNjA3MCwgMHgwODAwNjA3MCwgMHgwODAwNjA1OCwgMHgwODAwNjA3MCwKLQkweDA4MDA2MDcwLCAweDA4MDA2MDcwLCAweDA4MDA2MDU4LCAweDA4MDA2MDcwLCAweDA4MDA2MDcwLCAweDA4MDA2MDcwLAotCTB4MDgwMDYwNjQsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAgfTsKKwkweDA4MDA0MDcwLCAweDA4MDAzZjcwLCAweDA4MDA0MDE0LCAweDA4MDA0MDJjLCAweDA4MDA0MDQ0LCAweDA4MDA0MDY0LAorCTB4MDgwMDQwNzAsIDB4MDgwMDQwNzAsIDB4MDgwMDNmNzgsIDB4MDAwMDAwMDAsIDB4MDgwMDRhMmMsIDB4MDgwMDRhNjQsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGE5YywgMHgwODAwNGM2MCwKKwkweDA4MDA0YmE4LCAweDA4MDA0YmUwLCAweDA4MDA0YzYwLCAweDA4MDA0YjMwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLAorCTB4MDgwMDRiZTAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGMyMCwKKwkweDA4MDA0YzYwLCAweDA4MDA0YzIwLCAweDA4MDA0YmE4LCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzIwLAorCTB4MDgwMDRjMjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwKKwkweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLAorCTB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwKKwkweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLAorCTB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwKKwkweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLAorCTB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwKKwkweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLAorCTB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwgMHgwODAwNGM2MCwKKwkweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLCAweDA4MDA0YzYwLAorCTB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsIDB4MDgwMDRjNjAsCisJMHgwODAwNGIwYywgMHgwMDAwMDAwMCwgMHgwODAwNjA3OCwgMHgwODAwNjA5MCwgMHgwODAwNjA5MCwgMHgwODAwNjA5MCwKKwkweDA4MDA2MDc4LCAweDA4MDA2MDkwLCAweDA4MDA2MDkwLCAweDA4MDA2MDkwLCAweDA4MDA2MDc4LCAweDA4MDA2MDkwLAorCTB4MDgwMDYwOTAsIDB4MDgwMDYwOTAsIDB4MDgwMDYwNzgsIDB4MDgwMDYwOTAsIDB4MDgwMDYwOTAsIDB4MDgwMDYwOTAsCisJMHgwODAwNjA4NCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9OwogCiBzdGF0aWMgc3RydWN0IGZ3X2luZm8gYm54Ml9yeHBfZndfMDkgPSB7CisJLyogRmlybXdhcmUgdmVyc2lvbjogIDMuNy4xICovCiAJLnZlcl9tYWpvcgkJCT0gMHgzLAotCS52ZXJfbWlub3IJCQk9IDB4NCwKLQkudmVyX2ZpeAkJCT0gMHgzLAorCS52ZXJfbWlub3IJCQk9IDB4NywKKwkudmVyX2ZpeAkJCT0gMHgxLAogCiAJLnN0YXJ0X2FkZHIJCQk9IDB4MDgwMDMxODQsCiAKIAkudGV4dF9hZGRyCQkJPSAweDA4MDAwMDAwLAotCS50ZXh0X2xlbgkJCT0gMHg2NzY4LAorCS50ZXh0X2xlbgkJCT0gMHg2Nzg4LAogCS50ZXh0X2luZGV4CQkJPSAweDAsCiAJLmd6X3RleHQJCQk9IGJueDJfUlhQX2IwOUZ3VGV4dCwKIAkuZ3pfdGV4dF9sZW4JCQk9IHNpemVvZihibngyX1JYUF9iMDlGd1RleHQpLAogCi0JLmRhdGFfYWRkcgkJCT0gMHgwODAwNmEwMCwKKwkuZGF0YV9hZGRyCQkJPSAweDA4MDA2YTIwLAogCS5kYXRhX2xlbgkJCT0gMHgwLAogCS5kYXRhX2luZGV4CQkJPSAweDAsCiAJLmRhdGEJCQkJPSBibngyX1JYUF9iMDlGd0RhdGEsCiAKLQkuc2Jzc19hZGRyCQkJPSAweDA4MDA2YTAwLAorCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDZhMjAsCiAJLnNic3NfbGVuCQkJPSAweDIwLAogCS5zYnNzX2luZGV4CQkJPSAweDAsCiAKLQkuYnNzX2FkZHIJCQk9IDB4MDgwMDZhMjAsCisJLmJzc19hZGRyCQkJPSAweDA4MDA2YTQwLAogCS5ic3NfbGVuCQkJPSAweDEzZGMsCiAJLmJzc19pbmRleAkJCT0gMHgwLAogCi0JLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA2NzY4LAorCS5yb2RhdGFfYWRkcgkJCT0gMHgwODAwNjc4OCwKIAkucm9kYXRhX2xlbgkJCT0gMHgyNzgsCiAJLnJvZGF0YV9pbmRleAkJCT0gMHgwLAogCS5yb2RhdGEJCQkJPSBibngyX1JYUF9iMDlGd1JvZGF0YSwKIH07CiAKIHN0YXRpYyB1OCBibngyX1RQQVRfYjA5RndUZXh0W10gPSB7Ci0vKgkweDFmLCAweDhiLCAweDA4LCAweDAwLCAweDBlLCAweDM0LCAweGU3LCAweDQ1LCAweDAwLCAweDAzLCAqLwotCQkJCQkJCQkgICAgMHhjZCwgMHg1OCwKLQkweDVkLCAweDY4LCAweDFjLCAweGQ3LCAweDE1LCAweDNlLCAweGYzLCAweGI3LCAweDNiLCAweDUyLCAweDI0LCAweGViLAotCTB4NWEsIDB4ZDksIDB4YTYsIDB4ZWIsIDB4YTAsIDB4MzQsIDB4MzMsIDB4ZGEsIDB4OTEsIDB4YWMsIDB4MjIsIDB4MTMsCi0JMHg0ZiwgMHg5ZCwgMHgyNSwgMHgxNiwgMHg2NSwgMHgyMSwgMHg5MywgMHhkOSwgMHg5MSwgMHhhYywgMHg5OCwgMHgzYywKLQkweDI4LCAweGM1LCAweDkwLCAweDg3LCAweDUyLCAweDUwLCAweDU3LCAweDMyLCAweDA5LCAweDc5LCAweDY5LCAweGRhLAotCTB4YzYsIDB4OTAsIDB4M2UsIDB4NzksIDB4M2IsIDB4MmIsIDB4YzcsIDB4MGUsIDB4NmMsIDB4YmMsIDB4OGQsIDB4NTIsCi0JMHhlNCwgMHg1MiwgMHhmYSwgMHg2MCwgMHhkNiwgMHhiMSwgMHgwNSwgMHhjZCwgMHg0NiwgMHg5MywgMHhkNCwgMHg3ZSwKLQkweDM1LCAweDM2LCAweDRlLCAweDkzLCAweGE3LCAweDQyLCAweDlmLCAweDUyLCAweGY0LCAweDE4LCAweGQyLCAweDEyLAotCTB4ZGEsIDB4NTIsIDB4OGEsIDB4NjksIDB4YTEsIDB4MDksIDB4OGQsIDB4ZWIsIDB4ZGIsIDB4ZWYsIDB4ZGMsIDB4OTksCi0JMHg5MSwgMHg1NywgMHhiNiwgMHhlYywgMHhhNCwgMHgyNSwgMHg4NSwgMHgwYSwgMHg1NiwgMHg3NywgMHhlNiwgMHhjZSwKLQkweDNkLCAweGU3LCAweDllLCAweDdiLCAweGVlLCAweDc3LCAweGJlLCAweDczLCAweGVlLCAweDJkLCAweGViLCAweDM0LAotCTB4NDgsIDB4ZDksIDB4ZGYsIDB4MzAsIDB4N2UsIDB4MmYsIDB4N2UsIDB4ZjcsIDB4ODUsIDB4MTcsIDB4YWIsIDB4OGYsCi0JMHgzYywgMHhlYSwgMHgxMCwgMHgzZCwgMHhmYSwgMHg4OCwgMHg2NiwgMHg5OCwgMHgwNiwgMHg3ZCwgMHgwOSwgMHg3ZiwKLQkweDUwLCAweDIyLCAweDcyLCAweGZkLCAweGZjLCAweDIzLCAweDViLCAweGFmLCAweDlkLCAweDcyLCAweDQyLCAweDhmLAotCTB4NmMsIDB4YTMsIDB4MjYsIDB4YmUsIDB4YmUsIDB4ZTQsIDB4MTEsIDB4MDUsIDB4YmQsIDB4NjksIDB4YTcsIDB4NGUsCi0JMHhmZiwgMHg5MiwgMHhjZCwgMHg5MiwgMHg0OSwgMHhkYywgMHhmZiwgMHg1MCwgMHhlZCwgMHhjNiwgMHhmZSwgMHhjYiwKLQkweDA3LCAweGRkLCAweGViLCAweDY3LCAweDBkLCAweGIyLCAweDQ1LCAweDZkLCAweGQxLCAweDE2LCAweDkzLCAweDY0LAotCTB4OGYsIDB4ZDUsIDB4OWEsIDB4Y2UsIDB4MmYsIDB4ZjYsIDB4MWUsIDB4MjgsIDB4ZDAsIDB4YWUsIDB4NWMsIDB4OTcsCi0JMHhhMCwgMHhiOCwgMHg0MywgMHg0ZCwgMHhhYiwgMHg2NiwgMHg1MywgMHhkNCwgMHg3ZSwgMHg0OSwgMHgwYiwgMHgzYiwKLQkweDllLCAweDk4LCAweDg1LCAweDhlLCAweGEwLCAweDA0LCAweGZkLCAweDFlLCAweGRlLCAweDEzLCAweDUzLCAweDhiLAotCTB4Y2UsIDB4ZDgsIDB4YTQsIDB4ZDcsIDB4MDIsIDB4M2MsIDB4NGYsIDB4NTEsIDB4YWIsIDB4MjMsIDB4ZTUsIDB4MmIsCi0JMHhiZSwgMHg0NiwgMHg0YiwgMHhiZSwgMHg0ZCwgMHg4YiwgMHhjMiwgMHgwZCwgMHgxYywgMHhlZCwgMHhhNiwgMHhhYywKLQkweDRjLCAweDQ4LCAweGY5LCAweDljLCAweGFmLCAweDkzLCAweGVlLCAweGNkLCAweDY5LCAweGUxLCAweGZhLCAweGJjLAotCTB4NTYsIDB4NWYsIDB4OWYsIDB4NjcsIDB4N2YsIDB4YzAsIDB4YmUsIDB4MzksIDB4MmQsIDB4NTgsIDB4ZTcsIDB4YjYsCi0JMHg2NiwgMHhkNywgMHhkYiwgMHhiYiwgMHg2OCwgMHhiMSwgMHg0NCwgMHgyMywgMHhiYSwgMHgzNywgMHg4NSwgMHhmOSwKLQkweDRhLCAweGQwLCAweGUzLCAweDUwLCAweGU4LCAweDRmLCAweDBiLCAweDlkLCAweDJhLCAweGY4LCAweDBkLCAweGQwLAotCTB4YWMsIDB4NGYsIDB4MDMsIDB4YmEsIDB4YTcsIDB4NTMsIDB4YTMsIDB4YTQsIDB4ZDEsIDB4MWIsIDB4NTUsIDB4MGIsCi0JMHhiZiwgMHhjMywgMHg1YSwgMHhiNCwgMHhmZSwgMHg3YywgMHhhNiwgMHg4NywgMHhjNywgMHhkYiwgMHhmOCwgMHhjNiwKLQkweDM2LCAweGIzLCAweDdjLCAweGJmLCAweGVjLCAweDMwLCAweDllLCAweDlmLCAweGMzLCAweDM4LCAweDhiLCAweGMyLAotCTB4ZWEsIDB4ZWQsIDB4ZGYsIDB4MDYsIDB4ZjAsIDB4YWMsIDB4YTEsIDB4ZmYsIDB4MzAsIDB4ZWMsIDB4NjIsIDB4M2QsCi0JMHgwZSwgMHhlYywgMHgyOCwgMHhkMywgMHg0YSwgMHg2NywgMHgxZSwgMHhlYiwgMHgyOSwgMHg1MCwgMHg1MywgMHg0YywKLQkweDRjLCAweDM1LCAweGM4LCAweDg0LCAweDhjLCAweDQxLCAweDQxLCAweGU5LCAweDhhLCAweGQ0LCAweDZiLCAweDUyLAotCTB4ODYsIDB4NTUsIDB4NmYsIDB4YWEsIDB4YWIsIDB4ZTYsIDB4ZDAsIDB4YzksIDB4ZjAsIDB4MGEsIDB4MTQsIDB4ZjksCi0JMHhjMywgMHhkNCwgMHgxMiwgMHgwNiwgMHhjNSwgMHhmYiwgMHgyYywgMHgwYSwgMHgxNiwgMHg0YywgMHhhYywgMHg3MSwKLQkweDE0LCAweDcyLCAweDFhLCAweGU0LCAweDVmLCAweGNiLCAweGY2LCAweGJjLCAweDQ4LCAweGIxLCAweDI4LCAweGEwLAotCTB4N2YsIDB4ODQsIDB4ZTIsIDB4ZDIsIDB4NmUsIDB4NGQsIDB4YWYsIDB4YmQsIDB4ODIsIDB4ZmUsIDB4MDksIDB4ZDEsCi0JMHhhNSwgMHg1MywgMHg2OCwgMHgzNSwgMHhiYywgMHhlZiwgMHhjNiwgMHg1OCwgMHg3ZSwgMHhkNywgMHhhMCwgMHg4ZiwKLQkweDQ0LCAweDk4LCAweDc4LCAweGQ0LCAweDRhLCAweDcyLCAweDU5LCAweGVlLCAweDRmLCAweGZiLCAweDlhLCAweGM5LAotCTB4ZWQsIDB4ZmIsIDB4ZWQsIDB4YzEsIDB4NGUsIDB4NDEsIDB4MjcsIDB4M2EsIDB4YjMsIDB4OTgsIDB4OGYsIDB4OWEsCi0JMHg0NiwgMHgwZCwgMHhlMywgMHhiMCwgMHgzNywgMHhiYywgMHhiZiwgMHg4MSwgMHhjMiwgMHhjMSwgMHhlMywgMHhkYywKLQkweGNmLCAweDdmLCAweGU4LCAweDc3LCAweGM4LCAweGE4LCAweGYxLCAweGI3LCAweDZmLCAweDUyLCAweGZhLCAweDJkLAotCTB4YjUsIDB4M2YsIDB4ZjQsIDB4MWYsIDB4Y2IsIDB4ZGUsIDB4NGIsIDB4MjIsIDB4M2MsIDB4ZjMsIDB4MjgsIDB4ZDYsCi0JMHhhOCwgMHg2MCwgMHg4MywgMHhlNywgMHgwMiwgMHhmMCwgMHgxMSwgMHhjZiwgMHhlOCwgMHhkNCwgMHgyYywgMHgxNywKLQkweGM5LCAweGY1LCAweDhmLCAweGEyLCAweGY3LCAweGQ3LCAweDZkLCAweDgzLCAweGVhLCAweGVjLCAweDJiLCAweGRmLAotCTB4Y2MsIDB4NjQsIDB4MTgsIDB4MWIsIDB4MWYsIDB4NjQsIDB4NzYsIDB4MGEsIDB4NWEsIDB4M2MsIDB4MjIsIDB4ZTUsCi0JMHg4YSwgMHgyZiwgMHhhNSwgMHg1NSwgMHhmMywgMHg5YywgMHgxMywgMHgzNCwgMHg1ZCwgMHgzNiwgMHg2OSwgMHg1MiwKLQkweGEwLCAweDg1LCAweDhmLCAweGJkLCAweDcyLCAweDgzLCAweDJjLCAweDYwLCAweGExLCAweDFmLCAweGZmLCAweGZjLAotCTB4ZjcsIDB4YTYsIDB4ODYsIDB4MjUsIDB4ZDAsIDB4YjUsIDB4MzYsIDB4ZWIsIDB4OTgsIDB4NzAsIDB4NjYsIDB4OTUsCi0JMHg4YywgMHg5NCwgMHhmMSwgMHhjYywgMHhiZCwgMHg2NCwgMHgyZSwgMHg2NSwgMHgzMiwgMHg1MiwgMHg0NiwgMHg1NSwKLQkweDgxLCAweDNkLCAweDZmLCAweDBhLCAweGQ4LCAweDg3LCAweDc1LCAweDMxLCAweGM2LCAweDg5LCAweGEyLCAweDllLAotCTB4NmYsIDB4MzcsIDB4ZGEsIDB4YjAsIDB4ZDEsIDB4NDMsIDB4ZGIsIDB4MTMsIDB4ZjAsIDB4MGYsIDB4NTEsIDB4MGIsCi0JMHg2MywgMHhmNSwgMHhlYSwgMHg3ZCwgMHg4YywgMHgwZCwgMHhlYywgMHhlZiwgMHg4MiwgMHgxZCwgMHhiNSwgMHhkZCwKLQkweGYyLCAweDI5LCAweDVhLCAweGIwLCAweGViLCAweGJkLCAweGU5LCAweGYyLCAweDMyLCAweDNkLCAweGM0LCAweDczLAotCTB4ZDgsIDB4NTYsIDB4ZWQsIDB4ODgsIDB4ZGQsIDB4NTUsIDB4NzIsIDB4ODgsIDB4YzQsIDB4NDEsIDB4M2MsIDB4ZjcsCi0JMHg4OCwgMHhlMiwgMHgzNiwgMHg2OSwgMHhhMSwgMHg3ZiwgMHgxZiwgMHhhZiwgMHgxNSwgMHg3MiwgMHhmMywgMHg5OSwKLQkweGRjLCAweDdjLCAweDI2LCAweDM3LCAweDkyLCAweGM5LCAweDNkLCAweGQ1LCAweDI3LCAweGY3LCAweDE0LCAweGNiLAotCTB4NjEsIDB4NmMsIDB4OTAsIDB4OGQsIDB4MGQsIDB4YjIsIDB4YjEsIDB4NjYsIDB4MzYsIDB4MzYsIDB4Y2EsIDB4YzYsCi0JMHhhMiwgMHhlZCwgMHg4ZCwgMHhjMSwgMHgzNiwgMHg3NywgMHhjYSwgMHhkMSwgMHg2YywgMHg4YSwgMHgzZCwgMHhmOSwKLQkweDcwLCAweGU4LCAweDUzLCAweDUwLCAweGY3LCAweGRjLCAweGNkLCAweGJhLCAweDMxLCAweDQyLCAweGU3LCAweGZjLAotCTB4MjEsIDB4NWEsIDB4NDksIDB4YzYsIDB4MjgsIDB4NGUsIDB4NTYsIDB4MjgsIDB4NGMsIDB4NzQsIDB4YzgsIDB4OGUsCi0JMHg1MCwgMHhkNywgMHhiYiwgMHgyZSwgMHg2NywgMHg3ZCwgMHgxZiwgMHg3YiwgMHg2NiwgMHhiMywgMHg1YywgMHg3OSwKLQkweDk2LCAweDFjLCAweDdjLCAweDlmLCAweDE2LCAweGNiLCAweGU0LCAweDAzLCAweDJiLCAweDNhLCAweGY2LCAweGFkLAotCTB4YTIsIDB4OWUsIDB4ZTMsIDB4YzQsIDB4ZTcsIDB4MzUsIDB4MzcsIDB4ZjUsIDB4YWEsIDB4MmIsIDB4NjIsIDB4NzIsCi0JMHhjYiwgMHhhMSwgMHg0MSwgMHg0MiwgMHhhZiwgMHhjMSwgMHg0ZiwgMHg0OSwgMHg5MywgMHhhMiwgMHhjNCwgMHhhNiwKLQkweDBmLCAweDhkLCAweDk3LCAweDU0LCAweDhjLCAweGM2LCAweDlkLCAweDRkLCAweDc5LCAweDc5LCAweGFmLCAweDQzLAotCTB4NTcsIDB4MzAsIDB4Y2YsIDB4YzUsIDB4YTQsIDB4NGMsIDB4YmYsIDB4NGEsIDB4NGEsIDB4ZjQsIDB4NGUsIDB4NDIsCi0JMHg3YSwgMHhlOCwgMHgwMywgMHhjMywgMHgyNSwgMHg0MSwgMHg2ZiwgMHgyNywgMHhmZCwgMHgzZSwgMHhmZiwgMHg4OCwKLQkweDdkLCAweDZlLCAweGRmLCAweDVmLCAweDIzLCAweDdiLCAweGI0LCAweGM2LCAweDM4LCAweDRiLCAweDM5LCAweGEwLAotCTB4OWUsIDB4NzIsIDB4ODAsIDB4YzIsIDB4NTIsIDB4YWIsIDB4MTMsIDB4M2YsIDB4NjgsIDB4ODAsIDB4N2YsIDB4OTYsCi0JMHhmYywgMHg2MCwgMHhiNywgMHhhMSwgMHhmNiwgMHhhMywgMHg4OSwgMHgzZCwgMHhjYywgMHg1YiwgMHhkZSwgMHg5YiwKLQkweGFiLCAweGNlLCAweDkyLCAweGU3LCAweDllLCAweGFhLCAweDMzLCAweDZhLCAweDRmLCAweDViLCAweDM5LCAweDJlLAotCTB4ZmIsIDB4ZTYsIDB4ZjgsIDB4MzMsIDB4ZTYsIDB4MTgsIDB4YTIsIDB4MDYsIDB4ZTIsIDB4ZWMsIDB4MDksIDB4MTMsCi0JMHhiMSwgMHhlMywgMHhmZCwgMHhkZCwgMHg2MCwgMHg1YywgMHgzOSwgMHgxYiwgMHg4YywgMHg2ZiwgMHhhMiwgMHhmMSwKLQkweDBkLCAweDliLCAweGQ2LCAweGRiLCAweDQ1LCAweDcyLCAweGJhLCAweDQzLCAweGI0LCAweGQ0LCAweDE5LCAweGE0LAotCTB4Y2EsIDB4MDUsIDB4MTMsIDB4NjMsIDB4ZWYsIDB4YTMsIDB4Y2EsIDB4YWEsIDB4NWUsIDB4ZTIsIDB4MzgsIDB4YWUsCi0JMHhjMywgMHhjNywgMHhlMywgMHg1ZCwgMHgwOSwgMHg3YywgMHgwZSwgMHhkMiwgMHhmOCwgMHg5YSwgMHhhYiwgMHhiMCwKLQkweGIzLCAweGU0LCAweGI1LCAweDdjLCAweDgzLCAweDdlLCAweDRjLCAweGQ3LCAweGY2LCAweDE1LCAweGIwLCAweGE2LAotCTB4MTIsIDB4ZjksIDB4OTMsIDB4ZmQsIDB4ZjMsIDB4ZTksIDB4ODAsIDB4MTgsIDB4ZjcsIDB4YzUsIDB4NDUsIDB4ZGEsCi0JMHhlNSwgMHgzYSwgMHhhNCwgMHhiMywgMHgzZSwgMHg5YiwgMHhjNiwgMHgyZiwgMHhkOCwgMHg1YSwgMHhiZCwgMHhjMywKLQkweDNlLCAweDYzLCAweGZjLCAweGQ5LCAweDE5LCAweGZlLCAweDRjLCAweDJkLCAweDNjLCAweDUzLCAweGM0LCAweDVjLAotCTB4N2YsIDB4OTEsIDB4YTEsIDB4MjcsIDB4YjEsIDB4MGYsIDB4M2EsIDB4MmQsIDB4NTUsIDB4N2YsIDB4MDQsIDB4ZmIsCi0JMHhkMCwgMHhkNywgMHhlNSwgMHg2ZiwgMHhkNywgMHhiMywgMHg3ZSwgMHhkNiwgMHgwMSwgMHg3ZSwgMHhmMCwgMHhlZiwKLQkweGE3LCAweDkwLCAweGI5LCAweGUwLCAweDA4LCAweGNiLCAweDE0LCAweDY5LCAweDdjLCAweDk1LCAweGY5LCAweDA1LAotCTB4NmQsIDB4OTcsIDB4ZGYsIDB4NzksIDB4NmQsIDB4MDMsIDB4ZDQsIDB4ODAsIDB4NTcsIDB4MWEsIDB4NTMsIDB4MjUsCi0JMHhkOCwgMHhhNSwgMHgyYiwgMHhiZSwgMHg2OCwgMHg4MCwgMHgzZiwgMHg3NCwgMHg2ZiwgMHgxMCwgMHgyZCwgMHhjZiwKLQkweGY3LCAweDczLCAweDIzLCAweDhmLCAweGE5LCAweGI4LCAweDMzLCAweDQ0LCAweDc1LCAweGUwLCAweGQ3LCAweDg0LAotCTB4M2QsIDB4Y2IsIDB4MzQsIDB4NTEsIDB4M2UsIDB4YWEsIDB4YmUsIDB4YTEsIDB4YWYsIDB4YzcsIDB4ZGYsIDB4YzQsCi0JMHg2ZCwgMHhkZiwgMHhmMCwgMHhkZSwgMHhjYiwgMHg2ZCwgMHg0MCwgMHg2YywgMHg3YiwgMHgyZCwgMHhjYywgMHg2MiwKLQkweDY1LCAweDdlLCAweGUxLCAweGYxLCAweGNkLCAweDMyLCAweGY2LCAweDA2LCAweDdjLCAweDQ2LCAweGYwLCAweDI1LAotCTB4NTEsIDB4YjcsIDB4NmQsIDB4ODIsIDB4NmYsIDB4ZjQsIDB4YWYsIDB4ZWEsIDB4MmMsIDB4NTcsIDB4NjIsIDB4M2QsCi0JMHg1OCwgMHhmZiwgMHg5YSwgMHhhOSwgMHhkNSwgMHhjZiwgMHg3OCwgMHhjZSwgMHgxZiwgMHg4OCwgMHhlNSwgMHgyYiwKLQkweGYwLCAweGMxLCAweGM0LCAweDRjLCAweDhiLCAweGM3LCAweGY3LCAweDJjLCAweGYyLCAweDU2LCAweDliLCAweGMyLAotCTB4YzQsIDB4OWUsIDB4YzIsIDB4NzMsIDB4NTQsIDB4ZmYsIDB4YzksIDB4MDgsIDB4ZjYsIDB4ZGEsIDB4NzUsIDB4NWEsCi0JMHhmNCwgMHg1YiwgMHhkOCwgMHg1MywgMHgyMCwgMHhhZiwgMHg2YiwgMHhkMiwgMHgxYiwgMHg2ZCwgMHhmNiwgMHg4NSwKLQkweDRkLCAweDk1LCAweDM1LCAweDI5LCAweDRmLCAweGZhLCAweGJjLCAweDI3LCAweGJmLCAweDgzLCAweDVmLCAweDA4LAotCTB4MmIsIDB4OWMsIDB4OTgsIDB4ZjksIDB4MDgsIDB4ZmIsIDB4YjMsIDB4ZGUsIDB4ZTMsIDB4YmQsIDB4YjEsIDB4OTQsCi0JMHg0ZiwgMHhiYywgMHhkNSwgMHgyOSwgMHhlYywgMHhlYiwgMHg1NCwgMHg2NiwgMHgyMywgMHhlZiwgMHg5NywgMHg0OSwKLQkweDJiLCAweDU1LCAweDlkLCAweGNlLCAweDU3LCAweDNmLCAweDkzLCAweGJhLCAweGM3LCAweGZjLCAweDVhLCAweDgwLAotCTB4NmYsIDB4MzEsIDB4YWUsIDB4OGIsIDB4NzEsIDB4NDksIDB4MDEsIDB4M2UsIDB4ZmMsIDB4MDcsIDB4NzgsIDB4NDUsCi0JMHhjYSwgMHhmMywgMHg1NSwgMHhmNCwgMHhhZiwgMHgxZSwgMHg4NywgMHhhZCwgMHgwNiwgMHg2NCwgMHg1MywgMHg4YywKLQkweGIxLCAweDNkLCAweDczLCAweGVkLCAweDdjLCAweDdkLCAweGRlLCAweGNjLCAweDdiLCAweDRhLCAweGRmLCAweDEwLAotCTB4NGQsIDB4NmUsIDB4MGMsIDB4ZDEsIDB4YjMsIDB4YmQsIDB4MjEsIDB4MWEsIDB4M2YsIDB4Y2QsIDB4MzIsIDB4ZTAsCi0JMHhhNiwgMHhhYSwgMHgyNywgMHgyMiwgMHhjNiwgMHhhOCwgMHhhNywgMHhmYywgMHg1MCwgMHgzNiwgMHg3NCwgMHg1ZSwKLQkweDI3LCAweGJlLCAweDZmLCAweDEwLCAweDJkLCAweGY3LCAweDc4LCAweDBlLCAweGIzLCAweDRmLCAweGE3LCAweDRlLAotCTB4ODcsIDB4N2UsIDB4NGEsIDB4NzQsIDB4YTgsIDB4YzcsIDB4YjIsIDB4NWIsIDB4YmUsIDB4ODMsIDB4NWUsIDB4MDEsCi0JMHg5ZCwgMHg4MiwgMHgzOCwgMHgwZiwgMHgxOSwgMHgxZSwgMHhmMiwgMHhkZCwgMHg3YSwgMHg4OCwgMHhmYywgMHgxNSwKLQkweGUxLCAweDM3LCAweDg3LCAweDljLCAweGM2LCAweGViLCAweDlmLCAweDQyLCAweGZjLCAweDMxLCAweDhmLCAweGRmLAotCTB4YzQsIDB4ZGEsIDB4MGIsIDB4YjQsIDB4ZTIsIDB4Y2YsIDB4NjMsIDB4MGMsIDB4ZWYsIDB4ZjEsIDB4NjEsIDB4N2MsCi0JMHgxZiwgMHg0NiwgMHgxZSwgMHhjOCwgMHhmMiwgMHg4NCwgMHhlMCwgMHgzYywgMHhiMSwgMHgxYiwgMHg3MSwgMHgzMCwKLQkweDAwLCAweGVlLCAweGRmLCAweDYzLCAweDZlLCAweGNmLCAweDEzLCAweDE4LCAweDU3LCAweGRhLCAweDgzLCAweGJjLAotCTB4NzAsIDB4M2YsIDB4ZmEsIDB4NTksIDB4ZDcsIDB4MjgsIDB4ZGEsIDB4MDEsIDB4YmMsIDB4ZWYsIDB4YzEsIDB4ZDgsCi0JMHhmZSwgMHgxYywgMHg5MSwgMHhjYiwgMHhkZCwgMHgyZCwgMHgzZiwgMHgyMCwgMHgyNiwgMHg1NiwgMHgxMSwgMHgyYiwKLQkweDZiLCAweDljLCAweDI3LCAweDM4LCAweDE2LCAweDc5LCAweDRmLCAweDhiLCAweGUwLCAweDZmLCAweDFiLCAweDNhLAotCTB4NzgsIDB4NmYsIDB4OGIsIDB4ZDgsIDB4NDMsIDB4Y2UsIDB4NzEsIDB4ODIsIDB4MmEsIDB4MWIsIDB4M2IsIDB4ZTUsCi0JMHgwZiwgMHg1ZSwgMHgwZiwgMHgzOCwgMHhlYywgMHgzNCwgMHhhZiwgMHhjNSwgMHgxNSwgMHgwZCwgMHhmMCwgMHg1OSwKLQkweGI4LCAweDMxLCAweDhkLCAweGVmLCAweGM4LCAweDg1LCAweDIyLCAweGIyLCAweDFiLCAweGE3LCAweDUzLCAweDJlLAotCTB4NmIsIDB4NmMsIDB4OGMsIDB4MjksIDB4OWMsIDB4YzYsIDB4ODksIDB4YzAsIDB4M2IsIDB4NzMsIDB4NTksIDB4Y2UsCi0JMHg1ZCwgMHg4YywgMHgyNSwgMHgwYSwgMHgyMCwgMHhiYiwgMHgxOSwgMHgxYSwgMHg1MiwgMHgyZSwgMHhmOSwgMHgyMywKLQkweGQ0LCAweDAwLCAweDJlLCAweDAzLCAweGYwLCAweDU5LCAweDAzLCAweDdjLCAweDU2LCAweGVmLCAweGUzLCAweGIzLAotCTB4ZmEsIDB4ZTcsIDB4ZjIsIDB4MTksIDB4YjgsIDB4YWEsIDB4MDMsIDB4YWUsIDB4ZWEsIDB4ODAsIDB4YWIsIDB4NTAsCi0JMHgxYiwgMHhiYywgMHgwMywgMHhlYywgMHhiZiwgMHhkZCwgMHhkOSwgMHg4OSwgMHhlMywgMHg5OCwgMHhkZiwgMHg5OCwKLQkweGU3LCAweGE2LCAweGU4LCAweGYyLCAweGRlLCAweGZmLCAweDk0LCAweGU3LCAweDhlLCAweDgzLCAweDEzLCAweDZjLAotCTB4ZmEsIDB4ZmUsIDB4ZGUsIDB4N2IsIDB4NzMsIDB4ZGQsIDB4MDksIDB4NzAsIDB4OWQsIDB4ZjUsIDB4ZjksIDB4NWMsCi0JMHhkNywgMHg2NCwgMHhhZSwgMHgzMywgMHg4MSwgMHhiZCwgMHgyNiwgMHg3OCwgMHg0MCwgMHg1ZiwgMHhlZCwgMHg5ZiwKLQkweGU3LCAweDI0LCAweGU2LCAweGUxLCAweDNlLCAweDMzLCAweGNiLCAweGE1LCAweDNhLCAweDc1LCAweDgxLCAweDdiLAotCTB4YzMsIDB4ZTMsIDB4NzksIDB4NjAsIDB4NzMsIDB4OTIsIDB4NzIsIDB4ZDEsIDB4MTMsIDB4NjYsIDB4ODksIDB4YWMsCi0JMHg0OSwgMHhlMCwgMHg2MSwgMHg3NSwgMHg4OCwgMHg4YywgMHhkMywgMHhiNywgMHhmMCwgMHg4ZSwgMHg3YSwgMHgwMCwKLQkweDcxLCAweDhlLCAweDdmLCAweDFiLCAweGI5LCAweDhlLCAweDQxLCAweDcwLCAweDhkLCAweDQ5LCAweDg1LCAweDU1LAotCTB4MGIsIDB4ZWYsIDB4ZGEsIDB4YjYsIDB4NzEsIDB4ODcsIDB4OTAsIDB4NmYsIDB4OGMsIDB4OWEsIDB4M2IsIDB4ZjMsCi0JMHg3YiwgMHg3ZSwgMHhlZSwgMHhmMSwgMHg5OCwgMHg0MSwgMHhkMiwgMHhkNywgMHg1YywgMHhjNywgMHhkMSwgMHg1ZCwKLQkweGZmLCAweDFhLCAweGI4LCAweGUxLCAweDdkLCAweDhmLCAweGY5LCAweDJmLCAweDA2LCAweDBhLCAweDBhLCAweDY0LAotCTB4YWUsIDB4Y2EsIDB4ZTMsIDB4NTYsIDB4OGQsIDB4ZTcsIDB4NmUsIDB4M2EsIDB4ODgsIDB4NzMsIDB4ZTcsIDB4MzUsCi0JMHhlMCwgMHg4NywgMHg3MywgMHhlNywgMHhmOSwgMHgyYSwgMHhkNywgMHg3YiwgMHg2OSwgMHg4YywgMHhiNiwgMHg3YSwKLQkweGY5LCAweDljLCAweGEzLCAweGIwLCAweGRiLCAweDgyLCAweDRjLCAweGZmLCAweDU4LCAweGM2LCAweDhiLCAweDk0LAotCTB4Y2YsIDB4NjIsIDB4NGQsIDB4MDYsIDB4ZTYsIDB4YjEsIDB4ZDYsIDB4NmMsIDB4MmEsIDB4YWMsIDB4YjEsIDB4NWYsCi0JMHg1YywgMHhjOCwgMHg1NywgMHhjNCwgMHgxYywgMHg2ZCwgMHg2ZSwgMHhlMywgMHg4MywgMHg5MywgMHhiZCwgMHgwZiwKLQkweDRjLCAweGU2LCAweDUwLCAweDAzLCAweGIxLCAweDU5LCAweGM0LCAweGJjLCAweGQ2LCAweDk2LCAweDJlLCAweGNhLAotCTB4NzQsIDB4YjEsIDB4YmMsIDB4NTcsIDB4N2UsIDB4NzYsIDB4NGIsIDB4OWUsIDB4NzksIDB4NmQsIDB4YTIsIDB4Y2MsCi0JMHhmYywgMHhjNSwgMHg3NiwgMHgxOCwgMHg4YSwgMHg0YiwgMHgwNywgMHgzMywgMHgyZSwgMHhhZCwgMHg2MCwgMHgzZiwKLQkweDA3LCAweDU1LCAweDVjLCAweGVhLCAweGRlLCAweGMzLCAweDE5LCAweDlmLCAweGVlLCAweDQ2LCAweGNiLCAweDdkLAotCTB4MzcsIDB4YjIsIDB4MzgsIDB4MzEsIDB4NjEsIDB4MmYsIDB4ZWIsIDB4MWQsIDB4MjQsIDB4MDMsIDB4NzYsIDB4NDUsCi0JMHg2YSwgMHg0ZCwgMHg3ZiwgMHg5MywgMHg0YiwgMHgxZSwgMHg3MywgMHgwNCwgMHhlMywgMHg1MywgMHg3MSwgMHgyOSwKLQkweGZhLCAweDI3LCAweDYwLCAweDMzLCAweGYzLCAweDAyLCAweGNiLCAweGIxLCAweGZjLCAweDRlLCAweDcyLCAweDdmLAotCTB4ODUsIDB4OWMsIDB4ZDgsIDB4NDEsIDB4MGUsIDB4N2QsIDB4MWIsIDB4MmMsIDB4YzMsIDB4ZGMsIDB4MzAsIDB4OGEsCi0JMHhmMSwgMHgyMSwgMHhmMywgMHgwMiwgMHg3YywgMHhjNiwgMHhiMiwgMHhlNSwgMHgyYywgMHgwZSwgMHgyMywgMHg3YywKLQkweGUzLCAweGJhLCAweDk3LCAweGUzLCAweDIzLCAweDIwLCAweGFiLCAweGM2LCAweGViLCAweGUwLCAweDlhLCAweDk4LAotCTB4ZjMsIDB4MjIsIDB4ZDcsIDB4YTEsIDB4NWMsIDB4NmYsIDB4ZTYsIDB4ZjUsIDB4YTksIDB4MzcsIDB4MzUsIDB4N2IsCi0JMHhiNywgMHg1YSwgMHg1MywgMHhmNCwgMHhkNywgMHg5YSwgMHhlOCwgMHhkOCwgMHhiMSwgMHhkNiwgMHhmNCwgMHhhYywKLQkweGI0LCAweGQ2LCAweGFjLCAweDU4LCAweDc3LCAweGFmLCAweDM1LCAweDczLCAweGQ5LCAweDdiLCAweGQ3LCAweDlhLAotCTB4NzEsIDB4ODcsIDB4ZjcsIDB4MDgsIDB4YjksIDB4NTQsIDB4ZjAsIDB4NWEsIDB4YTgsIDB4NjksIDB4NjYsIDB4N2MsCi0JMHgxMSwgMHhkZCwgMHhjNiwgMHgxNywgMHhkMSwgMHg2OSwgMHhiNywgMHg3YywgMHg4ZSwgMHgzOCwgMHhhNiwgMHhkZCwKLQkweDcyLCAweDhiLCAweDZiLCAweGEwLCAweDBkLCAweGFlLCAweDgxLCAweDBjLCAweGU0LCAweGQyLCAweDdlLCAweGNlLAotCTB4YzgsIDB4N2QsIDB4YzIsIDB4YmUsIDB4MWMsIDB4MDQsIDB4MjcsIDB4YjMsIDB4MWYsIDB4OGIsIDB4MTksIDB4M2YsCi0JMHhhMCwgMHhmNSwgMHgzZSwgMHgwNSwgMHgzZiwgMHhlNCwgMHhiYywgMHhjMiwgMHgzZSwgMHhmYiwgMHg3ZiwgMHhlMiwKLQkweDE1LCAweGIyLCAweDA3LCAweGMwLCAweDBmLCAweDM2LCAweGVhLCAweGNkLCAweDQ2LCAweDQ3LCAweGQ5LCAweDAyLAotCTB4NWYsIDB4NDgsIDB4MzksIDB4ZTcsIDB4MzMsIDB4ZjYsIDB4NTMsIDB4YmUsIDB4NTAsIDB4M2UsIDB4NTEsIDB4NzgsCi0JMHgyYywgMHhkMiwgMHhiYiwgMHgzZSwgMHg2MywgMHgwMSwgMHhlNywgMHgyMywgMHg4ZiwgMHg3MywgMHgyMiwgMHhmMywKLQkweGVmLCAweDRkLCAweGY5LCAweGFlLCAweDE3LCAweGEyLCAweDJmLCAweGMyLCAweDllLCAweDMzLCAweDBlLCAweGU2LAotCTB4YjUsIDB4NDMsIDB4ZWIsIDB4MzYsIDB4ZTQsIDB4MTgsIDB4MGIsIDB4ZTUsIDB4M2IsIDB4Y2UsIDB4M2QsIDB4ZTksCi0JMHhmOSwgMHg4NCwgMHg2YiwgMHhlMSwgMHhmZiwgMHgxNiwgMHgxYiwgMHgxNywgMHhlZiwgMHg4MiwgMHg4ZCwgMHgzNywKLQkweDMzLCAweDZjLCAweGZjLCAweGYyLCAweDFlLCAweGQ4LCAweGI4LCAweGY4LCAweDA1LCAweGIxLCAweGUxLCAweDNhLAotCTB4MWYsIDB4YTMsIDB4NWUsIDB4N2EsIDB4Y2YsIDB4NjMsIDB4N2MsIDB4NDgsIDB4ZjksIDB4YjEsIDB4YmYsIDB4NTMsCi0JMHgzZSwgMHgwOSwgMHg2YywgMHhlMywgMHhkNSwgMHg5YiwgMHgzMiwgMHhjZSwgMHg3MiwgMHg4OSwgMHhmZSwgMHhkNiwKLQkweGFkLCAweDVjLCAweDMyLCAweGZlLCAweDZhLCAweDhhLCAweDhiLCAweGYxLCAweGI3LCAweGE0LCAweDNjLCAweGI3LAotCTB4MDMsIDB4MGUsIDB4YjgsIDB4NTYsIDB4YmUsIDB4MGEsIDB4MWUsIDB4NjgsIDB4ZDEsIDB4ZmYsIDB4YTIsIDB4NTYsCi0JMHg2NiwgMHhjZSwgMHhhZSwgMHhkYSwgMHg0NywgMHhkYiwgMHhmOSwgMHhiZSwgMHhlNywgMHg3YiwgMHg1ZSwgMHhhMCwKLQkweGIzLCAweDYyLCAweDE3LCAweGZjLCAweGI1LCAweDlmLCAweDVhLCAweGFmLCAweDliLCAweDdjLCAweDdlLCAweDAwLAotCTB4MWUsIDB4MWUsIDB4MzcsIDB4MzksIDB4NTYsIDB4NzEsIDB4NTYsIDB4YzQsIDB4NzMsIDB4N2YsIDB4M2QsIDB4MGQsCi0JMHgzYywgMHhmYSwgMHhiYywgMHg3NiwgMHhiNSwgMHhlZSwgMHgzZSwgMHhhZSwgMHhmZiwgMHgxZSwgMHg0YSwgMHg5MiwKLQkweDNiLCAweGYyLCAweGM4LCAweGI2LCAweDczLCAweGIzLCAweDgxLCAweDczLCAweDczLCAweDVkLCAweGU5LCAweGUwLAotCTB4YjMsIDB4NTUsIDB4ZWEsIDB4YmYsIDB4MTMsIDB4ZWEsIDB4YWMsIDB4N2MsIDB4NTMsIDB4OWUsIDB4NTMsIDB4ZTcsCi0JMHhlNSwgMHhkMSwgMHgwMiwgMHgwZCwgMHhjZSwgMHg2NywgMHg1OCwgMHg2MSwgMHg1ZiwgMHgwYywgMHhhYiwgMHg3YSwKLQkweDgyLCAweDMxLCAweGQ1LCAweDQyLCAweGJlLCAweDVkLCAweDgyLCAweDNmLCAweDFhLCAweDJhLCAweDE2LCAweGIwLAotCTB4ZjYsIDB4Y2MsIDB4MWYsIDB4MmQsIDB4ZjgsIDB4YTMsIDB4OWUsIDB4YTQsIDB4MzEsIDB4ZjEsIDB4ZTUsIDB4OWUsCi0JMHgxZCwgMHhmZSwgMHg4OCwgMHg3YywgMHg2YSwgMHgyZiwgMHg5YSwgMHgzOCwgMHg2ZiwgMHg1ZiwgMHg0OSwgMHg1NCwKLQkweGZlLCAweDVjLCAweDY4LCAweGI1LCAweGE5LCAweGY5LCAweDYwLCAweGVkLCAweDM4LCAweGQ3LCAweDZkLCAweDVjLAotCTB4NzcsIDB4Y2QsIDB4MmMsIDB4NTUsIDB4ZDEsIDB4ZDcsIDB4YjMsIDB4MjksIDB4ODQsIDB4NGYsIDB4YmUsIDB4N2QsCi0JMHg5MCwgMHgxNiwgMHg4ZCwgMHgxYSwgMHhlMywgMHgxNywgMHhlZiwgMHgwOSwgMHgzNSwgMHhjMywgMHg4MywgMHhhOCwKLQkweGE1LCAweDkyLCAweGIxLCAweDQ1LCAweGJkLCAweDM2LCAweDA2LCAweDFjLCAweDM1LCAweDI5LCAweDgwLCAweDlkLAotCTB4MDEsIDB4NzQsIDB4Y2YsIDB4YjUsIDB4NmQsIDB4N2IsIDB4YjksIDB4Y2QsIDB4NjcsIDB4YTQsIDB4MjYsIDB4ZjEsCi0JMHgxOSwgMHhiYywgMHhkYiwgMHhiYiwgMHgwZSwgMHg3ZCwgMHgwMywgMHhjZiwgMHhlMCwgMHhjYywgMHhlYSwgMHhjNCwKLQkweGMwLCAweGQ1LCAweGNiLCAweDg5LCAweDQ1LCAweGFkLCAweDEyLCAweGRmLCAweDUxLCAweDMwLCAweDU3LCAweDk2LAotCTB4YTEsIDB4ZTMsIDB4OTksIDB4NDIsIDB4OGEsIDB4Y2IsIDB4MzIsIDB4ZjQsIDB4NzAsIDB4Y2MsIDB4MTAsIDB4ZTYsCi0JMHg2MywgMHhmZiwgMHhlNSwgMHg1OCwgMHgyYiwgMHhmNywgMHhkNSwgMHhlZSwgMHg4NSwgMHhlYywgMHhiYywgMHg0YSwKLQkweGNhLCAweDA3LCAweGVjLCAweGRmLCAweGQwLCAweDdiLCAweGJlLCAweDkwLCAweGRmLCAweGM3LCAweGI0LCAweDEwLAotCTB4ZjMsIDB4OGQsIDB4N2QsIDB4OGMsIDB4NDMsIDB4MGQsIDB4NzgsIDB4YzMsIDB4OTgsIDB4ODQsIDB4ZmIsIDB4OTAsCi0JMHg1NywgMHhmNiwgMHgyMSwgMHgzNywgMHg5NywgMHg4YSwgMHhhYSwgMHg2ZCwgMHgyNiwgMHhjNywgMHhiMiwgMHhmMSwKLQkweGJhLCAweDFhLCAweGM3LCAweDM5LCAweDIxLCAweDRlLCAweGQ0LCAweDU5LCAweDQxLCAweDhiLCAweDNhLCAweGU0LAotCTB4MzQsIDB4N2MsIDB4OWMsIDB4ODEsIDB4NTAsIDB4NWIsIDB4YWMsIDB4MjQsIDB4OWMsIDB4Y2YsIDB4ZjcsIDB4ZDksCi0JMHhiYSwgMHhlMiwgMHhiOSwgMHg0ZCwgMHhjOCwgMHhlMCwgMHg3OSwgMHg4MywgMHhmNCwgMHg4NiwgMHhjZiwgMHhmNywKLQkweDA3LCAweGQ5LCAweGRkLCAweDQ2LCAweDg5LCAweDg2LCAweDIxLCAweDBmLCAweGJiLCAweGM2LCAweGQ4LCAweGFlLAotCTB4YTAsIDB4YTEsIDB4NmEsIDB4MTEsIDB4ZDYsIDB4YmQsIDB4NWYsIDB4NGYsIDB4ZWYsIDB4NWMsIDB4N2UsIDB4OTMsCi0JMHhjZCwgMHg2NSwgMHg4MywgMHg1ZiwgMHgwOCwgMHhlNywgMHgxZCwgMHg5ZiwgMHhmMywgMHhkYSwgMHhkNywgMHgwYywKLQkweGJhLCAweDRlLCAweDhhLCAweDIzLCAweGM1LCAweDM3LCAweDkwLCAweGVmLCAweDBlLCAweDQyLCAweDI2LCAweDUwLAotCTB4ZmMsIDB4OTIsIDB4OWUsIDB4MTksIDB4NzIsIDB4OTksIDB4OGEsIDB4YjEsIDB4NWQsIDB4YzcsIDB4NzcsIDB4Y2MsCi0JMHhlZCwgMHhlZiwgMHgwMSwgMHg2MiwgMHhhYiwgMHg5YSwgMHhjZCwgMHhkNywgMHg4ZiwgMHhkMywgMHg0ZCwgMHhlMCwKLQkweDc0LCAweGIzLCAweGIwLCAweDc1LCAweGVlLCAweDI4LCAweDE1LCAweDMwLCAweDhlLCAweDZkLCAweDY0LCAweDJlLAotCTB4NjEsIDB4OTksIDB4NGYsIDB4YWMsIDB4ZWQsIDB4N2EsIDB4MmEsIDB4M2IsIDB4ZTgsIDB4ZjgsIDB4NTMsIDB4OWYsCi0JMHg4ZSwgMHgxMiwgMHhhZiwgMHg0ZCwgMHgzNCwgMHhkMiwgMHhmMywgMHhiMywgMHhmYSwgMHg2YiwgMHhjMCwgMHhjZiwKLQkweDM4LCAweDZmLCAweDNjLCAweGEwLCAweDYzLCAweDFkLCAweDVjLCAweDdmLCAweGQ1LCAweDU1LCAweDNmLCAweDBlLAotCTB4NTYsIDB4ZGIsIDB4ZjQsIDB4ZmUsIDB4MzAsIDB4OWIsIDB4NjcsIDB4NWYsIDB4MWEsIDB4MGYsIDB4MWUsIDB4ZGEsCi0JMHg2NCwgMHhiMywgMHhjZiwgMHg3NiwgMHg2YiwgMHg4NywgMHg3OSwgMHg5MSwgMHhkOCwgMHhiZCwgMHgxOSwgMHg4ZCwKLQkweGYxLCAweDY2LCAweGQ0LCAweDM4LCAweDA3LCAweGUzLCAweDc5LCAweDBiLCAweDFmLCAweDhjLCAweGQ1LCAweGNmLAotCTB4YzcsIDB4YTgsIDB4ZjUsIDB4MDUsIDB4MzEsIDB4ZmEsIDB4NDYsIDB4OWIsIDB4YjksIDB4MjIsIDB4YzUsIDB4NjgsCi0JMHhlMywgMHgwZSwgMHg4YywgMHhhMiwgMHgwNiwgMHgyYSwgMHhlNSwgMHhmOCwgMHhlNCwgMHg3OCwgMHhjOSwgMHhmMSwKLQkweDk5LCAweDNmLCAweGYzLCAweGZkLCAweDA4LCAweDM4LCAweDM4LCAweGUzLCAweGI2LCAweDE4LCAweGRjLCAweDE2LAotCTB4YTksIDB4MWMsIDB4ZTcsIDB4OTYsIDB4MjMsIDB4NGEsIDB4ZTMsIDB4NzgsIDB4MTksIDB4NzEsIDB4MWMsIDB4MTksCi0JMHg5YywgMHhmMywgMHgzOCwgMHg4NiwgMHg1OSwgMHg4ZSwgMHhlMywgMHg5OCwgMHhlNSwgMHg0NiwgMHgzMiwgMHgzOSwKLQkweGI0LCAweDg4LCAweGU3LCAweDI4LCAweDhiLCAweGU3LCAweDE2LCAweDc4LCAweDM3LCAweGNhLCAweGUyLCAweGI5LAotCTB4ODUsIDB4MTgsIDB4NWUsIDB4YzksIDB4ZTIsIDB4YjksIDB4OTUsIDB4YzUsIDB4MzMsIDB4ZGYsIDB4ZGIsIDB4MTksCi0JMHg1NSwgMHg5NSwgMHg4YiwgMHg5ZCwgMHgzYSwgMHg3OCwgMHg2ZCwgMHg0NSwgMHhlOSwgMHg2YywgMHg2MiwgMHg5ZCwKLQkweGIwLCAweGIxLCAweDkzLCAweGM3LCAweGM1LCAweDFkLCAweGY3LCAweDViLCAweDU4LCAweGNmLCAweGFkLCAweGJjLAotCTB4MzIsIDB4OGIsIDB4YmMsIDB4NzIsIDB4MGUsIDB4NzksIDB4YTUsIDB4ZGIsIDB4NzcsIDB4YmYsIDB4NzUsIDB4NTYsCi0JMHhlNSwgMHg5NSwgMHgyNywgMHg4YiwgMHg3OSwgMHg1ZSwgMHhlOSwgMHg2NiwgMHg3OSwgMHhhNSwgMHhhYiwgMHhmMiwKLQkweGNhLCAweDEzLCAweDQ1LCAweGNlLCAweDJiLCAweDMxLCAweDA1LCAweGM1LCAweGZlLCAweGJjLCAweDEyLCAweDZmLAotCTB4Y2IsIDB4MmIsIDB4YjksIDB4MmMsIDB4ZjcsIDB4ZWYsIDB4OTQsIDB4NTcsIDB4NzIsIDB4OWYsIDB4NzEsIDB4NmUsCi0JMHhiMSwgMHg3MiwgMHg1ZSwgMHhiZCwgMHgyZCwgMHg5ZiwgMHhlNCwgMHg2MywgMHhkOCwgMHg1NiwgMHhlNiwgMHgyNSwKLQkweGU2LCAweGUwLCAweGI0LCAweGFlLCAweGJmLCAweDkyLCAweGU0LCAweGIxLCAweDc0LCAweDBjLCAweGYzLCAweGUwLAotCTB4YmQsIDB4YjMsIDB4NTMsIDB4MmMsIDB4ZDksIDB4NTksIDB4MmMsIDB4MGQsIDB4YTcsIDB4MzIsIDB4OWQsIDB4ZmUsCi0JMHg3OCwgMHgzYSwgMHg1NiwgMHhkYywgMHgxZSwgMHg0ZiwgMHhiOSwgMHg5ZSwgMHgzYywgMHg5ZSwgMHg1MiwgMHg5ZCwKLQkweDFmLCAweDFhLCAweDY1LCAweGFlLCAweDA3LCAweDcwLCAweDk2LCAweDc2LCAweGZkLCAweDM5LCAweGY0LCAweDVlLAotCTB4ZTgsIDB4NGQsIDB4YTMsIDB4YWUsIDB4MzYsIDB4ZTksIDB4NmEsIDB4Y2UsIDB4MzcsIDB4ZWEsIDB4YmUsIDB4MDcsCi0JMHg2ZCwgMHgyZiwgMHhiNywgMHhiNSwgMHhiOCwgMHhmNSwgMHhhZCwgMHg4YiwgMHhkYSwgMHhmYSwgMHg3ZCwgMHhmMCwKLQkweGM4LCAweDc5LCAweGY1LCAweGZkLCAweDMzLCAweDc5LCAweGI1LCAweDg0LCAweDMzLCAweGIwLCAweDk3LCAweDhmLAotCTB4N2IsIDB4MWQsIDB4ZjMsIDB4YjksIDB4ZTIsIDB4MmMsIDB4OWUsIDB4NWUsIDB4ZWUsIDB4ZGQsIDB4ODIsIDB4ZjksCi0JMHg4YSwgMHhjNywgMHg3ZCwgMHhmZiwgMHg0NCwgMHgwZSwgMHg0MSwgMHg1ZCwgMHhiZSwgMHgzNSwgMHg5NiwgMHhjZiwKLQkweDM4LCAweDFlLCAweGQ2LCAweGVjLCAweGQwLCAweGE1LCAweDZkLCAweGU3LCAweDljLCAweGY0LCAweDdjLCAweDgzLAotCTB4NzUsIDB4YTMsIDB4M2UsIDB4ZTEsIDB4M2EsIDB4MjUsIDB4ZmMsIDB4OGEsIDB4NGUsIDB4MmYsIDB4ZDEsIDB4YjcsCi0JMHg3YywgMHhlZSwgMHhkMywgMHg2OSwgMHhmNiwgMHgzMSwgMHgyOSwgMHg1ZiwgMHg0MCwgMHhjZCwgMHhmMiwgMHhmNCwKLQkweGI2LCAweDlhLCAweGE1LCAweDQ4LCAweGUzLCAweDA3LCAweGZhLCAweGNmLCAweDg3LCAweDM3LCAweGU1LCAweGY4LAotCTB4YTQsIDB4N2IsIDB4MzYsIDB4YTAsIDB4NDAsIDB4OWIsIDB4NWQsIDB4ZTcsIDB4NWEsIDB4NzYsIDB4YWIsIDB4NzYsCi0JMHgyNSwgMHgxYSwgMHhiZCwgMHgyMSwgMHhmNSwgMHg0OSwgMHhjZSwgMHg4NSwgMHg1NywgMHgzMywgMHg1ZiwgMHhlMSwKLQkweGRiLCAweDk5LCAweDFiLCAweGUwLCAweGQ2LCAweDQ4LCAweGRkLCAweGYxLCAweDA2LCAweGViLCAweDNjLCAweDBmLAotCTB4YmYsIDB4YTMsIDB4NGQsIDB4YjgsIDB4YmUsIDB4YjksIDB4ZGIsIDB4YmQsIDB4YWIsIDB4ODksIDB4N2QsIDB4NzEsCi0JMHg5ZCwgMHhhMywgMHgwNiwgMHhhOSwgMHhiYiwgMHg4YiwgMHgyNSwgMHhkZiwgMHhmZCwgMHg1OSwgMHg4YiwgMHg1MiwKLQkweDllLCAweDg4LCAweGZjLCAweDA1LCAweGQ4LCAweDAyLCAweDljLCAweDhiLCAweDQ1LCAweGVjLCAweGNkLCAweDI0LAotCTB4NzgsIDB4YzksIDB4NzUsIDB4MGUsIDB4ZTgsIDB4NDIsIDB4NjEsIDB4N2YsIDB4MTksIDB4YmEsIDB4OGQsIDB4MDMsCi0JMHg1YywgMHgzZiwgMHg3ZSwgMHgyYSwgMHg5NywgMHg3YiwgMHgyYSwgMHgwNywgMHhmYiwgMHg4YywgMHg5MSwgMHg3YSwKLQkweGIyLCAweDViLCAweGU3LCAweDM2LCAweDQ4LCAweGY4LCAweGI5LCAweDgwLCAweDc5LCAweDljLCAweGJiLCAweGUwLAotCTB4YTcsIDB4MjQsIDB4YTIsIDB4MzMsIDB4OGUsIDB4OTgsIDB4ZWQsIDB4MzgsIDB4NjIsIDB4YWUsIDB4YTMsIDB4MDMsCi0JMHhkZCwgMHhiNiwgMHg0ZCwgMHhiYiwgMHhiMCwgMHgyNywgMHhjOCwgMHhjMSwgMHhmNCwgMHgwMCwgMHg2YywgMHhiOSwKLQkweGUwLCAweDg4LCAweDNhLCAweDZhLCAweGMxLCAweDFmLCAweDE4LCAweGFlLCAweDc4LCAweDlhLCAweDNlLCAweGMxLAotCTB4MWEsIDB4NmYsIDB4YzgsIDB4ZjQsIDB4ZGUsIDB4YzUsIDB4MTEsIDB4ZDEsIDB4ZDYsIDB4ZGMsIDB4MzcsIDB4MzAsCi0JMHgzNywgMHhkYiwgMHhjNCwgMHgzMSwgMHhjYSwgMHhmOSwgMHg3MiwgMHg1ZSwgMHg1YiwgMHg4MCwgMHg4ZiwgMHg4ZSwKLQkweGFjLCAweDZiLCAweGUwLCAweDM1LCAweGNlLCAweDk3LCAweDIzLCAweGQ5LCAweGZkLCAweDEyLCAweGY2LCAweDA3LAotCTB4ZWIsIDB4YmYsIDB4NzQsIDB4NDcsIDB4YWQsIDB4OTksIDB4ZDcsIDB4OTQsIDB4ZTksIDB4ZGQsIDB4NjksIDB4M2MsCi0JMHhjMywgMHhmMywgMHgxMywgMHg2YywgMHg5OSwgMHg5OCwgMHhiYSwgMHhhMCwgMHhjZSwgMHgzZCwgMHhkMywgMHhhOCwKLQkweGYxLCAweGI4LCAweDk1LCAweGE4LCAweDgzLCAweGY4LCAweGFlLCAweDhiLCAweDZiLCAweDI3LCAweDg5LCAweGY4LAotCTB4NGYsIDB4OWYsIDB4NjMsIDB4M2UsIDB4MTMsIDB4Y2QsIDB4YjAsIDB4MGUsIDB4M2UsIDB4MWIsIDB4NzEsIDB4ZmMsCi0JMHhmYywgMHgxYiwgMHgyZiwgMHhmMywgMHgwYSwgMHhiZCwgMHg2OCwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCB9OworCTB4Y2QsIDB4NTgsIDB4NWQsIDB4NmMsIDB4MWMsIDB4NTcsIDB4MTUsIDB4M2UsIDB4ZjMsIDB4YjcsIDB4M2IsIDB4ZGUsCisJMHgzOCwgMHhmMSwgMHgyNCwgMHgxOSwgMHhjYSwgMHhhNiwgMHg3MiwgMHhlOSwgMHg4YywgMHgzZCwgMHg3NiwgMHg4YywKKwkweDZjLCAweDM1LCAweGQzLCAweDc2LCAweGQ1LCAweDU4LCAweDY4LCAweGE0LCAweDRlLCAweDY3LCAweDc2LCAweDFkLAorCTB4MmIsIDB4ZjQsIDB4YzEsIDB4ODUsIDB4NDgsIDB4M2MsIDB4ZjAsIDB4ZTIsIDB4YWUsIDB4MWQsIDB4MDUsIDB4NzgsCisJMHgyYSwgMHgyOCwgMHgwZiwgMHgxMSwgMHgyZiwgMHg1OSwgMHg3NiwgMHgzNywgMHhmZCwgMHg0MSwgMHhkYiwgMHgyYywKKwkweDM1LCAweGM4LCAweDQxLCAweDAyLCAweGE0LCAweGIwLCAweDY5LCAweGUyLCAweDk3LCAweGFkLCAweDI3LCAweDJkLAorCTB4NDUsIDB4ZWEsIDB4NGIsIDB4OTUsIDB4MjgsIDB4NTUsIDB4MmIsIDB4YzQsIDB4MTMsIDB4MmYsIDB4NTQsIDB4NzksCisJMHhhYywgMHg1MiwgMHg1YSwgMHhmMSwgMHgwMCwgMHgyOCwgMHg0MiwgMHgxNSwgMHhhYSwgMHg2OCwgMHhmMCwgMHhlNSwKKwkweDNiLCAweDc3LCAweDY2LCAweGRjLCAweGRkLCAweGM0LCAweDQ5LCAweGNiLCAweDlmLCAweDg0LCAweGE1LCAweGY1LAorCTB4OWQsIDB4YjksIDB4ZjcsIDB4OWUsIDB4NzMsIDB4Y2YsIDB4M2QsIDB4M2YsIDB4ZGYsIDB4MzksIDB4NjcsIDB4Y2EsCisJMHgyYSwgMHg5NSwgMHgyOCwgMHhmYiwgMHhkYiwgMHg4ZCwgMHhkZiwgMHhjOSwgMHhhNywgMHg5ZiwgMHgzOSwgMHg3OSwKKwkweGY4LCAweGExLCAweDQ3LCAweDFkLCAweGEyLCAweDg3LCAweDFmLCAweDUyLCAweDk0LCAweGEyLCAweDQ2LCAweGZmLAorCTB4ODUsIDB4M2YsIDB4MzAsIDB4YjEsIDB4NzIsIDB4ZmUsIDB4ZmMsIDB4MjMsIDB4NTMsIDB4MGQsIDB4N2UsIDB4ZTMsCisJMHg0NCwgMHgxZSwgMHg5OSwgMHg1YSwgMHhiMCwgMHhmNCwgMHhlNSwgMHgxNSwgMHg4ZiwgMHgyOCwgMHhlYywgMHhjZiwKKwkweDNhLCAweDMxLCAweGZkLCAweDQzLCAweDM0LCAweDZjLCAweDlkLCAweDc4LCAweGZlLCAweDgxLCAweGUwLCAweGQ2LAorCTB4YTEsIDB4MzcsIDB4MGYsIDB4YmIsIDB4MzcsIDB4Y2YsIDB4NmIsIDB4NjQsIDB4NWEsIDB4YzEsIDB4YjIsIDB4NjksCisJMHg0ZCwgMHg5MywgMHgzOSwgMHgxZSwgMHg1YywgMHg3NSwgMHg3ZSwgMHg3ZSwgMHgzMCwgMHgyOCwgMHhkMCwgMHg5ZSwKKwkweDljLCAweDk3LCAweDRkLCAweGNkLCAweDJlLCAweDM1LCAweGY0LCAweGMwLCAweGE0LCAweDVhLCAweGU3LCAweDk0LAorCTB4MTIsIDB4NzUsIDB4M2QsIDB4YWIsIDB4MGEsIDB4MWUsIDB4YTEsIDB4MGQsIDB4ZmUsIDB4MWUsIDB4ZGUsIDB4MTMsCisJMHg1ZCwgMHhhOSwgMHg5ZSwgMHgzMywgMHg0OSwgMHgwZCwgMHg0MiwgMHgzYywgMHhjZiwgMHg1MSwgMHhhYiwgMHgyYiwKKwkweGM0LCAweDBmLCAweDdkLCAweDg1LCAweDU2LCAweDdjLCAweDkzLCAweDk2LCAweDJkLCAweDc3LCAweDMxLCAweDU0LAorCTB4YjYsIDB4NDQsIDB4M2MsIDB4MjUsIDB4YzQsIDB4YjcsIDB4N2QsIDB4OTUsIDB4NTQsIDB4NmYsIDB4NDEsIDB4ODksCisJMHgzNiwgMHgxNiwgMHg5NSwgMHg3OCwgMHg2MywgMHg5MSwgMHhmNSwgMHgwMSwgMHhmOSwgMHgxNiwgMHg5NCwgMHg3MCwKKwkweDgzLCAweGM3LCAweGMwLCAweDhjLCAweDNiLCAweDdiLCAweDY4LCAweGQ5LCAweGE2LCAweDMxLCAweGQ1LCAweDliLAorCTB4YzMsIDB4NzksIDB4NjUsIDB4ZjAsIDB4NzEsIDB4MjgsIDB4ZjIsIDB4NjcsIDB4MmQsIDB4OTUsIDB4MjYsIDB4ZjEsCisJMHgxYiwgMHhhMSwgMHg5YSwgMHg0ZiwgMHgyMywgMHhhYSwgMHhhNywgMHg1MiwgMHhkZCwgMHg1NiwgMHhlOCwgMHhlNSwKKwkweDhhLCAweDgxLCAweGRmLCAweDUxLCAweGE1LCAweGJhLCAweGYxLCAweDlkLCAweDhjLCAweDBmLCAweGVmLCAweDM3LAorCTB4YjEsIDB4YzYsIDB4MzIsIDB4MzMsIDB4ZmQsIDB4MjAsIDB4ZWQsIDB4NmUsIDB4M2MsIDB4N2YsIDB4MGIsIDB4ZmIsCisJMHgwYywgMHg4YSwgMHgyYSwgMHhiNywgMHhhZiwgMHg4ZCwgMHhlMCwgMHg1OSwgMHhjMSwgMHhmYywgMHg1MSwgMHhjOCwKKwkweGM1LCAweDdjLCAweDFjLCAweGM4LCAweDMxLCAweDRlLCAweGVkLCAweGVlLCAweDIyLCAweGVlLCAweDUzLCAweGEwLAorCTB4ODYsIDB4MzUsIDB4MzUsIDB4NTMsIDB4MjcsIDB4MWQsIDB4MzQsIDB4MWEsIDB4ODUsIDB4ZjYsIDB4MTUsIDB4YTEsCisJMHgwNiwgMHg0MiwgMHg0NCwgMHgxNSwgMHg2ZiwgMHhhNiwgMHgyNywgMHhjZiwgMHg1MCwgMHg0OSwgMHhmMywgMHgwYSwKKwkweDU0LCAweGY1LCAweDc3LCAweDUzLCAweGNiLCAweGQyLCAweGE4LCAweDM5LCAweDY3LCAweDUwLCAweGI4LCAweGE0LAorCTB4ZTMsIDB4OGUsIDB4ZmIsIDB4NDAsIDB4YTcsIDB4ODAsIDB4ZmUsIDB4YTUsIDB4Y2MsIDB4ZTYsIDB4NDUsIDB4NmEsCisJMHg1YSwgMHgwNSwgMHhjYywgMHg4ZiwgMHg1MSwgMHhkMywgMHhkZSwgMHhhYiwgMHhhOCwgMHhjMSwgMHgwYiwgMHg5OCwKKwkweDlmLCAweGIyLCAweDdhLCAweGY0LCAweDNjLCAweDQ2LCAweDA1LCAweGVmLCAweDdiLCAweGIxLCAweDk3LCAweGRmLAorCTB4MTUsIDB4ZjAsIDB4MjMsIDB4MmIsIDB4NGEsIDB4NjYsIDB4YTgsIDB4OTUsIDB4ZTQsIDB4YjQsIDB4M2MsIDB4OWYsCisJMHhjZSwgMHgzNSwgMHg5MiwgMHhkYiwgMHhlZCwgMHg4ZCwgMHg3ZCwgMHhkZCwgMHgxYSwgMHg3NCwgMHhjYywgMHhiNiwKKwkweGMxLCAweDllLCAweGRjLCAweDJlLCAweGQyLCAweDA3LCAweDFlLCAweGU3LCAweDc5LCAweGZlLCAweGMzLCAweGJjLAorCTB4NDMsIDB4NWEsIDB4ZTAsIDB4NTksIDB4MzEsIDB4N2QsIDB4ODUsIDB4ZDIsIDB4YjUsIDB4NTQsIDB4ZjYsIDB4YzgsCisJMHg3ZiwgMHgyYywgMHg3YiwgMHhiNywgMHhhZCwgMHhlOCwgMHhkYywgMHhhMywgMHhiOCwgMHg5ZiwgMHg3NCwgMHgxOSwKKwkweDNjLCAweGRiLCAweGI4LCAweDdmLCAweDAxLCAweGZlLCAweGQxLCAweDBjLCAweDU1LCAweDZhLCAweDk0LCAweDRkLAorCTB4NzIsIDB4ZTcsIDB4NTcsIDB4YjEsIDB4ZjIsIDB4NDEsIDB4NDcsIDB4YTMsIDB4OTgsIDB4NzUsIDB4ZTUsIDB4ZWIsCisJMHgxOSwgMHgxZCwgMHhmYiwgMHhjNiwgMHhiYiwgMHg5MCwgMHhiMywgMHg2MSwgMHg5OSwgMHg3MCwgMHhiYywgMHhlNSwKKwkweDYzLCAweDQyLCAweDVjLCAweGY0LCAweDg1LCAweDI4LCAweDA0LCAweGRlLCAweGNjLCAweDI1LCAweDlhLCAweDJkLAorCTB4MWIsIDB4MzQsIDB4NmQsIDB4NjEsIDB4ODQsIDB4OGUsIDB4YmQsIDB4NzIsIDB4OWQsIDB4OGMsIDB4NWMsIDB4OWUsCisJMHhkYywgMHgzNywgMHhmMSwgMHhkNywgMHg1NywgMHgwOCwgMHgzZSwgMHg3OSwgMHhhMywgMHhmMywgMHg3YiwgMHhkNiwKKwkweGM3LCAweGNjLCAweDgyLCAweGE0LCAweDExLCAweGEyLCAweDM3LCAweDdmLCAweDJmLCAweDlhLCAweDVmLCAweDY3LAorCTB4MzQsIDB4NDIsIDB4ZDQsIDB4MmEsIDB4N2MsIDB4YWUsIDB4OGIsIDB4M2IsIDB4YjMsIDB4N2YsIDB4MTMsIDB4ZDUsCisJMHhmYSwgMHhiZSwgMHg1OSwgMHhlZiwgMHg0MCwgMHgzZSwgMHgwZiwgMHg2MywgMHg5ZiwgMHhhOCwgMHhkZSwgMHhlNSwKKwkweDdiLCAweDk4LCAweGQ0LCAweDg0LCAweGRlLCAweDVhLCAweGQ4LCAweGFmLCAweDU2LCAweDc2LCAweGIxLCAweDdmLAorCTB4YzAsIDB4YzYsIDB4NGIsIDB4NjYsIDB4YjUsIDB4ZTMsIDB4OTYsIDB4NWYsIDB4YTAsIDB4MjUsIDB4MzMsIDB4ZWUsCisJMHhjZiwgMHg5NiwgMHg1NywgMHhlOSwgMHgwMSwgMHgzZSwgMHhjNywgMHgzNCwgMHg4MiwgMHg2MywgMHg2NiwgMHg0ZiwKKwkweGQyLCAweDFiLCAweDFhLCAweDk1LCAweGYwLCAweDBjLCAweDFlLCAweGNkLCAweDBlLCAweDI5LCAweDkxLCAweGJmLAorCTB4OGIsIDB4ZWYsIDB4MGIsIDB4YmEsIDB4YzUsIDB4OGMsIDB4NmUsIDB4MzEsIDB4YTMsIDB4MWIsIDB4Y2IsIDB4ZTgsCisJMHg5ZSwgMHgxYywgMHhhMCwgMHg3YiwgMHg5MiwgMHhlOSwgMHhiMCwgMHgzNywgMHhjYywgMHhmNiwgMHg4NiwgMHhkOSwKKwkweDVlLCAweDNkLCAweGRiLCAweDViLCAweGNkLCAweGY2LCAweDYyLCAweGVjLCAweDNiLCAweDkwLCAweGNmLCAweDlkLAorCTB4MDksIDB4MTUsIDB4YzgsIDB4ZTgsIDB4ODksIDB4MDcsIDB4MjMsIDB4OWYsIDB4YzIsIDB4ZDgsIDB4NzMsIDB4YWYsCisJMHhjNywgMHhkYSwgMHgxOCwgMHg1ZCwgMHhmMCwgMHgyZCwgMHg2YSwgMHgyNywgMHgwZSwgMHg2NCwgMHg2ZiwgMHg1MywKKwkweDk0LCAweGE4LCAweGEwLCAweDFkLCAweGEzLCAweDllLCAweDc3LCAweDUzLCAweGQ0LCAweGZjLCAweDBhLCAweDZjLAorCTB4MzcsIDB4Y2EsIDB4NzQsIDB4ZTUsIDB4MWEsIDB4MTQsIDB4ZDEsIDB4NGMsIDB4NjYsIDB4YWQsIDB4NTUsIDB4YWEsCisJMHhjMCwgMHg1ZiwgMHg1NCwgMHhkOCwgMHg2ZiwgMHg1MiwgMHgzZSwgMHgzNywgMHg5MywgMHgwYSwgMHhkNiwgMHhhOSwKKwkweGExLCAweDU2LCAweDVjLCAweGFiLCAweDQ5LCAweDZlLCAweDM5LCAweGQyLCAweGM4LCAweDUyLCAweDAzLCAweDFiLAorCTB4N2IsIDB4MWEsIDB4NTQsIDB4NGQsIDB4NGMsIDB4N2EsIDB4NGYsIDB4M2IsIDB4MjUsIDB4ZTMsIDB4YjQsIDB4ZDksCisJMHhiZCwgMHgyZSwgMHhkZSwgMHgzYywgMHhlOCwgMHhkMCwgMHg5NSwgMHg2NCwgMHg5YywgMHg3ZSwgMHg5NSwgMHg5NCwKKwkweGU5LCAweGI1LCAweGM0LCAweGE2LCAweDU3LCAweDEzLCAweDUyLCAweDIzLCAweDFmLCAweDdlLCAweDZjLCAweDViLAorCTB4NzQsIDB4MzksIDB4MTksIDB4ZDQsIDB4ZmIsIDB4MDcsIDB4YWMsIDB4NzcsIDB4NzMsIDB4N2YsIDB4NDAsIDB4ZTYsCisJMHhiZSwgMHg4MCwgMHgxYSwgMHg1YSwgMHg5MCwgMHhlMiwgMHg0MCwgMHg5YywgMHhlMiwgMHg4MCwgMHhmNCwgMHhhOSwKKwkweDU2LCAweGI3LCAweDc5LCAweGJmLCAweDA2LCAweDBjLCAweDVhLCAweGYxLCAweGMzLCAweGJkLCAweDFhLCAweGVjLAorCTB4MTIsIDB4MjMsIDB4MGEsIDB4ZDQsIDB4ZWQsIDB4NTEsIDB4ZGEsIDB4YzgsIDB4NWQsIDB4ZjEsIDB4ZGMsIDB4ZTcsCisJMHg2MywgMHhlYywgMHhmNiwgMHhjZSwgMHgxYSwgMHg5OCwgMHhiZCwgMHhkZCwgMHhiNiwgMHg3ZiwgMHhjNiwgMHgxOSwKKwkweGEzLCAweGIwLCAweDliLCAweDQ2LCAweDRmLCAweGU4LCAweDg4LCAweDFmLCAweGVmLCAweDIzLCAweDhkLCAweDYzLAorCTB4YzAsIDB4ZDksIDB4YjQsIDB4ZTksIDB4NGMsIDB4OTcsIDB4NjgsIDB4NjIsIDB4ZDMsIDB4YTQsIDB4OGQsIDB4NGUsCisJMHg5MSwgMHg5YywgMHhkZSwgMHgyOCwgMHhhZCwgMHg3NCwgMHg0YiwgMHgzNCwgMHg3OSwgMHg0OSwgMHhjNywgMHhkZSwKKwkweDVkLCAweDM0LCAweGI5LCAweGE2LCAweGRhLCAweDFjLCAweGNiLCAweDMxLCAweDc0LCAweDNjLCAweGQxLCAweDEzLAorCTB4ZjAsIDB4ZDEsIDB4MTIsIDB4NGQsIDB4YWMsIDB4YmIsIDB4ZDIsIDB4N2YsIDB4NTYsIDB4YmMsIDB4OTYsIDB4YWYsCisJMHhkMSwgMHgwZiwgMHhlOCwgMHhkYSwgMHg1YywgMHgwMSwgMHg3NywgMHhiMiwgMHhjOSwgMHg5ZiwgMHgxZSwgMHgzYywKKwkweGNmLCAweDgwLCAweDliLCAweGYxLCAweDFjLCAweDk4LCAweGVlLCAweDcxLCAweDFkLCAweDUyLCAweDk5LCAweDlmLAorCTB4NDksIDB4MTMsIDB4OTcsIDB4NGMsIDB4MjUsIDB4ZWUsIDB4YjIsIDB4Y2UsIDB4ZDgsIDB4MDcsIDB4Y2QsIDB4Y2MsCisJMHgwNywgMHg3NSwgMHgyNSwgMHgzYSwgMHg1NywgMHhjNCwgMHg1OSwgMHg3ZiwgMHgxMiwgMHg5MSwgMHgwNywgMHhkZiwKKwkweDAzLCAweDk2LCAweGFkLCAweDU0LCAweGJlLCAweDBmLCAweGY5LCAweDMwLCAweGQ3LCAweGUzLCAweGI1LCAweDliLAorCTB4ZDksIDB4M2MsIDB4ZjMsIDB4MDAsIDB4NDYsIDB4ZjgsIDB4ZmIsIDB4MjksIDB4NjIsIDB4M2MsIDB4MzgsIDB4YzYsCisJMHgzNCwgMHg0NSwgMHg5YSwgMHg1OCwgMHg2MywgMHg4YywgMHhjMSwgMHhkOCwgMHhlMywgMHg3NywgMHhiZSwgMHhkYiwKKwkweDA4LCAweGQ1LCAweGExLCAweDk1LCAweGZhLCAweDhjLCAweDBkLCAweGI5LCAweDU0LCAweDg5LCAweDE5LCAweDc1LAorCTB4NjAsIDB4ODgsIDB4ZWEsIDB4OTUsIDB4MzAsIDB4ZjIsIDB4NzksIDB4M2YsIDB4ZDMsIDB4ZDIsIDB4ZjgsIDB4YjcsCisJMHhhNSwgMHhiZCwgMHg2MywgMHhmOCwgMHhhZiwgMHgwZSwgMHg3OSwgMHg1NiwgMHg2OSwgMHhhYSwgMHg3YywgMHg1YywKKwkweGFlLCAweDYxLCAweGFlLCAweGNmLCAweDZiLCAweGQ2LCAweDZkLCAweDZiLCAweDc4LCAweGVmLCAweGU3LCAweDMyLAorCTB4MjAsIDB4YzYsIDB4YmQsIDB4MTYsIDB4NGUsIDB4MzEsIDB4MzIsIDB4YmQsIDB4ZjAsIDB4ZmUsIDB4NDYsIDB4MTksCisJMHhiNiwgMHgwMSwgMHhhNiwgMHgxMSwgMHg3NCwgMHg0OSwgMHhkNCwgMHhlYiwgMHhlOCwgMHhjMCwgMHgxYywgMHhmNSwKKwkweDhiLCAweDJhLCAweGQzLCAweGQ5LCAweGNjLCAweDA3LCAweGY3LCAweDVmLCAweGQ3LCAweDk1LCAweGY4LCAweDljLAorCTB4ZTcsIDB4ZmMsIDB4ODEsIDB4OTgsIDB4N2UsIDB4MTIsIDB4M2EsIDB4OTgsIDB4OWEsIDB4NmYsIDB4ZjEsIDB4ZmUsCisJMHhiZSwgMHg0MSwgMHhkZSwgMHg1YSwgMHhjMywgMHhkMiwgMHg2MSwgMHg1MywgMHgxNSwgMHgwNiwgMHg4ZCwgMHg3ZiwKKwkweDM0LCAweDA2LCAweDViLCAweGJiLCAweDRlLCAweDhiLCAweDdlLCAweDA3LCAweDc5LCAweDBhLCAweGU0LCAweGY1LAorCTB4NzQsIDB4N2EsIDB4YjksIDB4YzMsIDB4YmEsIDB4MzAsIDB4NjksIDB4NzIsIDB4NWQsIDB4ODgsIDB4ZTcsIDB4N2MsCisJMHhiNiwgMHhjOSwgMHhiYiwgMHhkMCwgMHgwYiwgMHhlMSwgMHg4NiwgMHg1MywgMHhmMywgMHgzNywgMHg2MCwgMHg5ZiwKKwkweDhkLCAweDNlLCAweGRiLCAweGM2LCAweDkwLCAweDNhLCAweGYxLCAweGQ2LCAweGU2LCAweDYwLCAweGQ3LCAweDk5LAorCTB4NGMsIDB4NDYsIDB4YjYsIDB4OTcsIDB4NGUsIDB4ZWQsIDB4OGEsIDB4NGEsIDB4MTcsIDB4MmIsIDB4OWYsIDB4MDgsCisJMHhkNSwgMHg2MywgMHg4YywgMHgyZCwgMHg0MCwgMHhiNywgMHhkOCwgMHhkNywgMHhjMywgMHhiZSwgMHhhNCwgMHgwMCwKKwkweDFkLCAweGZlLCAweDRkLCAweDE4LCAweGMwLCAweGRmLCAweDhiLCAweDE1LCAweGNjLCAweGFmLCAweDlkLCAweDg2LAorCTB4YWMsIDB4MWEsIDB4NjgsIDB4NTMsIDB4MWYsIDB4NjMsIDB4NzksIDB4MTYsIDB4M2EsIDB4ZjksIDB4ZmQsIDB4YmMsCisJMHhmOSwgMHhiNywgMHgyNSwgMHhiZiwgMHg1MSwgMHg5YSwgMHhkZSwgMHgxYywgMHhhNSwgMHgxMywgMHhmZCwgMHg1MSwKKwkweDlhLCAweDM4LCAweGNiLCAweDM0LCAweDQyLCAweGI0LCAweDJiLCAweDhjLCAweDkxLCAweGYwLCAweDUxLCAweDRmLAorCTB4ZWEsIDB4YTEsIDB4YWMsIDB4YTksIDB4N2MsIDB4NGYsIDB4YWMsIDB4NmYsIDB4MTIsIDB4YWQsIDB4ZjYsIDB4ZjksCisJMHgwYywgMHg3ZCwgMHg4MCwgMHhhNywgMHg0YSwgMHg0NywgMHg3ZSwgMHg0MiwgMHg3NCwgMHhhNCwgMHhjZiwgMHhiNCwKKwkweGRiLCAweGJhLCAweDAzLCAweDVmLCAweDBiLCAweDNjLCAweDJkLCAweGUyLCAweDVjLCAweGE0LCAweDc5LCAweGM4LAorCTB4NzksIDB4MWIsIDB4MTEsIDB4NzIsIDB4NTgsIDB4MTUsIDB4YmYsIDB4MDUsIDB4ZTQsIDB4MzUsIDB4YmUsIDB4ZmYsCisJMHgxYywgMHhlMiwgMHg4ZiwgMHhiMSwgMHg3YywgMHgwYiwgMHg3NywgMHgyZiwgMHg1MCwgMHhkYiwgMHg1ZiwgMHhjNCwKKwkweDFlLCAweGI2LCAweGYxLCAweDUxLCAweGFjLCAweGVmLCAweDQ2LCAweDJlLCAweGM4LCAweDcyLCAweDg1LCAweGM1LAorCTB4YjksIDB4NjIsIDB4MmYsIDB4ZTIsIDB4NjAsIDB4MDQsIDB4ZjgsIDB4N2YsIDB4YmYsIDB4M2UsIDB4OWMsIDB4MmIsCisJMHhiMCwgMHhjZiwgMHgzZSwgMHg4MCwgMHhkYywgMHg4MCwgMHg0NCwgMHg1ZCwgMHg2MiwgMHg1ZSwgMHhmYiwgMHgzMSwKKwkweDhlLCAweGUwLCAweGZkLCAweDAwLCAweGY2LCAweDBlLCAweGU2LCAweDg5LCAweDljLCAweGVlLCAweDZlLCAweDM5LAorCTB4MDIsIDB4MzEsIDB4YjEsIDB4ODYsIDB4NTgsIDB4NTksIDB4OWYsIDB4NjEsIDB4Y2MsIDB4ODAsIDB4M2QsIDB4ZDgsCisJMHhhNiwgMHg0NSwgMHg2MCwgMHhiOCwgMHgwOSwgMHgxZSwgMHg2YywgMHhkYiwgMHgyMiwgMHg2YywgMHhjOCwgMHg3OSwKKwkweGNlLCAweGEyLCAweGM5LCAweDRkLCAweDhlLCAweGViLCAweDM0LCAweDhmLCAweGM0LCAweGRiLCAweDc5LCAweDg0LAorCTB4NjQsIDB4NGMsIDB4MzQsIDB4MTMsIDB4ZjYsIDB4ODksIDB4ZDAsIDB4OGMsIDB4Y2UsIDB4NmUsIDB4MDksIDB4YzQsCisJMHg3MCwgMHgzOSwgMHg2NiwgMHg1YywgMHhkYiwgMHg5YywgMHgwNSwgMHhiZCwgMHg4NiwgMHhmOCwgMHhhOCwgMHg5YSwKKwkweGY1LCAweGIzLCAweDI5LCAweGE2LCAweGQ1LCAweDM3LCAweDFkLCAweGU5LCAweDkzLCAweGNkLCAweGM0LCAweGMyLAorCTB4M2IsIDB4NjMsIDB4NWEsIDB4OGUsIDB4NjEsIDB4NGMsIDB4NGYsIDB4NjEsIDB4MDQsIDB4N2MsIDB4OGIsIDB4MzQsCisJMHgyMSwgMHg1NiwgMHhmYywgMHgzMSwgMHhhYSwgMHhjMywgMHgzZiwgMHg0MywgMHhlMCwgMHg1YSwgMHgxZCwgMHhiOCwKKwkweDE2LCAweDBmLCAweGUwLCAweDVhLCAweGZjLCAweDk5LCAweGI4LCAweDA2LCAweGNjLCAweGVhLCAweDAyLCAweGIzLAorCTB4NTAsIDB4MjMsIDB4YmMsIDB4MDYsIDB4OGMsIDB4N2YsIDB4MTUsIDB4ZTcsIDB4NWQsIDB4ZWUsIDB4ZWUsIDB4ODQsCisJMHg3NSwgMHg4YywgMHg3MywgMHg4YywgMHg3NywgMHgzMywgMHhmNCwgMHhlNiwgMHhjMSwgMHg3ZiwgMHgxNSwgMHhlZiwKKwkweGRhLCAweGMwLCAweDA2LCAweDkzLCAweGJlLCAweDdiLCAweGYwLCAweGRlLCAweDk4LCAweDc3LCAweDA2LCAweDk4LAorCTB4NjcsIDB4N2MsIDB4MzYsIDB4ZTYsIDB4MzUsIDB4MTgsIDB4ZjMsIDB4NzQsIDB4ZjgsIDB4NjAsIDB4MDMsIDB4NzgsCisJMHhhMCwgMHhhZSwgMHgwZCwgMHg5ZSwgMHhkMywgMHhjMSwgMHgzOSwgMHgzYywgMHhhNywgMHg2NywgMHg3OSwgMHg1NSwKKwkweGE1LCAweDFlLCAweGZjLCAweDVmLCAweGYzLCAweGY4LCAweDljLCAweDM5LCAweGQ2LCAweGJiLCAweGQ0LCAweGZmLAorCTB4MTMsIDB4YmEsIDB4NGQsIDB4YzYsIDB4MzQsIDB4ZmMsIDB4NjIsIDB4NmQsIDB4OTQsIDB4YjQsIDB4YjMsIDB4OWYsCisJMHhmYSwgMHgzZCwgMHg2YSwgMHgwMywgMHhjNCwgMHgzYiwgMHhmZSwgMHg2ZCwgMHhlNiwgMHgzYywgMHg0YSwgMHhjMCwKKwkweDFjLCAweDlkLCAweDBhLCAweDZiLCAweDA2LCAweGRlLCAweDk1LCAweGExLCAweDdkLCAweDQ3LCAweDkwLCAweDc3LAorCTB4YjQsIDB4YzAsIDB4OWQsIDB4N2YsIDB4OWYsIDB4OWYsIDB4ZmIsIDB4YmMsIDB4YTcsIDB4NDQsIDB4ZWEsIDB4YmEsCisJMHhlYiwgMHgzOCwgMHhhYSwgMHhlYiwgMHg1ZiwgMHgwMywgMHg0NiwgMHhiYywgMHhlMywgMHgzMSwgMHgwZSwgMHgzNiwKKwkweGUxLCAweDBkLCAweDA1LCAweGQyLCAweGQ3LCAweGM0LCAweDY5LCAweDIzLCAweGUwLCAweGIzLCAweDFiLCAweDBlLAorCTB4ZTIsIDB4ZGQsIDB4NzksIDB4MDksIDB4N2UsIDB4YzQsIDB4MzksIDB4ZjQsIDB4MjIsIDB4ZTIsIDB4YTcsIDB4OTYsCisJMHhjNSwgMHg2YSwgMHhhYiwgMHg5ZiwgMHg5ZiwgMHhiOSwgMHgwZiwgMHg3MiwgMHgxYiwgMHhhMCwgMHgxOSwgMHhkYywKKwkweGNiLCAweDcxLCAweDIwLCAweGM0LCAweDA5LCAweGRjLCAweDQ5LCAweGMzLCAweDM5LCAweGM2LCAweGJhLCAweDQ5LAorCTB4ODUsIDB4NzUsIDB4ZDYsIDB4OGIsIDB4MGIsIDB4ZmEsIDB4NDksIDB4NmIsIDB4ODEsIDB4YWUsIDB4MGYsIDB4ZTEsCisJMHhjMiwgMHg3MywgMHhmZCwgMHhlYiwgMHgzYSwgMHg2MywgMHhhOSwgMHg4NiwgMHgxOCwgMHgyZCwgMHhlMiwgMHg1YywKKwkweDYzLCAweDliLCAweDE3LCAweDY1LCAweGJjLCAweDk4LCAweGRlLCAweDJiLCAweDlmLCAweGQ4LCAweGE2LCAweDY3LAorCTB4N2MsIDB4OWIsIDB4MmEsIDB4MzMsIDB4OGUsIDB4YjEsIDB4MWMsIDB4OWEsIDB4YzQsIDB4ZDQsIDB4NTIsIDB4ODYsCisJMHhhOSwgMHg5MywgMHhiMCwgMHg2NywgMHg0OSwgMHhjNiwgMHhhNywgMHhlYSwgMHgzZCwgMHg5OCwgMHhlMSwgMHhlYSwKKwkweDVlLCAweDhjLCAweDNjLCAweDI3LCAweGIyLCAweDc4LCAweGQxLCAweDIxLCAweDJmLCAweGYzLCAweDJkLCAweDkxLAorCTB4YjYsIDB4Y2UsIDB4MzUsIDB4MDQsIDB4ZGYsIDB4ZTksIDB4YWYsIDB4ZjAsIDB4NmQsIDB4YzYsIDB4MGEsIDB4ZjYsCisJMHg0ZiwgMHg4OSwgMHhhOSwgMHg5OCwgMHg5ZiwgMHg4MiwgMHhjYywgMHg4YywgMHgwZiwgMHg0YywgMHhjNywgMHhmNCwKKwkweDNiLCAweGQxLCAweGZkLCAweDA1LCAweDc0LCAweGQ2LCAweDBlLCAweDc0LCAweDk4LCAweGRiLCAweDY0LCAweDFhLAorCTB4YzYsIDB4ODgsIDB4N2QsIDB4ZDgsIDB4MWYsIDB4MzEsIDB4M2UsIDB4NDAsIDB4NjcsIDB4NGMsIDB4M2IsIDB4OWUsCisJMHhjNSwgMHg2MywgMHgxNSwgMHg2YiwgMHg1YywgMHgwMywgMHhjYiwgMHhmOCwgMHgyMiwgMHgyMywgMHhlMCwgMHg3YiwKKwkweDcwLCAweDdkLCAweGNjLCAweGY5LCAweDkxLCAweDZiLCAweDUyLCAweGFlLCAweDNkLCAweGYzLCAweDVhLCAweGQ1LAorCTB4OWIsIDB4YTksIDB4ZGQsIDB4YWQsIDB4ZWUsIDB4YjQsIDB4MDYsIDB4ZWIsIDB4Y2UsIDB4NDMsIDB4YzYsIDB4Y2UsCisJMHg3NSwgMHhlNywgMHg0MSwgMHgyMywgMHhhZCwgMHgzYiwgMHhhNywgMHg4ZCwgMHhiYiwgMHhkNywgMHg5ZCwgMHgzOSwKKwkweGVkLCAweGJkLCAweGViLCAweGNlLCAweDY2LCAweDk3LCAweGNmLCAweGRjLCAweDE5LCAweDJmLCAweDU2LCAweGUwLAorCTB4YWYsIDB4YWQsIDB4MjQsIDB4YmYsIDB4MjcsIDB4ZjcsIDB4MDYsIDB4YTEsIDB4NTksIDB4M2IsIDB4OWIsIDB4ZGEsCisJMHhiZSwgMHgyOSwgMHg3ZCwgMHgxMSwgMHgzOCwgMHhiMiwgMHgzOSwgMHgwYiwgMHgzYiwgMHhhMiwgMHhhNiwgMHgxZSwKKwkweGMyLCAweDhlLCAweDljLCAweDg2LCAweDc1LCAweDVhLCAweDAyLCAweDQ2LCAweGIzLCAweDNlLCAweDhiLCAweDE5LAorCTB4NGUsIDB4NjAsIDB4ZjQsIDB4M2UsIDB4MDYsIDB4NGUsIDB4ZTQsIDB4ZjgsIDB4YzIsIDB4ZmMsIDB4ZmUsIDB4OWYsCisJMHhmMCwgMHg4NSwgMHhjYywgMHgxMSwgMHhlMCwgMHg4NCwgMHgxOSwgMHgzMCwgMHg1ZSwgMHg0YSwgMHg1OSwgMHg1MCwKKwkweDkzLCAweDBiLCAweGIxLCAweGUwLCAweDczLCAweDBjLCAweDBjLCAweGY2LCAweDRjLCAweGVjLCAweDBmLCAweDQ1LAorCTB4N2EsIDB4Y2IsIDB4NjcsIDB4OWYsIDB4NDAsIDB4Y2YsIDB4ZTQsIDB4NzEsIDB4OGUsIDB4NjQsIDB4M2MsIDB4ZGUsCisJMHgxMiwgMHg2ZiwgMHg3OSwgMHgxMSwgMHhlNiwgMHhhYSwgMHhiMCwgMHgzZCwgMHhmYiwgMHhjMywgMHhhMiwgMHg3MiwKKwkweDY0LCAweGMzLCAweDA0LCAweDFkLCAweGZiLCAweGM0LCAweGY4LCAweDFkLCAweGJkLCAweDUwLCAweGRhLCAweGIzLAorCTB4NzAsIDB4N2QsIDB4ZmMsIDB4ZWYsIDB4ZmEsIDB4YzgsIDB4MWIsIDB4NzcsIDB4ZjEsIDB4OTEsIDB4Y2IsIDB4OTksCisJMHg4ZiwgMHgyNCwgMHhmNywgMHhmMCwgMHg5MSwgMHgzNywgMHgzZSwgMHhhNywgMHg4ZiwgMHhiOCwgMHhlNSwgMHgwZiwKKwkweDUxLCAweDNmLCAweGJkLCAweDBkLCAweDM5LCAweDQyLCAweDRiLCAweDg4LCAweDBmLCAweGZkLCAweDlkLCAweGZhLAorCTB4OTQsIDB4ZDAsIDB4ZDQsIDB4NWYsIDB4NjQsIDB4OWQsIDB4YTUsIDB4NzksIDB4YTUsIDB4ODUsIDB4NzcsIDB4ZWQsCisJMHgxNSwgMHhhZSwgMHg5NywgMHgzOSwgMHhlNywgMHhhNCwgMHhiOSwgMHg2NSwgMHhlMiwgMHhjNSwgMHhkNCwgMHgzZiwKKwkweDI2LCAweDVlLCAweDExLCAweGUyLCAweGMyLCAweDBlLCAweGZlLCAweGMwLCAweDM1LCAweGY0LCAweDU1LCAweGY4LAorCTB4NTUsIDB4OGIsIDB4ZmUsIDB4MTcsIDB4MzUsIDB4MzQsIDB4NjMsIDB4NzgsIDB4YzUsIDB4M2MsIDB4ZGUsIDB4YzksCisJMHhlZCwgMHg5ZiwgMHhkYiwgMHhiZSwgMHg0MCwgMHhlNywgMHhhZCwgMHgzZCwgMHhkMCwgMHhkYiwgMHhhMywgMHhkNCwKKwkweGZhLCAweGIxLCAweGNlLCAweDdkLCAweDA1LCAweGZjLCAweGUyLCAweDcxLCAweDlkLCAweDYzLCAweDE3LCAweDdkLAorCTB4MjQsIDB4OWUsIDB4MDcsIDB4ZWIsIDB4NmMsIDB4ZjgsIDB4YTUsIDB4NWYsIDB4YzgsIDB4ZTMsIDB4NjUsIDB4MDAsCisJMHhmYiwgMHg0ZiwgMHhhMSwgMHg1NCwgMHhiOSwgMHgyMywgMHhhZiwgMHgwYywgMHhmNSwgMHhkNCwgMHgxYSwgMHg3YSwKKwkweGVhLCAweDU4LCAweGYyLCAweGUwLCAweGJlLCAweDJiLCAweGQ1LCAweDYzLCAweDViLCAweGY2LCAweGQxLCAweDViLAorCTB4YTIsIDB4MjUsIDB4N2IsIDB4ZTksIDB4MDMsIDB4MDUsIDB4MmEsIDB4MmQsIDB4NjYsIDB4M2UsIDB4ZTMsIDB4MjAsCisJMHgxZiwgMHhiOSwgMHg3ZSwgMHgwMywgMHhmYywgMHhiOSwgMHhkNiwgMHg4MCwgMHgxYywgMHhiNCwgMHg4YSwgMHg1OCwKKwkweGJjLCAweDgwLCAweDNjLCAweGJjLCAweDAyLCAweGJkLCAweGQ0LCAweDY1LCAweDZjLCAweDhjLCAweGQxLCAweDM1LAorCTB4ZTQsIDB4ZmUsIDB4MzYsIDB4ZjIsIDB4ZjMsIDB4MTksIDB4ZTgsIDB4YTYsIDB4MDUsIDB4ZGQsIDB4YzQsIDB4NDksCisJMHgxYSwgMHgyNywgMHhkNywgMHhhMCwgMHg5YiwgMHg4NSwgMHgwMSwgMHhkZCwgMHgyYywgMHhmYywgMHg0NywgMHhmZCwKKwkweGM1LCAweDFmLCAweDkxLCAweDZiLCAweGNkLCAweDY1LCAweDFkLCAweGYzLCAweDU3LCAweDEyLCAweDk5LCAweDViLAorCTB4OTcsIDB4NWEsIDB4MWQsIDB4NmEsIDB4ZGMsIDB4MWYsIDB4OWMsIDB4ZTYsIDB4ZGEsIDB4OGUsIDB4NmIsIDB4YjMsCisJMHhmOSwgMHg5NSwgMHgwYSwgMHhlNiwgMHhmYSwgMHgyNiwgMHg0NSwgMHhkMCwgMHhjZiwgMHgzNywgMHgwZiwgMHhkMywKKwkweGIyLCAweDE2LCAweGIwLCAweDRmLCAweGUzLCAweDNkLCAweGExLCAweDQ2LCAweDc0LCAweDE4LCAweGY1LCAweDU2LAorCTB4MzIsIDB4YmUsIDB4OGMsIDB4N2UsIDB4MWMsIDB4YmUsIDB4ZDUsIDB4YTAsIDB4MTAsIDB4NzIsIDB4ODYsIDB4ZTAsCisJMHhiZCwgMHhkMCwgMHgzMSwgMHhjZCwgMHhkNSwgMHgwZSwgMHhmNywgMHg1MSwgMHgwZCwgMHhlMiwgMHg1ZSwgMHhiZCwKKwkweGQ3LCAweGJmLCAweDA5LCAweDdlLCAweDIzLCAweGRmLCAweDQwLCAweDdmLCAweGViLCAweDM0LCAweDgxLCAweGQzLAorCTB4Y2YsIDB4YzIsIDB4NmQsIDB4NWIsIDB4MzYsIDB4N2YsIDB4Y2IsIDB4NjAsIDB4MWMsIDB4MWQsIDB4MDcsIDB4OGYsCisJMHhhNywgMHgwYiwgMHhhOSwgMHhhZiwgMHg4ZSwgMHg4MywgMHgwZiwgMHhjNywgMHgxMSwgMHhlMSwgMHgzYywgMHhkNiwKKwkweDY1LCAweGVlLCAweDdmLCAweGU1LCAweDgxLCAweGZhLCAweGJlLCAweDQwLCAweDM5LCAweDg2LCAweDM1LCAweGExLAorCTB4MzcsIDB4ZDYsIDB4NzUsIDB4ZTQsIDB4OWQsIDB4MmMsIDB4ZTQsIDB4ZGYsIDB4NmQsIDB4NWEsIDB4YzAsIDB4ODEsCisJMHhmYSwgMHgxYywgMHg2MywgMHg5NiwgMHgwMiwgMHhkZiwgMHhhMywgMHhiNCwgMHhhZiwgMHg0NCwgMHgxZiwgMHg1MiwKKwkweDlmLCAweDQzLCAweGRlLCAweGI2LCAweDhiLCAweDcyLCAweDZjLCAweDI0LCAweGE3LCAweGIzLCAweGZkLCAweGFhLAorCTB4ZGMsIDB4YzcsIDB4ZjksIDB4YTIsIDB4OTksIDB4YzgsIDB4N2UsIDB4NDIsIDB4YTksIDB4NzYsIDB4YzksIDB4YTksCisJMHhmYiwgMHhlOCwgMHg5MywgMHg1MCwgMHg3YiwgMHhiNCwgMHgxMywgMHhjZSwgMHhmNSwgMHg3MywgMHhhNiwgMHgyYSwKKwkweGIxLCAweGVmLCAweDA2LCAweDY4LCAweGYwLCAweGJjLCAweDQ5LCAweDZhLCAweGRkLCAweGU3LCAweGVmLCAweDBjLAorCTB4ZmMsIDB4MGQsIDB4MDQsIDB4ZjEsIDB4NjMsIDB4ZDMsIDB4NmUsIDB4ZDAsIDB4NDMsIDB4YWUsIDB4NzEsIDB4OTYsCisJMHgyYiwgMHhhYywgMHhjYiwgMHgzYSwgMHg4NSwgMHg3OSwgMHgxZiwgMHg1MiwgMHhkMywgMHg2ZiwgMHgzMywgMHhlZiwKKwkweDY2LCAweDY3LCAweDk5LCAweDg4LCAweDFmLCAweGM2LCAweDVkLCAweDlmLCAweDczLCAweGRlLCAweDk3LCAweDM0LAorCTB4YmEsIDB4NDksIDB4MTIsIDB4MzcsIDB4YWQsIDB4ODcsIDB4OTEsIDB4MGIsIDB4MGYsIDB4ODMsIDB4MjYsIDB4OTQsCisJMHg5OCwgMHg5MywgMHhmNiwgMHgxNSwgMHgzOSwgMHg4ZCwgMHhhNywgMHgwZCwgMHhmMywgMHg1OCwgMHhkNiwgMHg4NywKKwkweGRmLCAweDQzLCAweGM0LCAweDU5LCAweDI1LCAweDNiLCAweDZmLCAweGQwLCAweDY3LCAweGRmLCAweDg3LCAweGNmLAorCTB4ZGUsIDB4YzgsIDB4ZjYsIDB4MDAsIDB4ODcsIDB4ZWQsIDB4MDIsIDB4ZjYsIDB4YjEsIDB4OGMsIDB4OGMsIDB4MmYsCisJMHg0YywgMHhiMywgMHg2NSwgMHgwYywgMHhmMywgMHg5OSwgMHhkYywgMHg4MSwgMHhjNywgMHg0NywgMHgwMywgMHgzYywKKwkweDZjLCAweGJlLCAweDliLCAweDU1LCAweDRmLCAweDdiLCAweDZjLCAweGY5LCAweDU3LCAweDg3LCAweDllLCAweGQxLAorCTB4OTMsIDB4ZGMsIDB4YTcsIDB4ZTIsIDB4MWUsIDB4NWMsIDB4OWIsIDB4YzUsIDB4NzIsIDB4ZmUsIDB4OTcsIDB4YzUsCisJMHg2MSwgMHhiZSwgMHhhNywgMHhiMiwgMHg3MywgMHhmYywgMHgzNCwgMHgzNiwgMHgzYywgMHg4YywgMHhjOSwgMHg4ZCwKKwkweDAxLCAweGQ5LCAweDhkLCAweDFkLCAweGNlLCAweGRkLCAweGE1LCAweGEzLCAweDM1LCAweDUwLCAweGQ4LCAweGRmLAorCTB4YjQsIDB4ODAsIDB4ZjMsIDB4MzMsIDB4OWUsIDB4YjcsIDB4ZmQsIDB4ODMsIDB4N2QsIDB4ZjUsIDB4YjMsIDB4N2QsCisJMHhkNCwgMHhmOCwgMHg5YywgMHgzZSwgMHhmYSwgMHg3MiwgMHg4NywgMHg3MSwgMHgyMywgMHhmNSwgMHhkMSwgMHhmYSwKKwkweDFkLCAweDNlLCAweDhhLCAweGZhLCAweGM4LCAweGNlLCAweGZkLCAweDkzLCAweGUzLCAweDI1LCAweGY3LCAweGNmLAorCTB4ZmMsIDB4OTksIDB4NjMsIDB4MWMsIDB4YjgsIDB4OWMsIDB4ZTEsIDB4NWMsIDB4MTMsIDB4MzgsIDB4NTcsIDB4OTUsCisJMHg3OSwgMHhjZiwgMHgyZCwgMHg1NywgMHgyOSwgMHg4ZCwgMHhlNSwgMHg1NSwgMHhjNCwgMHg3MiwgMHg1NSwgMHhlMywKKwkweDNjLCAweGM4LCAweDMxLCAweGNjLCAweDc0LCAweDFjLCAweGM3LCAweDRjLCAweDM3LCAweDk2LCAweGQxLCAweDYxLAorCTB4NDQsIDB4M2MsIDB4NTcsIDB4YjMsIDB4NzgsIDB4NmUsIDB4NzUsIDB4NWQsIDB4YTcsIDB4OWEsIDB4YzUsIDB4NzMsCisJMHgwYiwgMHgzMSwgMHhkYywgMHhjZSwgMHhlMiwgMHhiOSwgMHg5NSwgMHhjNSwgMHgzMywgMHg3ZiwgMHhkZiwgMHhkMywKKwkweDJhLCAweDljLCAweDFiLCAweDVkLCAweDI3LCAweDA2LCAweGM2LCAweGI1LCAweDI1LCAweGNmLCAweDA2LCAweGVlLAorCTB4MDksIDB4MTksIDB4YmIsIDB4NzksIDB4NWMsIDB4ZGMsIDB4ZjEsIDB4MWQsIDB4MGMsIDB4ZjcsIDB4ZjksIDB4MzQsCisJMHhkNywgMHhkNCwgMHg5MCwgMHg2YiwgMHgyZSwgMHgyMCwgMHhkNywgMHhmNCwgMHgwNiwgMHhiZSwgMHg4MywgMHg5ZCwKKwkweDk3LCAweGI5LCAweGU2LCAweGViLCAweGM1LCAweDNjLCAweGQ3LCAweGY0LCAweGIyLCAweDVjLCAweGQzLCAweDkzLAorCTB4YjksIDB4ZTYsIDB4YWIsIDB4NDUsIDB4Y2UsIDB4MzUsIDB4NGQsIDB4M2EsIDB4NWEsIDB4MWMsIDB4Y2MsIDB4MzUsCisJMHhjZCwgMHhhMSwgMHg1YywgMHg5MywgMHhkMywgMHhmMiwgMHhmYywgMHg0ZSwgMHhiOSwgMHgyNiwgMHhkNywgMHhkOSwKKwkweGJkLCAweDZhLCAweDkyLCAweDdjLCAweDBmLCAweGNiLCAweGNhLCAweGI4LCAweGM0LCAweDc4LCAweDljLCAweGQ2LAorCTB4ZmMsIDB4NTcsIDB4OTIsIDB4M2MsIDB4OTYsIDB4NGUsIDB4ZTMsIDB4MWMsIDB4YmMsIDB4NzcsIDB4NzcsIDB4OGEsCisJMHgyNSwgMHgzMywgMHg4YiwgMHhhNSwgMHhkZCwgMHgyOSwgMHg0ZCwgMHg3NywgMHgzMCwgMHg5ZSwgMHg0ZSwgMHgxNywKKwkweDg3LCAweGUzLCAweDI5LCAweGU3LCAweDkzLCAweGM3LCAweDUzLCAweGNhLCAweGYzLCAweDNkLCAweGFkLCAweGNjLAorCTB4MzUsIDB4MDIsIDB4ZmEsIDB4NmQsIDB4ZDcsIDB4NWYsIDB4YzAsIDB4ZWMsIDB4YTUsIDB4ZmUsIDB4MmMsIDB4NmEsCisJMHg2ZSwgMHg5ZCwgMHhhZSwgMHhlNiwgMHg3OCwgMHgyMywgMHhiZiwgMHgwOSwgMHg2MSwgMHhlYywgMHhlNywgMHhiMiwKKwkweDE2LCAweGI3LCAweGQ3LCAweDdhLCAweGE4LCAweGJiLCAweGRmLCAweDAxLCAweDhlLCAweDVjLCAweDk0LCAweGViLAorCTB4OWYsIDB4ODgsIDB4YWIsIDB4NjgsIDB4MDksIDB4ZGIsIDB4NWUsIDB4YmUsIDB4ZWYsIDB4MTcsIDB4MzgsIDB4Y2YsCisJMHhiNSwgMHhjZSwgMHhlMywgMHhlOSwgMHhkOSwgMHg3ZSwgMHhhZSwgMHgxMywgMHg1ZSwgMHhlNywgMHhiOSwgMHhiZiwKKwkweDIzLCAweDlmLCAweGEwLCAweDY2LCAweGRmLCAweGRlLCAweGNiLCAweGZkLCAweDhmLCAweDg3LCAweDNiLCAweDNiLAorCTB4ZjQsIDB4ZmEsIDB4NTAsIDB4MGYsIDB4OTQsIDB4ZjYsIDB4M2UsIDB4NzUsIDB4ZjksIDB4OGQsIDB4OTcsIDB4NmIsCisJMHg5NywgMHhlOCwgMHgwYiwgMHgyYSwgMHg5ZCwgMHhhMiwgMHhhZiwgMHhmOSwgMHgzYywgMHhhNywgMHg1MiwgMHhlZCwKKwkweDMxLCAweDIxLCAweDllLCAweDQxLCAweDFkLCAweGYzLCAweGQ0LCAweDUwLCAweDFkLCAweDUzLCAweGE0LCAweDg5LAorCTB4NDcsIDB4MDYsIDB4N2IsIDB4YzgsIDB4MmQsIDB4MzEsIDB4MzEsIDB4ZWQsIDB4OWUsIDB4MGYsIDB4MjksIDB4NTQsCisJMHg2YSwgMHgxYiwgMHg1YywgMHhlNywgMHg2ZSwgMHhkNywgMHhiNSwgMHg0NCwgMHhmYiwgMHg2ZSwgMHgwOSwgMHg3NSwKKwkweDlhLCAweGYzLCAweGUyLCAweDZmLCAweDMzLCAweDVkLCAweDYxLCAweGVkLCAweGRjLCAweDJkLCAweDYwLCAweDZiLAorCTB4NTUsIDB4N2UsIDB4MGIsIDB4MGUsIDB4MzcsIDB4ZjgsIDB4MWMsIDB4N2UsIDB4YzcsIDB4OTgsIDB4NzAsIDB4Y2QsCisJMHg3MywgMHhiNywgMHhlZiwgMHhiMywgMHgzYSwgMHhlYywgMHhlMiwgMHgzYSwgMHhjNywgMHgzNSwgMHg5MiwgMHhkZiwKKwkweDM3LCAweDU2LCAweDdjLCAweGY3LCAweGE3LCAweDJkLCAweDRhLCAweDcxLCAweGEyLCAweGVhLCAweDJmLCAweDQxLAorCTB4MTYsIDB4ZDQsIDB4OWQsIDB4ZDYsIDB4MzIsIDB4NmMsIDB4MzMsIDB4MGQsIDB4NWMsIDB4NzIsIDB4OWQsIDB4NDcsCisJMHg1NCwgMHg1YiwgMHhlMiwgMHhmOCwgMHgyYSwgMHg3OCwgMHg2YiwgMHg4ZiwgMHg3MCwgMHg0ZCwgMHhmOSwgMHhiMSwKKwkweDU4LCAweGVkLCAweGNiLCAweDdjLCAweGVjLCAweGIzLCAweDhmLCAweGM0LCAweGM5LCAweDVlLCAweDk1LCAweGM3LAorCTB4MzAsIDB4ZTEsIDB4ZTcsIDB4MDIsIDB4NzEsIDB4MmQsIDB4YjksIDB4YjMsIDB4ZmYsIDB4ZDgsIDB4NTYsIDB4ZjUsCisJMHg5YywgMHg2MywgMHhkNSwgMHhiYSwgMHg4ZSwgMHhiNSwgMHhkMCwgMHg1NSwgMHhlMSwgMHhkZCwgMHhmYiwgMHg0YywKKwkweGRhLCAweDAzLCAweDliLCAweDIwLCAweDFmLCAweGQzLCAweDdkLCAweDkwLCAweGU1LCAweDkyLCAweDYzLCAweGM1LAorCTB4YTgsIDB4MGYsIDB4YmYsIDB4YTcsIDB4YjksIDB4ZDYsIDB4NTMsIDB4YTQsIDB4OTgsIDB4NTQsIDB4YmEsIDB4MjUsCisJMHhkMiwgMHg2ZiwgMHgzMywgMHg4ZSwgMHg1NSwgMHhkZCwgMHgzZSwgMHhmYiwgMHgxNiwgMHhjZSwgMHg2NiwgMHg5OSwKKwkweDM4LCAweDQ2LCAweDM5LCAweDVmLCAweDJlLCAweDJhLCAweDRiLCAweGQwLCAweGQxLCAweGIxLCAweDhkLCAweDVkLAorCTB4YzAsIDB4MzUsIDB4Y2UsIDB4OTcsIDB4MDcsIDB4YjIsIDB4NmYsIDB4NTAsIDB4YjAsIDB4MGYsIDB4ZWUsIDB4ZmYsCisJMHhmYSwgMHgxZCwgMHhmNSwgMHg2NywgMHg1ZSwgMHg2NywgMHgzMiwgMHhiZCwgMHgxMCwgMHhjZCwgMHg3OSwgMHgzZSwKKwkweDlmLCAweDIwLCAweGNiLCAweGQ0LCAweGNjLCAweDI1LCAweGQ5LCAweDEzLCAweGNkLCAweGEyLCAweGVlLCAweGUzLAorCTB4NTEsIDB4YTAsIDB4MjYsIDB4ZTIsIDB4ZWYsIDB4NjEsIDB4YWUsIDB4NTUsIDB4YzcsIDB4NzMsIDB4MzUsIDB4N2IsCisJMHg2ZSwgMHg3MiwgMHhiZiwgMHgzNCwgMHhjZiwgMHgzYywgMHhiOCwgMHg2ZiwgMHhlMiwgMHhmOCwgMHhmOSwgMHgyNywKKwkweDZlLCAweGI3LCAweDkyLCAweDgyLCAweDkwLCAweDE4LCAweDAwLCAweDAwLCAweDAwIH07CiAKIHN0YXRpYyBjb25zdCB1MzIgYm54Ml9UUEFUX2IwOUZ3RGF0YVsoMHgwLzQpICsgMV0gPSB7IDB4MCB9Owogc3RhdGljIGNvbnN0IHUzMiBibngyX1RQQVRfYjA5RndSb2RhdGFbKDB4MC80KSArIDFdID0geyAweDAgfTsKIAogc3RhdGljIHN0cnVjdCBmd19pbmZvIGJueDJfdHBhdF9md18wOSA9IHsKKwkvKiBGaXJtd2FyZSB2ZXJzaW9uOiAgMy43LjEgKi8KIAkudmVyX21ham9yCQkJPSAweDMsCi0JLnZlcl9taW5vcgkJCT0gMHg0LAotCS52ZXJfZml4CQkJPSAweDMsCisJLnZlcl9taW5vcgkJCT0gMHg3LAorCS52ZXJfZml4CQkJPSAweDEsCiAKIAkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMDg2MCwKIAogCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDA4MDAsCi0JLnRleHRfbGVuCQkJPSAweDE4NjQsCisJLnRleHRfbGVuCQkJPSAweDE4OGMsCiAJLnRleHRfaW5kZXgJCQk9IDB4MCwKIAkuZ3pfdGV4dAkJCT0gYm54Ml9UUEFUX2IwOUZ3VGV4dCwKIAkuZ3pfdGV4dF9sZW4JCQk9IHNpemVvZihibngyX1RQQVRfYjA5RndUZXh0KSwKIAotCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDIwODAsCisJLmRhdGFfYWRkcgkJCT0gMHgwODAwMjBjMCwKIAkuZGF0YV9sZW4JCQk9IDB4MCwKIAkuZGF0YV9pbmRleAkJCT0gMHgwLAogCS5kYXRhCQkJCT0gYm54Ml9UUEFUX2IwOUZ3RGF0YSwKIAotCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDIwODgsCi0JLnNic3NfbGVuCQkJPSAweDJjLAorCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDIwYzgsCisJLnNic3NfbGVuCQkJPSAweDMwLAogCS5zYnNzX2luZGV4CQkJPSAweDAsCiAKLQkuYnNzX2FkZHIJCQk9IDB4MDgwMDIwYzAsCisJLmJzc19hZGRyCQkJPSAweDA4MDAyMTAwLAogCS5ic3NfbGVuCQkJPSAweDg1MCwKIAkuYnNzX2luZGV4CQkJPSAweDAsCiAKQEAgLTMyNjcsNzY4ICszMjg5LDc3MCBAQAogfTsKIAogc3RhdGljIHU4IGJueDJfVFhQX2IwOUZ3VGV4dFtdID0gewotLyoJMHgxZiwgMHg4YiwgMHgwOCwgMHgwMCwgMHgwZSwgMHgzNCwgMHhlNywgMHg0NSwgMHgwMCwgMHgwMywgKi8KLQkJCQkJCQkJICAgIDB4Y2QsIDB4N2MsCi0JMHg2ZiwgMHg3MCwgMHg1YiwgMHhkNywgMHg5NSwgMHhkZiwgMHg3OSwgMHhlZiwgMHg4MSwgMHgyNCwgMHg0OCwgMHhkMSwKLQkweGQ0LCAweDEzLCAweDE3LCAweDU2LCAweDYwLCAweDg3LCAweDcxLCAweDAwLCAweGYxLCAweDgxLCAweDY2LCAweDQyLAotCTB4YWUsIDB4MDQsIDB4MmIsIDB4NGMsIDB4YzIsIDB4NmQsIDB4ZDEsIDB4ZjgsIDB4MDUsIDB4MDAsIDB4MjksIDB4NDgsCi0JMHhkMSwgMHg2YywgMHg2OCwgMHg5NSwgMHg0OSwgMHg5NCwgMHg1NCwgMHhlMywgMHg2MiwgMHg0MSwgMHg1MiwgMHhmMSwKLQkweGI2LCAweGNlLCAweDU0LCAweDliLCAweDc4LCAweDVhLCAweDRkLCAweGViLCAweGFkLCAweDExLCAweDkwLCAweGZhLAotCTB4ZTcsIDB4ODUsIDB4MDQsIDB4ZGEsIDB4NjIsIDB4NDQsIDB4N2YsIDB4YzgsIDB4MDcsIDB4MTgsIDB4ODAsIDB4MjQsCi0JMHg2ZiwgMHhmMiwgMHg0NCwgMHgyOCwgMHg5YiwgMHg3ZiwgMHhmZCwgMHhkMCwgMHhhYywgMHg1MCwgMHg0YSwgMHhkNiwKLQkweGJhLCAweDliLCAweGI0LCAweGEzLCAweGVkLCAweDY2LCAweDY3LCAweDNiLCAweGQzLCAweDJmLCAweDFjLCAweDQ5LAotCTB4ZjYsIDB4N2EsIDB4NzcsIDB4NjcsIDB4MzYsIDB4ZGEsIDB4NmUsIDB4YjYsIDB4YWIsIDB4YjYsIDB4YjIsIDB4ZDEsCi0JMHhkZiwgMHhlZiwgMHhiZSwgMHhmNywgMHgyOCwgMHg5MCwgMHhhNiwgMHg2YywgMHhjYiwgMHhiMywgMHhlZCwgMHg5NCwKLQkweDMzLCAweDE4LCAweGUwLCAweGRkLCAweDc3LCAweGRmLCAweGI5LCAweGU3LCAweDllLCAweDczLCAweGVlLCAweDM5LAotCTB4ZTcsIDB4NzcsIDB4ZWUsIDB4N2QsIDB4MGMsIDB4OGIsIDB4NzQsIDB4ODksIDB4ZjcsIDB4ZjcsIDB4MDAsIDB4M2UsCi0JMHg5MSwgMHg0MywgMHg4NywgMHg5ZiwgMHhkOSwgMHgzZSwgMHhiMiwgMHhmZCwgMHgxMywgMHhmOCwgMHhmOSwgMHgwOSwKLQkweDMxLCAweDAyLCAweDA2LCAweDZmLCAweGJlLCAweDY5LCAweDg4LCAweDY0LCAweGZmLCAweDQyLCAweDNlLCAweGYwLAotCTB4MWYsIDB4MWUsIDB4MzcsIDB4N2QsIDB4ZmEsIDB4ZmMsIDB4NDgsIDB4NTAsIDB4NGYsIDB4NGMsIDB4ZWMsIDB4NGEsCi0JMHg1YSwgMHgxMiwgMHgzNCwgMHgxMiwgMHhiMiwgMHg2ZiwgMHhjYSwgMHgxMiwgMHhiMSwgMHg5ZCwgMHhhMSwgMHg0OCwKLQkweDRhLCAweGRlLCAweDZhLCAweGU2LCAweDQzLCAweDAxLCAweDYxLCAweGZiLCAweDQ3LCAweDEyLCAweDc3LCAweDllLAotCTB4ZmIsIDB4YzksIDB4YTcsIDB4YTMsIDB4YjcsIDB4Y2EsIDB4ODYsIDB4MDQsIDB4Y2QsIDB4NDQsIDB4NTYsIDB4Y2MsCi0JMHgwMSwgMHgwOSwgMHhmNiwgMHhlMSwgMHg5OSwgMHg2ZiwgMHgzZiwgMHg2YSwgMHgxOCwgMHhkMiwgMHhiMywgMHhjYSwKLQkweGFiLCAweGNjLCAweDk1LCAweDU2LCAweDlhLCAweDNmLCAweDc5LCAweDM0LCAweDJjLCAweGJmLCAweDU3LCAweDBmLAotCTB4YzksIDB4ZjcsIDB4ZWEsIDB4YTYsIDB4NWMsIDB4YWMsIDB4MDcsIDB4YjQsIDB4ZjEsIDB4OTIsIDB4MjksIDB4YjMsCi0JMHhhNSwgMHg2OSwgMHhmZCwgMHg0OCwgMHgzMSwgMHgyZiwgMHhhOSwgMHg3YSwgMHg1NiwgMHgyZiwgMHgyYywgMHg5OCwKLQkweDNkLCAweGM5LCAweGYzLCAweDM5LCAweDdkLCAweDc2LCAweGExLCAweGI3LCAweDI3LCAweDc1LCAweDdlLCAweDVhLAotCTB4MmYsIDB4MTQsIDB4YzMsIDB4M2QsIDB4YzksIDB4YmEsIDB4ZDksIDB4OTMsIDB4NWEsIDB4MGMsIDB4ZTEsIDB4YmEsCi0JMHhiNywgMHgyNywgMHhiOSwgMHgxOCwgMHg5ZCwgMHgxNywgMHhkOSwgMHg4YSwgMHgzZSwgMHhlMSwgMHg5ZSwgMHg1NCwKLQkweDI5LCAweDlhLCAweDE1LCAweGU5LCAweDhmLCAweGJmLCAweDJhLCAweDdkLCAweDNkLCAweGE5LCAweGZhLCAweDNmLAotCTB4ZDEsIDB4MWIsIDB4YTYsIDB4MjYsIDB4ODUsIDB4NWYsIDB4MTUsIDB4MzMsIDB4OWMsIDB4YjgsIDB4ZDUsIDB4N2MsCi0JMHhjOCwgMHhkMiwgMHhjNCwgMHhiNCwgMHg2ZSwgMHgzNywgMHhiNywgMHg1OCwgMHg0MSwgMHhjOSwgMHg5ZCwgMHhlZSwKLQkweDE0LCAweDViLCAweGNkLCAweGM5LCAweDk0LCAweGRjLCAweGUyLCAweDkwLCAweGI5LCAweDJjLCAweDZkLCAweDYyLAotCTB4ODcsIDB4ZmMsIDB4ZWIsIDB4NjYsIDB4MzMsIDB4MTksIDB4ZmYsIDB4MzIsIDB4ZTUsIDB4OGEsIDB4NzEsIDB4YTQsCi0JMHg2NywgMHhiYywgMHgyZSwgMHg5MiwgMHgyYywgMHgwNSwgMHgyNSwgMHgxOSwgMHg3ZiwgMHhhYiwgMHhlOSwgMHgzZSwKLQkweDEzLCAweGM0LCAweDk4LCAweDgxLCAweDllLCAweGIxLCAweDUyLCAweGIzLCAweDk5LCAweDhlLCAweDgzLCAweDdlLAotCTB4ZGMsIDB4N2YsIDB4YjYsIDB4NGQsIDB4Y2EsIDB4MjEsIDB4YmIsIDB4M2MsIDB4MWIsIDB4ZmYsIDB4NmYsIDB4YmEsCi0JMHhhYiwgMHgxMywgMHhjZSwgMHg5MSwgMHhkNywgMHhiNiwgMHhlOCwgMHg1NiwgMHg1ZSwgMHg3MiwgMHgyMSwgMHgyOSwKLQkweDE3LCAweGUyLCAweDlmLCAweDkyLCAweDEzLCAweGYxLCAweDMwLCAweGU2LCAweDE3LCAweDk0LCAweDYzLCAweDcxLAotCTB4YzgsIDB4ZDEsIDB4M2EsIDB4YWMsIDB4MjUsIDB4ZWIsIDB4ZDEsIDB4NDgsIDB4NTYsIDB4OWUsIDB4OTcsIDB4ZTQsCi0JMHg2MiwgMHhiZiwgMHg5OSwgMHgxNiwgMHg4YywgMHg2ZCwgMHgzNSwgMHgzZiwgMHg5YSwgMHg4YywgMHg2MywgMHhiYywKLQkweGUxLCAweGZmLCAweGQ1LCAweGI0LCAweDQzLCAweGQxLCAweDZjLCAweDU5LCAweDA2LCAweGE1LCAweDUwLCAweGVhLAotCTB4OGYsIDB4ZmYsIDB4NGMsIDB4MzQsIDB4MDksIDB4NWEsIDB4NjIsIDB4NGYsIDB4NTksIDB4MjYsIDB4ZTQsIDB4MTYsCi0JMHgxZCwgMHg0YywgMHgxOSwgMHg0ZCwgMHhkOSwgMHg4MywgMHhmMSwgMHg5MywgMHgxNiwgMHhlZSwgMHhkNywgMHg2NSwKLQkweGIzLCAweDZlLCAweGI1LCAweDRiLCAweGMxLCAweDk0LCAweDUwLCAweDk3LCAweDNjLCAweDIyLCAweDg1LCAweGQzLAotCTB4NjgsIDB4OGYsIDB4ZGIsIDB4YmQsIDB4M2EsIDB4OWUsIDB4YzksIDB4OGMsIDB4YjAsIDB4NGQsIDB4MzQsIDB4MjMsCi0JMHgxMSwgMHgzMywgMHg1MywgMHhlMCwgMHhhOCwgMHhlMiwgMHgwYywgMHg2MiwgMHhmYywgMHg5OCwgMHhkZCwgMHhhOSwKLQkweDk5LCAweGIyLCAweDYyLCAweDA2LCAweGE0LCAweGVhLCAweGM0LCAweGVjLCAweGIwLCAweGQ2LCAweDJlLCAweGM3LAotCTB4NjIsIDB4NWQsIDB4OTAsIDB4NjksIDB4MTgsIDB4YjQsIDB4ZTUsIDB4OWIsIDB4N2EsIDB4MjIsIDB4MTYsIDB4Y2UsCi0JMHg0MSwgMHg1MSwgMHgzYSwgMHg2NCwgMHgzNSwgMHgwNywgMHg3ZSwgMHhlNiwgMHhlMiwgMHg1OSwgMHgyZCwgMHg1NSwKLQkweGZmLCAweDhhLCAweDk2LCAweDNjLCAweGJmLCAweDVmLCAweGRiLCAweDc1LCAweDFlLCAweDdkLCAweGVhLCAweGU3LAotCTB4M2MsIDB4YmIsIDB4MGIsIDB4ODMsIDB4MzcsIDB4MWQsIDB4Y2YsIDB4YjIsIDB4MWQsIDB4M2MsIDB4MmIsIDB4ZGUsCi0JMHhkMSwgMHgwNiwgMHg1ZCwgMHgzNiwgMHgyNiwgMHg0MywgMHgzZCwgMHg0OSwgMHhhNSwgMHg0YiwgMHhmMiwgMHhhNiwKLQkweDRiLCAweDZlLCAweDQyLCAweDkzLCAweDVlLCAweGNiLCAweDk2LCAweGUwLCAweDI3LCAweGExLCAweGNmLCAweDQ1LAotCTB4ZTgsIDB4NzIsIDB4MzEsIDB4MjIsIDB4NDcsIDB4NGEsIDB4MTIsIDB4ZDIsIDB4ODUsIDB4NjMsIDB4NjUsIDB4ZjUsCi0JMHhhYSwgMHg0MywgMHg3YiwgMHg4MCwgMHg2ZSwgMHhhMSwgMHhmYiwgMHg4MiwgMHhjMywgMHg2NywgMHhhMSwgMHhjMywKLQkweDUyLCAweDFhLCAweGYyLCAweGM5LCAweDYwLCAweGVjLCAweDdkLCAweGRhLCAweDllLCAweGVhLCAweGE0LCAweDk2LAotCTB4ODEsIDB4OWQsIDB4MTQsIDB4NGUsIDB4MGYsIDB4NDEsIDB4NzcsIDB4ZDEsIDB4YzgsIDB4OGEsIDB4NmMsIDB4OTYsCi0JMHg4MiwgMHg2NSwgMHg0NSwgMHhiZSwgMHgyYywgMHhkZCwgMHg3MiwgMHg2YywgMHhkMSwgMHg5MiwgMHgyMywgMHg4YiwKLQkweDIxLCAweGM5LCAweDliLCAweDUxLCAweGIzLCAweDI2LCAweDdkLCAweGQ5LCAweDRkLCAweDg5LCAweDFlLCAweDc5LAotCTB4ZmUsIDB4NzQsIDB4MzQsIDB4NTMsIDB4OTYsIDB4N2UsIDB4ZmIsIDB4NzUsIDB4ZGMsIDB4Y2YsIDB4OWQsIDB4YTQsCi0JMHg0ZSwgMHgyNSwgMHg5ZiwgMHg4YSwgMHgxYiwgMHg5MiwgMHg4NSwgMHg0ZCwgMHgxOCwgMHhkNiwgMHgxZiwgMHg4MSwKLQkweGZmLCAweGU2LCAweDczLCAweGM5LCAweDc4LCAweDM0LCAweDJjLCAweGEyLCAweDRiLCAweGVhLCAweDBiLCAweGZkLAotCTB4ZTYsIDB4NmUsIDB4ODksIDB4OWEsIDB4MTksIDB4Y2EsIDB4M2YsIDB4M2UsIDB4MDQsIDB4M2QsIDB4ZmMsIDB4NzcsCi0JMHhjYSwgMHgxZSwgMHhiNCwgMHhhOCwgMHhlMywgMHhhMSwgMHhmMCwgMHgzMSwgMHhlOCwgMHgzMiwgMHhhYiwgMHg3NCwKLQkweGRjLCAweDgzLCAweGYxLCAweDAzLCAweDllLCAweGVkLCAweGY0LCAweDQ4LCAweGJlLCAweDdhLCAweGMzLCAweDkzLAotCTB4NDMsIDB4OGYsIDB4Y2MsIDB4NTcsIDB4YmIsIDB4YTUsIDB4MDAsIDB4MWQsIDB4MTYsIDB4YzQsIDB4OTIsIDB4YzIsCi0JMHhmOSwgMHgzZiwgMHhmNywgMHhkYSwgMHgyZCwgMHg5OSwgMHgzYiwgMHhmZiwgMHgzMiwgMHhlYywgMHhlMSwgMHhiMCwKLQkweGI2LCAweGJmLCAweGZlLCAweDBiLCAweGNkLCAweGIzLCAweDFmLCAweGQ4LCAweDVmLCAweDUwLCAweGVjLCAweDg5LAotCTB4YTAsIDB4OWMsIDB4YWIsIDB4YmIsIDB4ZjYsIDB4NTcsIDB4YzEsIDB4MWEsIDB4YjMsIDB4NGQsIDB4MWIsIDB4YjYsCi0JMHhmNCwgMHhjNiwgMHg2YSwgMHg5ZiwgMHg3MywgMHhmNSwgMHgzZSwgMHgzYywgMHgxYiwgMHg5NCwgMHgyMywgMHg3NSwKLQkweGY2LCAweGNmLCAweGMzLCAweGM2LCAweDgyLCAweGIyLCAweGY0LCAweDY4LCAweGI3LCAweDY0LCAweGQxLCAweDVlLAotCTB4NTgsIDB4MTQsIDB4M2IsIDB4MTksIDB4ZDcsIDB4ZjEsIDB4NGMsIDB4MGYsIDB4ZTYsIDB4YjIsIDB4MTUsIDB4OWYsCi0JMHgyZSwgMHg5OSwgMHhhYSwgMHg3NiwgMHhkOCwgMHg4NiwgMHgxNSwgMHg5MiwgMHhhOSwgMHgzYSwgMHhmNSwgMHg4ZiwKLQkweGVmLCAweDkyLCAweDZmLCAweDAzLCAweDk0LCAweDJmLCAweGRiLCAweGY5LCAweDFjLCAweGRiLCAweDRkLCAweGI0LAotCTB4YjcsIDB4YjYsIDB4ZDEsIDB4YjYsIDB4MzcsIDB4NTMsIDB4YTYsIDB4ODMsIDB4ODIsIDB4YjYsIDB4NWMsIDB4MjksCi0JMHg2NiwgMHhlZSwgMHhlNywgMHg3NywgMHg5ZCwgMHhmNiwgMHhkMCwgMHg2YSwgMHgwYiwgMHgwMSwgMHhmNCwgMHg4NywKLQkweDFlLCAweGFiLCAweDE4LCAweGViLCAweGY0LCAweDlkLCAweDY2LCAweGRiLCAweDA4LCAweGFlLCAweDJkLCAweDJjLAotCTB4YWEsIDB4MmUsIDB4OGUsIDB4MWQsIDB4MDAsIDB4NWYsIDB4YmEsIDB4NjQsIDB4YWIsIDB4OGEsIDB4YjcsIDB4MDgsCi0JMHg2ZCwgMHhjMCwgMHg5ZCwgMHg0NywgMHg5ZiwgMHhjYywgMHgyZSwgMHg3NiwgMHhmNywgMHhhNCwgMHgxNywgMHhkOSwKLQkweDllLCAweDBjLCAweDFiLCAweDk4LCAweGU3LCAweDU0LCAweDVjLCAweDFhLCAweDczLCAweDcxLCAweGJkLCAweDNmLAotCTB4MDAsIDB4YmUsIDB4YTYsIDB4YjEsIDB4ZTAsIDB4MzAsIDB4MGYsIDB4OGYsIDB4YzcsIDB4MDYsIDB4ZWUsIDB4ZjcsCi0JMHhjYSwgMHhkNCwgMHg3OSwgMHhmNiwgMHhlNSwgMHgxOCwgMHg4NSwgMHgyZCwgMHhiYSwgMHgyNCwgMHhjMCwgMHgxYiwKLQkweDNlLCAweDU2LCAweDE0LCAweGY3LCAweDNiLCAweDMxLCAweDRlLCAweDM3LCAweDZjLCAweDI3LCAweDgzLCAweDMxLAotCTB4OWIsIDB4OGYsIDB4MjcsIDB4ZTMsIDB4YmQsIDB4OTIsIDB4NWQsIDB4ZWQsIDB4MmIsIDB4YjAsIDB4M2IsIDB4ZjYsCi0JMHgxZiwgMHg1YywgMHhkNywgMHgxNywgMHhmMiwgMHgzZCwgMHgwZiwgMHg5YSwgMHg4YiwgMHg5ZCwgMHg5MCwgMHgyMSwKLQkweGRiLCAweDc1LCAweGYwLCAweGRjLCAweDAxLCAweDFlLCAweDgyLCAweDk4LCAweDRmLCAweDNmLCAweGQ2LCAweDQzLAotCTB4MDcsIDB4ZTgsIDB4NmYsIDB4YzIsIDB4OWMsIDB4M2EsIDB4NjUsIDB4ZmEsIDB4NzQsIDB4MmYsIDB4NzQsIDB4NjEsCi0JMHhhMiwgMHg2ZiwgMHg1MCwgMHg5ZSwgMHgyZiwgMHg0NSwgMHg2MSwgMHgwMywgMHhlYywgMHgwZiwgMHgxZCwgMHgyYywKLQkweDQ2LCAweGMzLCAweDU1LCAweGIxLCAweDY1LCAweDJlLCAweGRlLCAweDAxLCAweGZiLCAweDZhLCAweDM2LCAweDY3LAotCTB4NjAsIDB4MWYsIDB4ZGYsIDB4NTEsIDB4ZmUsIDB4NjIsIDB4YzgsIDB4MWMsIDB4ZDMsIDB4MjQsIDB4ZGYsIDB4OTEsCi0JMHgzOCwgMHgwYywgMHg3ZSwgMHhhMiwgMHg0ZiwgMHg4OSwgMHhmMCwgMHg3YSwgMHg4NywgMHhjNiwgMHgzNSwgMHgwYiwKLQkweDM5LCAweDcyLCAweDZjLCAweGY4LCAweGE0LCAweGFkLCAweDkwLCAweDIxLCAweGZkLCAweDU2LCAweDFmLCAweGVjLAotCTB4MzksIDB4YWMsIDB4ZmMsIDB4YzksIDB4ZDgsIDB4ODYsIDB4ZmUsIDB4MjQsIDB4M2EsIDB4NTEsIDB4YzYsIDB4NTgsCi0JMHg4NSwgMHhmMywgMHgwMSwgMHhmYSwgMHhiMCwgMHg1MSwgMHgyYywgMHg1NywgMHg3OSwgMHgwMCwgMHg2YiwgMHg2ZiwKLQkweDU2LCAweGQ5LCAweGM3LCAweDA5LCAweGNlLCAweGI3LCAweGY5LCAweGY5LCAweDM4LCAweGY5LCAweGUyLCAweDdjLAotCTB4NmQsIDB4M2MsIDB4NGIsIDB4MWIsIDB4OGMsIDB4MWUsIDB4YjYsIDB4ZDUsIDB4ZjgsIDB4MjcsIDB4YmMsIDB4ZjEsCi0JMHg1ZCwgMHhkZSwgMHgwYiwgMHhhNSwgMHgxZSwgMHgyZCwgMHhhNSwgMHg3OCwgMHhmMCwgMHhlOSwgMHg4OCwgMHgyYywKLQkweDlmLCAweGVjLCAweDM3LCAweGY3LCAweGMwLCAweDg2LCAweGU5LCAweGE3LCAweDk2LCAweDJmLCAweDUwLCAweGM3LAotCTB4YTAsIDB4MzEsIDB4NDIsIDB4MWQsIDB4OWIsIDB4OGEsIDB4YmYsIDB4ZTQsIDB4MjIsIDB4ZDcsIDB4OWUsIDB4ZjQsCi0JMHgxOSwgMHg0MiwgMHgxZiwgMHgwMSwgMHg5ZiwgMHg4YiwgMHhiNSwgMHgzOCwgMHhlYiwgMHhhZCwgMHhjNSwgMHg5YywKLQkweDQzLCAweGZiLCAweDdiLCAweDA2LCAweGNmLCAweGVhLCAweDMyLCAweDE2LCAweGEzLCAweDdmLCAweDc4LCAweDVlLAotCTB4NTIsIDB4ZjAsIDB4OTEsIDB4ZDAsIDB4YTMsIDB4NTQsIDB4MzEsIDB4OTcsIDB4NGEsIDB4YTksIDB4ZDUsIDB4NmYsCi0JMHhjMSwgMHhiNiwgMHg4NiwgMHhmZiwgMHhhZSwgMHhlOSwgMHhmYSwgMHg0MywgMHhmYSwgMHgwNiwgMHhmYSwgMHg5YSwKLQkweDgyLCAweGE5LCAweDQzLCAweDcyLCAweDNhLCAweDljLCAweDIxLCAweDc0LCAweDEzLCAweDRmLCAweDFhLCAweGQxLAotCTB4NGMsIDB4MTYsIDB4N2MsIDB4NGQsIDB4NTksIDB4NGQsIDB4YjEsIDB4MWUsIDB4MTMsIDB4NDQsIDB4MGMsIDB4ZjQsCi0JMHhhOSwgMHhjYiwgMHg0ZSwgMHhkZiwgMHgzZiwgMHgyZCwgMHgzYiwgMHhiZSwgMHgyZSwgMHhhOCwgMHg1NywgMHhlYSwKLQkweGMxLCAweGY3LCAweDExLCAweDAxLCAweGI5LCAweDBjLCAweGRmLCAweDM1LCAweDU3LCAweGVhLCAweDk2LCAweDA2LAotCTB4NzgsIDB4YmEsIDB4ZTIsIDB4ZjgsIDB4YjYsIDB4NjYsIDB4NzgsIDB4YjYsIDB4YzYsIDB4NjcsIDB4YmEsIDB4ZjEsCi0JMHg3YywgMHgwMCwgMHg3ZSwgMHg0ZCwgMHhmMiwgMHg0NiwgMHgwMiwgMHhiZiwgMHg4YiwgMHhhNCwgMHhjOSwgMHgzNiwKLQkweGRmLCAweGNlLCAweGI5LCAweDY2LCAweGEyLCAweDc2LCAweDU5LCAweGRhLCAweDI1LCAweDEzLCAweDQzLCAweGZjLAotCTB4NTgsIDB4ZDQsIDB4MzEsIDB4NTYsIDB4MWYsIDB4N2MsIDB4NzksIDB4NDAsIDB4MGUsIDB4OTYsIDB4NDIsIDB4ZjIsCi0JMHhkNSwgMHgxMiwgMHhlNywgMHg5NSwgMHhkNiwgMHg1MiwgMHhkMCwgMHg1YiwgMHg3MiwgMHhiMSwgMHgwOSwgMHg5ZCwKLQkweDhmLCAweGMzLCAweGU3LCAweDY1LCAweGI0LCAweDMxLCAweGY4LCAweDlmLCAweGRkLCAweGQ1LCAweGFmLCAweDY4LAotCTB4ZTksIDB4ZjMsIDB4NTksIDB4NmQsIDB4YmMsIDB4YmUsIDB4NWYsIDB4Y2IsIDB4OWMsIDB4OWYsIDB4ZDQsIDB4NzYsCi0JMHhiNSwgMHhmOCwgMHgyMiwgMHhkMSwgMHhkZSwgMHhkZCwgMHgxNywgMHg5ZCwgMHgzOCwgMHhjZCwgMHgzMSwgMHhmYiwKLQkweGUzLCAweDFiLCAweGZiLCAweGEyLCAweDVmLCAweDZhLCAweGFkLCAweGJlLCAweGE4LCAweDFmLCAweGJlLCAweDI4LAotCTB4MDMsIDB4NWYsIDB4MzQsIDB4N2UsIDB4ZGYsIDB4YmUsIDB4YTgsIDB4NWQsIDB4ZGYsIDB4ZDgsIDB4MTcsIDB4NzUsCi0JMHhlYiwgMHg3NywgMHg3ZCwgMHgxMSwgMHg2MywgMHhjZiwgMHhiZiwgMHhjNiwgMHhiNSwgMHgyOSwgMHhkYiwgMHg3NiwKLQkweGZhLCAweDcyLCAweDBlLCAweGMzLCAweDBmLCAweDZmLCAweDgyLCAweGFjLCAweGJiLCAweGI4LCAweDc2LCAweDIyLAotCTB4MDUsIDB4ZDgsIDB4ZmQsIDB4MzQsIDB4YzYsIDB4ZmEsIDB4NGQsIDB4ZDgsIDB4ZmIsIDB4YjYsIDB4OTgsIDB4NjUsCi0JMHgzZSwgMHhhMSwgMHhjNiwgMHg3ZCwgMHhhNywgMHhjZSwgMHhjNywgMHg1NiwgMHg3NSwgMHg0ZSwgMHgxZSwgMHhkZiwKLQkweDUzLCAweGU3LCAweGI2LCAweGFiLCAweDczLCAweGVhLCAweGJhLCAweDUzLCAweDY2LCAweGQ0LCAweGI4LCAweDRkLAotCTB4MDksIDB4M2MsIDB4MjYsIDB4ZjAsIDB4MmEsIDB4ZjIsIDB4NTksIDB4MjMsIDB4MTEsIDB4MDUsIDB4M2QsIDB4MWQsCi0JMHhlMywgMHg1MywgMHg1ZiwgMHgzMSwgMHhmMCwgMHgyMCwgMHhkMCwgMHg2ZiwgMHhiNywgMHhmMiwgMHg0NSwgMHhiYiwKLQkweGEwLCAweGY3LCAweDY1LCAweGU3LCAweGZlLCAweDc0LCAweDk1LCAweDY5LCAweGQxLCAweGQ1LCAweDllLCAweDM1LAotCTB4YmEsIDB4ZWEsIDB4OTAsIDB4ZTEsIDB4OTgsIDB4YWYsIDB4YTMsIDB4Y2QsIDB4OTIsIDB4OGMsIDB4NTEsIDB4NjcsCi0JMHhmNywgMHhhMywgMHhhYiwgMHg3ZiwgMHhhYSwgMHhmZiwgMHhmZCwgMHhlOCwgMHhlYSwgMHhiNywgMHhlZSwgMHhhMSwKLQkweGFiLCAweDdmLCAweGI1LCAweDRlLCAweDU3LCAweDk2LCAweGY5LCAweDgyLCAweDQ2LCAweGRhLCAweDhjLCAweDFmLAotCTB4ZjQsIDB4NDcsIDB4Y2QsIDB4OGYsIDB4NGUsIDB4MzEsIDB4N2YsIDB4YTgsIDB4NzMsIDB4NGQsIDB4ZmIsIDB4NzksCi0JMHgwNywgMHhkNywgMHhmMywgMHhhNSwgMHhhNiwgMHg2MSwgMHg1OSwgMHg5MCwgMHgxZCwgMHhkNywgMHgzNCwgMHhlNSwKLQkweDE2LCAweDM1LCAweDNmLCAweDRmLCAweGZlLCAweDExLCAweDNiLCAweGE2LCAweDEwLCAweDZiLCAweDVjLCAweDFlLAotCTB4ZGEsIDB4YTUsIDB4YmMsIDB4YzUsIDB4ZWQsIDB4M2YsIDB4NTUsIDB4NmEsIDB4ZmUsIDB4NDIsIDB4NGYsIDB4YmMsCi0JMHhkZCwgMHg0YywgMHg4ZSwgMHg1OCwgMHg1ZSwgMHgxYywgMHgwOCwgMHhjYSwgMHhkNywgMHhhYSwgMHhkMSwgMHhhYywKLQkweGFkLCAweDc1LCAweDRiLCAweGZlLCAweDQxLCAweGM0LCAweDllLCAweDEyLCAweGZkLCAweGQ3LCAweGQ2LCAweDdiLAotCTB4YzQsIDB4ZTgsIDB4M2UsIDB4MmYsIDB4NDYsIDB4NTcsIDB4YzEsIDB4MmIsIDB4ZjMsIDB4YWIsIDB4ZWYsIDB4YmUsCi0JMHhkNSwgMHgwOCwgMHhmMSwgMHgzYiwgMHg2NiwgMHhlZSwgMHg5MywgMHgyZiwgMHg3MywgMHg4ZSwgMHg4OCwgMHhmNywKLQkweDhjLCAweGZiLCAweDE2LCAweDczLCAweDllLCAweDdjLCAweDIwLCAweGQxLCAweDI1LCAweGY5LCAweDJkLCAweDVjLAotCTB4OGYsIDB4ZjQsIDB4NzMsIDB4ZjQsIDB4NWQsIDB4ZWQsIDB4MWUsIDB4ZGYsIDB4N2UsIDB4OGUsIDB4YTQsIDB4NzgsCi0JMHgzMywgMHgzMCwgMHg2NSwgMHhmNCwgMHg0MSwgMHgzZSwgMHg1NCwgMHhlMiwgMHgzYywgMHhkZSwgMHhmMiwgMHhlYywKLQkweDg5LCAweGI5LCAweDgyLCAweGI0LCAweGI5LCAweGJlLCAweDYxLCAweDJmLCAweDcyLCAweDAxLCAweGRhLCAweDgxLAotCTB4YWYsIDB4NzMsIDB4ZWEsIDB4OWIsIDB4MzksIDB4ODIsIDB4NDQsIDB4NzQsIDB4OGIsIDB4MzksIDB4ODIsIDB4OTgsCi0JMHg0NiwgMHg2MiwgMHg5ZiwgMHg2NiwgMHg0MywgMHhmNywgMHgzNiwgMHg3NCwgMHg2ZiwgMHg0MywgMHhmNywgMHgzNiwKLQkweDc0LCAweDlmLCAweGFjLCAweDFmLCAweGM2LCAweDNkLCAweDk1LCAweDg3LCAweDgwLCAweDE3LCAweDk3LCAweDdlLAotCTB4ZGEsIDB4YTUsIDB4MGYsIDB4M2UsIDB4YjcsIDB4NGEsIDB4NGUsIDB4ZTksIDB4ODQsIDB4ZjMsIDB4NDUsIDB4YWUsCi0JMHhhMSwgMHhmYywgMHhmNSwgMHhiOCwgMHhlNiwgMHhmYSwgMHg2YiwgMHhkMiwgMHhjYiwgMHhlMCwgMHhmOSwgMHhkYiwKLQkweDk4LCAweGE3LCAweGFkLCAweGViLCAweGQ2LCAweDVkLCAweDk5LCAweGNjLCAweGI1LCAweGM4LCAweDY0LCAweGQ2LAotCTB4YTEsIDB4OGMsIDB4ZDgsIDB4OWYsIDB4M2UsIDB4NzcsIDB4NWEsIDB4YWYsIDB4YWMsIDB4Y2EsIDB4NjUsIDB4MmYsCi0JMHg3OCwgMHhlOCwgMHhlMCwgMHhkYywgMHhiZCwgMHg3OSwgMHg5MCwgMHg3ZSwgMHhhZiwgMHg0NywgMHhmZiwgMHg2ZiwKLQkweGQxLCAweDg3LCAweGZlLCAweDc1LCAweGEzLCAweDcxLCAweDM5LCAweDI2LCAweDczLCAweGM2LCAweDc3LCAweDliLAotCTB4MGYsIDB4NzIsIDB4NjYsIDB4YWMsIDB4ODEsIDB4ZWYsIDB4MjEsIDB4OTYsIDB4NWYsIDB4NDQsIDB4MmMsIDB4NTksCi0JMHgzMSwgMHgyMiwgMHhmMiwgMHg5MywgMHg0NywgMHhhZiwgMHgyMSwgMHg5NywgMHg5NiwgMHhmYywgMHhjMywgMHg4OSwKLQkweDY2LCAweDI0LCAweDkwLCAweDc4LCAweGFiLCAweDM5LCAweDM3LCAweDgyLCAweDE4LCAweDk3LCAweDg4LCAweDg2LAotCTB4OTMsIDB4YzYsIDB4YjAsIDB4NWMsIDB4YWEsIDB4MGYsIDB4Y2EsIDB4OGYsIDB4ZWEsIDB4OTYsIDB4ZmMsIDB4YjAsCi0JMHgxZSwgMHg5MSwgMHgxZiwgMHgyMCwgMHhlNiwgMHg3ZiwgMHhiZiwgMHhkZSwgMHg5YSwgMHg3MywgMHg0NywgMHg2OCwKLQkweDRmLCAweDNkLCAweGU5LCAweGZhLCAweDQ2LCAweGI5LCAweDdmLCAweDEzLCAweDM0LCAweGRlLCAweDgyLCAweDlkLAotCTB4MDQsIDB4YjIsIDB4YzgsIDB4ZjUsIDB4MTksIDB4YmYsIDB4MjYsIDB4MGUsIDB4MTUsIDB4OWYsIDB4NmIsIDB4ODIsCi0JMHhiNywgMHg2YywgMHg1YiwgMHhjMiwgMHhjYSwgMHhlYiwgMHg3YSwgMHhmNywgMHhhOCwgMHhmOSwgMHgyOSwgMHhiNCwKLQkweDM5LCAweGEzLCAweDgxLCAweDZhLCAweGIxLCAweDUzLCAweGU1LCAweDhiLCAweGQwLCAweDkxLCAweGQ4LCAweGY1LAotCTB4NjAsIDB4YjAsIDB4NTYsIDB4YmMsIDB4ODUsIDB4N2UsIDB4Y2QsIDB4ZTYsIDB4YTEsIDB4ZjgsIDB4NmYsIDB4ZWQsCi0JMHgzMCwgMHhmZiwgMHg4MSwgMHg4NSwgMHgzNSwgMHhkZCwgMHhmOSwgMHgyNSwgMHgyMywgMHhiMSwgMHg0OSwgMHg2NiwKLQkweDQzLCAweGRmLCAweDZmLCAweDk4LCAweDAzLCAweDdkLCAweDU5LCAweDNkLCAweDExLCAweDk0LCAweDc0LCAweDkxLAotCTB4NmIsIDB4MmEsIDB4MjQsIDB4YjMsIDB4NTUsIDB4MjgsIDB4ZmYsIDB4M2MsIDB4ZDcsIDB4ODUsIDB4M2MsIDB4M2IsCi0JMHgxNywgMHhlZiwgMHg4NiwgMHhlZCwgMHhmZiwgMHg5YSwgMHhlMSwgMHhhZSwgMHgwMywgMHgxOCwgMHg1MCwgMHg3NSwKLQkweDUwLCAweGYyLCAweGUwLCAweDM3LCAweDVmLCAweDdmLCAweGNiLCAweGMzLCAweDBlLCAweGYwLCAweDJhLCAweDViLAotCTB4MjEsIDB4ZjgsIDB4YzQsIDB4NzAsIDB4ZGEsIDB4NzYsIDB4ZmUsIDB4MzAsIDB4ODgsIDB4YjYsIDB4ZTAsIDB4NTYsCi0JMHhlYiwgMHhjZSwgMHgyNiwgMHg3YywgMHgzZiwgMHgxMCwgMHhiMiwgMHg4OCwgMHg0ZCwgMHgyNCwgMHhmMywgMHgwNSwKLQkweDdjLCAweGZmLCAweDRhLCAweDQyLCAweDM2LCAweGY3LCAweGUyLCAweDdiLCAweDRiLCAweDAyLCAweDI2LCAweDk5LAotCTB4NjAsIDB4Y2MsIDB4ZDUsIDB4NWEsIDB4NjIsIDB4YWUsIDB4NjgsIDB4NjksIDB4YzgsIDB4NmUsIDB4MGUsIDB4NzMsCi0JMHg0ZiwgMHg0MywgMHg5ZSwgMHg1ZiwgMHhhYywgMHgwNywgMHhiNSwgMHhkNCwgMHhlOSwgMHg0NywgMHhjMCwgMHg4NywKLQkweDlmLCAweDNiLCAweDIzLCAweDNmLCAweDMzLCAweDk3LCAweGI3LCAweDA0LCAweGU0LCAweDE2LCAweDdjLCAweDVjLAotCTB4MTIsIDB4N2UsIDB4Y2MsIDB4NDYsIDB4NmUsIDB4YjEsIDB4MDMsIDB4Y2IsIDB4MzUsIDB4ZmEsIDB4NWYsIDB4YmYsCi0JMHgyMCwgMHg1ZiwgMHhmMywgMHg3OCwgMHg2YiwgMHg5MywgMHgwNSwgMHg2NSwgMHhhMywgMHg2YywgMHhjZiwgMHg2NywKLQkweGZlLCAweGNkLCAweGMwLCAweGRkLCAweGY2LCAweDE3LCAweDU3LCAweGRiLCAweGNiLCAweDk5LCAweDdmLCAweGI4LAotCTB4ZGEsIDB4ZGUsIDB4ZGIsIDB4ZTYsIDB4ZjIsIDB4M2YsIDB4YWEsIDB4NGQsIDB4ZDQsIDB4ZjcsIDB4NzgsIDB4NmQsCi0JMHhiNywgMHhhMSwgMHhiMywgMHg2NiwgMHg5MywgMHhiOSwgMHg0NSwgMHgwMSwgMHhkOCwgMHgyNCwgMHgxZCwgMHhhNywKLQkweDJmLCAweGJlLCAweDFmLCAweDVmLCAweGJiLCAweGM2LCAweGNmLCAweDlhLCAweDQ5LCAweDgzLCAweGI2LCAweDEwLAotCTB4MTQsIDB4OTcsIDB4MjYsIDB4ZWYsIDB4NzcsIDB4MjAsIDB4N2YsIDB4YmYsIDB4OGQsIDB4ZGYsIDB4OGMsIDB4YTMsCi0JMHg3ZSwgMHg2ZSwgMHhjZSwgMHgzZSwgMHg3YywgMHhmZSwgMHhjZCwgMHg3YiwgMHhkOCwgMHg0YiwgMHgwOCwgMHhmNiwKLQkweGYyLCAweGZmLCAweGFiLCAweDVkLCAweDVjLCAweGJhLCAweDFmLCAweGJiLCAweGMwLCAweDlmLCAweGIyLCAweDBiLAotCTB4ZDUsIDB4ZmYsIDB4ZDIsIDB4ZWEsIDB4NWEsIDB4MDksIDB4NDMsIDB4M2UsIDB4OGMsIDB4MDcsIDB4ODMsIDB4ZDAsCi0JMHhmMSwgMHg2NiwgMHg5OSwgMHhiNSwgMHhjOCwgMHg4ZiwgMHgxNSwgMHhjOSwgMHhjMSwgMHg1ZiwgMHg5ZSwgMHg1OCwKLQkweDE3LCAweGJiLCAweGJiLCAweDEwLCAweDBmLCAweDhlLCAweDlmLCAweDhlLCAweDhlLCAweDMyLCAweDFlLCAweGM0LAotCTB4ZTAsIDB4MWIsIDB4OTMsIDB4ZWYsIDB4ODgsIDB4MDcsIDB4MzcsIDB4OGMsIDB4ZDYsIDB4NzgsIDB4NjAsIDB4MjAsCi0JMHgxZSwgMHhlYywgMHg3YSwgMHg5NywgMHg3OCwgMHg3MCwgMHhlMiwgMHgxZCwgMHhmMSwgMHg0MCwgMHg4MywgMHg2YywKLQkweDM4LCAweGJmLCAweGJmLCAweDM1LCAweGZjLCAweDc4LCAweDUwLCAweDU4LCAweDEzLCAweDBmLCAweDdjLCAweDVkLAotCTB4NTksIDB4MGEsIDB4MGIsIDB4ZGMsIDB4ZDUsIDB4NWIsIDB4OTcsIDB4YTcsIDB4MmIsIDB4MDksIDB4MDYsIDB4MTIsCi0JMHg4ZCwgMHhjYywgMHg5YywgMHhmNSwgMHhiMCwgMHhiNCwgMHhjMSwgMHhlNywgMHg1ZSwgMHhhYSwgMHg4ZiwgMHg0MCwKLQkweDY3LCAweDk3LCAweDMwLCAweGY3LCAweDY4LCAweDljLCAweDg5LCAweDY1LCAweDViLCAweDgyLCAweGViLCAweGUxLAotCTB4Y2QsIDB4MDgsIDB4MzAsIDB4ZTIsIDB4NmUsIDB4ZTAsIDB4YmUsIDB4ZGQsIDB4NjcsIDB4ZDUsIDB4ZmEsIDB4NzgsCi0JMHgzMywgMHhlYSwgMHg2MSwgMHhmNywgMHg2ZCwgMHhjMCwgMHhlZSwgMHg3OCwgMHgzZSwgMHgwMCwgMHg0YywgMHhjOCwKLQkweGY2LCAweDJiLCAweDY2LCAweDEyLCAweDdhLCAweGFhLCAweDNhLCAweGY2LCAweGVlLCAweDAyLCAweDNlLCAweDczLAotCTB4YWEsIDB4ZWYsIDB4YWQsIDB4MDgsIDB4ZmIsIDB4NzYsIDB4MjQsIDB4MTIsIDB4ZDEsIDB4M2YsIDB4YzMsIDB4NzcsCi0JMHg3YiwgMHgyMiwgMHhiYywgMHhlZCwgMHhhYSwgMHg0NSwgMHhiYSwgMHg4NywgMHhhMiwgMHg2NywgMHgxNSwgMHg4ZCwKLQkweDgwLCAweDE0LCAweGQ0LCAweGIzLCAweDkxLCAweDZkLCAweDdjLCAweGY2LCAweDE4LCAweDYyLCAweGY2LCAweDUxLAotCTB4YzcsIDB4OTQsIDB4MjMsIDB4NGUsIDB4NzYsIDB4NzcsIDB4MGUsIDB4MWYsIDB4NjIsIDB4ZDUsIDB4NGIsIDB4MjUsCi0JMHhkZSwgMHgxZiwgMHhjNSwgMHhmZCwgMHg4MCwgMHgzMCwgMHg5NywgMHhmYywgMHgyYSwgMHhmYSwgMHgxYywgMHg0NCwKLQkweDlmLCAweDE5LCAweGM3LCAweGQ3LCAweDA1LCAweGVmLCAweDM3LCAweDMyLCAweDI5LCAweGRjLCAweDlmLCAweDI5LAotCTB4MzYsIDB4MzIsIDB4ZTksIDB4MjIsIDB4ZjMsIDB4ZDYsIDB4YTEsIDB4ZjAsIDB4MTEsIDB4YzgsIDB4MzMsIDB4OGIsCi0JMHg1YywgMHhjZCwgMHg5NiwgMHhlOCwgMHg2MCwgMHg1ZSwgMHg5ZSwgMHhlZSwgMHgxYywgMHgwNywgMHg0ZSwgMHgzYSwKLQkweDg3LCAweDFjLCAweGMyLCAweDllLCAweDhjLCAweGM2LCAweGNiLCAweGYyLCAweGUxLCAweGNlLCAweGU0LCAweDY5LAotCTB4ZTQsIDB4MGIsIDB4ZjEsIDB4ZWQsIDB4OTAsIDB4NjEsIDB4MjMsIDB4YTMsIDB4YzcsIDB4MDQsIDB4YjYsIDB4MWUsCi0JMHg4NywgMHg1ZiwgMHgxZSwgMHhkMSwgMHg1MywgMHhjNSwgMHg3ZSwgMHg3MywgMHg1NiwgMHgxZSwgMHg5NSwgMHg4NiwKLQkweDE5LCAweDBkLCAweDhmLCAweGNiLCAweDI2LCAweDQ5LCAweDA1LCAweGQwLCAweDZmLCAweGYwLCAweDQzLCAweDkyLAotCTB4MGQsIDB4NTMsIDB4ZDYsIDB4MGYsIDB4YzIsIDB4ZGYsIDB4NmIsIDB4ZDIsIDB4NjEsIDB4YjUsIDB4YzYsIDB4OWUsCi0JMHg1YiwgMHgxMCwgMHg2ZiwgMHgyZSwgMHg0MCwgMHg5ZiwgMHhkZCwgMHg2MSwgMHg3NSwgMHg3YSwgMHgzYSwgMHhkOSwKLQkweDI0LCAweGNiLCAweGVmLCAweGU4LCAweDc3LCAweGJiLCAweGE1LCAweDVmLCAweDZiLCAweGZiLCAweGRiLCAweDY4LAotCTB4ZGYsIDB4ODQsIDB4OWMsIDB4YjMsIDB4OTEsIDB4MDksIDB4YzQsIDB4MjAsIDB4N2YsIDB4Y2MsIDB4YTEsIDB4MGQsCi0JMHg3NiwgMHg3MiwgMHgxNSwgMHhmMywgMHg2MSwgMHgxYywgMHgyYywgMHg5NCwgMHg5OSwgMHhmNywgMHgxOCwgMHg1MiwKLQkweDM2LCAweDcxLCAweGNmLCAweDY5LCAweDM2LCAweDJiLCAweDE2LCAweGY4LCAweGJkLCAweDQwLCAweDllLCAweDgzLAotCTB4MzIsIDB4ZWUsIDB4MGMsIDB4ODgsIDB4NWQsIDB4YTMsIDB4MWMsIDB4YTIsIDB4ZjAsIDB4NGEsIDB4MGYsIDB4NzcsCi0JMHhhNSwgMHgxNiwgMHhhMywgMHg3NiwgMHgxZSwgMHgxNCwgMHg4ZCwgMHgwYiwgMHg3ZCwgMHg1ZCwgMHg0OSwgMHhlNCwKLQkweDM5LCAweGZhLCAweDg1LCAweDQ4LCAweDU3LCAweDBhLCAweDM2LCAweDZiLCAweDVjLCAweDc4LCAweGE4LCAweDJiLAotCTB4N2QsIDB4OWEsIDB4N2MsIDB4MTksIDB4YzgsIDB4NzMsIDB4M2UsIDB4MGEsIDB4OWMsIDB4ZGYsIDB4OTQsIDB4ZGYsCi0JMHg0NSwgMHgyZSwgMHg1YiwgMHgxOCwgMHg0NCwgMHgwZSwgMHg4MCwgMHhkNSwgMHhhZiwgMHg4MywgMHhlZiwgMHhiYywKLQkweDI5LCAweGMxLCAweGFlLCAweGM0LCAweGFiLCAweGUwLCAweDZmLCAweDE4LCAweGIyLCAweGQ5LCAweDg0LCAweDNlLAotCTB4MDYsIDB4ZGEsIDB4MDcsIDB4NTgsIDB4MTMsIDB4NjgsIDB4NjksIDB4YjcsIDB4YmEsIDB4MTAsIDB4NGYsIDB4MTEsCi0JMHhiYiwgMHgyNCwgMHg5OCwgMHgxYywgMHhlOSwgMHgwNiwgMHhmZCwgMHgyYiwgMHgwMSwgMHhlNiwgMHg4MiwgMHhjMSwKLQkweGQ4LCAweDZhLCAweGZiLCAweDM3LCAweGRkLCAweGY2LCAweDQxLCAweGYwLCAweGMyLCAweGU3LCAweDg4LCAweDA5LAotCTB4MjQsIDB4MzgsIDB4MzUsIDB4NjIsIDB4ODIsIDB4MDcsIDB4ZjYsIDB4MGQsIDB4YTksIDB4YmUsIDB4ZTksIDB4NDUsCi0JMHhkYSwgMHg0MCwgMHgyMywgMHg1MywgMHhiMSwgMHgxZSwgMHg5MSwgMHhkNCwgMHhjMiwgMHg1NiwgMHgxOSwgMHg1ZiwKLQkweGU4LCAweDk1LCAweDVkLCAweDBiLCAweGM0LCAweDMwLCAweGFjLCAweDY5LCAweDYwLCAweDJhLCAweGMwLCAweDE4LAotCTB4ZmEsIDB4MDUsIDB4ZTYsIDB4NzYsIDB4ZDEsIDB4ZjAsIDB4NDEsIDB4ZTksIDB4MGYsIDB4N2YsIDB4MTUsIDB4ZWIsCi0JMHg2MCwgMHhjYSwgMHg4YSwgMHg0NSwgMHg2NiwgMHhiMSwgMHhjNiwgMHgwMiwgMHg4YSwgMHg0ZSwgMHhkOCwgMHgxZiwKLQkweDkzLCAweDM2LCAweGJhLCAweDY2LCAweGRjLCAweGY0LCAweGUyLCAweGJkLCAweGU4LCAweDYyLCAweGUxLCAweDVjLAotCTB4MDgsIDB4YWYsIDB4YTMsIDB4ZmIsIDB4NTcsIDB4MWUsIDB4NWQsIDB4MTMsIDB4NzQsIDB4ZmIsIDB4NDAsIDB4OTMsCi0JMHg3MywgMHg3YywgMHhhOCwgMHg3MywgMHhlYywgMHhiNCwgMHhkOCwgMHgxZCwgMHhlMCwgMHgyZiwgMHgxZCwgMHg3YiwKLQkweDU4LCAweDY2LCAweDQxLCAweGU3LCAweGU4LCAweDAyLCAweGZkLCAweGE0LCAweDZjLCAweGM1LCAweDY3LCAweGI4LAotCTB4NGQsIDB4NjIsIDB4ODMsIDB4ZTcsIDB4ODEsIDB4NzMsIDB4YzYsIDB4MTQsIDB4MGQsIDB4MTcsIDB4NzMsIDB4ZTgsCi0JMHgxNywgMHgxMiwgMHhjMCwgMHhhOSwgMHgxZiwgMHgwNywgMHgzZiwgMHhjYywgMHhiMSwgMHgzOCwgMHhlNywgMHgwMCwKLQkweGU2LCAweDliLCAweGMwLCAweDNhLCAweDY0LCAweDdkLCAweDg1LCAweGViLCAweDFiLCAweGJmLCAweGNmLCAweDg3LAotCTB4M2IsIDB4NTMsIDB4YTcsIDB4ZGIsIDB4YjEsIDB4ZWUsIDB4ZTQsIDB4MTEsIDB4NDMsIDB4YzUsIDB4N2UsIDB4ZWEsCi0JMHhjNSwgMHhlYSwgMHg0YywgMHg5NiwgMHgxNCwgMHhkZiwgMHg5ZCwgMHhhOSwgMHgxMiwgMHg2NSwgMHgxNCwgMHhlZiwKLQkweDRjLCAweDk3LCAweDI4LCAweDIzLCAweDAxLCAweDNmLCAweDcxLCAweGQ4LCAweDY0LCAweDQwLCAweDIyLCAweDViLAotCTB4YTgsIDB4YzcsIDB4NDMsIDB4ZTgsIDB4ZjcsIDB4NTcsIDB4MDEsIDB4ZTIsIDB4YjgsIDB4YTQsIDB4YzUsIDB4ZGYsCi0JMHhmMCwgMHhiNSwgMHgxNywgMHgwZSwgMHhhMywgMHgyZiwgMHg3ZiwgMHg2ZiwgMHgwNywgMHhkZCwgMHhmZSwgMHhjMSwKLQkweDgyLCAweGI0LCAweDBmLCAweGNlLCAweGMwLCAweDRmLCAweGU4LCAweDIzLCAweGMwLCAweDkxLCAweGNhLCAweGNlLAotCTB4OWIsIDB4YzAsIDB4ZDgsIDB4M2IsIDB4MzAsIDB4MWYsIDB4YWMsIDB4OGQsIDB4OTgsIDB4MjUsIDB4ZDMsIDB4ZjMsCi0JMHg5NCwgMHhhYiwgMHg3YywgMHgwOCwgMHg3MywgMHhjMCwgMHhmYywgMHg2MywgMHhmMCwgMHgyZCwgMHg5YywgMHgwMywKLQkweGM3LCAweDE2LCAweGU0LCAweDM2LCAweDRiLCAweDkyLCAweDliLCAweDBmLCAweDJhLCAweDJjLCAweDZiLCAweDliLAotCTB4MWMsIDB4NWYsIDB4ZDMsIDB4ZjQsIDB4NDQsIDB4MTcsIDB4NzQsIDB4Y2MsIDB4YjksIDB4Y2QsIDB4ODEsIDB4YjcsCi0JMHg2NywgMHgxMCwgMHhmZiwgMHhhMiwgMHgwYSwgMHg0MywgMHgxOSwgMHgxNywgMHhiOCwgMHg1NiwgMHg0NiwgMHhiMSwKLQkweDRlLCAweGM4LCAweGJmLCAweDY3LCAweDdiLCAweDVhLCAweDAzLCAweDNlLCAweDQ1LCAweGY5LCAweDdmLCAweGU0LAotCTB4ZWEsIDB4MDksIDB4ZjgsIDB4OTEsIDB4NTEsIDB4ZjksIDB4N2QsIDB4ZjgsIDB4OTIsIDB4MWYsIDB4ZDcsIDB4ZTMsCi0JMHhjOCwgMHgxYiwgMHg4NiwgMHg5MSwgMHgzNywgMHgwYywgMHgyMiwgMHg2ZiwgMHhiMCwgMHg5MCwgMHgzNywgMHg0NCwKLQkweDkwLCAweDM3LCAweGY0LCAweDIxLCAweDZmLCAweDA4LCAweDIzLCAweDNlLCAweDg4LCAweDFjLCAweGFkLCAweGU3LAotCTB4NjEsIDB4NjMsIDB4MGQsIDB4ZjgsIDB4NDEsIDB4MzMsIDB4NjgsIDB4ZDcsIDB4NDMsIDB4YzEsIDB4NjQsIDB4M2QsCi0JMHgxYywgMHg0YywgMHhkNSwgMHgwMywgMHg5OCwgMHhkMywgMHgwMSwgMHg4ZSwgMHg4OSwgMHhmOSwgMHhlNSwgMHgzYiwKLQkweGM3LCAweDRhLCAweGMzLCAweDg4LCAweDM5LCAweDM2LCAweGZjLCAweDUyLCAweDFhLCAweGYxLCAweDM2LCAweDJlLAotCTB4NDcsIDB4ZjAsIDB4Y2MsIDB4ZjIsIDB4N2MsIDB4MDQsIDB4Y2YsIDB4MzQsIDB4MjUsIDB4MWQsIDB4NmYsIDB4OTMsCi0JMHg1OSwgMHgzMywgMHgwZSwgMHgxYSwgMHg1YiwgMHg5NCwgMHg5ZCwgMHgyMiwgMHhkZiwgMHg2YSwgMHg4MywgMHg5ZCwKLQkweDRhLCAweGFlLCAweGM4LCAweDdjLCAweGFiLCAweDBmLCAweGY0LCAweDNhLCAweDExLCAweDk3LCAweGU5LCAweDFmLAotCTB4ZTgsIDB4MGIsIDB4ZWMsIDB4ZGQsIDB4NWYsIDB4YjIsIDB4YjgsIDB4ZTYsIDB4YmEsIDB4YjQsIDB4ZTQsIDB4ZTksCi0JMHhiYywgMHgxMCwgMHg2YiwgMHgyMiwgMHgwZSwgMHhjMiwgMHgyZSwgMHhkOCwgMHgzNiwgMHg4MSwgMHhlNywgMHhmOCwKLQkweGZiLCAweDZkLCAweGNmLCAweGVmLCAweDdmLCAweDI0LCAweDI4LCAweDMwLCAweGRlLCAweDRiLCAweDhjLCAweGY5LAotCTB4MTYsIDB4ZTgsIDB4MzksIDB4YWQsIDB4ZWIsIDB4YjUsIDB4YTYsIDB4OGIsIDB4ZTUsIDB4ZGYsIDB4NjcsIDB4ZmQsCi0JMHg4ZCwgMHgzNSwgMHhjNywgMHhkNywgMHhjMCwgMHg3MywgMHhiZiwgMHhiOSwgMHg4YywgMHgxYywgMHhkOSwgMHhkZSwKLQkweGJmLCAweDgyLCAweGRmLCAweGFkLCAweGZkLCAweGViLCAweGU4LCAweGFmLCAweGRhLCAweDgyLCAweDY2LCAweDIyLAotCTB4Y2UsIDB4N2MsIDB4MTgsIDB4M2UsIDB4NzMsIDB4MTAsIDB4ZmUsIDB4ZjEsIDB4NTYsIDB4NDYsIDB4NWYsIDB4YmEsCi0JMHg4OSwgMHg3OSwgMHg0MiwgMHg5ZSwgMHhjNSwgMHg1YiwgMHg5OSwgMHhjMCwgMHhjMCwgMHhiNSwgMHhlNiwgMHg4YiwKLQkweGMwLCAweDM3LCAweDYzLCAweDRiLCAweDIzLCAweDkyLCAweDVhLCAweGVhLCAweDBmLCAweDVmLCAweDk2LCAweGNlLAotCTB4ZGIsIDB4YjYsIDB4NWMsIDB4NmIsIDB4Y2UsIDB4M2EsIDB4ZDEsIDB4ZTMsIDB4YjYsIDB4MTAsIDB4NmYsIDB4OTksCi0JMHg1MiwgMHgwMSwgMHhhOSwgMHg2ZCwgMHgzYiwgMHgzYiwgMHg4OCwgMHgxOSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg5MSwKLQkweGU0LCAweDI5LCAweDViLCAweDQ2LCAweDc2LCAweGZhLCAweGI5LCAweGZiLCAweDlkLCAweDBlLCAweGU5LCAweDQyLAotCTB4ZGIsIDB4NTIsIDB4MDQsIDB4N2QsIDB4ODgsIDB4NTMsIDB4MzksIDB4ZWYsIDB4MmMsIDB4ZTYsIDB4YWMsIDB4YjksCi0JMHhjZiwgMHg3OCwgMHhmNSwgMHhjOSwgMHg0MiwgMHgwOSwgMHg3MywgMHhhZiwgMHhkZiwgMHhjYSwgMHg1YywgMHgzZSwKLQkweDA1LCAweGVjLCAweDBlLCAweDFkLCAweDI1LCAweDRmLCAweGIxLCAweGFlLCAweGIwLCAweDA5LCAweDcyLCAweDFhLAotCTB4ODMsIDB4YWQsIDB4ZDAsIDB4MDYsIDB4ZmEsIDB4ZjEsIDB4NmMsIDB4NTMsIDB4YmUsIDB4MTEsIDB4YTcsIDB4NWQsCi0JMHhiYywgMHgwNCwgMHg1OSwgMHg4MiwgMHg1NiwgMHhjMCwgMHg5ZiwgMHgwZiwgMHg3MCwgMHhkZSwgMHgzYywgMHhlNSwKLQkweDE3LCAweDQ2LCAweDZlLCAweGNlLCAweGIxLCAweDI1LCAweGQ4LCAweDk5LCAweDU4LCAweDlmLCAweDc3LCAweGRmLAotCTB4Y2EsIDB4MmMsIDB4OWYsIDB4MDIsIDB4ZmQsIDB4MDEsIDB4ZDYsIDB4ZGUsIDB4ZTAsIDB4YjMsIDB4OGIsIDB4YWMsCi0JMHgxZCwgMHgzMiwgMHgyNywgMHhkZCwgMHgwNSwgMHgzZCwgMHhlZCwgMHg1NSwgMHhiNSwgMHhiOCwgMHg2NCwgMHgzNSwKLQkweDJlLCAweGQ2LCAweDQ5LCAweGZhLCAweDJjLCAweDg5LCAweDE4LCAweGQ2LCAweDdlLCAweGU0LCAweGFmLCAweDYyLAotCTB4ZWEsIDB4ODksIDB4NDksIDB4ZGMsIDB4YTMsIDB4M2MsIDB4MzUsIDB4ZTQsIDB4MWMsIDB4YjgsIDB4N2YsIDB4NjEsCi0JMHg0NSwgMHhlOSwgMHhjNCwgMHg4MCwgMHhlZSwgMHg3MiwgMHgzYiwgMHg5OSwgMHg4NCwgMHhjOSwgMHhiYywgMHg5MSwKLQkweDgwLCAweDJmLCAweDFjLCAweGUxLCAweDFjLCAweGQ0LCAweGQ4LCAweGM4LCAweGM3LCAweGI5LCAweGZlLCAweDMwLAotCTB4NjcsIDB4ZDgsIDB4NTUsIDB4NGIsIDB4NWUsIDB4YWUsIDB4ZmUsIDB4NjYsIDB4NGIsIDB4NDcsIDB4NjAsIDB4ZDMsCi0JMHg5MiwgMHg2ZiwgMHg0MywgMHgzZSwgMHg5MCwgMHgxYywgMHhjMSwgMHg2ZiwgMHgzOCwgMHg4MSwgMHhhMywgMHhkMCwKLQkweGU3LCAweGQ5LCAweDExLCAweGQ2LCAweDNmLCAweDVmLCAweDAyLCAweGI2LCAweDI3LCAweGRmLCAweGIxLCAweGM4LAotCTB4MTEsIDB4YjUsIDB4ODYsIDB4NzEsIDB4ZWQsIDB4MzAsIDB4OTcsIDB4ZGIsIDB4MjQsIDB4OTcsIDB4ZDUsIDB4ZmMsCi0JMHgxZSwgMHgyMiwgMHhmNiwgMHg4MCwgMHg5ZSwgMHhlZSwgMHg2NywgMHg3ZSwgMHhlMywgMHhmNywgMHgzOSwgMHgzZiwKLQkweDk3LCAweDNlLCAweDYzLCAweDU3LCAweGQyLCAweDhhLCAweDQ4LCAweGFhLCAweDc4LCAweGE5LCAweDE5LCAweGIwLAotCTB4MmMsIDB4NjAsIDB4NjcsIDB4NTcsIDB4OGYsIDB4MjksIDB4MjcsIDB4MDgsIDB4M2UsIDB4NTgsIDB4NmIsIDB4ZGIsCi0JMHhhOSwgMHg3NCwgMHgwOSwgMHgzZSwgMHg2OCwgMHgzYiwgMHhmOSwgMHg2MCwgMHg2MiwgMHhiMywgMHg5YywgMHg5YiwKLQkweGVmLCAweDkxLCAweGNhLCAweGZjLCAweGNmLCAweGE1LCAweDNhLCAweGRmLCAweDI1LCAweGU3LCAweGU3LCAweDliLAotCTB4NzIsIDB4MzUsIDB4YWUsIDB4N2MsIDB4OTMsIDB4ZDUsIDB4YWUsIDB4ZDYsIDB4YjUsIDB4M2MsIDB4ZWMsIDB4ZDYsCi0JMHg2MSwgMHg2MiwgMHhhMywgMHhkNywgMHhlNSwgMHg3OSwgMHgzOSwgMHg1NywgMHg3NiwgMHg3OSwgMHhjZiwgMHhiNCwKLQkweGYwLCAweDdlLCAweDE1LCAweGI2LCAweGY2LCAweGFhLCAweDQ1LCAweGZlLCAweDQ3LCAweGE0LCAweDUyLCAweDI0LAotCTB4ZWYsIDB4ZmIsIDB4MTQsIDB4ZWYsIDB4YmIsIDB4NTYsIDB4NzksIDB4OTcsIDB4YWMsIDB4NjEsIDB4OTEsIDB4ZmYsCi0JMHg4ZCwgMHg3OCwgMHhlZiwgMHg5MCwgMHhlYywgMHg1NiwgMHhmMiwgMHgxZiwgMHhjMSwgMHhiMywgMHhlZiwgMHhiNCwKLQkweGJmLCAweDhhLCAweDczLCAweGFkLCAweGI5LCAweDVjLCAweDZjLCAweDUzLCAweDNjLCAweDFiLCAweDg5LCAweDExLAotCTB4YzgsIDB4ZTcsIDB4NWEsIDB4YjMsIDB4ZTEsIDB4NzAsIDB4MWQsIDB4ZTEsIDB4YjcsIDB4ZjMsIDB4MmYsIDB4ZTAsCi0JMHhhYiwgMHg3YSwgMHg1NSwgMHhjZSwgMHg5MiwgMHg5YiwgMHhlYywgMHhlZSwgMHg0YywgMHgyZSwgMHg4ZSwgMHg0MiwKLQkweGI3LCAweDlkLCAweDZhLCAweDFkLCAweGMyLCAweDZkLCAweDQwLCAweDY3LCAweGZmLCAweDFlLCAweGZkLCAweGJmLAotCTB4Y2QsIDB4ZjUsIDB4YTYsIDB4ZTQsIDB4OTIsIDB4ODYsIDB4NWMsIDB4MGEsIDB4YzUsIDB4ZjEsIDB4NzYsIDB4ZTAsCi0JMHgyNywgMHg4YywgMHhkMywgMHhjOCwgMHg2NCwgMHgxZCwgMHgzZSwgMHhkMywgMHgwNywgMHhkZiwgMHhjNiwgMHhlZiwKLQkweGY3LCAweDZkLCAweDBmLCAweDc5LCAweGY4LCAweDVjLCAweGU4LCAweDFjLCAweDc5LCAweDA1LCAweGQ3LCAweGYzLAotCTB4NDgsIDB4MDMsIDB4MzEsIDB4MzYsIDB4MzYsIDB4NTgsIDB4NTEsIDB4ZmIsIDB4MTAsIDB4NzEsIDB4ODUsIDB4ODUsCi0JMHg2NywgMHg5ZCwgMHg2ZiwgMHhlMywgMHhlMywgMHg4ZSwgMHgzNywgMHg1NiwgMHhlNywgMHg5OCwgMHg2YiwgMHhlNywKLQkweDU0LCAweDcwLCAweDFhLCAweGM4LCAweGRmLCAweDJkLCAweGQwLCAweGU1LCAweGI4LCAweDc5LCAweDMxLCAweDEyLAotCTB4MDYsIDB4YzYsIDB4NjUsIDB4NWIsIDB4MzcsIDB4N2MsIDB4NGMsIDB4MDQsIDB4M2UsIDB4NmIsIDB4MTgsIDB4YmUsCi0JMHg5ZiwgMHg2YiwgMHg5OSwgMHg3ZSwgMHhkZSwgMHhlNywgMHg3ZCwgMHgxOCwgMHgzNCwgMHhlOSwgMHg3ZiwgMHg4NywKLQkweDMxLCAweDY3LCAweGU2LCAweGQ4LCAweGY0LCAweDlmLCAweDg4LCAweDI3LCAweGI1LCAweDcwLCAweDU3LCAweGYyLAotCTB4YjQsIDB4NWIsIDB4MWIsIDB4NzQsIDB4N2YsIDB4ZjMsIDB4YmUsIDB4MDQsIDB4MWYsIDB4NDksIDB4NDQsIDB4Y2IsCi0JMHg3OSwgMHhlNCwgMHg3ZSwgMHgyOSwgMHhhYywgMHhkMSwgMHhhNCwgMHg4NSwgMHgzYywgMHhiYiwgMHgxNiwgMHg3ZCwKLQkweDg1LCAweDk4LCAweDViLCAweGE3LCAweDBjLCAweDk2LCAweDI4LCAweDI3LCAweGQ2LCAweGE5LCAweDRjLCAweGM5LAotCTB4NTcsIDB4YmUsIDB4MGIsIDB4NzksIDB4MDQsIDB4NjUsIDB4OGIsIDB4OTUsIDB4ODUsIDB4NGYsIDB4MDEsIDB4ZmYsCi0JMHg5OCwgMHhmYiwgMHg1YywgMHg4OSwgMHhiNSwgMHhjOCwgMHg3ZSwgMHhjNCwgMHgzMSwgMHgwMywgMHg0MiwgMHg0MCwKLQkweDRlLCAweGI1LCAweDY0LCAweGM4LCAweDY3LCAweDAzLCAweDQzLCAweGM4LCAweDAxLCAweDlmLCAweDQ1LCAweGRmLAotCTB4ODAsIDB4ZTQsIDB4OTcsIDB4MTgsIDB4MGYsIDB4MDIsIDB4MzIsIDB4YjcsIDB4MjQsIDB4NzIsIDB4ZmQsIDB4MTQsCi0JMHhmZCwgMHg4YSwgMHhmYSwgMHg4MywgMHhjYywgMHgxYiwgMHg5OSwgMHg2OSwgMHg2MiwgMHhlZCwgMHg3OSwgMHhmYSwKLQkweDE4LCAweGZhLCAweDg5LCAweDA3LCAweGExLCAweDhiLCAweGQ4LCAweDRiLCAweGRmLCAweDQwLCAweDZjLCAweDlhLAotCTB4MmQsIDB4ZjYsIDB4YzMsIDB4NjcsIDB4NGEsIDB4NDMsIDB4ODcsIDB4NGMsIDB4MTEsIDB4ZDMsIDB4OTgsIDB4YTMsCi0JMHg2ZiwgMHg1MCwgMHg3NywgMHhmNCwgMHg2YiwgMHg4ZSwgMHg0MSwgMHgyOSwgMHg5YywgMHg2MiwgMHhiZCwgMHgzMSwKLQkweDA4LCAweDVlLCAweDk4LCAweGI3LCAweDFhLCAweDJhLCAweDBmLCAweDdhLCAweDUwLCAweGY5LCAweDU2LCAweDdlLAotCTB4MDcsIDB4NWEsIDB4YzYsIDB4OGQsIDB4MWQsIDB4ZGYsIDB4YTYsIDB4ZDMsIDB4OGYsIDB4M2QsIDB4MjIsIDB4ZjYsCi0JMHhjNCwgMHhhMSwgMHhjZSwgMHg1ZCwgMHhhNSwgMHg3NiwgMHgyOSwgMHhmNywgMHhkMiwgMHgyZSwgMHhhOSwgMHhmZiwKLQkweGFjLCAweDRlLCAweDVmLCAweDhiLCAweDNjLCAweDBjLCAweGY0LCAweDU4LCAweDIzLCAweDA4LCAweGEwLCAweDVmLAotCTB4YzgsIDB4ZWIsIDB4NDcsIDB4YjksIDB4ZmUsIDB4YjYsIDB4NGMsIDB4ZWQsIDB4ZmMsIDB4M2IsIDB4ZjAsIDB4ZTUsCi0JMHhmYSwgMHhiNSwgMHhkYywgMHg0ZSwgMHhmOCwgMHhkYiwgMHgwOSwgMHg1ZCwgMHgxZSwgMHhmYiwgMHg1NCwgMHgxYSwKLQkweGNmLCAweDMyLCAweDE2LCAweGRlLCAweGYyLCAweGYwLCAweDM4LCAweGRiLCAweDU4LCAweGEzLCAweDQ1LCAweDllLAotCTB4N2UsIDB4Y2UsIDB4YzQsIDB4NzcsIDB4YWYsIDB4ZTQsIDB4Y2YsIDB4MDUsIDB4MjEsIDB4MDcsIDB4ZTQsIDB4YzQsCi0JMHgxNSwgMHg5NywgMHgxNiwgMHhmMywgMHhkZSwgMHhlMywgMHhkMCwgMHg5MSwgMHg3ZSwgMHgzMiwgMHgyOCwgMHg2ZCwKLQkweDI3LCAweDdiLCAweDI1LCAweGYwLCAweGFkLCAweDJlLCAweDY5LCAweGZmLCAweGQ2LCAweDgwLCAweDE4LCAweGRmLAotCTB4NjIsIDB4MmQsIDB4MjksIDB4MWEsIDB4MzksIDB4YWEsIDB4ZWEsIDB4NTgsIDB4NjksIDB4MzksIDB4ODYsIDB4ZjgsCi0JMHhhNSwgMHgyMywgMHgxNiwgMHgyYiwgMHgzYiwgMHgzNSwgMHhiNywgMHg4YSwgMHg4MSwgMHhjNCwgMHg1NSwgMHg3ZiwKLQkweGMxLCAweDk2LCAweGFmLCAweGVmLCAweGZjLCAweDg1LCAweGFhLCAweGEzLCAweDI2LCAweDQ3LCAweDcwLCAweGZkLAotCTB4NzIsIDB4MDYsIDB4ZDgsIDB4NDQsIDB4ODMsIDB4YWQsIDB4MzQsIDB4MzIsIDB4ZDcsIDB4MWUsIDB4ZjUsIDB4NzMsCi0JMHhjYiwgMHg0MSwgMHg1NSwgMHg5MywgMHhmZiwgMHhmYSwgMHg0ZSwgMHgzNywgMHhiNywgMHg5YywgMHg0NSwgMHg2ZSwKLQkweDk5LCAweDU2LCAweGI5LCAweDI1LCAweGZjLCAweDZiLCAweDgwLCAweGZkLCAweGI2LCAweDhhLCAweDhlLCAweGIxLAotCTB4NzIsIDB4YzIsIDB4NWMsIDB4ZmQsIDB4YTMsIDB4NjIsIDB4MWYsIDB4YzAsIDB4YmEsIDB4MzgsIDB4MjMsIDB4ZjMsCi0JMHg3YSwgMHg0MiwgMHg1MywgMHgzNCwgMHg4ZCwgMHgxNywgMHhlOCwgMHhhNywgMHhlOCwgMHhiZiwgMHg2OCwgMHhlMywKLQkweGFjLCAweDY5LCAweGExLCAweGVkLCAweDY1LCAweGZhLCAweDI4LCAweGQ3LCAweGI2LCAweGM3LCAweDVhLCAweDdjLAotCTB4ZGQsIDB4NWMsIDB4YTksIDB4MGUsIDB4MWQsIDB4MjIsIDB4YTcsIDB4YjcsIDB4ZGEsIDB4MzAsIDB4N2YsIDB4YzQsCi0JMHg3NCwgMHg4YiwgMHhkNywgMHg5YywgMHgzZiwgMHg3YywgMHg2NywgMHgyOCwgMHhhNCwgMHhhZSwgMHgwYiwgMHg2NSwKLQkweGI3LCAweDg2LCAweGUxLCAweGQyLCAweDY3LCAweGZlLCAweDAxLCAweDFmLCAweDUzLCAweDI3LCAweDFmLCAweDFjLAotCTB4YjcsIDB4NGYsIDB4OGMsIDB4MzMsIDB4MjEsIDB4MDksIDB4OWMsIDB4YTEsIDB4ZmQsIDB4NDUsIDB4MjMsIDB4NjksCi0JMHhjOCwgMHg2ZiwgMHhjZSwgMHgyMiwgMHgwNiwgMHgzYywgMHgwNCwgMHg2YywgMHhmNCwgMHg4OCwgMHhlOCwgMHhlNywKLQkweDA2LCAweGIxLCAweDc2LCAweGEyLCAweGUxLCAweGIyLCAweGM0LCAweGM0LCAweGE4LCAweDA0LCAweGU1LCAweDhkLAotCTB4NTMsIDB4ZDEsIDB4MDgsIDB4ZWQsIDB4ZTUsIDB4MmMsIDB4ZTIsIDB4ZDUsIDB4OTEsIDB4N2EsIDB4ZTcsIDB4ZWQsCi0JMHg4NiwgMHhlMiwgMHg4MiwgMHg2ZCwgMHhkZiwgMHgwOCwgMHgwMCwgMHgzYiwgMHgwYywgMHhkYSwgMHg3YSwgMHhiNywKLQkweGRjLCAweDgwLCAweGJlLCAweGIzLCAweGFhLCAweGVkLCAweDExLCAweGQwLCAweDA1LCAweDBmLCAweDY3LCAweDU4LAotCTB4MWIsIDB4MjQsIDB4ZGQsIDB4YTMsIDB4YTAsIDB4NDksIDB4ZGEsIDB4OGQsIDB4Y2MsIDB4MzIsIDB4NzMsIDB4ZDMsCi0JMHg1MywgMHhiNCwgMHhkZCwgMHg1ZSwgMHhkOCwgMHgxZCwgMHhhZSwgMHhlYiwgMHhlZCwgMHg5MiwgMHg5ZCwgMHg4YywKLQkweDg4LCAweDdlLCAweDZhLCAweDhmLCAweGY0LCAweGVmLCAweGQ0LCAweGRkLCAweGY5LCAweGE4LCAweDM5LCAweGIyLAotCTB4OGQsIDB4MzUsIDB4ZTcsIDB4MTEsIDB4YjUsIDB4MWUsIDB4ZjUsIDB4MjUsIDB4ZDgsIDB4Y2MsIDB4M2UsIDB4ZWEsCi0JMHgxOCwgMHhiMSwgMHgxZiwgMHg3MSwgMHg4YywgMHg3ZSwgMHhjYywgMHg0MCwgMHgxYywgMHg0YiwgMHhkNSwgMHg1ZCwKLQkweGJkLCAweDk3LCAweGY3LCAweDZkLCAweDk1LCAweDYzLCAweDY3LCAweDY4LCAweDRmLCAweGI4LCAweGI3LCAweDZhLAotCTB4NTMsIDB4ZmUsIDB4ZGUsIDB4MTAsIDB4ZWYsIDB4NTksIDB4NzIsIDB4ZmMsIDB4NDUsIDB4ZTYsIDB4MWUsIDB4Y2MsCi0JMHgzOSwgMHg5OCwgMHg2NywgMHg0NSwgMHhjMywgMHhiYiwgMHgzMCwgMHgxZiwgMHhmZCwgMHgzMSwgMHhmYSwgMHgwMywKLQkweDVkLCAweGQ5LCAweDZlLCAweDBlLCAweDNlLCAweGJhLCAweDUwLCAweGE3LCAweGRlLCAweDg2LCAweGI5LCAweDdmLAotCTB4NjYsIDB4MzIsIDB4NWYsIDB4YjMsIDB4YzMsIDB4YWUsIDB4YmMsIDB4MGIsIDB4NjgsIDB4OWIsIDB4ODUsIDB4ZWYsCi0JMHg0ZiwgMHgzOSwgMHg2ZCwgMHhiMiwgMHgzMiwgMHg2OSwgMHg0MywgMHhmNywgMHg1ZiwgMHgwMiwgMHg1ZiwgMHgwNywKLQkweDNhLCAweDU5LCAweDIzLCAweDU4LCAweDk5LCAweDRjLCAweGUzLCAweGZhLCAweDgwLCAweGNhLCAweGQxLCAweDhjLAotCTB4YzcsIDB4NmMsIDB4ZDAsIDB4ZDgsIDB4Y2EsIDB4NzUsIDB4ZTQsIDB4ZTksIDB4MjksIDB4YWUsIDB4MTcsIDB4ZTYsCi0JMHgxZiwgMHhkMywgMHg2NywgMHhlMSwgMHhiMywgMHhjNywgMHhlMywgMHg4YywgMHhmMSwgMHhkYywgMHg0YiwgMHhlOCwKLQkweDAwLCAweDFmLCAweGRkLCAweDBhLCAweDU3LCAweGU4LCAweGQ2LCAweDRlLCAweGJkLCAweDUwLCAweGE2LCAweDlmLAotCTB4Y2YsIDB4ODcsIDB4ZGIsIDB4ODUsIDB4NzgsIDB4YzQsIDB4ZDQsIDB4MmIsIDB4MTYsIDB4NzUsIDB4YTIsIDB4YzksCi0JMHg2NSwgMHhiNSwgMHhlZiwgMHgyMCwgMHg5MiwgMHg3NiwgMHgwZSwgMHg2MSwgMHhhYywgMHhiOCwgMHg1ZSwgMHgyZCwKLQkweGVmLCAweGQ0LCAweGYzLCAweDY1LCAweDQzLCAweDU2LCAweDQyLCAweGU0LCAweDNiLCAweGEyLCAweGYyLCAweGY4LAotCTB4OWQsIDB4Y2EsIDB4ZDYsIDB4OGEsIDB4ODgsIDB4MjUsIDB4YjAsIDB4OTksIDB4ZjgsIDB4ODcsIDB4MzEsIDB4YWUsCi0JMHg2YSwgMHg4MywgMHg0ZCwgMHg1MSwgMHhmNywgMHhkNCwgMHhiYiwgMHhmMiwgMHg5MSwgMHg5ZSwgMHhlZSwgMHgzNywKLQkweDhhLCAweDk5LCAweDQ1LCAweGY4LCAweDVmLCAweGQ2LCAweDJmLCAweDNhLCAweGJjLCAweDVhLCAweGUzLCAweDRiLAotCTB4NWUsIDB4M2UsIDB4ZjQsIDB4OGMsIDB4MzAsIDB4NGYsIDB4OTksIDB4MmIsIDB4OTEsIDB4OTcsIDB4MjIsIDB4ZmMsCi0JMHhlMSwgMHg0NiwgMHhiNiwgMHg0NCwgMHgzOSwgMHhiYSwgMHgzZSwgMHhlNSwgMHgxMCwgMHhlYywgMHg0MiwgMHg1ZiwKLQkweDMyLCAweDNkLCAweDFiLCAweGUwLCAweGRmLCAweDI4LCAweGVlLCAweDMxLCAweDA2LCAweGUwLCAweGJiLCAweGRlLAotCTB4ODYsIDB4ZjUsIDB4YmUsIDB4MTcsIDB4MzIsIDB4YTIsIDB4NmUsIDB4YTAsIDB4YmYsIDB4MjUsIDB4ZWUsIDB4YmIsCi0JMHg0MiwgMHg3ZiwgMHg0YiwgMHg1NywgMHhkZSwgMHhiNiwgMHg3YiwgMHhlOSwgMHhmMywgMHg0NiwgMHhlNCwgMHgxOCwKLQkweGZjLCAweGU4LCAweGQxLCAweDQ1LCAweGYyLCAweDkzLCAweGY2LCAweDcwLCAweGQ5LCAweDMwLCAweDY0LCAweDQyLAotCTB4MWYsIDB4M2YsIDB4MmMsIDB4NmYsIDB4ZDQsIDB4N2UsIDB4YTAsIDB4NzAsIDB4ZTAsIDB4YjYsIDB4OWQsIDB4MGQsCi0JMHg5OSwgMHg4NiwgMHg3ZiwgMHg5OCwgMHg3MSwgMHgyMCwgMHg3ZiwgMHgzMywgMHg4MiwgMHhmNSwgMHgxOSwgMHg1NiwKLQkweGZlLCAweDcxLCAweGU2LCAweGZkLCAweGU1LCAweDI0LCAweDAxLCAweDM3LCAweDY2LCAweDdmLCAweGY2LCAweDNlLAotCTB4NjMsIDB4ZjYsIDB4MDMsIDB4YzAsIDB4NjEsIDB4ZWYsIDB4OGIsIDB4YmUsIDB4ZTEsIDB4ZDIsIDB4ZmYsIDB4MzMsCi0JMHhlOCwgMHhlYSwgMHhkNywgMHg1NSwgMHhmZCwgMHgyMiwgMHhiNywgMHg3MywgMHgyYiwgMHg2NSwgMHhmYSwgMHg1ZSwKLQkweGNmLCAweGU5LCAweGVlLCAweDczLCAweDlmLCAweGJiLCAweDRmLCAweGJlLCAweDRjLCAweGE5LCAweDAxLCAweDJiLAotCTB4ZTQsIDB4NTUsIDB4MWMsIDB4NjUsIDB4YWUsIDB4ZDgsIDB4ZTYsIDB4ZTksIDB4NmYsIDB4MTAsIDB4MTgsIDB4OWEsCi0JMHg3NCwgMHg3ZCwgMHhkZiwgMHhkYiwgMHgyMSwgMHhmOSwgMHg1ZSwgMHgzZiwgMHhmZiwgMHg4NCwgMHhjZiwgMHg1ZSwKLQkweDZkLCAweGY3LCAweGYzLCAweDU5LCAweDNlLCAweGJmLCAweDkyLCAweDQxLCAweGZlLCAweDBjLCAweDFiLCAweDYwLAotCTB4MmMsIDB4NjAsIDB4NWIsIDB4NWMsIDB4ZjksIDB4YTEsIDB4NzcsIDB4ZTcsIDB4OWIsIDB4ZjUsIDB4MGIsIDB4ZjIsCi0JMHhiZCwgMHg1YiwgMHhmMSwgMHg5ZCwgMHg1NiwgMHg3YywgMHhiMywgMHgwNiwgMHhiOSwgMHg1ZiwgMHg0YiwgMHg5ZCwKLQkweDY3LCAweDFkLCAweGQyLCAweGFmLCAweDNiLCAweDkyLCAweDFlLCAweGIwLCAweDAxLCAweGY0LCAweGZkLCAweDYzLAotCTB4ZDAsIDB4ZmQsIDB4MTEsIDB4ZjQsIDB4ZmEsIDB4YzMsIDB4MTIsIDB4YjAsIDB4NDEsIDB4MDksIDB4ZDgsIDB4YTAsCi0JMHgwNCwgMHg2YywgMHg1MCwgMHgwMiwgMHgzNiwgMHgyOCwgMHg4NSwgMHhiZCwgMHgzYSwgMHg4YiwgMHg0ZCwgMHg2YywKLQkweGZmLCAweDNlLCAweDZkLCAweGQ3LCAweGFmLCAweDZkLCAweGFjLCAweGI3LCAweDRiLCAweGI3LCAweGI2LCAweDk5LAotCTB4YWEsIDB4ZmIsIDB4MTgsIDB4MzksIDB4YzgsIDB4NWEsIDB4MmIsIDB4YjAsIDB4OWEsIDB4NWYsIDB4ZjcsIDB4ZjAsCi0JMHg2MiwgMHg0NCwgMHg4ZCwgMHhmYiwgMHg1ZSwgMHg4OCwgMHgxMSwgMHgzNSwgMHgxYiwgMHhlYiwgMHg2NiwgMHgyOCwKLQkweDZjLCAweDAwLCAweDFiLCAweDFhLCAweDEyLCAweGM2LCAweDZmLCAweDEzLCAweGJlLCAweDE3LCAweGI0LCAweDg2LAotCTB4ZmIsIDB4YjEsIDB4OTIsIDB4ZGEsIDB4NTUsIDB4NWQsIDB4ZWYsIDB4ODgsIDB4YWEsIDB4M2IsIDB4NTgsIDB4MzIsCi0JMHg1YiwgMHhmNiwgMHg3MywgMHhiNywgMHg5OCwgMHg4YywgMHhjZCwgMHgxMywgMHg2ZiwgMHhjYSwgMHgxNiwgMHgzZCwKLQkweDAxLCAweDFkLCAweDM4LCAweGM0LCAweDg4LCAweGRjLCAweDI3LCAweGU0LCAweGY4LCAweGIxLCAweGMxLCAweDJhLAotCTB4YzYsIDB4MmMsIDB4NTgsIDB4MmUsIDB4N2YsIDB4NDcsIDB4OWMsIDB4YmIsIDB4Y2YsIDB4ZWMsIDB4ODIsIDB4N2YsCi0JMHhjZSwgMHgxNCwgMHgyMywgMHgzMiwgMHg1ZSwgMHg3NCwgMHgzMSwgMHgwMSwgMHhmMiwgMHg5ZiwgMHg3NSwgMHhmNSwKLQkweGU1LCAweDViLCAweGQwLCAweGMzLCAweGFkLCAweGNjLCAweDk0LCAweGI1LCAweDZhLCAweDFiLCAweDkxLCAweGNiLAotCTB4NzEsIDB4Y2EsIDB4OTgsIDB4ZmEsIDB4ZGYsIDB4YWIsIDB4ZjYsIDB4MjksIDB4NzYsIDB4NTUsIDB4ZGQsIDB4YmQsCi0JMHhhNCwgMHg3MSwgMHg2NSwgMHgwYiwgMHgwMSwgMHhmYSwgMHgxOSwgMHhkMCwgMHg4OSwgMHhiYiwgMHg2YiwgMHgxOCwKLQkweDc2LCAweDkxLCAweDczLCAweDdjLCAweGI5LCAweGI0LCAweGUyLCAweDkxLCAweDJmLCAweDZhLCAweDYyLCAweDZkLAotCTB4ZDQsIDB4ZmUsIDB4MWIsIDB4MmQsIDB4ZWQsIDB4YWIsIDB4ZjcsIDB4M2QsIDB4N2UsIDB4ZTEsIDB4ZmIsIDB4NTYsCi0JMHg2YiwgMHgwZCwgMHhmNCwgMHg1MywgMHg3NywgMHhkYiwgMHg4MSwgMHhkZCwgMHgyNCwgMHhhMCwgMHhlZSwgMHhjMywKLQkweDg3LCAweGQ3LCAweDQyLCAweDkyLCAweGFhLCAweDU5LCAweDkyLCAweDJlLCAweGIzLCAweDFmLCAweGViLCAweDE3LAotCTB4ZjQsIDB4NDcsIDB4N2YsIDB4MjIsIDB4MjksIDB4ZTQsIDB4YWIsIDB4ZDksIDB4NTAsIDB4MzQsIDB4NmUsIDB4Y2IsCi0JMHg3ZiwgMHg5NiwgMHhlNSwgMHg4NSwgMHg3YywgMHg4NCwgMHhlNywgMHgwYSwgMHhmMiwgMHgxMywgMHgxYSwgMHg5ZSwKLQkweGZiLCAweDE5LCAweGFlLCAweGM5LCAweGIzLCAweDI1LCAweDMzLCAweDQ1LCAweGM2LCAweDlkLCAweGExLCAweDcwLAotCTB4MGQsIDB4ZjcsIDB4YjIsIDB4OTMsIDB4YWMsIDB4ZDksIDB4N2MsIDB4MDcsIDB4MzYsIDB4MTksIDB4OGQsIDB4OTQsCi0JMHhhMSwgMHhlZiwgMHgyYiwgMHg0NSwgMHg4ZSwgMHgwNywgMHg2YywgMHg1NCwgMHg2NCwgMHg1ZCwgMHhjNywgMHhiZiwKLQkweGZmLCAweDI3LCAweGMwLCAweDgxLCAweGYwLCAweGQ1LCAweDIxLCAweGFmLCAweDhmLCAweDlhLCAweGFiLCAweDZkLAotCTB4MDYsIDB4NjAsIDB4ZTMsIDB4MGQsIDB4Y2YsIDB4ZGYsIDB4NTYsIDB4OGEsIDB4NmUsIDB4MWQsIDB4ZTUsIDB4MmMsCi0JMHhmOSwgMHg3MCwgMHhmZSwgMHg3NywgMHhiMywgMHgxMSwgMHg0MiwgMHgwZSwgMHhiNCwgMHgzYSwgMHhjNywgMHhhYiwKLQkweGE0LCAweDZmLCAweGMyLCAweGRkLCAweGNhLCAweDUxLCAweGM3LCAweDk3LCAweDA1LCAweGVmLCAweGIzLCAweDhkLAotCTB4NjcsIDB4MjcsIDB4OWEsIDB4Y2QsIDB4YjMsIDB4ZDYsIDB4MDcsIDB4YWQsIDB4OTksIDB4ZjUsIDB4NmQsIDB4NGYsCi0JMHg1YSwgMHhmOSwgMHhkZCwgMHgxNSwgMHgyNywgMHhlZiwgMHhkNSwgMHhjYywgMHhiZSwgMHhiZCwgMHhjMywgMHhhZCwKLQkweDk5LCAweGQ1LCAweDc2LCAweGFjLCAweGFkLCAweDk5LCAweDU5LCAweGRiLCAweGRkLCAweDlhLCAweGQ5LCAweGZjLAotCTB4ZWUsIDB4MDIsIDB4M2UsIDB4NmUsIDB4Y2QsIDB4MmMsIDB4YmIsIDB4ZGQsIDB4YWQsIDB4OTksIDB4OTUsIDB4YjcsCi0JMHhiYiwgMHgzNSwgMHgzMywgMHg2NywgMHg4NywgMHg1YiwgMHgzMywgMHhmYiwgMHhmOSwgMHhmNiwgMHhiNSwgMHgzNSwKLQkweGIzLCAweDFmLCAweGVjLCAweDU4LCAweDViLCAweDMzLCAweGJiLCAweGI4LCAweDNiLCAweDg3LCAweGNmLCAweGRkLAotCTB4OWEsIDB4ZDksIDB4Y2YsIDB4NzYsIDB4ZGMsIDB4YmIsIDB4NjYsIDB4ZjYsIDB4OWEsIDB4OGYsIDB4ZDcsIDB4MzEsCi0JMHg5ZiwgMHgxMSwgMHhjYywgMHgyMSwgMHgwZSwgMHhiYywgMHgzZSwgMHgwYywgMHhiYywgMHhmZSwgMHg2ZSwgMHg3NSwKLQkweGZlLCAweDAwLCAweGU2LCAweDM5LCAweGU4LCAweGM1LCAweDgzLCAweDBmLCAweDgyLCAweGRiLCAweDQ3LCAweGJjLAotCTB4NjcsIDB4NmQsIDB4ZTQsIDB4YmIsIDB4MTEsIDB4MmYsIDB4NTcsIDB4MjEsIDB4NzYsIDB4ZGYsIDB4ZWMsIDB4ZTUsCi0JMHg2YywgMHhmZiwgMHhhOCwgMHhmMywgMHhlZSwgMHhiOSwgMHg5NywgMHhkNiwgMHhlZiwgMHgwZiwgMHgyMSwgMHhmNSwKLQkweGY2LCAweGYxLCAweDNjLCAweGU3LCAweDk1LCAweDQ3LCAweGVlLCAweDQ3LCAweDM5LCAweGQ4LCAweGU4LCAweDNmLAotCTB4YmYsIDB4ZmIsIDB4MWIsIDB4MTYsIDB4MzEsIDB4ZmUsIDB4NzMsIDB4NTgsIDB4YWIsIDB4ZjYsIDB4MTYsIDB4NDMsCi0JMHg5ZCwgMHgwMSwgMHg2MCwgMHg4YywgMHgzYSwgMHgyZSwgMHgyOSwgMHhmNCwgMHg0ZiwgMHhhOSwgMHhmZSwgMHhkNywKLQkweDVhLCAweGZhLCAweGFmLCAweGEwLCAweDNmLCAweGU5LCAweDQ2LCAweGZmLCAweDFkLCAweDNlLCAweDJmLCAweDI5LAotCTB4ZmIsIDB4YjYsIDB4NWMsIDB4MGMsIDB4OWYsIDB4MmUsIDB4ZjksIDB4NzgsIDB4MmIsIDB4ZTAsIDB4NjEsIDB4ZTcsCi0JMHg0NiwgMHhjNiwgMHg3NiwgMHgzZSwgMHg4ZiwgMHg2NywgMHhhMiwgMHgxNywgMHg2ZCwgMHhiOSwgMHhhOSwgMHhmMCwKLQkweGJiLCAweDkxLCAweDg4LCAweDVlLCAweGNjLCAweGFhLCAweDdjLCAweGFkLCAweDkxLCAweGM5LCAweDM5LCAweDdlLAotCTB4ZmUsIDB4OGQsIDB4MWMsIDB4NmEsIDB4ODAsIDB4MzksIDB4MGMsIDB4ZWMsIDB4N2QsIDB4NjksIDB4MTAsIDB4NzEsCi0JMHhhYywgMHgzNSwgMHhjNywgMHg2NiwgMHg1ZSwgMHhhZCwgMHg3YiwgMHg3OSwgMHhiNSwgMHgyOSwgMHg5ZiwgMHhkOSwKLQkweGQ5LCAweDhhLCAweGNkLCAweDJmLCAweGVlLCAweGZlLCAweGM3LCAweDBhLCAweDliLCAweDZmLCAweDQyLCAweDZlLAotCTB4NGUsIDB4ZWMsIDB4NGQsIDB4MWMsIDB4NDMsIDB4MGMsIDB4NDEsIDB4N2MsIDB4Y2UsIDB4N2EsIDB4MDEsIDB4ZjMsCi0JMHgxOSwgMHhjNiwgMHg0NiwgMHhlNiwgMHgzNywgMHgyMSwgMHg3YywgMHg3OCwgMHgyNiwgMHhjOSwgMHhjNywgMHhlOCwKLQkweGVkLCAweDllLCAweDdmLCAweDY3LCAweDVlLCAweGU0LCAweDYzLCAweDk1LCAweGU0LCAweDI2LCAweDM3LCAweDM3LAotCTB4ZGEsIDB4YTQsIDB4YjksIDB4ZjksIDB4NjcsIDB4YzQsIDB4ZWIsIDB4MTMsIDB4NTgsIDB4YzUsIDB4YzIsIDB4ODEsCi0JMHg1NSwgMHgyYywgMHhiYywgMHg2NiwgMHgxZiwgMHg0YiwgMHhkNCwgMHhmOSwgMHgyNywgMHhiNSwgMHgxZiwgMHhjNiwKLQkweGZkLCAweGIxLCAweDQ2LCAweGU2LCAweGNhLCAweDgwLCAweDY4LCAweDdhLCAweDgyLCAweGZiLCAweDY0LCAweGMwLAotCTB4M2EsIDB4MTYsIDB4ZjcsIDB4Y2QsIDB4ZTgsIDB4M2IsIDB4ZjcsIDB4NjksIDB4YTksIDB4MmEsIDB4ZTMsIDB4MGYsCi0JMHhmMSwgMHg5MSwgMHhiZiwgMHgxNywgMHhlZSwgMHhlYiwgMHg4OSwgMHhiMiwgMHg2MywgMHhkYiwgMHgxZiwgMHg2YiwKLQkweGM4LCAweDc5LCAweGUzLCAweGVkLCAweGQ2LCAweDUzLCAweGUwLCAweDI1LCAweDgzLCAweDZmLCAweDVmLCAweGE2LAotCTB4OWYsIDB4NTUsIDB4YjEsIDB4YWYsIDB4MDMsIDB4YjYsIDB4N2IsIDB4YTQsIDB4NDQsIDB4ZWMsIDB4YmEsIDB4NTksCi0JMHg2YSwgMHgxZSwgMHg3ZSwgMHgzZCwgMHgzNywgMHhlZiwgMHg2MiwgMHhkNywgMHhjMCwgMHg1YSwgMHhlYywgMHgxYSwKLQkweDVmLCAweDE2LCAweDk3LCAweGM3LCAweDVkLCAweDFiLCAweGYyLCAweDQ4LCAweGJjLCAweDRhLCAweGZlLCAweDE4LAotCTB4NzcsIDB4ZjYsIDB4YzIsIDB4ZmYsIDB4MzUsIDB4ODAsIDB4NjksIDB4MTksIDB4NzMsIDB4MTgsIDB4NmYsIDB4MjIsCi0JMHhjMCwgMHhmNiwgMHhmNywgMHhlMiwgMHg0ZiwgMHhiNSwgMHgxZCwgMHhlYSwgMHhiMCwgMHg4MiwgMHhmOCwgMHg0YywKLQkweGMzLCAweDdmLCAweDRjLCAweGUwLCAweDk5LCAweDhjLCAweGNjLCAweDllLCAweGZlLCAweDFhLCAweGU2LCAweDM2LAotCTB4MmQsIDB4NTcsIDB4ZTYsIDB4MjcsIDB4YzEsIDB4ZGYsIDB4NzMsIDB4MzIsIDB4MTcsIDB4Y2YsIDB4YzMsIDB4OGYsCi0JMHg3MCwgMHhjZiwgMHg4MywgMHhiOCwgMHhhZCwgMHhkZiwgMHhmYiwgMHg5ZSwgMHhkNiwgMHhjZiwgMHg1YSwgMHg1MSwKLQkweGUyLCAweDQ2LCAweGE5LCAweDE2LCAweGU5LCAweDgzLCAweGI5LCAweDY3LCAweGM4LCAweGJkLCAweDYxLCAweGRhLAotCTB4MGYsIDB4ZWIsIDB4MjcsIDB4YzgsIDB4NWQsIDB4OTksIDB4YzMsIDB4OWUsIDB4ZTIsIDB4ZjgsIDB4NmIsIDB4NzUsCi0JMHhiMiwgMHhlYywgMHgxMCwgMHg3ZiwgMHgzNSwgMHgzMiwgMHg4ZCwgMHgyNSwgMHhlMiwgMHhjNywgMHhmNywgMHg4YiwKLQkweDI1LCAweGE5LCAweDA3LCAweGUyLCAweGM5LCAweGZiLCAweGMxLCAweDkxLCAweGQxLCAweDc5LCAweDYwLCAweGM4LAotCTB4NTcsIDB4MWEsIDB4N2EsIDB4MmIsIDB4OGUsIDB4NzQsIDB4MzEsIDB4NjQsIDB4NzIsIDB4MjksIDB4MGIsIDB4OWEsCi0JMHg3MSwgMHg4NSwgMHg5NSwgMHg5MSwgMHhjNywgMHhjMSwgMHhlZCwgMHhmNSwgMHhlMywgMHhkOSwgMHg3ZSwgMHhlNCwKLQkweGU0LCAweDJlLCAweDY2LCAweDRjLCAweDAxLCAweDMzLCAweGZlLCAweDA2LCAweDMwLCAweGUzLCAweGFjLCAweDc0LAotCTB4NzYsIDB4MTEsIDB4MzMsIDB4ZGEsIDB4MWUsIDB4NjYsIDB4NGMsIDB4YzMsIDB4OWUsIDB4NzMsIDB4NmIsIDB4ZWMsCi0JMHg1OSwgMHg1MywgMHhiNSwgMHgyOCwgMHhkZSwgMHhjYiwgMHgwMSwgMHhmMywgMHhhNSwgMHg0ZSwgMHg0NSwgMHhlZiwKLQkweDAzLCAweDI3LCAweDZhLCAweDEyLCAweDUyLCAweGU3LCAweDUyLCAweDAyLCAweDJkLCAweDM0LCAweDdkLCAweDNjLAotCTB4YjgsIDB4NGQsIDB4ZTEsIDB4YmMsIDB4ZGQsIDB4YTUsIDB4NGQsIDB4YzgsIDB4NTEsIDB4MTQsIDB4ZWUsIDB4ZjMsCi0JMHhmNiwgMHg0YiwgMHgwMywgMHhlYiwgMHhmNiwgMHg5MCwgMHgwMywgMHgyZCwgMHg3YiwgMHhjOCwgMHg3NywgMHhmMSwKLQkweDIxLCAweDllLCAweGYzLCAweDZhLCAweDdkLCAweDZkLCAweGYwLCAweDA1LCAweGZmLCAweDEzLCAweDNjLCAweDcxLAotCTB4N2QsIDB4NzEsIDB4MmQsIDB4NjgsIDB4ZWUsIDB4N2EsIDB4NTksIDB4ODMsIDB4MTMsIDB4ZmYsIDB4N2EsIDB4MWQsCi0JMHg0ZSwgMHg0NCwgMHhlYywgMHgzYSwgMHgxNywgMHg5MiwgMHgyNCwgMHgzMCwgMHhhMiwgMHhiZCwgMHg0NCwgMHg1YSwKLQkweDVjLCAweGQzLCAweGMzLCAweGQyLCAweDhlLCAweGY5LCAweDc1LCAweDljLCAweGVhLCAweDA1LCAweDM2LCAweGVhLAotCTB4OTIsIDB4MjAsIDB4MzAsIDB4NTIsIDB4OWIsIDB4YzIsIDB4NDgsIDB4MDMsIDB4YzQsIDB4MzIsIDB4ODMsIDB4MzMsCi0JMHhjMCwgMHgzNiwgMHhiNSwgMHg1NSwgMHg5YywgMHgxNCwgMHg4ZCwgMHhmZiwgMHgwMSwgMHhmNCwgMHhmMiwgMHg5NCwKLQkweGYyLCAweDNkLCAweDY5LCAweDM5LCAweDAxLCAweDVmLCAweGRhLCAweGJlLCAweDA0LCAweDdjLCAweDc3LCAweGNlLAotCTB4YzUsIDB4NGYsIDB4NmQsIDB4ZWIsIDB4ZjAsIDB4ZDMsIDB4YzEsIDB4MGQsIDB4ZjEsIDB4OTMsIDB4YWEsIDB4ZGYsCi0JMHg4ZiwgMHg1MiwgMHgyNiwgMHgzNywgMHgxYywgMHhiNywgMHg3ZSwgMHg3ZiwgMHhkZCwgMHg3MSwgMHhlYiwgMHhmNywKLQkweDM3LCAweDljLCAweGQ2LCAweGZhLCAweGZkLCAweDQ3LCAweGE0LCAweDYwLCAweDQ2LCAweGVkLCAweDE1LCAweDU5LAotCTB4NTcsIDB4YmYsIDB4OWYsIDB4NjAsIDB4M2QsIDB4ZGMsIDB4ZTksIDB4NzIsIDB4ZWIsIDB4ZjQsIDB4NWQsIDB4NWUsCi0JMHhmZCwgMHgzZSwgMHgyYSwgMHg4NSwgMHgzNSwgMHhlZCwgMHhhNiwgMHhiYywgMHg2OSwgMHhmOSwgMHhmNSwgMHhmYiwKLQkweGVmLCAweGEyLCAweGFkLCAweDFiLCAweDYzLCAweGFjLCAweGFkLCAweGRkLCAweDVmLCAweDc3LCAweDU4LCAweGJiLAotCTB4MGYsIDB4YjEsIDB4OWYsIDB4NTcsIDB4YmIsIDB4NjcsIDB4M2YsIDB4ZTQsIDB4ZjIsIDB4MGUsIDB4ZWIsIDB4ZjYsCi0JMHg4ZiwgMHg0MCwgMHgxNiwgMHg1YiwgMHgyMSwgMHg4NywgMHg1ZSwgMHg2OSwgMHgzZiwgMHgxMywgMHg2NiwgMHgxZiwKLQkweDU1LCAweGFmLCAweDVmLCAweDcxLCAweDQyLCAweDc4LCAweGNlLCAweGFkLCAweGFiLCAweGNmLCAweGMwLCAweGFlLAotCTB4MGUsIDB4YWUsIDB4ZDYsIDB4ZWIsIDB4ZGQsIDB4MzEsIDB4NmUsIDB4M2EsIDB4NmIsIDB4ZTksIDB4YWYsIDB4YTUsCi0JMHhkMywgMHhlNywgMHhkMSwgMHgwOSwgMHg4MSwgMHg0ZSwgMHg3OCwgMHgxZCwgMHg5ZCwgMHhiYiwgMHhmNSwgMHhmOSwKLQkweDliLCAweDhlLCAweDViLCAweDliLCAweDRmLCAweDlmLCAweDE2LCAweGJiLCAweDFkLCAweGJlLCAweGY5LCAweGUyLAotCTB4YzAsIDB4YzMsIDB4MWUsIDB4OGQsIDB4ZDUsIDB4ZGEsIDB4M2MsIDB4N2QsIDB4MDgsIDB4NzAsIDB4N2IsIDB4NGMsCi0JMHg5ZCwgMHhiZCwgMHg5YSwgMHhmOSwgMHg3ZiwgMHg1MCwgMHg5YiwgMHg2NywgMHg1ZCwgMHhkZSwgMHhkZCwgMHg1ZiwKLQkweGUxLCAweGZhLCAweDA0LCAweDNlLCAweDdmLCAweGQxLCAweGFkLCAweGM5LCAweDhmLCAweDk1LCAweGZjLCAweDVhLAotCTB4M2IsIDB4ZjMsIDB4NDcsIDB4ZmYsIDB4NWMsIDB4NTQsIDB4N2YsIDB4ZTQsIDB4ODgsIDB4ZDAsIDB4NTYsIDB4YzgsCi0JMHgxZiwgMHhlOSwgMHg3NiwgMHhjYiwgMHg5NCwgMHhjMiwgMHg0NywgMHhiMCwgMHhhOSwgMHhkOCwgMHhiZCwgMHgzMSwKLQkweDcyLCAweGU1LCAweDk0LCAweDhmLCAweDkxLCAweDQzLCAweDBhLCAweDIzLCAweDU3LCAweDk2LCAweDdjLCAweDhjLAotCTB4OWMsIDB4YmMsIDB4MDcsIDB4NDYsIDB4NmUsIDB4NzYsIDB4YjksIDB4NzEsIDB4MjAsIDB4MjgsIDB4NzksIDB4ODUsCi0JMHg5MSwgMHhlZiwgMHg3NSwgMHg5NiwgMHg4YywgMHhmNywgMHhiYSwgMHg4OCwgMHgwNywgMHhjNCwgMHgzZCwgMHg1ZiwKLQkweGQwLCAweDdiLCAweDhmLCAweGI1LCAweGU2LCAweGUzLCAweDY2LCAweGM2LCAweGZlLCAweGFkLCAweDMyLCAweDcxLAotCTB4ZTYsIDB4MmUsIDB4NmUsIDB4NzYsIDB4YjEsIDB4NzEsIDB4MzQsIDB4NzIsIDB4NDgsIDB4YzUsIDB4NDQsIDB4ZTAsCi0JMHg4NCwgMHgzYSwgMHhlYiwgMHhkZiwgMHhjNCwgMHhiZSwgMHg4YywgMHgzOSwgMHgwMSwgMHg4NSwgMHhjZiwgMHg3MiwKLQkweDQ1LCAweGU2LCAweDAxLCAweDZjLCAweDIzLCAweDE2LCAweGVlLCAweGU0LCAweDMxLCAweDJiLCAweDJmLCAweDI2LAotCTB4ZjksIDB4NTgsIDB4ZDMsIDB4M2YsIDB4ZDcsIDB4YzIsIDB4M2QsIDB4ODYsIDB4MzcsIDB4OGQsIDB4YTQsIDB4ODUsCi0JMHg3NiwgMHhjNywgMHhjZiwgMHgxNSwgMHhlMiwgMHhlYSwgMHgzYywgMHg1MCwgMHgxMiwgMHg1OCwgMHg3MiwgMHg2YSwKLQkweDE1LCAweDRiLCAweGQyLCAweDU3LCAweGZjLCAweGY0LCAweDZkLCAweGRiLCAweGE0LCAweDVmLCAweGYzLCAweGIxLAotCTB4MjIsIDB4NzIsIDB4YTIsIDB4MTIsIDB4ZDcsIDB4YjYsIDB4OGYsIDB4MTUsIDB4NWQsIDB4OWMsIDB4OTgsIDB4NzIsCi0JMHgxYSwgMHhjMCwgMHhjYiwgMHgwMSwgMHgxOSwgMHgwMywgMHg0ZSwgMHg2ZiwgMHg3YywgMHg4OSwgMHgzNSwgMHgyOCwKLQkweDFmLCAweDFiLCAweGQ5LCAweGY4LCAweDZlLCAweGFkLCAweDQ5LCAweGYxLCAweGJhLCAweDVkLCAweGVkLCAweDA1LAotCTB4NWUsIDB4MWUsIDB4MDgsIDB4YjYsIDB4YjQsIDB4M2YsIDB4MGIsIDB4ZmYsIDB4OGQsIDB4ZmMsIDB4MDgsIDB4ZDgsCi0JMHhjNCwgMHhjNSwgMHg0NCwgMHgzYiwgMHhhMCwgMHg4MywgMHg5MSwgMHg3YiwgMHg2MCwgMHhhMiwgMHhmNSwgMHgzMSwKLQkweDhhLCAweDMxLCAweGYzLCAweDZlLCAweDhjLCAweDRhLCAweGQ3LCAweGU5LCAweGNmLCAweGVmLCAweGM2LCAweGE4LAotCTB4N2IsIDB4YzcsIDB4NTAsIDB4YjYsIDB4NjEsIDB4NzYsIDB4NTYsIDB4MDYsIDB4OWYsIDB4NjksIDB4MjksIDB4YWMsCi0JMHg4YiwgMHg1MSwgMHg3MywgMHgxZiwgMHgyMCwgMHg0NiwgMHhiOSwgMHhmOCwgMHhjMCwgMHhlNSwgMHhmYiwgMHhmNywKLQkweDIxLCAweDliLCAweDFmLCAweDQzLCAweGE2LCAweDNmLCAweDAyLCAweGU2LCAweGZhLCAweDIxLCAweGU2LCAweGY1LAotCTB4MDMsIDB4ZTAsIDB4YTEsIDB4ZWYsIDB4OTcsIDB4ZDYsIDB4OWYsIDB4MDcsIDB4MTksIDB4MTUsIDB4ZTYsIDB4ODcsCi0JMHgyZSwgMHg2NiwgMHg3MiwgMHgzMSwgMHhmZCwgMHgwYywgMHg1NiwgMHg1NywgMHhhZCwgMHhkOCwgMHhjOCwgMHg0YywKLQkweDE1LCAweDg3LCAweGNjLCAweDY5LCAweDc3LCAweDFmLCAweDM1LCAweDkyLCAweDk1LCAweGE3LCAweDNiLCAweDUzLAotCTB4OGIsIDB4OGMsIDB4MTksIDB4ZWEsIDB4M2EsIDB4Y2MsIDB4ZmEsIDB4MjUsIDB4YjEsIDB4NDMsIDB4NTUsIDB4ZTUsCi0JMHg5OSwgMHgwMywgMHg1MiwgMHhhZSwgMHhiOSwgMHg3OCwgMHg2YiwgMHg2ZSwgMHhkMSwgMHhhNSwgMHgzMSwgMHhlNSwKLQkweGUxLCAweGFkLCAweDljLCAweDg3LCAweGI3LCAweGIyLCAweGI1LCAweGU1LCAweDQ4LCAweDAwLCAweGZkLCAweGU3LAotCTB4ZTIsIDB4NmIsIDB4MzEsIDB4ZDYsIDB4OGMsIDB4ODcsIDB4YjEsIDB4YTYsIDB4M2YsIDB4MjAsIDB4YzYsIDB4ZTIsCi0JMHg1OCwgMHgzOSwgMHgzYywgMHgzMywgMHgzZSwgMHgxZiwgMHg5MSwgMHg1ZCwgMHg5MCwgMHhmMywgMHg1OCwgMHg5MSwKLQkweGZhLCAweGUyLCAweDE5LCAweGIyLCAweGY3LCAweGQyLCAweDE5LCAweGY1LCAweGU1LCAweGVhLCAweDJhLCAweDEwLAotCTB4ZGIsIDB4YTcsIDB4OGQsIDB4NDMsIDB4NTcsIDB4NjMsIDB4ZWYsIDB4YTksIDB4MmIsIDB4MzEsIDB4ZGYsIDB4MTgsCi0JMHgwOSwgMHhlMiwgMHhmMywgMHhmNywgMHhhNSwgMHgyYiwgMHhjZSwgMHg4MywgMHhmYSwgMHg1YSwgMHg4ZiwgMHhjNSwKLQkweGVlLCAweDA3LCAweDkzLCAweGFkLCAweGM1LCAweDYzLCAweGI2LCAweGMyLCAweDYzLCAweGVkLCAweDVlLCAweDFmLAotCTB4ZDksIDB4MzMsIDB4MGUsIDB4NWQsIDB4ZmUsIDB4MjcsIDB4ZjQsIDB4ZjksIDB4OTksIDB4ZDUsIDB4MmQsIDB4M2YsCi0JMHg4NSwgMHhmZiwgMHhmZSwgMHg0MywgMHhlOCwgMHhlNCwgMHgzZiwgMHgyMiwgMHg1NywgMHg3OCwgMHhjZCwgMHhlYSwKLQkweDkzLCAweDNmLCAweDQwLCAweGRiLCAweDVkLCAweDljLCAweGMzLCAweGZlLCAweGMxLCAweGM3LCAweDkyLCAweGQ2LAotCTB4MzUsIDB4ZTAsIDB4OTMsIDB4NmIsIDB4MWUsIDB4M2UsIDB4NzksIDB4M2EsIDB4OTksIDB4YjQsIDB4MjYsIDB4NTksCi0JMHgzNywgMHg4NywgMHg5YywgMHgwZiwgMHhhNCwgMHhhNiwgMHgxNCwgMHgzNiwgMHhmMSwgMHgzMSwgMHhjOSwgMHhlZCwKLQkweDM0LCAweGM3LCAweDlmLCAweDc1LCAweDU2LCAweDgwLCAweDdkLCAweDU2LCAweDNjLCAweGVjLCAweDczLCAweDYwLAotCTB4Y2MsIDB4YzUsIDB4M2UsIDB4YzEsIDB4Y2YsIDB4NTAsIDB4ZmYsIDB4MmUsIDB4ZWUsIDB4NTksIDB4YjEsIDB4OTMsCi0JMHgxOCwgMHhhNywgMHgwYSwgMHg0YywgMHg1MiwgMHg3MSwgMHgwZSwgMHg0OCwgMHhiZSwgMHhiZSwgMHg1NywgMHg3ZCwKLQkweDhlLCAweDk0LCAweGVjLCAweDY4LCAweDFiLCAweGU0LCAweGM0LCAweGRhLCAweGViLCAweDQ5LCAweGFlLCAweDRhLAotCTB4MjcsIDB4NmEsIDB4MTYsIDB4ZjEsIDB4OWQsIDB4NzUsIDB4YTIsIDB4ZTEsIDB4ZGYsIDB4ZjEsIDB4YWUsIDB4OWYsCi0JMHhmNywgMHhhZSwgMHg0ZiwgMHg3OCwgMHhkNywgMHhjNywgMHgxMSwgMHg4NywgMHg4ZiwgMHhhOSwgMHg1OCwgMHhjYSwKLQkweDc2LCAweGI2LCAweDQxLCAweGM5LCAweDBlLCAweDY4LCAweDAxLCAweDdiLCAweDljLCAweDFkLCAweGZlLCAweDhiLAotCTB4NjYsIDB4NTksIDB4ZTksIDB4OTgsIDB4ZjQsIDB4MjcsIDB4ZjAsIDB4MzksIDB4OGUsIDB4Y2YsIDB4MzQsIDB4M2UsCi0JMHhmYiwgMHhmMSwgMHhjOSwgMHhlMywgMHhiMywgMHgyYSwgMHg1MywgMHgyZCwgMHg1NSwgMHg5YSwgMHg4NCwgMHg4ZCwKLQkweDBjLCAweDRhLCAweGFhLCAweGZlLCAweDEyLCAweGY0LCAweGY4LCAweDFjLCAweDc0LCAweDdiLCAweDU4LCAweDBhLAotCTB4ZDUsIDB4M2YsIDB4OTUsIDB4ZDksIDB4NzksIDB4NGQsIDB4YmEsIDB4MmMsIDB4ZTgsIDB4YjQsIDB4MGEsIDB4NWIsCi0JMHg5ZSwgMHg3NywgMHhmNywgMHgxMywgMHgzYiwgMHgxMywgMHg3YiwgMHhkMSwgMHhiNywgMHgyOSwgMHg0ZiwgMHhjNSwKLQkweDlmLCAweDEzLCAweGZkLCAweGIxLCAweDM5LCAweGY0LCAweDEzLCAweGJkLCAweDMwLCAweGZjLCAweDMxLCAweGI1LAotCTB4NmYsIDB4NTYsIDB4OGQsIDB4YmIsIDB4MzIsIDB4ZGUsIDB4NjUsIDB4ZDksIDB4NTEsIDB4ZTgsIDB4N2MsIDB4ZjAsCi0JMHgxOCwgMHg2OCwgMHgyNywgMHhkNSwgMHhkOSwgMHhkOCwgMHg4YywgMHgxYywgMHgzZCwgMHhiZCwgMHhiYywgMHhjNSwKLQkweGY1LCAweGFkLCAweDUxLCAweGYzLCAweDI2LCAweGY1LCAweDhlLCAweDc5LCAweGQ4LCAweGYwLCAweDg1LCAweDE5LAotCTB4ZDgsIDB4ZmIsIDB4NDEsIDB4MjcsIDB4YTAsIDB4OGQsIDB4MjEsIDB4ZGUsIDB4OGMsIDB4MzksIDB4MzcsIDB4NTUsCi0JMHhiYywgMHg4MSwgMHhlZiwgMHhjYSwgMHhjNCwgMHg0ZSwgMHg4NiwgMHg3MCwgMHhjZCwgMHhiMywgMHg0NSwgMHg4OCwKLQkweDhiLCAweGVhLCAweDZjLCAweGU1LCAweDMyLCAweGYwLCAweDhkLCAweGE2LCAweGVhLCAweDgwLCAweGIzLCAweGFiLAotCTB4ZmIsIDB4NDMsIDB4ODYsIDB4ZjIsIDB4NWIsIDB4YjEsIDB4OTgsIDB4MmUsIDB4YjksIDB4MTEsIDB4ZTIsIDB4ZGMsCi0JMHhiZCwgMHgyYSwgMHgzNiwgMHhkNSwgMHg4YSwgMHhmNiwgMHg0MywgMHhjYywgMHgxNSwgMHg2ZiwgMHgwOCwgMHhlMywKLQkweGRjLCAweGUzLCAweGU4LCAweGQ3LCAweDA3LCAweDdmLCAweDhjLCAweDdiLCAweDc1LCAweGRhLCAweDI3LCAweGU3LAotCTB4Y2EsIDB4NjcsIDB4YTYsIDB4YTUsIDB4NWEsIDB4MWUsIDB4YzUsIDB4N2MsIDB4YmQsIDB4MWMsIDB4NDksIDB4ZTUsCi0JMHgxMiwgMHgxMSwgMHhkOCwgMHhhMywgMHhiZiwgMHgxNywgMHhlNSwgMHhkNiwgMHg0ZiwgMHhhYSwgMHg4ZSwgMHg4ZiwKLQkweDI5LCAweGJhLCAweGQxLCAweDg3LCAweDc5LCAweDA1LCAweDY0LCAweGU0LCAweGVlLCAweDlmLCAweGE5LCAweGJkLAotCTB4YjMsIDB4ODIsIDB4MzMsIDB4MGEsIDB4MzksIDB4MjUsIDB4ZDEsIDB4Y2UsIDB4NWEsIDB4MzUsIDB4N2UsIDB4OTcsCi0JMHg3NSwgMHg1NSwgMHgxMywgMHg1OCwgMHgzMSwgMHg2NiwgMHhhNCwgMHg1NiwgMHg2ZSwgMHg4MiwgMHg1ZiwgMHhjNCwKLQkweGRjLCAweDJkLCAweDMzLCAweDUyLCAweDI5LCAweDRmLCAweGNiLCAweDJiLCAweGU1LCAweDlmLCAweDc3LCAweDAzLAotCTB4NTMsIDB4NDEsIDB4YTYsIDB4ZTQsIDB4YmYsIDB4NWIsIDB4ZWUsIDB4OWUsIDB4YmYsIDB4ZjUsIDB4ZGIsIDB4MjEsCi0JMHhjZiwgMHhkMywgMHhmOSwgMHhiMCwgMHg5YiwgMHhlNywgMHhlNiwgMHg1NSwgMHgyZCwgMHhjNiwgMHhmZCwgMHhiNiwKLQkweGY1LCAweDI5LCAweDJiLCAweDFhLCAweDllLCAweDQ1LCAweGNmLCAweDgzLCAweDBiLCAweGI0LCAweGNkLCAweGZjLAotCTB4ZjgsIDB4OWMsIDB4YjUsIDB4NDMsIDB4YWUsIDB4YzYsIDB4MzcsIDB4Y2IsIDB4NzIsIDB4NWMsIDB4ZTUsIDB4YzUsCi0JMHhjNCwgMHgwZiwgMHg1OCwgMHhlYiwgMHg1MSwgMHhiMywgMHgyMSwgMHg3YiwgMHhlNCwgMHgyOCwgMHhkNiwgMHhlZCwKLQkweGQ1LCAweGY4LCAweGQzLCAweGIwLCAweGQzLCAweDY3LCAweDYxLCAweDBiLCAweGFjLCAweDAxLCAweDFjLCAweDYyLAotCTB4YWUsIDB4MjUsIDB4MGQsIDB4NTUsIDB4MjMsIDB4NmIsIDB4MzYsIDB4YzcsIDB4ZDUsIDB4MTksIDB4ZWUsIDB4NzYsCi0JMHg1OSwgMHg1NiwgMHg1OCwgMHhjYywgMHhhZCwgMHg5ZCwgMHgyZiwgMHg0ZiwgMHhiYSwgMHg2YiwgMHhjNCwgMHg1MCwKLQkweDc2LCAweGZmLCAweGM3LCAweGUwLCAweGM3LCAweDg0LCAweGVkLCAweGI2LCAweGE5LCAweDNlLCAweDQ2LCAweGEyLAotCTB4YzMsIDB4ZWIsIDB4YTMsIDB4ZjQsIDB4ZGIsIDB4ZDIsIDB4ZTcsIDB4OTUsIDB4NDQsIDB4ZDIsIDB4ZGEsIDB4ZmYsCi0JMHg4OSwgMHhhNCwgMHg3NSwgMHg3MywgMHhiNywgMHg1YiwgMHg2ZiwgMHg4OSwgMHg5YSwgMHhiNiwgMHhjNiwgMHhmNywKLQkweDUyLCAweGRjLCAweGY1LCAweDk4LCAweGMxLCAweGJhLCAweGJhLCAweGI0LCAweDhhLCAweGExLCAweDYxLCAweGE0LAotCTB4MmYsIDB4NWYsIDB4ODEsIDB4N2UsIDB4MDMsIDB4ZDIsIDB4N2UsIDB4YjIsIDB4ZjksIDB4ZjgsIDB4NTQsIDB4N2MsCi0JMHgyOCwgMHg3MiwgMHg1MCwgMHg3OCwgMHgwMiwgMHg4YiwgMHg3OSwgMHg3NSwgMHgzNCwgMHg5ZSwgMHg5NSwgMHgyYiwKLQkweDg4LCAweDkzLCAweDc3LCAweDg4LCAweDFkLCAweDA2LCAweDJmLCAweGNiLCAweDlkLCAweGM3LCAweDkzLCAweGYxLAotCTB4NTEsIDB4YWQsIDB4MzIsIDB4ODksIDB4YWMsIDB4ZTUsIDB4ZTUsIDB4NDksIDB4YzYsIDB4ZDksIDB4NDMsIDB4MjIsCi0JMHhjMCwgMHg5NywgMHgyNywgMHg0NywgMHgyNCwgMHg1ZCwgMHg1NCwgMHhlZiwgMHhhOSwgMHhmMCwgMHg5YywgMHhhZCwKLQkweDM2LCAweDBkLCAweGY5LCAweGUxLCAweGY5LCAweDA5LCAweDA2LCAweDQ2LCAweGRkLCAweGVhLCAweDhmLCAweGE0LAotCTB4ZTUsIDB4NjksIDB4ZDYsIDB4YzAsIDB4MjQsIDB4YjcsIDB4MjAsIDB4ZGIsIDB4OTIsIDB4ZjAsIDB4YWIsIDB4ZjYsCi0JMHg0NCwgMHhiYiwgMHg0YywgMHhkNywgMHgxYSwgMHg5OSwgMHhmZSwgMHg1MywgMHhjZiwgMHg4MiwgMHhjNiwgMHgxNCwKLQkweDY4LCAweGVkLCAweDQ1LCAweDZlLCAweDkyLCAweDQ1LCAweGFjLCAweGE2LCAweDdjLCAweGU5LCAweGJiLCAweDlmLAotCTB4ODEsIDB4OGMsIDB4M2UsIDB4YzIsIDB4M2QsIDB4ZTUsIDB4ZDEsIDB4YWMsIDB4NDQsIDB4MjcsIDB4ZjIsIDB4OGEsCi0JMHhlZSwgMHg1YiwgMHg1YSwgMHg2ZSwgMHhmOCwgMHg1NywgMHgxMCwgMHhlYiwgMHgwMiwgMHhiMiwgMHgyYiwgMHgyNiwKLQkweGZhLCAweGRlLCAweDU4LCAweGUwLCAweGVkLCAweDI5LCAweDhiLCAweDZkLCAweDQxLCAweGI2LCAweGU5LCAweDY4LAotCTB4MGIsIDB4ZmMsIDB4N2EsIDB4MmMsIDB4YTgsIDB4MjcsIDB4NjMsIDB4ZDEsIDB4NTEsIDB4OWUsIDB4OGYsIDB4MzYsCi0JMHhhYywgMHgyOSwgMHhlZSwgMHg0ZCwgMHgzYywgMHgyMCwgMHg1ZCwgMHg3YiwgMHhhNSwgMHhlNywgMHg0MiwgMHg3NCwKLQkweGY0LCAweDA2LCAweDc4LCAweDA5LCAweDI4LCAweDVmLCAweDNmLCAweDI1LCAweGJhLCAweGQ3LCAweGRlLCAweGJkLAotCTB4ZGEsIDB4MWUsIDB4ZjAsIDB4ZGEsIDB4ZjcsIDB4NGEsIDB4ZDcsIDB4ODUsIDB4MjEsIDB4ZjMsIDB4NzUsIDB4OTksCi0JMHgwMSwgMHg0ZCwgMHg0MywgMHhhZSwgMHgyMywgMHhkNywgMHhiMSwgMHgwNiwgMHhhNiwgMHg2MCwgMHg4YiwgMHg0ZiwKLQkweDkyLCAweDk3LCAweGZkLCAweGMwLCAweDFhLCAweDU4LCAweDFiLCAweGM4LCAweGJmLCAweGFkLCAweDBmLCAweGNiLAotCTB4NTcsIDB4Y2QsIDB4NGUsIDB4YzksIDB4YTksIDB4NWMsIDB4MzcsIDB4ZTAsIDB4ZDYsIDB4NTIsIDB4NjEsIDB4ZWYsCi0JMHg4ZiwgMHgwZSwgMHgxYywgMHhlYywgMHg3MSwgMHhlYiwgMHgwNSwgMHhkYywgMHhlZiwgMHgxOCwgMHg0NiwgMHhkYiwKLQkweDlkLCAweGU2LCAweDM5LCAweDhiLCAweDZkLCAweGJjLCAweDc3LCAweGE3LCAweDU5LCAweGI1LCAweDg2LCAweGNjLAotCTB4OTQsIDB4MTYsIDB4ZjQsIDB4ZjYsIDB4YmQsIDB4MGYsIDB4YTksIDB4YjksIDB4ZTcsIDB4Y2IsIDB4ZmQsIDB4NjYsCi0JMHg0NSwgMHgxZSwgMHhkNSwgMHg1MiwgMHgwZiwgMHgyMiwgMHg1ZSwgMHgzOCwgMHhkMywgMHhlOCwgMHg3YiwgMHg4NywKLQkweGU3LCAweDI5LCAweDU0LCAweDdkLCAweGJmLCAweDIyLCAweGZlLCAweDM1LCAweGU5LCAweDBjLCAweDk5LCAweGUzLAotCTB4ZWEsIDB4ZDksIDB4MjEsIDB4ZjMsIDB4YTgsIDB4ZDYsIDB4ZmEsIDB4NmMsIDB4NTgsIDB4MWIsIDB4NWYsIDB4ZjMsCi0JMHg2YywgMHg5NywgMHg5MiwgMHg5MSwgMHg2MSwgMHhiOSwgMHg3ZCwgMHg2NiwgMHhjYiwgMHg3YiwgMHhlNSwgMHg3OSwKLQkweDg3LCAweGZkLCAweGVlLCAweDM0LCAweDUzLCAweGQ2LCAweDAzLCAweGRhLCAweGQxLCAweDA3LCAweGU5LCAweDBiLAotCTB4ZDksIDB4ZjcsIDB4ZjYsIDB4YmEsIDB4NzEsIDB4NzgsIDB4N2QsIDB4YWYsIDB4MzEsIDB4OWEsIDB4YjIsIDB4NzYsCi0JMHg4YywgMHg0ZCwgMHhhYSwgMHhjZiwgMHg1NSwgMHhkNSwgMHgyNywgMHhhMCwgMHg2NCwgMHhiZCwgMHg3NiwgMHg5YywKLQkweGJmLCAweDkxLCAweGI1LCAweGUzLCAweDc0LCAweGFkLCAweGNlLCAweDc5LCAweDE2LCAweDM0LCAweDhmLCAweGExLAotCTB4NmYsIDB4ZDEsIDB4ZTksIDB4MGYsIDB4NTcsIDB4ZTUsIDB4NzYsIDB4MzMsIDB4NjcsIDB4YmQsIDB4MjksIDB4NTcsCi0JMHg1NywgMHg2OSwgMHhmZiwgMHgxMiwgMHhkNywgMHhhZCwgMHgzYywgMHhmZCwgMHhkMiwgMHhlMywgMHg5MSwgMHhiZiwKLQkweGQ5LCAweGY2LCAweDJmLCAweDk1LCAweGJjLCAweDFmLCAweGIwLCAweGZhLCAweGY3LCAweDU3LCAweGI0LCAweGU4LAotCTB4ZTgsIDB4NWYsIDB4MGEsIDB4NzUsIDB4ZjUsIDB4Y2YsIDB4OTQsIDB4YWYsIDB4ZjksIDB4MTgsIDB4ZjQsIDB4YjQsCi0JMHhlZCwgMHgwNSwgMHhhYywgMHhkZCwgMHhlMSwgMHhhNCwgMHhlYSwgMHg3MywgMHhkZCwgMHhkYSwgMHgyYiwgMHhkYiwKLQkweDRlLCAweGY2LCAweDliLCAweGQ3LCAweGU1LCAweDMzLCAweDkyLCAweDBlLCAweGYxLCAweDFhLCAweDM5LCAweDk0LAotCTB4YzUsIDB4ZjcsIDB4NTIsIDB4M2UsIDB4YzEsIDB4YmMsIDB4MDAsIDB4YmEsIDB4ZWMsIDB4MWYsIDB4ZmMsIDB4NGIsCi0JMHg3OSwgMHg1NiwgMHg4ZSwgMHg5NiwgMHhlNiwgMHhlMCwgMHg3YiwgMHhhNiwgMHg2NCwgMHhmMCwgMHgwNSwgMHhmYSwKLQkweDlmLCAweGJjLCAweGU5LCAweGQ2LCAweDZhLCAweGRjLCAweDk4LCAweDk4LCAweGYyLCAweDYyLCAweGUyLCAweDljLAotCTB4ZjIsIDB4NzMsIDB4YWYsIDB4NzksIDB4ZTcsIDB4MjIsIDB4ZmEsIDB4MDcsIDB4Y2YsIDB4ZTEsIDB4ZDksIDB4NTcsCi0JMHg5NCwgMHgwZiwgMHhmOCwgMHgzZCwgMHhhOSwgMHg2MiwgMHgyZCwgMHg0NCwgMHg1ZSwgMHhkZSwgMHgyYywgMHgwZiwKLQkweDNjLCAweDQxLCAweDliLCAweDQ0LCAweDA2LCAweGYwLCAweGIxLCAweDM2LCAweGY1LCAweDFlLCAweDhjLCAweDZlLAotCTB4NzUsIDB4ODgsIDB4NmMsIDB4YTEsIDB4ZmQsIDB4NWMsIDB4ODYsIDB4YWQsIDB4NGQsIDB4YjksIDB4N2IsIDB4NWYsCi0JMHg2YiwgMHhhZSwgMHhhMywgMHgxMywgMHgyYiwgMHhmMiwgMHgxZiwgMHg5NCwgMHgxZCwgMHg3ZSwgMHhmYywgMHg4MiwKLQkweGZiLCAweDNkLCAweDdjLCAweDAxLCAweGU5LCAweDcyLCAweDZjLCAweGFmLCAweDZjLCAweGJmLCAweGUwLCAweGRhLAotCTB4ZGQsIDB4ZWMsIDB4ZmMsIDB4YjMsIDB4NGEsIDB4YmUsIDB4NTMsIDB4NGEsIDB4YmUsIDB4NGQsIDB4OTksIDB4ODksCi0JMHg1MywgMHhmNiwgMHg5YywgMHgxMywgMHhjZiwgMHg0ZiwgMHhiYSwgMHgzMiwgMHhmOSwgMHg5YywgMHg2NywgMHg0NywKLQkweGZkLCAweDJmLCAweGYwLCAweDNkLCAweDM1LCAweGNhLCAweDg4LCAweDdjLCAweGNmLCAweGY0LCAweDcwLCAweDNmLAotCTB4NzYsIDB4ZGIsIDB4MDUsIDB4Y2UsIDB4YjcsIDB4NmYsIDB4Y2QsIDB4N2MsIDB4NGYsIDB4YzAsIDB4YzcsIDB4MGUsCi0JMHgwYywgMHhiOCwgMHg3MywgMHg3ZSwgMHg2ZCwgMHhmZSwgMHhmZCwgMHhjZiwgMHhmOSwgMHg3NywgMHg1NywgMHhlNywKLQkweDZjLCAweDQ4LCAweDU1LCAweGU1LCAweGI5LCAweGIxLCAweGNkLCAweGQyLCAweDk1LCAweDkzLCAweDA2LCAweGVjLAotCTB4ZTMsIDB4Y2YsIDB4ODUsIDB4NjcsIDB4YzYsIDB4YzksIDB4OGIsIDB4M2IsIDB4ZWUsIDB4YjIsIDB4NDMsIDB4OWUsCi0JMHhmYywgMHgzOSwgMHg5MCwgMHhhZiwgMHgyOSwgMHg0ZiwgMHg3ZiwgMHhlNCwgMHhlMywgMHhkOSwgMHgwZCwgMHhlZiwKLQkweDVkLCAweDk3LCAweDQ2LCAweDY2LCAweDEwLCAweDZkLCAweGJhLCAweGQyLCAweGUxLCAweDk4LCAweGI3LCAweGRlLAotCTB4ZjYsIDB4OGEsIDB4YWUsIDB4NzQsIDB4OTgsIDB4NWMsIDB4ZDUsIDB4ZTEsIDB4MGQsIDB4ZTgsIDB4YjAsIDB4MmEsCi0JMHg5ZiwgMHhjNiwgMHg5YywgMHhiMCwgMHhiZSwgMHg1ZiwgMHgxOCwgMHgzMiwgMHg2NywgMHg2NCwgMHhhYiwgMHhkMiwKLQkweGJmLCAweDM1LCAweDAwLCAweDlmLCAweGVhLCAweGU5LCAweGIyLCAweGZkLCAweDNlLCAweDc0LCAweGY5LCAweGJhLAotCTB4MjgsIDB4N2QsIDB4YWEsIDB4NzMsIDB4NDQsIDB4NTUsIDB4NDUsIDB4ODcsIDB4YmUsIDB4OGQsIDB4NzMsIDB4NmIsCi0JMHg1NywgMHgzZSwgMHg4MSwgMHgzYywgMHhhYSwgMHhiMywgMHgwMSwgMHgxMywgMHhhZSwgMHg3ZSwgMHhkNSwgMHg5YSwKLQkweGY3LCAweGY0LCAweDliLCAweDlkLCAweGEwLCAweDBlLCAweDdmLCAweGFkLCAweGM3LCAweGQ1LCAweDY3LCAweDg3LAotCTB4ZWEsIDB4NzMsIDB4MmEsIDB4MzYsIDB4YWEsIDB4ZDYsIDB4YmIsIDB4MzUsIDB4ZjAsIDB4ZTksIDB4MWUsIDB4ZWEsCi0JMHhmNCwgMHg3OSwgMHhjNywgMHhmZCwgMHgyZSwgMHgyMiwgMHhjZSwgMHg5ZCwgMHg3MiwgMHhkZSwgMHg0YiwgMHhhZiwKLQkweGFlLCAweDRlLCAweGM3LCAweGM0LCAweDVkLCAweDU3LCAweGViLCAweGY1LCAweGE5LCAweDVmLCAweDA4LCAweDI4LAotCTB4MWIsIDB4MWUsIDB4ODMsIDB4MGMsIDB4OGYsIDB4OTcsIDB4MWUsIDB4ZjQsIDB4ZWMsIDB4ZGUsIDB4OWQsIDB4ZjMsCi0JMHhjMCwgMHhmYiwgMHg5YywgMHhmMywgMHg5MSwgMHg2MiwgMHhiZiwgMHhmOSwgMHgyNiwgMHhlZSwgMHg4ZCwgMHg2MywKLQkweGNlLCAweDMzLCAweGQyLCAweDI2LCAweDI5LCAweDZmLCAweGNlLCAweDkxLCAweGQ1LCAweDM5LCAweGZiLCAweDNjLAotCTB4YmEsIDB4ZmQsIDB4NTIsIDB4Y2MsIDB4NjMsIDB4MWQsIDB4ZmEsIDB4YWYsIDB4N2YsIDB4YWIsIDB4ZGUsIDB4MzcsCi0JMHhiOSwgMHg1OSwgMHhhNCwgMHhkZiwgMHgwNiwgMHg1NiwgMHgwYSwgMHhmNSwgMHhjYSwgMHhmNSwgMHg1YSwgMHg0NCwKLQkweGFlLCAweDEzLCAweDgzLCAweDhjLCAweGUwLCAweGRiLCAweDk5LCAweGYzLCAweDYyLCAweDc4LCAweDUwLCAweDVlLAotCTB4MmYsIDB4NmUsIDB4YzQsIDB4YzcsIDB4YjAsIDB4ZGMsIDB4MjgsIDB4ZmEsIDB4YmMsIDB4MTAsIDB4MGIsIDB4MzMsCi0JMHg1ZiwgMHg5OCwgMHg5MiwgMHgzNywgMHhlNiwgMHhmYiwgMHhhNSwgMHgzMSwgMHg4MSwgMHhiOCwgMHgzZiwgMHg0MCwKLQkweDk5LCAweDBjLCAweDk5LCAweDdiLCAweGQ0LCAweDdiLCAweDQ4LCAweDc3LCAweDlhLCAweDk3LCAweDJkLCAweGQwLAotCTB4NWYsIDB4NjgsIDB4Y2EsIDB4NDEsIDB4ZWUsIDB4NjcsIDB4ZjMsIDB4NzcsIDB4ZWQsIDB4MjEsIDB4NjksIDB4MzAsCi0JMHhhNywgMHgxOCwgMHhlOCwgMHg5NSwgMHhjYSwgMHgwMiwgMHhmMiwgMHhmOSwgMHgyMiwgMHhlOSwgMHg1MywgMHg2ZSwKLQkweDdiLCAweGQ1LCAweGVmLCAweDcxLCAweDhjLCAweGY3LCAweDM5LCAweGJlLCAweDFmLCAweDEwLCAweGEyLCAweDZlLAotCTB4ZWUsIDB4MzQsIDB4OTcsIDB4MmQsIDB4ZWUsIDB4NjcsIDB4NGUsIDB4NDksIDB4MGQsIDB4ZmEsIDB4ZmIsIDB4ZTcsCi0JMHgzMSwgMHhlZSwgMHhiNywgMHhlNywgMHhkNCwgMHhmOSwgMHhkYiwgMHg0YSwgMHg2ZCwgMHgwMiwgMHhiOSwgMHhjMywKLQkweDlkLCAweGU2LCAweDljLCAweDc1LCAweDU2LCAweGU5LCAweGFkLCAweDU2LCAweDdlLCAweGMyLCAweDZiLCAweGU3LAotCTB4MzUsIDB4ZWYsIDB4MzUsIDB4MzIsIDB4ZGIsIDB4MDYsIDB4OTgsIDB4YWYsIDB4M2UsIDB4ODEsIDB4N2MsIDB4ODEsCi0JMHhiOSwgMHhlYSwgMHgwNCwgMHhmMCwgMHgxYSwgMHg2NSwgMHgxMiwgMHg5MSwgMHhkOSwgMHgyMiwgMHg2OSwgMHg0OSwKLQkweDY4LCAweDEzLCAweGYyLCAweGZiLCAweDljLCAweDhjLCAweDgzLCAweDlmLCAweDA4LCAweDcyLCAweDdiLCAweGM2LAotCTB4ODcsIDB4NDcsIDB4NjUsIDB4MzksIDB4ZTQsIDB4YzYsIDB4MDEsIDB4OWUsIDB4ZmIsIDB4NWEsIDB4NDYsIDB4NmMsCi0JMHg1OCwgMHg1ZSwgMHg4ZCwgMHgwZCwgMHg1YiwgMHg3MSwgMHhkZCwgMHhjOCwgMHhjNCwgMHgwNywgMHhmZSwgMHgwNiwKLQkweGY0LCAweDU5LCAweGI3LCAweDYxLCAweDZjLCAweDE4LCAweDQ1LCAweDdmLCAweGI2LCAweGY1LCAweGNhLCAweGVjLAotCTB4MDIsIDB4OTIsIDB4MDgsIDB4ZTQsIDB4MmMsIDB4MTUsIDB4ZTEsIDB4OTksIDB4OGUsIDB4YWMsIDB4OWMsIDB4YWEsCi0JMHhmNSwgMHg4NywgMHgyZiwgMHg2YiwgMHg2OSwgMHg3NSwgMHhmNiwgMHgyMywgMHgzNiwgMHhjMCwgMHhmMywgMHgyYywKLQkweGJkLCAweDUyLCAweDViLCAweDkwLCAweDg4LCAweDkxLCAweDc4LCAweDUyLCAweDljLCAweDlhLCAweDhiLCAweGQ5LAotCTB4ZTcsIDB4MzQsIDB4OWUsIDB4NjksIDB4YjEsIDB4YTUsIDB4YjYsIDB4YjYsIDB4OGYsIDB4ODksIDB4ZGMsIDB4NTcsCi0JMHhiZSwgMHhlMywgMHhmNSwgMHg0OSwgMHhhYiwgMHgzZSwgMHg3ZiwgMHhkZCwgMHhjMywgMHgzZCwgMHhiNCwgMHg5YSwKLQkweGQzLCAweDAzLCAweDFlLCAweGM4LCAweGRiLCAweGMzLCAweGFkLCAweGUzLCAweDQ2LCAweGVlLCAweDhlLCAweGNiLAotCTB4MzEsIDB4OTEsIDB4Y2QsIDB4NmMsIDB4YjEsIDB4MzEsIDB4ZWUsIDB4NGQsIDB4M2MsIDB4ZjMsIDB4MjQsIDB4ZjgsCi0JMHhiOCwgMHg2MywgMHhlOCwgMHhkNiwgMHg5MywgMHg1MiwgMHhhOCwgMHhhZCwgMHgxZiwgMHhhMywgMHg5NSwgMHgwNywKLQkweDNlLCAweDQzLCAweGZhLCAweDFjLCAweGU3LCAweDAwLCAweGY4LCAweGJiLCAweGEzLCAweGU5LCAweGQ2LCAweDAxLAotCTB4YzgsIDB4ZDIsIDB4MWQsIDB4YzMsIDB4MzgsIDB4MTMsIDB4MzUsIDB4N2YsIDB4MmEsIDB4MDMsIDB4YTIsIDB4OWYsCi0JMHhkMywgMHg5NCwgMHhmYywgMHhmNSwgMHhjYSwgMHgzMCwgMHgxNiwgMHg0OCwgMHg0NiwgMHhiYSwgMHg5NiwgMHgyNiwKLQkweGM1LCAweDU4LCAweDYyLCAweDBkLCAweGUxLCAweGI1LCAweGNlLCAweGI0LCAweGRhLCAweGJmLCAweGRkLCAweDg0LAotCTB4ZjUsIDB4MmQsIDB4NzYsIDB4YzAsIDB4NjIsIDB4YmQsIDB4ODAsIDB4ZjUsIDB4ZTAsIDB4OWYsIDB4NmUsIDB4OTYsCi0JMHgxZSwgMHhkNiwgMHgwYiwgMHg5OCwgMHgzNywgMHhlYywgMHhjNywgMHgzNywgMHg3MywgMHg4NywgMHg0YiwgMHg0ZCwKLQkweGU0LCAweDdhLCAweDliLCAweDE5LCAweDVmLCAweDczLCAweDM1LCAweGRlLCAweDhmLCAweDQ2LCAweDQ0LCAweDc4LAotCTB4OGYsIDB4N2UsIDB4YTMsIDB4NTcsIDB4ZGEsIDB4YmUsIDB4MzUsIDB4MDgsIDB4NWYsIDB4ZjEsIDB4MzQsIDB4YjAsCi0JMHgzNywgMHhlOCwgMHg5ZSwgMHgxYywgMHg5MCwgMHg4MCwgMHg3YiwgMHg2NiwgMHg0MiwgMHhkNSwgMHg1YiwgMHhkZSwKLQkweDU4LCAweDg4LCAweDdhLCAweGVmLCAweDczLCAweGM5LCAweGI2LCAweGNiLCAweDcxLCAweGQ2LCAweDQ0LCAweGZiLAotCTB4NTgsIDB4ZjMsIDB4NDEsIDB4M2YsIDB4ZDEsIDB4OTcsIDB4OTEsIDB4OWYsIDB4NWUsIDB4YWYsIDB4NTksIDB4OWIsCi0JMHg3OSwgMHg3ZSwgMHhmMywgMHg4NiwgMHg4MywgMHg2YiwgMHg2MiwgMHhmZiwgMHg5MCwgMHhjMiwgMHg5OCwgMHhkZSwKLQkweDNkLCAweGZlLCAweDQ2LCAweGJlLCAweGY0LCAweDhlLCAweDc3LCAweDEzLCAweDk4LCAweDRmLCAweDRkLCAweDdhLAotCTB4NjcsIDB4ZTcsIDB4MWEsIDB4OTksIDB4YTMsIDB4NmIsIDB4NzIsIDB4YWEsIDB4NDEsIDB4NTUsIDB4ZWYsIDB4NmQsCi0JMHgzOCwgMHgxNiwgMHhmYywgMHhlMywgMHgwOCwgMHhlYywgMHg5MywgMHg2YiwgMHhhMCwgMHhhOSwgMHgzZCwgMHgwMSwKLQkweDZjLCAweDE2LCAweGU5LCAweDU1LCAweDM5LCAweGQxLCAweGYxLCAweDI3LCAweGM0LCAweGI1LCAweDc3LCAweDU4LAotCTB4OTksIDB4ZjIsIDB4NjUsIDB4OGQsIDB4YjIsIDB4OWIsIDB4ODMsIDB4MmMsIDB4OTcsIDB4MzMsIDB4ZjIsIDB4NDcsCi0JMHhjZSwgMHgxNSwgMHg1NSwgMHg2YiwgMHg5ZCwgMHg0NywgMHg1ZSwgMHgxMiwgMHgzOCwgMHhhNSwgMHg3MiwgMHhiMiwKLQkweDE2LCAweDdjLCAweDBiLCAweGJmLCAweGY3LCAweGUyLCAweGQ3LCAweGIxLCAweDE2LCAweGEzLCAweGVhLCAweDhjLAotCTB4ODIsIDB4N2UsIDB4YWUsIDB4ZDksIDB4NGMsIDB4YzEsIDB4N2YsIDB4ZTgsIDB4OTYsIDB4NjUsIDB4MTYsIDB4MTAsCi0JMHgwZiwgMHg1MywgMHhlYSwgMHg5YywgMHgwYiwgMHhkNywgMHhmMSwgMHg2ZiwgMHgyYiwgMHhmZiwgMHgyYywgMHgxNSwKLQkweGM4LCAweGU2LCAweDRjLCAweDA0LCAweDc0LCAweDM0LCAweDY1LCAweDlmLCAweDg2LCAweGQyLCAweGMzLCAweDEzLAotCTB4MGEsIDB4ZjMsIDB4MWEsIDB4ZTcsIDB4ZTAsIDB4YjAsIDB4OTYsIDB4MDYsIDB4NDQsIDB4Y2UsIDB4NjUsIDB4NjQsCi0JMHgwZSwgMHg2YiwgMHgzOCwgMHhiMCwgMHg0NCwgMHgxZCwgMHg1MCwgMHhiNiwgMHg5MywgMHhkMiwgMHgwNiwgMHhkOSwKLQkweDFmLCAweDAxLCAweGY2LCAweDMwLCAweDRlLCAweDUxLCAweGM2LCAweDYxLCAweGFjLCAweDhiLCAweDVlLCAweDA5LAotCTB4OWMsIDB4ODEsIDB4OGMsIDB4NGYsIDB4MDEsIDB4MjMsIDB4MmMsIDB4YjQsIDB4Y2IsIDB4ZjcsIDB4NmEsIDB4YmUsCi0JMHg0YywgMHgyZiwgMHhmMSwgMHg1YywgMHhiZiwgMHgzZSwgMHgzNSwgMHhkMiwgMHg0NywgMHgxYywgMHgyNSwgMHhkNSwKLQkweGRhLCAweDljLCAweGNjLCAweDlkLCAweDY2LCAweGNlLCAweDNlLCAweGE5LCAweGNlLCAweDBjLCAweDA0LCAweGQ0LAotCTB4OTksIDB4MTUsIDB4MzcsIDB4NjcsIDB4NzYsIDB4YmYsIDB4NWQsIDB4OGMsIDB4NTksIDB4MTUsIDB4ZWUsIDB4YjUsCi0JMHgwOSwgMHg2YywgMHg2NywgMHgxOCwgMHhlMywgMHg2ZSwgMHgyNCwgMHg1ZiwgMHgzNywgMHg1NywgMHgxZCwgMHgwNywKLQkweGJmLCAweDk3LCAweGU3LCAweGEzLCAweDk5LCAweGJjLCAweGM0LCAweDc5LCAweDc2LCAweDdhLCAweGMyLCAweGM2LAotCTB4ZmMsIDB4OTcsIDB4ZTEsIDB4M2YsIDB4ZTcsIDB4NGEsIDB4M2MsIDB4MjcsIDB4NWQsIDB4YzAsIDB4MGEsIDB4Y2IsCi0JMHhjOCwgMHhlNSwgMHgyMiwgMHg3MywgMHhjNiwgMHg4ZiwgMHg0MywgMHg2ZiwgMHhiYywgMHgyZSwgMHg4YywgMHgxYSwKLQkweGYwLCAweDAzLCAweDJiLCAweGVhLCAweGRkLCAweGNmLCAweGE4LCAweGRkLCAweDQwLCAweDBlLCAweDFiLCAweGQxLAotCTB4ZjYsIDB4NDMsIDB4ZDcsIDB4NzksIDB4YjMsIDB4Y2QsIDB4YjMsIDB4MDcsIDB4OWUsIDB4YzUsIDB4M2YsIDB4MGIsCi0JMHgzZiwgMHg3YSwgMHg1ZSwgMHhmOCwgMHg0ZSwgMHhkNiwgMHhlZCwgMHgyNiwgMHhmMywgMHhhNSwgMHhhYiwgMHhmMCwKLQkweDdiLCAweDk5LCAweDU4LCAweDA2LCAweDM2LCAweDk0LCAweDBmLCAweDc3LCAweDgwLCAweGU3LCAweGRmLCAweGM0LAotCTB4YmQsIDB4OWMsIDB4YzMsIDB4NzEsIDB4YTIsIDB4ZjEsIDB4MTUsIDB4MjksIDB4NDQsIDB4MDIsIDB4MzIsIDB4MTQsCi0JMHhiOSwgMHgyMiwgMHg5YiwgMHhlMSwgMHhjOSwgMHgzNCwgMHg3OSwgMHhkZCwgMHg4YSwgMHg4ZSwgMHg4YSwgMHhhNiwKLQkweGU4LCAweDBkLCAweGVlLCAweDg2LCAweDBkLCAweGRlLCAweDg0LCAweGJmLCAweDZiLCAweGY3LCAweDcyLCAweGZkLAotCTB4NTQsIDB4OTEsIDB4MTgsIDB4ZWEsIDB4NTksIDB4NzUsIDB4YjYsIDB4ZTAsIDB4YWEsIDB4YzUsIDB4M2EsIDB4MjAsCi0JMHhkZiwgMHhjNSwgMHhmZSwgMHgxZiwgMHg2YSwgMHg4YywgMHhiYiwgMHg3YiwgMHg3NywgMHhhYywgMHg0MywgMHg5MywKLQkweDNmLCAweDc3LCAweDhlLCAweGJiLCAweDJjLCAweDk3LCAweDQ3LCAweGQyLCAweDY5LCAweDZiLCAweGExLCAweDczLAotCTB4ZDksIDB4YTMsIDB4NzMsIDB4ZDYsIDB4YTMsIDB4NTMsIDB4ZjEsIDB4ZTgsIDB4NWMsIDB4NWQsIDB4YTUsIDB4YjMsCi0JMHgwNywgMHg3NiwgMHhkMCwgMHg2YywgMHg5ZSwgMHgwMCwgMHhkZSwgMHg0OCwgMHhjNiwgMHg5YiwgMHhjZCwgMHgzNCwKLQkweGYyLCAweGIyLCAweGQ5LCAweGUxLCAweDY5LCAweGI1LCAweGU3LCAweGFhLCAweDI3LCAweDQ2LCAweGM3LCAweDkzLAotCTB4OTYsIDB4MmIsIDB4N2YsIDB4NTgsIDB4ODEsIDB4NGMsIDB4YzMsIDB4MWUsIDB4ZjMsIDB4ZTIsIDB4NjIsIDB4NzUsCi0JMHhlZSwgMHgwNywgMHhiYSwgMHhmYiwgMHg4NSwgMHg1ZCwgMHhmMCwgMHgwMywgMHg0ZiwgMHgyMywgMHg5NiwgMHg1YywKLQkweDFjLCAweDNmLCAweDZmLCAweDQ5LCAweDdlLCAweGRiLCAweDI3LCAweDc1LCAweGQ4LCAweDdiLCAweDBmLCAweGRmLAotCTB4MjcsIDB4MzUsIDB4YTUsIDB4ZWIsIDB4ZTIsIDB4NzgsIDB4YjUsIDB4ZjYsIDB4MzQsIDB4ZjIsIDB4MjMsIDB4ZjYsCi0JMHhkZiwgMHg0ZSwgMHgwYywgMHhiNiwgMHhhYiwgMHg1MiwgMHg4YiwgMHhlYywgMHgzYSwgMHhjYiwgMHhmZCwgMHgyMSwKLQkweGY0LCAweGFiLCAweGQ0LCAweGJhLCAweDIxLCAweGY3LCAweDZlLCAweDU1LCAweDU3LCAweGI5LCAweDUyLCAweDBjLAotCTB4NDEsIDB4OGYsIDB4MjYsIDB4NmMsIDB4M2UsIDB4ODQsIDB4YjYsIDB4MzAsIDB4ZWMsIDB4YTAsIDB4MGYsIDB4ZWQsCi0JMHgzZiwgMHhjNywgMHhkYSwgMHg4ZSwgMHhhMCwgMHg3ZCwgMHhhNSwgMHg3MywgMHg1YywgMHhlMSwgMHg1OCwgMHg0YiwKLQkweGNlLCAweDM5LCAweDM3LCAweDExLCAweDczLCAweGRmLCAweDg0LCAweDFmLCAweDFkLCAweDQ0LCAweDlmLCAweDYxLAotCTB4ZjQsIDB4ZjksIDB4MTQsIDB4YzYsIDB4ZTEsIDB4M2IsIDB4Y2QsIDB4MWIsIDB4ZjEsIDB4ZDQsIDB4MDAsIDB4NGYsCi0JMHg3YSwgMHgwYiwgMHg0ZiwgMHgwZCwgMHhmMCwgMHgwMywgMHhkZiwgMHg3OSwgMHg5MiwgMHgzNSwgMHhlOCwgMHg2MSwKLQkweDM5LCAweDVhLCAweGU0LCAweDE5LCAweDI5LCAweGJlLCAweDE3LCAweDZmLCAweDRhLCAweDAwLCAweDk4LCAweGI0LAotCTB4ZWQsIDB4NjQsIDB4MzQsIDB4ZGMsIDB4NTAsIDB4YjUsIDB4MWUsIDB4ZGEsIDB4ZDYsIDB4NTAsIDB4YmMsIDB4MmEsCi0JMHgyYSwgMHhjZSwgMHg0NCwgMHg4ZSwgMHgyMiwgMHg3ZSwgMHhkZCwgMHg3NCwgMHhiYSwgMHhlNSwgMHg3NSwgMHg2ZiwKLQkweGFjLCAweDE1LCAweGUxLCAweGZlLCAweGU1LCAweGRhLCAweGIxLCAweDhlLCAweDk1LCAweGFlLCAweDhkLCAweGJmLAotCTB4NmEsIDB4MTksIDB4ZGUsIDB4YmMsIDB4N2EsIDB4MzEsIDB4ZDYsIDB4YWYsIDB4YTIsIDB4ZWYsIDB4YjUsIDB4ZjEsCi0JMHhjYiwgMHhiNSwgMHg4ZCwgMHhmYSwgMHhkZSwgMHg0NCwgMHhkZiwgMHhiNiwgMHg5NiwgMHhiZSwgMHgzNywgMHhkMSwKLQkweGFmLCAweDFiLCAweDcxLCAweGIwLCAweDViLCAweGNkLCAweDY5LCAweDE2LCAweDdjLCAweDVkLCAweDJmLCAweGFhLAotCTB4ZjcsIDB4YjQsIDB4MjEsIDB4NzcsIDB4OGUsIDB4NjksIDB4MTIsIDB4NTMsIDB4NjcsIDB4ZGMsIDB4NWEsIDB4NDksCi0JMHhkNCwgMHg4YywgMHg2OCwgMHhlZiwgMHhhOCwgMHhmNywgMHgyOCwgMHgxYiwgMHgxOCwgMHhiMywgMHg4MCwgMHg3YiwKLQkweGU3LCAweDI3LCAweGI0LCAweDU0LCAweDM1LCAweDg3LCAweDk4LCAweGY1LCAweDMwLCAweGYxLCAweDUzLCAweGRjLAotCTB4NDYsIDB4Y2MsIDB4YWMsIDB4ODAsIDB4NWUsIDB4YWQsIDB4ZDgsIDB4ZTAsIDB4NzksIDB4NmEsIDB4ZDgsIDB4YzUsCi0JMHgyZCwgMHhlMiwgMHhlYywgMHg4NywgMHgwZCwgMHg3NSwgMHhhZSwgMHgyMSwgMHhhZCwgMHg2YSwgMHg3NiwgMHg5NSwKLQkweGEyLCAweDk4LCAweGM5LCAweDExLCAweDllLCAweDY1LCAweGY4LCAweDBjLCAweGQ2LCAweGU1LCAweDU3LCAweGQwLAotCTB4OTYsIDB4NDQsIDB4N2MsIDB4M2MsIDB4YTAsIDB4MjUsIDB4Y2YsIDB4OGYsIDB4ZTMsIDB4ZmEsIDB4NDksIDB4NWMsCi0JMHhjMywgMHgxZiwgMHgyZiwgMHg2NCwgMHg3MSwgMHhmZiwgMHg0OSwgMHg1YywgMHg0ZiwgMHg2YiwgMHhhOSwgMHg3YSwKLQkweDE2LCAweGQ3LCAweDRmLCAweGUxLCAweDdhLCAweGNhLCAweDY0LCAweDllLCAweGYyLCAweGFhLCAweDk1LCAweGQxLAotCTB4NmMsIDB4ZDAsIDB4YjIsIDB4Y2YsIDB4OGYsIDB4ZTMsIDB4ZDMsIDB4NGEsIDB4OGYsIDB4ZjcsIDB4YTAsIDB4YTcsCi0JMHgyMiwgMHhmNywgMHhkYSwgMHg2MiwgMHhlMCwgMHg2OSwgMHg5ZiwgMHg5NiwgMHhhZSwgMHg3NiwgMHg4MSwgMHhjNiwKLQkweDAwLCAweDllLCAweGE3LCAweDRkLCAweGVkLCAweGY3LCAweGM2LCAweDY3LCAweGNkLCAweGU5LCAweDYzLCAweGFhLAotCTB4ZTYsIDB4NjQsIDB4MjQsIDB4MzIsIDB4YzAsIDB4YzksIDB4ODcsIDB4OTEsIDB4MDcsIDB4NjgsIDB4OTIsIDB4YjYsCi0JMHg5ZSwgMHg5MywgMHg0MiwgMHgxYywgMHg3ZSwgMHhhNSwgMHg2YSwgMHg0OCwgMHgyYSwgMHg5NCwgMHhjNywgMHhlZiwKLQkweGJjLCAweDI0LCAweDQ3LCAweDcxLCAweGJmLCAweDRhLCAweDViLCAweDYwLCAweGJmLCAweDNmLCAweDk1LCAweDQyLAotCTB4OTksIDB4YjgsIDB4OWYsIDB4NzUsIDB4MjYsIDB4ZDYsIDB4YTYsIDB4NTgsIDB4NWYsIDB4Y2EsIDB4NDEsIDB4MDYsCi0JMHgyMSwgMHhkYSwgMHhlZiwgMHgwNiwgMHgzNSwgMHgzMSwgMHhmNywgMHg4YywgMHgzNCwgMHhlMiwgMHhiMiwgMHg5NiwKLQkweGFjLCAweDcyLCAweGRmLCAweGFmLCAweDkxLCAweGI5LCAweDZjLCAweGYxLCAweGZkLCAweGIxLCAweDY5LCAweGVlLAotCTB4MjMsIDB4MTYsIDB4OGMsIDB4MDQsIDB4ZWIsIDB4MjMsIDB4YWEsIDB4YmUsIDB4MWUsIDB4NzcsIDB4ZjcsIDB4MDcsCi0JMHg1YiwgMHhjZiwgMHhhNCwgMHhmOCwgMHhlYiwgMHg4NSwgMHhlMywgMHg3ZSwgMHgwZCwgMHhjZiwgMHhiYiwgMHhmNSwKLQkweGFjLCAweDU0LCAweGZkLCAweDlkLCAweGJhLCAweGUwLCAweDNiLCAweDAwLCAweGU3LCAweGEwLCAweDhiLCAweGNiLAotCTB4MmEsIDB4MzcsIDB4ZTYsIDB4MWUsIDB4ZWUsIDB4YmIsIDB4ZTUsIDB4NTQsIDB4YzgsIDB4NjEsIDB4OGEsIDB4YWMsCi0JMHg5MSwgMHhmOSwgMHhmYiwgMHg3NiwgMHhiZSwgMHgxYywgMHhkNywgMHhmMywgMHg0YSwgMHgzZSwgMHg2NywgMHg0MCwKLQkweDUzLCAweGUyLCAweGY0LCAweGJiLCAweGQ5LCAweDEwLCAweGY3LCAweGRmLCAweGY4LCAweDhjLCAweDdjLCAweGYzLAotCTB4MmUsIDB4ZGYsIDB4ZTQsIDB4OTksIDB4ZjIsIDB4MzgsIDB4MGMsIDB4ZmYsIDB4YzksIDB4ZjcsIDB4MmIsIDB4OWUsCi0JMHg5MywgMHg1YywgMHg5YywgMHgzNSwgMHgxZSwgMHgwMywgMHhiMSwgMHgzMSwgMHg4ZiwgMHhkZiwgMHg3NywgMHhlNSwKLQkweDM3LCAweGViLCAweGM5LCAweDJmLCAweDU3LCAweGZlLCAweDJmLCAweDRhLCAweDg3LCAweDE1LCAweDhiLCAweGUzLAotCTB4ZjksIDB4YjUsIDB4OGYsIDB4YmQsIDB4NGEsIDB4NzcsIDB4MTUsIDB4NzUsIDB4N2UsIDB4ZDcsIDB4OTcsIDB4ODEsCi0JMHg1ZiwgMHhiZiwgMHhkYiwgMHhkOCwgMHhmNiwgMHhjNiwgMHgyZCwgMHhmMiwgMHhmNiwgMHgxMCwgMHhjZiwgMHg0MywKLQkweDBjLCAweGRhLCAweDQyLCAweGZlLCAweDM5LCAweDBmLCAweGM2LCAweDMwLCAweDdmLCAweGFmLCAweGQ1LCAweDlmLAotCTB4ODMsIDB4M2YsIDB4Y2YsIDB4ZmIsIDB4OTUsIDB4MGYsIDB4ZjksIDB4ZmQsIDB4ZTQsIDB4MTYsIDB4ZTksIDB4Y2EsCi0JMHg5OCwgMHg4NiwgMHhjNSwgMHhkOCwgMHhmMCwgMHhiOCwgMHhiNywgMHgzZiwgMHhmMCwgMHg3ZiwgMHg0MywgMHhjZSwKLQkweGFlLCAweDJjLCAweDAyLCAweDA5LCAweDk5LCAweGY1LCAweGRlLCAweGJmLCAweGRlLCAweGMwLCAweDFlLCAweGQ2LAotCTB4ZWYsIDB4MzUsIDB4MzcsIDB4MzIsIDB4NjcsIDB4YWQsIDB4YmIsIDB4ZjMsIDB4YWUsIDB4NmMsIDB4MzAsIDB4ZWYsCi0JMHg4YSwgMHgzNywgMHhlZiwgMHhlYSwgMHg3ZCwgMHhmMiwgMHg1YiwgMHg5OSwgMHhiNywgMHgzMSwgMHg2NywgMHhkYSwKLQkweGRjLCAweDQ2LCAweGY2LCAweDI4LCAweGVhLCAweGRkLCAweGIwLCAweDE1LCAweDIzLCAweDE4LCAweGI0LCAweDlkLAotCTB4N2IsIDB4ZDUsIDB4NTAsIDB4OTksIDB4NTcsIDB4YmIsIDB4NzYsIDB4NzksIDB4MTYsIDB4YjEsIDB4YjAsIDB4NWMsCi0JMHg3NiwgMHg3MywgMHhlYywgMHhiMiwgMHhjMywgMHg1YSwgMHhmNiwgMHhiYiwgMHhmMSwgMHhjMCwgMHg3NywgMHhiOSwKLQkweGJlLCAweGE4LCAweGNlLCAweGJiLCAweGNjLCAweDNhLCAweDZlLCAweGRkLCAweGFiLCAweDVjLCAweDZlLCAweDhkLAotCTB4YTksIDB4MGYsIDB4MzIsIDB4OWUsIDB4MGUsIDB4ZTYsIDB4NjUsIDB4ODIsIDB4ZWYsIDB4OTQsIDB4ZTMsIDB4ZmEsCi0JMHgxMSwgMHhiOSwgMHhiMiwgMHhhMCwgMHhmNiwgMHhhYywgMHhiYywgMHhiZCwgMHgyMSwgMHhlZSwgMHhmOSwgMHhhOCwKLQkweGZkLCAweDZmLCAweGY4LCAweGI1LCAweDQ5LCAweGU1LCAweGQ3LCAweDk3LCAweDE3LCAweGQ0LCAweDNkLCAweDE3LAotCTB4MmIsIDB4MzksIDB4MTMsIDB4ZjAsIDB4ZmIsIDB4YzgsIDB4MjUsIDB4YWMsIDB4MDcsIDB4YTQsIDB4ODAsIDB4OWMsCi0JMHhmYiwgMHhhYywgMHg3NSwgMHg3OCwgMHgwYiwgMHg3MSwgMHgwZSwgMHg2OSwgMHgyZCwgMHg4MywgMHhkNiwgMHhlNSwKLQkweDA1LCAweGQ5LCAweGMyLCAweDMzLCAweDI1LCAweDY1LCAweGI1LCAweGNmLCAweGU2LCAweGQ2LCAweGM1LCAweGE3LAotCTB4YzUsIDB4ZmYsIDB4N2YsIDB4MWQsIDB4NDEsIDB4MmYsIDB4MTYsIDB4ZjIsIDB4NWMsIDB4MGIsIDB4ZGYsIDB4NzMsCi0JMHhhNiwgMHhhZiwgMHg0MCwgMHgxZSwgMHgzNCwgMHhjMSwgMHg3ZCwgMHg5YywgMHg2NiwgMHhkMywgMHhhZCwgMHg5YiwKLQkweDM3LCAweGIxLCAweDJlLCAweGRhLCAweGY4LCAweDBlLCAweDA1LCAweGZlLCAweDBlLCAweGMzLCAweDdlLCAweGIwLAotCTB4NGUsIDB4NTYsIDB4ZGIsIDB4NzksIDB4Y2QsIDB4ZGMsIDB4YzMsIDB4YmYsIDB4NjYsIDB4NjAsIDB4ZmIsIDB4M2YsCi0JMHhlOCwgMHhmMywgMHg0OSwgMHgxNCwgMHgzOCwgMHg0NiwgMHgwMCwgMHgwMCwgMHgwMCB9OworCTB4YmQsIDB4N2MsIDB4N2QsIDB4NzAsIDB4MWMsIDB4ZTcsIDB4NzksIDB4ZGYsIDB4YjMsIDB4YmIsIDB4MDcsIDB4ZTAsCisJMHgwMCwgMHg4MiwgMHhlMCwgMHgxMiwgMHgzOSwgMHg1MiwgMHgyNywgMHgwYSwgMHhhNiwgMHg2ZSwgMHg4OSwgMHgzZCwKKwkweDA4LCAweDMyLCAweDIwLCAweDcxLCAweGM1LCAweDIwLCAweDM2LCAweDI2LCAweGI5LCAweGNhLCAweGFiLCAweGJiLAorCTB4MDMsIDB4NzgsIDB4OTQsIDB4MzEsIDB4MzEsIDB4YzQsIDB4YzIsIDB4MTYsIDB4ZWQsIDB4NzAsIDB4ZDQsIDB4ZWIsCisJMHgwMSwgMHhhNCwgMHg5NSwgMHg1NCwgMHg5ZSwgMHhiMiwgMHhiNiwgMHhkYSwgMHg3MiwgMHg1YSwgMHgzNSwgMHgzYSwKKwkweDFmLCAweGMwLCAweDBmLCAweDI5LCAweDQ3LCAweDFjLCAweDI0LCAweGMwLCAweDg0LCAweGZlLCAweDcwLCAweDkzLAorCTB4MTMsIDB4MGUsIDB4MjQsIDB4NjQsIDB4ZjcsIDB4ODgsIDB4OTMsIDB4ZmMsIDB4ZDksIDB4M2YsIDB4NjIsIDB4MGIsCisJMHgwMywgMHhkMiwgMHhiNCwgMHg1YSwgMHhiYiwgMHhiNSwgMHhkYSwgMHgyOCwgMHgxMywgMHhjZiwgMHhmNCwgMHg2MywKKwkweDMwLCAweDE0LCAweGE1LCAweDI4LCAweDcxLCAweGE3LCAweDU2LCAweDliLCAweDRjLCAweGEyLCAweDM2LCAweDk0LAorCTB4YWYsIDB4YmYsIDB4ZGYsIDB4YmIsIDB4YmIsIDB4ZTAsIDB4MDEsIDB4MjIsIDB4NjUsIDB4NTEsIDB4OTMsIDB4MTQsCisJMHgzMywgMHgzNywgMHg3NywgMHhmYiwgMHhlZSwgMHhiYiwgMHhlZiwgMHhmYiwgMHg3YywgMHhiZCwgMHhjZiwgMHhmMywKKwkweGZjLCAweDllLCAweGY3LCAweDVkLCAweDQ0LCAweDQ1LCAweGRhLCAweGM0LCAweGZmLCAweGRiLCAweDhhLCAweDRmLAorCTB4ZWMsIDB4ZDgsIDB4ZjEsIDB4YzcsIDB4ZWYsIDB4ZmQsIDB4ZjgsIDB4YmQsIDB4YmYsIDB4OGEsIDB4OWYsIDB4ZjcsCisJMHg4OSwgMHhkNiwgMHg2MiwgMHhmMCwgMHhlNiwgMHg1YiwgMHg4NiwgMHg0OCwgMHhmNiwgMHhjZiwgMHhlNSwgMHg0MywKKwkweGZmLCAweGUxLCAweDcxLCAweDMzLCAweDE4LCAweDlmLCAweDFmLCAweDA5LCAweGViLCAweDg5LCAweDU3LCAweDg3LAorCTB4OTMsIDB4YjYsIDB4ODQsIDB4OGQsIDB4NDQsIDB4ZmUsIDB4YTEsIDB4NzEsIDB4NWIsIDB4YzQsIDB4YWQsIDB4ZjYsCisJMHhjNSwgMHg1MiwgMHhmMiwgMHg2ZSwgMHgzZCwgMHgxZiwgMHgwOSwgMHgwOSwgMHhkYiwgMHgzZiwgMHg5MiwgMHhiOCwKKwkweGY2LCAweGU0LCAweGY3LCAweDNlLCAweDZlLCAweGJkLCAweDVkLCAweDM2LCAweDI0LCAweDZjLCAweDI2LCAweGIyLAorCTB4NjIsIDB4ZjYsIDB4NDgsIDB4YjgsIDB4MGIsIDB4Y2YsIDB4N2MsIDB4ZjUsIDB4YWUsIDB4NDcsIDB4MGQsIDB4ZTksCisJMHgwOCwgMHhjNiwgMHg3YSwgMHhhYiwgMHhmZSwgMHhiZCwgMHhiYiwgMHgyNCwgMHhiZiwgMHgyYiwgMHg1MSwgMHg4ZiwKKwkweDg1LCAweDEyLCAweGVmLCAweGQ2LCAweGE3LCAweDA2LCAweGMyLCAweGEyLCAweDI3LCAweGFjLCAweDY4LCAweGQyLAorCTB4ODgsIDB4YzgsIDB4Y2IsIDB4MzUsIDB4NTMsIDB4NWUsIDB4YWMsIDB4YzUsIDB4NjQsIDB4YjIsIDB4MjYsIDB4MWQsCisJMHhlOSwgMHhkYSwgMHg4ZCwgMHg2OCwgMHhhYSwgMHhhMywgMHhlZiwgMHhiYiwgMHhmNSwgMHhlNCwgMHg0MCwgMHgyOCwKKwkweDZiLCAweDI0LCAweGE0LCAweDIzLCAweDU5LCAweDkzLCAweGQxLCAweDYzLCAweGM1LCAweGQ2LCAweDg3LCAweDliLAorCTB4MTIsIDB4NGYsIDB4ZDYsIDB4NzUsIDB4NWIsIDB4YjIsIDB4YTEsIDB4ODQsIDB4OWQsIDB4ZDcsIDB4ZjUsIDB4ZjYsCisJMHg0MSwgMHhmMywgMHg2MywgMHg2OCwgMHhhZiwgMHgwZSwgMHg4NiwgMHgyNiwgMHg4YiwgMHhhNiwgMHg5YywgMHgxYiwKKwkweDY4LCAweDE1LCAweGRkLCAweDBlLCAweDRiLCAweGIyLCAweGQ2LCAweGZhLCAweGIwLCAweDllLCAweDg4LCAweDg4LAorCTB4NWIsIDB4YWIsIDB4ZDcsIDB4OGYsIDB4MzksIDB4ZmYsIDB4NjQsIDB4YWYsIDB4ZjksIDB4ZWIsIDB4ZTEsIDB4ZjAsCisJMHg2NCwgMHg1MSwgMHhkZSwgMHgwZSwgMHhkOSwgMHg3NiwgMHg3NCwgMHg0MiwgMHg3YSwgMHhjYywgMHg5YywgMHg2OCwKKwkweDkyLCAweGVjLCAweGVmLCAweDg5LCAweDFlLCAweGMxLCAweGY3LCAweDc4LCAweDdmLCAweGRjLCAweDRjLCAweGM5LAorCTB4MTYsIDB4NzEsIDB4Y2QsIDB4NmYsIDB4YWUsIDB4OTgsIDB4M2QsIDB4NWQsIDB4NTksIDB4M2QsIDB4MTEsIDB4OTYsCisJMHg3NCwgMHg1MSwgMHgxMywgMHhjMywgMHg4ZSwgMHhjOCwgMHg2NCwgMHhjNSwgMHg5NiwgMHhmYywgMHg1MiwgMHg4NywKKwkweGU0LCAweDJiLCAweGYyLCAweGM0LCAweDk0LCAweGQzLCAweDJlLCAweDUzLCAweDRiLCAweDQ3LCAweDdkLCAweDVkLAorCTB4NDQsIDB4ZDAsIDB4ZDYsIDB4MmIsIDB4ZjksIDB4NWEsIDB4MTQsIDB4OWYsIDB4OWYsIDB4ZjgsIDB4ZmMsIDB4ZWEsCisJMHgyMiwgMHgzYiwgMHgwNSwgMHhjZiwgMHhmNywgMHhhNywgMHhkZCwgMHhlYSwgMHhkNywgMHhjMiwgMHg1ZSwgMHhkYiwKKwkweDdmLCAweGQ5LCAweGUyLCAweDdkLCAweDgzLCAweGRmLCAweDEyLCAweGY4LCAweDJkLCAweDg1LCAweDY1LCAweGNkLAorCTB4ODgsIDB4Y2EsIDB4ZjcsIDB4ZWUsIDB4OGEsIDB4YzksIDB4NTQsIDB4NjksIDB4MGQsIDB4YjIsIDB4ODksIDB4Y2EsCisJMHgzNywgMHg2YSwgMHgxMSwgMHg3OSwgMHg0OSwgMHhjOSwgMHgyMiwgMHhhNCwgMHgwZCwgMHhhMywgMHhjZiwgMHg2NCwKKwkweDY5LCAweDQyLCAweDNmLCAweDUxLCAweGNjLCAweDRiLCAweGFhLCAweDk2LCAweGQ1LCAweDBiLCAweDczLCAweDY2LAorCTB4NDcsIDB4NzIsIDB4MjksIDB4YTcsIDB4NGYsIDB4Y2UsIDB4NzUsIDB4NzYsIDB4YTQsIDB4OTYsIDB4MjYsIDB4ZjQsCisJMHg0MiwgMHgzMSwgMHgwYSwgMHgzOSwgMHg5OCwgMHgxZCwgMHhhOSwgMHhmOSwgMHgwOCwgMHhhZSwgMHgzYiwgMHgzYiwKKwkweDkyLCAweGYzLCAweGQ2LCAweDBjLCAweDI2LCAweDQ1LCAweDlmLCAweDY4LCAweDQ3LCAweGFhLCAweDY0LCAweDY1LAorCTB4NDUsIDB4YmEsIDB4OWQsIDB4MWYsIDB4NDgsIDB4NTcsIDB4NDcsIDB4YWEsIDB4ZjYsIDB4NWIsIDB4ZmEsIDB4OGEsCisJMHhhOSwgMHg0OSwgMHhlMSwgMHgxZSwgMHgzMSwgMHhhMywgMHg4OSwgMHhiNywgMHhlYiwgMHhiNywgMHhkYiwgMHg5YSwKKwkweDk4LCAweGY2LCAweDNiLCAweGY1LCAweGVkLCAweDkwLCAweDRkLCAweDZlLCAweGI2LCAweDE1LCAweGJjLCAweDkyLAorCTB4MjYsIDB4NTMsIDB4NzIsIDB4ZjMsIDB4N2QsIDB4ZTYsIDB4YWEsIDB4MzQsIDB4ODksIDB4MWIsIDB4MDksIDB4YWUsCisJMHhlYiwgMHhmNSwgMHhhNCwgMHhmMywgMHgwNywgMHhlNCwgMHg5MSwgMHhmMiwgMHhlZSwgMHgxOCwgMHg4NiwgMHg1ZSwKKwkweDkyLCAweGEwLCAweDM5LCAweGU5LCAweGJjLCAweDViLCAweGY3LCAweDllLCAweDA5LCAweDYzLCAweGNlLCAweDUwLAorCTB4YzcsIDB4NTAsIDB4YTksIDB4NWUsIDB4NGYsIDB4M2IsIDB4MTgsIDB4ZGYsIDB4MDksIDB4OWUsIDB4NmQsIDB4OTIsCisJMHg3MiwgMHhjNCwgMHgyZCwgMHg0ZiwgMHgzYSwgMHg5NiwgMHhlMSwgMHhjOSwgMHg4NywgMHhiYSwgMHhlNywgMHhiNSwKKwkweDBiLCAweDdkLCAweGU0LCAweDI1LCAweDE3LCAweDkxLCAweDcyLCAweGMxLCAweGY5LCAweDk4LCAweDNjLCAweGU1LAorCTB4NDQsIDB4YzEsIDB4NWYsIDB4NTgsIDB4NGUsIDB4MzksIDB4YjAsIDB4MmYsIDB4ZmIsIDB4YjgsIDB4OTYsIDB4YWMsCisJMHg1OSwgMHhiMSwgMHhhYywgMHgzYywgMHgyZCwgMHhjOSwgMHhmOSwgMHg2ZSwgMHgzMywgMHgyZCwgMHg5OCwgMHhkYiwKKwkweGFlLCAweGRmLCAweDk5LCAweDc0LCAweDMwLCAweDVmLCAweGZmLCAweGZmLCAweGFkLCAweGJiLCAweDExLCAweDJiLAorCTB4NWIsIDB4OTYsIDB4NWUsIDB4MjksIDB4OTQsIDB4YmEsIDB4OWQsIDB4MWYsIDB4NDMsIDB4NGYsIDB4NjEsIDB4NWIsCisJMHhkYywgMHg3MSwgMHhkYiwgMHg4NCwgMHhkYywgMHhhYywgMHhkZSwgMHg5NCwgMHg1MSwgMHg5NywgMHgwNywgMHgzMSwKKwkweDdmLCAweGQyLCAweGM2LCAweGZkLCAweDlhLCAweDZjLCAweGQzLCAweGVkLCAweDY2LCAweDI5LCAweDk4LCAweDEyLAorCTB4NjksIDB4OTMsIDB4ZGQsIDB4NTIsIDB4OTgsIDB4NDUsIDB4YmIsIDB4ZTMsIDB4NzYsIDB4ZWEsIDB4NzgsIDB4MjYsCisJMHgzMywgMHhjMCwgMHgzNiwgMHhkMSwgMHg4YywgMHgwNCwgMHg3NSwgMHgyYywgMHhiMiwgMHg1MCwgMHhlZCwgMHhjNSwKKwkweGZjLCAweDcxLCAweGI3LCAweDU1LCAweDMzLCAweDY1LCAweGNkLCAweDBjLCAweDQ5LCAweGE1LCAweDFhLCAweDc3LAorCTB4YTMsIDB4NWEsIDB4YjMsIDB4OWMsIDB4OGEsIDB4YjcsIDB4NDEsIDB4YTYsIDB4NTEsIDB4OGMsIDB4MmQsIDB4NWYsCisJMHhkNiwgMHgxMywgMHhmMSwgMHg2OCwgMHgwZSwgMHg0YSwgMHhhMywgMHgxZCwgMHg0ZCwgMHg4MSwgMHg5ZSwgMHgyOSwKKwkweDI3LCAweGFiLCAweGE1LCAweDZhLCAweDlmLCAweGQzLCAweDkyLCAweDRiLCAweDg3LCAweGI0LCAweGZkLCAweDRiLAorCTB4ZTgsIDB4NTMsIDB4ZmIsIDB4MWYsIDB4YmUsIDB4MGQsIDB4NDQsIDB4NDEsIDB4OWIsIDB4OGUsIDB4NjcsIDB4ZDksCisJMHgwZSwgMHg5YSwgMHgxNSwgMHhlZCwgMHg2OCwgMHg4MywgMHgyZSwgMHg1NywgMHhjNiwgMHgyMiwgMHgxZCwgMHg0OSwKKwkweGE1LCAweDRiLCAweGQyLCAweGE2LCAweDRiLCAweDZlLCAweDU0LCAweDkzLCAweDRlLCAweGRiLCAweDk1LCAweGYwLAorCTB4YWYsIDB4NDEsIDB4OWYsIDB4ZjMsIDB4ZDAsIDB4ZTUsIDB4N2MsIDB4NGMsIDB4NGUsIDB4OTQsIDB4MjQsIDB4YTIsCisJMHgwYiwgMHhlNywgMHhjYSwgMHhlYSwgMHg5NSwgMHgyYSwgMHhlZCwgMHgwMSwgMHhiYSwgMHg4NSwgMHhlZSwgMHgwYiwKKwkweDU1LCAweDNlLCAweDBiLCAweDFkLCAweDk2LCAweGQyLCAweDkwLCAweDRmLCAweDA2LCAweDczLCAweDFmLCAweGQ0LAorCTB4MWUsIDB4YWMsIDB4OGMsIDB4NjksIDB4MTksIDB4ZDgsIDB4NDksIDB4NjEsIDB4YjYsIDB4MGYsIDB4YmEsIDB4YjMsCisJMHg2MiwgMHg2YiwgMHhiMiwgMHg0ZCwgMHgwYSwgMHhiNiwgMHgxZCwgMHhmYiwgMHhhYywgMHhiNCwgMHhjYiwgMHhhOSwKKwkweDc5LCAweDViLCAweDRlLCAweGNjLCAweGMzLCAweDFlLCAweDRkLCAweGNiLCAweDVjLCAweDk0LCAweGFlLCAweGVjLAorCTB4OTYsIDB4NDQsIDB4ODcsIDB4M2MsIDB4M2QsIDB4NmIsIDB4NjUsIDB4Y2EsIDB4ZDIsIDB4ZWQsIDB4YmUsIDB4ODEsCisJMHhmYiwgMHhiOSwgMHgzMywgMHhkNCwgMHhhOSwgMHhlNCwgMHg1MywgMHg4ZSwgMHgyMSwgMHg1OSwgMHg5MywgMHg3NiwKKwkweDdkLCAweDliLCAweDI2LCAweDZkLCAweGY1LCAweDI3LCAweDkzLCAweDhlLCAweDE1LCAweGE1LCAweGNkLCAweGE2LAorCTB4M2UsIDB4ZGQsIDB4NmQsIDB4MWUsIDB4MTAsIDB4Y2IsIDB4Y2MsIDB4NTAsIDB4ZmUsIDB4NGUsIDB4MWYsIDB4ZjQsCisJMHhmMCwgMHhiZiwgMHgyOSwgMHg3YiwgMHg4YywgMHg0NSwgMHgxZCwgMHhmNywgMHg0NSwgMHg0ZiwgMHg0MSwgMHg5NywKKwkweDU5LCAweGE1LCAweGUzLCAweDBlLCAweGNjLCAweDFmLCAweGYyLCAweDZkLCAweDg3LCAweDZiLCAweGUyLCAweDZlLAorCTB4Y2QsIDB4OTMsIDB4NDMsIDB4ODcsIDB4Y2MsIDB4NTQsIDB4ZGEsIDB4YTUsIDB4MDAsIDB4MWQsIDB4MTYsIDB4YzQsCisJMHg5NiwgMHhjMiwgMHhkMiwgMHg1ZSwgMHhiZiwgMHhkZCwgMHhjNiwgMHg3YSwgMHhmOSwgMHg1MywgMHg1ZCwgMHhkYSwKKwkweDhlLCAweDZiLCAweDg3LCAweDZhLCAweDNmLCAweGQ3LCAweDdjLCAweGZiLCAweDgxLCAweGZkLCAweDg1LCAweGM1LAorCTB4MWQsIDB4MGQsIDB4Y2IsIDB4ZjksIDB4OWEsIDB4NjcsIDB4N2YsIDB4MGIsIDB4ZjAsIDB4M2QsIDB4YWUsIDB4ZTksCisJMHhjMiwgMHg5NiwgMHhkZSwgMHg1YywgMHhlZiwgMHg3MywgMHhiZSwgMHhkNiwgMHg4NSwgMHg2NywgMHhjMywgMHg3MiwKKwkweGEyLCAweGM2LCAweGZlLCAweDc5LCAweGQ4LCAweDU4LCAweDU4LCAweDk2LCAweGVmLCAweDZhLCAweDk3LCAweDJjLAorCTB4ZGEsIDB4MGIsIDB4ZjMsIDB4ZTIsIDB4MjYsIDB4MWQsIDB4MWQsIDB4Y2YsIDB4NzQsIDB4ODAsIDB4OTcsIDB4OWQsCisJMHhmOCwgMHhiNCwgMHhjOSwgMHg3OCwgMHhhNSwgMHhjNSwgMHhlNSwgMHg3YSwgMHgxZCwgMHhhZiwgMHg1MSwgMHhmZiwKKwkweGY4LCAweDJlLCAweDA1LCAweDM2LCAweDQwLCAweGY5LCAweGIyLCAweDlkLCAweGNmLCAweGIxLCAweGRkLCAweDQ0LAorCTB4N2IsIDB4NjMsIDB4MWIsIDB4NmQsIDB4N2IsIDB4MWIsIDB4NjUsIDB4ZGEsIDB4Y2IsIDB4MzUsIDB4OWEsIDB4MmIsCisJMHhjNSwgMHhjZCwgMHg0MywgMHhmYywgMHhhZSwgMHhkMSwgMHgxZSwgMHgxYSwgMHg2ZCwgMHgyMSwgMHg4NCwgMHhmZSwKKwkweGQwLCAweDYzLCAweDA1LCAweDczLCAweGNkLCAweDVlLCAweGFiLCAweDM3LCAweDBkLCAweGUwLCAweGRhLCAweGZlLAorCTB4MWQsIDB4ZjAsIDB4YzksIDB4YjksIDB4NDMsIDB4YTAsIDB4NGIsIDB4OTcsIDB4NmMsIDB4NDUsIDB4ZDEsIDB4MTYsCisJMHhhMywgMHgwZCwgMHg3OCwgMHg3YywgMHg3NCwgMHhjOSwgMHhlNCwgMHg3YywgMHg3YiwgMHg0NywgMHg3YSwgMHg5ZSwKKwkweGVkLCAweGM5LCAweGE4LCAweDAxLCAweDNlLCAweGM3LCAweDFkLCAweDU5LCAweDk5LCAweDcyLCAweGY0LCAweGVlLAorCTB4MTAsIDB4ZTgsIDB4OWEsIDB4YzAsIDB4ODIsIDB4MDMsIDB4MWYsIDB4M2UsIDB4OGQsIDB4MmIsIDB4YjgsIDB4ZGYsCisJMHgyOSwgMHhlMywgMHg0YiwgMHhlYywgMHhjYiwgMHgzOSwgMHgwYSwgMHhkYiwgMHg3NSwgMHg0OSwgMHg4MCwgMHgzNiwKKwkweDdjLCAweDZjLCAweDBiLCAweGY3LCAweDViLCAweDMxLCAweDRmLCAweDNiLCAweDZjLCAweDY3LCAweDlhLCAweGJhLAorCTB4ZmIsIDB4NDQsIDB4ZDIsIDB4ZTksIDB4OTQsIDB4ZWMsIDB4N2EsIDB4NWYsIDB4ODEsIDB4ZGQsIDB4YjEsIDB4N2YsCisJMHhlZiwgMHhhNiwgMHhiZSwgMHg5MCwgMHhlZiwgMHgxMiwgMHhjNiwgMHg5YywgMHg2ZiwgMHg4NSwgMHgwYywgMHhkOSwKKwkweGFlLCAweDgzLCAweGU2LCAweDE2LCAweGQwLCAweDAwLCAweDFmLCAweDZjLCAweDc3LCAweDYzLCAweDNkLCAweGI0LAorCTB4NjAsIDB4ZmMsIDB4MmQsIDB4ZTAsIDB4YTksIDB4NTUsIDB4MjYsIDB4NjYsIDB4M2IsIDB4YTEsIDB4MGIsIDB4MTMsCisJMHg3ZCwgMHhjMywgMHhmMiwgMHg3NCwgMHhjOSwgMHg4MiwgMHgwZCwgMHhiMCwgMHgzZiwgMHg3NCwgMHgzMCwgMHg2ZiwKKwkweDQ1LCAweDJiLCAweGUyLCAweGNhLCAweDk0LCAweGQzLCAweDAyLCAweGZiLCAweGFhLCAweGQ3LCAweDhmLCAweGMwLAorCTB4M2UsIDB4YmUsIDB4YWUsIDB4ZmMsIDB4NDUsIDB4OWYsIDB4MzksIDB4YTQsIDB4NDksIDB4YmUsIDB4MjUsIDB4ZjEsCisJMHg3ZCwgMHhkMCwgMHg2MywgMHgzZCwgMHgyYSwgMHhjMiwgMHhlYiwgMHhiZCwgMHgxYSwgMHhkNywgMHgyYywgMHhlNCwKKwkweGM4LCAweGI5LCAweGUxLCAweDkzLCAweDc2LCAweDQyLCAweDg2LCAweGY0LCAweDViLCAweDVkLCAweGIwLCAweGU3LAorCTB4YTgsIDB4ZjIsIDB4MjcsIDB4NDMsIDB4MzcsIDB4ZjQsIDB4MjcsIDB4ZDYsIDB4NjgsIDB4MTksIDB4NzMsIDB4MTUsCisJMHg5NiwgMHg0MiwgMHhmNCwgMHg2MSwgMHg4MywgMHg1OCwgMHhhZSwgMHhiMiwgMHgxNSwgMHg2YiwgMHg2ZiwgMHg1MiwKKwkweGQ5LCAweGM3LCAweDRmLCAweGM4LCAweDZmLCAweGZkLCAweDUzLCAweDBlLCAweGU5LCAweDIyLCAweGJmLCAweDJlLAorCTB4OWUsIDB4YTUsIDB4MGQsIDB4NWEsIDB4YzcsIDB4NWQsIDB4MzUsIDB4ZmYsIDB4NGYsIDB4ZmMsIDB4ZjksIDB4M2QsCisJMHhkYSwgMHgwYiwgMHhhNSwgMHgwZSwgMHgyZCwgMHhhNSwgMHg2OCwgMHgwOCwgMHhjNiwgMHgxMSwgMHg1OSwgMHgzZCwKKwkweGQzLCAweDZkLCAweDNlLCAweDA4LCAweDFiLCAweGE2LCAweDlmLCAweDVhLCAweGJkLCAweDQwLCAweDFkLCAweDYzLAorCTB4OGMsIDB4MDEsIDB4ZWEsIDB4ZDgsIDB4NTQsIDB4ZjQsIDB4MjUsIDB4ZTcsIDB4YjksIDB4ZjYsIDB4YTQsIDB4Y2IsCisJMHgxMCwgMHhmYSwgMHgwOCwgMHhmOCwgMHg1YywgMHhhYywgMHhjNSwgMHg0OSwgMHg3ZiwgMHgyZCwgMHhlNiwgMHhhYSwKKwkweGI0LCAweGJmLCAweGM3LCAweGYxLCAweGFjLCAweDJlLCAweDQzLCAweDcxLCAweGZhLCAweDg3LCAweGE3LCAweDI1LAorCTB4MDUsIDB4MWYsIDB4MDksIDB4M2QsIDB4NGEsIDB4MDUsIDB4YmMsIDB4MmMsIDB4OTQsIDB4MWEsIDB4ZmQsIDB4MTYsCisJMHg2YywgMHhhYiwgMHhmZiwgMHhhZiwgMHhlYiwgMHg5ZSwgMHgzZiwgMHhhNCwgMHg2ZiwgMHhhMCwgMHhhZiwgMHgyOSwKKwkweDk4LCAweDNhLCAweDI0LCAweDg3LCAweGM4LCAweGUwLCAweDQyLCAweDM3LCAweDRlLCAweGQyLCAweGIwLCAweDMyLAorCTB4NTksIDB4YzYsIDB4MWMsIDB4YmIsIDB4MmUsIDB4ZjYsIDB4N2QsIDB4ODIsIDB4NDgsIDB4ZGEsIDB4Y2IsIDB4ZjgsCisJMHhiNywgMHgyZiwgMHhmMCwgMHg0ZiwgMHhhYiwgMHhkNSwgMHg0MCwgMHgxNywgMHhkNCwgMHgyYiwgMHhmNSwgMHgxMCwKKwkweGY4LCAweDg4LCAweDkwLCAweDVjLCAweDg0LCAweGVmLCAweDlhLCAweDJhLCAweGI1LCAweGNiLCAweDBhLCAweDY4LAorCTB4YmEsIDB4NTQsIDB4MGQsIDB4NmMsIDB4Y2QsIDB4ZjAsIDB4NmQsIDB4OGQsIDB4Y2YsIDB4YjQsIDB4ZTMsIDB4ZjksCisJMHgxMCwgMHhmYywgMHg5YSwgMHhlNCwgMHg4ZCwgMHgwNCwgMHg3ZSwgMHgxNywgMHgzOSwgMHgyNiwgMHhkYiwgMHgwMiwKKwkweDNiLCAweGU3LCAweDlhLCAweGIxLCAweGRjLCAweGIyLCAweDM0LCAweDRiLCAweDI2LCAweDhlLCAweGY4LCAweDMxLAorCTB4YWYsIDB4NjMsIDB4YWUsIDB4MmUsIDB4ZjgsIDB4ZjIsIDB4OTAsIDB4MWMsIDB4MmQsIDB4NDUsIDB4ZTQsIDB4ZjMsCisJMHgyNSwgMHhmMiwgMHg5NSwgMHhkNiwgMHg1MiwgMHhkMCwgMHg1YiwgMHg3MiwgMHhiZSwgMHgwZSwgMHg5ZCwgMHgwZiwKKwkweGMzLCAweGU3LCAweDY1LCAweGI0LCAweDIxLCAweGY4LCAweDlmLCAweDAzLCAweDk1LCAweGNmLCAweDY5LCAweGU5LAorCTB4YTUsIDB4YWMsIDB4MzYsIDB4NWMsIDB4M2IsIDB4YTQsIDB4NjUsIDB4OTYsIDB4YzYsIDB4YjQsIDB4ZmQsIDB4MGQsCisJMHhiZSwgMHg0OCwgMHhiNCwgMHhmNywgMHhmNywgMHg0NSwgMHg0ZiwgMHhjZCwgMHg3MiwgMHhjZSwgMHg2ZSwgMHhlNywKKwkweGM2LCAweGJlLCAweGU4LCAweGQ3LCAweGY1LCAweDQ2LCAweDVmLCAweGQ0LCAweDBkLCAweDVmLCAweDk0LCAweDgxLAorCTB4MmYsIDB4MWEsIDB4YmUsIDB4NjUsIDB4NWYsIDB4MzQsIDB4YTIsIDB4ZGYsIDB4ZDgsIDB4MTcsIDB4MWQsIDB4ZDQsCisJMHhhZiwgMHhmYiwgMHgyMiwgMHhjNiwgMHg5ZSwgMHgxNSwgMHg1YywgMHg5YiwgMHhiMiwgMHg2NywgMHg1ZiwgMHgyMCwKKwkweGU3LCAweDI4LCAweGZjLCAweGYwLCAweDE2LCAweGM4LCAweGJhLCAweDhkLCAweDZiLCAweDI3LCAweDU2LCAweDgwLAorCTB4ZGQsIDB4NGYsIDB4NjAsIDB4YWUsIDB4ZGYsIDB4ODYsIDB4YmQsIDB4ZWYsIDB4ODksIDB4ZGIsIDB4ZTYsIDB4NDMsCisJMHg2YSwgMHhkZSwgMHhmNywgMHhlYSwgMHg3YywgMHg2OCwgMHg1ZCwgMHhlNywgMHhhNCwgMHhmMSwgMHg5NywgMHhlYSwKKwkweGRjLCAweGY1LCAweDc0LCAweDRlLCAweDVkLCAweGI3LCAweGNhLCAweDExLCAweDM1LCAweDZmLCAweDVkLCAweDQyLAorCTB4ZjcsIDB4MDksIDB4YmMsIDB4OGEsIDB4M2MsIDB4NjAsIDB4MjQsIDB4MmMsIDB4OGMsIDB4YTcsIDB4NjMsIDB4N2UsCisJMHhlYSwgMHgyYiwgMHgwZSwgMHgxYSwgMHgwNCwgMHhmYSwgMHg2ZCwgMHg1NywgMHhiZSwgMHg2OCwgMHgzZiwgMHhmNCwKKwkweGJlLCAweDVhLCAweGJkLCAweDM1LCAweDVkLCAweDY1LCAweDFhLCAweDc0LCAweGY1LCAweGUwLCAweDA2LCAweDVkLAorCTB4YjUsIDB4NDgsIDB4N2YsIDB4M2MsIDB4ZDAsIDB4ZDEsIDB4MzYsIDB4NDksIDB4YzYsIDB4YTksIDB4YjMsIDB4NWIsCisJMHhkMSwgMHhkNSwgMHhiOSwgMHhiZiwgMHgyNSwgMHg1ZCwgMHg3ZCwgMHhmNywgMHgyNiwgMHhiYSwgMHhmYSwgMHhkZSwKKwkweDI2LCAweDVkLCAweGQ5LCAweGU2LCAweDMzLCAweDFhLCAweGM3LCAweDY2LCAweGZjLCAweGEwLCAweDNmLCAweGFhLAorCTB4ZGYsIDB4MzksIDB4Y2UsIDB4ZmMsIDB4YTEsIDB4YzYsIDB4MzUsIDB4MWQsIDB4ZTQsIDB4MWQsIDB4NWMsIDB4Y2YsCisJMHgyZiwgMHhkNywgMHgwZCwgMHhkYiwgMHg4NiwgMHhlYywgMHhiOCwgMHhhNiwgMHgyOSwgMHgzNywgMHhjYiwgMHhmYywKKwkweDE0LCAweGU5LCAweDQ3LCAweGVjLCAweDE4LCAweDQ3LCAweGFjLCAweGYxLCAweDY4LCAweDY4LCAweDk2LCAweGYyLAorCTB4NzYsIDB4YWYsIDB4ZmYsIDB4NzgsIDB4YTksIDB4ZmUsIDB4NzMsIDB4M2QsIDB4ZjEsIDB4MGIsIDB4ZTQsIDB4OTUsCisJMHhiNiwgMHgxZiwgMHgwNywgMHhjMiwgMHhmMiwgMHg4NSwgMHg4YSwgMHg5NSwgMHg3NSwgMHhiNSwgMHg3NiwgMHhjOSwKKwkweGVmLCAweDQwLCAweGVjLCAweDI5LCAweGQxLCAweDdmLCAweGVkLCAweGJjLCAweDQ5LCAweDhjLCAweGVlLCAweGYyLAorCTB4NjMsIDB4ZjQsIDB4OWYsIDB4ODEsIDB4NTYsIDB4ZTYsIDB4NTcsIDB4ZmYsIDB4ZTYsIDB4ZGQsIDB4OTUsIDB4MDgsCisJMHhiZiwgMHhlMywgMHhlNiwgMHg0MSwgMHhmOSwgMHgyYywgMHg3OSwgMHg0NCwgMHhiYywgMHg2NywgMHhkYywgMHhiNywKKwkweDk5LCAweGYzLCAweGU0LCAweDQzLCAweDg5LCAweDM2LCAweGM5LCAweDZmLCAweGU3LCAweDdhLCAweGE0LCAweDlmLAorCTB4YTMsIDB4ZWYsIDB4NmEsIDB4ZjYsIDB4ZTksIDB4MGUsIDB4NzIsIDB4MjQsIDB4ZmUsIDB4YjUsIDB4MTgsIDB4NjAsCisJMHgxOSwgMHg3ZCwgMHg5MCwgMHgwZiwgMHg5NSwgMHhjOCwgMHhjNywgMHhiYiwgMHhiZSwgMHgzZCwgMHgzMSwgMHg1NywKKwkweDkwLCAweDI2LCAweGNmLCAweDM3LCAweDhjLCAweDIwLCAweDE3LCAweGEwLCAweDFkLCAweDA0LCAweDNhLCAweGE3LAorCTB4YmUsIDB4OTksIDB4MjMsIDB4NDgsIDB4NGMsIDB4YjcsIDB4OTksIDB4MjMsIDB4ODgsIDB4NjksIDB4MjQsIDB4MGUsCisJMHg2YSwgMHgyZSwgMHg3NCwgMHhlZiwgMHg0MiwgMHhmNywgMHgyZSwgMHg3NCwgMHhlZiwgMHg0MiwgMHhmNywgMHhjOSwKKwkweGRhLCAweDcxLCAweGRjLCAweDUzLCAweDc5LCAweDA4LCAweDY4LCAweGYxLCAweGM2LCAweDRmLCAweDdiLCAweGUzLAorCTB4ODMsIDB4Y2UsIDB4OWQsIDB4OTIsIDB4NTMsIDB4M2EsIDB4MjEsIDB4YmYsIDB4YzgsIDB4MzUsIDB4OTQsIDB4YmYsCisJMHgxZSwgMHhkNiwgMHgzYywgMHg3ZiwgMHhjZCwgMHhmMSwgMHgzMiwgMHg3OCwgMHhmZSwgMHg3ZSwgMHhlNCwgMHg3MywKKwkweGFlLCAweGFlLCAweGRiLCAweGQ3LCAweDY1LCAweDMyLCAweGQ1LCAweDIwLCAweDkzLCAweGM5LCAweDJhLCAweDY1LAorCTB4YzQsIDB4ZmUsIDB4ZjQsIDB4YjksIDB4MTMsIDB4ZmEsIDB4YzIsIDB4YmEsIDB4NWMsIDB4NDYsIDB4NDAsIDB4NDMsCisJMHgwYiwgMHg3OSwgMHhmNywgMHhmOSwgMHhlMCwgMHhmOCwgMHg5ZCwgMHhmZSwgMHhmOCwgMHhiZiwgMHg4MSwgMHgzMSwKKwkweGU5LCAweDVmLCAweDZmLCAweDM0LCAweDJmLCAweGU3LCAweDY0LCAweGNlLCAweGY4LCAweDdlLCAweGZjLCAweDIwLAorCTB4NjcsIDB4YzYsIDB4MWEsIDB4NzgsIDB4NjksIDB4M2QsIDB4OWYsIDB4OGUsIDB4MjEsIDB4OWYsIDB4N2UsIDB4MDcsCisJMHhiOSwgMHg3NCwgMHhiZCwgMHhjZSwgMHgzOCwgMHg1NSwgMHg0MCwgMHg5ZSwgMHg5YiwgMHg3NiwgMHhiOCwgMHhhZSwKKwkweDZmLCAweDY1LCAweGRkLCAweDZlLCAweDU4LCAweGIzLCAweDY2LCAweGQyLCAweGUwLCAweGI4LCAweDYxLCAweGYxLAorCTB4YzYsIDB4ZTQsIDB4ZmQsIDB4MTYsIDB4ZTQsIDB4ODIsIDB4ZWYsIDB4ZTAsIDB4MzcsIDB4N2QsIDB4NzIsIDB4OTAsCisJMHhlNywgMHhiMSwgMHgwZiwgMHg5ZiwgMHg3ZiwgMHgxNSwgMHg3MywgMHhmNywgMHgwMywgMHhjZiwgMHhmNCwgMHhjYSwKKwkweDc3LCAweDZhLCAweGI2LCAweDdjLCAweDFiLCAweDk4LCAweGU2LCAweDViLCAweGM4LCAweDJkLCAweGJlLCAweDU5LAorCTB4MGIsIDB4NzIsIDB4ZmIsIDB4YmQsIDB4MzAsIDB4NzUsIDB4ZTYsIDB4ZjcsIDB4MTIsIDB4ZGUsIDB4NjksIDB4MTMsCisJMHg1NywgMHhlNSwgMHhmNywgMHg3ZiwgMHhkYSwgMHg5NiwgMHhhZCwgMHgxMSwgMHhmYywgMHhmZSwgMHg5NSwgMHg4NCwKKwkweDZjLCAweGViLCAweGM0LCAweGY3LCAweGY2LCAweDA0LCAweDRjLCAweDI3LCAweGMxLCAweGQ4LCAweGE4LCAweDM1LAorCTB4YzQsIDB4NDYsIDB4ZDEsIDB4ZDIsIDB4ZTAsIDB4NzEsIDB4MGEsIDB4ZTMsIDB4YTUsIDB4YzEsIDB4ZjcsIDB4NjcsCisJMHg2YSwgMHg2MSwgMHgyZCwgMHgzNSwgMHhiYiwgMHgxYiwgMHg5OCwgMHgyNCwgMHhjOCwgMHg3MSwgMHg5MSwgMHg0NywKKwkweDk5LCAweGFiLCAweGRiLCAweDQzLCAweGYyLCAweDM2LCAweDc4LCAweDRhLCAweDgyLCAweDc2LCAweDE3LCAweDM5LAorCTB4YzAsIDB4M2YsIDB4YzUsIDB4NWMsIDB4ZDYsIDB4NGYsIDB4M2YsIDB4MmQsIDB4ZmYsIDB4ZGEsIDB4Y2YsIDB4YzMsCisJMHg5YiwgMHg2NCwgMHg0ZSwgMHhmMSwgMHhjOCwgMHg3NiwgMHhjOSwgMHhmYywgMHhjYiwgMHg5ZSwgMHhlYiwgMHhlZCwKKwkweGNmLCAweGFlLCAweGI3LCAweGM3LCAweDMyLCAweGJmLCAweGIxLCAweGRlLCAweDdlLCAweDM1LCAweGU0LCAweGUxLAorCTB4OTUsIDB4NDEsIDB4NmQsIDB4YjQsIDB4ZjYsIDB4MmYsIDB4OGMsIDB4MDAsIDB4ZWIsIDB4MTQsIDB4NjYsIDB4N2IsCisJMHgzMSwgMHhkNywgMHgzNiwgMHg5OSwgMHhiNCwgMHhkZiwgMHgwNiwgMHhmNiwgMHhiMiwgMHg2MywgMHgzOSwgMHhhYywKKwkweGFmLCAweGE3LCAweDM2LCAweGY5LCAweGZhLCAweDM2LCAweGY4LCAweDhmLCAweGQzLCAweGIzLCAweGQ2LCAweDIwLAorCTB4ZmQsIDB4NDcsIDB4MWMsIDB4NmIsIDB4MjksIDB4ZjksIDB4MWUsIDB4ZmYsIDB4ZjEsIDB4NmQsIDB4YTMsIDB4ZDEsCisJMHg3ZiwgMHgxOCwgMHhmMCwgMHgxZiwgMHhmYiwgMHhkZiwgMHhjNywgMHg3ZiwgMHgzYywgMHhmNSwgMHgxZSwgMHhmZiwKKwkweGExLCAweGMxLCAweDJlLCAweGU4LCAweDNmLCAweDdlLCAweDY4LCAweDA0LCAweGZlLCAweGEzLCAweGIwLCAweGMxLAorCTB4N2YsIDB4MDQsIDB4ZmEsIDB4YjAsIDB4NTUsIDB4ZWUsIDB4ZTgsIDB4ZmQsIDB4MjYsIDB4ZmUsIDB4NmMsIDB4ZjMsCisJMHgzMSwgMHhhNywgMHg4NCwgMHg0MywgMHgwOSwgMHgzNywgMHgzMywgMHg2NSwgMHhlZiwgMHg5MiwgMHgyNiwgMHhhYywKKwkweGQxLCAweDk3LCAweDZiLCAweDAzLCAweGYwLCAweDI1LCAweGJmLCAweDBmLCAweDljLCAweDY2LCAweDM5LCAweDRjLAorCTB4NDQsIDB4OWEsIDB4MTIsIDB4ZDQsIDB4Y2QsIDB4NDgsIDB4MmMsIDB4NjksIDB4YmYsIDB4OTAsIDB4NTksIDB4YTgsCisJMHhiZSwgMHg5MCwgMHgzOSwgMHhhNywgMHg3NCwgMHgzNSwgMHg2MSwgMHg3OSwgMHgxOCwgMHhmOCwgMHgwOSwgMHgwYiwKKwkweDE4LCAweDE4LCAweGNmLCAweDg3LCAweDgwLCAweDIxLCAweGQ4LCAweGRlLCAweDZlLCAweDI2LCAweDkxLCAweGEzLAorCTB4NTQsIDB4YWEsIDB4MmIsIDB4OTksIDB4MDIsIDB4M2UsIDB4NTMsIDB4YWEsIDB4ZWYsIDB4NTgsIDB4OGMsIDB4N2QsCisJMHg1YiwgMHgxMiwgMHhlNSwgMHhkOCwgMHg5ZiwgMHhlMiwgMHhiYiwgMHgzOSwgMHgzMSwgMHg2NywgMHg1ZCwgMHhiNiwKKwkweDM5LCAweGVlLCAweDZiLCAweGIxLCAweDczLCAweDZhLCAweDhjLCAweDkwLCAweDE0LCAweGQ0LCAweGIzLCAweDVmLAorCTB4YjUsIDB4ZjgsIDB4ZWMsIDB4MjksIDB4ZjgsIDB4ZjgsIDB4OTMsIDB4NTUsIDB4NTMsIDB4NGUsIDB4NTQsIDB4ZDcsCisJMHgzMiwgMHgzOSwgMHg3YywgMHg4OCwgMHg2ZCwgMHg1ZSwgMHgyZSwgMHhmMSwgMHhmZSwgMHhiNywgMHg3MCwgMHgzZiwKKwkweDI0LCAweGNjLCAweDNkLCAweDNlLCAweDhmLCAweDNlLCAweDQ3LCAweGQxLCAweGU3LCAweDQ4LCAweDM1LCAweGMwLAorCTB4OGQsIDB4YmMsIDB4ZWYsIDB4NjYsIDB4NTIsIDB4YjgsIDB4N2YsIDB4YTQsIDB4ZTgsIDB4NjYsIDB4ZDIsIDB4NDUsCisJMHhlNiwgMHgzOSwgMHg3ZCwgMHhkMSwgMHgxMywgMHg5MCwgMHg2NywgMHgxNiwgMHhiMSwgMHhkZCwgMHgxNSwgMHhhYiwKKwkweDM3LCAweDJmLCAweDhmLCAweGI1LCAweDBlLCAweDIzLCAweGFmLCAweDNlLCAweDhmLCAweDk4LCAweGUzLCAweDhlLAorCTB4NTksIDB4NGUsIDB4MTksIDB4Y2MsIDB4NGQsIDB4OTUsIDB4ZWUsIDB4OTAsIDB4YzIsIDB4MGMsIDB4NjIsIDB4OGMsCisJMHg3MywgMHgwZiwgMHg3MywgMHhlZCwgMHg4YywgMHgxZSwgMHg3NywgMHhlMCwgMHgxMywgMHgwNiwgMHg4MCwgMHgyNywKKwkweGJiLCAweDgxLCAweDg1LCAweGVmLCAweDkyLCAweDE1LCAweGQzLCAweDhhLCAweDBlLCAweDAzLCAweDAzLCAweGE3LAorCTB4NDIsIDB4ZTgsIDB4ZDMsIDB4N2IsIDB4OWIsIDB4NjQsIDB4YTMsIDB4OTQsIDB4ZjUsIDB4MGUsIDB4ZjgsIDB4MDcsCisJMHg0ZCwgMHg1YSwgMHhlYywgMHg0NiwgMHg1ZiwgMHhmNSwgMHgxNywgMHgxMCwgMHgyZiwgMHg5MiwgMHhkZiwgMHgzNiwKKwkweGI2LCAweGI3LCAweGZhLCAweDNhLCAweGQ5LCAweDIyLCAweGFiLCAweGVmLCAweGU5LCAweGY3LCAweDM3LCAweDBkLAorCTB4ZmQsIDB4MWEsIDB4ZGIsIDB4MzUsIDB4NGQsIDB4ZDAsIDB4N2YsIDB4MGQsIDB4MzQsIDB4ODQsIDB4ZTIsIDB4OTAsCisJMHgzZiwgMHg3OCwgMHg2OCwgMHg4MiwgMHg5ZCwgMHg1YywgMHgwNiwgMHgzZiwgMHhmNCwgMHg5YiwgMHg4NSwgMHgzMiwKKwkweGUzLCAweGE0LCAweDIxLCAweDY1LCAweDEzLCAweGY3LCAweGFhLCAweGY1LCAweGZhLCAweDgyLCAweDBkLCAweDVhLAorCTB4MmYsIDB4OTAsIDB4ZGUsIDB4YjAsIDB4MGMsIDB4NTcsIDB4N2IsIDB4YzQsIDB4NWQsIDB4YTQsIDB4MWMsIDB4MmMsCisJMHhhYywgMHg4ZSwgMHg1ZCwgMHg2ZCwgMHhhOSwgMHg3OSwgMHhjYiwgMHhjZCwgMHg2MywgMHg0NCwgMHhlMywgMHg0MiwKKwkweDU3LCAweDViLCAweDEyLCAweDcxLCAweDUxLCAweGJmLCAweDEwLCAweDZiLCAweDRiLCAweGMxLCAweDFmLCAweDE4LAorCTB4MTcsIDB4NmUsIDB4NmYsIDB4NGIsIDB4Y2YsIDB4OTIsIDB4MmUsIDB4MDMsIDB4NzEsIDB4ZjEsIDB4NGUsIDB4ZTAsCisJMHhjMiwgMHhiYSwgMHg3YywgMHgwZCwgMHhiOSwgMHg0ZiwgMHhhMSwgMHgxNywgMHgzMSwgMHgwMywgMHhhYiwgMHg0NCwKKwkweDA3LCAweGRkLCAweDc5LCAweDUzLCAweGMyLCAweDZkLCAweDg5LCAweDc5LCAweGQwLCAweGQ3LCAweGRmLCAweDlhLAorCTB4OWMsIDB4ZGQsIDB4ODIsIDB4M2UsIDB4MDYsIDB4ZGEsIDB4N2IsIDB4ODgsIDB4MjEsIDB4MWIsIDB4ZGEsIDB4ZWQsCisJMHgzNiwgMHhmOCwgMHg1ZiwgMHhmOCwgMHgzYSwgMHgwOSwgMHgyNywgMHgwNywgMHhkYSwgMHgzMSwgMHhmZSwgMHhkOSwKKwkweDEwLCAweDczLCAweDg3LCAweDcwLCAweDdjLCAweGJkLCAweGZkLCAweGNiLCAweDVlLCAweDdiLCAweDJmLCAweDY4LAorCTB4ZTEsIDB4NzMsIDB4Y2MsIDB4MjEsIDB4MjUsIDB4M2MsIDB4M2UsIDB4NjAsIDB4ODIsIDB4MDYsIDB4ZjYsIDB4OGQsCisJMHhhOCwgMHhiZSwgMHhlOSwgMHg3OSwgMHhkYSwgMHg4MCwgMHg5YiwgMHg1OSwgMHhiMCwgMHg3NywgMHg0YiwgMHg2YSwKKwkweDZlLCAweGE3LCAweDBjLCAweGNmLCAweDc1LCAweGNhLCAweGZlLCAweDM5LCAweGU2LCAweGJjLCAweGM0LCAweGMwLAorCTB4NjAsIDB4MDUsIDB4MzksIDB4YTksIDB4N2UsIDB4ODEsIDB4YjksIDB4ODAsIDB4MTUsIDB4M2QsIDB4MmEsIDB4ZGQsCisJMHhkMSwgMHhjZiwgMHg2MywgMHgxZCwgMHg4YywgMHhkYiwgMHhmMSwgMHhkOCwgMHgyNCwgMHhkNiwgMHg1OCwgMHg0OCwKKwkweDhkLCAweDEzLCAweDBkLCAweGU2LCAweGE0LCAweDhkLCAweDZlLCAweDk4LCAweDM3LCAweDNkLCAweDdmLCAweGIzLAorCTB4NzEsIDB4YjEsIDB4NzAsIDB4MmUsIDB4NDQsIDB4MzcsIDB4OGQsIDB4ZmIsIDB4M2YsIDB4ZmQsIDB4NzEsIDB4NGQsCisJMHg4YywgMHhkYiwgMHg4NSwgMHgzMSwgMHhjOSwgMHhlMywgMHhlZCwgMHhhZCwgMHg0MywgMHhiMywgMHhlMiwgMHhiNiwKKwkweDgwLCAweGJlLCAweDc0LCAweDdjLCAweDk3LCAweDRjLCAweDYyLCAweDljLCAweDkzLCAweDczLCAweGY0LCAweDg1LAorCTB4YjIsIDB4MTMsIDB4OWYsIDB4ZmUsIDB4MjYsIDB4ODksIDB4ZjcsIDB4MmUsIDB4MjEsIDB4MmYsIDB4MWUsIDB4NTIsCisJMHg2MywgMHg3OCwgMHgzOSwgMHhhYSwgMHg3ZSwgMHgyMSwgMHgwMSwgMHg1YywgMHhmMywgMHg1MSwgMHhkMCwgMHhjMywKKwkweDk4LCAweDRjLCAweDllLCAweDQzLCAweGUwLCAweDM3LCAweDgxLCAweDc1LCAweDQ4LCAweDNjLCAweGNlLCAweGY1LAorCTB4OGQsIDB4ZGYsIDB4NGIsIDB4ZDEsIDB4ZDYsIDB4ZDQsIDB4NmMsIDB4MzMsIDB4ZDYsIDB4OWQsIDB4ZWMsIDB4MzYsCisJMHg1NCwgMHhhYywgMHhhMCwgMHg1ZSwgMHhlYywgMHhkNiwgMHg2NCwgMHg0OSwgMHhkMSwgMHhkZCwgMHg5YSwgMHgyYSwKKwkweDUxLCAweDQ2LCAweDRlLCAweDZiLCAweGJhLCAweDQ0LCAweDE5LCAweDA5LCAweGU4LCAweDcxLCAweGUwLCAweDYzLAorCTB4NDMsIDB4MTIsIDB4ZGIsIDB4NGUsIDB4M2QsIDB4MWUsIDB4NDMsIDB4YmYsIDB4OTUsIDB4MTAsIDB4ZjMsIDB4ZmUsCisJMHhhNCwgMHhjZCwgMHhkZiwgMHhjMCwgMHgyYiwgMHgxNywgMHg4ZSwgMHhhMywgMHgyZiwgMHg3ZiwgMHhkZiwgMHg4YiwKKwkweDcxLCAweGJiLCAweDdiLCAweDBiLCAweGQyLCAweGRjLCAweDdiLCAweDA0LCAweDdlLCAweDQyLCAweDFmLCAweDAwLAorCTB4ZWUsIDB4NTAsIDB4NzYsIDB4NWUsIDB4MDcsIDB4MjYsIDB4ZGIsIDB4MGIsIDB4N2UsIDB4YjAsIDB4MzYsIDB4ZTIsCisJMHhiNiwgMHg0YywgMHhjYywgMHg1MCwgMHhhZSwgMHg3MiwgMHgxYiwgMHg3OCwgMHgwMCwgMHhmZiwgMHg3MSwgMHhmOCwKKwkweDE2LCAweGYyLCAweGMwLCAweGI5LCAweDA1LCAweDc2LCAweGJmLCAweDJjLCAweGI5LCAweDk5LCAweGIwLCAweGMyLAorCTB4M2UsIDB4YWUsIDB4YzksIDB4ZjksIDB4MzUsIDB4NGQsIDB4NGYsIDB4YjQsIDB4NDEsIDB4YzcsIDB4ZTQsIDB4NmQsCisJMHgwYSwgMHhiNCwgMHgzZCwgMHgwZSwgMHgzZiwgMHg2YywgMHhhOSwgMHg5YywgMHhkYiwgMHg0MCwgMHhmZiwgMHg0MiwKKwkweDY5LCAweDUwLCAweDRmLCAweDE1LCAweDQ5LCAweGJmLCAweDZmLCAweDdiLCAweGRhLCAweDBhLCAweDdjLCAweDhhLAorCTB4YWEsIDB4NjMsIDB4MjEsIDB4YjcsIDB4NGIsIDB4YzAsIDB4OGYsIDB4MGMsIDB4Y2EsIDB4ZjcsIDB4ZTEsIDB4NGIsCisJMHhiZSwgMHg1YiwgMHg3MywgMHhlMCwgMHhmZiwgMHhmYiwgMHhlMSwgMHhmZiwgMHg3YiwgMHhlMSwgMHhmZiwgMHg2ZCwKKwkweGY4LCAweGZmLCAweDE4LCAweGZjLCAweDdmLCAweDE3LCAweGZjLCAweDdmLCAweDk0LCAweGJlLCAweDVmLCAweDRlLAorCTB4ZDYsIDB4ZjIsIDB4YjAsIDB4YjEsIDB4MTUsIDB4ZjgsIDB4NDEsIDB4MzMsIDB4ZWMsIDB4ZDYsIDB4MjIsIDB4ZTEsCisJMHg2NCwgMHgyZCwgMHgxYSwgMHg0ZSwgMHhkNSwgMHg0MiwgMHhlMCwgMHhlOSwgMHgzMCwgMHhlNywgMHgwNCwgMHg3ZiwKKwkweGY5LCAweGQ2LCAweGExLCAweDUyLCAweDNmLCAweGUyLCAweDhhLCAweDBiLCAweGJmLCAweDk0LCAweDg2LCAweGRmLAorCTB4NzcsIDB4ODAsIDB4N2YsIDB4ZjMsIDB4YjIsIDB4M2EsIDB4MTMsIDB4YzMsIDB4MzMsIDB4NzUsIDB4NDksIDB4M2IsCisJMHg0ZCwgMHgzMiwgMHg2OSwgMHgzYSwgMHgxOCwgMHg2MywgMHhiYiwgMHhiMiwgMHg1MywgMHgyMywgMHhiMSwgMHhhYiwKKwkweDA5LCAweDc2LCAweDJhLCAweGI5LCAweDIyLCAweGUzLCAweDczLCAweDE3LCAweGM2LCAweDZiLCAweDQ1LCAweDdjLAorCTB4YTAsIDB4N2YsIDB4YTAsIDB4MmYsIDB4NTgsIDB4YzksIDB4M2MsIDB4NmMsIDB4NzMsIDB4Y2QsIDB4YjUsIDB4NjksCisJMHg0OSwgMHhlMCwgMHg2NywgMHg2MiwgMHgxMywgMHhjNCwgMHgzYSwgMHhkOCwgMHgwNSwgMHhkYiwgMHhmNiwgMHhlMCwKKwkweDM5LCAweGZlLCAweGZlLCAweDZmLCAweDdlLCAweDhkLCAweGVhLCAweGFmLCAweDVhLCAweDA0LCAweGM2LCAweGZiLAorCTB4MzIsIDB4NjMsIDB4OGYsIDB4OGQsIDB4ZjEsIDB4YWEsIDB4OGQsIDB4ZWIsIDB4NzUsIDB4NDksIDB4MTcsIDB4M2IsCisJMHhiOCwgMHhjZiwgMHg3YSwgMHgwZCwgMHg2YiwgMHg1NCwgMHhhZiwgMHg4MCwgMHhkZSwgMHg3YSwgMHg3ZCwgMHg1NSwKKwkweDYxLCAweDQ4LCAweGU0LCAweDMzLCAweDg3LCAweGQ2LCAweGMwLCAweDQzLCAweGUzLCAweDMzLCAweGRmLCAweGMwLAorCTB4MzMsIDB4YWEsIDB4MmQsIDB4NmMsIDB4MjYsIDB4MWMsIDB4ZTYsIDB4NTAsIDB4ZjAsIDB4OWIsIDB4MmYsIDB4YzAsCisJMHg0NywgMHgxZSwgMHhjYiwgMHhlOCwgMHhjYiwgMHg1NywgMHhmMSwgMHgyYywgMHg2NCwgMHg1YSwgMHgzYywgMHg5NiwKKwkweDA5LCAweGY1LCAweGJjLCAweDVhLCAweDdmLCAweDE2LCAweDM5LCAweGYxLCAweGQwLCAweGYyLCAweDgwLCAweGE0LAorCTB4OTYsIDB4YmIsIDB4YTMsIDB4MTcsIDB4YTUsIDB4ZjUsIDB4MWQsIDB4MTcsIDB4YjEsIDB4NzQsIDB4YjIsIDB4NmEsCisJMHg5ZCwgMHg3NiwgMHg4NSwgMHgzOSwgMHhiYSwgMHgyOSwgMHgwYiwgMHhjMCwgMHhkNSwgMHg3YiwgMHhmNiwgMHgzZCwKKwkweDBmLCAweGRhLCAweGFkLCAweDE3LCAweDQ1LCAweDhmLCAweGUxLCAweDM3LCAweDMxLCAweDBjLCAweDc5LCAweDVjLAorCTB4MDMsIDB4N2YsIDB4MWEsIDB4YWUsIDB4NWIsIDB4ZDYsIDB4NmIsIDB4NTcsIDB4ODUsIDB4MTIsIDB4ZjgsIDB4YWMsCisJMHgxZCwgMHhjYiwgMHg1YywgMHg5YywgMHgwNiwgMHhhZSwgMHg4MywgMHgzZSwgMHg5MiwgMHhkMywgMHhjNCwgMHg5YywKKwkweDViLCAweDIwLCAweDkzLCAweDIxLCAweGQ4LCAweDA1LCAweGY1LCAweDFkLCAweGM3LCAweGIzLCAweDc1LCAweGY5LAorCTB4OTIsIDB4NDMsIDB4MWIsIDB4NzgsIDB4MGUsIDB4NzIsIDB4YzMsIDB4NTgsIDB4YTEsIDB4ODAsIDB4NmUsIDB4NjAsCisJMHg4MCwgMHgxOSwgMHhjYSwgMHg2YSwgMHgxNywgMHhmMiwgMHgzNiwgMHg1NywgMHgwNiwgMHhmNiwgMHg0OSwgMHg3OCwKKwkweDQ3LCAweDYyLCAweDczLCAweDRlLCAweDc2LCAweDJjLCAweGIzLCAweDNhLCAweDhkLCAweGYxLCAweDdiLCAweDgwLAorCTB4NzksIDB4ODQsIDB4YjUsIDB4MTksIDB4ZmEsIDB4NjAsIDB4ODEsIDB4ZWQsIDB4ZWMsIDB4ODcsIDB4N2UsIDB4OTgsCisJMHg3YiwgMHgzMywgMHg0NywgMHhhMywgMHg2ZiwgMHgzYSwgMHhhOCwgMHhhNSwgMHgyYSwgMHg2NSwgMHg0MywgMHgzYSwKKwkweDBlLCAweDIxLCAweGI3LCAweDcxLCAweDY0LCAweDcxLCAweDlhLCAweDM5LCAweDFhLCAweGYzLCAweDk5LCAweDIwLAorCTB4N2YsIDB4ZDEsIDB4OTAsIDB4NGIsIDB4YTAsIDB4N2QsIDB4ZjksIDB4MjUsIDB4YTUsIDB4MDcsIDB4MDMsIDB4ZmEsCisJMHhjYSwgMHhlZCwgMHhiYiwgMHg5ZiwgMHg3YywgMHhjZCwgMHgxOCwgMHgwOSwgMHhmOCwgMHhiZiwgMHgwMSwgMHhmMiwKKwkweGEyLCAweDY4LCAweDQwLCAweGNlLCAweGM2LCAweDM1LCAweDE3LCAweDAzLCAweDVmLCAweGY4LCAweDVjLCAweGNmLAorCTB4ZGQsIDB4ZDQsIDB4ZGYsIDB4NjQsIDB4ZTksIDB4MDQsIDB4ZWMsIDB4NTgsIDB4ZjIsIDB4NGQsIDB4MDksIDB4ZjAsCisJMHgzNiwgMHg4MCwgMHhkZiwgMHg1OCwgMHhmOCwgMHgyNywgMHhhMSwgMHhjMywgMHg3MywgMHgwMywgMHhhYywgMHg5MSwKKwkweDNkLCAweDA3LCAweGZjLCAweDQ3LCAweGZhLCAweGUzLCAweGIxLCAweDEzLCAweDZhLCAweGRkLCAweGUyLCAweGJhLAorCTB4Y2EsIDB4M2MsIDB4NjIsIDB4OGIsIDB4NWMsIDB4NTQsIDB4N2MsIDB4ZGUsIDB4YzEsIDB4ZmMsIDB4MTQsIDB4N2EsCisJMHhiOSwgMHgxNSwgMHgzZSwgMHg4NywgMHgzZiwgMHgyNCwgMHg5ZiwgMHhkZSwgMHgzYywgMHg4YywgMHg1YiwgMHg0OSwKKwkweDNiLCAweDI2LCAweGE5LCAweGUyLCAweGNiLCAweDc1LCAweGFmLCAweDBlLCAweGZiLCAweDQ3LCAweGIwLCAweDJiLAorCTB4NWMsIDB4NTcsIDB4YzMsIDB4YTAsIDB4ODcsIDB4NzUsIDB4OTksIDB4MDEsIDB4YTUsIDB4NWIsIDB4ZDAsIDB4NDMsCisJMHg5YiwgMHhjOSwgMHg4NywgMHgxMywgMHhkYiwgMHhlNCwgMHhmYywgMHg0YywgMHg4NywgMHgyYywgMHhjYywgMHhiYywKKwkweDI2LCAweDk1LCAweDk5LCAweDM2LCAweDU5LCAweDlhLCAweGE5LCAweGNiLCAweDY1LCAweDQ3LCAweGY5LCAweDI1LAorCTB4YmIsIDB4NTksIDB4YWQsIDB4NjksIDB4ZDksIDB4ZTUsIDB4NjEsIDB4ZjYsIDB4ZjgsIDB4ZTAsIDB4MTUsIDB4NzksCisJMHg1YSwgMHhjZSwgMHg5NywgMHgzZCwgMHgxZSwgMHgzMiwgMHgwZCwgMHgzYywgMHhiYywgMHgwYSwgMHgxYiwgMHhlYiwKKwkweGVjLCAweDIxLCAweDBmLCAweGI0LCAweDA3LCAweGYyLCAweGMzLCAweGRjLCAweDgzLCAweDM5LCAweGU2LCAweDQxLAorCTB4YWMsIDB4YTMsIDB4MTEsIDB4NjAsIDB4YTMsIDB4ODMsIDB4NWEsIDB4ZDIsIDB4ZTcsIDB4MjEsIDB4ZTUsIDB4ZjEsCisJMHg5MCwgMHg3ZCwgMHgyZiwgMHgwZiwgMHgyZCwgMHg5MiwgMHhkZCwgMHg0OSwgMHgzZSwgMHhhMCwgMHg4MywgMHg2OSwKKwkweGVhLCAweDI1LCAweGMwLCAweDFiLCAweDFlLCAweGZkLCAweGM5LCAweGU1LCAweDU3LCAweGViLCAweGZhLCAweDc0LAorCTB4OTMsIDB4YTIsIDB4ZGQsIDB4NDgsIDB4MGMsIDB4YzAsIDB4YWUsIDB4NWUsIDB4YWQsIDB4Y2IsIDB4MzIsIDB4ZDcsCisJMHgxMiwgMHg3ZSwgMHg1NywgMHhmZiwgMHgzMSwgMHhmYywgMHg1NSwgMHhhNywgMHhjYSwgMHg1YiwgMHg3MiwgMHg2MywKKwkweGVkLCAweGFkLCAweGM5LCAweGY5LCAweDQxLCAweGU4LCAweGJhLCAweDU1LCAweGFkLCAweDQ1LCAweGI4LCAweDBlLAorCTB4ZTgsIDB4ZjAsIDB4MGYsIDB4ZDEsIDB4ZmYsIDB4YWIsIDB4NWMsIDB4NzMsIDB4NGEsIDB4M2UsIDB4NjksIDB4YzgsCisJMHhhNywgMHg1MCwgMHhiYywgMHhiZCwgMHgxOSwgMHgzOSwgMHgzNywgMHhlNiwgMHg3MSwgMHgzMywgMHhkOSwgMHgyYSwKKwkweDlmLCAweGU5LCAweDgyLCAweDdmLCAweGUzLCAweGY3LCAweDA3LCAweGI2LCAweDhmLCAweDNjLCAweGZjLCAweDJlLAorCTB4NmMsIDB4MDAsIDB4YjksIDB4MDUsIDB4ZDcsIDB4ZjQsIDB4YzAsIDB4MGEsIDB4ZTIsIDB4NmMsIDB4YmMsIDB4NzcsCisJMHg0MSwgMHhkNSwgMHhmNCwgMHgxZCwgMHg4NSwgMHg5ZiwgMHgyNiwgMHhhYiwgMHg1ZiwgMHhjNSwgMHhjNywgMHg5YiwKKwkweDZmLCAweGE4LCAweGM2LCAweDM5LCAweDM3LCAweGYyLCAweDg0LCAweDljLCAweDA2LCAweGI5LCAweGE0LCAweDhkLAorCTB4NzEsIDB4MzksIDB4NmYsIDB4NWUsIDB4OGMsIDB4ODQsIDB4ODEsIDB4NzksIDB4ZDksIDB4ZDYsIDB4MGUsIDB4M2YsCisJMHgxMywgMHg4MywgMHhkZiwgMHhlYSwgMHg4NywgMHhmZiwgMHhlNywgMHg1YSwgMHhhNiwgMHhhZiwgMHgwZiwgMHg2OCwKKwkweGVmLCAweGM3LCAweDk4LCAweGY0LCAweGMxLCAweGZkLCAweGUwLCAweDk5LCAweGI5LCAweDM0LCAweDdkLCAweDI4LAorCTB4NjIsIDB4Y2EsIDB4NjIsIDB4YjQsIDB4MmQsIDB4MzksIDB4ZWIsIDB4ZDUsIDB4OTMsIDB4YmMsIDB4ZGYsIDB4YmMsCisJMHgyZiwgMHhlMSwgMHhkZCwgMHgwOSwgMHhhYiwgMHg5YywgMHg0NywgMHhmZSwgMHg5NywgMHhjMiwgMHhkYSwgMHg0ZCwKKwkweGRhLCAweGM4LCAweGE3LCAweDE3LCAweGFkLCAweDE3LCAweDg4LCAweGQzLCAweDc0LCAweGNhLCAweDYwLCAweDk5LAorCTB4NzIsIDB4NjIsIDB4NmQsIDB4YzMsIDB4OTQsIDB4ZmMsIDB4YzIsIDB4ZWYsIDB4NDIsIDB4MWUsIDB4NjEsIDB4ZDksCisJMHg2ZSwgMHg2NywgMHhlMSwgMHg1MywgMHg5OCwgMHhiNywgMHhiOCwgMHhlMCwgMHg4ZCwgMHhiZSwgMHhhNywgMHgxYiwKKwkweGIxLCAweGNjLCAweDgwLCAweDEwLCAweDkwLCAweDU3LCAweDJkLCAweDFiLCAweGYyLCAweDQwLCAweGE4LCAweDBmLAorCTB4NzksIDB4ZTAsIDB4YTcsIDB4ZDAsIDB4MzcsIDB4MjQsIDB4ZjksIDB4NjUsIDB4YzYsIDB4ODQsIDB4OTAsIDB4NGMsCisJMHgyZCwgMHg4YiwgMHg1YywgMHg5OSwgMHhhNiwgMHg1ZiwgMHg1MSwgMHg3ZiwgMHg5MCwgMHhiOSwgMHg5YiwgMHg5OSwKKwkweDIwLCAweDNlLCAweDliLCAweGExLCAweDhmLCAweGExLCAweGZmLCAweGQ4LCAweDAxLCAweDVkLCAweGM0LCAweDlmLAorCTB4ZmIsIDB4MTIsIDB4ZTIsIDB4ZDMsIDB4NjQsIDB4YjEsIDB4MWIsIDB4N2UsIDB4NTMsIDB4NTYsIDB4NzQsIDB4YzgsCisJMHgxNCwgMHg3MSwgMHg4ZCwgMHhmNSwgMHhhYSwgMHgxYiwgMHhkNCwgMHhhYSwgMHg4MiwgMHgzYSwgMHg1NSwgMHg1OCwKKwkweDBhLCAweGQzLCAweGFjLCAweDUxLCAweDg1LCAweDQxLCAweDBiLCAweDczLCAweDU3LCAweDQzLCAweGU1LCAweDQyLAorCTB4M2IsIDB4OTQsIDB4N2YsIDB4ZTUsIDB4NzcsIDB4YTgsIDB4NjEsIDB4ZGUsIDB4ZjgsIDB4ZTksIDB4M2QsIDB4M2EsCisJMHhmZCwgMHhkOCwgMHg2ZSwgMHg3MSwgMHg0NywgMHg4ZiwgMHhiNSwgMHhlZSwgMHgyZiwgMHgwMSwgMHg4YiwgMHg3NiwKKwkweGQyLCAweDNlLCAweGE5LCAweGZmLCAweGFjLCAweDRlLCAweDdmLCAweDNiLCAweDU1LCAweDFhLCAweGMwLCAweDc4LAorCTB4YzQsIDB4OTUsIDB4MjEsIDB4ZjQsIDB4OGIsIDB4ZjgsIDB4ZmQsIDB4MjgsIDB4ZDcsIDB4N2YsIDB4MjUsIDB4ZTMsCisJMHhmYiwgMHhmZSwgMHgxYSwgMHg3NCwgMHg3OSwgMHhmZSwgMHg4ZSwgMHg3NSwgMHhlZSwgMHhkYywgMHg2NywgMHg3NCwKKwkweGI5LCAweGVmLCAweDYzLCAweDY5LCAweDNjLCAweGNiLCAweDc4LCAweGY4LCAweGI2LCAweDhmLCAweGUxLCAweGQ4LAorCTB4YzYsIDB4YmEsIDB4MWUsIDB4NzIsIDB4ZjUsIDB4ZjMsIDB4MjYsIDB4YmUsIDB4M2IsIDB4MjUsIDB4N2YsIDB4M2UsCisJMHgwYywgMHgzOSwgMHgyMCwgMHgyZiwgMHg1ZSwgMHhmMCwgMHhjNiwgMHg2MiwgMHhlZSwgMHg3YiwgMHgxYSwgMHgzYSwKKwkweGQyLCAweGNmLCAweDg0LCAweGE1LCAweGU5LCAweDRjLCAweGE3LCAweDg0LCAweGJlLCAweGQyLCAweDI2LCAweGNkLAorCTB4NWYsIDB4ZTksIDB4MTEsIDB4ZTMsIDB4MmIsIDB4YWMsIDB4M2YsIDB4NTgsIDB4YjEsIDB4OTMsIDB4YWEsIDB4ZjYsCisJMHg5MSwgMHg5NiwgMHg1MywgMHg4OCwgMHg2MSwgMHgzYSwgMHhlMiwgMHhiMSwgMHhiMiwgMHg1MywgMHg3MywgMHhhNywKKwkweDE4LCAweDQ4LCAweDVlLCAweGY1LCAweDY3LCAweDVjLCAweGY5LCAweGUyLCAweGJlLCAweDlmLCAweGFiLCAweGRhLAorCTB4MWIsIDB4NzAsIDB4YjMsIDB4ZTgsIDB4Y2YsIDB4NjcsIDB4YzQsIDB4YWQsIDB4YmQsIDB4NDYsIDB4M2IsIDB4Y2QsCisJMHhiYywgMHg3YSwgMHhkNywgMHgxZCwgMHhkMCwgMHgzOSwgMHg3MywgMHhjYiwgMHg1ZSwgMHg1NSwgMHhjNywgMHhmZCwKKwkweGUyLCAweDNlLCAweGM2LCAweDRjLCAweDJmLCAweGJmLCAweDRjLCAweDIzLCAweGJmLCAweDljLCAweDk0LCAweDZlLAorCTB4ZjgsIDB4NTksIDB4ZjYsIDB4ZGIsIDB4MjksIDB4M2EsIDB4ZTYsIDB4Y2EsIDB4MDksIDB4ZjMsIDB4ZjUsIDB4M2IsCisJMHhjNSwgMHgzZCwgMHg4YywgMHg3NSwgMHg3MSwgMHg1NiwgMHg2NiwgMHhmNCwgMHg4NCwgMHhhNiwgMHhjNiwgMHgzNCwKKwkweDllLCAweGExLCAweGRmLCAweGEyLCAweDNmLCAweGEzLCAweDhkLCAweGIzLCAweDBlLCAweDgyLCAweGI2LCAweGU3LAorCTB4ZTksIDB4YjMsIDB4M2MsIDB4ZGIsIDB4MWUsIDB4NmEsIDB4ZjAsIDB4N2QsIDB4NTMsIDB4YTUsIDB4MWEsIDB4NzQsCisJMHg4OCwgMHhiYywgMHhkZSwgMHg2ZSwgMHgwMiwgMHhmZiwgMHg4OCwgMHhlYiwgMHgzNiwgMHhhZiwgMHhjOSwgMHgzZiwKKwkweDdjLCAweDY5LCAweDI0LCAweGEyLCAweGFlLCAweDBiLCAweDY1LCAweDBmLCAweGY3LCAweDdhLCAweGUzLCAweDMzLAorCTB4MDcsIDB4ODEsIDB4YWYsIDB4YTksIDB4OTEsIDB4MGUsIDB4Y2UsIDB4ZGIsIDB4MjUsIDB4YzYsIDB4ZDksIDB4ODgsCisJMHg4NCwgMHhjZSwgMHhkMiwgMHhmZSwgMHhhYywgMHg1OCwgMHgxYSwgMHhmMiwgMHg5YiwgMHhiMiwgMHg4OSwgMHhmNSwKKwkweDBlLCAweGMwLCAweDE3LCAweGVjLCAweDE2LCAweGZkLCAweDdjLCAweDJmLCAweGQ2LCAweDhlLCAweDE1LCAweDJkLAorCTB4NGIsIDB4NWMsIDB4OGMsIDB4ODUsIDB4YjAsIDB4YmMsIDB4MDksIDB4ZGYsIDB4NDEsIDB4N2IsIDB4MzksIDB4ODcsCisJMHg3OCwgMHg3NSwgMHhhMiwgMHhkNiwgMHhmYSwgMHhjZSwgMHg4YSwgMHhhMiwgMHg4MiwgMHg2ZCwgMHg0MywgMHhjMCwKKwkweDRiLCAweDU2LCAweGFmLCAweGFiLCAweGI3LCAweGNiLCAweGViLCAweGQwLCAweDc3LCAweDU2LCAweGI1LCAweGVkLAorCTB4YzYsIDB4YjgsIDB4YTAsIDB4ZTEsIDB4MmMsIDB4ZWIsIDB4NDksIDB4MWMsIDB4ZjcsIDB4MWYsIDB4NjAsIDB4NGMsCisJMHg4ZSwgMHhlZCwgMHg2NiwgMHg1NiwgMHg5OSwgMHg5ZiwgMHg0ZSwgMHhkMywgMHg3NiwgMHgzYiwgMHg2MSwgMHg3NywKKwkweGI4LCAweGFlLCAweDM1LCAweDRiLCAweDc2LCAweDJjLCAweDI2LCAweGZhLCAweGY0LCAweDgzLCAweGQyLCAweGJkLAorCTB4NGYsIDB4ZjcsIDB4ZjgsIDB4NTEsIDB4M2MsIDB4YjIsIDB4OGQsIDB4NzUsIDB4Y2EsIDB4MTYsIDB4YjUsIDB4MWUsCisJMHhmNSwgMHg2NSwgMHhkOCwgMHhjYywgMHg0MSwgMHhlYSwgMHgxOCwgMHhmMSwgMHgxZiwgMHhmMSwgMHg4ZCwgMHhmZSwKKwkweGNjLCAweDQwLCAweDdjLCAweDRiLCAweGQ1LCAweDNjLCAweGJkLCAweDk3LCAweDBmLCAweGVlLCAweDk0LCAweDUzLAorCTB4NjcsIDB4NjksIDB4NGYsIDB4YjgsIDB4YjcsIDB4NmUsIDB4NTMsIDB4YzEsIDB4N2UsIDB4MDIsIDB4ZWYsIDB4ZDksCisJMHg3MiwgMHhmYSwgMHg1OSwgMHhlNiwgMHgxZiwgMHhjYywgMHgzYiwgMHg5OCwgMHg2YiwgMHg1OSwgMHhkMSwgMHhmZCwKKwkweGUwLCAweDQ3LCAweGJmLCAweDhmLCAweGZlLCAweDQwLCAweDU3LCAweGI2LCAweDliLCAweDgzLCAweGFmLCAweDJlLAorCTB4ZDQsIDB4YTgsIDB4YjcsIDB4N2UsIDB4ZWUsIDB4YjksIDB4OTgsIDB4Y2MsIDB4ZDksIDB4ZGMsIDB4YTgsIDB4MjcsCisJMHhlZiwgMHgwMiwgMHhkYSwgMHgyNiwgMHgxMSwgMHgwNywgMHg1MiwgMHhkNSwgMHgyNiwgMHg1OSwgMHgxYiwgMHg3MywKKwkweGExLCAweGZiLCAweDhmLCAweDgyLCAweGFlLCAweGMzLCAweGFkLCAweGM0LCAweGFiLCAweDZiLCAweDYzLCAweDY5LAorCTB4NWMsIDB4MWYsIDB4NTYsIDB4NzksIDB4OWEsIDB4NzEsIDB4OWYsIDB4OGIsIDB4MzEsIDB4NzYsIDB4NzIsIDB4MWQsCisJMHhmOSwgMHg3YSwgMHg3MiwgMHhmNCwgMHhjMiwgMHhjYywgMHg3ZCwgMHhmYSwgMHgyNCwgMHg3YywgMHhmNywgMHhiMCwKKwkweGMzLCAweDE4LCAweGNmLCAweGZhLCAweDczLCAweDBiLCAweGU4LCAweDY4LCAweDU3LCAweGQ4LCAweDQyLCAweGI3LAorCTB4ZjcsIDB4ZTksIDB4ODUsIDB4MzIsIDB4ZmQsIDB4N2QsIDB4M2UsIDB4ZGEsIDB4MmMsIDB4MGUsIDB4N2QsIDB4OTYsCisJMHhiZSwgMHg2MCwgMHg1MywgMHgyNywgMHg5YSwgMHg1YywgMHg1NCwgMHhiNSwgMHg2YSwgMHg0NCwgMHhhMCwgMHg2YSwKKwkweDBhLCAweDczLCAweDM5LCAweDdhLCAweGE1LCAweGJjLCAweDRmLCAweGNmLCAweGMzLCAweDU1LCAweGFmLCAweDQ1LAorCTB4NDgsIDB4NzcsIDB4NGMsIDB4ZTUsIDB4ZjIsIDB4ZmIsIDB4OTQsIDB4YWQsIDB4MTUsIDB4MTEsIDB4NTMsIDB4NjAsCisJMHgzMywgMHhjZSwgMHgxZCwgMHg5OCwgMHg1NywgMHhiNSwgMHhjMSwgMHhhNiwgMHhhOCwgMHg3YiwgMHhlYSwgMHg1ZCwKKwkweGY5LCAweDQ4LCAweDVmLCAweGY3LCAweDM3LCAweDhhLCAweGExLCAweDQ1LCAweGY4LCAweDVmLCAweDYyLCAweGU5LAorCTB4MTYsIDB4YmYsIDB4M2UsIDB4ZjUsIDB4Y2YsIDB4ZmQsIDB4OWMsIDB4ZTgsIDB4NzEsIDB4NjEsIDB4OWUsIDB4MzIsCisJMHg1NSwgMHgyMiwgMHgyZCwgMHg0NSwgMHhmOCwgMHhjMywgMHgxYiwgMHhkOSwgMHgxMiwgMHhlNSwgMHhlOCwgMHhmOSwKKwkweDk0LCAweDYzLCAweGIwLCAweDBiLCAweDdkLCAweGQ5LCAweGY0LCAweDZkLCAweDQwLCAweGUxLCAweDY3LCAweGRjLAorCTB4NjMsIDB4MGMsIDB4YzAsIDB4NzcsIDB4YWQsIDB4MDksIDB4ZWIsIDB4N2QsIDB4MDQsIDB4MzIsIDB4YTIsIDB4NmUsCisJMHhhMCwgMHhiZiwgMHg2NSwgMHhlZSwgMHhkNSwgMHg0MSwgMHg3ZiwgMHhjYiwgMHg5NywgMHg3ZSwgMHhlMSwgMHg3NiwKKwkweGQyLCAweGU3LCAweDBkLCAweGM4LCAweDI5LCAweGY4LCAweGQxLCAweDkzLCAweGYzLCAweGE0LCAweDI3LCAweGFkLAorCTB4ZDYsIDB4Y2UsIDB4MTQsIDB4ZTQsIDB4N2QsIDB4NDIsIDB4ZjksIDB4ZjgsIDB4N2UsIDB4NzksIDB4NzMsIDB4ZjEsCisJMHg1YiwgMHgwYSwgMHgwYiwgMHhlZSwgMHhkOSwgMHhiNywgMHgyMiwgMHgxMywgMHhmMCwgMHgwZiwgMHg0NywgMHhhYSwKKwkweDkwLCAweGI3LCAweDE5LCAweGMzLCAweGZhLCAweGRjLCAweGE1LCAweGZjLCAweGUzLCAweDE3LCAweDNmLCAweDc4LAorCTB4YWUsIDB4MTIsIDB4ZDIsIDB4MTMsIDB4MGYsIDB4N2MsIDB4YzgsIDB4MTgsIDB4YmUsIDB4NTUsIDB4ZGMsIDB4Y2UsCisJMHgwZiwgMHgzYywgMHg4ZiwgMHhhMSwgMHgyNywgMHhmZSwgMHgxMCwgMHgzYSwgMHhmYiwgMHg0ZCwgMHhjYywgMHgxNSwKKwkweDA2LCAweDlkLCAweDZhLCAweDNmLCAweGU0LCAweDgzLCAweDNjLCAweGE3LCAweGViLCAweDg5LCAweDRmLCAweDdlLAorCTB4NDgsIDB4ZmEsIDB4NGMsIDB4NTksIDB4MDQsIDB4N2UsIDB4YzgsIDB4YWIsIDB4YjgsIDB4Y2EsIDB4ZGMsIDB4YjEsCisJMHhjOSwgMHhkNywgMHhlNywgMHgwYiwgMHhjMCwgMHhkNSwgMHhjMCwgMHhkMiwgMHhjNSwgMHhjMCwgMHgxNywgMHhiNywKKwkweDQ4LCAweGJlLCAweDMzLCAweGM4LCAweDQ3LCAweGUxLCAweGMzLCAweGQ3LCAweGRiLCAweDgzLCAweDFjLCAweDk3LAorCTB4Y2YsIDB4NjcsIDB4MzMsIDB4YzgsIDB4YTksIDB4NjEsIDB4MTMsIDB4YjcsIDB4NjEsIDB4OGQsIDB4YjIsIDB4NGQsCisJMHhlNSwgMHhiMCwgMHgzNywgMHhhMSwgMHhkZiwgMHhhMywgMHgzZCwgMHg1NywgMHg2YywgMHhjYywgMHgyZCwgMHgwZSwKKwkweGE4LCAweGRjLCAweDYyLCAweDY4LCAweDQzLCAweDZlLCAweDExLCAweGQ0LCAweGI0LCAweDAyLCAweGJhLCAweDM5LAorCTB4MmUsIDB4NzAsIDB4MDMsIDB4ZWMsIDB4ZTAsIDB4YmIsIDB4MTgsIDB4ZmYsIDB4M2IsIDB4ZDAsIDB4ZjcsIDB4YjcsCisJMHg0YiwgMHhjMCwgMHgwZCwgMHgyNSwgMHhlMCwgMHg4NiwgMHgxMiwgMHg3MCwgMHg0MywgMHgwOSwgMHhiOCwgMHhhMSwKKwkweDE0LCAweGY1LCAweGViLCAweDViLCAweDJlLCAweDcxLCAweGZmLCAweDA3LCAweGI0LCAweGU5LCAweGEwLCAweGVlLAorCTB4YjEsIDB4ZDksIDB4NWUsIDB4YmQsIDB4M2EsIDB4NTksIDB4YWEsIDB4MTYsIDB4ZTAsIDB4ZTcsIDB4MzAsIDB4ZWIsCisJMHg3NiwgMHhjMCwgMHg3MSwgMHg0MSwgMHg0ZCwgMHhjNCwgMHg4ZiwgMHgxZCwgMHg4YiwgMHhkYywgMHg0MywgMHg0MSwKKwkweGVjLCAweDU4LCAweDc0LCAweGIxLCAweDllLCAweGZhLCAweGEyLCAweDA2LCAweDcwLCAweGEzLCAweDIxLCAweDUxLAorCTB4ZmMsIDB4MzYsIDB4ZTEsIDB4OTMsIDB4YjksIDB4NjcsIDB4ZGUsIDB4OGQsIDB4MTUsIDB4ZDYsIDB4YWMsIDB4NmEsCisJMHg0ZiwgMHgyNywgMHg1NCwgMHg0ZCwgMHhjMiwgMHg5NiwgMHhjOSwgMHg3MiwgMHg5MCwgMHhkYiwgMHhjNSwgMHg2NSwKKwkweDY4LCAweDg2LCAweDU4LCAweDU0LCAweGI2LCAweGViLCAweDA5LCAweGU4LCAweGEyLCAweDRhLCAweGZjLCAweGM4LAorCTB4M2QsIDB4MjcsIDB4Y2UsIDB4MWYsIDB4ZWYsIDB4YWQsIDB4NjAsIDB4Y2UsIDB4ODIsIDB4ZWQsIDB4ZDEsIDB4NzcsCisJMHhhMiwgMHhhYSwgMHhjZSwgMHgwNSwgMHhmOCwgMHhjZiwgMHgwNSwgMHg2NywgMHgwMSwgMHhlMiwgMHhiMiwgMHg3ZiwKKwkweDg2LCAweDdiLCAweGVmLCAweDMxLCAweDE5LCAweDJkLCAweDNhLCAweGM4LCAweDY1LCAweDU1LCAweDhlLCAweDg0LAorCTB4NzgsIDB4ZTAsIDB4YzksIDB4N2QsIDB4YzgsIDB4OTcsIDB4N2IsIDB4MGUsIDB4ZDgsIDB4NjEsIDB4ZGMsIDB4MGUsCisJMHhlNCwgMHg0ZSwgMHg3OSwgMHg4ZiwgMHg2OCwgMHhjMywgMHg5MCwgMHhmNSwgMHg3ZSwgMHg1ZiwgMHhkNiwgMHhlOSwKKwkweDI1LCAweDMxLCAweDkxLCAweGZmLCAweGM0LCAweDhjLCAweDdkLCAweDYzLCAweGRhLCAweDY4LCAweDRkLCAweDYxLAorCTB4MTYsIDB4ZmEsIDB4MjMsIDB4OGMsIDB4ZTUsIDB4NzgsIDB4NmIsIDB4MWQsIDB4ZjYsIDB4OTIsIDB4YWIsIDB4NmUsCisJMHhkZSwgMHg4ZiwgMHg2ZiwgMHhjNCwgMHgyZiwgMHg5ZiwgMHhkNSwgMHhjNCwgMHgwZSwgMHhlNCwgMHhkOCwgMHhkOCwKKwkweDNlLCAweGQxLCAweGQwLCAweGJlLCAweDdlLCAweGRmLCAweGU3LCAweDAxLCAweGJlLCAweDcyLCAweGJkLCAweDNlLAorCTB4NDEsIDB4YmYsIDB4NzYsIDB4YmQsIDB4MWQsIDB4NzgsIDB4NGYsIDB4NDIsIDB4ZWEsIDB4M2UsIDB4N2MsIDB4ZmUsCisJMHg2MiwgMHg0NCwgMHg1MiwgMHg4YiwgMHhiNiwgMHhhNCwgMHhjYiwgMHhlYywgMHhjNywgMHg5YSwgMHgwNywgMHhmZCwKKwkweGQ3LCAweDFmLCAweDRiLCAweDBhLCAweDc5LCAweDZlLCAweDM2LCAweDYyLCAweDM5LCAweGFlLCAweGZjLCAweDQ3LAorCTB4NTksIDB4OWQsIDB4Y2IsIDB4YzcsIDB4YjgsIDB4NzcsIDB4OWQsIDB4MWYsIDB4ZDUsIDB4ZjAsIDB4ZGMsIDB4OGYsCisJMHg3MSwgMHg0ZCwgMHhkYSwgMHg2ZCwgMHhhYywgMHgwZiwgMHhjNiwgMHhhOSwgMHhiZSwgMHhlOCwgMHgyMiwgMHhlZSwKKwkweDY1LCAweGM3LCAweDU4LCAweGU3LCAweDc5LCAweDJhLCAweDJjLCAweDZkLCAweDU2LCAweGFjLCAweDBjLCAweDNiLAorCTB4YjgsIDB4NTQsIDB4ZTQsIDB4N2MsIDB4YzAsIDB4NTIsIDB4NDUsIDB4ZDYsIDB4ODIsIDB4ODIsIDB4ZmIsIDB4N2YsCisJMHgwYywgMHhlYywgMHhhOCwgMHgxMywgMHgzYiwgMHg3OSwgMHg3ZCwgMHg5NCwgMHhiZSwgMHg1YywgMHgzMywgMHg4NCwKKwkweDM1LCAweGIwLCAweGUyLCAweGZiLCAweGU3LCAweDg1LCAweGEyLCAweDU3LCAweDdiLCAweDM5LCAweDQ3LCAweDNhLAorCTB4YWEsIDB4N2YsIDB4NTMsIDB4NWYsIDB4ODksIDB4MjAsIDB4NjcsIDB4NWEsIDB4ZTcsIDB4ZjEsIDB4MWMsIDB4YzcsCisJMHgzNywgMHhlMSwgMHg5ZSwgMHhlNSwgMHg2NCwgMHgzNSwgMHg5MCwgMHgwNSwgMHhlZiwgMHhiMywgMHg4ZCwgMHhmYiwKKwkweGYzLCAweGY1LCAweGZhLCAweDM5LCAweGZiLCAweGMzLCAweGQ2LCAweGQ5LCAweDllLCAweGJiLCAweDI3LCAweDY5LAorCTB4Y2IsIDB4ODEsIDB4ODUsIDB4YWEsIDB4MWMsIDB4ZjAsIDB4ZWEsIDB4NmMsIDB4ZDEsIDB4YmQsIDB4NWUsIDB4OWQsCisJMHgyZCwgMHhiNiwgMHg3NywgMHg2MywgMHg5ZCwgMHhhZCwgMHg3YywgMHg4ZiwgMHg1NywgMHg2NywgMHgzMywgMHgwZiwKKwkweGMwLCAweDA3LCAweDFmLCAweGYwLCAweGVhLCAweDZjLCAweGZmLCAweGY1LCAweDFlLCAweGFmLCAweGNlLCAweGQ2LAorCTB4NzUsIDB4YWYsIDB4NTcsIDB4NjcsIDB4ZWIsIDB4ZGQsIDB4ZWIsIDB4ZDUsIDB4ZDksIDB4NDYsIDB4ZWYsIDB4ZGQsCisJMHg1OCwgMHg2NywgMHg3MywgMHhmNiwgMHg2ZSwgMHhhYywgMHhiMywgMHgzOSwgMHgwNywgMHg3MiwgMHhmOCwgMHg1YywKKwkweGFmLCAweGIzLCAweDY1LCAweGY2LCAweGRlLCAweGJjLCAweGNlLCAweGY2LCAweDRhLCAweDgwLCAweGYxLCAweGMxLAorCTB4Y2YsIDB4MDAsIDB4NzgsIDB4NzAsIDB4ODAsIDB4ZjEsIDB4ZmIsIDB4ODEsIDB4ZjEsIDB4NmYsIDB4NTYsIDB4ZTMsCisJMHg1NSwgMHhlNywgMHgzNywgMHhjMCwgMHhhNywgMHhlNiwgMHhjNywgMHg4ZiwgMHgwZiwgMHg4MywgMHhmNSwgMHhiNywKKwkweGZhLCAweGNmLCAweGJhLCAweGM4LCAweDhmLCAweDYzLCAweDdlLCAweDZlLCAweDQzLCAweGJjLCAweGJmLCAweGNkLAorCTB4Y2YsIDB4ZjEsIDB4YmEsIDB4NWEsIDB4YWYsIDB4OWYsIDB4YWQsIDB4NjgsIDB4ZmMsIDB4YmUsIDB4MGQsIDB4YTksCisJMHg3YSwgMHg1MCwgMHgwMywgMHgyMCwgMHg1ZiwgMHg3MiwgMHhlMCwgMHg2MSwgMHgyNSwgMHg4NywgMHgzYiwgMHhkMSwKKwkweGRmLCAweDNjLCAweGYwLCAweDI1LCAweDliLCAweDc1LCAweDgxLCAweDI3LCAweGIxLCAweDg2LCAweGRkLCAweGVkLAorCTB4ODYsIDB4ZGEsIDB4NjcsIDB4NjYsIDB4NGMsIDB4M2IsIDB4MmQsIDB4MjksIDB4ZjQsIDB4NGYsIDB4YTksIDB4ZmUsCisJMHhhMywgMHgwZCwgMHhmZCwgMHhiMywgMHhlOCwgMHhjZiwgMHg3MSwgMHhhZCwgMHg3ZiwgMHg4YiwgMHhjZiwgMHg3MywKKwkweGNhLCAweGJlLCAweDZkLCAweDBmLCAweGY3LCAweGE3LCAweDRiLCAweDAxLCAweDRlLCAweDBiLCAweGY5LCAweDE4LAorCTB4ZGMsIDB4Y2QsIDB4YjgsIDB4ZDUsIDB4N2IsIDB4ZjEsIDB4OGMsIDB4ZjUsIDB4YTIsIDB4MmIsIDB4NTcsIDB4MTUsCisJMHhkZSwgMHgzNywgMHgxMiwgMHhkNiwgMHg4YiwgMHg1OSwgMHg5NSwgMHhkZiwgMHhiOSwgMHg5OSwgMHg1YywgMHg3NSwKKwkweDNkLCAweDVmLCAweDA3LCAweDBlLCAweDYzLCAweGNlLCAweDAzLCAweDdiLCAweDVmLCAweGVlLCAweDQ1LCAweGRjLAorCTB4NmIsIDB4Y2MsIDB4YzksIDB4OTksIDB4ODcsIDB4ZWIsIDB4N2UsIDB4MWUsIDB4NmUsIDB4Y2EsIDB4ZmQsIDB4ZmIsCisJMHgxYSwgMHgzMSwgMHhiZSwgMHg3MywgMHhlMCwgMHhlZiwgMHgyYiwgMHg4YywgMHhiZiwgMHgwNSwgMHhiOSwgMHgzYywKKwkweDMxLCAweDNjLCAweDcxLCAweDBmLCAweDMxLCAweDA3LCAweDcxLCAweDNlLCAweGViLCAweDBiLCAweGNjLCAweDdmLAorCTB4MTgsIDB4NGIsIDB4OTksIDB4MGYsIDB4NDUsIDB4ZjAsIDB4ZTEsIDB4YjksIDB4OTcsIDB4MDAsIDB4ZWIsIDB4MzcsCisJMHhmYiwgMHhmZSwgMHg5ZiwgMHg3OSwgMHg1NCwgMHg4MCwgMHg2ZCwgMHhhYywgMHgyZCwgMHg1ZSwgMHgyZSwgMHhiNSwKKwkweDQ1LCAweGYzLCAweGYyLCAweGQ1LCAweDk4LCAweGRmLCAweDI3LCAweGI0LCAweDhlLCAweGE1LCAweDQzLCAweGViLAorCTB4NTgsIDB4N2EsIDB4YzMsIDB4NWUsIDB4ODksIDB4YTgsIDB4MzMsIDB4MzYsIDB4NmEsIDB4Y2YsIDB4ODUsIDB4N2IsCisJMHgzMCwgMHg2ZSwgMHhlNiwgMHg1MiwgMHgwZiwgMHhmMSwgMHgzMCwgMHhmNywgMHg2MiwgMHg4MCwgMHg4ZCwgMHhlYywKKwkweGM2LCAweDU4LCAweGM1LCAweDM4LCAweDQ1LCAweDNjLCAweDE1LCAweGVjLCAweGI3LCAweDA2LCAweDdhLCAweGEyLAorCTB4ZWMsIDB4ZDgsIDB4ZjYsIDB4NDcsIDB4MWEsIDB4NzIsIDB4NjQsIDB4YTcsIDB4ZDksIDB4ZGUsIDB4MGYsIDB4NWEsCisJMHgzMiwgMHhmOCwgMHgwZSwgMHg2NCwgMHhmYSwgMHg4MCwgMHg4YSwgMHg5MSwgMHgyZCwgMHhiMCwgMHhkZCwgMHgxMywKKwkweDI1LCAweDYyLCAweGRlLCAweDZkLCAweGIyLCAweGU4LCAweGUzLCAweGRlLCAweGYzLCAweDMzLCAweDFlLCAweGU2LAorCTB4MGQsIDB4NmQsIDB4YzQsIDB4YmMsIDB4Y2UsIDB4YWEsIDB4NzgsIDB4MzQsIDB4ZWUsIDB4YmYsIDB4MjEsIDB4OGQsCisJMHhjNCwgMHhiNywgMHhhNCwgMHg4ZiwgMHgzMSwgMHg4OSwgMHhmZSwgMHhkMSwgMHhjZCwgMHg1YywgMHhlZSwgMHg2MSwKKwkweDNjLCAweDYyLCAweDJjLCAweDhhLCAweGM5LCAweGVhLCAweDRkLCAweGU5LCAweDUzLCAweDZkLCAweGM3LCAweDVhLAorCTB4ZWMsIDB4MzAsIDB4M2UsIDB4MTMsIDB4ZjAsIDB4MWYsIDB4YTMsIDB4NzgsIDB4MjYsIDB4MjMsIDB4OTMsIDB4YjMsCisJMHg1ZiwgMHgwMCwgMHg2ZiwgMHgxMywgMHg3MiwgMHg2OSwgMHg2NiwgMHgwYywgMHhmNCwgMHgzZCwgMHgyOSwgMHg1MywKKwkweDRlLCAweDFlLCAweDdlLCAweDg0LCAweDdiLCAweDIxLCAweGM0LCAweDc5LCAweGRkLCAweGZlLCAweGY3LCAweDg0LAorCTB4N2UsIDB4Y2UsIDB4YjYsIDB4ODgsIDB4MzMsIDB4YTUsIDB4NTIsIDB4YTQsIDB4MGYsIDB4ZTYsIDB4YmUsIDB4MTQsCisJMHhmNywgMHgxZiwgMHg2OSwgMHgzZiwgMHhhYywgMHhjMywgMHgyMCwgMHhkNywgMHg2NSwgMHhjZSwgMHgzYiwgMHhjZCwKKwkweGY5LCAweDM3LCAweGVhLCAweDY0LCAweGI1LCAweDRhLCAweGJjLCAweGU2LCAweDY2LCAweDU2LCAweDk2LCAweDg5LAorCTB4MzcsIDB4M2YsIDB4MjgsIDB4ZjYsIDB4YTQsIDB4MWUsIDB4ODgsIDB4M2YsIDB4NmYsIDB4MDUsIDB4NzcsIDB4NWEsCisJMHgzMywgMHhjMCwgMHg5YywgMHgyZiwgMHhhYywgMHhlOCwgMHg4ZCwgMHhiOCwgMHhkMywgMHhjMywgMHg5YywgMHhjOSwKKwkweGU1LCAweDJjLCAweGM2LCAweDc0LCAweDE0LCAweGI2LCAweDQ2LCAweGRlLCAweDA3LCAweGI3LCAweGQ3LCAweDhkLAorCTB4NjcsIDB4YmIsIDB4OTEsIDB4YzMsIDB4N2IsIDB4MTgsIDB4MzMsIDB4MDUsIDB4OGMsIDB4ZjksIDB4MGYsIDB4ODEsCisJMHgzMSwgMHgyNywgMHhlNSwgMHhhZCwgMHg1NiwgMHg2MiwgMHg0YywgMHhkNywgMHhjNywgMHg5OCwgMHg2OSwgMHhkOCwKKwkweDczLCAweDZlLCAweDgzLCAweDNkLCAweDZiLCAweGFhLCAweDc2LCAweGM1LCAweDdiLCAweDM5LCAweDYwLCAweGM0LAorCTB4ZDQsIDB4YjQsIDB4NzUsIDB4MGIsIDB4YjgsIDB4NTIsIDB4OTMsIDB4ODgsIDB4M2EsIDB4ZmIsIDB4MTAsIDB4NmEsCisJMHgxOCwgMHgzMywgMHhjMCwgMHg4ZiwgMHg3YiwgMHgxNCwgMHgyZSwgMHgzYywgMHg1MCwgMHhkYSwgMHg4MiwgMHgxYywKKwkweDQ2LCAweGUxLCAweDQ0LCAweDdmLCAweDRmLCAweDJlLCAweGI0LCAweDY5LCAweDlmLCAweDMyLCAweGQ0LCAweGIwLAorCTB4NGYsIDB4NzksIDB4MWQsIDB4NGYsIDB4ZTIsIDB4MzksIDB4YmYsIDB4M2UsIDB4ZDgsIDB4MDQsIDB4NWYsIDB4ZjAsCisJMHg3ZiwgMHg0MCwgMHgxMywgMHhkNywgMHgxNywgMHhkNywgMHg4MiwgMHhlNiwgMHhhZCwgMHg5NywgMHhkMSwgMHg0NiwKKwkweDVjLCAweGY5LCAweGJmLCAweDM2LCAweGUxLCAweDRhLCAweGM0LCAweGFlLCAweGYzLCAweDExLCAweDQ5LCAweDAyLAorCTB4NTMsIDB4YmEsIDB4Y2IsIDB4MWMsIDB4OGIsIDB4NmIsIDB4YmEsIDB4NWYsIDB4OWEsIDB4YzEsIDB4NWYsIDB4Y2IsCisJMHg3NCwgMHgyNywgMHhiMCwgMHg1NCwgMHg5YiwgMHg4NCwgMHg4MSwgMHhhOSwgMHg5YSwgMHgxNCwgMHhhNiwgMHhlYSwKKwkweDIxLCAweGY2LCAweGU5LCAweDNkLCAweDAyLCAweDJjLCAweGI0LCAweGI4LCAweDhlLCAweGFiLCAweDJjLCAweGU3LAorCTB4ODcsIDB4ZDAsIDB4Y2IsIDB4YTMsIDB4Y2EsIDB4ZjcsIDB4YTQsIDB4ZTUsIDB4MjksIDB4ZjgsIDB4ZDIsIDB4ZTYsCisJMHg2NSwgMHhlMCwgMHhjMSwgMHhmMywgMHgxZSwgMHhkZSwgMHg2YSwgMHhkYSwgMHg4NCwgMHhiNywgMHg4ZSwgMHhkZSwKKwkweDEwLCAweDZmLCAweGE5LCAweDlhLCAweGZmLCAweDIwLCAweDY1LCAweGYyLCAweDdhLCAweGQ1LCAweGFiLCAweGY5LAorCTB4NWYsIDB4YTksIDB4N2EsIDB4MzUsIDB4ZmYsIDB4ZDcsIDB4YWIsIDB4OGQsIDB4MzUsIDB4ZmYsIDB4OGYsIDB4NDgsCisJMHhjMSwgMHhiNCwgMHhkYywgMHgzNSwgMHhkOSwgMHg1NCwgMHhmMywgMHgxZiwgMHg2NSwgMHgwZCwgMHhmZCwgMHhmNywKKwkweGRhLCAweGJjLCAweGRhLCAweDdlLCAweDliLCAweDVmLCAweGYzLCAweGI3LCAweGE0LCAweGIwLCAweGExLCAweGRkLAorCTB4OTQsIDB4YjcsIDB4ZWMsIDB4YTAsIDB4ZTYsIDB4ZmYsIDB4MzQsIDB4ZGEsIDB4ZGEsIDB4MzEsIDB4YzcsIDB4YzYsCisJMHg3YSwgMHhmZiwgMHg5NSwgMHgyYSwgMHhlYiwgMHhmZCwgMHgxMSwgMHhmNiwgMHhmMywgMHhlYiwgMHhmZCwgMHhlYywKKwkweDg3LCAweGRjLCAweGJmLCAweGNhLCAweDVhLCAweGZmLCAweDZlLCAweGM4LCAweDYyLCAweDI3LCAweGU0LCAweGQwLAorCTB4MjksIDB4Y2QsIDB4NjcsIDB4YTMsIDB4ZWMsIDB4YTMsIDB4NmEsIDB4ZmMsIDB4NmIsIDB4YzgsIDB4MzcsIDB4YWUsCisJMHg1NCwgMHhiZCwgMHg1YSwgMHhmYywgMHgxMSwgMHhkOCwgMHhkNSwgMHhkMSwgMHhmNSwgMHgxYSwgMHhiZiwgMHgzNywKKwkweGM3LCAweGQ1LCAweGVhLCAweGM2LCAweGYxLCAweDM3LCAweDhlLCAweGQzLCAweGU1LCAweDhmLCAweDEzLCAweGMxLAorCTB4MzgsIDB4ZDEsIDB4NGQsIDB4ZTMsIDB4NWMsIDB4YWYsIDB4ZTksIDB4NWYsIDB4YWQsIDB4N2EsIDB4ZjUsIDB4ZmMsCisJMHhmNCwgMHhhYywgMHhiOCwgMHhjZCwgMHhmMCwgMHhjZCwgMHgyZiwgMHhmNiwgMHhlYywgMHhmMiwgMHhjNywgMHg1OCwKKwkweGFmLCAweGU3LCAweGQzLCAweDg3LCAweDAwLCAweGU3LCAweGM3LCAweGQ1LCAweGY5LCAweDllLCAweDIzLCAweGZmLAorCTB4MWYsIDB4ZWEsIDB4ZjksIDB4YWMsIDB4ZTUsIDB4N2IsIDB4N2IsIDB4MzIsIDB4NWMsIDB4OWYsIDB4YzAsIDB4ZjMsCisJMHhjZiwgMHg3YSwgMHg3NSwgMHhmYywgMHhhMSwgMHg1MiwgMHg1MCwgMHg5ZiwgMHg2NywgMHg1ZSwgMHgxOSwgMHg5YywKKwkweGJkLCAweGU5LCAweDhlLCAweDlkLCAweDEwLCAweGRhLCAweDBhLCAweGU5LCAweGUzLCAweGI4LCAweGVkLCAweDMyLAorCTB4YWUsIDB4ZjAsIDB4MTQsIDB4NmMsIDB4MmEsIDB4N2UsIDB4NzMsIDB4NGMsIDB4YmQsIDB4MzAsIDB4MWQsIDB4NjAsCisJMHhlYSwgMHg4OCwgMHhjMiwgMHhkNCwgMHgwYiwgMHhjYiwgMHgwMSwgMHhhNiwgMHg0ZSwgMHhkZSwgMHgwNCwgMHg1MywKKwkweGZmLCAweGY3LCAweDM2LCAweDJmLCAweDBlLCAweDg0LCAweDI1LCAweGFmLCAweDMwLCAweGY1LCAweGNkLCAweGNlLAorCTB4MmIsIDB4ZjEsIDB4NWUsIDB4MWIsIDB4ZjEsIDB4ODIsIDB4NzgsIDB4N2IsIDB4ZDgsIDB4OWQsIDB4MzcsIDB4NTksCisJMHg2YiwgMHgwMSwgMHhjZSwgMHg2NiwgMHhlYywgMHhkZiwgMHgyOSwgMHhhMywgMHg2NywgMHhhZiwgMHhlMywgMHg2YywKKwkweDBmLCAweDRiLCAweDViLCAweGIxLCAweDYzLCAweDJhLCAweDI2LCAweDAyLCAweGQ3LCAweGQ1LCAweDU4LCAweDJmLAorCTB4MjcsIDB4NTYsIDB4NjYsIDB4Y2MsIDB4MDksIDB4MjksIDB4M2MsIDB4OTcsIDB4MmIsIDB4MzIsIDB4MGYsIDB4NjAsCisJMHgxYiwgMHhiMSwgMHg3MywgMHgyYiwgMHg4ZiwgMHhmMiwgMHhmOCwgMHgzMSwgMHgyOSwgMHhjMCwgMHhhNiwgMHhjMSwKKwkweGQ5LCAweDA5LCAweGVlLCAweDRiLCAweGJjLCAweDY1LCAweDI0LCAweDZkLCAweGI0LCAweDU3LCAweDgzLCAweDVjLAorCTB4YzEsIDB4NTEsIDB4NjcsIDB4NGUsIDB4OTIsIDB4YzAsIDB4M2YsIDB4ZTMsIDB4ZWIsIDB4ZDgsIDB4OTMsIDB4YmUsCisJMHhlMiwgMHg0NywgMHhiZiwgMHg3MCwgMHg0ZCwgMHhmYSwgMHhiNSwgMHgwMCwgMHg1YiwgMHgyMiwgMHgyNywgMHgyYSwKKwkweDcxLCAweDZkLCAweDA3LCAweGQ4LCAweGQyLCAweGMzLCAweDk1LCAweGE5LCAweGVhLCAweDBhLCAweGYwLCAweDc1LAorCTB4NDgsIDB4ODYsIDB4ODAsIDB4ZWIsIDB4NTcsIDB4MWUsIDB4NjYsIDB4Y2QsIDB4MmEsIDB4YzAsIDB4NGUsIDB4MmUsCisJMHhiZSwgMHgxYiwgMHg2YiwgMHg1OCwgMHhiYywgMHg2ZSwgMHg1NiwgMHg3YiwgMHg4NywgMHgxNywgMHg3YiwgMHhjMiwKKwkweDBkLCAweGVkLCAweGJmLCAweDA1LCAweGZmLCAweDhkLCAweGZjLCAweDA4LCAweDk4LCAweGM1LCAweGMzLCAweDRjLAorCTB4N2IsIDB4YTEsIDB4ODMsIDB4MDEsIDB4ODUsIDB4OTksIDB4YTYsIDB4ZGUsIDB4ODMsIDB4OTksIDB4MzYsIDB4YzcsCisJMHgyOCwgMHhjNiwgMHhjYywgMHhlYiwgMHgzMSwgMHgyYSwgMHg1ZCwgMHhhMywgMHgzZiwgMHhiZiwgMHgxZSwgMHhhMywKKwkweDZlLCAweDFlLCAweDQzLCAweGQ5LCAweDA2LCAweGVlLCAweGVjLCAweDBjLCAweDNlLCAweDEzLCAweDUyLCAweGQ4LAorCTB4MTQsIDB4YTMsIDB4YTYsIDB4M2UsIDB4NDQsIDB4OGMsIDB4MWEsIDB4NTYsIDB4MzEsIDB4Y2EsIDB4YTMsIDB4ZmIsCisJMHhmYiwgMHg5MCwgMHhjZCwgMHg3NywgMHgyMSwgMHhkMywgMHhlZiwgMHgwMCwgMHg4YiwgMHg3ZCwgMHgxYiwgMHg3YywKKwkweDdkLCAweDBiLCAweDM4LCAweGU5LCAweDliLCAweGE1LCAweGNkLCAweDY3LCAweDBlLCAweDA2LCAweDg1LCAweGY5LAorCTB4YTEsIDB4ODcsIDB4YTUsIDB4YmMsIDB4MWEsIDB4YzAsIDB4MTEsIDB4YWMsIDB4YWUsIDB4YzUsIDB4YTIsIDB4OWIsCisJMHgxOSwgMHgyZiwgMHhmNiwgMHg5OSwgMHgxMywgMHhkZSwgMHhkZSwgMHg2YiwgMHgyYywgMHgyYiwgMHg4ZiwgMHhiNSwKKwkweGE2LCAweGU2LCAweDE5LCAweDMzLCAweGQ0LCAweDc1LCAweDk0LCAweGY1LCAweDRlLCAweDYyLCAweDg3LCAweDhhLAorCTB4Y2EsIDB4MzMsIDB4N2IsIDB4YTQsIDB4YmMsIDB4ZTgsIDB4ZTEsIDB4YjAsIDB4YTksIDB4NzksIDB4NmYsIDB4OGMsCisJMHg3MSwgMHgxZiwgMHg4NywgMHhlNSwgMHg3YywgMHgxYywgMHg5NiwgMHg1ZCwgMHg1YywgMHg4ZCwgMHg4NSwgMHhkMCwKKwkweDdmLCAweGNhLCAweGQ5LCAweDg4LCAweGJkLCAweDhlLCAweGY4LCAweGQ4LCAweDZiLCAweGUyLCAweDQzLCAweDYxLAorCTB4MmYsIDB4NmYsIDB4YWUsIDB4MWMsIDB4OWUsIDB4MTksIDB4OWUsIDB4ODksIDB4YzksIDB4N2UsIDB4YzgsIDB4NzksCisJMHhhOCwgMHg0OCwgMHg3ZCwgMHhmMSwgMHg5YywgMHhkMiwgMHgyZiwgMHhkMywgMHgxOSwgMHhmNSwgMHhlNSwgMHhlOSwKKwkweDJhLCAweDE0LCAweDNmLCAweGE4LCAweDBkLCAweDQzLCAweDU3LCAweDQzLCAweGJmLCAweDU0LCAweDU3LCAweDYyLAorCTB4YmUsIDB4MzksIDB4MTAsIDB4YzYsIDB4ZTcsIDB4NmYsIDB4NGIsIDB4NTcsIDB4ZTQsIDB4ODMsIDB4ZmEsIDB4ZGEsCisJMHg4YywgMHhjNSwgMHg2ZSwgMHgwNSwgMHg5MywgMHg2ZCwgMHhjNCwgMHg2MywgMHhhZSwgMHhjMiwgMHg2MywgMHhjZCwKKwkweDdlLCAweDlmLCAweGZjLCAweDgxLCAweDYxLCAweGU4LCAweGYyLCAweDNmLCAweGEwLCAweGNmLCAweDhmLCAweGVkLAorCTB4NzYsIDB4ZjksIDB4MTEsIDB4ZmMsIDB4ZjcsIDB4YmYsIDB4ODcsIDB4NGUsIDB4ZmUsIDB4MWQsIDB4NzIsIDB4ODUsCisJMHg1NywgMHhlYywgMHgyZSwgMHhmOSwgMHgyMSwgMHhkYSwgMHhhZSwgMHhlMywgMHgxYywgMHhmNiwgMHg5ZiwgMHg3MiwKKwkweDkyLCAweGY2LCAweDI4LCAweGYwLCAweGM5LCAweGE4LCAweDhmLCAweDRmLCAweGRlLCAweDdhLCAweDIwLCAweDY5LAorCTB4OGYsIDB4YjEsIDB4Y2UsIDB4MGUsIDB4MzksIDB4ZmYsIDB4MzQsIDB4MzksIDB4YWUsIDB4YjAsIDB4NDksIDB4ODAsCisJMHg0OSwgMHgxZSwgMHg0ZiwgMHg3MywgMHhmZSwgMHhjOSwgMHg2YSwgMHgxNiwgMHhkOCwgMHgyNywgMHhlYiwgMHg2MywKKwkweDlmLCAweDlmLCAweGE2LCAweDNkLCAweGVjLCAweDMzLCAweGY1LCAweGY3LCAweGE4LCAweDdmLCAweDBmLCAweGY3LAorCTB4MWMsIDB4NzYsIDB4OTMsIDB4OTgsIDB4MDcsIDB4YjgsIDB4MDcsIDB4ZDcsIDB4ODcsIDB4MjUsIDB4NWYsIDB4MWIsCisJMHg1MSwgMHg5ZiwgMHgxMywgMHgyNSwgMHhkNywgMHg2YSwgMHg4MiwgMHg5YywgMHg1OCwgMHhhYiwgMHgzZCwgMHhjMywKKwkweDU1LCAweDU5LCAweGI1LCAweGNjLCAweDIyLCAweGJlLCAweGIzLCAweDU1LCAweDJiLCAweGZhLCAweDdiLCAweGZlLAorCTB4ZjUsIDB4ZDMsIDB4ZmUsIDB4ZjUsIDB4NTMsIDB4ZmUsIDB4ZjUsIDB4NjksIDB4YzQsIDB4ZTEsIDB4NTMsIDB4MmEsCisJMHg5NiwgMHhiMiwgMHg5ZCwgMHg2ZCwgMHg1MCwgMHg3MiwgMHgxNSwgMHg2MywgMHgwMSwgMHg3YiwgMHg5YywgMHhlYiwKKwkweGZmLCAweGYzLCAweDdhLCAweDU5LCAweGU5LCAweDk4LCAweGUzLCAweDhmLCAweGUyLCAweDczLCAweDFhLCAweDlmLAorCTB4MDksIDB4N2MsIDB4MGUsIDB4ZTEsIDB4OTMsIDB4YzcsIDB4NjcsIDB4NWQsIDB4YTYsIDB4NWEsIDB4YWEsIDB4MzQsCisJMHgwNiwgMHgxYiwgMHhlOSwgMHg5NSwgMHg1NCwgMHhlZCwgMHgzOSwgMHhlOCwgMHhmMSwgMHg0OSwgMHhlOCwgMHhmNiwKKwkweGI4LCAweDE0LCAweDJhLCAweDdmLCAweDIyLCAweDkzLCAweDMzLCAweDlhLCAweGI0LCAweGQ5LCAweGQwLCAweDY5LAorCTB4MDUsIDB4YjYsIDB4M2MsIDB4ZTMsIDB4ZWQsIDB4NDEsIDB4YjYsIDB4MjYsIDB4NDYsIDB4ZDAsIDB4YjcsIDB4MmUsCisJMHg4ZiwgMHgzYSwgMHg0ZiwgMHg4YSwgMHg3ZSwgMHhkZiwgMHgxNCwgMHhmYSwgMHg4OSwgMHg1ZSwgMHhlOCwgMHhiZiwKKwkweDViLCAweGVkLCAweGJmLCAweDU1LCAweDFjLCAweDRmLCAweGM2LCAweGZiLCAweDZkLCAweGQ3LCAweDgyLCAweGNlLAorCTB4N2IsIDB4NGYsIDB4NjEsIDB4ZWMsIDB4YTQsIDB4M2EsIDB4N2YsIDB4OTksIDB4OTEsIDB4OTMsIDB4YjMsIDB4YWIsCisJMHhkYiwgMHgzZCwgMHhkZiwgMHg2YSwgMHg5OSwgMHg1NywgMHhhOSwgMHg3NywgMHhmMCwgMHhlMSwgMHhjMiwgMHgxNywKKwkweDY2LCAweDYwLCAweGVmLCAweDQ3LCAweGFiLCAweDIxLCAweDZkLCAweDA4LCAweGYxLCAweDY2LCAweGE4LCAweDdhLAorCTB4NTUsIDB4YzUsIDB4OWIsIDB4NTQsIDB4ZDUsIDB4Y2QsIDB4YzQsIDB4Y2YsIDB4NDQsIDB4NzAsIDB4Y2QsIDB4NzMsCisJMHgzMSwgMHg4OCwgMHg4YiwgMHhlYSwgMHhmYywgMHhkZSwgMHgyYSwgMHhmMCwgMHg4ZCwgMHhhNiwgMHhlYSwgMHg4NiwKKwkweDkzLCAweGViLCAweGZiLCAweDRhLCAweGVhLCAweDdjLCAweDcxLCAweDI2LCAweDFlLCAweGQ3LCAweDI1LCAweDM3LAorCTB4NDAsIDB4OWMsIDB4M2IsIDB4YTIsIDB4NjIsIDB4MTMsIDB4ZDYsIDB4ZWEsIDB4ZWQsIDB4Y2MsIDB4MTUsIDB4NWYsCisJMHhlNywgMHhiYiwgMHgwMCwgMHhmNiwgMHgyNywgMHhkMCwgMHhhZiwgMHgwYiwgMHhmZSwgMHgxOCwgMHhmNywgMHg2YSwKKwkweGI0LCAweDRmLCAweGYyLCAweGNhLCAweDY3LCAweDI2LCAweGE0LCAweDUyLCAweDFlLCAweDA0LCAweGJmLCAweDdlLAorCTB4OGUsIDB4YTQsIDB4NzIsIDB4ODksIDB4MTgsIDB4ZWMsIDB4MzEsIDB4ZDgsIDB4YzMsIDB4ZjIsIDB4ZWEsIDB4MmEsCisJMHg5NSwgMHg2YSwgMHg4MCwgMHgyOSwgMHhkYSwgMHhkMSwgMHg4NywgMHg3OSwgMHgwNSwgMHg2NCwgMHhlNCwgMHhlZCwKKwkweGJmLCAweGE5LCAweGJkLCAweGI3LCAweDQyLCAweDc1LCAweDEwLCAweDcyLCAweDRhLCAweGEyLCAweDlkLCAweGI1LAorCTB4NmQsIDB4ZmMsIDB4MmUsIDB4ZWIsIDB4YWEsIDB4MjYsIDB4YjAsIDB4NjYsIDB4MWMsIDB4OTEsIDB4YzUsIDB4NzIsCisJMHgxZCwgMHhmNCwgMHgyMiwgMHhlNiwgMHg2ZSwgMHgzZiwgMHgyMiwgMHgwYiwgMHhlNSwgMHgwOSwgMHg3OSwgMHhhMSwKKwkweGZjLCAweGNkLCAweDc2LCAweDYwLCAweDJhLCAweGM4LCAweDk0LCAweGY0LCAweGI3LCAweGNiLCAweGY1LCAweDMzLAorCTB4OWUsIDB4NDEsIDB4M2IsIDB4ZTQsIDB4MzksIDB4OWIsIDB4OGYsIDB4N2EsIDB4NzksIDB4NmUsIDB4NWUsIDB4ZDUsCisJMHg2OCwgMHhiYywgMHg2ZiwgMHg1NywgMHgxZiwgMHhiNywgMHhhZCwgMHhlOCwgMHgyNCwgMHg3YSwgMHgxZSwgMHg5ZCwKKwkweDUzLCAweGI2LCAweDM5LCAweDNjLCAweDY1LCAweGVmLCAweDk1LCAweGNiLCAweGNlLCAweDM2LCAweDU5LCAweDc1LAorCTB4NTQsIDB4NWUsIDB4NGMsIDB4ZmMsIDB4ODAsIDB4YjUsIDB4NmUsIDB4OTksIDB4MmIsIDB4ZjIsIDB4YTAsIDB4OWMsCisJMHhjNCwgMHhiYSwgMHhiZCwgMHhlYywgMHgzYywgMHgwNiwgMHgzYiwgMHg3ZCwgMHgwMiwgMHhiNiwgMHhjMCwgMHgxYSwKKwkweGMwLCAweDMxLCAweGU2LCAweDVhLCAweGIyLCAweGEyLCAweDZhLCAweDY4LCAweGY1LCAweGZhLCAweGIwLCAweDNhLAorCTB4MjcsIDB4ZGMsIDB4MmMsIDB4YWIsIDB4MGEsIDB4OGIsIDB4NzksIDB4YjUsIDB4ZjYsIDB4ZDUsIDB4MzEsIDB4NmYsCisJMHg4ZCwgMHgxOCwgMHhjYSwgMHhlZSwgMHhiZiwgMHgwMSwgMHg3YSwgMHg4YSwgMHhiMCwgMHhkZCwgMHgyNiwgMHhkNSwKKwkweGM3LCAweDQ4LCAweGI0LCAweGY4LCAweDdkLCAweDE0LCAweDA2LCAweDZkLCAweGU4LCAweDYzLCAweDI3LCAweDkyLAorCTB4ZjYsIDB4NmIsIDB4ZmIsIDB4OTIsIDB4ZjYsIDB4YzQsIDB4ODEsIDB4NWMsIDB4ZDUsIDB4ZjMsIDB4OTksIDB4YWUsCisJMHhiNiwgMHhiNiwgMHg1ZSwgMHhmZiwgMHhjOSwgMHg2MCwgMHg1ZCwgMHhiZCwgMHhiYywgMHg4ZSwgMHhhMSwgMHg2MSwKKwkweGE0LCAweGNmLCAweDVmLCAweDgyLCAweDdlLCAweDQzLCAweGQyLCAweDdjLCAweGE2LCAweGZlLCAweDg5LCAweDcxLAorCTB4YTcsIDB4MmYsIDB4NzYsIDB4NTQsIDB4NzgsIDB4MzIsIDB4OGIsIDB4NzksIDB4YjUsIDB4ZTUsIDB4NjQsIDB4ZTUsCisJMHgxMiwgMHhlMiwgMHhlNCwgMHgzNSwgMHg2MiwgMHg4NywgMHhkZSwgMHg4YiwgMHg3MiwgMHhlZCwgMHgxMywgMHg0OSwKKwkweDY3LCAweDUwLCAweDViLCAweDE4LCAweDQzLCAweGQ2LCAweGYyLCAweGZjLCAweDE4LCAweGUzLCAweGVjLCAweDMxLAorCTB4MTEsIDB4ZTAsIDB4Y2IsIDB4MzMsIDB4MDMsIDB4OTIsIDB4MmUsIDB4YWEsIDB4NzcsIDB4MjEsIDB4NzgsIDB4OTYsCisJMHg1MywgMHg5YiwgMHg4MCwgMHhmYywgMHhmMCwgMHhmYywgMHgyOCwgMHgwMywgMHhhMywgMHg2ZSwgMHg3NywgMHhjNywKKwkweGQyLCAweGYyLCAweDE4LCAweDZiLCAweDYzLCAweDkyLCAweDliLCAweDkzLCAweDNkLCAweDQ5LCAweGY4LCAweDU1LAorCTB4NzcsIDB4YjQsIDB4NTksIDB4MjYsIDB4MTYsIDB4ZGQsIDB4NGMsIDB4ZjcsIDB4ZjQsIDB4MTMsIDB4MTgsIDB4NjMsCisJMHgxYywgMHg2MywgMHg4ZCwgMHgyMCwgMHgzNywgMHhjOSwgMHgyMiwgMHg1NiwgMHg1MywgMHhiZSwgMHhmNCwgMHhkZCwKKwkweDhmLCAweDQzLCAweDQ2LCAweDFmLCAweGUxLCAweDU5LCAweGQ3LCAweGMxLCAweGFjLCAweDU4LCAweGEzLCAweDc5LAorCTB4MzUsIDB4ZWUsIDB4YmIsIDB4NWEsIDB4YWUsIDB4ZmYsIDB4NTcsIDB4MTAsIDB4ZWIsIDB4NDIsIDB4YjIsIDB4M2YsCisJMHgyZSwgMHhmYSwgMHg0OCwgMHgzYywgMHhmNCwgMHg4YiwgMHg3MSwgMHg5YiwgMHg2ZCwgMHg2MSwgMHhiNiwgMHhlOSwKKwkweDY4LCAweDBiLCAweGZkLCAweDY2LCAweDNjLCAweGFjLCAweDI3LCAweGUzLCAweGQ2LCAweDIwLCAweGNmLCAweGUwLAorCTB4MWEsIDB4ZjYsIDB4YjgsIDB4MTgsIDB4Y2YsIDB4ZDcsIDB4MjEsIDB4OGIsIDB4MTEsIDB4ZTksIDB4YjgsIDB4NjAsCisJMHgwZCwgMHhiZSwgMHgwZSwgMHg1YSwgMHg0MiwgMHhjYSwgMHhkNywgMHg4ZiwgMHg4YiwgMHhlZSwgMHhiNywgMHhiNywKKwkweGFmLCAweGI3LCAweDg3LCAweGZjLCAweGY2LCAweDExLCAweDY5LCAweGJiLCAweGQwLCAweDY3LCAweGJlLCAweDIxLAorCTB4NDcsIDB4MzAsIDB4YTYsIDB4MjEsIDB4NTcsIDB4OTAsIDB4ZWIsIDB4ZDgsIDB4M2QsIDB4ZTMsIDB4YjAsIDB4YzUsCisJMHg0NywgMHg0OCwgMHhjYiwgMHgyMSwgMHhkNiwgMHgxYiwgMHg1ZCwgMHhkOCwgMHg1ZiwgMHg4YiwgMHg3ZCwgMHg4NywKKwkweDdjLCAweGRlLCAweDZjLCAweDk1LCAweDljLCAweGNhLCAweDc1LCAweDQzLCAweGVhLCAweGJkLCAweDg1LCAweDFjLAorCTB4ZWMsIDB4ZmQsIDB4YWUsIDB4OWUsIDB4YTEsIDB4MGUsIDB4YWYsIDB4NWUsIDB4YzAsIDB4ZmQsIDB4OTEsIDB4N2UsCisJMHhiNCwgMHg1ZCwgMHhhYiwgMHg5ZiwgMHhiNywgMHhkOSwgMHhjNiwgMHg3YiwgMHhkNywgMHhlYSwgMHgxNSwgMHhiYiwKKwkweGNmLCAweDRjLCAweDY5LCAweDYxLCAweDdmLCAweGZmLCAweGZjLCAweDk4LCAweGUyLCAweDNkLCAweDVmLCAweGVlLAorCTB4MzYsIDB4MTcsIDB4ZTQsIDB4MmUsIDB4MmQsIDB4YjUsIDB4MDMsIDB4ZjEsIDB4YTIsIDB4OWEsIDB4NDIsIDB4ZGYsCisJMHg2YiwgMHgzYywgMHg4MywgMHhhMSwgMHhmNiwgMHgwMywgMHgxNiwgMHgyNCwgMHhiOCwgMHhlNiwgMHgzOCwgMHg3ZCwKKwkweGU2LCAweGIwLCAweDdhLCAweGI2LCAweGNmLCAweDNjLCAweGE5LCAweDM1LCAweDNlLCAweDFiLCAweGQ1LCAweDg2LAorCTB4MzcsIDB4M2MsIDB4ZGIsIDB4YTYsIDB4NjQsIDB4NjQsIDB4ZDgsIDB4NWUsIDB4OWYsIDB4YzksIDB4ZjIsIDB4ODgsCisJMHgzYywgMHg1ZCwgMHg2NSwgMHhiZiwgMHg2YiwgMHhmNSwgMHg5NCwgMHhiZCwgMHg1NSwgMHgzYiwgMHhiOSwgMHg4MywKKwkweGJlLCAweDkwLCAweDdkLCAweGRmLCAweGQ5LCAweDM0LCAweDBmLCAweGFmLCAweDZmLCAweDM2LCAweDQ3LCAweDVkLAorCTB4MzYsIDB4Y2UsIDB4YjEsIDB4NDUsIDB4ZjUsIDB4YjksIDB4YWMsIDB4ZmEsIDB4ODQsIDB4OTQsIDB4YWMsIDB4MzcsCisJMHhjZSwgMHhmMywgMHgxNywgMHhiMiwgMHg3MSwgMHg5ZSwgMHhiNiwgMHg3NSwgMHg5ZSwgMHgyNywgMHgzMSwgMHhlNiwKKwkweDI5LCAweGY0LCAweDJkLCAweDU2LCAweGJiLCAweGEzLCAweDE1LCAweDc5LCAweGE3LCAweDllLCAweGIzLCAweGRmLAorCTB4OTIsIDB4Y2IsIDB4ZWIsIDB4NjMsIDB4ZmYsIDB4MjUsIDB4YWUsIDB4MWIsIDB4NjksIDB4ZmEsIDB4NGIsIDB4OWYsCisJMHg0NiwgMHhmZSwgMHg2NiwgMHhkYiwgMHgzZiwgMHg1MywgMHhmMiwgMHhkZSwgMHg2YSwgMHg3NywgMHgxZiwgMHg1YSwKKwkweGQwLCAweGFjLCAweGMxLCAweDlmLCAweDA5LCAweDc1LCAweGY1LCAweDNiLCAweGNhLCAweGQ3LCAweGRjLCAweDBkLAorCTB4M2QsIDB4ZWQsIDB4NzksIDB4MDYsIDB4NmIsIDB4YjcsIDB4M2YsIDB4YTksIDB4ZmEsIDB4NWMsIDB4YjEsIDB4NDcsCisJMHg2NCwgMHhjZiwgMHg5OSwgMHg2ZSwgMHhmMywgMHg4YSwgMHhkYywgMHgyZiwgMHhlOSwgMHgwOCwgMHhhZiwgMHg5MSwKKwkweDQzLCAweGQ5LCAweDdjLCAweGY3LCAweGUxLCAweDU3LCAweDk5LCAweDE3LCAweDQwLCAweDk3LCAweGRkLCAweGJkLAorCTB4M2YsIDB4OTMsIDB4MjcsIDB4ZTQsIDB4NjQsIDB4NjksIDB4MGEsIDB4YmUsIDB4NjcsIDB4NWMsIDB4N2EsIDB4OWYsCisJMHhhMSwgMHhmZiwgMHhjOSwgMHg5YiwgMHg1ZSwgMHhhZCwgMHhjNiwgMHg4YiwgMHg4OSwgMHgyOSwgMHgzZiwgMHgyNiwKKwkweDRlLCAweDI5LCAweDNmLCAweGY3LCAweDhhLCAweDdmLCAweDhlLCAweGEyLCAweGJiLCAweGY3LCAweDNjLCAweDllLAorCTB4N2QsIDB4NDEsIDB4ZjksIDB4ODAsIDB4NmYsIDB4NDgsIDB4MDUsIDB4NmIsIDB4MjEsIDB4ZjYsIDB4ZmMsIDB4MzYsCisJMHhkOSwgMHhmYSwgMHgxMCwgMHg2ZCwgMHgxMiwgMHgxOSwgMHhjMCwgMHhkZCwgMHg0ZCwgMHhlYSwgMHg1ZCwgMHgwYiwKKwkweGRkLCAweDZlLCAweDExLCAweGQ5LCAweDRlLCAweGZiLCAweDU5LCAweGQ4LCAweDJhLCAweDZkLCAweGUzLCAweGRlLAorCTB4NWUsIDB4ZDksIDB4ODYsIDB4NmIsIDB4NmIsIDB4NzQsIDB4NGQsIDB4Y2EsIDB4NWIsIDB4NjksIDB4ODcsIDB4MWYsCisJMHhiZCwgMHhlMCwgMHg3ZCwgMHhmNywgMHg1ZiwgMHg0MCwgMHhiYSwgMHgxYywgMHgxZiwgMHg5MSwgMHg3YiwgMHgyZiwKKwkweDc4LCAweDc2LCAweDM3LCAweDM5LCAweGYzLCAweDg0LCAweDkyLCAweGVmLCAweGI4LCAweDkyLCAweDZmLCAweDVkLAorCTB4OGUsIDB4MzgsIDB4OTQsIDB4M2QsIDB4NzksIDB4ZTIsIDB4YjksIDB4NGEsIDB4NGYsIDB4MjYsIDB4OWYsIDB4ZjQsCisJMHhlZCwgMHhhOCwgMHhmYiwgMHgxOSwgMHhiZSwgMHgyMywgMHg0NiwgMHgxOSwgMHg5MSwgMHhlZSwgMHg3NCwgMHgwNywKKwkweGY3LCAweDZmLCAweGY3LCAweDVjLCAweDIwLCAweGJmLCAweDVkLCAweDFiLCAweGY4LCAweDdkLCAweDBhLCAweDNlLAorCTB4YjYsIDB4YTcsIDB4YzcsIDB4ZTMsIDB4ZjksIDB4OTUsIDB4OTksIDB4MGYsIDB4Y2UsIDB4ZjMsIDB4ZDcsIDB4ZDYsCisJMHg3OSwgMHgzNiwgMHhhNCwgMHhhMiwgMHhmMiwgMHhkYywgMHhkMCwgMHgzNiwgMHg2OSwgMHhjYiwgMHhjOSwgMHgwYSwKKwkweGVjLCAweGUzLCAweGNmLCAweDg0LCAweGU3LCAweDkyLCAweDQ5LCAweDhiLCAweDM3LCAweGVmLCAweDZhLCAweDk1LAorCTB4MzQsIDB4MDUsIDB4M2MsIDB4OTAsIDB4YWUsIDB4YTQsIDB4YWYsIDB4M2YsIDB4ZDIsIDB4ZjEsIDB4YzQsIDB4MGQsCisJMHhlZiwgMHg1ZCwgMHgxMSwgMHgzNywgMHhkMywgMHg4YiwgMHgzNiwgMHg1ZCwgMHhlOSwgMHg3MCwgMHhjOCwgMHg1ZiwKKwkweDZmLCAweDIzLCAweGEyLCAweDJiLCAweDFkLCAweDI2LCAweGQ3LCAweDc1LCAweGY4LCAweDNhLCAweDc0LCAweDU4LAorCTB4OTEsIDB4OGYsIDB4ODMsIDB4MjcsIDB4YWMsIDB4ZWYsIDB4NjcsIDB4ZmEsIDB4Y2MsIDB4MjMsIDB4YjIsIDB4NTMsCisJMHhlOSwgMHhkZiwgMHhlZSwgMHg4MSwgMHg0ZiwgMHhmNSwgMHg3NSwgMHhkOSwgMHg3YywgMHgwYiwgMHhiYSwgMHg3YywKKwkweDQzLCAweDk0LCAweDNlLCAweGQ1LCAweGQ5LCAweGEzLCAweDhhLCAweDFhLCAweDg3LCAweGJlLCAweDhkLCAweGJjLAorCTB4MzUsIDB4MmIsIDB4OWYsIDB4NDAsIDB4MWEsIDB4ZDUsIDB4NTksIDB4ODIsIDB4NTEsIDB4NGYsIDB4YmYsIDB4NmEsCisJMHhjZCwgMHhmYiwgMHhmYSwgMHhjZCwgMHg4ZSwgMHg1MiwgMHg4NywgMHhkMSwgMHgwZSwgMHg0ZiwgMHg5ZiwgMHgyZCwKKwkweGFhLCAweGNmLCAweDc0LCAweGZjLCAweDM2LCAweGI1LCAweGRlLCAweGVkLCAweDllLCAweDlkLCAweDFkLCAweGQ0LAorCTB4ZTksIDB4ZDMsIDB4NTUsIDB4ZWYsIDB4YmIsIDB4ODgsIDB4MzgsIDB4MzcsIDB4NWQsIDB4ZmQsIDB4NjUsIDB4N2EsCisJMHhmNSwgMHg3NCwgMHgzYSwgMHgyNCwgMHhkZSwgMHhiYSwgMHhkYSwgMHhhYywgMHg0ZiwgMHhmZCwgMHg0MiwgMHg0OCwKKwkweGQ5LCAweGYwLCAweDEwLCAweDY0LCAweDc4LCAweGJhLCAweGI0LCAweGMzLCAweGI3LCAweDdiLCAweDhmLCAweGU3LAorCTB4OWUsIDB4MGYsIDB4YzgsIDB4ZjMsIDB4ODksIDB4NjIsIDB4YjcsIDB4ZjksIDB4MTYsIDB4ZWUsIDB4MGQsIDB4ODMsCisJMHhlNywgMHgyMywgMHhkMiwgMHgyNCwgMHgyOSwgMHg5ZiwgMHhlNywgMHhkOCwgMHgzYSwgMHhjZiwgMHgwMSwgMHg4ZCwKKwkweDVlLCAweGJmLCAweDE0LCAweGYzLCAweGQ4LCAweDJhLCAweGZkLCAweGQ3LCAweGVmLCAweGFhLCAweDc3LCAweDFhLAorCTB4YWUsIDB4MTYsIDB4ZTksIDB4YjcsIDB4ODEsIDB4OTUsIDB4MjIsIDB4OWQsIDB4NzIsIDB4NjUsIDB4MzEsIDB4MjYsCisJMHg1NywgMHg4OCwgMHg0MSwgMHgwNiwgMHhmMCwgMHg1ZCwgMHg5ZCwgMHhmMiwgMHg2MywgMHg3OCwgMHg1OCwgMHhkZSwKKwkweDI4LCAweGRlLCAweDg4LCAweDhlLCAweDdlLCAweDc5LCAweGJkLCAweDE4LCAweGQwLCAweDQyLCAweDJjLCAweGNjLAorCTB4N2MsIDB4NjEsIDB4NWMsIDB4ZGUsIDB4OWMsIDB4ZTksIDB4OTYsIDB4OTUsIDB4NTEsIDB4YzQsIDB4ZmQsIDB4MWUsCisJMHhjYSwgMHhhNCwgMHhjZiwgMHg3YywgMHg1MCwgMHhiZCwgMHhlYiwgMHg3MiwgMHhhZCwgMHg3ZSwgMHhkMSwgMHhjNiwKKwkweGY4LCAweDczLCAweDc1LCAweDM5LCAweGNhLCAweGZkLCAweDZmLCAweGZlLCAweDVlLCAweGJjLCAweDVkLCAweDU2LAorCTB4OTgsIDB4NTMsIDB4ZjQsIDB4NzQsIDB4Y2EsIDB4YzIsIDB4MWMsIDB4ZjIsIDB4ZjksIDB4MjIsIDB4YzcsIDB4YTcsCisJMHhkYywgMHg0NiwgMHhkNCwgMHhlZiwgMHg2MSwgMHhjYywgMHhmNywgMHg0OSwgMHg5ZSwgMHg0MSwgMHg4ZiwgMHg1MCwKKwkweDM3LCAweGQ3LCAweGVhLCAweGFiLCAweDM2LCAweGY3LCAweDNmLCAweGM3LCAweDY1LCAweDExLCAweGZhLCAweGZiLAorCTB4NDcsIDB4NzEsIDB4ZWUsIDB4Y2YsIDB4ZTcsIDB4ZDQsIDB4ZmIsIDB4ODUsIDB4MGIsIDB4OGIsIDB4YTMsIDB4YzgsCisJMHgxZCwgMHhhZSwgMHhkNSwgMHhhNywgMHhlYywgMHgyOSwgMHhhNSwgMHhiNywgMHhjNSwgMHhmMiwgMHg0MywgMHg3ZSwKKwkweDNiLCAweGFmLCAweDc5LCAweGNmLCAweGNkLCAweGVjLCAweGU5LCAweDYxLCAweGJlLCAweGZhLCAweDEwLCAweGYyLAorCTB4MDUsIDB4ZTYsIDB4YWEsIDB4YTMsIDB4YzAsIDB4NmIsIDB4OTQsIDB4NDksIDB4NGMsIDB4MjYsIDB4OGIsIDB4MWMsCisJMHg0YiwgMHgyMiwgMHg1YiwgMHg5MCwgMHhkZiwgMHhlNywgMHg2NCwgMHgxOCwgMHhmNCwgMHhjNCwgMHg5MCwgMHhkYiwKKwkweDMzLCAweDNlLCAweGRjLCAweDI1LCAweGFiLCAweDExLCAweDJmLCAweDBlLCAweGYwLCAweGFjLCAweGQ4LCAweDJhLAorCTB4NjIsIDB4YzMsIDB4ZWEsIDB4N2EsIDB4NmMsIDB4ZDgsIDB4ODksIDB4NmIsIDB4MzcsIDB4ZTMsIDB4ZjQsIDB4ZmMsCisJMHg2NywgMHg4YywgMHhjZiwgMHhiYSwgMHgwZCwgMHg2MywgMHhjMywgMHgyMCwgMHhmYSwgMHhiMywgMHhhZCwgMHg1MywKKwkweDI2LCAweGU3LCAweDkwLCAweDQ0LCAweDIwLCAweDY3LCAweDU5LCAweDEwLCAweDllLCAweDAxLCAweGM5LCAweGNhLAorCTB4ZjQsIDB4NjIsIDB4NzcsIDB4ZjQsIDB4YTIsIDB4OTYsIDB4NTYsIDB4NjcsIDB4NDUsIDB4ZTIsIDB4OTgsIDB4NzMsCisJMHhhMSwgMHhkOCwgMHgyOSwgMHg4YiwgMHg3MywgMHgxMiwgMHgzMywgMHgxMiwgMHg4ZiwgMHg0OCwgMHg3NSwgMHhkMSwKKwkweGMzLCAweGVjLCAweDUzLCAweDFhLCAweGRhLCAweGFiLCAweGFlLCAweDJjLCAweDZlLCAweGVjLCAweDYzLCAweDFhLAorCTB4ODksIDB4YzMsIDB4ZjIsIDB4NzUsIDB4YmYsIDB4NGYsIDB4NWEsIDB4ZjUsIDB4NzksIDB4YjUsIDB4ODMsIDB4N2IsCisJMHg2YywgMHg4YiwgMHhkNSwgMHgwZSwgMHhkMCwgMHg0MCwgMHhkYSwgMHg3NiwgMHgzNSwgMHhjZSwgMHgxYiwgMHhiYiwKKwkweDNlLCAweDJmLCAweGU3LCAweDQ0LCAweDM2LCAweGIzLCAweGRkLCAweGM1LCAweGJjLCAweDE3LCAweGYxLCAweGNjLAorCTB4MjMsIDB4YTAsIDB4ZTMsIDB4OWEsIDB4YTEsIDB4ZGIsIDB4OGYsIDB4NDgsIDB4NjEsIDB4NzEsIDB4ZjMsIDB4MWMsCisJMHg4ZCwgMHgzNCwgMHhmMCwgMHgxOSwgMHg4ZSwgMHhjZiwgMHg3OSwgMHgwZSwgMHg4MywgMHhiZSwgMHg2YiwgMHg5YSwKKwkweDZlLCAweDFmLCAweDg2LCAweDJjLCAweGJkLCAweDM5LCAweDhjLCAweGIzLCAweDk2LCAweGY5LCAweDIzLCAweGU5LAorCTB4MTEsIDB4ZmQsIDB4YmMsIDB4YTYsIDB4ZTQsIDB4YWYsIDB4MmYsIDB4ZjQsIDB4NjMsIDB4ODEsIDB4NjQsIDB4YTQsCisJMHg2ZCwgMHg3OSwgMHg0YywgMHg4YywgMHg2NSwgMHhkNiwgMHgxMCwgMHg1ZSwgMHg2OSwgMHg0ZCwgMHhhYiwgMHhmZCwKKwkweGRlLCAweDJkLCAweDU4LCAweGRmLCAweGUyLCAweDg2LCAweDZjLCAweGQ2LCAweDBiLCAweDU4LCAweDBmLCAweGZlLAorCTB4ZmEsIDB4MzYsIDB4ZTksIDB4NjAsIDB4YmQsIDB4ODAsIDB4NzksIDB4YzMsIDB4MjEsIDB4N2MsIDB4MzMsIDB4NzcsCisJMHg3OCwgMHhiOSwgMHg5ZSwgMHg3NCwgMHg3ZSwgMHhhNiwgMHhlMiwgMHg2YiwgMHg2ZSwgMHg5MSwgMHhmNywgMHhhZCwKKwkweDk4LCAweDA4LCAweGVmLCAweGQxLCAweDZmLCAweDc0LCAweDRhLCAweGQzLCAweDU3LCAweDdhLCAweGUxLCAweDJiLAorCTB4MWUsIDB4MDMsIDB4ZjYsIDB4YzYsIDB4YjgsIDB4NjcsIDB4N2EsIDB4MjQsIDB4ZTQsIDB4OWQsIDB4YjEsIDB4NTAsCisJMHhmNSwgMHg5NiwgMHgzNywgMHhlNywgMHgyYywgMHhmZiwgMHg5ZCwgMHgyMSwgMHhkOSwgMHg3MywgMHhkMSwgMHg2MSwKKwkweDRkLCAweGI0LCAweDhiLCAweDM1LCAweDFmLCAweGY0LCAweDEzLCAweDdkLCAweDE1LCAweGY5LCAweGU5LCAweDk1LAorCTB4NDUsIDB4NjMsIDB4MWIsIDB4Y2YsIDB4N2MsIDB4YmUsIDB4NWUsIDB4YzUsIDB4MzUsIDB4YjEsIDB4N2YsIDB4NDQsCisJMHg2MSwgMHg0YywgMHhmZiwgMHgxZSwgMHg3ZiwgMHgyMywgMHg1ZiwgMHg3YSwgMHhjZiwgMHhmOSwgMHg3NywgMHhlNiwKKwkweDUzLCAweDYzLCAweGZlLCAweDU5LCAweDNiLCAweDM3LCAweDczLCAweDcyLCAweDQzLCAweDRlLCAweGQ1LCAweGFiLAorCTB4ZWEsIDB4YmQsIDB4MmIsIDB4NTUsIDB4MWIsIDB4ZmUsIDB4NzEsIDB4MDAsIDB4ZjYsIDB4YzksIDB4MzUsIDB4NTAsCisJMHhkNywgMHgxZSwgMHgwMiwgMHgzNiwgMHg4YiwgMHg3NSwgMHhhYSwgMHg5YywgMHhlOCwgMHhmNCwgMHg0MywgMHhlMiwKKwkweGQ5LCAweDNiLCAweGFjLCAweDRjLCAweGY5LCAweGIyLCAweDk1LCAweGIyLCAweDk3LCAweDgzLCAweGFjLCAweDk2LAorCTB4MzMsIDB4ZjIsIDB4OWYsIDB4YWEsIDB4OTcsIDB4NTQsIDB4YWQsIDB4NzUsIDB4MDYsIDB4NzksIDB4NDksIDB4NjgsCisJMHg1YSwgMHhlNSwgMHg2NCwgMHgwZCwgMHhmOCwgMHgxNiwgMHg3ZSwgMHhlZiwgMHhkOSwgMHgyZiwgMHg2MiwgMHgyZCwKKwkweDVhLCAweGVhLCAweDRjLCAweDgzLCAweDdlLCAweGJlLCAweDVlLCAweDRmLCAweGMxLCAweDdmLCAweGU4LCAweGI2LAorCTB4NmQsIDB4MTYsIDB4MTAsIDB4MGYsIDB4NTMsIDB4ZWEsIDB4NWMsIDB4MGMsIDB4ZDcsIDB4ZjEsIDB4NjEsIDB4ZTUsCisJMHg5ZiwgMHg2NSwgMHgwMSwgMHhiMiwgMHgzOSwgMHgxYiwgMHhjMywgMHgzOCwgMHg5YSwgMHhiMiwgMHg0ZiwgMHg0MywKKwkweGU5LCAweGUxLCAweDIxLCAweDg1LCAweDc5LCAweDhkLCAweGYzLCAweDcwLCAweDU4LCAweGNiLCAweDNkLCAweDIyLAorCTB4ZTcsIDB4MzMsIDB4MzIsIDB4ODUsIDB4MzUsIDB4MWMsIDB4NWEsIDB4YTYsIDB4MGUsIDB4MjgsIDB4ZGIsIDB4MzEsCisJMHg2OSwgMHg4MiwgMHhlYywgMHg0ZiwgMHgwMCwgMHg3YiwgMHgxOCwgMHhkMywgMHg5NCwgMHg3MSwgMHgxNCwgMHhlYiwKKwkweGEyLCAweDUzLCAweDQyLCAweDY3LCAweDIxLCAweGUzLCAweDY5LCAweDYwLCAweDg0LCAweGI5LCAweDY2LCAweDc5LAorCTB4NjksIDB4MzEsIDB4OTAsIDB4ZTksIDB4Y2IsIDB4M2MsIDB4ZWYsIDB4YWYsIDB4OGYsIDB4MGYsIDB4NzQsIDB4MTEsCisJMHg0NywgMHg0OSwgMHg2NSwgMHg3MSwgMHg0YSwgMHhhNiwgMHg2NiwgMHg5OSwgMHhiMywgMHg4ZiwgMHhhOSwgMHgzMywKKwkweDA2LCAweDIxLCAweDc1LCAweGM2LCAweGM1LCAweGNiLCAweDk5LCAweGJkLCAweDZmLCAweDBmLCAweDYzLCAweDU2LAorCTB4ODQsIDB4N2IsIDB4NmQsIDB4MDIsIDB4ZGIsIDB4ZTksIDB4YzcsIDB4YmMsIDB4MzcsIDB4OTIsIDB4YWYsIDB4OTcsCisJMHhhYiwgMHgwZSwgMHg4MywgMHhkZSwgMHg4YiwgMHgzMywgMHg1NiwgMHgyNiwgMHgyZiwgMHgwZSwgMHhjZiwgMHg1YiwKKwkweDhmLCAweGJhLCAweGUwLCAweDdmLCAweDE1LCAweGZlLCAweDczLCAweGFhLCAweDc0LCAweDJmLCAweGY4LCAweDJjLAorCTB4NjAsIDB4ODUsIDB4NjUsIDB4ZTQsIDB4NjIsIDB4OTEsIDB4MzksIDB4ZTMsIDB4NDcsIDB4YTEsIDB4MzcsIDB4NWUsCisJMHgxNywgMHgwNiwgMHgwZCwgMHhmOCwgMHg4MSwgMHgzNSwgMHhmNSwgMHg3ZSwgMHhhMSwgMHhlNSwgMHhhZSwgMHgyMCwKKwkweDg3LCAweDhkLCAweDY5LCAweDg3LCAweGEwLCAweGViLCAweGJjLCAweGQ5LCAweGU0LCAweGRiLCAweDAzLCAweGRmLAorCTB4MzUsIDB4M2UsIDB4MDcsIDB4M2YsIDB4YmEsIDB4MjQsIDB4N2MsIDB4ZWYsIDB4ZTcsIDB4OWQsIDB4M2EsIDB4ZjMsCisJMHhhNSwgMHhjYiwgMHhmMCwgMHg3YiwgMHg5OSwgMHg3OCwgMHgwNiwgMHgzNiwgMHg5NCwgMHg4ZiwgMHhiNiwgMHg4MCwKKwkweGU2LCAweGRmLCAweGM2LCAweGJkLCAweDVjLCAweDk1LCAweGYzLCAweDU4LCAweGNlLCAweDlhLCAweDE0LCAweDYyLAorCTB4MjEsIDB4ZTksIDB4OGIsIDB4NWQsIDB4OTIsIDB4NmQsIDB4ZjAsIDB4NjQsIDB4OWEsIDB4YmMsIDB4NjEsIDB4NWIsCisJMHg4MywgMHhhMiwgMHhhOSwgMHhmMSwgMHg3YSwgMHgwZiwgMHhjMCwgMHgwNiwgMHhhZiwgMHhjMiwgMHhkZiwgMHgzNSwKKwkweGZiLCAweGI5LCAweDdlLCAweGFhLCAweDQ4LCAweDBjLCAweGY1LCAweDg0LCAweDNhLCAweDhiLCAweDcwLCAweGQ5LAorCTB4NjYsIDB4MWQsIDB4OTAsIDB4ZWYsIDB4ZmIsIDB4ZmUsIDB4OTUsIDB4OWEsIDB4ZTMsIDB4ZmEsIDB4ZGUsIDB4MWQsCisJMHhlYiwgMHhkMCwgMHhhNCwgMHhjZiwgMHhlMywgMHg3MSwgMHhiZiwgMHhlZCwgMHhkMSwgMHhjOCwgMHg3MSwgMHg5YSwKKwkweDFhLCAweGM2LCAweGI5LCAweGU4LCAweDhmLCAweDczLCAweGNlLCAweDFmLCAweDY3LCAweGMxLCAweDFmLCAweGU3LAorCTB4ZjIsIDB4ZmEsIDB4MzgsIDB4MGYsIDB4YzIsIDB4MGUsIDB4ZWEsIDB4ZjUsIDB4YTcsIDB4ODAsIDB4MzcsIDB4OTIsCisJMHg0ZSwgMHhiZCwgMHg5ZSwgMHg0NiwgMHg1ZSwgMHgzNiwgMHhkOSwgMHgzZiwgMHhhMSwgMHhmNiwgMHg1ZSwgMHhmNSwKKwkweGM0LCAweDhiLCAweDQzLCAweDQ5LCAweGRiLCAweDkzLCAweDNmLCAweGFjLCAweDQwLCAweDI2LCAweDYwLCAweDhmLAorCTB4NzksIDB4ZjEsIDB4YjAsIDB4M2EsIDB4ZjcsIDB4MDMsIDB4YmQsIDB4ZmQsIDB4YzIsIDB4MzYsIDB4ZjgsIDB4ODEsCisJMHhjNywgMHgxMCwgMHg0YiwgMHg5YywgMHhlMSwgMHgyNSwgMHg1YiwgMHhmMiwgMHg3YiwgMHg3ZSwgMHg0ZCwgMHg4NywKKwkweGJkLCAweDc3LCAweDIwLCAweDJlLCAweGJkLCAweDA5LCAweGRiLCAweDcxLCAweDg2LCAweDJiLCAweDhiLCAweDhmLAorCTB4YTksIDB4M2QsIDB4ZTEsIDB4YTYsIDB4YzQsIDB4YmQsIDB4ZDAsIDB4NjcsIDB4NzksIDB4NzgsIDB4NjEsIDB4YjEsCisJMHgzYywgMHg3YywgMHg4ZSwgMHhmYiwgMHg0MywgMHhlOCwgMHhiNywgMHhiMCwgMHhkOCwgMHgwZSwgMHhiOSwgMHhiNywKKwkweGFiLCAweGJhLCAweGNhLCAweGE1LCAweDYyLCAweDA0LCAweDdhLCAweDM0LCAweDYxLCAweGYzLCAweDExLCAweGI0LAorCTB4NDUsIDB4NjEsIDB4MDcsIDB4NWQsIDB4NjgsIDB4N2YsIDB4MGQsIDB4NmIsIDB4M2IsIDB4ODYsIDB4ZjYsIDB4YjUsCisJMHhkNiwgMHg2MSwgMHg4NSwgMHg2MywgMHg2ZCwgMHgzOSwgMHg1ZiwgMHhiZCwgMHg4YSwgMHg5OCwgMHhmYiwgMHgxNiwKKwkweGZjLCAweDY4LCAweDJmLCAweGZhLCAweGY0LCAweGEzLCAweGNmLCAweDBlLCAweDEzLCAweGY4LCAweDJhLCAweDUzLAorCTB4YmUsIDB4MjEsIDB4NGQsIDB4MmUsIDB4NjgsIDB4ZDIsIDB4MWIsIDB4NjgsIDB4NzIsIDB4NDEsIDB4MGYsIDB4N2MsCisJMHhlNywgMHgxOSwgMHhkNiwgMHhhMCwgMHhmYiwgMHhlNSwgMHg2NCwgMHg5MSwgMHg2NywgMHhhYSwgMHhmOCwgMHhlZSwKKwkweGI1LCAweDI5LCAweDIxLCAweDYwLCAweGQyLCAweGE2LCAweDMzLCAweDU2LCAweDc0LCAweDQ1LCAweGQ1LCAweDdhLAorCTB4NjgsIDB4NWIsIDB4N2QsIDB4NGUsIDB4NDUsIDB4NTQsIDB4OWMsIDB4ODksIDB4OWQsIDB4NDQsIDB4ZmMsIDB4YmEsCisJMHg1YSwgMHg2ZCwgMHg5NywgMHgzNywgMHhmYywgMHhiOSwgMHhkNiwgMHg4NCwgMHhmYiwgMHg5NywgMHgxYiwgMHhlNywKKwkweDNhLCAweDU1LCAweDFhLCAweDFkLCAweGZlLCAweDgxLCAweDZkLCAweGY4LCAweDdjLCAweDc1LCAweDYyLCAweGFlLAorCTB4NzYsIDB4ZjQsIDB4MWQsIDB4MWQsIDB4YmUsIDB4YjgsIDB4NzgsIDB4YTMsIDB4YmUsIDB4MTMsIDB4ZTgsIDB4ZGIsCisJMHhkNCwgMHhkMCwgMHg3NywgMHgwMiwgMHhmZCwgMHhkYSwgMHgxMSwgMHgwNywgMHhkYiwgMHgxNSwgMHg0ZiwgMHg5MywKKwkweGEwLCAweGViLCAweDRhLCAweDUxLCAweGJkLCAweDBiLCAweDBjLCAweGI5LCAweDczLCAweDRlLCAweDkzLCAweDk4LAorCTB4M2EsIDB4ZTMsIDB4ZDUsIDB4NGEsIDB4MmMsIDB4MzMsIDB4YTYsIDB4YmQsIDB4YTcsIDB4ZGUsIDB4YTMsIDB4NmMsCisJMHg2MCwgMHhjOCwgMHgwNiwgMHhlZSwgMHg5ZCwgMHgxOSwgMHhkNSwgMHg1MiwgMHg5NSwgMHgxYywgMHg2MiwgMHhkNiwKKwkweDJlLCAweGUyLCAweDI3LCAweGM3LCAweDQ1LCAweGNjLCAweDVjLCAweGMwLCAweDc4LCAweDhiLCAweGM1LCAweDE1LAorCTB4OWUsIDB4YzEsIDB4ODYsIDB4NWQsIDB4YmMsIDB4NGQsIDB4OWMsIDB4YmQsIDB4Y2IsIDB4NTAsIDB4NjcsIDB4MWUsCisJMHhkMiwgMHhhYSwgMHg2NiwgMHhiNywgMHg1MCwgMHgxNCwgMHgzMywgMHgzOSwgMHhjMCwgMHgzMywgMHgwZSwgMHhmNywKKwkweDYzLCAweDVkLCAweDdlLCAweDBlLCAweDZkLCAweDQ5LCAweGM0LCAweGM3LCAweGMzLCAweDVhLCAweDcyLCAweDY5LAorCTB4MTgsIDB4ZDcsIDB4OGYsIDB4ZTAsIDB4MWEsIDB4ZmUsIDB4NzgsIDB4MmUsIDB4OGIsIDB4ZmIsIDB4OGYsIDB4ZTAsCisJMHg3YSwgMHg0MiwgMHg0YiwgMHhkNSwgMHhiMiwgMHhiOCwgMHg3ZSwgMHgxNCwgMHhkNywgMHg0OSwgMHg5MywgMHg3OSwKKwkweGNhLCAweDBmLCAweGVjLCAweDhjLCAweGU2LCAweDYyLCAweDJjLCAweDc3LCAweDY5LCAweDE4LCAweDlmLCAweGM2LAorCTB4ZjEsIDB4NzgsIDB4MGYsIDB4N2EsIDB4MmEsIDB4NzIsIDB4YWYsIDB4MmQsIDB4MGUsIDB4OWEsIDB4MGUsIDB4NmEsCisJMHhlOSwgMHg0YSwgMHgxYiwgMHhjNiwgMHhlOCwgMHhjMSwgMHhmMywgMHhiNCwgMHhhOSwgMHg0MywgMHhmZSwgMHhmYywKKwkweGFjLCAweDM5LCAweGRkLCAweGFkLCAweDZhLCAweDRlLCAweDQ2LCAweDIyLCAweDAzLCAweDljLCAweDdjLCAweDFjLAorCTB4NzksIDB4ODAsIDB4MjYsIDB4NjksIDB4ZmIsIDB4NDksIDB4MjksIDB4MzgsIDB4ZjAsIDB4MmIsIDB4MTUsIDB4NDMsCisJMHg1MiwgMHg5MSwgMHgzYywgMHg3ZSwgMHhlNywgMHgyNSwgMHgzOSwgMHg4OCwgMHhmYiwgMHgxNSwgMHhkYSwgMHgwMiwKKwkweGZiLCAweGZkLCAweDg5LCAweDE0LCAweGNhLCAweGM0LCAweGZkLCAweGFjLCAweDMzLCAweGIxLCAweDM2LCAweGM1LAorCTB4ZmEsIDB4NTIsIDB4MGUsIDB4MzIsIDB4ODgsIDB4ZDAsIDB4N2UsIDB4NmYsIDB4NTAsIDB4MTMsIDB4ZjMsIDB4Y2UsCisJMHg1NSwgMHgyMywgMHgyZSwgMHg2YiwgMHhjOSwgMHgwYSwgMHhmNywgMHhmZCwgMHhkYywgMHhjYywgMHg0NSwgMHg5YiwKKwkweGVmLCAweDI4LCAweDRkLCAweDcwLCAweDFmLCAweGIxLCAweDYwLCAweDI0LCAweDU4LCAweDFmLCAweDUxLCAweGY1LAorCTB4NzUsIDB4YzcsIDB4ZGIsIDB4MWYsIDB4ZTQsIDB4YjgsIDB4NjMsIDB4ZTAsIDB4YjcsIDB4YjEsIDB4NmUsIDB4YzUsCisJMHg3OSwgMHhiZiwgMHg4MCwgMHhlNywgMHhiZCwgMHg3YSwgMHg1NiwgMHhhYSwgMHhmNiwgMHg1ZSwgMHg1ZCwgMHhmMCwKKwkweGJkLCAweDgxLCAweGYzLCAweGQwLCAweGM1LCAweDQ1LCAweDk1LCAweDFiLCAweDczLCAweDBmLCAweGY3LCAweGZkLAorCTB4NzIsIDB4MmEsIDB4ZTQsIDB4MzAsIDB4NDUsIDB4ZDYsIDB4YzgsIDB4ODIsIDB4N2QsIDB4YmIsIDB4NDAsIDB4OGUsCisJMHg5YiwgMHg2OSwgMHgyNSwgMHg5ZCwgMHg0NywgMHgzMCwgMHhhNiwgMHgzOCwgMHhmNCwgMHhiYiwgMHhkOSwgMHgwOCwKKwkweGY3LCAweGRmLCAweGY4LCAweDhjLCAweDdjLCAweGY5LCAweDNhLCAweGRkLCAweGE0LCAweDk5LCAweGYyLCAweDM4LAorCTB4MGUsIDB4ZmYsIDB4YzksIDB4NzcsIDB4MzIsIDB4OWUsIDB4OTQsIDB4OWMsIDB4YzMsIDB4MWEsIDB4OGYsIDB4ODEsCisJMHhkOCwgMHg5OCwgMHhjNywgMHhlZiwgMHhlYiwgMHhmMiwgMHg5YiwgMHhmNCwgMHhlNSwgMHg5NywgMHgyYiwgMHhiZiwKKwkweGE0LCAweDc0LCAweGI4LCAweDYwLCAweDczLCAweGJlLCAweGEwLCAweGY2LCAweDMxLCAweGEyLCAweDc0LCAweGI3LAorCTB4YTAsIDB4Y2UsIDB4ZmQsIDB4MDYsIDB4MzIsIDB4MDgsIDB4ZWEsIDB4NzcsIDB4MzcsIDB4YjYsIDB4YmQsIDB4NjEsCisJMHg5YiwgMHhiNCwgMHhkZCwgMHhjZSwgMHhmMywgMHgxMCwgMHhiZCwgMHhhZSwgMHg5MCwgMHg3ZSwgMHhmMiwgMHhjMSwKKwkweDE4LCAweDE2LCAweGVjLCAweGI1LCAweDA2LCAweDNjLCAweDA0LCAweDdjLCAweGRlLCAweGFhLCAweDdjLCAweDQ4LAorCTB4NmYsIDB4NjQsIDB4YmIsIDB4YjQsIDB4NjUsIDB4NGMsIDB4YzMsIDB4NjYsIDB4NmMsIDB4ZjgsIDB4ODQsIDB4YmYsCisJMHgzZiwgMHhmMCwgMHg3NywgMHgyMSwgMHg2NywgMHg0ZiwgMHgxNiwgMHhhMSwgMHg4NCwgMHg0YywgMHhmYSwgMHhlZiwKKwkweGY4LCAweGRlLCAweGMwLCAweDFlLCAweDM2LCAweGVmLCAweDM1LCAweGJiLCAweDk5LCAweDczLCAweGY2LCAweDc1LAorCTB4YmUsIDB4MTcsIDB4NmUsIDB4YzAsIDB4ZjcsIDB4ODIsIDB4Y2YsIDB4NzcsIDB4ZTUsIDB4MTYsIDB4ZTksIDB4NWQsCisJMHg5OCwgMHg3MSwgMHhjMSwgMHgzMywgMHg2ZCwgMHhlZSwgMHg0NiwgMHhmNiwgMHgyOCwgMHhlYSwgMHg3ZiwgMHg1ZiwKKwkweGFjLCAweDE5LCAweGUxLCAweGIwLCAweDViLCAweGJkLCAweDU5LCAweDBkLCAweDk1LCAweDc5LCAweGI1LCAweDY3LAorCTB4OTcsIDB4ZTcsIDB4MTAsIDB4MGIsIDB4Y2IsIDB4NjUsIDB4MmYsIDB4YzcsIDB4MmUsIDB4NTcsIDB4NTksIDB4Y2IsCisJMHg3ZSwgMHgzZiwgMHgxYSwgMHhmOCwgMHhmZSwgMHhkNywgMHg2NywgMHhkNCwgMHg3OSwgMHg5NywgMHhjOSwgMHhhYSwKKwkweDU3LCAweGY3LCAweDJhLCAweDk3LCAweDFiLCAweDYzLCAweGVhLCAweDBlLCAweGM2LCAweGQzLCAweGRlLCAweGJjLAorCTB4OGMsIDB4ZjIsIDB4YmQsIDB4NjUsIDB4NWMsIDB4ZWYsIDB4OTYsIDB4NGIsIDB4NzMsIDB4NmEsIDB4Y2YsIDB4Y2EsCisJMHhkZiwgMHgxYiwgMHhlMiwgMHg5ZSwgMHg4ZiwgMHhkYSwgMHhmZiwgMHg4NiwgMHg1ZiwgMHgxYiwgMHg1MywgMHg3ZSwKKwkweDdkLCAweDc1LCAweDRlLCAweGRkLCAweGYzLCAweGIwLCAweDUyLCAweDc1LCAweDE0LCAweDdlLCAweDFmLCAweGI5LAorCTB4ODQsIDB4YmQsIDB4NTUsIDB4MGEsIDB4YzgsIDB4YjksIDB4Y2YsIDB4ZDksIDB4MGYsIDB4NmYsIDB4MjcsIDB4Y2UsCisJMHhlMSwgMHg1OCwgMHhhYiwgMHgxOCwgMHhlYiwgMHhlMiwgMHg5YywgMHg2YywgMHhlNywgMHg5OSwgMHg5MiwgMHhiMiwKKwkweGRhLCAweDY3LCAweGYzLCAweGVhLCAweGUyLCAweDEzLCAweDEyLCAweGZjLCAweDRmLCAweDg4LCAweGIwLCAweDFmLAorCTB4MGIsIDB4NzksIDB4YWUsIDB4ODUsIDB4ZWYsIDB4ZDIsIDB4ZDIsIDB4NTcsIDB4MjAsIDB4MGYsIDB4MWEsIDB4ZTUsCisJMHgzZSwgMHg0ZSwgMHhiZCwgMHhlZSwgMHhkNSwgMHhjZCwgMHhlYiwgMHg1OCwgMHgxNywgMHg0ZCwgMHg3YywgMHhlZiwKKwkweDAyLCAweDdmLCAweGM3LCAweDYxLCAweDNmLCAweDU4LCAweDI3LCAweGViLCAweGVkLCAweGJjLCAweDY2LCAweGVlLAorCTB4MTEsIDB4NWMsIDB4MzMsIDB4YjAsIDB4ZmQsIDB4M2YsIDB4ZDQsIDB4NDYsIDB4OTAsIDB4N2MsIDB4YjQsIDB4NDUsCisJMHgwMCwgMHgwMCwgMHgwMCB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGJueDJfVFhQX2IwOUZ3RGF0YVsoMHhkMC80KSArIDFdID0gewogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTQsIDB4MDAwMDAwMTAsCkBAIC00MDQxLDM3ICs0MDY1LDM4IEBACiAJMHgwMDAwMDAwMSwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwIH07CiBzdGF0aWMgY29uc3QgdTMyIGJueDJfVFhQX2IwOUZ3Um9kYXRhWygweDMwLzQpICsgMV0gPSB7Ci0JMHgwODAwNDA2MCwgMHgwODAwNDA4YywgMHgwODAwNDBkNCwgMHgwODAwNDBkNCwgMHgwODAwM2Y2MCwgMHgwODAwM2Y4YywKLQkweDA4MDAzZjhjLCAweDA4MDA0MGQ0LCAweDA4MDA0MGQ0LCAweDA4MDA0MGQ0LCAweDA4MDAzZmY0LCAweDAwMDAwMDAwLAorCTB4MDgwMDNmZGMsIDB4MDgwMDQwMDgsIDB4MDgwMDQwNTAsIDB4MDgwMDQwNTAsIDB4MDgwMDNlZGMsIDB4MDgwMDNmMDgsCisJMHgwODAwM2YwOCwgMHgwODAwNDA1MCwgMHgwODAwNDA1MCwgMHgwODAwNDA1MCwgMHgwODAwM2Y3MCwgMHgwMDAwMDAwMCwKIAkweDAwMDAwMDAwIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZndfaW5mbyBibngyX3R4cF9md18wOSA9IHsKKwkvKiBGaXJtd2FyZSB2ZXJzaW9uOiAgMy43LjEgKi8KIAkudmVyX21ham9yCQkJPSAweDMsCi0JLnZlcl9taW5vcgkJCT0gMHg0LAotCS52ZXJfZml4CQkJPSAweDMsCisJLnZlcl9taW5vcgkJCT0gMHg3LAorCS52ZXJfZml4CQkJPSAweDEsCiAKIAkuc3RhcnRfYWRkcgkJCT0gMHgwODAwMDA2MCwKIAogCS50ZXh0X2FkZHIJCQk9IDB4MDgwMDAwMDAsCi0JLnRleHRfbGVuCQkJPSAweDQ2MzQsCisJLnRleHRfbGVuCQkJPSAweDQ1YjAsCiAJLnRleHRfaW5kZXgJCQk9IDB4MCwKIAkuZ3pfdGV4dAkJCT0gYm54Ml9UWFBfYjA5RndUZXh0LAogCS5nel90ZXh0X2xlbgkJCT0gc2l6ZW9mKGJueDJfVFhQX2IwOUZ3VGV4dCksCiAKLQkuZGF0YV9hZGRyCQkJPSAweDA4MDA0NjgwLAorCS5kYXRhX2FkZHIJCQk9IDB4MDgwMDQ2MDAsCiAJLmRhdGFfbGVuCQkJPSAweGQwLAogCS5kYXRhX2luZGV4CQkJPSAweDAsCiAJLmRhdGEJCQkJPSBibngyX1RYUF9iMDlGd0RhdGEsCiAKLQkuc2Jzc19hZGRyCQkJPSAweDA4MDA0NzUwLAorCS5zYnNzX2FkZHIJCQk9IDB4MDgwMDQ2ZDAsCiAJLnNic3NfbGVuCQkJPSAweDhjLAogCS5zYnNzX2luZGV4CQkJPSAweDAsCiAKLQkuYnNzX2FkZHIJCQk9IDB4MDgwMDQ3ZTAsCisJLmJzc19hZGRyCQkJPSAweDA4MDA0NzYwLAogCS5ic3NfbGVuCQkJPSAweGEyMCwKIAkuYnNzX2luZGV4CQkJPSAweDAsCiAKLQkucm9kYXRhX2FkZHIJCQk9IDB4MDgwMDQ2MzgsCisJLnJvZGF0YV9hZGRyCQkJPSAweDA4MDA0NWIwLAogCS5yb2RhdGFfbGVuCQkJPSAweDMwLAogCS5yb2RhdGFfaW5kZXgJCQk9IDB4MCwKIAkucm9kYXRhCQkJCT0gYm54Ml9UWFBfYjA5RndSb2RhdGEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKaW5kZXggN2EwNDVhMy4uMDg0ZjAyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAKIC8vID09PT09PT09PT09PT09PT09IG1haW4gODAyLjNhZCBwcm90b2NvbCBmdW5jdGlvbnMgPT09PT09PT09PT09PT09PT09CiBzdGF0aWMgaW50IGFkX2xhY3BkdV9zZW5kKHN0cnVjdCBwb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgYWRfbWFya2VyX3NlbmQoc3RydWN0IHBvcnQgKnBvcnQsIHN0cnVjdCBtYXJrZXIgKm1hcmtlcik7CitzdGF0aWMgaW50IGFkX21hcmtlcl9zZW5kKHN0cnVjdCBwb3J0ICpwb3J0LCBzdHJ1Y3QgYm9uZF9tYXJrZXIgKm1hcmtlcik7CiBzdGF0aWMgdm9pZCBhZF9tdXhfbWFjaGluZShzdHJ1Y3QgcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBhZF9yeF9tYWNoaW5lKHN0cnVjdCBsYWNwZHUgKmxhY3BkdSwgc3RydWN0IHBvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgYWRfdHhfbWFjaGluZShzdHJ1Y3QgcG9ydCAqcG9ydCk7CkBAIC0xMzksOCArMTM5LDggQEAKIHN0YXRpYyB2b2lkIGFkX2luaXRpYWxpemVfbGFjcGR1KHN0cnVjdCBsYWNwZHUgKkxhY3BkdSk7CiBzdGF0aWMgdm9pZCBhZF9lbmFibGVfY29sbGVjdGluZ19kaXN0cmlidXRpbmcoc3RydWN0IHBvcnQgKnBvcnQpOwogc3RhdGljIHZvaWQgYWRfZGlzYWJsZV9jb2xsZWN0aW5nX2Rpc3RyaWJ1dGluZyhzdHJ1Y3QgcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBhZF9tYXJrZXJfaW5mb19yZWNlaXZlZChzdHJ1Y3QgbWFya2VyICptYXJrZXJfaW5mbywgc3RydWN0IHBvcnQgKnBvcnQpOwotc3RhdGljIHZvaWQgYWRfbWFya2VyX3Jlc3BvbnNlX3JlY2VpdmVkKHN0cnVjdCBtYXJrZXIgKm1hcmtlciwgc3RydWN0IHBvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgYWRfbWFya2VyX2luZm9fcmVjZWl2ZWQoc3RydWN0IGJvbmRfbWFya2VyICptYXJrZXJfaW5mbywgc3RydWN0IHBvcnQgKnBvcnQpOworc3RhdGljIHZvaWQgYWRfbWFya2VyX3Jlc3BvbnNlX3JlY2VpdmVkKHN0cnVjdCBib25kX21hcmtlciAqbWFya2VyLCBzdHJ1Y3QgcG9ydCAqcG9ydCk7CiAKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC04ODksMTIgKzg4OSwxMiBAQAogICogUmV0dXJuczogICAwIG9uIHN1Y2Nlc3MKICAqICAgICAgICAgIDwgMCBvbiBlcnJvcgogICovCi1zdGF0aWMgaW50IGFkX21hcmtlcl9zZW5kKHN0cnVjdCBwb3J0ICpwb3J0LCBzdHJ1Y3QgbWFya2VyICptYXJrZXIpCitzdGF0aWMgaW50IGFkX21hcmtlcl9zZW5kKHN0cnVjdCBwb3J0ICpwb3J0LCBzdHJ1Y3QgYm9uZF9tYXJrZXIgKm1hcmtlcikKIHsKIAlzdHJ1Y3Qgc2xhdmUgKnNsYXZlID0gcG9ydC0+c2xhdmU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbWFya2VyX2hlYWRlciAqbWFya2VyX2hlYWRlcjsKLQlpbnQgbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBtYXJrZXJfaGVhZGVyKTsKKwlzdHJ1Y3QgYm9uZF9tYXJrZXJfaGVhZGVyICptYXJrZXJfaGVhZGVyOworCWludCBsZW5ndGggPSBzaXplb2Yoc3RydWN0IGJvbmRfbWFya2VyX2hlYWRlcik7CiAJc3RydWN0IG1hY19hZGRyIGxhY3BkdV9tdWx0aWNhc3RfYWRkcmVzcyA9IEFEX01VTFRJQ0FTVF9MQUNQRFVfQUREUjsKIAogCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoICsgMTYpOwpAQCAtOTA5LDcgKzkwOSw3IEBACiAJc2tiLT5uZXR3b3JrX2hlYWRlciA9IHNrYi0+bWFjX2hlYWRlciArIEVUSF9ITEVOOwogCXNrYi0+cHJvdG9jb2wgPSBQS1RfVFlQRV9MQUNQRFU7CiAKLQltYXJrZXJfaGVhZGVyID0gKHN0cnVjdCBtYXJrZXJfaGVhZGVyICopc2tiX3B1dChza2IsIGxlbmd0aCk7CisJbWFya2VyX2hlYWRlciA9IChzdHJ1Y3QgYm9uZF9tYXJrZXJfaGVhZGVyICopc2tiX3B1dChza2IsIGxlbmd0aCk7CiAKIAltYXJrZXJfaGVhZGVyLT5hZF9oZWFkZXIuZGVzdGluYXRpb25fYWRkcmVzcyA9IGxhY3BkdV9tdWx0aWNhc3RfYWRkcmVzczsKIAkvKiBOb3RlOiBzb3VyY2UgYWRkcmVzIGlzIHNldCB0byBiZSB0aGUgbWVtYmVyJ3MgUEVSTUFORU5UIGFkZHJlc3MsIGJlY2F1c2Ugd2UgdXNlIGl0CkBAIC0xNzA5LDcgKzE3MDksNyBAQAogICovCiBzdGF0aWMgdm9pZCBhZF9tYXJrZXJfaW5mb19zZW5kKHN0cnVjdCBwb3J0ICpwb3J0KQogewotCXN0cnVjdCBtYXJrZXIgbWFya2VyOworCXN0cnVjdCBib25kX21hcmtlciBtYXJrZXI7CiAJdTE2IGluZGV4OwogCiAJLy8gZmlsbCB0aGUgbWFya2VyIFBEVSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMKQEAgLTE3NDIsMTMgKzE3NDIsMTQgQEAKICAqIEBwb3J0OiB0aGUgcG9ydCB3ZSdyZSBsb29raW5nIGF0CiAgKgogICovCi1zdGF0aWMgdm9pZCBhZF9tYXJrZXJfaW5mb19yZWNlaXZlZChzdHJ1Y3QgbWFya2VyICptYXJrZXJfaW5mbyxzdHJ1Y3QgcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGFkX21hcmtlcl9pbmZvX3JlY2VpdmVkKHN0cnVjdCBib25kX21hcmtlciAqbWFya2VyX2luZm8sCisJc3RydWN0IHBvcnQgKnBvcnQpCiB7Ci0Jc3RydWN0IG1hcmtlciBtYXJrZXI7CisJc3RydWN0IGJvbmRfbWFya2VyIG1hcmtlcjsKIAogCS8vIGNvcHkgdGhlIHJlY2VpdmVkIG1hcmtlciBkYXRhIHRvIHRoZSByZXNwb25zZSBtYXJrZXIKIAkvL21hcmtlciA9ICptYXJrZXJfaW5mbzsKLQltZW1jcHkoJm1hcmtlciwgbWFya2VyX2luZm8sIHNpemVvZihzdHJ1Y3QgbWFya2VyKSk7CisJbWVtY3B5KCZtYXJrZXIsIG1hcmtlcl9pbmZvLCBzaXplb2Yoc3RydWN0IGJvbmRfbWFya2VyKSk7CiAJLy8gY2hhbmdlIHRoZSBtYXJrZXIgc3VidHlwZSB0byBtYXJrZXIgcmVzcG9uc2UKIAltYXJrZXIudGx2X3R5cGU9QURfTUFSS0VSX1JFU1BPTlNFX1NVQlRZUEU7CiAJLy8gc2VuZCB0aGUgbWFya2VyIHJlc3BvbnNlCkBAIC0xNzY3LDcgKzE3NjgsOCBAQAogICogcmVzcG9uc2UgZm9yIG1hcmtlciBQRFUncywgaW4gdGhpcyBzdGFnZSwgYnV0IG9ubHkgdG8gcmVzcG9uZCB0byBtYXJrZXIKICAqIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgdm9pZCBhZF9tYXJrZXJfcmVzcG9uc2VfcmVjZWl2ZWQoc3RydWN0IG1hcmtlciAqbWFya2VyLCBzdHJ1Y3QgcG9ydCAqcG9ydCkKK3N0YXRpYyB2b2lkIGFkX21hcmtlcl9yZXNwb25zZV9yZWNlaXZlZChzdHJ1Y3QgYm9uZF9tYXJrZXIgKm1hcmtlciwKKwlzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKIAltYXJrZXI9TlVMTDsgLy8ganVzdCB0byBzYXRpc2Z5IHRoZSBjb21waWxlcgogCXBvcnQ9TlVMTDsgIC8vIGp1c3QgdG8gc2F0aXNmeSB0aGUgY29tcGlsZXIKQEAgLTIxNjQsMTUgKzIxNjYsMTUgQEAKIAkJY2FzZSBBRF9UWVBFX01BUktFUjoKIAkJCS8vIE5vIG5lZWQgdG8gY29udmVydCBmaWVsZHMgdG8gTGl0dGxlIEVuZGlhbiBzaW5jZSB3ZSBkb24ndCB1c2UgdGhlIG1hcmtlcidzIGZpZWxkcy4KIAotCQkJc3dpdGNoICgoKHN0cnVjdCBtYXJrZXIgKilsYWNwZHUpLT50bHZfdHlwZSkgeworCQkJc3dpdGNoICgoKHN0cnVjdCBib25kX21hcmtlciAqKWxhY3BkdSktPnRsdl90eXBlKSB7CiAJCQljYXNlIEFEX01BUktFUl9JTkZPUk1BVElPTl9TVUJUWVBFOgogCQkJCWRwcmludGsoIlJlY2VpdmVkIE1hcmtlciBJbmZvcm1hdGlvbiBvbiBwb3J0ICVkXG4iLCBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcik7Ci0JCQkJYWRfbWFya2VyX2luZm9fcmVjZWl2ZWQoKHN0cnVjdCBtYXJrZXIgKilsYWNwZHUsIHBvcnQpOworCQkJCWFkX21hcmtlcl9pbmZvX3JlY2VpdmVkKChzdHJ1Y3QgYm9uZF9tYXJrZXIgKilsYWNwZHUsIHBvcnQpOwogCQkJCWJyZWFrOwogCiAJCQljYXNlIEFEX01BUktFUl9SRVNQT05TRV9TVUJUWVBFOgogCQkJCWRwcmludGsoIlJlY2VpdmVkIE1hcmtlciBSZXNwb25zZSBvbiBwb3J0ICVkXG4iLCBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcik7Ci0JCQkJYWRfbWFya2VyX3Jlc3BvbnNlX3JlY2VpdmVkKChzdHJ1Y3QgbWFya2VyICopbGFjcGR1LCBwb3J0KTsKKwkJCQlhZF9tYXJrZXJfcmVzcG9uc2VfcmVjZWl2ZWQoKHN0cnVjdCBib25kX21hcmtlciAqKWxhY3BkdSwgcG9ydCk7CiAJCQkJYnJlYWs7CiAKIAkJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKaW5kZXggODYyOTUyZi4uZjE2NTU3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaApAQCAtOTIsNyArOTIsNyBAQAogdHlwZWRlZiBlbnVtIHsKIAlBRF9NQVJLRVJfSU5GT1JNQVRJT05fU1VCVFlQRSA9IDEsIC8vIG1hcmtlciBpbWZvcm1hdGlvbiBzdWJ0eXBlCiAJQURfTUFSS0VSX1JFU1BPTlNFX1NVQlRZUEUgICAgIC8vIG1hcmtlciByZXNwb25zZSBzdWJ0eXBlCi19IG1hcmtlcl9zdWJ0eXBlX3Q7Cit9IGJvbmRfbWFya2VyX3N1YnR5cGVfdDsKIAogLy8gdGltZXJzIHR5cGVzKDQzLjQuOSBpbiB0aGUgODAyLjNhZCBzdGFuZGFyZCkKIHR5cGVkZWYgZW51bSB7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIH0gbGFjcGR1X2hlYWRlcl90OwogCiAvLyBNYXJrZXIgUHJvdG9jb2wgRGF0YSBVbml0KFBEVSkgc3RydWN0dXJlKDQzLjUuMy4yIGluIHRoZSA4MDIuM2FkIHN0YW5kYXJkKQotdHlwZWRlZiBzdHJ1Y3QgbWFya2VyIHsKK3R5cGVkZWYgc3RydWN0IGJvbmRfbWFya2VyIHsKIAl1OCBzdWJ0eXBlOwkJIC8vICA9IDB4MDIgIChtYXJrZXIgUERVKQogCXU4IHZlcnNpb25fbnVtYmVyOwkgLy8gID0gMHgwMQogCXU4IHRsdl90eXBlOwkJIC8vICA9IDB4MDEgIChtYXJrZXIgaW5mb3JtYXRpb24pCkBAIC0xNjEsMTIgKzE2MSwxMiBAQAogCXU4IHRsdl90eXBlX3Rlcm1pbmF0b3I7CSAgICAgLy8gID0gMHgwMAogCXU4IHRlcm1pbmF0b3JfbGVuZ3RoOwkgICAgIC8vICA9IDB4MDAKIAl1OCByZXNlcnZlZF85MFs5MF07CSAgICAgLy8gID0gMAotfSBtYXJrZXJfdDsKK30gYm9uZF9tYXJrZXJfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgbWFya2VyX2hlYWRlciB7Cit0eXBlZGVmIHN0cnVjdCBib25kX21hcmtlcl9oZWFkZXIgewogCXN0cnVjdCBhZF9oZWFkZXIgYWRfaGVhZGVyOwotCXN0cnVjdCBtYXJrZXIgbWFya2VyOwotfSBtYXJrZXJfaGVhZGVyX3Q7CisJc3RydWN0IGJvbmRfbWFya2VyIG1hcmtlcjsKK30gYm9uZF9tYXJrZXJfaGVhZGVyX3Q7CiAKICNwcmFnbWEgcGFjaygpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKaW5kZXggODBjMGM4Yy4uODU1ZGMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKQEAgLTU1LDcgKzU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKm5ldGRldl9jbGFzczsKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERhdGEgU3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEJvbmRpbmcgc3lzZnMgbG9jay4gIFdoeSBjYW4ndCB3ZSBqdXN0IHVzZSB0aGUgc3Vic3l0ZW0gbG9jaz8KKy8qIEJvbmRpbmcgc3lzZnMgbG9jay4gIFdoeSBjYW4ndCB3ZSBqdXN0IHVzZSB0aGUgc3Vic3lzdGVtIGxvY2s/CiAgKiBCZWNhdXNlIGtvYmplY3RfcmVnaXN0ZXIgdHJpZXMgdG8gYWNxdWlyZSB0aGUgc3Vic3lzdGVtIGxvY2suICBJZgogICogd2UgYWxyZWFkeSBob2xkIHRoZSBsb2NrICh3aGljaCB3ZSB3b3VsZCBpZiB0aGUgdXNlciB3YXMgY3JlYXRpbmcKICAqIGEgbmV3IGJvbmQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlKSwgd2UgZGVhZGxvY2suCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IDMxNGIyZjYuLmVkZDY4MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC0yMzQsNiArMjM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8bGludXgvaWYuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KQEAgLTI0Nyw3ICsyNDgsNiBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vZXRoZXJuZXQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oIGIvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCmluZGV4IDA0NDI2MTcuLjJhM2RmMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9hZGFwdGVyLmgKQEAgLTQxLDkgKzQxLDkgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlICJ0M2NkZXYuaCIKICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCiB0eXBlZGVmIGlycXJldHVybl90KCppbnRyX2hhbmRsZXJfdCkgKGludCwgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggMjdhYzAxMC4uMzI4NmQyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTU0Miw3ICs1NDIsOCBAQAogCiAJaWYgKGlkX3ZhbCAhPSBETTkwMDBfSUQpIHsKIAkJcHJpbnRrKCIlczogd3JvbmcgaWQ6IDB4JTA4eFxuIiwgQ0FSRE5BTUUsIGlkX3ZhbCk7Ci0JCWdvdG8gcmVsZWFzZTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CiAJfQogCiAJLyogZnJvbSB0aGlzIHBvaW50IHdlIGFzc3VtZSB0aGF0IHdlIGhhdmUgZm91bmQgYSBETTkwMDAgKi8KQEAgLTYwMiw4ICs2MDMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIAotIHJlbGVhc2U6Ci0gb3V0Ogorb3V0OgogCXByaW50aygiJXM6IG5vdCBmb3VuZCAoJWQpLlxuIiwgQ0FSRE5BTUUsIHJldCk7CiAKIAlkbTkwMDBfcmVsZWFzZV9ib2FyZChwZGV2LCBkYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwLmMgYi9kcml2ZXJzL25ldC9lMTAwLmMKaW5kZXggNjRmMzVlMi4uM2RiYWVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAuYwpAQCAtMTMyNCw3ICsxMzI0LDcgQEAKIAkJaWYgKCEtLWNvdW50ZXIpIGJyZWFrOwogCX0KIAotCS8qIGFjayBhbnkgaW50ZXJ1cHRzLCBzb21ldGhpbmcgY291bGQgaGF2ZSBiZWVuIHNldCAqLworCS8qIGFjayBhbnkgaW50ZXJydXB0cywgc29tZXRoaW5nIGNvdWxkIGhhdmUgYmVlbiBzZXQgKi8KIAlpb3dyaXRlOCh+MCwgJm5pYy0+Y3NyLT5zY2Iuc3RhdF9hY2spOwogCiAJLyogaWYgdGhlIGNvbW1hbmQgZmFpbGVkLCBvciBpcyBub3QgT0ssIG5vdGlmeSBhbmQgcmV0dXJuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggMDQ3MjYzOC4uZjFjZTM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtMzU5MCw3ICszNTkwLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5zdGF0c19sb2NrLCBmbGFncyk7CiAKLQkvKiB0aGVzZSBjb3VudGVycyBhcmUgbW9kaWZpZWQgZnJvbSBlMTAwMF9hZGp1c3RfdGJpX3N0YXRzLAorCS8qIHRoZXNlIGNvdW50ZXJzIGFyZSBtb2RpZmllZCBmcm9tIGUxMDAwX3RiaV9hZGp1c3Rfc3RhdHMsCiAJICogY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBjb250ZXh0LCBzbyB0aGV5IG11c3Qgb25seQogCSAqIGJlIHdyaXR0ZW4gd2hpbGUgaG9sZGluZyBhZGFwdGVyLT5zdGF0c19sb2NrCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBmZTVmZmFjLi4yODA5Yzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTMyMTgsNyArMzIxOCw3IEBACiAJLyogZ2V0IGFkYXB0ZXIgcHJvcGVydGllcyAqLwogCXJldCA9IGVoZWFfc2Vuc2VfYWRhcHRlcl9hdHRyKGFkYXB0ZXIpOwogCWlmIChyZXQpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJzZW5zZV9hZGFwdGVyX2F0dHIgZmFpbGVkOiAlZCIsIHJldCk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAic2Vuc2VfYWRhcHRlcl9hdHRyIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCWdvdG8gb3V0X2ZyZWVfYWQ7CiAJfQogCkBAIC0zMjI2LDcgKzMyMjYsNyBAQAogCQkJCSAgICAgIEVIRUFfTkVRLCBFSEVBX01BWF9FTlRSSUVTX0VRLCAxKTsKIAlpZiAoIWFkYXB0ZXItPm5lcSkgewogCQlyZXQgPSAtRUlPOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5FUSBjcmVhdGlvbiBmYWlsZWQiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJORVEgY3JlYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBvdXRfZnJlZV9hZDsKIAl9CiAKQEAgLTMyMzcsNyArMzIzNyw3IEBACiAJCQkJICBlaGVhX2ludGVycnVwdF9uZXEsIElSUUZfRElTQUJMRUQsCiAJCQkJICAiZWhlYV9uZXEiLCBhZGFwdGVyKTsKIAlpZiAocmV0KSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAicmVxdWVzdGluZyBORVEgSVJRIGZhaWxlZCIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RpbmcgTkVRIElSUSBmYWlsZWRcbiIpOwogCQlnb3RvIG91dF9raWxsX2VxOwogCX0KIApAQCAtMzI0Nyw3ICszMjQ3LDcgQEAKIAogCXJldCA9IGVoZWFfc2V0dXBfcG9ydHMoYWRhcHRlcik7CiAJaWYgKHJldCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgInNldHVwX3BvcnRzIGZhaWxlZCIpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInNldHVwX3BvcnRzIGZhaWxlZFxuIik7CiAJCWdvdG8gb3V0X3JlbV9kZXZfc3lzZnM7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGgxNmkuYyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCmluZGV4IDI0M2ZjNmIuLmUzZGQ4YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aDE2aS5jCisrKyBiL2RyaXZlcnMvbmV0L2V0aDE2aS5jCkBAIC0xNzAsNyArMTcwLDYgQEAKIAogCiAvKiBGZXcgbWFjcm9zICovCi0jZGVmaW5lIEJJVChhKQkJICAgICAgICggKDEgPDwgKGEpKSApCiAjZGVmaW5lIEJJVFNFVChpb2FkZHIsIGJudW0pICAgKChvdXRiKCgoaW5iKGlvYWRkcikpIHwgKGJudW0pKSwgaW9hZGRyKSkpCiAjZGVmaW5lIEJJVENMUihpb2FkZHIsIGJudW0pICAgKChvdXRiKCgoaW5iKGlvYWRkcikpICYgKH4oYm51bSkpKSwgaW9hZGRyKSkpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKaW5kZXggNDNmNzY0Ny4uN2JiOWM3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVhbG54LmMKKysrIGIvZHJpdmVycy9uZXQvZmVhbG54LmMKQEAgLTExMSw3ICsxMTEsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNeXNvbiBNVEQtOHh4IDEwMC8xME0gRXRoZXJuZXQgUENJIEFkYXB0ZXIgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwotLy9NT0RVTEVfUEFSTShtaW5fcGNpX2xhdGVuY3ksICJpIik7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0ocnhfY29weWJyZWFrLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtKG11bHRpY2FzdF9maWx0ZXJfbGltaXQsIGludCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IGNmYmI3YWEuLjcwZGRmMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC05OTIsNyArOTkyLDcgQEAKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQogCQkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKIAkJZWxzZQotCQkJZW5hYmxlX2lycShkZXYtPmlycSk7CisJCQllbmFibGVfaXJxKG5wLT5wY2lfZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKIAkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1RYXS52ZWN0b3IpOwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIAkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQogCQkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CiAJCWVsc2UKLQkJCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKKwkJCWRpc2FibGVfaXJxKG5wLT5wY2lfZGV2LT5pcnEpOwogCX0gZWxzZSB7CiAJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfUlhdLnZlY3Rvcik7CiAJCWRpc2FibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfVFhdLnZlY3Rvcik7CkBAIC0xNjA3LDcgKzE2MDcsNyBAQAogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCiAJCQlkaXNhYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKIAkJZWxzZQotCQkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOworCQkJZGlzYWJsZV9pcnEobnAtPnBjaV9kZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJZGlzYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKIAl9CkBAIC0xNjI1LDcgKzE2MjUsNyBAQAogCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCiAJCQllbmFibGVfaXJxKG5wLT5tc2lfeF9lbnRyeVtOVl9NU0lfWF9WRUNUT1JfQUxMXS52ZWN0b3IpOwogCQllbHNlCi0JCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwkJCWVuYWJsZV9pcnEobnAtPnBjaV9kZXYtPmlycSk7CiAJfSBlbHNlIHsKIAkJZW5hYmxlX2lycShucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX1JYXS52ZWN0b3IpOwogCX0KQEAgLTI0MDgsMTMgKzI0MDgsMTMgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBmbGFnczsKIAl1MzIgdmxhbmZsYWdzID0gMDsKLQl1MzIgcnhfcHJvY2Vzc2VkX2NudCA9IDA7CisJaW50IHJ4X3dvcmsgPSAwOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGxlbjsKIAogCXdoaWxlKChucC0+Z2V0X3J4LmV4ICE9IG5wLT5wdXRfcnguZXgpICYmCiAJICAgICAgISgoZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+Z2V0X3J4LmV4LT5mbGFnbGVuKSkgJiBOVl9SWDJfQVZBSUwpICYmCi0JICAgICAgKHJ4X3Byb2Nlc3NlZF9jbnQrKyA8IGxpbWl0KSkgeworCSAgICAgIChyeF93b3JrIDwgbGltaXQpKSB7CiAKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfcnhfcHJvY2Vzc19vcHRpbWl6ZWQ6IGZsYWdzIDB4JXguXG4iLAogCQkJCQlkZXYtPm5hbWUsIGZsYWdzKTsKQEAgLTI1MTcsOSArMjUxNywxMSBAQAogCQkJbnAtPmdldF9yeC5leCA9IG5wLT5maXJzdF9yeC5leDsKIAkJaWYgKHVubGlrZWx5KG5wLT5nZXRfcnhfY3R4KysgPT0gbnAtPmxhc3RfcnhfY3R4KSkKIAkJCW5wLT5nZXRfcnhfY3R4ID0gbnAtPmZpcnN0X3J4X2N0eDsKKworCQlyeF93b3JrKys7CiAJfQogCi0JcmV0dXJuIHJ4X3Byb2Nlc3NlZF9jbnQ7CisJcmV0dXJuIHJ4X3dvcms7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9idWZzaXplKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0zNTU4LDEwICszNTYwLDEyIEBACiAJaWYgKHJldCAhPSAwICYmIG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfQ0FQQUJMRSkgewogCQlpZiAoKHJldCA9IHBjaV9lbmFibGVfbXNpKG5wLT5wY2lfZGV2KSkgPT0gMCkgewogCQkJbnAtPm1zaV9mbGFncyB8PSBOVl9NU0lfRU5BQkxFRDsKKwkJCWRldi0+aXJxID0gbnAtPnBjaV9kZXYtPmlycTsKIAkJCWlmIChyZXF1ZXN0X2lycShucC0+cGNpX2Rldi0+aXJxLCBoYW5kbGVyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpICE9IDApIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGg6IHJlcXVlc3RfaXJxIGZhaWxlZCAlZFxuIiwgcmV0KTsKIAkJCQlwY2lfZGlzYWJsZV9tc2kobnAtPnBjaV9kZXYpOwogCQkJCW5wLT5tc2lfZmxhZ3MgJj0gfk5WX01TSV9FTkFCTEVEOworCQkJCWRldi0+aXJxID0gbnAtPnBjaV9kZXYtPmlycTsKIAkJCQlnb3RvIG91dF9lcnI7CiAJCQl9CiAKQEAgLTM2MjQsNyArMzYyOCw3IEBACiAJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKIAkJCWRpc2FibGVfaXJxX2xvY2tkZXAobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9BTExdLnZlY3Rvcik7CiAJCWVsc2UKLQkJCWRpc2FibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOworCQkJZGlzYWJsZV9pcnFfbG9ja2RlcChucC0+cGNpX2Rldi0+aXJxKTsKIAkJbWFzayA9IG5wLT5pcnFtYXNrOwogCX0gZWxzZSB7CiAJCWlmIChucC0+bmljX3BvbGxfaXJxICYgTlZSRUdfSVJRX1JYX0FMTCkgewpAQCAtMzY0Miw2ICszNjQ2LDggQEAKIAl9CiAJbnAtPm5pY19wb2xsX2lycSA9IDA7CiAKKwkvKiBkaXNhYmxlX2lycSgpIGNvbnRhaW5zIHN5bmNocm9uaXplX2lycSwgdGh1cyBubyBpcnEgaGFuZGxlciBjYW4gcnVuIG5vdyAqLworCiAJaWYgKG5wLT5yZWNvdmVyX2Vycm9yKSB7CiAJCW5wLT5yZWNvdmVyX2Vycm9yID0gMDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZm9yY2VkZXRoOiBNQUMgaW4gcmVjb3ZlcmFibGUgZXJyb3Igc3RhdGVcbiIpOwpAQCAtMzY3OCw3ICszNjg0LDYgQEAKIAkJfQogCX0KIAotCS8qIEZJWE1FOiBEbyB3ZSBuZWVkIHN5bmNocm9uaXplX2lycShkZXYtPmlycSkgaGVyZT8gKi8KIAogCXdyaXRlbChtYXNrLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKIAlwY2lfcHVzaChiYXNlKTsKQEAgLTM2OTEsNyArMzY5Niw3IEBACiAJCWlmIChucC0+bXNpX2ZsYWdzICYgTlZfTVNJX1hfRU5BQkxFRCkKIAkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+bXNpX3hfZW50cnlbTlZfTVNJX1hfVkVDVE9SX0FMTF0udmVjdG9yKTsKIAkJZWxzZQotCQkJZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKKwkJCWVuYWJsZV9pcnFfbG9ja2RlcChucC0+cGNpX2Rldi0+aXJxKTsKIAl9IGVsc2UgewogCQlpZiAobnAtPm5pY19wb2xsX2lycSAmIE5WUkVHX0lSUV9SWF9BTEwpIHsKIAkJCW52X25pY19pcnFfcngoMCwgZGV2KTsKQEAgLTQ5NDgsNyArNDk1Myw3IEBACiAjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCiAJbmFwaV9kaXNhYmxlKCZucC0+bmFwaSk7CiAjZW5kaWYKLQlzeW5jaHJvbml6ZV9pcnEoZGV2LT5pcnEpOworCXN5bmNocm9uaXplX2lycShucC0+cGNpX2Rldi0+aXJxKTsKIAogCWRlbF90aW1lcl9zeW5jKCZucC0+b29tX2tpY2spOwogCWRlbF90aW1lcl9zeW5jKCZucC0+bmljX3BvbGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKaW5kZXggMDRjNmZhZS4uZjJhNGQzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCkBAIC04OCw3ICs4OCw3IEBACiBzdGF0aWMgaW50IGZzX2VuZXRfcnhfbmFwaShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBmc19lbmV0X3ByaXZhdGUsIG5hcGkpOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB0b19uZXRfZGV2KGZlcC0+ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZmVwLT5uZGV2OwogCWNvbnN0IHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGkgPSBmZXAtPmZwaTsKIAljYmRfdCBfX2lvbWVtICpiZHA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYm4sICpza2J0OwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAlmZXAtPmN1cl9yeCA9IGJkcDsKIAotCWlmIChyZWNlaXZlZCA+PSBidWRnZXQpIHsKKwlpZiAocmVjZWl2ZWQgPCBidWRnZXQpIHsKIAkJLyogZG9uZSAqLwogCQluZXRpZl9yeF9jb21wbGV0ZShkZXYsIG5hcGkpOwogCQkoKmZlcC0+b3BzLT5uYXBpX2VuYWJsZV9yeCkoZGV2KTsKQEAgLTgwNywyMCArODA3LDIzIEBACiAJaW50IHI7CiAJaW50IGVycjsKIAotCW5hcGlfZW5hYmxlKCZmZXAtPm5hcGkpOworCWlmIChmZXAtPmZwaS0+dXNlX25hcGkpCisJCW5hcGlfZW5hYmxlKCZmZXAtPm5hcGkpOwogCiAJLyogSW5zdGFsbCBvdXIgaW50ZXJydXB0IGhhbmRsZXIuICovCiAJciA9IGZzX3JlcXVlc3RfaXJxKGRldiwgZmVwLT5pbnRlcnJ1cHQsICJmc19lbmV0LW1hYyIsIGZzX2VuZXRfaW50ZXJydXB0KTsKIAlpZiAociAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKIAkJICAgICAgICI6ICVzIENvdWxkIG5vdCBhbGxvY2F0ZSBGU19FTkVUIElSUSEiLCBkZXYtPm5hbWUpOwotCQluYXBpX2Rpc2FibGUoJmZlcC0+bmFwaSk7CisJCWlmIChmZXAtPmZwaS0+dXNlX25hcGkpCisJCQluYXBpX2Rpc2FibGUoJmZlcC0+bmFwaSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWVyciA9IGZzX2luaXRfcGh5KGRldik7Ci0JaWYoZXJyKSB7Ci0JCW5hcGlfZGlzYWJsZSgmZmVwLT5uYXBpKTsKKwlpZiAoZXJyKSB7CisJCWlmIChmZXAtPmZwaS0+dXNlX25hcGkpCisJCQluYXBpX2Rpc2FibGUoJmZlcC0+bmFwaSk7CiAJCXJldHVybiBlcnI7CiAJfQogCXBoeV9zdGFydChmZXAtPnBoeWRldik7CkBAIC0xMjMyLDcgKzEyMzUsNyBAQAogCWZwaS0+cnhfcmluZyA9IDMyOwogCWZwaS0+dHhfcmluZyA9IDMyOwogCWZwaS0+cnhfY29weWJyZWFrID0gMjQwOwotCWZwaS0+dXNlX25hcGkgPSAwOworCWZwaS0+dXNlX25hcGkgPSAxOwogCWZwaS0+bmFwaV93ZWlnaHQgPSAxNzsKIAogCXJldCA9IGZpbmRfcGh5KG9mZGV2LT5ub2RlLCBmcGkpOwpAQCAtMTI0OSwxMSArMTI1MiwxMSBAQAogCQlnb3RvIG91dF9mcmVlX2ZwaTsKIAl9CiAKLQlTRVRfTU9EVUxFX09XTkVSKG5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmb2ZkZXYtPmRldiwgbmRldik7CiAKIAlmZXAgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlmZXAtPmRldiA9ICZvZmRldi0+ZGV2OworCWZlcC0+bmRldiA9IG5kZXY7CiAJZmVwLT5mcGkgPSBmcGk7CiAJZmVwLT5vcHMgPSBtYXRjaC0+ZGF0YTsKIApAQCAtMTI4OCwxMCArMTI5MSwxMSBAQAogCW5kZXYtPnN0b3AgPSBmc19lbmV0X2Nsb3NlOwogCW5kZXYtPmdldF9zdGF0cyA9IGZzX2VuZXRfZ2V0X3N0YXRzOwogCW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGZzX3NldF9tdWx0aWNhc3RfbGlzdDsKLQlpZiAoZnBpLT51c2VfbmFwaSkgewotCQluZGV2LT5wb2xsID0gZnNfZW5ldF9yeF9uYXBpOwotCQluZGV2LT53ZWlnaHQgPSBmcGktPm5hcGlfd2VpZ2h0OwotCX0KKworCWlmIChmcGktPnVzZV9uYXBpKQorCQluZXRpZl9uYXBpX2FkZChuZGV2LCAmZmVwLT5uYXBpLCBmc19lbmV0X3J4X25hcGksCisJCSAgICAgICAgICAgICAgIGZwaS0+bmFwaV93ZWlnaHQpOworCiAJbmRldi0+ZXRodG9vbF9vcHMgPSAmZnNfZXRodG9vbF9vcHM7CiAJbmRldi0+ZG9faW9jdGwgPSBmc19pb2N0bDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmggYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaAppbmRleCBiYWY2NDc3Li5jNjc1ZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaAorKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaApAQCAtNzUsNiArNzUsNyBAQAogc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSB7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IGRldmljZSAqZGV2OwkvKiBwb2ludGVyIGJhY2sgdG8gdGhlIGRldmljZSAobXVzdCBiZSBpbml0aWFsaXplZCBmaXJzdCkgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzcGlubG9ja190IGxvY2s7CS8qIGR1cmluZyBhbGwgb3BzIGV4Y2VwdCBUWCBwY2t0IHByb2Nlc3NpbmcgKi8KIAlzcGlubG9ja190IHR4X2xvY2s7CS8qIGR1cmluZyBmc19zdGFydF94bWl0IGFuZCBmc190eCAgICAgICAgICovCiAJc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwppbmRleCBjYzI4OGQ4Li4zODI2OGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCkBAIC05NTYsMTAgKzk1NiwxMiBAQAogCX0KIAogCWVyciA9IHN0YXJ0dXBfZ2ZhcihkZXYpOwotCWlmIChlcnIpCisJaWYgKGVycikgewogI2lmZGVmIENPTkZJR19HRkFSX05BUEkKIAkJbmFwaV9kaXNhYmxlKCZwcml2LT5uYXBpKTsKICNlbmRpZgorCQlyZXR1cm4gZXJyOworCX0KIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaCBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAppbmRleCBjMTZjYzhiLi40NmNkNzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyLmgKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCkBAIC03NDksNyArNzQ5LDYgQEAKIAl1aW50MzJfdCBtc2dfZW5hYmxlOwogCiAJLyogTmV0d29yayBTdGF0aXN0aWNzICovCi0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJc3RydWN0IGdmYXJfZXh0cmFfc3RhdHMgZXh0cmFfc3RhdHM7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwppbmRleCBhZDllMzI3Li5lMDExOWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby82cGFjay5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvLzZwYWNrLmMKQEAgLTMsNyArMyw3IEBACiAgKgkJZGV2aWNlcyBsaWtlIFRUWS4gSXQgaW50ZXJmYWNlcyBiZXR3ZWVuIGEgcmF3IFRUWSBhbmQgdGhlCiAgKgkJa2VybmVsJ3MgQVguMjUgcHJvdG9jb2wgbGF5ZXJzLgogICoKLSAqIEF1dGhvcnM6CUFuZHJlYXMgS/Zuc2dlbiA8YWprQGllaGsucnd0aC1hYWNoZW4uZGU+CisgKiBBdXRob3JzOglBbmRyZWFzIEvDtm5zZ2VuIDxhamtAaWVoay5yd3RoLWFhY2hlbi5kZT4KICAqICAgICAgICAgICAgICBSYWxmIEJhZWNobGUgREw1UkIgPHJhbGZAbGludXgtbWlwcy5vcmc+CiAgKgogICogUXVpdGUgYSBsb3Qgb2Ygc3R1ZmYgInN0b2xlbiIgYnkgSm9lcmcgUmV1dGVyIGZyb20gc2xpcC5jLCB3cml0dGVuIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnIGIvZHJpdmVycy9uZXQvaGFtcmFkaW8vS2NvbmZpZwppbmRleCAzNmQyYzdkLi42MmQ1ZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2hhbXJhZGlvL0tjb25maWcKQEAgLTY0LDcgKzY0LDcgQEAKIAkgIGRtYXNjYy4gSWYgeW91IGRvbid0IHBhc3MgYW55IHBhcmFtZXRlciB0byB0aGUgZHJpdmVyLCBhbGwKIAkgIHBvc3NpYmxlIEkvTyBhZGRyZXNzZXMgYXJlIHByb2JlZC4gVGhpcyBjb3VsZCBpcnJpdGF0ZSBvdGhlciBkZXZpY2VzCiAJICB0aGF0IGFyZSBjdXJyZW50bHkgbm90IGluIHVzZS4gWW91IG1heSBzcGVjaWZ5IHRoZSBsaXN0IG9mIGFkZHJlc3NlcwotCSAgdG8gYmUgcHJvYmVkIGJ5ICJkbWFzY2M9YWRkcjEsYWRkcjIsLi4uIiAod2hlbiBjb21waWxlZCBpbnRvIHRoZQorCSAgdG8gYmUgcHJvYmVkIGJ5ICJkbWFzY2MuaW89YWRkcjEsYWRkcjIsLi4uIiAod2hlbiBjb21waWxlZCBpbnRvIHRoZQogCSAga2VybmVsIGltYWdlKSBvciAiaW89YWRkcjEsYWRkcjIsLi4uIiAod2hlbiBsb2FkZWQgYXMgYSBtb2R1bGUpLiBUaGUKIAkgIG5ldHdvcmsgaW50ZXJmYWNlcyB3aWxsIGJlIGNhbGxlZCBkbWFzY2MwIGFuZCBkbWFzY2MxIGZvciB0aGUgYm9hcmQKIAkgIGRldGVjdGVkIGZpcnN0LCBkbWFzY2MyIGFuZCBkbWFzY2MzIGZvciB0aGUgc2Vjb25kIG9uZSwgYW5kIHNvIG9uLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtcmFkaW8vZG1hc2NjLmMgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwppbmRleCBiYzAyZTQ2Li4xMWI4M2RhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYworKysgYi9kcml2ZXJzL25ldC9oYW1yYWRpby9kbWFzY2MuYwpAQCAtMjEsNiArMjEsNyBAQAogCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CkBAIC0zNSw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL21hbC5jIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvbWFsLmMKaW5kZXggYTY4MGViMC4uOWE4OGY3MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL21hbC5jCisrKyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL21hbC5jCkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJbXNsZWVwKDEpOwogCiAJLyogU3luY2hyb25pemUgd2l0aCB0aGUgTUFMIE5BUEkgcG9sbGVyICovCi0JX19uYXBpX3N5bmNocm9uaXplKCZtYWwtPm5hcGkpOworCW5hcGlfc3luY2hyb25pemUoJm1hbC0+bmFwaSk7CiB9CiAKIHZvaWQgbWFsX3BvbGxfZW5hYmxlKHN0cnVjdCBtYWxfaW5zdGFuY2UgKm1hbCwgc3RydWN0IG1hbF9jb21tYWMgKmNvbW1hYykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvYWN0aXN5cy1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvYWN0aXN5cy1zaXIuYwppbmRleCBjY2Y2ZWM1Li43MzZkMjQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FjdGlzeXMtc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9hY3Rpc3lzLXNpci5jCkBAIC0yMSw3ICsyMSw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiAgCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICogICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9hY3Rpc3lzLmMgYi9kcml2ZXJzL25ldC9pcmRhL2FjdGlzeXMuYwppbmRleCBiMmUzMWY0Li5hZTBiODBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2FjdGlzeXMuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2FjdGlzeXMuYwpAQCAtMTksNyArMTksNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogIAotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqICAgICAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYyBiL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYwppbmRleCBhODJkOGY5Li4xMjU3ZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCkBAIC01OTUsNyArNTk1LDcgQEAKICAgT1VUQiAoKHBoeXNhZGRyID4+IDE4KSAmIDB4ZmYsIE9CT0VfUklOR19CQVNFMSk7CiAgIE9VVEIgKChwaHlzYWRkciA+PiAyNikgJiAweDNmLCBPQk9FX1JJTkdfQkFTRTIpOwogCi0gIC8qRW5hYmxlIERNQSBjb250cm9sZXIgaW4gYnl0ZSBtb2RlIGFuZCBSWCAqLworICAvKkVuYWJsZSBETUEgY29udHJvbGxlciBpbiBieXRlIG1vZGUgYW5kIFJYICovCiAgIE9VVEIgKENPTkZJRzBIX0RNQV9PTiwgT0JPRV9DT05GSUcwSCk7CiAKICAgLyogU3RhcnQgdXAgdGhlIGNsb2NrcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9naXJiaWwtc2lyLmMgYi9kcml2ZXJzL25ldC9pcmRhL2dpcmJpbC1zaXIuYwppbmRleCAwZDJmZTg3Zi4uNzM4NTMxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9naXJiaWwtc2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9naXJiaWwtc2lyLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9naXJiaWwuYyBiL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLmMKaW5kZXggMjQ4YWViMGMuLjFmNTczOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZ2lyYmlsLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9naXJiaWwuYwpAQCAtMTYsNyArMTYsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICogIAotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIAogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqICAgICAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvaXJwb3J0LmggYi9kcml2ZXJzL25ldC9pcmRhL2lycG9ydC5oCmluZGV4IDNmNDZiODQuLjY2ZmMyNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJwb3J0LmgKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9pcnBvcnQuaApAQCAtMTcsNyArMTcsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIAogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvaXJ0dHktc2lyLmMKaW5kZXggNmY1ZjY5Ny4uMmM2ZjdiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9pcnR0eS1zaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lydHR5LXNpci5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiAgCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICogICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCmluZGV4IDEyYjkzNzguLmE4NzNkMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqICAKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oIGIvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5oCmluZGV4IGRhY2Y2NzEuLmJiZGM5N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqICAKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKiAgICAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Rla3JhbS1zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdGVrcmFtLXNpci5jCmluZGV4IDBkZDZiYzcuLmQxY2U1YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdGVrcmFtLXNpci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdGVrcmFtLXNpci5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiAgCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICogICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS90ZWtyYW0uYyBiL2RyaXZlcnMvbmV0L2lyZGEvdGVrcmFtLmMKaW5kZXggOGY2MjU4Mi4uOWJmZDI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS90ZWtyYW0uYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3Rla3JhbS5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKiAgCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICogICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5oIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5oCmluZGV4IDBiNzY2MWQuLjg3YzM5NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuaAorKysgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmgKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiAKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqICAKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcyAKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKiAgICAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWM4OXgwLmMgYi9kcml2ZXJzL25ldC9tYWM4OXgwLmMKaW5kZXggMzA4NTRmMC4uYTE5YjU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjODl4MC5jCisrKyBiL2RyaXZlcnMvbmV0L21hYzg5eDAuYwpAQCAtOTksOSArOTksOSBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2h3dGVzdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNpbnRzLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tZXRoLmggYi9kcml2ZXJzL25ldC9tZXRoLmgKaW5kZXggZWEzYjhmYy4uYTc4ZGMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWV0aC5oCisrKyBiL2RyaXZlcnMvbmV0L21ldGguaApAQCAtMjgsOSArMjgsNiBAQAogI2RlZmluZSBSWF9CVUZGRVJfT0ZGU0VUIChzaXplb2Yocnhfc3RhdHVzX3ZlY3RvcikrMikgLyogc3RhdXMgdmVjdG9yICsgMiBieXRlcyBvZiBwYWRkaW5nICovCiAjZGVmaW5lIFJYX0JVQ0tFVF9TSVpFIDI1NgogCi0jdW5kZWYgQklUCi0jZGVmaW5lIEJJVCh4KQkoMVVMIDw8ICh4KSkKLQogLyogRm9yIG1vcmUgZGV0YWlsZWQgZXhwbGFuYXRpb25zIG9mIHdoYXQgZWFjaCBmaWVsZCBtZW5hcywKICAgIHNlZSBOaWNrJ3MgZ3JlYXQgY29tbWVudHMgdG8gI2RlZmluZXMgYmVsb3cgKG9yIGRvY3MsIGlmCiAgICB5b3UgYXJlIGx1Y2t5IGVub3VnaCB0b2dldCBob2xkIG9mIHRoZW0gOikqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggNjRjODE1MS4uMzY2ZTYyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0zMDU4LDcgKzMwNTgsOCBAQAogCWlmIChzdGF0dXMgIT0gMCkgewogCQlkYWNfZW5hYmxlZCA9IDA7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSI2NC1iaXQgcGNpIGFkZHJlc3MgbWFzayB3YXMgcmVmdXNlZCwgdHJ5aW5nIDMyLWJpdCIpOworCQkJIjY0LWJpdCBwY2kgYWRkcmVzcyBtYXNrIHdhcyByZWZ1c2VkLCAiCisJCQkidHJ5aW5nIDMyLWJpdFxuIik7CiAJCXN0YXR1cyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMyQklUX01BU0spOwogCX0KIAlpZiAoc3RhdHVzICE9IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCA1MGUxZWM2Li45NTMxMTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC05OTYsNyArOTk2LDcgQEAKICAgIGEgZGVsYXkuICBOb3RlIHRoYXQgcHJlLTIuMC4zNCBrZXJuZWxzIGhhZCBhIGNhY2hlLWFsaWdubWVudCBidWcgdGhhdAogICAgbWFkZSB1ZGVsYXkoKSB1bnJlbGlhYmxlLgogICAgVGhlIG9sZCBtZXRob2Qgb2YgdXNpbmcgYW4gSVNBIGFjY2VzcyBhcyBhIGRlbGF5LCBfX1NMT1dfRE9XTl9JT19fLCBpcwotICAgZGVwcmljYXRlZC4KKyAgIGRlcHJlY2F0ZWQuCiAqLwogI2RlZmluZSBlZXByb21fZGVsYXkoZWVfYWRkcikJcmVhZGwoZWVfYWRkcikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCmluZGV4IDJhMWQ2ZDcuLjYwMTA1MWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKQEAgLTUzLDkgKzUzLDYgQEAKICNkZWZpbmUgTkVUWEVOX0FEQVBURVJfVVBfTUFHSUMgNzc3CiAjZGVmaW5lIE5FVFhFTl9OSUNfUEVHX1RVTkUgMAogCi0jZGVmaW5lIERNQV8zMkJJVF9NQVNLCTB4MDAwMDAwMDBmZmZmZmZmZlVMTAotI2RlZmluZSBETUFfMzVCSVRfTUFTSwkweDAwMDAwMDA3ZmZmZmZmZmZVTEwKLQogLyogTG9jYWwgZnVuY3Rpb25zIHRvIE5ldFhlbiBOSUMgZHJpdmVyICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXR4ZW5fbmljX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNuZXQzMi5jIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCmluZGV4IDVmOTk0YjUuLmZmOTJhY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYworKysgYi9kcml2ZXJzL25ldC9wY25ldDMyLmMKQEAgLTI4Miw3ICsyODIsNiBAQAogCiAJc3RydWN0IG5ldF9kZXZpY2UJKmRldjsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QJbmFwaTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKIAljaGFyCQkJdHhfZnVsbDsKIAljaGFyCQkJcGh5Y291bnQ7CS8qIG51bWJlciBvZiBwaHlzIGZvdW5kICovCiAJaW50CQkJb3B0aW9uczsKQEAgLTQ0Miw3ICs0NDEsOSBAQAogCiBzdGF0aWMgdm9pZCBwY25ldDMyX25ldGlmX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKyNpZmRlZiBDT05GSUdfUENORVQzMl9OQVBJCiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworI2VuZGlmCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAjaWZkZWYgQ09ORklHX1BDTkVUMzJfTkFQSQogCW5hcGlfZGlzYWJsZSgmbHAtPm5hcGkpOwpAQCAtNDUyLDcgKzQ1Myw5IEBACiAKIHN0YXRpYyB2b2lkIHBjbmV0MzJfbmV0aWZfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKKyNpZmRlZiBDT05GSUdfUENORVQzMl9OQVBJCiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOworI2VuZGlmCiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogI2lmZGVmIENPTkZJR19QQ05FVDMyX05BUEkKIAluYXBpX2VuYWJsZSgmbHAtPm5hcGkpOwpAQCAtMTE3OCwxNSArMTE4MSwxNSBAQAogCQkgKiBidWZmZXJzLCB3aXRoIG9ubHkgdGhlIGxhc3QgY29ycmVjdGx5IG5vdGluZyB0aGUgZXJyb3IuCiAJCSAqLwogCQlpZiAoc3RhdHVzICYgMHgwMSkJLyogT25seSBjb3VudCBhIGdlbmVyYWwgZXJyb3IgYXQgdGhlICovCi0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CS8qIGVuZCBvZiBhIHBhY2tldC4gKi8KKwkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CS8qIGVuZCBvZiBhIHBhY2tldC4gKi8KIAkJaWYgKHN0YXR1cyAmIDB4MjApCi0JCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgMHgxMCkKLQkJCWxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgMHgwOCkKLQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJaWYgKHN0YXR1cyAmIDB4MDQpCi0JCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE5NywxMyArMTIwMCwxMyBAQAogCQlpZiAobmV0aWZfbXNnX2RydihscCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbXBvc3NpYmxlIHBhY2tldCBzaXplICVkIVxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOwotCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXJldHVybjsKIAl9CiAJaWYgKHBrdF9sZW4gPCA2MCkgewogCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSdW50IHBhY2tldCFcbiIsIGRldi0+bmFtZSk7Ci0JCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIzNyw3ICsxMjQwLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUgogCQkJICAgICAgICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9CiAJc2tiLT5kZXYgPSBkZXY7CkBAIC0xMjU2LDcgKzEyNTksNyBAQAogCQkJCQkgICAgICAgcGt0X2xlbiwKIAkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJfQotCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAjaWZkZWYgQ09ORklHX1BDTkVUMzJfTkFQSQogCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CkBAIC0xMjY0LDcgKzEyNjcsNyBAQAogCW5ldGlmX3J4KHNrYik7CiAjZW5kaWYKIAlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwotCWxwLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJcmV0dXJuOwogfQogCkBAIC0xMzEyLDIxICsxMzE1LDIxIEBACiAJCWlmIChzdGF0dXMgJiAweDQwMDApIHsKIAkJCS8qIFRoZXJlIHdhcyBhIG1ham9yIGVycm9yLCBsb2cgaXQuICovCiAJCQlpbnQgZXJyX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS5taXNjKTsKLQkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkJICAgICAgICIlczogVHggZXJyb3Igc3RhdHVzPSUwNHggZXJyX3N0YXR1cz0lMDh4XG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywKIAkJCQkgICAgICAgZXJyX3N0YXR1cyk7CiAJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDQwMDAwMDApCi0JCQkJbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJaWYgKGVycl9zdGF0dXMgJiAweDA4MDAwMDAwKQotCQkJCWxwLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCWlmIChlcnJfc3RhdHVzICYgMHgxMDAwMDAwMCkKLQkJCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworCQkJCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwogI2lmbmRlZiBET19EWFNVRkxPCiAJCQlpZiAoZXJyX3N0YXR1cyAmIDB4NDAwMDAwMDApIHsKLQkJCQlscC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CiAJCQkJLyogQWNrayEgIE9uIEZJRk8gZXJyb3JzIHRoZSBUeCB1bml0IGlzIHR1cm5lZCBvZmYhICovCiAJCQkJLyogUmVtb3ZlIHRoaXMgdmVyYm9zaXR5IGxhdGVyISAqLwogCQkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGxwKSkKQEAgLTEzMzcsNyArMTM0MCw3IEBACiAJCQl9CiAjZWxzZQogCQkJaWYgKGVycl9zdGF0dXMgJiAweDQwMDAwMDAwKSB7Ci0JCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCWlmICghbHAtPmR4c3VmbG8pIHsJLyogSWYgY29udHJvbGxlciBkb2Vzbid0IHJlY292ZXIgLi4uICovCiAJCQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwogCQkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCkBAIC0xMzUxLDggKzEzNTQsOCBAQAogI2VuZGlmCiAJCX0gZWxzZSB7CiAJCQlpZiAoc3RhdHVzICYgMHgxODAwKQotCQkJCWxwLT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JCQlscC0+c3RhdHMudHhfcGFja2V0cysrOworCQkJCWRldi0+c3RhdHMuY29sbGlzaW9ucysrOworCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCX0KIAogCQkvKiBXZSBtdXN0IGZyZWUgdGhlIG9yaWdpbmFsIHNrYiAqLwpAQCAtMTg0OSw2ICsxODUyLDkgQEAKIAlscC0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKIAlscC0+bWlpX2lmLm1kaW9fd3JpdGUgPSBtZGlvX3dyaXRlOwogCisJLyogbmFwaS53ZWlnaHQgaXMgdXNlZCBpbiBib3RoIHRoZSBuYXBpIGFuZCBub24tbmFwaSBjYXNlcyAqLworCWxwLT5uYXBpLndlaWdodCA9IGxwLT5yeF9yaW5nX3NpemUgLyAyOworCiAjaWZkZWYgQ09ORklHX1BDTkVUMzJfTkFQSQogCW5ldGlmX25hcGlfYWRkKGRldiwgJmxwLT5uYXBpLCBwY25ldDMyX3BvbGwsIGxwLT5yeF9yaW5nX3NpemUgLyAyKTsKICNlbmRpZgpAQCAtMjQ3MSw3ICsyNDc3LDcgQEAKIAkJICAgICAgICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIHJlc2V0dGluZy5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjAsIENTUjBfU1RPUCk7Ci0JbHAtPnN0YXRzLnR4X2Vycm9ycysrOworCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKSB7CiAJCWludCBpOwogCQlwcmludGsoS0VSTl9ERUJVRwpAQCAtMjU0MSw3ICsyNTQ3LDcgQEAKIAlscC0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKIAogCWxwLT5jdXJfdHgrKzsKLQlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CisJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAogCS8qIFRyaWdnZXIgYW4gaW1tZWRpYXRlIHNlbmQgcG9sbC4gKi8KIAlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX0lOVEVOIHwgQ1NSMF9UWFBPTEwpOwpAQCAtMjU4Niw3ICsyNTkyLDcgQEAKIAogCQkvKiBMb2cgbWlzYyBlcnJvcnMuICovCiAJCWlmIChjc3IwICYgMHg0MDAwKQotCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwkvKiBUeCBiYWJibGUuICovCisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwkvKiBUeCBiYWJibGUuICovCiAJCWlmIChjc3IwICYgMHgxMDAwKSB7CiAJCQkvKgogCQkJICogVGhpcyBoYXBwZW5zIHdoZW4gb3VyIHJlY2VpdmUgcmluZyBpcyBmdWxsLiBUaGlzCkBAIC0yNTk5LDcgKzI2MDUsNyBAQAogCQkJICogZG9uJ3QgZ2V0IGEgcnggaW50ZXJydXB0LCBidXQgYSBtaXNzZWQgZnJhbWUKIAkJCSAqIGludGVycnVwdCBzb29uZXIgb3IgbGF0ZXIuCiAJCQkgKi8KLQkJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsJLyogTWlzc2VkIGEgUnggZnJhbWUuICovCisJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KIAkJfQogCQlpZiAoY3NyMCAmIDB4MDgwMCkgewogCQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQpAQCAtMjY2MSw3ICsyNjY3LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCi0JbHAtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDExMik7CisJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAxMTIpOwogCiAJaWYgKG5ldGlmX21zZ19pZmRvd24obHApKQogCQlwcmludGsoS0VSTl9ERUJVRwpAQCAtMjY5OCwxMCArMjcwNCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMTEyKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDExMik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCXJldHVybiAmbHAtPnN0YXRzOworCXJldHVybiAmZGV2LT5zdGF0czsKIH0KIAogLyogdGFrZW4gZnJvbSB0aGUgc3VubGFuY2UgZHJpdmVyLCB3aGljaCBpdCB0b29rIGZyb20gdGhlIGRlcGNhIGRyaXZlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jIGIvZHJpdmVycy9uZXQvcGh5L21kaW8tYml0YmFuZy5jCmluZGV4IDhjZDI0M2QuLjI3NDdiMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tZGlvLWJpdGJhbmcuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpby1iaXRiYW5nLmMKQEAgLTE4NSwzICsxODUsNSBAQAogCW1vZHVsZV9wdXQoY3RybC0+b3BzLT5vd25lcik7CiAJa2ZyZWUoYnVzKTsKIH0KKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby1yZWdzLmggYi9kcml2ZXJzL25ldC9zMmlvLXJlZ3MuaAppbmRleCBhZWY2NmUyLi4wMWYwOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLXJlZ3MuaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLXJlZ3MuaApAQCAtMjAsMTcgKzIwLDE3IEBACiAKIC8qIEdlbmVyYWwgQ29udHJvbC1TdGF0dXMgUmVnaXN0ZXJzICovCiAJdTY0IGdlbmVyYWxfaW50X3N0YXR1czsKLSNkZWZpbmUgR0VOX0lOVFJfVFhQSUMgICAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIEdFTl9JTlRSX1RYRE1BICAgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBHRU5fSU5UUl9UWE1BQyAgICAgICAgICAgICBCSVQoMikKLSNkZWZpbmUgR0VOX0lOVFJfVFhYR1hTICAgICAgICAgICAgQklUKDMpCi0jZGVmaW5lIEdFTl9JTlRSX1RYVFJBRkZJQyAgICAgICAgIEJJVCg4KQotI2RlZmluZSBHRU5fSU5UUl9SWFBJQyAgICAgICAgICAgICBCSVQoMzIpCi0jZGVmaW5lIEdFTl9JTlRSX1JYRE1BICAgICAgICAgICAgIEJJVCgzMykKLSNkZWZpbmUgR0VOX0lOVFJfUlhNQUMgICAgICAgICAgICAgQklUKDM0KQotI2RlZmluZSBHRU5fSU5UUl9NQyAgICAgICAgICAgICAgICBCSVQoMzUpCi0jZGVmaW5lIEdFTl9JTlRSX1JYWEdYUyAgICAgICAgICAgIEJJVCgzNikKLSNkZWZpbmUgR0VOX0lOVFJfUlhUUkFGRklDICAgICAgICAgQklUKDQwKQorI2RlZmluZSBHRU5fSU5UUl9UWFBJQyAgICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBHRU5fSU5UUl9UWERNQSAgICAgICAgICAgICBzMkJJVCgxKQorI2RlZmluZSBHRU5fSU5UUl9UWE1BQyAgICAgICAgICAgICBzMkJJVCgyKQorI2RlZmluZSBHRU5fSU5UUl9UWFhHWFMgICAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZSBHRU5fSU5UUl9UWFRSQUZGSUMgICAgICAgICBzMkJJVCg4KQorI2RlZmluZSBHRU5fSU5UUl9SWFBJQyAgICAgICAgICAgICBzMkJJVCgzMikKKyNkZWZpbmUgR0VOX0lOVFJfUlhETUEgICAgICAgICAgICAgczJCSVQoMzMpCisjZGVmaW5lIEdFTl9JTlRSX1JYTUFDICAgICAgICAgICAgIHMyQklUKDM0KQorI2RlZmluZSBHRU5fSU5UUl9NQyAgICAgICAgICAgICAgICBzMkJJVCgzNSkKKyNkZWZpbmUgR0VOX0lOVFJfUlhYR1hTICAgICAgICAgICAgczJCSVQoMzYpCisjZGVmaW5lIEdFTl9JTlRSX1JYVFJBRkZJQyAgICAgICAgIHMyQklUKDQwKQogI2RlZmluZSBHRU5fRVJST1JfSU5UUiAgICAgICAgICAgICBHRU5fSU5UUl9UWFBJQyB8IEdFTl9JTlRSX1JYUElDIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5fSU5UUl9UWERNQSB8IEdFTl9JTlRSX1JYRE1BIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5fSU5UUl9UWE1BQyB8IEdFTl9JTlRSX1JYTUFDIHwgXApAQCAtNTQsMzYgKzU0LDM2IEBACiAKIAogCXU2NCBhZGFwdGVyX3N0YXR1czsKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfVERNQV9SRUFEWSAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUkRNQV9SRUFEWSAgICAgICAgICBCSVQoMSkKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUEZDX1JFQURZICAgICAgICAgICBCSVQoMikKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfVE1BQ19CVUZfRU1QVFkgICAgICBCSVQoMykKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUElDX1FVSUVTQ0VOVCAgICAgICBCSVQoNSkKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUk1BQ19SRU1PVEVfRkFVTFQgICBCSVQoNikKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUk1BQ19MT0NBTF9GQVVMVCAgICBCSVQoNykKKyNkZWZpbmUgQURBUFRFUl9TVEFUVVNfVERNQV9SRUFEWSAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBBREFQVEVSX1NUQVRVU19SRE1BX1JFQURZICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIEFEQVBURVJfU1RBVFVTX1BGQ19SRUFEWSAgICAgICAgICAgczJCSVQoMikKKyNkZWZpbmUgQURBUFRFUl9TVEFUVVNfVE1BQ19CVUZfRU1QVFkgICAgICBzMkJJVCgzKQorI2RlZmluZSBBREFQVEVSX1NUQVRVU19QSUNfUVVJRVNDRU5UICAgICAgIHMyQklUKDUpCisjZGVmaW5lIEFEQVBURVJfU1RBVFVTX1JNQUNfUkVNT1RFX0ZBVUxUICAgczJCSVQoNikKKyNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUk1BQ19MT0NBTF9GQVVMVCAgICBzMkJJVCg3KQogI2RlZmluZSBBREFQVEVSX1NUQVRVU19STUFDX1BDQ19JRExFICAgICAgIHZCSVQoMHhGRiw4LDgpCiAjZGVmaW5lIEFEQVBURVJfU1RBVFVTX1JNQUNfUENDX0ZPVVJfSURMRSAgdkJJVCgweDBGLDgsOCkKICNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUkNfUFJDX1FVSUVTQ0VOVCAgICB2QklUKDB4RkYsMTYsOCkKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfTUNfRFJBTV9SRUFEWSAgICAgICBCSVQoMjQpCi0jZGVmaW5lIEFEQVBURVJfU1RBVFVTX01DX1FVRVVFU19SRUFEWSAgICAgQklUKDI1KQotI2RlZmluZSBBREFQVEVSX1NUQVRVU19NX1BMTF9MT0NLICAgICAgICAgIEJJVCgzMCkKLSNkZWZpbmUgQURBUFRFUl9TVEFUVVNfUF9QTExfTE9DSyAgICAgICAgICBCSVQoMzEpCisjZGVmaW5lIEFEQVBURVJfU1RBVFVTX01DX0RSQU1fUkVBRFkgICAgICAgczJCSVQoMjQpCisjZGVmaW5lIEFEQVBURVJfU1RBVFVTX01DX1FVRVVFU19SRUFEWSAgICAgczJCSVQoMjUpCisjZGVmaW5lIEFEQVBURVJfU1RBVFVTX01fUExMX0xPQ0sgICAgICAgICAgczJCSVQoMzApCisjZGVmaW5lIEFEQVBURVJfU1RBVFVTX1BfUExMX0xPQ0sgICAgICAgICAgczJCSVQoMzEpCiAKIAl1NjQgYWRhcHRlcl9jb250cm9sOwotI2RlZmluZSBBREFQVEVSX0NOVExfRU4gICAgICAgICAgICAgICAgICAgIEJJVCg3KQotI2RlZmluZSBBREFQVEVSX0VPSV9UWF9PTiAgICAgICAgICAgICAgICAgIEJJVCgxNSkKLSNkZWZpbmUgQURBUFRFUl9MRURfT04gICAgICAgICAgICAgICAgICAgICBCSVQoMjMpCisjZGVmaW5lIEFEQVBURVJfQ05UTF9FTiAgICAgICAgICAgICAgICAgICAgczJCSVQoNykKKyNkZWZpbmUgQURBUFRFUl9FT0lfVFhfT04gICAgICAgICAgICAgICAgICBzMkJJVCgxNSkKKyNkZWZpbmUgQURBUFRFUl9MRURfT04gICAgICAgICAgICAgICAgICAgICBzMkJJVCgyMykKICNkZWZpbmUgQURBUFRFUl9VRFBJKHZhbCkgICAgICAgICAgICAgICAgICB2QklUKHZhbCwzNiw0KQotI2RlZmluZSBBREFQVEVSX1dBSVRfSU5UICAgICAgICAgICAgICAgICAgIEJJVCg0OCkKLSNkZWZpbmUgQURBUFRFUl9FQ0NfRU4gICAgICAgICAgICAgICAgICAgICBCSVQoNTUpCisjZGVmaW5lIEFEQVBURVJfV0FJVF9JTlQgICAgICAgICAgICAgICAgICAgczJCSVQoNDgpCisjZGVmaW5lIEFEQVBURVJfRUNDX0VOICAgICAgICAgICAgICAgICAgICAgczJCSVQoNTUpCiAKIAl1NjQgc2Vycl9zb3VyY2U7Ci0jZGVmaW5lIFNFUlJfU09VUkNFX1BJQwkJCUJJVCgwKQotI2RlZmluZSBTRVJSX1NPVVJDRV9UWERNQQkJQklUKDEpCi0jZGVmaW5lIFNFUlJfU09VUkNFX1JYRE1BCQlCSVQoMikKLSNkZWZpbmUgU0VSUl9TT1VSQ0VfTUFDICAgICAgICAgICAgICAgICBCSVQoMykKLSNkZWZpbmUgU0VSUl9TT1VSQ0VfTUMgICAgICAgICAgICAgICAgICBCSVQoNCkKLSNkZWZpbmUgU0VSUl9TT1VSQ0VfWEdYUyAgICAgICAgICAgICAgICBCSVQoNSkKKyNkZWZpbmUgU0VSUl9TT1VSQ0VfUElDCQkJczJCSVQoMCkKKyNkZWZpbmUgU0VSUl9TT1VSQ0VfVFhETUEJCXMyQklUKDEpCisjZGVmaW5lIFNFUlJfU09VUkNFX1JYRE1BCQlzMkJJVCgyKQorI2RlZmluZSBTRVJSX1NPVVJDRV9NQUMgICAgICAgICAgICAgICAgIHMyQklUKDMpCisjZGVmaW5lIFNFUlJfU09VUkNFX01DICAgICAgICAgICAgICAgICAgczJCSVQoNCkKKyNkZWZpbmUgU0VSUl9TT1VSQ0VfWEdYUyAgICAgICAgICAgICAgICBzMkJJVCg1KQogI2RlZmluZQlTRVJSX1NPVVJDRV9BTlkJCQkoU0VSUl9TT1VSQ0VfUElDCXwgXAogCQkJCQlTRVJSX1NPVVJDRV9UWERNQQl8IFwKIAkJCQkJU0VSUl9TT1VSQ0VfUlhETUEJfCBcCkBAIC0xMDEsNDEgKzEwMSw0MSBAQAogI2RlZmluZQlQQ0lfTU9ERV9QQ0lYX00yXzY2CQkweDUKICNkZWZpbmUJUENJX01PREVfUENJWF9NMl8xMDAJCTB4NgogI2RlZmluZQlQQ0lfTU9ERV9QQ0lYX00yXzEzMwkJMHg3Ci0jZGVmaW5lCVBDSV9NT0RFX1VOU1VQUE9SVEVECQlCSVQoMCkKLSNkZWZpbmUJUENJX01PREVfMzJfQklUUwkJQklUKDgpCi0jZGVmaW5lCVBDSV9NT0RFX1VOS05PV05fTU9ERQkJQklUKDkpCisjZGVmaW5lCVBDSV9NT0RFX1VOU1VQUE9SVEVECQlzMkJJVCgwKQorI2RlZmluZQlQQ0lfTU9ERV8zMl9CSVRTCQlzMkJJVCg4KQorI2RlZmluZQlQQ0lfTU9ERV9VTktOT1dOX01PREUJCXMyQklUKDkpCiAKIAl1OCB1bnVzZWRfMFsweDgwMCAtIDB4MTI4XTsKIAogLyogUENJLVggQ29udHJvbGxlciByZWdpc3RlcnMgKi8KIAl1NjQgcGljX2ludF9zdGF0dXM7CiAJdTY0IHBpY19pbnRfbWFzazsKLSNkZWZpbmUgUElDX0lOVF9UWCAgICAgICAgICAgICAgICAgICAgIEJJVCgwKQotI2RlZmluZSBQSUNfSU5UX0ZMU0ggICAgICAgICAgICAgICAgICAgQklUKDEpCi0jZGVmaW5lIFBJQ19JTlRfTURJTyAgICAgICAgICAgICAgICAgICBCSVQoMikKLSNkZWZpbmUgUElDX0lOVF9JSUMgICAgICAgICAgICAgICAgICAgIEJJVCgzKQotI2RlZmluZSBQSUNfSU5UX0dQSU8gICAgICAgICAgICAgICAgICAgQklUKDQpCi0jZGVmaW5lIFBJQ19JTlRfUlggICAgICAgICAgICAgICAgICAgICBCSVQoMzIpCisjZGVmaW5lIFBJQ19JTlRfVFggICAgICAgICAgICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBQSUNfSU5UX0ZMU0ggICAgICAgICAgICAgICAgICAgczJCSVQoMSkKKyNkZWZpbmUgUElDX0lOVF9NRElPICAgICAgICAgICAgICAgICAgIHMyQklUKDIpCisjZGVmaW5lIFBJQ19JTlRfSUlDICAgICAgICAgICAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZSBQSUNfSU5UX0dQSU8gICAgICAgICAgICAgICAgICAgczJCSVQoNCkKKyNkZWZpbmUgUElDX0lOVF9SWCAgICAgICAgICAgICAgICAgICAgIHMyQklUKDMyKQogCiAJdTY0IHR4cGljX2ludF9yZWc7CiAJdTY0IHR4cGljX2ludF9tYXNrOwotI2RlZmluZSBQQ0lYX0lOVF9SRUdfRUNDX1NHX0VSUiAgICAgICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgUENJWF9JTlRfUkVHX0VDQ19EQl9FUlIgICAgICAgICAgICAgICAgQklUKDEpCi0jZGVmaW5lIFBDSVhfSU5UX1JFR19GTEFTSFJfUl9GU01fRVJSICAgICAgICAgIEJJVCg4KQotI2RlZmluZSBQQ0lYX0lOVF9SRUdfRkxBU0hSX1dfRlNNX0VSUiAgICAgICAgICBCSVQoOSkKLSNkZWZpbmUgUENJWF9JTlRfUkVHX0lOSV9UWF9GU01fU0VSUiAgICAgICAgICAgQklUKDEwKQotI2RlZmluZSBQQ0lYX0lOVF9SRUdfSU5JX1RYT19GU01fRVJSICAgICAgICAgICBCSVQoMTEpCi0jZGVmaW5lIFBDSVhfSU5UX1JFR19UUlRfRlNNX1NFUlIgICAgICAgICAgICAgIEJJVCgxMykKLSNkZWZpbmUgUENJWF9JTlRfUkVHX1NSVF9GU01fU0VSUiAgICAgICAgICAgICAgQklUKDE0KQotI2RlZmluZSBQQ0lYX0lOVF9SRUdfUElGUl9GU01fU0VSUiAgICAgICAgICAgICBCSVQoMTUpCi0jZGVmaW5lIFBDSVhfSU5UX1JFR19XUkNfVFhfU0VORF9GU01fU0VSUiAgICAgIEJJVCgyMSkKLSNkZWZpbmUgUENJWF9JTlRfUkVHX1JSQ19UWF9SRVFfRlNNX1NFUlIgICAgICAgQklUKDIzKQotI2RlZmluZSBQQ0lYX0lOVF9SRUdfSU5JX1JYX0ZTTV9TRVJSICAgICAgICAgICBCSVQoNDgpCi0jZGVmaW5lIFBDSVhfSU5UX1JFR19SQV9SWF9GU01fU0VSUiAgICAgICAgICAgIEJJVCg1MCkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX0VDQ19TR19FUlIgICAgICAgICAgICAgICAgczJCSVQoMCkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX0VDQ19EQl9FUlIgICAgICAgICAgICAgICAgczJCSVQoMSkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX0ZMQVNIUl9SX0ZTTV9FUlIgICAgICAgICAgczJCSVQoOCkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX0ZMQVNIUl9XX0ZTTV9FUlIgICAgICAgICAgczJCSVQoOSkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX0lOSV9UWF9GU01fU0VSUiAgICAgICAgICAgczJCSVQoMTApCisjZGVmaW5lIFBDSVhfSU5UX1JFR19JTklfVFhPX0ZTTV9FUlIgICAgICAgICAgIHMyQklUKDExKQorI2RlZmluZSBQQ0lYX0lOVF9SRUdfVFJUX0ZTTV9TRVJSICAgICAgICAgICAgICBzMkJJVCgxMykKKyNkZWZpbmUgUENJWF9JTlRfUkVHX1NSVF9GU01fU0VSUiAgICAgICAgICAgICAgczJCSVQoMTQpCisjZGVmaW5lIFBDSVhfSU5UX1JFR19QSUZSX0ZTTV9TRVJSICAgICAgICAgICAgIHMyQklUKDE1KQorI2RlZmluZSBQQ0lYX0lOVF9SRUdfV1JDX1RYX1NFTkRfRlNNX1NFUlIgICAgICBzMkJJVCgyMSkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX1JSQ19UWF9SRVFfRlNNX1NFUlIgICAgICAgczJCSVQoMjMpCisjZGVmaW5lIFBDSVhfSU5UX1JFR19JTklfUlhfRlNNX1NFUlIgICAgICAgICAgIHMyQklUKDQ4KQorI2RlZmluZSBQQ0lYX0lOVF9SRUdfUkFfUlhfRlNNX1NFUlIgICAgICAgICAgICBzMkJJVCg1MCkKIC8qCi0jZGVmaW5lIFBDSVhfSU5UX1JFR19XUkNfUlhfU0VORF9GU01fU0VSUiAgICAgIEJJVCg1MikKLSNkZWZpbmUgUENJWF9JTlRfUkVHX1JSQ19SWF9SRVFfRlNNX1NFUlIgICAgICAgQklUKDU0KQotI2RlZmluZSBQQ0lYX0lOVF9SRUdfUlJDX1JYX1NQTElUX0ZTTV9TRVJSICAgICBCSVQoNTgpCisjZGVmaW5lIFBDSVhfSU5UX1JFR19XUkNfUlhfU0VORF9GU01fU0VSUiAgICAgIHMyQklUKDUyKQorI2RlZmluZSBQQ0lYX0lOVF9SRUdfUlJDX1JYX1JFUV9GU01fU0VSUiAgICAgICBzMkJJVCg1NCkKKyNkZWZpbmUgUENJWF9JTlRfUkVHX1JSQ19SWF9TUExJVF9GU01fU0VSUiAgICAgczJCSVQoNTgpCiAqLwogCXU2NCB0eHBpY19hbGFybXM7CiAJdTY0IHJ4cGljX2ludF9yZWc7CkBAIC0xNDQsOTIgKzE0NCw5MiBAQAogCiAJdTY0IGZsc2hfaW50X3JlZzsKIAl1NjQgZmxzaF9pbnRfbWFzazsKLSNkZWZpbmUgUElDX0ZMU0hfSU5UX1JFR19DWUNMRV9GU01fRVJSICAgICAgICAgQklUKDYzKQotI2RlZmluZSBQSUNfRkxTSF9JTlRfUkVHX0VSUiAgICAgICAgICAgICAgICAgICBCSVQoNjIpCisjZGVmaW5lIFBJQ19GTFNIX0lOVF9SRUdfQ1lDTEVfRlNNX0VSUiAgICAgICAgIHMyQklUKDYzKQorI2RlZmluZSBQSUNfRkxTSF9JTlRfUkVHX0VSUiAgICAgICAgICAgICAgICAgICBzMkJJVCg2MikKIAl1NjQgZmxhc2hfYWxhcm1zOwogCiAJdTY0IG1kaW9faW50X3JlZzsKIAl1NjQgbWRpb19pbnRfbWFzazsKLSNkZWZpbmUgTURJT19JTlRfUkVHX01ESU9fQlVTX0VSUiAgICAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIE1ESU9fSU5UX1JFR19EVFhfQlVTX0VSUiAgICAgICAgICAgICAgIEJJVCg4KQotI2RlZmluZSBNRElPX0lOVF9SRUdfTEFTSSAgICAgICAgICAgICAgICAgICAgICBCSVQoMzkpCisjZGVmaW5lIE1ESU9fSU5UX1JFR19NRElPX0JVU19FUlIgICAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIE1ESU9fSU5UX1JFR19EVFhfQlVTX0VSUiAgICAgICAgICAgICAgIHMyQklUKDgpCisjZGVmaW5lIE1ESU9fSU5UX1JFR19MQVNJICAgICAgICAgICAgICAgICAgICAgIHMyQklUKDM5KQogCXU2NCBtZGlvX2FsYXJtczsKIAogCXU2NCBpaWNfaW50X3JlZzsKIAl1NjQgaWljX2ludF9tYXNrOwotI2RlZmluZSBJSUNfSU5UX1JFR19CVVNfRlNNX0VSUiAgICAgICAgICAgICAgICBCSVQoNCkKLSNkZWZpbmUgSUlDX0lOVF9SRUdfQklUX0ZTTV9FUlIgICAgICAgICAgICAgICAgQklUKDUpCi0jZGVmaW5lIElJQ19JTlRfUkVHX0NZQ0xFX0ZTTV9FUlIgICAgICAgICAgICAgIEJJVCg2KQotI2RlZmluZSBJSUNfSU5UX1JFR19SRVFfRlNNX0VSUiAgICAgICAgICAgICAgICBCSVQoNykKLSNkZWZpbmUgSUlDX0lOVF9SRUdfQUNLX0VSUiAgICAgICAgICAgICAgICAgICAgQklUKDgpCisjZGVmaW5lIElJQ19JTlRfUkVHX0JVU19GU01fRVJSICAgICAgICAgICAgICAgIHMyQklUKDQpCisjZGVmaW5lIElJQ19JTlRfUkVHX0JJVF9GU01fRVJSICAgICAgICAgICAgICAgIHMyQklUKDUpCisjZGVmaW5lIElJQ19JTlRfUkVHX0NZQ0xFX0ZTTV9FUlIgICAgICAgICAgICAgIHMyQklUKDYpCisjZGVmaW5lIElJQ19JTlRfUkVHX1JFUV9GU01fRVJSICAgICAgICAgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIElJQ19JTlRfUkVHX0FDS19FUlIgICAgICAgICAgICAgICAgICAgIHMyQklUKDgpCiAJdTY0IGlpY19hbGFybXM7CiAKIAl1OCB1bnVzZWQ0WzB4MDhdOwogCiAJdTY0IGdwaW9faW50X3JlZzsKLSNkZWZpbmUgR1BJT19JTlRfUkVHX0RQX0VSUl9JTlQgICAgICAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIEdQSU9fSU5UX1JFR19MSU5LX0RPV04gICAgICAgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBHUElPX0lOVF9SRUdfTElOS19VUCAgICAgICAgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgR1BJT19JTlRfUkVHX0RQX0VSUl9JTlQgICAgICAgICAgICAgICAgczJCSVQoMCkKKyNkZWZpbmUgR1BJT19JTlRfUkVHX0xJTktfRE9XTiAgICAgICAgICAgICAgICAgczJCSVQoMSkKKyNkZWZpbmUgR1BJT19JTlRfUkVHX0xJTktfVVAgICAgICAgICAgICAgICAgICAgczJCSVQoMikKIAl1NjQgZ3Bpb19pbnRfbWFzazsKLSNkZWZpbmUgR1BJT19JTlRfTUFTS19MSU5LX0RPV04gICAgICAgICAgICAgICAgQklUKDEpCi0jZGVmaW5lIEdQSU9fSU5UX01BU0tfTElOS19VUCAgICAgICAgICAgICAgICAgIEJJVCgyKQorI2RlZmluZSBHUElPX0lOVF9NQVNLX0xJTktfRE9XTiAgICAgICAgICAgICAgICBzMkJJVCgxKQorI2RlZmluZSBHUElPX0lOVF9NQVNLX0xJTktfVVAgICAgICAgICAgICAgICAgICBzMkJJVCgyKQogCXU2NCBncGlvX2FsYXJtczsKIAogCXU4IHVudXNlZDVbMHgzOF07CiAKIAl1NjQgdHhfdHJhZmZpY19pbnQ7Ci0jZGVmaW5lIFRYX1RSQUZGSUNfSU5UX24obikgICAgICAgICAgICAgICAgICAgIEJJVChuKQorI2RlZmluZSBUWF9UUkFGRklDX0lOVF9uKG4pICAgICAgICAgICAgICAgICAgICBzMkJJVChuKQogCXU2NCB0eF90cmFmZmljX21hc2s7CiAKIAl1NjQgcnhfdHJhZmZpY19pbnQ7Ci0jZGVmaW5lIFJYX1RSQUZGSUNfSU5UX24obikgICAgICAgICAgICAgICAgICAgIEJJVChuKQorI2RlZmluZSBSWF9UUkFGRklDX0lOVF9uKG4pICAgICAgICAgICAgICAgICAgICBzMkJJVChuKQogCXU2NCByeF90cmFmZmljX21hc2s7CiAKIC8qIFBJQyBDb250cm9sIHJlZ2lzdGVycyAqLwogCXU2NCBwaWNfY29udHJvbDsKLSNkZWZpbmUgUElDX0NOVExfUlhfQUxBUk1fTUFQXzEgICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFBJQ19DTlRMX1JYX0FMQVJNX01BUF8xICAgICAgICAgICAgICAgIHMyQklUKDApCiAjZGVmaW5lIFBJQ19DTlRMX1NIQVJFRF9TUExJVFMobikgICAgICAgICAgICAgIHZCSVQobiwxMSw1KQogCiAJdTY0IHN3YXBwZXJfY3RybDsKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1BJRl9SX0ZFICAgICAgICAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9QSUZfUl9TRSAgICAgICAgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBTV0FQUEVSX0NUUkxfUElGX1dfRkUgICAgICAgICAgICAgICAgICBCSVQoOCkKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1BJRl9XX1NFICAgICAgICAgICAgICAgICAgQklUKDkpCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9UWFBfRkUgICAgICAgICAgICAgICAgICAgIEJJVCgxNikKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1RYUF9TRSAgICAgICAgICAgICAgICAgICAgQklUKDE3KQotI2RlZmluZSBTV0FQUEVSX0NUUkxfVFhEX1JfRkUgICAgICAgICAgICAgICAgICBCSVQoMTgpCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9UWERfUl9TRSAgICAgICAgICAgICAgICAgIEJJVCgxOSkKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1RYRF9XX0ZFICAgICAgICAgICAgICAgICAgQklUKDIwKQotI2RlZmluZSBTV0FQUEVSX0NUUkxfVFhEX1dfU0UgICAgICAgICAgICAgICAgICBCSVQoMjEpCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9UWEZfUl9GRSAgICAgICAgICAgICAgICAgIEJJVCgyMikKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1RYRl9SX1NFICAgICAgICAgICAgICAgICAgQklUKDIzKQotI2RlZmluZSBTV0FQUEVSX0NUUkxfUlhEX1JfRkUgICAgICAgICAgICAgICAgICBCSVQoMzIpCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9SWERfUl9TRSAgICAgICAgICAgICAgICAgIEJJVCgzMykKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1JYRF9XX0ZFICAgICAgICAgICAgICAgICAgQklUKDM0KQotI2RlZmluZSBTV0FQUEVSX0NUUkxfUlhEX1dfU0UgICAgICAgICAgICAgICAgICBCSVQoMzUpCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9SWEZfV19GRSAgICAgICAgICAgICAgICAgIEJJVCgzNikKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1JYRl9XX1NFICAgICAgICAgICAgICAgICAgQklUKDM3KQotI2RlZmluZSBTV0FQUEVSX0NUUkxfWE1TSV9GRSAgICAgICAgICAgICAgICAgICBCSVQoNDApCi0jZGVmaW5lIFNXQVBQRVJfQ1RSTF9YTVNJX1NFICAgICAgICAgICAgICAgICAgIEJJVCg0MSkKLSNkZWZpbmUgU1dBUFBFUl9DVFJMX1NUQVRTX0ZFICAgICAgICAgICAgICAgICAgQklUKDQ4KQotI2RlZmluZSBTV0FQUEVSX0NUUkxfU1RBVFNfU0UgICAgICAgICAgICAgICAgICBCSVQoNDkpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9QSUZfUl9GRSAgICAgICAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9QSUZfUl9TRSAgICAgICAgICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9QSUZfV19GRSAgICAgICAgICAgICAgICAgIHMyQklUKDgpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9QSUZfV19TRSAgICAgICAgICAgICAgICAgIHMyQklUKDkpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9UWFBfRkUgICAgICAgICAgICAgICAgICAgIHMyQklUKDE2KQorI2RlZmluZSBTV0FQUEVSX0NUUkxfVFhQX1NFICAgICAgICAgICAgICAgICAgICBzMkJJVCgxNykKKyNkZWZpbmUgU1dBUFBFUl9DVFJMX1RYRF9SX0ZFICAgICAgICAgICAgICAgICAgczJCSVQoMTgpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9UWERfUl9TRSAgICAgICAgICAgICAgICAgIHMyQklUKDE5KQorI2RlZmluZSBTV0FQUEVSX0NUUkxfVFhEX1dfRkUgICAgICAgICAgICAgICAgICBzMkJJVCgyMCkKKyNkZWZpbmUgU1dBUFBFUl9DVFJMX1RYRF9XX1NFICAgICAgICAgICAgICAgICAgczJCSVQoMjEpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9UWEZfUl9GRSAgICAgICAgICAgICAgICAgIHMyQklUKDIyKQorI2RlZmluZSBTV0FQUEVSX0NUUkxfVFhGX1JfU0UgICAgICAgICAgICAgICAgICBzMkJJVCgyMykKKyNkZWZpbmUgU1dBUFBFUl9DVFJMX1JYRF9SX0ZFICAgICAgICAgICAgICAgICAgczJCSVQoMzIpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9SWERfUl9TRSAgICAgICAgICAgICAgICAgIHMyQklUKDMzKQorI2RlZmluZSBTV0FQUEVSX0NUUkxfUlhEX1dfRkUgICAgICAgICAgICAgICAgICBzMkJJVCgzNCkKKyNkZWZpbmUgU1dBUFBFUl9DVFJMX1JYRF9XX1NFICAgICAgICAgICAgICAgICAgczJCSVQoMzUpCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9SWEZfV19GRSAgICAgICAgICAgICAgICAgIHMyQklUKDM2KQorI2RlZmluZSBTV0FQUEVSX0NUUkxfUlhGX1dfU0UgICAgICAgICAgICAgICAgICBzMkJJVCgzNykKKyNkZWZpbmUgU1dBUFBFUl9DVFJMX1hNU0lfRkUgICAgICAgICAgICAgICAgICAgczJCSVQoNDApCisjZGVmaW5lIFNXQVBQRVJfQ1RSTF9YTVNJX1NFICAgICAgICAgICAgICAgICAgIHMyQklUKDQxKQorI2RlZmluZSBTV0FQUEVSX0NUUkxfU1RBVFNfRkUgICAgICAgICAgICAgICAgICBzMkJJVCg0OCkKKyNkZWZpbmUgU1dBUFBFUl9DVFJMX1NUQVRTX1NFICAgICAgICAgICAgICAgICAgczJCSVQoNDkpCiAKIAl1NjQgcGlmX3JkX3N3YXBwZXJfZmI7CiAjZGVmaW5lIElGX1JEX1NXQVBQRVJfRkIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTIzNDU2Nzg5QUJDREVGCiAKIAl1NjQgc2NoZWR1bGVkX2ludF9jdHJsOwotI2RlZmluZSBTQ0hFRF9JTlRfQ1RSTF9USU1FUl9FTiAgICAgICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgU0NIRURfSU5UX0NUUkxfT05FX1NIT1QgICAgICAgICAgICAgICAgQklUKDEpCisjZGVmaW5lIFNDSEVEX0lOVF9DVFJMX1RJTUVSX0VOICAgICAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIFNDSEVEX0lOVF9DVFJMX09ORV9TSE9UICAgICAgICAgICAgICAgIHMyQklUKDEpCiAjZGVmaW5lIFNDSEVEX0lOVF9DVFJMX0lOVDJNU0kodmFsKQkJdkJJVCh2YWwsMTAsNikKICNkZWZpbmUgU0NIRURfSU5UX1BFUklPRCAgICAgICAgICAgICAgICAgICAgICAgVEJECiAKIAl1NjQgdHhyZXF0aW1lb3V0OwogI2RlZmluZSBUWFJFUVRPX1ZBTCh2YWwpCQkJCQkJdkJJVCh2YWwsMCwzMikKLSNkZWZpbmUgVFhSRVFUT19FTgkJCQkJCQkJQklUKDYzKQorI2RlZmluZSBUWFJFUVRPX0VOCQkJCQkJCQlzMkJJVCg2MykKIAogCXU2NCBzdGF0c3JlcXRpbWVvdXQ7CiAjZGVmaW5lIFNUQVRSRVFUT19WQUwobikgICAgICAgICAgICAgICAgICAgICAgIFRCRAotI2RlZmluZSBTVEFUUkVRVE9fRU4gICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoNjMpCisjZGVmaW5lIFNUQVRSRVFUT19FTiAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyQklUKDYzKQogCiAJdTY0IHJlYWRfcmV0cnlfZGVsYXk7CiAJdTY0IHJlYWRfcmV0cnlfYWNjZWxlcmF0aW9uOwpAQCAtMjU1LDEwICsyNTUsMTAgQEAKIAogCS8qIEF1dG9tYXRlZCBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gKi8KIAl1NjQgc3RhdF9jZmc7Ci0jZGVmaW5lIFNUQVRfQ0ZHX1NUQVRfRU4gICAgICAgICAgIEJJVCgwKQotI2RlZmluZSBTVEFUX0NGR19PTkVfU0hPVF9FTiAgICAgICBCSVQoMSkKLSNkZWZpbmUgU1RBVF9DRkdfU1RBVF9OU19FTiAgICAgICAgQklUKDgpCi0jZGVmaW5lIFNUQVRfQ0ZHX1NUQVRfUk8gICAgICAgICAgIEJJVCg5KQorI2RlZmluZSBTVEFUX0NGR19TVEFUX0VOICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBTVEFUX0NGR19PTkVfU0hPVF9FTiAgICAgICBzMkJJVCgxKQorI2RlZmluZSBTVEFUX0NGR19TVEFUX05TX0VOICAgICAgICBzMkJJVCg4KQorI2RlZmluZSBTVEFUX0NGR19TVEFUX1JPICAgICAgICAgICBzMkJJVCg5KQogI2RlZmluZSBTVEFUX1RSU0ZfUEVSKG4pICAgICAgICAgICBUQkQKICNkZWZpbmUJUEVSX1NFQwkJCQkJICAgMHgyMDhkNQogI2RlZmluZQlTRVRfVVBEVF9QRVJJT0QobikJCSAgIHZCSVQoKFBFUl9TRUMqbiksMzIsMzIpCkBAIC0yOTAsMTggKzI5MCwxOCBAQAogI2RlZmluZQlJMkNfQ09OVFJPTF9ERVZfSUQoaWQpCQl2QklUKGlkLDEsMykKICNkZWZpbmUJSTJDX0NPTlRST0xfQUREUihhZGRyKQkJdkJJVChhZGRyLDUsMTEpCiAjZGVmaW5lCUkyQ19DT05UUk9MX0JZVEVfQ05UKGNudCkJdkJJVChjbnQsMjIsMikKLSNkZWZpbmUJSTJDX0NPTlRST0xfUkVBRAkJCUJJVCgyNCkKLSNkZWZpbmUJSTJDX0NPTlRST0xfTkFDSwkJCUJJVCgyNSkKKyNkZWZpbmUJSTJDX0NPTlRST0xfUkVBRAkJCXMyQklUKDI0KQorI2RlZmluZQlJMkNfQ09OVFJPTF9OQUNLCQkJczJCSVQoMjUpCiAjZGVmaW5lCUkyQ19DT05UUk9MX0NOVExfU1RBUlQJCXZCSVQoMHhFLDI4LDQpCiAjZGVmaW5lCUkyQ19DT05UUk9MX0NOVExfRU5EKHZhbCkJKHZhbCAmIHZCSVQoMHgxLDI4LDQpKQogI2RlZmluZQlJMkNfQ09OVFJPTF9HRVRfREFUQSh2YWwpCSh1MzIpKHZhbCAmIDB4RkZGRkZGRkYpCiAjZGVmaW5lCUkyQ19DT05UUk9MX1NFVF9EQVRBKHZhbCkJdkJJVCh2YWwsMzIsMzIpCiAKIAl1NjQgZ3Bpb19jb250cm9sOwotI2RlZmluZSBHUElPX0NUUkxfR1BJT18wCQlCSVQoOCkKKyNkZWZpbmUgR1BJT19DVFJMX0dQSU9fMAkJczJCSVQoOCkKIAl1NjQgbWlzY19jb250cm9sOwotI2RlZmluZSBGQVVMVF9CRUhBVklPVVIJCQlCSVQoMCkKLSNkZWZpbmUgRVhUX1JFUV9FTgkJCUJJVCgxKQorI2RlZmluZSBGQVVMVF9CRUhBVklPVVIJCQlzMkJJVCgwKQorI2RlZmluZSBFWFRfUkVRX0VOCQkJczJCSVQoMSkKICNkZWZpbmUgTUlTQ19MSU5LX1NUQUJJTElUWV9QUkQodmFsKSAgIHZCSVQodmFsLDI5LDMpCiAKIAl1OCB1bnVzZWQ3XzFbMHgyMzAgLSAweDIwOF07CkBAIC0zMTcsMjkgKzMxNywyOSBAQAogLyogVHhETUEgcmVnaXN0ZXJzICovCiAJdTY0IHR4ZG1hX2ludF9zdGF0dXM7CiAJdTY0IHR4ZG1hX2ludF9tYXNrOwotI2RlZmluZSBUWERNQV9QRkNfSU5UICAgICAgICAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIFRYRE1BX1REQV9JTlQgICAgICAgICAgICAgICAgICBCSVQoMSkKLSNkZWZpbmUgVFhETUFfUENDX0lOVCAgICAgICAgICAgICAgICAgIEJJVCgyKQotI2RlZmluZSBUWERNQV9UVElfSU5UICAgICAgICAgICAgICAgICAgQklUKDMpCi0jZGVmaW5lIFRYRE1BX0xTT19JTlQgICAgICAgICAgICAgICAgICBCSVQoNCkKLSNkZWZpbmUgVFhETUFfVFBBX0lOVCAgICAgICAgICAgICAgICAgIEJJVCg1KQotI2RlZmluZSBUWERNQV9TTV9JTlQgICAgICAgICAgICAgICAgICAgQklUKDYpCisjZGVmaW5lIFRYRE1BX1BGQ19JTlQgICAgICAgICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBUWERNQV9UREFfSU5UICAgICAgICAgICAgICAgICAgczJCSVQoMSkKKyNkZWZpbmUgVFhETUFfUENDX0lOVCAgICAgICAgICAgICAgICAgIHMyQklUKDIpCisjZGVmaW5lIFRYRE1BX1RUSV9JTlQgICAgICAgICAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZSBUWERNQV9MU09fSU5UICAgICAgICAgICAgICAgICAgczJCSVQoNCkKKyNkZWZpbmUgVFhETUFfVFBBX0lOVCAgICAgICAgICAgICAgICAgIHMyQklUKDUpCisjZGVmaW5lIFRYRE1BX1NNX0lOVCAgICAgICAgICAgICAgICAgICBzMkJJVCg2KQogCXU2NCBwZmNfZXJyX3JlZzsKLSNkZWZpbmUgUEZDX0VDQ19TR19FUlIJCQlCSVQoNykKLSNkZWZpbmUgUEZDX0VDQ19EQl9FUlIJCQlCSVQoMTUpCi0jZGVmaW5lIFBGQ19TTV9FUlJfQUxBUk0JCUJJVCgyMykKLSNkZWZpbmUgUEZDX01JU0NfMF9FUlIJCQlCSVQoMzEpCi0jZGVmaW5lIFBGQ19NSVNDXzFfRVJSCQkJQklUKDMyKQotI2RlZmluZSBQRkNfUENJWF9FUlIJCQlCSVQoMzkpCisjZGVmaW5lIFBGQ19FQ0NfU0dfRVJSCQkJczJCSVQoNykKKyNkZWZpbmUgUEZDX0VDQ19EQl9FUlIJCQlzMkJJVCgxNSkKKyNkZWZpbmUgUEZDX1NNX0VSUl9BTEFSTQkJczJCSVQoMjMpCisjZGVmaW5lIFBGQ19NSVNDXzBfRVJSCQkJczJCSVQoMzEpCisjZGVmaW5lIFBGQ19NSVNDXzFfRVJSCQkJczJCSVQoMzIpCisjZGVmaW5lIFBGQ19QQ0lYX0VSUgkJCXMyQklUKDM5KQogCXU2NCBwZmNfZXJyX21hc2s7CiAJdTY0IHBmY19lcnJfYWxhcm07CiAKIAl1NjQgdGRhX2Vycl9yZWc7CiAjZGVmaW5lIFREQV9Gbl9FQ0NfU0dfRVJSCQl2QklUKDB4ZmYsMCw4KQogI2RlZmluZSBUREFfRm5fRUNDX0RCX0VSUgkJdkJJVCgweGZmLDgsOCkKLSNkZWZpbmUgVERBX1NNMF9FUlJfQUxBUk0JCUJJVCgyMikKLSNkZWZpbmUgVERBX1NNMV9FUlJfQUxBUk0JCUJJVCgyMykKLSNkZWZpbmUgVERBX1BDSVhfRVJSCQkJQklUKDM5KQorI2RlZmluZSBUREFfU00wX0VSUl9BTEFSTQkJczJCSVQoMjIpCisjZGVmaW5lIFREQV9TTTFfRVJSX0FMQVJNCQlzMkJJVCgyMykKKyNkZWZpbmUgVERBX1BDSVhfRVJSCQkJczJCSVQoMzkpCiAJdTY0IHRkYV9lcnJfbWFzazsKIAl1NjQgdGRhX2Vycl9hbGFybTsKIApAQCAtMzUxLDQwICszNTEsNDAgQEAKICNkZWZpbmUgUENDX1NNX0VSUl9BTEFSTQkJdkJJVCgweGZmLDMyLDgpCiAjZGVmaW5lIFBDQ19XUl9FUlJfQUxBUk0JCXZCSVQoMHhmZiw0MCw4KQogI2RlZmluZSBQQ0NfTl9TRVJSCQkJdkJJVCgweGZmLDQ4LDgpCi0jZGVmaW5lIFBDQ182X0NPRl9PVl9FUlIJCUJJVCg1NikKLSNkZWZpbmUgUENDXzdfQ09GX09WX0VSUgkJQklUKDU3KQotI2RlZmluZSBQQ0NfNl9MU09fT1ZfRVJSCQlCSVQoNTgpCi0jZGVmaW5lIFBDQ183X0xTT19PVl9FUlIJCUJJVCg1OSkKKyNkZWZpbmUgUENDXzZfQ09GX09WX0VSUgkJczJCSVQoNTYpCisjZGVmaW5lIFBDQ183X0NPRl9PVl9FUlIJCXMyQklUKDU3KQorI2RlZmluZSBQQ0NfNl9MU09fT1ZfRVJSCQlzMkJJVCg1OCkKKyNkZWZpbmUgUENDXzdfTFNPX09WX0VSUgkJczJCSVQoNTkpCiAjZGVmaW5lIFBDQ19FTkFCTEVfRk9VUgkJCXZCSVQoMHgwRiwwLDgpCiAJdTY0IHBjY19lcnJfbWFzazsKIAl1NjQgcGNjX2Vycl9hbGFybTsKIAogCXU2NCB0dGlfZXJyX3JlZzsKLSNkZWZpbmUgVFRJX0VDQ19TR19FUlIJCQlCSVQoNykKLSNkZWZpbmUgVFRJX0VDQ19EQl9FUlIJCQlCSVQoMTUpCi0jZGVmaW5lIFRUSV9TTV9FUlJfQUxBUk0JCUJJVCgyMykKKyNkZWZpbmUgVFRJX0VDQ19TR19FUlIJCQlzMkJJVCg3KQorI2RlZmluZSBUVElfRUNDX0RCX0VSUgkJCXMyQklUKDE1KQorI2RlZmluZSBUVElfU01fRVJSX0FMQVJNCQlzMkJJVCgyMykKIAl1NjQgdHRpX2Vycl9tYXNrOwogCXU2NCB0dGlfZXJyX2FsYXJtOwogCiAJdTY0IGxzb19lcnJfcmVnOwotI2RlZmluZSBMU082X1NFTkRfT0ZMT1cJCQlCSVQoMTIpCi0jZGVmaW5lIExTTzdfU0VORF9PRkxPVwkJCUJJVCgxMykKLSNkZWZpbmUgTFNPNl9BQk9SVAkJCUJJVCgxNCkKLSNkZWZpbmUgTFNPN19BQk9SVAkJCUJJVCgxNSkKLSNkZWZpbmUgTFNPNl9TTV9FUlJfQUxBUk0JCUJJVCgyMikKLSNkZWZpbmUgTFNPN19TTV9FUlJfQUxBUk0JCUJJVCgyMykKKyNkZWZpbmUgTFNPNl9TRU5EX09GTE9XCQkJczJCSVQoMTIpCisjZGVmaW5lIExTTzdfU0VORF9PRkxPVwkJCXMyQklUKDEzKQorI2RlZmluZSBMU082X0FCT1JUCQkJczJCSVQoMTQpCisjZGVmaW5lIExTTzdfQUJPUlQJCQlzMkJJVCgxNSkKKyNkZWZpbmUgTFNPNl9TTV9FUlJfQUxBUk0JCXMyQklUKDIyKQorI2RlZmluZSBMU083X1NNX0VSUl9BTEFSTQkJczJCSVQoMjMpCiAJdTY0IGxzb19lcnJfbWFzazsKIAl1NjQgbHNvX2Vycl9hbGFybTsKIAogCXU2NCB0cGFfZXJyX3JlZzsKLSNkZWZpbmUgVFBBX1RYX0ZSTV9EUk9QCQkJQklUKDcpCi0jZGVmaW5lIFRQQV9TTV9FUlJfQUxBUk0JCUJJVCgyMykKKyNkZWZpbmUgVFBBX1RYX0ZSTV9EUk9QCQkJczJCSVQoNykKKyNkZWZpbmUgVFBBX1NNX0VSUl9BTEFSTQkJczJCSVQoMjMpCiAKIAl1NjQgdHBhX2Vycl9tYXNrOwogCXU2NCB0cGFfZXJyX2FsYXJtOwogCiAJdTY0IHNtX2Vycl9yZWc7Ci0jZGVmaW5lIFNNX1NNX0VSUl9BTEFSTQkJCUJJVCgxNSkKKyNkZWZpbmUgU01fU01fRVJSX0FMQVJNCQkJczJCSVQoMTUpCiAJdTY0IHNtX2Vycl9tYXNrOwogCXU2NCBzbV9lcnJfYWxhcm07CiAKQEAgLTM5Nyw3ICszOTcsNyBAQAogI2RlZmluZSBYX01BWF9GSUZPUyAgICAgICAgICAgICAgICAgICAgICAgIDgKICNkZWZpbmUgWF9GSUZPX01BWF9MRU4gICAgICAgICAgICAgICAgICAgICAweDFGRkYJLyo4MTkxICovCiAJdTY0IHR4X2ZpZm9fcGFydGl0aW9uXzA7Ci0jZGVmaW5lIFRYX0ZJRk9fUEFSVElUSU9OX0VOICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIFRYX0ZJRk9fUEFSVElUSU9OX0VOICAgICAgICAgICAgICAgczJCSVQoMCkKICNkZWZpbmUgVFhfRklGT19QQVJUSVRJT05fMF9QUkkodmFsKSAgICAgICB2QklUKHZhbCw1LDMpCiAjZGVmaW5lIFRYX0ZJRk9fUEFSVElUSU9OXzBfTEVOKHZhbCkgICAgICAgdkJJVCh2YWwsMTksMTMpCiAjZGVmaW5lIFRYX0ZJRk9fUEFSVElUSU9OXzFfUFJJKHZhbCkgICAgICAgdkJJVCh2YWwsMzcsMykKQEAgLTQzNywxNiArNDM3LDE2IEBACiAJdTY0IHR4X3dfcm91bmRfcm9iaW5fNDsKIAogCXU2NCB0dGlfY29tbWFuZF9tZW07Ci0jZGVmaW5lIFRUSV9DTURfTUVNX1dFICAgICAgICAgICAgICAgICAgICAgQklUKDcpCi0jZGVmaW5lIFRUSV9DTURfTUVNX1NUUk9CRV9ORVdfQ01EICAgICAgICAgQklUKDE1KQotI2RlZmluZSBUVElfQ01EX01FTV9TVFJPQkVfQkVJTkdfRVhFQ1VURUQgIEJJVCgxNSkKKyNkZWZpbmUgVFRJX0NNRF9NRU1fV0UgICAgICAgICAgICAgICAgICAgICBzMkJJVCg3KQorI2RlZmluZSBUVElfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCAgICAgICAgIHMyQklUKDE1KQorI2RlZmluZSBUVElfQ01EX01FTV9TVFJPQkVfQkVJTkdfRVhFQ1VURUQgIHMyQklUKDE1KQogI2RlZmluZSBUVElfQ01EX01FTV9PRkZTRVQobikgICAgICAgICAgICAgIHZCSVQobiwyNiw2KQogCiAJdTY0IHR0aV9kYXRhMV9tZW07CiAjZGVmaW5lIFRUSV9EQVRBMV9NRU1fVFhfVElNRVJfVkFMKG4pICAgICAgdkJJVChuLDYsMjYpCiAjZGVmaW5lIFRUSV9EQVRBMV9NRU1fVFhfVElNRVJfQUNfQ0kobikgICAgdkJJVChuLDM4LDIpCi0jZGVmaW5lIFRUSV9EQVRBMV9NRU1fVFhfVElNRVJfQUNfRU4gICAgICAgQklUKDM4KQotI2RlZmluZSBUVElfREFUQTFfTUVNX1RYX1RJTUVSX0NJX0VOICAgICAgIEJJVCgzOSkKKyNkZWZpbmUgVFRJX0RBVEExX01FTV9UWF9USU1FUl9BQ19FTiAgICAgICBzMkJJVCgzOCkKKyNkZWZpbmUgVFRJX0RBVEExX01FTV9UWF9USU1FUl9DSV9FTiAgICAgICBzMkJJVCgzOSkKICNkZWZpbmUgVFRJX0RBVEExX01FTV9UWF9VUk5HX0EobikgICAgICAgICB2QklUKG4sNDEsNykKICNkZWZpbmUgVFRJX0RBVEExX01FTV9UWF9VUk5HX0IobikgICAgICAgICB2QklUKG4sNDksNykKICNkZWZpbmUgVFRJX0RBVEExX01FTV9UWF9VUk5HX0MobikgICAgICAgICB2QklUKG4sNTcsNykKQEAgLTQ1OSwxMSArNDU5LDExIEBACiAKIC8qIFR4IFByb3RvY29sIGFzc2lzdCAqLwogCXU2NCB0eF9wYV9jZmc7Ci0jZGVmaW5lIFRYX1BBX0NGR19JR05PUkVfRlJNX0VSUiAgICAgICAgICAgQklUKDEpCi0jZGVmaW5lIFRYX1BBX0NGR19JR05PUkVfU05BUF9PVUkgICAgICAgICAgQklUKDIpCi0jZGVmaW5lIFRYX1BBX0NGR19JR05PUkVfTExDX0NUUkwgICAgICAgICAgQklUKDMpCi0jZGVmaW5lCVRYX1BBX0NGR19JR05PUkVfTDJfRVJSCQkJICAgQklUKDYpCi0jZGVmaW5lIFJYX1BBX0NGR19TVFJJUF9WTEFOX1RBRwkJQklUKDE1KQorI2RlZmluZSBUWF9QQV9DRkdfSUdOT1JFX0ZSTV9FUlIgICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIFRYX1BBX0NGR19JR05PUkVfU05BUF9PVUkgICAgICAgICAgczJCSVQoMikKKyNkZWZpbmUgVFhfUEFfQ0ZHX0lHTk9SRV9MTENfQ1RSTCAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZQlUWF9QQV9DRkdfSUdOT1JFX0wyX0VSUgkJCSAgIHMyQklUKDYpCisjZGVmaW5lIFJYX1BBX0NGR19TVFJJUF9WTEFOX1RBRwkJczJCSVQoMTUpCiAKIC8qIFJlY2VudCBhZGQsIHVzZWQgb25seSBkZWJ1ZyBwdXJwb3Nlcy4gKi8KIAl1NjQgcGNjX2VuYWJsZTsKQEAgLTQ3NywzMSArNDc3LDMxIEBACiAvKiBSeERNQSBSZWdpc3RlcnMgKi8KIAl1NjQgcnhkbWFfaW50X3N0YXR1czsKIAl1NjQgcnhkbWFfaW50X21hc2s7Ci0jZGVmaW5lIFJYRE1BX0lOVF9SQ19JTlRfTSAgICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgUlhETUFfSU5UX1JQQV9JTlRfTSAgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBSWERNQV9JTlRfUkRBX0lOVF9NICAgICAgICAgICAgQklUKDIpCi0jZGVmaW5lIFJYRE1BX0lOVF9SVElfSU5UX00gICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgUlhETUFfSU5UX1JDX0lOVF9NICAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIFJYRE1BX0lOVF9SUEFfSU5UX00gICAgICAgICAgICBzMkJJVCgxKQorI2RlZmluZSBSWERNQV9JTlRfUkRBX0lOVF9NICAgICAgICAgICAgczJCSVQoMikKKyNkZWZpbmUgUlhETUFfSU5UX1JUSV9JTlRfTSAgICAgICAgICAgIHMyQklUKDMpCiAKIAl1NjQgcmRhX2Vycl9yZWc7CiAjZGVmaW5lIFJEQV9SWERuX0VDQ19TR19FUlIJCXZCSVQoMHhGRiwwLDgpCiAjZGVmaW5lIFJEQV9SWERuX0VDQ19EQl9FUlIJCXZCSVQoMHhGRiw4LDgpCi0jZGVmaW5lIFJEQV9GUk1fRUNDX1NHX0VSUgkJQklUKDIzKQotI2RlZmluZSBSREFfRlJNX0VDQ19EQl9OX0FFUlIJCUJJVCgzMSkKLSNkZWZpbmUgUkRBX1NNMV9FUlJfQUxBUk0JCUJJVCgzOCkKLSNkZWZpbmUgUkRBX1NNMF9FUlJfQUxBUk0JCUJJVCgzOSkKLSNkZWZpbmUgUkRBX01JU0NfRVJSCQkJQklUKDQ3KQotI2RlZmluZSBSREFfUENJWF9FUlIJCQlCSVQoNTUpCi0jZGVmaW5lIFJEQV9SWERfRUNDX0RCX1NFUlIJCUJJVCg2MykKKyNkZWZpbmUgUkRBX0ZSTV9FQ0NfU0dfRVJSCQlzMkJJVCgyMykKKyNkZWZpbmUgUkRBX0ZSTV9FQ0NfREJfTl9BRVJSCQlzMkJJVCgzMSkKKyNkZWZpbmUgUkRBX1NNMV9FUlJfQUxBUk0JCXMyQklUKDM4KQorI2RlZmluZSBSREFfU00wX0VSUl9BTEFSTQkJczJCSVQoMzkpCisjZGVmaW5lIFJEQV9NSVNDX0VSUgkJCXMyQklUKDQ3KQorI2RlZmluZSBSREFfUENJWF9FUlIJCQlzMkJJVCg1NSkKKyNkZWZpbmUgUkRBX1JYRF9FQ0NfREJfU0VSUgkJczJCSVQoNjMpCiAJdTY0IHJkYV9lcnJfbWFzazsKIAl1NjQgcmRhX2Vycl9hbGFybTsKIAogCXU2NCByY19lcnJfcmVnOwogI2RlZmluZSBSQ19QUkNuX0VDQ19TR19FUlIJCXZCSVQoMHhGRiwwLDgpCiAjZGVmaW5lIFJDX1BSQ25fRUNDX0RCX0VSUgkJdkJJVCgweEZGLDgsOCkKLSNkZWZpbmUgUkNfRlRDX0VDQ19TR19FUlIJCUJJVCgyMykKLSNkZWZpbmUgUkNfRlRDX0VDQ19EQl9FUlIJCUJJVCgzMSkKKyNkZWZpbmUgUkNfRlRDX0VDQ19TR19FUlIJCXMyQklUKDIzKQorI2RlZmluZSBSQ19GVENfRUNDX0RCX0VSUgkJczJCSVQoMzEpCiAjZGVmaW5lIFJDX1BSQ25fU01fRVJSX0FMQVJNCQl2QklUKDB4RkYsMzIsOCkKLSNkZWZpbmUgUkNfRlRDX1NNX0VSUl9BTEFSTQkJQklUKDQ3KQorI2RlZmluZSBSQ19GVENfU01fRVJSX0FMQVJNCQlzMkJJVCg0NykKICNkZWZpbmUgUkNfUkRBX0ZBSUxfV1JfUm4JCXZCSVQoMHhGRiw0OCw4KQogCXU2NCByY19lcnJfbWFzazsKIAl1NjQgcmNfZXJyX2FsYXJtOwpAQCAtNTE3LDE4ICs1MTcsMTggQEAKIAl1NjQgcHJjX3BjaXhfZXJyX2FsYXJtOwogCiAJdTY0IHJwYV9lcnJfcmVnOwotI2RlZmluZSBSUEFfRUNDX1NHX0VSUgkJCUJJVCg3KQotI2RlZmluZSBSUEFfRUNDX0RCX0VSUgkJCUJJVCgxNSkKLSNkZWZpbmUgUlBBX0ZMVVNIX1JFUVVFU1QJCUJJVCgyMikKLSNkZWZpbmUgUlBBX1NNX0VSUl9BTEFSTQkJQklUKDIzKQotI2RlZmluZSBSUEFfQ1JFRElUX0VSUgkJCUJJVCgzMSkKKyNkZWZpbmUgUlBBX0VDQ19TR19FUlIJCQlzMkJJVCg3KQorI2RlZmluZSBSUEFfRUNDX0RCX0VSUgkJCXMyQklUKDE1KQorI2RlZmluZSBSUEFfRkxVU0hfUkVRVUVTVAkJczJCSVQoMjIpCisjZGVmaW5lIFJQQV9TTV9FUlJfQUxBUk0JCXMyQklUKDIzKQorI2RlZmluZSBSUEFfQ1JFRElUX0VSUgkJCXMyQklUKDMxKQogCXU2NCBycGFfZXJyX21hc2s7CiAJdTY0IHJwYV9lcnJfYWxhcm07CiAKIAl1NjQgcnRpX2Vycl9yZWc7Ci0jZGVmaW5lIFJUSV9FQ0NfU0dfRVJSCQkJQklUKDcpCi0jZGVmaW5lIFJUSV9FQ0NfREJfRVJSCQkJQklUKDE1KQotI2RlZmluZSBSVElfU01fRVJSX0FMQVJNCQlCSVQoMjMpCisjZGVmaW5lIFJUSV9FQ0NfU0dfRVJSCQkJczJCSVQoNykKKyNkZWZpbmUgUlRJX0VDQ19EQl9FUlIJCQlzMkJJVCgxNSkKKyNkZWZpbmUgUlRJX1NNX0VSUl9BTEFSTQkJczJCSVQoMjMpCiAJdTY0IHJ0aV9lcnJfbWFzazsKIAl1NjQgcnRpX2Vycl9hbGFybTsKIApAQCAtNTY4LDQ5ICs1NjgsNDkgQEAKICNlbmRpZgogCXU2NCBwcmNfcnhkMF9uW1JYX01BWF9SSU5HU107CiAJdTY0IHByY19jdHJsX25bUlhfTUFYX1JJTkdTXTsKLSNkZWZpbmUgUFJDX0NUUkxfUkNfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgQklUKDcpCi0jZGVmaW5lIFBSQ19DVFJMX1JJTkdfTU9ERSAgICAgICAgICAgICAgICAgICAgIChCSVQoMTQpfEJJVCgxNSkpCisjZGVmaW5lIFBSQ19DVFJMX1JDX0VOQUJMRUQgICAgICAgICAgICAgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIFBSQ19DVFJMX1JJTkdfTU9ERSAgICAgICAgICAgICAgICAgICAgIChzMkJJVCgxNCl8czJCSVQoMTUpKQogI2RlZmluZSBQUkNfQ1RSTF9SSU5HX01PREVfMSAgICAgICAgICAgICAgICAgICB2QklUKDAsMTQsMikKICNkZWZpbmUgUFJDX0NUUkxfUklOR19NT0RFXzMgICAgICAgICAgICAgICAgICAgdkJJVCgxLDE0LDIpCiAjZGVmaW5lIFBSQ19DVFJMX1JJTkdfTU9ERV81ICAgICAgICAgICAgICAgICAgIHZCSVQoMiwxNCwyKQogI2RlZmluZSBQUkNfQ1RSTF9SSU5HX01PREVfeCAgICAgICAgICAgICAgICAgICB2QklUKDMsMTQsMikKLSNkZWZpbmUgUFJDX0NUUkxfTk9fU05PT1AgICAgICAgICAgICAgICAgICAgICAgKEJJVCgyMil8QklUKDIzKSkKLSNkZWZpbmUgUFJDX0NUUkxfTk9fU05PT1BfREVTQyAgICAgICAgICAgICAgICAgQklUKDIyKQotI2RlZmluZSBQUkNfQ1RSTF9OT19TTk9PUF9CVUZGICAgICAgICAgICAgICAgICBCSVQoMjMpCi0jZGVmaW5lIFBSQ19DVFJMX0JJTU9EQUxfSU5URVJSVVBUICAgICAgICAgICAgIEJJVCgzNykKLSNkZWZpbmUgUFJDX0NUUkxfR1JPVVBfUkVBRFMgICAgICAgICAgICAgICAgICAgQklUKDM4KQorI2RlZmluZSBQUkNfQ1RSTF9OT19TTk9PUCAgICAgICAgICAgICAgICAgICAgICAoczJCSVQoMjIpfHMyQklUKDIzKSkKKyNkZWZpbmUgUFJDX0NUUkxfTk9fU05PT1BfREVTQyAgICAgICAgICAgICAgICAgczJCSVQoMjIpCisjZGVmaW5lIFBSQ19DVFJMX05PX1NOT09QX0JVRkYgICAgICAgICAgICAgICAgIHMyQklUKDIzKQorI2RlZmluZSBQUkNfQ1RSTF9CSU1PREFMX0lOVEVSUlVQVCAgICAgICAgICAgICBzMkJJVCgzNykKKyNkZWZpbmUgUFJDX0NUUkxfR1JPVVBfUkVBRFMgICAgICAgICAgICAgICAgICAgczJCSVQoMzgpCiAjZGVmaW5lIFBSQ19DVFJMX1JYRF9CQUNLT0ZGX0lOVEVSVkFMKHZhbCkgICAgIHZCSVQodmFsLDQwLDI0KQogCiAJdTY0IHByY19hbGFybV9hY3Rpb247Ci0jZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjBfU1RPUCAgICAgICAgICAgIEJJVCgzKQotI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1IwX1NUT1AgICAgICAgICAgICBCSVQoNykKLSNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SUl9SMV9TVE9QICAgICAgICAgICAgQklUKDExKQotI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1IxX1NUT1AgICAgICAgICAgICBCSVQoMTUpCi0jZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjJfU1RPUCAgICAgICAgICAgIEJJVCgxOSkKLSNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SV19SMl9TVE9QICAgICAgICAgICAgQklUKDIzKQotI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JSX1IzX1NUT1AgICAgICAgICAgICBCSVQoMjcpCi0jZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUldfUjNfU1RPUCAgICAgICAgICAgIEJJVCgzMSkKLSNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SUl9SNF9TVE9QICAgICAgICAgICAgQklUKDM1KQotI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1I0X1NUT1AgICAgICAgICAgICBCSVQoMzkpCi0jZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjVfU1RPUCAgICAgICAgICAgIEJJVCg0MykKLSNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SV19SNV9TVE9QICAgICAgICAgICAgQklUKDQ3KQotI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JSX1I2X1NUT1AgICAgICAgICAgICBCSVQoNTEpCi0jZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUldfUjZfU1RPUCAgICAgICAgICAgIEJJVCg1NSkKLSNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SUl9SN19TVE9QICAgICAgICAgICAgQklUKDU5KQotI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1I3X1NUT1AgICAgICAgICAgICBCSVQoNjMpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjBfU1RPUCAgICAgICAgICAgIHMyQklUKDMpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUldfUjBfU1RPUCAgICAgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjFfU1RPUCAgICAgICAgICAgIHMyQklUKDExKQorI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1IxX1NUT1AgICAgICAgICAgICBzMkJJVCgxNSkKKyNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SUl9SMl9TVE9QICAgICAgICAgICAgczJCSVQoMTkpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUldfUjJfU1RPUCAgICAgICAgICAgIHMyQklUKDIzKQorI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JSX1IzX1NUT1AgICAgICAgICAgICBzMkJJVCgyNykKKyNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SV19SM19TVE9QICAgICAgICAgICAgczJCSVQoMzEpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjRfU1RPUCAgICAgICAgICAgIHMyQklUKDM1KQorI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1I0X1NUT1AgICAgICAgICAgICBzMkJJVCgzOSkKKyNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SUl9SNV9TVE9QICAgICAgICAgICAgczJCSVQoNDMpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUldfUjVfU1RPUCAgICAgICAgICAgIHMyQklUKDQ3KQorI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JSX1I2X1NUT1AgICAgICAgICAgICBzMkJJVCg1MSkKKyNkZWZpbmUgUFJDX0FMQVJNX0FDVElPTl9SV19SNl9TVE9QICAgICAgICAgICAgczJCSVQoNTUpCisjZGVmaW5lIFBSQ19BTEFSTV9BQ1RJT05fUlJfUjdfU1RPUCAgICAgICAgICAgIHMyQklUKDU5KQorI2RlZmluZSBQUkNfQUxBUk1fQUNUSU9OX1JXX1I3X1NUT1AgICAgICAgICAgICBzMkJJVCg2MykKIAogLyogUmVjZWl2ZSB0cmFmZmljIGludGVycnVwdHMgKi8KIAl1NjQgcnRpX2NvbW1hbmRfbWVtOwotI2RlZmluZSBSVElfQ01EX01FTV9XRSAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDcpCi0jZGVmaW5lIFJUSV9DTURfTUVNX1NUUk9CRSAgICAgICAgICAgICAgICAgICAgICBCSVQoMTUpCi0jZGVmaW5lIFJUSV9DTURfTUVNX1NUUk9CRV9ORVdfQ01EICAgICAgICAgICAgICBCSVQoMTUpCi0jZGVmaW5lIFJUSV9DTURfTUVNX1NUUk9CRV9DTURfQkVJTkdfRVhFQ1VURUQgICBCSVQoMTUpCisjZGVmaW5lIFJUSV9DTURfTUVNX1dFICAgICAgICAgICAgICAgICAgICAgICAgICBzMkJJVCg3KQorI2RlZmluZSBSVElfQ01EX01FTV9TVFJPQkUgICAgICAgICAgICAgICAgICAgICAgczJCSVQoMTUpCisjZGVmaW5lIFJUSV9DTURfTUVNX1NUUk9CRV9ORVdfQ01EICAgICAgICAgICAgICBzMkJJVCgxNSkKKyNkZWZpbmUgUlRJX0NNRF9NRU1fU1RST0JFX0NNRF9CRUlOR19FWEVDVVRFRCAgIHMyQklUKDE1KQogI2RlZmluZSBSVElfQ01EX01FTV9PRkZTRVQobikgICAgICAgICAgICAgICAgICAgdkJJVChuLDI5LDMpCiAKIAl1NjQgcnRpX2RhdGExX21lbTsKICNkZWZpbmUgUlRJX0RBVEExX01FTV9SWF9USU1FUl9WQUwobikgICAgICB2QklUKG4sMywyOSkKLSNkZWZpbmUgUlRJX0RBVEExX01FTV9SWF9USU1FUl9BQ19FTiAgICAgICBCSVQoMzgpCi0jZGVmaW5lIFJUSV9EQVRBMV9NRU1fUlhfVElNRVJfQ0lfRU4gICAgICAgQklUKDM5KQorI2RlZmluZSBSVElfREFUQTFfTUVNX1JYX1RJTUVSX0FDX0VOICAgICAgIHMyQklUKDM4KQorI2RlZmluZSBSVElfREFUQTFfTUVNX1JYX1RJTUVSX0NJX0VOICAgICAgIHMyQklUKDM5KQogI2RlZmluZSBSVElfREFUQTFfTUVNX1JYX1VSTkdfQShuKSAgICAgICAgIHZCSVQobiw0MSw3KQogI2RlZmluZSBSVElfREFUQTFfTUVNX1JYX1VSTkdfQihuKSAgICAgICAgIHZCSVQobiw0OSw3KQogI2RlZmluZSBSVElfREFUQTFfTUVNX1JYX1VSTkdfQyhuKSAgICAgICAgIHZCSVQobiw1Nyw3KQpAQCAtNjIyLDEwICs2MjIsMTAgQEAKICNkZWZpbmUgUlRJX0RBVEEyX01FTV9SWF9VRkNfRChuKSAgICAgICAgICB2QklUKG4sNDgsMTYpCiAKIAl1NjQgcnhfcGFfY2ZnOwotI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0ZSTV9FUlIgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX1NOQVBfT1VJICAgICAgICAgIEJJVCgyKQotI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0xMQ19DVFJMICAgICAgICAgIEJJVCgzKQotI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0wyX0VSUiAgICAgICAgICAgIEJJVCg2KQorI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0ZSTV9FUlIgICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIFJYX1BBX0NGR19JR05PUkVfU05BUF9PVUkgICAgICAgICAgczJCSVQoMikKKyNkZWZpbmUgUlhfUEFfQ0ZHX0lHTk9SRV9MTENfQ1RSTCAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZSBSWF9QQV9DRkdfSUdOT1JFX0wyX0VSUiAgICAgICAgICAgIHMyQklUKDYpCiAKIAl1NjQgdW51c2VkXzExXzE7CiAKQEAgLTY0MSw2NCArNjQxLDY0IEBACiAvKiBNZWRpYSBBY2Nlc3MgQ29udHJvbGxlciBSZWdpc3RlciAqLwogCXU2NCBtYWNfaW50X3N0YXR1czsKIAl1NjQgbWFjX2ludF9tYXNrOwotI2RlZmluZSBNQUNfSU5UX1NUQVRVU19UTUFDX0lOVCAgICAgICAgICAgIEJJVCgwKQotI2RlZmluZSBNQUNfSU5UX1NUQVRVU19STUFDX0lOVCAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBNQUNfSU5UX1NUQVRVU19UTUFDX0lOVCAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIE1BQ19JTlRfU1RBVFVTX1JNQUNfSU5UICAgICAgICAgICAgczJCSVQoMSkKIAogCXU2NCBtYWNfdG1hY19lcnJfcmVnOwotI2RlZmluZSBUTUFDX0VDQ19TR19FUlIJCQkJQklUKDcpCi0jZGVmaW5lIFRNQUNfRUNDX0RCX0VSUgkJCQlCSVQoMTUpCi0jZGVmaW5lIFRNQUNfVFhfQlVGX09WUk4JCQlCSVQoMjMpCi0jZGVmaW5lIFRNQUNfVFhfQ1JJX0VSUgkJCQlCSVQoMzEpCi0jZGVmaW5lIFRNQUNfVFhfU01fRVJSCQkJCUJJVCgzOSkKLSNkZWZpbmUgVE1BQ19ERVNDX0VDQ19TR19FUlIJCQlCSVQoNDcpCi0jZGVmaW5lIFRNQUNfREVTQ19FQ0NfREJfRVJSCQkJQklUKDU1KQorI2RlZmluZSBUTUFDX0VDQ19TR19FUlIJCQkJczJCSVQoNykKKyNkZWZpbmUgVE1BQ19FQ0NfREJfRVJSCQkJCXMyQklUKDE1KQorI2RlZmluZSBUTUFDX1RYX0JVRl9PVlJOCQkJczJCSVQoMjMpCisjZGVmaW5lIFRNQUNfVFhfQ1JJX0VSUgkJCQlzMkJJVCgzMSkKKyNkZWZpbmUgVE1BQ19UWF9TTV9FUlIJCQkJczJCSVQoMzkpCisjZGVmaW5lIFRNQUNfREVTQ19FQ0NfU0dfRVJSCQkJczJCSVQoNDcpCisjZGVmaW5lIFRNQUNfREVTQ19FQ0NfREJfRVJSCQkJczJCSVQoNTUpCiAKIAl1NjQgbWFjX3RtYWNfZXJyX21hc2s7CiAJdTY0IG1hY190bWFjX2Vycl9hbGFybTsKIAogCXU2NCBtYWNfcm1hY19lcnJfcmVnOwotI2RlZmluZSBSTUFDX1JYX0JVRkZfT1ZSTgkJCUJJVCgwKQotI2RlZmluZSBSTUFDX0ZSTV9SQ1ZEX0lOVAkJCUJJVCgxKQotI2RlZmluZSBSTUFDX1VOVVNFRF9JTlQJCQkJQklUKDIpCi0jZGVmaW5lIFJNQUNfUlRTX1BOVU1fRUNDX1NHX0VSUgkJQklUKDUpCi0jZGVmaW5lIFJNQUNfUlRTX0RTX0VDQ19TR19FUlIJCQlCSVQoNikKLSNkZWZpbmUgUk1BQ19SRF9CVUZfRUNDX1NHX0VSUgkJCUJJVCg3KQotI2RlZmluZSBSTUFDX1JUSF9NQVBfRUNDX1NHX0VSUgkJCUJJVCg4KQotI2RlZmluZSBSTUFDX1JUSF9TUERNX0VDQ19TR19FUlIJCUJJVCg5KQotI2RlZmluZSBSTUFDX1JUU19WSURfRUNDX1NHX0VSUgkJCUJJVCgxMCkKLSNkZWZpbmUgUk1BQ19EQV9TSEFET1dfRUNDX1NHX0VSUgkJQklUKDExKQotI2RlZmluZSBSTUFDX1JUU19QTlVNX0VDQ19EQl9FUlIJCUJJVCgxMykKLSNkZWZpbmUgUk1BQ19SVFNfRFNfRUNDX0RCX0VSUgkJCUJJVCgxNCkKLSNkZWZpbmUgUk1BQ19SRF9CVUZfRUNDX0RCX0VSUgkJCUJJVCgxNSkKLSNkZWZpbmUgUk1BQ19SVEhfTUFQX0VDQ19EQl9FUlIJCQlCSVQoMTYpCi0jZGVmaW5lIFJNQUNfUlRIX1NQRE1fRUNDX0RCX0VSUgkJQklUKDE3KQotI2RlZmluZSBSTUFDX1JUU19WSURfRUNDX0RCX0VSUgkJCUJJVCgxOCkKLSNkZWZpbmUgUk1BQ19EQV9TSEFET1dfRUNDX0RCX0VSUgkJQklUKDE5KQotI2RlZmluZSBSTUFDX0xJTktfU1RBVEVfQ0hBTkdFX0lOVAkJQklUKDMxKQotI2RlZmluZSBSTUFDX1JYX1NNX0VSUgkJCQlCSVQoMzkpCi0jZGVmaW5lIFJNQUNfU0lOR0xFX0VDQ19FUlIJCQkoQklUKDUpIHwgQklUKDYpIHwgQklUKDcpIHxcCi0JCQkJCQlCSVQoOCkgIHwgQklUKDkpIHwgQklUKDEwKXxcCi0JCQkJCQlCSVQoMTEpKQotI2RlZmluZSBSTUFDX0RPVUJMRV9FQ0NfRVJSCQkJKEJJVCgxMykgfCBCSVQoMTQpIHwgQklUKDE1KSB8XAotCQkJCQkJQklUKDE2KSAgfCBCSVQoMTcpIHwgQklUKDE4KXxcCi0JCQkJCQlCSVQoMTkpKQorI2RlZmluZSBSTUFDX1JYX0JVRkZfT1ZSTgkJCXMyQklUKDApCisjZGVmaW5lIFJNQUNfRlJNX1JDVkRfSU5UCQkJczJCSVQoMSkKKyNkZWZpbmUgUk1BQ19VTlVTRURfSU5UCQkJCXMyQklUKDIpCisjZGVmaW5lIFJNQUNfUlRTX1BOVU1fRUNDX1NHX0VSUgkJczJCSVQoNSkKKyNkZWZpbmUgUk1BQ19SVFNfRFNfRUNDX1NHX0VSUgkJCXMyQklUKDYpCisjZGVmaW5lIFJNQUNfUkRfQlVGX0VDQ19TR19FUlIJCQlzMkJJVCg3KQorI2RlZmluZSBSTUFDX1JUSF9NQVBfRUNDX1NHX0VSUgkJCXMyQklUKDgpCisjZGVmaW5lIFJNQUNfUlRIX1NQRE1fRUNDX1NHX0VSUgkJczJCSVQoOSkKKyNkZWZpbmUgUk1BQ19SVFNfVklEX0VDQ19TR19FUlIJCQlzMkJJVCgxMCkKKyNkZWZpbmUgUk1BQ19EQV9TSEFET1dfRUNDX1NHX0VSUgkJczJCSVQoMTEpCisjZGVmaW5lIFJNQUNfUlRTX1BOVU1fRUNDX0RCX0VSUgkJczJCSVQoMTMpCisjZGVmaW5lIFJNQUNfUlRTX0RTX0VDQ19EQl9FUlIJCQlzMkJJVCgxNCkKKyNkZWZpbmUgUk1BQ19SRF9CVUZfRUNDX0RCX0VSUgkJCXMyQklUKDE1KQorI2RlZmluZSBSTUFDX1JUSF9NQVBfRUNDX0RCX0VSUgkJCXMyQklUKDE2KQorI2RlZmluZSBSTUFDX1JUSF9TUERNX0VDQ19EQl9FUlIJCXMyQklUKDE3KQorI2RlZmluZSBSTUFDX1JUU19WSURfRUNDX0RCX0VSUgkJCXMyQklUKDE4KQorI2RlZmluZSBSTUFDX0RBX1NIQURPV19FQ0NfREJfRVJSCQlzMkJJVCgxOSkKKyNkZWZpbmUgUk1BQ19MSU5LX1NUQVRFX0NIQU5HRV9JTlQJCXMyQklUKDMxKQorI2RlZmluZSBSTUFDX1JYX1NNX0VSUgkJCQlzMkJJVCgzOSkKKyNkZWZpbmUgUk1BQ19TSU5HTEVfRUNDX0VSUgkJCShzMkJJVCg1KSB8IHMyQklUKDYpIHwgczJCSVQoNykgfFwKKwkJCQkJCXMyQklUKDgpICB8IHMyQklUKDkpIHwgczJCSVQoMTApfFwKKwkJCQkJCXMyQklUKDExKSkKKyNkZWZpbmUgUk1BQ19ET1VCTEVfRUNDX0VSUgkJCShzMkJJVCgxMykgfCBzMkJJVCgxNCkgfCBzMkJJVCgxNSkgfFwKKwkJCQkJCXMyQklUKDE2KSAgfCBzMkJJVCgxNykgfCBzMkJJVCgxOCl8XAorCQkJCQkJczJCSVQoMTkpKQogCXU2NCBtYWNfcm1hY19lcnJfbWFzazsKIAl1NjQgbWFjX3JtYWNfZXJyX2FsYXJtOwogCiAJdTggdW51c2VkMTRbMHgxMDAgLSAweDQwXTsKIAogCXU2NCBtYWNfY2ZnOwotI2RlZmluZSBNQUNfQ0ZHX1RNQUNfRU5BQkxFICAgICAgICAgICAgIEJJVCgwKQotI2RlZmluZSBNQUNfQ0ZHX1JNQUNfRU5BQkxFICAgICAgICAgICAgIEJJVCgxKQotI2RlZmluZSBNQUNfQ0ZHX0xBTl9OT1RfV0FOICAgICAgICAgICAgIEJJVCgyKQotI2RlZmluZSBNQUNfQ0ZHX1RNQUNfTE9PUEJBQ0sgICAgICAgICAgIEJJVCgzKQotI2RlZmluZSBNQUNfQ0ZHX1RNQUNfQVBQRU5EX1BBRCAgICAgICAgIEJJVCg0KQotI2RlZmluZSBNQUNfQ0ZHX1JNQUNfU1RSSVBfRkNTICAgICAgICAgIEJJVCg1KQotI2RlZmluZSBNQUNfQ0ZHX1JNQUNfU1RSSVBfUEFEICAgICAgICAgIEJJVCg2KQotI2RlZmluZSBNQUNfQ0ZHX1JNQUNfUFJPTV9FTkFCTEUgICAgICAgIEJJVCg3KQotI2RlZmluZSBNQUNfUk1BQ19ESVNDQVJEX1BGUk0gICAgICAgICAgIEJJVCg4KQotI2RlZmluZSBNQUNfUk1BQ19CQ0FTVF9FTkFCTEUgICAgICAgICAgIEJJVCg5KQotI2RlZmluZSBNQUNfUk1BQ19BTExfQUREUl9FTkFCTEUgICAgICAgIEJJVCgxMCkKKyNkZWZpbmUgTUFDX0NGR19UTUFDX0VOQUJMRSAgICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBNQUNfQ0ZHX1JNQUNfRU5BQkxFICAgICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIE1BQ19DRkdfTEFOX05PVF9XQU4gICAgICAgICAgICAgczJCSVQoMikKKyNkZWZpbmUgTUFDX0NGR19UTUFDX0xPT1BCQUNLICAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZSBNQUNfQ0ZHX1RNQUNfQVBQRU5EX1BBRCAgICAgICAgIHMyQklUKDQpCisjZGVmaW5lIE1BQ19DRkdfUk1BQ19TVFJJUF9GQ1MgICAgICAgICAgczJCSVQoNSkKKyNkZWZpbmUgTUFDX0NGR19STUFDX1NUUklQX1BBRCAgICAgICAgICBzMkJJVCg2KQorI2RlZmluZSBNQUNfQ0ZHX1JNQUNfUFJPTV9FTkFCTEUgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIE1BQ19STUFDX0RJU0NBUkRfUEZSTSAgICAgICAgICAgczJCSVQoOCkKKyNkZWZpbmUgTUFDX1JNQUNfQkNBU1RfRU5BQkxFICAgICAgICAgICBzMkJJVCg5KQorI2RlZmluZSBNQUNfUk1BQ19BTExfQUREUl9FTkFCTEUgICAgICAgIHMyQklUKDEwKQogI2RlZmluZSBNQUNfUk1BQ19JTlZMRF9JUEdfVEhSKHZhbCkgICAgIHZCSVQodmFsLDE2LDgpCiAKIAl1NjQgdG1hY19hdmdfaXBnOwpAQCAtNzEwLDE0ICs3MTAsMTQgQEAKICNkZWZpbmUgUk1BQ19NQVhfUFlMRF9MRU5fSlVNQk9fREVGIHZCSVQoOTYwMCwyLDE0KQogCiAJdTY0IHJtYWNfZXJyX2NmZzsKLSNkZWZpbmUgUk1BQ19FUlJfRkNTICAgICAgICAgICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgUk1BQ19FUlJfRkNTX0FDQ0VQVCAgICAgICAgICAgICBCSVQoMSkKLSNkZWZpbmUgUk1BQ19FUlJfVE9PX0xPTkcgICAgICAgICAgICAgICBCSVQoMSkKLSNkZWZpbmUgUk1BQ19FUlJfVE9PX0xPTkdfQUNDRVBUICAgICAgICBCSVQoMSkKLSNkZWZpbmUgUk1BQ19FUlJfUlVOVCAgICAgICAgICAgICAgICAgICBCSVQoMikKLSNkZWZpbmUgUk1BQ19FUlJfUlVOVF9BQ0NFUFQgICAgICAgICAgICBCSVQoMikKLSNkZWZpbmUgUk1BQ19FUlJfTEVOX01JU01BVENIICAgICAgICAgICBCSVQoMykKLSNkZWZpbmUgUk1BQ19FUlJfTEVOX01JU01BVENIX0FDQ0VQVCAgICBCSVQoMykKKyNkZWZpbmUgUk1BQ19FUlJfRkNTICAgICAgICAgICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBSTUFDX0VSUl9GQ1NfQUNDRVBUICAgICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIFJNQUNfRVJSX1RPT19MT05HICAgICAgICAgICAgICAgczJCSVQoMSkKKyNkZWZpbmUgUk1BQ19FUlJfVE9PX0xPTkdfQUNDRVBUICAgICAgICBzMkJJVCgxKQorI2RlZmluZSBSTUFDX0VSUl9SVU5UICAgICAgICAgICAgICAgICAgIHMyQklUKDIpCisjZGVmaW5lIFJNQUNfRVJSX1JVTlRfQUNDRVBUICAgICAgICAgICAgczJCSVQoMikKKyNkZWZpbmUgUk1BQ19FUlJfTEVOX01JU01BVENIICAgICAgICAgICBzMkJJVCgzKQorI2RlZmluZSBSTUFDX0VSUl9MRU5fTUlTTUFUQ0hfQUNDRVBUICAgIHMyQklUKDMpCiAKIAl1NjQgcm1hY19jZmdfa2V5OwogI2RlZmluZSBSTUFDX0NGR19LRVkodmFsKSAgICAgICAgICAgICAgIHZCSVQodmFsLDAsMTYpCkBAIC03MjgsMTUgKzcyOCwxNSBAQAogI2RlZmluZSBNQUNfTUNfQUREUl9TVEFSVF9PRkZTRVQgICAgMTYKICNkZWZpbmUgTUFDX01DX0FMTF9NQ19BRERSX09GRlNFVCAgIDYzCS8qIGVuYWJsZXMgYWxsIG11bHRpY2FzdCBwa3RzICovCiAJdTY0IHJtYWNfYWRkcl9jbWRfbWVtOwotI2RlZmluZSBSTUFDX0FERFJfQ01EX01FTV9XRSAgICAgICAgICAgICAgICAgICAgQklUKDcpCisjZGVmaW5lIFJNQUNfQUREUl9DTURfTUVNX1dFICAgICAgICAgICAgICAgICAgICBzMkJJVCg3KQogI2RlZmluZSBSTUFDX0FERFJfQ01EX01FTV9SRCAgICAgICAgICAgICAgICAgICAgMAotI2RlZmluZSBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCAgICAgICAgQklUKDE1KQotI2RlZmluZSBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfQ01EX0VYRUNVVElORyAgQklUKDE1KQorI2RlZmluZSBSTUFDX0FERFJfQ01EX01FTV9TVFJPQkVfTkVXX0NNRCAgICAgICAgczJCSVQoMTUpCisjZGVmaW5lIFJNQUNfQUREUl9DTURfTUVNX1NUUk9CRV9DTURfRVhFQ1VUSU5HICBzMkJJVCgxNSkKICNkZWZpbmUgUk1BQ19BRERSX0NNRF9NRU1fT0ZGU0VUKG4pICAgICAgICAgICAgIHZCSVQobiwyNiw2KQogCiAJdTY0IHJtYWNfYWRkcl9kYXRhMF9tZW07CiAjZGVmaW5lIFJNQUNfQUREUl9EQVRBMF9NRU1fQUREUihuKSAgICB2QklUKG4sMCw0OCkKLSNkZWZpbmUgUk1BQ19BRERSX0RBVEEwX01FTV9VU0VSICAgICAgIEJJVCg0OCkKKyNkZWZpbmUgUk1BQ19BRERSX0RBVEEwX01FTV9VU0VSICAgICAgIHMyQklUKDQ4KQogCiAJdTY0IHJtYWNfYWRkcl9kYXRhMV9tZW07CiAjZGVmaW5lIFJNQUNfQUREUl9EQVRBMV9NRU1fTUFTSyhuKSAgICB2QklUKG4sMCw0OCkKQEAgLTc1MywxMCArNzUzLDEwIEBACiAJdTY0IHRtYWNfaXBnX2NmZzsKIAogCXU2NCBybWFjX3BhdXNlX2NmZzsKLSNkZWZpbmUgUk1BQ19QQVVTRV9HRU4gICAgICAgICAgICAgQklUKDApCi0jZGVmaW5lIFJNQUNfUEFVU0VfR0VOX0VOQUJMRSAgICAgIEJJVCgwKQotI2RlZmluZSBSTUFDX1BBVVNFX1JYICAgICAgICAgICAgICBCSVQoMSkKLSNkZWZpbmUgUk1BQ19QQVVTRV9SWF9FTkFCTEUgICAgICAgQklUKDEpCisjZGVmaW5lIFJNQUNfUEFVU0VfR0VOICAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIFJNQUNfUEFVU0VfR0VOX0VOQUJMRSAgICAgIHMyQklUKDApCisjZGVmaW5lIFJNQUNfUEFVU0VfUlggICAgICAgICAgICAgIHMyQklUKDEpCisjZGVmaW5lIFJNQUNfUEFVU0VfUlhfRU5BQkxFICAgICAgIHMyQklUKDEpCiAjZGVmaW5lIFJNQUNfUEFVU0VfSEdfUFRJTUVfREVGICAgIHZCSVQoMHhGRkZGLDE2LDE2KQogI2RlZmluZSBSTUFDX1BBVVNFX0hHX1BUSU1FKHZhbCkgICAgdkJJVCh2YWwsMTYsMTYpCiAKQEAgLTc4NywyOSArNzg3LDI5IEBACiAjZGVmaW5lIE1BWF9ESVhfTUFQICAgICAgICAgICAgICAgICAgICAgICAgIDQKIAl1NjQgcnRzX2RpeF9tYXBfbltNQVhfRElYX01BUF07CiAjZGVmaW5lIFJUU19ESVhfTUFQX0VUWVBFKHZhbCkgICAgICAgICAgICAgdkJJVCh2YWwsMCwxNikKLSNkZWZpbmUgUlRTX0RJWF9NQVBfU0NXKHZhbCkgICAgICAgICAgICAgICBCSVQodmFsLDIxKQorI2RlZmluZSBSVFNfRElYX01BUF9TQ1codmFsKSAgICAgICAgICAgICAgIHMyQklUKHZhbCwyMSkKIAogCXU2NCBydHNfcV9hbHRlcm5hdGVzOwogCXU2NCBydHNfZGVmYXVsdF9xOwogCiAJdTY0IHJ0c19jdHJsOwotI2RlZmluZSBSVFNfQ1RSTF9JR05PUkVfU05BUF9PVUkgICAgICAgICAgIEJJVCgyKQotI2RlZmluZSBSVFNfQ1RSTF9JR05PUkVfTExDX0NUUkwgICAgICAgICAgIEJJVCgzKQorI2RlZmluZSBSVFNfQ1RSTF9JR05PUkVfU05BUF9PVUkgICAgICAgICAgIHMyQklUKDIpCisjZGVmaW5lIFJUU19DVFJMX0lHTk9SRV9MTENfQ1RSTCAgICAgICAgICAgczJCSVQoMykKIAogCXU2NCBydHNfcG5fY2FtX2N0cmw7Ci0jZGVmaW5lIFJUU19QTl9DQU1fQ1RSTF9XRSAgICAgICAgICAgICAgICAgQklUKDcpCi0jZGVmaW5lIFJUU19QTl9DQU1fQ1RSTF9TVFJPQkVfTkVXX0NNRCAgICAgQklUKDE1KQotI2RlZmluZSBSVFNfUE5fQ0FNX0NUUkxfU1RST0JFX0JFSU5HX0VYRUNVVEVEICAgQklUKDE1KQorI2RlZmluZSBSVFNfUE5fQ0FNX0NUUkxfV0UgICAgICAgICAgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIFJUU19QTl9DQU1fQ1RSTF9TVFJPQkVfTkVXX0NNRCAgICAgczJCSVQoMTUpCisjZGVmaW5lIFJUU19QTl9DQU1fQ1RSTF9TVFJPQkVfQkVJTkdfRVhFQ1VURUQgICBzMkJJVCgxNSkKICNkZWZpbmUgUlRTX1BOX0NBTV9DVFJMX09GRlNFVChuKSAgICAgICAgICB2QklUKG4sMjQsOCkKIAl1NjQgcnRzX3BuX2NhbV9kYXRhOwotI2RlZmluZSBSVFNfUE5fQ0FNX0RBVEFfVENQX1NFTEVDVCAgICAgICAgIEJJVCg3KQorI2RlZmluZSBSVFNfUE5fQ0FNX0RBVEFfVENQX1NFTEVDVCAgICAgICAgIHMyQklUKDcpCiAjZGVmaW5lIFJUU19QTl9DQU1fREFUQV9QT1JUKHZhbCkgICAgICAgICAgdkJJVCh2YWwsOCwxNikKICNkZWZpbmUgUlRTX1BOX0NBTV9EQVRBX1NDVyh2YWwpICAgICAgICAgICB2QklUKHZhbCwyNCw4KQogCiAJdTY0IHJ0c19kc19tZW1fY3RybDsKLSNkZWZpbmUgUlRTX0RTX01FTV9DVFJMX1dFICAgICAgICAgICAgICAgICBCSVQoNykKLSNkZWZpbmUgUlRTX0RTX01FTV9DVFJMX1NUUk9CRV9ORVdfQ01EICAgICBCSVQoMTUpCi0jZGVmaW5lIFJUU19EU19NRU1fQ1RSTF9TVFJPQkVfQ01EX0JFSU5HX0VYRUNVVEVEICAgQklUKDE1KQorI2RlZmluZSBSVFNfRFNfTUVNX0NUUkxfV0UgICAgICAgICAgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIFJUU19EU19NRU1fQ1RSTF9TVFJPQkVfTkVXX0NNRCAgICAgczJCSVQoMTUpCisjZGVmaW5lIFJUU19EU19NRU1fQ1RSTF9TVFJPQkVfQ01EX0JFSU5HX0VYRUNVVEVEICAgczJCSVQoMTUpCiAjZGVmaW5lIFJUU19EU19NRU1fQ1RSTF9PRkZTRVQobikgICAgICAgICAgdkJJVChuLDI2LDYpCiAJdTY0IHJ0c19kc19tZW1fZGF0YTsKICNkZWZpbmUgUlRTX0RTX01FTV9EQVRBKG4pICAgICAgICAgICAgICAgICB2QklUKG4sMCw4KQpAQCAtODIzLDIzICs4MjMsMjMgQEAKIAogLyogbWVtb3J5IGNvbnRyb2xsZXIgcmVnaXN0ZXJzICovCiAJdTY0IG1jX2ludF9zdGF0dXM7Ci0jZGVmaW5lIE1DX0lOVF9TVEFUVVNfTUNfSU5UICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIE1DX0lOVF9TVEFUVVNfTUNfSU5UICAgICAgICAgICAgICAgczJCSVQoMCkKIAl1NjQgbWNfaW50X21hc2s7Ci0jZGVmaW5lIE1DX0lOVF9NQVNLX01DX0lOVCAgICAgICAgICAgICAgICAgQklUKDApCisjZGVmaW5lIE1DX0lOVF9NQVNLX01DX0lOVCAgICAgICAgICAgICAgICAgczJCSVQoMCkKIAogCXU2NCBtY19lcnJfcmVnOwotI2RlZmluZSBNQ19FUlJfUkVHX0VDQ19EQl9FUlJfTCAgICAgICAgICAgIEJJVCgxNCkKLSNkZWZpbmUgTUNfRVJSX1JFR19FQ0NfREJfRVJSX1UgICAgICAgICAgICBCSVQoMTUpCi0jZGVmaW5lIE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzAgICAgICAgQklUKDE4KQotI2RlZmluZSBNQ19FUlJfUkVHX01JUklfRUNDX0RCX0VSUl8xICAgICAgIEJJVCgyMCkKLSNkZWZpbmUgTUNfRVJSX1JFR19NSVJJX0NSSV9FUlJfMCAgICAgICAgICBCSVQoMjIpCi0jZGVmaW5lIE1DX0VSUl9SRUdfTUlSSV9DUklfRVJSXzEgICAgICAgICAgQklUKDIzKQotI2RlZmluZSBNQ19FUlJfUkVHX1NNX0VSUiAgICAgICAgICAgICAgICAgIEJJVCgzMSkKLSNkZWZpbmUgTUNfRVJSX1JFR19FQ0NfQUxMX1NORwkJICAgKEJJVCgyKSB8IEJJVCgzKSB8IEJJVCg0KSB8IEJJVCg1KSB8XAotCQkJCQlCSVQoMTcpIHwgQklUKDE5KSkKLSNkZWZpbmUgTUNfRVJSX1JFR19FQ0NfQUxMX0RCTAkJICAgKEJJVCgxMCkgfCBCSVQoMTEpIHwgQklUKDEyKSB8XAotCQkJCQlCSVQoMTMpIHwgQklUKDE4KSB8IEJJVCgyMCkpCi0jZGVmaW5lIFBMTF9MT0NLX04JCQlCSVQoMzkpCisjZGVmaW5lIE1DX0VSUl9SRUdfRUNDX0RCX0VSUl9MICAgICAgICAgICAgczJCSVQoMTQpCisjZGVmaW5lIE1DX0VSUl9SRUdfRUNDX0RCX0VSUl9VICAgICAgICAgICAgczJCSVQoMTUpCisjZGVmaW5lIE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzAgICAgICAgczJCSVQoMTgpCisjZGVmaW5lIE1DX0VSUl9SRUdfTUlSSV9FQ0NfREJfRVJSXzEgICAgICAgczJCSVQoMjApCisjZGVmaW5lIE1DX0VSUl9SRUdfTUlSSV9DUklfRVJSXzAgICAgICAgICAgczJCSVQoMjIpCisjZGVmaW5lIE1DX0VSUl9SRUdfTUlSSV9DUklfRVJSXzEgICAgICAgICAgczJCSVQoMjMpCisjZGVmaW5lIE1DX0VSUl9SRUdfU01fRVJSICAgICAgICAgICAgICAgICAgczJCSVQoMzEpCisjZGVmaW5lIE1DX0VSUl9SRUdfRUNDX0FMTF9TTkcJCSAgIChzMkJJVCgyKSB8IHMyQklUKDMpIHwgczJCSVQoNCkgfCBzMkJJVCg1KSB8XAorCQkJCQlzMkJJVCgxNykgfCBzMkJJVCgxOSkpCisjZGVmaW5lIE1DX0VSUl9SRUdfRUNDX0FMTF9EQkwJCSAgIChzMkJJVCgxMCkgfCBzMkJJVCgxMSkgfCBzMkJJVCgxMikgfFwKKwkJCQkJczJCSVQoMTMpIHwgczJCSVQoMTgpIHwgczJCSVQoMjApKQorI2RlZmluZSBQTExfTE9DS19OCQkJczJCSVQoMzkpCiAJdTY0IG1jX2Vycl9tYXNrOwogCXU2NCBtY19lcnJfYWxhcm07CiAKQEAgLTg1Nyw4ICs4NTcsOCBAQAogI2RlZmluZSBSWF9RVUVVRV9DRkdfUTdfU1oobikgICAgICAgICAgICAgIHZCSVQobiw1Niw4KQogCiAJdTY0IG1jX3JsZHJhbV9tcnM7Ci0jZGVmaW5lCU1DX1JMRFJBTV9RVUVVRV9TSVpFX0VOQUJMRQkJCUJJVCgzOSkKLSNkZWZpbmUJTUNfUkxEUkFNX01SU19FTkFCTEUJCQkJQklUKDQ3KQorI2RlZmluZQlNQ19STERSQU1fUVVFVUVfU0laRV9FTkFCTEUJCQlzMkJJVCgzOSkKKyNkZWZpbmUJTUNfUkxEUkFNX01SU19FTkFCTEUJCQkJczJCSVQoNDcpCiAKIAl1NjQgbWNfcmxkcmFtX2ludGVybGVhdmU7CiAKQEAgLTg3MSwxMSArODcxLDExIEBACiAJdTY0IG1jX3JsZHJhbV9yZWZfcGVyOwogCXU4IHVudXNlZDIwWzB4MjIwIC0gMHgyMDhdOwogCXU2NCBtY19ybGRyYW1fdGVzdF9jdHJsOwotI2RlZmluZSBNQ19STERSQU1fVEVTVF9NT0RFCQlCSVQoNDcpCi0jZGVmaW5lIE1DX1JMRFJBTV9URVNUX1dSSVRFCUJJVCg3KQotI2RlZmluZSBNQ19STERSQU1fVEVTVF9HTwkJQklUKDE1KQotI2RlZmluZSBNQ19STERSQU1fVEVTVF9ET05FCQlCSVQoMjMpCi0jZGVmaW5lIE1DX1JMRFJBTV9URVNUX1BBU1MJCUJJVCgzMSkKKyNkZWZpbmUgTUNfUkxEUkFNX1RFU1RfTU9ERQkJczJCSVQoNDcpCisjZGVmaW5lIE1DX1JMRFJBTV9URVNUX1dSSVRFCXMyQklUKDcpCisjZGVmaW5lIE1DX1JMRFJBTV9URVNUX0dPCQlzMkJJVCgxNSkKKyNkZWZpbmUgTUNfUkxEUkFNX1RFU1RfRE9ORQkJczJCSVQoMjMpCisjZGVmaW5lIE1DX1JMRFJBTV9URVNUX1BBU1MJCXMyQklUKDMxKQogCiAJdTggdW51c2VkMjFbMHgyNDAgLSAweDIyOF07CiAJdTY0IG1jX3JsZHJhbV90ZXN0X2FkZDsKQEAgLTg4OCw3ICs4ODgsNyBAQAogCiAJdTggdW51c2VkMjRfMVsweDM2MCAtIDB4MzA4XTsKIAl1NjQgbWNfcmxkcmFtX2N0cmw7Ci0jZGVmaW5lCU1DX1JMRFJBTV9FTkFCTEVfT0RUCQlCSVQoNykKKyNkZWZpbmUJTUNfUkxEUkFNX0VOQUJMRV9PRFQJCXMyQklUKDcpCiAKIAl1OCB1bnVzZWQyNF8yWzB4NjQwIC0gMHgzNjhdOwogCXU2NCBtY19ybGRyYW1fcmVmX3Blcl9oZXJjOwpAQCAtOTA2LDI0ICs5MDYsMjQgQEAKIAkvKiBYR1hTIGNvbnRyb2wgcmVnaXN0ZXJzICovCiAKIAl1NjQgeGd4c19pbnRfc3RhdHVzOwotI2RlZmluZSBYR1hTX0lOVF9TVEFUVVNfVFhHWFMgICAgICAgICAgICAgIEJJVCgwKQotI2RlZmluZSBYR1hTX0lOVF9TVEFUVVNfUlhHWFMgICAgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBYR1hTX0lOVF9TVEFUVVNfVFhHWFMgICAgICAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIFhHWFNfSU5UX1NUQVRVU19SWEdYUyAgICAgICAgICAgICAgczJCSVQoMSkKIAl1NjQgeGd4c19pbnRfbWFzazsKLSNkZWZpbmUgWEdYU19JTlRfTUFTS19UWEdYUyAgICAgICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgWEdYU19JTlRfTUFTS19SWEdYUyAgICAgICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgWEdYU19JTlRfTUFTS19UWEdYUyAgICAgICAgICAgICAgICBzMkJJVCgwKQorI2RlZmluZSBYR1hTX0lOVF9NQVNLX1JYR1hTICAgICAgICAgICAgICAgIHMyQklUKDEpCiAKIAl1NjQgeGd4c190eGd4c19lcnJfcmVnOwotI2RlZmluZSBUWEdYU19FQ0NfU0dfRVJSCQlCSVQoNykKLSNkZWZpbmUgVFhHWFNfRUNDX0RCX0VSUgkJQklUKDE1KQotI2RlZmluZSBUWEdYU19FU1RPUkVfVUZMT1cJCUJJVCgzMSkKLSNkZWZpbmUgVFhHWFNfVFhfU01fRVJSCQkJQklUKDM5KQorI2RlZmluZSBUWEdYU19FQ0NfU0dfRVJSCQlzMkJJVCg3KQorI2RlZmluZSBUWEdYU19FQ0NfREJfRVJSCQlzMkJJVCgxNSkKKyNkZWZpbmUgVFhHWFNfRVNUT1JFX1VGTE9XCQlzMkJJVCgzMSkKKyNkZWZpbmUgVFhHWFNfVFhfU01fRVJSCQkJczJCSVQoMzkpCiAKIAl1NjQgeGd4c190eGd4c19lcnJfbWFzazsKIAl1NjQgeGd4c190eGd4c19lcnJfYWxhcm07CiAKIAl1NjQgeGd4c19yeGd4c19lcnJfcmVnOwotI2RlZmluZSBSWEdYU19FU1RPUkVfT0ZMT1cJCUJJVCg3KQotI2RlZmluZSBSWEdYU19SWF9TTV9FUlIJCQlCSVQoMzkpCisjZGVmaW5lIFJYR1hTX0VTVE9SRV9PRkxPVwkJczJCSVQoNykKKyNkZWZpbmUgUlhHWFNfUlhfU01fRVJSCQkJczJCSVQoMzkpCiAJdTY0IHhneHNfcnhneHNfZXJyX21hc2s7CiAJdTY0IHhneHNfcnhneHNfZXJyX2FsYXJtOwogCkBAIC05NDIsMTAgKzk0MiwxMCBAQAogI2RlZmluZSBTUElfQ09OVFJPTF9CWVRFQ05UKGNudCkJdkJJVChjbnQsMjksMykKICNkZWZpbmUgU1BJX0NPTlRST0xfQ01EKGNtZCkJCXZCSVQoY21kLDMyLDgpCiAjZGVmaW5lIFNQSV9DT05UUk9MX0FERFIoYWRkcikJCXZCSVQoYWRkciw0MCwyNCkKLSNkZWZpbmUgU1BJX0NPTlRST0xfU0VMMQkJQklUKDQpCi0jZGVmaW5lIFNQSV9DT05UUk9MX1JFUQkJCUJJVCg3KQotI2RlZmluZSBTUElfQ09OVFJPTF9OQUNLCQlCSVQoNSkKLSNkZWZpbmUgU1BJX0NPTlRST0xfRE9ORQkJQklUKDYpCisjZGVmaW5lIFNQSV9DT05UUk9MX1NFTDEJCXMyQklUKDQpCisjZGVmaW5lIFNQSV9DT05UUk9MX1JFUQkJCXMyQklUKDcpCisjZGVmaW5lIFNQSV9DT05UUk9MX05BQ0sJCXMyQklUKDUpCisjZGVmaW5lIFNQSV9DT05UUk9MX0RPTkUJCXMyQklUKDYpCiAJdTY0IHNwaV9kYXRhOwogI2RlZmluZSBTUElfREFUQV9XUklURShkYXRhLGxlbikJdkJJVChkYXRhLDAsbGVuKQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCAyMmU0MDU0Li5iOGMwZTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC0xNzE2LDcgKzE3MTYsNyBAQAogCQkJTUlTQ19MSU5LX1NUQUJJTElUWV9QUkQoMyk7CiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPm1pc2NfY29udHJvbCk7CiAJCXZhbDY0ID0gcmVhZHEoJmJhcjAtPnBpY19jb250cm9sMik7Ci0JCXZhbDY0ICY9IH4oQklUKDEzKXxCSVQoMTQpfEJJVCgxNSkpOworCQl2YWw2NCAmPSB+KHMyQklUKDEzKXxzMkJJVCgxNCl8czJCSVQoMTUpKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cGljX2NvbnRyb2wyKTsKIAl9CiAJaWYgKHN0cnN0cihuaWMtPnByb2R1Y3RfbmFtZSwgIkNYNCIpKSB7CkBAIC0yNDI3LDcgKzI0MjcsNyBAQAogCQl9CiAJCWlmICgocnhkcC0+Q29udHJvbF8xICYgUlhEX09XTl9YRU5BKSAmJgogCQkJKChuaWMtPnJ4ZF9tb2RlID09IFJYRF9NT0RFXzNCKSAmJgotCQkJCShyeGRwLT5Db250cm9sXzIgJiBCSVQoMCkpKSkgeworCQkJCShyeGRwLT5Db250cm9sXzIgJiBzMkJJVCgwKSkpKSB7CiAJCQltYWNfY29udHJvbC0+cmluZ3NbcmluZ19ub10ucnhfY3Vycl9wdXRfaW5mby4KIAkJCQkJb2Zmc2V0ID0gb2ZmOwogCQkJZ290byBlbmQ7CkBAIC0yNTQwLDcgKzI1NDAsNyBAQAogCQkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMl9TSVpFXzMKIAkJCQkJCQkJKGRldi0+bXR1ICsgNCk7CiAJCQl9Ci0JCQlyeGRwLT5Db250cm9sXzIgfD0gQklUKDApOworCQkJcnhkcC0+Q29udHJvbF8yIHw9IHMyQklUKDApOwogCQl9CiAJCXJ4ZHAtPkhvc3RfQ29udHJvbCA9ICh1bnNpZ25lZCBsb25nKSAoc2tiKTsKIAkJaWYgKGFsbG9jX3RhYiAmICgoMSA8PCByeHN5bmNfZnJlcXVlbmN5KSAtIDEpKQpAQCAtMzM3Nyw3ICszMzc3LDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzcC0+cGRldiwgMHg2OCwgMHg3Qyk7CiAKIAkJLyogQ2xlYXJpbmcgUENJX1NUQVRVUyBlcnJvciByZWZsZWN0ZWQgaGVyZSAqLwotCQl3cml0ZXEoQklUKDYyKSwgJmJhcjAtPnR4cGljX2ludF9yZWcpOworCQl3cml0ZXEoczJCSVQoNjIpLCAmYmFyMC0+dHhwaWNfaW50X3JlZyk7CiAJfQogCiAJLyogUmVzZXQgZGV2aWNlIHN0YXRpc3RpY3MgbWFpbnRhaW5lZCBieSBPUyAqLwpAQCAtMzU3NSw3ICszNTc1LDcgQEAKIAogCWRvIHsKIAkJdmFsNjQgPSByZWFkcSgmYmFyMC0+eG1zaV9hY2Nlc3MpOwotCQlpZiAoISh2YWw2NCAmIEJJVCgxNSkpKQorCQlpZiAoISh2YWw2NCAmIHMyQklUKDE1KSkpCiAJCQlicmVhazsKIAkJbWRlbGF5KDEpOwogCQljbnQrKzsKQEAgLTM1OTcsNyArMzU5Nyw3IEBACiAJZm9yIChpPTA7IGkgPCBNQVhfUkVRVUVTVEVEX01TSV9YOyBpKyspIHsKIAkJd3JpdGVxKG5pYy0+bXNpeF9pbmZvW2ldLmFkZHIsICZiYXIwLT54bXNpX2FkZHJlc3MpOwogCQl3cml0ZXEobmljLT5tc2l4X2luZm9baV0uZGF0YSwgJmJhcjAtPnhtc2lfZGF0YSk7Ci0JCXZhbDY0ID0gKEJJVCg3KSB8IEJJVCgxNSkgfCB2QklUKGksIDI2LCA2KSk7CisJCXZhbDY0ID0gKHMyQklUKDcpIHwgczJCSVQoMTUpIHwgdkJJVChpLCAyNiwgNikpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT54bXNpX2FjY2Vzcyk7CiAJCWlmICh3YWl0X2Zvcl9tc2l4X3RyYW5zKG5pYywgaSkpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiZmFpbGVkIGluICVzXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMzYxNCw3ICszNjE0LDcgQEAKIAogCS8qIFN0b3JlIGFuZCBkaXNwbGF5ICovCiAJZm9yIChpPTA7IGkgPCBNQVhfUkVRVUVTVEVEX01TSV9YOyBpKyspIHsKLQkJdmFsNjQgPSAoQklUKDE1KSB8IHZCSVQoaSwgMjYsIDYpKTsKKwkJdmFsNjQgPSAoczJCSVQoMTUpIHwgdkJJVChpLCAyNiwgNikpOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT54bXNpX2FjY2Vzcyk7CiAJCWlmICh3YWl0X2Zvcl9tc2l4X3RyYW5zKG5pYywgaSkpIHsKIAkJCURCR19QUklOVChFUlJfREJHLCAiZmFpbGVkIGluICVzXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNDYzNCw3ICs0NjM0LDcgQEAKIAkJZG8gewogCQkJdWRlbGF5KDEwMCk7CiAJCQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5zdGF0X2NmZyk7Ci0JCQlpZiAoISh2YWw2NCAmIEJJVCgwKSkpCisJCQlpZiAoISh2YWw2NCAmIHMyQklUKDApKSkKIAkJCQlicmVhazsKIAkJCWNudCsrOwogCQkJaWYgKGNudCA9PSA1KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IGY2YjQ1NTYuLmNjMTc5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTE0LDcgKzE0LDcgQEAKICNkZWZpbmUgX1MySU9fSAogCiAjZGVmaW5lIFRCRCAwCi0jZGVmaW5lIEJJVChsb2MpCQkoMHg4MDAwMDAwMDAwMDAwMDAwVUxMID4+IChsb2MpKQorI2RlZmluZSBzMkJJVChsb2MpCQkoMHg4MDAwMDAwMDAwMDAwMDAwVUxMID4+IChsb2MpKQogI2RlZmluZSB2QklUKHZhbCwgbG9jLCBzeikJKCgodTY0KXZhbCkgPDwgKDY0LWxvYy1zeikpCiAjZGVmaW5lIElOVihkKSAgKChkJjB4ZmYpPDwyNCkgfCAoKChkPj44KSYweGZmKTw8MTYpIHwgKCgoZD4+MTYpJjB4ZmYpPDw4KXwgKChkPj4yNCkmMHhmZikKIApAQCAtNDczLDQyICs0NzMsNDIgQEAKIAogCXU2NCBMaXN0X0NvbnRyb2w7CiAjZGVmaW5lIFRYX0ZJRk9fTEFTVF9UWERfTlVNKCB2YWwpICAgICB2QklUKHZhbCwwLDgpCi0jZGVmaW5lIFRYX0ZJRk9fRklSU1RfTElTVCAgICAgICAgICAgICBCSVQoMTQpCi0jZGVmaW5lIFRYX0ZJRk9fTEFTVF9MSVNUICAgICAgICAgICAgICBCSVQoMTUpCisjZGVmaW5lIFRYX0ZJRk9fRklSU1RfTElTVCAgICAgICAgICAgICBzMkJJVCgxNCkKKyNkZWZpbmUgVFhfRklGT19MQVNUX0xJU1QgICAgICAgICAgICAgIHMyQklUKDE1KQogI2RlZmluZSBUWF9GSUZPX0ZJUlNUTkxBU1RfTElTVCAgICAgICAgdkJJVCgzLDE0LDIpCi0jZGVmaW5lIFRYX0ZJRk9fU1BFQ0lBTF9GVU5DICAgICAgICAgICBCSVQoMjMpCi0jZGVmaW5lIFRYX0ZJRk9fRFNfTk9fU05PT1AgICAgICAgICAgICBCSVQoMzEpCi0jZGVmaW5lIFRYX0ZJRk9fQlVGRl9OT19TTk9PUCAgICAgICAgICBCSVQoMzApCisjZGVmaW5lIFRYX0ZJRk9fU1BFQ0lBTF9GVU5DICAgICAgICAgICBzMkJJVCgyMykKKyNkZWZpbmUgVFhfRklGT19EU19OT19TTk9PUCAgICAgICAgICAgIHMyQklUKDMxKQorI2RlZmluZSBUWF9GSUZPX0JVRkZfTk9fU05PT1AgICAgICAgICAgczJCSVQoMzApCiB9OwogCiAvKiBUeCBkZXNjcmlwdG9yIHN0cnVjdHVyZSAqLwogc3RydWN0IFR4RCB7CiAJdTY0IENvbnRyb2xfMTsKIC8qIGJpdCBtYXNrICovCi0jZGVmaW5lIFRYRF9MSVNUX09XTl9YRU5BICAgICAgIEJJVCg3KQotI2RlZmluZSBUWERfVF9DT0RFICAgICAgICAgICAgICAoQklUKDEyKXxCSVQoMTMpfEJJVCgxNCl8QklUKDE1KSkKKyNkZWZpbmUgVFhEX0xJU1RfT1dOX1hFTkEgICAgICAgczJCSVQoNykKKyNkZWZpbmUgVFhEX1RfQ09ERSAgICAgICAgICAgICAgKHMyQklUKDEyKXxzMkJJVCgxMyl8czJCSVQoMTQpfHMyQklUKDE1KSkKICNkZWZpbmUgVFhEX1RfQ09ERV9PSyh2YWwpICAgICAgKHwodmFsICYgVFhEX1RfQ09ERSkpCiAjZGVmaW5lIEdFVF9UWERfVF9DT0RFKHZhbCkgICAgICgodmFsICYgVFhEX1RfQ09ERSk8PDEyKQotI2RlZmluZSBUWERfR0FUSEVSX0NPREUgICAgICAgICAoQklUKDIyKSB8IEJJVCgyMykpCi0jZGVmaW5lIFRYRF9HQVRIRVJfQ09ERV9GSVJTVCAgIEJJVCgyMikKLSNkZWZpbmUgVFhEX0dBVEhFUl9DT0RFX0xBU1QgICAgQklUKDIzKQotI2RlZmluZSBUWERfVENQX0xTT19FTiAgICAgICAgICBCSVQoMzApCi0jZGVmaW5lIFRYRF9VRFBfQ09GX0VOICAgICAgICAgIEJJVCgzMSkKLSNkZWZpbmUgVFhEX1VGT19FTgkJQklUKDMxKSB8IEJJVCgzMCkKKyNkZWZpbmUgVFhEX0dBVEhFUl9DT0RFICAgICAgICAgKHMyQklUKDIyKSB8IHMyQklUKDIzKSkKKyNkZWZpbmUgVFhEX0dBVEhFUl9DT0RFX0ZJUlNUICAgczJCSVQoMjIpCisjZGVmaW5lIFRYRF9HQVRIRVJfQ09ERV9MQVNUICAgIHMyQklUKDIzKQorI2RlZmluZSBUWERfVENQX0xTT19FTiAgICAgICAgICBzMkJJVCgzMCkKKyNkZWZpbmUgVFhEX1VEUF9DT0ZfRU4gICAgICAgICAgczJCSVQoMzEpCisjZGVmaW5lIFRYRF9VRk9fRU4JCXMyQklUKDMxKSB8IHMyQklUKDMwKQogI2RlZmluZSBUWERfVENQX0xTT19NU1ModmFsKSAgICB2QklUKHZhbCwzNCwxNCkKICNkZWZpbmUgVFhEX1VGT19NU1ModmFsKQl2QklUKHZhbCwzNCwxNCkKICNkZWZpbmUgVFhEX0JVRkZFUjBfU0laRSh2YWwpICAgdkJJVCh2YWwsNDgsMTYpCiAKIAl1NjQgQ29udHJvbF8yOwotI2RlZmluZSBUWERfVFhfQ0tPX0NPTlRST0wgICAgICAoQklUKDUpfEJJVCg2KXxCSVQoNykpCi0jZGVmaW5lIFRYRF9UWF9DS09fSVBWNF9FTiAgICAgIEJJVCg1KQotI2RlZmluZSBUWERfVFhfQ0tPX1RDUF9FTiAgICAgICBCSVQoNikKLSNkZWZpbmUgVFhEX1RYX0NLT19VRFBfRU4gICAgICAgQklUKDcpCi0jZGVmaW5lIFRYRF9WTEFOX0VOQUJMRSAgICAgICAgIEJJVCgxNSkKKyNkZWZpbmUgVFhEX1RYX0NLT19DT05UUk9MICAgICAgKHMyQklUKDUpfHMyQklUKDYpfHMyQklUKDcpKQorI2RlZmluZSBUWERfVFhfQ0tPX0lQVjRfRU4gICAgICBzMkJJVCg1KQorI2RlZmluZSBUWERfVFhfQ0tPX1RDUF9FTiAgICAgICBzMkJJVCg2KQorI2RlZmluZSBUWERfVFhfQ0tPX1VEUF9FTiAgICAgICBzMkJJVCg3KQorI2RlZmluZSBUWERfVkxBTl9FTkFCTEUgICAgICAgICBzMkJJVCgxNSkKICNkZWZpbmUgVFhEX1ZMQU5fVEFHKHZhbCkgICAgICAgdkJJVCh2YWwsMTYsMTYpCiAjZGVmaW5lIFRYRF9JTlRfTlVNQkVSKHZhbCkgICAgIHZCSVQodmFsLDM0LDYpCi0jZGVmaW5lIFRYRF9JTlRfVFlQRV9QRVJfTElTVCAgIEJJVCg0NykKLSNkZWZpbmUgVFhEX0lOVF9UWVBFX1VUSUxaICAgICAgQklUKDQ2KQorI2RlZmluZSBUWERfSU5UX1RZUEVfUEVSX0xJU1QgICBzMkJJVCg0NykKKyNkZWZpbmUgVFhEX0lOVF9UWVBFX1VUSUxaICAgICAgczJCSVQoNDYpCiAjZGVmaW5lIFRYRF9TRVRfTUFSS0VSICAgICAgICAgdkJJVCgweDYsMCw0KQogCiAJdTY0IEJ1ZmZlcl9Qb2ludGVyOwpAQCAtNTI1LDE0ICs1MjUsMTQgQEAKIHN0cnVjdCBSeERfdCB7CiAJdTY0IEhvc3RfQ29udHJvbDsJLyogcmVzZXJ2ZWQgZm9yIGhvc3QgKi8KIAl1NjQgQ29udHJvbF8xOwotI2RlZmluZSBSWERfT1dOX1hFTkEgICAgICAgICAgICBCSVQoNykKLSNkZWZpbmUgUlhEX1RfQ09ERSAgICAgICAgICAgICAgKEJJVCgxMil8QklUKDEzKXxCSVQoMTQpfEJJVCgxNSkpCisjZGVmaW5lIFJYRF9PV05fWEVOQSAgICAgICAgICAgIHMyQklUKDcpCisjZGVmaW5lIFJYRF9UX0NPREUgICAgICAgICAgICAgIChzMkJJVCgxMil8czJCSVQoMTMpfHMyQklUKDE0KXxzMkJJVCgxNSkpCiAjZGVmaW5lIFJYRF9GUkFNRV9QUk9UTyAgICAgICAgIHZCSVQoMHhGRkZGLDI0LDgpCi0jZGVmaW5lIFJYRF9GUkFNRV9QUk9UT19JUFY0ICAgIEJJVCgyNykKLSNkZWZpbmUgUlhEX0ZSQU1FX1BST1RPX0lQVjYgICAgQklUKDI4KQotI2RlZmluZSBSWERfRlJBTUVfSVBfRlJBRwlCSVQoMjkpCi0jZGVmaW5lIFJYRF9GUkFNRV9QUk9UT19UQ1AgICAgIEJJVCgzMCkKLSNkZWZpbmUgUlhEX0ZSQU1FX1BST1RPX1VEUCAgICAgQklUKDMxKQorI2RlZmluZSBSWERfRlJBTUVfUFJPVE9fSVBWNCAgICBzMkJJVCgyNykKKyNkZWZpbmUgUlhEX0ZSQU1FX1BST1RPX0lQVjYgICAgczJCSVQoMjgpCisjZGVmaW5lIFJYRF9GUkFNRV9JUF9GUkFHCXMyQklUKDI5KQorI2RlZmluZSBSWERfRlJBTUVfUFJPVE9fVENQICAgICBzMkJJVCgzMCkKKyNkZWZpbmUgUlhEX0ZSQU1FX1BST1RPX1VEUCAgICAgczJCSVQoMzEpCiAjZGVmaW5lIFRDUF9PUl9VRFBfRlJBTUUgICAgICAgIChSWERfRlJBTUVfUFJPVE9fVENQIHwgUlhEX0ZSQU1FX1BST1RPX1VEUCkKICNkZWZpbmUgUlhEX0dFVF9MM19DS1NVTSh2YWwpICAgKCh1MTYpKHZhbD4+IDE2KSAmIDB4RkZGRikKICNkZWZpbmUgUlhEX0dFVF9MNF9DS1NVTSh2YWwpICAgKCh1MTYpKHZhbCkgJiAweEZGRkYpCkBAIC05OTgsMjYgKzk5OCwyNiBAQAogLyogIEludGVycnVwdCBtYXNrcyBmb3IgdGhlIGdlbmVyYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KICNkZWZpbmUgRElTQUJMRV9BTExfSU5UUlMgICAweEZGRkZGRkZGRkZGRkZGRkZVTEwKIAotI2RlZmluZSBUWFBJQ19JTlRfTSAgICAgICAgIEJJVCgwKQotI2RlZmluZSBUWERNQV9JTlRfTSAgICAgICAgIEJJVCgxKQotI2RlZmluZSBUWE1BQ19JTlRfTSAgICAgICAgIEJJVCgyKQotI2RlZmluZSBUWFhHWFNfSU5UX00gICAgICAgIEJJVCgzKQotI2RlZmluZSBUWFRSQUZGSUNfSU5UX00gICAgIEJJVCg4KQotI2RlZmluZSBQSUNfUlhfSU5UX00gICAgICAgIEJJVCgzMikKLSNkZWZpbmUgUlhETUFfSU5UX00gICAgICAgICBCSVQoMzMpCi0jZGVmaW5lIFJYTUFDX0lOVF9NICAgICAgICAgQklUKDM0KQotI2RlZmluZSBNQ19JTlRfTSAgICAgICAgICAgIEJJVCgzNSkKLSNkZWZpbmUgUlhYR1hTX0lOVF9NICAgICAgICBCSVQoMzYpCi0jZGVmaW5lIFJYVFJBRkZJQ19JTlRfTSAgICAgQklUKDQwKQorI2RlZmluZSBUWFBJQ19JTlRfTSAgICAgICAgIHMyQklUKDApCisjZGVmaW5lIFRYRE1BX0lOVF9NICAgICAgICAgczJCSVQoMSkKKyNkZWZpbmUgVFhNQUNfSU5UX00gICAgICAgICBzMkJJVCgyKQorI2RlZmluZSBUWFhHWFNfSU5UX00gICAgICAgIHMyQklUKDMpCisjZGVmaW5lIFRYVFJBRkZJQ19JTlRfTSAgICAgczJCSVQoOCkKKyNkZWZpbmUgUElDX1JYX0lOVF9NICAgICAgICBzMkJJVCgzMikKKyNkZWZpbmUgUlhETUFfSU5UX00gICAgICAgICBzMkJJVCgzMykKKyNkZWZpbmUgUlhNQUNfSU5UX00gICAgICAgICBzMkJJVCgzNCkKKyNkZWZpbmUgTUNfSU5UX00gICAgICAgICAgICBzMkJJVCgzNSkKKyNkZWZpbmUgUlhYR1hTX0lOVF9NICAgICAgICBzMkJJVCgzNikKKyNkZWZpbmUgUlhUUkFGRklDX0lOVF9NICAgICBzMkJJVCg0MCkKIAogLyogIFBJQyBsZXZlbCBJbnRlcnJ1cHRzIFRPRE8qLwogCiAvKiAgRE1BIGxldmVsIElucmVzc3VwdHMgKi8KLSNkZWZpbmUgVFhETUFfUEZDX0lOVF9NICAgICBCSVQoMCkKLSNkZWZpbmUgVFhETUFfUENDX0lOVF9NICAgICBCSVQoMikKKyNkZWZpbmUgVFhETUFfUEZDX0lOVF9NICAgICBzMkJJVCgwKQorI2RlZmluZSBUWERNQV9QQ0NfSU5UX00gICAgIHMyQklUKDIpCiAKIC8qICBQRkMgYmxvY2sgaW50ZXJydXB0cyAqLwotI2RlZmluZSBQRkNfTUlTQ19FUlJfMSAgICAgIEJJVCgwKQkvKiBJbnRlcnJ1cHQgdG8gaW5kaWNhdGUgRklGTyBmdWxsICovCisjZGVmaW5lIFBGQ19NSVNDX0VSUl8xICAgICAgczJCSVQoMCkJLyogSW50ZXJydXB0IHRvIGluZGljYXRlIEZJRk8gZnVsbCAqLwogCiAvKiBQQ0MgYmxvY2sgaW50ZXJydXB0cy4gKi8KICNkZWZpbmUJUENDX0ZCX0VDQ19FUlIJICAgdkJJVCgweGZmLCAxNiwgOCkJLyogSW50ZXJydXB0IHRvIGluZGljYXRlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za3kyLmMgYi9kcml2ZXJzL25ldC9za3kyLmMKaW5kZXggNzk2NzI0MC4uMjRjZmI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2t5Mi5jCisrKyBiL2RyaXZlcnMvbmV0L3NreTIuYwpAQCAtMTM4NCwxMyArMTM4NCw5IEBACiAJc2t5Ml9wcmVmZXRjaF9pbml0KGh3LCB0eHFhZGRyW3BvcnRdLCBza3kyLT50eF9sZV9tYXAsCiAJCQkgICBUWF9SSU5HX1NJWkUgLSAxKTsKIAotCW5hcGlfZW5hYmxlKCZody0+bmFwaSk7Ci0KIAllcnIgPSBza3kyX3J4X3N0YXJ0KHNreTIpOwotCWlmIChlcnIpIHsKLQkJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CisJaWYgKGVycikKIAkJZ290byBlcnJfb3V0OwotCX0KIAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzIGZyb20gcGh5L21hYyBmb3IgcG9ydCAqLwogCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwpAQCAtMTY3OSwxMyArMTY3NSwxMyBAQAogCS8qIFN0b3AgbW9yZSBwYWNrZXRzIGZyb20gYmVpbmcgcXVldWVkICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7Ci0KIAkvKiBEaXNhYmxlIHBvcnQgSVJRICovCiAJaW1hc2sgPSBza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CiAJaW1hc2sgJj0gfnBvcnRpcnFfbXNrW3BvcnRdOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCisJc3luY2hyb25pemVfaXJxKGh3LT5wZGV2LT5pcnEpOworCiAJc2t5Ml9nbWFjX3Jlc2V0KGh3LCBwb3J0KTsKIAogCS8qIFN0b3AgdHJhbnNtaXR0ZXIgKi8KQEAgLTE2OTksNiArMTY5NSw5IEBACiAJY3RybCAmPSB+KEdNX0dQQ1JfVFhfRU5BIHwgR01fR1BDUl9SWF9FTkEpOwogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCBjdHJsKTsKIAorCS8qIE1ha2Ugc3VyZSBubyBwYWNrZXRzIGFyZSBwZW5kaW5nICovCisJbmFwaV9zeW5jaHJvbml6ZSgmaHctPm5hcGkpOworCiAJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHUEhZX0NUUkwpLCBHUENfUlNUX1NFVCk7CiAKIAkvKiBXb3JrYXJvdW5kIHNoYXJlZCBHTUFDIHJlc2V0ICovCkBAIC0xNzM2LDggKzE3MzUsNiBAQAogCS8qIHR1cm4gb2ZmIExFRCdzICovCiAJc2t5Ml93cml0ZTE2KGh3LCBCMF9ZMkxFRCwgTEVEX1NUQVRfT0ZGKTsKIAotCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKLQogCXNreTJfdHhfY2xlYW4oZGV2KTsKIAlza3kyX3J4X2NsZWFuKHNreTIpOwogCkBAIC0yMDQ4LDkgKzIwNDUsNiBAQAogCWVyciA9IHNreTJfcnhfc3RhcnQoc2t5Mik7CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBpbWFzayk7CiAKLQkvKiBVbmNvbmRpdGlvbmFsbHkgcmUtZW5hYmxlIE5BUEkgYmVjYXVzZSBldmVuIGlmIHdlCi0JICogY2FsbCBkZXZfY2xvc2UoKSB0aGF0IHdpbGwgZG8gYSBuYXBpX2Rpc2FibGUoKS4KLQkgKi8KIAluYXBpX2VuYWJsZSgmaHctPm5hcGkpOwogCiAJaWYgKGVycikKQEAgLTI5MTUsNiArMjkwOSw3IEBACiAJcnRubF9sb2NrKCk7CiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKIAlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CisJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJZGV2ID0gaHctPmRldltpXTsKQEAgLTI5MjQsNiArMjkxOSw3IEBACiAKIAlza3kyX3Jlc2V0KGh3KTsKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOworCW5hcGlfZW5hYmxlKCZody0+bmFwaSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJZGV2ID0gaHctPmRldltpXTsKQEAgLTM5NjEsNyArMzk1Nyw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqc2t5MikpOwogCiAJaWYgKCFkZXYpIHsKLQkJZGV2X2VycigmaHctPnBkZXYtPmRldiwgImV0aGVyZGV2IGFsbG9jIGZhaWxlZCIpOworCQlkZXZfZXJyKCZody0+cGRldi0+ZGV2LCAiZXRoZXJkZXYgYWxsb2MgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MTkxLDcgKzQxODcsNiBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfZnJlZV9wY2k7CiAJfQotCW5ldGlmX25hcGlfYWRkKGRldiwgJmh3LT5uYXBpLCBza3kyX3BvbGwsIE5BUElfV0VJR0hUKTsKIAogCWlmICghZGlzYWJsZV9tc2kgJiYgcGNpX2VuYWJsZV9tc2kocGRldikgPT0gMCkgewogCQllcnIgPSBza3kyX3Rlc3RfbXNpKGh3KTsKQEAgLTQyMDcsNiArNDIwMiw4IEBACiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKIAl9CiAKKwluZXRpZl9uYXBpX2FkZChkZXYsICZody0+bmFwaSwgc2t5Ml9wb2xsLCBOQVBJX1dFSUdIVCk7CisKIAllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNreTJfaW50ciwKIAkJCSAgKGh3LT5mbGFncyAmIFNLWTJfSFdfVVNFX01TSSkgPyAwIDogSVJRRl9TSEFSRUQsCiAJCQkgIGRldi0+bmFtZSwgaHcpOwpAQCAtNDIxNSw2ICs0MjEyLDcgQEAKIAkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7CiAJfQogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7CisJbmFwaV9lbmFibGUoJmh3LT5uYXBpKTsKIAogCXNreTJfc2hvd19hZGRyKGRldik7CiAKQEAgLTQyNjUsMjMgKzQyNjMsMTggQEAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBza3kyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldjAsICpkZXYxOworCWludCBpOwogCiAJaWYgKCFodykKIAkJcmV0dXJuOwogCiAJZGVsX3RpbWVyX3N5bmMoJmh3LT53YXRjaGRvZ190aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmaHctPnJlc3RhcnRfd29yayk7CiAKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCWZvciAoaSA9IGh3LT5wb3J0czsgaSA+PSAwOyAtLWkpCisJCXVucmVnaXN0ZXJfbmV0ZGV2KGh3LT5kZXZbaV0pOwogCiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKLQlzeW5jaHJvbml6ZV9pcnEoaHctPnBkZXYtPmlycSk7Ci0KLQlkZXYwID0gaHctPmRldlswXTsKLQlkZXYxID0gaHctPmRldlsxXTsKLQlpZiAoZGV2MSkKLQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2MSk7Ci0JdW5yZWdpc3Rlcl9uZXRkZXYoZGV2MCk7CiAKIAlza3kyX3Bvd2VyX2F1eChodyk7CiAKQEAgLTQyOTYsOSArNDI4OSw5IEBACiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKLQlpZiAoZGV2MSkKLQkJZnJlZV9uZXRkZXYoZGV2MSk7Ci0JZnJlZV9uZXRkZXYoZGV2MCk7CisJZm9yIChpID0gaHctPnBvcnRzOyBpID49IDA7IC0taSkKKwkJZnJlZV9uZXRkZXYoaHctPmRldltpXSk7CisKIAlpb3VubWFwKGh3LT5yZWdzKTsKIAlrZnJlZShodyk7CiAKQEAgLTQzMjgsNiArNDMyMSw3IEBACiAJfQogCiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwluYXBpX2Rpc2FibGUoJmh3LT5uYXBpKTsKIAlza3kyX3Bvd2VyX2F1eChodyk7CiAKIAlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKQEAgLTQzNjIsOCArNDM1Niw4IEBACiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgUENJX0RFVl9SRUczLCAwKTsKIAogCXNreTJfcmVzZXQoaHcpOwotCiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19CQVNFKTsKKwluYXBpX2VuYWJsZSgmaHctPm5hcGkpOwogCiAJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDdjNjBkZjQuLmRkMThhZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTEyMjMsNyArMTIyMyw3IEBACiAJCX0KICNlbmRpZgogCi0JCS8qIEhhbmRsZSBQSFkgaW50ZXJ1cHQgY29uZGl0aW9uICovCisJCS8qIEhhbmRsZSBQSFkgaW50ZXJydXB0IGNvbmRpdGlvbiAqLwogCQlpZiAoc3RhdHVzICYgSU5UX1NUU19QSFlfSU5UXykgewogCQkJREJHKFNNQ19ERUJVR19NSVNDLCAiJXM6IFBIWSBpcnFcbiIsIGRldi0+bmFtZSk7CiAJCQlzbWM5MTF4X3BoeV9pbnRlcnJ1cHQoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwppbmRleCBmYWIwNTVmLi5iY2NhZTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KIApAQCAtMTYzOSw3ICsxNjM5LDcgQEAKIAogLyoqCiAgKiBzcGlkZXJfbmV0X2ludGVycnVwdCAtIGludGVycnVwdCBoYW5kbGVyIGZvciBzcGlkZXJfbmV0Ci0gKiBAaXJxOiBpbnRlcnVwdCBudW1iZXIKKyAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKICAqIEBwdHI6IHBvaW50ZXIgdG8gbmV0X2RldmljZQogICogQHJlZ3M6IFBVIHJlZ2lzdGVycwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCA4MDM4ZjI4Li5kODg3YzA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC0xNjU0LDcgKzE2NTQsNyBAQAogCQkJCQlwYW5pY19xdWV1ZXMoZGV2KTsKIAkJCQl9CiAjZW5kaWYKLQkJCQkvKiBwYXNzIEJEIHRvIGNvbnRyb2xlciAqLworCQkJCS8qIHBhc3MgQkQgdG8gY29udHJvbGxlciAqLwogI2lmbmRlZiBUQzM1ODE1X1VTRV9QQUNLRURCVUZGRVIKIAkJCQlpZiAoIWxwLT5yeF9za2JzW2N1cmlkXS5za2IpIHsKIAkJCQkJbHAtPnJ4X3NrYnNbY3VyaWRdLnNrYiA9CkBAIC0xNjk0LDcgKzE2OTQsNyBAQAogCQl9CiAjZW5kaWYKIAkJZm9yIChpID0gMDsgaSA8IChiZF9jb3VudCArIDEpIC8gMiArIDE7IGkrKykgewotCQkJLyogcGFzcyBGRCB0byBjb250cm9sZXIgKi8KKwkJCS8qIHBhc3MgRkQgdG8gY29udHJvbGxlciAqLwogI2lmZGVmIERFQlVHCiAJCQlscC0+cmZkX2N1ci0+ZmQuRkROZXh0ID0gY3B1X3RvX2xlMzIoMHhkZWFkZGVhZCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jIGIvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCmluZGV4IGRmMTBhZjcuLjM1ZDE1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYworKysgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKQEAgLTE2MjksNyArMTYyOSw3IEBACiAJCWdvdG8gcmVnaXN0ZXJfZmFpbDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVHNpMTA4IEdpZ2FiaXQgRXRoZXJuZXQsIE1BQzogJXNcbiIKKwlwcmludGsoS0VSTl9JTkZPICIlczogVHNpMTA4IEdpZ2FiaXQgRXRoZXJuZXQsIE1BQzogJXNcbiIsCiAJICAgICAgIGRldi0+bmFtZSwgcHJpbnRfbWFjKG1hYywgZGV2LT5kZXZfYWRkcikpOwogI2lmZGVmIERFQlVHCiAJZGF0YS0+bXNnX2VuYWJsZSA9IERFQlVHOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3R1bGlwL0tjb25maWcKaW5kZXggMWM1MzdkNS4uNDlkN2EyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC90dWxpcC9LY29uZmlnCkBAIC02Nyw3ICs2Nyw3IEBACiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBUVUxJUF9OQVBJCi0JYm9vbCAiVXNlIE5BUEkgUlggcG9sbGluZyAiCisJYm9vbCAiVXNlIFJYIHBvbGxpbmcgKE5BUEkpIgogCWRlcGVuZHMgb24gVFVMSVAKIAloZWxwCiAJICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKQEAgLTc4LDE4ICs3OCwxNiBAQAogCSAgZGVwbG95ZWQgb24gcG90ZW50aWFsbHkgdW5mcmllbmRseSBuZXR3b3JrcyAoZS5nLiBpbiBhIGZpcmV3YWxsKSwKIAkgIHRoZW4gc2F5IFkgaGVyZS4KIAotCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dD4gZm9yIG1vcmUKLQkgIGluZm9ybWF0aW9uLgotCiAJICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBUVUxJUF9OQVBJX0hXX01JVElHQVRJT04KLQlib29sICJVc2UgSW50ZXJydXB0IE1pdGlnYXRpb24gIgorCWJvb2wgIlVzZSBJbnRlcnJ1cHQgTWl0aWdhdGlvbiIKIAlkZXBlbmRzIG9uIFRVTElQX05BUEkKIAktLS1oZWxwLS0tCi0JICBVc2UgSFcgdG8gcmVkdWNlIFJYIGludGVycnVwdHMuIE5vdCBzdHJpY3QgbmVjZXNzYXJ5IHNpbmNlIE5BUEkgcmVkdWNlcwotCSAgUlggaW50ZXJydXB0cyBidXQgaXRzZWxmLiBBbHRob3VnaCB0aGlzIHJlZHVjZXMgUlggaW50ZXJydXB0cyBldmVuIGF0Ci0JICBsb3cgbGV2ZWxzIHRyYWZmaWMgYXQgdGhlIGNvc3Qgb2YgYSBzbWFsbCBsYXRlbmN5LgorCSAgVXNlIEhXIHRvIHJlZHVjZSBSWCBpbnRlcnJ1cHRzLiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIE5BUEkKKwkgIHJlZHVjZXMgUlggaW50ZXJydXB0cyBieSBpdHNlbGYuIEludGVycnVwdCBtaXRpZ2F0aW9uIHJlZHVjZXMgUlgKKwkgIGludGVycnVwdHMgZXZlbiBhdCBsb3cgbGV2ZWxzIG9mIHRyYWZmaWMgYXQgdGhlIGNvc3Qgb2YgYSBzbWFsbAorCSAgbGF0ZW5jeS4KIAogCSAgSWYgaW4gZG91YnQsIHNheSBZLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKaW5kZXggNzZlNTU2MS4uYTdhZmVlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwpAQCAtMzQsOSArMzQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMgYi9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCmluZGV4IDNjOGUzYjYuLjM1ZDBjZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAgICBhIGRlbGF5LiAgTm90ZSB0aGF0IHByZS0yLjAuMzQga2VybmVscyBoYWQgYSBjYWNoZS1hbGlnbm1lbnQgYnVnIHRoYXQKICAgIG1hZGUgdWRlbGF5KCkgdW5yZWxpYWJsZS4KICAgIFRoZSBvbGQgbWV0aG9kIG9mIHVzaW5nIGFuIElTQSBhY2Nlc3MgYXMgYSBkZWxheSwgX19TTE9XX0RPV05fSU9fXywgaXMKLSAgIGRlcHJpY2F0ZWQuCisgICBkZXByZWNhdGVkLgogKi8KICNkZWZpbmUgZWVwcm9tX2RlbGF5KGVlX2FkZHIpCWlvcmVhZDMyKGVlX2FkZHIpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9LY29uZmlnIGIvZHJpdmVycy9uZXQvdXNiL0tjb25maWcKaW5kZXggOGRjMDlhMy4uNWE5NmQ3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvdXNiL0tjb25maWcKQEAgLTcxLDcgKzcxLDcgQEAKIAlzZWxlY3QgTUlJCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3Uga25vdyB5b3UgaGF2ZSBQZWdhc3VzIG9yIFBlZ2FzdXMtSUkgYmFzZWQgYWRhcHRlci4KLQkgIElmIGluIGRvdWJ0IHRoZW4gbG9vayBhdCA8ZmlsZTpkcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oPiBmb3IgdGhlCisJICBJZiBpbiBkb3VidCB0aGVuIGxvb2sgYXQgPGZpbGU6ZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuaD4gZm9yIHRoZQogCSAgY29tcGxldGUgbGlzdCBvZiBzdXBwb3J0ZWQgZGV2aWNlcy4KIAogCSAgSWYgeW91ciBwYXJ0aWN1bGFyIGFkYXB0ZXIgaXMgbm90IGluIHRoZSBsaXN0IGFuZCB5b3UgYXJlIF9zdXJlXyBpdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYyBiL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKaW5kZXggNjI0MGI5Ny4uZjU1YTU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYworKysgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCkBAIC0xMTQsOCArMTE0LDggQEAKIAlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXEgPSAoc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqKXVyYi0+Y29udGV4dDsKIAogCWlmICh1cmItPnN0YXR1cyA8IDApCi0JCXByaW50ayhLRVJOX0RFQlVHICJtY3M3ODMwX2FzeW5jX2NtZF9jYWxsYmFjaygpIGZhaWxlZCB3aXRoICVkIiwKLQkJCXVyYi0+c3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzKCkgZmFpbGVkIHdpdGggJWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKIAogCWtmcmVlKHJlcSk7CiAJdXNiX2ZyZWVfdXJiKHVyYik7CkBAIC0xMjksMTUgKzEyOSwxNSBAQAogCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewotCQlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwgIkVycm9yIGFsbG9jYXRpbmcgVVJCICIKLQkJCQkiaW4gd3JpdGVfY21kX2FzeW5jISIpOworCQlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwKKwkJCSJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCXJlcSA9IGttYWxsb2Moc2l6ZW9mICpyZXEsIEdGUF9BVE9NSUMpOwogCWlmICghcmVxKSB7Ci0JCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgIgotCQkJCSJjb250cm9sIHJlcXVlc3QiKTsKKwkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbCByZXF1ZXN0XG4iKTsKIAkJZ290byBvdXQ7CiAJfQogCXJlcS0+YlJlcXVlc3RUeXBlID0gTUNTNzgzMF9XUl9CTVJFUTsKQEAgLTE1Myw4ICsxNTMsOCBAQAogCiAJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIkVycm9yIHN1Ym1pdHRpbmcgdGhlIGNvbnRyb2wgIgotCQkJCSJtZXNzYWdlOiByZXQ9JWQiLCByZXQpOworCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKKwkJCSJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHJldD0lZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggNGFlMDU3OS4uNWM0YTkyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTE2NDgsNyArMTY0OCw3IEBACiAgKgogICoJU2NhbiB0aGUgcXVldWVzIGxvb2tpbmcgZm9yIHRyYW5zbWl0dGVkIHBhY2tldHMgdGhhdAogICoJd2UgY2FuIGNvbXBsZXRlIGFuZCBjbGVhbiB1cC4gVXBkYXRlIGFueSBzdGF0aXN0aWNzIGFzCi0gKgluZWNjZXNzYXJ5LworICoJbmVjZXNzYXJ5LwogICovCiAKIHN0YXRpYyBpbnQgdmVsb2NpdHlfdHhfc3J2KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCB1MzIgc3RhdHVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggYzE0MWEyNi4uOWQ5ZmY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC00OSw3ICs0OSw2IEBACiAjaW5jbHVkZSAicGlvLmgiCiAjaW5jbHVkZSAic3lzZnMuaCIKICNpbmNsdWRlICJ4bWl0LmgiCi0jaW5jbHVkZSAic3lzZnMuaCIKICNpbmNsdWRlICJsby5oIgogI2luY2x1ZGUgInBjbWNpYS5oIgogCkBAIC0zNDk1LDcgKzM0OTQsNyBAQAogCXN0cnVjdCBiNDNfd2wgKndsID0gaHdfdG9fYjQzX3dsKGh3KTsKIAlzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJaW50IGRpZF9pbml0ID0gMDsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIApAQCAtMzUyMSw3ICszNTIwLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGI0M19zdG9wKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQorc3RhdGljIHZvaWQgYjQzX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCmluZGV4IGYwNzQ5NTEuLmQwOTQ3OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwpAQCAtMzMwNiw3ICszMzA2LDcgQEAKIAlzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bCA9IGh3X3RvX2I0M2xlZ2FjeV93bChodyk7CiAJc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCWludCBkaWRfaW5pdCA9IDA7Ci0JaW50IGVycjsKKwlpbnQgZXJyID0gMDsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5jCmluZGV4IDhmMTk4YmUuLmNiNTFkYzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgImJjbTQzeHhfcmFkaW8uaCIKICNpbmNsdWRlICJiY200M3h4LmgiCiAKLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIAogc3RhdGljIHZvaWQgYmNtNDN4eF9sZWRfY2hhbmdlc3RhdGUoc3RydWN0IGJjbTQzeHhfbGVkICpsZWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuaAppbmRleCA5ZWNmMmJmLi40N2MxMzVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmgKQEAgLTg3LDcgKzg3LDcgQEAKIAogLyogUlggaGVhZGVyIGFzIHJlY2VpdmVkIGZyb20gdGhlIGhhcmR3YXJlLiAqLwogc3RydWN0IGJjbTQzeHhfcnhoZHIgewotCS8qIEZyYW1lIExlbmd0aC4gTXVzdCBiZSBnZW5lcmF0ZWQgZXhwbGljaXRlbHkgaW4gUElPIG1vZGUuICovCisJLyogRnJhbWUgTGVuZ3RoLiBNdXN0IGJlIGdlbmVyYXRlZCBleHBsaWNpdGx5IGluIFBJTyBtb2RlLiAqLwogCV9fbGUxNiBmcmFtZV9sZW5ndGg7CiAJUEFEX0JZVEVTKDIpOwogCS8qIEZsYWdzIGZpZWxkIDEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY29tbW9uLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NvbW1vbi5oCmluZGV4IGNlYjdmMWUuLjUxN2Y4OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jb21tb24uaApAQCAtNCw5ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKLSNkZWZpbmUgQklUKHgpICgxIDw8ICh4KSkKLQotCiAvKiBJRUVFIDgwMi4xMSBkZWZpbmVzICovCiAKIC8qIEluZm9ybWF0aW9uIEVsZW1lbnQgSURzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggNDBmNTE2ZC4uZDhmNWVmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMjkyMCw3ICsyOTIwLDcgQEAKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogcHJvY2VzcyAlZCAoJXMpIHVzZWQgZGVwcmVjYXRlZCBpd3ByaXYgbW9uaXRvciAiCiAJICAgICAgICItIHVwZGF0ZSBzb2Z0d2FyZSB0byB1c2UgaXdjb25maWcgbW9kZSBtb25pdG9yXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGN1cnJlbnQtPnBpZCwgY3VycmVudC0+Y29tbSk7CisJICAgICAgIGRldi0+bmFtZSwgdGFza19waWRfbnIoY3VycmVudCksIGN1cnJlbnQtPmNvbW0pOwogCiAJLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSBjb2RlIC0gdGhpcyBjYW4gYmUgcmVtb3ZlZCBhdCBzb21lIHBvaW50ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYwppbmRleCAyZDQ2YTE2Li5hNmM3OTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCkBAIC0xODU4LDE0ICsxODU4LDYgQEAKIAogCW1vZGlmeV9hY2NlcHRhYmxlX2xhdGVuY3koImlwdzIxMDAiLCBJTkZJTklURV9MQVRFTkNZKTsKIAotI2lmZGVmIEFDUElfQ1NUQVRFX0xJTUlUX0RFRklORUQKLQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0MzX0RJU0FCTEVEKSB7Ci0JCUlQV19ERUJVR19JTkZPKCI6IFJlc2V0dGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOwotCQlhY3BpX3NldF9jc3RhdGVfbGltaXQocHJpdi0+Y3N0YXRlX2xpbWl0KTsKLQkJcHJpdi0+Y29uZmlnICY9IH5DRkdfQzNfRElTQUJMRUQ7Ci0JfQotI2VuZGlmCi0KIAkvKiBXZSBoYXZlIHRvIHNpZ25hbCBhbnkgc3VwcGxpY2FudCBpZiB3ZSBhcmUgZGlzYXNzb2NpYXRpbmcgKi8KIAlpZiAoYXNzb2NpYXRlZCkKIAkJd2lyZWxlc3Nfc2VuZF9ldmVudChwcml2LT5uZXRfZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKQEAgLTIwOTEsMjYgKzIwODMsNTIgQEAKIAkvKiBSRl9LSUxMIGlzIG5vdyBlbmFibGVkIChlbHNlIHdlIHdvdWxkbid0IGJlIGhlcmUpICovCiAJcHJpdi0+c3RhdHVzIHw9IFNUQVRVU19SRl9LSUxMX0hXOwogCi0jaWZkZWYgQUNQSV9DU1RBVEVfTElNSVRfREVGSU5FRAotCWlmIChwcml2LT5jb25maWcgJiBDRkdfQzNfRElTQUJMRUQpIHsKLQkJSVBXX0RFQlVHX0lORk8oIjogUmVzZXR0aW5nIEMzIHRyYW5zaXRpb25zLlxuIik7Ci0JCWFjcGlfc2V0X2NzdGF0ZV9saW1pdChwcml2LT5jc3RhdGVfbGltaXQpOwotCQlwcml2LT5jb25maWcgJj0gfkNGR19DM19ESVNBQkxFRDsKLQl9Ci0jZW5kaWYKLQogCS8qIE1ha2Ugc3VyZSB0aGUgUkYgS2lsbCBjaGVjayB0aW1lciBpcyBydW5uaW5nICovCiAJcHJpdi0+c3RvcF9yZl9raWxsID0gMDsKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5yZl9raWxsKTsKIAlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmZfa2lsbCwgcm91bmRfamlmZmllcyhIWikpOwogfQogCitzdGF0aWMgdm9pZCBzZW5kX3NjYW5fZXZlbnQodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gZGF0YTsKKwl1bmlvbiBpd3JlcV9kYXRhIHdycXU7CisKKwl3cnF1LmRhdGEubGVuZ3RoID0gMDsKKwl3cnF1LmRhdGEuZmxhZ3MgPSAwOworCXdpcmVsZXNzX3NlbmRfZXZlbnQocHJpdi0+bmV0X2RldiwgU0lPQ0dJV1NDQU4sICZ3cnF1LCBOVUxMKTsKK30KKworc3RhdGljIHZvaWQgaXB3MjEwMF9zY2FuX2V2ZW50X2xhdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzZW5kX3NjYW5fZXZlbnQoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcHcyMTAwX3ByaXYsCisJCQkJCXNjYW5fZXZlbnRfbGF0ZXIud29yaykpOworfQorCitzdGF0aWMgdm9pZCBpcHcyMTAwX3NjYW5fZXZlbnRfbm93KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzZW5kX3NjYW5fZXZlbnQoY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcHcyMTAwX3ByaXYsCisJCQkJCXNjYW5fZXZlbnRfbm93KSk7Cit9CisKIHN0YXRpYyB2b2lkIGlzcl9zY2FuX2NvbXBsZXRlKHN0cnVjdCBpcHcyMTAwX3ByaXYgKnByaXYsIHUzMiBzdGF0dXMpCiB7CiAJSVBXX0RFQlVHX1NDQU4oInNjYW4gY29tcGxldGVcbiIpOwogCS8qIEFnZSB0aGUgc2NhbiByZXN1bHRzLi4uICovCiAJcHJpdi0+aWVlZS0+c2NhbnMrKzsKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19TQ0FOTklORzsKKworCS8qIE9ubHkgdXNlcnNwYWNlLXJlcXVlc3RlZCBzY2FuIGNvbXBsZXRpb24gZXZlbnRzIGdvIG91dCBpbW1lZGlhdGVseSAqLworCWlmICghcHJpdi0+dXNlcl9yZXF1ZXN0ZWRfc2NhbikgeworCQlpZiAoIWRlbGF5ZWRfd29ya19wZW5kaW5nKCZwcml2LT5zY2FuX2V2ZW50X2xhdGVyKSkKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT53b3JrcXVldWUsCisJCQkJCSZwcml2LT5zY2FuX2V2ZW50X2xhdGVyLAorCQkJCQlyb3VuZF9qaWZmaWVzKG1zZWNzX3RvX2ppZmZpZXMoNDAwMCkpKTsKKwl9IGVsc2UgeworCQlwcml2LT51c2VyX3JlcXVlc3RlZF9zY2FuID0gMDsKKwkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+c2Nhbl9ldmVudF9sYXRlcik7CisJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9ldmVudF9ub3cpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19JUFcyMTAwX0RFQlVHCkBAIC0yMzI5LDIzICsyMzQ3LDEwIEBACiAJdTMyIG1hdGNoLCByZWc7CiAJaW50IGo7CiAjZW5kaWYKLSNpZmRlZiBBQ1BJX0NTVEFURV9MSU1JVF9ERUZJTkVECi0JaW50IGxpbWl0OwotI2VuZGlmCiAKIAlJUFdfREVCVUdfSU5GTygiOiBQQ0kgbGF0ZW5jeSBlcnJvciBkZXRlY3RlZCBhdCAweCUwNHpYLlxuIiwKIAkJICAgICAgIGkgKiBzaXplb2Yoc3RydWN0IGlwdzIxMDBfc3RhdHVzKSk7CiAKLSNpZmRlZiBBQ1BJX0NTVEFURV9MSU1JVF9ERUZJTkVECi0JSVBXX0RFQlVHX0lORk8oIjogRGlzYWJsaW5nIEMzIHRyYW5zaXRpb25zLlxuIik7Ci0JbGltaXQgPSBhY3BpX2dldF9jc3RhdGVfbGltaXQoKTsKLQlpZiAobGltaXQgPiAyKSB7Ci0JCXByaXYtPmNzdGF0ZV9saW1pdCA9IGxpbWl0OwotCQlhY3BpX3NldF9jc3RhdGVfbGltaXQoMik7Ci0JCXByaXYtPmNvbmZpZyB8PSBDRkdfQzNfRElTQUJMRUQ7Ci0JfQotI2VuZGlmCi0KICNpZmRlZiBJUFcyMTAwX0RFQlVHX0MzCiAJLyogSGFsdCB0aGUgZmltcndhcmUgc28gd2UgY2FuIGdldCBhIGdvb2QgaW1hZ2UgKi8KIAl3cml0ZV9yZWdpc3Rlcihwcml2LT5uZXRfZGV2LCBJUFdfUkVHX1JFU0VUX1JFRywKQEAgLTQzNzgsNiArNDM4Myw3IEBACiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnd4X2V2ZW50X3dvcmspOwogCQljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5oYW5nX2NoZWNrKTsKIAkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcHJpdi0+cmZfa2lsbCk7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnNjYW5fZXZlbnRfbGF0ZXIpOwogCQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53b3JrcXVldWUpOwogCQlwcml2LT53b3JrcXVldWUgPSBOVUxMOwogCX0KQEAgLTYwNDEsNyArNjA0Nyw3IEBACiAJICogZW5kcyB1cCBjYXVzaW5nIHByb2JsZW1zLiAgU28sIHdlIGp1c3QgaGFuZGxlCiAJICogdGhlIFdYIGV4dGVuc2lvbnMgdGhyb3VnaCB0aGUgaXB3MjEwMF9pb2N0bCBpbnRlcmZhY2UgKi8KIAotCS8qIG1lbXNldCgpIHB1dHMgZXZlcnl0aGluZyB0byAwLCBzbyB3ZSBvbmx5IGhhdmUgZXhwbGljaXRlbHkgc2V0CisJLyogbWVtc2V0KCkgcHV0cyBldmVyeXRoaW5nIHRvIDAsIHNvIHdlIG9ubHkgaGF2ZSBleHBsaWNpdGx5IHNldAogCSAqIHRob3NlIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgc29tZXRoaW5nIGVsc2UgKi8KIAogCS8qIElmIHBvd2VyIG1hbmFnZW1lbnQgaXMgdHVybmVkIG9uLCBkZWZhdWx0IHRvIEFVVE8gbW9kZSAqLwpAQCAtNjEyMSw2ICs2MTI3LDggQEAKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d3hfZXZlbnRfd29yaywgaXB3MjEwMF93eF9ldmVudF93b3JrKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aGFuZ19jaGVjaywgaXB3MjEwMF9oYW5nX2NoZWNrKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+cmZfa2lsbCwgaXB3MjEwMF9yZl9raWxsKTsKKwlJTklUX1dPUksoJnByaXYtPnNjYW5fZXZlbnRfbm93LCBpcHcyMTAwX3NjYW5fZXZlbnRfbm93KTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl9ldmVudF9sYXRlciwgaXB3MjEwMF9zY2FuX2V2ZW50X2xhdGVyKTsKIAogCXRhc2tsZXRfaW5pdCgmcHJpdi0+aXJxX3Rhc2tsZXQsICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkKIAkJICAgICBpcHcyMTAwX2lycV90YXNrbGV0LCAodW5zaWduZWQgbG9uZylwcml2KTsKQEAgLTc0MjUsNiArNzQzMyw4IEBACiAJfQogCiAJSVBXX0RFQlVHX1dYKCJJbml0aWF0aW5nIHNjYW4uLi5cbiIpOworCisJcHJpdi0+dXNlcl9yZXF1ZXN0ZWRfc2NhbiA9IDE7CiAJaWYgKGlwdzIxMDBfc2V0X3NjYW5fb3B0aW9ucyhwcml2KSB8fCBpcHcyMTAwX3N0YXJ0X3NjYW4ocHJpdikpIHsKIAkJSVBXX0RFQlVHX1dYKCJTdGFydCBzY2FuIGZhaWxlZC5cbiIpOwogCkBAIC03NDk5LDcgKzc1MDksNyBAQAogCXN3aXRjaCAod3JxdS0+cG93ZXIuZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CiAJY2FzZSBJV19QT1dFUl9PTjoJLyogSWYgbm90IHNwZWNpZmllZCAqLwogCWNhc2UgSVdfUE9XRVJfTU9ERToJLyogSWYgc2V0IGFsbCBtYXNrICovCi0JY2FzZSBJV19QT1dFUl9BTExfUjoJLyogSWYgZXhwbGljaXRlbHkgc3RhdGUgYWxsICovCisJY2FzZSBJV19QT1dFUl9BTExfUjoJLyogSWYgZXhwbGljaXRseSBzdGF0ZSBhbGwgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoJCS8qIE90aGVyd2lzZSB3ZSBkb24ndCBzdXBwb3J0IGl0ICovCiAJCUlQV19ERUJVR19XWCgiU0VUIFBNIE1vZGU6ICVYIG5vdCBzdXBwb3J0ZWQuXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5oCmluZGV4IGRlN2QzODQuLmJiZjFkZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmgKQEAgLTQ3OSw3ICs0NzksNiBAQAogI2RlZmluZSBDRkdfQVNTT0NJQVRFICAgICAgICAgICAoMTw8NikKICNkZWZpbmUgQ0ZHX0ZJWEVEX1JBVEUgICAgICAgICAgKDE8PDcpCiAjZGVmaW5lIENGR19BREhPQ19DUkVBVEUgICAgICAgICgxPDw4KQotI2RlZmluZSBDRkdfQzNfRElTQUJMRUQgICAgICAgICAoMTw8OSkKICNkZWZpbmUgQ0ZHX1BBU1NJVkVfU0NBTiAgICAgICAgKDE8PDEwKQogI2lmZGVmIENPTkZJR19JUFcyMTAwX01PTklUT1IKICNkZWZpbmUgQ0ZHX0NSQ19DSEVDSyAgICAgICAgICAgKDE8PDExKQpAQCAtNTA4LDcgKzUwNyw2IEBACiAJdTggYnNzaWRbRVRIX0FMRU5dOwogCXU4IGNoYW5uZWw7CiAJaW50IGxhc3RfbW9kZTsKLQlpbnQgY3N0YXRlX2xpbWl0OwogCiAJdW5zaWduZWQgbG9uZyBjb25uZWN0X3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgbGFzdF9yZXNldDsKQEAgLTU4OCw2ICs1ODYsMTAgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHd4X2V2ZW50X3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBoYW5nX2NoZWNrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgcmZfa2lsbDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc2Nhbl9ldmVudF9ub3c7CisJc3RydWN0IGRlbGF5ZWRfd29yayBzY2FuX2V2ZW50X2xhdGVyOworCisJaW50IHVzZXJfcmVxdWVzdGVkX3NjYW47CiAKIAl1MzIgaW50ZXJydXB0czsKIAlpbnQgdHhfaW50ZXJydXB0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwppbmRleCBmZWI4ZmNiLi5lM2M4Mjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCkBAIC05NjAzLDcgKzk2MDMsNyBAQAogCXN3aXRjaCAod3JxdS0+cG93ZXIuZmxhZ3MgJiBJV19QT1dFUl9NT0RFKSB7CiAJY2FzZSBJV19QT1dFUl9PTjoJLyogSWYgbm90IHNwZWNpZmllZCAqLwogCWNhc2UgSVdfUE9XRVJfTU9ERToJLyogSWYgc2V0IGFsbCBtYXNrICovCi0JY2FzZSBJV19QT1dFUl9BTExfUjoJLyogSWYgZXhwbGljaXRlbHkgc3RhdGUgYWxsICovCisJY2FzZSBJV19QT1dFUl9BTExfUjoJLyogSWYgZXhwbGljaXRseSBzdGF0ZSBhbGwgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoJCS8qIE90aGVyd2lzZSB3ZSBkb24ndCBzdXBwb3J0IGl0ICovCiAJCUlQV19ERUJVR19XWCgiU0VUIFBNIE1vZGU6ICVYIG5vdCBzdXBwb3J0ZWQuXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCmluZGV4IGY0YWFiY2YuLjI2MmFiMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKQEAgLTM3LDkgKzM3LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCi0jaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLQogI2RlZmluZSBJV0wgMzk0NQogCiAjaW5jbHVkZSAiLi4vbmV0L21hYzgwMjExL2llZWU4MDIxMV9yYXRlLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKaW5kZXggYWNiMzg3NS4uMTliY2IwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwpAQCAtMzgsNyArMzgsNiBAQAogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgogCiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjZGVmaW5lIElXTCAzOTQ1CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtcnMuYwppbmRleCAyODdjNzU3Li44ZGM3OGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ycy5jCkBAIC0zNiw5ICszNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KIAotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+Ci0KICNkZWZpbmUgSVdMIDQ5NjUKIAogI2luY2x1ZGUgIi4uL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfcmF0ZS5oIgpAQCAtMjAyNCwxMiArMjAyMSwxOCBAQAogc3RhdGljIHZvaWQgcnNfZGJnZnNfc2V0X21jcyhzdHJ1Y3QgaXdsX3JhdGVfc2NhbGVfcHJpdiAqcnNfcHJpdiwKIAkJCQlzdHJ1Y3QgaXdsX3JhdGUgKm1jcywgaW50IGluZGV4KQogewotCWNvbnN0IHUzMiBjY2tfcmF0ZSA9IDB4ODIwQTsKKwl1MzIgYmFzZV9yYXRlOworCisJaWYgKHJzX3ByaXYtPnBoeW1vZGUgPT0gKHU4KSBNT0RFX0lFRUU4MDIxMUEpCisJCWJhc2VfcmF0ZSA9IDB4ODAwRDsKKwllbHNlCisJCWJhc2VfcmF0ZSA9IDB4ODIwQTsKKwogCWlmIChyc19wcml2LT5kYmdfZml4ZWQucmF0ZV9uX2ZsYWdzKSB7CiAJCWlmIChpbmRleCA8IDEyKQogCQkJbWNzLT5yYXRlX25fZmxhZ3MgPSByc19wcml2LT5kYmdfZml4ZWQucmF0ZV9uX2ZsYWdzOwogCQllbHNlCi0JCQltY3MtPnJhdGVfbl9mbGFncyA9IGNja19yYXRlOworCQkJbWNzLT5yYXRlX25fZmxhZ3MgPSBiYXNlX3JhdGU7CiAJCUlXTF9ERUJVR19SQVRFKCJGaXhlZCByYXRlIE9OXG4iKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwppbmRleCBiNTBkMjAyLi41NTdkZWViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCkBAIC0zNSw5ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAKICNkZWZpbmUgSVdMIDQ5NjUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKaW5kZXggNzVlM2I1Yy4uODMwMTlkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCkBAIC00OCw4ICs0OCw2IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAKQEAgLTE3NDksMjEgKzE3NDcsMjIgQEAKICAqIHJldHVybiA6IHNldCB0aGUgYml0IGZvciBlYWNoIHN1cHBvcnRlZCByYXRlIGluc2VydCBpbiBpZQogICovCiBzdGF0aWMgdTE2IGl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZSh1OCAqaWUsIHUxNiBzdXBwb3J0ZWRfcmF0ZSwKLQkJCQkgICAgdTE2IGJhc2ljX3JhdGUsIGludCBtYXhfY291bnQpCisJCQkJICAgIHUxNiBiYXNpY19yYXRlLCBpbnQgKmxlZnQpCiB7CiAJdTE2IHJldF9yYXRlcyA9IDAsIGJpdDsKIAlpbnQgaTsKLQl1OCAqcmF0ZXM7Ci0KLQlyYXRlcyA9ICYoaWVbMV0pOworCXU4ICpjbnQgPSBpZTsKKwl1OCAqcmF0ZXMgPSBpZSArIDE7CiAKIAlmb3IgKGJpdCA9IDEsIGkgPSAwOyBpIDwgSVdMX1JBVEVfQ09VTlQ7IGkrKywgYml0IDw8PSAxKSB7CiAJCWlmIChiaXQgJiBzdXBwb3J0ZWRfcmF0ZSkgewogCQkJcmV0X3JhdGVzIHw9IGJpdDsKLQkJCXJhdGVzWyppZV0gPSBpd2xfcmF0ZXNbaV0uaWVlZSB8Ci0JCQkgICAgKChiaXQgJiBiYXNpY19yYXRlKSA/IDB4ODAgOiAweDAwKTsKLQkJCSppZSA9ICppZSArIDE7Ci0JCQlpZiAoKmllID49IG1heF9jb3VudCkKKwkJCXJhdGVzWypjbnRdID0gaXdsX3JhdGVzW2ldLmllZWUgfAorCQkJCSgoYml0ICYgYmFzaWNfcmF0ZSkgPyAweDgwIDogMHgwMCk7CisJCQkoKmNudCkrKzsKKwkJCSgqbGVmdCktLTsKKwkJCWlmICgoKmxlZnQgPD0gMCkgfHwKKwkJCSAgICAoKmNudCA+PSBJV0xfU1VQUE9SVEVEX1JBVEVTX0lFX0xFTikpCiAJCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xNzgwLDcgKzE3NzksNyBAQAogewogCWludCBsZW4gPSAwOwogCXU4ICpwb3MgPSBOVUxMOwotCXUxNiByZXRfcmF0ZXM7CisJdTE2IGFjdGl2ZV9yYXRlcywgcmV0X3JhdGVzLCBjY2tfcmF0ZXM7CiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgcHJvYmUgcmVxdWVzdCwKIAkgKiB0d28gbWFuZGF0b3J5IElFcyBhbmQgdGhlIGRhdGEgKi8KQEAgLTE4MjUsMTkgKzE4MjQsMjcgQEAKIAlsZWZ0IC09IDI7CiAJaWYgKGxlZnQgPCAwKQogCQlyZXR1cm4gMDsKKwogCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCiAJKnBvcysrID0gV0xBTl9FSURfU1VQUF9SQVRFUzsKIAkqcG9zID0gMDsKLQlyZXRfcmF0ZXMgPSBwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7CisKKwlwcml2LT5hY3RpdmVfcmF0ZSA9IHByaXYtPnJhdGVzX21hc2s7CisJYWN0aXZlX3JhdGVzID0gcHJpdi0+YWN0aXZlX3JhdGU7CiAJcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMgPSBwcml2LT5yYXRlc19tYXNrICYgSVdMX0JBU0lDX1JBVEVTX01BU0s7CiAKLQlpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBwcml2LT5hY3RpdmVfcmF0ZSwKLQkJCQkgcHJpdi0+YWN0aXZlX3JhdGVfYmFzaWMsIGxlZnQpOworCWNja19yYXRlcyA9IElXTF9DQ0tfUkFURVNfTUFTSyAmIGFjdGl2ZV9yYXRlczsKKwlyZXRfcmF0ZXMgPSBpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBjY2tfcmF0ZXMsCisJCQlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOworCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOworCisJcmV0X3JhdGVzID0gaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAorCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOworCWFjdGl2ZV9yYXRlcyAmPSB+cmV0X3JhdGVzOworCiAJbGVuICs9IDIgKyAqcG9zOwogCXBvcyArPSAoKnBvcykgKyAxOwotCXJldF9yYXRlcyA9IH5yZXRfcmF0ZXMgJiBwcml2LT5hY3RpdmVfcmF0ZTsKLQotCWlmIChyZXRfcmF0ZXMgPT0gMCkKKwlpZiAoYWN0aXZlX3JhdGVzID09IDApCiAJCWdvdG8gZmlsbF9lbmQ7CiAKIAkvKiBmaWxsIGluIHN1cHBvcnRlZCBleHRlbmRlZCByYXRlICovCkBAIC0xODQ4LDcgKzE4NTUsOCBAQAogCS8qIC4uLiBmaWxsIGl0IGluLi4uICovCiAJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CiAJKnBvcyA9IDA7Ci0JaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgcmV0X3JhdGVzLCBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgbGVmdCk7CisJaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llKHBvcywgYWN0aXZlX3JhdGVzLAorCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgJmxlZnQpOwogCWlmICgqcG9zID4gMCkKIAkJbGVuICs9IDIgKyAqcG9zOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDQ5NjUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2w0OTY1LWJhc2UuYwppbmRleCBiMWE2ZTM5Li41ZTEyNzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsNDk2NS1iYXNlLmMKQEAgLTQ4LDggKzQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KIApAQCAtMTgwMiwyMSArMTgwMCwyMiBAQAogICogcmV0dXJuIDogc2V0IHRoZSBiaXQgZm9yIGVhY2ggc3VwcG9ydGVkIHJhdGUgaW5zZXJ0IGluIGllCiAgKi8KIHN0YXRpYyB1MTYgaXdsX3N1cHBvcnRlZF9yYXRlX3RvX2llKHU4ICppZSwgdTE2IHN1cHBvcnRlZF9yYXRlLAotCQkJCSAgICB1MTYgYmFzaWNfcmF0ZSwgaW50IG1heF9jb3VudCkKKwkJCQkgICAgdTE2IGJhc2ljX3JhdGUsIGludCAqbGVmdCkKIHsKIAl1MTYgcmV0X3JhdGVzID0gMCwgYml0OwogCWludCBpOwotCXU4ICpyYXRlczsKLQotCXJhdGVzID0gJihpZVsxXSk7CisJdTggKmNudCA9IGllOworCXU4ICpyYXRlcyA9IGllICsgMTsKIAogCWZvciAoYml0ID0gMSwgaSA9IDA7IGkgPCBJV0xfUkFURV9DT1VOVDsgaSsrLCBiaXQgPDw9IDEpIHsKIAkJaWYgKGJpdCAmIHN1cHBvcnRlZF9yYXRlKSB7CiAJCQlyZXRfcmF0ZXMgfD0gYml0OwotCQkJcmF0ZXNbKmllXSA9IGl3bF9yYXRlc1tpXS5pZWVlIHwKLQkJCSAgICAoKGJpdCAmIGJhc2ljX3JhdGUpID8gMHg4MCA6IDB4MDApOwotCQkJKmllID0gKmllICsgMTsKLQkJCWlmICgqaWUgPj0gbWF4X2NvdW50KQorCQkJcmF0ZXNbKmNudF0gPSBpd2xfcmF0ZXNbaV0uaWVlZSB8CisJCQkJKChiaXQgJiBiYXNpY19yYXRlKSA/IDB4ODAgOiAweDAwKTsKKwkJCSgqY250KSsrOworCQkJKCpsZWZ0KS0tOworCQkJaWYgKCgqbGVmdCA8PSAwKSB8fAorCQkJICAgICgqY250ID49IElXTF9TVVBQT1JURURfUkFURVNfSUVfTEVOKSkKIAkJCQlicmVhazsKIAkJfQogCX0KQEAgLTE4MzksNyArMTgzOCw3IEBACiB7CiAJaW50IGxlbiA9IDA7CiAJdTggKnBvcyA9IE5VTEw7Ci0JdTE2IHJldF9yYXRlczsKKwl1MTYgYWN0aXZlX3JhdGVzLCByZXRfcmF0ZXMsIGNja19yYXRlczsKIAogCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIHRoZSBwcm9iZSByZXF1ZXN0LAogCSAqIHR3byBtYW5kYXRvcnkgSUVzIGFuZCB0aGUgZGF0YSAqLwpAQCAtMTg4NCwxOSArMTg4MywyNyBAQAogCWxlZnQgLT0gMjsKIAlpZiAobGVmdCA8IDApCiAJCXJldHVybiAwOworCiAJLyogLi4uIGZpbGwgaXQgaW4uLi4gKi8KIAkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwogCSpwb3MgPSAwOwotCXJldF9yYXRlcyA9IHByaXYtPmFjdGl2ZV9yYXRlID0gcHJpdi0+cmF0ZXNfbWFzazsKKworCXByaXYtPmFjdGl2ZV9yYXRlID0gcHJpdi0+cmF0ZXNfbWFzazsKKwlhY3RpdmVfcmF0ZXMgPSBwcml2LT5hY3RpdmVfcmF0ZTsKIAlwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYyA9IHByaXYtPnJhdGVzX21hc2sgJiBJV0xfQkFTSUNfUkFURVNfTUFTSzsKIAotCWl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIHByaXYtPmFjdGl2ZV9yYXRlLAotCQkJCSBwcml2LT5hY3RpdmVfcmF0ZV9iYXNpYywgbGVmdCk7CisJY2NrX3JhdGVzID0gSVdMX0NDS19SQVRFU19NQVNLICYgYWN0aXZlX3JhdGVzOworCXJldF9yYXRlcyA9IGl3bF9zdXBwb3J0ZWRfcmF0ZV90b19pZShwb3MsIGNja19yYXRlcywKKwkJCXByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7CisJYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7CisKKwlyZXRfcmF0ZXMgPSBpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBhY3RpdmVfcmF0ZXMsCisJCQkJIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7CisJYWN0aXZlX3JhdGVzICY9IH5yZXRfcmF0ZXM7CisKIAlsZW4gKz0gMiArICpwb3M7CiAJcG9zICs9ICgqcG9zKSArIDE7Ci0JcmV0X3JhdGVzID0gfnJldF9yYXRlcyAmIHByaXYtPmFjdGl2ZV9yYXRlOwotCi0JaWYgKHJldF9yYXRlcyA9PSAwKQorCWlmIChhY3RpdmVfcmF0ZXMgPT0gMCkKIAkJZ290byBmaWxsX2VuZDsKIAogCS8qIGZpbGwgaW4gc3VwcG9ydGVkIGV4dGVuZGVkIHJhdGUgKi8KQEAgLTE5MDcsNyArMTkxNCw4IEBACiAJLyogLi4uIGZpbGwgaXQgaW4uLi4gKi8KIAkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKIAkqcG9zID0gMDsKLQlpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCByZXRfcmF0ZXMsIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCBsZWZ0KTsKKwlpd2xfc3VwcG9ydGVkX3JhdGVfdG9faWUocG9zLCBhY3RpdmVfcmF0ZXMsCisJCQkJIHByaXYtPmFjdGl2ZV9yYXRlX2Jhc2ljLCAmbGVmdCk7CiAJaWYgKCpwb3MgPiAwKQogCQlsZW4gKz0gMiArICpwb3M7CiAKQEAgLTQ0OTQsMTMgKzQ1MDIsMTMgQEAKICAqIENvbnZlcnNpb24gYXNzdW1lcyB0aGF0IGxldmVscyBhcmUgdm9sdGFnZXMgKDIwKmxvZyksIG5vdCBwb3dlcnMgKDEwKmxvZykuICovCiBpbnQgaXdsX2NhbGNfZGJfZnJvbV9yYXRpbyhpbnQgc2lnX3JhdGlvKQogewotCS8qIEFueXRoaW5nIGFib3ZlIDEwMDA6MSBqdXN0IHJlcG9ydCBhcyA2MCBkQiAqLwotCWlmIChzaWdfcmF0aW8gPiAxMDAwKQorCS8qIDEwMDA6MSBvciBoaWdoZXIganVzdCByZXBvcnQgYXMgNjAgZEIgKi8KKwlpZiAoc2lnX3JhdGlvID49IDEwMDApCiAJCXJldHVybiA2MDsKIAotCS8qIEFib3ZlIDEwMDoxLCBkaXZpZGUgYnkgMTAgYW5kIHVzZSB0YWJsZSwKKwkvKiAxMDA6MSBvciBoaWdoZXIsIGRpdmlkZSBieSAxMCBhbmQgdXNlIHRhYmxlLAogCSAqICAgYWRkIDIwIGRCIHRvIG1ha2UgdXAgZm9yIGRpdmlkZSBieSAxMCAqLwotCWlmIChzaWdfcmF0aW8gPiAxMDApCisJaWYgKHNpZ19yYXRpbyA+PSAxMDApCiAJCXJldHVybiAoMjAgKyAoaW50KXJhdGlvMmRCW3NpZ19yYXRpby8xMF0pOwogCiAJLyogV2Ugc2hvdWxkbid0IHNlZSB0aGlzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bHdpZmkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsd2lmaS5oCmluZGV4IGUwYjk3YzMuLjQzMmNlODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsd2lmaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsd2lmaS5oCkBAIC0zOSwxOCArMzksMTMgQEAKIC8qIEhhcmR3YXJlIHNwZWNpZmljIGZpbGUgZGVmaW5lcyB0aGUgUENJIElEcyB0YWJsZSBmb3IgdGhhdCBoYXJkd2FyZSBtb2R1bGUgKi8KIGV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2xfaHdfY2FyZF9pZHNbXTsKIAorI2luY2x1ZGUgIml3bC1ody5oIgogI2lmIElXTCA9PSAzOTQ1Ci0KICNkZWZpbmUgRFJWX05BTUUJIml3bDM5NDUiCi0jaW5jbHVkZSAiaXdsLWh3LmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUtaHcuaCIKLQogI2VsaWYgSVdMID09IDQ5NjUKLQogI2RlZmluZSBEUlZfTkFNRSAgICAgICAgIml3bDQ5NjUiCi0jaW5jbHVkZSAiaXdsLWh3LmgiCiAjaW5jbHVkZSAiaXdsLTQ5NjUtaHcuaCIKLQogI2VuZGlmCiAKICNpbmNsdWRlICJpd2wtcHJwaC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbmV0d2F2ZV9jcy5jCmluZGV4IGMyZDcxYWYuLjI0MDJjYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9uZXR3YXZlX2NzLmMKQEAgLTQsMTggKzQsMTggQEAKICAqIFZlcnNpb246ICAgICAgIDAuNC4xCiAgKiBEZXNjcmlwdGlvbjogICBOZXR3YXZlIEFpclN1cmZlciBXaXJlbGVzcyBMQU4gUEMgQ2FyZCBkcml2ZXIKICAqIFN0YXR1czogICAgICAgIEV4cGVyaW1lbnRhbC4KLSAqIEF1dGhvcnM6ICAgICAgIEpvaG4gTWFya3VzIEJq+HJuZGFsZW4gPGpvaG5tQGNzLnVpdC5ubz4KKyAqIEF1dGhvcnM6ICAgICAgIEpvaG4gTWFya3VzIEJqw7hybmRhbGVuIDxqb2hubUBjcy51aXQubm8+CiAgKiAgICAgICAgICAgICAgICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAgKiAgICAgICAgICAgICAgICBEYXZpZCBIaW5kcyA8ZGFoaW5kc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgKiBDcmVhdGVkIGF0OiAgICBBIGxvbmcgdGltZSBhZ28hCiAgKiBNb2RpZmllZCBhdDogICBNb24gTm92IDEwIDExOjU0OjM3IDE5OTcKICAqIE1vZGlmaWVkIGJ5OiAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICAqIAotICogICAgIENvcHlyaWdodCAoYykgMTk5NyBVbml2ZXJzaXR5IG9mIFRyb21z+CwgTm9yd2F5CisgKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3IFVuaXZlcnNpdHkgb2YgVHJvbXPDuCwgTm9yd2F5CiAgKgogICogUmV2aXNpb24gSGlzdG9yeToKICAqCi0gKiAgIDA4LU5vdi05NyAxNToxNDo0NyAgIEpvaG4gTWFya3VzIEJq+HJuZGFsZW4gPGpvaG5tQGNzLnVpdC5ubz4KKyAqICAgMDgtTm92LTk3IDE1OjE0OjQ3ICAgSm9obiBNYXJrdXMgQmrDuHJuZGFsZW4gPGpvaG5tQGNzLnVpdC5ubz4KICAqICAgIC0gRml4ZWQgc29tZSBidWdzIGluIG5ldHdhdmVfcnggYW5kIGNsZWFuZWQgaXQgdXAgYSBiaXQuIAogICogICAgICAoT25lIG9mIHRoZSBidWdzIHdvdWxkIGhhdmUgZGVzdHJveWVkIHBhY2tldHMgd2hlbiByZWNlaXZpbmcKICAqICAgICAgbXVsdGlwbGUgcGFja2V0cyBwZXIgaW50ZXJydXB0KS4gCkBAIC0xNTgsNyArMTU4LDcgQEAKIG1vZHVsZV9wYXJhbShwY19kZWJ1ZywgaW50LCAwKTsKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgaWYgKHBjX2RlYnVnPihuKSkgcHJpbnRrKEtFUk5fREVCVUcgYXJncykKIHN0YXRpYyBjaGFyICp2ZXJzaW9uID0KLSJuZXR3YXZlX2NzLmMgMC4zLjAgVGh1IEp1bCAxNyAxNDozNjowMiAxOTk3IChKb2huIE1hcmt1cyBCavhybmRhbGVuKVxuIjsKKyJuZXR3YXZlX2NzLmMgMC4zLjAgVGh1IEp1bCAxNyAxNDozNjowMiAxOTk3IChKb2huIE1hcmt1cyBCasO4cm5kYWxlbilcbiI7CiAjZWxzZQogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTRjb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NGNvbW1vbi5jCmluZGV4IDJjNjNjZjAuLjE0MzdkYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NGNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NGNvbW1vbi5jCkBAIC01NzcsNyArNTc3LDcgQEAKIAlzdHJ1Y3QgcDU0X3R4X2NvbnRyb2xfZmlsdGVyICpmaWx0ZXI7CiAKIAloZHIgPSBremFsbG9jKHNpemVvZigqaGRyKSArIHNpemVvZigqZmlsdGVyKSArCi0JCSAgICAgIHByaXYtPnR4X2hkcl9sZW4sIEdGUF9LRVJORUwpOworCQkgICAgICBwcml2LT50eF9oZHJfbGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWhkcikKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYwppbmRleCBiYjZmNDZjLi5mZjM5OWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCkBAIC01NTAsNyArNTUwLDcgQEAKIAkJCS8qCiAJCQkgKiBDaGVjayBpZiB3ZSBuZWVkIHRvIHNldCB0aGUgTGVuZ3RoIEV4dGVuc2lvbgogCQkJICovCi0JCQlpZiAoYml0cmF0ZSA9PSAxMTAgJiYgcmVzaWR1YWwgPD0gMykKKwkJCWlmIChiaXRyYXRlID09IDExMCAmJiByZXNpZHVhbCA8PSAzMCkKIAkJCQlkZXNjLnNlcnZpY2UgfD0gMHg4MDsKIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwppbmRleCAzZTQyNzU5Li40NmM4YzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKQEAgLTIwMjksNiArMjAyOSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg3MDUwKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDcwNWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4OTA1YiksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg5MDVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBCaWxsaW9udG9uICovCiAJeyBVU0JfREVWSUNFKDB4MTYzMSwgMHhjMDE5KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAkvKiBCdWZmYWxvICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4N19kZXYuYwppbmRleCAwZWY4ODdkLi5kZTYxYzhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxODdfZGV2LmMKQEAgLTEzMSw3ICsxMzEsOCBAQAogCXN0cnVjdCBydGw4MTg3X3R4X2hkciAqaGRyOwogCXN0cnVjdCBydGw4MTg3X3R4X2luZm8gKmluZm87CiAJc3RydWN0IHVyYiAqdXJiOwotCXUzMiB0bXA7CisJX19sZTE2IHJ0c19kdXIgPSAwOworCXUzMiBmbGFnczsKIAogCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCF1cmIpIHsKQEAgLTEzOSwyNCArMTQwLDI0IEBACiAJCXJldHVybiAwOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgcnRsODE4N190eF9oZHIgKilza2JfcHVzaChza2IsIHNpemVvZigqaGRyKSk7Ci0JdG1wID0gc2tiLT5sZW4gLSBzaXplb2YoKmhkcik7Ci0JdG1wIHw9IFJUTDgxODdfVFhfRkxBR19OT19FTkNSWVBUOwotCXRtcCB8PSBjb250cm9sLT5ydHNfY3RzX3JhdGUgPDwgMTk7Ci0JdG1wIHw9IGNvbnRyb2wtPnR4X3JhdGUgPDwgMjQ7Ci0JaWYgKGllZWU4MDIxMV9nZXRfbW9yZWZyYWcoKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiKSkKLQkJdG1wIHw9IFJUTDgxODdfVFhfRkxBR19NT1JFX0ZSQUc7CisJZmxhZ3MgPSBza2ItPmxlbjsKKwlmbGFncyB8PSBSVEw4MTg3X1RYX0ZMQUdfTk9fRU5DUllQVDsKKwlmbGFncyB8PSBjb250cm9sLT5ydHNfY3RzX3JhdGUgPDwgMTk7CisJZmxhZ3MgfD0gY29udHJvbC0+dHhfcmF0ZSA8PCAyNDsKKwlpZiAoaWVlZTgwMjExX2dldF9tb3JlZnJhZygoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGEpKQorCQlmbGFncyB8PSBSVEw4MTg3X1RYX0ZMQUdfTU9SRV9GUkFHOwogCWlmIChjb250cm9sLT5mbGFncyAmIElFRUU4MDIxMV9UWENUTF9VU0VfUlRTX0NUUykgewotCQl0bXAgfD0gUlRMODE4N19UWF9GTEFHX1JUUzsKLQkJaGRyLT5ydHNfZHVyYXRpb24gPQotCQkJaWVlZTgwMjExX3J0c19kdXJhdGlvbihkZXYsIHByaXYtPmlmX2lkLCBza2ItPmxlbiwgY29udHJvbCk7CisJCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19SVFM7CisJCXJ0c19kdXIgPSBpZWVlODAyMTFfcnRzX2R1cmF0aW9uKGRldiwgcHJpdi0+aWZfaWQsIHNrYi0+bGVuLCBjb250cm9sKTsKIAl9CiAJaWYgKGNvbnRyb2wtPmZsYWdzICYgSUVFRTgwMjExX1RYQ1RMX1VTRV9DVFNfUFJPVEVDVCkKLQkJdG1wIHw9IFJUTDgxODdfVFhfRkxBR19DVFM7Ci0JaGRyLT5mbGFncyA9IGNwdV90b19sZTMyKHRtcCk7CisJCWZsYWdzIHw9IFJUTDgxODdfVFhfRkxBR19DVFM7CisKKwloZHIgPSAoc3RydWN0IHJ0bDgxODdfdHhfaGRyICopc2tiX3B1c2goc2tiLCBzaXplb2YoKmhkcikpOworCWhkci0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihmbGFncyk7CiAJaGRyLT5sZW4gPSAwOwotCXRtcCA9IGNvbnRyb2wtPnJldHJ5X2xpbWl0IDw8IDg7Ci0JaGRyLT5yZXRyeSA9IGNwdV90b19sZTMyKHRtcCk7CisJaGRyLT5ydHNfZHVyYXRpb24gPSBydHNfZHVyOworCWhkci0+cmV0cnkgPSBjcHVfdG9fbGUzMihjb250cm9sLT5yZXRyeV9saW1pdCA8PCA4KTsKIAogCWluZm8gPSAoc3RydWN0IHJ0bDgxODdfdHhfaW5mbyAqKXNrYi0+Y2I7CiAJaW5mby0+Y29udHJvbCA9IGttZW1kdXAoY29udHJvbCwgc2l6ZW9mKCpjb250cm9sKSwgR0ZQX0FUT01JQyk7CkBAIC01ODcsOCArNTg4LDYgQEAKIAogCSp0b3RhbF9mbGFncyA9IDA7CiAKLQlpZiAoY2hhbmdlZF9mbGFncyAmIEZJRl9QUk9NSVNDX0lOX0JTUykKLQkJcHJpdi0+cnhfY29uZiBePSBSVEw4MThYX1JYX0NPTkZfTklDTUFDOwogCWlmIChjaGFuZ2VkX2ZsYWdzICYgRklGX0FMTE1VTFRJKQogCQlwcml2LT5yeF9jb25mIF49IFJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1Q7CiAJaWYgKGNoYW5nZWRfZmxhZ3MgJiBGSUZfRkNTRkFJTCkKQEAgLTYwMSw4ICs2MDAsNiBAQAogCWlmIChtY19jb3VudCA+IDApCiAJCXByaXYtPnJ4X2NvbmYgfD0gUlRMODE4WF9SWF9DT05GX01VTFRJQ0FTVDsKIAotCWlmIChwcml2LT5yeF9jb25mICYgUlRMODE4WF9SWF9DT05GX05JQ01BQykKLQkJKnRvdGFsX2ZsYWdzIHw9IEZJRl9QUk9NSVNDX0lOX0JTUzsKIAlpZiAocHJpdi0+cnhfY29uZiAmIFJUTDgxOFhfUlhfQ09ORl9NVUxUSUNBU1QpCiAJCSp0b3RhbF9mbGFncyB8PSBGSUZfQUxMTVVMVEk7CiAJaWYgKHByaXYtPnJ4X2NvbmYgJiBSVEw4MThYX1JYX0NPTkZfRkNTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA5MzViMTQ0Li5kNWMwYzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwpAQCAtMzI3LDggKzMyNyw4IEBACiAJCQltZW1jcHkoc2tiX3B1dChza2IsIDYpLCAmZGF0YVtkYXRhbGVuLThdLCA2KTsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhW2RhdGFsZW4tMjRdLCAyKTsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSwgbGVuKTsKLQkJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHpkLT5kZXYpOworCQkJc2tiLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogCQkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJCXpkLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCW5ldGlmX3J4KHNrYik7CkBAIC0zODQsOCArMzg0LDggQEAKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgMiksICZkYXRhWzZdLCAyKTsKIAkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgZGF0YSs4LCBsZW4pOwogCQl9Ci0JCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgemQtPmRldik7CisJCXNrYi0+ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJemQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJemQtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwogCQluZXRpZl9yeChza2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCBiMDY4NGY5Li5jNzU1YjY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtMTA0NCwxNCArMTA0NCwxNyBAQAogc3RhdGljIHZvaWQgZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gemRfaW50Zl90b19uZXRkZXYoaW50Zik7Ci0Jc3RydWN0IHpkX21hYyAqbWFjID0gemRfbmV0ZGV2X21hYyhuZXRkZXYpOwotCXN0cnVjdCB6ZF91c2IgKnVzYiA9ICZtYWMtPmNoaXAudXNiOworCXN0cnVjdCB6ZF9tYWMgKm1hYzsKKwlzdHJ1Y3QgemRfdXNiICp1c2I7CiAKIAkvKiBFaXRoZXIgc29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQsIG9yIHdlJ3JlIGp1c3QgZGVhbGluZyB3aXRoCiAJICogYSBERVZJQ0VfSU5TVEFMTEVSLiAqLwogCWlmIChuZXRkZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJbWFjID0gemRfbmV0ZGV2X21hYyhuZXRkZXYpOworCXVzYiA9ICZtYWMtPmNoaXAudXNiOworCiAJZGV2X2RiZ19mKHpkX3VzYl9kZXYodXNiKSwgIlxuIik7CiAKIAl6ZF9uZXRkZXZfZGlzY29ubmVjdChuZXRkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGZyb250LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwppbmRleCA3ZmQ1MDVjLi4yYThmYzQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYworKysgYi9kcml2ZXJzL25ldC94ZW4tbmV0ZnJvbnQuYwpAQCAtMTUyNiw3ICsxNTI2LDcgQEAKIAogCWlmICghZmVhdHVyZV9yeF9jb3B5KSB7CiAJCWRldl9pbmZvKCZkZXYtPmRldiwKLQkJCSAiYmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IGNvcHlpbmcgcmVjaWV2ZSBwYXRoIik7CisJCQkgImJhY2tlbmQgZG9lcyBub3Qgc3VwcG9ydCBjb3B5aW5nIHJlY2VpdmUgcGF0aFxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9wbGF0Zm9ybS5jIGIvZHJpdmVycy9vZi9wbGF0Zm9ybS5jCmluZGV4IDg2NGYwOWYuLmI0N2JiMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb2YvcGxhdGZvcm0uYworKysgYi9kcml2ZXJzL29mL3BsYXRmb3JtLmMKQEAgLTEyLDYgKzEyLDcgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CkBAIC05NCwzICs5NSwyMyBAQAogCWJ1cy0+cmVzdW1lID0gb2ZfcGxhdGZvcm1fZGV2aWNlX3Jlc3VtZTsKIAlyZXR1cm4gYnVzX3JlZ2lzdGVyKGJ1cyk7CiB9CisKK2ludCBvZl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKKwkvKiBpbml0aWFsaXplIGNvbW1vbiBkcml2ZXIgZmllbGRzICovCisJaWYgKCFkcnYtPmRyaXZlci5uYW1lKQorCQlkcnYtPmRyaXZlci5uYW1lID0gZHJ2LT5uYW1lOworCWlmICghZHJ2LT5kcml2ZXIub3duZXIpCisJCWRydi0+ZHJpdmVyLm93bmVyID0gZHJ2LT5vd25lcjsKKwlkcnYtPmRyaXZlci5idXMgPSBidXM7CisKKwkvKiByZWdpc3RlciB3aXRoIGNvcmUgKi8KKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Cit9CitFWFBPUlRfU1lNQk9MKG9mX3JlZ2lzdGVyX2RyaXZlcik7CisKK3ZvaWQgb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZkcnYtPmRyaXZlcik7Cit9CitFWFBPUlRfU1lNQk9MKG9mX3VucmVnaXN0ZXJfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9kYWlzeS5jIGIvZHJpdmVycy9wYXJwb3J0L2RhaXN5LmMKaW5kZXggZmY5ZjM0NC4uNWJiZmYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L2RhaXN5LmMKKysrIGIvZHJpdmVycy9wYXJwb3J0L2RhaXN5LmMKQEAgLTI3NSwzNSArMjc1LDYgQEAKIAlwYXJwb3J0X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CiB9CiAKLS8qKgotICoJcGFycG9ydF9kZXZpY2VfbnVtIC0gY29udmVydCBkZXZpY2UgY29vcmRpbmF0ZXMKLSAqCUBwYXJwb3J0OiBwYXJhbGxlbCBwb3J0IG51bWJlcgotICoJQG11eDogbXVsdGlwbGV4b3IgcG9ydCBudW1iZXIgKC0xIGZvciBubyBtdWx0aXBsZXhvcikKLSAqCUBkYWlzeTogZGFpc3kgY2hhaW4gYWRkcmVzcyAoLTEgZm9yIG5vIGRhaXN5IGNoYWluIGFkZHJlc3MpCi0gKgotICoJVGhpcyB0cmllcyB0byBsb2NhdGUgYSBkZXZpY2Ugb24gdGhlIGdpdmVuIHBhcmFsbGVsIHBvcnQsCi0gKgltdWx0aXBsZXhvciBwb3J0IGFuZCBkYWlzeSBjaGFpbiBhZGRyZXNzLCBhbmQgcmV0dXJucyBpdHMKLSAqCWRldmljZSBudW1iZXIgb3IgJS1FTlhJTyBpZiBubyBkZXZpY2Ugd2l0aCB0aG9zZSBjb29yZGluYXRlcwotICoJZXhpc3RzLgotICoqLwotCi1pbnQgcGFycG9ydF9kZXZpY2VfbnVtKGludCBwYXJwb3J0LCBpbnQgbXV4LCBpbnQgZGFpc3kpCi17Ci0JaW50IHJlcyA9IC1FTlhJTzsKLQlzdHJ1Y3QgZGFpc3lkZXYgKmRldjsKLQotCXNwaW5fbG9jaygmdG9wb2xvZ3lfbG9jayk7Ci0JZGV2ID0gdG9wb2xvZ3k7Ci0Jd2hpbGUgKGRldiAmJiBkZXYtPnBvcnQtPnBvcnRudW0gIT0gcGFycG9ydCAmJgotCSAgICAgICBkZXYtPnBvcnQtPm11eHBvcnQgIT0gbXV4ICYmIGRldi0+ZGFpc3kgIT0gZGFpc3kpCi0JCWRldiA9IGRldi0+bmV4dDsKLQlpZiAoZGV2KQotCQlyZXMgPSBkZXYtPmRldm51bTsKLQlzcGluX3VubG9jaygmdG9wb2xvZ3lfbG9jayk7Ci0KLQlyZXR1cm4gcmVzOwotfQotCiAvKiBTZW5kIGEgZGFpc3ktY2hhaW4tc3R5bGUgQ1BQIGNvbW1hbmQgcGFja2V0LiAqLwogc3RhdGljIGludCBjcHBfZGFpc3koc3RydWN0IHBhcnBvcnQgKnBvcnQsIGludCBjbWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMgYi9kcml2ZXJzL3BhcnBvcnQvcHJvY2ZzLmMKaW5kZXggYmRiZGFiOS4uZWQ4MmU0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3Byb2Nmcy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wcm9jZnMuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAjZGVmaW5lIFBBUlBPUlRfUEFSUE9SVF9ESVIoQ0hJTEQpIHsgLmN0bF9uYW1lID0gREVWX1BBUlBPUlQsIC5wcm9jbmFtZSA9ICJwYXJwb3J0IiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tb2RlID0gMDU1NSwgLmNoaWxkID0gQ0hJTEQgfQogI2RlZmluZSBQQVJQT1JUX0RFVl9ESVIoQ0hJTEQpIHsgLmN0bF9uYW1lID0gQ1RMX0RFViwgLnByb2NuYW1lID0gImRldiIsIC5tb2RlID0gMDU1NSwgLmNoaWxkID0gQ0hJTEQgfQotI2RlZmluZSBQQVJQT1JUX0RFVklDRVNfUk9PVF9ESVIgIHsgLmN0bF9uYW1lID0gREVWX1BBUlBPUlRfREVWSUNFUywgLnByb2NuYW1lID0gImRldmljZXMiLCBcCisjZGVmaW5lIFBBUlBPUlRfREVWSUNFU19ST09UX0RJUiAgeyAgLnByb2NuYW1lID0gImRldmljZXMiLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubW9kZSA9IDA1NTUsIC5jaGlsZCA9IE5VTEwgfQogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBwYXJwb3J0X21pbl90aW1lc2xpY2VfdmFsdWUgPQpAQCAtMjY2LDcgKzI2Niw2IEBACiAJLnN5c2N0bF9oZWFkZXIgPSBOVUxMLAogICAgICAgICB7CiAJCXsKLQkJCS5jdGxfbmFtZQk9IERFVl9QQVJQT1JUX1NQSU5USU1FLAogCQkJLnByb2NuYW1lCT0gInNwaW50aW1lIiwKIAkJCS5kYXRhCQk9IE5VTEwsCiAJCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMjc2LDcgKzI3NSw2IEBACiAJCQkuZXh0cmEyCQk9ICh2b2lkKikgJnBhcnBvcnRfbWF4X3NwaW50aW1lX3ZhbHVlCiAJCX0sCiAJCXsKLQkJCS5jdGxfbmFtZQk9IERFVl9QQVJQT1JUX0JBU0VfQUREUiwKIAkJCS5wcm9jbmFtZQk9ICJiYXNlLWFkZHIiLAogCQkJLmRhdGEJCT0gTlVMTCwKIAkJCS5tYXhsZW4JCT0gMCwKQEAgLTI4NCw3ICsyODIsNiBAQAogCQkJLnByb2NfaGFuZGxlcgk9ICZkb19oYXJkd2FyZV9iYXNlX2FkZHIKIAkJfSwKIAkJewotCQkJLmN0bF9uYW1lCT0gREVWX1BBUlBPUlRfSVJRLAogCQkJLnByb2NuYW1lCT0gImlycSIsCiAJCQkuZGF0YQkJPSBOVUxMLAogCQkJLm1heGxlbgkJPSAwLApAQCAtMjkyLDcgKzI4OSw2IEBACiAJCQkucHJvY19oYW5kbGVyCT0gJmRvX2hhcmR3YXJlX2lycQogCQl9LAogCQl7Ci0JCQkuY3RsX25hbWUJPSBERVZfUEFSUE9SVF9ETUEsCiAJCQkucHJvY25hbWUJPSAiZG1hIiwKIAkJCS5kYXRhCQk9IE5VTEwsCiAJCQkubWF4bGVuCQk9IDAsCkBAIC0zMDAsNyArMjk2LDYgQEAKIAkJCS5wcm9jX2hhbmRsZXIJPSAmZG9faGFyZHdhcmVfZG1hCiAJCX0sCiAJCXsKLQkJCS5jdGxfbmFtZQk9IERFVl9QQVJQT1JUX01PREVTLAogCQkJLnByb2NuYW1lCT0gIm1vZGVzIiwKIAkJCS5kYXRhCQk9IE5VTEwsCiAJCQkubWF4bGVuCQk9IDAsCkBAIC0zMTAsNyArMzA1LDYgQEAKIAkJUEFSUE9SVF9ERVZJQ0VTX1JPT1RfRElSLAogI2lmZGVmIENPTkZJR19QQVJQT1JUXzEyODQKIAkJewotCQkJLmN0bF9uYW1lCT0gREVWX1BBUlBPUlRfQVVUT1BST0JFLAogCQkJLnByb2NuYW1lCT0gImF1dG9wcm9iZSIsCiAJCQkuZGF0YQkJPSBOVUxMLAogCQkJLm1heGxlbgkJPSAwLApAQCAtMzE4LDcgKzMxMiw2IEBACiAJCQkucHJvY19oYW5kbGVyCT0gJmRvX2F1dG9wcm9iZQogCQl9LAogCQl7Ci0JCQkuY3RsX25hbWUJPSBERVZfUEFSUE9SVF9BVVRPUFJPQkUgKyAxLAogCQkJLnByb2NuYW1lCT0gImF1dG9wcm9iZTAiLAogCQkJLmRhdGEJCT0gTlVMTCwKIAkJCS5tYXhsZW4JCT0gMCwKQEAgLTMyNiw3ICszMTksNiBAQAogCQkJLnByb2NfaGFuZGxlcgk9ICAmZG9fYXV0b3Byb2JlCiAJCX0sCiAJCXsKLQkJCS5jdGxfbmFtZQk9IERFVl9QQVJQT1JUX0FVVE9QUk9CRSArIDIsCiAJCQkucHJvY25hbWUJPSAiYXV0b3Byb2JlMSIsCiAJCQkuZGF0YQkJPSBOVUxMLAogCQkJLm1heGxlbgkJPSAwLApAQCAtMzM0LDcgKzMyNiw2IEBACiAJCQkucHJvY19oYW5kbGVyCT0gJmRvX2F1dG9wcm9iZQogCQl9LAogCQl7Ci0JCQkuY3RsX25hbWUJPSBERVZfUEFSUE9SVF9BVVRPUFJPQkUgKyAzLAogCQkJLnByb2NuYW1lCT0gImF1dG9wcm9iZTIiLAogCQkJLmRhdGEJCT0gTlVMTCwKIAkJCS5tYXhsZW4JCT0gMCwKQEAgLTM0Miw3ICszMzMsNiBAQAogCQkJLnByb2NfaGFuZGxlcgk9ICZkb19hdXRvcHJvYmUKIAkJfSwKIAkJewotCQkJLmN0bF9uYW1lCT0gREVWX1BBUlBPUlRfQVVUT1BST0JFICsgNCwKIAkJCS5wcm9jbmFtZQk9ICJhdXRvcHJvYmUzIiwKIAkJCS5kYXRhCQk9IE5VTEwsCiAJCQkubWF4bGVuCQk9IDAsCkBAIC0zNTQsNyArMzQ0LDYgQEAKIAl9LAogCXsKIAkJewotCQkJLmN0bF9uYW1lCT0gREVWX1BBUlBPUlRfREVWSUNFU19BQ1RJVkUsCiAJCQkucHJvY25hbWUJPSAiYWN0aXZlIiwKIAkJCS5kYXRhCQk9IE5VTEwsCiAJCQkubWF4bGVuCQk9IDAsCkBAIC0zOTMsNyArMzgyLDYgQEAKIAkuc3lzY3RsX2hlYWRlciA9IE5VTEwsCiAJewogCQl7Ci0JCQkuY3RsX25hbWUgCT0gREVWX1BBUlBPUlRfREVWSUNFX1RJTUVTTElDRSwKIAkJCS5wcm9jbmFtZSAJPSAidGltZXNsaWNlIiwKIAkJCS5kYXRhCQk9IE5VTEwsCiAJCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtNDQ5LDcgKzQzNyw2IEBACiAJLnN5c2N0bF9oZWFkZXIJPSBOVUxMLAogCXsKIAkJewotCQkJLmN0bF9uYW1lCT0gREVWX1BBUlBPUlRfREVGQVVMVF9USU1FU0xJQ0UsCiAJCQkucHJvY25hbWUJPSAidGltZXNsaWNlIiwKIAkJCS5kYXRhCQk9ICZwYXJwb3J0X2RlZmF1bHRfdGltZXNsaWNlLAogCQkJLm1heGxlbgkJPSBzaXplb2YocGFycG9ydF9kZWZhdWx0X3RpbWVzbGljZSksCkBAIC00NTksNyArNDQ2LDYgQEAKIAkJCS5leHRyYTIJCT0gKHZvaWQqKSAmcGFycG9ydF9tYXhfdGltZXNsaWNlX3ZhbHVlCiAJCX0sCiAJCXsKLQkJCS5jdGxfbmFtZQk9IERFVl9QQVJQT1JUX0RFRkFVTFRfU1BJTlRJTUUsCiAJCQkucHJvY25hbWUJPSAic3BpbnRpbWUiLAogCQkJLmRhdGEJCT0gJnBhcnBvcnRfZGVmYXVsdF9zcGludGltZSwKIAkJCS5tYXhsZW4JCT0gc2l6ZW9mKHBhcnBvcnRfZGVmYXVsdF9zcGludGltZSksCkBAIC01MDIsNyArNDg4LDcgQEAKIAogCXQtPmRldmljZV9kaXJbMF0uZXh0cmExID0gcG9ydDsKIAotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKIAkJdC0+dmFyc1tpXS5leHRyYTEgPSBwb3J0OwogCiAJdC0+dmFyc1swXS5kYXRhID0gJnBvcnQtPnNwaW50aW1lOwpAQCAtNTEyLDcgKzQ5OCw3IEBACiAJCXQtPnZhcnNbNiArIGldLmV4dHJhMiA9ICZwb3J0LT5wcm9iZV9pbmZvW2ldOwogCiAJdC0+cG9ydF9kaXJbMF0ucHJvY25hbWUgPSBwb3J0LT5uYW1lOwotCXQtPnBvcnRfZGlyWzBdLmN0bF9uYW1lID0gcG9ydC0+bnVtYmVyICsgMTsgLyogbmIgMCBpc24ndCBsZWdhbCBoZXJlICovCisJdC0+cG9ydF9kaXJbMF0uY3RsX25hbWUgPSAwOwogCiAJdC0+cG9ydF9kaXJbMF0uY2hpbGQgPSB0LT52YXJzOwogCXQtPnBhcnBvcnRfZGlyWzBdLmNoaWxkID0gdC0+cG9ydF9kaXI7CkBAIC01NTEsMjYgKzUzNywxMiBAQAogCXQtPmRldl9kaXJbMF0uY2hpbGQgPSB0LT5wYXJwb3J0X2RpcjsKIAl0LT5wYXJwb3J0X2RpclswXS5jaGlsZCA9IHQtPnBvcnRfZGlyOwogCXQtPnBvcnRfZGlyWzBdLnByb2NuYW1lID0gcG9ydC0+bmFtZTsKLQl0LT5wb3J0X2RpclswXS5jdGxfbmFtZSA9IHBvcnQtPm51bWJlciArIDE7IC8qIG5iIDAgaXNuJ3QgbGVnYWwgaGVyZSAqLworCXQtPnBvcnRfZGlyWzBdLmN0bF9uYW1lID0gMDsKIAl0LT5wb3J0X2RpclswXS5jaGlsZCA9IHQtPmRldmljZXNfcm9vdF9kaXI7CiAJdC0+ZGV2aWNlc19yb290X2RpclswXS5jaGlsZCA9IHQtPmRldmljZV9kaXI7CiAKLSNpZmRlZiBDT05GSUdfUEFSUE9SVF8xMjg0Ci0KLQl0LT5kZXZpY2VfZGlyWzBdLmN0bF9uYW1lID0KLQkJcGFycG9ydF9kZXZpY2VfbnVtKHBvcnQtPm51bWJlciwgcG9ydC0+bXV4cG9ydCwKLQkJCQkgICBkZXZpY2UtPmRhaXN5KQotCQkrIDE7ICAvKiBuYiAwIGlzbid0IGxlZ2FsIGhlcmUgKi8gCi0KLSNlbHNlIC8qIE5vIElFRUUgMTI4NCBzdXBwb3J0ICovCi0KLQkvKiBwYXJwb3J0X2RldmljZV9udW0gaXNuJ3QgYXZhaWxhYmxlLiAqLwotCXQtPmRldmljZV9kaXJbMF0uY3RsX25hbWUgPSAxOwotCQotI2VuZGlmIC8qIElFRUUgMTI4NCBzdXBwb3J0IG9yIG5vdCAqLwotCisJdC0+ZGV2aWNlX2RpclswXS5jdGxfbmFtZSA9IDA7CiAJdC0+ZGV2aWNlX2RpclswXS5wcm9jbmFtZSA9IGRldmljZS0+bmFtZTsKLQl0LT5kZXZpY2VfZGlyWzBdLmV4dHJhMSA9IGRldmljZTsKIAl0LT5kZXZpY2VfZGlyWzBdLmNoaWxkID0gdC0+dmFyczsKIAl0LT52YXJzWzBdLmRhdGEgPSAmZGV2aWNlLT50aW1lc2xpY2U7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMgYi9kcml2ZXJzL3BjbWNpYS9tMzJyX3BjYy5jCmluZGV4IDY3ZDI4ZWUuLmM1ZTBkODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL20zMnJfcGNjLmMKKysrIGIvZHJpdmVycy9wY21jaWEvbTMycl9wY2MuYwpAQCAtMjIsOSArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYyBiL2RyaXZlcnMvcGNtY2lhL204eHhfcGNtY2lhLmMKaW5kZXggYjAxOTg1NC4uZDE4Mjc2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvbTh4eF9wY21jaWEuYworKysgYi9kcml2ZXJzL3BjbWNpYS9tOHh4X3BjbWNpYS5jCkBAIC00OCw5ICs0OCw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdGltZS5oPgogI2luY2x1ZGUgPGFzbS9tcGM4eHguaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvZHMyNzYwX2JhdHRlcnkuYwppbmRleCBiZTcwMjFlLi5iZGI5YjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL2RzMjc2MF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9kczI3NjBfYmF0dGVyeS5jCkBAIC0zNjYsNyArMzY2LDcgQEAKIAogCXJldHZhbCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmZGktPmJhdCk7CiAJaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKGRpLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmF0dGVyeSIpOworCQlkZXZfZXJyKGRpLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgYmF0dGVyeVxuIik7CiAJCWdvdG8gYmF0dF9mYWlsZWQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdi5jIGIvZHJpdmVycy9wczMvcHMzYXYuYwppbmRleCAzOTdmNGNlLi44N2IzNDkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKQEAgLTcyOSw3ICs3MjksNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBzM2F2X21vbml0b3JfcXVpcmsgewogCWNvbnN0IGNoYXIgKm1vbml0b3JfbmFtZTsKLQl1MzIgY2xlYXJfNjAsIGNsZWFyXzUwLCBjbGVhcl92ZXNhOworCXUzMiBjbGVhcl82MDsKIH0gcHMzYXZfbW9uaXRvcl9xdWlya3NbXSA9IHsKIAl7CiAJCS5tb25pdG9yX25hbWUJPSAiREVMTCAyMDA3V0ZQIiwKQEAgLTc1NywxMCArNzU3LDYgQEAKIAkJCQlxdWlyay0+bW9uaXRvcl9uYW1lKTsKIAkJCWluZm8tPnJlc182MC5yZXNfYml0cyAmPSB+cXVpcmstPmNsZWFyXzYwOwogCQkJaW5mby0+cmVzXzYwLm5hdGl2ZSAmPSB+cXVpcmstPmNsZWFyXzYwOwotCQkJaW5mby0+cmVzXzUwLnJlc19iaXRzICY9IH5xdWlyay0+Y2xlYXJfNTA7Ci0JCQlpbmZvLT5yZXNfNTAubmF0aXZlICY9IH5xdWlyay0+Y2xlYXJfNTA7Ci0JCQlpbmZvLT5yZXNfdmVzYS5yZXNfYml0cyAmPSB+cXVpcmstPmNsZWFyX3Zlc2E7Ci0JCQlpbmZvLT5yZXNfdmVzYS5uYXRpdmUgJj0gfnF1aXJrLT5jbGVhcl92ZXNhOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNzdG9yX2xpYi5jIGIvZHJpdmVycy9wczMvcHMzc3Rvcl9saWIuYwppbmRleCAzYTk4MjRlLi41NTk1NWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNzdG9yX2xpYi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM3N0b3JfbGliLmMKQEAgLTY2LDcgKzY2LDcgQEAKIAlpZiAobiA+IDEpCiAJCWRldl9pbmZvKCZkZXYtPnNiZC5jb3JlLAogCQkJICIlczoldTogJWx1IGFjY2Vzc2libGUgcmVnaW9ucyBmb3VuZC4gT25seSB0aGUgZmlyc3QgIgotCQkJICJvbmUgd2lsbCBiZSB1c2VkIiwKKwkJCSAib25lIHdpbGwgYmUgdXNlZFxuIiwKIAkJCSBfX2Z1bmNfXywgX19MSU5FX18sIG4pOwogCWRldi0+cmVnaW9uX2lkeCA9IF9fZmZzKGRldi0+YWNjZXNzaWJsZV9yZWdpb25zKTsKIAlkZXZfaW5mbygmZGV2LT5zYmQuY29yZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHMzL3Z1YXJ0LmMgYi9kcml2ZXJzL3BzMy92dWFydC5jCmluZGV4IGJlYTI1YTEuLjlkZWE1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcHMzL3Z1YXJ0LmMKKysrIGIvZHJpdmVycy9wczMvdnVhcnQuYwpAQCAtMjIsMTEgKzIyLDExIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3BzMy5oPgogCiAjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2x2MWNhbGwuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAKICNpbmNsdWRlICJ2dWFydC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA2NDIwYTkwLi5jYmRlNzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTI0MCw3ICsyNDAsNyBAQAogCWRlcGVuZHMgb24gTUVORUxBVVMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIFJUQyBvbiB0aGUKLQkgIFRXTDkyMzMwICJNZW5lbGF1cyIgcG93ZXIgbWFuZ2VtZW50IGNoaXAsIHVzZWQgd2l0aCBPTUFQMgorCSAgVFdMOTIzMzAgIk1lbmVsYXVzIiBwb3dlciBtYW5hZ2VtZW50IGNoaXAsIHVzZWQgd2l0aCBPTUFQMgogCSAgcGxhdGZvcm1zLiAgVGhlIHN1cHBvcnQgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mCiAJICB0aGUgTWVuZWxhdXMgZHJpdmVyOyBpdCdzIG5vdCBzZXBhcmF0ZSBtb2R1bGUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wbDAzMS5jIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKaW5kZXggZTRiZjY4Yy4uMmZkNDllZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMKQEAgLTIxLDExICsyMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vcnRjLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKaW5kZXggMDkxOGI3OC4uNmYxZTlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwpAQCAtMjksOCArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9ydGMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKaW5kZXggNmNhZDA4NC4uMmFlMGU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKQEAgLTIwMCw5ICsyMDAsOCBAQAogCiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZydGMtPmRldiwgJmRldl9hdHRyX3dha2VhbGFybSk7CiAJaWYgKGVycikKLQkJZGV2X2VycihydGMtPmRldi5wYXJlbnQsICJmYWlsZWQgdG8gY3JlYXRlICIKLQkJCQkiYWxhcm0gYXR0cmlidXRlLCAlZCIsCi0JCQkJZXJyKTsKKwkJZGV2X2VycihydGMtPmRldi5wYXJlbnQsCisJCQkiZmFpbGVkIHRvIGNyZWF0ZSBhbGFybSBhdHRyaWJ1dGUsICVkXG4iLCBlcnIpOwogfQogCiB2b2lkIHJ0Y19zeXNmc19kZWxfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwppbmRleCA4YjlkNjhmLi41YjczODVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKQEAgLTQwLDcgKzQwLDcgQEAKICAqCiAgKiAgIEVhY2ggYml0IGNvbmZpZ3VyYXRpb24gbGVhZGluZyB0byBhbiBhY3Rpb24gY29kZSAyIChFeGl0IHdpdGgKICAqICAgcHJvZ3JhbW1pbmcgZXJyb3Igb3IgdW51c3VhbCBjb25kaXRpb24gaW5kaWNhdGlvbikKLSAqICAgYXJlIGhhbmRsZWQgYXMgZmF0YWwgZXJyb3K0cy4KKyAqICAgYXJlIGhhbmRsZWQgYXMgZmF0YWwgZXJyb3JzLgogICoKICAqICAgQWxsIG90aGVyIGNvbmZpZ3VyYXRpb25zIGFyZSBoYW5kbGVkIGFzIHJlY292ZXJhYmxlIGVycm9ycy4KICAqCkBAIC0yMDAxLDcgKzIwMDEsNyBAQAogCQlzd2l0Y2ggKHNlbnNlWzI4XSkgewogCQljYXNlIDB4MTc6CiAJCQkvKiBpc3N1ZSBhIERpYWdub3N0aWMgQ29udHJvbCBjb21tYW5kIHdpdGggYW4KLQkJCSAqIEluaGliaXQgV3JpdGUgc3ViY29tbWFuZCBhbmQgY29udHJvbGVyIG1vZGlmaWVyICovCisJCQkgKiBJbmhpYml0IFdyaXRlIHN1YmNvbW1hbmQgYW5kIGNvbnRyb2xsZXIgbW9kaWZpZXIgKi8KIAkJCWVycCA9IGRhc2RfMzk5MF9lcnBfRENUTChlcnAsIDB4MjApOwogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY3BpLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NwaS5jCmluZGV4IDI5ZmUyYTUuLjgyYTEzZDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY3BpLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jcGkuYwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAJc2NscF9hc2NlYmNfc3RyKGV2Yi0+c3lzdGVtX25hbWUsIENQSV9MRU5HVEhfU1lTVEVNX05BTUUpOwogCUVCQ19UT1VQUEVSKGV2Yi0+c3lzdGVtX25hbWUsIENQSV9MRU5HVEhfU1lTVEVNX05BTUUpOwogCi0JLyogc2V0IHN5dGVtIGxldmVsICovCisJLyogc2V0IHN5c3RlbSBsZXZlbCAqLwogCWV2Yi0+c3lzdGVtX2xldmVsID0gTElOVVhfVkVSU0lPTl9DT0RFOwogCiAJLyogc2V0IHN5c3BsZXggbmFtZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYyBiL2RyaXZlcnMvczM5MC9jaW8vY21mLmMKaW5kZXggYjk2MGY2Ni4uNzI1YjBkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jbWYuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2NtZi5jCkBAIC0xNTgsNyArMTU4LDcgQEAKIAlpZiAoY291bnQgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQkvKiB2YWx1ZSBjb21lcyBpbiB1bml0cyBvZiAxMjggtXNlYyAqLworCS8qIHZhbHVlIGNvbWVzIGluIHVuaXRzIG9mIDEyOCDCtXNlYyAqLwogCXJldCA9IHRpbWVfdG9fbnNlYyh2YWx1ZSk7CiAJZG9fZGl2KHJldCwgY291bnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMgYi9kcml2ZXJzL3MzOTAvY2lvL2lkc2V0LmMKaW5kZXggMTZlYTgyOC4uZWY3YmMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9pZHNldC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vaWRzZXQuYwpAQCAtNiw3ICs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlICJpZHNldC5oIgogI2luY2x1ZGUgImNzcy5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L2NsYXcuYyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCmluZGV4IDM5OTY5NWYuLjM1NjE5ODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvY2xhdy5jCkBAIC01OSwxMyArNTksMTMgQEAKICAqICAgIDEuMTUgIENoYW5nZWQgZm9yIDIuNiBLZXJuZWwgIE5vIGxvbmdlciBjb21waWxlcyBvbiAyLjQgb3IgbG93ZXIKICAqICAgIDEuMjUgIEFkZGVkIFBhY2tpbmcgc3VwcG9ydAogICovCi0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KICNpbmNsdWRlIDxhc20vY2N3Z3JvdXAuaD4KICNpbmNsdWRlIDxhc20vZGVidWcuaD4KICNpbmNsdWRlIDxhc20vaWRhbHMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwppbmRleCA0NDk5MzcyLi42YmYzZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2N0Y21haW4uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgSUJNIERldXRzY2hsYW5kIEVudHdpY2tsdW5nIEdtYkgsIElCTSBDb3Jwb3JhdGlvbgogICogQXV0aG9yKHMpOiBGcml0eiBFbGZlcnQgKGVsZmVydEBkZS5pYm0uY29tLCBmZWxmZXJ0QG1pbGxlbnV4LmNvbSkKLSAqIEZpeGVzIGJ5IDogSm9jaGVuIFL2aHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQorICogRml4ZXMgYnkgOiBKb2NoZW4gUsO2aHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQogICogICAgICAgICAgICBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KIAkgICAgICBQZXRlciBUaWVkZW1hbm4gKHB0aWVkZW1AZGUuaWJtLmNvbSkKICAqIERyaXZlciBNb2RlbCBzdHVmZiBieSA6IENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4KQEAgLTE5LDcgKzE5LDcgQEAKICAqICBEaWV0ZXIgV2VsbGVyZGllayAod2VsQGRlLmlibS5jb20pCiAgKiAgTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKQogICogIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKLSAqICBKb2NoZW4gUvZocmlnIChyb2VocmlnQGRlLmlibS5jb20pCisgKiAgSm9jaGVuIFLDtmhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTg4NSw3ICs4ODUsNyBAQAogCX0KIAogCS8qKgotCSAqIERvbrR0IHNldHVwIGEgdGltZXIgZm9yIHJlY2VpdmluZyB0aGUgaW5pdGlhbCBSWCBmcmFtZQorCSAqIERvbid0IHNldHVwIGEgdGltZXIgZm9yIHJlY2VpdmluZyB0aGUgaW5pdGlhbCBSWCBmcmFtZQogCSAqIGlmIGluIGNvbXBhdGliaWxpdHkgbW9kZSwgc2luY2UgVk0gVENQIGRlbGF5cyB0aGUgaW5pdGlhbAogCSAqIGZyYW1lIHVudGlsIGl0IGhhcyBzb21lIGRhdGEgdG8gc2VuZC4KIAkgKi8KQEAgLTkwNSwxMCArOTA1LDEwIEBACiAJCWNjd19jaGVja19yZXR1cm5fY29kZShjaCwgcmMsICJpbml0IElPIik7CiAJfQogCS8qKgotCSAqIElmIGluIGNvbXBhdGliaWxpdHkgbW9kZSBzaW5jZSB3ZSBkb260dCBzZXR1cCBhIHRpbWVyLCB3ZQorCSAqIElmIGluIGNvbXBhdGliaWxpdHkgbW9kZSBzaW5jZSB3ZSBkb24ndCBzZXR1cCBhIHRpbWVyLCB3ZQogCSAqIGFsc28gc2lnbmFsIFJYIGNoYW5uZWwgdXAgaW1tZWRpYXRlbHkuIFRoaXMgZW5hYmxlcyB1cwogCSAqIHRvIHNlbmQgcGFja2V0cyBlYXJseSB3aGljaCBpbiB0dXJuIHVzdWFsbHkgdHJpZ2dlcnMgc29tZQotCSAqIHJlcGx5IGZyb20gVk0gVENQIHdoaWNoIGJyaW5ncyB1cCB0aGUgUlggY2hhbm5lbCB0byBpdLRzCisJICogcmVwbHkgZnJvbSBWTSBUQ1Agd2hpY2ggYnJpbmdzIHVwIHRoZSBSWCBjaGFubmVsIHRvIGl0J3MKIAkgKiBmaW5hbCBzdGF0ZS4KIAkgKi8KIAlpZiAoKENIQU5ORUxfRElSRUNUSU9OKGNoLT5mbGFncykgPT0gUkVBRCkgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCmluZGV4IGEyZDA4YzkuLmZmOTk5ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYwpAQCAtNjY0Myw3ICs2NjQzLDggQEAKIAlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBxZXRoX3ZsYW5fcnhfa2lsbF92aWQ7CiAJZGV2LT52bGFuX3J4X2FkZF92aWQgPSBxZXRoX3ZsYW5fcnhfYWRkX3ZpZDsKICNlbmRpZgotCWRldi0+aGVhZGVyX29wcyA9ICZxZXRoX251bGxfb3BzOworCWlmIChxZXRoX2dldF9uZXRkZXZfZmxhZ3MoY2FyZCkgJiBJRkZfTk9BUlApCisJCWRldi0+aGVhZGVyX29wcyA9ICZxZXRoX251bGxfb3BzOwogCiAjaWZkZWYgQ09ORklHX1FFVEhfSVBWNgogCS8qSVB2NiBhZGRyZXNzIGF1dG9jb25maWd1cmF0aW9uIHN0dWZmKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2J1cy9jaGFyL3ZmYy5oIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjLmgKaW5kZXggNjM5NDFhMi4uZjFhYTEzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjLmgKKysrIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjLmgKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXZvbGF0aWxlIHN0cnVjdCB2ZmNfcmVncyBfX2lvbWVtICpyZWdzOwogCXN0cnVjdCB2ZmNfcmVncyAqcGh5c19yZWdzOwogCXVuc2lnbmVkIGludCBjb250cm9sX3JlZzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGRldmljZV9sb2NrX3NlbTsKKwlzdHJ1Y3QgbXV0ZXggZGV2aWNlX2xvY2tfbXR4OwogCWludCBpbnN0YW5jZTsKIAlpbnQgYnVzeTsKIAl1bnNpZ25lZCBsb25nIHdoaWNoX2lvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jIGIvZHJpdmVycy9zYnVzL2NoYXIvdmZjX2Rldi5jCmluZGV4IDkyNjlmN2YuLmQ0ZjhmY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2J1cy9jaGFyL3ZmY19kZXYuYworKysgYi9kcml2ZXJzL3NidXMvY2hhci92ZmNfZGV2LmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxhc20vb3BlbnByb20uaD4KQEAgLTU0LDEyICs1NSwxMiBAQAogCiB2b2lkIHZmY19sb2NrX2RldmljZShzdHJ1Y3QgdmZjX2RldiAqZGV2KQogewotCWRvd24oJmRldi0+ZGV2aWNlX2xvY2tfc2VtKTsKKwltdXRleF9sb2NrKCZkZXYtPmRldmljZV9sb2NrX210eCk7CiB9CiAKIHZvaWQgdmZjX3VubG9ja19kZXZpY2Uoc3RydWN0IHZmY19kZXYgKmRldikKIHsKLQl1cCgmZGV2LT5kZXZpY2VfbG9ja19zZW0pOworCW11dGV4X3VubG9jaygmZGV2LT5kZXZpY2VfbG9ja19tdHgpOwogfQogCiAKQEAgLTEzMyw3ICsxMzQsNyBAQAogaW50IGluaXRfdmZjX2RldnN0cnVjdChzdHJ1Y3QgdmZjX2RldiAqZGV2LCBpbnQgaW5zdGFuY2UpIAogewogCWRldi0+aW5zdGFuY2U9aW5zdGFuY2U7Ci0JaW5pdF9NVVRFWCgmZGV2LT5kZXZpY2VfbG9ja19zZW0pOworCW11dGV4X2luaXQoJmRldi0+ZGV2aWNlX2xvY2tfbXR4KTsKIAlkZXYtPmNvbnRyb2xfcmVnPTA7CiAJZGV2LT5idXN5PTA7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jIGIvZHJpdmVycy9zY3NpL0ZsYXNoUG9pbnQuYwppbmRleCBhN2Y5MTZjLi4xYzkwNzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvRmxhc2hQb2ludC5jCisrKyBiL2RyaXZlcnMvc2NzaS9GbGFzaFBvaW50LmMKQEAgLTI1LDkgKzI1LDYgQEAKIAogI2RlZmluZSBGQUlMVVJFICAgICAgICAgMHhGRkZGRkZGRkwKIAotI2RlZmluZSBCSVQoeCkgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKSgxPDwoeCkpKQkvKiBzaW5nbGUtYml0IG1hc2sgaW4gYml0IHBvc2l0aW9uIHggKi8KLSNkZWZpbmUgQklUVyh4KSAgICAgICAgICAoKHVuc2lnbmVkIHNob3J0KSgxPDwoeCkpKQkvKiBzaW5nbGUtYml0IG1hc2sgaW4gYml0IHBvc2l0aW9uIHggKi8KLQogc3RydWN0IHNjY2I7CiB0eXBlZGVmIHZvaWQgKCpDQUxMX0JLX0ZOKSAoc3RydWN0IHNjY2IgKik7CiAKQEAgLTM3NCw5ICszNzEsOSBAQAogI2RlZmluZSAgU0NBTV9FTkFCTEVEICAgQklUKDIpCiAjZGVmaW5lICBTQ0FNX0xFVkVMMiAgICBCSVQoMykKIAotI2RlZmluZQlSRU5FR09fRU5BCQlCSVRXKDEwKQotI2RlZmluZQlDT05OSU9fRU5BCQlCSVRXKDExKQotI2RlZmluZSAgR1JFRU5fUENfRU5BICAgQklUVygxMikKKyNkZWZpbmUJUkVORUdPX0VOQQkJQklUKDEwKQorI2RlZmluZQlDT05OSU9fRU5BCQlCSVQoMTEpCisjZGVmaW5lICBHUkVFTl9QQ19FTkEgICBCSVQoMTIpCiAKICNkZWZpbmUgIEFVVE9fUkFURV8wMCAgIDAwCiAjZGVmaW5lICBBVVRPX1JBVEVfMDUgICAwMQpAQCAtNTExLDIzICs1MDgsMjMgQEAKIAogI2RlZmluZSAgaHBfaW50ZW5hCQkgMHg0MAogCi0jZGVmaW5lICBSRVNFVAkJIEJJVFcoNykKLSNkZWZpbmUgIFBST0dfSExUCQkgQklUVyg2KQotI2RlZmluZSAgUEFSSVRZCQkgQklUVyg1KQotI2RlZmluZSAgRklGTwkJIEJJVFcoNCkKLSNkZWZpbmUgIFNFTAkJIEJJVFcoMykKLSNkZWZpbmUgIFNDQU1fU0VMCQkgQklUVygyKQotI2RlZmluZSAgUlNFTAkJIEJJVFcoMSkKLSNkZWZpbmUgIFRJTUVPVVQJCSBCSVRXKDApCi0jZGVmaW5lICBCVVNfRlJFRQkJIEJJVFcoMTUpCi0jZGVmaW5lICBYRkVSX0NOVF8wCSBCSVRXKDE0KQotI2RlZmluZSAgUEhBU0UJCSBCSVRXKDEzKQotI2RlZmluZSAgSVVOS1dOCQkgQklUVygxMikKLSNkZWZpbmUgIElDTURfQ09NUAkgQklUVygxMSkKLSNkZWZpbmUgIElUSUNLTEUJCSBCSVRXKDEwKQotI2RlZmluZSAgSURPX1NUUlQJCSBCSVRXKDkpCi0jZGVmaW5lICBJVEFSX0RJU0MJIEJJVFcoOCkKLSNkZWZpbmUgIEFVVE9fSU5UCQkgKEJJVFcoMTIpK0JJVFcoMTEpK0JJVFcoMTApK0JJVFcoOSkrQklUVyg4KSkKKyNkZWZpbmUgIFJFU0VUCQkgQklUKDcpCisjZGVmaW5lICBQUk9HX0hMVAkJIEJJVCg2KQorI2RlZmluZSAgUEFSSVRZCQkgQklUKDUpCisjZGVmaW5lICBGSUZPCQkgQklUKDQpCisjZGVmaW5lICBTRUwJCSBCSVQoMykKKyNkZWZpbmUgIFNDQU1fU0VMCQkgQklUKDIpCisjZGVmaW5lICBSU0VMCQkgQklUKDEpCisjZGVmaW5lICBUSU1FT1VUCQkgQklUKDApCisjZGVmaW5lICBCVVNfRlJFRQkJIEJJVCgxNSkKKyNkZWZpbmUgIFhGRVJfQ05UXzAJIEJJVCgxNCkKKyNkZWZpbmUgIFBIQVNFCQkgQklUKDEzKQorI2RlZmluZSAgSVVOS1dOCQkgQklUKDEyKQorI2RlZmluZSAgSUNNRF9DT01QCSBCSVQoMTEpCisjZGVmaW5lICBJVElDS0xFCQkgQklUKDEwKQorI2RlZmluZSAgSURPX1NUUlQJCSBCSVQoOSkKKyNkZWZpbmUgIElUQVJfRElTQwkgQklUKDgpCisjZGVmaW5lICBBVVRPX0lOVAkJIChCSVQoMTIpK0JJVCgxMSkrQklUKDEwKStCSVQoOSkrQklUKDgpKQogI2RlZmluZSAgQ0xSX0FMTF9JTlQJIDB4RkZGRgogI2RlZmluZSAgQ0xSX0FMTF9JTlRfMQkgMHhGRjAwCiAKQEAgLTY3NCwzNyArNjcxLDM3IEBACiAjZGVmaW5lICBCSU9TX0RBVEFfT0ZGU0VUICAgICAweDYwCiAjZGVmaW5lICBCSU9TX1JFTEFUSVZFX0NBUkQgICAweDY0CiAKLSNkZWZpbmUgIEFSMyAgICAgIChCSVRXKDkpICsgQklUVyg4KSkKLSNkZWZpbmUgIFNEQVRBICAgIEJJVFcoMTApCisjZGVmaW5lICBBUjMgICAgICAoQklUKDkpICsgQklUKDgpKQorI2RlZmluZSAgU0RBVEEgICAgQklUKDEwKQogCi0jZGVmaW5lICBDUkRfT1AgICBCSVRXKDExKQkvKiBDbXAgUmVnLiB3LyBEYXRhICovCisjZGVmaW5lICBDUkRfT1AgICBCSVQoMTEpCS8qIENtcCBSZWcuIHcvIERhdGEgKi8KIAotI2RlZmluZSAgQ1JSX09QICAgQklUVygxMikJLyogQ21wIFJlZy4gdy4gUmVnLiAqLworI2RlZmluZSAgQ1JSX09QICAgQklUKDEyKQkvKiBDbXAgUmVnLiB3LiBSZWcuICovCiAKLSNkZWZpbmUgIENQRV9PUCAgIChCSVRXKDE0KStCSVRXKDExKSkJLyogQ21wIFNDU0kgcGhzICYgQnJhbmNoIEVRICovCisjZGVmaW5lICBDUEVfT1AgICAoQklUKDE0KStCSVQoMTEpKQkvKiBDbXAgU0NTSSBwaHMgJiBCcmFuY2ggRVEgKi8KIAotI2RlZmluZSAgQ1BOX09QICAgKEJJVFcoMTQpK0JJVFcoMTIpKQkvKiBDbXAgU0NTSSBwaHMgJiBCcmFuY2ggTk9UIEVRICovCisjZGVmaW5lICBDUE5fT1AgICAoQklUKDE0KStCSVQoMTIpKQkvKiBDbXAgU0NTSSBwaHMgJiBCcmFuY2ggTk9UIEVRICovCiAKICNkZWZpbmUgIEFEQVRBX09VVCAgIDB4MDAKLSNkZWZpbmUgIEFEQVRBX0lOICAgIEJJVFcoOCkKLSNkZWZpbmUgIEFDT01NQU5EICAgIEJJVFcoMTApCi0jZGVmaW5lICBBU1RBVFVTICAgICAoQklUVygxMCkrQklUVyg4KSkKLSNkZWZpbmUgIEFNU0dfT1VUICAgIChCSVRXKDEwKStCSVRXKDkpKQotI2RlZmluZSAgQU1TR19JTiAgICAgKEJJVFcoMTApK0JJVFcoOSkrQklUVyg4KSkKKyNkZWZpbmUgIEFEQVRBX0lOICAgIEJJVCg4KQorI2RlZmluZSAgQUNPTU1BTkQgICAgQklUKDEwKQorI2RlZmluZSAgQVNUQVRVUyAgICAgKEJJVCgxMCkrQklUKDgpKQorI2RlZmluZSAgQU1TR19PVVQgICAgKEJJVCgxMCkrQklUKDkpKQorI2RlZmluZSAgQU1TR19JTiAgICAgKEJJVCgxMCkrQklUKDkpK0JJVCg4KSkKIAotI2RlZmluZSAgQlJIX09QICAgQklUVygxMykJLyogQnJhbmNoICovCisjZGVmaW5lICBCUkhfT1AgICBCSVQoMTMpCS8qIEJyYW5jaCAqLwogCiAjZGVmaW5lICBBTFdBWVMgICAweDAwCi0jZGVmaW5lICBFUVVBTCAgICBCSVRXKDgpCi0jZGVmaW5lICBOT1RfRVEgICBCSVRXKDkpCisjZGVmaW5lICBFUVVBTCAgICBCSVQoOCkKKyNkZWZpbmUgIE5PVF9FUSAgIEJJVCg5KQogCi0jZGVmaW5lICBUQ0JfT1AgICAoQklUVygxMykrQklUVygxMSkpCS8qIFRlc3QgY29uZGl0aW9uICYgYnJhbmNoICovCisjZGVmaW5lICBUQ0JfT1AgICAoQklUKDEzKStCSVQoMTEpKQkvKiBUZXN0IGNvbmRpdGlvbiAmIGJyYW5jaCAqLwogCi0jZGVmaW5lICBGSUZPXzAgICAgICBCSVRXKDEwKQorI2RlZmluZSAgRklGT18wICAgICAgQklUKDEwKQogCi0jZGVmaW5lICBNUE1fT1AgICBCSVRXKDE1KQkvKiBNYXRjaCBwaGFzZSBhbmQgbW92ZSBkYXRhICovCisjZGVmaW5lICBNUE1fT1AgICBCSVQoMTUpCS8qIE1hdGNoIHBoYXNlIGFuZCBtb3ZlIGRhdGEgKi8KIAotI2RlZmluZSAgTVJSX09QICAgQklUVygxNCkJLyogTW92ZSBEUmVnLiB0byBSZWcuICovCisjZGVmaW5lICBNUlJfT1AgICBCSVQoMTQpCS8qIE1vdmUgRFJlZy4gdG8gUmVnLiAqLwogCiAjZGVmaW5lICBTX0lEUkVHICAoQklUKDIpK0JJVCgxKStCSVQoMCkpCiAKQEAgLTcxMiw5ICs3MDksOSBAQAogI2RlZmluZSAgRF9BUjEgICAgQklUKDApCiAjZGVmaW5lICBEX0JVQ0tFVCAoQklUKDIpICsgQklUKDEpICsgQklUKDApKQogCi0jZGVmaW5lICBSQVRfT1AgICAgICAoQklUVygxNCkrQklUVygxMykrQklUVygxMSkpCisjZGVmaW5lICBSQVRfT1AgICAgICAoQklUKDE0KStCSVQoMTMpK0JJVCgxMSkpCiAKLSNkZWZpbmUgIFNTSV9PUCAgICAgIChCSVRXKDE1KStCSVRXKDExKSkKKyNkZWZpbmUgIFNTSV9PUCAgICAgIChCSVQoMTUpK0JJVCgxMSkpCiAKICNkZWZpbmUgIFNTSV9JVEFSX0RJU0MJKElUQVJfRElTQyA+PiA4KQogI2RlZmluZSAgU1NJX0lET19TVFJUCShJRE9fU1RSVCA+PiA4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwppbmRleCAzMDkwNWNlLi5hNTc2M2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvS2NvbmZpZworKysgYi9kcml2ZXJzL3Njc2kvS2NvbmZpZwpAQCAtNTIxLDcgKzUyMSw3IEBACiAKIGNvbmZpZyBTQ1NJX0FEVkFOU1lTCiAJdHJpc3RhdGUgIkFkdmFuU3lzIFNDU0kgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNDU0kKKwlkZXBlbmRzIG9uIFNDU0kgJiYgVklSVF9UT19CVVMKIAlkZXBlbmRzIG9uIElTQSB8fCBFSVNBIHx8IFBDSQogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIGFsbCBTQ1NJIGhvc3QgYWRhcHRlcnMgbWFudWZhY3R1cmVkIGJ5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmggYi9kcml2ZXJzL3Njc2kvYWFjcmFpZC9hYWNyYWlkLmgKaW5kZXggMDNiNTEwMi4uOWFiYmE4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FhY3JhaWQvYWFjcmFpZC5oCisrKyBiL2RyaXZlcnMvc2NzaS9hYWNyYWlkL2FhY3JhaWQuaApAQCAtMTUyNiw3ICsxNTI2LDcgQEAKIAlfX2xlMzIJCQljYXBhY2l0eWhpZ2g7CiB9OwogCi0jZGVmaW5lIEZTQ1NfTk9UQ0xFQU4JMHgwMDAxICAvKiBmc2NrIGlzIG5lY2Nlc3NhcnkgYmVmb3JlIG1vdW50aW5nICovCisjZGVmaW5lIEZTQ1NfTk9UQ0xFQU4JMHgwMDAxICAvKiBmc2NrIGlzIG5lY2Vzc2FyeSBiZWZvcmUgbW91bnRpbmcgKi8KICNkZWZpbmUgRlNDU19SRUFET05MWQkweDAwMDIJLyogcG9zc2libGUgcmVzdWx0IG9mIGJyb2tlbiBtaXJyb3IgKi8KICNkZWZpbmUgRlNDU19ISURERU4JMHgwMDA0CS8qIHNob3VsZCBiZSBpZ25vcmVkIC0gc2V0IGR1cmluZyBhIGNsZWFyICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMgYi9kcml2ZXJzL3Njc2kvYWhhMTUyeC5jCmluZGV4IGYwOGU3MWUuLmE1OGMyNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNTJ4LmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE1MnguYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGFoYTE1MnguYyAtLSBBZGFwdGVjIEFIQS0xNTJ4IGRyaXZlcgotICogQXV0aG9yOiBK/HJnZW4gRS4gRmlzY2hlciwgZmlzY2hlckBub3JiaXQuZGUKLSAqIENvcHlyaWdodCAxOTkzLTIwMDQgSvxyZ2VuIEUuIEZpc2NoZXIKKyAqIEF1dGhvcjogSsO8cmdlbiBFLiBGaXNjaGVyLCBmaXNjaGVyQG5vcmJpdC5kZQorICogQ29weXJpZ2h0IDE5OTMtMjAwNCBKw7xyZ2VuIEUuIEZpc2NoZXIKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0zNTcsNyArMzU3LDcgQEAKIAljaGVja19jb25kaXRpb24gPSAweDA4MDAsCS8qIHJlcXVlc3Rpbmcgc2Vuc2UgYWZ0ZXIgQ0hFQ0sgQ09ORElUSU9OICovCiB9OwogCi1NT0RVTEVfQVVUSE9SKCJK/HJnZW4gRmlzY2hlciIpOworTU9EVUxFX0FVVEhPUigiSsO8cmdlbiBGaXNjaGVyIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oQUhBMTUyWF9SRVZJRCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2NhbS5oIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvY2FtLmgKaW5kZXggMjZmMTdlMy4uNjg3YWVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvY2FtLmgKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvY2FtLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlDQU1fUkVRX0FCT1JURUQsCS8qIENDQiByZXF1ZXN0IGFib3J0ZWQgYnkgdGhlIGhvc3QgKi8KIAlDQU1fVUFfQUJPUlQsCQkvKiBVbmFibGUgdG8gYWJvcnQgQ0NCIHJlcXVlc3QgKi8KIAlDQU1fUkVRX0NNUF9FUlIsCS8qIENDQiByZXF1ZXN0IGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yICovCi0JQ0FNX0JVU1ksCQkvKiBDQU0gc3Vic3l0ZW0gaXMgYnVzeSAqLworCUNBTV9CVVNZLAkJLyogQ0FNIHN1YnN5c3RlbSBpcyBidXN5ICovCiAJQ0FNX1JFUV9JTlZBTElELAkvKiBDQ0IgcmVxdWVzdCB3YXMgaW52YWxpZCAqLwogCUNBTV9QQVRIX0lOVkFMSUQsCS8qIFN1cHBsaWVkIFBhdGggSUQgaXMgaW52YWxpZCAqLwogCUNBTV9TRUxfVElNRU9VVCwJLyogVGFyZ2V0IFNlbGVjdGlvbiBUaW1lb3V0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGMzOTV4LmMgYi9kcml2ZXJzL3Njc2kvZGMzOTV4LmMKaW5kZXggZmQ0MmQ0Ny4uYTlkZWY2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2RjMzk1eC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kYzM5NXguYwpAQCAtMTgwOCwxMiArMTgwOCwxMiBAQAogCWlycXJldHVybl90IGhhbmRsZWQgPSBJUlFfTk9ORTsKIAogCS8qCi0JICogQ2hlY2sgZm9yIHBlbmRpbmcgaW50ZXJ1cHQKKwkgKiBDaGVjayBmb3IgcGVuZGluZyBpbnRlcnJ1cHQKIAkgKi8KIAlzY3NpX3N0YXR1cyA9IERDMzk1eF9yZWFkMTYoYWNiLCBUUk1fUzEwNDBfU0NTSV9TVEFUVVMpOwogCWRtYV9zdGF0dXMgPSBEQzM5NXhfcmVhZDgoYWNiLCBUUk1fUzEwNDBfRE1BX1NUQVRVUyk7CiAJaWYgKHNjc2lfc3RhdHVzICYgU0NTSUlOVEVSUlVQVCkgewotCQkvKiBpbnRlcnVwdCBwZW5kaW5nIC0gbGV0J3MgcHJvY2VzcyBpdCEgKi8KKwkJLyogaW50ZXJydXB0IHBlbmRpbmcgLSBsZXQncyBwcm9jZXNzIGl0ISAqLwogCQlkYzM5NXhfaGFuZGxlX2ludGVycnVwdChhY2IsIHNjc2lfc3RhdHVzKTsKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwogCX0KQEAgLTQ1NzksNyArNDU3OSw3IEBACiAJaWYgKGFjYi0+Y29uZmlnICYgSENDX1NDU0lfUkVTRVQpCiAJCXJlc2V0X3Njc2lfYnVzKGFjYik7CiAKLQkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnVwdCBzdGF0ZSAqLworCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdCBzdGF0ZSAqLwogCURDMzk1eF9yZWFkOChhY2IsIFRSTV9TMTA0MF9TQ1NJX0lOVFNUQVRVUyk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKaW5kZXggZmE3YmE2NC4uMjUyZDE4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKQEAgLTQ3LDkgKzQ3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXByLmMgYi9kcml2ZXJzL3Njc2kvaXByLmMKaW5kZXggYjQxZGZiNS4uYzMxNmEwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lwci5jCisrKyBiL2RyaXZlcnMvc2NzaS9pcHIuYwpAQCAtNTEzNCw2ICs1MTM0LDcgQEAKIAl1MzIgaW9hZGxfZmxhZ3MgPSAwOwogCXN0cnVjdCBpcHJfaW9hcmNiICppb2FyY2IgPSAmaXByX2NtZC0+aW9hcmNiOwogCXN0cnVjdCBpcHJfaW9hZGxfZGVzYyAqaW9hZGwgPSBpcHJfY21kLT5pb2FkbDsKKwlzdHJ1Y3QgaXByX2lvYWRsX2Rlc2MgKmxhc3RfaW9hZGwgPSBOVUxMOwogCWludCBsZW4gPSBxYy0+bmJ5dGVzICsgcWMtPnBhZF9sZW47CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIApAQCAtNTE1NiwxMSArNTE1NywxMyBAQAogCWF0YV9mb3JfZWFjaF9zZyhzZywgcWMpIHsKIAkJaW9hZGwtPmZsYWdzX2FuZF9kYXRhX2xlbiA9IGNwdV90b19iZTMyKGlvYWRsX2ZsYWdzIHwgc2dfZG1hX2xlbihzZykpOwogCQlpb2FkbC0+YWRkcmVzcyA9IGNwdV90b19iZTMyKHNnX2RtYV9hZGRyZXNzKHNnKSk7Ci0JCWlmIChhdGFfc2dfaXNfbGFzdChzZywgcWMpKQotCQkJaW9hZGwtPmZsYWdzX2FuZF9kYXRhX2xlbiB8PSBjcHVfdG9fYmUzMihJUFJfSU9BRExfRkxBR1NfTEFTVCk7Ci0JCWVsc2UKLQkJCWlvYWRsKys7CisKKwkJbGFzdF9pb2FkbCA9IGlvYWRsOworCQlpb2FkbCsrOwogCX0KKworCWlmIChsaWtlbHkobGFzdF9pb2FkbCkpCisJCWxhc3RfaW9hZGwtPmZsYWdzX2FuZF9kYXRhX2xlbiB8PSBjcHVfdG9fYmUzMihJUFJfSU9BRExfRkxBR1NfTEFTVCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZGlzY292ZXIuYyBiL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX2Rpc2NvdmVyLmMKaW5kZXggN2VmMGFmYy4uNWYzYTBkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfZGlzY292ZXIuYworKysgYi9kcml2ZXJzL3Njc2kvbGlic2FzL3Nhc19kaXNjb3Zlci5jCkBAIC0yODUsNyArMjg1LDcgQEAKIAlkZXYgPSBwb3J0LT5wb3J0X2RldjsKIAogCVNBU19EUFJJTlRLKCJET0lORyBESVNDT1ZFUlkgb24gcG9ydCAlZCwgcGlkOiVkXG4iLCBwb3J0LT5pZCwKLQkJICAgIGN1cnJlbnQtPnBpZCk7CisJCSAgICB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlzd2l0Y2ggKGRldi0+ZGV2X3R5cGUpIHsKIAljYXNlIFNBU19FTkRfREVWOgpAQCAtMzIwLDcgKzMyMCw3IEBACiAJfQogCiAJU0FTX0RQUklOVEsoIkRPTkUgRElTQ09WRVJZIG9uIHBvcnQgJWQsIHBpZDolZCwgcmVzdWx0OiVkXG4iLCBwb3J0LT5pZCwKLQkJICAgIGN1cnJlbnQtPnBpZCwgZXJyb3IpOworCQkgICAgdGFza19waWRfbnIoY3VycmVudCksIGVycm9yKTsKIH0KIAogc3RhdGljIHZvaWQgc2FzX3JldmFsaWRhdGVfZG9tYWluKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTMzNCwxMiArMzM0LDEyIEBACiAJCQkmcG9ydC0+ZGlzYy5wZW5kaW5nKTsKIAogCVNBU19EUFJJTlRLKCJSRVZBTElEQVRJTkcgRE9NQUlOIG9uIHBvcnQgJWQsIHBpZDolZFxuIiwgcG9ydC0+aWQsCi0JCSAgICBjdXJyZW50LT5waWQpOworCQkgICAgdGFza19waWRfbnIoY3VycmVudCkpOwogCWlmIChwb3J0LT5wb3J0X2RldikKIAkJcmVzID0gc2FzX2V4X3JldmFsaWRhdGVfZG9tYWluKHBvcnQtPnBvcnRfZGV2KTsKIAogCVNBU19EUFJJTlRLKCJkb25lIFJFVkFMSURBVElORyBET01BSU4gb24gcG9ydCAlZCwgcGlkOiVkLCByZXMgMHgleFxuIiwKLQkJICAgIHBvcnQtPmlkLCBjdXJyZW50LT5waWQsIHJlcyk7CisJCSAgICBwb3J0LT5pZCwgdGFza19waWRfbnIoY3VycmVudCksIHJlcyk7CiB9CiAKIC8qIC0tLS0tLS0tLS0gRXZlbnRzIC0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IGU1MzM3YWQuLmNlMzQ4YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMTI0Myw3ICsxMjQzLDggQEAKIAkJCQltZW1zZXQoYWRhcHRlcm1zZywgMCwgTFBGQ19NQVhfQURQVE1TRyk7CiAJCQkJbWVtY3B5KCZhZGFwdGVybXNnWzBdLCAodWludDhfdCAqKSBpcnNwLAogCQkJCSAgICAgICBNQVhfTVNHX0RBVEEpOwotCQkJCWRldl93YXJuKCYoKHBoYmEtPnBjaWRldiktPmRldiksICJscGZjJWQ6ICVzIiwKKwkJCQlkZXZfd2FybigmKChwaGJhLT5wY2lkZXYpLT5kZXYpLAorCQkJCQkgImxwZmMlZDogJXNcbiIsCiAJCQkJCSBwaGJhLT5icmRfbm8sIGFkYXB0ZXJtc2cpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBVbmtub3duIElPQ0IgY29tbWFuZCAqLwpAQCAtMTQzMCw3ICsxNDMxLDggQEAKIAkJCQltZW1zZXQoYWRhcHRlcm1zZywgMCwgTFBGQ19NQVhfQURQVE1TRyk7CiAJCQkJbWVtY3B5KCZhZGFwdGVybXNnWzBdLCAodWludDhfdCAqKSBpcnNwLAogCQkJCSAgICAgICBNQVhfTVNHX0RBVEEpOwotCQkJCWRldl93YXJuKCYoKHBoYmEtPnBjaWRldiktPmRldiksICJscGZjJWQ6ICVzIiwKKwkJCQlkZXZfd2FybigmKChwaGJhLT5wY2lkZXYpLT5kZXYpLAorCQkJCQkgImxwZmMlZDogJXNcbiIsCiAJCQkJCSBwaGJhLT5icmRfbm8sIGFkYXB0ZXJtc2cpOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBVbmtub3duIElPQ0IgY29tbWFuZCAqLwpAQCAtMTY4MSw3ICsxNjgzLDcgQEAKIAkJCQkJbWVtY3B5KCZhZGFwdGVybXNnWzBdLCAodWludDhfdCAqKSBpcnNwLAogCQkJCQkgICAgICAgTUFYX01TR19EQVRBKTsKIAkJCQkJZGV2X3dhcm4oJigocGhiYS0+cGNpZGV2KS0+ZGV2KSwKLQkJCQkJCSAibHBmYyVkOiAlcyIsCisJCQkJCQkgImxwZmMlZDogJXNcbiIsCiAJCQkJCQkgcGhiYS0+YnJkX25vLCBhZGFwdGVybXNnKTsKIAkJCQl9IGVsc2UgewogCQkJCQkvKiBVbmtub3duIElPQ0IgY29tbWFuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKaW5kZXggZTRlNGM2YS4uNzg3NzkyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCkBAIC00MjcsNyArNDI3LDcgQEAKICAqIEBpZAkJOiBwY2kgZGV2aWNlIGlkIG9mIHRoZSBjbGFzcyBvZiBjb250cm9sbGVycwogICoKICAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbmV3IGFkYXB0ZXIgaXMgZGV0ZWN0ZWQgYnkgdGhlCi0gKiBQQ0kgaG90cGx1ZyBzdXNic3l0ZW0uCisgKiBQQ0kgaG90cGx1ZyBzdXNic3lzdGVtLgogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdAogbWVnYXJhaWRfcHJvYmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbnNwMzIuaCBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCmluZGV4IGE5NzZlODEuLjY3MTVlY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9uc3AzMi5oCisrKyBiL2RyaXZlcnMvc2NzaS9uc3AzMi5oCkBAIC02OSwxMSArNjksNiBAQAogdHlwZWRlZiB1MTYgdTE2X2xlOwogCiAvKgotICogTUFDUk8KLSAqLwotI2RlZmluZSBCSVQoeCkgICAgICAoMVVMIDw8ICh4KSkKLQotLyoKICAqIEJBU0lDIERlZmluaXRpb25zCiAgKi8KICNpZm5kZWYgVFJVRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaCBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmgKaW5kZXggYjdmMGZhMi4uOTgzOTc1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaAorKysgYi9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oCkBAIC0yNCw3ICsyNCw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBTb21lIHVzZWZ1bCBtYWNyb3MuLi4KICAqLwotI2RlZmluZSBCSVQoeCkgICAgICAoMUwgPDwgKHgpKQogCiAvKiBTQ1NJIGluaXRpYXRvciBtdXN0IGJlIElEIDcgKi8KICNkZWZpbmUgTlNQX0lOSVRJQVRPUl9JRCAgNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2Z3LmggYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaAppbmRleCA5YmIzZDFkLi5mZTQxNWVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfZncuaApAQCAtNjcxLDcgKzY3MSw3IEBACiAjZGVmaW5lIEVUX0NPTlRJTlVFCUVUX0NPTlRfVDEKIAogLyogTWFya2VyIGVudHJ5IHN0cnVjdHVyZSovCi1zdHJ1Y3QgbWFya2VyX2VudHJ5IHsKK3N0cnVjdCBxbGE0X21hcmtlcl9lbnRyeSB7CiAJc3RydWN0IHFsYTRfaGVhZGVyIGhkcjsJLyogMDAtMDMgKi8KIAogCXVpbnQzMl90IHN5c3RlbV9kZWZpbmVkOyAvKiAwNC0wNyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pbml0LmMKaW5kZXggMWUyOWY1MS4uZDY5MmM3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW5pdC5jCkBAIC0xMDA2LDcgKzEwMDYsNyBAQAogICogcWxhNHh4eF9zdGFydF9maXJtd2FyZSAtIHN0YXJ0cyBxbGE0eHh4IGZpcm13YXJlCiAgKiBAaGE6IFBvaW50ZXIgdG8gaG9zdCBhZGFwdGVyIHN0cnVjdHVyZS4KICAqCi0gKiBUaGlzIHJvdXRpbmUgcGVyZm9ybXMgdGhlIG5lY2Nlc3Nhcnkgc3RlcHMgdG8gc3RhcnQgdGhlIGZpcm13YXJlIGZvcgorICogVGhpcyByb3V0aW5lIHBlcmZvcm1zIHRoZSBuZWNlc3Nhcnkgc3RlcHMgdG8gc3RhcnQgdGhlIGZpcm13YXJlIGZvcgogICogdGhlIFFMQTQwMTAgYWRhcHRlci4KICAqKi8KIHN0YXRpYyBpbnQgcWxhNHh4eF9zdGFydF9maXJtd2FyZShzdHJ1Y3Qgc2NzaV9xbGFfaG9zdCAqaGEpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jIGIvZHJpdmVycy9zY3NpL3FsYTR4eHgvcWw0X2lvY2IuYwppbmRleCA1MDA2ZWNiLi5lNDQ2MWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfaW9jYi5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9pb2NiLmMKQEAgLTY5LDcgKzY5LDcgQEAKIHN0YXRpYyBpbnQgcWxhNHh4eF9zZW5kX21hcmtlcl9pb2NiKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICpoYSwKIAkJCQkgICAgc3RydWN0IGRkYl9lbnRyeSAqZGRiX2VudHJ5LCBpbnQgbHVuKQogewotCXN0cnVjdCBtYXJrZXJfZW50cnkgKm1hcmtlcl9lbnRyeTsKKwlzdHJ1Y3QgcWxhNF9tYXJrZXJfZW50cnkgKm1hcmtlcl9lbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAl1aW50OF90IHN0YXR1cyA9IFFMQV9TVUNDRVNTOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhNHh4eC9xbDRfb3MuYyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCmluZGV4IDAzYjY4ZDQuLjg5NDYwZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGE0eHh4L3FsNF9vcy5jCkBAIC0xMjg2LDcgKzEyODYsNyBAQAogCiAgICAgICAgIHJldCA9IHNjc2lfaW5pdF9zaGFyZWRfdGFnX21hcChob3N0LCBNQVhfU1JCUyk7CiAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBkZXZfd2FybigmaGEtPnBkZXYtPmRldiwgInNjc2lfaW5pdF9zaGFyZWRfdGFnX21hcCBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBkZXZfd2FybigmaGEtPnBkZXYtPmRldiwgInNjc2lfaW5pdF9zaGFyZWRfdGFnX21hcCBmYWlsZWRcbiIpOwogICAgICAgICAgICAgICAgIGdvdG8gcHJvYmVfZmFpbGVkOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggNjlmNTQyYy4uYTY5YjE1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogICoJc3VjY2VzcyBhcyB3ZWxsKS4gUmV0dXJucyBhIG5lZ2F0ZWQgZXJybm8gdmFsdWUgaW4gY2FzZSBvZiBlcnJvci4KICAqCiAgKglOb3RlOiBtb3N0IGlvY3RscyBhcmUgZm9yd2FyZCBvbnRvIHRoZSBibG9jayBzdWJzeXN0ZW0gb3IgZnVydGhlcgotICoJZG93biBpbiB0aGUgc2NzaSBzdWJzeXRlbS4KKyAqCWRvd24gaW4gdGhlIHNjc2kgc3Vic3lzdGVtLgogICoqLwogc3RhdGljIGludCBzZF9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwLCAKIAkJICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmluZGV4IGRjMTVhMjIuLjRhYWZlODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKQEAgLTE1OTYsNyArMTU5Niw3IEBACiAgICAgICogSU8gd2hpbGUgU0VMIGlzIHRydWUuIEJ1dCBhZ2FpbiwgdGhlcmUgYXJlIHNvbWUgZGlza3Mgb3V0IHRoZSBpbiB0aGUKICAgICAgKiB3b3JsZCB0aGF0IGRvIHRoYXQgbmV2ZXJ0aGVsZXNzLiAoU29tZWJvZHkgY2xhaW1lZCB0aGF0IHRoaXMgYW5ub3VuY2VzCiAgICAgICogcmVzZWxlY3Rpb24gY2FwYWJpbGl0eSBvZiB0aGUgdGFyZ2V0LikgU28gd2UgYmV0dGVyIHNraXAgdGhhdCB0ZXN0IGFuZAotICAgICAqIG9ubHkgd2FpdCBmb3IgQlNZLi4uIChGYW1vdXMgZ2VybWFuIHdvcmRzOiBEZXIgS2z8Z2VyZSBnaWJ0IG5hY2ggOi0pCisgICAgICogb25seSB3YWl0IGZvciBCU1kuLi4gKEZhbW91cyBnZXJtYW4gd29yZHM6IERlciBLbMO8Z2VyZSBnaWJ0IG5hY2ggOi0pCiAgICAgICovCiAKICAgICB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgIShOQ1I1MzgwX3JlYWQoU1RBVFVTX1JFRykgJiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmggYi9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2Z3Mi5oCmluZGV4IDZlNWI5NTIuLmFlMWZiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZncyLmgKKysrIGIvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8yL3N5bV9mdzIuaApAQCAtMTc4MSw3ICsxNzgxLDcgQEAKIAkgKiAgV2hpbGUgdGVzdGluZyB3aXRoIGJvZ3VzIFFVQU5UVU0gZHJpdmVzLCB0aGUgQzEwMTAgCiAJICogIHNvbWV0aW1lcyByYWlzZWQgYSBzcHVyaW91cyBwaGFzZSBtaXNtYXRjaCB3aXRoIAogCSAqICBXU1IgYW5kIHRoZSBDSE1PVigxKSB0cmlnZ2VyZWQgYW5vdGhlciBQTS4KLQkgKiAgV2FpdGluZyBleHBsaWNpdGVseSBmb3IgdGhlIFBIQVNFIHNlZW1lZCB0byBhdm9pZCAKKwkgKiAgV2FpdGluZyBleHBsaWNpdGx5IGZvciB0aGUgUEhBU0Ugc2VlbWVkIHRvIGF2b2lkCiAJICogIHRoZSBuZXN0ZWQgcGhhc2UgbWlzbWF0Y2guIEJ0dywgdGhpcyBkaWRuJ3QgaGFwcGVuIAogCSAqICB1c2luZyBteSBJQk0gZHJpdmVzLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuaCBiL2RyaXZlcnMvc2NzaS93ZDMzYzkzLmgKaW5kZXggNjFmZmI4Ni4uMDAxMjNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3dkMzNjOTMuaAorKysgYi9kcml2ZXJzL3Njc2kvd2QzM2M5My5oCkBAIC0xNTUsNyArMTU1LDcgQEAKICNkZWZpbmUgV0QzM0M5M19GU18xMl8xNSBPV05JRF9GU18xMgogI2RlZmluZSBXRDMzQzkzX0ZTXzE2XzIwIE9XTklEX0ZTXzE2CiAKLSAgIC8qIHBhc3MgaW5wdXQtY2xvY2sgZXhwbGljaXRlbHkuIGFjY2VwdGVkIG1oeiB2YWx1ZXMgYXJlIDgtMTAsMTItMjAgKi8KKyAgIC8qIHBhc3MgaW5wdXQtY2xvY2sgZXhwbGljaXRseS4gYWNjZXB0ZWQgbWh6IHZhbHVlcyBhcmUgOC0xMCwxMi0yMCAqLwogI2RlZmluZSBXRDMzQzkzX0ZTX01IWihtaHopIChtaHopCiAKICAgIC8qIENvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCmluZGV4IGQ2YWUzOGUuLjg3NjY1ZDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTYyLDExICs2MiwxMSBAQAogCSAga2VybmVsIHdpbGwgYXV0b21hdGljYWxseSB1c2UgdGhlIGZpcnN0IHNlcmlhbCBsaW5lLCAvZGV2L3R0eVMwLCBhcwogCSAgc3lzdGVtIGNvbnNvbGUuCiAKLQkgIHlvdSBjYW4gc2V0IHRoYXQgdXNpbmcgYSBrZXJuZWwgY29tbWFuZCBsaW5lIG9wdGlvbiBzdWNoIGFzCisJICBZb3UgY2FuIHNldCB0aGF0IHVzaW5nIGEga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gc3VjaCBhcwogCSAgImNvbnNvbGU9dWFydDgyNTAsaW8sMHgzZjgsOTYwMG44IgogCSAgImNvbnNvbGU9dWFydDgyNTAsbW1pbywweGZmNWUwMDAwLDExNTIwMG44Ii4KLQkgIGFuZCBpdCB3aWxsIHN3aXRjaCB0byBub3JtYWwgc2VyaWFsIGNvbnNvbGUgd2hlbiBjb3JyZXBvbmRpbmcgcG9ydCBpcwotCSAgcmVhZHkuCisJICBhbmQgaXQgd2lsbCBzd2l0Y2ggdG8gbm9ybWFsIHNlcmlhbCBjb25zb2xlIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgCisJICBwb3J0IGlzIHJlYWR5LgogCSAgImVhcmx5Y29uPXVhcnQ4MjUwLGlvLDB4M2Y4LDk2MDBuOCIKIAkgICJlYXJseWNvbj11YXJ0ODI1MCxtbWlvLDB4ZmY1ZTAwMDAsMTE1MjAwbjgiLgogCSAgaXQgd2lsbCBub3Qgb25seSBzZXR1cCBlYXJseSBjb25zb2xlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMS5jCmluZGV4IDcyMjI5ZGYuLjQwNjA0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTEuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDExLmMKQEAgLTI2MywxNSArMjYzLDE1IEBACiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAJdW5zaWduZWQgaW50IHN0YXR1cyA9IHJlYWR3KHVhcC0+cG9ydC5tZW1iYXNlICsgVUFSVDAxeF9GUik7CiAKLSNkZWZpbmUgQklUKHVhcnRiaXQsIHRpb2NtYml0KQkJXAorI2RlZmluZSBUSU9DTUJJVCh1YXJ0Yml0LCB0aW9jbWJpdCkJXAogCWlmIChzdGF0dXMgJiB1YXJ0Yml0KQkJXAogCQlyZXN1bHQgfD0gdGlvY21iaXQKIAotCUJJVChVQVJUMDF4X0ZSX0RDRCwgVElPQ01fQ0FSKTsKLQlCSVQoVUFSVDAxeF9GUl9EU1IsIFRJT0NNX0RTUik7Ci0JQklUKFVBUlQwMXhfRlJfQ1RTLCBUSU9DTV9DVFMpOwotCUJJVChVQVJUMDExX0ZSX1JJLCBUSU9DTV9STkcpOwotI3VuZGVmIEJJVAorCVRJT0NNQklUKFVBUlQwMXhfRlJfRENELCBUSU9DTV9DQVIpOworCVRJT0NNQklUKFVBUlQwMXhfRlJfRFNSLCBUSU9DTV9EU1IpOworCVRJT0NNQklUKFVBUlQwMXhfRlJfQ1RTLCBUSU9DTV9DVFMpOworCVRJT0NNQklUKFVBUlQwMTFfRlJfUkksIFRJT0NNX1JORyk7CisjdW5kZWYgVElPQ01CSVQKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yODIsMTggKzI4MiwxOCBAQAogCiAJY3IgPSByZWFkdyh1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogCi0jZGVmaW5lCUJJVCh0aW9jbWJpdCwgdWFydGJpdCkJCVwKKyNkZWZpbmUJVElPQ01CSVQodGlvY21iaXQsIHVhcnRiaXQpCQlcCiAJaWYgKG1jdHJsICYgdGlvY21iaXQpCQlcCiAJCWNyIHw9IHVhcnRiaXQ7CQlcCiAJZWxzZQkJCQlcCiAJCWNyICY9IH51YXJ0Yml0CiAKLQlCSVQoVElPQ01fUlRTLCBVQVJUMDExX0NSX1JUUyk7Ci0JQklUKFRJT0NNX0RUUiwgVUFSVDAxMV9DUl9EVFIpOwotCUJJVChUSU9DTV9PVVQxLCBVQVJUMDExX0NSX09VVDEpOwotCUJJVChUSU9DTV9PVVQyLCBVQVJUMDExX0NSX09VVDIpOwotCUJJVChUSU9DTV9MT09QLCBVQVJUMDExX0NSX0xCRSk7Ci0jdW5kZWYgQklUCisJVElPQ01CSVQoVElPQ01fUlRTLCBVQVJUMDExX0NSX1JUUyk7CisJVElPQ01CSVQoVElPQ01fRFRSLCBVQVJUMDExX0NSX0RUUik7CisJVElPQ01CSVQoVElPQ01fT1VUMSwgVUFSVDAxMV9DUl9PVVQxKTsKKwlUSU9DTUJJVChUSU9DTV9PVVQyLCBVQVJUMDExX0NSX09VVDIpOworCVRJT0NNQklUKFRJT0NNX0xPT1AsIFVBUlQwMTFfQ1JfTEJFKTsKKyN1bmRlZiBUSU9DTUJJVAogCiAJd3JpdGV3KGNyLCB1YXAtPnBvcnQubWVtYmFzZSArIFVBUlQwMTFfQ1IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jIGIvZHJpdmVycy9zZXJpYWwvY3Jpc3YxMC5jCmluZGV4IDdlODcyNGQuLmY1MjNjZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2NyaXN2MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9jcmlzdjEwLmMKQEAgLTQ0MiwxMSArNDQyLDExIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogI2luY2x1ZGUgPGFzbS9hcmNoL3N2aW50by5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCmluZGV4IDNmMjZjNGIuLmU3NzNjOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKQEAgLTIwLDggKzIwLDggQEAKICAqCQkgICAgIC0gUzNDMjQxMCBhbmQgUzNDMjQ0MCBzZXJpYWwgc3VwcG9ydAogICoJCSAgICAgLSBQb3dlciBNYW5hZ2VtZW50IHN1cHBvcnQKICAqCQkgICAgIC0gRml4IGNvbnNvbGUgdmlhIElyREEgZGV2aWNlcwotICoJCSAgICAgLSBTeXNSZXEgKEhlcmJlcnQgUPZ0emwpCi0gKgkJICAgICAtIEJyZWFrIGNoYXJhY3RlciBoYW5kbGluZyAoSGVyYmVydCBQ9nR6bCkKKyAqCQkgICAgIC0gU3lzUmVxIChIZXJiZXJ0IFDDtnR6bCkKKyAqCQkgICAgIC0gQnJlYWsgY2hhcmFjdGVyIGhhbmRsaW5nIChIZXJiZXJ0IFDDtnR6bCkKICAqCQkgICAgIC0gc3Bpbi1sb2NrIGluaXRpYWxpc2F0aW9uIChEaW1pdHJ5IEFuZHJpYykKICAqCQkgICAgIC0gYWRkZWQgY2xvY2sgY29udHJvbAogICoJCSAgICAgLSB1cGRhdGVkIGluaXQgY29kZSB0byB1c2UgcGxhdGZvcm1fZGV2aWNlIGluZm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMgYi9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCmluZGV4IDY4YWE0ZGEuLjEwMzE4OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwpAQCAtMTk1OSwxMiArMTk1OSwxMSBAQAogCiAJbXV0ZXhfbG9jaygmc3RhdGUtPm11dGV4KTsKIAotI2lmZGVmIENPTkZJR19ESVNBQkxFX0NPTlNPTEVfU1VTUEVORAotCWlmICh1YXJ0X2NvbnNvbGUocG9ydCkpIHsKKwlpZiAoIWNvbnNvbGVfc3VzcGVuZF9lbmFibGVkICYmIHVhcnRfY29uc29sZShwb3J0KSkgeworCQkvKiB3ZSdyZSBnb2luZyB0byBhdm9pZCBzdXNwZW5kaW5nIHNlcmlhbCBjb25zb2xlICovCiAJCW11dGV4X3VubG9jaygmc3RhdGUtPm11dGV4KTsKIAkJcmV0dXJuIDA7CiAJfQotI2VuZGlmCiAKIAl0dHlfZGV2ID0gZGV2aWNlX2ZpbmRfY2hpbGQocG9ydC0+ZGV2LCAmbWF0Y2gsIHNlcmlhbF9tYXRjaF9wb3J0KTsKIAlpZiAoZGV2aWNlX21heV93YWtldXAodHR5X2RldikpIHsKQEAgLTIwMTYsMTIgKzIwMTUsMTEgQEAKIAogCW11dGV4X2xvY2soJnN0YXRlLT5tdXRleCk7CiAKLSNpZmRlZiBDT05GSUdfRElTQUJMRV9DT05TT0xFX1NVU1BFTkQKLQlpZiAodWFydF9jb25zb2xlKHBvcnQpKSB7CisJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCAmJiB1YXJ0X2NvbnNvbGUocG9ydCkpIHsKKwkJLyogbm8gbmVlZCB0byByZXN1bWUgc2VyaWFsIGNvbnNvbGUsIGl0IHdhc24ndCBzdXNwZW5kZWQgKi8KIAkJbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9Ci0jZW5kaWYKIAogCWlmICghcG9ydC0+c3VzcGVuZGVkKSB7CiAJCWRpc2FibGVfaXJxX3dha2UocG9ydC0+aXJxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL21wYzUyeHhfcHNjX3NwaS5jIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKaW5kZXggZTlhYmE5My4uNzA1MWU2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvbXBjNTJ4eF9wc2Nfc3BpLmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCQl9CiAKIAotCQkvKiBlbmFibGUgaW50ZXJ1cHRzIGFuZCB3YWl0IGZvciB3YWtlIHVwCisJCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGFuZCB3YWl0IGZvciB3YWtlIHVwCiAJCSAqIGlmIGp1c3Qgb25lIGJ5dGUgaXMgZXhwZWN0ZWQgdGhlIFJ4IEZJRk8gZ2VuZXJlcmF0ZXMgbm8KIAkJICogRkZVTEwgaW50ZXJydXB0LCBzbyBhY3RpdmF0ZSB0aGUgUnhSRFkgaW50ZXJydXB0CiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYyBiL2RyaXZlcnMvc3BpL3NwaV9iZmluNXh4LmMKaW5kZXggNmNiNzFkNy4uMmVmMTFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvc3BpX2JmaW41eHguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfYmZpbjV4eC5jCkBAIC0xMDcwLDcgKzEwNzAsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlkZXZfZGJnKCZzcGktPmRldiwgInNldHVwIHNwaSBjaGlwICVzLCB3aWR0aCBpcyAlZCwgZG1hIGlzICVkLCIsCisJZGV2X2RiZygmc3BpLT5kZXYsICJzZXR1cCBzcGkgY2hpcCAlcywgd2lkdGggaXMgJWQsIGRtYSBpcyAlZFxuIiwKIAkJCXNwaS0+bW9kYWxpYXMsIGNoaXAtPndpZHRoLCBjaGlwLT5lbmFibGVfZG1hKTsKIAlkZXZfZGJnKCZzcGktPmRldiwgImN0bF9yZWcgaXMgMHgleCwgZmxhZ19yZWcgaXMgMHgleFxuIiwKIAkJCWNoaXAtPmN0bF9yZWcsIGNoaXAtPmZsYWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpX2lteC5jIGIvZHJpdmVycy9zcGkvc3BpX2lteC5jCmluZGV4IDNiNDY1MGEuLjc2ODZiYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9pbXguYworKysgYi9kcml2ZXJzL3NwaS9zcGlfaW14LmMKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2hpcF9kYXRhKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghY2hpcCkgewogCQkJZGV2X2Vycigmc3BpLT5kZXYsCi0JCQkJInNldHVwIC0gY2Fubm90IGFsbG9jYXRlIGNvbnRyb2xsZXIgc3RhdGUiKTsKKwkJCQkic2V0dXAgLSBjYW5ub3QgYWxsb2NhdGUgY29udHJvbGxlciBzdGF0ZVxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQljaGlwLT5jb250cm9sID0gU1BJX0RFRkFVTFRfQ09OVFJPTDsKQEAgLTEyMDYsNyArMTIwNiw3IEBACiAJCQlpZiAoIWNoaXBfaW5mbykgewogCQkJCWRldl9lcnIoJnNwaS0+ZGV2LAogCQkJCQkic2V0dXAgLSAiCi0JCQkJCSJjYW5ub3QgYWxsb2NhdGUgY29udHJvbGxlciBkYXRhIik7CisJCQkJCSJjYW5ub3QgYWxsb2NhdGUgY29udHJvbGxlciBkYXRhXG4iKTsKIAkJCQlzdGF0dXMgPSAtRU5PTUVNOwogCQkJCWdvdG8gZXJyX2ZpcnN0X3NldHVwOwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvS2NvbmZpZyBiL2RyaXZlcnMvc3NiL0tjb25maWcKaW5kZXggYjRhNWU1ZS4uZDk3NjY2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3NzYi9LY29uZmlnCkBAIC0yMiw3ICsyMiw3IEBACiAKIGNvbmZpZyBTU0JfUENJSE9TVF9QT1NTSUJMRQogCWJvb2wKLQlkZXBlbmRzIG9uIFNTQiAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNTQiAmJiAoUENJID0geSB8fCBQQ0kgPSBTU0IpCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTU0JfUENJSE9TVApAQCAtMzcsNyArMzcsNyBAQAogCiBjb25maWcgU1NCX1BDTUNJQUhPU1RfUE9TU0lCTEUKIAlib29sCi0JZGVwZW5kcyBvbiBTU0IgJiYgUENNQ0lBICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gU1NCICYmIChQQ01DSUEgPSB5IHx8IFBDTUNJQSA9IFNTQikgJiYgRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBTU0JfUENNQ0lBSE9TVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvZHJpdmVyX21pcHNjb3JlLmMgYi9kcml2ZXJzL3NzYi9kcml2ZXJfbWlwc2NvcmUuYwppbmRleCBhYjg2OTFhLi4zZDNkZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9kcml2ZXJfbWlwc2NvcmUuYworKysgYi9kcml2ZXJzL3NzYi9kcml2ZXJfbWlwc2NvcmUuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAKIHZvaWQgc3NiX21pcHNjb3JlX2luaXQoc3RydWN0IHNzYl9taXBzY29yZSAqbWNvcmUpCiB7Ci0Jc3RydWN0IHNzYl9idXMgKmJ1cyA9IG1jb3JlLT5kZXYtPmJ1czsKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzOwogCXN0cnVjdCBzc2JfZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBoeiwgbnM7CiAJdW5zaWduZWQgaW50IGlycSwgaTsKQEAgLTE4Myw2ICsxODMsNyBAQAogCiAJc3NiX2RwcmludGsoS0VSTl9JTkZPIFBGWCAiSW5pdGlhbGl6aW5nIE1JUFMgY29yZS4uLlxuIik7CiAKKwlidXMgPSBtY29yZS0+ZGV2LT5idXM7CiAJaHogPSBzc2JfY2xvY2tzcGVlZChidXMpOwogCWlmICghaHopCiAJCWh6ID0gMTAwMDAwMDAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCmluZGV4IGY1MWUyMjQuLjkxMmQ5N2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAoc3RhdHVzKQotCQlkZXZfZGJnKCZhY20tPmRhdGEtPmRldiwgImJ1bGsgcnggc3RhdHVzICVkIiwgc3RhdHVzKTsKKwkJZGV2X2RiZygmYWNtLT5kYXRhLT5kZXYsICJidWxrIHJ4IHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKIAogCWJ1ZiA9IHJjdi0+YnVmZmVyOwogCWJ1Zi0+c2l6ZSA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKQEAgLTgzMSwxMyArODMxLDEzIEBACiAJCiAJLyogbm9ybWFsIHByb2JpbmcqLwogCWlmICghYnVmZmVyKSB7Ci0JCWVycigiV2llcmQgZGVzY3JpcHRvciByZWZlcmVuY2VzXG4iKTsKKwkJZXJyKCJXZWlyZCBkZXNjcmlwdG9yIHJlZmVyZW5jZXNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWJ1ZmxlbikgewogCQlpZiAoaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYWxlbiAmJiBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhKSB7Ci0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsIlNlZWtpbmcgZXh0cmEgZGVzY3JpcHRvcnMgb24gZW5kcG9pbnQiKTsKKwkJCWRldl9kYmcoJmludGYtPmRldiwiU2Vla2luZyBleHRyYSBkZXNjcmlwdG9ycyBvbiBlbmRwb2ludFxuIik7CiAJCQlidWZsZW4gPSBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnQtPmV4dHJhbGVuOwogCQkJYnVmZmVyID0gaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50LT5leHRyYTsKIAkJfSBlbHNlIHsKQEAgLTg4NywyNCArODg3LDI0IEBACiAKIAlpZiAoIXVuaW9uX2hlYWRlcikgewogCQlpZiAoY2FsbF9pbnRlcmZhY2VfbnVtID4gMCkgewotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJObyB1bmlvbiBkZXNjcmlwdG9yLCB1c2luZyBjYWxsIG1hbmFnZW1lbnQgZGVzY3JpcHRvciIpOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJObyB1bmlvbiBkZXNjcmlwdG9yLCB1c2luZyBjYWxsIG1hbmFnZW1lbnQgZGVzY3JpcHRvclxuIik7CiAJCQlkYXRhX2ludGVyZmFjZSA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCAoZGF0YV9pbnRlcmZhY2VfbnVtID0gY2FsbF9pbnRlcmZhY2VfbnVtKSk7CiAJCQljb250cm9sX2ludGVyZmFjZSA9IGludGY7CiAJCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsIk5vIHVuaW9uIGRlc2NyaXB0b3IsIGdpdmluZyB1cCIpOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJObyB1bmlvbiBkZXNjcmlwdG9yLCBnaXZpbmcgdXBcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9IGVsc2UgewogCQljb250cm9sX2ludGVyZmFjZSA9IHVzYl9pZm51bV90b19pZih1c2JfZGV2LCB1bmlvbl9oZWFkZXItPmJNYXN0ZXJJbnRlcmZhY2UwKTsKIAkJZGF0YV9pbnRlcmZhY2UgPSB1c2JfaWZudW1fdG9faWYodXNiX2RldiwgKGRhdGFfaW50ZXJmYWNlX251bSA9IHVuaW9uX2hlYWRlci0+YlNsYXZlSW50ZXJmYWNlMCkpOwogCQlpZiAoIWNvbnRyb2xfaW50ZXJmYWNlIHx8ICFkYXRhX2ludGVyZmFjZSkgewotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJubyBpbnRlcmZhY2VzIik7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsIm5vIGludGVyZmFjZXNcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CiAJCiAJaWYgKGRhdGFfaW50ZXJmYWNlX251bSAhPSBjYWxsX2ludGVyZmFjZV9udW0pCi0JCWRldl9kYmcoJmludGYtPmRldiwiU2VwZXJhdGUgY2FsbCBjb250cm9sIGludGVyZmFjZS4gVGhhdCBpcyBub3QgZnVsbHkgc3VwcG9ydGVkLiIpOworCQlkZXZfZGJnKCZpbnRmLT5kZXYsIlNlcGVyYXRlIGNhbGwgY29udHJvbCBpbnRlcmZhY2UuIFRoYXQgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZC5cbiIpOwogCiBza2lwX25vcm1hbF9wcm9iZToKIApAQCAtOTEyLDcgKzkxMiw3IEBACiAJaWYgKGRhdGFfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgIT0gQ0RDX0RBVEFfSU5URVJGQUNFX1RZUEUpIHsKIAkJaWYgKGNvbnRyb2xfaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MgPT0gQ0RDX0RBVEFfSU5URVJGQUNFX1RZUEUpIHsKIAkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp0OwotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJZb3VyIGRldmljZSBoYXMgc3dpdGNoZWQgaW50ZXJmYWNlcy4iKTsKKwkJCWRldl9kYmcoJmludGYtPmRldiwiWW91ciBkZXZpY2UgaGFzIHN3aXRjaGVkIGludGVyZmFjZXMuXG4iKTsKIAogCQkJdCA9IGNvbnRyb2xfaW50ZXJmYWNlOwogCQkJY29udHJvbF9pbnRlcmZhY2UgPSBkYXRhX2ludGVyZmFjZTsKQEAgLTkyNyw3ICs5MjcsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAkKIAlpZiAodXNiX2ludGVyZmFjZV9jbGFpbWVkKGRhdGFfaW50ZXJmYWNlKSkgeyAvKiB2YWxpZCBpbiB0aGlzIGNvbnRleHQgKi8KLQkJZGV2X2RiZygmaW50Zi0+ZGV2LCJUaGUgZGF0YSBpbnRlcmZhY2UgaXNuJ3QgYXZhaWxhYmxlIik7CisJCWRldl9kYmcoJmludGYtPmRldiwiVGhlIGRhdGEgaW50ZXJmYWNlIGlzbid0IGF2YWlsYWJsZVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC05NDQsNyArOTQ0LDcgQEAKIAlpZiAoIXVzYl9lbmRwb2ludF9kaXJfaW4oZXByZWFkKSkgewogCQkvKiBkZXNjcmlwdG9ycyBhcmUgc3dhcHBlZCAqLwogCQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKnQ7Ci0JCWRldl9kYmcoJmludGYtPmRldiwiVGhlIGRhdGEgaW50ZXJmYWNlIGhhcyBzd2l0Y2hlZCBlbmRwb2ludHMiKTsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCJUaGUgZGF0YSBpbnRlcmZhY2UgaGFzIHN3aXRjaGVkIGVuZHBvaW50c1xuIik7CiAJCQogCQl0ID0gZXByZWFkOwogCQllcHJlYWQgPSBlcHdyaXRlOwpAQCAtOTU5LDcgKzk1OSw3IEBACiAJfQogCiAJaWYgKCEoYWNtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFjbSksIEdGUF9LRVJORUwpKSkgewotCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChhY20ga3phbGxvYykiKTsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoYWNtIGt6YWxsb2MpXG4iKTsKIAkJZ290byBhbGxvY19mYWlsOwogCX0KIApAQCAtOTg1LDI2ICs5ODUsMjYgQEAKIAogCWJ1ZiA9IHVzYl9idWZmZXJfYWxsb2ModXNiX2RldiwgY3RybHNpemUsIEdGUF9LRVJORUwsICZhY20tPmN0cmxfZG1hKTsKIAlpZiAoIWJ1ZikgewotCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsIGJ1ZmZlciBhbGxvYykiKTsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoY3RybCBidWZmZXIgYWxsb2MpXG4iKTsKIAkJZ290byBhbGxvY19mYWlsMjsKIAl9CiAJYWNtLT5jdHJsX2J1ZmZlciA9IGJ1ZjsKIAogCWlmIChhY21fd3JpdGVfYnVmZmVyc19hbGxvYyhhY20pIDwgMCkgewotCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5ICh3cml0ZSBidWZmZXIgYWxsb2MpIik7CisJCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKHdyaXRlIGJ1ZmZlciBhbGxvYylcbiIpOwogCQlnb3RvIGFsbG9jX2ZhaWw0OwogCX0KIAogCWFjbS0+Y3RybHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhY20tPmN0cmx1cmIpIHsKLQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAoY3RybHVyYiBrbWFsbG9jKSIpOworCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChjdHJsdXJiIGttYWxsb2MpXG4iKTsKIAkJZ290byBhbGxvY19mYWlsNTsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9idWY7IGkrKykgewogCQlzdHJ1Y3QgYWNtX3J1ICpyY3YgPSAmKGFjbS0+cnVbaV0pOwogCiAJCWlmICghKHJjdi0+dXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKSkpIHsKLQkJCWRldl9kYmcoJmludGYtPmRldiwgIm91dCBvZiBtZW1vcnkgKHJlYWQgdXJicyB1c2JfYWxsb2NfdXJiKSIpOworCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAocmVhZCB1cmJzIHVzYl9hbGxvY191cmIpXG4iKTsKIAkJCWdvdG8gYWxsb2NfZmFpbDc7CiAJCX0KIApAQCAtMTAxNSwxMyArMTAxNSwxMyBAQAogCQlzdHJ1Y3QgYWNtX3JiICpidWYgPSAmKGFjbS0+cmJbaV0pOwogCiAJCWlmICghKGJ1Zi0+YmFzZSA9IHVzYl9idWZmZXJfYWxsb2MoYWNtLT5kZXYsIHJlYWRzaXplLCBHRlBfS0VSTkVMLCAmYnVmLT5kbWEpKSkgewotCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAocmVhZCBidWZzIHVzYl9idWZmZXJfYWxsb2MpIik7CisJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IChyZWFkIGJ1ZnMgdXNiX2J1ZmZlcl9hbGxvYylcbiIpOwogCQkJZ290byBhbGxvY19mYWlsNzsKIAkJfQogCX0KIAlhY20tPndyaXRldXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFjbS0+d3JpdGV1cmIpIHsKLQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAod3JpdGV1cmIga21hbGxvYykiKTsKKwkJZGV2X2RiZygmaW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSAod3JpdGV1cmIga21hbGxvYylcbiIpOwogCQlnb3RvIGFsbG9jX2ZhaWw3OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCmluZGV4IGYwMTNiNDAuLjFmNGY2ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlyZXR1cm4gMDsKIAkvKiBpZiBub3QgeWV0IGNsYWltZWQsIGNsYWltIGl0IGZvciB0aGUgZHJpdmVyICovCiAJZGV2X3dhcm4oJnBzLT5kZXYtPmRldiwgInVzYmZzOiBwcm9jZXNzICVkICglcykgZGlkIG5vdCBjbGFpbSBpbnRlcmZhY2UgJXUgYmVmb3JlIHVzZVxuIiwKLQkgICAgICAgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCBpZm51bSk7CisJICAgICAgIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBjdXJyZW50LT5jb21tLCBpZm51bSk7CiAJcmV0dXJuIGNsYWltaW50ZihwcywgaWZudW0pOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMgYi9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKaW5kZXggN2RjMTIzZC4uOTllNWE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAKIAlyZXR2YWwgPSBlbmRwb2ludF9nZXRfbWlub3IoZXBfZGV2KTsKIAlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIocGFyZW50LCAiY2FuIG5vdCBhbGxvY2F0ZSBtaW5vciBudW1iZXIgZm9yICVzIiwKKwkJZGV2X2VycihwYXJlbnQsICJjYW4gbm90IGFsbG9jYXRlIG1pbm9yIG51bWJlciBmb3IgJXNcbiIsCiAJCQllcF9kZXYtPmRldi5idXNfaWQpOwogCQlnb3RvIGVycm9yX3JlZ2lzdGVyOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDYwYThmNTUuLjAzNmMzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMjg3MCwxMCArMjg3MCw5IEBACiAJc2V0X2ZyZWV6YWJsZSgpOwogCWRvIHsKIAkJaHViX2V2ZW50cygpOwotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoa2h1YmRfd2FpdCwKKwkJd2FpdF9ldmVudF9mcmVlemFibGUoa2h1YmRfd2FpdCwKIAkJCQkhbGlzdF9lbXB0eSgmaHViX2V2ZW50X2xpc3QpIHx8CiAJCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpKTsKLQkJdHJ5X3RvX2ZyZWV6ZSgpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgIWxpc3RfZW1wdHkoJmh1Yl9ldmVudF9saXN0KSk7CiAKIAlwcl9kZWJ1ZygiJXM6IGtodWJkIGV4aXRpbmdcbiIsIHVzYmNvcmVfbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IGMwMjFhZjMuLjhkZDVhNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC0xNTI2LDcgKzE1MjYsNyBAQAogCQluZXdfaW50ZXJmYWNlcyA9IGttYWxsb2MobmludGYgKiBzaXplb2YoKm5ld19pbnRlcmZhY2VzKSwKIAkJCQlHRlBfS0VSTkVMKTsKIAkJaWYgKCFuZXdfaW50ZXJmYWNlcykgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5Iik7CisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIApAQCAtMTUzNSw3ICsxNTM1LDcgQEAKIAkJCQkJc2l6ZW9mKHN0cnVjdCB1c2JfaW50ZXJmYWNlKSwKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIW5ld19pbnRlcmZhY2VzW25dKSB7Ci0JCQkJZGV2X2VycigmZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5Iik7CisJCQkJZGV2X2VycigmZGV2LT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJCQlyZXQgPSAtRU5PTUVNOwogZnJlZV9pbnRlcmZhY2VzOgogCQkJCXdoaWxlICgtLW4gPj0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwppbmRleCA3MzcyNmM1Li4xZDE3NGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCkBAIC00MDA2LDcgKzQwMDYsNyBAQAogCURCRyhmc2csICJyZW1vdmFibGU9JWQsIHN0YWxsPSVkLCBidWZsZW49JXVcbiIsCiAJCQltb2RfZGF0YS5yZW1vdmFibGUsIG1vZF9kYXRhLmNhbl9zdGFsbCwKIAkJCW1vZF9kYXRhLmJ1Zmxlbik7Ci0JREJHKGZzZywgIkkvTyB0aHJlYWQgcGlkOiAlZFxuIiwgZnNnLT50aHJlYWRfdGFzay0+cGlkKTsKKwlEQkcoZnNnLCAiSS9PIHRocmVhZCBwaWQ6ICVkXG4iLCB0YXNrX3BpZF9ucihmc2ctPnRocmVhZF90YXNrKSk7CiAKIAlzZXRfYml0KFJFR0lTVEVSRUQsICZmc2ctPmF0b21pY19iaXRmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9saDdhNDB4X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKaW5kZXggZTc4YzJkZC4uMzY3Yjc1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2xoN2E0MHhfdWRjLmMKQEAgLTEyNzIsNyArMTI3Miw3IEBACiAJCQkvKgogCQkJICogQXR0ZW1wdHMgdG8gaGFsdCBJTiBlbmRwb2ludHMgd2lsbCBmYWlsIChyZXR1cm5pbmcgLUVBR0FJTikKIAkJCSAqIGlmIGFueSB0cmFuc2ZlciByZXF1ZXN0cyBhcmUgc3RpbGwgcXVldWVkLCBvciBpZiB0aGUgY29udHJvbGxlcgotCQkJICogRklGTyBzdGlsbCBob2xkcyBieXRlcyB0aGF0IHRoZSBob3N0IGhhc26SdCBjb2xsZWN0ZWQuCisJCQkgKiBGSUZPIHN0aWxsIGhvbGRzIGJ5dGVzIHRoYXQgdGhlIGhvc3QgaGFzbid0IGNvbGxlY3RlZC4KIAkJCSAqLwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmRldi0+bG9jaywgZmxhZ3MpOwogCQkJREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwppbmRleCAwZGNiNDE2Li43MzVkYjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAogCS8qIFNvbWUgYm9hcmRzIChtb3N0bHkgVklBPykgcmVwb3J0IGJvZ3VzIG92ZXJjdXJyZW50IGluZGljYXRpb25zLAogCSAqIGNhdXNpbmcgbWFzc2l2ZSBsb2cgc3BhbSB1bmxlc3Mgd2UgY29tcGxldGVseSBpZ25vcmUgdGhlbS4gIEl0Ci0JICogbWF5IGJlIHJlbGV2YW50IHRoYXQgVklBIFZUODIzNSBjb250cm9sZXJzLCB3aGVyZSBQT1JUX1BPV0VSIGlzCisJICogbWF5IGJlIHJlbGV2YW50IHRoYXQgVklBIFZUODIzNSBjb250cm9sbGVycywgd2hlcmUgUE9SVF9QT1dFUiBpcwogCSAqIGFsd2F5cyBzZXQsIHNlZW0gdG8gY2xlYXIgUE9SVF9PQ0MgYW5kIFBPUlRfQ1NDIHdoZW4gd3JpdGluZyB0bwogCSAqIFBPUlRfUE9XRVI7IHRoYXQncyBzdXJwcmlzaW5nLCBidXQgbWF5YmUgd2l0aGluLXNwZWMuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYwppbmRleCA2ODI5ODE0Li40NGI3OWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCWhjZC0+cnNyY19sZW4gICA9IGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWQiKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJyZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGVycl9wdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOTRkODU5YS4uYmEzNzBjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCkBAIC0xNTU2LDcgKzE1NTYsNyBAQAogCQloY2QtPnBvd2VyX2J1ZGdldCA9IHNsODExLT5ib2FyZC0+cG93ZXIgKiAyOwogCX0KIAotCS8qIGVuYWJsZSBwb3dlciBhbmQgaW50ZXJ1cHRzICovCisJLyogZW5hYmxlIHBvd2VyIGFuZCBpbnRlcnJ1cHRzICovCiAJcG9ydF9wb3dlcihzbDgxMSwgMSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL0tjb25maWcgYi9kcml2ZXJzL3VzYi9pbWFnZS9LY29uZmlnCmluZGV4IDk1Y2U3MDMuLjc1OTVkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvS2NvbmZpZwpAQCAtMSw1ICsxLDUgQEAKICMKLSMgVVNCIEltYWdlaW5nIGRldmljZXMgY29uZmlndXJhdGlvbgorIyBVU0IgSW1hZ2luZyBkZXZpY2VzIGNvbmZpZ3VyYXRpb24KICMKIGNvbW1lbnQgIlVTQiBJbWFnaW5nIGRldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMgYi9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCmluZGV4IDUxMzFjYmYuLmM1NjdhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwpAQCAtODA1LDcgKzgwNSw3IEBACiAJZGV2LT5taW5vciA9IGludGVyZmFjZS0+bWlub3I7CiAKIAkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCi0JZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiQURVJWQgJXMgbm93IGF0dGFjaGVkIHRvIC9kZXYvdXNiL2FkdXR1eCVkIiwKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJBRFUlZCAlcyBub3cgYXR0YWNoZWQgdG8gL2Rldi91c2IvYWR1dHV4JWRcbiIsCiAJCSB1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCwgZGV2LT5zZXJpYWxfbnVtYmVyLAogCQkgKGRldi0+bWlub3IgLSBBRFVfTUlOT1JfQkFTRSkpOwogZXhpdDoKQEAgLTg1MSw3ICs4NTEsNyBAQAogCQltdXRleF91bmxvY2soJmRldi0+bXR4KTsKIAl9CiAKLQlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJBRFUgZGV2aWNlIGFkdXR1eCVkIG5vdyBkaXNjb25uZWN0ZWQiLAorCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkFEVSBkZXZpY2UgYWR1dHV4JWQgbm93IGRpc2Nvbm5lY3RlZFxuIiwKIAkJIChtaW5vciAtIEFEVV9NSU5PUl9CQVNFKSk7CiAKIAlkYmcoMiwiICVzIDogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwppbmRleCAwNGU4N2FjLi4yNjc3ZmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkJY3l0aGVybS0+YnJpZ2h0bmVzcywgYnVmZmVyLCA4KTsKIAlpZiAocmV0dmFsKQogCQlkZXZfZGJnKCZjeXRoZXJtLT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKLQkvKiBJbmZvcm0gtUMgdGhhdCB3ZSBoYXZlIGNoYW5nZWQgdGhlIGJyaWdodG5lc3Mgc2V0dGluZyAqLworCS8qIEluZm9ybSDCtUMgdGhhdCB3ZSBoYXZlIGNoYW5nZWQgdGhlIGJyaWdodG5lc3Mgc2V0dGluZyAqLwogCXJldHZhbCA9IHZlbmRvcl9jb21tYW5kKGN5dGhlcm0tPnVkZXYsIFdSSVRFX1JBTSwgQlJJR0hUTkVTU19TRU0sCiAJCQkJMHgwMSwgYnVmZmVyLCA4KTsKIAlpZiAocmV0dmFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCmluZGV4IDVjMGEyNmMuLmNkMTM3NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTI2LmMKQEAgLTEsNyArMSw3IEBACiAvKiAKICAqIEVtYWdpYyBFTUkgMnw2IHVzYiBhdWRpbyBpbnRlcmZhY2UgZmlybXdhcmUgbG9hZGVyLgogICogQ29weXJpZ2h0IChDKSAyMDAyCi0gKiAJVGFwaW8gTGF4c3Ry9m0gKHRhcGlvLmxheHN0cm9tQGlwdGltZS5maSkKKyAqIAlUYXBpbyBMYXhzdHLDtm0gKHRhcGlvLmxheHN0cm9tQGlwdGltZS5maSkKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNDksNyArMjQ5LDcgQEAKIG1vZHVsZV9pbml0KGVtaTI2X2luaXQpOwogbW9kdWxlX2V4aXQoZW1pMjZfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoInRhcGlvIGxheHN0cvZtIik7CitNT0RVTEVfQVVUSE9SKCJUYXBpbyBMYXhzdHLDtm0iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRW1hZ2ljIEVNSSAyfDYgZmlybXdhcmUgbG9hZGVyLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKaW5kZXggMjMxNTNlYS4uNDc1OGNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIAogICogRW1hZ2ljIEVNSSAyfDYgdXNiIGF1ZGlvIGludGVyZmFjZSBmaXJtd2FyZSBsb2FkZXIuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIKLSAqIAlUYXBpbyBMYXhzdHL2bSAodGFwaW8ubGF4c3Ryb21AaXB0aW1lLmZpKQorICogCVRhcGlvIExheHN0csO2bSAodGFwaW8ubGF4c3Ryb21AaXB0aW1lLmZpKQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcyBwdWJsaXNoZWQgYnkKQEAgLTI5Miw3ICsyOTIsNyBAQAogbW9kdWxlX2luaXQoZW1pNjJfaW5pdCk7CiBtb2R1bGVfZXhpdChlbWk2Ml9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigidGFwaW8gbGF4c3Ry9m0iKTsKK01PRFVMRV9BVVRIT1IoIlRhcGlvIExheHN0csO2bSIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJFbWFnaWMgRU1JIDZ8Mm0gZmlybXdhcmUgbG9hZGVyLiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jIGIvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYwppbmRleCA0NmQ5ZjI3Li5kMzcyZmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogZXhpdDoKIAlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXR2YWwpCi0JCWRldl9lcnIoJmRldi0+aW50ZXJmYWNlLT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCisJCWRldl9lcnIoJmRldi0+aW50ZXJmYWNlLT5kZXYsICIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZFxuIiwKIAkJCV9fRlVOQ1RJT05fXywgcmV0dmFsKTsKIAogfQpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHdoYXQgZG8gd2UgaGF2ZSBoZXJlID8gQW4gdW5zdXBwb3J0ZWQgUHJvZHVjdC1JRCA/ICovCi0JCWRldl9lcnIoJmRldi0+aW50ZXJmYWNlLT5kZXYsICIlcyAtIG5vdCBzdXBwb3J0ZWQgZm9yIHByb2R1Y3Q9MHgleCIsCisJCWRldl9lcnIoJmRldi0+aW50ZXJmYWNlLT5kZXYsICIlcyAtIG5vdCBzdXBwb3J0ZWQgZm9yIHByb2R1Y3Q9MHgleFxuIiwKIAkJCV9fRlVOQ1RJT05fXywgZGV2LT5wcm9kdWN0X2lkKTsKIAkJcmV0dmFsID0gLUVGQVVMVDsKIAkJZ290byBleGl0OwpAQCAtNTI2LDcgKzUyNiw3IEBACiAJCX0gZWxzZSB7CiAJCQlyZXR2YWwgPSAtRUlOVkFMOwogCQkJZGV2X2VycigmZGV2LT5pbnRlcmZhY2UtPmRldiwKLQkJCQkiaW9jdGwgJ0lPV19XUklURScgaXMgbm90IHN1cHBvcnRlZCBmb3IgcHJvZHVjdD0weCV4LiIsCisJCQkJImlvY3RsICdJT1dfV1JJVEUnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHByb2R1Y3Q9MHgleC5cbiIsCiAJCQkJZGV2LT5wcm9kdWN0X2lkKTsKIAkJfQogCQlicmVhazsKQEAgLTc1Miw3ICs3NTIsNyBAQAogCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3Igb3VyIGRldmljZSBzdGF0ZSBhbmQgaW50aWFsaXplIGl0ICovCiAJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlvd2FycmlvciksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnkiKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKaW5kZXggZGYwZWJjZC4uMmFkMDliMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0bW90b3Jjb250cm9sLmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJldHZhbCkKIAkJZGV2X2VycigmbWMtPmludGYtPmRldiwKLQkJCSJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9tb3RvcmNvbnRyb2wwLCByZXR2YWwgJWQiLAorCQkJImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL21vdG9yY29udHJvbDAsIHJldHZhbCAlZFxuIiwKIAkJCW1jLT51ZGV2LT5idXMtPmJ1c19uYW1lLAogCQkJbWMtPnVkZXYtPmRldnBhdGgsIHJldHZhbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvQ2hhbmdlTG9nLmhpc3RvcnkgYi9kcml2ZXJzL3VzYi9zZXJpYWwvQ2hhbmdlTG9nLmhpc3RvcnkKaW5kZXggNTJjNGY3Yi4uYzFiMjc5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0NoYW5nZUxvZy5oaXN0b3J5CisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9DaGFuZ2VMb2cuaGlzdG9yeQpAQCAtNDAwLDcgKzQwMCw3IEBACiAKICAoMTEvMTEvMjAwMSkgZ2toCiAJQWRkZWQgc3VwcG9ydCBmb3IgdGhlIG0xMjUgZGV2aWNlcywgYW5kIGFkZGVkIGNoZWNrIHRvIHByZXZlbnQgb29wc2VzCi0JZm9yIENsaekgZGV2aWNlcyB0aGF0IGxpZSBhYm91dCB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoZXkgaGF2ZS4KKwlmb3IgQ2xpw6kgZGV2aWNlcyB0aGF0IGxpZSBhYm91dCB0aGUgbnVtYmVyIG9mIHBvcnRzIHRoZXkgaGF2ZS4KIAogICgwOC8zMC8yMDAxKSBna2gKIAlBZGRlZCBzdXBwb3J0IGZvciB0aGUgQ2xpZSBkZXZpY2VzLCBib3RoIHRoZSAzLjUgYW5kIDQuMCBvcyB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggOTlmZWZlZC4uNGE4NjY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTUyNyw3ICs1MjcsNyBAQAogCWRlcGVuZHMgb24gVVNCX1NFUklBTCAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIGN5YmVySmFjayBwaW5wYWQvZS1jb20gVVNCIGNoaXBjYXJkCi0JICByZWFkZXIuIFRoaXMgaXMgYW4gaW50ZXJmYWNlIHRvIElTTyA3ODE2IGNvbXBhdGlibGUgY29udGFjdGJhc2VkCisJICByZWFkZXIuIFRoaXMgaXMgYW4gaW50ZXJmYWNlIHRvIElTTyA3ODE2IGNvbXBhdGlibGUgY29udGFjdC1iYXNlZAogCSAgY2hpcGNhcmRzLCBlLmcuIEdTTSBTSU1zLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKaW5kZXggZTRjMjQ4Yy4uOGE4YTZiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMKQEAgLTgzLDcgKzgzLDcgQEAKICAqCiAgKiAoMTgvSnVuLzIwMDMpIElhbiBBYmJvdHQKICAqICAgICAgQWRkZWQgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzIGZyb20gUnVkb2xmIEd1Z2xlciAoYmFja3BvcnRlZCBmcm9tCi0gKiAgICAgIFBoaWxpcHAgR/xocmluZydzIHBhdGNoIGZvciAyLjUueCBrZXJuZWwpLgorICogICAgICBQaGlsaXBwIEfDvGhyaW5nJ3MgcGF0Y2ggZm9yIDIuNS54IGtlcm5lbCkuCiAgKiAgICAgIE1vdmVkIHJlYWQgdHJhbnNmZXIgYnVmZmVyIHJlYWxsb2NhdGlvbiBpbnRvIHN0YXJ0dXAgZnVuY3Rpb24uCiAgKiAgICAgIEZyZWUgZXhpc3Rpbmcgd3JpdGUgdXJiIGFuZCB0cmFuc2ZlciBidWZmZXIgaW4gc3RhcnR1cCBmdW5jdGlvbi4KICAqICAgICAgT25seSB1c2UgdXJicyBpbiB3cml0ZSB1cmIgcG9vbCB0aGF0IHdlcmUgc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZC4KQEAgLTEwNzEsNyArMTA3MSw3IEBACiAJCQkgICAgIChjaGFyKikgJmxhdGVuY3ksIDEsIFdEUl9USU1FT1VUKTsKIAogCWlmIChydiA8IDApIHsKLQkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVhZCBsYXRlbmN5IHRpbWVyOiAlaSIsIHJ2KTsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gcmVhZCBsYXRlbmN5IHRpbWVyOiAlaVxuIiwgcnYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGxhdGVuY3kpOwpAQCAtMTA5OCw3ICsxMDk4LDcgQEAKIAkJCSAgICAgYnVmLCAwLCBXRFJfVElNRU9VVCk7CiAKIAlpZiAocnYgPCAwKSB7Ci0JCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHdyaXRlIGxhdGVuY3kgdGltZXI6ICVpIiwgcnYpOworCQlkZXZfZXJyKGRldiwgIlVuYWJsZSB0byB3cml0ZSBsYXRlbmN5IHRpbWVyOiAlaVxuIiwgcnYpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggYjU3YjkwYS4uYjUxY2JiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTE3LDcgKzE3LDcgQEAKICAqIEJpbGwgUnlkZXIgLSBicnlkZXJAc2dpLmNvbSBmb3JtZXJseSBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuLSB3cm90ZSB0aGUgCiAgKiBGVERJX1NJTyBpbXBsZW1lbnRhdGlvbi4KICAqCi0gKiBQaGlsaXBwIEf8aHJpbmcgLSBwZ0BmdXR1cmV3YXJlLmF0IC0gYWRkZWQgdGhlIERldmljZSBJRCBvZiB0aGUgVVNCIHJlbGFpcworICogUGhpbGlwcCBHw7xocmluZyAtIHBnQGZ1dHVyZXdhcmUuYXQgLSBhZGRlZCB0aGUgRGV2aWNlIElEIG9mIHRoZSBVU0IgcmVsYWlzCiAgKiBmcm9tIFJ1ZG9sZiBHdWdsZXIKICAqCiAgKi8KQEAgLTQ0LDcgKzQ0LDcgQEAKICNkZWZpbmUgRlRESV9BQ1RaV0FWRV9QSUQJMHhGMkQwCiAKIAotLyogd3d3LnN0YXJ0aW5nLXBvaW50LXN5c3RlbXMuY29tILVDaGFtZWxlb24gZGV2aWNlICovCisvKiB3d3cuc3RhcnRpbmctcG9pbnQtc3lzdGVtcy5jb20gwrVDaGFtZWxlb24gZGV2aWNlICovCiAjZGVmaW5lIEZURElfTUlDUk9fQ0hBTUVMRU9OX1BJRAkweENBQTAJLyogUHJvZHVjdCBJZCAqLwogCiAvKiB3d3cuaXJ0cmFucy5kZSBkZXZpY2UgKi8KQEAgLTQxOSw3ICs0MTksNyBAQAogCiAvKgogICogVGVyYXRyb25payBwcm9kdWN0IGlkcy4KLSAqIFN1Ym1pdHRlZCBieSBPLiBX9mxmZWxzY2huZWlkZXIuCisgKiBTdWJtaXR0ZWQgYnkgTy4gV8O2bGZlbHNjaG5laWRlci4KICAqLwogI2RlZmluZSBGVERJX1RFUkFUUk9OSUtfVkNQX1BJRAkgMHhFQzg4CS8qIFRlcmF0cm9uaWsgZGV2aWNlIChwcmVmZXJyaW5nIFZDUCBkcml2ZXIgb24gd2luZG93cykgKi8KICNkZWZpbmUgRlRESV9URVJBVFJPTklLX0QyWFhfUElEIDB4RUM4OQkvKiBUZXJhdHJvbmlrIGRldmljZSAocHJlZmVycmluZyBEMlhYIGRyaXZlciBvbiB3aW5kb3dzKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX2VkZ2Vwb3J0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwppbmRleCAyZWNiMWQyLi44ZGQzYWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYwpAQCAtMjg4Miw3ICsyODgyLDcgQEAKIAkgICAgKGVkZ2Vfc2VyaWFsLT5wcm9kdWN0X2luZm8uTnVtUG9ydHMgIT0gc2VyaWFsLT5udW1fcG9ydHMpKSB7CiAJCWRldl93YXJuKCZzZXJpYWwtPmRldi0+ZGV2LCAiRGV2aWNlIFJlcG9ydGVkICVkIHNlcmlhbCBwb3J0cyAiCiAJCQkgInZzLiBjb3JlIHRoaW5raW5nIHdlIGhhdmUgJWQgcG9ydHMsIGVtYWlsICIKLQkJCSAiZ3JlZ0Brcm9haC5jb20gdGhpcyBpbmZvcm1hdGlvbi4iLAorCQkJICJncmVnQGtyb2FoLmNvbSB0aGlzIGluZm9ybWF0aW9uLlxuIiwKIAkJCSBlZGdlX3NlcmlhbC0+cHJvZHVjdF9pbmZvLk51bVBvcnRzLAogCQkJIHNlcmlhbC0+bnVtX3BvcnRzKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwppbmRleCBlODM2YWQwLi45YjM4YTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTMxMCAqLwogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNikgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc0MCAqLwogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwNykgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTMzMCBTZXJpZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MDgpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGUzNTCgU2VyaWVzICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzA4KSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlMzUwIFNlcmllcyAqLwogCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MDcwOSkgfSwgLyogVE9TSElCQSBQb2NrZXQgUEMgZTc1MCBTZXJpZXMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDA3MEEpIH0sIC8qIFRPU0hJQkEgUG9ja2V0IFBDIGU0MDAgU2VyaWVzICovCiAJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwNzBCKSB9LCAvKiBUT1NISUJBIFBvY2tldCBQQyBlODAwIFNlcmllcyAqLwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJeyBVU0JfREVWSUNFKDB4MEJGOCwgMHgxMDAxKSB9LCAvKiBGdWppdHN1IFNpZW1lbnMgQ29tcHV0ZXJzIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEM0NCwgMHgwM0EyKSB9LCAvKiBNb3Rvcm9sYSBpREVOIFNtYXJ0cGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQzhFLCAweDYwMDApIH0sIC8qIENlc3Njb20gTHV4aWFuIFNlcmllcyAqLwotCXsgVVNCX0RFVklDRSgweDBDQUQsIDB4OTAwMSkgfSwgLyogTW90b3JvbGEgUG93ZXJQYWQgUG9ja2V0IFBDoERldmljZSAqLworCXsgVVNCX0RFVklDRSgweDBDQUQsIDB4OTAwMSkgfSwgLyogTW90b3JvbGEgUG93ZXJQYWQgUG9ja2V0IFBDIERldmljZSAqLwogCXsgVVNCX0RFVklDRSgweDBGNEUsIDB4MDIwMCkgfSwgLyogRnJlZWRvbSBTY2llbnRpZmljIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEY5OCwgMHgwMjAxKSB9LCAvKiBDeWJlcmJhbmsgVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwRkI4LCAweDMwMDEpIH0sIC8qIFdpc3Ryb24gVVNCIFN5bmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwppbmRleCAxYjk0ZGFhLi5jYmU1NTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJCQkgMCwKIAkJCQkgMTAwMDAwKTsKIAlpZiAocmVzdWx0IDwgMCkKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiSW5pdCBvZiBtb2RlbSBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiSW5pdCBvZiBtb2RlbSBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOwogCiAJLyogcmVzZXQgdGhlIGJ1bGsgcGlwZXMgKi8KIAl1c2JfY2xlYXJfaGFsdChkZXYsIHVzYl9yY3ZidWxrcGlwZShkZXYsIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSk7CkBAIC0yNTUsNyArMjU1LDcgQEAKIAkJCQkgMCwKIAkJCQkgMTAwMDAwKTsKIAlpZiAocmVzdWx0IDwgMCkgCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgIkVuYWJsaW5nIGJ1bGsgUnhSZWFkIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJFbmFibGluZyBidWxrIFJ4UmVhZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOwogCiAJLyotLTQ6IHNldHVwIHRoZSBpbml0aWFsIGZsb3djb250cm9sICovCiAJZGJnKCIlczpzZXR0aW5nIGluaXQgZmxvd2NvbnRyb2wgKCVzKSIsX19GVU5DVElPTl9fLGJ1Zl9mbG93X2luaXQpOwpAQCAtMjY4LDcgKzI2OCw3IEBACiAJCQkJIDB4MTAsCiAJCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgImluaXRpYWwgZmxvd2NvbnRyb2wgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgImluaXRpYWwgZmxvd2NvbnRyb2wgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAogCiAJLyotLTU6IHJhaXNlIHRoZSBkdHIgKi8KQEAgLTI4Miw3ICsyODIsNyBAQAogCQkJCSAwLAogCQkJCSAyMDAwMDApOwogCWlmIChyZXN1bHQgPCAwKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJzZXR0aW5nIGR0ciBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAogCS8qLS02OiByYWlzZSB0aGUgcnRzICovCiAJZGJnKCIlczpyYWlzaW5nIHJ0cyIsX19GVU5DVElPTl9fKTsKQEAgLTI5NSw3ICsyOTUsNyBAQAogCQkJCSAwLAogCQkJCSAyMDAwMDApOwogCWlmIChyZXN1bHQgPCAwKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJzZXR0aW5nIGR0ciBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAic2V0dGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmVzdWx0KTsKIAkKIAlrZnJlZShidWZfZmxvd19pbml0KTsKIAlyZXR1cm4gMDsKQEAgLTMyMiw3ICszMjIsNyBAQAogCQkJCSAwLAogCQkJCSAyMDAwMDApOwogCWlmIChyZXN1bHQgPCAwKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJkcm9wcGluZyBkdHIgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgImRyb3BwaW5nIGR0ciBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOwogCiAJLyotLTI6IGRyb3AgdGhlIHJ0cyAqLwogCWRiZygiJXM6ZHJvcHBpbmcgcnRzIixfX0ZVTkNUSU9OX18pOwpAQCAtMzM0LDcgKzMzNCw3IEBACiAJCQkJIDAsCiAJCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgImRyb3BwaW5nIHJ0cyBmYWlsZWQgKGVycm9yID0gJWQpIiwgcmVzdWx0KTsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiZHJvcHBpbmcgcnRzIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIHJlc3VsdCk7CiAKIAogCS8qLS0zOiBwdXJnZSAqLwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCQkJIDAsCiAJCQkJIDIwMDAwMCk7CiAJaWYgKHJlc3VsdCA8IDApCi0JCWRldl9lcnIoJnBvcnQtPmRldiwgInB1cmdlIGZhaWxlZCAoZXJyb3IgPSAlZCkiLCByZXN1bHQpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJwdXJnZSBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOwogCiAKIAkvKiBzZW5kIFJYQlVMS19vZmYgKHRlbGwgbW9kZW0gdG8gc3RvcCB0cmFuc21pdHRpbmcgYnVsayBkYXRhIG9uIHJ4IGNoYW4pICovCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkJCQkgMTAwMDAwKTsKIAogCWlmIChyZXN1bHQgPCAwKQotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJEaXNhYmxpbmcgYnVsayBSeFJlYWQgZmFpbGVkIChlcnJvciA9ICVkKSIsIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIkRpc2FibGluZyBidWxrIFJ4UmVhZCBmYWlsZWQgKGVycm9yID0gJWQpXG4iLCByZXN1bHQpOwogCiAJLyogc2h1dGRvd24gYW55IGluLWZsaWdodCB1cmJzIHRoYXQgd2Uga25vdyBhYm91dCAqLwogCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwppbmRleCAwMWU4MTFiLi5lMDJjMTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKQEAgLTQ3OCw3ICs0NzgsNyBAQAogCQlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKHBvcnQwLT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3BvbnNlKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LAotCQkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmIiLAorCQkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgY29udHJvbCB1cmJcbiIsCiAJCQkJX19GVU5DVElPTl9fLCByZXNwb25zZSk7CiAJfQogCkBAIC00OTIsNyArNDkyLDcgQEAKIAlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVzcG9uc2UpCiAJCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIiLCBfX0ZVTkNUSU9OX18sIHJlc3BvbnNlKTsKKwkJCSIlcyAtIEVycm9yICVkIHN1Ym1pdHRpbmcgcmVhZCB1cmJcbiIsIF9fRlVOQ1RJT05fXywgcmVzcG9uc2UpOwogCiAJLyogaW5pdGlhbGl6ZSBvdXIgaWNvdW50IHN0cnVjdHVyZSAqLwogCW1lbXNldCgmKG1vczc3MjBfcG9ydC0+aWNvdW50KSwgMHgwMCwgc2l6ZW9mKG1vczc3MjBfcG9ydC0+aWNvdW50KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYwppbmRleCBkMTk4NjExLi5lZWEyMjZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC0yNTYsNyArMjU2LDcgQEAKIAkJCQkxMDApOwogCiAJaWYgKHJlc3VsdCAhPSBPVEk2ODU4X0NUUkxfUEtUX1NJWkUpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogZXJyb3IgcmVhZGluZyBzdGF0dXMiLCBfX0ZVTkNUSU9OX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcygpOiBlcnJvciByZWFkaW5nIHN0YXR1c1xuIiwgX19GVU5DVElPTl9fKTsKIAkJa2ZyZWUobmV3X3NldHVwKTsKIAkJLyogd2Ugd2lsbCB0cnkgYWdhaW4gKi8KIAkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZwcml2LT5kZWxheWVkX3NldHVwX3dvcmssIG1zZWNzX3RvX2ppZmZpZXMoMikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDBiYjhkZTQuLjk1OWIzZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVycmEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIHN0YXRpYyBpbnQgc2llcnJhX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgX191MTYgc3dpU3RhdGUpCiB7CiAJaW50IHJlc3VsdDsKLQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlcyIsICJTRVQgUE9XRVIgU1RBVEUiKTsKKwlkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlcyIsICJTRVQgUE9XRVIgU1RBVEVcbiIpOwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQkweDAwLAkJCS8qIF9fdTggcmVxdWVzdCAgICAgICovCiAJCQkweDQwLAkJCS8qIF9fdTggcmVxdWVzdCB0eXBlICovCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgaW50IHNpZXJyYV9zZXRfbXNfbW9kZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgX191MTYgZVNvY01vZGUpCiB7CiAJaW50IHJlc3VsdDsKLQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlcyIsICJERVZJQ0UgTU9ERSBTV0lUQ0giKTsKKwlkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlcyIsICJERVZJQ0UgTU9ERSBTV0lUQ0hcbiIpOwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LCB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCiAJCQlTV0lNU19VU0JfUkVRVUVTVF9TZXRNb2RlLAkvKiBfX3U4IHJlcXVlc3QgICAgICAqLwogCQkJU1dJTVNfVVNCX1JFUVVFU1RfVFlQRV9TZXRNb2RlLAkvKiBfX3U4IHJlcXVlc3QgdHlwZSAqLwpAQCAtMzk3LDcgKzM5Nyw3IEBACiAJCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQkJaWYgKGVycikKIAkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJyZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuIgotCQkJCQkiKCVkKSIsIGVycik7CisJCQkJCSIoJWQpXG4iLCBlcnIpOwogCQl9CiAJfQogCXJldHVybjsKQEAgLTUyNSw3ICs1MjUsNyBAQAogCiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXN1bHQpIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgInN1Ym1pdCB1cmIgJWQgZmFpbGVkICglZCkgJWQiLAorCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAic3VibWl0IHVyYiAlZCBmYWlsZWQgKCVkKSAlZFxuIiwKIAkJCQlpLCByZXN1bHQsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAJCX0KIAl9CkBAIC01MzgsNyArNTM4LDcgQEAKIAlpZiAocG9ydC0+aW50ZXJydXB0X2luX3VyYikgewogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfS0VSTkVMKTsKIAkJaWYgKHJlc3VsdCkKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgInN1Ym1pdCBpcnFfaW4gdXJiIGZhaWxlZCAlZCIsCisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJzdWJtaXQgaXJxX2luIHVyYiBmYWlsZWQgJWRcbiIsCiAJCQkJcmVzdWx0KTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pc2QyMDAuYwppbmRleCA2ODMxZGNhLi45M2E3NzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2lzZDIwMC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaXNkMjAwLmMKQEAgLTMsNyArMyw3IEBACiAgKiAkSWQ6IGlzZDIwMC5jLHYgMS4xNiAyMDAyLzA0LzIyIDAzOjM5OjQzIG1kaGFybSBFeHAgJAogICoKICAqIEN1cnJlbnQgZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlOgotICogICAoQykgMjAwMS0yMDAyIEJq9nJuIFN0ZW5iZXJnIChiam9ybkBoYXh4LnNlKQorICogICAoQykgMjAwMS0yMDAyIEJqw7ZybiBTdGVuYmVyZyAoYmpvcm5AaGF4eC5zZSkKICAqCiAgKiBEZXZlbG9wZWQgd2l0aCB0aGUgYXNzaXN0YW5jZSBvZjoKICAqICAgKEMpIDIwMDIgQWxhbiBTdGVybiA8c3Rlcm5Acm93bGFuZC5vcmc+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCA5YjY1NmVjLi4yMmFiMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKQEAgLTQwNyw3ICs0MDcsNyBAQAogCQkiRmluZVBpeCAxNDAwWm9vbSIsCiAJCVVTX1NDX1VGSSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9GSVhfSU5RVUlSWSB8IFVTX0ZMX1NJTkdMRV9MVU4pLAogCi0vKiBSZXBvcnRlZCBieSBQZXRlciBX5GNodGxlciA8cHdhZWNodGxlckBsb2V3ZS1rb21wLmRlPgorLyogUmVwb3J0ZWQgYnkgUGV0ZXIgV8OkY2h0bGVyIDxwd2FlY2h0bGVyQGxvZXdlLWtvbXAuZGU+CiAgKiBUaGUgZGV2aWNlIG5lZWRzIHRoZSBmbGFncyBvbmx5LgogICovCiBVTlVTVUFMX0RFViggIDB4MDRjZSwgMHgwMDAyLCAweDAwNzQsIDB4MDA3NCwKQEAgLTE1NTEsNyArMTU1MSw3IEBACiAJCVVTX0ZMX0dPX1NMT1cgKSwKIAogLyoKLSAqIERhdmlkIEjkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4KKyAqIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CiAgKiBUaGUga2V5IG1ha2VzIHRoZSBTQ1NJIHN0YWNrIHByaW50IGNvbmZ1c2luZyAoYnV0IGhhcm1sZXNzKSBtZXNzYWdlcwogICovCiBVTlVTVUFMX0RFViggIDB4NDE0NiwgMHhiYTAxLCAweDAxMDAsIDB4MDEwMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDM0NTFlOGQuLmFjNjExNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtOTA3LDEyICs5MDcsOSBAQAogCWlmIChkZWxheV91c2UgPiAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJ1c2Itc3RvcmFnZTogd2FpdGluZyBmb3IgZGV2aWNlICIKIAkJCQkidG8gc2V0dGxlIGJlZm9yZSBzY2FubmluZ1xuIik7Ci1yZXRyeToKLQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodXMtPmRlbGF5X3dhaXQsCisJCXdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQodXMtPmRlbGF5X3dhaXQsCiAJCQkJdGVzdF9iaXQoVVNfRkxJRFhfRElTQ09OTkVDVElORywgJnVzLT5mbGFncyksCiAJCQkJZGVsYXlfdXNlICogSFopOwotCQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQotCQkJZ290byByZXRyeTsKIAl9CiAKIAkvKiBJZiB0aGUgZGV2aWNlIGlzIHN0aWxsIGNvbm5lY3RlZCwgcGVyZm9ybSB0aGUgc2Nhbm5pbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCBiM2JmNGVjLi5mYjlkOGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC02NjEsNyArNjYxLDcgQEAKICAgICAgICBoZWxwCiAgICAgICAgICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEhlY3ViYSBib2FyZC4gVGhpcyBkcml2ZXIgd2FzIHRlc3RlZAogICAgICAgICAgd2l0aCBhbiBFLUluayA4MDB4NjAwIGRpc3BsYXkgYW5kIHg4NiBTQkNzIHRocm91Z2ggYSAxNiBiaXQgR1BJTwotICAgICAgICAgaW50ZXJmYWNlICg4IGJpdCBkYXRhLCA0IGJpdCBjb250cm9sKS4gSWYgeW91IGFudGljcGF0ZSB1c2luZworICAgICAgICAgaW50ZXJmYWNlICg4IGJpdCBkYXRhLCA0IGJpdCBjb250cm9sKS4gSWYgeW91IGFudGljaXBhdGUgdXNpbmcKICAgICAgICAgIHRoaXMgZHJpdmVyLCBzYXkgWSBvciBNOyBvdGhlcndpc2Ugc2F5IE4uIFlvdSBtdXN0IHNwZWNpZnkgdGhlCiAgICAgICAgICBHUElPIElPIGFkZHJlc3MgdG8gYmUgdXNlZCBmb3Igc2V0dGluZyBjb250cm9sIGFuZCBkYXRhLgogCkBAIC04MTUsNyArODE1LDcgQEAKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBmcmFtZWJ1ZmZlciBkZXZpY2UgZm9yIHRoZSBTdW4gWFZSLTUwMCBhbmQgc2ltaWxhcgogCSAgZ3JhcGhpY3MgY2FyZHMgYmFzZWQgdXBvbiB0aGUgM0RMQUJTIFdpbGRjYXQgY2hpcHNldC4gIFRoZSBkcml2ZXIKLQkgIG9ubHkgd29ya3Mgb24gc3BhcmM2NCBzeXN0ZW1zIHdoZXJlIHRoZSBzeXN0ZW0gZmlyd21hcmUgaGFzCisJICBvbmx5IHdvcmtzIG9uIHNwYXJjNjQgc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGZpcm13YXJlIGhhcwogCSAgbW9zdGx5IGluaXRpYWxpemVkIHRoZSBjYXJkIGFscmVhZHkuICBJdCBpcyB0cmVhdGVkIGFzIGEKIAkgIGNvbXBsZXRlbHkgZHVtYiBmcmFtZWJ1ZmZlciBkZXZpY2UuCiAKQEAgLTgyOCw3ICs4MjgsNyBAQAogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIGZyYW1lYnVmZmVyIGRldmljZSBmb3IgdGhlIFN1biBYVlItMjUwMCBhbmQgc2ltaWxhcgogCSAgZ3JhcGhpY3MgY2FyZHMgYmFzZWQgdXBvbiB0aGUgM0RMQUJTIFdpbGRjYXQgY2hpcHNldC4gIFRoZSBkcml2ZXIKLQkgIG9ubHkgd29ya3Mgb24gc3BhcmM2NCBzeXN0ZW1zIHdoZXJlIHRoZSBzeXN0ZW0gZmlyd21hcmUgaGFzCisJICBvbmx5IHdvcmtzIG9uIHNwYXJjNjQgc3lzdGVtcyB3aGVyZSB0aGUgc3lzdGVtIGZpcm13YXJlIGhhcwogCSAgbW9zdGx5IGluaXRpYWxpemVkIHRoZSBjYXJkIGFscmVhZHkuICBJdCBpcyB0cmVhdGVkIGFzIGEKIAkgIGNvbXBsZXRlbHkgZHVtYiBmcmFtZWJ1ZmZlciBkZXZpY2UuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYW1pZmIuYyBiL2RyaXZlcnMvdmlkZW8vYW1pZmIuYwppbmRleCBmMmUyNDNjLi40YzllYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FtaWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hbWlmYi5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rCiAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAogICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgIHx1cHBlcl9tYXJnaW4gICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKLSAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CisgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAogICAgKy0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tLS0tLS0tLS0rLS0tLS0tLSsKICAgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CiAgICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfApAQCAtMTMzLDE1ICsxMzMsMTUgQEAKICAgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CiAgICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAogICAgfCAgICAgICAgICAjICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICB8ICAgICAgIHwKLSAgIHwgICAgICAgICAgIyAgICAgICAgICAgICAgICClICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgfCAgICAgICB8CisgICB8ICAgICAgICAgICMgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgIHwgICAgICAgfAogICAgKy0tLS0tLS0tLS0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tLS0tLS0tLS0rLS0tLS0tLSsKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CiAgICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgfGxvd2VyX21hcmdpbiAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAotICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgIKUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKKyAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8CiAgICArLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tKwogICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgICB8dnN5bmNfbGVuICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8Ci0gICB8ICAgICAgICAgIHwgICAgICAgICAgICAgICAgpSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgfAorICAgfCAgICAgICAgICB8ICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgICstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0rCiAKIApAQCAtMzI1LDcgKzMyNSw3IEBACiAgICBDQ0lSIC0+IFBBTAogICAgLS0tLS0tLS0tLS0KIAotICAgICAgLSBhIHNjYW5saW5lIGlzIDY0ILVzIGxvbmcsIG9mIHdoaWNoIDUyLjQ4ILVzIGFyZSB2aXNpYmxlLiBUaGlzIGlzIGFib3V0CisgICAgICAtIGEgc2NhbmxpbmUgaXMgNjQgwrVzIGxvbmcsIG9mIHdoaWNoIDUyLjQ4IMK1cyBhcmUgdmlzaWJsZS4gVGhpcyBpcyBhYm91dAogICAgICAgICA3MzYgdmlzaWJsZSA3MCBucyBwaXhlbHMgcGVyIGxpbmUuCiAgICAgICAtIHdlIGhhdmUgNjI1IHNjYW5saW5lcywgb2Ygd2hpY2ggNTc1IGFyZSB2aXNpYmxlIChpbnRlcmxhY2VkKTsgYWZ0ZXIKICAgICAgICAgcm91bmRpbmcgdGhpcyBiZWNvbWVzIDU3Ni4KQEAgLTMzMyw3ICszMzMsNyBAQAogICAgUkVUTUEgLT4gTlRTQwogICAgLS0tLS0tLS0tLS0tLQogCi0gICAgICAtIGEgc2NhbmxpbmUgaXMgNjMuNSC1cyBsb25nLCBvZiB3aGljaCA1My41ILVzIGFyZSB2aXNpYmxlLiAgVGhpcyBpcyBhYm91dAorICAgICAgLSBhIHNjYW5saW5lIGlzIDYzLjUgwrVzIGxvbmcsIG9mIHdoaWNoIDUzLjUgwrVzIGFyZSB2aXNpYmxlLiAgVGhpcyBpcyBhYm91dAogICAgICAgICA3MzYgdmlzaWJsZSA3MCBucyBwaXhlbHMgcGVyIGxpbmUuCiAgICAgICAtIHdlIGhhdmUgNTI1IHNjYW5saW5lcywgb2Ygd2hpY2ggNDg1IGFyZSB2aXNpYmxlIChpbnRlcmxhY2VkKTsgYWZ0ZXIKICAgICAgICAgcm91bmRpbmcgdGhpcyBiZWNvbWVzIDQ4NC4KQEAgLTgwMiw3ICs4MDIsNyBAQAogCiBzdGF0aWMgdV9zaG9ydCBkb192bW9kZV9mdWxsID0gMDsJLyogQ2hhbmdlIHRoZSBWaWRlbyBNb2RlICovCiBzdGF0aWMgdV9zaG9ydCBkb192bW9kZV9wYW4gPSAwOwkvKiBVcGRhdGUgdGhlIFZpZGVvIE1vZGUgKi8KLXN0YXRpYyBzaG9ydCBkb19ibGFuayA9IDA7CQkvKiAoVW4pQmxhbmsgdGhlIFNjcmVlbiAosTEpICovCitzdGF0aWMgc2hvcnQgZG9fYmxhbmsgPSAwOwkJLyogKFVuKUJsYW5rIHRoZSBTY3JlZW4gKMKxMSkgKi8KIHN0YXRpYyB1X3Nob3J0IGRvX2N1cnNvciA9IDA7CQkvKiBNb3ZlIHRoZSBDdXJzb3IgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKaW5kZXggYWJlMGM0My4uZDc3NWViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwpAQCAtMjYsNyArMjYsNyBAQAogICoJCQkgICBBbnRob255IFRvbmcgPGF0b25nQHVpdWMuZWR1PgogICoKICAqICBHZW5lcmljIExDRCBzdXBwb3J0IHdyaXR0ZW4gYnkgRGFuaWVsIE1hbnRpb25lLCBwb3J0ZWQgZnJvbSAyLjQuMjAgYnkgQWxleCBLZXJuCi0gKiAgTWFueSBUaGFua3MgdG8gVmlsbGUgU3lyauRs5CBmb3IgcGF0Y2hlcyBhbmQgZml4aW5nIG5hc3RpbmcgMTYgYml0IGNvbG9yIGJ1Zy4KKyAqICBNYW55IFRoYW5rcyB0byBWaWxsZSBTeXJqw6Rsw6QgZm9yIHBhdGNoZXMgYW5kIGZpeGluZyBuYXN0aW5nIDE2IGJpdCBjb2xvciBidWcuCiAgKgogICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYwppbmRleCA4MzJlNDYxLi42MmJkNDQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCkBAIC00NTcsNyArNDU3LDcgQEAKIAogLyogQVUxMTAwIExDRCBjb250cm9sbGVyIGRldmljZSBkcml2ZXIgKi8KIAotaW50IGF1MTEwMGZiX2Rydl9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9faW5pdCBhdTExMDBmYl9kcnZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBhdTExMDBmYl9kZXZpY2UgKmZiZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3NfcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwppbmRleCBhMjJjY2Y5Li4yNjc0MjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgVGhlIHNjcm9sbGJhY2sgYnVmZmVyIG9mIHRoZSBzdGFuZGFyZCBWR0EgY29uc29sZSBpcyBsb2NhdGVkIGluCiAJIHRoZSBWR0EgUkFNLiAgVGhlIHNpemUgb2YgdGhpcyBSQU0gaXMgZml4ZWQgYW5kIGlzIHF1aXRlIHNtYWxsLgogCSBJZiB5b3UgcmVxdWlyZSBhIGxhcmdlciBzY3JvbGxiYWNrIGJ1ZmZlciwgdGhpcyBjYW4gYmUgcGxhY2VkIGluCi0JIFN5c3RlbSBSQU0gd2hpY2ggaXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGR1cmluZyBpbnRpYWxpemF0aW9uLgorCSBTeXN0ZW0gUkFNIHdoaWNoIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uCiAJIFBsYWNpbmcgdGhlIHNjcm9sbGJhY2sgYnVmZmVyIGluIFN5c3RlbSBSQU0gd2lsbCBzbGlnaHRseSBzbG93CiAJIGRvd24gdGhlIGNvbnNvbGUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9uZXdwb3J0X2Nvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL25ld3BvcnRfY29uLmMKaW5kZXggZjU3ZDdiMi4uZDMxYjIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL25ld3BvcnRfY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL25ld3BvcnRfY29uLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbGludXhfbG9nbyAqbmV3cG9ydF9zaG93X2xvZ28odm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGludXhfbG9nbyAqbmV3cG9ydF9zaG93X2xvZ28odm9pZCkKIHsKICNpZmRlZiBDT05GSUdfTE9HT19TR0lfQ0xVVDIyNAogCWNvbnN0IHN0cnVjdCBsaW51eF9sb2dvICpsb2dvID0gZmJfZmluZF9sb2dvKDgpOwpAQCAtMTA4LDggKzEwOCw4IEBACiAKIAlpZiAoIWxvZ28pCiAJCXJldHVybiBOVUxMOwotCSpjbHV0ID0gbG9nby0+Y2x1dDsKLQkqZGF0YSA9IGxvZ28tPmRhdGE7CisJY2x1dCA9IGxvZ28tPmNsdXQ7CisJZGF0YSA9IGxvZ28tPmRhdGE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbG9nby0+Y2x1dHNpemU7IGkrKykgewogCQluZXdwb3J0X2Jmd2FpdChucHJlZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jIGIvZHJpdmVycy92aWRlby9jeWJlcjIwMDBmYi5jCmluZGV4IDliYjJjYmYuLjVmYjg2NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY3liZXIyMDAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2N5YmVyMjAwMGZiLmMKQEAgLTYyLDcgKzYyLDcgQEAKIAlzdHJ1Y3QgZGlzcGxheV9zd2l0Y2gJKmRpc3BzdzsKIAlzdHJ1Y3QgZGlzcGxheQkJKmRpc3BsYXk7CiAJc3RydWN0IHBjaV9kZXYJCSpkZXY7Ci0JdW5zaWduZWQgY2hhciAJCV9faW9tZW0gKnJlZ2lvbjsKKwl1bnNpZ25lZCBjaGFyCQlfX2lvbWVtICpyZWdpb247CiAJdW5zaWduZWQgY2hhcgkJX19pb21lbSAqcmVnczsKIAl1X2ludAkJCWlkOwogCWludAkJCWZ1bmNfdXNlX2NvdW50OwpAQCAtOTcsMTEgKzk3LDExIEBACiAvKgogICogT3VyIGFjY2VzcyBtZXRob2RzLgogICovCi0jZGVmaW5lIGN5YmVyMjAwMGZiX3dyaXRlbCh2YWwscmVnLGNmYikJd3JpdGVsKHZhbCwgKGNmYiktPnJlZ3MgKyAocmVnKSkKLSNkZWZpbmUgY3liZXIyMDAwZmJfd3JpdGV3KHZhbCxyZWcsY2ZiKQl3cml0ZXcodmFsLCAoY2ZiKS0+cmVncyArIChyZWcpKQotI2RlZmluZSBjeWJlcjIwMDBmYl93cml0ZWIodmFsLHJlZyxjZmIpCXdyaXRlYih2YWwsIChjZmIpLT5yZWdzICsgKHJlZykpCisjZGVmaW5lIGN5YmVyMjAwMGZiX3dyaXRlbCh2YWwsIHJlZywgY2ZiKQl3cml0ZWwodmFsLCAoY2ZiKS0+cmVncyArIChyZWcpKQorI2RlZmluZSBjeWJlcjIwMDBmYl93cml0ZXcodmFsLCByZWcsIGNmYikJd3JpdGV3KHZhbCwgKGNmYiktPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgY3liZXIyMDAwZmJfd3JpdGViKHZhbCwgcmVnLCBjZmIpCXdyaXRlYih2YWwsIChjZmIpLT5yZWdzICsgKHJlZykpCiAKLSNkZWZpbmUgY3liZXIyMDAwZmJfcmVhZGIocmVnLGNmYikJcmVhZGIoKGNmYiktPnJlZ3MgKyAocmVnKSkKKyNkZWZpbmUgY3liZXIyMDAwZmJfcmVhZGIocmVnLCBjZmIpCQlyZWFkYigoY2ZiKS0+cmVncyArIChyZWcpKQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGN5YmVyMjAwMF9jcnRjdyh1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsLCBzdHJ1Y3QgY2ZiX2luZm8gKmNmYikKQEAgLTIyMSwxMiArMjIxLDggQEAKIHN0YXRpYyB2b2lkCiBjeWJlcjIwMDBmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCiB7Ci0vLwlzdHJ1Y3QgY2ZiX2luZm8gKmNmYiA9IChzdHJ1Y3QgY2ZiX2luZm8gKilpbmZvOwotCi0vLwlpZiAoIShjZmItPmZiLnZhci5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUKSkgewotCQljZmJfaW1hZ2VibGl0KGluZm8sIGltYWdlKTsKLQkJcmV0dXJuOwotLy8JfQorCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCXJldHVybjsKIH0KIAogc3RhdGljIGludCBjeWJlcjIwMDBmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQpAQCAtMjc3LDEyICsyNzMsMTIgQEAKIAogCS8qCiAJICogUHNldWRvY29sb3VyOgotCSAqICAgICAgICAgOCAgICAgOAorCSAqCSAgIDggICAgIDgKIAkgKiBwaXhlbCAtLS8tLSstLS8tLT4gIHJlZCBsdXQgIC0tPiByZWQgZGFjCi0JICogICAgICAgICAgICB8ICA4Ci0JICogICAgICAgICAgICArLS0vLS0+IGdyZWVuIGx1dCAtLT4gZ3JlZW4gZGFjCi0JICogICAgICAgICAgICB8ICA4Ci0JICogICAgICAgICAgICArLS0vLS0+ICBibHVlIGx1dCAtLT4gYmx1ZSBkYWMKKwkgKgkgICAgICB8ICA4CisJICoJICAgICAgKy0tLy0tPiBncmVlbiBsdXQgLS0+IGdyZWVuIGRhYworCSAqCSAgICAgIHwgIDgKKwkgKgkgICAgICArLS0vLS0+ICBibHVlIGx1dCAtLT4gYmx1ZSBkYWMKIAkgKi8KIAljYXNlIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjoKIAkJaWYgKHJlZ25vID49IE5SX1BBTEVUVEUpCkBAIC0yOTIsOSArMjg4LDkgQEAKIAkJZ3JlZW4gPj49IDg7CiAJCWJsdWUgPj49IDg7CiAKLQkJY2ZiLT5wYWxldHRlW3JlZ25vXS5yZWQgICA9IHJlZDsKKwkJY2ZiLT5wYWxldHRlW3JlZ25vXS5yZWQgPSByZWQ7CiAJCWNmYi0+cGFsZXR0ZVtyZWdub10uZ3JlZW4gPSBncmVlbjsKLQkJY2ZiLT5wYWxldHRlW3JlZ25vXS5ibHVlICA9IGJsdWU7CisJCWNmYi0+cGFsZXR0ZVtyZWdub10uYmx1ZSA9IGJsdWU7CiAKIAkJY3liZXIyMDAwZmJfd3JpdGViKHJlZ25vLCAweDNjOCwgY2ZiKTsKIAkJY3liZXIyMDAwZmJfd3JpdGViKHJlZCwgMHgzYzksIGNmYik7CkBAIC0zMDQsMTIgKzMwMCwxMiBAQAogCiAJLyoKIAkgKiBEaXJlY3QgY29sb3VyOgotCSAqICAgICAgICAgIG4gICAgIHJsCi0JICogIHBpeGVsIC0tLy0tKy0tLy0tPiAgcmVkIGx1dCAgLS0+IHJlZCBkYWMKLQkgKiAgICAgICAgICAgICB8ICBnbAotCSAqICAgICAgICAgICAgICstLS8tLT4gZ3JlZW4gbHV0IC0tPiBncmVlbiBkYWMKLQkgKiAgICAgICAgICAgICB8ICBibAotCSAqICAgICAgICAgICAgICstLS8tLT4gIGJsdWUgbHV0IC0tPiBibHVlIGRhYworCSAqCSAgIG4gICAgIHJsCisJICogcGl4ZWwgLS0vLS0rLS0vLS0+ICByZWQgbHV0ICAtLT4gcmVkIGRhYworCSAqCSAgICAgIHwgIGdsCisJICoJICAgICAgKy0tLy0tPiBncmVlbiBsdXQgLS0+IGdyZWVuIGRhYworCSAqCSAgICAgIHwgIGJsCisJICoJICAgICAgKy0tLy0tPiAgYmx1ZSBsdXQgLS0+IGJsdWUgZGFjCiAJICogbiA9IGJwcCwgcmwgPSByZWQgbGVuZ3RoLCBnbCA9IGdyZWVuIGxlbmd0aCwgYmwgPSBibHVlIGxlbmd0aAogCSAqLwogCWNhc2UgRkJfVklTVUFMX0RJUkVDVENPTE9SOgpAQCAtMzI1LDkgKzMyMSwxMSBAQAogCQkJICogdG8gdGhlIGhpZ2ggNiBiaXRzIG9mIHRoZSBMVVQuCiAJCQkgKi8KIAkJCWN5YmVyMjAwMGZiX3dyaXRlYihyZWdubyA8PCAyLCAweDNjOCwgY2ZiKTsKLQkJCWN5YmVyMjAwMGZiX3dyaXRlYihjZmItPnBhbGV0dGVbcmVnbm8gPj4gMV0ucmVkLCAweDNjOSwgY2ZiKTsKKwkJCWN5YmVyMjAwMGZiX3dyaXRlYihjZmItPnBhbGV0dGVbcmVnbm8gPj4gMV0ucmVkLAorCQkJCQkgICAweDNjOSwgY2ZiKTsKIAkJCWN5YmVyMjAwMGZiX3dyaXRlYihncmVlbiwgMHgzYzksIGNmYik7Ci0JCQljeWJlcjIwMDBmYl93cml0ZWIoY2ZiLT5wYWxldHRlW3JlZ25vID4+IDFdLmJsdWUsIDB4M2M5LCBjZmIpOworCQkJY3liZXIyMDAwZmJfd3JpdGViKGNmYi0+cGFsZXR0ZVtyZWdubyA+PiAxXS5ibHVlLAorCQkJCQkgICAweDNjOSwgY2ZiKTsKIAogCQkJZ3JlZW4gPSBjZmItPnBhbGV0dGVbcmVnbm8gPDwgM10uZ3JlZW47CiAKQEAgLTMzNSw5ICszMzMsOSBAQAogCQl9CiAKIAkJaWYgKHZhci0+Z3JlZW4ubGVuZ3RoID49IDUgJiYgcmVnbm8gPCAzMikgewotCQkJY2ZiLT5wYWxldHRlW3JlZ25vIDw8IDNdLnJlZCAgID0gcmVkOworCQkJY2ZiLT5wYWxldHRlW3JlZ25vIDw8IDNdLnJlZCA9IHJlZDsKIAkJCWNmYi0+cGFsZXR0ZVtyZWdubyA8PCAzXS5ncmVlbiA9IGdyZWVuOwotCQkJY2ZiLT5wYWxldHRlW3JlZ25vIDw8IDNdLmJsdWUgID0gYmx1ZTsKKwkJCWNmYi0+cGFsZXR0ZVtyZWdubyA8PCAzXS5ibHVlID0gYmx1ZTsKIAogCQkJLyoKIAkJCSAqIFRoZSA1IGJpdHMgb2YgZWFjaCBjb2xvdXIgY29tcG9uZW50IGFyZQpAQCAtMzUxLDkgKzM0OSw5IEBACiAJCX0KIAogCQlpZiAodmFyLT5ncmVlbi5sZW5ndGggPT0gNCAmJiByZWdubyA8IDE2KSB7Ci0JCQljZmItPnBhbGV0dGVbcmVnbm8gPDwgNF0ucmVkICAgPSByZWQ7CisJCQljZmItPnBhbGV0dGVbcmVnbm8gPDwgNF0ucmVkID0gcmVkOwogCQkJY2ZiLT5wYWxldHRlW3JlZ25vIDw8IDRdLmdyZWVuID0gZ3JlZW47Ci0JCQljZmItPnBhbGV0dGVbcmVnbm8gPDwgNF0uYmx1ZSAgPSBibHVlOworCQkJY2ZiLT5wYWxldHRlW3JlZ25vIDw8IDRdLmJsdWUgPSBibHVlOwogCiAJCQkvKgogCQkJICogVGhlIDUgYml0cyBvZiBlYWNoIGNvbG91ciBjb21wb25lbnQgYXJlCkBAIC0zNzcsMTIgKzM3NSwxMiBAQAogCiAJLyoKIAkgKiBUcnVlIGNvbG91cjoKLQkgKiAgICAgICAgICBuICAgICBybAotCSAqICBwaXhlbCAtLS8tLSstLS8tLT4gcmVkIGRhYwotCSAqICAgICAgICAgICAgIHwgIGdsCi0JICogICAgICAgICAgICAgKy0tLy0tPiBncmVlbiBkYWMKLQkgKiAgICAgICAgICAgICB8ICBibAotCSAqICAgICAgICAgICAgICstLS8tLT4gYmx1ZSBkYWMKKwkgKgkgICBuICAgICBybAorCSAqIHBpeGVsIC0tLy0tKy0tLy0tPiByZWQgZGFjCisJICoJICAgICAgfCAgZ2wKKwkgKgkgICAgICArLS0vLS0+IGdyZWVuIGRhYworCSAqCSAgICAgIHwgIGJsCisJICoJICAgICAgKy0tLy0tPiBibHVlIGRhYwogCSAqIG4gPSBicHAsIHJsID0gcmVkIGxlbmd0aCwgZ2wgPSBncmVlbiBsZW5ndGgsIGJsID0gYmx1ZSBsZW5ndGgKIAkgKi8KIAljYXNlIEZCX1ZJU1VBTF9UUlVFQ09MT1I6CkBAIC00OTQsOSArNDkyLDkgQEAKIAogCS8qIFBMTCByZWdpc3RlcnMgKi8KIAljeWJlcjIwMDBfZ3JwaHcoRVhUX0RDTEtfTVVMVCwgaHctPmNsb2NrX211bHQsIGNmYik7Ci0JY3liZXIyMDAwX2dycGh3KEVYVF9EQ0xLX0RJViwgIGh3LT5jbG9ja19kaXYsIGNmYik7CisJY3liZXIyMDAwX2dycGh3KEVYVF9EQ0xLX0RJViwgaHctPmNsb2NrX2RpdiwgY2ZiKTsKIAljeWJlcjIwMDBfZ3JwaHcoRVhUX01DTEtfTVVMVCwgY2ZiLT5tY2xrX211bHQsIGNmYik7Ci0JY3liZXIyMDAwX2dycGh3KEVYVF9NQ0xLX0RJViwgIGNmYi0+bWNsa19kaXYsIGNmYik7CisJY3liZXIyMDAwX2dycGh3KEVYVF9NQ0xLX0RJViwgY2ZiLT5tY2xrX2RpdiwgY2ZiKTsKIAljeWJlcjIwMDBfZ3JwaHcoMHg5MCwgMHgwMSwgY2ZiKTsKIAljeWJlcjIwMDBfZ3JwaHcoMHhiOSwgMHg4MCwgY2ZiKTsKIAljeWJlcjIwMDBfZ3JwaHcoMHhiOSwgMHgwMCwgY2ZiKTsKQEAgLTUxNSw4ICs1MTMsOCBAQAogCS8qCiAJICogU2V0IHVwIGFjY2VsZXJhdG9yIHJlZ2lzdGVycwogCSAqLwotCWN5YmVyMjAwMGZiX3dyaXRldyhody0+d2lkdGgsICAgICBDT19SRUdfU1JDX1dJRFRILCAgY2ZiKTsKLQljeWJlcjIwMDBmYl93cml0ZXcoaHctPndpZHRoLCAgICAgQ09fUkVHX0RFU1RfV0lEVEgsIGNmYik7CisJY3liZXIyMDAwZmJfd3JpdGV3KGh3LT53aWR0aCwgQ09fUkVHX1NSQ19XSURUSCwgY2ZiKTsKKwljeWJlcjIwMDBmYl93cml0ZXcoaHctPndpZHRoLCBDT19SRUdfREVTVF9XSURUSCwgY2ZiKTsKIAljeWJlcjIwMDBmYl93cml0ZWIoaHctPmNvX3BpeGZtdCwgQ09fUkVHX1BJWEZNVCwgY2ZiKTsKIH0KIApAQCAtNTQ5LDE1ICs1NDcsMTUgQEAKIHsKIAl1X2ludCBIdG90YWwsIEhibGFua2VuZCwgSHN5bmNlbmQ7CiAJdV9pbnQgVnRvdGFsLCBWZGlzcGVuZCwgVmJsYW5rc3RhcnQsIFZibGFua2VuZCwgVnN5bmNzdGFydCwgVnN5bmNlbmQ7Ci0jZGVmaW5lIEJJVCh2LGIxLG0sYjIpICgoKHYgPj4gYjEpICYgbSkgPDwgYjIpCisjZGVmaW5lIEVOQ09ERV9CSVQodiwgYjEsIG0sIGIyKSAoKCgodikgPj4gKGIxKSkgJiAobSkpIDw8IChiMikpCiAKIAlody0+Y3J0Y1sxM10gPSBody0+cGl0Y2g7CiAJaHctPmNydGNbMTddID0gMHhlMzsKIAlody0+Y3J0Y1sxNF0gPSAwOwogCWh3LT5jcnRjWzhdICA9IDA7CiAKLQlIdG90YWwgICAgICA9IHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luICsKLQkJICAgICAgdmFyLT5oc3luY19sZW4gKyB2YXItPmxlZnRfbWFyZ2luOworCUh0b3RhbCAgICAgPSB2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArCisJCSAgICAgdmFyLT5oc3luY19sZW4gKyB2YXItPmxlZnRfbWFyZ2luOwogCiAJaWYgKEh0b3RhbCA+IDIwODApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTY3LDE1ICs1NjUsMTUgQEAKIAlody0+Y3J0Y1syXSA9IHZhci0+eHJlcyA+PiAzOwogCWh3LT5jcnRjWzRdID0gKHZhci0+eHJlcyArIHZhci0+cmlnaHRfbWFyZ2luKSA+PiAzOwogCi0JSGJsYW5rZW5kICAgPSAoSHRvdGFsIC0gNCo4KSA+PiAzOworCUhibGFua2VuZCAgID0gKEh0b3RhbCAtIDQgKiA4KSA+PiAzOwogCi0JaHctPmNydGNbM10gPSBCSVQoSGJsYW5rZW5kLCAgMCwgMHgxZiwgIDApIHwKLQkJICAgICAgQklUKDEsICAgICAgICAgIDAsIDB4MDEsICA3KTsKKwlody0+Y3J0Y1szXSA9IEVOQ09ERV9CSVQoSGJsYW5rZW5kLCAgMCwgMHgxZiwgIDApIHwKKwkJICAgICAgRU5DT0RFX0JJVCgxLCAgICAgICAgICAwLCAweDAxLCAgNyk7CiAKIAlIc3luY2VuZCAgICA9ICh2YXItPnhyZXMgKyB2YXItPnJpZ2h0X21hcmdpbiArIHZhci0+aHN5bmNfbGVuKSA+PiAzOwogCi0JaHctPmNydGNbNV0gPSBCSVQoSHN5bmNlbmQsICAgMCwgMHgxZiwgIDApIHwKLQkJICAgICAgQklUKEhibGFua2VuZCwgIDUsIDB4MDEsICA3KTsKKwlody0+Y3J0Y1s1XSA9IEVOQ09ERV9CSVQoSHN5bmNlbmQsICAgMCwgMHgxZiwgIDApIHwKKwkJICAgICAgRU5DT0RFX0JJVChIYmxhbmtlbmQsICA1LCAweDAxLCAgNyk7CiAKIAlWZGlzcGVuZCAgICA9IHZhci0+eXJlcyAtIDE7CiAJVnN5bmNzdGFydCAgPSB2YXItPnlyZXMgKyB2YXItPmxvd2VyX21hcmdpbjsKQEAgLTU5MCwyMCArNTg4LDIwIEBACiAJVmJsYW5rZW5kICAgPSBWdG90YWwgLSAxMDsKIAogCWh3LT5jcnRjWzZdICA9IFZ0b3RhbDsKLQlody0+Y3J0Y1s3XSAgPSBCSVQoVnRvdGFsLCAgICAgOCwgMHgwMSwgIDApIHwKLQkJCUJJVChWZGlzcGVuZCwgICA4LCAweDAxLCAgMSkgfAotCQkJQklUKFZzeW5jc3RhcnQsIDgsIDB4MDEsICAyKSB8Ci0JCQlCSVQoVmJsYW5rc3RhcnQsOCwgMHgwMSwgIDMpIHwKLQkJCUJJVCgxLCAgICAgICAgICAwLCAweDAxLCAgNCkgfAotCSAgICAgICAgCUJJVChWdG90YWwsICAgICA5LCAweDAxLCAgNSkgfAotCQkJQklUKFZkaXNwZW5kLCAgIDksIDB4MDEsICA2KSB8Ci0JCQlCSVQoVnN5bmNzdGFydCwgOSwgMHgwMSwgIDcpOwotCWh3LT5jcnRjWzldICA9IEJJVCgwLCAgICAgICAgICAwLCAweDFmLCAgMCkgfAotCQkgICAgICAgIEJJVChWYmxhbmtzdGFydCw5LCAweDAxLCAgNSkgfAotCQkJQklUKDEsICAgICAgICAgIDAsIDB4MDEsICA2KTsKKwlody0+Y3J0Y1s3XSAgPSBFTkNPREVfQklUKFZ0b3RhbCwgICAgIDgsIDB4MDEsICAwKSB8CisJCQlFTkNPREVfQklUKFZkaXNwZW5kLCAgIDgsIDB4MDEsICAxKSB8CisJCQlFTkNPREVfQklUKFZzeW5jc3RhcnQsIDgsIDB4MDEsICAyKSB8CisJCQlFTkNPREVfQklUKFZibGFua3N0YXJ0LCA4LCAweDAxLCAgMykgfAorCQkJRU5DT0RFX0JJVCgxLCAgICAgICAgICAwLCAweDAxLCAgNCkgfAorCQkJRU5DT0RFX0JJVChWdG90YWwsICAgICA5LCAweDAxLCAgNSkgfAorCQkJRU5DT0RFX0JJVChWZGlzcGVuZCwgICA5LCAweDAxLCAgNikgfAorCQkJRU5DT0RFX0JJVChWc3luY3N0YXJ0LCA5LCAweDAxLCAgNyk7CisJaHctPmNydGNbOV0gID0gRU5DT0RFX0JJVCgwLCAgICAgICAgICAwLCAweDFmLCAgMCkgfAorCQkJRU5DT0RFX0JJVChWYmxhbmtzdGFydCwgOSwgMHgwMSwgIDUpIHwKKwkJCUVOQ09ERV9CSVQoMSwgICAgICAgICAgMCwgMHgwMSwgIDYpOwogCWh3LT5jcnRjWzEwXSA9IFZzeW5jc3RhcnQ7Ci0JaHctPmNydGNbMTFdID0gQklUKFZzeW5jZW5kLCAgIDAsIDB4MGYsICAwKSB8Ci0JCSAgICAgICBCSVQoMSwgICAgICAgICAgMCwgMHgwMSwgIDcpOworCWh3LT5jcnRjWzExXSA9IEVOQ09ERV9CSVQoVnN5bmNlbmQsICAgMCwgMHgwZiwgIDApIHwKKwkJICAgICAgIEVOQ09ERV9CSVQoMSwgICAgICAgICAgMCwgMHgwMSwgIDcpOwogCWh3LT5jcnRjWzEyXSA9IFZkaXNwZW5kOwogCWh3LT5jcnRjWzE1XSA9IFZibGFua3N0YXJ0OwogCWh3LT5jcnRjWzE2XSA9IFZibGFua2VuZDsKQEAgLTYxNSwxMCArNjEzLDEwIEBACiAJICogND1MSU5FQ09NUDoxMCA1LUlWSURFTyA2PUZJWENOVAogCSAqLwogCWh3LT5jcnRjX29mbCA9Ci0JCUJJVChWdG90YWwsICAgICAxMCwgMHgwMSwgIDApIHwKLQkJQklUKFZkaXNwZW5kLCAgIDEwLCAweDAxLCAgMSkgfAotCQlCSVQoVnN5bmNzdGFydCwgMTAsIDB4MDEsICAyKSB8Ci0JCUJJVChWYmxhbmtzdGFydCwxMCwgMHgwMSwgIDMpIHwKKwkJRU5DT0RFX0JJVChWdG90YWwsIDEwLCAweDAxLCAwKSB8CisJCUVOQ09ERV9CSVQoVmRpc3BlbmQsIDEwLCAweDAxLCAxKSB8CisJCUVOQ09ERV9CSVQoVnN5bmNzdGFydCwgMTAsIDB4MDEsIDIpIHwKKwkJRU5DT0RFX0JJVChWYmxhbmtzdGFydCwgMTAsIDB4MDEsIDMpIHwKIAkJRVhUX0NSVF9WUlRPRkxfTElORUNPTVAxMDsKIAogCS8qIHdvb2R5OiBzZXQgdGhlIGludGVybGFjZWQgYml0Li4uICovCkBAIC03NTAsMTEgKzc0OCwxMSBAQAogCXZhci0+cmVkLm1zYl9yaWdodAk9IDA7CiAJdmFyLT5ncmVlbi5tc2JfcmlnaHQJPSAwOwogCXZhci0+Ymx1ZS5tc2JfcmlnaHQJPSAwOworCXZhci0+dHJhbnNwLm9mZnNldAk9IDA7CisJdmFyLT50cmFuc3AubGVuZ3RoCT0gMDsKIAogCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewogCWNhc2UgODoJLyogUFNFVURPQ09MT1VSLCAyNTYgKi8KLQkJdmFyLT50cmFuc3Aub2Zmc2V0CT0gMDsKLQkJdmFyLT50cmFuc3AubGVuZ3RoCT0gMDsKIAkJdmFyLT5yZWQub2Zmc2V0CQk9IDA7CiAJCXZhci0+cmVkLmxlbmd0aAkJPSA4OwogCQl2YXItPmdyZWVuLm9mZnNldAk9IDA7CkBAIC03NjYsOCArNzY0LDYgQEAKIAljYXNlIDE2Oi8qIERJUkVDVENPTE9VUiwgNjRrIG9yIDMyayAqLwogCQlzd2l0Y2ggKHZhci0+Z3JlZW4ubGVuZ3RoKSB7CiAJCWNhc2UgNjogLyogUkdCNTY1LCA2NGsgKi8KLQkJCXZhci0+dHJhbnNwLm9mZnNldAk9IDA7Ci0JCQl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOwogCQkJdmFyLT5yZWQub2Zmc2V0CQk9IDExOwogCQkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CiAJCQl2YXItPmdyZWVuLm9mZnNldAk9IDU7CkBAIC03NzgsOCArNzc0LDYgQEAKIAogCQlkZWZhdWx0OgogCQljYXNlIDU6IC8qIFJHQjU1NSwgMzJrICovCi0JCQl2YXItPnRyYW5zcC5vZmZzZXQJPSAwOwotCQkJdmFyLT50cmFuc3AubGVuZ3RoCT0gMDsKIAkJCXZhci0+cmVkLm9mZnNldAkJPSAxMDsKIAkJCXZhci0+cmVkLmxlbmd0aAkJPSA1OwogCQkJdmFyLT5ncmVlbi5vZmZzZXQJPSA1OwpAQCAtODAyLDggKzc5Niw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSAyNDovKiBUUlVFQ09MT1VSLCAxNm0gKi8KLQkJdmFyLT50cmFuc3Aub2Zmc2V0CT0gMDsKLQkJdmFyLT50cmFuc3AubGVuZ3RoCT0gMDsKIAkJdmFyLT5yZWQub2Zmc2V0CQk9IDE2OwogCQl2YXItPnJlZC5sZW5ndGgJCT0gODsKIAkJdmFyLT5ncmVlbi5vZmZzZXQJPSA4OwpAQCAtODMwLDcgKzgyMiw3IEBACiAJbWVtID0gdmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbCAqICh2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCk7CiAJaWYgKG1lbSA+IGNmYi0+ZmIuZml4LnNtZW1fbGVuKQogCQl2YXItPnlyZXNfdmlydHVhbCA9IGNmYi0+ZmIuZml4LnNtZW1fbGVuICogOCAvCi0JCQkodmFyLT5iaXRzX3Blcl9waXhlbCAqIHZhci0+eHJlc192aXJ0dWFsKTsKKwkJCQkgICAgKHZhci0+Yml0c19wZXJfcGl4ZWwgKiB2YXItPnhyZXNfdmlydHVhbCk7CiAKIAlpZiAodmFyLT55cmVzID4gdmFyLT55cmVzX3ZpcnR1YWwpCiAJCXZhci0+eXJlcyA9IHZhci0+eXJlc192aXJ0dWFsOwpAQCAtOTIxLDcgKzkxMyw3IEBACiAJCWh3LmZldGNoIDw8PSAxOwogCWh3LmZldGNoICs9IDE7CiAKLQljZmItPmZiLmZpeC5saW5lX2xlbmd0aAk9IHZhci0+eHJlc192aXJ0dWFsICogdmFyLT5iaXRzX3Blcl9waXhlbCAvIDg7CisJY2ZiLT5mYi5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4OwogCiAJLyoKIAkgKiBTYW1lIGhlcmUgLSBpZiB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gbW9kZSBleGNlZWRzIHRoZQpAQCAtOTUyLDcgKzk0NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyoKICAqICAgIFBhbiBvciBXcmFwIHRoZSBEaXNwbGF5CiAgKi8KQEAgLTEwMDIsMTUgKzk5MywxNSBAQAogCXN3aXRjaCAoYmxhbmspIHsKIAljYXNlIEZCX0JMQU5LX1BPV0VSRE9XTjoJLyogcG93ZXJkb3duIC0gYm90aCBzeW5jIGxpbmVzIGRvd24gKi8KIAkJc3luYyA9IEVYVF9TWU5DX0NUTF9WU18wIHwgRVhUX1NZTkNfQ1RMX0hTXzA7Ci0JCWJyZWFrOwkKKwkJYnJlYWs7CiAJY2FzZSBGQl9CTEFOS19IU1lOQ19TVVNQRU5EOgkvKiBoc3luYyBvZmYgKi8KIAkJc3luYyA9IEVYVF9TWU5DX0NUTF9WU19OT1JNQUwgfCBFWFRfU1lOQ19DVExfSFNfMDsKLQkJYnJlYWs7CQorCQlicmVhazsKIAljYXNlIEZCX0JMQU5LX1ZTWU5DX1NVU1BFTkQ6CS8qIHZzeW5jIG9mZiAqLwogCQlzeW5jID0gRVhUX1NZTkNfQ1RMX1ZTXzAgfCBFWFRfU1lOQ19DVExfSFNfTk9STUFMOwogCQlicmVhazsKLQljYXNlIEZCX0JMQU5LX05PUk1BTDoJICAgICAgICAvKiBzb2Z0IGJsYW5rICovCi0JZGVmYXVsdDogLyogdW5ibGFuayAqLworCWNhc2UgRkJfQkxBTktfTk9STUFMOgkJLyogc29mdCBibGFuayAqLworCWRlZmF1bHQ6CQkJLyogdW5ibGFuayAqLwogCQlicmVhazsKIAl9CiAKQEAgLTEwMTgsNyArMTAwOSw4IEBACiAKIAlpZiAoYmxhbmsgPD0gMSkgewogCQkvKiB0dXJuIG9uIHJhbWRhY3MgKi8KLQkJY2ZiLT5yYW1kYWNfcG93ZXJkb3duICY9IH4oUkFNREFDX0RBQ1BXUkROIHwgUkFNREFDX0JZUEFTUyB8IFJBTURBQ19SQU1QV1JETik7CisJCWNmYi0+cmFtZGFjX3Bvd2VyZG93biAmPSB+KFJBTURBQ19EQUNQV1JETiB8IFJBTURBQ19CWVBBU1MgfAorCQkJCQkgICBSQU1EQUNfUkFNUFdSRE4pOwogCQljeWJlcjIwMDBmYl93cml0ZV9yYW1kYWNfY3RybChjZmIpOwogCX0KIApAQCAtMTA0Myw3ICsxMDM1LDggQEAKIAogCWlmIChibGFuayA+PSAyKSB7CiAJCS8qIHR1cm4gb2ZmIHJhbWRhY3MgKi8KLQkJY2ZiLT5yYW1kYWNfcG93ZXJkb3duIHw9IFJBTURBQ19EQUNQV1JETiB8IFJBTURBQ19CWVBBU1MgfCBSQU1EQUNfUkFNUFdSRE47CisJCWNmYi0+cmFtZGFjX3Bvd2VyZG93biB8PSBSQU1EQUNfREFDUFdSRE4gfCBSQU1EQUNfQllQQVNTIHwKKwkJCQkJIFJBTURBQ19SQU1QV1JETjsKIAkJY3liZXIyMDAwZmJfd3JpdGVfcmFtZGFjX2N0cmwoY2ZiKTsKIAl9CiAKQEAgLTEwNjgsNyArMTA2MSw3IEBACiAgKiBvZiB0aGlzIGRyaXZlci4gIEl0IGlzIGhlcmUgc29sZWx5IGF0IHRoZSBtb21lbnQgdG8gc3VwcG9ydCB0aGUgb3RoZXIKICAqIEN5YmVyUHJvIG1vZHVsZXMgZXh0ZXJuYWwgdG8gdGhpcyBkcml2ZXIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2ZiX2luZm8JCSppbnRfY2ZiX2luZm87CitzdGF0aWMgc3RydWN0IGNmYl9pbmZvICppbnRfY2ZiX2luZm87CiAKIC8qCiAgKiBFbmFibGUgYWNjZXNzIHRvIHRoZSBleHRlbmRlZCByZWdpc3RlcnMKQEAgLTEwODUsNiArMTA3OCw3IEBACiAJCWN5YmVyMjAwMF9ncnBodyhFWFRfRlVOQ19DVEwsIG9sZCwgY2ZiKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGN5YmVyMjAwMGZiX2VuYWJsZV9leHRyZWdzKTsKIAogLyoKICAqIERpc2FibGUgYWNjZXNzIHRvIHRoZSBleHRlbmRlZCByZWdpc3RlcnMKQEAgLTExMDQsMTEgKzEwOTgsMTMgQEAKIAllbHNlCiAJCWNmYi0+ZnVuY191c2VfY291bnQgLT0gMTsKIH0KK0VYUE9SVF9TWU1CT0woY3liZXIyMDAwZmJfZGlzYWJsZV9leHRyZWdzKTsKIAogdm9pZCBjeWJlcjIwMDBmYl9nZXRfZmJfdmFyKHN0cnVjdCBjZmJfaW5mbyAqY2ZiLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKIHsKIAltZW1jcHkodmFyLCAmY2ZiLT5mYi52YXIsIHNpemVvZihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8pKTsKIH0KK0VYUE9SVF9TWU1CT0woY3liZXIyMDAwZmJfZ2V0X2ZiX3Zhcik7CiAKIC8qCiAgKiBBdHRhY2ggYSBjYXB0dXJlL3R2IGRyaXZlciB0byB0aGUgY29yZSBDeWJlclgwWDAgZHJpdmVyLgpAQCAtMTEyMiwxMyArMTExOCwxNSBAQAogCQlpbmZvLT5mYl9zaXplCSAgICAgID0gaW50X2NmYl9pbmZvLT5mYi5maXguc21lbV9sZW47CiAJCWluZm8tPmVuYWJsZV9leHRyZWdzICA9IGN5YmVyMjAwMGZiX2VuYWJsZV9leHRyZWdzOwogCQlpbmZvLT5kaXNhYmxlX2V4dHJlZ3MgPSBjeWJlcjIwMDBmYl9kaXNhYmxlX2V4dHJlZ3M7Ci0JCWluZm8tPmluZm8gICAgICAgICAgICA9IGludF9jZmJfaW5mbzsKKwkJaW5mby0+aW5mbwkgICAgICA9IGludF9jZmJfaW5mbzsKIAotCQlzdHJsY3B5KGluZm8tPmRldl9uYW1lLCBpbnRfY2ZiX2luZm8tPmZiLmZpeC5pZCwgc2l6ZW9mKGluZm8tPmRldl9uYW1lKSk7CisJCXN0cmxjcHkoaW5mby0+ZGV2X25hbWUsIGludF9jZmJfaW5mby0+ZmIuZml4LmlkLAorCQkJc2l6ZW9mKGluZm8tPmRldl9uYW1lKSk7CiAJfQogCiAJcmV0dXJuIGludF9jZmJfaW5mbyAhPSBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChjeWJlcjIwMDBmYl9hdHRhY2gpOwogCiAvKgogICogRGV0YWNoIGEgY2FwdHVyZS90diBkcml2ZXIgZnJvbSB0aGUgY29yZSBDeWJlclgwWDAgZHJpdmVyLgpAQCAtMTEzNiwxMiArMTEzNCw3IEBACiB2b2lkIGN5YmVyMjAwMGZiX2RldGFjaChpbnQgaWR4KQogewogfQotCi1FWFBPUlRfU1lNQk9MKGN5YmVyMjAwMGZiX2F0dGFjaCk7CiBFWFBPUlRfU1lNQk9MKGN5YmVyMjAwMGZiX2RldGFjaCk7Ci1FWFBPUlRfU1lNQk9MKGN5YmVyMjAwMGZiX2VuYWJsZV9leHRyZWdzKTsKLUVYUE9SVF9TWU1CT0woY3liZXIyMDAwZmJfZGlzYWJsZV9leHRyZWdzKTsKLUVYUE9SVF9TWU1CT0woY3liZXIyMDAwZmJfZ2V0X2ZiX3Zhcik7CiAKIC8qCiAgKiBUaGVzZSBwYXJhbWV0ZXJzIGdpdmUKQEAgLTEyMDUsNyArMTE5OCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlnc19yZWdzKTsgaSArPSAyKQotCQljeWJlcjIwMDBfZ3JwaHcoaWdzX3JlZ3NbaV0sIGlnc19yZWdzW2krMV0sIGNmYik7CisJCWN5YmVyMjAwMF9ncnBodyhpZ3NfcmVnc1tpXSwgaWdzX3JlZ3NbaSArIDFdLCBjZmIpOwogCiAJaWYgKGNmYi0+aWQgPT0gSURfQ1lCRVJQUk9fNTAwMCkgewogCQl1bnNpZ25lZCBjaGFyIHZhbDsKQEAgLTEyMTUsOCArMTIwOCw4IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGNmYl9pbmZvICogX19kZXZpbml0Ci1jeWJlcnByb19hbGxvY19mYl9pbmZvKHVuc2lnbmVkIGludCBpZCwgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY2ZiX2luZm8gX19kZXZpbml0ICpjeWJlcnByb19hbGxvY19mYl9pbmZvKHVuc2lnbmVkIGludCBpZCwKKwkJCQkJCQkgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgY2ZiX2luZm8gKmNmYjsKIApAQCAtMTIyOCw5ICsxMjIxLDkgQEAKIAljZmItPmlkCQkJPSBpZDsKIAogCWlmIChpZCA9PSBJRF9DWUJFUlBST181MDAwKQotCQljZmItPnJlZl9wcwk9IDQwNjkwOyAvLyAyNC41NzYgTUh6CisJCWNmYi0+cmVmX3BzCT0gNDA2OTA7IC8qIDI0LjU3NiBNSHogKi8KIAllbHNlCi0JCWNmYi0+cmVmX3BzCT0gNjk4NDI7IC8vIDE0LjMxODE4IE1IeiAoNjk4NDE/KQorCQljZmItPnJlZl9wcwk9IDY5ODQyOyAvKiAxNC4zMTgxOCBNSHogKDY5ODQxPykgKi8KIAogCWNmYi0+ZGl2aXNvcnNbMF0JPSAxOwogCWNmYi0+ZGl2aXNvcnNbMV0JPSAyOwpAQCAtMTI4Miw4ICsxMjc1LDcgQEAKIAlyZXR1cm4gY2ZiOwogfQogCi1zdGF0aWMgdm9pZAotY3liZXJwcm9fZnJlZV9mYl9pbmZvKHN0cnVjdCBjZmJfaW5mbyAqY2ZiKQorc3RhdGljIHZvaWQgY3liZXJwcm9fZnJlZV9mYl9pbmZvKHN0cnVjdCBjZmJfaW5mbyAqY2ZiKQogewogCWlmIChjZmIpIHsKIAkJLyoKQEAgLTEzMDAsOCArMTI5Miw3IEBACiAgKiAgdmlkZW89Y3liZXIyMDAwOmZvbnQ6Zm9udG5hbWUKICAqLwogI2lmbmRlZiBNT0RVTEUKLXN0YXRpYyBpbnQKLWN5YmVyMjAwMGZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCitzdGF0aWMgaW50IGN5YmVyMjAwMGZiX3NldHVwKGNoYXIgKm9wdGlvbnMpCiB7CiAJY2hhciAqb3B0OwogCkBAIC0xMzE1LDcgKzEzMDYsOCBAQAogCQlpZiAoc3RybmNtcChvcHQsICJmb250OiIsIDUpID09IDApIHsKIAkJCXN0YXRpYyBjaGFyIGRlZmF1bHRfZm9udF9zdG9yYWdlWzQwXTsKIAotCQkJc3RybGNweShkZWZhdWx0X2ZvbnRfc3RvcmFnZSwgb3B0ICsgNSwgc2l6ZW9mKGRlZmF1bHRfZm9udF9zdG9yYWdlKSk7CisJCQlzdHJsY3B5KGRlZmF1bHRfZm9udF9zdG9yYWdlLCBvcHQgKyA1LAorCQkJCXNpemVvZihkZWZhdWx0X2ZvbnRfc3RvcmFnZSkpOwogCQkJZGVmYXVsdF9mb250ID0gZGVmYXVsdF9mb250X3N0b3JhZ2U7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMTM1NCwxMCArMTM0NiwxOCBAQAogCSAqIERldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5LgogCSAqLwogCXN3aXRjaCAoY2ZiLT5tZW1fY3RsMiAmIE1FTV9DVEwyX1NJWkVfTUFTSykgewotCWNhc2UgTUVNX0NUTDJfU0laRV80TUI6CXNtZW1fc2l6ZSA9IDB4MDA0MDAwMDA7IGJyZWFrOwotCWNhc2UgTUVNX0NUTDJfU0laRV8yTUI6CXNtZW1fc2l6ZSA9IDB4MDAyMDAwMDA7IGJyZWFrOwotCWNhc2UgTUVNX0NUTDJfU0laRV8xTUI6IHNtZW1fc2l6ZSA9IDB4MDAxMDAwMDA7IGJyZWFrOwotCWRlZmF1bHQ6CQlzbWVtX3NpemUgPSAweDAwMTAwMDAwOyBicmVhazsKKwljYXNlIE1FTV9DVEwyX1NJWkVfNE1COgorCQlzbWVtX3NpemUgPSAweDAwNDAwMDAwOworCQlicmVhazsKKwljYXNlIE1FTV9DVEwyX1NJWkVfMk1COgorCQlzbWVtX3NpemUgPSAweDAwMjAwMDAwOworCQlicmVhazsKKwljYXNlIE1FTV9DVEwyX1NJWkVfMU1COgorCQlzbWVtX3NpemUgPSAweDAwMTAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzbWVtX3NpemUgPSAweDAwMTAwMDAwOworCQlicmVhazsKIAl9CiAKIAljZmItPmZiLmZpeC5zbWVtX2xlbiAgID0gc21lbV9zaXplOwpAQCAtMTM2Niw4ICsxMzY2LDggQEAKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKCFmYl9maW5kX21vZGUoJmNmYi0+ZmIudmFyLCAmY2ZiLT5mYiwgTlVMTCwgTlVMTCwgMCwKLQkgICAgCQkgICZjeWJlcjIwMDBmYl9kZWZhdWx0X21vZGUsIDgpKSB7Ci0JCXByaW50aygiJXM6IG5vIHZhbGlkIG1vZGUgZm91bmRcbiIsIGNmYi0+ZmIuZml4LmlkKTsKKwkJCSAgJmN5YmVyMjAwMGZiX2RlZmF1bHRfbW9kZSwgOCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gdmFsaWQgbW9kZSBmb3VuZFxuIiwgY2ZiLT5mYi5maXguaWQpOwogCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTEzNzcsNyArMTM3Nyw3IEBACiAJaWYgKGNmYi0+ZmIudmFyLnlyZXNfdmlydHVhbCA8IGNmYi0+ZmIudmFyLnlyZXMpCiAJCWNmYi0+ZmIudmFyLnlyZXNfdmlydHVhbCA9IGNmYi0+ZmIudmFyLnlyZXM7CiAKLS8vCWZiX3NldF92YXIoJmNmYi0+ZmIudmFyLCAtMSwgJmNmYi0+ZmIpOworLyoJZmJfc2V0X3ZhcigmY2ZiLT5mYi52YXIsIC0xLCAmY2ZiLT5mYik7ICovCiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgaHN5bmMgYW5kIHZzeW5jIGZyZXF1ZW5jaWVzLiAgTm90ZSB0aGF0CkBAIC0xNDI1LDIwICsxNDI1LDIwIEBACiAKICNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgogCi1zdGF0aWMgaW50IF9fZGV2aW5pdAotY3liZXJwcm9fdmxfcHJvYmUodm9pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IGN5YmVycHJvX3ZsX3Byb2JlKHZvaWQpCiB7CiAJc3RydWN0IGNmYl9pbmZvICpjZmI7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihGQl9TVEFSVCxGQl9TSVpFLCJDeWJlclBybzIwMTAiKSkgcmV0dXJuIGVycjsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihGQl9TVEFSVCwgRkJfU0laRSwgIkN5YmVyUHJvMjAxMCIpKQorCQlyZXR1cm4gZXJyOwogCiAJY2ZiID0gY3liZXJwcm9fYWxsb2NfZmJfaW5mbyhJRF9DWUJFUlBST18yMDEwLCAiQ3liZXJQcm8yMDEwIik7CiAJaWYgKCFjZmIpCiAJCWdvdG8gZmFpbGVkX3JlbGVhc2U7CiAKIAljZmItPmRldiA9IE5VTEw7Ci0JY2ZiLT5yZWdpb24gPSBpb3JlbWFwKEZCX1NUQVJULEZCX1NJWkUpOworCWNmYi0+cmVnaW9uID0gaW9yZW1hcChGQl9TVEFSVCwgRkJfU0laRSk7CiAJaWYgKCFjZmItPnJlZ2lvbikKIAkJZ290byBmYWlsZWRfaW9yZW1hcDsKIApAQCAtMTQ3NSw3ICsxNDc1LDcgQEAKIGZhaWxlZF9pb3JlbWFwOgogCWN5YmVycHJvX2ZyZWVfZmJfaW5mbyhjZmIpOwogZmFpbGVkX3JlbGVhc2U6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKEZCX1NUQVJULEZCX1NJWkUpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihGQl9TVEFSVCwgRkJfU0laRSk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMTUzOCw3ICsxNTM4LDggQEAKIAkgKiBBbGxvdyB0aGUgQ3liZXJQcm8gdG8gYWNjZXB0IFBDSSBidXJzdCBhY2Nlc3NlcwogCSAqLwogCWlmIChjZmItPmlkID09IElEX0NZQkVSUFJPXzIwMTApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5PVCBlbmFibGluZyBQQ0kgYnVyc3RzXG4iLCBjZmItPmZiLmZpeC5pZCk7CisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBOT1QgZW5hYmxpbmcgUENJIGJ1cnN0c1xuIiwKKwkJICAgICAgIGNmYi0+ZmIuZml4LmlkKTsKIAl9IGVsc2UgewogCQl2YWwgPSBjeWJlcjIwMDBfZ3JwaHIoRVhUX0JVU19DVEwsIGNmYik7CiAJCWlmICghKHZhbCAmIEVYVF9CVVNfQ1RMX1BDSUJVUlNUX1dSSVRFKSkgewpAQCAtMTY4OCw5ICsxNjg5LDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeWJlcnByb19wY2lfdGFibGVbXSA9IHsKLS8vCU5vdCB5ZXQKLS8vCXsgUENJX1ZFTkRPUl9JRF9JTlRFUkcsIFBDSV9ERVZJQ0VfSURfSU5URVJHXzE2ODIsCi0vLwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSURfSUdBXzE2ODIgfSwKKy8qCU5vdCB5ZXQKKyAqCXsgUENJX1ZFTkRPUl9JRF9JTlRFUkcsIFBDSV9ERVZJQ0VfSURfSU5URVJHXzE2ODIsCisgKgkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgSURfSUdBXzE2ODIgfSwKKyAqLwogCXsgUENJX1ZFTkRPUl9JRF9JTlRFUkcsIFBDSV9ERVZJQ0VfSURfSU5URVJHXzIwMDAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIElEX0NZQkVSUFJPXzIwMDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URVJHLCBQQ0lfREVWSUNFX0lEX0lOVEVSR18yMDEwLApAQCAtMTcwMCw3ICsxNzAyLDcgQEAKIAl7IDAsIH0KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLGN5YmVycHJvX3BjaV90YWJsZSk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3liZXJwcm9fcGNpX3RhYmxlKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGN5YmVycHJvX2RyaXZlciA9IHsKIAkubmFtZQkJPSAiQ3liZXJQcm8iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5jIGIvZHJpdmVycy92aWRlby9nZW9kZS92aWRlb19neC5jCmluZGV4IDdmM2YxOGQuLmZlYmYwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZ2VvZGUvdmlkZW9fZ3guYworKysgYi9kcml2ZXJzL3ZpZGVvL2dlb2RlL3ZpZGVvX2d4LmMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCWludCB0aW1lb3V0ID0gMTAwMDsKIAogCS8qIFJldi4gMSBHZW9kZSBHWHMgdXNlIGEgMTQgTUh6IHJlZmVyZW5jZSBjbG9jayBpbnN0ZWFkIG9mIDQ4IE1Iei4gKi8KLQlpZiAoY3B1X2RhdGEtPng4Nl9tYXNrID09IDEpIHsKKwlpZiAoY3B1X2RhdGEoMCkueDg2X21hc2sgPT0gMSkgewogCQlwbGxfdGFibGUgPSBneF9wbGxfdGFibGVfMTRNSHo7CiAJCXBsbF90YWJsZV9sZW4gPSBBUlJBWV9TSVpFKGd4X3BsbF90YWJsZV8xNE1Ieik7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZ3h0NDUwMC5jIGIvZHJpdmVycy92aWRlby9neHQ0NTAwLmMKaW5kZXggMjNhNmJjYy4uZTkyMzM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9neHQ0NTAwLmMKKysrIGIvZHJpdmVycy92aWRlby9neHQ0NTAwLmMKQEAgLTYzNiw3ICs2MzYsNyBAQAogCiAJaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgZ3h0NDUwMF9wYXIpLCAmcGRldi0+ZGV2KTsKIAlpZiAoIWluZm8pIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZ3h0NDUwMDogY2Fubm90IGFsbG9jIEZCIGluZm8gcmVjb3JkIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImd4dDQ1MDA6IGNhbm5vdCBhbGxvYyBGQiBpbmZvIHJlY29yZFxuIik7CiAJCWdvdG8gZXJyX2ZyZWVfZmI7CiAJfQogCXBhciA9IGluZm8tPnBhcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCmluZGV4IGU4ZTM4ZWQuLjQ4MWQ1OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwpAQCAtNCw3ICs0LDcgQEAKICAqIExpbnV4IGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgSW50ZWwoUikgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS8KICAqIDk0NUcvOTQ1R00gaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwcy4KICAqCi0gKiBDb3B5cmlnaHQgqSAyMDAyLCAyMDAzIERhdmlkIERhd2VzIDxkYXdlc0B4ZnJlZTg2Lm9yZz4KKyAqIENvcHlyaWdodCDCqSAyMDAyLCAyMDAzIERhdmlkIERhd2VzIDxkYXdlc0B4ZnJlZTg2Lm9yZz4KICAqICAgICAgICAgICAgICAgICAgIDIwMDQgU3lsdmFpbiBNZXllcgogICogICAgICAgICAgICAgICAgICAgMjAwNiBEYXZpZCBBaXJsaWUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKaW5kZXggMmEwZTMyMC4uNWY2ZmI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBMaW51eCBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIEludGVsKFIpIDg2NUcgaW50ZWdyYXRlZCBncmFwaGljcyBjaGlwcy4KICAqCi0gKiBDb3B5cmlnaHQgqSAyMDAyLCAyMDAzIERhdmlkIERhd2VzIDxkYXdlc0B4ZnJlZTg2Lm9yZz4KKyAqIENvcHlyaWdodCDCqSAyMDAyLCAyMDAzIERhdmlkIERhd2VzIDxkYXdlc0B4ZnJlZTg2Lm9yZz4KICAqICAgICAgICAgICAgICAgICAgIDIwMDQgU3lsdmFpbiBNZXllcgogICoKICAqIFRoaXMgZHJpdmVyIGNvbnNpc3RzIG9mIHR3byBwYXJ0cy4gIFRoZSBmaXJzdCBwYXJ0IChpbnRlbGZiZHJ2LmMpIHByb3ZpZGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jIGIvZHJpdmVycy92aWRlby9sb2dvL2xvZ28uYwppbmRleCBhOTI4M2JhLi5mYzcyNjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2xvZ28vbG9nby5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbG9nby9sb2dvLmMKQEAgLTc4LDEwICs3OCw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTE9HT19ERUNfQ0xVVDIyNAogCQkvKiBERUMgTGludXggbG9nbyBvbiBNSVBTL01JUFM2NCBvciBBTFBIQSAqLwotI2lmbmRlZiBDT05GSUdfQUxQSEEKLQkJaWYgKG1pcHNfbWFjaGdyb3VwID09IE1BQ0hfR1JPVVBfREVDKQotI2VuZGlmCi0JCQlsb2dvID0gJmxvZ29fZGVjX2NsdXQyMjQ7CisJCWxvZ28gPSAmbG9nb19kZWNfY2x1dDIyNDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19MT0dPX01BQ19DTFVUMjI0CiAJCS8qIE1hY2ludG9zaCBMaW51eCBsb2dvIG9uIG02OGsgKi8KQEAgLTk0LDEwICs5MSw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTE9HT19TR0lfQ0xVVDIyNAogCQkvKiBTR0kgTGludXggbG9nbyBvbiBNSVBTL01JUFM2NCBhbmQgVklTV1MgKi8KLSNpZm5kZWYgQ09ORklHX1g4Nl9WSVNXUwotCQlpZiAobWlwc19tYWNoZ3JvdXAgPT0gTUFDSF9HUk9VUF9TR0kpCi0jZW5kaWYKLQkJCWxvZ28gPSAmbG9nb19zZ2lfY2x1dDIyNDsKKwkJbG9nbyA9ICZsb2dvX3NnaV9jbHV0MjI0OwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0xPR09fU1VOX0NMVVQyMjQKIAkJLyogU3VuIExpbnV4IGxvZ28gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCmluZGV4IDQyZjVkNzYuLjhkODFlZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKKysrIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwpAQCAtNTEwLDcgKzUxMCw5IEBACiAJZGVmYXVsdF9icHAgPSA4OwogCiAgICAgLyogRGlkIHRoZSB1c2VyIHNwZWNpZnkgYSB2aWRlbyBtb2RlPyAqLwotICAgIGlmIChtb2RlX29wdGlvbiB8fCAobW9kZV9vcHRpb24gPSBmYl9tb2RlX29wdGlvbikpIHsKKyAgICBpZiAoIW1vZGVfb3B0aW9uKQorCW1vZGVfb3B0aW9uID0gZmJfbW9kZV9vcHRpb247CisgICAgaWYgKG1vZGVfb3B0aW9uKSB7CiAJY29uc3QgY2hhciAqbmFtZSA9IG1vZGVfb3B0aW9uOwogCXVuc2lnbmVkIGludCBuYW1lbGVuID0gc3RybGVuKG5hbWUpOwogCWludCByZXNfc3BlY2lmaWVkID0gMCwgYnBwX3NwZWNpZmllZCA9IDAsIHJlZnJlc2hfc3BlY2lmaWVkID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9LY29uZmlnIGIvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcKaW5kZXggN2Y0ZDI1Yi4uZjRmY2YxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL0tjb25maWcKQEAgLTgsNyArOCw3IEBACiAgICAgICAgICAgRnJhbWUgYnVmZmVyIGRyaXZlciBmb3IgT01BUCBiYXNlZCBib2FyZHMuCiAKIGNvbmZpZyBGQl9PTUFQX0JPT1RMT0FERVJfSU5JVAotCWJvb2wgIkNoZWNrIGJvb3Rsb2FkZXIgaW5pdGlhbGl6YWlvbiIKKwlib29sICJDaGVjayBib290bG9hZGVyIGluaXRpYWxpemF0aW9uIgogCWRlcGVuZHMgb24gRkJfT01BUAogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGNoZWNraW5nIGlmIHRoZSBib290bG9hZGVyIGhhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2JsaXp6YXJkLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwppbmRleCBlNjgyOTQwLi40ZDhhZDljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvYmxpenphcmQuYwpAQCAtMjI1LDcgKzIyNSw3IEBACiAJd2hpbGUgKCEoYmxpenphcmRfcmVhZF9yZWcoQkxJWlpBUkRfTUVNX0JBTkswX1NUQVRVUykgJiAweDAxKSkgewogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0bW8pKSB7CiAJCQlkZXZfZXJyKGJsaXp6YXJkLmZiZGV2LT5kZXYsCi0JCQkJCSJzMWQxMzc0eDogU0RSQU0gbm90IHJlYWR5Iik7CisJCQkJCSJzMWQxMzc0eDogU0RSQU0gbm90IHJlYWR5XG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1zbGVlcCgxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9kaXNwYy5jIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKaW5kZXggZjRjMjM0My4uYWIzMmNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2Rpc3BjLmMKQEAgLTg4MCwxOSArODgwLDE5IEBACiBzdGF0aWMgaW50IGdldF9kc3NfY2xvY2tzKHZvaWQpCiB7CiAJaWYgKElTX0VSUigoZGlzcGMuZHNzX2ljayA9IGNsa19nZXQoZGlzcGMuZmJkZXYtPmRldiwgImRzc19pY2siKSkpKSB7Ci0JCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0IGdldCBkc3NfaWNrIik7CisJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0IGdldCBkc3NfaWNrXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIoZGlzcGMuZHNzX2ljayk7CiAJfQogCiAJaWYgKElTX0VSUigoZGlzcGMuZHNzMV9mY2sgPSBjbGtfZ2V0KGRpc3BjLmZiZGV2LT5kZXYsICJkc3MxX2ZjayIpKSkpIHsKLQkJZGV2X2VycihkaXNwYy5mYmRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGRzczFfZmNrIik7CisJCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0IGdldCBkc3MxX2Zja1xuIik7CiAJCWNsa19wdXQoZGlzcGMuZHNzX2ljayk7CiAJCXJldHVybiBQVFJfRVJSKGRpc3BjLmRzczFfZmNrKTsKIAl9CiAKIAlpZiAoSVNfRVJSKChkaXNwYy5kc3NfNTRtX2ZjayA9CiAJCQkJY2xrX2dldChkaXNwYy5mYmRldi0+ZGV2LCAiZHNzXzU0bV9mY2siKSkpKSB7Ci0JCWRldl9lcnIoZGlzcGMuZmJkZXYtPmRldiwgImNhbid0IGdldCBkc3NfNTRtX2ZjayIpOworCQlkZXZfZXJyKGRpc3BjLmZiZGV2LT5kZXYsICJjYW4ndCBnZXQgZHNzXzU0bV9mY2tcbiIpOwogCQljbGtfcHV0KGRpc3BjLmRzc19pY2spOwogCQljbGtfcHV0KGRpc3BjLmRzczFfZmNrKTsKIAkJcmV0dXJuIFBUUl9FUlIoZGlzcGMuZHNzXzU0bV9mY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jIGIvZHJpdmVycy92aWRlby9vbWFwL2h3YTc0Mi5jCmluZGV4IGRjNDhlMDIuLjFlNjQyYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9od2E3NDIuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvaHdhNzQyLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCWlmICh1bmxpa2VseSh3aW4tPmZvcm1hdCAmCiAJICAgIH4oMHgwMyB8IE9NQVBGQl9GT1JNQVRfRkxBR19ET1VCTEUgfAogCSAgICBPTUFQRkJfRk9STUFUX0ZMQUdfVEVBUlNZTkMgfCBPTUFQRkJfRk9STUFUX0ZMQUdfRk9SQ0VfVlNZTkMpKSkgewotCQlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LCAiaW52YWxpZCB3aW5kb3cgZmxhZyIpOworCQlkZXZfZGJnKGh3YTc0Mi5mYmRldi0+ZGV2LCAiaW52YWxpZCB3aW5kb3cgZmxhZ1xuIik7CiAJCXIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwL3JmYmkuYwppbmRleCAyYjQyNjk4Li43ODljZmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvcmZiaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcC9yZmJpLmMKQEAgLTg0LDEyICs4NCwxMiBAQAogc3RhdGljIGludCByZmJpX2dldF9jbG9ja3Modm9pZCkKIHsKIAlpZiAoSVNfRVJSKChyZmJpLmRzc19pY2sgPSBjbGtfZ2V0KHJmYmkuZmJkZXYtPmRldiwgImRzc19pY2siKSkpKSB7Ci0JCWRldl9lcnIocmZiaS5mYmRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGRzc19pY2siKTsKKwkJZGV2X2VycihyZmJpLmZiZGV2LT5kZXYsICJjYW4ndCBnZXQgZHNzX2lja1xuIik7CiAJCXJldHVybiBQVFJfRVJSKHJmYmkuZHNzX2ljayk7CiAJfQogCiAJaWYgKElTX0VSUigocmZiaS5kc3MxX2ZjayA9IGNsa19nZXQocmZiaS5mYmRldi0+ZGV2LCAiZHNzMV9mY2siKSkpKSB7Ci0JCWRldl9lcnIocmZiaS5mYmRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGRzczFfZmNrIik7CisJCWRldl9lcnIocmZiaS5mYmRldi0+ZGV2LCAiY2FuJ3QgZ2V0IGRzczFfZmNrXG4iKTsKIAkJY2xrX3B1dChyZmJpLmRzc19pY2spOwogCQlyZXR1cm4gUFRSX0VSUihyZmJpLmRzczFfZmNrKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5oIGIvZHJpdmVycy92aWRlby9wbng0MDA4L3NkdW0uaAppbmRleCBlOGM1ZGNkLi4xODljM2Q2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3BueDQwMDgvc2R1bS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vcG54NDAwOC9zZHVtLmgKQEAgLTc3LDkgKzc3LDYgQEAKICNkZWZpbmUgQ09ORl9ESVJUWURFVEVDVElPTl9PRkYJKDB4NjAwKQogI2RlZmluZSBDT05GX0RJUlRZREVURUNUSU9OX09OCSgweDYwMSkKIAotLyogU2V0IHRoZSBjb3JyZXNwb25kaW5nIGJpdC4gKi8KLSNkZWZpbmUgQklUKG4pICgweDFVIDw8IChuKSkKLQogc3RydWN0IGR1bWNoYW5uZWxfdWYgewogCWludCBjaGFubmVsbnI7CiAJdTMyICpkaXJ0eTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IGFlMDhkNDUuLjU4NTdjY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtNTYsNyArNTYsNyBAQAogICoJLSBBZGQgc3VwcG9ydCBmb3IgZGlmZmVyZW50IGRldmljZXMKICAqCS0gQmFja2xpZ2h0IHN1cHBvcnQKICAqCi0gKiAyMDA0LTA5LTA1OiBIZXJiZXJ0IFD2dHpsIDxoZXJiZXJ0QDEzdGhmbG9vci5hdD4KKyAqIDIwMDQtMDktMDU6IEhlcmJlcnQgUMO2dHpsIDxoZXJiZXJ0QDEzdGhmbG9vci5hdD4KICAqCS0gYWRkZWQgY2xvY2sgKGRlLSlhbGxvY2F0aW9uIGNvZGUKICAqCS0gYWRkZWQgZml4ZW0gZmJtZW0gb3B0aW9uCiAgKgpAQCAtNjQsNyArNjQsNyBAQAogICoJLSBjb2RlIGNsZWFudXAKICAqCS0gYWRkZWQgYSBmb3Jnb3R0ZW4gcmV0dXJuIGluIGgxOTQwZmJfaW5pdAogICoKLSAqIDIwMDQtMDctMTk6IEhlcmJlcnQgUPZ0emwgPGhlcmJlcnRAMTN0aGZsb29yLmF0PgorICogMjAwNC0wNy0xOTogSGVyYmVydCBQw7Z0emwgPGhlcmJlcnRAMTN0aGZsb29yLmF0PgogICoJLSBjb2RlIGNsZWFudXAgYW5kIGV4dGVuZGVkIGRlYnVnZ2luZwogICoKICAqIDIwMDQtMDctMTU6IEFybmF1ZCBQYXRhcmQgPGFybmF1ZC5wYXRhcmRAcnRwLW5ldC5vcmc+CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi92ZXJtaWxpb24uYyBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5jCmluZGV4IGZmOWU4MDUuLmMzMWY1NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5jCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICoKICAqIEF1dGhvcnM6Ci0gKiAgIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+Ci0gKiAgIE1pY2hlbCBE5G56ZXIgPG1pY2hlbC1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKiAgIFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICogICBNaWNoZWwgRMOkbnplciA8bWljaGVsLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KICAqICAgQWxhbiBIb3VyaWhhbmUgPGFsYW5oLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Zlcm1pbGlvbi92ZXJtaWxpb24uaCBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5oCmluZGV4IDFmYzY2OTUuLmM0YWJhNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmVybWlsaW9uL3Zlcm1pbGlvbi5oCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICoKICAqIEF1dGhvcnM6Ci0gKiAgIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKiAgIFRob21hcyBIZWxsc3Ryw7ZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgogICovCiAKICNpZm5kZWYgX1ZFUk1JTElPTl9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMXdtLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYwppbmRleCA0YjY5NjY0Li41NzQ3OTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvZHMxd20uYwpAQCAtMzA3LDcgKzMwNyw3IEBACiAJCXJvbV9pZCB8PSAodW5zaWduZWQgbG9uZyBsb25nKSByIDw8IChpICogNCk7CiAKIAl9Ci0JZGV2X2RiZygmZHMxd21fZGF0YS0+cGRldi0+ZGV2LCAiZm91bmQgMHglMDhsbFgiLCByb21faWQpOworCWRldl9kYmcoJmRzMXdtX2RhdGEtPnBkZXYtPmRldiwgImZvdW5kIDB4JTA4bGxYXG4iLCByb21faWQpOwogCiAJZHMxd21fd3JpdGVfcmVnaXN0ZXIoZHMxd21fZGF0YSwgRFMxV01fQ01ELCB+RFMxV01fQ01EX1NSQSk7CiAJZHMxd21fcmVzZXQoZHMxd21fZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL0tjb25maWcKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hY3F1aXJld2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9hY3F1aXJld2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvYWR2YW50ZWNod2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9hbGltMTUzNV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9hbGltMTUzNV93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYwppbmRleCAzOGJkMzczLi5hNjg0YjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKQEAgLTksNiArOSw3IEBACiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTksNyArMjAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9hdDkxX3N0Lmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9iZmluX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYmZpbl93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYm9va2Vfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Jvb2tlX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvYm9va2Vfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvYm9va2Vfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9jcHU1d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2NwdTV3ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2NwdTV3ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9jcHU1d2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9kYXZpbmNpX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9lcDkzeHhfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9lcDkzeHhfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k2MzAwZXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2k2MzAwZXNiLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwppbmRleCBjNTk4MjUwLi5mMjM2OTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaTYzMDBlc2IuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKQEAgLTIsNyArMiw3IEBACiAgKglpNjMwMGVzYjoJV2F0Y2hkb2cgdGltZXIgZHJpdmVyIGZvciBJbnRlbCA2MzAwRVNCIGNoaXBzZXQKICAqCiAgKgkoYykgQ29weXJpZ2h0IDIwMDQgR29vZ2xlIEluYy4KLSAqCShjKSBDb3B5cmlnaHQgMjAwNSBEYXZpZCBI5HJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CisgKgkoYykgQ29weXJpZ2h0IDIwMDUgRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTksNyArMTksNyBAQAogICoJSW5pdGlhbCB2ZXJzaW9uIDAuMDEKICAqICAyMDA0WVlaWiBSb3NzIEJpcm8KICAqICAJVmVyc2lvbiAwLjAyCi0gKiAgMjAwNTAyMTAgRGF2aWQgSORyZGVtYW4gPGRhdmlkQDJnZW4uY29tPgorICogIDIwMDUwMjEwIERhdmlkIEjDpHJkZW1hbiA8ZGF2aWRAMmdlbi5jb20+CiAgKiAgICAgIFBvcnRlZCBkcml2ZXIgdG8ga2VybmVsIDIuNgogICovCiAKQEAgLTUyMSw3ICs1MjEsNyBAQAogbW9kdWxlX2luaXQod2F0Y2hkb2dfaW5pdCk7CiBtb2R1bGVfZXhpdCh3YXRjaGRvZ19jbGVhbnVwKTsKIAotTU9EVUxFX0FVVEhPUigiUm9zcyBCaXJvIGFuZCBEYXZpZCBI5HJkZW1hbiIpOworTU9EVUxFX0FVVEhPUigiUm9zcyBCaXJvIGFuZCBEYXZpZCBIw6RyZGVtYW4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiV2F0Y2hkb2cgZHJpdmVyIGZvciBJbnRlbCA2MzAwRVNCIGNoaXBzZXRzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaVRDT192ZW5kb3Jfc3VwcG9ydC5jIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9pVENPX3ZlbmRvcl9zdXBwb3J0LmMKaW5kZXggNDE1MDgzOS4uY2FmYzQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fdmVuZG9yX3N1cHBvcnQuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAgKgkgIEZvciBQNERQeDoKICAqCSAgQklPUyBzZXR1cCAtPiBBZHZhbmNlZCAtPiBJL08gRGV2aWNlIENvbmZpZ3VyYXRpb24gLT4gV2F0Y2ggRG9nCiAgKgkgVGhpcyBzZXR0aW5nIGVuYWJsZXMgb3IgZGlzYWJsZXMgV2F0Y2hkb2cgZnVuY3Rpb24uIFdoZW4gZW5hYmxlZCwgdGhlCi0gKgkgZGVmYXVsdCB3YXRjaGRvZyB0aW1lciBpcyBzZXQgdG8gYmUgNSBtaW51dGVzIChhYm91dCA04oCZMzXigJ0pLiBJdCBpcworICoJIGRlZmF1bHQgd2F0Y2hkb2cgdGltZXIgaXMgc2V0IHRvIGJlIDUgbWludXRlcyAoYWJvdXQgNG0zNXMpLiBJdCBpcwogICoJIGVub3VnaCB0byBsb2FkIGFuZCBydW4gdGhlIE9TLiBUaGUgYXBwbGljYXRpb24gKHNlcnZpY2Ugb3IgZHJpdmVyKSBoYXMKICAqCSB0byB0YWtlIG92ZXIgdGhlIGNvbnRyb2wgb25jZSBPUyBpcyBydW5uaW5nIHVwIGFuZCBiZWZvcmUgd2F0Y2hkb2cKICAqCSBleHBpcmVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2lUQ09fd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9pVENPX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pYjcwMHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWI3MDB3ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2libWFzci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaWJtYXNyLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvaWJtYXNyLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pbmR5ZG9nLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2luZHlkb2cuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2luZHlkb2cuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9pbmR5ZG9nLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9pb3Bfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2lvcF93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2lvcF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9pb3Bfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9peHAyMDAwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9peHAyMDAwX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaXhwMjAwMF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9peHAyMDAwX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9peHA0eHhfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9peHA0eHhfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cva3M4Njk1X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL2tzODY5NV93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMKaW5kZXggNzE1MGZiOS4uZTNhMjljMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL2tzODY5NV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwpAQCAtOCw2ICs4LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTgsNyArMTksNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXRpbWVyLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWFjaHp3ZC5jIGIvZHJpdmVycy93YXRjaGRvZy9tYWNoendkLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9tYWNoendkLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbWFjaHp3ZC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbWl4Y29td2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbWl4Y29td2QuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL21peGNvbXdkLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbWl4Y29td2QuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM1MjAwX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL21wYzUyMDBfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4M3h4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGM4M3h4X3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjODN4eF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9tcGM4M3h4X3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjOHh4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGM4eHhfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9tcGM4eHhfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4X3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9tcGNvcmVfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXR4LTFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9tdjY0eDYwX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDk5JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9vbWFwX3dkdC5jCmluZGV4IDcxOWIwNjYuLjYzNWNhNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9vbWFwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuYwpAQCAtMzksMTEgKzM5LDExIEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuaCBiL2RyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL29tYXBfd2R0LmgKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvb21hcF93ZHQuaApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2QuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9wY3dkLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF9wY2kuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcGN3ZF91c2IuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Bjd2RfdXNiLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9wbng0MDA4X3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3BueDQwMDhfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9ybTlrX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvcm05a193ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9ybTlrX3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3MzYzI0MTBfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvczNjMjQxMF93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NhMTEwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zYTExMDBfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvc2ExMTAwX3dkdC5jCmluZGV4IDM0NzVmNDcuLjM0YTJiM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYTExMDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zYTExMDBfd2R0LmMKQEAgLTI1LDEzICsyNSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2lmZGVmIENPTkZJR19BUkNIX1BYQQogI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjZGVmaW5lIE9TQ1JfRlJFUQkJQ0xPQ0tfVElDS19SQVRFCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM2MHh4d2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM2MHh4d2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvc2JjNjB4eHdkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjODM2MC5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmM4MzYwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM4MzYwLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvc2JjODM2MC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjX2VweF9jMy5jIGIvZHJpdmVycy93YXRjaGRvZy9zYmNfZXB4X2MzLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zYmNfZXB4X2MzLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvc2JjX2VweF9jMy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NjMTIwMHdkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvc2MxMjAwd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYzUyMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2M1MjBfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zYzUyMF93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9zYzUyMF93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NjeDIwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2N4MjAwX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2N4MjAwX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3NjeDIwMF93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Nod2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zaHdkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3Nod2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc21zYzM3Yjc4N193ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy9zbXNjMzdiNzg3X3dkdC5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc29mdGRvZy5jIGIvZHJpdmVycy93YXRjaGRvZy9zb2Z0ZG9nLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy9zb2Z0ZG9nLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvc29mdGRvZy5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2OTdoZl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjk3aGZfd2R0LmMKc2ltaWxhcml0eSBpbmRleCA5OSUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCmluZGV4IGQ5ZTgyMWQuLjUxODI2YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ODM2OTdoZl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzY5N2hmX3dkdC5jCkBAIC04LDcgKzgsNyBAQAogICoJd2hpY2ggaXMgYmFzZWQgb24gd2R0LmMuCiAgKglPcmlnaW5hbCBjb3B5cmlnaHQgbWVzc2FnZXM6CiAgKgotICoJKGMpIENvcHlyaWdodCAyMDAzIFDhZHJhaWcgQnJhZHkgPFBAZHJhaWdCcmFkeS5jb20+CisgKgkoYykgQ29weXJpZ2h0IDIwMDMgUMOhZHJhaWcgQnJhZHkgPFBAZHJhaWdCcmFkeS5jb20+CiAgKgogICoJKGMpIENvcHlyaWdodCAyMDAwLTIwMDEgTWFyZWsgTWljaGFsa2lld2ljeiA8bWFyZWttQGxpbnV4Lm9yZy5wbD4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvdzgzODc3Zl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzODc3Zl93ZHQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4Mzg3N2Zfd2R0LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvdzgzODc3Zl93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy93ODM5NzdmX3dkdC5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93YWZlcjU4MjN3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2FmZXI1ODIzd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy93YWZlcjU4MjN3ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy93YWZlcjU4MjN3ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkNTAxcC5oIGIvZHJpdmVycy93YXRjaGRvZy93ZDUwMXAuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkNTAxcC5oCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3dkNTAxcC5oCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2RydGFzLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkcnRhcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2RydGFzLmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvd2RydGFzLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvY2hhci93YXRjaGRvZy93ZHQuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy93ZHQuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdDI4NS5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHQyODUuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdDI4NS5jCnJlbmFtZSB0byBkcml2ZXJzL3dhdGNoZG9nL3dkdDI4NS5jCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0OTc3LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdDk3Ny5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBkcml2ZXJzL2NoYXIvd2F0Y2hkb2cvd2R0OTc3LmMKcmVuYW1lIHRvIGRyaXZlcnMvd2F0Y2hkb2cvd2R0OTc3LmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy93ZHRfcGNpLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdF9wY2kuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gZHJpdmVycy9jaGFyL3dhdGNoZG9nL3dkdF9wY2kuYwpyZW5hbWUgdG8gZHJpdmVycy93YXRjaGRvZy93ZHRfcGNpLmMKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmUuYyBiL2RyaXZlcnMveGVuL3hlbmJ1cy94ZW5idXNfcHJvYmUuYwppbmRleCAwYjc2OWY3Li40NzUwZGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi94ZW5idXMveGVuYnVzX3Byb2JlLmMKKysrIGIvZHJpdmVycy94ZW4veGVuYnVzL3hlbmJ1c19wcm9iZS5jCkBAIC0xODUsMTMgKzE4NSwxNCBAQAogCWlmICghZGV2LT5vdGhlcmVuZCB8fAogCSAgICBzdHJuY21wKGRldi0+b3RoZXJlbmQsIHZlY1tYU19XQVRDSF9QQVRIXSwKIAkJICAgIHN0cmxlbihkZXYtPm90aGVyZW5kKSkpIHsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICJJZ25vcmluZyB3YXRjaCBhdCAlcyIsIHZlY1tYU19XQVRDSF9QQVRIXSk7CisJCWRldl9kYmcoJmRldi0+ZGV2LCAiSWdub3Jpbmcgd2F0Y2ggYXQgJXNcbiIsCisJCQl2ZWNbWFNfV0FUQ0hfUEFUSF0pOwogCQlyZXR1cm47CiAJfQogCiAJc3RhdGUgPSB4ZW5idXNfcmVhZF9kcml2ZXJfc3RhdGUoZGV2LT5vdGhlcmVuZCk7CiAKLQlkZXZfZGJnKCZkZXYtPmRldiwgInN0YXRlIGlzICVkLCAoJXMpLCAlcywgJXMiLAorCWRldl9kYmcoJmRldi0+ZGV2LCAic3RhdGUgaXMgJWQsICglcyksICVzLCAlc1xuIiwKIAkJc3RhdGUsIHhlbmJ1c19zdHJzdGF0ZShzdGF0ZSksIGRldi0+b3RoZXJlbmRfd2F0Y2gubm9kZSwKIAkJdmVjW1hTX1dBVENIX1BBVEhdKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy96b3Jyby96b3Jyby5pZHMgYi9kcml2ZXJzL3pvcnJvL3pvcnJvLmlkcwppbmRleCA1YmQ0YjA1ZC4uNTYwZmVmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy96b3Jyby96b3Jyby5pZHMKKysrIGIvZHJpdmVycy96b3Jyby96b3Jyby5pZHMKQEAgLTI5NSw3ICsyOTUsNyBAQAogCTAxMDAgIFJIIDgwMEMgW0hEIENvbnRyb2xsZXJdCiAJMDIwMCAgUkggODAwQyBbUkFNIEV4cGFuc2lvbl0KIDA4NjEgIEthdG8KLSMgVGhlIFJhaW5ib3cgSUkgYW5kIElJSSBhcmUgYWN0dWFsbHkgbWFkZSBieSBJbmdlbmlldXJi/HJvIEhlbGZyaWNoCisjIFRoZSBSYWluYm93IElJIGFuZCBJSUkgYXJlIGFjdHVhbGx5IG1hZGUgYnkgSW5nZW5pZXVyYsO8cm8gSGVsZnJpY2gKIAkyMDAwICBSYWluYm93IElJIFtHcmFwaGljcyBDYXJkXQogCTIxMDAgIFJhaW5ib3cgSUlJIFtHcmFwaGljcyBDYXJkXQogCTgwMDAgIE1lbG9keSBNUEVHIFtBdWRpbyBDYXJkXQpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggZDgwNjI3NC4uY2MyOGE2OSAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0xNDAsNiArMTQwLDcgQEAKIAl0cmlzdGF0ZSAiRXh0NGRldi9leHQ0IGV4dGVuZGVkIGZzIHN1cHBvcnQgZGV2ZWxvcG1lbnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgSkJEMgorCXNlbGVjdCBDUkMxNgogCWhlbHAKIAkgIEV4dDRkZXYgaXMgYSBwcmVkZWNlc3NvciBmaWxlc3lzdGVtIG9mIHRoZSBuZXh0IGdlbmVyYXRpb24KIAkgIGV4dGVuZGVkIGZzIGV4dDQsIGJhc2VkIG9uIGV4dDMgZmlsZXN5c3RlbSBjb2RlLiBJdCB3aWxsIGJlCkBAIC0yMTksNyArMjIwLDcgQEAKIAogY29uZmlnIEpCRF9ERUJVRwogCWJvb2wgIkpCRCAoZXh0MykgZGVidWdnaW5nIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBKQkQKKwlkZXBlbmRzIG9uIEpCRCAmJiBERUJVR19GUwogCWhlbHAKIAkgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4dDMgam91cm5hbGVkIGZpbGUgc3lzdGVtIChvciBwb3RlbnRpYWxseSBhbnkKIAkgIG90aGVyIGZpbGUgc3lzdGVtL2RldmljZSB1c2luZyBKQkQpLCB0aGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvCkBAIC0yMjgsMTAgKzIyOSwxMCBAQAogCSAgZGVidWdnaW5nIG91dHB1dCB3aWxsIGJlIHR1cm5lZCBvZmYuCiAKIAkgIElmIHlvdSBzZWxlY3QgWSBoZXJlLCB0aGVuIHlvdSB3aWxsIGJlIGFibGUgdG8gdHVybiBvbiBkZWJ1Z2dpbmcKLQkgIHdpdGggImVjaG8gTiA+IC9wcm9jL3N5cy9mcy9qYmQtZGVidWciLCB3aGVyZSBOIGlzIGEgbnVtYmVyIGJldHdlZW4KLQkgIDEgYW5kIDUsIHRoZSBoaWdoZXIgdGhlIG51bWJlciwgdGhlIG1vcmUgZGVidWdnaW5nIG91dHB1dCBpcwotCSAgZ2VuZXJhdGVkLiAgVG8gdHVybiBkZWJ1Z2dpbmcgb2ZmIGFnYWluLCBkbwotCSAgImVjaG8gMCA+IC9wcm9jL3N5cy9mcy9qYmQtZGVidWciLgorCSAgd2l0aCAiZWNobyBOID4gL3N5cy9rZXJuZWwvZGVidWcvamJkL2piZC1kZWJ1ZyIsIHdoZXJlIE4gaXMgYQorCSAgbnVtYmVyIGJldHdlZW4gMSBhbmQgNSwgdGhlIGhpZ2hlciB0aGUgbnVtYmVyLCB0aGUgbW9yZSBkZWJ1Z2dpbmcKKwkgIG91dHB1dCBpcyBnZW5lcmF0ZWQuICBUbyB0dXJuIGRlYnVnZ2luZyBvZmYgYWdhaW4sIGRvCisJICAiZWNobyAwID4gL3N5cy9rZXJuZWwvZGVidWcvamJkL2piZC1kZWJ1ZyIuCiAKIGNvbmZpZyBKQkQyCiAJdHJpc3RhdGUKZGlmZiAtLWdpdCBhL2ZzL2Fpby5jIGIvZnMvYWlvLmMKaW5kZXggZDAyZjQzYi4uZjEyZGI0MSAxMDA2NDQKLS0tIGEvZnMvYWlvLmMKKysrIGIvZnMvYWlvLmMKQEAgLTcxMCwxOCArNzEwLDkgQEAKIAogCS8qCiAJICogTm93IHdlIGFyZSBhbGwgc2V0IHRvIGNhbGwgdGhlIHJldHJ5IG1ldGhvZCBpbiBhc3luYwotCSAqIGNvbnRleHQuIEJ5IHNldHRpbmcgdGhpcyB0aHJlYWQncyBpb193YWl0IGNvbnRleHQKLQkgKiB0byBwb2ludCB0byB0aGUgd2FpdCBxdWV1ZSBlbnRyeSBpbnNpZGUgdGhlIGN1cnJlbnRseQotCSAqIHJ1bm5pbmcgaW9jYiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSByZXRyeSwgd2UgZW5zdXJlCi0JICogdGhhdCBhc3luYyBub3RpZmljYXRpb24gd2FrZXVwcyBhcmUgcXVldWVkIGJ5IHRoZQotCSAqIG9wZXJhdGlvbiBpbnN0ZWFkIG9mIGJsb2NraW5nIHdhaXRzLCBhbmQgd2hlbiBub3RpZmllZCwKLQkgKiBjYXVzZSB0aGUgaW9jYiB0byBiZSBraWNrZWQgZm9yIGNvbnRpbnVhdGlvbiAodGhyb3VnaAotCSAqIHRoZSBhaW9fd2FrZV9mdW5jdGlvbiBjYWxsYmFjaykuCisJICogY29udGV4dC4KIAkgKi8KLQlCVUdfT04oY3VycmVudC0+aW9fd2FpdCAhPSBOVUxMKTsKLQljdXJyZW50LT5pb193YWl0ID0gJmlvY2ItPmtpX3dhaXQ7CiAJcmV0ID0gcmV0cnkoaW9jYik7Ci0JY3VycmVudC0+aW9fd2FpdCA9IE5VTEw7CiAKIAlpZiAocmV0ICE9IC1FSU9DQlJFVFJZICYmIHJldCAhPSAtRUlPQ0JRVUVVRUQpIHsKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZpb2NiLT5raV93YWl0LnRhc2tfbGlzdCkpOwpAQCAtMTUwOCwxMCArMTQ5OSw3IEBACiAgKiAJU2ltcGx5IHRyaWdnZXJzIGEgcmV0cnkgb2YgdGhlIG9wZXJhdGlvbiB2aWEga2lja19pb2NiLgogICoKICAqIAlUaGlzIGNhbGxiYWNrIGlzIHNwZWNpZmllZCBpbiB0aGUgd2FpdCBxdWV1ZSBlbnRyeSBpbgotICoJYSBraW9jYgkoY3VycmVudC0+aW9fd2FpdCBwb2ludHMgdG8gdGhpcyB3YWl0IHF1ZXVlCi0gKgllbnRyeSB3aGVuIGFuIGFpbyBvcGVyYXRpb24gZXhlY3V0ZXM7IGl0IGlzIHVzZWQKLSAqIAlpbnN0ZWFkIG9mIGEgc3luY2hyb25vdXMgd2FpdCB3aGVuIGFuIGkvbyBibG9ja2luZwotICoJY29uZGl0aW9uIGlzIGVuY291bnRlcmVkIGR1cmluZyBhaW8pLgorICoJYSBraW9jYi4KICAqCiAgKiBOb3RlOgogICogVGhpcyByb3V0aW5lIGlzIGV4ZWN1dGVkIHdpdGggdGhlIHdhaXQgcXVldWUgbG9jayBoZWxkLgpkaWZmIC0tZ2l0IGEvZnMvYXR0ci5jIGIvZnMvYXR0ci5jCmluZGV4IGFlNThiZDMuLjk2NmI3M2UgMTAwNjQ0Ci0tLSBhL2ZzL2F0dHIuYworKysgYi9mcy9hdHRyLmMKQEAgLTEwMywxMiArMTAzLDExIEBACiBpbnQgbm90aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKiBhdHRyKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7Ci0JbW9kZV90IG1vZGU7CisJbW9kZV90IG1vZGUgPSBpbm9kZS0+aV9tb2RlOwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgdGltZXNwZWMgbm93OwogCXVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItPmlhX3ZhbGlkOwogCi0JbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJbm93ID0gY3VycmVudF9mc190aW1lKGlub2RlLT5pX3NiKTsKIAogCWF0dHItPmlhX2N0aW1lID0gbm93OwpAQCAtMTI1LDE4ICsxMjQsMjUgQEAKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KKworCS8qCisJICogV2Ugbm93IHBhc3MgQVRUUl9LSUxMX1MqSUQgdG8gdGhlIGxvd2VyIGxldmVsIHNldGF0dHIgZnVuY3Rpb24gc28KKwkgKiB0aGF0IHRoZSBmdW5jdGlvbiBoYXMgdGhlIGFiaWxpdHkgdG8gcmVpbnRlcnByZXQgYSBtb2RlIGNoYW5nZQorCSAqIHRoYXQncyBkdWUgdG8gdGhlc2UgYml0cy4gVGhpcyBhZGRzIGFuIGltcGxpY2l0IHJlc3RyaWN0aW9uIHRoYXQKKwkgKiBubyBmdW5jdGlvbiB3aWxsIGV2ZXIgY2FsbCBub3RpZnlfY2hhbmdlIHdpdGggYm90aCBBVFRSX01PREUgYW5kCisJICogQVRUUl9LSUxMX1MqSUQgc2V0LgorCSAqLworCWlmICgoaWFfdmFsaWQgJiAoQVRUUl9LSUxMX1NVSUR8QVRUUl9LSUxMX1NHSUQpKSAmJgorCSAgICAoaWFfdmFsaWQgJiBBVFRSX01PREUpKQorCQlCVUcoKTsKKwogCWlmIChpYV92YWxpZCAmIEFUVFJfS0lMTF9TVUlEKSB7Ci0JCWF0dHItPmlhX3ZhbGlkICY9IH5BVFRSX0tJTExfU1VJRDsKIAkJaWYgKG1vZGUgJiBTX0lTVUlEKSB7Ci0JCQlpZiAoIShpYV92YWxpZCAmIEFUVFJfTU9ERSkpIHsKLQkJCQlpYV92YWxpZCA9IGF0dHItPmlhX3ZhbGlkIHw9IEFUVFJfTU9ERTsKLQkJCQlhdHRyLT5pYV9tb2RlID0gaW5vZGUtPmlfbW9kZTsKLQkJCX0KLQkJCWF0dHItPmlhX21vZGUgJj0gflNfSVNVSUQ7CisJCQlpYV92YWxpZCA9IGF0dHItPmlhX3ZhbGlkIHw9IEFUVFJfTU9ERTsKKwkJCWF0dHItPmlhX21vZGUgPSAoaW5vZGUtPmlfbW9kZSAmIH5TX0lTVUlEKTsKIAkJfQogCX0KIAlpZiAoaWFfdmFsaWQgJiBBVFRSX0tJTExfU0dJRCkgewotCQlhdHRyLT5pYV92YWxpZCAmPSB+IEFUVFJfS0lMTF9TR0lEOwogCQlpZiAoKG1vZGUgJiAoU19JU0dJRCB8IFNfSVhHUlApKSA9PSAoU19JU0dJRCB8IFNfSVhHUlApKSB7CiAJCQlpZiAoIShpYV92YWxpZCAmIEFUVFJfTU9ERSkpIHsKIAkJCQlpYV92YWxpZCA9IGF0dHItPmlhX3ZhbGlkIHw9IEFUVFJfTU9ERTsKQEAgLTE0NSw3ICsxNTEsNyBAQAogCQkJYXR0ci0+aWFfbW9kZSAmPSB+U19JU0dJRDsKIAkJfQogCX0KLQlpZiAoIWF0dHItPmlhX3ZhbGlkKQorCWlmICghKGF0dHItPmlhX3ZhbGlkICYgfihBVFRSX0tJTExfU1VJRCB8IEFUVFJfS0lMTF9TR0lEKSkpCiAJCXJldHVybiAwOwogCiAJaWYgKGlhX3ZhbGlkICYgQVRUUl9TSVpFKQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL2lub2RlLmMgYi9mcy9hdXRvZnMvaW5vZGUuYwppbmRleCBlNzIwNGQ3Li40NWY1OTkyIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvaW5vZGUuYworKysgYi9mcy9hdXRvZnMvaW5vZGUuYwpAQCAtODAsNyArODAsNyBAQAogCiAJKnVpZCA9IGN1cnJlbnQtPnVpZDsKIAkqZ2lkID0gY3VycmVudC0+Z2lkOwotCSpwZ3JwID0gcHJvY2Vzc19ncm91cChjdXJyZW50KTsKKwkqcGdycCA9IHRhc2tfcGdycF9ucihjdXJyZW50KTsKIAogCSptaW5wcm90byA9ICptYXhwcm90byA9IEFVVE9GU19QUk9UT19WRVJTSU9OOwogCmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvcm9vdC5jIGIvZnMvYXV0b2ZzL3Jvb3QuYwppbmRleCBjMTQ4OTUzLi41ZWZmZjNjIDEwMDY0NAotLS0gYS9mcy9hdXRvZnMvcm9vdC5jCisrKyBiL2ZzL2F1dG9mcy9yb290LmMKQEAgLTIxNCw4ICsyMTQsOCBAQAogCiAJb3pfbW9kZSA9IGF1dG9mc19vel9tb2RlKHNiaSk7CiAJRFBSSU5USygoImF1dG9mc19sb29rdXA6IHBpZCA9ICV1LCBwZ3JwID0gJXUsIGNhdGF0b25pYyA9ICVkLCAiCi0JCQkJIm96X21vZGUgPSAlZFxuIiwgcGlkX25yKHRhc2tfcGlkKGN1cnJlbnQpKSwKLQkJCQlwcm9jZXNzX2dyb3VwKGN1cnJlbnQpLCBzYmktPmNhdGF0b25pYywKKwkJCQkib3pfbW9kZSA9ICVkXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKKwkJCQl0YXNrX3BncnBfbnIoY3VycmVudCksIHNiaS0+Y2F0YXRvbmljLAogCQkJCW96X21vZGUpKTsKIAogCS8qCkBAIC01MzYsNyArNTM2LDcgQEAKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mc19zYmkoaW5vZGUtPmlfc2IpOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCi0JRFBSSU5USygoImF1dG9mc19pb2N0bDogY21kID0gMHglMDh4LCBhcmcgPSAweCUwOGx4LCBzYmkgPSAlcCwgcGdycCA9ICV1XG4iLGNtZCxhcmcsc2JpLHByb2Nlc3NfZ3JvdXAoY3VycmVudCkpKTsKKwlEUFJJTlRLKCgiYXV0b2ZzX2lvY3RsOiBjbWQgPSAweCUwOHgsIGFyZyA9IDB4JTA4bHgsIHNiaSA9ICVwLCBwZ3JwID0gJXVcbiIsY21kLGFyZyxzYmksdGFza19wZ3JwX25yKGN1cnJlbnQpKSk7CiAKIAlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gX0lPQ19UWVBFKEFVVE9GU19JT0NfRklSU1QpIHx8CiAJICAgICBfSU9DX05SKGNtZCkgLSBfSU9DX05SKEFVVE9GU19JT0NfRklSU1QpID49IEFVVE9GU19JT0NfQ09VTlQpCmRpZmYgLS1naXQgYS9mcy9hdXRvZnMvd2FpdHEuYyBiL2ZzL2F1dG9mcy93YWl0cS5jCmluZGV4IDE5YTljYWYuLmJlNDY4MDUgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mcy93YWl0cS5jCisrKyBiL2ZzL2F1dG9mcy93YWl0cS5jCkBAIC0xODIsNyArMTgyLDcgQEAKIHsKIAlzdHJ1Y3QgYXV0b2ZzX3dhaXRfcXVldWUgKndxLCAqKndxbDsKIAotCWZvciAoIHdxbCA9ICZzYmktPnF1ZXVlcyA7ICh3cSA9ICp3cWwpICE9IDAgOyB3cWwgPSAmd3EtPm5leHQgKSB7CisJZm9yICh3cWwgPSAmc2JpLT5xdWV1ZXM7ICh3cSA9ICp3cWwpICE9IE5VTEw7IHdxbCA9ICZ3cS0+bmV4dCkgewogCQlpZiAoIHdxLT53YWl0X3F1ZXVlX3Rva2VuID09IHdhaXRfcXVldWVfdG9rZW4gKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCmluZGV4IGQ4NWY0MmYuLjJkNGFlNDAgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAorKysgYi9mcy9hdXRvZnM0L2F1dG9mc19pLmgKQEAgLTEzMSw3ICsxMzEsNyBAQAogICAgZmlsZXN5c3RlbSB3aXRob3V0ICJtYWdpYyIuKSAqLwogCiBzdGF0aWMgaW5saW5lIGludCBhdXRvZnM0X296X21vZGUoc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkpIHsKLQlyZXR1cm4gc2JpLT5jYXRhdG9uaWMgfHwgcHJvY2Vzc19ncm91cChjdXJyZW50KSA9PSBzYmktPm96X3BncnA7CisJcmV0dXJuIHNiaS0+Y2F0YXRvbmljIHx8IHRhc2tfcGdycF9ucihjdXJyZW50KSA9PSBzYmktPm96X3BncnA7CiB9CiAKIC8qIERvZXMgYSBkZW50cnkgaGF2ZSBzb21lIHBlbmRpbmcgYWN0aXZpdHk/ICovCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2lub2RlLmMgYi9mcy9hdXRvZnM0L2lub2RlLmMKaW5kZXggY2Q4MWYwOC4uN2YwNWQ2YyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mczQvaW5vZGUuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAKIAkqdWlkID0gY3VycmVudC0+dWlkOwogCSpnaWQgPSBjdXJyZW50LT5naWQ7Ci0JKnBncnAgPSBwcm9jZXNzX2dyb3VwKGN1cnJlbnQpOworCSpwZ3JwID0gdGFza19wZ3JwX25yKGN1cnJlbnQpOwogCiAJKm1pbnByb3RvID0gQVVUT0ZTX01JTl9QUk9UT19WRVJTSU9OOwogCSptYXhwcm90byA9IEFVVE9GU19NQVhfUFJPVE9fVkVSU0lPTjsKQEAgLTMyMyw3ICszMjMsNyBAQAogCXNiaS0+cGlwZSA9IE5VTEw7CiAJc2JpLT5jYXRhdG9uaWMgPSAxOwogCXNiaS0+ZXhwX3RpbWVvdXQgPSAwOwotCXNiaS0+b3pfcGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisJc2JpLT5vel9wZ3JwID0gdGFza19wZ3JwX25yKGN1cnJlbnQpOwogCXNiaS0+c2IgPSBzOwogCXNiaS0+dmVyc2lvbiA9IDA7CiAJc2JpLT5zdWJfdmVyc2lvbiA9IDA7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3Jvb3QuYyBiL2ZzL2F1dG9mczQvcm9vdC5jCmluZGV4IDQ1ZmYzZDYuLjJiYmNjODEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC01ODIsNyArNTgyLDcgQEAKIAlvel9tb2RlID0gYXV0b2ZzNF9vel9tb2RlKHNiaSk7CiAKIAlEUFJJTlRLKCJwaWQgPSAldSwgcGdycCA9ICV1LCBjYXRhdG9uaWMgPSAlZCwgb3pfbW9kZSA9ICVkIiwKLQkJIGN1cnJlbnQtPnBpZCwgcHJvY2Vzc19ncm91cChjdXJyZW50KSwgc2JpLT5jYXRhdG9uaWMsIG96X21vZGUpOworCQkgY3VycmVudC0+cGlkLCB0YXNrX3BncnBfbnIoY3VycmVudCksIHNiaS0+Y2F0YXRvbmljLCBvel9tb2RlKTsKIAogCXVuaGFzaGVkID0gYXV0b2ZzNF9sb29rdXBfdW5oYXNoZWQoc2JpLCBkZW50cnktPmRfcGFyZW50LCAmZGVudHJ5LT5kX25hbWUpOwogCWlmICghdW5oYXNoZWQpIHsKQEAgLTk3Niw3ICs5NzYsNyBAQAogCXZvaWQgX191c2VyICpwID0gKHZvaWQgX191c2VyICopYXJnOwogCiAJRFBSSU5USygiY21kID0gMHglMDh4LCBhcmcgPSAweCUwOGx4LCBzYmkgPSAlcCwgcGdycCA9ICV1IiwKLQkJY21kLGFyZyxzYmkscHJvY2Vzc19ncm91cChjdXJyZW50KSk7CisJCWNtZCxhcmcsc2JpLHRhc2tfcGdycF9ucihjdXJyZW50KSk7CiAKIAlpZiAoX0lPQ19UWVBFKGNtZCkgIT0gX0lPQ19UWVBFKEFVVE9GU19JT0NfRklSU1QpIHx8CiAJICAgICBfSU9DX05SKGNtZCkgLSBfSU9DX05SKEFVVE9GU19JT0NfRklSU1QpID49IEFVVE9GU19JT0NfQ09VTlQpCmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L3dhaXRxLmMgYi9mcy9hdXRvZnM0L3dhaXRxLmMKaW5kZXggMGQwNDFhOS4uMWZlMjhlNCAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC93YWl0cS5jCisrKyBiL2ZzL2F1dG9mczQvd2FpdHEuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAJc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlICp3cSwgKip3cWw7CiAKIAltdXRleF9sb2NrKCZzYmktPndxX211dGV4KTsKLQlmb3IgKHdxbCA9ICZzYmktPnF1ZXVlcyA7ICh3cSA9ICp3cWwpICE9IDAgOyB3cWwgPSAmd3EtPm5leHQpIHsKKwlmb3IgKHdxbCA9ICZzYmktPnF1ZXVlczsgKHdxID0gKndxbCkgIT0gTlVMTDsgd3FsID0gJndxLT5uZXh0KSB7CiAJCWlmICh3cS0+d2FpdF9xdWV1ZV90b2tlbiA9PSB3YWl0X3F1ZXVlX3Rva2VuKQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZi5jIGIvZnMvYmluZm10X2VsZi5jCmluZGV4IDZlMmYzYjguLmJhOGRlN2MgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGYuYworKysgYi9mcy9iaW5mbXRfZWxmLmMKQEAgLTEzODMsMTAgKzEzODMsMTAgQEAKIAlwcnN0YXR1cy0+cHJfaW5mby5zaV9zaWdubyA9IHByc3RhdHVzLT5wcl9jdXJzaWcgPSBzaWducjsKIAlwcnN0YXR1cy0+cHJfc2lncGVuZCA9IHAtPnBlbmRpbmcuc2lnbmFsLnNpZ1swXTsKIAlwcnN0YXR1cy0+cHJfc2lnaG9sZCA9IHAtPmJsb2NrZWQuc2lnWzBdOwotCXByc3RhdHVzLT5wcl9waWQgPSBwLT5waWQ7Ci0JcHJzdGF0dXMtPnByX3BwaWQgPSBwLT5wYXJlbnQtPnBpZDsKLQlwcnN0YXR1cy0+cHJfcGdycCA9IHByb2Nlc3NfZ3JvdXAocCk7Ci0JcHJzdGF0dXMtPnByX3NpZCA9IHByb2Nlc3Nfc2Vzc2lvbihwKTsKKwlwcnN0YXR1cy0+cHJfcGlkID0gdGFza19waWRfdm5yKHApOworCXByc3RhdHVzLT5wcl9wcGlkID0gdGFza19waWRfdm5yKHAtPnBhcmVudCk7CisJcHJzdGF0dXMtPnByX3BncnAgPSB0YXNrX3BncnBfdm5yKHApOworCXByc3RhdHVzLT5wcl9zaWQgPSB0YXNrX3Nlc3Npb25fdm5yKHApOwogCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKSB7CiAJCS8qCiAJCSAqIFRoaXMgaXMgdGhlIHJlY29yZCBmb3IgdGhlIGdyb3VwIGxlYWRlci4gIEFkZCBpbiB0aGUKQEAgLTE0MjksMTAgKzE0MjksMTAgQEAKIAkJCXBzaW5mby0+cHJfcHNhcmdzW2ldID0gJyAnOwogCXBzaW5mby0+cHJfcHNhcmdzW2xlbl0gPSAwOwogCi0JcHNpbmZvLT5wcl9waWQgPSBwLT5waWQ7Ci0JcHNpbmZvLT5wcl9wcGlkID0gcC0+cGFyZW50LT5waWQ7Ci0JcHNpbmZvLT5wcl9wZ3JwID0gcHJvY2Vzc19ncm91cChwKTsKLQlwc2luZm8tPnByX3NpZCA9IHByb2Nlc3Nfc2Vzc2lvbihwKTsKKwlwc2luZm8tPnByX3BpZCA9IHRhc2tfcGlkX3ZucihwKTsKKwlwc2luZm8tPnByX3BwaWQgPSB0YXNrX3BpZF92bnIocC0+cGFyZW50KTsKKwlwc2luZm8tPnByX3BncnAgPSB0YXNrX3BncnBfdm5yKHApOworCXBzaW5mby0+cHJfc2lkID0gdGFza19zZXNzaW9uX3ZucihwKTsKIAogCWkgPSBwLT5zdGF0ZSA/IGZmeih+cC0+c3RhdGUpICsgMSA6IDA7CiAJcHNpbmZvLT5wcl9zdGF0ZSA9IGk7CmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKaW5kZXggMDMzODYxYy4uMzI2NDlmMiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZl9mZHBpYy5jCisrKyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwpAQCAtMTM0MiwxMCArMTM0MiwxMCBAQAogCXByc3RhdHVzLT5wcl9pbmZvLnNpX3NpZ25vID0gcHJzdGF0dXMtPnByX2N1cnNpZyA9IHNpZ25yOwogCXByc3RhdHVzLT5wcl9zaWdwZW5kID0gcC0+cGVuZGluZy5zaWduYWwuc2lnWzBdOwogCXByc3RhdHVzLT5wcl9zaWdob2xkID0gcC0+YmxvY2tlZC5zaWdbMF07Ci0JcHJzdGF0dXMtPnByX3BpZCA9IHAtPnBpZDsKLQlwcnN0YXR1cy0+cHJfcHBpZCA9IHAtPnBhcmVudC0+cGlkOwotCXByc3RhdHVzLT5wcl9wZ3JwID0gcHJvY2Vzc19ncm91cChwKTsKLQlwcnN0YXR1cy0+cHJfc2lkID0gcHJvY2Vzc19zZXNzaW9uKHApOworCXByc3RhdHVzLT5wcl9waWQgPSB0YXNrX3BpZF92bnIocCk7CisJcHJzdGF0dXMtPnByX3BwaWQgPSB0YXNrX3BpZF92bnIocC0+cGFyZW50KTsKKwlwcnN0YXR1cy0+cHJfcGdycCA9IHRhc2tfcGdycF92bnIocCk7CisJcHJzdGF0dXMtPnByX3NpZCA9IHRhc2tfc2Vzc2lvbl92bnIocCk7CiAJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkpIHsKIAkJLyoKIAkJICogVGhpcyBpcyB0aGUgcmVjb3JkIGZvciB0aGUgZ3JvdXAgbGVhZGVyLiAgQWRkIGluIHRoZQpAQCAtMTM5MSwxMCArMTM5MSwxMCBAQAogCQkJcHNpbmZvLT5wcl9wc2FyZ3NbaV0gPSAnICc7CiAJcHNpbmZvLT5wcl9wc2FyZ3NbbGVuXSA9IDA7CiAKLQlwc2luZm8tPnByX3BpZCA9IHAtPnBpZDsKLQlwc2luZm8tPnByX3BwaWQgPSBwLT5wYXJlbnQtPnBpZDsKLQlwc2luZm8tPnByX3BncnAgPSBwcm9jZXNzX2dyb3VwKHApOwotCXBzaW5mby0+cHJfc2lkID0gcHJvY2Vzc19zZXNzaW9uKHApOworCXBzaW5mby0+cHJfcGlkID0gdGFza19waWRfdm5yKHApOworCXBzaW5mby0+cHJfcHBpZCA9IHRhc2tfcGlkX3ZucihwLT5wYXJlbnQpOworCXBzaW5mby0+cHJfcGdycCA9IHRhc2tfcGdycF92bnIocCk7CisJcHNpbmZvLT5wcl9zaWQgPSB0YXNrX3Nlc3Npb25fdm5yKHApOwogCiAJaSA9IHAtPnN0YXRlID8gZmZ6KH5wLT5zdGF0ZSkgKyAxIDogMDsKIAlwc2luZm8tPnByX3N0YXRlID0gaTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbTg2LmMgYi9mcy9iaW5mbXRfZW04Ni5jCmluZGV4IDU3NmRkN2QuLmY5NWFlOTcgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbTg2LmMKKysrIGIvZnMvYmluZm10X2VtODYuYwpAQCAtMiw3ICsyLDcgQEAKICAqICBsaW51eC9mcy9iaW5mbXRfZW04Ni5jCiAgKgogICogIEJhc2VkIG9uIGxpbnV4L2ZzL2JpbmZtdF9zY3JpcHQuYwotICogIENvcHlyaWdodCAoQykgMTk5NiAgTWFydGluIHZvbiBM9ndpcworICogIENvcHlyaWdodCAoQykgMTk5NiAgTWFydGluIHZvbiBMw7Z3aXMKICAqICBvcmlnaW5hbCAjIS1jaGVja2luZyBpbXBsZW1lbnRlZCBieSB0eXRzby4KICAqCiAgKiAgZW04NiBjaGFuZ2VzIENvcHlyaWdodCAoQykgMTk5NyAgSmltIFBhcmFkaXMKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IDQyZTk0YjMuLmI1M2M3ZTUgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKKysrIGIvZnMvYmluZm10X21pc2MuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgYmluZm10X21pc2MuYwogICoKLSAqICBDb3B5cmlnaHQgKEMpIDE5OTcgUmljaGFyZCBH/G50aGVyCisgKiAgQ29weXJpZ2h0IChDKSAxOTk3IFJpY2hhcmQgR8O8bnRoZXIKICAqCiAgKiAgYmluZm10X21pc2MgZGV0ZWN0cyBiaW5hcmllcyB2aWEgYSBtYWdpYyBvciBmaWxlbmFtZSBleHRlbnNpb24gYW5kIGludm9rZXMKICAqICBhIHNwZWNpZmllZCB3cmFwcGVyLiBUaGlzIHNob3VsZCBvYnNvbGV0ZSBiaW5mbXRfamF2YSwgYmluZm10X2VtODYgYW5kCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfc2NyaXB0LmMgYi9mcy9iaW5mbXRfc2NyaXB0LmMKaW5kZXggNGQwZTBmNi4uYWIzMzkzOSAxMDA2NDQKLS0tIGEvZnMvYmluZm10X3NjcmlwdC5jCisrKyBiL2ZzL2JpbmZtdF9zY3JpcHQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvZnMvYmluZm10X3NjcmlwdC5jCiAgKgotICogIENvcHlyaWdodCAoQykgMTk5NiAgTWFydGluIHZvbiBM9ndpcworICogIENvcHlyaWdodCAoQykgMTk5NiAgTWFydGluIHZvbiBMw7Z3aXMKICAqICBvcmlnaW5hbCAjIS1jaGVja2luZyBpbXBsZW1lbnRlZCBieSB0eXRzby4KICAqLwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL0NIQU5HRVMgYi9mcy9jaWZzL0NIQU5HRVMKaW5kZXggYmVkNjIxNS4uM2Q0MTkxNiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9DSEFOR0VTCisrKyBiL2ZzL2NpZnMvQ0hBTkdFUwpAQCAtMSwzICsxLDE5IEBACitWZXJzaW9uIDEuNTEKKy0tLS0tLS0tLS0tLQorRml4IG1lbW9yeSBsZWFrIGluIHN0YXRmcyB3aGVuIG1vdW50ZWQgdG8gdmVyeSBvbGQgc2VydmVycyAoZS5nLgorV2luZG93cyA5eCkuICBBZGQgbmV3IGZlYXR1cmUgIlBPU0lYIG9wZW4iIHdoaWNoIGFsbG93cyBzZXJ2ZXJzCit3aGljaCBzdXBwb3J0IHRoZSBjdXJyZW50IFBPU0lYIEV4dGVuc2lvbnMgdG8gcHJvdmlkZSBiZXR0ZXIgc2VtYW50aWNzCisoZS5nLiBkZWxldGUgZm9yIG9wZW4gZmlsZXMgb3BlbmVkIHdpdGggcG9zaXggb3BlbikuICBUYWtlIGludG8KK2FjY291bnQgdW1hc2sgb24gcG9zaXggbWtkaXIgbm90IGp1c3Qgb2xkZXIgc3R5bGUgbWtkaXIuICBBZGQKK2FiaWxpdHkgdG8gbW91bnQgdG8gSVBDJCBzaGFyZSAod2hpY2ggYWxsb3dzIENJRlMgbmFtZWQgcGlwZXMgdG8gYmUKK29wZW5lZCwgcmVhZCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgZmlsZXMpLiAgV2hlbiAxc3QgdHJlZQorY29ubmVjdCBmYWlscyAoZS5nLiBkdWUgdG8gc2lnbmluZyBuZWdvdGlhdGlvbiBmYWlsdXJlKSBmaXgKK2xlYWsgdGhhdCBjYXVzZXMgY2lmc2Qgbm90IHRvIHN0b3AgYW5kIHJtbW9kIHRvIGZhaWwgdG8gY2xlYW51cAorY2lmc19yZXF1ZXN0X2J1ZmZlcnMgcG9vbC4gRml4IHByb2JsZW0gd2l0aCBQT1NJWCBPcGVuL01rZGlyIG9uCitiaWdlbmRpYW4gYXJjaGl0ZWN0dXJlcy4gRml4IHBvc3NpYmxlIG1lbW9yeSBjb3JydXB0aW9uIHdoZW4KK0VBR0FJTiByZXR1cm5lZCBvbiBrZXJuX3JlY3Ztc2cuIFJldHVybiBiZXR0ZXIgZXJyb3IgaWYgc2VydmVyCityZXF1aXJlcyBwYWNrZXQgc2lnbmluZyBidXQgY2xpZW50IGhhcyBkaXNhYmxlZCBpdC4KKwogVmVyc2lvbiAxLjUwCiAtLS0tLS0tLS0tLS0KIEZpeCBOVExNdjIgc2lnbmluZy4gTkZTIHNlcnZlciBtb3VudGVkIG92ZXIgY2lmcyB3b3JrcyAoaWYgY2lmcyBtb3VudCBpcwpAQCAtNiw3ICsyMiwxMCBAQAogU2FtYmEgc3VwcG9ydHMgbmV3ZXIgUE9TSVggQ0lGUyBQcm90b2NvbCBFeHRlbnNpb25zKS4gQWRkICJub3VuaXgiCiBtb3VudCBvcHRpb24gdG8gYWxsb3cgZGlzYWJsaW5nIHRoZSBDSUZTIFVuaXggRXh0ZW5zaW9ucyBmb3IganVzdAogdGhhdCBtb3VudC4gRml4IGhhbmcgb24gc3BpbmxvY2sgaW4gZmluZF93cml0YWJsZV9maWxlIChyYWNlIHdoZW4KLXJlb3BlbmluZyBmaWxlIGFmdGVyIHNlc3Npb24gY3Jhc2gpLgorcmVvcGVuaW5nIGZpbGUgYWZ0ZXIgc2Vzc2lvbiBjcmFzaCkuICBCeXRlIHJhbmdlIHVubG9jayByZXF1ZXN0IHRvCit3aW5kb3dzIHNlcnZlciBjb3VsZCB1bmxvY2sgbW9yZSBieXRlcyAob24gc2VydmVyIGNvcHkgb2YgZmlsZSkKK3RoYW4gaW50ZW5kZWQgaWYgc3RhcnQgb2YgdW5sb2NrIHJlcXVlc3QgaXMgd2VsbCBiZWZvcmUgc3RhcnQgb2YKK2EgcHJldmlvdXMgYnl0ZSByYW5nZSBsb2NrIHRoYXQgd2UgaXNzdWVkLgogCiBWZXJzaW9uIDEuNDkKIC0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9NYWtlZmlsZSBiL2ZzL2NpZnMvTWFrZWZpbGUKaW5kZXggNmVjZDlkNi4uZmY2YmE4ZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9NYWtlZmlsZQorKysgYi9mcy9jaWZzL01ha2VmaWxlCkBAIC0zLDQgKzMsNCBAQAogIwogb2JqLSQoQ09ORklHX0NJRlMpICs9IGNpZnMubwogCi1jaWZzLW9ianMgOj0gY2lmc2ZzLm8gY2lmc3NtYi5vIGNpZnNfZGVidWcubyBjb25uZWN0Lm8gZGlyLm8gZmlsZS5vIGlub2RlLm8gbGluay5vIG1pc2MubyBuZXRtaXNjLm8gc21iZGVzLm8gc21iZW5jcnlwdC5vIHRyYW5zcG9ydC5vIGFzbjEubyBtZDQubyBtZDUubyBjaWZzX3VuaWNvZGUubyBudGVyci5vIHhhdHRyLm8gY2lmc2VuY3J5cHQubyBmY250bC5vIHJlYWRkaXIubyBpb2N0bC5vIHNlc3MubyBleHBvcnQubworY2lmcy1vYmpzIDo9IGNpZnNmcy5vIGNpZnNzbWIubyBjaWZzX2RlYnVnLm8gY29ubmVjdC5vIGRpci5vIGZpbGUubyBpbm9kZS5vIGxpbmsubyBtaXNjLm8gbmV0bWlzYy5vIHNtYmRlcy5vIHNtYmVuY3J5cHQubyB0cmFuc3BvcnQubyBhc24xLm8gbWQ0Lm8gbWQ1Lm8gY2lmc191bmljb2RlLm8gbnRlcnIubyB4YXR0ci5vIGNpZnNlbmNyeXB0Lm8gZmNudGwubyByZWFkZGlyLm8gaW9jdGwubyBzZXNzLm8gZXhwb3J0Lm8gY2lmc2FjbC5vCmRpZmYgLS1naXQgYS9mcy9jaWZzL2FzbjEuYyBiL2ZzL2NpZnMvYXNuMS5jCmluZGV4IGY1MGE4OGQuLjJhMDFmM2UgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvYXNuMS5jCisrKyBiL2ZzL2NpZnMvYXNuMS5jCkBAIC0zODUsMTAgKzM4NSw5IEBACiAJdW5zaWduZWQgbG9uZyAqb3B0cjsKIAogCXNpemUgPSBlb2MgLSBjdHgtPnBvaW50ZXIgKyAxOwotCSpvaWQgPSBrbWFsbG9jKHNpemUgKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcpLCBHRlBfQVRPTUlDKTsKLQlpZiAoKm9pZCA9PSBOVUxMKSB7CisJKm9pZCA9IGttYWxsb2Moc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0FUT01JQyk7CisJaWYgKCpvaWQgPT0gTlVMTCkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJb3B0ciA9ICpvaWQ7CiAKQEAgLTU4MSw5ICs1ODAsOCBAQAogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSBpZiAoKGNscyAhPSBBU04xX1VOSSkgfHwgKGNvbiAhPSBBU04xX0NPTikKIAkJCSAgIHx8ICh0YWcgIT0gQVNOMV9TRVEpKSB7Ci0JCQljRllJKDEsCi0JCQkgICAgICgiRXhpdCA2IGNscyA9ICVkIGNvbiA9ICVkIHRhZyA9ICVkIGVuZCA9ICVwICglZCkiLAotCQkJICAgICAgY2xzLCBjb24sIHRhZywgZW5kLCAqZW5kKSk7CisJCQljRllJKDEsICgiY2xzID0gJWQgY29uID0gJWQgdGFnID0gJWQgZW5kID0gJXAgKCVkKSIsCisJCQkJY2xzLCBjb24sIHRhZywgZW5kLCAqZW5kKSk7CiAJCX0KIAogCQlpZiAoYXNuMV9oZWFkZXJfZGVjb2RlKCZjdHgsICZlbmQsICZjbHMsICZjb24sICZ0YWcpID09IDApIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggMWJmOGNmNS4uNzNjNGM0MSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTIwOSwxMyArMjA5LDE2IEBACiAJCWkrKzsKIAkJdGNvbiA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvLCBjaWZzQ29ubmVjdGlvbkxpc3QpOwogCQlkZXZfdHlwZSA9IGxlMzJfdG9fY3B1KHRjb24tPmZzRGV2SW5mby5EZXZpY2VUeXBlKTsKLQkJbGVuZ3RoID0KLQkJICAgIHNwcmludGYoYnVmLAotCQkJICAgICJcbiVkKSAlcyBVc2VzOiAlZCBUeXBlOiAlcyBEZXZJbmZvOiAweCV4ICIKLQkJCSAgICAiQXR0cmlidXRlczogMHgleFxuUGF0aENvbXBvbmVudE1heDogJWQgU3RhdHVzOiAlZCIsCi0JCQkgICAgaSwgdGNvbi0+dHJlZU5hbWUsCi0JCQkgICAgYXRvbWljX3JlYWQoJnRjb24tPnVzZUNvdW50KSwKLQkJCSAgICB0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLAorCQlsZW5ndGggPSBzcHJpbnRmKGJ1ZiwgIlxuJWQpICVzIFVzZXM6ICVkICIsIGksCisJCQkJIHRjb24tPnRyZWVOYW1lLCBhdG9taWNfcmVhZCgmdGNvbi0+dXNlQ291bnQpKTsKKwkJYnVmICs9IGxlbmd0aDsKKwkJaWYgKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pIHsKKwkJCWxlbmd0aCA9IHNwcmludGYoYnVmLCAiVHlwZTogJXMgIiwKKwkJCQkJIHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pOworCQkJYnVmICs9IGxlbmd0aDsKKwkJfQorCQlsZW5ndGggPSBzcHJpbnRmKGJ1ZiwgIkRldkluZm86IDB4JXggQXR0cmlidXRlczogMHgleCIKKwkJCQkgIlxuUGF0aENvbXBvbmVudE1heDogJWQgU3RhdHVzOiAlZCIsCiAJCQkgICAgbGUzMl90b19jcHUodGNvbi0+ZnNEZXZJbmZvLkRldmljZUNoYXJhY3RlcmlzdGljcyksCiAJCQkgICAgbGUzMl90b19jcHUodGNvbi0+ZnNBdHRySW5mby5BdHRyaWJ1dGVzKSwKIAkJCSAgICBsZTMyX3RvX2NwdSh0Y29uLT5mc0F0dHJJbmZvLk1heFBhdGhOYW1lQ29tcG9uZW50TGVuZ3RoKSwKQEAgLTg3NiwxMSArODc5LDE2IEBACiAJaWYgKGNvdW50IDwgMykgewogCQkvKiBzaW5nbGUgY2hhciBvciBzaW5nbGUgY2hhciBmb2xsb3dlZCBieSBudWxsICovCiAJCWMgPSBmbGFnc19zdHJpbmdbMF07Ci0JCWlmIChjID09ICcwJyB8fCBjID09ICduJyB8fCBjID09ICdOJykKKwkJaWYgKGMgPT0gJzAnIHx8IGMgPT0gJ24nIHx8IGMgPT0gJ04nKSB7CiAJCQlleHRlbmRlZF9zZWN1cml0eSA9IENJRlNTRUNfREVGOyAvKiBkZWZhdWx0ICovCi0JCWVsc2UgaWYgKGMgPT0gJzEnIHx8IGMgPT0gJ3knIHx8IGMgPT0gJ1knKQorCQkJcmV0dXJuIGNvdW50OworCQl9IGVsc2UgaWYgKGMgPT0gJzEnIHx8IGMgPT0gJ3knIHx8IGMgPT0gJ1knKSB7CiAJCQlleHRlbmRlZF9zZWN1cml0eSA9IENJRlNTRUNfTUFYOwotCQlyZXR1cm4gY291bnQ7CisJCQlyZXR1cm4gY291bnQ7CisJCX0gZWxzZSBpZiAoIWlzZGlnaXQoYykpIHsKKwkJCWNFUlJPUigxLCAoImludmFsaWQgZmxhZyAlYyIsIGMpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJfQogCS8qIGVsc2Ugd2UgaGF2ZSBhIG51bWJlciAqLwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuYyBiL2ZzL2NpZnMvY2lmc2FjbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTU2MzUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9jaWZzL2NpZnNhY2wuYwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqICAgZnMvY2lmcy9jaWZzYWNsLmMKKyAqCisgKiAgIENvcHlyaWdodCAoQykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDcKKyAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqCisgKiAgIENvbnRhaW5zIHRoZSByb3V0aW5lcyBmb3IgbWFwcGluZyBDSUZTL05URlMgQUNMcworICoKKyAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUKKyAqICAgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSAiY2lmc3BkdS5oIgorI2luY2x1ZGUgImNpZnNnbG9iLmgiCisjaW5jbHVkZSAiY2lmc2FjbC5oIgorI2luY2x1ZGUgImNpZnNwcm90by5oIgorI2luY2x1ZGUgImNpZnNfZGVidWcuaCIKKworCisjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCisKK3N0YXRpYyBzdHJ1Y3QgY2lmc193a3NpZCB3a3NpZGFycltOVU1fV0tfU0lEU10gPSB7CisJe3sxLCAwLCB7MCwgMCwgMCwgMCwgMCwgMH0sIHswLCAwLCAwLCAwLCAwfSB9LCAibnVsbCB1c2VyIn0sCisJe3sxLCAxLCB7MCwgMCwgMCwgMCwgMCwgMX0sIHswLCAwLCAwLCAwLCAwfSB9LCAibm9ib2R5In0sCisJe3sxLCAxLCB7MCwgMCwgMCwgMCwgMCwgNX0sIHtjcHVfdG9fbGUzMigxMSksIDAsIDAsIDAsIDB9IH0sICJuZXQtdXNlcnMifSwKKwl7ezEsIDEsIHswLCAwLCAwLCAwLCAwLCA1fSwge2NwdV90b19sZTMyKDE4KSwgMCwgMCwgMCwgMH0gfSwgInN5cyJ9LAorCXt7MSwgMiwgezAsIDAsIDAsIDAsIDAsIDV9LCB7Y3B1X3RvX2xlMzIoMzIpLCBjcHVfdG9fbGUzMig1NDQpLCAwLCAwLCAwfSB9LCAicm9vdCJ9LAorCXt7MSwgMiwgezAsIDAsIDAsIDAsIDAsIDV9LCB7Y3B1X3RvX2xlMzIoMzIpLCBjcHVfdG9fbGUzMig1NDUpLCAwLCAwLCAwfSB9LCAidXNlcnMifSwKKwl7ezEsIDIsIHswLCAwLCAwLCAwLCAwLCA1fSwge2NwdV90b19sZTMyKDMyKSwgY3B1X3RvX2xlMzIoNTQ2KSwgMCwgMCwgMH0gfSwgImd1ZXN0In0KK307CisKKworLyogc2VjdXJpdHkgaWQgZm9yIGV2ZXJ5b25lICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNpZnNfc2lkIHNpZF9ldmVyeW9uZSA9CisJCXsxLCAxLCB7MCwgMCwgMCwgMCwgMCwgMH0sIHt9IH07CisvKiBncm91cCB1c2VycyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCBzaWRfdXNlciA9CisJCXsxLCAyICwgezAsIDAsIDAsIDAsIDAsIDV9LCB7fSB9OworCisKK2ludCBtYXRjaF9zaWQoc3RydWN0IGNpZnNfc2lkICpjdHNpZCkKK3sKKwlpbnQgaSwgajsKKwlpbnQgbnVtX3N1YmF1dGgsIG51bV9zYXQsIG51bV9zYXc7CisJc3RydWN0IGNpZnNfc2lkICpjd3NpZDsKKworCWlmICghY3RzaWQpCisJCXJldHVybiAoLTEpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9XS19TSURTOyArK2kpIHsKKwkJY3dzaWQgPSAmKHdrc2lkYXJyW2ldLmNpZnNzaWQpOworCisJCS8qIGNvbXBhcmUgdGhlIHJldmlzaW9uICovCisJCWlmIChjdHNpZC0+cmV2aXNpb24gIT0gY3dzaWQtPnJldmlzaW9uKQorCQkJY29udGludWU7CisKKwkJLyogY29tcGFyZSBhbGwgb2YgdGhlIHNpeCBhdXRoIHZhbHVlcyAqLworCQlmb3IgKGogPSAwOyBqIDwgNjsgKytqKSB7CisJCQlpZiAoY3RzaWQtPmF1dGhvcml0eVtqXSAhPSBjd3NpZC0+YXV0aG9yaXR5W2pdKQorCQkJCWJyZWFrOworCQl9CisJCWlmIChqIDwgNikKKwkJCWNvbnRpbnVlOyAvKiBhbGwgb2YgdGhlIGF1dGggdmFsdWVzIGRpZCBub3QgbWF0Y2ggKi8KKworCQkvKiBjb21wYXJlIGFsbCBvZiB0aGUgc3ViYXV0aCB2YWx1ZXMgaWYgYW55ICovCisJCW51bV9zYXQgPSBjdHNpZC0+bnVtX3N1YmF1dGg7CisJCW51bV9zYXcgPSBjd3NpZC0+bnVtX3N1YmF1dGg7CisJCW51bV9zdWJhdXRoID0gbnVtX3NhdCA8IG51bV9zYXcgPyBudW1fc2F0IDogbnVtX3NhdzsKKwkJaWYgKG51bV9zdWJhdXRoKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgbnVtX3N1YmF1dGg7ICsraikgeworCQkJCWlmIChjdHNpZC0+c3ViX2F1dGhbal0gIT0gY3dzaWQtPnN1Yl9hdXRoW2pdKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChqIDwgbnVtX3N1YmF1dGgpCisJCQkJY29udGludWU7IC8qIGFsbCBzdWJfYXV0aCB2YWx1ZXMgZG8gbm90IG1hdGNoICovCisJCX0KKworCQljRllJKDEsICgibWF0Y2hpbmcgc2lkOiAlc1xuIiwgd2tzaWRhcnJbaV0uc2lkbmFtZSkpOworCQlyZXR1cm4gKDApOyAvKiBzaWRzIGNvbXBhcmUvbWF0Y2ggKi8KKwl9CisKKwljRllJKDEsICgiTm8gbWF0Y2hpbmcgc2lkIikpOworCXJldHVybiAoLTEpOworfQorCisvKiBpZiB0aGUgdHdvIFNJRHMgKHJvdWdobHkgZXF1aXZhbGVudCB0byBhIFVVSUQgZm9yIGEgdXNlciBvciBncm91cCkgYXJlCisgICB0aGUgc2FtZSByZXR1cm5zIDEsIGlmIHRoZXkgZG8gbm90IG1hdGNoIHJldHVybnMgMCAqLworaW50IGNvbXBhcmVfc2lkcyhzdHJ1Y3QgY2lmc19zaWQgKmN0c2lkLCBzdHJ1Y3QgY2lmc19zaWQgKmN3c2lkKQoreworCWludCBpOworCWludCBudW1fc3ViYXV0aCwgbnVtX3NhdCwgbnVtX3NhdzsKKworCWlmICgoIWN0c2lkKSB8fCAoIWN3c2lkKSkKKwkJcmV0dXJuICgwKTsKKworCS8qIGNvbXBhcmUgdGhlIHJldmlzaW9uICovCisJaWYgKGN0c2lkLT5yZXZpc2lvbiAhPSBjd3NpZC0+cmV2aXNpb24pCisJCXJldHVybiAoMCk7CisKKwkvKiBjb21wYXJlIGFsbCBvZiB0aGUgc2l4IGF1dGggdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IDY7ICsraSkgeworCQlpZiAoY3RzaWQtPmF1dGhvcml0eVtpXSAhPSBjd3NpZC0+YXV0aG9yaXR5W2ldKQorCQkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBjb21wYXJlIGFsbCBvZiB0aGUgc3ViYXV0aCB2YWx1ZXMgaWYgYW55ICovCisJbnVtX3NhdCA9IGN0c2lkLT5udW1fc3ViYXV0aDsKKwludW1fc2F3ID0gY3dzaWQtPm51bV9zdWJhdXRoOworCW51bV9zdWJhdXRoID0gbnVtX3NhdCA8IG51bV9zYXcgPyBudW1fc2F0IDogbnVtX3NhdzsKKwlpZiAobnVtX3N1YmF1dGgpIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bV9zdWJhdXRoOyArK2kpIHsKKwkJCWlmIChjdHNpZC0+c3ViX2F1dGhbaV0gIT0gY3dzaWQtPnN1Yl9hdXRoW2ldKQorCQkJCXJldHVybiAoMCk7CisJCX0KKwl9CisKKwlyZXR1cm4gKDEpOyAvKiBzaWRzIGNvbXBhcmUvbWF0Y2ggKi8KK30KKworCitzdGF0aWMgdm9pZCBwYXJzZV9hY2Uoc3RydWN0IGNpZnNfYWNlICpwYWNlLCBjaGFyICplbmRfb2ZfYWNsKQoreworCWludCBudW1fc3ViYXV0aDsKKworCS8qIHZhbGlkYXRlIHRoYXQgd2UgZG8gbm90IGdvIHBhc3QgZW5kIG9mIGFjbCAqLworCisJLyogWFhYIHRoaXMgaWYgc3RhdGVtZW50IGNhbiBiZSByZW1vdmVkCisJaWYgKGVuZF9vZl9hY2wgPCAoY2hhciAqKXBhY2UgKyBzaXplb2Yoc3RydWN0IGNpZnNfYWNlKSkgeworCQljRVJST1IoMSwgKCJBQ0wgdG9vIHNtYWxsIHRvIHBhcnNlIEFDRSIpKTsKKwkJcmV0dXJuOworCX0gKi8KKworCW51bV9zdWJhdXRoID0gcGFjZS0+bnVtX3N1YmF1dGg7CisJaWYgKG51bV9zdWJhdXRoKSB7CisjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCisJCWludCBpOworCQljRllJKDEsICgiQUNFIHJldmlzaW9uICVkIG51bV9zdWJhdXRoICVkIiwKKwkJCXBhY2UtPnJldmlzaW9uLCBwYWNlLT5udW1fc3ViYXV0aCkpOworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3N1YmF1dGg7ICsraSkgeworCQkJY0ZZSSgxLCAoIkFDRSBzdWJfYXV0aFslZF06IDB4JXgiLCBpLAorCQkJCWxlMzJfdG9fY3B1KHBhY2UtPnN1Yl9hdXRoW2ldKSkpOworCQl9CisKKwkJLyogQkIgYWRkIGxlbmd0aCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSBodWdlCisJCQludW0gYXV0aHMgYW5kIHRoZXJlZm9yZSBnbyBvZmYgdGhlIGVuZCAqLworCisJCWNGWUkoMSwgKCJSSUQgJWQiLCBsZTMyX3RvX2NwdShwYWNlLT5zdWJfYXV0aFtudW1fc3ViYXV0aC0xXSkpKTsKKyNlbmRpZgorCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfbnRhY2Uoc3RydWN0IGNpZnNfbnRhY2UgKnBudGFjZSwgY2hhciAqZW5kX29mX2FjbCkKK3sKKwkvKiB2YWxpZGF0ZSB0aGF0IHdlIGRvIG5vdCBnbyBwYXN0IGVuZCBvZiBhY2wgKi8KKwlpZiAoZW5kX29mX2FjbCA8IChjaGFyICopcG50YWNlICsgc2l6ZW9mKHN0cnVjdCBjaWZzX250YWNlKSkgeworCQljRVJST1IoMSwgKCJBQ0wgdG9vIHNtYWxsIHRvIHBhcnNlIE5UIEFDRSIpKTsKKwkJcmV0dXJuOworCX0KKworI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgorCWNGWUkoMSwgKCJOVEFDRSB0eXBlICVkIGZsYWdzIDB4JXggc2l6ZSAlZCwgYWNjZXNzIFJlcSAweCV4IiwKKwkJcG50YWNlLT50eXBlLCBwbnRhY2UtPmZsYWdzLCBwbnRhY2UtPnNpemUsCisJCXBudGFjZS0+YWNjZXNzX3JlcSkpOworI2VuZGlmCisJcmV0dXJuOworfQorCisKKworc3RhdGljIHZvaWQgcGFyc2VfZGFjbChzdHJ1Y3QgY2lmc19hY2wgKnBkYWNsLCBjaGFyICplbmRfb2ZfYWNsLAorCQkgICAgICAgc3RydWN0IGNpZnNfc2lkICpwb3duZXJzaWQsIHN0cnVjdCBjaWZzX3NpZCAqcGdycHNpZCkKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX2FjZXMgPSAwOworCWludCBhY2xfc2l6ZTsKKwljaGFyICphY2xfYmFzZTsKKwlzdHJ1Y3QgY2lmc19udGFjZSAqKnBwbnRhY2U7CisJc3RydWN0IGNpZnNfYWNlICoqcHBhY2U7CisKKwkvKiBCQiBuZWVkIHRvIGFkZCBwYXJtIHNvIHdlIGNhbiBzdG9yZSB0aGUgU0lEIEJCICovCisKKwkvKiB2YWxpZGF0ZSB0aGF0IHdlIGRvIG5vdCBnbyBwYXN0IGVuZCBvZiBhY2wgKi8KKwlpZiAoZW5kX29mX2FjbCA8IChjaGFyICopcGRhY2wgKyBsZTE2X3RvX2NwdShwZGFjbC0+c2l6ZSkpIHsKKwkJY0VSUk9SKDEsICgiQUNMIHRvbyBzbWFsbCB0byBwYXJzZSBEQUNMIikpOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCisJY0ZZSSgxLCAoIkRBQ0wgcmV2aXNpb24gJWQgc2l6ZSAlZCBudW0gYWNlcyAlZCIsCisJCWxlMTZfdG9fY3B1KHBkYWNsLT5yZXZpc2lvbiksIGxlMTZfdG9fY3B1KHBkYWNsLT5zaXplKSwKKwkJbGUzMl90b19jcHUocGRhY2wtPm51bV9hY2VzKSkpOworI2VuZGlmCisKKwlhY2xfYmFzZSA9IChjaGFyICopcGRhY2w7CisJYWNsX3NpemUgPSBzaXplb2Yoc3RydWN0IGNpZnNfYWNsKTsKKworCW51bV9hY2VzID0gbGUzMl90b19jcHUocGRhY2wtPm51bV9hY2VzKTsKKwlpZiAobnVtX2FjZXMgID4gMCkgeworCQlwcG50YWNlID0ga21hbGxvYyhudW1fYWNlcyAqIHNpemVvZihzdHJ1Y3QgY2lmc19udGFjZSAqKSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJcHBhY2UgPSBrbWFsbG9jKG51bV9hY2VzICogc2l6ZW9mKHN0cnVjdCBjaWZzX2FjZSAqKSwKKwkJCQlHRlBfS0VSTkVMKTsKKworLyoJCWNpZnNjcmVkLT5jZWNvdW50ID0gcGRhY2wtPm51bV9hY2VzOworCQljaWZzY3JlZC0+bnRhY2VzID0ga21hbGxvYyhudW1fYWNlcyAqCisJCQlzaXplb2Yoc3RydWN0IGNpZnNfbnRhY2UgKiksIEdGUF9LRVJORUwpOworCQljaWZzY3JlZC0+YWNlcyA9IGttYWxsb2MobnVtX2FjZXMgKgorCQkJc2l6ZW9mKHN0cnVjdCBjaWZzX2FjZSAqKSwgR0ZQX0tFUk5FTCk7Ki8KKworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FjZXM7ICsraSkgeworCQkJcHBudGFjZVtpXSA9IChzdHJ1Y3QgY2lmc19udGFjZSAqKQorCQkJCQkoYWNsX2Jhc2UgKyBhY2xfc2l6ZSk7CisJCQlwcGFjZVtpXSA9IChzdHJ1Y3QgY2lmc19hY2UgKikgKChjaGFyICopcHBudGFjZVtpXSArCisJCQkJCXNpemVvZihzdHJ1Y3QgY2lmc19udGFjZSkpOworCisJCQlwYXJzZV9udGFjZShwcG50YWNlW2ldLCBlbmRfb2ZfYWNsKTsKKwkJCWlmIChlbmRfb2ZfYWNsIDwgKChjaGFyICopcHBhY2VbaV0gKworCQkJCQkobGUxNl90b19jcHUocHBudGFjZVtpXS0+c2l6ZSkgLQorCQkJCQlzaXplb2Yoc3RydWN0IGNpZnNfbnRhY2UpKSkpIHsKKwkJCQljRVJST1IoMSwgKCJBQ0wgdG9vIHNtYWxsIHRvIHBhcnNlIEFDRSIpKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZQorCQkJCXBhcnNlX2FjZShwcGFjZVtpXSwgZW5kX29mX2FjbCk7CisKKy8qCQkJbWVtY3B5KCh2b2lkICopKCYoY2lmc2NyZWQtPm50YWNlc1tpXSkpLAorCQkJCSh2b2lkICopcHBudGFjZVtpXSwKKwkJCQlzaXplb2Yoc3RydWN0IGNpZnNfbnRhY2UpKTsKKwkJCW1lbWNweSgodm9pZCAqKSgmKGNpZnNjcmVkLT5hY2VzW2ldKSksCisJCQkJKHZvaWQgKilwcGFjZVtpXSwKKwkJCQlzaXplb2Yoc3RydWN0IGNpZnNfYWNlKSk7ICovCisKKwkJCWFjbF9iYXNlID0gKGNoYXIgKilwcG50YWNlW2ldOworCQkJYWNsX3NpemUgPSBsZTE2X3RvX2NwdShwcG50YWNlW2ldLT5zaXplKTsKKwkJfQorCisJCWtmcmVlKHBwYWNlKTsKKwkJa2ZyZWUocHBudGFjZSk7CisJfQorCisJcmV0dXJuOworfQorCisKK3N0YXRpYyBpbnQgcGFyc2Vfc2lkKHN0cnVjdCBjaWZzX3NpZCAqcHNpZCwgY2hhciAqZW5kX29mX2FjbCkKK3sKKworCS8qIEJCIG5lZWQgdG8gYWRkIHBhcm0gc28gd2UgY2FuIHN0b3JlIHRoZSBTSUQgQkIgKi8KKworCS8qIHZhbGlkYXRlIHRoYXQgd2UgZG8gbm90IGdvIHBhc3QgZW5kIG9mIGFjbCAqLworCWlmIChlbmRfb2ZfYWNsIDwgKGNoYXIgKilwc2lkICsgc2l6ZW9mKHN0cnVjdCBjaWZzX3NpZCkpIHsKKwkJY0VSUk9SKDEsICgiQUNMIHRvbyBzbWFsbCB0byBwYXJzZSBTSUQiKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChwc2lkLT5udW1fc3ViYXV0aCkgeworI2lmZGVmIENPTkZJR19DSUZTX0RFQlVHMgorCQlpbnQgaTsKKwkJY0ZZSSgxLCAoIlNJRCByZXZpc2lvbiAlZCBudW1fYXV0aCAlZCBGaXJzdCBzdWJhdXRoIDB4JXgiLAorCQkJcHNpZC0+cmV2aXNpb24sIHBzaWQtPm51bV9zdWJhdXRoLCBwc2lkLT5zdWJfYXV0aFswXSkpOworCisJCWZvciAoaSA9IDA7IGkgPCBwc2lkLT5udW1fc3ViYXV0aDsgaSsrKSB7CisJCQljRllJKDEsICgiU0lEIHN1Yl9hdXRoWyVkXTogMHgleCAiLCBpLAorCQkJCWxlMzJfdG9fY3B1KHBzaWQtPnN1Yl9hdXRoW2ldKSkpOworCQl9CisKKwkJLyogQkIgYWRkIGxlbmd0aCBjaGVjayB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgaGF2ZSBodWdlCisJCQludW0gYXV0aHMgYW5kIHRoZXJlZm9yZSBnbyBvZmYgdGhlIGVuZCAqLworCQljRllJKDEsICgiUklEIDB4JXgiLAorCQkJbGUzMl90b19jcHUocHNpZC0+c3ViX2F1dGhbcHNpZC0+bnVtX3N1YmF1dGgtMV0pKSk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCisvKiBDb252ZXJ0IENJRlMgQUNMIHRvIFBPU0lYIGZvcm0gKi8KK2ludCBwYXJzZV9zZWNfZGVzYyhzdHJ1Y3QgY2lmc19udHNkICpwbnRzZCwgaW50IGFjbF9sZW4pCit7CisJaW50IHJjOworCXN0cnVjdCBjaWZzX3NpZCAqb3duZXJfc2lkX3B0ciwgKmdyb3VwX3NpZF9wdHI7CisJc3RydWN0IGNpZnNfYWNsICpkYWNsX3B0cjsgLyogbm8gbmVlZCBmb3IgU0FDTCBwdHIgKi8KKwljaGFyICplbmRfb2ZfYWNsID0gKChjaGFyICopcG50c2QpICsgYWNsX2xlbjsKKworCW93bmVyX3NpZF9wdHIgPSAoc3RydWN0IGNpZnNfc2lkICopKChjaGFyICopcG50c2QgKworCQkJCWxlMzJfdG9fY3B1KHBudHNkLT5vc2lkb2Zmc2V0KSk7CisJZ3JvdXBfc2lkX3B0ciA9IChzdHJ1Y3QgY2lmc19zaWQgKikoKGNoYXIgKilwbnRzZCArCisJCQkJbGUzMl90b19jcHUocG50c2QtPmdzaWRvZmZzZXQpKTsKKwlkYWNsX3B0ciA9IChzdHJ1Y3QgY2lmc19hY2wgKikoKGNoYXIgKilwbnRzZCArCisJCQkJbGUzMl90b19jcHUocG50c2QtPmRhY2xvZmZzZXQpKTsKKyNpZmRlZiBDT05GSUdfQ0lGU19ERUJVRzIKKwljRllJKDEsICgicmV2aXNpb24gJWQgdHlwZSAweCV4IG9vZmZzZXQgMHgleCBnb2Zmc2V0IDB4JXggIgorCQkgInNhY2xvZmZzZXQgMHgleCBkYWNsb2Zmc2V0IDB4JXgiLAorCQkgcG50c2QtPnJldmlzaW9uLCBwbnRzZC0+dHlwZSwgbGUzMl90b19jcHUocG50c2QtPm9zaWRvZmZzZXQpLAorCQkgbGUzMl90b19jcHUocG50c2QtPmdzaWRvZmZzZXQpLAorCQkgbGUzMl90b19jcHUocG50c2QtPnNhY2xvZmZzZXQpLAorCQkgbGUzMl90b19jcHUocG50c2QtPmRhY2xvZmZzZXQpKSk7CisjZW5kaWYKKwlyYyA9IHBhcnNlX3NpZChvd25lcl9zaWRfcHRyLCBlbmRfb2ZfYWNsKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXJjID0gcGFyc2Vfc2lkKGdyb3VwX3NpZF9wdHIsIGVuZF9vZl9hY2wpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcGFyc2VfZGFjbChkYWNsX3B0ciwgZW5kX29mX2FjbCwgb3duZXJfc2lkX3B0ciwgZ3JvdXBfc2lkX3B0cik7CisKKy8qCWNpZnNjcmVkLT51aWQgPSBvd25lcl9zaWRfcHRyLT5yaWQ7CisJY2lmc2NyZWQtPmdpZCA9IGdyb3VwX3NpZF9wdHItPnJpZDsKKwltZW1jcHkoKHZvaWQgKikoJihjaWZzY3JlZC0+b3NpZCkpLCAodm9pZCAqKW93bmVyX3NpZF9wdHIsCisJCQlzaXplb2YgKHN0cnVjdCBjaWZzX3NpZCkpOworCW1lbWNweSgodm9pZCAqKSgmKGNpZnNjcmVkLT5nc2lkKSksICh2b2lkICopZ3JvdXBfc2lkX3B0ciwKKwkJCXNpemVvZiAoc3RydWN0IGNpZnNfc2lkKSk7ICovCisKKworCXJldHVybiAoMCk7Cit9CisjZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNhY2wuaCBiL2ZzL2NpZnMvY2lmc2FjbC5oCmluZGV4IDVlZmYzNWQuLjQyMGY4NzggMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2FjbC5oCisrKyBiL2ZzL2NpZnMvY2lmc2FjbC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICAgZnMvY2lmcy9jaWZzYWNsLmgKICAqCi0gKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDUKKyAqICAgQ29weXJpZ2h0IChjKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwNwogICogICBBdXRob3Iocyk6IFN0ZXZlIEZyZW5jaCAoc2ZyZW5jaEB1cy5pYm0uY29tKQogICoKICAqICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTIyLDE3ICsyMiw2NSBAQAogI2lmbmRlZiBfQ0lGU0FDTF9ICiAjZGVmaW5lIF9DSUZTQUNMX0gKIAotc3RydWN0IGNpZnNfc2lkIHsKLQlfX3U4IHJldmlzaW9uOyAvKiByZXZpc2lvbiBsZXZlbCAqLwotCV9fdTggbnVtX3N1YmF1dGhzOwotCV9fdTggYXV0aG9yaXR5WzZdOwotCV9fdTMyIHN1Yl9hdXRoWzRdOwotCS8qIG5leHQgc3ViX2F1dGggaWYgYW55IC4uLiAqLworCisjZGVmaW5lIE5VTV9BVVRIUyA2IC8qIG51bWJlciBvZiBhdXRob3JpdHkgZmllbGRzICovCisjZGVmaW5lIE5VTV9TVUJBVVRIUyA1IC8qIG51bWJlciBvZiBzdWIgYXV0aG9yaXR5IGZpZWxkcyAqLworI2RlZmluZSBOVU1fV0tfU0lEUyA3IC8qIG51bWJlciBvZiB3ZWxsIGtub3duIHNpZHMgKi8KKyNkZWZpbmUgU0lETkFNRUxFTkdUSCAyMCAvKiBsb25nIGVub3VnaCBmb3IgdGhlIG9uZXMgd2UgY2FyZSBhYm91dCAqLworCisjZGVmaW5lIFJFQURfQklUICAgICAgICAweDQKKyNkZWZpbmUgV1JJVEVfQklUICAgICAgIDB4MgorI2RlZmluZSBFWEVDX0JJVCAgICAgICAgMHgxCisKKyNkZWZpbmUgVUJJVFNISUZUCTYKKyNkZWZpbmUgR0JJVFNISUZUCTMKKworc3RydWN0IGNpZnNfbnRzZCB7CisJX19sZTE2IHJldmlzaW9uOyAvKiByZXZpc2lvbiBsZXZlbCAqLworCV9fbGUxNiB0eXBlOworCV9fbGUzMiBvc2lkb2Zmc2V0OworCV9fbGUzMiBnc2lkb2Zmc2V0OworCV9fbGUzMiBzYWNsb2Zmc2V0OworCV9fbGUzMiBkYWNsb2Zmc2V0OwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotLyogZXZlcnlvbmUgKi8KLS8qIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX2V2ZXJ5b25lOyovCi0vKiBncm91cCB1c2VycyAqLwotLyogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCBzaWRfdXNlcjsqLworc3RydWN0IGNpZnNfc2lkIHsKKwlfX3U4IHJldmlzaW9uOyAvKiByZXZpc2lvbiBsZXZlbCAqLworCV9fdTggbnVtX3N1YmF1dGg7CisJX191OCBhdXRob3JpdHlbNl07CisJX19sZTMyIHN1Yl9hdXRoWzVdOyAvKiBzdWJfYXV0aFtudW1fc3ViYXV0aF0gKi8gLyogQkIgRklYTUUgZW5kaWFubmVzcyBCQiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNpZnNfYWNsIHsKKwlfX2xlMTYgcmV2aXNpb247IC8qIHJldmlzaW9uIGxldmVsICovCisJX19sZTE2IHNpemU7CisJX19sZTMyIG51bV9hY2VzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNpZnNfbnRhY2UgeyAvKiBmaXJzdCBwYXJ0IG9mIEFDRSB3aGljaCBjb250YWlucyBwZXJtcyAqLworCV9fdTggdHlwZTsKKwlfX3U4IGZsYWdzOworCV9fbGUxNiBzaXplOworCV9fbGUzMiBhY2Nlc3NfcmVxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNpZnNfYWNlIHsgLyogbGFzdCBwYXJ0IG9mIEFDRSB3aGljaCBpbmNsdWRlcyB1c2VyIGluZm8gKi8KKwlfX3U4IHJldmlzaW9uOyAvKiByZXZpc2lvbiBsZXZlbCAqLworCV9fdTggbnVtX3N1YmF1dGg7CisJX191OCBhdXRob3JpdHlbNl07CisJX19sZTMyIHN1Yl9hdXRoWzVdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNpZnNfd2tzaWQgeworCXN0cnVjdCBjaWZzX3NpZCBjaWZzc2lkOworCWNoYXIgc2lkbmFtZVtTSUROQU1FTEVOR1RIXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKworZXh0ZXJuIGludCBtYXRjaF9zaWQoc3RydWN0IGNpZnNfc2lkICopOworZXh0ZXJuIGludCBjb21wYXJlX3NpZHMoc3RydWN0IGNpZnNfc2lkICosIHN0cnVjdCBjaWZzX3NpZCAqKTsKKworI2VuZGlmIC8qICBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgKi8KIAogI2VuZGlmIC8qIF9DSUZTQUNMX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYyBiL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYwppbmRleCAzNjI3MjI5Li42MzIwNzBiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKKysrIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAl1c2VyID0ga21hbGxvYygyICsgKGxlbiAqIDIpLCBHRlBfS0VSTkVMKTsKIAlpZiAodXNlciA9PSBOVUxMKQogCQlnb3RvIGNhbGNfZXhpdF8yOwotCWxlbiA9IGNpZnNfc3RydG9VQ1ModXNlciwgc2VzLT51c2VyTmFtZSwgbGVuLCBubHNfY3ApOworCWxlbiA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKXVzZXIsIHNlcy0+dXNlck5hbWUsIGxlbiwgbmxzX2NwKTsKIAlVbmlTdHJ1cHIodXNlcik7CiAJaG1hY19tZDVfdXBkYXRlKChjaGFyICopdXNlciwgMipsZW4sIHBjdHh0KTsKIApAQCAtMzU2LDcgKzM1Niw4IEBACiAJCWRvbWFpbiA9IGttYWxsb2MoMiArIChsZW4gKiAyKSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChkb21haW4gPT0gTlVMTCkKIAkJCWdvdG8gY2FsY19leGl0XzE7Ci0JCWxlbiA9IGNpZnNfc3RydG9VQ1MoZG9tYWluLCBzZXMtPmRvbWFpbk5hbWUsIGxlbiwgbmxzX2NwKTsKKwkJbGVuID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopZG9tYWluLCBzZXMtPmRvbWFpbk5hbWUsIGxlbiwKKwkJCQkJbmxzX2NwKTsKIAkJLyogdGhlIGZvbGxvd2luZyBsaW5lIHdhcyByZW1vdmVkIHNpbmNlIGl0IGRpZG4ndCB3b3JrIHdlbGwKIAkJICAgd2l0aCBsb3dlciBjYXNlZCBkb21haW4gbmFtZSB0aGF0IHBhc3NlZCBhcyBhbiBvcHRpb24uCiAJCSAgIE1heWJlIGNvbnZlcnRpbmcgdGhlIGRvbWFpbiBuYW1lIGVhcmxpZXIgbWFrZXMgc2Vuc2UgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc2ZzLmMgYi9mcy9jaWZzL2NpZnNmcy5jCmluZGV4IGJhOGY3ODYuLmE2ZmJlYTUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2ZzLmMKKysrIGIvZnMvY2lmcy9jaWZzZnMuYwpAQCAtNDksMTAgKzQ5LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgcXVvdGFjdGxfb3BzIGNpZnNfcXVvdGFjdGxfb3BzOwogI2VuZGlmIC8qIFFVT1RBICovCiAKLSNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKLWV4dGVybiBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgY2lmc19leHBvcnRfb3BzOwotI2VuZGlmIC8qIEVYUEVSSU1FTlRBTCAqLwotCiBpbnQgY2lmc0ZZSSA9IDA7CiBpbnQgY2lmc0VSUk9SID0gMTsKIGludCB0cmFjZVNNQiA9IDA7CkBAIC0yNDAsOSArMjM2LDkgQEAKIAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAotCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fUEVSTSkgeworCWlmIChjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTk9fUEVSTSkKIAkJcmV0dXJuIDA7Ci0JfSBlbHNlIC8qIGZpbGUgbW9kZSBtaWdodCBoYXZlIGJlZW4gcmVzdHJpY3RlZCBhdCBtb3VudCB0aW1lCisJZWxzZSAvKiBmaWxlIG1vZGUgbWlnaHQgaGF2ZSBiZWVuIHJlc3RyaWN0ZWQgYXQgbW91bnQgdGltZQogCQlvbiB0aGUgY2xpZW50IChhYm92ZSBhbmQgYmV5b25kIEFDTCBvbiBzZXJ2ZXJzKSBmb3IKIAkJc2VydmVycyB3aGljaCBkbyBub3Qgc3VwcG9ydCBzZXR0aW5nIGFuZCB2aWV3aW5nIG1vZGUgYml0cywKIAkJc28gYWxsb3dpbmcgY2xpZW50IHRvIGNoZWNrIHBlcm1pc3Npb25zIGlzIHVzZWZ1bCAqLwpAQCAtMzEyLDE1ICszMDgsMTUgQEAKIAkJCQkJc2VxX3ByaW50ZihzLCAiLGRvbWFpbj0lcyIsCiAJCQkJCSAgIGNpZnNfc2ItPnRjb24tPnNlcy0+ZG9tYWluTmFtZSk7CiAJCQl9CisJCQlpZiAoKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9PVkVSUl9VSUQpIHx8CisJCQkgICAhKGNpZnNfc2ItPnRjb24tPnVuaXhfZXh0KSkKKwkJCQlzZXFfcHJpbnRmKHMsICIsdWlkPSVkIiwgY2lmc19zYi0+bW50X3VpZCk7CisJCQlpZiAoKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9PVkVSUl9HSUQpIHx8CisJCQkgICAhKGNpZnNfc2ItPnRjb24tPnVuaXhfZXh0KSkKKwkJCQlzZXFfcHJpbnRmKHMsICIsZ2lkPSVkIiwgY2lmc19zYi0+bW50X2dpZCk7CiAJCX0KIAkJaWYgKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9QT1NJWF9QQVRIUykKIAkJCXNlcV9wcmludGYocywgIixwb3NpeHBhdGhzIik7Ci0JCWlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX09WRVJSX1VJRCkgfHwKLQkJICAgIShjaWZzX3NiLT50Y29uLT51bml4X2V4dCkpCi0JCQlzZXFfcHJpbnRmKHMsICIsdWlkPSVkIiwgY2lmc19zYi0+bW50X3VpZCk7Ci0JCWlmICgoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX09WRVJSX0dJRCkgfHwKLQkJICAgIShjaWZzX3NiLT50Y29uLT51bml4X2V4dCkpCi0JCQlzZXFfcHJpbnRmKHMsICIsZ2lkPSVkIiwgY2lmc19zYi0+bW50X2dpZCk7CiAJCXNlcV9wcmludGYocywgIixyc2l6ZT0lZCIsIGNpZnNfc2ItPnJzaXplKTsKIAkJc2VxX3ByaW50ZihzLCAiLHdzaXplPSVkIiwgY2lmc19zYi0+d3NpemUpOwogCX0KQEAgLTM0Niw3ICszNDIsNyBAQAogCWlmIChwVGNvbikgewogCQljRllJKDEsICgic2V0IHR5cGU6IDB4JXggaWQ6ICVkIiwgcXVvdGFfdHlwZSwgcWlkKSk7CiAJfSBlbHNlIHsKLQkJcmV0dXJuIC1FSU87CisJCXJjID0gLUVJTzsKIAl9CiAKIAlGcmVlWGlkKHhpZCk7CkBAIC03MTYsNyArNzEyLDcgQEAKIGNpZnNfaW5pdF9pbm9kZWNhY2hlKHZvaWQpCiB7CiAJY2lmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiY2lmc19pbm9kZV9jYWNoZSIsCi0JCQkJCSAgICAgIHNpemVvZiAoc3RydWN0IGNpZnNJbm9kZUluZm8pLAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNpZnNJbm9kZUluZm8pLAogCQkJCQkgICAgICAwLCAoU0xBQl9SRUNMQUlNX0FDQ09VTlR8CiAJCQkJCQlTTEFCX01FTV9TUFJFQUQpLAogCQkJCQkgICAgICBjaWZzX2luaXRfb25jZSk7CkBAIC04MTYsOCArODEyLDggQEAKIGNpZnNfaW5pdF9taWRzKHZvaWQpCiB7CiAJY2lmc19taWRfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImNpZnNfbXB4X2lkcyIsCi0JCQkJc2l6ZW9mIChzdHJ1Y3QgbWlkX3FfZW50cnkpLCAwLAotCQkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJCQkJCSAgICBzaXplb2Yoc3RydWN0IG1pZF9xX2VudHJ5KSwgMCwKKwkJCQkJICAgIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CiAJaWYgKGNpZnNfbWlkX2NhY2hlcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtODI5LDggKzgyNSw4IEBACiAJfQogCiAJY2lmc19vcGxvY2tfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImNpZnNfb3Bsb2NrX3N0cnVjdHMiLAotCQkJCXNpemVvZiAoc3RydWN0IG9wbG9ja19xX2VudHJ5KSwgMCwKLQkJCQlTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOworCQkJCQlzaXplb2Yoc3RydWN0IG9wbG9ja19xX2VudHJ5KSwgMCwKKwkJCQkJU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKIAlpZiAoY2lmc19vcGxvY2tfY2FjaGVwID09IE5VTEwpIHsKIAkJbWVtcG9vbF9kZXN0cm95KGNpZnNfbWlkX3Bvb2xwKTsKIAkJa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfbWlkX2NhY2hlcCk7CkBAIC04ODIsNyArODc4LDggQEAKIAkJCQl0aGUgY2FsbCAqLwogCQkJCS8qIG11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsqLwogCQkJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCQkJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOworCQkJCQlyYyA9CisJCQkJCSAgIGZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKIAkJCQkJaWYgKENJRlNfSShpbm9kZSktPmNsaWVudENhbkNhY2hlUmVhZAogCQkJCQkJCQkJID09IDApIHsKIAkJCQkJCWZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOwpAQCAtOTA3LDggKzkwNCw3IEBACiAJCQkJCSAgICAwIC8qIGxlbiAqLyAsIDAgLyogb2Zmc2V0ICovLCAwLAogCQkJCQkgICAgMCwgTE9DS0lOR19BTkRYX09QTE9DS19SRUxFQVNFLAogCQkJCQkgICAgMCAvKiB3YWl0IGZsYWcgKi8pOwotCQkJCQljRllJKDEsIAotCQkJCQkgICAgICAoIk9wbG9jayByZWxlYXNlIHJjID0gJWQgIiwgcmMpKTsKKwkJCQkJY0ZZSSgxLCAoIk9wbG9jayByZWxlYXNlIHJjID0gJWQiLCByYykpOwogCQkJCX0KIAkJCX0gZWxzZQogCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCBhMjBkZTc3Li4wYTNlZTVhIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogICBmcy9jaWZzL2NpZnNmcy5oCiAgKgotICogICBDb3B5cmlnaHQgKGMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLCAyMDA1CisgKiAgIENvcHlyaWdodCAoYykgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyAgQ29ycC4sIDIwMDIsIDIwMDcKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC05OSw3ICs5OSwxMiBAQAogCQkJc2l6ZV90LCBpbnQpOwogZXh0ZXJuIHNzaXplX3QJY2lmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOwogZXh0ZXJuIHNzaXplX3QJY2lmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7Ci1leHRlcm4gaW50IGNpZnNfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCwKK2V4dGVybiBpbnQgY2lmc19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXAsCiAJCSAgICAgICB1bnNpZ25lZCBpbnQgY29tbWFuZCwgdW5zaWduZWQgbG9uZyBhcmcpOwotI2RlZmluZSBDSUZTX1ZFUlNJT04gICAiMS41MCIKKworI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorZXh0ZXJuIHN0cnVjdCBleHBvcnRfb3BlcmF0aW9ucyBjaWZzX2V4cG9ydF9vcHM7CisjZW5kaWYgLyogRVhQRVJJTUVOVEFMICovCisKKyNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNTEiCiAjZW5kaWYJCQkJLyogX0NJRlNGU19IICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggYjk4NzQyZi4uODdmNTFmMiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSAiY2lmc19mc19zYi5oIgorI2luY2x1ZGUgImNpZnNhY2wuaCIKIC8qCiAgKiBUaGUgc2l6ZXMgb2YgdmFyaW91cyBpbnRlcm5hbCB0YWJsZXMgYW5kIHN0cmluZ3MKICAqLwpAQCAtODksNyArOTAsOCBAQAogfTsKIAogZW51bSBzZWN1cml0eUVudW0gewotCUxBTk1BTiA9IDAsICAgICAgICAgICAgIC8qIExlZ2FjeSBMQU5NQU4gYXV0aCAqLworCVBMQUlOVFhUID0gMCwgCQkvKiBMZWdhY3kgd2l0aCBQbGFpbnRleHQgcGFzc3dvcmRzICovCisJTEFOTUFOLAkJCS8qIExlZ2FjeSBMQU5NQU4gYXV0aCAqLwogCU5UTE0sCQkJLyogTGVnYWN5IE5UTE0wMTIgYXV0aCB3aXRoIE5UTE0gaGFzaCAqLwogCU5UTE12MiwJCQkvKiBMZWdhY3kgTlRMTSBhdXRoIHdpdGggTlRMTXYyIGhhc2ggKi8KIAlSYXdOVExNU1NQLAkJLyogTlRMTVNTUCB3aXRob3V0IFNQTkVHTyAqLwpAQCAtMTE1LDYgKzExNywxNyBAQAogCX0gZGF0YTsKIH07CiAKK3N0cnVjdCBjaWZzX2NyZWQgeworCWludCB1aWQ7CisJaW50IGdpZDsKKwlpbnQgbW9kZTsKKwlpbnQgY2Vjb3VudDsKKwlzdHJ1Y3QgY2lmc19zaWQgb3NpZDsKKwlzdHJ1Y3QgY2lmc19zaWQgZ3NpZDsKKwlzdHJ1Y3QgY2lmc19udGFjZSAqbnRhY2VzOworCXN0cnVjdCBjaWZzX2FjZSAqYWNlczsKK307CisKIC8qCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEV4Y2VwdCB0aGUgQ0lGUyBQRFVzIHRoZW1zZWx2ZXMgYWxsIHRoZQpAQCAtMjc5LDYgKzI5Miw3IEBACiAJRklMRV9TWVNURU1fREVWSUNFX0lORk8gZnNEZXZJbmZvOwogCUZJTEVfU1lTVEVNX0FUVFJJQlVURV9JTkZPIGZzQXR0ckluZm87IC8qIG9rIGlmIGZzIG5hbWUgdHJ1bmNhdGVkICovCiAJRklMRV9TWVNURU1fVU5JWF9JTkZPIGZzVW5peEluZm87CisJdW5zaWduZWQgaXBjOjE7CQkvKiBzZXQgaWYgY29ubmVjdGlvbiB0byBJUEMkIGVnIGZvciBSUEMvUElQRVMgKi8KIAl1bnNpZ25lZCByZXRyeToxOwogCXVuc2lnbmVkIG5vY2FzZToxOwogCXVuc2lnbmVkIHVuaXhfZXh0OjE7IC8qIGlmIG9mZiBkaXNhYmxlIExpbnV4IGV4dGVuc2lvbnMgdG8gQ0lGUyBwcm90b2NvbApAQCAtMzI5LDYgKzM0Myw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsbGlzdDsgLyogbGlzdCBvZiBieXRlIHJhbmdlIGxvY2tzIHdlIGhhdmUuICovCiAJdW5zaWduZWQgY2xvc2VQZW5kOjE7CS8qIGZpbGUgaXMgbWFya2VkIHRvIGNsb3NlICovCiAJdW5zaWduZWQgaW52YWxpZEhhbmRsZToxOyAgLyogZmlsZSBjbG9zZWQgdmlhIHNlc3Npb24gYWJlbmQgKi8KKwl1bnNpZ25lZCBtZXNzYWdlTW9kZToxOyAgICAvKiBmb3IgcGlwZXM6IG1lc3NhZ2UgdnMgYnl0ZSBtb2RlICovCiAJYXRvbWljX3Qgd3J0UGVuZGluZzsgICAvKiBoYW5kbGUgaW4gdXNlIC0gZGVmZXIgY2xvc2UgKi8KIAlzdHJ1Y3Qgc2VtYXBob3JlIGZoX3NlbTsgLyogcHJldmVudHMgcmVvcGVuIHJhY2UgYWZ0ZXIgZGVhZCBzZXMqLwogCWNoYXIgKnNlYXJjaF9yZXN1bWVfbmFtZTsgLyogQkIgcmVtb3ZlbWUgQkIgKi8KQEAgLTQ2NCw2ICs0NzksOSBAQAogI2lmZGVmIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSAogI2RlZmluZSAgIENJRlNTRUNfTUFZX0xBTk1BTgkweDAwMDEwCiAjZGVmaW5lICAgQ0lGU1NFQ19NQVlfUExOVFhUCTB4MDAwMjAKKyNlbHNlCisjZGVmaW5lICAgQ0lGU1NFQ19NQVlfTEFOTUFOICAgIDAKKyNkZWZpbmUgICBDSUZTU0VDX01BWV9QTE5UWFQgICAgMAogI2VuZGlmIC8qIHdlYWsgcGFzc3dvcmRzICovCiAjZGVmaW5lICAgQ0lGU1NFQ19NQVlfU0VBTAkweDAwMDQwIC8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCiAKQEAgLTQ3NywxNCArNDk1LDIzIEBACiAjaWZkZWYgQ09ORklHX0NJRlNfV0VBS19QV19IQVNICiAjZGVmaW5lICAgQ0lGU1NFQ19NVVNUX0xBTk1BTgkweDEwMDEwCiAjZGVmaW5lICAgQ0lGU1NFQ19NVVNUX1BMTlRYVAkweDIwMDIwCi0jZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4MzcwMzcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLworI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAorI2RlZmluZSAgIENJRlNTRUNfTUFTSyAgICAgICAgICAweDNGMDNGIC8qIGFsbG93cyB3ZWFrIHNlY3VyaXR5IGJ1dCBhbHNvIGtyYjUgKi8KICNlbHNlCi0jZGVmaW5lCSAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4MDcwMDcgLyogZmxhZ3Mgc3VwcG9ydGVkIGlmIG5vIHdlYWsgY29uZmlnICovCisjZGVmaW5lICAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4MzcwMzcgLyogY3VycmVudCBmbGFncyBzdXBwb3J0ZWQgaWYgd2VhayAqLworI2VuZGlmIC8qIFVQQ0FMTCAqLworI2Vsc2UgLyogZG8gbm90IGFsbG93IHdlYWsgcHcgaGFzaCAqLworI2lmZGVmIENPTkZJR19DSUZTX1VQQ0FMTAorI2RlZmluZSAgIENJRlNTRUNfTUFTSyAgICAgICAgICAweDBGMDBGIC8qIGZsYWdzIHN1cHBvcnRlZCBpZiBubyB3ZWFrIGFsbG93ZWQgKi8KKyNlbHNlCisjZGVmaW5lCSAgQ0lGU1NFQ19NQVNLICAgICAgICAgIDB4MDcwMDcgLyogZmxhZ3Mgc3VwcG9ydGVkIGlmIG5vIHdlYWsgYWxsb3dlZCAqLworI2VuZGlmIC8qIFVQQ0FMTCAqLwogI2VuZGlmIC8qIFdFQUtfUFdfSEFTSCAqLwogI2RlZmluZSAgIENJRlNTRUNfTVVTVF9TRUFMCTB4NDAwNDAgLyogbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAogI2RlZmluZSAgIENJRlNTRUNfREVGICBDSUZTU0VDX01BWV9TSUdOIHwgQ0lGU1NFQ19NQVlfTlRMTSB8IENJRlNTRUNfTUFZX05UTE1WMgogI2RlZmluZSAgIENJRlNTRUNfTUFYICBDSUZTU0VDX01VU1RfU0lHTiB8IENJRlNTRUNfTVVTVF9OVExNVjIKKyNkZWZpbmUgICBDSUZTU0VDX0FVVEhfTUFTSyAoQ0lGU1NFQ19NQVlfTlRMTSB8IENJRlNTRUNfTUFZX05UTE1WMiB8IENJRlNTRUNfTUFZX0xBTk1BTiB8IENJRlNTRUNfTUFZX1BMTlRYVCB8IENJRlNTRUNfTUFZX0tSQjUpCiAvKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBBbGwgY29uc3RhbnRzIGdvIGhlcmUKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3BkdS5oIGIvZnMvY2lmcy9jaWZzcGR1LmgKaW5kZXggNmEyMDU2ZS4uYzQxZmY3NCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTIxNSw2ICsyMTUsMTIgQEAKIAkJCQkJIC8qIGZpbGVfZXhlY3V0ZSwgZmlsZV9yZWFkX2F0dHJpYnV0ZXMqLwogCQkJCQkgLyogd3JpdGVfZGFjLCBhbmQgZGVsZXRlLiAgICAgICAgICAgKi8KIAorI2RlZmluZSBGSUxFX1JFQURfUklHSFRTIChGSUxFX1JFQURfREFUQSB8IEZJTEVfUkVBRF9FQSB8IEZJTEVfUkVBRF9BVFRSSUJVVEVTKQorI2RlZmluZSBGSUxFX1dSSVRFX1JJR0hUUyAoRklMRV9XUklURV9EQVRBIHwgRklMRV9BUFBFTkRfREFUQSBcCisJCQkJfCBGSUxFX1dSSVRFX0VBIHwgRklMRV9XUklURV9BVFRSSUJVVEVTKQorI2RlZmluZSBGSUxFX0VYRUNfUklHSFRTIChGSUxFX0VYRUNVVEUpCisKKwogLyoKICAqIEludmFsaWQgcmVhZGRpciBoYW5kbGUKICAqLwpAQCAtMzYwLDEwICszNjYsMTAgQEAKIAlfX3U4IFdvcmRDb3VudDsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAvKiBnaXZlbiBhIHBvaW50ZXIgdG8gYW4gc21iX2hkciByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYnl0ZSBjb3VudCAqLwotI2RlZmluZSBCQ0Moc21iX3ZhcikgKCAqKF9fdTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiogc21iX3Zhci0+V29yZENvdW50KSApICkKLSNkZWZpbmUgQkNDX0xFKHNtYl92YXIpICggKihfX2xlMTYgKikoKGNoYXIgKilzbWJfdmFyICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArICgyKiBzbWJfdmFyLT5Xb3JkQ291bnQpICkgKQorI2RlZmluZSBCQ0Moc21iX3ZhcikgKCAqKF9fdTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIHNtYl92YXItPldvcmRDb3VudCkpKQorI2RlZmluZSBCQ0NfTEUoc21iX3ZhcikgKCAqKF9fbGUxNiAqKSgoY2hhciAqKXNtYl92YXIgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBzbWJfdmFyLT5Xb3JkQ291bnQpKSkKIC8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyIHJldHJpZXZlIHRoZSBwb2ludGVyIHRvIHRoZSBieXRlIGFyZWEgKi8KLSNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpICgodW5zaWduZWQgY2hhciAqKXNtYl92YXIgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIqIHNtYl92YXItPldvcmRDb3VudCkgKyAyICkKKyNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpICgodW5zaWduZWQgY2hhciAqKXNtYl92YXIgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBzbWJfdmFyLT5Xb3JkQ291bnQpICsgMikKIAogLyoKICAqIENvbXB1dGVyIE5hbWUgTGVuZ3RoIChzaW5jZSBOZXRiaW9zIG5hbWUgd2FzIGxlbmd0aCAxNiB3aXRoIGxhc3QgYnl0ZSAweDIwKQpAQCAtNzE2LDYgKzcyMiwxNCBAQAogI2RlZmluZSBSRVFfT1BFTkRJUk9OTFkgICAgMHgwMDAwMDAwOAogI2RlZmluZSBSRVFfRVhURU5ERURfSU5GTyAgMHgwMDAwMDAxMAogCisvKiBGaWxlIHR5cGUgKi8KKyNkZWZpbmUgRElTS19UWVBFCQkweDAwMDAKKyNkZWZpbmUgQllURV9QSVBFX1RZUEUJCTB4MDAwMQorI2RlZmluZSBNRVNTQUdFX1BJUEVfVFlQRQkweDAwMDIKKyNkZWZpbmUgUFJJTlRFUl9UWVBFCQkweDAwMDMKKyNkZWZpbmUgQ09NTV9ERVZfVFlQRQkJMHgwMDA0CisjZGVmaW5lIFVOS05PV05fVFlQRQkJMHhGRkZGCisKIHR5cGVkZWYgc3RydWN0IHNtYl9jb21fb3Blbl9yZXEgewkvKiBhbHNvIGhhbmRsZXMgY3JlYXRlICovCiAJc3RydWN0IHNtYl9oZHIgaGRyOwkvKiB3Y3QgPSAyNCAqLwogCV9fdTggQW5kWENvbW1hbmQ7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNwcm90by5oIGIvZnMvY2lmcy9jaWZzcHJvdG8uaAppbmRleCAwNGE2OWRhLi4xYTg4MzY2IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNwcm90by5oCisrKyBiL2ZzL2NpZnMvY2lmc3Byb3RvLmgKQEAgLTUwLDcgKzUwLDggQEAKIAkJCWludCAqIC8qIGJ5dGVzIHJldHVybmVkICovICwgY29uc3QgaW50IGxvbmdfb3ApOwogZXh0ZXJuIGludCBTZW5kUmVjZWl2ZTIoY29uc3QgdW5zaWduZWQgaW50IC8qIHhpZCAqLyAsIHN0cnVjdCBjaWZzU2VzSW5mbyAqLAogCQkJc3RydWN0IGt2ZWMgKiwgaW50IC8qIG52ZWMgdG8gc2VuZCAqLywKLQkJCWludCAqIC8qIHR5cGUgb2YgYnVmIHJldHVybmVkICovICwgY29uc3QgaW50IGxvbmdfb3ApOworCQkJaW50ICogLyogdHlwZSBvZiBidWYgcmV0dXJuZWQgKi8gLCBjb25zdCBpbnQgbG9uZ19vcCwKKwkJCWNvbnN0IGludCBsb2dFcnJvciAvKiB3aGV0aGVyIHRvIGxvZyBzdGF0dXMgY29kZSovICk7CiBleHRlcm4gaW50IFNlbmRSZWNlaXZlQmxvY2tpbmdMb2NrKGNvbnN0IHVuc2lnbmVkIGludCAvKiB4aWQgKi8gLAogCQkJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICosCiAJCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCkBAIC02NSw3ICs2Niw3IEBACiBleHRlcm4gaW50IGRlY29kZV9uZWdUb2tlbkluaXQodW5zaWduZWQgY2hhciAqc2VjdXJpdHlfYmxvYiwgaW50IGxlbmd0aCwKIAkJCWVudW0gc2VjdXJpdHlFbnVtICpzZWNUeXBlKTsKIGV4dGVybiBpbnQgY2lmc19pbmV0X3B0b24oaW50LCBjaGFyICpzb3VyY2UsIHZvaWQgKmRzdCk7Ci1leHRlcm4gaW50IG1hcF9zbWJfdG9fbGludXhfZXJyb3Ioc3RydWN0IHNtYl9oZHIgKnNtYik7CitleHRlcm4gaW50IG1hcF9zbWJfdG9fbGludXhfZXJyb3Ioc3RydWN0IHNtYl9oZHIgKnNtYiwgaW50IGxvZ0Vycik7CiBleHRlcm4gdm9pZCBoZWFkZXJfYXNzZW1ibGUoc3RydWN0IHNtYl9oZHIgKiwgY2hhciAvKiBjb21tYW5kICovICwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICosIGludCAvKiBsZW5ndGggb2YKIAkJCSAgICBmaXhlZCBzZWN0aW9uICh3b3JkIGNvdW50KSBpbiB0d28gYnl0ZSB1bml0cyAqLyk7CkBAIC0zMDQsMTIgKzMwNSwxMyBAQAogCQkJCSBjb25zdCBjaGFyICpwYXNzKTsKIGV4dGVybiBpbnQgQ2FsY05UTE12Ml9wYXJ0aWFsX21hY19rZXkoc3RydWN0IGNpZnNTZXNJbmZvICosCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICopOwotZXh0ZXJuIHZvaWQgQ2FsY05UTE12Ml9yZXNwb25zZShjb25zdCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKiwgY2hhciAqICk7CitleHRlcm4gdm9pZCBDYWxjTlRMTXYyX3Jlc3BvbnNlKGNvbnN0IHN0cnVjdCBjaWZzU2VzSW5mbyAqLCBjaGFyICopOwogZXh0ZXJuIHZvaWQgc2V0dXBfbnRsbXYyX3JzcChzdHJ1Y3QgY2lmc1Nlc0luZm8gKiwgY2hhciAqLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICopOwogI2lmZGVmIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSAogZXh0ZXJuIHZvaWQgY2FsY19sYW5tYW5faGFzaChzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywgY2hhciAqbG5tX3Nlc3Npb25fa2V5KTsKICNlbmRpZiAvKiBDSUZTX1dFQUtfUFdfSEFTSCAqLworZXh0ZXJuIGludCBwYXJzZV9zZWNfZGVzYyhzdHJ1Y3QgY2lmc19udHNkICosIGludCk7CiBleHRlcm4gaW50IENJRlNTTUJDb3B5KGludCB4aWQsCiAJCQlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpzb3VyY2VfdGNvbiwKIAkJCWNvbnN0IGNoYXIgKmZyb21OYW1lLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzc21iLmMgYi9mcy9jaWZzL2NpZnNzbWIuYwppbmRleCA4ZWIxMDJmLi5mMGQ5YTQ4IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNzbWIuYworKysgYi9mcy9jaWZzL2NpZnNzbWIuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKKyNpbmNsdWRlICJjaWZzYWNsLmgiCiAjaW5jbHVkZSAiY2lmc3Byb3RvLmgiCiAjaW5jbHVkZSAiY2lmc191bmljb2RlLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgotI2luY2x1ZGUgImNpZnNhY2wuaCIKIAogI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCiBzdGF0aWMgc3RydWN0IHsKQEAgLTk0LDkgKzk0LDggQEAKIAl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUodG1wLCB0bXAxLCAmcFRjb24tPm9wZW5GaWxlTGlzdCkgewogCQlvcGVuX2ZpbGUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNGaWxlSW5mbywgdGxpc3QpOwotCQlpZiAob3Blbl9maWxlKSB7CisJCWlmIChvcGVuX2ZpbGUpCiAJCQlvcGVuX2ZpbGUtPmludmFsaWRIYW5kbGUgPSBUUlVFOwotCQl9CiAJfQogCXdyaXRlX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJLyogQkIgQWRkIGNhbGwgdG8gaW52YWxpZGF0ZV9pbm9kZXMoc2IpIGZvciBhbGwgc3VwZXJibG9ja3MgbW91bnRlZApAQCAtNDM5LDggKzQzOCwxMyBAQAogCiAJcFNNQi0+aGRyLk1pZCA9IEdldE5leHRNaWQoc2VydmVyKTsKIAlwU01CLT5oZHIuRmxhZ3MyIHw9IChTTUJGTEcyX1VOSUNPREUgfCBTTUJGTEcyX0VSUl9TVEFUVVMpOworCiAJaWYgKChzZWNGbGFncyAmIENJRlNTRUNfTVVTVF9LUkI1KSA9PSBDSUZTU0VDX01VU1RfS1JCNSkKIAkJcFNNQi0+aGRyLkZsYWdzMiB8PSBTTUJGTEcyX0VYVF9TRUM7CisJZWxzZSBpZiAoKHNlY0ZsYWdzICYgQ0lGU1NFQ19BVVRIX01BU0spID09IENJRlNTRUNfTUFZX0tSQjUpIHsKKwkJY0ZZSSgxLCAoIktlcmJlcm9zIG9ubHkgbWVjaGFuaXNtLCBlbmFibGUgZXh0ZW5kZWQgc2VjdXJpdHkiKSk7CisJCXBTTUItPmhkci5GbGFnczIgfD0gU01CRkxHMl9FWFRfU0VDOworCX0KIAogCWNvdW50ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQ0lGU19OVU1fUFJPVDsgaSsrKSB7CkBAIC01MTMsNyArNTE3LDcgQEAKIAkJCQkoaW50KXRzLnR2X3NlYywgKGludCl1dGMudHZfc2VjLAogCQkJCShpbnQpKHV0Yy50dl9zZWMgLSB0cy50dl9zZWMpKSk7CiAJCQl2YWwgPSAoaW50KSh1dGMudHZfc2VjIC0gdHMudHZfc2VjKTsKLQkJCXNlY29uZHMgPSB2YWwgPCAwID8gLXZhbCA6IHZhbDsKKwkJCXNlY29uZHMgPSBhYnModmFsKTsKIAkJCXJlc3VsdCA9IChzZWNvbmRzIC8gTUlOX1RaX0FESikgKiBNSU5fVFpfQURKOwogCQkJcmVtYWluID0gc2Vjb25kcyAlIE1JTl9UWl9BREo7CiAJCQlpZiAocmVtYWluID49IChNSU5fVFpfQURKIC8gMikpCkBAIC01NzQsNyArNTc4LDIwIEBACiAJCXNlcnZlci0+c2VjVHlwZSA9IE5UTE07CiAJZWxzZSBpZiAoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9OVExNVjIpCiAJCXNlcnZlci0+c2VjVHlwZSA9IE5UTE12MjsKLQkvKiBlbHNlIGtyYjUgLi4uIGFueSBvdGhlcnMgLi4uICovCisJZWxzZSBpZiAoc2VjRmxhZ3MgJiBDSUZTU0VDX01BWV9LUkI1KQorCQlzZXJ2ZXItPnNlY1R5cGUgPSBLZXJiZXJvczsKKwllbHNlIGlmIChzZWNGbGFncyAmIENJRlNTRUNfTUFZX0xBTk1BTikKKwkJc2VydmVyLT5zZWNUeXBlID0gTEFOTUFOOworLyogI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAorCWVsc2UgaWYgKHNlY0ZsYWdzICYgQ0lGU1NFQ19NQVlfUExOVFhUKQorCQlzZXJ2ZXItPnNlY1R5cGUgPSA/PworI2VuZGlmICovCisJZWxzZSB7CisJCXJjID0gLUVPUE5PVFNVUFA7CisJCWNFUlJPUigxLCAoIkludmFsaWQgc2VjdXJpdHkgdHlwZSIpKTsKKwkJZ290byBuZWdfZXJyX2V4aXQ7CisJfQorCS8qIGVsc2UgLi4uIGFueSBvdGhlcnMgLi4uPyAqLwogCiAJLyogb25lIGJ5dGUsIHNvIG5vIG5lZWQgdG8gY29udmVydCB0aGlzIG9yIEVuY3J5cHRpb25LZXlMZW4gZnJvbQogCSAgIGxpdHRsZSBlbmRpYW4gKi8KQEAgLTYwNCwyMiArNjIxLDI2IEBACiAJaWYgKChwU01Cci0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfRVhUX1NFQykgJiYKIAkJKHNlcnZlci0+Y2FwYWJpbGl0aWVzICYgQ0FQX0VYVEVOREVEX1NFQ1VSSVRZKSkgewogCQljb3VudCA9IHBTTUJyLT5CeXRlQ291bnQ7Ci0JCWlmIChjb3VudCA8IDE2KQorCQlpZiAoY291bnQgPCAxNikgewogCQkJcmMgPSAtRUlPOwotCQllbHNlIGlmIChjb3VudCA9PSAxNikgewotCQkJc2VydmVyLT5zZWNUeXBlID0gUmF3TlRMTVNTUDsKLQkJCWlmIChzZXJ2ZXItPnNvY2tldFVzZUNvdW50LmNvdW50ZXIgPiAxKSB7Ci0JCQkJaWYgKG1lbWNtcChzZXJ2ZXItPnNlcnZlcl9HVUlELAotCQkJCQkgICBwU01Cci0+dS5leHRlbmRlZF9yZXNwb25zZS4KLQkJCQkJICAgR1VJRCwgMTYpICE9IDApIHsKLQkJCQkJY0ZZSSgxLCAoInNlcnZlciBVSUQgY2hhbmdlZCIpKTsKLQkJCQkJbWVtY3B5KHNlcnZlci0+c2VydmVyX0dVSUQsCi0JCQkJCQlwU01Cci0+dS5leHRlbmRlZF9yZXNwb25zZS5HVUlELAotCQkJCQkJMTYpOwotCQkJCX0KLQkJCX0gZWxzZQorCQkJZ290byBuZWdfZXJyX2V4aXQ7CisJCX0KKworCQlpZiAoc2VydmVyLT5zb2NrZXRVc2VDb3VudC5jb3VudGVyID4gMSkgeworCQkJaWYgKG1lbWNtcChzZXJ2ZXItPnNlcnZlcl9HVUlELAorCQkJCSAgIHBTTUJyLT51LmV4dGVuZGVkX3Jlc3BvbnNlLgorCQkJCSAgIEdVSUQsIDE2KSAhPSAwKSB7CisJCQkJY0ZZSSgxLCAoInNlcnZlciBVSUQgY2hhbmdlZCIpKTsKIAkJCQltZW1jcHkoc2VydmVyLT5zZXJ2ZXJfR1VJRCwKLQkJCQkgICAgICAgcFNNQnItPnUuZXh0ZW5kZWRfcmVzcG9uc2UuR1VJRCwgMTYpOworCQkJCQlwU01Cci0+dS5leHRlbmRlZF9yZXNwb25zZS5HVUlELAorCQkJCQkxNik7CisJCQl9CisJCX0gZWxzZQorCQkJbWVtY3B5KHNlcnZlci0+c2VydmVyX0dVSUQsCisJCQkgICAgICAgcFNNQnItPnUuZXh0ZW5kZWRfcmVzcG9uc2UuR1VJRCwgMTYpOworCisJCWlmIChjb3VudCA9PSAxNikgeworCQkJc2VydmVyLT5zZWNUeXBlID0gUmF3TlRMTVNTUDsKIAkJfSBlbHNlIHsKIAkJCXJjID0gZGVjb2RlX25lZ1Rva2VuSW5pdChwU01Cci0+dS5leHRlbmRlZF9yZXNwb25zZS4KIAkJCQkJCSBTZWN1cml0eUJsb2IsCkBAIC02NDIsMTAgKzY2MywxMiBAQAogCQkvKiBNVVNUX1NJR04gYWxyZWFkeSBpbmNsdWRlcyB0aGUgTUFZX1NJR04gRkxBRwogCQkgICBzbyBpZiB0aGlzIGlzIHplcm8gaXQgbWVhbnMgdGhhdCBzaWduaW5nIGlzIGRpc2FibGVkICovCiAJCWNGWUkoMSwgKCJTaWduaW5nIGRpc2FibGVkIikpOwotCQlpZiAoc2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9TSUdOX1JFUVVJUkVEKQorCQlpZiAoc2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9TSUdOX1JFUVVJUkVEKSB7CiAJCQljRVJST1IoMSwgKCJTZXJ2ZXIgcmVxdWlyZXMgIgotCQkJCSAgICIvcHJvYy9mcy9jaWZzL1BhY2tldFNpZ25pbmdFbmFibGVkICIKLQkJCQkgICAidG8gYmUgb24iKSk7CisJCQkJICAgInBhY2tldCBzaWduaW5nIHRvIGJlIGVuYWJsZWQgaW4gIgorCQkJCSAgICIvcHJvYy9mcy9jaWZzL1NlY3VyaXR5RmxhZ3MuIikpOworCQkJcmMgPSAtRU9QTk9UU1VQUDsKKwkJfQogCQlzZXJ2ZXItPnNlY01vZGUgJj0KIAkJCX4oU0VDTU9ERV9TSUdOX0VOQUJMRUQgfCBTRUNNT0RFX1NJR05fUkVRVUlSRUQpOwogCX0gZWxzZSBpZiAoKHNlY0ZsYWdzICYgQ0lGU1NFQ19NVVNUX1NJR04pID09IENJRlNTRUNfTVVTVF9TSUdOKSB7CkBAIC0xMDUyLDcgKzEwNzUsNyBAQAogCQkJCUluZm9ybWF0aW9uTGV2ZWwpIC0gNDsKIAlvZmZzZXQgPSBwYXJhbV9vZmZzZXQgKyBwYXJhbXM7CiAJcGRhdGEgPSAoT1BFTl9QU1hfUkVRICopKCgoY2hhciAqKSZwU01CLT5oZHIuUHJvdG9jb2wpICsgb2Zmc2V0KTsKLQlwZGF0YS0+TGV2ZWwgPSBTTUJfUVVFUllfRklMRV9VTklYX0JBU0lDOworCXBkYXRhLT5MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9GSUxFX1VOSVhfQkFTSUMpOwogCXBkYXRhLT5QZXJtaXNzaW9ucyA9IGNwdV90b19sZTY0KG1vZGUpOwogCXBkYXRhLT5Qb3NpeE9wZW5GbGFncyA9IGNwdV90b19sZTMyKHBvc2l4X2ZsYWdzKTsKIAlwZGF0YS0+T3BlbkZsYWdzID0gIGNwdV90b19sZTMyKCpwT3Bsb2NrKTsKQEAgLTEwOTgsOCArMTEyMSw4IEBACiAJaWYgKGNwdV90b19sZTMyKEZJTEVfQ1JFQVRFKSA9PSBwc3hfcnNwLT5DcmVhdGVBY3Rpb24pCiAJCSpwT3Bsb2NrIHw9IENJRlNfQ1JFQVRFX0FDVElPTjsKIAkvKiBjaGVjayB0byBtYWtlIHN1cmUgcmVzcG9uc2UgZGF0YSBpcyB0aGVyZSAqLwotCWlmIChwc3hfcnNwLT5SZXR1cm5lZExldmVsICE9IFNNQl9RVUVSWV9GSUxFX1VOSVhfQkFTSUMpIHsKLQkJcFJldERhdGEtPlR5cGUgPSAtMTsgLyogdW5rbm93biAqLworCWlmIChwc3hfcnNwLT5SZXR1cm5lZExldmVsICE9IGNwdV90b19sZTE2KFNNQl9RVUVSWV9GSUxFX1VOSVhfQkFTSUMpKSB7CisJCXBSZXREYXRhLT5UeXBlID0gY3B1X3RvX2xlMzIoLTEpOyAvKiB1bmtub3duICovCiAjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCiAJCWNGWUkoMSwgKCJ1bmtub3duIHR5cGUiKSk7CiAjZW5kaWYKQEAgLTExMDcsMTIgKzExMzAsMTIgQEAKIAkJaWYgKHBTTUJyLT5CeXRlQ291bnQgPCBzaXplb2YoT1BFTl9QU1hfUlNQKQogCQkJCQkrIHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTykpIHsKIAkJCWNFUlJPUigxLCAoIk9wZW4gcmVzcG9uc2UgZGF0YSB0b28gc21hbGwiKSk7Ci0JCQlwUmV0RGF0YS0+VHlwZSA9IC0xOworCQkJcFJldERhdGEtPlR5cGUgPSBjcHVfdG9fbGUzMigtMSk7CiAJCQlnb3RvIHBzeF9jcmVhdGVfZXJyOwogCQl9CiAJCW1lbWNweSgoY2hhciAqKSBwUmV0RGF0YSwKIAkJCShjaGFyICopcHN4X3JzcCArIHNpemVvZihPUEVOX1BTWF9SU1ApLAotCQkJc2l6ZW9mIChGSUxFX1VOSVhfQkFTSUNfSU5GTykpOworCQkJc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSk7CiAJfQogCiBwc3hfY3JlYXRlX2VycjoKQEAgLTExOTMsOSArMTIxNiw5IEBACiAJfQogCWlmICgqcE9wbG9jayAmIFJFUV9PUExPQ0spCiAJCXBTTUItPk9wZW5GbGFncyA9IGNwdV90b19sZTE2KFJFUV9PUExPQ0spOwotCWVsc2UgaWYgKCpwT3Bsb2NrICYgUkVRX0JBVENIT1BMT0NLKSB7CisJZWxzZSBpZiAoKnBPcGxvY2sgJiBSRVFfQkFUQ0hPUExPQ0spCiAJCXBTTUItPk9wZW5GbGFncyA9IGNwdV90b19sZTE2KFJFUV9CQVRDSE9QTE9DSyk7Ci0JfQorCiAJcFNNQi0+T3BlbkZsYWdzIHw9IGNwdV90b19sZTE2KFJFUV9NT1JFX0lORk8pOwogCS8qIEJCIGZpeG1lIGFkZCBjb252ZXJzaW9uIGZvciBhY2Nlc3NfZmxhZ3MgdG8gYml0cyAwIC0gMiBvZiBtb2RlICovCiAJLyogMCA9IHJlYWQKQEAgLTEzMTAsOSArMTMzMyw4IEBACiAJfQogCWlmICgqcE9wbG9jayAmIFJFUV9PUExPQ0spCiAJCXBTTUItPk9wZW5GbGFncyA9IGNwdV90b19sZTMyKFJFUV9PUExPQ0spOwotCWVsc2UgaWYgKCpwT3Bsb2NrICYgUkVRX0JBVENIT1BMT0NLKSB7CisJZWxzZSBpZiAoKnBPcGxvY2sgJiBSRVFfQkFUQ0hPUExPQ0spCiAJCXBTTUItPk9wZW5GbGFncyA9IGNwdV90b19sZTMyKFJFUV9CQVRDSE9QTE9DSyk7Ci0JfQogCXBTTUItPkRlc2lyZWRBY2Nlc3MgPSBjcHVfdG9fbGUzMihhY2Nlc3NfZmxhZ3MpOwogCXBTTUItPkFsbG9jYXRpb25TaXplID0gMDsKIAkvKiBzZXQgZmlsZSBhcyBzeXN0ZW0gZmlsZSBpZiBzcGVjaWFsIGZpbGUgc3VjaApAQCAtMTQyNCw5ICsxNDQ2LDggQEAKIAogCWlvdlswXS5pb3ZfYmFzZSA9IChjaGFyICopcFNNQjsKIAlpb3ZbMF0uaW92X2xlbiA9IHBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArIDQ7Ci0JcmMgPSBTZW5kUmVjZWl2ZTIoeGlkLCB0Y29uLT5zZXMsIGlvdiwKLQkJCSAgMSAvKiBudW0gaW92ZWNzICovLAotCQkJICAmcmVzcF9idWZfdHlwZSwgMCk7CisJcmMgPSBTZW5kUmVjZWl2ZTIoeGlkLCB0Y29uLT5zZXMsIGlvdiwgMSAvKiBudW0gaW92ZWNzICovLAorCQkJICZyZXNwX2J1Zl90eXBlLCAwIC8qIG5vdCBsb25nIG9wICovLCAxIC8qIGxvZyBlcnIgKi8gKTsKIAljaWZzX3N0YXRzX2luYygmdGNvbi0+bnVtX3JlYWRzKTsKIAlwU01CciA9IChSRUFEX1JTUCAqKWlvdlswXS5pb3ZfYmFzZTsKIAlpZiAocmMpIHsKQEAgLTE0NDYsMTEgKzE0NjcsMTEgQEAKIAkJCSpuYnl0ZXMgPSAwOwogCQl9IGVsc2UgewogCQkJcFJlYWREYXRhID0gKGNoYXIgKikgKCZwU01Cci0+aGRyLlByb3RvY29sKSArCi0JCQkgICAgbGUxNl90b19jcHUocFNNQnItPkRhdGFPZmZzZXQpOwotLyogICAgICAgICAgICAgICAgICAgICAgaWYgKHJjID0gY29weV90b191c2VyKGJ1ZiwgcFJlYWREYXRhLCBkYXRhX2xlbmd0aCkpIHsKKwkJCQkJbGUxNl90b19jcHUocFNNQnItPkRhdGFPZmZzZXQpOworLyoJCQlpZiAocmMgPSBjb3B5X3RvX3VzZXIoYnVmLCBwUmVhZERhdGEsIGRhdGFfbGVuZ3RoKSkgewogCQkJCWNFUlJPUigxLCgiRmF1bHRpbmcgb24gcmVhZCByYyA9ICVkIixyYykpOwogCQkJCXJjID0gLUVGQVVMVDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0qLyAvKiBjYW4gbm90IHVzZSBjb3B5X3RvX3VzZXIgd2hlbiB1c2luZyBwYWdlIGNhY2hlKi8KKwkJCX0qLyAvKiBjYW4gbm90IHVzZSBjb3B5X3RvX3VzZXIgd2hlbiB1c2luZyBwYWdlIGNhY2hlKi8KIAkJCWlmICgqYnVmKQogCQkJCW1lbWNweSgqYnVmLCBwUmVhZERhdGEsIGRhdGFfbGVuZ3RoKTsKIAkJfQpAQCAtMTY0NSw3ICsxNjY2LDcgQEAKIAogCiAJcmMgPSBTZW5kUmVjZWl2ZTIoeGlkLCB0Y29uLT5zZXMsIGlvdiwgbl92ZWMgKyAxLCAmcmVzcF9idWZfdHlwZSwKLQkJCSAgbG9uZ19vcCk7CisJCQkgIGxvbmdfb3AsIDAgLyogZG8gbm90IGxvZyBTVEFUVVMgY29kZSAqLyApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fd3JpdGVzKTsKIAlpZiAocmMpIHsKIAkJY0ZZSSgxLCAoIlNlbmQgZXJyb3IgV3JpdGUyID0gJWQiLCByYykpOwpAQCAtMjUzOCw3ICsyNTU5LDcgQEAKIAkJY0ZZSSgxLCAoImRhdGEgc3RhcnRzIGFmdGVyIGVuZCBvZiBzbWIiKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSBpZiAoZGF0YV9jb3VudCArICpwcGRhdGEgPiBlbmRfb2Zfc21iKSB7Ci0JCWNGWUkoMSwoImRhdGEgJXAgKyBjb3VudCAlZCAoJXApIGVuZHMgYWZ0ZXIgZW5kIG9mIHNtYiAlcCBzdGFydCAlcCIsCisJCWNGWUkoMSwgKCJkYXRhICVwICsgY291bnQgJWQgKCVwKSBlbmRzIGFmdGVyIGVuZCBvZiBzbWIgJXAgc3RhcnQgJXAiLAogCQkJKnBwZGF0YSwgZGF0YV9jb3VudCwgKGRhdGFfY291bnQgKyAqcHBkYXRhKSwKIAkJCWVuZF9vZl9zbWIsIHBTTUJyKSk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjYxNSw3ICsyNjM2LDcgQEAKIAkJCQkJcmVwYXJzZV9idWYtPlRhcmdldE5hbWVPZmZzZXQgKwogCQkJCQlyZXBhcnNlX2J1Zi0+VGFyZ2V0TmFtZUxlbikgPgogCQkJCQkJZW5kX29mX3NtYikgewotCQkJCQljRllJKDEsKCJyZXBhcnNlIGJ1ZiBnb2VzIGJleW9uZCBTTUIiKSk7CisJCQkJCWNGWUkoMSwgKCJyZXBhcnNlIGJ1ZiBiZXlvbmQgU01CIikpOwogCQkJCQlyYyA9IC1FSU87CiAJCQkJCWdvdG8gcXJlcGFyc2Vfb3V0OwogCQkJCX0KQEAgLTMwNDIsMjUgKzMwNjMsMTIgQEAKIAogI2VuZGlmIC8qIENPTkZJR19QT1NJWCAqLwogCi0KLS8qIHNlY3VyaXR5IGlkIGZvciBldmVyeW9uZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjaWZzX3NpZCBzaWRfZXZlcnlvbmUgPQotCQl7MSwgMSwgezAsIDAsIDAsIDAsIDAsIDB9LCB7MCwgMCwgMCwgMH19OwotLyogZ3JvdXAgdXNlcnMgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2lmc19zaWQgc2lkX3VzZXIgPQotCQl7MSwgMiAsIHswLCAwLCAwLCAwLCAwLCA1fSwgezMyLCA1NDUsIDAsIDB9fTsKLQotLyogQ29udmVydCBDSUZTIEFDTCB0byBQT1NJWCBmb3JtICovCi1zdGF0aWMgaW50IHBhcnNlX3NlY19kZXNjKHN0cnVjdCBjaWZzX3NpZCAqcHNlY19kZXNjLCBpbnQgYWNsX2xlbikKLXsKLQlyZXR1cm4gMDsKLX0KLQorI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogLyogR2V0IFNlY3VyaXR5IERlc2NyaXB0b3IgKGJ5IGhhbmRsZSkgZnJvbSByZW1vdGUgc2VydmVyIGZvciBhIGZpbGUgb3IgZGlyICovCiBpbnQKIENJRlNTTUJHZXRDSUZTQUNMKGNvbnN0IGludCB4aWQsIHN0cnVjdCBjaWZzVGNvbkluZm8gKnRjb24sIF9fdTE2IGZpZCwKIAkJLyogQkIgZml4IHVwIHJldHVybiBpbmZvICovIGNoYXIgKmFjbF9pbmYsIGNvbnN0IGludCBidWZsZW4sCi0JCSAgY29uc3QgaW50IGFjbF90eXBlIC8qIEFDQ0VTUy9ERUZBVUxUIG5vdCBzdXJlIGltcGxpY2F0aW9uICovKQorCQkgIGNvbnN0IGludCBhY2xfdHlwZSkKIHsKIAlpbnQgcmMgPSAwOwogCWludCBidWZfdHlwZSA9IDA7CkBAIC0zMDg1LDEyICszMDkzLDEzIEBACiAJaW92WzBdLmlvdl9iYXNlID0gKGNoYXIgKilwU01COwogCWlvdlswXS5pb3ZfbGVuID0gcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICsgNDsKIAotCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjICovLCAmYnVmX3R5cGUsIDApOworCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgdGNvbi0+c2VzLCBpb3YsIDEgLyogbnVtIGlvdmVjICovLCAmYnVmX3R5cGUsCisJCQkgMCAvKiBub3QgbG9uZyBvcCAqLywgMCAvKiBkbyBub3QgbG9nIFNUQVRVUyBjb2RlcyAqLyApOwogCWNpZnNfc3RhdHNfaW5jKCZ0Y29uLT5udW1fYWNsX2dldCk7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFF1ZXJ5U2VjRGVzYyA9ICVkIiwgcmMpKTsKIAl9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBkZWNvZGUgcmVzcG9uc2UgKi8KLQkJc3RydWN0IGNpZnNfc2lkICpwc2VjX2Rlc2M7CisJCXN0cnVjdCBjaWZzX250c2QgKnBzZWNfZGVzYzsKIAkJX19sZTMyICogcGFybTsKIAkJaW50IHBhcm1fbGVuOwogCQlpbnQgZGF0YV9sZW47CkBAIC0zMTA1LDggKzMxMTQsNyBAQAogCQkJZ290byBxc2VjX291dDsKIAkJcFNNQnIgPSAoc3RydWN0IHNtYl9jb21fbnRyYW5zYWN0X3JzcCAqKWlvdlswXS5pb3ZfYmFzZTsKIAotCQljRVJST1IoMSwgKCJzbWIgJXAgcGFybSAlcCBkYXRhICVwIiwKLQkJCSAgcFNNQnIsIHBhcm0sIHBzZWNfZGVzYykpOyAgLyogQkIgcmVtb3ZlbWUgQkIgKi8KKwkJY0ZZSSgxLCAoInNtYiAlcCBwYXJtICVwIGRhdGEgJXAiLCBwU01CciwgcGFybSwgcHNlY19kZXNjKSk7CiAKIAkJaWYgKGxlMzJfdG9fY3B1KHBTTUJyLT5QYXJhbWV0ZXJDb3VudCkgIT0gNCkgewogCQkJcmMgPSAtRUlPOyAgICAgIC8qIGJhZCBzbWIgKi8KQEAgLTMxMTUsNyArMzEyMyw3IEBACiAKIC8qIEJCIGNoZWNrIHRoYXQgZGF0YSBhcmVhIGlzIG1pbmltdW0gbGVuZ3RoIGFuZCBhcyBiaWcgYXMgYWNsX2xlbiAqLwogCi0JCWFjbF9sZW4gPSBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXBhcm0pOworCQlhY2xfbGVuID0gbGUzMl90b19jcHUoKnBhcm0pOwogCQkvKiBCQiBjaGVjayBpZiAoYWNsX2xlbiA+IGJ1ZnNpemUpICovCiAKIAkJcGFyc2Vfc2VjX2Rlc2MocHNlY19kZXNjLCBhY2xfbGVuKTsKQEAgLTMxMjgsNiArMzEzNiw3IEBACiAvKgljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKHBTTUIpOyAqLyAvKiBGcmVlZCBlYXJsaWVyIG5vdyBpbiBTZW5kUmVjZWl2ZTIgKi8KIAlyZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMICovCiAKIC8qIExlZ2FjeSBRdWVyeSBQYXRoIEluZm9ybWF0aW9uIGNhbGwgZm9yIGxvb2t1cCB0byBvbGQgc2VydmVycyBzdWNoCiAgICBhcyBXaW45eC9XaW5NRSAqLwpAQCAtMzM2Myw2ICszMzcyLDkgQEAKIAkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7CiAKIAkJaWYgKHJjIHx8IChwU01Cci0+Qnl0ZUNvdW50IDwgc2l6ZW9mKEZJTEVfVU5JWF9CQVNJQ19JTkZPKSkpIHsKKwkJCWNFUlJPUigxLCAoIk1hbGZvcm1lZCBGSUxFX1VOSVhfQkFTSUNfSU5GTyByZXNwb25zZS5cbiIKKwkJCQkgICAiVW5peCBFeHRlbnNpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBtb3VudCAiCisJCQkJICAgImJ5IHNwZWNpZnlpbmcgdGhlIG5vc2Z1IG1vdW50IG9wdGlvbi4iKSk7CiAJCQlyYyA9IC1FSU87CS8qIGJhZCBzbWIgKi8KIAkJfSBlbHNlIHsKIAkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwpAQCAtMzg4MywxMiArMzg5NSwxMCBAQAogCXBTTUItPmhkci5NaWQgPSBHZXROZXh0TWlkKHNlcy0+c2VydmVyKTsKIAlwU01CLT5oZHIuVGlkID0gc2VzLT5pcGNfdGlkOwogCXBTTUItPmhkci5VaWQgPSBzZXMtPlN1aWQ7Ci0JaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1NUQVRVUzMyKSB7CisJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1NUQVRVUzMyKQogCQlwU01CLT5oZHIuRmxhZ3MyIHw9IFNNQkZMRzJfRVJSX1NUQVRVUzsKLQl9Ci0JaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX0RGUykgeworCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9ERlMpCiAJCXBTTUItPmhkci5GbGFnczIgfD0gU01CRkxHMl9ERlM7Ci0JfQogCiAJaWYgKHNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSUNPREUpIHsKIAkJcFNNQi0+aGRyLkZsYWdzMiB8PSBTTUJGTEcyX1VOSUNPREU7CkBAIC00MDYwLDEwICs0MDcwLDYgQEAKIAkJKHZvaWQgKiopICZwU01Ccik7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7Ci0JcmMgPSBzbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKLQkJICAgICAgKHZvaWQgKiopICZwU01Ccik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7CiAKIAlwYXJhbXMgPSAyOyAgICAgLyogbGV2ZWwgKi8KIAlwU01CLT5Ub3RhbERhdGFDb3VudCA9IDA7CkBAIC00MjY1LDcgKzQyNzEsNyBAQAogCQkJICAgICAqKSAoKChjaGFyICopICZwU01Cci0+aGRyLlByb3RvY29sKSArCiAJCQkJIGRhdGFfb2Zmc2V0KTsKIAkJCW1lbWNweSgmdGNvbi0+ZnNBdHRySW5mbywgcmVzcG9uc2VfZGF0YSwKLQkJCSAgICAgICBzaXplb2YgKEZJTEVfU1lTVEVNX0FUVFJJQlVURV9JTkZPKSk7CisJCQkgICAgICAgc2l6ZW9mKEZJTEVfU1lTVEVNX0FUVFJJQlVURV9JTkZPKSk7CiAJCX0KIAl9CiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKQEAgLTQzMzQsNyArNDM0MCw3IEBACiAJCQkJKCgoY2hhciAqKSAmcFNNQnItPmhkci5Qcm90b2NvbCkgKwogCQkJCSBkYXRhX29mZnNldCk7CiAJCQltZW1jcHkoJnRjb24tPmZzRGV2SW5mbywgcmVzcG9uc2VfZGF0YSwKLQkJCSAgICAgICBzaXplb2YgKEZJTEVfU1lTVEVNX0RFVklDRV9JTkZPKSk7CisJCQkgICAgICAgc2l6ZW9mKEZJTEVfU1lTVEVNX0RFVklDRV9JTkZPKSk7CiAJCX0KIAl9CiAJY2lmc19idWZfcmVsZWFzZShwU01CKTsKQEAgLTQ0MDIsNyArNDQwOCw3IEBACiAJCQkgICAgICopICgoKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wpICsKIAkJCQkgZGF0YV9vZmZzZXQpOwogCQkJbWVtY3B5KCZ0Y29uLT5mc1VuaXhJbmZvLCByZXNwb25zZV9kYXRhLAotCQkJICAgICAgIHNpemVvZiAoRklMRV9TWVNURU1fVU5JWF9JTkZPKSk7CisJCQkgICAgICAgc2l6ZW9mKEZJTEVfU1lTVEVNX1VOSVhfSU5GTykpOwogCQl9CiAJfQogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CkBAIC00NjEyLDcgKzQ2MTgsNyBAQAogCQlzdHJuY3B5KHBTTUItPkZpbGVOYW1lLCBmaWxlTmFtZSwgbmFtZV9sZW4pOwogCX0KIAlwYXJhbXMgPSA2ICsgbmFtZV9sZW47Ci0JZGF0YV9jb3VudCA9IHNpemVvZiAoc3RydWN0IGZpbGVfZW5kX29mX2ZpbGVfaW5mbyk7CisJZGF0YV9jb3VudCA9IHNpemVvZihzdHJ1Y3QgZmlsZV9lbmRfb2ZfZmlsZV9pbmZvKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDQxMDApOwogCXBTTUItPk1heFNldHVwQ291bnQgPSAwOwpAQCAtNDgwMCw3ICs0ODA2LDcgQEAKIAogCWRhdGFfb2Zmc2V0ID0gKGNoYXIgKikgKCZwU01CLT5oZHIuUHJvdG9jb2wpICsgb2Zmc2V0OwogCi0JY291bnQgPSBzaXplb2YgKEZJTEVfQkFTSUNfSU5GTyk7CisJY291bnQgPSBzaXplb2YoRklMRV9CQVNJQ19JTkZPKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOwkvKiBCQiBmaW5kIG1heCBTTUIgUERVIGZyb20gc2VzcyAqLwogCXBTTUItPlNldHVwQ291bnQgPSAxOwpAQCAtNDg3MSw3ICs0ODc3LDcgQEAKIAl9CiAKIAlwYXJhbXMgPSA2ICsgbmFtZV9sZW47Ci0JY291bnQgPSBzaXplb2YgKEZJTEVfQkFTSUNfSU5GTyk7CisJY291bnQgPSBzaXplb2YoRklMRV9CQVNJQ19JTkZPKTsKIAlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwogCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDEwMDApOwkvKiBCQiBmaW5kIGV4YWN0IG1heCBTTUIgUERVIGZyb20gc2VzcyBzdHJ1Y3R1cmUgQkIgKi8KIAlwU01CLT5NYXhTZXR1cENvdW50ID0gMDsKQEAgLTQ5MDAsNyArNDkwNiw3IEBACiAJCXBTTUItPkluZm9ybWF0aW9uTGV2ZWwgPSBjcHVfdG9fbGUxNihTTUJfU0VUX0ZJTEVfQkFTSUNfSU5GTyk7CiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKIAlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKLQltZW1jcHkoZGF0YV9vZmZzZXQsIGRhdGEsIHNpemVvZiAoRklMRV9CQVNJQ19JTkZPKSk7CisJbWVtY3B5KGRhdGFfb2Zmc2V0LCBkYXRhLCBzaXplb2YoRklMRV9CQVNJQ19JTkZPKSk7CiAJcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7CiAJcmMgPSBTZW5kUmVjZWl2ZSh4aWQsIHRjb24tPnNlcywgKHN0cnVjdCBzbWJfaGRyICopIHBTTUIsCiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwpAQCAtNTAwMyw3ICs1MDA5LDcgQEAKIAl9CiAKIAlwYXJhbXMgPSA2ICsgbmFtZV9sZW47Ci0JY291bnQgPSBzaXplb2YgKEZJTEVfVU5JWF9CQVNJQ19JTkZPKTsKKwljb3VudCA9IHNpemVvZihGSUxFX1VOSVhfQkFTSUNfSU5GTyk7CiAJcFNNQi0+TWF4UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNigyKTsKIAlwU01CLT5NYXhEYXRhQ291bnQgPSBjcHVfdG9fbGUxNigxMDAwKTsJLyogQkIgZmluZCBleGFjdCBtYXggU01CIFBEVSBmcm9tIHNlc3Mgc3RydWN0dXJlIEJCICovCiAJcFNNQi0+TWF4U2V0dXBDb3VudCA9IDA7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IDRhZjM1ODguLjE5ZWUxMWYgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlzdHJ1Y3QgbWlkX3FfZW50cnkgKm1pZF9lbnRyeTsKIAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCWlmICgga3RocmVhZF9zaG91bGRfc3RvcCgpICkgeworCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJLyogdGhlIGRlbXV4IHRocmVhZCB3aWxsIGV4aXQgbm9ybWFsbHkKIAkJbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AgKi8KIAkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKQEAgLTE1MSw5ICsxNTEsOCBAQAogCX0KIAlsaXN0X2Zvcl9lYWNoKHRtcCwgJkdsb2JhbFRyZWVDb25uZWN0aW9uTGlzdCkgewogCQl0Y29uID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjaWZzVGNvbkluZm8sIGNpZnNDb25uZWN0aW9uTGlzdCk7Ci0JCWlmICgodGNvbikgJiYgKHRjb24tPnNlcykgJiYgKHRjb24tPnNlcy0+c2VydmVyID09IHNlcnZlcikpIHsKKwkJaWYgKCh0Y29uKSAmJiAodGNvbi0+c2VzKSAmJiAodGNvbi0+c2VzLT5zZXJ2ZXIgPT0gc2VydmVyKSkKIAkJCXRjb24tPnRpZFN0YXR1cyA9IENpZnNOZWVkUmVjb25uZWN0OwotCQl9CiAJfQogCXJlYWRfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAkvKiBkbyBub3Qgd2FudCB0byBiZSBzZW5kaW5nIGRhdGEgb24gYSBzb2NrZXQgd2UgYXJlIGZyZWVpbmcgKi8KQEAgLTE4Nyw3ICsxODYsNyBAQAogCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJdXAoJnNlcnZlci0+dGNwU2VtKTsKIAotCXdoaWxlICggKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpICYmIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzR29vZCkpIHsKKwl3aGlsZSAoKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpICYmIChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzR29vZCkpIHsKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwogCQlpZiAoc2VydmVyLT5wcm90b2NvbFR5cGUgPT0gSVBWNikgewogCQkJcmMgPSBpcHY2X2Nvbm5lY3QoJnNlcnZlci0+YWRkci5zb2NrQWRkcjYsCkBAIC0yMDQsNyArMjAzLDcgQEAKIAkJfSBlbHNlIHsKIAkJCWF0b21pY19pbmMoJnRjcFNlc1JlY29ubmVjdENvdW50KTsKIAkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQkJaWYgKCAha3RocmVhZF9zaG91bGRfc3RvcCgpICkKKwkJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJCXNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc0dvb2Q7CiAJCQlzZXJ2ZXItPnNlcXVlbmNlX251bWJlciA9IDA7CiAJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwpAQCAtMzUyLDE3ICszNTEsMTUgQEAKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCXNlcnZlci0+dHNrID0gY3VycmVudDsJLyogc2F2ZSBwcm9jZXNzIGluZm8gdG8gd2FrZSBhdCBzaHV0ZG93biAqLwotCWNGWUkoMSwgKCJEZW11bHRpcGxleCBQSUQ6ICVkIiwgY3VycmVudC0+cGlkKSk7CisJY0ZZSSgxLCAoIkRlbXVsdGlwbGV4IFBJRDogJWQiLCB0YXNrX3BpZF9ucihjdXJyZW50KSkpOwogCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCWF0b21pY19pbmMoJnRjcFNlc0FsbG9jQ291bnQpOwogCWxlbmd0aCA9IHRjcFNlc0FsbG9jQ291bnQuY291bnRlcjsKIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCWNvbXBsZXRlKCZjaWZzZF9jb21wbGV0ZSk7Ci0JaWYgKGxlbmd0aCAgPiAxKSB7Ci0JCW1lbXBvb2xfcmVzaXplKGNpZnNfcmVxX3Bvb2xwLAotCQkJbGVuZ3RoICsgY2lmc19taW5fcmN2LAotCQkJR0ZQX0tFUk5FTCk7Ci0JfQorCWlmIChsZW5ndGggID4gMSkKKwkJbWVtcG9vbF9yZXNpemUoY2lmc19yZXFfcG9vbHAsIGxlbmd0aCArIGNpZnNfbWluX3JjdiwKKwkJCQlHRlBfS0VSTkVMKTsKIAogCXNldF9mcmVlemFibGUoKTsKIAl3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkgewpAQCAtMzc4LDcgKzM3NSw3IEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoaXNMYXJnZUJ1ZikgewogCQkJLyogd2UgYXJlIHJldXNpbmcgYSBkaXJ0eSBsYXJnZSBidWYsIGNsZWFyIGl0cyBzdGFydCAqLwotCQkJbWVtc2V0KGJpZ2J1ZiwgMCwgc2l6ZW9mIChzdHJ1Y3Qgc21iX2hkcikpOworCQkJbWVtc2V0KGJpZ2J1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSk7CiAJCX0KIAogCQlpZiAoc21hbGxidWYgPT0gTlVMTCkgewpAQCAtMzkxLDcgKzM4OCw3IEBACiAJCQl9CiAJCQkvKiBiZWdpbm5pbmcgb2Ygc21iIGJ1ZmZlciBpcyBjbGVhcmVkIGluIG91ciBidWZfZ2V0ICovCiAJCX0gZWxzZSAvKiBpZiBleGlzdGluZyBzbWFsbCBidWYgY2xlYXIgYmVnaW5uaW5nICovCi0JCQltZW1zZXQoc21hbGxidWYsIDAsIHNpemVvZiAoc3RydWN0IHNtYl9oZHIpKTsKKwkJCW1lbXNldChzbWFsbGJ1ZiwgMCwgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSk7CiAKIAkJaXNMYXJnZUJ1ZiA9IEZBTFNFOwogCQlpc011bHRpUnNwID0gRkFMU0U7CkBAIC00MDAsMTEgKzM5NywxMyBAQAogCQlpb3YuaW92X2xlbiA9IDQ7CiAJCXNtYl9tc2cubXNnX2NvbnRyb2wgPSBOVUxMOwogCQlzbWJfbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKwkJcGR1X2xlbmd0aCA9IDQ7IC8qIGVub3VnaCB0byBnZXQgUkZDMTAwMSBoZWFkZXIgKi8KK2luY29tcGxldGVfcmN2OgogCQlsZW5ndGggPQogCQkgICAga2VybmVsX3JlY3Ztc2coY3NvY2tldCwgJnNtYl9tc2csCi0JCQkJICZpb3YsIDEsIDQsIDAgLyogQkIgc2VlIHNvY2tldC5oIGZsYWdzICovKTsKKwkJCQkmaW92LCAxLCBwZHVfbGVuZ3RoLCAwIC8qIEJCIG90aGVyIGZsYWdzPyAqLyk7CiAKLQkJaWYgKCBrdGhyZWFkX3Nob3VsZF9zdG9wKCkgKSB7CisJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKHNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZWVkUmVjb25uZWN0KSB7CiAJCQljRllJKDEsICgiUmVjb25uZWN0IGFmdGVyIHNlcnZlciBzdG9wcGVkIHJlc3BvbmRpbmciKSk7CkBAIC00MTYsNyArNDE1LDEwIEBACiAJCQltc2xlZXAoMSk7IC8qIG1pbmltdW0gc2xlZXAgdG8gcHJldmVudCBsb29waW5nCiAJCQkJYWxsb3dpbmcgc29ja2V0IHRvIGNsZWFyIGFuZCBhcHAgdGhyZWFkcyB0byBzZXQKIAkJCQl0Y3BTdGF0dXMgQ2lmc05lZWRSZWNvbm5lY3QgaWYgc2VydmVyIGh1bmcgKi8KLQkJCWNvbnRpbnVlOworCQkJaWYgKHBkdV9sZW5ndGggPCA0KQorCQkJCWdvdG8gaW5jb21wbGV0ZV9yY3Y7CisJCQllbHNlCisJCQkJY29udGludWU7CiAJCX0gZWxzZSBpZiAobGVuZ3RoIDw9IDApIHsKIAkJCWlmIChzZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmV3KSB7CiAJCQkJY0ZZSSgxLCAoInRjcCBzZXNzaW9uIGFiZW5kIGFmdGVyIFNNQm5lZ3Byb3QiKSk7CkBAIC00MzcsMTMgKzQzOSwxMSBAQAogCQkJd2FrZV91cCgmc2VydmVyLT5yZXNwb25zZV9xKTsKIAkJCWNvbnRpbnVlOwogCQl9IGVsc2UgaWYgKGxlbmd0aCA8IDQpIHsKLQkJCWNGWUkoMSwKLQkJCSAgICAoIkZyYW1lIHVuZGVyIGZvdXIgYnl0ZXMgcmVjZWl2ZWQgKCVkIGJ5dGVzIGxvbmcpIiwKKwkJCWNGWUkoMSwgKCJsZXNzIHRoYW4gZm91ciBieXRlcyByZWNlaXZlZCAoJWQgYnl0ZXMpIiwKIAkJCSAgICAgIGxlbmd0aCkpOwotCQkJY2lmc19yZWNvbm5lY3Qoc2VydmVyKTsKLQkJCWNzb2NrZXQgPSBzZXJ2ZXItPnNzb2NrZXQ7Ci0JCQl3YWtlX3VwKCZzZXJ2ZXItPnJlc3BvbnNlX3EpOwotCQkJY29udGludWU7CisJCQlwZHVfbGVuZ3RoIC09IGxlbmd0aDsKKwkJCW1zbGVlcCgxKTsKKwkJCWdvdG8gaW5jb21wbGV0ZV9yY3Y7CiAJCX0KIAogCQkvKiBUaGUgcmlnaHQgYW1vdW50IHdhcyByZWFkIGZyb20gc29ja2V0IC0gNCBieXRlcyAqLwpAQCAtNTA0LDcgKzUwNCw3IEBACiAKIAkJLyogZWxzZSB3ZSBoYXZlIGFuIFNNQiByZXNwb25zZSAqLwogCQlpZiAoKHBkdV9sZW5ndGggPiBDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFIC0gNCkgfHwKLQkJCSAgICAocGR1X2xlbmd0aCA8IHNpemVvZiAoc3RydWN0IHNtYl9oZHIpIC0gMSAtIDQpKSB7CisJCQkgICAgKHBkdV9sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gMSAtIDQpKSB7CiAJCQljRVJST1IoMSwgKCJJbnZhbGlkIHNpemUgU01CIGxlbmd0aCAlZCBwZHVfbGVuZ3RoICVkIiwKIAkJCQkJbGVuZ3RoLCBwZHVfbGVuZ3RoKzQpKTsKIAkJCWNpZnNfcmVjb25uZWN0KHNlcnZlcik7CkBAIC01MjgsNyArNTI4LDcgQEAKIAkJICAgICB0b3RhbF9yZWFkICs9IGxlbmd0aCkgewogCQkJbGVuZ3RoID0ga2VybmVsX3JlY3Ztc2coY3NvY2tldCwgJnNtYl9tc2csICZpb3YsIDEsCiAJCQkJCQlwZHVfbGVuZ3RoIC0gdG90YWxfcmVhZCwgMCk7Ci0JCQlpZiAoIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fAorCQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fAogCQkJICAgIChsZW5ndGggPT0gLUVJTlRSKSkgewogCQkJCS8qIHRoZW4gd2lsbCBleGl0ICovCiAJCQkJcmVjb25uZWN0ID0gMjsKQEAgLTU0Niw2ICs1NDYsNyBAQAogCQkJCQkgICAgICBhbGxvd2luZyBzb2NrZXQgdG8gY2xlYXIgYW5kIGFwcAogCQkJCQkgICAgICB0aHJlYWRzIHRvIHNldCB0Y3BTdGF0dXMKIAkJCQkJICAgICAgQ2lmc05lZWRSZWNvbm5lY3QgaWYgc2VydmVyIGh1bmcqLworCQkJCWxlbmd0aCA9IDA7CiAJCQkJY29udGludWU7CiAJCQl9IGVsc2UgaWYgKGxlbmd0aCA8PSAwKSB7CiAJCQkJY0VSUk9SKDEsICgiUmVjZWl2ZWQgbm8gZGF0YSwgZXhwZWN0aW5nICVkIiwKQEAgLTYzMSw5ICs2MzIsOSBAQAogCQkJLyogV2FzIHByZXZpb3VzIGJ1ZiBwdXQgaW4gbXB4IHN0cnVjdCBmb3IgbXVsdGktcnNwPyAqLwogCQkJaWYgKCFpc011bHRpUnNwKSB7CiAJCQkJLyogc21iIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIGJ5IHVzZXIgdGhyZWFkICovCi0JCQkJaWYgKGlzTGFyZ2VCdWYpIHsKKwkJCQlpZiAoaXNMYXJnZUJ1ZikKIAkJCQkJYmlnYnVmID0gTlVMTDsKLQkJCQl9IGVsc2UKKwkJCQllbHNlCiAJCQkJCXNtYWxsYnVmID0gTlVMTDsKIAkJCX0KIAkJCXdha2VfdXBfcHJvY2Vzcyh0YXNrX3RvX3dha2UpOwpAQCAtNjc2LDkgKzY3Nyw4IEBACiAJCXNlcnZlci0+c3NvY2tldCA9IE5VTEw7CiAJfQogCS8qIGJ1ZmZlciB1c3VhbGxseSBmcmVlZCBpbiBmcmVlX21pZCAtIG5lZWQgdG8gZnJlZSBpdCBoZXJlIG9uIGV4aXQgKi8KLQlpZiAoYmlnYnVmICE9IE5VTEwpCi0JCWNpZnNfYnVmX3JlbGVhc2UoYmlnYnVmKTsKLQlpZiAoc21hbGxidWYgIT0gTlVMTCkKKwljaWZzX2J1Zl9yZWxlYXNlKGJpZ2J1Zik7CisJaWYgKHNtYWxsYnVmKSAvKiBubyBzZW5zZSBsb2dnaW5nIGEgZGVidWcgbWVzc2FnZSBpZiBOVUxMICovCiAJCWNpZnNfc21hbGxfYnVmX3JlbGVhc2Uoc21hbGxidWYpOwogCiAJcmVhZF9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKQEAgLTcwMiw5ICs3MDIsOCBAQAogCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJkdsb2JhbFNNQlNlc3Npb25MaXN0KSB7CiAJCQlzZXMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNTZXNJbmZvLAogCQkJCQkgY2lmc1Nlc3Npb25MaXN0KTsKLQkJCWlmIChzZXMtPnNlcnZlciA9PSBzZXJ2ZXIpIHsKKwkJCWlmIChzZXMtPnNlcnZlciA9PSBzZXJ2ZXIpCiAJCQkJc2VzLT5zdGF0dXMgPSBDaWZzRXhpdGluZzsKLQkJCX0KIAkJfQogCiAJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwpAQCAtNzE0LDkgKzcxMyw4IEBACiAJCQkJY0ZZSSgxLCAoIkNsZWFyaW5nIE1pZCAweCV4IC0gd2FraW5nIHVwICIsCiAJCQkJCSBtaWRfZW50cnktPm1pZCkpOwogCQkJCXRhc2tfdG9fd2FrZSA9IG1pZF9lbnRyeS0+dHNrOwotCQkJCWlmICh0YXNrX3RvX3dha2UpIHsKKwkJCQlpZiAodGFza190b193YWtlKQogCQkJCQl3YWtlX3VwX3Byb2Nlc3ModGFza190b193YWtlKTsKLQkJCQl9CiAJCQl9CiAJCX0KIAkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKQEAgLTc0OSwxOCArNzQ3LDE1IEBACiAJbGlzdF9mb3JfZWFjaCh0bXAsICZHbG9iYWxTTUJTZXNzaW9uTGlzdCkgewogCQlzZXMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNpZnNTZXNJbmZvLAogCQkJCWNpZnNTZXNzaW9uTGlzdCk7Ci0JCWlmIChzZXMtPnNlcnZlciA9PSBzZXJ2ZXIpIHsKKwkJaWYgKHNlcy0+c2VydmVyID09IHNlcnZlcikKIAkJCXNlcy0+c2VydmVyID0gTlVMTDsKLQkJfQogCX0KIAl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCiAJa2ZyZWUoc2VydmVyKTsKLQlpZiAobGVuZ3RoICA+IDApIHsKLQkJbWVtcG9vbF9yZXNpemUoY2lmc19yZXFfcG9vbHAsCi0JCQlsZW5ndGggKyBjaWZzX21pbl9yY3YsCi0JCQlHRlBfS0VSTkVMKTsKLQl9CisJaWYgKGxlbmd0aCAgPiAwKQorCQltZW1wb29sX3Jlc2l6ZShjaWZzX3JlcV9wb29scCwgbGVuZ3RoICsgY2lmc19taW5fcmN2LAorCQkJCUdGUF9LRVJORUwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDc3LDcgKzE0NzIsNyBAQAogCWlmIChwc2luX3NlcnZlci0+c2luX3BvcnQpIHsgLyogdXNlciBvdmVycm9kZSBkZWZhdWx0IHBvcnQgKi8KIAkJcmMgPSAoKmNzb2NrZXQpLT5vcHMtPmNvbm5lY3QoKmNzb2NrZXQsCiAJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSBwc2luX3NlcnZlciwKLQkJCQlzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbiksIDApOworCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pLCAwKTsKIAkJaWYgKHJjID49IDApCiAJCQljb25uZWN0ZWQgPSAxOwogCX0KQEAgLTE0OTMsNyArMTQ4OCw3IEBACiAKIAkJCXJjID0gKCpjc29ja2V0KS0+b3BzLT5jb25uZWN0KCpjc29ja2V0LAogCQkJCQkoc3RydWN0IHNvY2thZGRyICopIHBzaW5fc2VydmVyLAotCQkJCQlzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbiksIDApOworCQkJCQlzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwgMCk7CiAJCQlpZiAocmMgPj0gMCkKIAkJCQljb25uZWN0ZWQgPSAxOwogCQl9CkBAIC0xNTAyLDcgKzE0OTcsNyBAQAogCQlwc2luX3NlcnZlci0+c2luX3BvcnQgPSBodG9ucyhSRkMxMDAxX1BPUlQpOwogCQlyYyA9ICgqY3NvY2tldCktPm9wcy0+Y29ubmVjdCgqY3NvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKQogCQkJCQkgICAgICBwc2luX3NlcnZlciwKLQkJCQkJICAgICAgc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW4pLCAwKTsKKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksIDApOwogCQlpZiAocmMgPj0gMCkKIAkJCWNvbm5lY3RlZCA9IDE7CiAJfQpAQCAtMTYxMCw3ICsxNjA1LDcgQEAKIAlpZiAocHNpbl9zZXJ2ZXItPnNpbjZfcG9ydCkgeyAvKiB1c2VyIG92ZXJyb2RlIGRlZmF1bHQgcG9ydCAqLwogCQlyYyA9ICgqY3NvY2tldCktPm9wcy0+Y29ubmVjdCgqY3NvY2tldCwKIAkJCQkoc3RydWN0IHNvY2thZGRyICopIHBzaW5fc2VydmVyLAotCQkJCXNpemVvZiAoc3RydWN0IHNvY2thZGRyX2luNiksIDApOworCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwgMCk7CiAJCWlmIChyYyA+PSAwKQogCQkJY29ubmVjdGVkID0gMTsKIAl9CkBAIC0xNjI2LDcgKzE2MjEsNyBAQAogCiAJCQlyYyA9ICgqY3NvY2tldCktPm9wcy0+Y29ubmVjdCgqY3NvY2tldCwKIAkJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSBwc2luX3NlcnZlciwKLQkJCQkJc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW42KSwgMCk7CisJCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwgMCk7CiAJCQlpZiAocmMgPj0gMCkKIAkJCQljb25uZWN0ZWQgPSAxOwogCQl9CkBAIC0xNjM0LDcgKzE2MjksNyBAQAogCWlmICghY29ubmVjdGVkKSB7CiAJCXBzaW5fc2VydmVyLT5zaW42X3BvcnQgPSBodG9ucyhSRkMxMDAxX1BPUlQpOwogCQlyYyA9ICgqY3NvY2tldCktPm9wcy0+Y29ubmVjdCgqY3NvY2tldCwgKHN0cnVjdCBzb2NrYWRkciAqKQotCQkJCSBwc2luX3NlcnZlciwgc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHJfaW42KSwgMCk7CisJCQkJIHBzaW5fc2VydmVyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNiksIDApOwogCQlpZiAocmMgPj0gMCkKIAkJCWNvbm5lY3RlZCA9IDE7CiAJfQpAQCAtMTc1MCw3ICsxNzQ1LDE2IEBACiAJCQljRllJKDEsICgidmVyeSBsYXJnZSB3cml0ZSBjYXAiKSk7CiAjZW5kaWYgLyogQ0lGU19ERUJVRzIgKi8KIAkJaWYgKENJRlNTTUJTZXRGU1VuaXhJbmZvKHhpZCwgdGNvbiwgY2FwKSkgewotCQkJY0ZZSSgxLCAoInNldHRpbmcgY2FwYWJpbGl0aWVzIGZhaWxlZCIpKTsKKwkJCWlmICh2b2xfaW5mbyA9PSBOVUxMKSB7CisJCQkJY0ZZSSgxLCAoInJlc2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkIikpOworCQkJfSBlbHNlCisJCQkJY0VSUk9SKDEsICgiTmVnb3RpYXRpbmcgVW5peCBjYXBhYmlsaXRpZXMgIgorCQkJCQkgICAid2l0aCB0aGUgc2VydmVyIGZhaWxlZC4gIENvbnNpZGVyICIKKwkJCQkJICAgIm1vdW50aW5nIHdpdGggdGhlIFVuaXggRXh0ZW5zaW9uc1xuIgorCQkJCQkgICAiZGlzYWJsZWQsIGlmIHByb2JsZW1zIGFyZSBmb3VuZCwgIgorCQkJCQkgICAiYnkgc3BlY2lmeWluZyB0aGUgbm91bml4IG1vdW50ICIKKwkJCQkJICAgIm9wdGlvbi4iKSk7CisKIAkJfQogCX0KIH0KQEAgLTE5MDksOCArMTkxMyw4IEBACiAJCQlyZXR1cm4gcmM7CiAJCX0KIAotCQlzcnZUY3AgPSBrbWFsbG9jKHNpemVvZiAoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyksIEdGUF9LRVJORUwpOwotCQlpZiAoc3J2VGNwID09IE5VTEwpIHsKKwkJc3J2VGNwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IFRDUF9TZXJ2ZXJfSW5mbyksIEdGUF9LRVJORUwpOworCQlpZiAoIXNydlRjcCkgewogCQkJcmMgPSAtRU5PTUVNOwogCQkJc29ja19yZWxlYXNlKGNzb2NrZXQpOwogCQkJa2ZyZWUodm9sdW1lX2luZm8uVU5DKTsKQEAgLTE5MTksOSArMTkyMyw4IEBACiAJCQlGcmVlWGlkKHhpZCk7CiAJCQlyZXR1cm4gcmM7CiAJCX0gZWxzZSB7Ci0JCQltZW1zZXQoc3J2VGNwLCAwLCBzaXplb2YgKHN0cnVjdCBUQ1BfU2VydmVyX0luZm8pKTsKIAkJCW1lbWNweSgmc3J2VGNwLT5hZGRyLnNvY2tBZGRyLCAmc2luX3NlcnZlciwKLQkJCQlzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKIAkJCWF0b21pY19zZXQoJnNydlRjcC0+aW5GbGlnaHQsIDApOwogCQkJLyogQkIgQWRkIGNvZGUgZm9yIGlwdjYgY2FzZSB0b28gKi8KIAkJCXNydlRjcC0+c3NvY2tldCA9IGNzb2NrZXQ7CkBAIC0yMTczLDggKzIxNzYsMTggQEAKIAkJCQkJCWlmICh0c2spCiAJCQkJCQkJa3RocmVhZF9zdG9wKHRzayk7CiAJCQkJCX0KLQkJCQl9IGVsc2UKKwkJCQl9IGVsc2UgewogCQkJCQljRllJKDEsICgiTm8gc2Vzc2lvbiBvciBiYWQgdGNvbiIpKTsKKwkJCQkJaWYgKChwU2VzSW5mby0+c2VydmVyKSAmJgorCQkJCQkgICAgKHBTZXNJbmZvLT5zZXJ2ZXItPnRzaykpIHsKKwkJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCQkJCQkJZm9yY2Vfc2lnKFNJR0tJTEwsCisJCQkJCQkJcFNlc0luZm8tPnNlcnZlci0+dHNrKTsKKwkJCQkJCXRzayA9IHBTZXNJbmZvLT5zZXJ2ZXItPnRzazsKKwkJCQkJCWlmICh0c2spCisJCQkJCQkJa3RocmVhZF9zdG9wKHRzayk7CisJCQkJCX0KKwkJCQl9CiAJCQkJc2VzSW5mb0ZyZWUocFNlc0luZm8pOwogCQkJCS8qIHBTZXNJbmZvID0gTlVMTDsgKi8KIAkJCX0KQEAgLTIxODUsOCArMjE5OCwxMCBAQAogCQl0Y29uLT5zZXMgPSBwU2VzSW5mbzsKIAogCQkvKiBkbyBub3QgY2FyZSBpZiBmb2xsb3dpbmcgdHdvIGNhbGxzIHN1Y2NlZWQgLSBpbmZvcm1hdGlvbmFsICovCi0JCUNJRlNTTUJRRlNEZXZpY2VJbmZvKHhpZCwgdGNvbik7Ci0JCUNJRlNTTUJRRlNBdHRyaWJ1dGVJbmZvKHhpZCwgdGNvbik7CisJCWlmICghdGNvbi0+aXBjKSB7CisJCQlDSUZTU01CUUZTRGV2aWNlSW5mbyh4aWQsIHRjb24pOworCQkJQ0lGU1NNQlFGU0F0dHJpYnV0ZUluZm8oeGlkLCB0Y29uKTsKKwkJfQogCiAJCS8qIHRlbGwgc2VydmVyIHdoaWNoIFVuaXggY2FwcyB3ZSBzdXBwb3J0ICovCiAJCWlmICh0Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKQpAQCAtMjUyNiw4ICsyNTQxLDcgQEAKIHNlc3NzZXR1cF9ub21lbToJLyogZG8gbm90IHJldHVybiBhbiBlcnJvciBvbiBub21lbSBmb3IgdGhlIGluZm8gc3RyaW5ncywKIAkJCSAgIHNpbmNlIHRoYXQgY291bGQgbWFrZSByZWNvbm5lY3Rpb24gaGFyZGVyLCBhbmQKIAkJCSAgIHJlY29ubmVjdGlvbiBtaWdodCBiZSBuZWVkZWQgdG8gZnJlZSBtZW1vcnkgKi8KLQlpZiAoc21iX2J1ZmZlcikKLQkJY2lmc19idWZfcmVsZWFzZShzbWJfYnVmZmVyKTsKKwljaWZzX2J1Zl9yZWxlYXNlKHNtYl9idWZmZXIpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMjU0Nyw3ICsyNTYxLDcgQEAKIAlpbnQgcmVtYWluaW5nX3dvcmRzID0gMDsKIAlpbnQgYnl0ZXNfcmV0dXJuZWQgPSAwOwogCWludCBsZW47Ci0JaW50IFNlY3VyaXR5QmxvYkxlbmd0aCA9IHNpemVvZiAoTkVHT1RJQVRFX01FU1NBR0UpOworCWludCBTZWN1cml0eUJsb2JMZW5ndGggPSBzaXplb2YoTkVHT1RJQVRFX01FU1NBR0UpOwogCVBORUdPVElBVEVfTUVTU0FHRSBTZWN1cml0eUJsb2I7CiAJUENIQUxMRU5HRV9NRVNTQUdFIFNlY3VyaXR5QmxvYjI7CiAJX191MzIgbmVnb3RpYXRlX2ZsYWdzLCBjYXBhYmlsaXRpZXM7CkBAIC0yODY1LDE1ICsyODc5LDE0IEBACiAJCXJjID0gLUVJTzsKIAl9CiAKLQlpZiAoc21iX2J1ZmZlcikKLQkJY2lmc19idWZfcmVsZWFzZShzbWJfYnVmZmVyKTsKKwljaWZzX2J1Zl9yZWxlYXNlKHNtYl9idWZmZXIpOwogCiAJcmV0dXJuIHJjOwogfQogc3RhdGljIGludAogQ0lGU05UTE1TU1BBdXRoU2Vzc1NldHVwKHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAotCQljaGFyICpudGxtX3Nlc3Npb25fa2V5LCBpbnQgbnRsbXYyX2ZsYWcsCi0JCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKKwkJCWNoYXIgKm50bG1fc2Vzc2lvbl9rZXksIGludCBudGxtdjJfZmxhZywKKwkJCWNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jb2RlcGFnZSkKIHsKIAlzdHJ1Y3Qgc21iX2hkciAqc21iX2J1ZmZlcjsKIAlzdHJ1Y3Qgc21iX2hkciAqc21iX2J1ZmZlcl9yZXNwb25zZTsKQEAgLTI4ODYsNyArMjg5OSw3IEBACiAJaW50IHJlbWFpbmluZ193b3JkcyA9IDA7CiAJaW50IGJ5dGVzX3JldHVybmVkID0gMDsKIAlpbnQgbGVuOwotCWludCBTZWN1cml0eUJsb2JMZW5ndGggPSBzaXplb2YgKEFVVEhFTlRJQ0FURV9NRVNTQUdFKTsKKwlpbnQgU2VjdXJpdHlCbG9iTGVuZ3RoID0gc2l6ZW9mKEFVVEhFTlRJQ0FURV9NRVNTQUdFKTsKIAlQQVVUSEVOVElDQVRFX01FU1NBR0UgU2VjdXJpdHlCbG9iOwogCV9fdTMyIG5lZ290aWF0ZV9mbGFncywgY2FwYWJpbGl0aWVzOwogCV9fdTE2IGNvdW50OwpAQCAtMjkwMSw4ICsyOTE0LDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXNtYl9idWZmZXJfcmVzcG9uc2UgPSBzbWJfYnVmZmVyOwotCXBTTUIgPSAoU0VTU0lPTl9TRVRVUF9BTkRYICopIHNtYl9idWZmZXI7Ci0JcFNNQnIgPSAoU0VTU0lPTl9TRVRVUF9BTkRYICopIHNtYl9idWZmZXJfcmVzcG9uc2U7CisJcFNNQiA9IChTRVNTSU9OX1NFVFVQX0FORFggKilzbWJfYnVmZmVyOworCXBTTUJyID0gKFNFU1NJT05fU0VUVVBfQU5EWCAqKXNtYl9idWZmZXJfcmVzcG9uc2U7CiAKIAkvKiBzZW5kIFNNQnNlc3Npb25TZXR1cCBoZXJlICovCiAJaGVhZGVyX2Fzc2VtYmxlKHNtYl9idWZmZXIsIFNNQl9DT01fU0VTU0lPTl9TRVRVUF9BTkRYLApAQCAtMjkyMSw3ICsyOTM0LDcgQEAKIAkJc21iX2J1ZmZlci0+RmxhZ3MyIHw9IFNNQkZMRzJfU0VDVVJJVFlfU0lHTkFUVVJFOwogCiAJY2FwYWJpbGl0aWVzID0gQ0FQX0xBUkdFX0ZJTEVTIHwgQ0FQX05UX1NNQlMgfCBDQVBfTEVWRUxfSUlfT1BMT0NLUyB8Ci0JICAgIENBUF9FWFRFTkRFRF9TRUNVUklUWTsKKwkJCUNBUF9FWFRFTkRFRF9TRUNVUklUWTsKIAlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JQ09ERSkgewogCQlzbWJfYnVmZmVyLT5GbGFnczIgfD0gU01CRkxHMl9VTklDT0RFOwogCQljYXBhYmlsaXRpZXMgfD0gQ0FQX1VOSUNPREU7CkBAIC0yOTM2LDE1ICsyOTQ5LDE0IEBACiAJfQogCXBTTUItPnJlcS5DYXBhYmlsaXRpZXMgPSBjcHVfdG9fbGUzMihjYXBhYmlsaXRpZXMpOwogCi0JYmNjX3B0ciA9IChjaGFyICopICZwU01CLT5yZXEuU2VjdXJpdHlCbG9iOwotCVNlY3VyaXR5QmxvYiA9IChQQVVUSEVOVElDQVRFX01FU1NBR0UpIGJjY19wdHI7CisJYmNjX3B0ciA9IChjaGFyICopJnBTTUItPnJlcS5TZWN1cml0eUJsb2I7CisJU2VjdXJpdHlCbG9iID0gKFBBVVRIRU5USUNBVEVfTUVTU0FHRSliY2NfcHRyOwogCXN0cm5jcHkoU2VjdXJpdHlCbG9iLT5TaWduYXR1cmUsIE5UTE1TU1BfU0lHTkFUVVJFLCA4KTsKIAlTZWN1cml0eUJsb2ItPk1lc3NhZ2VUeXBlID0gTnRMbUF1dGhlbnRpY2F0ZTsKIAliY2NfcHRyICs9IFNlY3VyaXR5QmxvYkxlbmd0aDsKLQluZWdvdGlhdGVfZmxhZ3MgPQotCSAgICBOVExNU1NQX05FR09USUFURV9VTklDT0RFIHwgTlRMTVNTUF9SRVFVRVNUX1RBUkdFVCB8Ci0JICAgIE5UTE1TU1BfTkVHT1RJQVRFX05UTE0gfCBOVExNU1NQX05FR09USUFURV9UQVJHRVRfSU5GTyB8Ci0JICAgIDB4ODAwMDAwMDAgfCBOVExNU1NQX05FR09USUFURV8xMjg7CisJbmVnb3RpYXRlX2ZsYWdzID0gTlRMTVNTUF9ORUdPVElBVEVfVU5JQ09ERSB8IE5UTE1TU1BfUkVRVUVTVF9UQVJHRVQgfAorCQkJTlRMTVNTUF9ORUdPVElBVEVfTlRMTSB8IE5UTE1TU1BfTkVHT1RJQVRFX1RBUkdFVF9JTkZPIHwKKwkJCTB4ODAwMDAwMDAgfCBOVExNU1NQX05FR09USUFURV8xMjg7CiAJaWYgKHNpZ25fQ0lGU19QRFVzKQogCQluZWdvdGlhdGVfZmxhZ3MgfD0gLyogTlRMTVNTUF9ORUdPVElBVEVfQUxXQVlTX1NJR04gfCovIE5UTE1TU1BfTkVHT1RJQVRFX1NJR047CiAJaWYgKG50bG12Ml9mbGFnKQpAQCAtMjk3OSwzNiArMjk5MSwzMiBAQAogCQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLkxlbmd0aCA9IDA7CiAJCQlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTWF4aW11bUxlbmd0aCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlfX3UxNiBsZW4gPQotCQkJICAgIGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCBkb21haW4sIDY0LAorCQkJX191MTYgbG4gPSBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgZG9tYWluLCA2NCwKIAkJCQkJICBubHNfY29kZXBhZ2UpOwotCQkJbGVuICo9IDI7CisJCQlsbiAqPSAyOwogCQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLk1heGltdW1MZW5ndGggPQotCQkJICAgIGNwdV90b19sZTE2KGxlbik7CisJCQkgICAgY3B1X3RvX2xlMTYobG4pOwogCQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLkJ1ZmZlciA9CiAJCQkgICAgY3B1X3RvX2xlMzIoU2VjdXJpdHlCbG9iTGVuZ3RoKTsKLQkJCWJjY19wdHIgKz0gbGVuOwotCQkJU2VjdXJpdHlCbG9iTGVuZ3RoICs9IGxlbjsKLQkJCVNlY3VyaXR5QmxvYi0+RG9tYWluTmFtZS5MZW5ndGggPQotCQkJICAgIGNwdV90b19sZTE2KGxlbik7CisJCQliY2NfcHRyICs9IGxuOworCQkJU2VjdXJpdHlCbG9iTGVuZ3RoICs9IGxuOworCQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLkxlbmd0aCA9IGNwdV90b19sZTE2KGxuKTsKIAkJfQogCQlpZiAodXNlciA9PSBOVUxMKSB7CiAJCQlTZWN1cml0eUJsb2ItPlVzZXJOYW1lLkJ1ZmZlciA9IDA7CiAJCQlTZWN1cml0eUJsb2ItPlVzZXJOYW1lLkxlbmd0aCA9IDA7CiAJCQlTZWN1cml0eUJsb2ItPlVzZXJOYW1lLk1heGltdW1MZW5ndGggPSAwOwogCQl9IGVsc2UgewotCQkJX191MTYgbGVuID0KLQkJCSAgICBjaWZzX3N0cnRvVUNTKChfX2xlMTYgKikgYmNjX3B0ciwgdXNlciwgNjQsCisJCQlfX3UxNiBsbiA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCB1c2VyLCA2NCwKIAkJCQkJICBubHNfY29kZXBhZ2UpOwotCQkJbGVuICo9IDI7CisJCQlsbiAqPSAyOwogCQkJU2VjdXJpdHlCbG9iLT5Vc2VyTmFtZS5NYXhpbXVtTGVuZ3RoID0KLQkJCSAgICBjcHVfdG9fbGUxNihsZW4pOworCQkJICAgIGNwdV90b19sZTE2KGxuKTsKIAkJCVNlY3VyaXR5QmxvYi0+VXNlck5hbWUuQnVmZmVyID0KIAkJCSAgICBjcHVfdG9fbGUzMihTZWN1cml0eUJsb2JMZW5ndGgpOwotCQkJYmNjX3B0ciArPSBsZW47Ci0JCQlTZWN1cml0eUJsb2JMZW5ndGggKz0gbGVuOwotCQkJU2VjdXJpdHlCbG9iLT5Vc2VyTmFtZS5MZW5ndGggPQotCQkJICAgIGNwdV90b19sZTE2KGxlbik7CisJCQliY2NfcHRyICs9IGxuOworCQkJU2VjdXJpdHlCbG9iTGVuZ3RoICs9IGxuOworCQkJU2VjdXJpdHlCbG9iLT5Vc2VyTmFtZS5MZW5ndGggPSBjcHVfdG9fbGUxNihsbik7CiAJCX0KIAogCQkvKiBTZWN1cml0eUJsb2ItPldvcmtzdGF0aW9uTmFtZS5MZW5ndGggPQpAQCAtMzA1MiwzMyArMzA2MCwzMiBAQAogCQkJU2VjdXJpdHlCbG9iLT5Eb21haW5OYW1lLkxlbmd0aCA9IDA7CiAJCQlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTWF4aW11bUxlbmd0aCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlfX3UxNiBsZW47CisJCQlfX3UxNiBsbjsKIAkJCW5lZ290aWF0ZV9mbGFncyB8PSBOVExNU1NQX05FR09USUFURV9ET01BSU5fU1VQUExJRUQ7CiAJCQlzdHJuY3B5KGJjY19wdHIsIGRvbWFpbiwgNjMpOwotCQkJbGVuID0gc3Rybmxlbihkb21haW4sIDY0KTsKKwkJCWxuID0gc3Rybmxlbihkb21haW4sIDY0KTsKIAkJCVNlY3VyaXR5QmxvYi0+RG9tYWluTmFtZS5NYXhpbXVtTGVuZ3RoID0KLQkJCSAgICBjcHVfdG9fbGUxNihsZW4pOworCQkJICAgIGNwdV90b19sZTE2KGxuKTsKIAkJCVNlY3VyaXR5QmxvYi0+RG9tYWluTmFtZS5CdWZmZXIgPQogCQkJICAgIGNwdV90b19sZTMyKFNlY3VyaXR5QmxvYkxlbmd0aCk7Ci0JCQliY2NfcHRyICs9IGxlbjsKLQkJCVNlY3VyaXR5QmxvYkxlbmd0aCArPSBsZW47Ci0JCQlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKKwkJCWJjY19wdHIgKz0gbG47CisJCQlTZWN1cml0eUJsb2JMZW5ndGggKz0gbG47CisJCQlTZWN1cml0eUJsb2ItPkRvbWFpbk5hbWUuTGVuZ3RoID0gY3B1X3RvX2xlMTYobG4pOwogCQl9CiAJCWlmICh1c2VyID09IE5VTEwpIHsKIAkJCVNlY3VyaXR5QmxvYi0+VXNlck5hbWUuQnVmZmVyID0gMDsKIAkJCVNlY3VyaXR5QmxvYi0+VXNlck5hbWUuTGVuZ3RoID0gMDsKIAkJCVNlY3VyaXR5QmxvYi0+VXNlck5hbWUuTWF4aW11bUxlbmd0aCA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlfX3UxNiBsZW47CisJCQlfX3UxNiBsbjsKIAkJCXN0cm5jcHkoYmNjX3B0ciwgdXNlciwgNjMpOwotCQkJbGVuID0gc3Rybmxlbih1c2VyLCA2NCk7Ci0JCQlTZWN1cml0eUJsb2ItPlVzZXJOYW1lLk1heGltdW1MZW5ndGggPQotCQkJICAgIGNwdV90b19sZTE2KGxlbik7CisJCQlsbiA9IHN0cm5sZW4odXNlciwgNjQpOworCQkJU2VjdXJpdHlCbG9iLT5Vc2VyTmFtZS5NYXhpbXVtTGVuZ3RoID0gY3B1X3RvX2xlMTYobG4pOwogCQkJU2VjdXJpdHlCbG9iLT5Vc2VyTmFtZS5CdWZmZXIgPQotCQkJICAgIGNwdV90b19sZTMyKFNlY3VyaXR5QmxvYkxlbmd0aCk7Ci0JCQliY2NfcHRyICs9IGxlbjsKLQkJCVNlY3VyaXR5QmxvYkxlbmd0aCArPSBsZW47Ci0JCQlTZWN1cml0eUJsb2ItPlVzZXJOYW1lLkxlbmd0aCA9IGNwdV90b19sZTE2KGxlbik7CisJCQkJCQljcHVfdG9fbGUzMihTZWN1cml0eUJsb2JMZW5ndGgpOworCQkJYmNjX3B0ciArPSBsbjsKKwkJCVNlY3VyaXR5QmxvYkxlbmd0aCArPSBsbjsKKwkJCVNlY3VyaXR5QmxvYi0+VXNlck5hbWUuTGVuZ3RoID0gY3B1X3RvX2xlMTYobG4pOwogCQl9CiAJCS8qIEJCIGZpbGwgaW4gb3VyIHdvcmtzdGF0aW9uIG5hbWUgaWYga25vd24gQkIgKi8KIApAQCAtMzEwMCwxMiArMzEwNywxMSBAQAogCXJjID0gU2VuZFJlY2VpdmUoeGlkLCBzZXMsIHNtYl9idWZmZXIsIHNtYl9idWZmZXJfcmVzcG9uc2UsCiAJCQkgJmJ5dGVzX3JldHVybmVkLCAxKTsKIAlpZiAocmMpIHsKLS8qICAgIHJjID0gbWFwX3NtYl90b19saW51eF9lcnJvcihzbWJfYnVmZmVyX3Jlc3BvbnNlKTsgICovLyogZG9uZSBpbiBTZW5kUmVjZWl2ZSBub3cgKi8KLQl9IGVsc2UgaWYgKChzbWJfYnVmZmVyX3Jlc3BvbnNlLT5Xb3JkQ291bnQgPT0gMykKLQkJICAgfHwgKHNtYl9idWZmZXJfcmVzcG9uc2UtPldvcmRDb3VudCA9PSA0KSkgeworLyogICByYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3Ioc21iX2J1ZmZlcl9yZXNwb25zZSkgZG9uZSBpbiBTZW5kUmVjZWl2ZSBub3cgKi8KKwl9IGVsc2UgaWYgKChzbWJfYnVmZmVyX3Jlc3BvbnNlLT5Xb3JkQ291bnQgPT0gMykgfHwKKwkJICAgKHNtYl9idWZmZXJfcmVzcG9uc2UtPldvcmRDb3VudCA9PSA0KSkgewogCQlfX3UxNiBhY3Rpb24gPSBsZTE2X3RvX2NwdShwU01Cci0+cmVzcC5BY3Rpb24pOwotCQlfX3UxNiBibG9iX2xlbiA9Ci0JCSAgICBsZTE2X3RvX2NwdShwU01Cci0+cmVzcC5TZWN1cml0eUJsb2JMZW5ndGgpOworCQlfX3UxNiBibG9iX2xlbiA9IGxlMTZfdG9fY3B1KHBTTUJyLT5yZXNwLlNlY3VyaXR5QmxvYkxlbmd0aCk7CiAJCWlmIChhY3Rpb24gJiBHVUVTVF9MT0dJTikKIAkJCWNGWUkoMSwgKCIgR3Vlc3QgbG9naW4iKSk7IC8qIEJCIFNob3VsZCB3ZSBzZXQgYW55dGhpbmcKIAkJCQkJCQkgaW4gU2VzSW5mbyBzdHJ1Y3QgPyAqLwpAQCAtMzE0NSw4ICszMTUxLDggQEAKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCXJlbWFpbmluZ193b3JkcyA9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSAvIDI7CiAJCQkJCX0KLQkJCQkJbGVuID0KLQkJCQkJICAgIFVuaVN0cm5sZW4oKHdjaGFyX3QgKikgYmNjX3B0cixyZW1haW5pbmdfd29yZHMgLSAxKTsKKwkJCQkJbGVuID0gVW5pU3Rybmxlbigod2NoYXJfdCAqKSBiY2NfcHRyLAorCQkJCQkJCXJlbWFpbmluZ193b3JkcyAtIDEpOwogLyogV2UgbG9vayBmb3Igb2J2aW91cyBtZXNzZWQgdXAgYmNjIG9yIHN0cmluZ3MgaW4gcmVzcG9uc2Ugc28gd2UgZG8gbm90IGdvIG9mZgogICB0aGUgZW5kIHNpbmNlIChhdCBsZWFzdCkgV0lOMksgYW5kIFdpbmRvd3MgWFAgaGF2ZSBhIG1ham9yIGJ1ZyBpbiBub3QgbnVsbAogICB0ZXJtaW5hdGluZyBsYXN0IFVuaWNvZGUgc3RyaW5nIGluIHJlc3BvbnNlICAqLwpAQCAtMzIzMCw3ICszMjM2LDcgQEAKIAkJCQkJCTw9IEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSkgewogCQkJCQkJaWYgKHNlcy0+c2VydmVyT1MpCiAJCQkJCQkJa2ZyZWUoc2VzLT5zZXJ2ZXJPUyk7Ci0JCQkJCQlzZXMtPnNlcnZlck9TID0ga3phbGxvYyhsZW4gKyAxLEdGUF9LRVJORUwpOworCQkJCQkJc2VzLT5zZXJ2ZXJPUyA9IGt6YWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCQkJCQlzdHJuY3B5KHNlcy0+c2VydmVyT1MsYmNjX3B0ciwgbGVuKTsKIAogCQkJCQkJYmNjX3B0ciArPSBsZW47CkBAIC0zMjU5LDI4ICszMjY1LDI0IEBACiAJCQkJCQliY2NfcHRyWzBdID0gMDsKIAkJCQkJCWJjY19wdHIrKzsKIAkJCQkJfSBlbHNlCi0JCQkJCQljRllJKDEsCi0JCQkJCQkgICAgICgiZmllbGQgb2YgbGVuZ3RoICVkICIKKwkJCQkJCWNGWUkoMSwgKCJmaWVsZCBvZiBsZW5ndGggJWQgIgogCQkJCQkJICAgImV4dGVuZHMgYmV5b25kIGVuZCBvZiBzbWIgIiwKIAkJCQkJCSAgICAgIGxlbikpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJY0VSUk9SKDEsCi0JCQkJICAgICAgICgiIFNlY3VyaXR5IEJsb2IgZXh0ZW5kcyBiZXlvbmQgZW5kICIKKwkJCQljRVJST1IoMSwgKCJTZWN1cml0eSBCbG9iIGV4dGVuZHMgYmV5b25kIGVuZCAiCiAJCQkJCSJvZiBTTUIiKSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQljRVJST1IoMSwgKCJObyBzZXNzaW9uIHN0cnVjdHVyZSBwYXNzZWQgaW4uIikpOwogCQl9CiAJfSBlbHNlIHsKLQkJY0VSUk9SKDEsCi0JCSAgICAgICAoIiBJbnZhbGlkIFdvcmQgY291bnQgJWQ6ICIsCisJCWNFUlJPUigxLCAoIkludmFsaWQgV29yZCBjb3VudCAlZDogIiwKIAkJCXNtYl9idWZmZXJfcmVzcG9uc2UtPldvcmRDb3VudCkpOwogCQlyYyA9IC1FSU87CiAJfQogCi0JaWYgKHNtYl9idWZmZXIpCi0JCWNpZnNfYnVmX3JlbGVhc2Uoc21iX2J1ZmZlcik7CisJY2lmc19idWZfcmVsZWFzZShzbWJfYnVmZmVyKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTMzODksNiArMzM5MSwxOCBAQAogCQliY2NfcHRyID0gcEJ5dGVBcmVhKHNtYl9idWZmZXJfcmVzcG9uc2UpOwogCQlsZW5ndGggPSBzdHJubGVuKGJjY19wdHIsIEJDQyhzbWJfYnVmZmVyX3Jlc3BvbnNlKSAtIDIpOwogCQkvKiBza2lwIHNlcnZpY2UgZmllbGQgKE5COiB0aGlzIGZpZWxkIGlzIGFsd2F5cyBBU0NJSSkgKi8KKwkJaWYgKGxlbmd0aCA9PSAzKSB7CisJCQlpZiAoKGJjY19wdHJbMF0gPT0gJ0knKSAmJiAoYmNjX3B0clsxXSA9PSAnUCcpICYmCisJCQkgICAgKGJjY19wdHJbMl0gPT0gJ0MnKSkgeworCQkJCWNGWUkoMSwgKCJJUEMgY29ubmVjdGlvbiIpKTsKKwkJCQl0Y29uLT5pcGMgPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKGxlbmd0aCA9PSAyKSB7CisJCQlpZiAoKGJjY19wdHJbMF0gPT0gJ0EnKSAmJiAoYmNjX3B0clsxXSA9PSAnOicpKSB7CisJCQkJLyogdGhlIG1vc3QgY29tbW9uIGNhc2UgKi8KKwkJCQljRllJKDEsICgiZGlzayBzaGFyZSBjb25uZWN0aW9uIikpOworCQkJfQorCQl9CiAJCWJjY19wdHIgKz0gbGVuZ3RoICsgMTsKIAkJc3RybmNweSh0Y29uLT50cmVlTmFtZSwgdHJlZSwgTUFYX1RSRUVfU0laRSk7CiAJCWlmIChzbWJfYnVmZmVyLT5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKQEAgLTMzOTksOSArMzQxMywxMSBAQAogCQkJCWtmcmVlKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pOwogCQkJCXRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0gPQogCQkJCSAgICBremFsbG9jKGxlbmd0aCArIDIsIEdGUF9LRVJORUwpOwotCQkJCWNpZnNfc3RyZnJvbVVDU19sZSh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLAotCQkJCQkJICAgKF9fbGUxNiAqKSBiY2NfcHRyLAotCQkJCQkJICAgbGVuZ3RoLCBubHNfY29kZXBhZ2UpOworCQkJCWlmICh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKQorCQkJCQljaWZzX3N0cmZyb21VQ1NfbGUoCisJCQkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtLAorCQkJCQkJKF9fbGUxNiAqKSBiY2NfcHRyLAorCQkJCQkJbGVuZ3RoLCBubHNfY29kZXBhZ2UpOwogCQkJCWJjY19wdHIgKz0gMiAqIGxlbmd0aDsKIAkJCQliY2NfcHRyWzBdID0gMDsJLyogbnVsbCB0ZXJtaW5hdGUgdGhlIHN0cmluZyAqLwogCQkJCWJjY19wdHJbMV0gPSAwOwpAQCAtMzQxNiw4ICszNDMyLDkgQEAKIAkJCQlrZnJlZSh0Y29uLT5uYXRpdmVGaWxlU3lzdGVtKTsKIAkJCQl0Y29uLT5uYXRpdmVGaWxlU3lzdGVtID0KIAkJCQkgICAga3phbGxvYyhsZW5ndGggKyAxLCBHRlBfS0VSTkVMKTsKLQkJCQlzdHJuY3B5KHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0sIGJjY19wdHIsCi0JCQkJCWxlbmd0aCk7CisJCQkJaWYgKHRjb24tPm5hdGl2ZUZpbGVTeXN0ZW0pCisJCQkJCXN0cm5jcHkodGNvbi0+bmF0aXZlRmlsZVN5c3RlbSwgYmNjX3B0ciwKKwkJCQkJCWxlbmd0aCk7CiAJCQl9CiAJCQkvKiBlbHNlIGRvIG5vdCBib3RoZXIgY29weWluZyB0aGVzZSBpbmZvcm1hdGlvbiBmaWVsZHMqLwogCQl9CkBAIC0zNDMzLDggKzM0NTAsNyBAQAogCQlzZXMtPmlwY190aWQgPSBzbWJfYnVmZmVyX3Jlc3BvbnNlLT5UaWQ7CiAJfQogCi0JaWYgKHNtYl9idWZmZXIpCi0JCWNpZnNfYnVmX3JlbGVhc2Uoc21iX2J1ZmZlcik7CisJY2lmc19idWZfcmVsZWFzZShzbWJfYnVmZmVyKTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IDQ4MzBhY2MuLjc5MzQwNGIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvZGlyLmMKKysrIGIvZnMvY2lmcy9kaXIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgIHZmcyBvcGVyYXRpb25zIHRoYXQgZGVhbCB3aXRoIGRlbnRyaWVzCiAgKgotICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDUKKyAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA3CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjY5LDcgKzI2OSw3IEBACiAJCQlDSUZTU01CQ2xvc2UoeGlkLCBwVGNvbiwgZmlsZUhhbmRsZSk7CiAJCX0gZWxzZSBpZiAobmV3aW5vZGUpIHsKIAkJCXBDaWZzRmlsZSA9Ci0JCQkgICBremFsbG9jKHNpemVvZiAoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOworCQkJICAga3phbGxvYyhzaXplb2Yoc3RydWN0IGNpZnNGaWxlSW5mbyksIEdGUF9LRVJORUwpOwogCiAJCQlpZiAocENpZnNGaWxlID09IE5VTEwpCiAJCQkJZ290byBjaWZzX2NyZWF0ZV9vdXQ7CkBAIC0zOTcsNyArMzk3LDcgQEAKIAkJCQkvKiBCQiBEbyBub3QgYm90aGVyIHRvIGRlY29kZSBidWYgc2luY2Ugbm8KIAkJCQkgICBsb2NhbCBpbm9kZSB5ZXQgdG8gcHV0IHRpbWVzdGFtcHMgaW4sCiAJCQkJICAgYnV0IHdlIGNhbiByZXVzZSBpdCBzYWZlbHkgKi8KLQkJCQlpbnQgYnl0ZXNfd3JpdHRlbjsKKwkJCQl1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbjsKIAkJCQlzdHJ1Y3Qgd2luX2RldiAqcGRldjsKIAkJCQlwZGV2ID0gKHN0cnVjdCB3aW5fZGV2ICopYnVmOwogCQkJCWlmIChTX0lTQ0hSKG1vZGUpKSB7CkBAIC00NTAsOCArNDUwLDcgQEAKIAogCXhpZCA9IEdldFhpZCgpOwogCi0JY0ZZSSgxLAotCSAgICAgKCIgcGFyZW50IGlub2RlID0gMHglcCBuYW1lIGlzOiAlcyBhbmQgZGVudHJ5ID0gMHglcCIsCisJY0ZZSSgxLCAoIiBwYXJlbnQgaW5vZGUgPSAweCVwIG5hbWUgaXM6ICVzIGFuZCBkZW50cnkgPSAweCVwIiwKIAkgICAgICBwYXJlbnRfZGlyX2lub2RlLCBkaXJlbnRyeS0+ZF9uYW1lLm5hbWUsIGRpcmVudHJ5KSk7CiAKIAkvKiBjaGVjayB3aGV0aGVyIHBhdGggZXhpc3RzICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2V4cG9ydC5jIGIvZnMvY2lmcy9leHBvcnQuYwppbmRleCA4OTNmZDBhLi5kNjE0YjkxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2V4cG9ydC5jCisrKyBiL2ZzL2NpZnMvZXhwb3J0LmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgogI2luY2x1ZGUgImNpZnNnbG9iLmgiCiAjaW5jbHVkZSAiY2lmc19kZWJ1Zy5oIgorI2luY2x1ZGUgImNpZnNmcy5oIgogCiAjaWZkZWYgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqY2lmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggODk0YjFmNy4uMWU3ZTRjMCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogaW50IGNpZnNfY2xvc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IHJjID0gMDsKLQlpbnQgeGlkOworCWludCB4aWQsIHRpbWVvdXQ7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKIAlzdHJ1Y3QgY2lmc1Rjb25JbmZvICpwVGNvbjsKIAlzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpwU01CRmlsZSA9CkBAIC00ODUsOSArNDg1LDkgQEAKIAkJCS8qIG5vIHNlbnNlIHJlY29ubmVjdGluZyB0byBjbG9zZSBhIGZpbGUgdGhhdCBpcwogCQkJICAgYWxyZWFkeSBjbG9zZWQgKi8KIAkJCWlmIChwVGNvbi0+dGlkU3RhdHVzICE9IENpZnNOZWVkUmVjb25uZWN0KSB7Ci0JCQkJaW50IHRpbWVvdXQgPSAyOworCQkJCXRpbWVvdXQgPSAyOwogCQkJCXdoaWxlICgoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT53cnRQZW5kaW5nKSAhPSAwKQotCQkJCQkgJiYgKHRpbWVvdXQgPCAxMDAwKSApIHsKKwkJCQkJJiYgKHRpbWVvdXQgPD0gMjA0OCkpIHsKIAkJCQkJLyogR2l2ZSB3cml0ZSBhIGJldHRlciBjaGFuY2UgdG8gZ2V0IHRvCiAJCQkJCXNlcnZlciBhaGVhZCBvZiB0aGUgY2xvc2UuICBXZSBkbyBub3QKIAkJCQkJd2FudCB0byBhZGQgYSB3YWl0X3EgaGVyZSBhcyBpdCB3b3VsZApAQCAtNTIyLDEyICs1MjIsMzAgQEAKIAkJbGlzdF9kZWwoJnBTTUJGaWxlLT5mbGlzdCk7CiAJCWxpc3RfZGVsKCZwU01CRmlsZS0+dGxpc3QpOwogCQl3cml0ZV91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQl0aW1lb3V0ID0gMTA7CisJCS8qIFdlIHdhaXRlZCBhYm92ZSB0byBnaXZlIHRoZSBTTUJXcml0ZSBhIGNoYW5jZSB0byBpc3N1ZQorCQkgICBvbiB0aGUgd2lyZSAoc28gd2UgZG8gbm90IGdldCBTTUJXcml0ZSByZXR1cm5pbmcgRUJBREYKKwkJICAgaWYgd3JpdGVwYWdlcyBpcyByYWNpbmcgd2l0aCBjbG9zZS4gIE5vdGUgdGhhdCB3cml0ZXBhZ2VzCisJCSAgIGRvZXMgbm90IHNwZWNpZnkgYSBmaWxlIGhhbmRsZSwgc28gaXQgaXMgcG9zc2libGUgZm9yIGEgZmlsZQorCQkgICB0byBiZSBvcGVuZWQgdHdpY2UsIGFuZCB0aGUgYXBwbGljYXRpb24gY2xvc2UgdGhlICJ3cm9uZyIKKwkJICAgZmlsZSBoYW5kbGUgLSBpbiB0aGVzZSBjYXNlcyB3ZSBkZWxheSBsb25nIGVub3VnaCB0byBhbGxvdworCQkgICB0aGUgU01CV3JpdGUgdG8gZ2V0IG9uIHRoZSB3aXJlIGJlZm9yZSB0aGUgU01CIENsb3NlLgorCQkgICBXZSBhbGxvdyB0b3RhbCB3YWl0IGhlcmUgb3ZlciA0NSBzZWNvbmRzLCBtb3JlIHRoYW4KKwkJICAgb3Bsb2NrIGJyZWFrIHRpbWUsIGFuZCBtb3JlIHRoYW4gZW5vdWdoIHRvIGFsbG93IGFueSB3cml0ZQorCQkgICB0byBjb21wbGV0ZSBvbiB0aGUgc2VydmVyLCBvciB0byB0aW1lIG91dCBvbiB0aGUgY2xpZW50ICovCisJCXdoaWxlICgoYXRvbWljX3JlYWQoJnBTTUJGaWxlLT53cnRQZW5kaW5nKSAhPSAwKQorCQkJCSYmICh0aW1lb3V0IDw9IDUwMDAwKSkgeworCQkJY0VSUk9SKDEsICgid3JpdGVzIHBlbmRpbmcsIGRlbGF5IGZyZWUgb2YgaGFuZGxlIikpOworCQkJbXNsZWVwKHRpbWVvdXQpOworCQkJdGltZW91dCAqPSA4OworCQl9CiAJCWtmcmVlKHBTTUJGaWxlLT5zZWFyY2hfcmVzdW1lX25hbWUpOwogCQlrZnJlZShmaWxlLT5wcml2YXRlX2RhdGEpOwogCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwogCX0gZWxzZQogCQlyYyA9IC1FQkFERjsKIAorCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJaWYgKGxpc3RfZW1wdHkoJihDSUZTX0koaW5vZGUpLT5vcGVuRmlsZUxpc3QpKSkgewogCQljRllJKDEsICgiY2xvc2luZyBsYXN0IG9wZW4gaW5zdGFuY2UgZm9yIGlub2RlICVwIiwgaW5vZGUpKTsKIAkJLyogaWYgdGhlIGZpbGUgaXMgbm90IG9wZW4gd2UgZG8gbm90IGtub3cgaWYgd2UgY2FuIGNhY2hlIGluZm8KQEAgLTUzNSw2ICs1NTMsNyBAQAogCQlDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZVJlYWQgPSBGQUxTRTsKIAkJQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwgID0gRkFMU0U7CiAJfQorCXJlYWRfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKIAlpZiAoKHJjID09IDApICYmIENJRlNfSShpbm9kZSktPndyaXRlX2JlaGluZF9yYykKIAkJcmMgPSBDSUZTX0koaW5vZGUpLT53cml0ZV9iZWhpbmRfcmM7CiAJRnJlZVhpZCh4aWQpOwpAQCAtNzY3LDcgKzc4Niw4IEBACiAJCQltdXRleF9sb2NrKCZmaWQtPmxvY2tfbXV0ZXgpOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGxpLCB0bXAsICZmaWQtPmxsaXN0LCBsbGlzdCkgewogCQkJCWlmIChwZkxvY2stPmZsX3N0YXJ0IDw9IGxpLT5vZmZzZXQgJiYKLQkJCQkJCWxlbmd0aCA+PSBsaS0+bGVuZ3RoKSB7CisJCQkJCQkocGZMb2NrLT5mbF9zdGFydCArIGxlbmd0aCkgPj0KKwkJCQkJCShsaS0+b2Zmc2V0ICsgbGktPmxlbmd0aCkpIHsKIAkJCQkJc3RvcmVkX3JjID0gQ0lGU1NNQkxvY2soeGlkLCBwVGNvbiwKIAkJCQkJCQluZXRmaWQsCiAJCQkJCQkJbGktPmxlbmd0aCwgbGktPm9mZnNldCwKQEAgLTEwMjIsNiArMTA0Miw3IEBACiAJfQogCiAJcmVhZF9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKK3JlZmluZF93cml0YWJsZToKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9wZW5fZmlsZSwgJmNpZnNfaW5vZGUtPm9wZW5GaWxlTGlzdCwgZmxpc3QpIHsKIAkJaWYgKG9wZW5fZmlsZS0+Y2xvc2VQZW5kKQogCQkJY29udGludWU7CkBAIC0xMDI5LDI0ICsxMDUwLDQ5IEBACiAJCSAgICAoKG9wZW5fZmlsZS0+cGZpbGUtPmZfZmxhZ3MgJiBPX1JEV1IpIHx8CiAJCSAgICAgKG9wZW5fZmlsZS0+cGZpbGUtPmZfZmxhZ3MgJiBPX1dST05MWSkpKSB7CiAJCQlhdG9taWNfaW5jKCZvcGVuX2ZpbGUtPndydFBlbmRpbmcpOworCisJCQlpZiAoIW9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgeworCQkJCS8qIGZvdW5kIGEgZ29vZCB3cml0YWJsZSBmaWxlICovCisJCQkJcmVhZF91bmxvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJCXJldHVybiBvcGVuX2ZpbGU7CisJCQl9CisJCiAJCQlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7Ci0JCQlpZiAoKG9wZW5fZmlsZS0+aW52YWxpZEhhbmRsZSkgJiYKLQkJCSAgICghb3Blbl9maWxlLT5jbG9zZVBlbmQpIC8qIEJCIGZpeG1lIC1zaW5jZSB0aGUgc2Vjb25kIGNsYXVzZSBjYW4gbm90IGJlIHRydWUgcmVtb3ZlIGl0IEJCICovKSB7Ci0JCQkJcmMgPSBjaWZzX3Jlb3Blbl9maWxlKG9wZW5fZmlsZS0+cGZpbGUsIEZBTFNFKTsKLQkJCQkvKiBpZiBpdCBmYWlscywgdHJ5IGFub3RoZXIgaGFuZGxlIC0gbWlnaHQgYmUgKi8KLQkJCQkvKiBkYW5nZXJvdXMgdG8gaG9sZCB1cCB3cml0ZXBhZ2VzIHdpdGggcmV0cnkgKi8KLQkJCQlpZiAocmMpIHsKLQkJCQkJY0ZZSSgxLAotCQkJCQkgICAgICAoImZhaWxlZCBvbiByZW9wZW4gZmlsZSBpbiB3cCIpKTsKKwkJCS8qIEhhZCB0byB1bmxvY2sgc2luY2UgZm9sbG93aW5nIGNhbGwgY2FuIGJsb2NrICovCisJCQlyYyA9IGNpZnNfcmVvcGVuX2ZpbGUob3Blbl9maWxlLT5wZmlsZSwgRkFMU0UpOworCQkJaWYgKCFyYykgeyAKKwkJCQlpZiAoIW9wZW5fZmlsZS0+Y2xvc2VQZW5kKQorCQkJCQlyZXR1cm4gb3Blbl9maWxlOworCQkJCWVsc2UgeyAvKiBzdGFydCBvdmVyIGluIGNhc2UgdGhpcyB3YXMgZGVsZXRlZCAqLworCQkJCSAgICAgICAvKiBzaW5jZSB0aGUgbGlzdCBjb3VsZCBiZSBtb2RpZmllZCAqLwogCQkJCQlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwotCQkJCQkvKiBjYW4gbm90IHVzZSB0aGlzIGhhbmRsZSwgbm8gd3JpdGUKLQkJCQkJcGVuZGluZyBvbiB0aGlzIG9uZSBhZnRlciBhbGwgKi8KLQkJCQkJYXRvbWljX2RlYwotCQkJCQkgICAgICgmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKLQkJCQkJY29udGludWU7CisJCQkJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CisJCQkJCWdvdG8gcmVmaW5kX3dyaXRhYmxlOwogCQkJCX0KIAkJCX0KLQkJCXJldHVybiBvcGVuX2ZpbGU7CisKKwkJCS8qIGlmIGl0IGZhaWxzLCB0cnkgYW5vdGhlciBoYW5kbGUgaWYgcG9zc2libGUgLQorCQkJKHdlIGNhbiBub3QgZG8gdGhpcyBpZiBjbG9zZVBlbmRpbmcgc2luY2UKKwkJCWxvb3AgY291bGQgYmUgbW9kaWZpZWQgLSBpbiB3aGljaCBjYXNlIHdlCisJCQloYXZlIHRvIHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QKKwkJCWFnYWluLiBOb3RlIHRoYXQgaXQgd291bGQgYmUgYmFkCisJCQl0byBob2xkIHVwIHdyaXRlcGFnZXMgaGVyZSAocmF0aGVyIHRoYW4KKwkJCWluIGNhbGxlcikgd2l0aCBjb250aW51b3VzIHJldHJpZXMgKi8KKwkJCWNGWUkoMSwgKCJ3cCBmYWlsZWQgb24gcmVvcGVuIGZpbGUiKSk7CisJCQlyZWFkX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOworCQkJLyogY2FuIG5vdCB1c2UgdGhpcyBoYW5kbGUsIG5vIHdyaXRlCisJCQkgICBwZW5kaW5nIG9uIHRoaXMgb25lIGFmdGVyIGFsbCAqLworCQkJYXRvbWljX2RlYygmb3Blbl9maWxlLT53cnRQZW5kaW5nKTsKKwkJCQorCQkJaWYgKG9wZW5fZmlsZS0+Y2xvc2VQZW5kKSAvKiBsaXN0IGNvdWxkIGhhdmUgY2hhbmdlZCAqLworCQkJCWdvdG8gcmVmaW5kX3dyaXRhYmxlOworCQkJLyogZWxzZSB3ZSBzaW1wbHkgY29udGludWUgdG8gdGhlIG5leHQgZW50cnkuIFRodXMKKwkJCSAgIHdlIGRvIG5vdCBsb29wIG9uIHJlb3BlbiBlcnJvcnMuICBJZiB3ZQorCQkJICAgY2FuIG5vdCByZW9wZW4gdGhlIGZpbGUsIGZvciBleGFtcGxlIGlmIHdlCisJCQkgICByZWNvbm5lY3RlZCB0byBhIHNlcnZlciB3aXRoIGFub3RoZXIgY2xpZW50CisJCQkgICByYWNpbmcgdG8gZGVsZXRlIG9yIGxvY2sgdGhlIGZpbGUgd2Ugd291bGQgbm90CisJCQkgICBtYWtlIHByb2dyZXNzIGlmIHdlIHJlc3RhcnRlZCBiZWZvcmUgdGhlIGJlZ2lubmluZworCQkJICAgb2YgdGhlIGxvb3AgaGVyZS4gKi8KIAkJfQogCX0KIAlyZWFkX3VubG9jaygmR2xvYmFsU01CU2VzbG9jayk7CkBAIC0xNzA5LDcgKzE3NTUsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBjaWZzX3NiX2luZm8gKmNpZnNfc2I7CiAJc3RydWN0IGNpZnNUY29uSW5mbyAqcFRjb247Ci0JaW50IGJ5dGVzX3JlYWQgPSAwOworCXVuc2lnbmVkIGludCBieXRlc19yZWFkID0gMDsKIAl1bnNpZ25lZCBpbnQgcmVhZF9zaXplLCBpOwogCWNoYXIgKnNtYl9yZWFkX2RhdGEgPSBOVUxMOwogCXN0cnVjdCBzbWJfY29tX3JlYWRfcnNwICpwU01CcjsKQEAgLTE4MDMsNyArMTg0OSw3IEBACiAKIAkJCWkgKz0gIGJ5dGVzX3JlYWQgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAkJCWNpZnNfc3RhdHNfYnl0ZXNfcmVhZChwVGNvbiwgYnl0ZXNfcmVhZCk7Ci0JCQlpZiAoKGludCkoYnl0ZXNfcmVhZCAmIFBBR0VfQ0FDSEVfTUFTSykgIT0gYnl0ZXNfcmVhZCkgeworCQkJaWYgKChieXRlc19yZWFkICYgUEFHRV9DQUNIRV9NQVNLKSAhPSBieXRlc19yZWFkKSB7CiAJCQkJaSsrOyAvKiBhY2NvdW50IGZvciBwYXJ0aWFsIHBhZ2UgKi8KIAogCQkJCS8qIHNlcnZlciBjb3B5IG9mIGZpbGUgY2FuIGhhdmUgc21hbGxlciBzaXplCmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggZGQ0MTY3Ny4uNWU4YjM4OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCWlub2RlLT5pX21vZGUgPSBsZTY0X3RvX2NwdShmaW5kRGF0YS5QZXJtaXNzaW9ucyk7CiAJCS8qIHNpbmNlIHdlIHNldCB0aGUgaW5vZGUgdHlwZSBiZWxvdyB3ZSBuZWVkIHRvIG1hc2sgb2ZmCiAJCSAgIHRvIGF2b2lkIHN0cmFuZ2UgcmVzdWx0cyBpZiBiaXRzIHNldCBhYm92ZSAqLwotCQkJaW5vZGUtPmlfbW9kZSAmPSB+U19JRk1UOworCQlpbm9kZS0+aV9tb2RlICY9IH5TX0lGTVQ7CiAJCWlmICh0eXBlID09IFVOSVhfRklMRSkgewogCQkJaW5vZGUtPmlfbW9kZSB8PSBTX0lGUkVHOwogCQl9IGVsc2UgaWYgKHR5cGUgPT0gVU5JWF9TWU1MSU5LKSB7CkBAIC01NzUsMTkgKzU3NSwzMyBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNpZnNfaXBjX2lub2RlX29wcyA9IHsKKwkubG9va3VwID0gY2lmc19sb29rdXAsCit9OworCiAvKiBnZXRzIHJvb3QgaW5vZGUgKi8KIHZvaWQgY2lmc19yZWFkX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW50IHhpZDsKKwlpbnQgeGlkLCByYzsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCiAJY2lmc19zYiA9IENJRlNfU0IoaW5vZGUtPmlfc2IpOwogCXhpZCA9IEdldFhpZCgpOwogCiAJaWYgKGNpZnNfc2ItPnRjb24tPnVuaXhfZXh0KQotCQljaWZzX2dldF9pbm9kZV9pbmZvX3VuaXgoJmlub2RlLCAiIiwgaW5vZGUtPmlfc2IsIHhpZCk7CisJCXJjID0gY2lmc19nZXRfaW5vZGVfaW5mb191bml4KCZpbm9kZSwgIiIsIGlub2RlLT5pX3NiLCB4aWQpOwogCWVsc2UKLQkJY2lmc19nZXRfaW5vZGVfaW5mbygmaW5vZGUsICIiLCBOVUxMLCBpbm9kZS0+aV9zYiwgeGlkKTsKKwkJcmMgPSBjaWZzX2dldF9pbm9kZV9pbmZvKCZpbm9kZSwgIiIsIE5VTEwsIGlub2RlLT5pX3NiLCB4aWQpOworCWlmIChyYyAmJiBjaWZzX3NiLT50Y29uLT5pcGMpIHsKKwkJY0ZZSSgxLCAoImlwYyBjb25uZWN0aW9uIC0gZmFrZSByZWFkIGlub2RlIikpOworCQlpbm9kZS0+aV9tb2RlIHw9IFNfSUZESVI7CisJCWlub2RlLT5pX25saW5rID0gMjsKKwkJaW5vZGUtPmlfb3AgPSAmY2lmc19pcGNfaW5vZGVfb3BzOworCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOworCQlpbm9kZS0+aV91aWQgPSBjaWZzX3NiLT5tbnRfdWlkOworCQlpbm9kZS0+aV9naWQgPSBjaWZzX3NiLT5tbnRfZ2lkOworCX0KKwogCS8qIGNhbiBub3QgY2FsbCBtYWNybyBGcmVlWGlkIGhlcmUgc2luY2UgaW4gYSB2b2lkIGZ1bmMgKi8KIAlfRnJlZVhpZCh4aWQpOwogfQpAQCAtOTE5LDE4ICs5MzMsMjUgQEAKIAkJCWdvdG8gbWtkaXJfb3V0OwogCQl9CiAKKwkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOwogCQlyYyA9IENJRlNQT1NJWENyZWF0ZSh4aWQsIHBUY29uLCBTTUJfT19ESVJFQ1RPUlkgfCBTTUJfT19DUkVBVCwKIAkJCQltb2RlLCBOVUxMIC8qIG5ldGZpZCAqLywgcEluZm8sICZvcGxvY2ssCiAJCQkJZnVsbF9wYXRoLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0JCWlmIChyYykgeworCQlpZiAocmMgPT0gLUVPUE5PVFNVUFApIHsKKwkJCWtmcmVlKHBJbmZvKTsKKwkJCWdvdG8gbWtkaXJfcmV0cnlfb2xkOworCQl9IGVsc2UgaWYgKHJjKSB7CiAJCQljRllJKDEsICgicG9zaXggbWtkaXIgcmV0dXJuZWQgMHgleCIsIHJjKSk7CiAJCQlkX2Ryb3AoZGlyZW50cnkpOwogCQl9IGVsc2UgewogCQkJaW50IG9ial90eXBlOwotCQkJaWYgKHBJbmZvLT5UeXBlID09IC0xKSAvKiBubyByZXR1cm4gaW5mbyAtIGdvIHF1ZXJ5ICovCisJCQlpZiAocEluZm8tPlR5cGUgPT0gY3B1X3RvX2xlMzIoLTEpKSB7CisJCQkJLyogbm8gcmV0dXJuIGluZm8sIGdvIHF1ZXJ5IGZvciBpdCAqLworCQkJCWtmcmVlKHBJbmZvKTsKIAkJCQlnb3RvIG1rZGlyX2dldF9pbmZvOworCQkJfQogLypCQiBjaGVjayAoY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX1NFVF9VSUQgKSB0byBzZWUgaWYgbmVlZAogCXRvIHNldCB1aWQvZ2lkICovCiAJCQlpbmNfbmxpbmsoaW5vZGUpOwpAQCAtOTQwLDggKzk2MSwxMCBAQAogCQkJCWRpcmVudHJ5LT5kX29wID0gJmNpZnNfZGVudHJ5X29wczsKIAogCQkJbmV3aW5vZGUgPSBuZXdfaW5vZGUoaW5vZGUtPmlfc2IpOwotCQkJaWYgKG5ld2lub2RlID09IE5VTEwpCisJCQlpZiAobmV3aW5vZGUgPT0gTlVMTCkgeworCQkJCWtmcmVlKHBJbmZvKTsKIAkJCQlnb3RvIG1rZGlyX2dldF9pbmZvOworCQkJfQogCQkJLyogSXMgYW4gaV9pbm8gb2YgemVybyBsZWdhbD8gKi8KIAkJCS8qIEFyZSB0aGVyZSBzYW5pdHkgY2hlY2tzIHdlIGNhbiB1c2UgdG8gZW5zdXJlIHRoYXQKIAkJCSAgIHRoZSBzZXJ2ZXIgaXMgcmVhbGx5IGZpbGxpbmcgaW4gdGhhdCBmaWVsZD8gKi8KQEAgLTk3Miw3ICs5OTUsNyBAQAogCQlrZnJlZShwSW5mbyk7CiAJCWdvdG8gbWtkaXJfb3V0OwogCX0KLQorbWtkaXJfcmV0cnlfb2xkOgogCS8qIEJCIGFkZCBzZXR0aW5nIHRoZSBlcXVpdmFsZW50IG9mIG1vZGUgdmlhIENyZWF0ZVggdy9BQ0xzICovCiAJcmMgPSBDSUZTU01CTWtEaXIoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwpAQCAtMTM3Nyw4ICsxNDAwLDE3IEBACiAJfQogCWlfc2l6ZV93cml0ZShpbm9kZSwgb2Zmc2V0KTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisJLyoKKwkgKiB1bm1hcF9tYXBwaW5nX3JhbmdlIGlzIGNhbGxlZCB0d2ljZSwgZmlyc3Qgc2ltcGx5IGZvciBlZmZpY2llbmN5CisJICogc28gdGhhdCB0cnVuY2F0ZV9pbm9kZV9wYWdlcyBkb2VzIGZld2VyIHNpbmdsZS1wYWdlIHVubWFwcy4gSG93ZXZlcgorCSAqIGFmdGVyIHRoaXMgZmlyc3QgY2FsbCwgYW5kIGJlZm9yZSB0cnVuY2F0ZV9pbm9kZV9wYWdlcyBmaW5pc2hlcywKKwkgKiBpdCBpcyBwb3NzaWJsZSBmb3IgcHJpdmF0ZSBwYWdlcyB0byBiZSBDT1dlZCwgd2hpY2ggcmVtYWluIGFmdGVyCisJICogdHJ1bmNhdGVfaW5vZGVfcGFnZXMgZmluaXNoZXMsIGhlbmNlIHRoZSBzZWNvbmQgdW5tYXBfbWFwcGluZ19yYW5nZQorCSAqIGNhbGwgbXVzdCBiZSBtYWRlIGZvciBjb3JyZWN0bmVzcy4KKwkgKi8KIAl1bm1hcF9tYXBwaW5nX3JhbmdlKG1hcHBpbmcsIG9mZnNldCArIFBBR0VfU0laRSAtIDEsIDAsIDEpOwogCXRydW5jYXRlX2lub2RlX3BhZ2VzKG1hcHBpbmcsIG9mZnNldCk7CisJdW5tYXBfbWFwcGluZ19yYW5nZShtYXBwaW5nLCBvZmZzZXQgKyBQQUdFX1NJWkUgLSAxLCAwLCAxKTsKIAlnb3RvIG91dF90cnVuY2F0ZTsKIAogZG9fZXhwYW5kOgpAQCAtMTQ2OSw3ICsxNTAxLDcgQEAKIAkJCWF0b21pY19kZWMoJm9wZW5fZmlsZS0+d3J0UGVuZGluZyk7CiAJCQljRllJKDEsICgiU2V0RlNpemUgZm9yIGF0dHJzIHJjID0gJWQiLCByYykpOwogCQkJaWYgKChyYyA9PSAtRUlOVkFMKSB8fCAocmMgPT0gLUVPUE5PVFNVUFApKSB7Ci0JCQkJaW50IGJ5dGVzX3dyaXR0ZW47CisJCQkJdW5zaWduZWQgaW50IGJ5dGVzX3dyaXR0ZW47CiAJCQkJcmMgPSBDSUZTU01CV3JpdGUoeGlkLCBwVGNvbiwKIAkJCQkJCSAgbmZpZCwgMCwgYXR0cnMtPmlhX3NpemUsCiAJCQkJCQkgICZieXRlc193cml0dGVuLCBOVUxMLCBOVUxMLApAQCAtMTUwMiw3ICsxNTM0LDcgQEAKIAkJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJCWlmIChyYyA9PSAwKSB7Ci0JCQkJCWludCBieXRlc193cml0dGVuOworCQkJCQl1bnNpZ25lZCBpbnQgYnl0ZXNfd3JpdHRlbjsKIAkJCQkJcmMgPSBDSUZTU01CV3JpdGUoeGlkLCBwVGNvbiwKIAkJCQkJCQluZXRmaWQsIDAsCiAJCQkJCQkJYXR0cnMtPmlhX3NpemUsCkBAIC0xNTM4LDYgKzE1NzAsMTEgQEAKIAl9CiAKIAl0aW1lX2J1Zi5BdHRyaWJ1dGVzID0gMDsKKworCS8qIHNraXAgbW9kZSBjaGFuZ2UgaWYgaXQncyBqdXN0IGZvciBjbGVhcmluZyBzZXR1aWQvc2V0Z2lkICovCisJaWYgKGF0dHJzLT5pYV92YWxpZCAmIChBVFRSX0tJTExfU1VJRHxBVFRSX0tJTExfU0dJRCkpCisJCWF0dHJzLT5pYV92YWxpZCAmPSB+QVRUUl9NT0RFOworCiAJaWYgKGF0dHJzLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkgewogCQljRllJKDEsICgiTW9kZSBjaGFuZ2VkIHRvIDB4JXgiLCBhdHRycy0+aWFfbW9kZSkpOwogCQltb2RlID0gYXR0cnMtPmlhX21vZGU7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2xpbmsuYyBiL2ZzL2NpZnMvbGluay5jCmluZGV4IDZhODVlZjcuLjExZjI2NTcgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvbGluay5jCisrKyBiL2ZzL2NpZnMvbGluay5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAljaGFyICp0bXBfcGF0aCA9IE5VTEw7CiAJY2hhciAqdG1wYnVmZmVyOwogCXVuc2lnbmVkIGNoYXIgKnJlZmVycmFscyA9IE5VTEw7Ci0JaW50IG51bV9yZWZlcnJhbHMgPSAwOworCXVuc2lnbmVkIGludCBudW1fcmVmZXJyYWxzID0gMDsKIAlpbnQgbGVuOwogCV9fdTE2IGZpZDsKIApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9taXNjLmMgYi9mcy9jaWZzL21pc2MuYwppbmRleCAwYmNlYzA4Li41MWVjNjgxIDEwMDY0NAotLS0gYS9mcy9jaWZzL21pc2MuYworKysgYi9mcy9jaWZzL21pc2MuYwpAQCAtMTY5LDcgKzE2OSw2IEBACiB2b2lkCiBjaWZzX2J1Zl9yZWxlYXNlKHZvaWQgKmJ1Zl90b19mcmVlKQogewotCiAJaWYgKGJ1Zl90b19mcmVlID09IE5VTEwpIHsKIAkJLyogY0ZZSSgxLCAoIk51bGwgYnVmZmVyIHBhc3NlZCB0byBjaWZzX2J1Zl9yZWxlYXNlIikpOyovCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbmV0bWlzYy5jIGIvZnMvY2lmcy9uZXRtaXNjLmMKaW5kZXggMmJmZWQzZi4uZjA2MzU5YyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9uZXRtaXNjLmMKKysrIGIvZnMvY2lmcy9uZXRtaXNjLmMKQEAgLTExNCwxMCArMTE0LDE2IEBACiAJe0VSUnVzZW1weCwgLUVJT30sCiAJe0VSUnVzZXN0ZCwgLUVJT30sCiAJe0VSUl9OT1RJRllfRU5VTV9ESVIsIC1FTk9CVUZTfSwKLQl7RVJSYWNjb3VudGV4cGlyZWQsIC1FQUNDRVN9LAorCXtFUlJub1N1Y2hVc2VyLCAtRUFDQ0VTfSwKKy8qCXtFUlJhY2NvdW50ZXhwaXJlZCwgLUVBQ0NFU30sCiAJe0VSUmJhZGNsaWVudCwgLUVBQ0NFU30sCiAJe0VSUmJhZExvZ29uVGltZSwgLUVBQ0NFU30sCi0Je0VSUnBhc3N3b3JkRXhwaXJlZCwgLUVBQ0NFU30sCisJe0VSUnBhc3N3b3JkRXhwaXJlZCwgLUVBQ0NFU30sKi8KKwl7RVJSYWNjb3VudGV4cGlyZWQsIC1FS0VZRVhQSVJFRH0sCisJe0VSUmJhZGNsaWVudCwgLUVBQ0NFU30sCisJe0VSUmJhZExvZ29uVGltZSwgLUVBQ0NFU30sCisJe0VSUnBhc3N3b3JkRXhwaXJlZCwgLUVLRVlFWFBJUkVEfSwKKwogCXtFUlJub3N1cHBvcnQsIC1FSU5WQUx9LAogCXswLCAwfQogfTsKQEAgLTI3MCw3ICsyNzYsNyBAQAogCSBmcm9tIE5UX1NUQVRVU19OT19TVUNIX1VTRVIgdG8gTlRfU1RBVFVTX0xPR09OX0ZBSUxVUkUKIAkgZHVyaW5nIHRoZSBzZXNzaW9uIHNldHVwIH0gKi8KIAl7Ci0JRVJSRE9TLCBFUlJub2FjY2VzcywgTlRfU1RBVFVTX05PX1NVQ0hfVVNFUn0sIHsKKwlFUlJET1MsIEVSUm5vYWNjZXNzLCBOVF9TVEFUVVNfTk9fU1VDSF9VU0VSfSwgeyAvKiBjb3VsZCBtYXAgdG8gMjIzOCAqLwogCUVSUkhSRCwgRVJSZ2VuZXJhbCwgTlRfU1RBVFVTX0dST1VQX0VYSVNUU30sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19OT19TVUNIX0dST1VQfSwgewogCUVSUkhSRCwgRVJSZ2VuZXJhbCwgTlRfU1RBVFVTX01FTUJFUl9JTl9HUk9VUH0sIHsKQEAgLTI4NSwxMCArMjkxLDEwIEBACiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfUEFTU1dPUkRfUkVTVFJJQ1RJT059LCB7CiAJRVJSRE9TLCBFUlJub2FjY2VzcywgTlRfU1RBVFVTX0xPR09OX0ZBSUxVUkV9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfQUNDT1VOVF9SRVNUUklDVElPTn0sIHsKLQlFUlJTUlYsIDIyNDEsIE5UX1NUQVRVU19JTlZBTElEX0xPR09OX0hPVVJTfSwgewotCUVSUlNSViwgMjI0MCwgTlRfU1RBVFVTX0lOVkFMSURfV09SS1NUQVRJT059LCB7CisJRVJSU1JWLCBFUlJiYWRMb2dvblRpbWUsIE5UX1NUQVRVU19JTlZBTElEX0xPR09OX0hPVVJTfSwgeworCUVSUlNSViwgRVJSYmFkY2xpZW50LCBOVF9TVEFUVVNfSU5WQUxJRF9XT1JLU1RBVElPTn0sIHsKIAlFUlJTUlYsIEVSUnBhc3N3b3JkRXhwaXJlZCwgTlRfU1RBVFVTX1BBU1NXT1JEX0VYUElSRUR9LCB7Ci0JRVJSU1JWLCAyMjM5LCBOVF9TVEFUVVNfQUNDT1VOVF9ESVNBQkxFRH0sIHsKKwlFUlJTUlYsIEVSUmFjY291bnRleHBpcmVkLCBOVF9TVEFUVVNfQUNDT1VOVF9ESVNBQkxFRH0sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19OT05FX01BUFBFRH0sIHsKIAlFUlJIUkQsIEVSUmdlbmVyYWwsIE5UX1NUQVRVU19UT09fTUFOWV9MVUlEU19SRVFVRVNURUR9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfTFVJRFNfRVhIQVVTVEVEfSwgewpAQCAtNTg1LDcgKzU5MSw3IEBACiAJRVJSRE9TLCBFUlJub2FjY2VzcywgTlRfU1RBVFVTX1RSVVNUX0ZBSUxVUkV9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfTVVUQU5UX0xJTUlUX0VYQ0VFREVEfSwgewogCUVSUkRPUywgRVJSbmV0bG9nb25Ob3RTdGFydGVkLCBOVF9TVEFUVVNfTkVUTE9HT05fTk9UX1NUQVJURUR9LCB7Ci0JRVJSU1JWLCAyMjM5LCBOVF9TVEFUVVNfQUNDT1VOVF9FWFBJUkVEfSwgeworCUVSUlNSViwgRVJSYWNjb3VudGV4cGlyZWQsIE5UX1NUQVRVU19BQ0NPVU5UX0VYUElSRUR9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfUE9TU0lCTEVfREVBRExPQ0t9LCB7CiAJRVJSSFJELCBFUlJnZW5lcmFsLCBOVF9TVEFUVVNfTkVUV09SS19DUkVERU5USUFMX0NPTkZMSUNUfSwgewogCUVSUkhSRCwgRVJSZ2VuZXJhbCwgTlRfU1RBVFVTX1JFTU9URV9TRVNTSU9OX0xJTUlUfSwgewpAQCAtNzU0LDcgKzc2MCw3IEBACiB9CiAKIGludAotbWFwX3NtYl90b19saW51eF9lcnJvcihzdHJ1Y3Qgc21iX2hkciAqc21iKQorbWFwX3NtYl90b19saW51eF9lcnJvcihzdHJ1Y3Qgc21iX2hkciAqc21iLCBpbnQgbG9nRXJyKQogewogCXVuc2lnbmVkIGludCBpOwogCWludCByYyA9IC1FSU87CS8qIGlmIHRyYW5zcG9ydCBlcnJvciBzbWIgZXJyb3IgbWF5IG5vdCBiZSBzZXQgKi8KQEAgLTc3MSw3ICs3NzcsOSBAQAogCQkvKiB0cmFuc2xhdGUgdGhlIG5ld2VyIFNUQVRVUyBjb2RlcyB0byBvbGQgc3R5bGUgU01CIGVycm9ycwogCQkgKiBhbmQgdGhlbiB0byBQT1NJWCBlcnJvcnMgKi8KIAkJX191MzIgZXJyID0gbGUzMl90b19jcHUoc21iLT5TdGF0dXMuQ2lmc0Vycm9yKTsKLQkJaWYgKGNpZnNGWUkgJiBDSUZTX1JDKQorCQlpZiAobG9nRXJyICYmIChlcnIgIT0gKE5UX1NUQVRVU19NT1JFX1BST0NFU1NJTkdfUkVRVUlSRUQpKSkKKwkJCWNpZnNfcHJpbnRfc3RhdHVzKGVycik7CisJCWVsc2UgaWYgKGNpZnNGWUkgJiBDSUZTX1JDKQogCQkJY2lmc19wcmludF9zdGF0dXMoZXJyKTsKIAkJbnRzdGF0dXNfdG9fZG9zKGVyciwgJnNtYmVycmNsYXNzLCAmc21iZXJyY29kZSk7CiAJfSBlbHNlIHsKQEAgLTgxMyw3ICs4MjEsNyBAQAogCX0KIAkvKiBlbHNlIEVSUkhSRCBjbGFzcyBlcnJvcnMgb3IganVuayAgLSByZXR1cm4gRUlPICovCiAKLQljRllJKDEsICgiICEhTWFwcGluZyBzbWIgZXJyb3IgY29kZSAlZCB0byBQT1NJWCBlcnIgJWQgISEiLAorCWNGWUkoMSwgKCJNYXBwaW5nIHNtYiBlcnJvciBjb2RlICVkIHRvIFBPU0lYIGVyciAlZCIsCiAJCSBzbWJlcnJjb2RlLCByYykpOwogCiAJLyogZ2VuZXJpYyBjb3JyZWN0aXZlIGFjdGlvbiBlLmcuIHJlY29ubmVjdCBTTUIgc2Vzc2lvbiBvbgpAQCAtODk5LDggKzkwNywxMSBAQAogCQljRVJST1IoMSwgKCJpbGxlZ2FsIGhvdXJzICVkIiwgc3QtPkhvdXJzKSk7CiAJZGF5cyA9IHNkLT5EYXk7CiAJbW9udGggPSBzZC0+TW9udGg7Ci0JaWYgKChkYXlzID4gMzEpIHx8IChtb250aCA+IDEyKSkKKwlpZiAoKGRheXMgPiAzMSkgfHwgKG1vbnRoID4gMTIpKSB7CiAJCWNFUlJPUigxLCAoImlsbGVnYWwgZGF0ZSwgbW9udGggJWQgZGF5OiAlZCIsIG1vbnRoLCBkYXlzKSk7CisJCWlmIChtb250aCA+IDEyKQorCQkJbW9udGggPSAxMjsKKwl9CiAJbW9udGggLT0gMTsKIAlkYXlzICs9IHRvdGFsX2RheXNfb2ZfcHJldl9tb250aHNbbW9udGhdOwogCWRheXMgKz0gMzY1MjsgLyogYWNjb3VudCBmb3IgZGlmZmVyZW5jZSBpbiBkYXlzIGJldHdlZW4gMTk4MCBhbmQgMTk3MCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9yZWFkZGlyLmMgYi9mcy9jaWZzL3JlYWRkaXIuYwppbmRleCA5MTZkZjk0Li4zNzQ2NTgwIDEwMDY0NAotLS0gYS9mcy9jaWZzL3JlYWRkaXIuYworKysgYi9mcy9jaWZzL3JlYWRkaXIuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAKIAogc3RhdGljIHZvaWQgZmlsbF9pbl9pbm9kZShzdHJ1Y3QgaW5vZGUgKnRtcF9pbm9kZSwgaW50IG5ld19idWZfdHlwZSwKLQkJCSAgY2hhciAqYnVmLCBpbnQgKnBvYmplY3RfdHlwZSwgaW50IGlzTmV3SW5vZGUpCisJCQkgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50ICpwb2JqZWN0X3R5cGUsIGludCBpc05ld0lub2RlKQogewogCWxvZmZfdCBsb2NhbF9zaXplOwogCXN0cnVjdCB0aW1lc3BlYyBsb2NhbF9tdGltZTsKQEAgLTI5NCw3ICsyOTQsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB1bml4X2ZpbGxfaW5faW5vZGUoc3RydWN0IGlub2RlICp0bXBfaW5vZGUsCi0JRklMRV9VTklYX0lORk8gKnBmaW5kRGF0YSwgaW50ICpwb2JqZWN0X3R5cGUsIGludCBpc05ld0lub2RlKQorCUZJTEVfVU5JWF9JTkZPICpwZmluZERhdGEsIHVuc2lnbmVkIGludCAqcG9iamVjdF90eXBlLCBpbnQgaXNOZXdJbm9kZSkKIHsKIAlsb2ZmX3QgbG9jYWxfc2l6ZTsKIAlzdHJ1Y3QgdGltZXNwZWMgbG9jYWxfbXRpbWU7CkBAIC04MjYsNyArODI2LDcgQEAKIAlpbnQgcmMgPSAwOwogCXN0cnVjdCBxc3RyIHFzdHJpbmc7CiAJc3RydWN0IGNpZnNGaWxlSW5mbyAqcENpZnNGOwotCXVuc2lnbmVkIG9ial90eXBlOworCXVuc2lnbmVkIGludCBvYmpfdHlwZTsKIAlpbm9fdCAgaW51bTsKIAlzdHJ1Y3QgY2lmc19zYl9pbmZvICpjaWZzX3NiOwogCXN0cnVjdCBpbm9kZSAqdG1wX2lub2RlOwpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAKIAkJZm9yIChpID0gMDsgKGkgPCBudW1fdG9fZmlsbCkgJiYgKHJjID09IDApOyBpKyspIHsKIAkJCWlmIChjdXJyZW50X2VudHJ5ID09IE5VTEwpIHsKIAkJCQkvKiBldmFsdWF0ZSB3aGV0aGVyIHRoaXMgY2FzZSBpcyBhbiBlcnJvciAqLwotCQkJCWNFUlJPUigxLCgicGFzdCBlbmQgb2YgU01CIG51bSB0byBmaWxsICVkIGkgJWQiLAorCQkJCWNFUlJPUigxLCAoInBhc3QgU01CIGVuZCwgIG51bSB0byBmaWxsICVkIGkgJWQiLAogCQkJCQkgIG51bV90b19maWxsLCBpKSk7CiAJCQkJYnJlYWs7CiAJCQl9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3Nlc3MuYyBiL2ZzL2NpZnMvc2Vzcy5jCmluZGV4IDg5MmJlOWIuLjg5OWRjNjAgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc2Vzcy5jCisrKyBiL2ZzL2NpZnMvc2Vzcy5jCkBAIC02NywxNCArNjcsNTkgQEAKIAkJcFNNQi0+cmVxLmhkci5GbGFnczIgfD0gU01CRkxHMl9ERlM7CiAJCWNhcGFiaWxpdGllcyB8PSBDQVBfREZTOwogCX0KLQlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JWCkgeworCWlmIChzZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKQogCQljYXBhYmlsaXRpZXMgfD0gQ0FQX1VOSVg7Ci0JfQogCiAJLyogQkIgY2hlY2sgd2hldGhlciB0byBpbml0IHZjbnVtIEJCICovCiAJcmV0dXJuIGNhcGFiaWxpdGllczsKIH0KIAorc3RhdGljIHZvaWQKK3VuaWNvZGVfb3NsbV9zdHJpbmdzKGNoYXIgKipwYmNjX2FyZWEsIGNvbnN0IHN0cnVjdCBubHNfdGFibGUgKm5sc19jcCkKK3sKKwljaGFyICpiY2NfcHRyID0gKnBiY2NfYXJlYTsKKwlpbnQgYnl0ZXNfcmV0ID0gMDsKKworCS8qIENvcHkgT1MgdmVyc2lvbiAqLworCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKWJjY19wdHIsICJMaW51eCB2ZXJzaW9uICIsIDMyLAorCQkJCSAgbmxzX2NwKTsKKwliY2NfcHRyICs9IDIgKiBieXRlc19yZXQ7CisJYnl0ZXNfcmV0ID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAorCQkJCSAgMzIsIG5sc19jcCk7CisJYmNjX3B0ciArPSAyICogYnl0ZXNfcmV0OworCWJjY19wdHIgKz0gMjsgLyogdHJhaWxpbmcgbnVsbCAqLworCisJYnl0ZXNfcmV0ID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIENJRlNfTkVUV09SS19PUFNZUywKKwkJCQkgIDMyLCBubHNfY3ApOworCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKKwliY2NfcHRyICs9IDI7IC8qIHRyYWlsaW5nIG51bGwgKi8KKworCSpwYmNjX2FyZWEgPSBiY2NfcHRyOworfQorCitzdGF0aWMgdm9pZCB1bmljb2RlX2RvbWFpbl9zdHJpbmcoY2hhciAqKnBiY2NfYXJlYSwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCisJCQkJICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKQoreworCWNoYXIgKmJjY19wdHIgPSAqcGJjY19hcmVhOworCWludCBieXRlc19yZXQgPSAwOworCisJLyogY29weSBkb21haW4gKi8KKwlpZiAoc2VzLT5kb21haW5OYW1lID09IE5VTEwpIHsKKwkJLyogU2VuZGluZyBudWxsIGRvbWFpbiBiZXR0ZXIgdGhhbiB1c2luZyBhIGJvZ3VzIGRvbWFpbiBuYW1lIChhcworCQl3ZSBkaWQgYnJpZWZseSBpbiAyLjYuMTgpIHNpbmNlIHNlcnZlciB3aWxsIHVzZSBpdHMgZGVmYXVsdCAqLworCQkqYmNjX3B0ciA9IDA7CisJCSooYmNjX3B0cisxKSA9IDA7CisJCWJ5dGVzX3JldCA9IDA7CisJfSBlbHNlCisJCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCBzZXMtPmRvbWFpbk5hbWUsCisJCQkJCSAgMjU2LCBubHNfY3ApOworCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKKwliY2NfcHRyICs9IDI7ICAvKiBhY2NvdW50IGZvciBudWxsIHRlcm1pbmF0b3IgKi8KKworCSpwYmNjX2FyZWEgPSBiY2NfcHRyOworfQorCisKIHN0YXRpYyB2b2lkIHVuaWNvZGVfc3NldHVwX3N0cmluZ3MoY2hhciAqKnBiY2NfYXJlYSwgc3RydWN0IGNpZnNTZXNJbmZvICpzZXMsCiAJCQkJICAgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NwKQogewpAQCAtMTAwLDMyICsxNDUsOSBAQAogCX0KIAliY2NfcHRyICs9IDIgKiBieXRlc19yZXQ7CiAJYmNjX3B0ciArPSAyOyAvKiBhY2NvdW50IGZvciBudWxsIHRlcm1pbmF0aW9uICovCi0JLyogY29weSBkb21haW4gKi8KLQlpZiAoc2VzLT5kb21haW5OYW1lID09IE5VTEwpIHsKLQkJLyogU2VuZGluZyBudWxsIGRvbWFpbiBiZXR0ZXIgdGhhbiB1c2luZyBhIGJvZ3VzIGRvbWFpbiBuYW1lIChhcwotCQl3ZSBkaWQgYnJpZWZseSBpbiAyLjYuMTgpIHNpbmNlIHNlcnZlciB3aWxsIHVzZSBpdHMgZGVmYXVsdCAqLwotCQkqYmNjX3B0ciA9IDA7Ci0JCSooYmNjX3B0cisxKSA9IDA7Ci0JCWJ5dGVzX3JldCA9IDA7Ci0JfSBlbHNlCi0JCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKSBiY2NfcHRyLCBzZXMtPmRvbWFpbk5hbWUsCi0JCQkJCSAgMjU2LCBubHNfY3ApOwotCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKLQliY2NfcHRyICs9IDI7ICAvKiBhY2NvdW50IGZvciBudWxsIHRlcm1pbmF0b3IgKi8KIAotCS8qIENvcHkgT1MgdmVyc2lvbiAqLwotCWJ5dGVzX3JldCA9IGNpZnNfc3RydG9VQ1MoKF9fbGUxNiAqKWJjY19wdHIsICJMaW51eCB2ZXJzaW9uICIsIDMyLAotCQkJCSAgbmxzX2NwKTsKLQliY2NfcHRyICs9IDIgKiBieXRlc19yZXQ7Ci0JYnl0ZXNfcmV0ID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlLAotCQkJCSAgMzIsIG5sc19jcCk7Ci0JYmNjX3B0ciArPSAyICogYnl0ZXNfcmV0OwotCWJjY19wdHIgKz0gMjsgLyogdHJhaWxpbmcgbnVsbCAqLwotCi0JYnl0ZXNfcmV0ID0gY2lmc19zdHJ0b1VDUygoX19sZTE2ICopIGJjY19wdHIsIENJRlNfTkVUV09SS19PUFNZUywKLQkJCQkgIDMyLCBubHNfY3ApOwotCWJjY19wdHIgKz0gMiAqIGJ5dGVzX3JldDsKLQliY2NfcHRyICs9IDI7IC8qIHRyYWlsaW5nIG51bGwgKi8KKwl1bmljb2RlX2RvbWFpbl9zdHJpbmcoJmJjY19wdHIsIHNlcywgbmxzX2NwKTsKKwl1bmljb2RlX29zbG1fc3RyaW5ncygmYmNjX3B0ciwgbmxzX2NwKTsKIAogCSpwYmNjX2FyZWEgPSBiY2NfcHRyOwogfQpAQCAtMjAzLDE0ICsyMjUsMTEgQEAKIAlpZiAobGVuID49IHdvcmRzX2xlZnQpCiAJCXJldHVybiByYzsKIAotCWlmIChzZXMtPnNlcnZlck9TKQotCQlrZnJlZShzZXMtPnNlcnZlck9TKTsKKwlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAkvKiBVVEYtOCBzdHJpbmcgd2lsbCBub3QgZ3JvdyBtb3JlIHRoYW4gZm91ciB0aW1lcyBhcyBiaWcgYXMgVUNTLTE2ICovCiAJc2VzLT5zZXJ2ZXJPUyA9IGt6YWxsb2MoNCAqIGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHNlcy0+c2VydmVyT1MgIT0gTlVMTCkgewotCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJPUywgKF9fbGUxNiAqKWRhdGEsIGxlbiwKLQkJCQkgICBubHNfY3ApOwotCX0KKwlpZiAoc2VzLT5zZXJ2ZXJPUyAhPSBOVUxMKQorCQljaWZzX3N0cmZyb21VQ1NfbGUoc2VzLT5zZXJ2ZXJPUywgKF9fbGUxNiAqKWRhdGEsIGxlbiwgbmxzX2NwKTsKIAlkYXRhICs9IDIgKiAobGVuICsgMSk7CiAJd29yZHNfbGVmdCAtPSBsZW4gKyAxOwogCkBAIC0yMjAsOCArMjM5LDcgQEAKIAlpZiAobGVuID49IHdvcmRzX2xlZnQpCiAJCXJldHVybiByYzsKIAotCWlmIChzZXMtPnNlcnZlck5PUykKLQkJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOworCWtmcmVlKHNlcy0+c2VydmVyTk9TKTsKIAlzZXMtPnNlcnZlck5PUyA9IGt6YWxsb2MoNCAqIGxlbiwgR0ZQX0tFUk5FTCk7IC8qIEJCIHRoaXMgaXMgd3JvbmcgbGVuZ3RoIEZJWE1FIEJCICovCiAJaWYgKHNlcy0+c2VydmVyTk9TICE9IE5VTEwpIHsKIAkJY2lmc19zdHJmcm9tVUNTX2xlKHNlcy0+c2VydmVyTk9TLCAoX19sZTE2ICopZGF0YSwgbGVuLApAQCAtMjQwLDggKzI1OCw3IEBACiAJaWYgKGxlbiA+IHdvcmRzX2xlZnQpCiAJCXJldHVybiByYzsKIAotCWlmIChzZXMtPnNlcnZlckRvbWFpbikKLQkJa2ZyZWUoc2VzLT5zZXJ2ZXJEb21haW4pOworCWtmcmVlKHNlcy0+c2VydmVyRG9tYWluKTsKIAlzZXMtPnNlcnZlckRvbWFpbiA9IGt6YWxsb2MoMiAqIChsZW4gKyAxKSwgR0ZQX0tFUk5FTCk7IC8qIEJCIEZJWE1FIHdyb25nIGxlbmd0aCAqLwogCWlmIChzZXMtPnNlcnZlckRvbWFpbiAhPSBOVUxMKSB7CiAJCWNpZnNfc3RyZnJvbVVDU19sZShzZXMtPnNlcnZlckRvbWFpbiwgKF9fbGUxNiAqKWRhdGEsIGxlbiwKQEAgLTI3MSw4ICsyODgsNyBAQAogCWlmIChsZW4gPj0gYmxlZnQpCiAJCXJldHVybiByYzsKIAotCWlmIChzZXMtPnNlcnZlck9TKQotCQlrZnJlZShzZXMtPnNlcnZlck9TKTsKKwlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAogCXNlcy0+c2VydmVyT1MgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmIChzZXMtPnNlcnZlck9TKQpAQCAtMjg5LDggKzMwNSw3IEBACiAJaWYgKGxlbiA+PSBibGVmdCkKIAkJcmV0dXJuIHJjOwogCi0JaWYgKHNlcy0+c2VydmVyTk9TKQotCQlrZnJlZShzZXMtPnNlcnZlck5PUyk7CisJa2ZyZWUoc2VzLT5zZXJ2ZXJOT1MpOwogCiAJc2VzLT5zZXJ2ZXJOT1MgPSBremFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCWlmIChzZXMtPnNlcnZlck5PUykKQEAgLTQ3OSw3ICs0OTQsOCBAQAogCQlpZiAoc2VzLT5jYXBhYmlsaXRpZXMgJiBDQVBfVU5JQ09ERSkgewogCQkJaWYgKGlvdlswXS5pb3ZfbGVuICUgMikgewogCQkJCSpiY2NfcHRyID0gMDsKLQkJCX0JYmNjX3B0cisrOworCQkJCWJjY19wdHIrKzsKKwkJCX0KIAkJCXVuaWNvZGVfc3NldHVwX3N0cmluZ3MoJmJjY19wdHIsIHNlcywgbmxzX2NwKTsKIAkJfSBlbHNlCiAJCQlhc2NpaV9zc2V0dXBfc3RyaW5ncygmYmNjX3B0ciwgc2VzLCBubHNfY3ApOwpAQCAtNDk3LDcgKzUxMyw4IEBACiAKIAlpb3ZbMV0uaW92X2Jhc2UgPSBzdHJfYXJlYTsKIAlpb3ZbMV0uaW92X2xlbiA9IGNvdW50OwotCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgc2VzLCBpb3YsIDIgLyogbnVtX2lvdmVjcyAqLywgJnJlc3BfYnVmX3R5cGUsIDApOworCXJjID0gU2VuZFJlY2VpdmUyKHhpZCwgc2VzLCBpb3YsIDIgLyogbnVtX2lvdmVjcyAqLywgJnJlc3BfYnVmX3R5cGUsCisJCQkgIDAgLyogbm90IGxvbmcgb3AgKi8sIDEgLyogbG9nIE5UIFNUQVRVUyBpZiBhbnkgKi8gKTsKIAkvKiBTTUIgcmVxdWVzdCBidWYgZnJlZWQgaW4gU2VuZFJlY2VpdmUyICovCiAKIAljRllJKDEsICgic3NldHVwIHJjIGZyb20gc2VuZHJlY3YyIGlzICVkIiwgcmMpKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZXJyLmggYi9mcy9jaWZzL3NtYmVyci5oCmluZGV4IDJlZjBiZTIuLjdmNTBlODUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZXJyLmgKKysrIGIvZnMvY2lmcy9zbWJlcnIuaApAQCAtMTczLDkgKzE3MywxMCBAQAogI2RlZmluZSBFUlJ1c2VzdGQJCTI1MQkvKiB0ZW1wb3JhcmlseSB1bmFibGUgdG8gdXNlIGVpdGhlciByYXcKIAkJCQkJICAgb3IgbXB4ICovCiAjZGVmaW5lIEVSUl9OT1RJRllfRU5VTV9ESVIJMTAyNAorI2RlZmluZSBFUlJub1N1Y2hVc2VyCQkyMjM4CS8qIHVzZXIgYWNjb3VudCBkb2VzIG5vdCBleGlzdCAqLwogI2RlZmluZSBFUlJhY2NvdW50ZXhwaXJlZAkyMjM5Ci0jZGVmaW5lIEVSUmJhZGNsaWVudAkJMjI0MAotI2RlZmluZSBFUlJiYWRMb2dvblRpbWUJCTIyNDEKKyNkZWZpbmUgRVJSYmFkY2xpZW50CQkyMjQwCS8qIGNhbiBub3QgbG9nb24gZnJvbSB0aGlzIGNsaWVudCAqLworI2RlZmluZSBFUlJiYWRMb2dvblRpbWUJCTIyNDEJLyogbG9nb24gaG91cnMgZG8gbm90IGFsbG93IHRoaXMgKi8KICNkZWZpbmUgRVJScGFzc3dvcmRFeHBpcmVkCTIyNDIKICNkZWZpbmUgRVJSbmV0bG9nb25Ob3RTdGFydGVkCTI0NTUKICNkZWZpbmUgRVJSbm9zdXBwb3J0CQkweEZGRkYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCmluZGV4IDc0NmJjOTQuLjdlZDMyYjMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvdHJhbnNwb3J0LmMKKysrIGIvZnMvY2lmcy90cmFuc3BvcnQuYwpAQCAtNTUsNyArNTUsNyBAQAogCWlmICh0ZW1wID09IE5VTEwpCiAJCXJldHVybiB0ZW1wOwogCWVsc2UgewotCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mIChzdHJ1Y3QgbWlkX3FfZW50cnkpKTsKKwkJbWVtc2V0KHRlbXAsIDAsIHNpemVvZihzdHJ1Y3QgbWlkX3FfZW50cnkpKTsKIAkJdGVtcC0+bWlkID0gc21iX2J1ZmZlci0+TWlkOwkvKiBhbHdheXMgTEUgKi8KIAkJdGVtcC0+cGlkID0gY3VycmVudC0+cGlkOwogCQl0ZW1wLT5jb21tYW5kID0gc21iX2J1ZmZlci0+Q29tbWFuZDsKQEAgLTE1OCw3ICsxNTgsNyBAQAogCWlvdi5pb3ZfbGVuID0gbGVuOwogCiAJc21iX21zZy5tc2dfbmFtZSA9IHNpbjsKLQlzbWJfbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mIChzdHJ1Y3Qgc29ja2FkZHIpOworCXNtYl9tc2cubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKIAlzbWJfbXNnLm1zZ19jb250cm9sID0gTlVMTDsKIAlzbWJfbXNnLm1zZ19jb250cm9sbGVuID0gMDsKIAlzbWJfbXNnLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCArIE1TR19OT1NJR05BTDsgLyogQkIgYWRkIG1vcmUgZmxhZ3M/Ki8KQEAgLTIyOCw3ICsyMjgsNyBAQAogCQlyZXR1cm4gLUVOT1RTT0NLOyAvKiBCQiBldmVudHVhbGx5IGFkZCByZWNvbm5lY3QgY29kZSBoZXJlICovCiAKIAlzbWJfbXNnLm1zZ19uYW1lID0gc2luOwotCXNtYl9tc2cubXNnX25hbWVsZW4gPSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcik7CisJc21iX21zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpOwogCXNtYl9tc2cubXNnX2NvbnRyb2wgPSBOVUxMOwogCXNtYl9tc2cubXNnX2NvbnRyb2xsZW4gPSAwOwogCXNtYl9tc2cubXNnX2ZsYWdzID0gTVNHX0RPTlRXQUlUICsgTVNHX05PU0lHTkFMOyAvKiBCQiBhZGQgbW9yZSBmbGFncz8qLwpAQCAtMzYzLDkgKzM2Myw4IEBACiAJCX0gLyogZWxzZSBvayAtIHdlIGFyZSBzZXR0aW5nIHVwIHNlc3Npb24gKi8KIAl9CiAJKnBwbWlkUSA9IEFsbG9jTWlkUUVudHJ5KGluX2J1Ziwgc2VzKTsKLQlpZiAoKnBwbWlkUSA9PSBOVUxMKSB7CisJaWYgKCpwcG1pZFEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC00MTksNyArNDE4LDcgQEAKIGludAogU2VuZFJlY2VpdmUyKGNvbnN0IHVuc2lnbmVkIGludCB4aWQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAogCSAgICAgc3RydWN0IGt2ZWMgKmlvdiwgaW50IG5fdmVjLCBpbnQgKnBSZXNwQnVmVHlwZSAvKiByZXQgKi8sCi0JICAgICBjb25zdCBpbnQgbG9uZ19vcCkKKwkgICAgIGNvbnN0IGludCBsb25nX29wLCBjb25zdCBpbnQgbG9nRXJyb3IpCiB7CiAJaW50IHJjID0gMDsKIAl1bnNpZ25lZCBpbnQgcmVjZWl2ZV9sZW47CkBAIC00NjUsNyArNDY0LDYgQEAKIAkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CiAJCXJldHVybiByYzsKIAl9Ci0KIAlyYyA9IGNpZnNfc2lnbl9zbWIyKGlvdiwgbl92ZWMsIHNlcy0+c2VydmVyLCAmbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsKIAogCW1pZFEtPm1pZFN0YXRlID0gTUlEX1JFUVVFU1RfU1VCTUlUVEVEOwpAQCAtNTY4LDEzICs1NjYsMTEgQEAKIAkJCX0KIAogCQkJLyogQkIgc3BlY2lhbCBjYXNlIHJlY29ubmVjdCB0aWQgYW5kIHVpZCBoZXJlPyAqLwotCQkJLyogQkIgc3BlY2lhbCBjYXNlIEVycmJhZHBhc3N3b3JkIGFuZCBwd2RleHBpcmVkIGhlcmUgKi8KLQkJCXJjID0gbWFwX3NtYl90b19saW51eF9lcnJvcihtaWRRLT5yZXNwX2J1Zik7CisJCQlyYyA9IG1hcF9zbWJfdG9fbGludXhfZXJyb3IobWlkUS0+cmVzcF9idWYsIGxvZ0Vycm9yKTsKIAogCQkJLyogY29udmVydCBCeXRlQ291bnQgaWYgbmVjZXNzYXJ5ICovCi0JCQlpZiAocmVjZWl2ZV9sZW4gPj0KLQkJCSAgICBzaXplb2YgKHN0cnVjdCBzbWJfaGRyKSAtCi0JCQkgICAgNCAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKKwkJCWlmIChyZWNlaXZlX2xlbiA+PSBzaXplb2Yoc3RydWN0IHNtYl9oZHIpIC0gNAorCQkJICAgIC8qIGRvIG5vdCBjb3VudCBSRkMxMDAxIGhlYWRlciAqLyAgKwogCQkJICAgICgyICogbWlkUS0+cmVzcF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCiAJCQkJQkNDKG1pZFEtPnJlc3BfYnVmKSA9CiAJCQkJCWxlMTZfdG9fY3B1KEJDQ19MRShtaWRRLT5yZXNwX2J1ZikpOwpAQCAtNzQ5LDEyICs3NDUsMTEgQEAKIAkJCSpwYnl0ZXNfcmV0dXJuZWQgPSBvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aDsKIAogCQkJLyogQkIgc3BlY2lhbCBjYXNlIHJlY29ubmVjdCB0aWQgYW5kIHVpZCBoZXJlPyAqLwotCQkJcmMgPSBtYXBfc21iX3RvX2xpbnV4X2Vycm9yKG91dF9idWYpOworCQkJcmMgPSBtYXBfc21iX3RvX2xpbnV4X2Vycm9yKG91dF9idWYsIDAgLyogbm8gbG9nICovICk7CiAKIAkJCS8qIGNvbnZlcnQgQnl0ZUNvdW50IGlmIG5lY2Vzc2FyeSAqLwotCQkJaWYgKHJlY2VpdmVfbGVuID49Ci0JCQkgICAgc2l6ZW9mIChzdHJ1Y3Qgc21iX2hkcikgLQotCQkJICAgIDQgLyogZG8gbm90IGNvdW50IFJGQzEwMDEgaGVhZGVyICovICArCisJCQlpZiAocmVjZWl2ZV9sZW4gPj0gc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSAtIDQKKwkJCSAgICAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKIAkJCSAgICAoMiAqIG91dF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCiAJCQkJQkNDKG91dF9idWYpID0gbGUxNl90b19jcHUoQkNDX0xFKG91dF9idWYpKTsKIAkJfSBlbHNlIHsKQEAgLTk5MywxMiArOTg4LDExIEBACiAJCQkqcGJ5dGVzX3JldHVybmVkID0gb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGg7CiAKIAkJCS8qIEJCIHNwZWNpYWwgY2FzZSByZWNvbm5lY3QgdGlkIGFuZCB1aWQgaGVyZT8gKi8KLQkJCXJjID0gbWFwX3NtYl90b19saW51eF9lcnJvcihvdXRfYnVmKTsKKwkJCXJjID0gbWFwX3NtYl90b19saW51eF9lcnJvcihvdXRfYnVmLCAwIC8qIG5vIGxvZyAqLyApOwogCiAJCQkvKiBjb252ZXJ0IEJ5dGVDb3VudCBpZiBuZWNlc3NhcnkgKi8KLQkJCWlmIChyZWNlaXZlX2xlbiA+PQotCQkJICAgIHNpemVvZiAoc3RydWN0IHNtYl9oZHIpIC0KLQkJCSAgICA0IC8qIGRvIG5vdCBjb3VudCBSRkMxMDAxIGhlYWRlciAqLyAgKworCQkJaWYgKHJlY2VpdmVfbGVuID49IHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgLSA0CisJCQkgICAgLyogZG8gbm90IGNvdW50IFJGQzEwMDEgaGVhZGVyICovICArCiAJCQkgICAgKDIgKiBvdXRfYnVmLT5Xb3JkQ291bnQpICsgMiAvKiBiY2MgKi8gKQogCQkJCUJDQyhvdXRfYnVmKSA9IGxlMTZfdG9fY3B1KEJDQ19MRShvdXRfYnVmKSk7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3hhdHRyLmMgYi9mcy9jaWZzL3hhdHRyLmMKaW5kZXggZjYxZTQzMy4uMzY5ZTgzOCAxMDA2NDQKLS0tIGEvZnMvY2lmcy94YXR0ci5jCisrKyBiL2ZzL2NpZnMveGF0dHIuYwpAQCAtMjYxLDIxICsyNjEsMjYgQEAKIAkJCQljaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkJY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7Ci0vKgkJZWxzZSBpZihjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfQ0lGU19BQ0wpIHsKKyNpZmRlZiBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwKKwkJZWxzZSBpZihjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfQ0lGU19BQ0wpIHsKIAkJCV9fdTE2IGZpZDsKIAkJCWludCBvcGxvY2sgPSBGQUxTRTsKLQkJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLAotCQkJCQkgRklMRV9PUEVOLCBHRU5FUklDX1JFQUQsIDAsICZmaWQsCi0JCQkJCSAmb3Bsb2NrLCBOVUxMLCBjaWZzX3NiLT5sb2NhbF9ubHMsCi0JCQkJCSBjaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCi0JCQkJCSBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisJCQlpZiAoZXhwZXJpbUVuYWJsZWQpIAorCQkJCXJjID0gQ0lGU1NNQk9wZW4oeGlkLCBwVGNvbiwgZnVsbF9wYXRoLAorCQkJCQlGSUxFX09QRU4sIEdFTkVSSUNfUkVBRCwgMCwgJmZpZCwKKwkJCQkJJm9wbG9jaywgTlVMTCwgY2lmc19zYi0+bG9jYWxfbmxzLAorCQkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCisJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKKwkJCS8qIGVsc2UgcmMgaXMgRU9QTk9UU1VQUCBmcm9tIGFib3ZlICovCisKIAkJCWlmKHJjID09IDApIHsKIAkJCQlyYyA9IENJRlNTTUJHZXRDSUZTQUNMKHhpZCwgcFRjb24sIGZpZCwKIAkJCQkJZWFfdmFsdWUsIGJ1Zl9zaXplLAogCQkJCQlBQ0xfVFlQRV9BQ0NFU1MpOwogCQkJCUNJRlNTTUJDbG9zZSh4aWQsIHBUY29uLCBmaWQpOwogCQkJfQotCQl9ICovICAvKiBCQiBlbmFibGUgYWZ0ZXIgZml4aW5nIHVwIHJldHVybiBkYXRhICovCisJCX0KKyNlbmRpZiAvKiBFWFBFUklNRU5UQUwgKi8KICNlbHNlCiAJCWNGWUkoMSwgKCJxdWVyeSBQT1NJWCBBQ0wgbm90IHN1cHBvcnRlZCB5ZXQiKSk7CiAjZW5kaWYgLyogQ09ORklHX0NJRlNfUE9TSVggKi8KZGlmZiAtLWdpdCBhL2ZzL2NvZGEvdXBjYWxsLmMgYi9mcy9jb2RhL3VwY2FsbC5jCmluZGV4IGNkYjRjMDcuLjM1OWU1MzEgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvdXBjYWxsLmMKKysrIGIvZnMvY29kYS91cGNhbGwuYwpAQCAtNTEsNyArNTEsNyBAQAogCiAgICAgICAgIGlucC0+aWgub3Bjb2RlID0gb3Bjb2RlOwogCWlucC0+aWgucGlkID0gY3VycmVudC0+cGlkOwotCWlucC0+aWgucGdpZCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisJaW5wLT5paC5wZ2lkID0gdGFza19wZ3JwX25yKGN1cnJlbnQpOwogI2lmZGVmIENPTkZJR19DT0RBX0ZTX09MRF9BUEkKIAltZW1zZXQoJmlucC0+aWguY3JlZCwgMCwgc2l6ZW9mKHN0cnVjdCBjb2RhX2NyZWQpKTsKIAlpbnAtPmloLmNyZWQuY3JfZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggNmRhY2QzOS4uYTQyODRjYyAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTMwMDEsNyArMzAwMSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpb2N0bF9zdGFydCk7IGkrKykgewotCQlpZiAoaW9jdGxfc3RhcnRbaV0ubmV4dCAhPSAwKSB7CisJCWlmIChpb2N0bF9zdGFydFtpXS5uZXh0KSB7CiAJCQlwcmludGsoImlvY3RsIHRyYW5zbGF0aW9uICVkIGJhZFxuIixpKTsKIAkJCXJldHVybiAtMTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvY3JhbWZzL2lub2RlLmMgYi9mcy9jcmFtZnMvaW5vZGUuYwppbmRleCA1YzgxN2JkLi4zNTA2ODBmIDEwMDY0NAotLS0gYS9mcy9jcmFtZnMvaW5vZGUuYworKysgYi9mcy9jcmFtZnMvaW5vZGUuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzYi0+c19iZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOwogCXN0cnVjdCBwYWdlICpwYWdlc1tCTEtTX1BFUl9CVUZdOwotCXVuc2lnbmVkIGksIGJsb2NrbnIsIGJ1ZmZlciwgdW5yZWFkOworCXVuc2lnbmVkIGksIGJsb2NrbnIsIGJ1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGRldnNpemU7CiAJY2hhciAqZGF0YTsKIApAQCAtMTc1LDcgKzE3NSw2IEBACiAJZGV2c2l6ZSA9IG1hcHBpbmctPmhvc3QtPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCiAJLyogT2ssIHJlYWQgaW4gQkxLU19QRVJfQlVGIHBhZ2VzIGNvbXBsZXRlbHkgZmlyc3QuICovCi0JdW5yZWFkID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgQkxLU19QRVJfQlVGOyBpKyspIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCkBAIC0zNjIsNyArMzYxLDcgQEAKIAlpZiAob2Zmc2V0ICYgMykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhDUkFNRlNfTUFYUEFUSExFTiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC0zNzYsNyArMzc1LDcgQEAKIAkJaW50IG5hbWVsZW4sIGVycm9yOwogCiAJCW11dGV4X2xvY2soJnJlYWRfbXV0ZXgpOwotCQlkZSA9IGNyYW1mc19yZWFkKHNiLCBPRkZTRVQoaW5vZGUpICsgb2Zmc2V0LCBzaXplb2YoKmRlKSsyNTYpOworCQlkZSA9IGNyYW1mc19yZWFkKHNiLCBPRkZTRVQoaW5vZGUpICsgb2Zmc2V0LCBzaXplb2YoKmRlKStDUkFNRlNfTUFYUEFUSExFTik7CiAJCW5hbWUgPSAoY2hhciAqKShkZSsxKTsKIAogCQkvKgpAQCAtNDI2LDcgKzQyNSw3IEBACiAJCWNoYXIgKm5hbWU7CiAJCWludCBuYW1lbGVuLCByZXR2YWw7CiAKLQkJZGUgPSBjcmFtZnNfcmVhZChkaXItPmlfc2IsIE9GRlNFVChkaXIpICsgb2Zmc2V0LCBzaXplb2YoKmRlKSsyNTYpOworCQlkZSA9IGNyYW1mc19yZWFkKGRpci0+aV9zYiwgT0ZGU0VUKGRpcikgKyBvZmZzZXQsIHNpemVvZigqZGUpK0NSQU1GU19NQVhQQVRITEVOKTsKIAkJbmFtZSA9IChjaGFyICopKGRlKzEpOwogCiAJCS8qIFRyeSB0byB0YWtlIGFkdmFudGFnZSBvZiBzb3J0ZWQgZGlyZWN0b3JpZXMgKi8KZGlmZiAtLWdpdCBhL2ZzL2RsbS91c2VyLmMgYi9mcy9kbG0vdXNlci5jCmluZGV4IDY0Mzg5NDEuLjRmNzQxNTQgMTAwNjQ0Ci0tLSBhL2ZzL2RsbS91c2VyLmMKKysrIGIvZnMvZGxtL3VzZXIuYwpAQCAtNDU2LDcgKzQ1Niw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICJkbG06IHByb2Nlc3MgJXMgKCVkKSB2ZXJzaW9uIG1pc21hdGNoICIKIAkJICAgICAgICJ1c2VyICglZC4lZC4lZCkga2VybmVsICglZC4lZC4lZClcbiIsCiAJCSAgICAgICBjdXJyZW50LT5jb21tLAotCQkgICAgICAgY3VycmVudC0+cGlkLAorCQkgICAgICAgdGFza19waWRfbnIoY3VycmVudCksCiAJCSAgICAgICByZXEtPnZlcnNpb25bMF0sCiAJCSAgICAgICByZXEtPnZlcnNpb25bMV0sCiAJCSAgICAgICByZXEtPnZlcnNpb25bMl0sCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCA1NzAxZjgxLi4wYjFhYjAxIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTkxNCw2ICs5MTQsMTQgQEAKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KKworCS8qCisJICogbW9kZSBjaGFuZ2UgaXMgZm9yIGNsZWFyaW5nIHNldHVpZC9zZXRnaWQgYml0cy4gQWxsb3cgbG93ZXIgZnMKKwkgKiB0byBpbnRlcnByZXQgdGhpcyBpbiBpdHMgb3duIHdheS4KKwkgKi8KKwlpZiAoaWEtPmlhX3ZhbGlkICYgKEFUVFJfS0lMTF9TVUlEIHwgQVRUUl9LSUxMX1NHSUQpKQorCQlpYS0+aWFfdmFsaWQgJj0gfkFUVFJfTU9ERTsKKwogCXJjID0gbm90aWZ5X2NoYW5nZShsb3dlcl9kZW50cnksIGlhKTsKIG91dDoKIAlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoaW5vZGUsIGxvd2VyX2lub2RlLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggNzdiOTk1My4uMzRmNjhmMyAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTMyNSwxNSArMzI1LDE0IEBACiAJaW50IHdha2VfbmVzdHMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0aGlzX3Rhc2sgPSBjdXJyZW50OwotCXN0cnVjdCBsaXN0X2hlYWQgKmxzdGhlYWQgPSAmcHN3LT53YWtlX3Rhc2tfbGlzdCwgKmxuazsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsc3RoZWFkID0gJnBzdy0+d2FrZV90YXNrX2xpc3Q7CiAJc3RydWN0IHdha2VfdGFza19ub2RlICp0bmN1cjsKIAlzdHJ1Y3Qgd2FrZV90YXNrX25vZGUgdG5vZGU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHN3LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBUcnkgdG8gc2VlIGlmIHRoZSBjdXJyZW50IHRhc2sgaXMgYWxyZWFkeSBpbnNpZGUgdGhpcyB3YWtldXAgY2FsbCAqLwotCWxpc3RfZm9yX2VhY2gobG5rLCBsc3RoZWFkKSB7Ci0JCXRuY3VyID0gbGlzdF9lbnRyeShsbmssIHN0cnVjdCB3YWtlX3Rhc2tfbm9kZSwgbGxpbmspOworCWxpc3RfZm9yX2VhY2hfZW50cnkodG5jdXIsIGxzdGhlYWQsIGxsaW5rKSB7CiAKIAkJaWYgKHRuY3VyLT53cSA9PSB3cSB8fAogCQkgICAgKHRuY3VyLT50YXNrID09IHRoaXNfdGFzayAmJiArK3dha2VfbmVzdHMgPiBFUF9NQVhfUE9MTFdBS0VfTkVTVFMpKSB7CkBAIC00NjMsNyArNDYyLDcgQEAKIAkgKiBob2xkaW5nICJlcG11dGV4IiB3ZSBjYW4gYmUgc3VyZSB0aGF0IG5vIGZpbGUgY2xlYW51cCBjb2RlIHdpbGwgaGl0CiAJICogdXMgZHVyaW5nIHRoaXMgb3BlcmF0aW9uLiBTbyB3ZSBjYW4gYXZvaWQgdGhlIGxvY2sgb24gImVwLT5sb2NrIi4KIAkgKi8KLQl3aGlsZSAoKHJicCA9IHJiX2ZpcnN0KCZlcC0+cmJyKSkgIT0gMCkgeworCXdoaWxlICgocmJwID0gcmJfZmlyc3QoJmVwLT5yYnIpKSAhPSBOVUxMKSB7CiAJCWVwaSA9IHJiX2VudHJ5KHJicCwgc3RydWN0IGVwaXRlbSwgcmJuKTsKIAkJZXBfcmVtb3ZlKGVwLCBlcGkpOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCAwNzBkZGYxLi4yYzk0MmUyIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0yMzQsNyArMjM0LDcgQEAKIAl2bWEtPnZtX3N0YXJ0ID0gdm1hLT52bV9lbmQgLSBQQUdFX1NJWkU7CiAKIAl2bWEtPnZtX2ZsYWdzID0gVk1fU1RBQ0tfRkxBR1M7Ci0Jdm1hLT52bV9wYWdlX3Byb3QgPSBwcm90ZWN0aW9uX21hcFt2bWEtPnZtX2ZsYWdzICYgMHg3XTsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1hLT52bV9mbGFncyk7CiAJZXJyID0gaW5zZXJ0X3ZtX3N0cnVjdChtbSwgdm1hKTsKIAlpZiAoZXJyKSB7CiAJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwpAQCAtNzc1LDggKzc3NSw4IEBACiAJICogUmVwYXJlbnRpbmcgbmVlZHMgd3JpdGVfbG9jayBvbiB0YXNrbGlzdF9sb2NrLAogCSAqIHNvIGl0IGlzIHNhZmUgdG8gZG8gaXQgdW5kZXIgcmVhZF9sb2NrLgogCSAqLwotCWlmICh1bmxpa2VseSh0c2stPmdyb3VwX2xlYWRlciA9PSBjaGlsZF9yZWFwZXIodHNrKSkpCi0JCXRzay0+bnNwcm94eS0+cGlkX25zLT5jaGlsZF9yZWFwZXIgPSB0c2s7CisJaWYgKHVubGlrZWx5KHRzay0+Z3JvdXBfbGVhZGVyID09IHRhc2tfY2hpbGRfcmVhcGVyKHRzaykpKQorCQl0YXNrX2FjdGl2ZV9waWRfbnModHNrKS0+Y2hpbGRfcmVhcGVyID0gdHNrOwogCiAJemFwX290aGVyX3RocmVhZHModHNrKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC04NDEsOCArODQxLDggQEAKIAkJICovCiAJCXRzay0+c3RhcnRfdGltZSA9IGxlYWRlci0+c3RhcnRfdGltZTsKIAotCQlCVUdfT04obGVhZGVyLT50Z2lkICE9IHRzay0+dGdpZCk7Ci0JCUJVR19PTih0c2stPnBpZCA9PSB0c2stPnRnaWQpOworCQlCVUdfT04oIXNhbWVfdGhyZWFkX2dyb3VwKGxlYWRlciwgdHNrKSk7CisJCUJVR19PTihoYXNfZ3JvdXBfbGVhZGVyX3BpZCh0c2spKTsKIAkJLyoKIAkJICogQW4gZXhlYygpIHN0YXJ0cyBhIG5ldyB0aHJlYWQgZ3JvdXAgd2l0aCB0aGUKIAkJICogVEdJRCBvZiB0aGUgcHJldmlvdXMgdGhyZWFkIGdyb3VwLiBSZWhhc2ggdGhlCkBAIC04NTcsNyArODU3LDcgQEAKIAkJICovCiAJCWRldGFjaF9waWQodHNrLCBQSURUWVBFX1BJRCk7CiAJCXRzay0+cGlkID0gbGVhZGVyLT5waWQ7Ci0JCWF0dGFjaF9waWQodHNrLCBQSURUWVBFX1BJRCwgIGZpbmRfcGlkKHRzay0+cGlkKSk7CisJCWF0dGFjaF9waWQodHNrLCBQSURUWVBFX1BJRCwgIHRhc2tfcGlkKGxlYWRlcikpOwogCQl0cmFuc2Zlcl9waWQobGVhZGVyLCB0c2ssIFBJRFRZUEVfUEdJRCk7CiAJCXRyYW5zZmVyX3BpZChsZWFkZXIsIHRzaywgUElEVFlQRV9TSUQpOwogCQlsaXN0X3JlcGxhY2VfcmN1KCZsZWFkZXItPnRhc2tzLCAmdHNrLT50YXNrcyk7CkBAIC0xNDMzLDcgKzE0MzMsNyBAQAogCQkJY2FzZSAncCc6CiAJCQkJcGlkX2luX3BhdHRlcm4gPSAxOwogCQkJCXJjID0gc25wcmludGYob3V0X3B0ciwgb3V0X2VuZCAtIG91dF9wdHIsCi0JCQkJCSAgICAgICIlZCIsIGN1cnJlbnQtPnRnaWQpOworCQkJCQkgICAgICAiJWQiLCB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpKTsKIAkJCQlpZiAocmMgPiBvdXRfZW5kIC0gb3V0X3B0cikKIAkJCQkJZ290byBvdXQ7CiAJCQkJb3V0X3B0ciArPSByYzsKQEAgLTE1MTMsNyArMTUxMyw3IEBACiAJaWYgKCFpc3BpcGUgJiYgIXBpZF9pbl9wYXR0ZXJuCiAgICAgICAgICAgICAmJiAoY29yZV91c2VzX3BpZCB8fCBhdG9taWNfcmVhZCgmY3VycmVudC0+bW0tPm1tX3VzZXJzKSAhPSAxKSkgewogCQlyYyA9IHNucHJpbnRmKG91dF9wdHIsIG91dF9lbmQgLSBvdXRfcHRyLAotCQkJICAgICAgIi4lZCIsIGN1cnJlbnQtPnRnaWQpOworCQkJICAgICAgIi4lZCIsIHRhc2tfdGdpZF92bnIoY3VycmVudCkpOwogCQlpZiAocmMgPiBvdXRfZW5kIC0gb3V0X3B0cikKIAkJCWdvdG8gb3V0OwogCQlvdXRfcHRyICs9IHJjOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9mc3luYy5jIGIvZnMvZXh0My9mc3luYy5jCmluZGV4IGRkMWZkM2MuLmE1ODhlMjMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZnN5bmMuYworKysgYi9mcy9leHQzL2ZzeW5jLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCByZXQgPSAwOwogCi0JSl9BU1NFUlQoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gMCk7CisJSl9BU1NFUlQoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gTlVMTCk7CiAKIAkvKgogCSAqIGRhdGE9d3JpdGViYWNrOgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pbm9kZS5jIGIvZnMvZXh0My9pbm9kZS5jCmluZGV4IDJmMmI2ODYuLjliMTYyY2QgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW5vZGUuYworKysgYi9mcy9leHQzL2lub2RlLmMKQEAgLTEwMjgsNyArMTAyOCw3IEBACiAJCX0KIAkJaWYgKGJ1ZmZlcl9uZXcoJmR1bW15KSkgewogCQkJSl9BU1NFUlQoY3JlYXRlICE9IDApOwotCQkJSl9BU1NFUlQoaGFuZGxlICE9IDApOworCQkJSl9BU1NFUlQoaGFuZGxlICE9IE5VTEwpOwogCiAJCQkvKgogCQkJICogTm93IHRoYXQgd2UgZG8gbm90IGFsd2F5cyBqb3VybmFsIGRhdGEsIHdlIHNob3VsZApAQCAtMjk1NCw3ICsyOTU0LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkpIHsKLQkJamJkX2RlYnVnKDAsICJjYWxsZWQgcmVjdXJzaXZlbHksIG5vbi1QRl9NRU1BTExPQyFcbiIpOworCQlqYmRfZGVidWcoMSwgImNhbGxlZCByZWN1cnNpdmVseSwgbm9uLVBGX01FTUFMTE9DIVxuIik7CiAJCWR1bXBfc3RhY2soKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNzcxZjdhZC4uNDRkZTE0NSAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC0yNDUsMTAgKzI0NSwxMCBAQAogCQkJYnJlbHNlKGdkYik7CiAJCQlnb3RvIGV4aXRfYmg7CiAJCX0KLQkJbG9ja19idWZmZXIoYmgpOwotCQltZW1jcHkoZ2RiLT5iX2RhdGEsIHNiaS0+c19ncm91cF9kZXNjW2ldLT5iX2RhdGEsIGJoLT5iX3NpemUpOworCQlsb2NrX2J1ZmZlcihnZGIpOworCQltZW1jcHkoZ2RiLT5iX2RhdGEsIHNiaS0+c19ncm91cF9kZXNjW2ldLT5iX2RhdGEsIGdkYi0+Yl9zaXplKTsKIAkJc2V0X2J1ZmZlcl91cHRvZGF0ZShnZGIpOwotCQl1bmxvY2tfYnVmZmVyKGJoKTsKKwkJdW5sb2NrX2J1ZmZlcihnZGIpOwogCQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBnZGIpOwogCQlleHQzX3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKIAkJYnJlbHNlKGdkYik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggMTQxNTczZC4uODE4NjhjMCAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtMTYyMCw3ICsxNjIwLDExIEBACiAJCX0KIAogCQlicmVsc2UgKGJoKTsKLQkJc2Jfc2V0X2Jsb2Nrc2l6ZShzYiwgYmxvY2tzaXplKTsKKwkJaWYgKCFzYl9zZXRfYmxvY2tzaXplKHNiLCBibG9ja3NpemUpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVYVDMtZnM6IGJhZCBibG9ja3NpemUgJWQuXG4iLAorCQkJCWJsb2Nrc2l6ZSk7CisJCQlnb3RvIG91dF9mYWlsOworCQl9CiAJCWxvZ2ljX3NiX2Jsb2NrID0gKHNiX2Jsb2NrICogRVhUM19NSU5fQkxPQ0tfU0laRSkgLyBibG9ja3NpemU7CiAJCW9mZnNldCA9IChzYl9ibG9jayAqIEVYVDNfTUlOX0JMT0NLX1NJWkUpICUgYmxvY2tzaXplOwogCQliaCA9IHNiX2JyZWFkKHNiLCBsb2dpY19zYl9ibG9jayk7CmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyLmMgYi9mcy9leHQzL3hhdHRyLmMKaW5kZXggZjU4Y2JiMi4uNDA4MzczOCAxMDA2NDQKLS0tIGEvZnMvZXh0My94YXR0ci5jCisrKyBiL2ZzL2V4dDMveGF0dHIuYwpAQCAtNzQxLDEyICs3NDEsMTEgQEAKIAkJfQogCX0gZWxzZSB7CiAJCS8qIEFsbG9jYXRlIGEgYnVmZmVyIHdoZXJlIHdlIGNvbnN0cnVjdCB0aGUgbmV3IGJsb2NrLiAqLwotCQlzLT5iYXNlID0ga21hbGxvYyhzYi0+c19ibG9ja3NpemUsIEdGUF9LRVJORUwpOworCQlzLT5iYXNlID0ga3phbGxvYyhzYi0+c19ibG9ja3NpemUsIEdGUF9LRVJORUwpOwogCQkvKiBhc3NlcnQoaGVhZGVyID09IHMtPmJhc2UpICovCiAJCWVycm9yID0gLUVOT01FTTsKIAkJaWYgKHMtPmJhc2UgPT0gTlVMTCkKIAkJCWdvdG8gY2xlYW51cDsKLQkJbWVtc2V0KHMtPmJhc2UsIDAsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAJCWhlYWRlcihzLT5iYXNlKS0+aF9tYWdpYyA9IGNwdV90b19sZTMyKEVYVDNfWEFUVFJfTUFHSUMpOwogCQloZWFkZXIocy0+YmFzZSktPmhfYmxvY2tzID0gY3B1X3RvX2xlMzIoMSk7CiAJCWhlYWRlcihzLT5iYXNlKS0+aF9yZWZjb3VudCA9IGNwdV90b19sZTMyKDEpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9iYWxsb2MuYyBiL2ZzL2V4dDQvYmFsbG9jLmMKaW5kZXggYjc0YmY0My4uZTkwNmI2NSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9iYWxsb2MuYworKysgYi9mcy9leHQ0L2JhbGxvYy5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogCisjaW5jbHVkZSAiZ3JvdXAuaCIKIC8qCiAgKiBiYWxsb2MuYyBjb250YWlucyB0aGUgYmxvY2tzIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiByb3V0aW5lcwogICovCkBAIC00Miw2ICs0Myw5NCBAQAogCiB9CiAKKy8qIEluaXRpYWxpemVzIGFuIHVuaW5pdGlhbGl6ZWQgYmxvY2sgYml0bWFwIGlmIGdpdmVuLCBhbmQgcmV0dXJucyB0aGUKKyAqIG51bWJlciBvZiBibG9ja3MgZnJlZSBpbiB0aGUgZ3JvdXAuICovCit1bnNpZ25lZCBleHQ0X2luaXRfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisJCQkJaW50IGJsb2NrX2dyb3VwLCBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHApCit7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwlpbnQgYml0LCBiaXRfbWF4OworCXVuc2lnbmVkIGZyZWVfYmxvY2tzLCBncm91cF9ibG9ja3M7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CisKKwlpZiAoYmgpIHsKKwkJSl9BU1NFUlRfQkgoYmgsIGJ1ZmZlcl9sb2NrZWQoYmgpKTsKKworCQkvKiBJZiBjaGVja3N1bSBpcyBiYWQgbWFyayBhbGwgYmxvY2tzIHVzZWQgdG8gcHJldmVudCBhbGxvY2F0aW9uCisJCSAqIGVzc2VudGlhbGx5IGltcGxlbWVudGluZyBhIHBlci1ncm91cCByZWFkLW9ubHkgZmxhZy4gKi8KKwkJaWYgKCFleHQ0X2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoc2JpLCBibG9ja19ncm91cCwgZ2RwKSkgeworCQkJZXh0NF9lcnJvcihzYiwgX19GVU5DVElPTl9fLAorCQkJCSAgICJDaGVja3N1bSBiYWQgZm9yIGdyb3VwICV1XG4iLCBibG9ja19ncm91cCk7CisJCQlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0gMDsKKwkJCWdkcC0+YmdfZnJlZV9pbm9kZXNfY291bnQgPSAwOworCQkJZ2RwLT5iZ19pdGFibGVfdW51c2VkID0gMDsKKwkJCW1lbXNldChiaC0+Yl9kYXRhLCAweGZmLCBzYi0+c19ibG9ja3NpemUpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIHNiLT5zX2Jsb2Nrc2l6ZSk7CisJfQorCisJLyogQ2hlY2sgZm9yIHN1cGVyYmxvY2sgYW5kIGdkdCBiYWNrdXBzIGluIHRoaXMgZ3JvdXAgKi8KKwliaXRfbWF4ID0gZXh0NF9iZ19oYXNfc3VwZXIoc2IsIGJsb2NrX2dyb3VwKTsKKworCWlmICghRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpIHx8CisJICAgIGJsb2NrX2dyb3VwIDwgbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2ZpcnN0X21ldGFfYmcpICoKKwkJCSAgc2JpLT5zX2Rlc2NfcGVyX2Jsb2NrKSB7CisJCWlmIChiaXRfbWF4KSB7CisJCQliaXRfbWF4ICs9IGV4dDRfYmdfbnVtX2dkYihzYiwgYmxvY2tfZ3JvdXApOworCQkJYml0X21heCArPQorCQkJCWxlMTZfdG9fY3B1KHNiaS0+c19lcy0+c19yZXNlcnZlZF9nZHRfYmxvY2tzKTsKKwkJfQorCX0gZWxzZSB7IC8qIEZvciBNRVRBX0JHX0JMT0NLX0dST1VQUyAqLworCQlpbnQgZ3JvdXBfcmVsID0gKGJsb2NrX2dyb3VwIC0KKwkJCQkgbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2ZpcnN0X21ldGFfYmcpKSAlCisJCQkJRVhUNF9ERVNDX1BFUl9CTE9DSyhzYik7CisJCWlmIChncm91cF9yZWwgPT0gMCB8fCBncm91cF9yZWwgPT0gMSB8fAorCQkgICAgKGdyb3VwX3JlbCA9PSBFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKSAtIDEpKQorCQkJYml0X21heCArPSAxOworCX0KKworCWlmIChibG9ja19ncm91cCA9PSBzYmktPnNfZ3JvdXBzX2NvdW50IC0gMSkgeworCQkvKgorCQkgKiBFdmVuIHRob3VnaCBta2UyZnMgYWx3YXlzIGluaXRpYWxpemUgZmlyc3QgYW5kIGxhc3QgZ3JvdXAKKwkJICogaWYgc29tZSBvdGhlciB0b29sIGVuYWJsZWQgdGhlIEVYVDRfQkdfQkxPQ0tfVU5JTklUIHdlIG5lZWQKKwkJICogdG8gbWFrZSBzdXJlIHdlIGNhbGN1bGF0ZSB0aGUgcmlnaHQgZnJlZSBibG9ja3MKKwkJICovCisJCWdyb3VwX2Jsb2NrcyA9IGV4dDRfYmxvY2tzX2NvdW50KHNiaS0+c19lcykgLQorCQkJbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spIC0KKwkJCShFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpICogKHNiaS0+c19ncm91cHNfY291bnQgLTEpKTsKKwl9IGVsc2UgeworCQlncm91cF9ibG9ja3MgPSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpOworCX0KKworCWZyZWVfYmxvY2tzID0gZ3JvdXBfYmxvY2tzIC0gYml0X21heDsKKworCWlmIChiaCkgeworCQlmb3IgKGJpdCA9IDA7IGJpdCA8IGJpdF9tYXg7IGJpdCsrKQorCQkJZXh0NF9zZXRfYml0KGJpdCwgYmgtPmJfZGF0YSk7CisKKwkJc3RhcnQgPSBibG9ja19ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikgKworCQkJbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCisJCS8qIFNldCBiaXRzIGZvciBibG9jayBhbmQgaW5vZGUgYml0bWFwcywgYW5kIGlub2RlIHRhYmxlICovCisJCWV4dDRfc2V0X2JpdChleHQ0X2Jsb2NrX2JpdG1hcChzYiwgZ2RwKSAtIHN0YXJ0LCBiaC0+Yl9kYXRhKTsKKwkJZXh0NF9zZXRfYml0KGV4dDRfaW5vZGVfYml0bWFwKHNiLCBnZHApIC0gc3RhcnQsIGJoLT5iX2RhdGEpOworCQlmb3IgKGJpdCA9IChleHQ0X2lub2RlX3RhYmxlKHNiLCBnZHApIC0gc3RhcnQpLAorCQkgICAgIGJpdF9tYXggPSBiaXQgKyBzYmktPnNfaXRiX3Blcl9ncm91cDsgYml0IDwgYml0X21heDsgYml0KyspCisJCQlleHQ0X3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKKworCQkvKgorCQkgKiBBbHNvIGlmIHRoZSBudW1iZXIgb2YgYmxvY2tzIHdpdGhpbiB0aGUgZ3JvdXAgaXMKKwkJICogbGVzcyB0aGFuIHRoZSBibG9ja3NpemUgKiA4ICggd2hpY2ggaXMgdGhlIHNpemUKKwkJICogb2YgYml0bWFwICksIHNldCByZXN0IG9mIHRoZSBibG9jayBiaXRtYXAgdG8gMQorCQkgKi8KKwkJbWFya19iaXRtYXBfZW5kKGdyb3VwX2Jsb2Nrcywgc2ItPnNfYmxvY2tzaXplICogOCwgYmgtPmJfZGF0YSk7CisJfQorCisJcmV0dXJuIGZyZWVfYmxvY2tzIC0gc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgLSAyOworfQorCisKIC8qCiAgKiBUaGUgZnJlZSBibG9ja3MgYXJlIG1hbmFnZWQgYnkgYml0bWFwcy4gIEEgZmlsZSBzeXN0ZW0gY29udGFpbnMgc2V2ZXJhbAogICogYmxvY2tzIGdyb3Vwcy4gIEVhY2ggZ3JvdXAgY29udGFpbnMgMSBiaXRtYXAgYmxvY2sgZm9yIGJsb2NrcywgMSBiaXRtYXAKQEAgLTExOSw3ICsyMDgsNyBAQAogICoKICAqIFJldHVybiBidWZmZXJfaGVhZCBvbiBzdWNjZXNzIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgogICovCi1zdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICoKK3N0cnVjdCBidWZmZXJfaGVhZCAqCiByZWFkX2Jsb2NrX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgYmxvY2tfZ3JvdXApCiB7CiAJaW50IGk7CkBAIC0xMjcsMTEgKzIxNiwyNCBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqIGJoID0gTlVMTDsKIAlleHQ0X2ZzYmxrX3QgYml0bWFwX2JsazsKIAotCWRlc2MgPSBleHQ0X2dldF9ncm91cF9kZXNjIChzYiwgYmxvY2tfZ3JvdXAsIE5VTEwpOworCWRlc2MgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCBibG9ja19ncm91cCwgTlVMTCk7CiAJaWYgKCFkZXNjKQogCQlyZXR1cm4gTlVMTDsKIAliaXRtYXBfYmxrID0gZXh0NF9ibG9ja19iaXRtYXAoc2IsIGRlc2MpOwotCWJoID0gc2JfYnJlYWQoc2IsIGJpdG1hcF9ibGspOworCWlmIChkZXNjLT5iZ19mbGFncyAmIGNwdV90b19sZTE2KEVYVDRfQkdfQkxPQ0tfVU5JTklUKSkgeworCQliaCA9IHNiX2dldGJsayhzYiwgYml0bWFwX2Jsayk7CisJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgeworCQkJbG9ja19idWZmZXIoYmgpOworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CisJCQkJZXh0NF9pbml0X2Jsb2NrX2JpdG1hcChzYiwgYmgsIGJsb2NrX2dyb3VwLAorCQkJCQkJICAgICAgIGRlc2MpOworCQkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOworCQkJfQorCQkJdW5sb2NrX2J1ZmZlcihiaCk7CisJCX0KKwl9IGVsc2UgeworCQliaCA9IHNiX2JyZWFkKHNiLCBiaXRtYXBfYmxrKTsKKwl9CiAJaWYgKCFiaCkKIAkJZXh0NF9lcnJvciAoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAiQ2Fubm90IHJlYWQgYmxvY2sgYml0bWFwIC0gIgpAQCAtNjI3LDYgKzcyOSw3IEBACiAJZGVzYy0+YmdfZnJlZV9ibG9ja3NfY291bnQgPQogCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCkgKwogCQkJZ3JvdXBfZnJlZWQpOworCWRlc2MtPmJnX2NoZWNrc3VtID0gZXh0NF9ncm91cF9kZXNjX2NzdW0oc2JpLCBibG9ja19ncm91cCwgZGVzYyk7CiAJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBibG9ja19ncm91cCkpOwogCXBlcmNwdV9jb3VudGVyX2FkZCgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwgY291bnQpOwogCkBAIC0xNjg1LDggKzE3ODgsMTEgQEAKIAkJCXJldF9ibG9jaywgZ29hbF9oaXRzLCBnb2FsX2F0dGVtcHRzKTsKIAogCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGdyb3VwX25vKSk7CisJaWYgKGdkcC0+YmdfZmxhZ3MgJiBjcHVfdG9fbGUxNihFWFQ0X0JHX0JMT0NLX1VOSU5JVCkpCisJCWdkcC0+YmdfZmxhZ3MgJj0gY3B1X3RvX2xlMTYofkVYVDRfQkdfQkxPQ0tfVU5JTklUKTsKIAlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0KIAkJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQpLW51bSk7CisJZ2RwLT5iZ19jaGVja3N1bSA9IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHNiaSwgZ3JvdXBfbm8sIGdkcCk7CiAJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBncm91cF9ubykpOwogCXBlcmNwdV9jb3VudGVyX3N1Yigmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwgbnVtKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9kaXIuYyBiL2ZzL2V4dDQvZGlyLmMKaW5kZXggMGZiMWU2Mi4uZjYxMmJlZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9kaXIuYworKysgYi9mcy9leHQ0L2Rpci5jCkBAIC00Nyw5ICs0Nyw3IEBACiAJLmNvbXBhdF9pb2N0bAk9IGV4dDRfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJLmZzeW5jCQk9IGV4dDRfc3luY19maWxlLAkvKiBCS0wgaGVsZCAqLwotI2lmZGVmIENPTkZJR19FWFQ0X0lOREVYCiAJLnJlbGVhc2UJPSBleHQ0X3JlbGVhc2VfZGlyLAotI2VuZGlmCiB9OwogCiAKQEAgLTEwNyw3ICsxMDUsNiBAQAogCiAJc2IgPSBpbm9kZS0+aV9zYjsKIAotI2lmZGVmIENPTkZJR19FWFQ0X0lOREVYCiAJaWYgKEVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKGlub2RlLT5pX3NiLAogCQkJCSAgICBFWFQ0X0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCkgJiYKIAkgICAgKChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9JTkRFWF9GTCkgfHwKQEAgLTEyMyw3ICsxMjAsNiBAQAogCQkgKi8KIAkJRVhUNF9JKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5pX2ZsYWdzICY9IH5FWFQ0X0lOREVYX0ZMOwogCX0KLSNlbmRpZgogCXN0b3JlZCA9IDA7CiAJb2Zmc2V0ID0gZmlscC0+Zl9wb3MgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSk7CiAKQEAgLTIzMiw3ICsyMjgsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfRVhUNF9JTkRFWAogLyoKICAqIFRoZXNlIGZ1bmN0aW9ucyBjb252ZXJ0IGZyb20gdGhlIG1ham9yL21pbm9yIGhhc2ggdG8gYW4gZl9wb3MKICAqIHZhbHVlLgpAQCAtNTE4LDUgKzUxMywzIEBACiAKIAlyZXR1cm4gMDsKIH0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jCmluZGV4IDc4YmViMDkuLjg1Mjg3NzQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0ZW50cy5jCisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9qYmQyLmg+Ci0jaW5jbHVkZSA8bGludXgvamJkLmg+CisjaW5jbHVkZSA8bGludXgvamJkMi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KQEAgLTUyLDcgKzUyLDcgQEAKIHsKIAlleHQ0X2ZzYmxrX3QgYmxvY2s7CiAKLQlibG9jayA9IGxlMzJfdG9fY3B1KGV4LT5lZV9zdGFydCk7CisJYmxvY2sgPSBsZTMyX3RvX2NwdShleC0+ZWVfc3RhcnRfbG8pOwogCWJsb2NrIHw9ICgoZXh0NF9mc2Jsa190KSBsZTE2X3RvX2NwdShleC0+ZWVfc3RhcnRfaGkpIDw8IDMxKSA8PCAxOwogCXJldHVybiBibG9jazsKIH0KQEAgLTY1LDcgKzY1LDcgQEAKIHsKIAlleHQ0X2ZzYmxrX3QgYmxvY2s7CiAKLQlibG9jayA9IGxlMzJfdG9fY3B1KGl4LT5laV9sZWFmKTsKKwlibG9jayA9IGxlMzJfdG9fY3B1KGl4LT5laV9sZWFmX2xvKTsKIAlibG9jayB8PSAoKGV4dDRfZnNibGtfdCkgbGUxNl90b19jcHUoaXgtPmVpX2xlYWZfaGkpIDw8IDMxKSA8PCAxOwogCXJldHVybiBibG9jazsKIH0KQEAgLTc3LDcgKzc3LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZXh0NF9leHRfc3RvcmVfcGJsb2NrKHN0cnVjdCBleHQ0X2V4dGVudCAqZXgsIGV4dDRfZnNibGtfdCBwYikKIHsKLQlleC0+ZWVfc3RhcnQgPSBjcHVfdG9fbGUzMigodW5zaWduZWQgbG9uZykgKHBiICYgMHhmZmZmZmZmZikpOworCWV4LT5lZV9zdGFydF9sbyA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBsb25nKSAocGIgJiAweGZmZmZmZmZmKSk7CiAJZXgtPmVlX3N0YXJ0X2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgPj4gMzEpID4+IDEpICYgMHhmZmZmKTsKIH0KIApAQCAtODgsNyArODgsNyBAQAogICovCiBzdGF0aWMgdm9pZCBleHQ0X2lkeF9zdG9yZV9wYmxvY2soc3RydWN0IGV4dDRfZXh0ZW50X2lkeCAqaXgsIGV4dDRfZnNibGtfdCBwYikKIHsKLQlpeC0+ZWlfbGVhZiA9IGNwdV90b19sZTMyKCh1bnNpZ25lZCBsb25nKSAocGIgJiAweGZmZmZmZmZmKSk7CisJaXgtPmVpX2xlYWZfbG8gPSBjcHVfdG9fbGUzMigodW5zaWduZWQgbG9uZykgKHBiICYgMHhmZmZmZmZmZikpOwogCWl4LT5laV9sZWFmX2hpID0gY3B1X3RvX2xlMTYoKHVuc2lnbmVkIGxvbmcpICgocGIgPj4gMzEpID4+IDEpICYgMHhmZmZmKTsKIH0KIApAQCAtMTQwOSw4ICsxNDA5LDcgQEAKIAllaC0+ZWhfZW50cmllcyA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGVoLT5laF9lbnRyaWVzKSsxKTsKIAluZWFyZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKIAluZWFyZXgtPmVlX2Jsb2NrID0gbmV3ZXh0LT5lZV9ibG9jazsKLQluZWFyZXgtPmVlX3N0YXJ0ID0gbmV3ZXh0LT5lZV9zdGFydDsKLQluZWFyZXgtPmVlX3N0YXJ0X2hpID0gbmV3ZXh0LT5lZV9zdGFydF9oaTsKKwlleHQ0X2V4dF9zdG9yZV9wYmxvY2sobmVhcmV4LCBleHRfcGJsb2NrKG5ld2V4dCkpOwogCW5lYXJleC0+ZWVfbGVuID0gbmV3ZXh0LT5lZV9sZW47CiAKIG1lcmdlOgpAQCAtMjE3Nyw3ICsyMTc2LDYgQEAKIAl9CiAJLyogZXgyOiBpYmxvY2sgdG8gaWJsb2NrICsgbWF4YmxvY2tzLTEgOiBpbml0aWFsaXNlZCAqLwogCWV4Mi0+ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihpYmxvY2spOwotCWV4Mi0+ZWVfc3RhcnQgPSBjcHVfdG9fbGUzMihuZXdibG9jayk7CiAJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4MiwgbmV3YmxvY2spOwogCWV4Mi0+ZWVfbGVuID0gY3B1X3RvX2xlMTYoYWxsb2NhdGVkKTsKIAlpZiAoZXgyICE9IGV4KQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9mc3luYy5jIGIvZnMvZXh0NC9mc3luYy5jCmluZGV4IDJhMTY3ZDcuLjhkNTA4NzkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZnN5bmMuYworKysgYi9mcy9leHQ0L2ZzeW5jLmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCByZXQgPSAwOwogCi0JSl9BU1NFUlQoZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gMCk7CisJSl9BU1NFUlQoZXh0NF9qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkgPT0gTlVMTCk7CiAKIAkvKgogCSAqIGRhdGE9d3JpdGViYWNrOgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9ncm91cC5oIGIvZnMvZXh0NC9ncm91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1Nzc5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9leHQ0L2dyb3VwLmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqICBsaW51eC9mcy9leHQ0L2dyb3VwLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQ2x1c3RlciBGaWxlIFN5c3RlbXMsIEluYworICoKKyAqIEF1dGhvcjogQW5kcmVhcyBEaWxnZXIgPGFkaWxnZXJAY2x1c3RlcmZzLmNvbT4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9FWFQ0X0dST1VQX0gKKyNkZWZpbmUgX0xJTlVYX0VYVDRfR1JPVVBfSAorCitleHRlcm4gX19sZTE2IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgX191MzIgZ3JvdXAsCisJCQkJICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZ2RwKTsKK2V4dGVybiBpbnQgZXh0NF9ncm91cF9kZXNjX2NzdW1fdmVyaWZ5KHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSwgX191MzIgZ3JvdXAsCisJCQkJICAgICAgIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcCk7CitzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlYWRfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgdW5zaWduZWQgaW50IGJsb2NrX2dyb3VwKTsKK2V4dGVybiB1bnNpZ25lZCBleHQ0X2luaXRfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBncm91cCwKKwkJCQkgICAgICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZGVzYyk7CisjZGVmaW5lIGV4dDRfZnJlZV9ibG9ja3NfYWZ0ZXJfaW5pdChzYiwgZ3JvdXAsIGRlc2MpCQkJXAorCQlleHQ0X2luaXRfYmxvY2tfYml0bWFwKHNiLCBOVUxMLCBncm91cCwgZGVzYykKK2V4dGVybiB1bnNpZ25lZCBleHQ0X2luaXRfaW5vZGVfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBncm91cCwKKwkJCQkgICAgICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqZGVzYyk7CitleHRlcm4gdm9pZCBtYXJrX2JpdG1hcF9lbmQoaW50IHN0YXJ0X2JpdCwgaW50IGVuZF9iaXQsIGNoYXIgKmJpdG1hcCk7CisjZW5kaWYgLyogX0xJTlVYX0VYVDRfR1JPVVBfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pYWxsb2MuYyBiL2ZzL2V4dDQvaWFsbG9jLmMKaW5kZXggZDBjNzc5My4uYzYxZjM3ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pYWxsb2MuYworKysgYi9mcy9leHQ0L2lhbGxvYy5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgImFjbC5oIgorI2luY2x1ZGUgImdyb3VwLmgiCiAKIC8qCiAgKiBpYWxsb2MuYyBjb250YWlucyB0aGUgaW5vZGVzIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiByb3V0aW5lcwpAQCAtNDMsNiArNDQsNTIgQEAKICAqIHRoZSBmcmVlIGJsb2NrcyBjb3VudCBpbiB0aGUgYmxvY2suCiAgKi8KIAorLyoKKyAqIFRvIGF2b2lkIGNhbGxpbmcgdGhlIGF0b21pYyBzZXRiaXQgaHVuZHJlZHMgb3IgdGhvdXNhbmRzIG9mIHRpbWVzLCB3ZSBvbmx5CisgKiBuZWVkIHRvIHVzZSBpdCB3aXRoaW4gYSBzaW5nbGUgYnl0ZSAodG8gZW5zdXJlIHdlIGdldCBlbmRpYW5uZXNzIHJpZ2h0KS4KKyAqIFdlIGNhbiB1c2UgbWVtc2V0IGZvciB0aGUgcmVzdCBvZiB0aGUgYml0bWFwIGFzIHRoZXJlIGFyZSBubyBvdGhlciB1c2Vycy4KKyAqLwordm9pZCBtYXJrX2JpdG1hcF9lbmQoaW50IHN0YXJ0X2JpdCwgaW50IGVuZF9iaXQsIGNoYXIgKmJpdG1hcCkKK3sKKwlpbnQgaTsKKworCWlmIChzdGFydF9iaXQgPj0gZW5kX2JpdCkKKwkJcmV0dXJuOworCisJZXh0NF9kZWJ1ZygibWFyayBlbmQgYml0cyArJWQgdGhyb3VnaCArJWQgdXNlZFxuIiwgc3RhcnRfYml0LCBlbmRfYml0KTsKKwlmb3IgKGkgPSBzdGFydF9iaXQ7IGkgPCAoKHN0YXJ0X2JpdCArIDcpICYgfjdVTCk7IGkrKykKKwkJZXh0NF9zZXRfYml0KGksIGJpdG1hcCk7CisJaWYgKGkgPCBlbmRfYml0KQorCQltZW1zZXQoYml0bWFwICsgKGkgPj4gMyksIDB4ZmYsIChlbmRfYml0IC0gaSkgPj4gMyk7Cit9CisKKy8qIEluaXRpYWxpemVzIGFuIHVuaW5pdGlhbGl6ZWQgaW5vZGUgYml0bWFwICovCit1bnNpZ25lZCBleHQ0X2luaXRfaW5vZGVfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGJsb2NrX2dyb3VwLAorCQkJCXN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmdkcCkKK3sKKwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBFWFQ0X1NCKHNiKTsKKworCUpfQVNTRVJUX0JIKGJoLCBidWZmZXJfbG9ja2VkKGJoKSk7CisKKwkvKiBJZiBjaGVja3N1bSBpcyBiYWQgbWFyayBhbGwgYmxvY2tzIGFuZCBpbm9kZXMgdXNlIHRvIHByZXZlbnQKKwkgKiBhbGxvY2F0aW9uLCBlc3NlbnRpYWxseSBpbXBsZW1lbnRpbmcgYSBwZXItZ3JvdXAgcmVhZC1vbmx5IGZsYWcuICovCisJaWYgKCFleHQ0X2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoc2JpLCBibG9ja19ncm91cCwgZ2RwKSkgeworCQlleHQ0X2Vycm9yKHNiLCBfX0ZVTkNUSU9OX18sICJDaGVja3N1bSBiYWQgZm9yIGdyb3VwICV1XG4iLAorCQkJICAgYmxvY2tfZ3JvdXApOworCQlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0gMDsKKwkJZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCA9IDA7CisJCWdkcC0+YmdfaXRhYmxlX3VudXNlZCA9IDA7CisJCW1lbXNldChiaC0+Yl9kYXRhLCAweGZmLCBzYi0+c19ibG9ja3NpemUpOworCQlyZXR1cm4gMDsKKwl9CisKKwltZW1zZXQoYmgtPmJfZGF0YSwgMCwgKEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYikgKyA3KSAvIDgpOworCW1hcmtfYml0bWFwX2VuZChFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpLCBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpLAorCQkJYmgtPmJfZGF0YSk7CisKKwlyZXR1cm4gRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKTsKK30KIAogLyoKICAqIFJlYWQgdGhlIGlub2RlIGFsbG9jYXRpb24gYml0bWFwIGZvciBhIGdpdmVuIGJsb2NrX2dyb3VwLCByZWFkaW5nCkBAIC01OSw4ICsxMDYsMjAgQEAKIAlkZXNjID0gZXh0NF9nZXRfZ3JvdXBfZGVzYyhzYiwgYmxvY2tfZ3JvdXAsIE5VTEwpOwogCWlmICghZGVzYykKIAkJZ290byBlcnJvcl9vdXQ7Ci0KLQliaCA9IHNiX2JyZWFkKHNiLCBleHQ0X2lub2RlX2JpdG1hcChzYiwgZGVzYykpOworCWlmIChkZXNjLT5iZ19mbGFncyAmIGNwdV90b19sZTE2KEVYVDRfQkdfSU5PREVfVU5JTklUKSkgeworCQliaCA9IHNiX2dldGJsayhzYiwgZXh0NF9pbm9kZV9iaXRtYXAoc2IsIGRlc2MpKTsKKwkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CisJCQlsb2NrX2J1ZmZlcihiaCk7CisJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKKwkJCQlleHQ0X2luaXRfaW5vZGVfYml0bWFwKHNiLCBiaCwgYmxvY2tfZ3JvdXAsCisJCQkJCQkgICAgICAgZGVzYyk7CisJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CisJCQl9CisJCQl1bmxvY2tfYnVmZmVyKGJoKTsKKwkJfQorCX0gZWxzZSB7CisJCWJoID0gc2JfYnJlYWQoc2IsIGV4dDRfaW5vZGVfYml0bWFwKHNiLCBkZXNjKSk7CisJfQogCWlmICghYmgpCiAJCWV4dDRfZXJyb3Ioc2IsICJyZWFkX2lub2RlX2JpdG1hcCIsCiAJCQkgICAgIkNhbm5vdCByZWFkIGlub2RlIGJpdG1hcCAtICIKQEAgLTE2OSw2ICsyMjgsOCBAQAogCQkJaWYgKGlzX2RpcmVjdG9yeSkKIAkJCQlnZHAtPmJnX3VzZWRfZGlyc19jb3VudCA9IGNwdV90b19sZTE2KAogCQkJCSAgbGUxNl90b19jcHUoZ2RwLT5iZ191c2VkX2RpcnNfY291bnQpIC0gMSk7CisJCQlnZHAtPmJnX2NoZWNrc3VtID0gZXh0NF9ncm91cF9kZXNjX2NzdW0oc2JpLAorCQkJCQkJCWJsb2NrX2dyb3VwLCBnZHApOwogCQkJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBibG9ja19ncm91cCkpOwogCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmktPnNfZnJlZWlub2Rlc19jb3VudGVyKTsKIAkJCWlmIChpc19kaXJlY3RvcnkpCkBAIC00MzUsNyArNDk2LDcgQEAKIAlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmk7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGlub2RlICpyZXQ7Ci0JaW50IGk7CisJaW50IGksIGZyZWUgPSAwOwogCiAJLyogQ2Fubm90IGNyZWF0ZSBmaWxlcyBpbiBhIGRlbGV0ZWQgZGlyZWN0b3J5ICovCiAJaWYgKCFkaXIgfHwgIWRpci0+aV9ubGluaykKQEAgLTUxNywxMSArNTc4LDEzIEBACiAJZ290byBvdXQ7CiAKIGdvdDoKLQlpbm8gKz0gZ3JvdXAgKiBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpICsgMTsKLQlpZiAoaW5vIDwgRVhUNF9GSVJTVF9JTk8oc2IpIHx8IGlubyA+IGxlMzJfdG9fY3B1KGVzLT5zX2lub2Rlc19jb3VudCkpIHsKLQkJZXh0NF9lcnJvciAoc2IsICJleHQ0X25ld19pbm9kZSIsCi0JCQkgICAgInJlc2VydmVkIGlub2RlIG9yIGlub2RlID4gaW5vZGVzIGNvdW50IC0gIgotCQkJICAgICJibG9ja19ncm91cCA9ICVkLCBpbm9kZT0lbHUiLCBncm91cCwgaW5vKTsKKwlpbm8rKzsKKwlpZiAoKGdyb3VwID09IDAgJiYgaW5vIDwgRVhUNF9GSVJTVF9JTk8oc2IpKSB8fAorCSAgICBpbm8gPiBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpKSB7CisJCWV4dDRfZXJyb3Ioc2IsIF9fRlVOQ1RJT05fXywKKwkJCSAgICJyZXNlcnZlZCBpbm9kZSBvciBpbm9kZSA+IGlub2RlcyBjb3VudCAtICIKKwkJCSAgICJibG9ja19ncm91cCA9ICVkLCBpbm9kZT0lbHUiLCBncm91cCwKKwkJCSAgIGlubyArIGdyb3VwICogRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKSk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC01MjksMTMgKzU5Miw3OCBAQAogCUJVRkZFUl9UUkFDRShiaDIsICJnZXRfd3JpdGVfYWNjZXNzIik7CiAJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaDIpOwogCWlmIChlcnIpIGdvdG8gZmFpbDsKKworCS8qIFdlIG1heSBoYXZlIHRvIGluaXRpYWxpemUgdGhlIGJsb2NrIGJpdG1hcCBpZiBpdCBpc24ndCBhbHJlYWR5ICovCisJaWYgKEVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSAmJgorCSAgICBnZHAtPmJnX2ZsYWdzICYgY3B1X3RvX2xlMTYoRVhUNF9CR19CTE9DS19VTklOSVQpKSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmxvY2tfYmggPSByZWFkX2Jsb2NrX2JpdG1hcChzYiwgZ3JvdXApOworCisJCUJVRkZFUl9UUkFDRShibG9ja19iaCwgImdldCBibG9jayBiaXRtYXAgYWNjZXNzIik7CisJCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmxvY2tfYmgpOworCQlpZiAoZXJyKSB7CisJCQlicmVsc2UoYmxvY2tfYmgpOworCQkJZ290byBmYWlsOworCQl9CisKKwkJZnJlZSA9IDA7CisJCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGdyb3VwKSk7CisJCS8qIHJlY2hlY2sgYW5kIGNsZWFyIGZsYWcgdW5kZXIgbG9jayBpZiB3ZSBzdGlsbCBuZWVkIHRvICovCisJCWlmIChnZHAtPmJnX2ZsYWdzICYgY3B1X3RvX2xlMTYoRVhUNF9CR19CTE9DS19VTklOSVQpKSB7CisJCQlnZHAtPmJnX2ZsYWdzICY9IGNwdV90b19sZTE2KH5FWFQ0X0JHX0JMT0NLX1VOSU5JVCk7CisJCQlmcmVlID0gZXh0NF9mcmVlX2Jsb2Nrc19hZnRlcl9pbml0KHNiLCBncm91cCwgZ2RwKTsKKwkJCWdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUxNihmcmVlKTsKKwkJfQorCQlzcGluX3VubG9jayhzYl9iZ2xfbG9jayhzYmksIGdyb3VwKSk7CisKKwkJLyogRG9uJ3QgbmVlZCB0byBkaXJ0eSBiaXRtYXAgYmxvY2sgaWYgd2UgZGlkbid0IGNoYW5nZSBpdCAqLworCQlpZiAoZnJlZSkgeworCQkJQlVGRkVSX1RSQUNFKGJsb2NrX2JoLCAiZGlydHkgYmxvY2sgYml0bWFwIik7CisJCQllcnIgPSBleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBibG9ja19iaCk7CisJCX0KKworCQlicmVsc2UoYmxvY2tfYmgpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsOworCX0KKwogCXNwaW5fbG9jayhzYl9iZ2xfbG9jayhzYmksIGdyb3VwKSk7CisJLyogSWYgd2UgZGlkbid0IGFsbG9jYXRlIGZyb20gd2l0aGluIHRoZSBpbml0aWFsaXplZCBwYXJ0IG9mIHRoZSBpbm9kZQorCSAqIHRhYmxlIHRoZW4gd2UgbmVlZCB0byBpbml0aWFsaXplIHVwIHRvIHRoaXMgaW5vZGUuICovCisJaWYgKEVYVDRfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkgeworCQlpZiAoZ2RwLT5iZ19mbGFncyAmIGNwdV90b19sZTE2KEVYVDRfQkdfSU5PREVfVU5JTklUKSkgeworCQkJZ2RwLT5iZ19mbGFncyAmPSBjcHVfdG9fbGUxNih+RVhUNF9CR19JTk9ERV9VTklOSVQpOworCisJCQkvKiBXaGVuIG1hcmtpbmcgdGhlIGJsb2NrIGdyb3VwIHdpdGgKKwkJCSAqIH5FWFQ0X0JHX0lOT0RFX1VOSU5JVCB3ZSBkb24ndCB3YW50IHRvIGRlcGVuZAorCQkJICogb24gdGhlIHZhbHVlIG9mIGJnX2l0YWJsZV91bnNlZCBldmVuIHRob3VnaAorCQkJICogbWtlMmZzIGNvdWxkIGhhdmUgaW5pdGlhbGl6ZWQgdGhlIHNhbWUgZm9yIHVzLgorCQkJICogSW5zdGVhZCB3ZSBjYWxjdWxhdGVkIHRoZSB2YWx1ZSBiZWxvdworCQkJICovCisKKwkJCWZyZWUgPSAwOworCQl9IGVsc2UgeworCQkJZnJlZSA9IEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYikgLQorCQkJCWxlMTZfdG9fY3B1KGdkcC0+YmdfaXRhYmxlX3VudXNlZCk7CisJCX0KKworCQkvKgorCQkgKiBDaGVjayB0aGUgcmVsYXRpdmUgaW5vZGUgbnVtYmVyIGFnYWluc3QgdGhlIGxhc3QgdXNlZAorCQkgKiByZWxhdGl2ZSBpbm9kZSBudW1iZXIgaW4gdGhpcyBncm91cC4gaWYgaXQgaXMgZ3JlYXRlcgorCQkgKiB3ZSBuZWVkIHRvICB1cGRhdGUgdGhlIGJnX2l0YWJsZV91bnVzZWQgY291bnQKKwkJICoKKwkJICovCisJCWlmIChpbm8gPiBmcmVlKQorCQkJZ2RwLT5iZ19pdGFibGVfdW51c2VkID0KKwkJCQljcHVfdG9fbGUxNihFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpIC0gaW5vKTsKKwl9CisKIAlnZHAtPmJnX2ZyZWVfaW5vZGVzX2NvdW50ID0KIAkJY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZ2RwLT5iZ19mcmVlX2lub2Rlc19jb3VudCkgLSAxKTsKIAlpZiAoU19JU0RJUihtb2RlKSkgewogCQlnZHAtPmJnX3VzZWRfZGlyc19jb3VudCA9CiAJCQljcHVfdG9fbGUxNihsZTE2X3RvX2NwdShnZHAtPmJnX3VzZWRfZGlyc19jb3VudCkgKyAxKTsKIAl9CisJZ2RwLT5iZ19jaGVja3N1bSA9IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHNiaSwgZ3JvdXAsIGdkcCk7CiAJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBncm91cCkpOwogCUJVRkZFUl9UUkFDRShiaDIsICJjYWxsIGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YSIpOwogCWVyciA9IGV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoMik7CkBAIC01NTcsNyArNjg1LDcgQEAKIAkJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7CiAJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAKLQlpbm9kZS0+aV9pbm8gPSBpbm87CisJaW5vZGUtPmlfaW5vID0gaW5vICsgZ3JvdXAgKiBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpOwogCS8qIFRoaXMgaXMgdGhlIG9wdGltYWwgSU8gc2l6ZSAoZm9yIHN0YXQpLCBub3QgdGhlIGZzIGJsb2NrIHNpemUgKi8KIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IGVpLT5pX2NydGltZSA9CkBAIC01NzMsMTEgKzcwMSw2IEBACiAJLyogZGlyc3luYyBvbmx5IGFwcGxpZXMgdG8gZGlyZWN0b3JpZXMgKi8KIAlpZiAoIVNfSVNESVIobW9kZSkpCiAJCWVpLT5pX2ZsYWdzICY9IH5FWFQ0X0RJUlNZTkNfRkw7Ci0jaWZkZWYgRVhUNF9GUkFHTUVOVFMKLQllaS0+aV9mYWRkciA9IDA7Ci0JZWktPmlfZnJhZ19ubyA9IDA7Ci0JZWktPmlfZnJhZ19zaXplID0gMDsKLSNlbmRpZgogCWVpLT5pX2ZpbGVfYWNsID0gMDsKIAllaS0+aV9kaXJfYWNsID0gMDsKIAllaS0+aV9kdGltZSA9IDA7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggMGRmMmIxZS4uNTQ4OTcwMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTAyNyw3ICsxMDI3LDcgQEAKIAkJfQogCQlpZiAoYnVmZmVyX25ldygmZHVtbXkpKSB7CiAJCQlKX0FTU0VSVChjcmVhdGUgIT0gMCk7Ci0JCQlKX0FTU0VSVChoYW5kbGUgIT0gMCk7CisJCQlKX0FTU0VSVChoYW5kbGUgIT0gTlVMTCk7CiAKIAkJCS8qCiAJCQkgKiBOb3cgdGhhdCB3ZSBkbyBub3QgYWx3YXlzIGpvdXJuYWwgZGF0YSwgd2Ugc2hvdWxkCkBAIC0yNzExLDExICsyNzExLDYgQEAKIAl9CiAJaW5vZGUtPmlfYmxvY2tzID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Jsb2Nrcyk7CiAJZWktPmlfZmxhZ3MgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZmxhZ3MpOwotI2lmZGVmIEVYVDRfRlJBR01FTlRTCi0JZWktPmlfZmFkZHIgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZmFkZHIpOwotCWVpLT5pX2ZyYWdfbm8gPSByYXdfaW5vZGUtPmlfZnJhZzsKLQllaS0+aV9mcmFnX3NpemUgPSByYXdfaW5vZGUtPmlfZnNpemU7Ci0jZW5kaWYKIAllaS0+aV9maWxlX2FjbCA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9maWxlX2FjbCk7CiAJaWYgKEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzLT5zX2NyZWF0b3Jfb3MgIT0KIAkgICAgY3B1X3RvX2xlMzIoRVhUNF9PU19IVVJEKSkKQEAgLTI4NjAsMTEgKzI4NTUsNiBAQAogCXJhd19pbm9kZS0+aV9ibG9ja3MgPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9ibG9ja3MpOwogCXJhd19pbm9kZS0+aV9kdGltZSA9IGNwdV90b19sZTMyKGVpLT5pX2R0aW1lKTsKIAlyYXdfaW5vZGUtPmlfZmxhZ3MgPSBjcHVfdG9fbGUzMihlaS0+aV9mbGFncyk7Ci0jaWZkZWYgRVhUNF9GUkFHTUVOVFMKLQlyYXdfaW5vZGUtPmlfZmFkZHIgPSBjcHVfdG9fbGUzMihlaS0+aV9mYWRkcik7Ci0JcmF3X2lub2RlLT5pX2ZyYWcgPSBlaS0+aV9mcmFnX25vOwotCXJhd19pbm9kZS0+aV9mc2l6ZSA9IGVpLT5pX2ZyYWdfc2l6ZTsKLSNlbmRpZgogCWlmIChFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcy0+c19jcmVhdG9yX29zICE9CiAJICAgIGNwdV90b19sZTMyKEVYVDRfT1NfSFVSRCkpCiAJCXJhd19pbm9kZS0+aV9maWxlX2FjbF9oaWdoID0KQEAgLTMyNDMsMTIgKzMyMzMsMTQgQEAKIAkJCQkJCSAgICAgIGlsb2MsIGhhbmRsZSk7CiAJCQlpZiAocmV0KSB7CiAJCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX05PX0VYUEFORDsKLQkJCQlpZiAobW50X2NvdW50ICE9IHNiaS0+c19lcy0+c19tbnRfY291bnQpIHsKKwkJCQlpZiAobW50X2NvdW50ICE9CisJCQkJCWxlMTZfdG9fY3B1KHNiaS0+c19lcy0+c19tbnRfY291bnQpKSB7CiAJCQkJCWV4dDRfd2FybmluZyhpbm9kZS0+aV9zYiwgX19GVU5DVElPTl9fLAogCQkJCQkiVW5hYmxlIHRvIGV4cGFuZCBpbm9kZSAlbHUuIERlbGV0ZSIKIAkJCQkJIiBzb21lIEVBcyBvciBydW4gZTJmc2NrLiIsCiAJCQkJCWlub2RlLT5pX2lubyk7Ci0JCQkJCW1udF9jb3VudCA9IHNiaS0+c19lcy0+c19tbnRfY291bnQ7CisJCQkJCW1udF9jb3VudCA9CisJCQkJCSAgbGUxNl90b19jcHUoc2JpLT5zX2VzLT5zX21udF9jb3VudCk7CiAJCQkJfQogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggNWZkYjg2Mi4uOTRlZTZmMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMTQ0LDcgKzE0NCw2IEBACiAJdTE2IHNpemU7CiB9OwogCi0jaWZkZWYgQ09ORklHX0VYVDRfSU5ERVgKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZHhfZ2V0X2Jsb2NrIChzdHJ1Y3QgZHhfZW50cnkgKmVudHJ5KTsKIHN0YXRpYyB2b2lkIGR4X3NldF9ibG9jayAoc3RydWN0IGR4X2VudHJ5ICplbnRyeSwgdW5zaWduZWQgdmFsdWUpOwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBkeF9nZXRfaGFzaCAoc3RydWN0IGR4X2VudHJ5ICplbnRyeSk7CkBAIC03NjYsOCArNzY1LDYgQEAKIAlkeF9zZXRfYmxvY2sobmV3LCBibG9jayk7CiAJZHhfc2V0X2NvdW50KGVudHJpZXMsIGNvdW50ICsgMSk7CiB9Ci0jZW5kaWYKLQogCiBzdGF0aWMgdm9pZCBleHQ0X3VwZGF0ZV9keF9mbGFnKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CkBAIC04NjksNyArODY2LDYgQEAKIAluYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKIAlpZiAobmFtZWxlbiA+IEVYVDRfTkFNRV9MRU4pCiAJCXJldHVybiBOVUxMOwotI2lmZGVmIENPTkZJR19FWFQ0X0lOREVYCiAJaWYgKGlzX2R4KGRpcikpIHsKIAkJYmggPSBleHQ0X2R4X2ZpbmRfZW50cnkoZGVudHJ5LCByZXNfZGlyLCAmZXJyKTsKIAkJLyoKQEAgLTg4MSw3ICs4NzcsNiBAQAogCQkJcmV0dXJuIGJoOwogCQlkeHRyYWNlKHByaW50aygiZXh0NF9maW5kX2VudHJ5OiBkeCBmYWlsZWQsIGZhbGxpbmcgYmFja1xuIikpOwogCX0KLSNlbmRpZgogCW5ibG9ja3MgPSBkaXItPmlfc2l6ZSA+PiBFWFQ0X0JMT0NLX1NJWkVfQklUUyhzYik7CiAJc3RhcnQgPSBFWFQ0X0koZGlyKS0+aV9kaXJfc3RhcnRfbG9va3VwOwogCWlmIChzdGFydCA+PSBuYmxvY2tzKQpAQCAtOTU3LDcgKzk1Miw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotI2lmZGVmIENPTkZJR19FWFQ0X0lOREVYCiBzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICogZXh0NF9keF9maW5kX2VudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJICAgICAgIHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICoqcmVzX2RpciwgaW50ICplcnIpCiB7CkBAIC0xMDI1LDcgKzEwMTksNiBAQAogCWR4X3JlbGVhc2UgKGZyYW1lcyk7CiAJcmV0dXJuIE5VTEw7CiB9Ci0jZW5kaWYKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDRfbG9va3VwKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKQEAgLTExMjEsNyArMTExNCw2IEBACiAJCWRlLT5maWxlX3R5cGUgPSBleHQ0X3R5cGVfYnlfbW9kZVsobW9kZSAmIFNfSUZNVCk+PlNfU0hJRlRdOwogfQogCi0jaWZkZWYgQ09ORklHX0VYVDRfSU5ERVgKIC8qCiAgKiBNb3ZlIGNvdW50IGVudHJpZXMgZnJvbSBlbmQgb2YgbWFwIGJldHdlZW4gdHdvIG1lbW9yeSBsb2NhdGlvbnMuCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gbGFzdCBlbnRyeSBtb3ZlZC4KQEAgLTEyNjYsOCArMTI1OCw2IEBACiAJKmVycm9yID0gZXJyOwogCXJldHVybiBOVUxMOwogfQotI2VuZGlmCi0KIAogLyoKICAqIEFkZCBhIG5ldyBlbnRyeSBpbnRvIGEgZGlyZWN0b3J5IChsZWFmKSBibG9jay4gIElmIGRlIGlzIG5vbi1OVUxMLApAQCAtMTM2NCw3ICsxMzU0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19FWFQ0X0lOREVYCiAvKgogICogVGhpcyBjb252ZXJ0cyBhIG9uZSBibG9jayB1bmluZGV4ZWQgZGlyZWN0b3J5IHRvIGEgMyBibG9jayBpbmRleGVkCiAgKiBkaXJlY3RvcnksIGFuZCBhZGRzIHRoZSBkZW50cnkgdG8gdGhlIGluZGV4ZWQgZGlyZWN0b3J5LgpAQCAtMTQ0Myw3ICsxNDMyLDYgQEAKIAogCXJldHVybiBhZGRfZGlyZW50X3RvX2J1ZihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGRlLCBiaCk7CiB9Ci0jZW5kaWYKIAogLyoKICAqCWV4dDRfYWRkX2VudHJ5KCkKQEAgLTE0NjQsOSArMTQ1Miw3IEBACiAJc3RydWN0IGV4dDRfZGlyX2VudHJ5XzIgKmRlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOwogCWludAlyZXR2YWw7Ci0jaWZkZWYgQ09ORklHX0VYVDRfSU5ERVgKIAlpbnQJZHhfZmFsbGJhY2s9MDsKLSNlbmRpZgogCXVuc2lnbmVkIGJsb2Nrc2l6ZTsKIAl1MzIgYmxvY2ssIGJsb2NrczsKIApAQCAtMTQ3NCw3ICsxNDYwLDYgQEAKIAlibG9ja3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJaWYgKCFkZW50cnktPmRfbmFtZS5sZW4pCiAJCXJldHVybiAtRUlOVkFMOwotI2lmZGVmIENPTkZJR19FWFQ0X0lOREVYCiAJaWYgKGlzX2R4KGRpcikpIHsKIAkJcmV0dmFsID0gZXh0NF9keF9hZGRfZW50cnkoaGFuZGxlLCBkZW50cnksIGlub2RlKTsKIAkJaWYgKCFyZXR2YWwgfHwgKHJldHZhbCAhPSBFUlJfQkFEX0RYX0RJUikpCkBAIC0xNDgzLDcgKzE0NjgsNiBAQAogCQlkeF9mYWxsYmFjaysrOwogCQlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBkaXIpOwogCX0KLSNlbmRpZgogCWJsb2NrcyA9IGRpci0+aV9zaXplID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOwogCWZvciAoYmxvY2sgPSAwLCBvZmZzZXQgPSAwOyBibG9jayA8IGJsb2NrczsgYmxvY2srKykgewogCQliaCA9IGV4dDRfYnJlYWQoaGFuZGxlLCBkaXIsIGJsb2NrLCAwLCAmcmV0dmFsKTsKQEAgLTE0OTMsMTEgKzE0NzcsOSBAQAogCQlpZiAocmV0dmFsICE9IC1FTk9TUEMpCiAJCQlyZXR1cm4gcmV0dmFsOwogCi0jaWZkZWYgQ09ORklHX0VYVDRfSU5ERVgKIAkJaWYgKGJsb2NrcyA9PSAxICYmICFkeF9mYWxsYmFjayAmJgogCQkgICAgRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9DT01QQVRfRElSX0lOREVYKSkKIAkJCXJldHVybiBtYWtlX2luZGV4ZWRfZGlyKGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwgYmgpOwotI2VuZGlmCiAJCWJyZWxzZShiaCk7CiAJfQogCWJoID0gZXh0NF9hcHBlbmQoaGFuZGxlLCBkaXIsICZibG9jaywgJnJldHZhbCk7CkBAIC0xNTA5LDcgKzE0OTEsNiBAQAogCXJldHVybiBhZGRfZGlyZW50X3RvX2J1ZihoYW5kbGUsIGRlbnRyeSwgaW5vZGUsIGRlLCBiaCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfRVhUNF9JTkRFWAogLyoKICAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciB2YWx1ZQogICovCkBAIC0xNjQ0LDcgKzE2MjUsNiBAQAogCWR4X3JlbGVhc2UoZnJhbWVzKTsKIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCiAKIC8qCiAgKiBleHQ0X2RlbGV0ZV9lbnRyeSBkZWxldGVzIGEgZGlyZWN0b3J5IGVudHJ5IGJ5IG1lcmdpbmcgaXQgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvcmVzaXplLmMgYi9mcy9leHQ0L3Jlc2l6ZS5jCmluZGV4IDQ3MmZjMGQuLmJkOGE1MmIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvcmVzaXplLmMKKysrIGIvZnMvZXh0NC9yZXNpemUuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCisjaW5jbHVkZSAiZ3JvdXAuaCIKIAogI2RlZmluZSBvdXRzaWRlKGIsIGZpcnN0LCBsYXN0KQkoKGIpIDwgKGZpcnN0KSB8fCAoYikgPj0gKGxhc3QpKQogI2RlZmluZSBpbnNpZGUoYiwgZmlyc3QsIGxhc3QpCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPCAobGFzdCkpCkBAIC0xNDAsMjIgKzE0MSwyOSBAQAogfQogCiAvKgotICogVG8gYXZvaWQgY2FsbGluZyB0aGUgYXRvbWljIHNldGJpdCBodW5kcmVkcyBvciB0aG91c2FuZHMgb2YgdGltZXMsIHdlIG9ubHkKLSAqIG5lZWQgdG8gdXNlIGl0IHdpdGhpbiBhIHNpbmdsZSBieXRlICh0byBlbnN1cmUgd2UgZ2V0IGVuZGlhbm5lc3MgcmlnaHQpLgotICogV2UgY2FuIHVzZSBtZW1zZXQgZm9yIHRoZSByZXN0IG9mIHRoZSBiaXRtYXAgYXMgdGhlcmUgYXJlIG5vIG90aGVyIHVzZXJzLgorICogSWYgd2UgaGF2ZSBmZXdlciB0aGFuIHRocmVzaCBjcmVkaXRzLCBleHRlbmQgYnkgRVhUNF9NQVhfVFJBTlNfREFUQS4KKyAqIElmIHRoYXQgZmFpbHMsIHJlc3RhcnQgdGhlIHRyYW5zYWN0aW9uICYgcmVnYWluIHdyaXRlIGFjY2VzcyBmb3IgdGhlCisgKiBidWZmZXIgaGVhZCB3aGljaCBpcyB1c2VkIGZvciBibG9ja19iaXRtYXAgbW9kaWZpY2F0aW9ucy4KICAqLwotc3RhdGljIHZvaWQgbWFya19iaXRtYXBfZW5kKGludCBzdGFydF9iaXQsIGludCBlbmRfYml0LCBjaGFyICpiaXRtYXApCitzdGF0aWMgaW50IGV4dGVuZF9vcl9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZV90ICpoYW5kbGUsIGludCB0aHJlc2gsCisJCQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewotCWludCBpOworCWludCBlcnI7CiAKLQlpZiAoc3RhcnRfYml0ID49IGVuZF9iaXQpCi0JCXJldHVybjsKKwlpZiAoaGFuZGxlLT5oX2J1ZmZlcl9jcmVkaXRzID49IHRocmVzaCkKKwkJcmV0dXJuIDA7CiAKLQlleHQ0X2RlYnVnKCJtYXJrIGVuZCBiaXRzICslZCB0aHJvdWdoICslZCB1c2VkXG4iLCBzdGFydF9iaXQsIGVuZF9iaXQpOwotCWZvciAoaSA9IHN0YXJ0X2JpdDsgaSA8ICgoc3RhcnRfYml0ICsgNykgJiB+N1VMKTsgaSsrKQotCQlleHQ0X3NldF9iaXQoaSwgYml0bWFwKTsKLQlpZiAoaSA8IGVuZF9iaXQpCi0JCW1lbXNldChiaXRtYXAgKyAoaSA+PiAzKSwgMHhmZiwgKGVuZF9iaXQgLSBpKSA+PiAzKTsKKwllcnIgPSBleHQ0X2pvdXJuYWxfZXh0ZW5kKGhhbmRsZSwgRVhUNF9NQVhfVFJBTlNfREFUQSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJaWYgKGVycikgeworCQlpZiAoKGVyciA9IGV4dDRfam91cm5hbF9yZXN0YXJ0KGhhbmRsZSwgRVhUNF9NQVhfVFJBTlNfREFUQSkpKQorCQkJcmV0dXJuIGVycjsKKwkgICAgICAgIGlmICgoZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCkpKQorCQkJcmV0dXJuIGVycjsKKyAgICAgICAgfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xODAsOCArMTg4LDkgQEAKIAlpbnQgaTsKIAlpbnQgZXJyID0gMCwgZXJyMjsKIAotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydF9zYihzYiwgcmVzZXJ2ZWRfZ2RiICsgZ2RibG9ja3MgKwotCQkJCSAgICAgICAyICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXApOworCS8qIFRoaXMgdHJhbnNhY3Rpb24gbWF5IGJlIGV4dGVuZGVkL3Jlc3RhcnRlZCBhbG9uZyB0aGUgd2F5ICovCisJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0X3NiKHNiLCBFWFQ0X01BWF9UUkFOU19EQVRBKTsKKwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKIApAQCAtMjA4LDYgKzIxNyw5IEBACiAKIAkJZXh0NF9kZWJ1ZygidXBkYXRlIGJhY2t1cCBncm91cCAlIzA0bHggKCslZClcbiIsIGJsb2NrLCBiaXQpOwogCisJCWlmICgoZXJyID0gZXh0ZW5kX29yX3Jlc3RhcnRfdHJhbnNhY3Rpb24oaGFuZGxlLCAxLCBiaCkpKQorCQkJZ290byBleGl0X2JoOworCiAJCWdkYiA9IHNiX2dldGJsayhzYiwgYmxvY2spOwogCQlpZiAoIWdkYikgewogCQkJZXJyID0gLUVJTzsKQEAgLTIxNywxMCArMjI5LDEwIEBACiAJCQlicmVsc2UoZ2RiKTsKIAkJCWdvdG8gZXhpdF9iaDsKIAkJfQotCQlsb2NrX2J1ZmZlcihiaCk7Ci0JCW1lbWNweShnZGItPmJfZGF0YSwgc2JpLT5zX2dyb3VwX2Rlc2NbaV0tPmJfZGF0YSwgYmgtPmJfc2l6ZSk7CisJCWxvY2tfYnVmZmVyKGdkYik7CisJCW1lbWNweShnZGItPmJfZGF0YSwgc2JpLT5zX2dyb3VwX2Rlc2NbaV0tPmJfZGF0YSwgZ2RiLT5iX3NpemUpOwogCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGdkYik7Ci0JCXVubG9ja19idWZmZXIoYmgpOworCQl1bmxvY2tfYnVmZmVyKGdkYik7CiAJCWV4dDRfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGdkYik7CiAJCWV4dDRfc2V0X2JpdChiaXQsIGJoLT5iX2RhdGEpOwogCQlicmVsc2UoZ2RiKTsKQEAgLTIzMyw2ICsyNDUsOSBAQAogCiAJCWV4dDRfZGVidWcoImNsZWFyIHJlc2VydmVkIGJsb2NrICUjMDRseCAoKyVkKVxuIiwgYmxvY2ssIGJpdCk7CiAKKwkJaWYgKChlcnIgPSBleHRlbmRfb3JfcmVzdGFydF90cmFuc2FjdGlvbihoYW5kbGUsIDEsIGJoKSkpCisJCQlnb3RvIGV4aXRfYmg7CisKIAkJaWYgKElTX0VSUihnZGIgPSBiY2xlYW4oaGFuZGxlLCBzYiwgYmxvY2spKSkgewogCQkJZXJyID0gUFRSX0VSUihiaCk7CiAJCQlnb3RvIGV4aXRfYmg7CkBAIC0yNTQsNiArMjY5LDEwIEBACiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqaXQ7CiAKIAkJZXh0NF9kZWJ1ZygiY2xlYXIgaW5vZGUgYmxvY2sgJSMwNGx4ICgrJWQpXG4iLCBibG9jaywgYml0KTsKKworCQlpZiAoKGVyciA9IGV4dGVuZF9vcl9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZSwgMSwgYmgpKSkKKwkJCWdvdG8gZXhpdF9iaDsKKwogCQlpZiAoSVNfRVJSKGl0ID0gYmNsZWFuKGhhbmRsZSwgc2IsIGJsb2NrKSkpIHsKIAkJCWVyciA9IFBUUl9FUlIoaXQpOwogCQkJZ290byBleGl0X2JoOwpAQCAtMjYyLDYgKzI4MSwxMCBAQAogCQlicmVsc2UoaXQpOwogCQlleHQ0X3NldF9iaXQoYml0LCBiaC0+Yl9kYXRhKTsKIAl9CisKKwlpZiAoKGVyciA9IGV4dGVuZF9vcl9yZXN0YXJ0X3RyYW5zYWN0aW9uKGhhbmRsZSwgMiwgYmgpKSkKKwkJZ290byBleGl0X2JoOworCiAJbWFya19iaXRtYXBfZW5kKGlucHV0LT5ibG9ja3NfY291bnQsIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYiksCiAJCQliaC0+Yl9kYXRhKTsKIAlleHQ0X2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CkBAIC0yODksNyArMzEyLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0KIC8qCiAgKiBJdGVyYXRlIHRocm91Z2ggdGhlIGdyb3VwcyB3aGljaCBob2xkIEJBQ0tVUCBzdXBlcmJsb2NrL0dEVCBjb3BpZXMgaW4gYW4KICAqIGV4dDQgZmlsZXN5c3RlbS4gIFRoZSBjb3VudGVycyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgdG8gMSwgNSwgYW5kIDcgYmVmb3JlCkBAIC04NDIsNiArODY0LDcgQEAKIAlleHQ0X2lub2RlX3RhYmxlX3NldChzYiwgZ2RwLCBpbnB1dC0+aW5vZGVfdGFibGUpOyAvKiBMViBGSVhNRSAqLwogCWdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQgPSBjcHVfdG9fbGUxNihpbnB1dC0+ZnJlZV9ibG9ja3NfY291bnQpOwogCWdkcC0+YmdfZnJlZV9pbm9kZXNfY291bnQgPSBjcHVfdG9fbGUxNihFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpKTsKKwlnZHAtPmJnX2NoZWNrc3VtID0gZXh0NF9ncm91cF9kZXNjX2NzdW0oc2JpLCBpbnB1dC0+Z3JvdXAsIGdkcCk7CiAKIAkvKgogCSAqIE1ha2UgdGhlIG5ldyBibG9ja3MgYW5kIGlub2RlcyB2YWxpZCBuZXh0LiAgV2UgZG8gdGhpcyBiZWZvcmUKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCA0YzhkMzFjLi5iMTFlOWUyIDEwMDY0NAotLS0gYS9mcy9leHQ0L3N1cGVyLmMKKysrIGIvZnMvZXh0NC9zdXBlci5jCkBAIC0zNywxMiArMzcsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzE2Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJhY2wuaCIKICNpbmNsdWRlICJuYW1laS5oIgorI2luY2x1ZGUgImdyb3VwLmgiCiAKIHN0YXRpYyBpbnQgZXh0NF9sb2FkX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICosCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgam91cm5hbF9kZXZudW0pOwpAQCAtNjgsMzEgKzcwLDMxIEBACiBleHQ0X2ZzYmxrX3QgZXh0NF9ibG9ja19iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpiZykKIHsKLQlyZXR1cm4gbGUzMl90b19jcHUoYmctPmJnX2Jsb2NrX2JpdG1hcCkgfAorCXJldHVybiBsZTMyX3RvX2NwdShiZy0+YmdfYmxvY2tfYml0bWFwX2xvKSB8CiAJCShFWFQ0X0RFU0NfU0laRShzYikgPj0gRVhUNF9NSU5fREVTQ19TSVpFXzY0QklUID8KLQkJIChleHQ0X2ZzYmxrX3QpbGUzMl90b19jcHUoYmctPmJnX2Jsb2NrX2JpdG1hcF9oaSkgPDwgMzIgOiAwKTsKKwkJKGV4dDRfZnNibGtfdClsZTMyX3RvX2NwdShiZy0+YmdfYmxvY2tfYml0bWFwX2hpKSA8PCAzMiA6IDApOwogfQogCiBleHQ0X2ZzYmxrX3QgZXh0NF9pbm9kZV9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgICAgICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpiZykKIHsKLQlyZXR1cm4gbGUzMl90b19jcHUoYmctPmJnX2lub2RlX2JpdG1hcCkgfAorCXJldHVybiBsZTMyX3RvX2NwdShiZy0+YmdfaW5vZGVfYml0bWFwX2xvKSB8CiAJCShFWFQ0X0RFU0NfU0laRShzYikgPj0gRVhUNF9NSU5fREVTQ19TSVpFXzY0QklUID8KLQkJIChleHQ0X2ZzYmxrX3QpbGUzMl90b19jcHUoYmctPmJnX2lub2RlX2JpdG1hcF9oaSkgPDwgMzIgOiAwKTsKKwkJKGV4dDRfZnNibGtfdClsZTMyX3RvX2NwdShiZy0+YmdfaW5vZGVfYml0bWFwX2hpKSA8PCAzMiA6IDApOwogfQogCiBleHQ0X2ZzYmxrX3QgZXh0NF9pbm9kZV90YWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqYmcpCiB7Ci0JcmV0dXJuIGxlMzJfdG9fY3B1KGJnLT5iZ19pbm9kZV90YWJsZSkgfAorCXJldHVybiBsZTMyX3RvX2NwdShiZy0+YmdfaW5vZGVfdGFibGVfbG8pIHwKIAkJKEVYVDRfREVTQ19TSVpFKHNiKSA+PSBFWFQ0X01JTl9ERVNDX1NJWkVfNjRCSVQgPwotCQkgKGV4dDRfZnNibGtfdClsZTMyX3RvX2NwdShiZy0+YmdfaW5vZGVfdGFibGVfaGkpIDw8IDMyIDogMCk7CisJCShleHQ0X2ZzYmxrX3QpbGUzMl90b19jcHUoYmctPmJnX2lub2RlX3RhYmxlX2hpKSA8PCAzMiA6IDApOwogfQogCiB2b2lkIGV4dDRfYmxvY2tfYml0bWFwX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgc3RydWN0IGV4dDRfZ3JvdXBfZGVzYyAqYmcsIGV4dDRfZnNibGtfdCBibGspCiB7Ci0JYmctPmJnX2Jsb2NrX2JpdG1hcCA9IGNwdV90b19sZTMyKCh1MzIpYmxrKTsKKwliZy0+YmdfYmxvY2tfYml0bWFwX2xvID0gY3B1X3RvX2xlMzIoKHUzMilibGspOwogCWlmIChFWFQ0X0RFU0NfU0laRShzYikgPj0gRVhUNF9NSU5fREVTQ19TSVpFXzY0QklUKQogCQliZy0+YmdfYmxvY2tfYml0bWFwX2hpID0gY3B1X3RvX2xlMzIoYmxrID4+IDMyKTsKIH0KQEAgLTEwMCw3ICsxMDIsNyBAQAogdm9pZCBleHQ0X2lub2RlX2JpdG1hcF9zZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCSAgIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKmJnLCBleHQ0X2ZzYmxrX3QgYmxrKQogewotCWJnLT5iZ19pbm9kZV9iaXRtYXAgID0gY3B1X3RvX2xlMzIoKHUzMilibGspOworCWJnLT5iZ19pbm9kZV9iaXRtYXBfbG8gID0gY3B1X3RvX2xlMzIoKHUzMilibGspOwogCWlmIChFWFQ0X0RFU0NfU0laRShzYikgPj0gRVhUNF9NSU5fREVTQ19TSVpFXzY0QklUKQogCQliZy0+YmdfaW5vZGVfYml0bWFwX2hpID0gY3B1X3RvX2xlMzIoYmxrID4+IDMyKTsKIH0KQEAgLTEwOCw3ICsxMTAsNyBAQAogdm9pZCBleHQ0X2lub2RlX3RhYmxlX3NldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpiZywgZXh0NF9mc2Jsa190IGJsaykKIHsKLQliZy0+YmdfaW5vZGVfdGFibGUgPSBjcHVfdG9fbGUzMigodTMyKWJsayk7CisJYmctPmJnX2lub2RlX3RhYmxlX2xvID0gY3B1X3RvX2xlMzIoKHUzMilibGspOwogCWlmIChFWFQ0X0RFU0NfU0laRShzYikgPj0gRVhUNF9NSU5fREVTQ19TSVpFXzY0QklUKQogCQliZy0+YmdfaW5vZGVfdGFibGVfaGkgPSBjcHVfdG9fbGUzMihibGsgPj4gMzIpOwogfQpAQCAtMTAzNyw3ICsxMDM5LDcgQEAKIAkJCWlmIChvcHRpb24gPCAwKQogCQkJCXJldHVybiAwOwogCQkJaWYgKG9wdGlvbiA9PSAwKQotCQkJCW9wdGlvbiA9IEpCRF9ERUZBVUxUX01BWF9DT01NSVRfQUdFOworCQkJCW9wdGlvbiA9IEpCRDJfREVGQVVMVF9NQVhfQ09NTUlUX0FHRTsKIAkJCXNiaS0+c19jb21taXRfaW50ZXJ2YWwgPSBIWiAqIG9wdGlvbjsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9kYXRhX2pvdXJuYWw6CkBAIC0xMzA4LDYgKzEzMTAsNDMgQEAKIAlyZXR1cm4gcmVzOwogfQogCitfX2xlMTYgZXh0NF9ncm91cF9kZXNjX2NzdW0oc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBfX3UzMiBibG9ja19ncm91cCwKKwkJCSAgICBzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHApCit7CisJX191MTYgY3JjID0gMDsKKworCWlmIChzYmktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICBjcHVfdG9fbGUzMihFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0dEVF9DU1VNKSkgeworCQlpbnQgb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGV4dDRfZ3JvdXBfZGVzYywgYmdfY2hlY2tzdW0pOworCQlfX2xlMzIgbGVfZ3JvdXAgPSBjcHVfdG9fbGUzMihibG9ja19ncm91cCk7CisKKwkJY3JjID0gY3JjMTYofjAsIHNiaS0+c19lcy0+c191dWlkLCBzaXplb2Yoc2JpLT5zX2VzLT5zX3V1aWQpKTsKKwkJY3JjID0gY3JjMTYoY3JjLCAoX191OCAqKSZsZV9ncm91cCwgc2l6ZW9mKGxlX2dyb3VwKSk7CisJCWNyYyA9IGNyYzE2KGNyYywgKF9fdTggKilnZHAsIG9mZnNldCk7CisJCW9mZnNldCArPSBzaXplb2YoZ2RwLT5iZ19jaGVja3N1bSk7IC8qIHNraXAgY2hlY2tzdW0gKi8KKwkJLyogZm9yIGNoZWNrc3VtIG9mIHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgZG8gdGhlIHJlc3QuLi4qLworCQlpZiAoKHNiaS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0ICYKKwkJICAgICBjcHVfdG9fbGUzMihFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpKSAmJgorCQkgICAgb2Zmc2V0IDwgbGUxNl90b19jcHUoc2JpLT5zX2VzLT5zX2Rlc2Nfc2l6ZSkpCisJCQljcmMgPSBjcmMxNihjcmMsIChfX3U4ICopZ2RwICsgb2Zmc2V0LAorCQkJCSAgICBsZTE2X3RvX2NwdShzYmktPnNfZXMtPnNfZGVzY19zaXplKSAtCisJCQkJCW9mZnNldCk7CisJfQorCisJcmV0dXJuIGNwdV90b19sZTE2KGNyYyk7Cit9CisKK2ludCBleHQ0X2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpLCBfX3UzMiBibG9ja19ncm91cCwKKwkJCQlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICpnZHApCit7CisJaWYgKChzYmktPnNfZXMtPnNfZmVhdHVyZV9yb19jb21wYXQgJgorCSAgICAgY3B1X3RvX2xlMzIoRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTSkpICYmCisJICAgIChnZHAtPmJnX2NoZWNrc3VtICE9IGV4dDRfZ3JvdXBfZGVzY19jc3VtKHNiaSwgYmxvY2tfZ3JvdXAsIGdkcCkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCiAvKiBDYWxsZWQgYXQgbW91bnQtdGltZSwgc3VwZXItYmxvY2sgaXMgbG9ja2VkICovCiBzdGF0aWMgaW50IGV4dDRfY2hlY2tfZGVzY3JpcHRvcnMgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKQogewpAQCAtMTMxOSwxMyArMTM1OCwxNyBAQAogCWV4dDRfZnNibGtfdCBpbm9kZV90YWJsZTsKIAlzdHJ1Y3QgZXh0NF9ncm91cF9kZXNjICogZ2RwID0gTlVMTDsKIAlpbnQgZGVzY19ibG9jayA9IDA7CisJaW50IGZsZXhiZ19mbGFnID0gMDsKIAlpbnQgaTsKIAorCWlmIChFWFQ0X0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CRykpCisJCWZsZXhiZ19mbGFnID0gMTsKKwogCWV4dDRfZGVidWcgKCJDaGVja2luZyBncm91cCBkZXNjcmlwdG9ycyIpOwogCiAJZm9yIChpID0gMDsgaSA8IHNiaS0+c19ncm91cHNfY291bnQ7IGkrKykKIAl7Ci0JCWlmIChpID09IHNiaS0+c19ncm91cHNfY291bnQgLSAxKQorCQlpZiAoaSA9PSBzYmktPnNfZ3JvdXBzX2NvdW50IC0gMSB8fCBmbGV4YmdfZmxhZykKIAkJCWxhc3RfYmxvY2sgPSBleHQ0X2Jsb2Nrc19jb3VudChzYmktPnNfZXMpIC0gMTsKIAkJZWxzZQogCQkJbGFzdF9ibG9jayA9IGZpcnN0X2Jsb2NrICsKQEAgLTEzNjIsNyArMTQwNSwxNiBAQAogCQkJCSAgICBpLCBpbm9kZV90YWJsZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlmaXJzdF9ibG9jayArPSBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpOworCQlpZiAoIWV4dDRfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShzYmksIGksIGdkcCkpIHsKKwkJCWV4dDRfZXJyb3Ioc2IsIF9fRlVOQ1RJT05fXywKKwkJCQkgICAiQ2hlY2tzdW0gZm9yIGdyb3VwICVkIGZhaWxlZCAoJXUhPSV1KVxuIiwgaSwKKwkJCQkgICBsZTE2X3RvX2NwdShleHQ0X2dyb3VwX2Rlc2NfY3N1bShzYmksIGksCisJCQkJCQkJCSAgICBnZHApKSwKKwkJCQkgICBsZTE2X3RvX2NwdShnZHAtPmJnX2NoZWNrc3VtKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAoIWZsZXhiZ19mbGFnKQorCQkJZmlyc3RfYmxvY2sgKz0gRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKTsKIAkJZ2RwID0gKHN0cnVjdCBleHQ0X2dyb3VwX2Rlc2MgKikKIAkJCSgoX191OCAqKWdkcCArIEVYVDRfREVTQ19TSVpFKHNiKSk7CiAJfQpAQCAtMTcyNiwxNCArMTc3OCw2IEBACiAJCWlmIChzYmktPnNfaW5vZGVfc2l6ZSA+IEVYVDRfR09PRF9PTERfSU5PREVfU0laRSkKIAkJCXNiLT5zX3RpbWVfZ3JhbiA9IDEgPDwgKEVYVDRfRVBPQ0hfQklUUyAtIDIpOwogCX0KLQlzYmktPnNfZnJhZ19zaXplID0gRVhUNF9NSU5fRlJBR19TSVpFIDw8Ci0JCQkJICAgbGUzMl90b19jcHUoZXMtPnNfbG9nX2ZyYWdfc2l6ZSk7Ci0JaWYgKGJsb2Nrc2l6ZSAhPSBzYmktPnNfZnJhZ19zaXplKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIkVYVDQtZnM6IGZyYWdzaXplICVsdSAhPSBibG9ja3NpemUgJXUgKHVuc3VwcG9ydGVkKVxuIiwKLQkJICAgICAgIHNiaS0+c19mcmFnX3NpemUsIGJsb2Nrc2l6ZSk7Ci0JCWdvdG8gZmFpbGVkX21vdW50OwotCX0KIAlzYmktPnNfZGVzY19zaXplID0gbGUxNl90b19jcHUoZXMtPnNfZGVzY19zaXplKTsKIAlpZiAoRVhUNF9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgRVhUNF9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkgewogCQlpZiAoc2JpLT5zX2Rlc2Nfc2l6ZSA8IEVYVDRfTUlOX0RFU0NfU0laRV82NEJJVCB8fApAQCAtMTc0Nyw3ICsxNzkxLDYgQEAKIAl9IGVsc2UKIAkJc2JpLT5zX2Rlc2Nfc2l6ZSA9IEVYVDRfTUlOX0RFU0NfU0laRTsKIAlzYmktPnNfYmxvY2tzX3Blcl9ncm91cCA9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19wZXJfZ3JvdXApOwotCXNiaS0+c19mcmFnc19wZXJfZ3JvdXAgPSBsZTMyX3RvX2NwdShlcy0+c19mcmFnc19wZXJfZ3JvdXApOwogCXNiaS0+c19pbm9kZXNfcGVyX2dyb3VwID0gbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX3Blcl9ncm91cCk7CiAJaWYgKEVYVDRfSU5PREVfU0laRShzYikgPT0gMCkKIAkJZ290byBjYW50ZmluZF9leHQ0OwpAQCAtMTc3MSwxMiArMTgxNCw2IEBACiAJCQlzYmktPnNfYmxvY2tzX3Blcl9ncm91cCk7CiAJCWdvdG8gZmFpbGVkX21vdW50OwogCX0KLQlpZiAoc2JpLT5zX2ZyYWdzX3Blcl9ncm91cCA+IGJsb2Nrc2l6ZSAqIDgpIHsKLQkJcHJpbnRrIChLRVJOX0VSUgotCQkJIkVYVDQtZnM6ICNmcmFnbWVudHMgcGVyIGdyb3VwIHRvbyBiaWc6ICVsdVxuIiwKLQkJCXNiaS0+c19mcmFnc19wZXJfZ3JvdXApOwotCQlnb3RvIGZhaWxlZF9tb3VudDsKLQl9CiAJaWYgKHNiaS0+c19pbm9kZXNfcGVyX2dyb3VwID4gYmxvY2tzaXplICogOCkgewogCQlwcmludGsgKEtFUk5fRVJSCiAJCQkiRVhUNC1mczogI2lub2RlcyBwZXIgZ3JvdXAgdG9vIGJpZzogJWx1XG4iLApAQCAtMjYzMCw3ICsyNjY3LDcgQEAKIAogCWlmICh0ZXN0X29wdChzYiwgTUlOSVhfREYpKSB7CiAJCXNiaS0+c19vdmVyaGVhZF9sYXN0ID0gMDsKLQl9IGVsc2UgaWYgKHNiaS0+c19ibG9ja3NfbGFzdCAhPSBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKSB7CisJfSBlbHNlIGlmIChzYmktPnNfYmxvY2tzX2xhc3QgIT0gZXh0NF9ibG9ja3NfY291bnQoZXMpKSB7CiAJCXVuc2lnbmVkIGxvbmcgbmdyb3VwcyA9IHNiaS0+c19ncm91cHNfY291bnQsIGk7CiAJCWV4dDRfZnNibGtfdCBvdmVyaGVhZCA9IDA7CiAJCXNtcF9ybWIoKTsKQEAgLTI2NjUsMTQgKzI3MDIsMTQgQEAKIAkJb3ZlcmhlYWQgKz0gbmdyb3VwcyAqICgyICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXApOwogCQlzYmktPnNfb3ZlcmhlYWRfbGFzdCA9IG92ZXJoZWFkOwogCQlzbXBfd21iKCk7Ci0JCXNiaS0+c19ibG9ja3NfbGFzdCA9IGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCk7CisJCXNiaS0+c19ibG9ja3NfbGFzdCA9IGV4dDRfYmxvY2tzX2NvdW50KGVzKTsKIAl9CiAKIAlidWYtPmZfdHlwZSA9IEVYVDRfU1VQRVJfTUFHSUM7CiAJYnVmLT5mX2JzaXplID0gc2ItPnNfYmxvY2tzaXplOwogCWJ1Zi0+Zl9ibG9ja3MgPSBleHQ0X2Jsb2Nrc19jb3VudChlcykgLSBzYmktPnNfb3ZlcmhlYWRfbGFzdDsKIAlidWYtPmZfYmZyZWUgPSBwZXJjcHVfY291bnRlcl9zdW1fcG9zaXRpdmUoJnNiaS0+c19mcmVlYmxvY2tzX2NvdW50ZXIpOwotCWVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIoYnVmLT5mX2JmcmVlKTsKKwlleHQ0X2ZyZWVfYmxvY2tzX2NvdW50X3NldChlcywgYnVmLT5mX2JmcmVlKTsKIAlidWYtPmZfYmF2YWlsID0gYnVmLT5mX2JmcmVlIC0gZXh0NF9yX2Jsb2Nrc19jb3VudChlcyk7CiAJaWYgKGJ1Zi0+Zl9iZnJlZSA8IGV4dDRfcl9ibG9ja3NfY291bnQoZXMpKQogCQlidWYtPmZfYmF2YWlsID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCBiMTBkNjhmLi44NjM4NzMwIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKKysrIGIvZnMvZXh0NC94YXR0ci5jCkBAIC03NTAsMTIgKzc1MCwxMSBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogQWxsb2NhdGUgYSBidWZmZXIgd2hlcmUgd2UgY29uc3RydWN0IHRoZSBuZXcgYmxvY2suICovCi0JCXMtPmJhc2UgPSBrbWFsbG9jKHNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXMtPmJhc2UgPSBremFsbG9jKHNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCS8qIGFzc2VydChoZWFkZXIgPT0gcy0+YmFzZSkgKi8KIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlpZiAocy0+YmFzZSA9PSBOVUxMKQogCQkJZ290byBjbGVhbnVwOwotCQltZW1zZXQocy0+YmFzZSwgMCwgc2ItPnNfYmxvY2tzaXplKTsKIAkJaGVhZGVyKHMtPmJhc2UpLT5oX21hZ2ljID0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQyk7CiAJCWhlYWRlcihzLT5iYXNlKS0+aF9ibG9ja3MgPSBjcHVfdG9fbGUzMigxKTsKIAkJaGVhZGVyKHMtPmJhc2UpLT5oX3JlZmNvdW50ID0gY3B1X3RvX2xlMzIoMSk7CkBAIC0xMTIxLDcgKzExMjAsNyBAQAogCWludCB0b3RhbF9pbm8sIHRvdGFsX2JsazsKIAl2b2lkICpiYXNlLCAqc3RhcnQsICplbmQ7CiAJaW50IGV4dHJhX2lzaXplID0gMCwgZXJyb3IgPSAwLCB0cmllZF9taW5fZXh0cmFfaXNpemUgPSAwOwotCWludCBzX21pbl9leHRyYV9pc2l6ZSA9IEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzLT5zX21pbl9leHRyYV9pc2l6ZTsKKwlpbnQgc19taW5fZXh0cmFfaXNpemUgPSBsZTE2X3RvX2NwdShFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcy0+c19taW5fZXh0cmFfaXNpemUpOwogCiAJZG93bl93cml0ZSgmRVhUNF9JKGlub2RlKS0+eGF0dHJfc2VtKTsKIHJldHJ5OgpAQCAtMTI5Myw3ICsxMjkyLDcgQEAKIAogCQlpLm5hbWUgPSBiX2VudHJ5X25hbWU7CiAJCWkudmFsdWUgPSBidWZmZXI7Ci0JCWkudmFsdWVfbGVuID0gY3B1X3RvX2xlMzIoc2l6ZSk7CisJCWkudmFsdWVfbGVuID0gc2l6ZTsKIAkJZXJyb3IgPSBleHQ0X3hhdHRyX2Jsb2NrX2ZpbmQoaW5vZGUsICZpLCBicyk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gY2xlYW51cDsKZGlmZiAtLWdpdCBhL2ZzL2ZjbnRsLmMgYi9mcy9mY250bC5jCmluZGV4IGM5ZGI3M2YuLjg2ODUyNjMgMTAwNjQ0Ci0tLSBhL2ZzL2ZjbnRsLmMKKysrIGIvZnMvZmNudGwuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BvbGwuaD4KICNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgpAQCAtMjkyLDcgKzI5Myw3IEBACiAJCXdobyA9IC13aG87CiAJfQogCXJjdV9yZWFkX2xvY2soKTsKLQlwaWQgPSBmaW5kX3BpZCh3aG8pOworCXBpZCA9IGZpbmRfdnBpZCh3aG8pOwogCXJlc3VsdCA9IF9fZl9zZXRvd24oZmlscCwgcGlkLCB0eXBlLCBmb3JjZSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIHJlc3VsdDsKQEAgLTMwOCw3ICszMDksNyBAQAogewogCXBpZF90IHBpZDsKIAlyZWFkX2xvY2soJmZpbHAtPmZfb3duZXIubG9jayk7Ci0JcGlkID0gcGlkX25yKGZpbHAtPmZfb3duZXIucGlkKTsKKwlwaWQgPSBwaWRfbnJfbnMoZmlscC0+Zl9vd25lci5waWQsIGN1cnJlbnQtPm5zcHJveHktPnBpZF9ucyk7CiAJaWYgKGZpbHAtPmZfb3duZXIucGlkX3R5cGUgPT0gUElEVFlQRV9QR0lEKQogCQlwaWQgPSAtcGlkOwogCXJlYWRfdW5sb2NrKCZmaWxwLT5mX293bmVyLmxvY2spOwpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IDMxNzZmZWYuLjY2NGUzZjIgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTMyMywxMiArMzIzLDExIEBACiAKIGludCBmc19tYXlfcmVtb3VudF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGZpbGUgKmZpbGU7CiAKIAkvKiBDaGVjayB0aGF0IG5vIGZpbGVzIGFyZSBjdXJyZW50bHkgb3BlbmVkIGZvciB3cml0aW5nLiAqLwogCWZpbGVfbGlzdF9sb2NrKCk7Ci0JbGlzdF9mb3JfZWFjaChwLCAmc2ItPnNfZmlsZXMpIHsKLQkJc3RydWN0IGZpbGUgKmZpbGUgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBmaWxlLCBmX3UuZnVfbGlzdCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShmaWxlLCAmc2ItPnNfZmlsZXMsIGZfdS5mdV9saXN0KSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCiAJCS8qIEZpbGUgd2l0aCBwZW5kaW5nIGRlbGV0ZT8gKi8KZGlmZiAtLWdpdCBhL2ZzL2ZzLXdyaXRlYmFjay5jIGIvZnMvZnMtd3JpdGViYWNrLmMKaW5kZXggNjg2NzM0Zi4uMGZjYTgyMCAxMDA2NDQKLS0tIGEvZnMvZnMtd3JpdGViYWNrLmMKKysrIGIvZnMvZnMtd3JpdGViYWNrLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAkJaWYgKGlub2RlLT5pX2lubyB8fCBzdHJjbXAoaW5vZGUtPmlfc2ItPnNfaWQsICJiZGV2IikpCiAJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICAgICAgICIlcyglZCk6IGRpcnRpZWQgaW5vZGUgJWx1ICglcykgb24gJXNcbiIsCi0JCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBpbm9kZS0+aV9pbm8sCisJCQkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIGlub2RlLT5pX2lubywKIAkJCSAgICAgICBuYW1lLCBpbm9kZS0+aV9zYi0+c19pZCk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCBkMWFjYWI5Li4zNzYzNzU3IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTYzLDEzICs2MywyMSBAQAogICogU2V0IGRlbnRyeSBhbmQgcG9zc2libHkgYXR0cmlidXRlIHRpbWVvdXRzIGZyb20gdGhlIGxvb2t1cC9tayoKICAqIHJlcGxpZXMKICAqLwotc3RhdGljIHZvaWQgZnVzZV9jaGFuZ2VfdGltZW91dChzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGZ1c2VfZW50cnlfb3V0ICpvKQorc3RhdGljIHZvaWQgZnVzZV9jaGFuZ2VfZW50cnlfdGltZW91dChzdHJ1Y3QgZGVudHJ5ICplbnRyeSwKKwkJCQkgICAgICBzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQgKm8pCiB7CiAJZnVzZV9kZW50cnlfc2V0dGltZShlbnRyeSwKIAkJdGltZV90b19qaWZmaWVzKG8tPmVudHJ5X3ZhbGlkLCBvLT5lbnRyeV92YWxpZF9uc2VjKSk7Ci0JaWYgKGVudHJ5LT5kX2lub2RlKQotCQlnZXRfZnVzZV9pbm9kZShlbnRyeS0+ZF9pbm9kZSktPmlfdGltZSA9Ci0JCQl0aW1lX3RvX2ppZmZpZXMoby0+YXR0cl92YWxpZCwgby0+YXR0cl92YWxpZF9uc2VjKTsKK30KKworc3RhdGljIHU2NCBhdHRyX3RpbWVvdXQoc3RydWN0IGZ1c2VfYXR0cl9vdXQgKm8pCit7CisJcmV0dXJuIHRpbWVfdG9famlmZmllcyhvLT5hdHRyX3ZhbGlkLCBvLT5hdHRyX3ZhbGlkX25zZWMpOworfQorCitzdGF0aWMgdTY0IGVudHJ5X2F0dHJfdGltZW91dChzdHJ1Y3QgZnVzZV9lbnRyeV9vdXQgKm8pCit7CisJcmV0dXJuIHRpbWVfdG9famlmZmllcyhvLT5hdHRyX3ZhbGlkLCBvLT5hdHRyX3ZhbGlkX25zZWMpOwogfQogCiAvKgpAQCAtMTA4LDEzICsxMTYsMTkgQEAKIAkJCSAgICAgc3RydWN0IGRlbnRyeSAqZW50cnksCiAJCQkgICAgIHN0cnVjdCBmdXNlX2VudHJ5X291dCAqb3V0YXJnKQogeworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihkaXIpOworCisJbWVtc2V0KG91dGFyZywgMCwgc2l6ZW9mKHN0cnVjdCBmdXNlX2VudHJ5X291dCkpOwogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX0xPT0tVUDsKIAlyZXEtPmluLmgubm9kZWlkID0gZ2V0X25vZGVfaWQoZGlyKTsKIAlyZXEtPmluLm51bWFyZ3MgPSAxOwogCXJlcS0+aW4uYXJnc1swXS5zaXplID0gZW50cnktPmRfbmFtZS5sZW4gKyAxOwogCXJlcS0+aW4uYXJnc1swXS52YWx1ZSA9IGVudHJ5LT5kX25hbWUubmFtZTsKIAlyZXEtPm91dC5udW1hcmdzID0gMTsKLQlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yoc3RydWN0IGZ1c2VfZW50cnlfb3V0KTsKKwlpZiAoZmMtPm1pbm9yIDwgOSkKKwkJcmVxLT5vdXQuYXJnc1swXS5zaXplID0gRlVTRV9DT01QQVRfRU5UUllfT1VUX1NJWkU7CisJZWxzZQorCQlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yoc3RydWN0IGZ1c2VfZW50cnlfb3V0KTsKIAlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gb3V0YXJnOwogfQogCkBAIC0xNDAsNiArMTU0LDcgQEAKIAkJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJCXN0cnVjdCBmdXNlX3JlcSAqZm9yZ2V0X3JlcTsKIAkJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCQl1NjQgYXR0cl92ZXJzaW9uOwogCiAJCS8qIEZvciBuZWdhdGl2ZSBkZW50cmllcywgYWx3YXlzIGRvIGEgZnJlc2ggbG9va3VwICovCiAJCWlmICghaW5vZGUpCkBAIC0xNTYsNiArMTcxLDEwIEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCisJCXNwaW5fbG9jaygmZmMtPmxvY2spOworCQlhdHRyX3ZlcnNpb24gPSBmYy0+YXR0cl92ZXJzaW9uOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOworCiAJCXBhcmVudCA9IGRnZXRfcGFyZW50KGVudHJ5KTsKIAkJZnVzZV9sb29rdXBfaW5pdChyZXEsIHBhcmVudC0+ZF9pbm9kZSwgZW50cnksICZvdXRhcmcpOwogCQlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CkBAIC0xODAsOCArMTk5LDEwIEBACiAJCWlmIChlcnIgfHwgKG91dGFyZy5hdHRyLm1vZGUgXiBpbm9kZS0+aV9tb2RlKSAmIFNfSUZNVCkKIAkJCXJldHVybiAwOwogCi0JCWZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoaW5vZGUsICZvdXRhcmcuYXR0cik7Ci0JCWZ1c2VfY2hhbmdlX3RpbWVvdXQoZW50cnksICZvdXRhcmcpOworCQlmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKGlub2RlLCAmb3V0YXJnLmF0dHIsCisJCQkJICAgICAgIGVudHJ5X2F0dHJfdGltZW91dCgmb3V0YXJnKSwKKwkJCQkgICAgICAgYXR0cl92ZXJzaW9uKTsKKwkJZnVzZV9jaGFuZ2VfZW50cnlfdGltZW91dChlbnRyeSwgJm91dGFyZyk7CiAJfQogCXJldHVybiAxOwogfQpAQCAtMjI4LDYgKzI0OSw3IEBACiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGRpcik7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJc3RydWN0IGZ1c2VfcmVxICpmb3JnZXRfcmVxOworCXU2NCBhdHRyX3ZlcnNpb247CiAKIAlpZiAoZW50cnktPmRfbmFtZS5sZW4gPiBGVVNFX05BTUVfTUFYKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKQEAgLTI0Miw2ICsyNjQsMTAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihmb3JnZXRfcmVxKSk7CiAJfQogCisJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJYXR0cl92ZXJzaW9uID0gZmMtPmF0dHJfdmVyc2lvbjsKKwlzcGluX3VubG9jaygmZmMtPmxvY2spOworCiAJZnVzZV9sb29rdXBfaW5pdChyZXEsIGRpciwgZW50cnksICZvdXRhcmcpOwogCXJlcXVlc3Rfc2VuZChmYywgcmVxKTsKIAllcnIgPSByZXEtPm91dC5oLmVycm9yOwpAQCAtMjUzLDcgKzI3OSw4IEBACiAJCWVyciA9IC1FSU87CiAJaWYgKCFlcnIgJiYgb3V0YXJnLm5vZGVpZCkgewogCQlpbm9kZSA9IGZ1c2VfaWdldChkaXItPmlfc2IsIG91dGFyZy5ub2RlaWQsIG91dGFyZy5nZW5lcmF0aW9uLAotCQkJCSAgJm91dGFyZy5hdHRyKTsKKwkJCQkgICZvdXRhcmcuYXR0ciwgZW50cnlfYXR0cl90aW1lb3V0KCZvdXRhcmcpLAorCQkJCSAgYXR0cl92ZXJzaW9uKTsKIAkJaWYgKCFpbm9kZSkgewogCQkJZnVzZV9zZW5kX2ZvcmdldChmYywgZm9yZ2V0X3JlcSwgb3V0YXJnLm5vZGVpZCwgMSk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKQEAgLTI3Niw3ICszMDMsNyBAQAogCiAJZW50cnktPmRfb3AgPSAmZnVzZV9kZW50cnlfb3BlcmF0aW9uczsKIAlpZiAoIWVycikKLQkJZnVzZV9jaGFuZ2VfdGltZW91dChlbnRyeSwgJm91dGFyZyk7CisJCWZ1c2VfY2hhbmdlX2VudHJ5X3RpbWVvdXQoZW50cnksICZvdXRhcmcpOwogCWVsc2UKIAkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKGVudHJ5KTsKIAlyZXR1cm4gTlVMTDsKQEAgLTMzNSw2ICszNjIsNyBAQAogCiAJZmxhZ3MgJj0gfk9fTk9DVFRZOwogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOworCW1lbXNldCgmb3V0ZW50cnksIDAsIHNpemVvZihvdXRlbnRyeSkpOwogCWluYXJnLmZsYWdzID0gZmxhZ3M7CiAJaW5hcmcubW9kZSA9IG1vZGU7CiAJcmVxLT5pbi5oLm9wY29kZSA9IEZVU0VfQ1JFQVRFOwpAQCAtMzQ1LDcgKzM3MywxMCBAQAogCXJlcS0+aW4uYXJnc1sxXS5zaXplID0gZW50cnktPmRfbmFtZS5sZW4gKyAxOwogCXJlcS0+aW4uYXJnc1sxXS52YWx1ZSA9IGVudHJ5LT5kX25hbWUubmFtZTsKIAlyZXEtPm91dC5udW1hcmdzID0gMjsKLQlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yob3V0ZW50cnkpOworCWlmIChmYy0+bWlub3IgPCA5KQorCQlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9FTlRSWV9PVVRfU0laRTsKKwllbHNlCisJCXJlcS0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRlbnRyeSk7CiAJcmVxLT5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRlbnRyeTsKIAlyZXEtPm91dC5hcmdzWzFdLnNpemUgPSBzaXplb2Yob3V0b3Blbik7CiAJcmVxLT5vdXQuYXJnc1sxXS52YWx1ZSA9ICZvdXRvcGVuOwpAQCAtMzYzLDcgKzM5NCw3IEBACiAKIAlmdXNlX3B1dF9yZXF1ZXN0KGZjLCByZXEpOwogCWlub2RlID0gZnVzZV9pZ2V0KGRpci0+aV9zYiwgb3V0ZW50cnkubm9kZWlkLCBvdXRlbnRyeS5nZW5lcmF0aW9uLAotCQkJICAmb3V0ZW50cnkuYXR0cik7CisJCQkgICZvdXRlbnRyeS5hdHRyLCBlbnRyeV9hdHRyX3RpbWVvdXQoJm91dGVudHJ5KSwgMCk7CiAJaWYgKCFpbm9kZSkgewogCQlmbGFncyAmPSB+KE9fQ1JFQVQgfCBPX0VYQ0wgfCBPX1RSVU5DKTsKIAkJZmYtPmZoID0gb3V0b3Blbi5maDsKQEAgLTM3Myw3ICs0MDQsNyBAQAogCX0KIAlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBmb3JnZXRfcmVxKTsKIAlkX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7Ci0JZnVzZV9jaGFuZ2VfdGltZW91dChlbnRyeSwgJm91dGVudHJ5KTsKKwlmdXNlX2NoYW5nZV9lbnRyeV90aW1lb3V0KGVudHJ5LCAmb3V0ZW50cnkpOwogCWZpbGUgPSBsb29rdXBfaW5zdGFudGlhdGVfZmlscChuZCwgZW50cnksIGdlbmVyaWNfZmlsZV9vcGVuKTsKIAlpZiAoSVNfRVJSKGZpbGUpKSB7CiAJCWZmLT5maCA9IG91dG9wZW4uZmg7CkBAIC00MTAsOSArNDQxLDEzIEBACiAJCXJldHVybiBQVFJfRVJSKGZvcmdldF9yZXEpOwogCX0KIAorCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRpcik7CiAJcmVxLT5vdXQubnVtYXJncyA9IDE7Ci0JcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CisJaWYgKGZjLT5taW5vciA8IDkpCisJCXJlcS0+b3V0LmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX0VOVFJZX09VVF9TSVpFOworCWVsc2UKKwkJcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CiAJcmVxLT5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRhcmc7CiAJcmVxdWVzdF9zZW5kKGZjLCByZXEpOwogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CkBAIC00MjgsNyArNDYzLDcgQEAKIAkJZ290byBvdXRfcHV0X2ZvcmdldF9yZXE7CiAKIAlpbm9kZSA9IGZ1c2VfaWdldChkaXItPmlfc2IsIG91dGFyZy5ub2RlaWQsIG91dGFyZy5nZW5lcmF0aW9uLAotCQkJICAmb3V0YXJnLmF0dHIpOworCQkJICAmb3V0YXJnLmF0dHIsIGVudHJ5X2F0dHJfdGltZW91dCgmb3V0YXJnKSwgMCk7CiAJaWYgKCFpbm9kZSkgewogCQlmdXNlX3NlbmRfZm9yZ2V0KGZjLCBmb3JnZXRfcmVxLCBvdXRhcmcubm9kZWlkLCAxKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00NTEsNyArNDg2LDcgQEAKIAl9IGVsc2UKIAkJZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpOwogCi0JZnVzZV9jaGFuZ2VfdGltZW91dChlbnRyeSwgJm91dGFyZyk7CisJZnVzZV9jaGFuZ2VfZW50cnlfdGltZW91dChlbnRyeSwgJm91dGFyZyk7CiAJZnVzZV9pbnZhbGlkYXRlX2F0dHIoZGlyKTsKIAlyZXR1cm4gMDsKIApAQCAtNjYzLDUyICs2OTgsODQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGZ1c2VfZG9fZ2V0YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgZnVzZV9maWxsYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZnVzZV9hdHRyICphdHRyLAorCQkJICBzdHJ1Y3Qga3N0YXQgKnN0YXQpCit7CisJc3RhdC0+ZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OworCXN0YXQtPmlubyA9IGF0dHItPmlubzsKKwlzdGF0LT5tb2RlID0gKGlub2RlLT5pX21vZGUgJiBTX0lGTVQpIHwgKGF0dHItPm1vZGUgJiAwNzc3Nyk7CisJc3RhdC0+bmxpbmsgPSBhdHRyLT5ubGluazsKKwlzdGF0LT51aWQgPSBhdHRyLT51aWQ7CisJc3RhdC0+Z2lkID0gYXR0ci0+Z2lkOworCXN0YXQtPnJkZXYgPSBpbm9kZS0+aV9yZGV2OworCXN0YXQtPmF0aW1lLnR2X3NlYyA9IGF0dHItPmF0aW1lOworCXN0YXQtPmF0aW1lLnR2X25zZWMgPSBhdHRyLT5hdGltZW5zZWM7CisJc3RhdC0+bXRpbWUudHZfc2VjID0gYXR0ci0+bXRpbWU7CisJc3RhdC0+bXRpbWUudHZfbnNlYyA9IGF0dHItPm10aW1lbnNlYzsKKwlzdGF0LT5jdGltZS50dl9zZWMgPSBhdHRyLT5jdGltZTsKKwlzdGF0LT5jdGltZS50dl9uc2VjID0gYXR0ci0+Y3RpbWVuc2VjOworCXN0YXQtPnNpemUgPSBhdHRyLT5zaXplOworCXN0YXQtPmJsb2NrcyA9IGF0dHItPmJsb2NrczsKKwlzdGF0LT5ibGtzaXplID0gKDEgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbnQgZnVzZV9kb19nZXRhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBrc3RhdCAqc3RhdCwKKwkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQogewogCWludCBlcnI7Ci0Jc3RydWN0IGZ1c2VfYXR0cl9vdXQgYXJnOworCXN0cnVjdCBmdXNlX2dldGF0dHJfaW4gaW5hcmc7CisJc3RydWN0IGZ1c2VfYXR0cl9vdXQgb3V0YXJnOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7Ci0Jc3RydWN0IGZ1c2VfcmVxICpyZXEgPSBmdXNlX2dldF9yZXEoZmMpOworCXN0cnVjdCBmdXNlX3JlcSAqcmVxOworCXU2NCBhdHRyX3ZlcnNpb247CisKKwlyZXEgPSBmdXNlX2dldF9yZXEoZmMpOwogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAorCXNwaW5fbG9jaygmZmMtPmxvY2spOworCWF0dHJfdmVyc2lvbiA9IGZjLT5hdHRyX3ZlcnNpb247CisJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKKworCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOworCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CisJLyogRGlyZWN0b3JpZXMgaGF2ZSBzZXBhcmF0ZSBmaWxlLWhhbmRsZSBzcGFjZSAqLworCWlmIChmaWxlICYmIFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJc3RydWN0IGZ1c2VfZmlsZSAqZmYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkJaW5hcmcuZ2V0YXR0cl9mbGFncyB8PSBGVVNFX0dFVEFUVFJfRkg7CisJCWluYXJnLmZoID0gZmYtPmZoOworCX0KIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9HRVRBVFRSOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CisJcmVxLT5pbi5udW1hcmdzID0gMTsKKwlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihpbmFyZyk7CisJcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gJmluYXJnOwogCXJlcS0+b3V0Lm51bWFyZ3MgPSAxOwotCXJlcS0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihhcmcpOwotCXJlcS0+b3V0LmFyZ3NbMF0udmFsdWUgPSAmYXJnOworCWlmIChmYy0+bWlub3IgPCA5KQorCQlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9BVFRSX09VVF9TSVpFOworCWVsc2UKKwkJcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CisJcmVxLT5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRhcmc7CiAJcmVxdWVzdF9zZW5kKGZjLCByZXEpOwogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoIWVycikgewotCQlpZiAoKGlub2RlLT5pX21vZGUgXiBhcmcuYXR0ci5tb2RlKSAmIFNfSUZNVCkgeworCQlpZiAoKGlub2RlLT5pX21vZGUgXiBvdXRhcmcuYXR0ci5tb2RlKSAmIFNfSUZNVCkgewogCQkJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCQkJZXJyID0gLUVJTzsKIAkJfSBlbHNlIHsKLQkJCXN0cnVjdCBmdXNlX2lub2RlICpmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKLQkJCWZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoaW5vZGUsICZhcmcuYXR0cik7Ci0JCQlmaS0+aV90aW1lID0gdGltZV90b19qaWZmaWVzKGFyZy5hdHRyX3ZhbGlkLAotCQkJCQkJICAgICBhcmcuYXR0cl92YWxpZF9uc2VjKTsKKwkJCWZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoaW5vZGUsICZvdXRhcmcuYXR0ciwKKwkJCQkJICAgICAgIGF0dHJfdGltZW91dCgmb3V0YXJnKSwKKwkJCQkJICAgICAgIGF0dHJfdmVyc2lvbik7CisJCQlpZiAoc3RhdCkKKwkJCQlmdXNlX2ZpbGxhdHRyKGlub2RlLCAmb3V0YXJnLmF0dHIsIHN0YXQpOwogCQl9CiAJfQogCXJldHVybiBlcnI7CiB9CiAKIC8qCi0gKiBDaGVjayBpZiBhdHRyaWJ1dGVzIGFyZSBzdGlsbCB2YWxpZCwgYW5kIGlmIG5vdCBzZW5kIGEgR0VUQVRUUgotICogcmVxdWVzdCB0byByZWZyZXNoIHRoZW0uCi0gKi8KLXN0YXRpYyBpbnQgZnVzZV9yZWZyZXNoX2F0dHJpYnV0ZXMoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlzdHJ1Y3QgZnVzZV9pbm9kZSAqZmkgPSBnZXRfZnVzZV9pbm9kZShpbm9kZSk7Ci0KLQlpZiAoZmktPmlfdGltZSA8IGdldF9qaWZmaWVzXzY0KCkpCi0JCXJldHVybiBmdXNlX2RvX2dldGF0dHIoaW5vZGUpOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBDYWxsaW5nIGludG8gYSB1c2VyLWNvbnRyb2xsZWQgZmlsZXN5c3RlbSBnaXZlcyB0aGUgZmlsZXN5c3RlbQogICogZGFlbW9uIHB0cmFjZS1saWtlIGNhcGFiaWxpdGllcyBvdmVyIHRoZSByZXF1ZXN0ZXIgcHJvY2Vzcy4gIFRoaXMKICAqIG1lYW5zLCB0aGF0IHRoZSBmaWxlc3lzdGVtIGRhZW1vbiBpcyBhYmxlIHRvIHJlY29yZCB0aGUgZXhhY3QKQEAgLTcyMSw3ICs3ODgsNyBAQAogICogZm9yIHdoaWNoIHRoZSBvd25lciBvZiB0aGUgbW91bnQgaGFzIHB0cmFjZSBwcml2aWxlZ2UuICBUaGlzCiAgKiBleGNsdWRlcyBwcm9jZXNzZXMgc3RhcnRlZCBieSBvdGhlciB1c2Vycywgc3VpZCBvciBzZ2lkIHByb2Nlc3Nlcy4KICAqLwotc3RhdGljIGludCBmdXNlX2FsbG93X3Rhc2soc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK2ludCBmdXNlX2FsbG93X3Rhc2soc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlpZiAoZmMtPmZsYWdzICYgRlVTRV9BTExPV19PVEhFUikKIAkJcmV0dXJuIDE7CkBAIC03OTUsMTEgKzg2MiwxNCBAQAogCSAqLwogCWlmICgoZmMtPmZsYWdzICYgRlVTRV9ERUZBVUxUX1BFUk1JU1NJT05TKSB8fAogCSAgICAoKG1hc2sgJiBNQVlfRVhFQykgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkpIHsKLQkJZXJyID0gZnVzZV9yZWZyZXNoX2F0dHJpYnV0ZXMoaW5vZGUpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKKwkJc3RydWN0IGZ1c2VfaW5vZGUgKmZpID0gZ2V0X2Z1c2VfaW5vZGUoaW5vZGUpOworCQlpZiAoZmktPmlfdGltZSA8IGdldF9qaWZmaWVzXzY0KCkpIHsKKwkJCWVyciA9IGZ1c2VfZG9fZ2V0YXR0cihpbm9kZSwgTlVMTCwgTlVMTCk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CiAKLQkJcmVmcmVzaGVkID0gdHJ1ZTsKKwkJCXJlZnJlc2hlZCA9IHRydWU7CisJCX0KIAl9CiAKIAlpZiAoZmMtPmZsYWdzICYgRlVTRV9ERUZBVUxUX1BFUk1JU1NJT05TKSB7CkBAIC04MDksNyArODc5LDcgQEAKIAkJICAgYXR0cmlidXRlcy4gIFRoaXMgaXMgYWxzbyBuZWVkZWQsIGJlY2F1c2UgdGhlIHJvb3QKIAkJICAgbm9kZSB3aWxsIGF0IGZpcnN0IGhhdmUgbm8gcGVybWlzc2lvbnMgKi8KIAkJaWYgKGVyciA9PSAtRUFDQ0VTICYmICFyZWZyZXNoZWQpIHsKLQkJIAllcnIgPSBmdXNlX2RvX2dldGF0dHIoaW5vZGUpOworCQkJZXJyID0gZnVzZV9kb19nZXRhdHRyKGlub2RlLCBOVUxMLCBOVUxMKTsKIAkJCWlmICghZXJyKQogCQkJCWVyciA9IGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgTlVMTCk7CiAJCX0KQEAgLTgyNSw3ICs4OTUsNyBAQAogCQkJaWYgKHJlZnJlc2hlZCkKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKIAotCQkJZXJyID0gZnVzZV9kb19nZXRhdHRyKGlub2RlKTsKKwkJCWVyciA9IGZ1c2VfZG9fZ2V0YXR0cihpbm9kZSwgTlVMTCwgTlVMTCk7CiAJCQlpZiAoIWVyciAmJiAhKGlub2RlLT5pX21vZGUgJiBTX0lYVUdPKSkKIAkJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJfQpAQCAtOTYyLDYgKzEwMzIsMjAgQEAKIAlyZXR1cm4gZmlsZSA/IGZ1c2VfZnN5bmNfY29tbW9uKGZpbGUsIGRlLCBkYXRhc3luYywgMSkgOiAwOwogfQogCitzdGF0aWMgYm9vbCB1cGRhdGVfbXRpbWUodW5zaWduZWQgaXZhbGlkKQoreworCS8qIEFsd2F5cyB1cGRhdGUgaWYgbXRpbWUgaXMgZXhwbGljaXRseSBzZXQgICovCisJaWYgKGl2YWxpZCAmIEFUVFJfTVRJTUVfU0VUKQorCQlyZXR1cm4gdHJ1ZTsKKworCS8qIElmIGl0J3MgYW4gb3BlbihPX1RSVU5DKSBvciBhbiBmdHJ1bmNhdGUoKSwgZG9uJ3QgdXBkYXRlICovCisJaWYgKChpdmFsaWQgJiBBVFRSX1NJWkUpICYmIChpdmFsaWQgJiAoQVRUUl9PUEVOIHwgQVRUUl9GSUxFKSkpCisJCXJldHVybiBmYWxzZTsKKworCS8qIEluIGFsbCBvdGhlciBjYXNlcyB1cGRhdGUgKi8KKwlyZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIHZvaWQgaWF0dHJfdG9fZmF0dHIoc3RydWN0IGlhdHRyICppYXR0ciwgc3RydWN0IGZ1c2Vfc2V0YXR0cl9pbiAqYXJnKQogewogCXVuc2lnbmVkIGl2YWxpZCA9IGlhdHRyLT5pYV92YWxpZDsKQEAgLTk3NCwxNiArMTA1OCwxOSBAQAogCQlhcmctPnZhbGlkIHw9IEZBVFRSX0dJRCwgICAgYXJnLT5naWQgPSBpYXR0ci0+aWFfZ2lkOwogCWlmIChpdmFsaWQgJiBBVFRSX1NJWkUpCiAJCWFyZy0+dmFsaWQgfD0gRkFUVFJfU0laRSwgICBhcmctPnNpemUgPSBpYXR0ci0+aWFfc2l6ZTsKLQkvKiBZb3UgY2FuIG9ubHkgX3NldF8gdGhlc2UgdG9nZXRoZXIgKHRoZXkgbWF5IGNoYW5nZSBieSB0aGVtc2VsdmVzKSAqLwotCWlmICgoaXZhbGlkICYgKEFUVFJfQVRJTUUgfCBBVFRSX01USU1FKSkgPT0gKEFUVFJfQVRJTUUgfCBBVFRSX01USU1FKSkgewotCQlhcmctPnZhbGlkIHw9IEZBVFRSX0FUSU1FIHwgRkFUVFJfTVRJTUU7CisJaWYgKGl2YWxpZCAmIEFUVFJfQVRJTUUpIHsKKwkJYXJnLT52YWxpZCB8PSBGQVRUUl9BVElNRTsKIAkJYXJnLT5hdGltZSA9IGlhdHRyLT5pYV9hdGltZS50dl9zZWM7Ci0JCWFyZy0+bXRpbWUgPSBpYXR0ci0+aWFfbXRpbWUudHZfc2VjOworCQlhcmctPmF0aW1lbnNlYyA9IGlhdHRyLT5pYV9hdGltZS50dl9uc2VjOworCQlpZiAoIShpdmFsaWQgJiBBVFRSX0FUSU1FX1NFVCkpCisJCQlhcmctPnZhbGlkIHw9IEZBVFRSX0FUSU1FX05PVzsKIAl9Ci0JaWYgKGl2YWxpZCAmIEFUVFJfRklMRSkgewotCQlzdHJ1Y3QgZnVzZV9maWxlICpmZiA9IGlhdHRyLT5pYV9maWxlLT5wcml2YXRlX2RhdGE7Ci0JCWFyZy0+dmFsaWQgfD0gRkFUVFJfRkg7Ci0JCWFyZy0+ZmggPSBmZi0+Zmg7CisJaWYgKChpdmFsaWQgJiBBVFRSX01USU1FKSAmJiB1cGRhdGVfbXRpbWUoaXZhbGlkKSkgeworCQlhcmctPnZhbGlkIHw9IEZBVFRSX01USU1FOworCQlhcmctPm10aW1lID0gaWF0dHItPmlhX210aW1lLnR2X3NlYzsKKwkJYXJnLT5tdGltZW5zZWMgPSBpYXR0ci0+aWFfbXRpbWUudHZfbnNlYzsKKwkJaWYgKCEoaXZhbGlkICYgQVRUUl9NVElNRV9TRVQpKQorCQkJYXJnLT52YWxpZCB8PSBGQVRUUl9NVElNRV9OT1c7CiAJfQogfQogCkBAIC05OTUsMjIgKzEwODIsMjggQEAKICAqIHZtdHJ1bmNhdGUoKSBkb2Vzbid0IGFsbG93IGZvciB0aGlzIGNhc2UsIHNvIGRvIHRoZSBybGltaXQgY2hlY2tpbmcKICAqIGFuZCB0aGUgYWN0dWFsIHRydW5jYXRpb24gYnkgaGFuZC4KICAqLwotc3RhdGljIGludCBmdXNlX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cikKK3N0YXRpYyBpbnQgZnVzZV9kb19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIsCisJCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQlzdHJ1Y3QgZnVzZV9pbm9kZSAqZmkgPSBnZXRfZnVzZV9pbm9kZShpbm9kZSk7CiAJc3RydWN0IGZ1c2VfcmVxICpyZXE7CiAJc3RydWN0IGZ1c2Vfc2V0YXR0cl9pbiBpbmFyZzsKIAlzdHJ1Y3QgZnVzZV9hdHRyX291dCBvdXRhcmc7CiAJaW50IGVycjsKIAorCWlmICghZnVzZV9hbGxvd190YXNrKGZjLCBjdXJyZW50KSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAlpZiAoZmMtPmZsYWdzICYgRlVTRV9ERUZBVUxUX1BFUk1JU1NJT05TKSB7CiAJCWVyciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX09QRU4pICYmIGZjLT5hdG9taWNfb190cnVuYykKKwkJcmV0dXJuIDA7CisKIAlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKIAkJdW5zaWduZWQgbG9uZyBsaW1pdDsKIAkJaWYgKElTX1NXQVBGSUxFKGlub2RlKSkKQEAgLTEwMjcsMTQgKzExMjAsMjggQEAKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOworCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CiAJaWF0dHJfdG9fZmF0dHIoYXR0ciwgJmluYXJnKTsKKwlpZiAoZmlsZSkgeworCQlzdHJ1Y3QgZnVzZV9maWxlICpmZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJaW5hcmcudmFsaWQgfD0gRkFUVFJfRkg7CisJCWluYXJnLmZoID0gZmYtPmZoOworCX0KKwlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKKwkJLyogRm9yIG1hbmRhdG9yeSBsb2NraW5nIGluIHRydW5jYXRlICovCisJCWluYXJnLnZhbGlkIHw9IEZBVFRSX0xPQ0tPV05FUjsKKwkJaW5hcmcubG9ja19vd25lciA9IGZ1c2VfbG9ja19vd25lcl9pZChmYywgY3VycmVudC0+ZmlsZXMpOworCX0KIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9TRVRBVFRSOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CiAJcmVxLT5pbi5udW1hcmdzID0gMTsKIAlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihpbmFyZyk7CiAJcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gJmluYXJnOwogCXJlcS0+b3V0Lm51bWFyZ3MgPSAxOwotCXJlcS0+b3V0LmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihvdXRhcmcpOworCWlmIChmYy0+bWlub3IgPCA5KQorCQlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBGVVNFX0NPTVBBVF9BVFRSX09VVF9TSVpFOworCWVsc2UKKwkJcmVxLT5vdXQuYXJnc1swXS5zaXplID0gc2l6ZW9mKG91dGFyZyk7CiAJcmVxLT5vdXQuYXJnc1swXS52YWx1ZSA9ICZvdXRhcmc7CiAJcmVxdWVzdF9zZW5kKGZjLCByZXEpOwogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CkBAIC0xMDUwLDExICsxMTU3LDE4IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoaW5vZGUsICZvdXRhcmcuYXR0cik7Ci0JZmktPmlfdGltZSA9IHRpbWVfdG9famlmZmllcyhvdXRhcmcuYXR0cl92YWxpZCwgb3V0YXJnLmF0dHJfdmFsaWRfbnNlYyk7CisJZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhpbm9kZSwgJm91dGFyZy5hdHRyLCBhdHRyX3RpbWVvdXQoJm91dGFyZyksIDApOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZ1c2Vfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICplbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfRklMRSkKKwkJcmV0dXJuIGZ1c2VfZG9fc2V0YXR0cihlbnRyeSwgYXR0ciwgYXR0ci0+aWFfZmlsZSk7CisJZWxzZQorCQlyZXR1cm4gZnVzZV9kb19zZXRhdHRyKGVudHJ5LCBhdHRyLCBOVUxMKTsKK30KKwogc3RhdGljIGludCBmdXNlX2dldGF0dHIoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmVudHJ5LAogCQkJc3RydWN0IGtzdGF0ICpzdGF0KQogewpAQCAtMTA2Niw4ICsxMTgwLDEwIEBACiAJaWYgKCFmdXNlX2FsbG93X3Rhc2soZmMsIGN1cnJlbnQpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAotCWVyciA9IGZ1c2VfcmVmcmVzaF9hdHRyaWJ1dGVzKGlub2RlKTsKLQlpZiAoIWVycikgeworCWlmIChmaS0+aV90aW1lIDwgZ2V0X2ppZmZpZXNfNjQoKSkKKwkJZXJyID0gZnVzZV9kb19nZXRhdHRyKGlub2RlLCBzdGF0LCBOVUxMKTsKKwllbHNlIHsKKwkJZXJyID0gMDsKIAkJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CiAJCXN0YXQtPm1vZGUgPSBmaS0+b3JpZ19pX21vZGU7CiAJfQpAQCAtMTE3Miw2ICsxMjg4LDkgQEAKIAlzdHJ1Y3QgZnVzZV9nZXR4YXR0cl9vdXQgb3V0YXJnOwogCXNzaXplX3QgcmV0OwogCisJaWYgKCFmdXNlX2FsbG93X3Rhc2soZmMsIGN1cnJlbnQpKQorCQlyZXR1cm4gLUVBQ0NFUzsKKwogCWlmIChmYy0+bm9fbGlzdHhhdHRyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZmlsZS5jIGIvZnMvZnVzZS9maWxlLmMKaW5kZXggYzRiOThjMC4uMGZjZGJhOSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9maWxlLmMKKysrIGIvZnMvZnVzZS9maWxlLmMKQEAgLTI4LDcgKzI4LDkgQEAKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAogCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihpbmFyZykpOwotCWluYXJnLmZsYWdzID0gZmlsZS0+Zl9mbGFncyAmIH4oT19DUkVBVCB8IE9fRVhDTCB8IE9fTk9DVFRZIHwgT19UUlVOQyk7CisJaW5hcmcuZmxhZ3MgPSBmaWxlLT5mX2ZsYWdzICYgfihPX0NSRUFUIHwgT19FWENMIHwgT19OT0NUVFkpOworCWlmICghZmMtPmF0b21pY19vX3RydW5jKQorCQlpbmFyZy5mbGFncyAmPSB+T19UUlVOQzsKIAlyZXEtPmluLmgub3Bjb2RlID0gaXNkaXIgPyBGVVNFX09QRU5ESVIgOiBGVVNFX09QRU47CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKIAlyZXEtPmluLm51bWFyZ3MgPSAxOwpAQCAtNTQsNiArNTYsNyBAQAogCQkJa2ZyZWUoZmYpOwogCQkJZmYgPSBOVUxMOwogCQl9CisJCUlOSVRfTElTVF9IRUFEKCZmZi0+d3JpdGVfZW50cnkpOwogCQlhdG9taWNfc2V0KCZmZi0+Y291bnQsIDApOwogCX0KIAlyZXR1cm4gZmY7CkBAIC0xNDgsMTIgKzE1MSwxOCBAQAogewogCXN0cnVjdCBmdXNlX2ZpbGUgKmZmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmIChmZikgeworCQlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOworCiAJCWZ1c2VfcmVsZWFzZV9maWxsKGZmLCBnZXRfbm9kZV9pZChpbm9kZSksIGZpbGUtPmZfZmxhZ3MsCiAJCQkJICBpc2RpciA/IEZVU0VfUkVMRUFTRURJUiA6IEZVU0VfUkVMRUFTRSk7CiAKIAkJLyogSG9sZCB2ZnNtb3VudCBhbmQgZGVudHJ5IHVudGlsIHJlbGVhc2UgaXMgZmluaXNoZWQgKi8KIAkJZmYtPnJlc2VydmVkX3JlcS0+dmZzbW91bnQgPSBtbnRnZXQoZmlsZS0+Zl9wYXRoLm1udCk7CiAJCWZmLT5yZXNlcnZlZF9yZXEtPmRlbnRyeSA9IGRnZXQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisKKwkJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CisJCWxpc3RfZGVsKCZmZi0+d3JpdGVfZW50cnkpOworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOwogCQkvKgogCQkgKiBOb3JtYWxseSB0aGlzIHdpbGwgc2VuZCB0aGUgUkVMRUFTRSByZXF1ZXN0LAogCQkgKiBob3dldmVyIGlmIHNvbWUgYXN5bmNocm9ub3VzIFJFQUQgb3IgV1JJVEUgcmVxdWVzdHMKQEAgLTE4MCw3ICsxODksNyBAQAogICogU2NyYW1ibGUgdGhlIElEIHNwYWNlIHdpdGggWFRFQSwgc28gdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGZpbGVzX3N0cnVjdAogICogcG9pbnRlciBpcyBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UuCiAgKi8KLXN0YXRpYyB1NjQgZnVzZV9sb2NrX293bmVyX2lkKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBmbF9vd25lcl90IGlkKQordTY0IGZ1c2VfbG9ja19vd25lcl9pZChzdHJ1Y3QgZnVzZV9jb25uICpmYywgZmxfb3duZXJfdCBpZCkKIHsKIAl1MzIgKmsgPSBmYy0+c2NyYW1ibGVfa2V5OwogCXU2NCB2ID0gKHVuc2lnbmVkIGxvbmcpIGlkOwpAQCAtMjk5LDExICszMDgsMTkgQEAKIH0KIAogc3RhdGljIHNpemVfdCBmdXNlX3NlbmRfcmVhZChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKKwkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50LAorCQkJICAgICBmbF9vd25lcl90IG93bmVyKQogewogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CiAJc3RydWN0IGZ1c2VfZmlsZSAqZmYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKIAlmdXNlX3JlYWRfZmlsbChyZXEsIGZmLCBpbm9kZSwgcG9zLCBjb3VudCwgRlVTRV9SRUFEKTsKKwlpZiAob3duZXIgIT0gTlVMTCkgeworCQlzdHJ1Y3QgZnVzZV9yZWFkX2luICppbmFyZyA9ICZyZXEtPm1pc2MucmVhZF9pbjsKKworCQlpbmFyZy0+cmVhZF9mbGFncyB8PSBGVVNFX1JFQURfTE9DS09XTkVSOworCQlpbmFyZy0+bG9ja19vd25lciA9IGZ1c2VfbG9ja19vd25lcl9pZChmYywgb3duZXIpOworCX0KIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7CiAJcmV0dXJuIHJlcS0+b3V0LmFyZ3NbMF0uc2l6ZTsKIH0KQEAgLTMyNyw3ICszNDQsOCBAQAogCXJlcS0+b3V0LnBhZ2VfemVyb2luZyA9IDE7CiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwotCWZ1c2Vfc2VuZF9yZWFkKHJlcSwgZmlsZSwgaW5vZGUsIHBhZ2Vfb2Zmc2V0KHBhZ2UpLCBQQUdFX0NBQ0hFX1NJWkUpOworCWZ1c2Vfc2VuZF9yZWFkKHJlcSwgZmlsZSwgaW5vZGUsIHBhZ2Vfb2Zmc2V0KHBhZ2UpLCBQQUdFX0NBQ0hFX1NJWkUsCisJCSAgICAgICBOVUxMKTsKIAllcnIgPSByZXEtPm91dC5oLmVycm9yOwogCWZ1c2VfcHV0X3JlcXVlc3QoZmMsIHJlcSk7CiAJaWYgKCFlcnIpCkBAIC00MzQsMzAgKzQ1Miw0NyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzaXplX3QgZnVzZV9zZW5kX3dyaXRlKHN0cnVjdCBmdXNlX3JlcSAqcmVxLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBwb3MsIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIGZ1c2Vfd3JpdGVfZmlsbChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZ1c2VfZmlsZSAqZmYsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHBvcywgc2l6ZV90IGNvdW50LAorCQkJICAgIGludCB3cml0ZXBhZ2UpCiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKLQlzdHJ1Y3QgZnVzZV9maWxlICpmZiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZnVzZV93cml0ZV9pbiBpbmFyZzsKLQlzdHJ1Y3QgZnVzZV93cml0ZV9vdXQgb3V0YXJnOworCXN0cnVjdCBmdXNlX3dyaXRlX2luICppbmFyZyA9ICZyZXEtPm1pc2Mud3JpdGUuaW47CisJc3RydWN0IGZ1c2Vfd3JpdGVfb3V0ICpvdXRhcmcgPSAmcmVxLT5taXNjLndyaXRlLm91dDsKIAotCW1lbXNldCgmaW5hcmcsIDAsIHNpemVvZihzdHJ1Y3QgZnVzZV93cml0ZV9pbikpOwotCWluYXJnLmZoID0gZmYtPmZoOwotCWluYXJnLm9mZnNldCA9IHBvczsKLQlpbmFyZy5zaXplID0gY291bnQ7CisJbWVtc2V0KGluYXJnLCAwLCBzaXplb2Yoc3RydWN0IGZ1c2Vfd3JpdGVfaW4pKTsKKwlpbmFyZy0+ZmggPSBmZi0+Zmg7CisJaW5hcmctPm9mZnNldCA9IHBvczsKKwlpbmFyZy0+c2l6ZSA9IGNvdW50OworCWluYXJnLT53cml0ZV9mbGFncyA9IHdyaXRlcGFnZSA/IEZVU0VfV1JJVEVfQ0FDSEUgOiAwOwogCXJlcS0+aW4uaC5vcGNvZGUgPSBGVVNFX1dSSVRFOwogCXJlcS0+aW4uaC5ub2RlaWQgPSBnZXRfbm9kZV9pZChpbm9kZSk7CiAJcmVxLT5pbi5hcmdwYWdlcyA9IDE7CiAJcmVxLT5pbi5udW1hcmdzID0gMjsKLQlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV93cml0ZV9pbik7Ci0JcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gJmluYXJnOworCWlmIChmYy0+bWlub3IgPCA5KQorCQlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IEZVU0VfQ09NUEFUX1dSSVRFX0lOX1NJWkU7CisJZWxzZQorCQlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnVzZV93cml0ZV9pbik7CisJcmVxLT5pbi5hcmdzWzBdLnZhbHVlID0gaW5hcmc7CiAJcmVxLT5pbi5hcmdzWzFdLnNpemUgPSBjb3VudDsKIAlyZXEtPm91dC5udW1hcmdzID0gMTsKIAlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yoc3RydWN0IGZ1c2Vfd3JpdGVfb3V0KTsKLQlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gJm91dGFyZzsKKwlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gb3V0YXJnOworfQorCitzdGF0aWMgc2l6ZV90IGZ1c2Vfc2VuZF93cml0ZShzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgcG9zLCBzaXplX3QgY291bnQsCisJCQkgICAgICBmbF9vd25lcl90IG93bmVyKQoreworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CisJZnVzZV93cml0ZV9maWxsKHJlcSwgZmlsZS0+cHJpdmF0ZV9kYXRhLCBpbm9kZSwgcG9zLCBjb3VudCwgMCk7CisJaWYgKG93bmVyICE9IE5VTEwpIHsKKwkJc3RydWN0IGZ1c2Vfd3JpdGVfaW4gKmluYXJnID0gJnJlcS0+bWlzYy53cml0ZS5pbjsKKwkJaW5hcmctPndyaXRlX2ZsYWdzIHw9IEZVU0VfV1JJVEVfTE9DS09XTkVSOworCQlpbmFyZy0+bG9ja19vd25lciA9IGZ1c2VfbG9ja19vd25lcl9pZChmYywgb3duZXIpOworCX0KIAlyZXF1ZXN0X3NlbmQoZmMsIHJlcSk7Ci0JcmV0dXJuIG91dGFyZy5zaXplOworCXJldHVybiByZXEtPm1pc2Mud3JpdGUub3V0LnNpemU7CiB9CiAKIHN0YXRpYyBpbnQgZnVzZV93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCkBAIC00NzgsNiArNTEzLDcgQEAKIAlpbnQgZXJyOwogCXNpemVfdCBucmVzOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CisJc3RydWN0IGZ1c2VfaW5vZGUgKmZpID0gZ2V0X2Z1c2VfaW5vZGUoaW5vZGUpOwogCXVuc2lnbmVkIG9mZnNldCA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKIApAQCAtNDkxLDcgKzUyNyw3IEBACiAJcmVxLT5udW1fcGFnZXMgPSAxOwogCXJlcS0+cGFnZXNbMF0gPSBwYWdlOwogCXJlcS0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7Ci0JbnJlcyA9IGZ1c2Vfc2VuZF93cml0ZShyZXEsIGZpbGUsIGlub2RlLCBwb3MsIGNvdW50KTsKKwlucmVzID0gZnVzZV9zZW5kX3dyaXRlKHJlcSwgZmlsZSwgaW5vZGUsIHBvcywgY291bnQsIE5VTEwpOwogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoIWVyciAmJiAhbnJlcykKQEAgLTQ5OSw2ICs1MzUsNyBAQAogCWlmICghZXJyKSB7CiAJCXBvcyArPSBucmVzOwogCQlzcGluX2xvY2soJmZjLT5sb2NrKTsKKwkJZmktPmF0dHJfdmVyc2lvbiA9ICsrZmMtPmF0dHJfdmVyc2lvbjsKIAkJaWYgKHBvcyA+IGlub2RlLT5pX3NpemUpCiAJCQlpX3NpemVfd3JpdGUoaW5vZGUsIHBvcyk7CiAJCXNwaW5fdW5sb2NrKCZmYy0+bG9jayk7CkBAIC01OTEsOSArNjI4LDExIEBACiAJCW5ieXRlcyA9IChyZXEtPm51bV9wYWdlcyA8PCBQQUdFX1NISUZUKSAtIHJlcS0+cGFnZV9vZmZzZXQ7CiAJCW5ieXRlcyA9IG1pbihjb3VudCwgbmJ5dGVzKTsKIAkJaWYgKHdyaXRlKQotCQkJbnJlcyA9IGZ1c2Vfc2VuZF93cml0ZShyZXEsIGZpbGUsIGlub2RlLCBwb3MsIG5ieXRlcyk7CisJCQlucmVzID0gZnVzZV9zZW5kX3dyaXRlKHJlcSwgZmlsZSwgaW5vZGUsIHBvcywgbmJ5dGVzLAorCQkJCQkgICAgICAgY3VycmVudC0+ZmlsZXMpOwogCQllbHNlCi0JCQlucmVzID0gZnVzZV9zZW5kX3JlYWQocmVxLCBmaWxlLCBpbm9kZSwgcG9zLCBuYnl0ZXMpOworCQkJbnJlcyA9IGZ1c2Vfc2VuZF9yZWFkKHJlcSwgZmlsZSwgaW5vZGUsIHBvcywgbmJ5dGVzLAorCQkJCQkgICAgICBjdXJyZW50LT5maWxlcyk7CiAJCWZ1c2VfcmVsZWFzZV91c2VyX3BhZ2VzKHJlcSwgIXdyaXRlKTsKIAkJaWYgKHJlcS0+b3V0LmguZXJyb3IpIHsKIAkJCWlmICghcmVzKQpAQCAtNjk1LDcgKzczNCw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGZ1c2VfbGtfZmlsbChzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgY29uc3Qgc3RydWN0IGZpbGVfbG9jayAqZmwsIGludCBvcGNvZGUsIHBpZF90IHBpZCkKKwkJCSBjb25zdCBzdHJ1Y3QgZmlsZV9sb2NrICpmbCwgaW50IG9wY29kZSwgcGlkX3QgcGlkLAorCQkJIGludCBmbG9jaykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgZnVzZV9jb25uICpmYyA9IGdldF9mdXNlX2Nvbm4oaW5vZGUpOwpAQCAtNzA4LDYgKzc0OCw4IEBACiAJYXJnLT5say5lbmQgPSBmbC0+ZmxfZW5kOwogCWFyZy0+bGsudHlwZSA9IGZsLT5mbF90eXBlOwogCWFyZy0+bGsucGlkID0gcGlkOworCWlmIChmbG9jaykKKwkJYXJnLT5sa19mbGFncyB8PSBGVVNFX0xLX0ZMT0NLOwogCXJlcS0+aW4uaC5vcGNvZGUgPSBvcGNvZGU7CiAJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGlub2RlKTsKIAlyZXEtPmluLm51bWFyZ3MgPSAxOwpAQCAtNzI3LDcgKzc2OSw3IEBACiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwogCi0JZnVzZV9sa19maWxsKHJlcSwgZmlsZSwgZmwsIEZVU0VfR0VUTEssIDApOworCWZ1c2VfbGtfZmlsbChyZXEsIGZpbGUsIGZsLCBGVVNFX0dFVExLLCAwLCAwKTsKIAlyZXEtPm91dC5udW1hcmdzID0gMTsKIAlyZXEtPm91dC5hcmdzWzBdLnNpemUgPSBzaXplb2Yob3V0YXJnKTsKIAlyZXEtPm91dC5hcmdzWzBdLnZhbHVlID0gJm91dGFyZzsKQEAgLTc0MCw3ICs3ODIsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZnVzZV9zZXRsayhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpCitzdGF0aWMgaW50IGZ1c2Vfc2V0bGsoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmaWxlX2xvY2sgKmZsLCBpbnQgZmxvY2spCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKQEAgLTc1Nyw3ICs3OTksNyBAQAogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAotCWZ1c2VfbGtfZmlsbChyZXEsIGZpbGUsIGZsLCBvcGNvZGUsIHBpZCk7CisJZnVzZV9sa19maWxsKHJlcSwgZmlsZSwgZmwsIG9wY29kZSwgcGlkLCBmbG9jayk7CiAJcmVxdWVzdF9zZW5kKGZjLCByZXEpOwogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CiAJLyogbG9ja2luZyBpcyByZXN0YXJ0YWJsZSAqLwpAQCAtNzgzLDExICs4MjUsMjggQEAKIAkJaWYgKGZjLT5ub19sb2NrKQogCQkJZXJyID0gcG9zaXhfbG9ja19maWxlX3dhaXQoZmlsZSwgZmwpOwogCQllbHNlCi0JCQllcnIgPSBmdXNlX3NldGxrKGZpbGUsIGZsKTsKKwkJCWVyciA9IGZ1c2Vfc2V0bGsoZmlsZSwgZmwsIDApOwogCX0KIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGZ1c2VfZmlsZV9mbG9jayhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGNtZCwgc3RydWN0IGZpbGVfbG9jayAqZmwpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKKwlpbnQgZXJyOworCisJaWYgKGZjLT5ub19sb2NrKSB7CisJCWVyciA9IGZsb2NrX2xvY2tfZmlsZV93YWl0KGZpbGUsIGZsKTsKKwl9IGVsc2UgeworCQkvKiBlbXVsYXRlIGZsb2NrIHdpdGggUE9TSVggbG9ja3MgKi8KKwkJZmwtPmZsX293bmVyID0gKGZsX293bmVyX3QpIGZpbGU7CisJCWVyciA9IGZ1c2Vfc2V0bGsoZmlsZSwgZmwsIDEpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzZWN0b3JfdCBmdXNlX2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwpAQCAtODM2LDYgKzg5NSw3IEBACiAJLnJlbGVhc2UJPSBmdXNlX3JlbGVhc2UsCiAJLmZzeW5jCQk9IGZ1c2VfZnN5bmMsCiAJLmxvY2sJCT0gZnVzZV9maWxlX2xvY2ssCisJLmZsb2NrCQk9IGZ1c2VfZmlsZV9mbG9jaywKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCiB9OwogCkBAIC04NDgsNiArOTA4LDcgQEAKIAkucmVsZWFzZQk9IGZ1c2VfcmVsZWFzZSwKIAkuZnN5bmMJCT0gZnVzZV9mc3luYywKIAkubG9jawkJPSBmdXNlX2ZpbGVfbG9jaywKKwkuZmxvY2sJCT0gZnVzZV9maWxlX2Zsb2NrLAogCS8qIG5vIG1tYXAgYW5kIHNwbGljZV9yZWFkICovCiB9OwogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCAxNzY0NTA2Li42YzU0NjFkIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTY3LDYgKzY3LDEyIEBACiAJLyoqIFRoZSBzdGlja3kgYml0IGluIGlub2RlLT5pX21vZGUgbWF5IGhhdmUgYmVlbiByZW1vdmVkLCBzbwogCSAgICBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwgbW9kZSAqLwogCW1vZGVfdCBvcmlnX2lfbW9kZTsKKworCS8qKiBWZXJzaW9uIG9mIGxhc3QgYXR0cmlidXRlIGNoYW5nZSAqLworCXU2NCBhdHRyX3ZlcnNpb247CisKKwkvKiogRmlsZXMgdXNhYmxlIGluIHdyaXRlcGFnZS4gIFByb3RlY3RlZCBieSBmYy0+bG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgd3JpdGVfZmlsZXM7CiB9OwogCiAvKiogRlVTRSBzcGVjaWZpYyBmaWxlIGRhdGEgKi8KQEAgLTc5LDYgKzg1LDkgQEAKIAogCS8qKiBSZWZjb3VudCAqLwogCWF0b21pY190IGNvdW50OworCisJLyoqIEVudHJ5IG9uIGlub2RlJ3Mgd3JpdGVfZmlsZXMgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgd3JpdGVfZW50cnk7CiB9OwogCiAvKiogT25lIGlucHV0IGFyZ3VtZW50IG9mIGEgcmVxdWVzdCAqLwpAQCAtMjEwLDYgKzIxOSwxMCBAQAogCQlzdHJ1Y3QgZnVzZV9pbml0X2luIGluaXRfaW47CiAJCXN0cnVjdCBmdXNlX2luaXRfb3V0IGluaXRfb3V0OwogCQlzdHJ1Y3QgZnVzZV9yZWFkX2luIHJlYWRfaW47CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgZnVzZV93cml0ZV9pbiBpbjsKKwkJCXN0cnVjdCBmdXNlX3dyaXRlX291dCBvdXQ7CisJCX0gd3JpdGU7CiAJCXN0cnVjdCBmdXNlX2xrX2luIGxrX2luOwogCX0gbWlzYzsKIApAQCAtMzE3LDYgKzMzMCw5IEBACiAJLyoqIERvIHJlYWRwYWdlcyBhc3luY2hyb25vdXNseT8gIE9ubHkgc2V0IGluIElOSVQgKi8KIAl1bnNpZ25lZCBhc3luY19yZWFkIDogMTsKIAorCS8qKiBEbyBub3Qgc2VuZCBzZXBhcmF0ZSBTRVRBVFRSIHJlcXVlc3QgYmVmb3JlIG9wZW4oT19UUlVOQykgICovCisJdW5zaWduZWQgYXRvbWljX29fdHJ1bmMgOiAxOworCiAJLyoKIAkgKiBUaGUgZm9sbG93aW5nIGJpdGZpZWxkcyBhcmUgb25seSBmb3Igb3B0aW1pemF0aW9uIHB1cnBvc2VzCiAJICogYW5kIGhlbmNlIHJhY2VzIGluIHNldHRpbmcgdGhlbSB3aWxsIG5vdCBjYXVzZSBtYWxmdW5jdGlvbgpAQCAtMzg3LDYgKzQwMyw5IEBACiAKIAkvKiogUmVzZXJ2ZWQgcmVxdWVzdCBmb3IgdGhlIERFU1RST1kgbWVzc2FnZSAqLwogCXN0cnVjdCBmdXNlX3JlcSAqZGVzdHJveV9yZXE7CisKKwkvKiogVmVyc2lvbiBjb3VudGVyIGZvciBhdHRyaWJ1dGUgY2hhbmdlcyAqLworCXU2NCBhdHRyX3ZlcnNpb247CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmdXNlX2Nvbm4gKmdldF9mdXNlX2Nvbm5fc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKQEAgLTQxNiw3ICs0MzUsOCBAQAogICogR2V0IGEgZmlsbGVkIGluIGlub2RlCiAgKi8KIHN0cnVjdCBpbm9kZSAqZnVzZV9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbm9kZWlkLAotCQkJaW50IGdlbmVyYXRpb24sIHN0cnVjdCBmdXNlX2F0dHIgKmF0dHIpOworCQkJaW50IGdlbmVyYXRpb24sIHN0cnVjdCBmdXNlX2F0dHIgKmF0dHIsCisJCQl1NjQgYXR0cl92YWxpZCwgdTY0IGF0dHJfdmVyc2lvbik7CiAKIC8qKgogICogU2VuZCBGT1JHRVQgY29tbWFuZApAQCAtNDc3LDcgKzQ5Nyw4IEBACiAvKioKICAqIENoYW5nZSBhdHRyaWJ1dGVzIG9mIGFuIGlub2RlCiAgKi8KLXZvaWQgZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZnVzZV9hdHRyICphdHRyKTsKK3ZvaWQgZnVzZV9jaGFuZ2VfYXR0cmlidXRlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZnVzZV9hdHRyICphdHRyLAorCQkJICAgIHU2NCBhdHRyX3ZhbGlkLCB1NjQgYXR0cl92ZXJzaW9uKTsKIAogLyoqCiAgKiBJbml0aWFsaXplIHRoZSBjbGllbnQgZGV2aWNlCkBAIC01NjUsMyArNTg2LDEwIEBACiAgKiBJcyBmaWxlIHR5cGUgdmFsaWQ/CiAgKi8KIGludCBmdXNlX3ZhbGlkX3R5cGUoaW50IG0pOworCisvKioKKyAqIElzIHRhc2sgYWxsb3dlZCB0byBwZXJmb3JtIGZpbGVzeXN0ZW0gb3BlcmF0aW9uPworICovCitpbnQgZnVzZV9hbGxvd190YXNrKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCit1NjQgZnVzZV9sb2NrX293bmVyX2lkKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCBmbF9vd25lcl90IGlkKTsKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCBmZDA3MzU3Li45YTY4ZDY5IDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC01Niw2ICs1Niw3IEBACiAJZmktPmlfdGltZSA9IDA7CiAJZmktPm5vZGVpZCA9IDA7CiAJZmktPm5sb29rdXAgPSAwOworCUlOSVRfTElTVF9IRUFEKCZmaS0+d3JpdGVfZmlsZXMpOwogCWZpLT5mb3JnZXRfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CiAJaWYgKCFmaS0+Zm9yZ2V0X3JlcSkgewogCQlrbWVtX2NhY2hlX2ZyZWUoZnVzZV9pbm9kZV9jYWNoZXAsIGlub2RlKTsKQEAgLTY4LDYgKzY5LDcgQEAKIHN0YXRpYyB2b2lkIGZ1c2VfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBmdXNlX2lub2RlICpmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmZpLT53cml0ZV9maWxlcykpOwogCWlmIChmaS0+Zm9yZ2V0X3JlcSkKIAkJZnVzZV9yZXF1ZXN0X2ZyZWUoZmktPmZvcmdldF9yZXEpOwogCWttZW1fY2FjaGVfZnJlZShmdXNlX2lub2RlX2NhY2hlcCwgaW5vZGUpOwpAQCAtMTE3LDEyICsxMTksMjIgQEAKIAl1bm1hcF9tYXBwaW5nX3JhbmdlKG1hcHBpbmcsIG9mZnNldCArIFBBR0VfU0laRSAtIDEsIDAsIDEpOwogfQogCi12b2lkIGZ1c2VfY2hhbmdlX2F0dHJpYnV0ZXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZ1c2VfYXR0ciAqYXR0cikKKwordm9pZCBmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmdXNlX2F0dHIgKmF0dHIsCisJCQkgICAgdTY0IGF0dHJfdmFsaWQsIHU2NCBhdHRyX3ZlcnNpb24pCiB7CiAJc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBnZXRfZnVzZV9jb25uKGlub2RlKTsKIAlzdHJ1Y3QgZnVzZV9pbm9kZSAqZmkgPSBnZXRfZnVzZV9pbm9kZShpbm9kZSk7CiAJbG9mZl90IG9sZHNpemU7CiAKKwlzcGluX2xvY2soJmZjLT5sb2NrKTsKKwlpZiAoYXR0cl92ZXJzaW9uICE9IDAgJiYgZmktPmF0dHJfdmVyc2lvbiA+IGF0dHJfdmVyc2lvbikgeworCQlzcGluX3VubG9jaygmZmMtPmxvY2spOworCQlyZXR1cm47CisJfQorCWZpLT5hdHRyX3ZlcnNpb24gPSArK2ZjLT5hdHRyX3ZlcnNpb247CisJZmktPmlfdGltZSA9IGF0dHJfdmFsaWQ7CisKIAlpbm9kZS0+aV9pbm8gICAgID0gYXR0ci0+aW5vOwogCWlub2RlLT5pX21vZGUgICAgPSAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgfCAoYXR0ci0+bW9kZSAmIDA3Nzc3KTsKIAlpbm9kZS0+aV9ubGluayAgID0gYXR0ci0+bmxpbms7CkBAIC0xMzYsNiArMTQ4LDExIEBACiAJaW5vZGUtPmlfY3RpbWUudHZfc2VjICAgPSBhdHRyLT5jdGltZTsKIAlpbm9kZS0+aV9jdGltZS50dl9uc2VjICA9IGF0dHItPmN0aW1lbnNlYzsKIAorCWlmIChhdHRyLT5ibGtzaXplICE9IDApCisJCWlub2RlLT5pX2Jsa2JpdHMgPSBpbG9nMihhdHRyLT5ibGtzaXplKTsKKwllbHNlCisJCWlub2RlLT5pX2Jsa2JpdHMgPSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwogCS8qCiAJICogRG9uJ3Qgc2V0IHRoZSBzdGlja3kgYml0IGluIGlfbW9kZSwgdW5sZXNzIHdlIHdhbnQgdGhlIFZGUwogCSAqIHRvIGNoZWNrIHBlcm1pc3Npb25zLiAgVGhpcyBwcmV2ZW50cyBmYWlsdXJlcyBkdWUgdG8gdGhlCkBAIC0xNDUsNyArMTYyLDYgQEAKIAlpZiAoIShmYy0+ZmxhZ3MgJiBGVVNFX0RFRkFVTFRfUEVSTUlTU0lPTlMpKQogCQlpbm9kZS0+aV9tb2RlICY9IH5TX0lTVlRYOwogCi0Jc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJb2xkc2l6ZSA9IGlub2RlLT5pX3NpemU7CiAJaV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLT5zaXplKTsKIAlzcGluX3VubG9jaygmZmMtPmxvY2spOwpAQCAtMTk0LDcgKzIxMCw4IEBACiB9CiAKIHN0cnVjdCBpbm9kZSAqZnVzZV9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbm9kZWlkLAotCQkJaW50IGdlbmVyYXRpb24sIHN0cnVjdCBmdXNlX2F0dHIgKmF0dHIpCisJCQlpbnQgZ2VuZXJhdGlvbiwgc3RydWN0IGZ1c2VfYXR0ciAqYXR0ciwKKwkJCXU2NCBhdHRyX3ZhbGlkLCB1NjQgYXR0cl92ZXJzaW9uKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGZ1c2VfaW5vZGUgKmZpOwpAQCAtMjIyLDcgKzIzOSw4IEBACiAJc3Bpbl9sb2NrKCZmYy0+bG9jayk7CiAJZmktPm5sb29rdXAgKys7CiAJc3Bpbl91bmxvY2soJmZjLT5sb2NrKTsKLQlmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKGlub2RlLCBhdHRyKTsKKwlmdXNlX2NoYW5nZV9hdHRyaWJ1dGVzKGlub2RlLCBhdHRyLCBhdHRyX3ZhbGlkLCBhdHRyX3ZlcnNpb24pOworCiAJcmV0dXJuIGlub2RlOwogfQogCkBAIC0yODcsNiArMzA1LDExIEBACiAJc3RydWN0IGZ1c2Vfc3RhdGZzX291dCBvdXRhcmc7CiAJaW50IGVycjsKIAorCWlmICghZnVzZV9hbGxvd190YXNrKGZjLCBjdXJyZW50KSkgeworCQlidWYtPmZfdHlwZSA9IEZVU0VfU1VQRVJfTUFHSUM7CisJCXJldHVybiAwOworCX0KKwogCXJlcSA9IGZ1c2VfZ2V0X3JlcShmYyk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwpAQCAtNDUyLDYgKzQ3NSw3IEBACiAJCX0KIAkJZmMtPnJlcWN0ciA9IDA7CiAJCWZjLT5ibG9ja2VkID0gMTsKKwkJZmMtPmF0dHJfdmVyc2lvbiA9IDE7CiAJCWdldF9yYW5kb21fYnl0ZXMoJmZjLT5zY3JhbWJsZV9rZXksIHNpemVvZihmYy0+c2NyYW1ibGVfa2V5KSk7CiAJfQogb3V0OgpAQCAtNDgzLDcgKzUwNyw3IEBACiAJYXR0ci5tb2RlID0gbW9kZTsKIAlhdHRyLmlubyA9IEZVU0VfUk9PVF9JRDsKIAlhdHRyLm5saW5rID0gMTsKLQlyZXR1cm4gZnVzZV9pZ2V0KHNiLCAxLCAwLCAmYXR0cik7CisJcmV0dXJuIGZ1c2VfaWdldChzYiwgMSwgMCwgJmF0dHIsIDAsIDApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZnVzZV9zdXBlcl9vcGVyYXRpb25zID0gewpAQCAtNTE0LDYgKzUzOCw4IEBACiAJCQkJZmMtPmFzeW5jX3JlYWQgPSAxOwogCQkJaWYgKCEoYXJnLT5mbGFncyAmIEZVU0VfUE9TSVhfTE9DS1MpKQogCQkJCWZjLT5ub19sb2NrID0gMTsKKwkJCWlmIChhcmctPmZsYWdzICYgRlVTRV9BVE9NSUNfT19UUlVOQykKKwkJCQlmYy0+YXRvbWljX29fdHJ1bmMgPSAxOwogCQl9IGVsc2UgewogCQkJcmFfcGFnZXMgPSBmYy0+bWF4X3JlYWQgLyBQQUdFX0NBQ0hFX1NJWkU7CiAJCQlmYy0+bm9fbG9jayA9IDE7CkBAIC01MzYsNyArNTYyLDggQEAKIAlhcmctPm1ham9yID0gRlVTRV9LRVJORUxfVkVSU0lPTjsKIAlhcmctPm1pbm9yID0gRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTjsKIAlhcmctPm1heF9yZWFkYWhlYWQgPSBmYy0+YmRpLnJhX3BhZ2VzICogUEFHRV9DQUNIRV9TSVpFOwotCWFyZy0+ZmxhZ3MgfD0gRlVTRV9BU1lOQ19SRUFEIHwgRlVTRV9QT1NJWF9MT0NLUzsKKwlhcmctPmZsYWdzIHw9IEZVU0VfQVNZTkNfUkVBRCB8IEZVU0VfUE9TSVhfTE9DS1MgfCBGVVNFX0ZJTEVfT1BTIHwKKwkJRlVTRV9BVE9NSUNfT19UUlVOQzsKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9JTklUOwogCXJlcS0+aW4ubnVtYXJncyA9IDE7CiAJcmVxLT5pbi5hcmdzWzBdLnNpemUgPSBzaXplb2YoKmFyZyk7CmRpZmYgLS1naXQgYS9mcy9pb3ByaW8uYyBiL2ZzL2lvcHJpby5jCmluZGV4IDEwZDJjMjEuLmQ2ZmY3N2UgMTAwNjQ0Ci0tLSBhL2ZzL2lvcHJpby5jCisrKyBiL2ZzL2lvcHJpby5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAKIHN0YXRpYyBpbnQgc2V0X3Rhc2tfaW9wcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IGlvcHJpbykKIHsKQEAgLTkzLDcgKzk0LDcgQEAKIAkJCWlmICghd2hvKQogCQkJCXAgPSBjdXJyZW50OwogCQkJZWxzZQotCQkJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHdobyk7CisJCQkJcCA9IGZpbmRfdGFza19ieV92cGlkKHdobyk7CiAJCQlpZiAocCkKIAkJCQlyZXQgPSBzZXRfdGFza19pb3ByaW8ocCwgaW9wcmlvKTsKIAkJCWJyZWFrOwpAQCAtMTAxLDcgKzEwMiw3IEBACiAJCQlpZiAoIXdobykKIAkJCQlwZ3JwID0gdGFza19wZ3JwKGN1cnJlbnQpOwogCQkJZWxzZQotCQkJCXBncnAgPSBmaW5kX3BpZCh3aG8pOworCQkJCXBncnAgPSBmaW5kX3ZwaWQod2hvKTsKIAkJCWRvX2VhY2hfcGlkX3Rhc2socGdycCwgUElEVFlQRV9QR0lELCBwKSB7CiAJCQkJcmV0ID0gc2V0X3Rhc2tfaW9wcmlvKHAsIGlvcHJpbyk7CiAJCQkJaWYgKHJldCkKQEAgLTE4MCw3ICsxODEsNyBAQAogCQkJaWYgKCF3aG8pCiAJCQkJcCA9IGN1cnJlbnQ7CiAJCQllbHNlCi0JCQkJcCA9IGZpbmRfdGFza19ieV9waWQod2hvKTsKKwkJCQlwID0gZmluZF90YXNrX2J5X3ZwaWQod2hvKTsKIAkJCWlmIChwKQogCQkJCXJldCA9IGdldF90YXNrX2lvcHJpbyhwKTsKIAkJCWJyZWFrOwpAQCAtMTg4LDcgKzE4OSw3IEBACiAJCQlpZiAoIXdobykKIAkJCQlwZ3JwID0gdGFza19wZ3JwKGN1cnJlbnQpOwogCQkJZWxzZQotCQkJCXBncnAgPSBmaW5kX3BpZCh3aG8pOworCQkJCXBncnAgPSBmaW5kX3ZwaWQod2hvKTsKIAkJCWRvX2VhY2hfcGlkX3Rhc2socGdycCwgUElEVFlQRV9QR0lELCBwKSB7CiAJCQkJdG1waW8gPSBnZXRfdGFza19pb3ByaW8ocCk7CiAJCQkJaWYgKHRtcGlvIDwgMCkKZGlmZiAtLWdpdCBhL2ZzL2lzb2ZzL2lub2RlLmMgYi9mcy9pc29mcy9pbm9kZS5jCmluZGV4IGFhMzU5YTIuLjA5ZTNkMzAgMTAwNjQ0Ci0tLSBhL2ZzL2lzb2ZzL2lub2RlLmMKKysrIGIvZnMvaXNvZnMvaW5vZGUuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgKEMpIDE5OTEgIExpbnVzIFRvcnZhbGRzIC0gbWluaXggZmlsZXN5c3RlbQogICogICAgICAxOTkyLCAxOTkzLCAxOTk0ICBFcmljIFlvdW5nZGFsZSBNb2RpZmllZCBmb3IgSVNPIDk2NjAgZmlsZXN5c3RlbS4KLSAqICAgICAgMTk5NCAgRWJlcmhhcmQgTW9lbmtlYmVyZyAtIG11bHRpIHNlc3Npb24gaGFuZGxpbmcuCisgKiAgICAgIDE5OTQgIEViZXJoYXJkIE3Dtm5rZWJlcmcgLSBtdWx0aSBzZXNzaW9uIGhhbmRsaW5nLgogICogICAgICAxOTk1ICBNYXJrIERvYmllIC0gYWxsb3cgbW91bnRpbmcgb2Ygc29tZSB3ZWlyZCBWaWRlb0NEcyBhbmQgUGhvdG9DRHMuCiAgKgkxOTk3ICBHb3Jkb24gQ2hhZmZlZSAtIEpvbGlldCBDRHMKICAqCTE5OTggIEVyaWMgTGFtbWVydHMgLSBJU08gOTY2MCBMZXZlbCAzCmRpZmYgLS1naXQgYS9mcy9qYmQvY29tbWl0LmMgYi9mcy9qYmQvY29tbWl0LmMKaW5kZXggYTAwM2Q1MC4uOGYxZjJhYSAxMDA2NDQKLS0tIGEvZnMvamJkL2NvbW1pdC5jCisrKyBiL2ZzL2piZC9jb21taXQuYwpAQCAtMzc1LDcgKzM3NSw3IEBACiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gamgyYmgoamgpOwogCiAJCQlqYmRfbG9ja19iaF9zdGF0ZShiaCk7Ci0JCQlqYmRfc2xhYl9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKKwkJCWpiZF9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCWpoLT5iX2NvbW1pdHRlZF9kYXRhID0gTlVMTDsKIAkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwogCQl9CkBAIC00NjYsNyArNDY2LDcgQEAKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCiAJaWYgKGVycikKLQkJX19qb3VybmFsX2Fib3J0X2hhcmQoam91cm5hbCk7CisJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKIAogCWpvdXJuYWxfd3JpdGVfcmV2b2tlX3JlY29yZHMoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKIApAQCAtNTI0LDcgKzUyNCw3IEBACiAKIAkJCWRlc2NyaXB0b3IgPSBqb3VybmFsX2dldF9kZXNjcmlwdG9yX2J1ZmZlcihqb3VybmFsKTsKIAkJCWlmICghZGVzY3JpcHRvcikgewotCQkJCV9fam91cm5hbF9hYm9ydF9oYXJkKGpvdXJuYWwpOworCQkJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgLUVJTyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCQkgICBhbmQgcmVwZWF0IHRoaXMgbG9vcDogd2UnbGwgZmFsbCBpbnRvIHRoZQogCQkgICByZWZpbGUtb24tYWJvcnQgY29uZGl0aW9uIGFib3ZlLiAqLwogCQlpZiAoZXJyKSB7Ci0JCQlfX2pvdXJuYWxfYWJvcnRfaGFyZChqb3VybmFsKTsKKwkJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTc0OCw3ICs3NDgsNyBAQAogCQllcnIgPSAtRUlPOwogCiAJaWYgKGVycikKLQkJX19qb3VybmFsX2Fib3J0X2hhcmQoam91cm5hbCk7CisJCWpvdXJuYWxfYWJvcnQoam91cm5hbCwgZXJyKTsKIAogCS8qIEVuZCBvZiBhIHRyYW5zYWN0aW9uISAgRmluYWxseSwgd2UgY2FuIGRvIGNoZWNrcG9pbnQKICAgICAgICAgICAgcHJvY2Vzc2luZzogYW55IGJ1ZmZlcnMgY29tbWl0dGVkIGFzIGEgcmVzdWx0IG9mIHRoaXMKQEAgLTc5MiwxNCArNzkyLDE0IEBACiAJCSAqIE90aGVyd2lzZSwgd2UgY2FuIGp1c3QgdGhyb3cgYXdheSB0aGUgZnJvemVuIGRhdGEgbm93LgogCQkgKi8KIAkJaWYgKGpoLT5iX2NvbW1pdHRlZF9kYXRhKSB7Ci0JCQlqYmRfc2xhYl9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKKwkJCWpiZF9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCWpoLT5iX2NvbW1pdHRlZF9kYXRhID0gTlVMTDsKIAkJCWlmIChqaC0+Yl9mcm96ZW5fZGF0YSkgewogCQkJCWpoLT5iX2NvbW1pdHRlZF9kYXRhID0gamgtPmJfZnJvemVuX2RhdGE7CiAJCQkJamgtPmJfZnJvemVuX2RhdGEgPSBOVUxMOwogCQkJfQogCQl9IGVsc2UgaWYgKGpoLT5iX2Zyb3plbl9kYXRhKSB7Ci0JCQlqYmRfc2xhYl9mcmVlKGpoLT5iX2Zyb3plbl9kYXRhLCBiaC0+Yl9zaXplKTsKKwkJCWpiZF9mcmVlKGpoLT5iX2Zyb3plbl9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCWpoLT5iX2Zyb3plbl9kYXRhID0gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9qYmQvam91cm5hbC5jIGIvZnMvamJkL2pvdXJuYWwuYwppbmRleCBhNmJlNzhjLi41ZDE0MjQzIDEwMDY0NAotLS0gYS9mcy9qYmQvam91cm5hbC5jCisrKyBiL2ZzL2piZC9qb3VybmFsLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTgzLDcgKzg0LDYgQEAKIAogc3RhdGljIGludCBqb3VybmFsX2NvbnZlcnRfc3VwZXJibG9ja192MShqb3VybmFsX3QgKiwgam91cm5hbF9zdXBlcmJsb2NrX3QgKik7CiBzdGF0aWMgdm9pZCBfX2pvdXJuYWxfYWJvcnRfc29mdCAoam91cm5hbF90ICpqb3VybmFsLCBpbnQgZXJybm8pOwotc3RhdGljIGludCBqb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihzaXplX3Qgc2xhYl9zaXplKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIG1hbmFnZSBjb21taXQgdGltZW91dHMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCWlmIChJU19FUlIodCkpCiAJCXJldHVybiBQVFJfRVJSKHQpOwogCi0Jd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQsIGpvdXJuYWwtPmpfdGFzayAhPSAwKTsKKwl3YWl0X2V2ZW50KGpvdXJuYWwtPmpfd2FpdF9kb25lX2NvbW1pdCwgam91cm5hbC0+al90YXNrICE9IE5VTEwpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzAsNyArMjMwLDggQEAKIAl3aGlsZSAoam91cm5hbC0+al90YXNrKSB7CiAJCXdha2VfdXAoJmpvdXJuYWwtPmpfd2FpdF9jb21taXQpOwogCQlzcGluX3VubG9jaygmam91cm5hbC0+al9zdGF0ZV9sb2NrKTsKLQkJd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQsIGpvdXJuYWwtPmpfdGFzayA9PSAwKTsKKwkJd2FpdF9ldmVudChqb3VybmFsLT5qX3dhaXRfZG9uZV9jb21taXQsCisJCQkJam91cm5hbC0+al90YXNrID09IE5VTEwpOwogCQlzcGluX2xvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJfQogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwpAQCAtMzM0LDEwICszMzUsMTAgQEAKIAkJY2hhciAqdG1wOwogCiAJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmhfaW4pOwotCQl0bXAgPSBqYmRfc2xhYl9hbGxvYyhiaF9pbi0+Yl9zaXplLCBHRlBfTk9GUyk7CisJCXRtcCA9IGpiZF9hbGxvYyhiaF9pbi0+Yl9zaXplLCBHRlBfTk9GUyk7CiAJCWpiZF9sb2NrX2JoX3N0YXRlKGJoX2luKTsKIAkJaWYgKGpoX2luLT5iX2Zyb3plbl9kYXRhKSB7Ci0JCQlqYmRfc2xhYl9mcmVlKHRtcCwgYmhfaW4tPmJfc2l6ZSk7CisJCQlqYmRfZnJlZSh0bXAsIGJoX2luLT5iX3NpemUpOwogCQkJZ290byByZXBlYXQ7CiAJCX0KIApAQCAtNjU0LDEwICs2NTUsOSBAQAogCWpvdXJuYWxfdCAqam91cm5hbDsKIAlpbnQgZXJyOwogCi0Jam91cm5hbCA9IGpiZF9rbWFsbG9jKHNpemVvZigqam91cm5hbCksIEdGUF9LRVJORUwpOworCWpvdXJuYWwgPSBremFsbG9jKHNpemVvZigqam91cm5hbCksIEdGUF9LRVJORUwpOwogCWlmICgham91cm5hbCkKIAkJZ290byBmYWlsOwotCW1lbXNldChqb3VybmFsLCAwLCBzaXplb2YoKmpvdXJuYWwpKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmpvdXJuYWwtPmpfd2FpdF9sb2dzcGFjZSk7CkBAIC0xMDk1LDEzICsxMDk1LDYgQEAKIAkJfQogCX0KIAotCS8qCi0JICogQ3JlYXRlIGEgc2xhYiBmb3IgdGhpcyBibG9ja3NpemUKLQkgKi8KLQllcnIgPSBqb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihiZTMyX3RvX2NwdShzYi0+c19ibG9ja3NpemUpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCiAJLyogTGV0IHRoZSByZWNvdmVyeSBjb2RlIGNoZWNrIHdoZXRoZXIgaXQgbmVlZHMgdG8gcmVjb3ZlciBhbnkKIAkgKiBkYXRhIGZyb20gdGhlIGpvdXJuYWwuICovCiAJaWYgKGpvdXJuYWxfcmVjb3Zlcihqb3VybmFsKSkKQEAgLTE2MTUsODYgKzE2MDgsNiBAQAogfQogCiAvKgotICogU2ltcGxlIHN1cHBvcnQgZm9yIHJldHJ5aW5nIG1lbW9yeSBhbGxvY2F0aW9ucy4gIEludHJvZHVjZWQgdG8gaGVscCB0bwotICogZGVidWcgZGlmZmVyZW50IFZNIGRlYWRsb2NrIGF2b2lkYW5jZSBzdHJhdGVnaWVzLgotICovCi12b2lkICogX19qYmRfa21hbGxvYyAoY29uc3QgY2hhciAqd2hlcmUsIHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IHJldHJ5KQotewotCXJldHVybiBrbWFsbG9jKHNpemUsIGZsYWdzIHwgKHJldHJ5ID8gX19HRlBfTk9GQUlMIDogMCkpOwotfQotCi0vKgotICogamJkIHNsYWIgbWFuYWdlbWVudDogY3JlYXRlIDFrLCAyaywgNGssIDhrIHNsYWJzIGFzIG5lZWRlZAotICogYW5kIGFsbG9jYXRlIGZyb3plbiBhbmQgY29tbWl0IGJ1ZmZlcnMgZnJvbSB0aGVzZSBzbGFicy4KLSAqCi0gKiBSZWFzb24gZm9yIGRvaW5nIHRoaXMgaXMgdG8gYXZvaWQsIFNMQUJfREVCVUcgLSBzaW5jZSBpdCBjb3VsZAotICogY2F1c2UgYmggdG8gY3Jvc3MgcGFnZSBib3VuZGFyeS4KLSAqLwotCi0jZGVmaW5lIEpCRF9NQVhfU0xBQlMgNQotI2RlZmluZSBKQkRfU0xBQl9JTkRFWChzaXplKSAgKHNpemUgPj4gMTEpCi0KLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqamJkX3NsYWJbSkJEX01BWF9TTEFCU107Ci1zdGF0aWMgY29uc3QgY2hhciAqamJkX3NsYWJfbmFtZXNbSkJEX01BWF9TTEFCU10gPSB7Ci0JImpiZF8xayIsICJqYmRfMmsiLCAiamJkXzRrIiwgTlVMTCwgImpiZF84ayIKLX07Ci0KLXN0YXRpYyB2b2lkIGpvdXJuYWxfZGVzdHJveV9qYmRfc2xhYnModm9pZCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBKQkRfTUFYX1NMQUJTOyBpKyspIHsKLQkJaWYgKGpiZF9zbGFiW2ldKQotCQkJa21lbV9jYWNoZV9kZXN0cm95KGpiZF9zbGFiW2ldKTsKLQkJamJkX3NsYWJbaV0gPSBOVUxMOwotCX0KLX0KLQotc3RhdGljIGludCBqb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihzaXplX3Qgc2xhYl9zaXplKQotewotCWludCBpID0gSkJEX1NMQUJfSU5ERVgoc2xhYl9zaXplKTsKLQotCUJVR19PTihpID49IEpCRF9NQVhfU0xBQlMpOwotCi0JLyoKLQkgKiBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBzbGFiIGNyZWF0ZWQgZm9yIHRoaXMgc2l6ZQotCSAqLwotCWlmIChqYmRfc2xhYltpXSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIENyZWF0ZSBhIHNsYWIgYW5kIGZvcmNlIGFsaWdubWVudCB0byBiZSBzYW1lIGFzIHNsYWJzaXplIC0KLQkgKiB0aGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgYWxsb2NhdGlvbnMgd29uJ3QgY3Jvc3MgdGhlIHBhZ2UKLQkgKiBib3VuZGFyeS4KLQkgKi8KLQlqYmRfc2xhYltpXSA9IGttZW1fY2FjaGVfY3JlYXRlKGpiZF9zbGFiX25hbWVzW2ldLAotCQkJCXNsYWJfc2l6ZSwgc2xhYl9zaXplLCAwLCBOVUxMKTsKLQlpZiAoIWpiZF9zbGFiW2ldKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJKQkQ6IG5vIG1lbW9yeSBmb3IgamJkX3NsYWIgY2FjaGVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgKiBqYmRfc2xhYl9hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IEpCRF9TTEFCX0lOREVYKHNpemUpOwotCUJVR19PTihqYmRfc2xhYltpZHhdID09IE5VTEwpOwotCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGpiZF9zbGFiW2lkeF0sIGZsYWdzIHwgX19HRlBfTk9GQUlMKTsKLX0KLQotdm9pZCBqYmRfc2xhYl9mcmVlKHZvaWQgKnB0ciwgIHNpemVfdCBzaXplKQotewotCWludCBpZHg7Ci0KLQlpZHggPSBKQkRfU0xBQl9JTkRFWChzaXplKTsKLQlCVUdfT04oamJkX3NsYWJbaWR4XSA9PSBOVUxMKTsKLQlrbWVtX2NhY2hlX2ZyZWUoamJkX3NsYWJbaWR4XSwgcHRyKTsKLX0KLQotLyoKICAqIEpvdXJuYWxfaGVhZCBzdG9yYWdlIG1hbmFnZW1lbnQKICAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpqb3VybmFsX2hlYWRfY2FjaGU7CkBAIC0xNzM5LDE0ICsxNjUyLDE0IEBACiAJYXRvbWljX2luYygmbnJfam91cm5hbF9oZWFkcyk7CiAjZW5kaWYKIAlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jKGpvdXJuYWxfaGVhZF9jYWNoZSwgR0ZQX05PRlMpOwotCWlmIChyZXQgPT0gMCkgeworCWlmIChyZXQgPT0gTlVMTCkgewogCQlqYmRfZGVidWcoMSwgIm91dCBvZiBtZW1vcnkgZm9yIGpvdXJuYWxfaGVhZFxuIik7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGxhc3Rfd2FybmluZyArIDUqSFopKSB7CiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkVOT01FTSBpbiAlcywgcmV0cnlpbmcuXG4iLAogCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7CiAJCQlsYXN0X3dhcm5pbmcgPSBqaWZmaWVzOwogCQl9Ci0JCXdoaWxlIChyZXQgPT0gMCkgeworCQl3aGlsZSAocmV0ID09IE5VTEwpIHsKIAkJCXlpZWxkKCk7CiAJCQlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jKGpvdXJuYWxfaGVhZF9jYWNoZSwgR0ZQX05PRlMpOwogCQl9CkBAIC0xODgxLDEzICsxNzk0LDEzIEBACiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZyZWVpbmcgIgogCQkJCQkJImJfZnJvemVuX2RhdGFcbiIsCiAJCQkJCQlfX0ZVTkNUSU9OX18pOwotCQkJCWpiZF9zbGFiX2ZyZWUoamgtPmJfZnJvemVuX2RhdGEsIGJoLT5iX3NpemUpOworCQkJCWpiZF9mcmVlKGpoLT5iX2Zyb3plbl9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCX0KIAkJCWlmIChqaC0+Yl9jb21taXR0ZWRfZGF0YSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmcmVlaW5nICIKIAkJCQkJCSJiX2NvbW1pdHRlZF9kYXRhXG4iLAogCQkJCQkJX19GVU5DVElPTl9fKTsKLQkJCQlqYmRfc2xhYl9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKKwkJCQlqYmRfZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQl9CiAJCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJCWpoLT5iX2JoID0gTlVMTDsJLyogZGVidWcsIHJlYWxseSAqLwpAQCAtMTkzOSw2MyArMTg1Miw0MCBAQAogfQogCiAvKgotICogL3Byb2MgdHVuYWJsZXMKKyAqIGRlYnVnZnMgdHVuYWJsZXMKICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0pCRF9ERUJVRykKLWludCBqb3VybmFsX2VuYWJsZV9kZWJ1ZzsKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisKK3U4IGpvdXJuYWxfZW5hYmxlX2RlYnVnIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGpvdXJuYWxfZW5hYmxlX2RlYnVnKTsKLSNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfSkJEX0RFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQorc3RhdGljIHN0cnVjdCBkZW50cnkgKmpiZF9kZWJ1Z2ZzX2RpcjsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqYmRfZGVidWc7CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfamJkX2RlYnVnOwotCi1zdGF0aWMgaW50IHJlYWRfamJkX2RlYnVnKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgX19pbml0IGpiZF9jcmVhdGVfZGVidWdmc19lbnRyeSh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBzcHJpbnRmKHBhZ2UgKyBvZmYsICIlZFxuIiwgam91cm5hbF9lbmFibGVfZGVidWcpOwotCSplb2YgPSAxOwotCXJldHVybiByZXQ7CisJamJkX2RlYnVnZnNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJqYmQiLCBOVUxMKTsKKwlpZiAoamJkX2RlYnVnZnNfZGlyKQorCQlqYmRfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV91OCgiamJkLWRlYnVnIiwgU19JUlVHTywKKwkJCQkJICAgICAgIGpiZF9kZWJ1Z2ZzX2RpciwKKwkJCQkJICAgICAgICZqb3VybmFsX2VuYWJsZV9kZWJ1Zyk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfamJkX2RlYnVnKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAotCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKK3N0YXRpYyB2b2lkIF9fZXhpdCBqYmRfcmVtb3ZlX2RlYnVnZnNfZW50cnkodm9pZCkKIHsKLQljaGFyIGJ1ZlszMl07Ci0KLQlpZiAoY291bnQgPiBBUlJBWV9TSVpFKGJ1ZikgLSAxKQotCQljb3VudCA9IEFSUkFZX1NJWkUoYnVmKSAtIDE7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCWJ1ZltBUlJBWV9TSVpFKGJ1ZikgLSAxXSA9ICdcMCc7Ci0Jam91cm5hbF9lbmFibGVfZGVidWcgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLSNkZWZpbmUgSkJEX1BST0NfTkFNRSAic3lzL2ZzL2piZC1kZWJ1ZyIKLQotc3RhdGljIHZvaWQgX19pbml0IGNyZWF0ZV9qYmRfcHJvY19lbnRyeSh2b2lkKQotewotCXByb2NfamJkX2RlYnVnID0gY3JlYXRlX3Byb2NfZW50cnkoSkJEX1BST0NfTkFNRSwgMDY0NCwgTlVMTCk7Ci0JaWYgKHByb2NfamJkX2RlYnVnKSB7Ci0JCS8qIFdoeSBpcyB0aGlzIHNvIGhhcmQ/ICovCi0JCXByb2NfamJkX2RlYnVnLT5yZWFkX3Byb2MgPSByZWFkX2piZF9kZWJ1ZzsKLQkJcHJvY19qYmRfZGVidWctPndyaXRlX3Byb2MgPSB3cml0ZV9qYmRfZGVidWc7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcmVtb3ZlX2piZF9wcm9jX2VudHJ5KHZvaWQpCi17Ci0JaWYgKHByb2NfamJkX2RlYnVnKQotCQlyZW1vdmVfcHJvY19lbnRyeShKQkRfUFJPQ19OQU1FLCBOVUxMKTsKKwlkZWJ1Z2ZzX3JlbW92ZShqYmRfZGVidWcpOworCWRlYnVnZnNfcmVtb3ZlKGpiZF9kZWJ1Z2ZzX2Rpcik7CiB9CiAKICNlbHNlCiAKLSNkZWZpbmUgY3JlYXRlX2piZF9wcm9jX2VudHJ5KCkgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHJlbW92ZV9qYmRfcHJvY19lbnRyeSgpIGRvIHt9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIGpiZF9jcmVhdGVfZGVidWdmc19lbnRyeSh2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgamJkX3JlbW92ZV9kZWJ1Z2ZzX2VudHJ5KHZvaWQpCit7Cit9CiAKICNlbmRpZgogCkBAIC0yMDQyLDcgKzE5MzIsNiBAQAogCWpvdXJuYWxfZGVzdHJveV9yZXZva2VfY2FjaGVzKCk7CiAJam91cm5hbF9kZXN0cm95X2pvdXJuYWxfaGVhZF9jYWNoZSgpOwogCWpvdXJuYWxfZGVzdHJveV9oYW5kbGVfY2FjaGUoKTsKLQlqb3VybmFsX2Rlc3Ryb3lfamJkX3NsYWJzKCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGpvdXJuYWxfaW5pdCh2b2lkKQpAQCAtMjA1NCw3ICsxOTQzLDcgQEAKIAlyZXQgPSBqb3VybmFsX2luaXRfY2FjaGVzKCk7CiAJaWYgKHJldCAhPSAwKQogCQlqb3VybmFsX2Rlc3Ryb3lfY2FjaGVzKCk7Ci0JY3JlYXRlX2piZF9wcm9jX2VudHJ5KCk7CisJamJkX2NyZWF0ZV9kZWJ1Z2ZzX2VudHJ5KCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjA2NSw3ICsxOTU0LDcgQEAKIAlpZiAobikKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIkpCRDogbGVha2VkICVkIGpvdXJuYWxfaGVhZHMhXG4iLCBuKTsKICNlbmRpZgotCXJlbW92ZV9qYmRfcHJvY19lbnRyeSgpOworCWpiZF9yZW1vdmVfZGVidWdmc19lbnRyeSgpOwogCWpvdXJuYWxfZGVzdHJveV9jYWNoZXMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamJkL3JlY292ZXJ5LmMgYi9mcy9qYmQvcmVjb3ZlcnkuYwppbmRleCAyYTVmNGI4Li5jNWQ5Njk0IDEwMDY0NAotLS0gYS9mcy9qYmQvcmVjb3ZlcnkuYworKysgYi9mcy9qYmQvcmVjb3ZlcnkuYwpAQCAtMjUwLDEwICsyNTAsMTAgQEAKIAlpZiAoIWVycikKIAkJZXJyID0gZG9fb25lX3Bhc3Moam91cm5hbCwgJmluZm8sIFBBU1NfUkVQTEFZKTsKIAotCWpiZF9kZWJ1ZygwLCAiSkJEOiByZWNvdmVyeSwgZXhpdCBzdGF0dXMgJWQsICIKKwlqYmRfZGVidWcoMSwgIkpCRDogcmVjb3ZlcnksIGV4aXQgc3RhdHVzICVkLCAiCiAJCSAgInJlY292ZXJlZCB0cmFuc2FjdGlvbnMgJXUgdG8gJXVcbiIsCiAJCSAgZXJyLCBpbmZvLnN0YXJ0X3RyYW5zYWN0aW9uLCBpbmZvLmVuZF90cmFuc2FjdGlvbik7Ci0JamJkX2RlYnVnKDAsICJKQkQ6IFJlcGxheWVkICVkIGFuZCByZXZva2VkICVkLyVkIGJsb2Nrc1xuIiwKKwlqYmRfZGVidWcoMSwgIkpCRDogUmVwbGF5ZWQgJWQgYW5kIHJldm9rZWQgJWQvJWQgYmxvY2tzXG4iLAogCQkgIGluZm8ubnJfcmVwbGF5cywgaW5mby5ucl9yZXZva2VfaGl0cywgaW5mby5ucl9yZXZva2VzKTsKIAogCS8qIFJlc3RhcnQgdGhlIGxvZyBhdCB0aGUgbmV4dCB0cmFuc2FjdGlvbiBJRCwgdGh1cyBpbnZhbGlkYXRpbmcKQEAgLTI5Nyw3ICsyOTcsNyBAQAogI2lmZGVmIENPTkZJR19KQkRfREVCVUcKIAkJaW50IGRyb3BwZWQgPSBpbmZvLmVuZF90cmFuc2FjdGlvbiAtIGJlMzJfdG9fY3B1KHNiLT5zX3NlcXVlbmNlKTsKICNlbmRpZgotCQlqYmRfZGVidWcoMCwKKwkJamJkX2RlYnVnKDEsCiAJCQkgICJKQkQ6IGlnbm9yaW5nICVkIHRyYW5zYWN0aW9uJXMgZnJvbSB0aGUgam91cm5hbC5cbiIsCiAJCQkgIGRyb3BwZWQsIChkcm9wcGVkID09IDEpID8gIiIgOiAicyIpOwogCQlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gKytpbmZvLmVuZF90cmFuc2FjdGlvbjsKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggOGRmNWJhYy4uMDhmZjZjNyAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTk2LDEzICs5NiwxMiBAQAogCiBhbGxvY190cmFuc2FjdGlvbjoKIAlpZiAoIWpvdXJuYWwtPmpfcnVubmluZ190cmFuc2FjdGlvbikgewotCQluZXdfdHJhbnNhY3Rpb24gPSBqYmRfa21hbGxvYyhzaXplb2YoKm5ld190cmFuc2FjdGlvbiksCi0JCQkJCQlHRlBfTk9GUyk7CisJCW5ld190cmFuc2FjdGlvbiA9IGt6YWxsb2Moc2l6ZW9mKCpuZXdfdHJhbnNhY3Rpb24pLAorCQkJCQkJR0ZQX05PRlN8X19HRlBfTk9GQUlMKTsKIAkJaWYgKCFuZXdfdHJhbnNhY3Rpb24pIHsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQltZW1zZXQobmV3X3RyYW5zYWN0aW9uLCAwLCBzaXplb2YoKm5ld190cmFuc2FjdGlvbikpOwogCX0KIAogCWpiZF9kZWJ1ZygzLCAiTmV3IGhhbmRsZSAlcCBnb2luZyBsaXZlLlxuIiwgaGFuZGxlKTsKQEAgLTY3NSw3ICs2NzQsNyBAQAogCQkJCUpCVUZGRVJfVFJBQ0UoamgsICJhbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlciIpOwogCQkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwogCQkJCWZyb3plbl9idWZmZXIgPQotCQkJCQlqYmRfc2xhYl9hbGxvYyhqaDJiaChqaCktPmJfc2l6ZSwKKwkJCQkJamJkX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLAogCQkJCQkJCSBHRlBfTk9GUyk7CiAJCQkJaWYgKCFmcm96ZW5fYnVmZmVyKSB7CiAJCQkJCXByaW50ayhLRVJOX0VNRVJHCkBAIC03MzUsNyArNzM0LDcgQEAKIAogb3V0OgogCWlmICh1bmxpa2VseShmcm96ZW5fYnVmZmVyKSkJLyogSXQncyB1c3VhbGx5IE5VTEwgKi8KLQkJamJkX3NsYWJfZnJlZShmcm96ZW5fYnVmZmVyLCBiaC0+Yl9zaXplKTsKKwkJamJkX2ZyZWUoZnJvemVuX2J1ZmZlciwgYmgtPmJfc2l6ZSk7CiAKIAlKQlVGRkVSX1RSQUNFKGpoLCAiZXhpdCIpOwogCXJldHVybiBlcnJvcjsKQEAgLTg4OCw3ICs4ODcsNyBAQAogCiByZXBlYXQ6CiAJaWYgKCFqaC0+Yl9jb21taXR0ZWRfZGF0YSkgewotCQljb21taXR0ZWRfZGF0YSA9IGpiZF9zbGFiX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLCBHRlBfTk9GUyk7CisJCWNvbW1pdHRlZF9kYXRhID0gamJkX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLCBHRlBfTk9GUyk7CiAJCWlmICghY29tbWl0dGVkX2RhdGEpIHsKIAkJCXByaW50ayhLRVJOX0VNRVJHICIlczogTm8gbWVtb3J5IGZvciBjb21taXR0ZWQgZGF0YVxuIiwKIAkJCQlfX0ZVTkNUSU9OX18pOwpAQCAtOTE1LDcgKzkxNCw3IEBACiBvdXQ6CiAJam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKIAlpZiAodW5saWtlbHkoY29tbWl0dGVkX2RhdGEpKQotCQlqYmRfc2xhYl9mcmVlKGNvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKKwkJamJkX2ZyZWUoY29tbWl0dGVkX2RhdGEsIGJoLT5iX3NpemUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExNzIsNyArMTE3MSw3IEBACiAJfQogCiAJLyogVGhhdCB0ZXN0IHNob3VsZCBoYXZlIGVsaW1pbmF0ZWQgdGhlIGZvbGxvd2luZyBjYXNlOiAqLwotCUpfQVNTRVJUX0pIKGpoLCBqaC0+Yl9mcm96ZW5fZGF0YSA9PSAwKTsKKwlKX0FTU0VSVF9KSChqaCwgamgtPmJfZnJvemVuX2RhdGEgPT0gTlVMTCk7CiAKIAlKQlVGRkVSX1RSQUNFKGpoLCAiZmlsZSBhcyBCSl9NZXRhZGF0YSIpOwogCXNwaW5fbG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwpAQCAtMTUyMiw3ICsxNTIxLDcgQEAKIAogCUpfQVNTRVJUX0pIKGpoLCBqaC0+Yl9qbGlzdCA8IEJKX1R5cGVzKTsKIAlpZiAoamgtPmJfamxpc3QgIT0gQkpfTm9uZSkKLQkJSl9BU1NFUlRfSkgoamgsIHRyYW5zYWN0aW9uICE9IDApOworCQlKX0FTU0VSVF9KSChqaCwgdHJhbnNhY3Rpb24gIT0gTlVMTCk7CiAKIAlzd2l0Y2ggKGpoLT5iX2psaXN0KSB7CiAJY2FzZSBCSl9Ob25lOgpAQCAtMTU5MSwxMSArMTU5MCwxMSBAQAogCWlmIChidWZmZXJfbG9ja2VkKGJoKSB8fCBidWZmZXJfZGlydHkoYmgpKQogCQlnb3RvIG91dDsKIAotCWlmIChqaC0+Yl9uZXh0X3RyYW5zYWN0aW9uICE9IDApCisJaWYgKGpoLT5iX25leHRfdHJhbnNhY3Rpb24gIT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlzcGluX2xvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKLQlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gMCAmJiBqaC0+Yl9jcF90cmFuc2FjdGlvbiA9PSAwKSB7CisJaWYgKGpoLT5iX3RyYW5zYWN0aW9uICE9IE5VTEwgJiYgamgtPmJfY3BfdHJhbnNhY3Rpb24gPT0gTlVMTCkgewogCQlpZiAoamgtPmJfamxpc3QgPT0gQkpfU3luY0RhdGEgfHwgamgtPmJfamxpc3QgPT0gQkpfTG9ja2VkKSB7CiAJCQkvKiBBIHdyaXR0ZW4tYmFjayBvcmRlcmVkIGRhdGEgYnVmZmVyICovCiAJCQlKQlVGRkVSX1RSQUNFKGpoLCAicmVsZWFzZSBkYXRhIik7CkBAIC0xNjAzLDcgKzE2MDIsNyBAQAogCQkJam91cm5hbF9yZW1vdmVfam91cm5hbF9oZWFkKGJoKTsKIAkJCV9fYnJlbHNlKGJoKTsKIAkJfQotCX0gZWxzZSBpZiAoamgtPmJfY3BfdHJhbnNhY3Rpb24gIT0gMCAmJiBqaC0+Yl90cmFuc2FjdGlvbiA9PSAwKSB7CisJfSBlbHNlIGlmIChqaC0+Yl9jcF90cmFuc2FjdGlvbiAhPSBOVUxMICYmIGpoLT5iX3RyYW5zYWN0aW9uID09IE5VTEwpIHsKIAkJLyogd3JpdHRlbi1iYWNrIGNoZWNrcG9pbnRlZCBtZXRhZGF0YSBidWZmZXIgKi8KIAkJaWYgKGpoLT5iX2psaXN0ID09IEJKX05vbmUpIHsKIAkJCUpCVUZGRVJfVFJBQ0UoamgsICJyZW1vdmUgZnJvbSBjaGVja3BvaW50IGxpc3QiKTsKQEAgLTE5NjMsNyArMTk2Miw3IEBACiAKIAlKX0FTU0VSVF9KSChqaCwgamgtPmJfamxpc3QgPCBCSl9UeXBlcyk7CiAJSl9BU1NFUlRfSkgoamgsIGpoLT5iX3RyYW5zYWN0aW9uID09IHRyYW5zYWN0aW9uIHx8Ci0JCQkJamgtPmJfdHJhbnNhY3Rpb24gPT0gMCk7CisJCQkJamgtPmJfdHJhbnNhY3Rpb24gPT0gTlVMTCk7CiAKIAlpZiAoamgtPmJfdHJhbnNhY3Rpb24gJiYgamgtPmJfamxpc3QgPT0gamxpc3QpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvY29tbWl0LmMgYi9mcy9qYmQyL2NvbW1pdC5jCmluZGV4IGMwZjU5ZDEuLjY5ODZmMzMgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY29tbWl0LmMKKysrIGIvZnMvamJkMi9jb21taXQuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrKQogewogCXRhZy0+dF9ibG9ja25yID0gY3B1X3RvX2JlMzIoYmxvY2sgJiAodTMyKX4wKTsKLQlpZiAodGFnX2J5dGVzID4gSkJEX1RBR19TSVpFMzIpCisJaWYgKHRhZ19ieXRlcyA+IEpCRDJfVEFHX1NJWkUzMikKIAkJdGFnLT50X2Jsb2NrbnJfaGlnaCA9IGNwdV90b19iZTMyKChibG9jayA+PiAzMSkgPj4gMSk7CiB9CiAKQEAgLTM4NCw3ICszODQsNyBAQAogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGpoMmJoKGpoKTsKIAogCQkJamJkX2xvY2tfYmhfc3RhdGUoYmgpOwotCQkJamJkMl9zbGFiX2ZyZWUoamgtPmJfY29tbWl0dGVkX2RhdGEsIGJoLT5iX3NpemUpOworCQkJamJkMl9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCWpoLT5iX2NvbW1pdHRlZF9kYXRhID0gTlVMTDsKIAkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwogCQl9CkBAIC00NzUsNyArNDc1LDcgQEAKIAlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCiAJaWYgKGVycikKLQkJX19qYmQyX2pvdXJuYWxfYWJvcnRfaGFyZChqb3VybmFsKTsKKwkJamJkMl9qb3VybmFsX2Fib3J0KGpvdXJuYWwsIGVycik7CiAKIAlqYmQyX2pvdXJuYWxfd3JpdGVfcmV2b2tlX3JlY29yZHMoam91cm5hbCwgY29tbWl0X3RyYW5zYWN0aW9uKTsKIApAQCAtNTMzLDcgKzUzMyw3IEBACiAKIAkJCWRlc2NyaXB0b3IgPSBqYmQyX2pvdXJuYWxfZ2V0X2Rlc2NyaXB0b3JfYnVmZmVyKGpvdXJuYWwpOwogCQkJaWYgKCFkZXNjcmlwdG9yKSB7Ci0JCQkJX19qYmQyX2pvdXJuYWxfYWJvcnRfaGFyZChqb3VybmFsKTsKKwkJCQlqYmQyX2pvdXJuYWxfYWJvcnQoam91cm5hbCwgLUVJTyk7CiAJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTU2Niw3ICs1NjYsNyBAQAogCQkgICBhbmQgcmVwZWF0IHRoaXMgbG9vcDogd2UnbGwgZmFsbCBpbnRvIHRoZQogCQkgICByZWZpbGUtb24tYWJvcnQgY29uZGl0aW9uIGFib3ZlLiAqLwogCQlpZiAoZXJyKSB7Ci0JCQlfX2piZDJfam91cm5hbF9hYm9ydF9oYXJkKGpvdXJuYWwpOworCQkJamJkMl9qb3VybmFsX2Fib3J0KGpvdXJuYWwsIGVycik7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC03NTcsNyArNzU3LDcgQEAKIAkJZXJyID0gLUVJTzsKIAogCWlmIChlcnIpCi0JCV9famJkMl9qb3VybmFsX2Fib3J0X2hhcmQoam91cm5hbCk7CisJCWpiZDJfam91cm5hbF9hYm9ydChqb3VybmFsLCBlcnIpOwogCiAJLyogRW5kIG9mIGEgdHJhbnNhY3Rpb24hICBGaW5hbGx5LCB3ZSBjYW4gZG8gY2hlY2twb2ludAogICAgICAgICAgICBwcm9jZXNzaW5nOiBhbnkgYnVmZmVycyBjb21taXR0ZWQgYXMgYSByZXN1bHQgb2YgdGhpcwpAQCAtODAxLDE0ICs4MDEsMTQgQEAKIAkJICogT3RoZXJ3aXNlLCB3ZSBjYW4ganVzdCB0aHJvdyBhd2F5IHRoZSBmcm96ZW4gZGF0YSBub3cuCiAJCSAqLwogCQlpZiAoamgtPmJfY29tbWl0dGVkX2RhdGEpIHsKLQkJCWpiZDJfc2xhYl9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKKwkJCWpiZDJfZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQlqaC0+Yl9jb21taXR0ZWRfZGF0YSA9IE5VTEw7CiAJCQlpZiAoamgtPmJfZnJvemVuX2RhdGEpIHsKIAkJCQlqaC0+Yl9jb21taXR0ZWRfZGF0YSA9IGpoLT5iX2Zyb3plbl9kYXRhOwogCQkJCWpoLT5iX2Zyb3plbl9kYXRhID0gTlVMTDsKIAkJCX0KIAkJfSBlbHNlIGlmIChqaC0+Yl9mcm96ZW5fZGF0YSkgewotCQkJamJkMl9zbGFiX2ZyZWUoamgtPmJfZnJvemVuX2RhdGEsIGJoLT5iX3NpemUpOworCQkJamJkMl9mcmVlKGpoLT5iX2Zyb3plbl9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCWpoLT5iX2Zyb3plbl9kYXRhID0gTlVMTDsKIAkJfQogCmRpZmYgLS1naXQgYS9mcy9qYmQyL2pvdXJuYWwuYyBiL2ZzL2piZDIvam91cm5hbC5jCmluZGV4IGYzNzMyNGEuLjZkZGM1NTMgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvam91cm5hbC5jCisrKyBiL2ZzL2piZDIvam91cm5hbC5jCkBAIC04NCw3ICs4NCw2IEBACiAKIHN0YXRpYyBpbnQgam91cm5hbF9jb252ZXJ0X3N1cGVyYmxvY2tfdjEoam91cm5hbF90ICosIGpvdXJuYWxfc3VwZXJibG9ja190ICopOwogc3RhdGljIHZvaWQgX19qb3VybmFsX2Fib3J0X3NvZnQgKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IGVycm5vKTsKLXN0YXRpYyBpbnQgamJkMl9qb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihzaXplX3Qgc2xhYl9zaXplKTsKIAogLyoKICAqIEhlbHBlciBmdW5jdGlvbiB1c2VkIHRvIG1hbmFnZSBjb21taXQgdGltZW91dHMKQEAgLTMzNSwxMCArMzM0LDEwIEBACiAJCWNoYXIgKnRtcDsKIAogCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoX2luKTsKLQkJdG1wID0gamJkMl9zbGFiX2FsbG9jKGJoX2luLT5iX3NpemUsIEdGUF9OT0ZTKTsKKwkJdG1wID0gamJkMl9hbGxvYyhiaF9pbi0+Yl9zaXplLCBHRlBfTk9GUyk7CiAJCWpiZF9sb2NrX2JoX3N0YXRlKGJoX2luKTsKIAkJaWYgKGpoX2luLT5iX2Zyb3plbl9kYXRhKSB7Ci0JCQlqYmQyX3NsYWJfZnJlZSh0bXAsIGJoX2luLT5iX3NpemUpOworCQkJamJkMl9mcmVlKHRtcCwgYmhfaW4tPmJfc2l6ZSk7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQogCkBAIC02NTUsMTAgKzY1NCw5IEBACiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCBlcnI7CiAKLQlqb3VybmFsID0gamJkX2ttYWxsb2Moc2l6ZW9mKCpqb3VybmFsKSwgR0ZQX0tFUk5FTCk7CisJam91cm5hbCA9IGt6YWxsb2Moc2l6ZW9mKCpqb3VybmFsKSwgR0ZQX0tFUk5FTHxfX0dGUF9OT0ZBSUwpOwogCWlmICgham91cm5hbCkKIAkJZ290byBmYWlsOwotCW1lbXNldChqb3VybmFsLCAwLCBzaXplb2YoKmpvdXJuYWwpKTsKIAogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmpvdXJuYWwtPmpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmpvdXJuYWwtPmpfd2FpdF9sb2dzcGFjZSk7CkBAIC02NzIsNyArNjcwLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmam91cm5hbC0+al9saXN0X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCi0Jam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWwgPSAoSFogKiBKQkRfREVGQVVMVF9NQVhfQ09NTUlUX0FHRSk7CisJam91cm5hbC0+al9jb21taXRfaW50ZXJ2YWwgPSAoSFogKiBKQkQyX0RFRkFVTFRfTUFYX0NPTU1JVF9BR0UpOwogCiAJLyogVGhlIGpvdXJuYWwgaXMgbWFya2VkIGZvciBlcnJvciB1bnRpbCB3ZSBzdWNjZWVkIHdpdGggcmVjb3ZlcnkhICovCiAJam91cm5hbC0+al9mbGFncyA9IEpCRDJfQUJPUlQ7CkBAIC0xMDk2LDEzICsxMDk0LDYgQEAKIAkJfQogCX0KIAotCS8qCi0JICogQ3JlYXRlIGEgc2xhYiBmb3IgdGhpcyBibG9ja3NpemUKLQkgKi8KLQllcnIgPSBqYmQyX2pvdXJuYWxfY3JlYXRlX2piZF9zbGFiKGJlMzJfdG9fY3B1KHNiLT5zX2Jsb2Nrc2l6ZSkpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAkvKiBMZXQgdGhlIHJlY292ZXJ5IGNvZGUgY2hlY2sgd2hldGhlciBpdCBuZWVkcyB0byByZWNvdmVyIGFueQogCSAqIGRhdGEgZnJvbSB0aGUgam91cm5hbC4gKi8KIAlpZiAoamJkMl9qb3VybmFsX3JlY292ZXIoam91cm5hbCkpCkBAIC0xNjIxLDg5ICsxNjEyLDkgQEAKIHNpemVfdCBqb3VybmFsX3RhZ19ieXRlcyhqb3VybmFsX3QgKmpvdXJuYWwpCiB7CiAJaWYgKEpCRDJfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoam91cm5hbCwgSkJEMl9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkKLQkJcmV0dXJuIEpCRF9UQUdfU0laRTY0OworCQlyZXR1cm4gSkJEMl9UQUdfU0laRTY0OwogCWVsc2UKLQkJcmV0dXJuIEpCRF9UQUdfU0laRTMyOwotfQotCi0vKgotICogU2ltcGxlIHN1cHBvcnQgZm9yIHJldHJ5aW5nIG1lbW9yeSBhbGxvY2F0aW9ucy4gIEludHJvZHVjZWQgdG8gaGVscCB0bwotICogZGVidWcgZGlmZmVyZW50IFZNIGRlYWRsb2NrIGF2b2lkYW5jZSBzdHJhdGVnaWVzLgotICovCi12b2lkICogX19qYmQyX2ttYWxsb2MgKGNvbnN0IGNoYXIgKndoZXJlLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsIGludCByZXRyeSkKLXsKLQlyZXR1cm4ga21hbGxvYyhzaXplLCBmbGFncyB8IChyZXRyeSA/IF9fR0ZQX05PRkFJTCA6IDApKTsKLX0KLQotLyoKLSAqIGpiZCBzbGFiIG1hbmFnZW1lbnQ6IGNyZWF0ZSAxaywgMmssIDRrLCA4ayBzbGFicyBhcyBuZWVkZWQKLSAqIGFuZCBhbGxvY2F0ZSBmcm96ZW4gYW5kIGNvbW1pdCBidWZmZXJzIGZyb20gdGhlc2Ugc2xhYnMuCi0gKgotICogUmVhc29uIGZvciBkb2luZyB0aGlzIGlzIHRvIGF2b2lkLCBTTEFCX0RFQlVHIC0gc2luY2UgaXQgY291bGQKLSAqIGNhdXNlIGJoIHRvIGNyb3NzIHBhZ2UgYm91bmRhcnkuCi0gKi8KLQotI2RlZmluZSBKQkRfTUFYX1NMQUJTIDUKLSNkZWZpbmUgSkJEX1NMQUJfSU5ERVgoc2l6ZSkgIChzaXplID4+IDExKQotCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmpiZF9zbGFiW0pCRF9NQVhfU0xBQlNdOwotc3RhdGljIGNvbnN0IGNoYXIgKmpiZF9zbGFiX25hbWVzW0pCRF9NQVhfU0xBQlNdID0gewotCSJqYmQyXzFrIiwgImpiZDJfMmsiLCAiamJkMl80ayIsIE5VTEwsICJqYmQyXzhrIgotfTsKLQotc3RhdGljIHZvaWQgamJkMl9qb3VybmFsX2Rlc3Ryb3lfamJkX3NsYWJzKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSkJEX01BWF9TTEFCUzsgaSsrKSB7Ci0JCWlmIChqYmRfc2xhYltpXSkKLQkJCWttZW1fY2FjaGVfZGVzdHJveShqYmRfc2xhYltpXSk7Ci0JCWpiZF9zbGFiW2ldID0gTlVMTDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgamJkMl9qb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihzaXplX3Qgc2xhYl9zaXplKQotewotCWludCBpID0gSkJEX1NMQUJfSU5ERVgoc2xhYl9zaXplKTsKLQotCUJVR19PTihpID49IEpCRF9NQVhfU0xBQlMpOwotCi0JLyoKLQkgKiBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBzbGFiIGNyZWF0ZWQgZm9yIHRoaXMgc2l6ZQotCSAqLwotCWlmIChqYmRfc2xhYltpXSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIENyZWF0ZSBhIHNsYWIgYW5kIGZvcmNlIGFsaWdubWVudCB0byBiZSBzYW1lIGFzIHNsYWJzaXplIC0KLQkgKiB0aGlzIHdpbGwgbWFrZSBzdXJlIHRoYXQgYWxsb2NhdGlvbnMgd29uJ3QgY3Jvc3MgdGhlIHBhZ2UKLQkgKiBib3VuZGFyeS4KLQkgKi8KLQlqYmRfc2xhYltpXSA9IGttZW1fY2FjaGVfY3JlYXRlKGpiZF9zbGFiX25hbWVzW2ldLAotCQkJCXNsYWJfc2l6ZSwgc2xhYl9zaXplLCAwLCBOVUxMKTsKLQlpZiAoIWpiZF9zbGFiW2ldKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJKQkQ6IG5vIG1lbW9yeSBmb3IgamJkX3NsYWIgY2FjaGVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgKiBqYmQyX3NsYWJfYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKQotewotCWludCBpZHg7Ci0KLQlpZHggPSBKQkRfU0xBQl9JTkRFWChzaXplKTsKLQlCVUdfT04oamJkX3NsYWJbaWR4XSA9PSBOVUxMKTsKLQlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhqYmRfc2xhYltpZHhdLCBmbGFncyB8IF9fR0ZQX05PRkFJTCk7Ci19Ci0KLXZvaWQgamJkMl9zbGFiX2ZyZWUodm9pZCAqcHRyLCAgc2l6ZV90IHNpemUpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IEpCRF9TTEFCX0lOREVYKHNpemUpOwotCUJVR19PTihqYmRfc2xhYltpZHhdID09IE5VTEwpOwotCWttZW1fY2FjaGVfZnJlZShqYmRfc2xhYltpZHhdLCBwdHIpOworCQlyZXR1cm4gSkJEMl9UQUdfU0laRTMyOwogfQogCiAvKgpAQCAtMTc3MCw3ICsxNjgxLDcgQEAKIHsKICNpZmRlZiBDT05GSUdfSkJEMl9ERUJVRwogCWF0b21pY19kZWMoJm5yX2pvdXJuYWxfaGVhZHMpOwotCW1lbXNldChqaCwgSkJEX1BPSVNPTl9GUkVFLCBzaXplb2YoKmpoKSk7CisJbWVtc2V0KGpoLCBKQkQyX1BPSVNPTl9GUkVFLCBzaXplb2YoKmpoKSk7CiAjZW5kaWYKIAlrbWVtX2NhY2hlX2ZyZWUoamJkMl9qb3VybmFsX2hlYWRfY2FjaGUsIGpoKTsKIH0KQEAgLTE4OTMsMTMgKzE4MDQsMTMgQEAKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZnJlZWluZyAiCiAJCQkJCQkiYl9mcm96ZW5fZGF0YVxuIiwKIAkJCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCQkJamJkMl9zbGFiX2ZyZWUoamgtPmJfZnJvemVuX2RhdGEsIGJoLT5iX3NpemUpOworCQkJCWpiZDJfZnJlZShqaC0+Yl9mcm96ZW5fZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQl9CiAJCQlpZiAoamgtPmJfY29tbWl0dGVkX2RhdGEpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZnJlZWluZyAiCiAJCQkJCQkiYl9jb21taXR0ZWRfZGF0YVxuIiwKIAkJCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCQkJamJkMl9zbGFiX2ZyZWUoamgtPmJfY29tbWl0dGVkX2RhdGEsIGJoLT5iX3NpemUpOworCQkJCWpiZDJfZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQl9CiAJCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJCWpoLT5iX2JoID0gTlVMTDsJLyogZGVidWcsIHJlYWxseSAqLwpAQCAtMTk1MywxNiArMTg2NCwxNCBAQAogLyoKICAqIGRlYnVnZnMgdHVuYWJsZXMKICAqLwotI2lmIGRlZmluZWQoQ09ORklHX0pCRDJfREVCVUcpCi11OCBqYmQyX2pvdXJuYWxfZW5hYmxlX2RlYnVnOworI2lmZGVmIENPTkZJR19KQkQyX0RFQlVHCit1OCBqYmQyX2pvdXJuYWxfZW5hYmxlX2RlYnVnIF9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MKGpiZDJfam91cm5hbF9lbmFibGVfZGVidWcpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19KQkQyX0RFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAogI2RlZmluZSBKQkQyX0RFQlVHX05BTUUgImpiZDItZGVidWciCiAKLXN0cnVjdCBkZW50cnkgKmpiZDJfZGVidWdmc19kaXIsICpqYmQyX2RlYnVnOworc3RhdGljIHN0cnVjdCBkZW50cnkgKmpiZDJfZGVidWdmc19kaXI7CitzdGF0aWMgc3RydWN0IGRlbnRyeSAqamJkMl9kZWJ1ZzsKIAogc3RhdGljIHZvaWQgX19pbml0IGpiZDJfY3JlYXRlX2RlYnVnZnNfZW50cnkodm9pZCkKIHsKQEAgLTE5NzUsMjQgKzE4ODQsMTggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGpiZDJfcmVtb3ZlX2RlYnVnZnNfZW50cnkodm9pZCkKIHsKLQlpZiAoamJkMl9kZWJ1ZykKLQkJZGVidWdmc19yZW1vdmUoamJkMl9kZWJ1Zyk7Ci0JaWYgKGpiZDJfZGVidWdmc19kaXIpCi0JCWRlYnVnZnNfcmVtb3ZlKGpiZDJfZGVidWdmc19kaXIpOworCWRlYnVnZnNfcmVtb3ZlKGpiZDJfZGVidWcpOworCWRlYnVnZnNfcmVtb3ZlKGpiZDJfZGVidWdmc19kaXIpOwogfQogCiAjZWxzZQogCiBzdGF0aWMgdm9pZCBfX2luaXQgamJkMl9jcmVhdGVfZGVidWdmc19lbnRyeSh2b2lkKQogewotCWRvIHsKLQl9IHdoaWxlICgwKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGpiZDJfcmVtb3ZlX2RlYnVnZnNfZW50cnkodm9pZCkKIHsKLQlkbyB7Ci0JfSB3aGlsZSAoMCk7CiB9CiAKICNlbmRpZgpAQCAtMjA0MCw3ICsxOTQzLDYgQEAKIAlqYmQyX2pvdXJuYWxfZGVzdHJveV9yZXZva2VfY2FjaGVzKCk7CiAJamJkMl9qb3VybmFsX2Rlc3Ryb3lfamJkMl9qb3VybmFsX2hlYWRfY2FjaGUoKTsKIAlqYmQyX2pvdXJuYWxfZGVzdHJveV9oYW5kbGVfY2FjaGUoKTsKLQlqYmQyX2pvdXJuYWxfZGVzdHJveV9qYmRfc2xhYnMoKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgam91cm5hbF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9mcy9qYmQyL3JlY292ZXJ5LmMgYi9mcy9qYmQyL3JlY292ZXJ5LmMKaW5kZXggYjUwYmU4YS4uZDBjZTYyNyAxMDA2NDQKLS0tIGEvZnMvamJkMi9yZWNvdmVyeS5jCisrKyBiL2ZzL2piZDIvcmVjb3ZlcnkuYwpAQCAtMzExLDcgKzMxMSw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyByZWFkX3RhZ19ibG9jayhpbnQgdGFnX2J5dGVzLCBqb3VybmFsX2Jsb2NrX3RhZ190ICp0YWcpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIGJsb2NrID0gYmUzMl90b19jcHUodGFnLT50X2Jsb2NrbnIpOwotCWlmICh0YWdfYnl0ZXMgPiBKQkRfVEFHX1NJWkUzMikKKwlpZiAodGFnX2J5dGVzID4gSkJEMl9UQUdfU0laRTMyKQogCQlibG9jayB8PSAodTY0KWJlMzJfdG9fY3B1KHRhZy0+dF9ibG9ja25yX2hpZ2gpIDw8IDMyOwogCXJldHVybiBibG9jazsKIH0KZGlmZiAtLWdpdCBhL2ZzL2piZDIvcmV2b2tlLmMgYi9mcy9qYmQyL3Jldm9rZS5jCmluZGV4IDAxZDg4OTcuLjM1OTVmZDQgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvcmV2b2tlLmMKKysrIGIvZnMvamJkMi9yZXZva2UuYwpAQCAtMzUyLDcgKzM1Miw3IEBACiAJCWlmIChiaCkKIAkJCUJVRkZFUl9UUkFDRShiaCwgImZvdW5kIG9uIGhhc2giKTsKIAl9Ci0jaWZkZWYgSkJEX0VYUEVOU0lWRV9DSEVDS0lORworI2lmZGVmIEpCRDJfRVhQRU5TSVZFX0NIRUNLSU5HCiAJZWxzZSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgyOwogCkBAIC00NTMsNyArNDUzLDcgQEAKIAkJfQogCX0KIAotI2lmZGVmIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcKKyNpZmRlZiBKQkQyX0VYUEVOU0lWRV9DSEVDS0lORwogCS8qIFRoZXJlIGJldHRlciBub3QgYmUgb25lIGxlZnQgYmVoaW5kIGJ5IG5vdyEgKi8KIAlyZWNvcmQgPSBmaW5kX3Jldm9rZV9yZWNvcmQoam91cm5hbCwgYmgtPmJfYmxvY2tucik7CiAJSl9BU1NFUlRfSkgoamgsIHJlY29yZCA9PSBOVUxMKTsKZGlmZiAtLWdpdCBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZDIvdHJhbnNhY3Rpb24uYwppbmRleCA3OTQ2ZmY0Li5iMWZjZjJiIDEwMDY0NAotLS0gYS9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCkBAIC05NiwxMyArOTYsMTIgQEAKIAogYWxsb2NfdHJhbnNhY3Rpb246CiAJaWYgKCFqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pIHsKLQkJbmV3X3RyYW5zYWN0aW9uID0gamJkX2ttYWxsb2Moc2l6ZW9mKCpuZXdfdHJhbnNhY3Rpb24pLAotCQkJCQkJR0ZQX05PRlMpOworCQluZXdfdHJhbnNhY3Rpb24gPSBremFsbG9jKHNpemVvZigqbmV3X3RyYW5zYWN0aW9uKSwKKwkJCQkJCUdGUF9OT0ZTfF9fR0ZQX05PRkFJTCk7CiAJCWlmICghbmV3X3RyYW5zYWN0aW9uKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJbWVtc2V0KG5ld190cmFuc2FjdGlvbiwgMCwgc2l6ZW9mKCpuZXdfdHJhbnNhY3Rpb24pKTsKIAl9CiAKIAlqYmRfZGVidWcoMywgIk5ldyBoYW5kbGUgJXAgZ29pbmcgbGl2ZS5cbiIsIGhhbmRsZSk7CkBAIC0yMzYsNyArMjM1LDcgQEAKIC8qIEFsbG9jYXRlIGEgbmV3IGhhbmRsZS4gIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGluIGEgc2xhYi4uLiAqLwogc3RhdGljIGhhbmRsZV90ICpuZXdfaGFuZGxlKGludCBuYmxvY2tzKQogewotCWhhbmRsZV90ICpoYW5kbGUgPSBqYmRfYWxsb2NfaGFuZGxlKEdGUF9OT0ZTKTsKKwloYW5kbGVfdCAqaGFuZGxlID0gamJkMl9hbGxvY19oYW5kbGUoR0ZQX05PRlMpOwogCWlmICghaGFuZGxlKQogCQlyZXR1cm4gTlVMTDsKIAltZW1zZXQoaGFuZGxlLCAwLCBzaXplb2YoKmhhbmRsZSkpOwpAQCAtMjgyLDcgKzI4MSw3IEBACiAKIAllcnIgPSBzdGFydF90aGlzX2hhbmRsZShqb3VybmFsLCBoYW5kbGUpOwogCWlmIChlcnIgPCAwKSB7Ci0JCWpiZF9mcmVlX2hhbmRsZShoYW5kbGUpOworCQlqYmQyX2ZyZWVfaGFuZGxlKGhhbmRsZSk7CiAJCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IE5VTEw7CiAJCWhhbmRsZSA9IEVSUl9QVFIoZXJyKTsKIAl9CkBAIC02NjgsNyArNjY3LDcgQEAKIAkJCQlKQlVGRkVSX1RSQUNFKGpoLCAiYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXIiKTsKIAkJCQlqYmRfdW5sb2NrX2JoX3N0YXRlKGJoKTsKIAkJCQlmcm96ZW5fYnVmZmVyID0KLQkJCQkJamJkMl9zbGFiX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLAorCQkJCQlqYmQyX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLAogCQkJCQkJCSBHRlBfTk9GUyk7CiAJCQkJaWYgKCFmcm96ZW5fYnVmZmVyKSB7CiAJCQkJCXByaW50ayhLRVJOX0VNRVJHCkBAIC03MjgsNyArNzI3LDcgQEAKIAogb3V0OgogCWlmICh1bmxpa2VseShmcm96ZW5fYnVmZmVyKSkJLyogSXQncyB1c3VhbGx5IE5VTEwgKi8KLQkJamJkMl9zbGFiX2ZyZWUoZnJvemVuX2J1ZmZlciwgYmgtPmJfc2l6ZSk7CisJCWpiZDJfZnJlZShmcm96ZW5fYnVmZmVyLCBiaC0+Yl9zaXplKTsKIAogCUpCVUZGRVJfVFJBQ0UoamgsICJleGl0Iik7CiAJcmV0dXJuIGVycm9yOwpAQCAtODgxLDcgKzg4MCw3IEBACiAKIHJlcGVhdDoKIAlpZiAoIWpoLT5iX2NvbW1pdHRlZF9kYXRhKSB7Ci0JCWNvbW1pdHRlZF9kYXRhID0gamJkMl9zbGFiX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLCBHRlBfTk9GUyk7CisJCWNvbW1pdHRlZF9kYXRhID0gamJkMl9hbGxvYyhqaDJiaChqaCktPmJfc2l6ZSwgR0ZQX05PRlMpOwogCQlpZiAoIWNvbW1pdHRlZF9kYXRhKSB7CiAJCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IE5vIG1lbW9yeSBmb3IgY29tbWl0dGVkIGRhdGFcbiIsCiAJCQkJX19GVU5DVElPTl9fKTsKQEAgLTkwOCw3ICs5MDcsNyBAQAogb3V0OgogCWpiZDJfam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKIAlpZiAodW5saWtlbHkoY29tbWl0dGVkX2RhdGEpKQotCQlqYmQyX3NsYWJfZnJlZShjb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CisJCWpiZDJfZnJlZShjb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTQxMSw3ICsxNDEwLDcgQEAKIAkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7CiAJfQogCi0JamJkX2ZyZWVfaGFuZGxlKGhhbmRsZSk7CisJamJkMl9mcmVlX2hhbmRsZShoYW5kbGUpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2RlYnVnLmggYi9mcy9qZmZzMi9kZWJ1Zy5oCmluZGV4IDJhNDlmMmMuLjQxMzBhZGEgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2RlYnVnLmgKKysrIGIvZnMvamZmczIvZGVidWcuaApAQCAtODAsMjggKzgwLDI4IEBACiAjZGVmaW5lIEpGRlMyX0VSUk9SKGZtdCwgLi4uKQkJCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCXByaW50ayhKRkZTMl9FUlJfTVNHX1BSRUZJWAkJCQlcCi0JCQkiICglZCkgJXM6ICIgZm10LCBjdXJyZW50LT5waWQsCQkJXAorCQkJIiAoJWQpICVzOiAiIGZtdCwgdGFza19waWRfbnIoY3VycmVudCksCQlcCiAJCQlfX0ZVTkNUSU9OX18gLCAjI19fVkFfQVJHU19fKTsJCQlcCiAJfSB3aGlsZSgwKQogCiAjZGVmaW5lIEpGRlMyX1dBUk5JTkcoZm10LCAuLi4pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJcHJpbnRrKEpGRlMyX1dBUk5fTVNHX1BSRUZJWAkJCQlcCi0JCQkiICglZCkgJXM6ICIgZm10LCBjdXJyZW50LT5waWQsCQkJXAorCQkJIiAoJWQpICVzOiAiIGZtdCwgdGFza19waWRfbnIoY3VycmVudCksCQlcCiAJCQlfX0ZVTkNUSU9OX18gLCAjI19fVkFfQVJHU19fKTsJCQlcCiAJfSB3aGlsZSgwKQogCiAjZGVmaW5lIEpGRlMyX05PVElDRShmbXQsIC4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlwcmludGsoSkZGUzJfTk9USUNFX01TR19QUkVGSVgJCQkJXAotCQkJIiAoJWQpICVzOiAiIGZtdCwgY3VycmVudC0+cGlkLAkJCVwKKwkJCSIgKCVkKSAlczogIiBmbXQsIHRhc2tfcGlkX25yKGN1cnJlbnQpLAkJXAogCQkJX19GVU5DVElPTl9fICwgIyNfX1ZBX0FSR1NfXyk7CQkJXAogCX0gd2hpbGUoMCkKIAogI2RlZmluZSBKRkZTMl9ERUJVRyhmbXQsIC4uLikJCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlwcmludGsoSkZGUzJfREJHX01TR19QUkVGSVgJCQkJXAotCQkJIiAoJWQpICVzOiAiIGZtdCwgY3VycmVudC0+cGlkLAkJCVwKKwkJCSIgKCVkKSAlczogIiBmbXQsIHRhc2tfcGlkX25yKGN1cnJlbnQpLAkJXAogCQkJX19GVU5DVElPTl9fICwgIyNfX1ZBX0FSR1NfXyk7CQkJXAogCX0gd2hpbGUoMCkKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kdHJlZS5jIGIvZnMvamZzL2pmc19kdHJlZS5jCmluZGV4IGRmMGI4NTMuLmRmMjVlY2MgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZHRyZWUuYworKysgYi9mcy9qZnMvamZzX2R0cmVlLmMKQEAgLTc3Myw3ICs3NzMsNyBAQAogCSAgICAgIGdldENoaWxkOgogCQkvKiB1cGRhdGUgbWF4LiBudW1iZXIgb2YgcGFnZXMgdG8gc3BsaXQgKi8KIAkJaWYgKEJUX1NUQUNLX0ZVTEwoYnRzdGFjaykpIHsKLQkJCS8qIFNvbWV0aGluZydzIGNvcnJ1cHRlZCwgbWFyayBmaWxlc3l0ZW0gZGlydHkgc28KKwkJCS8qIFNvbWV0aGluZydzIGNvcnJ1cHRlZCwgbWFyayBmaWxlc3lzdGVtIGRpcnR5IHNvCiAJCQkgKiBjaGtkc2sgd2lsbCBmaXggaXQuCiAJCQkgKi8KIAkJCWpmc19lcnJvcihzYiwgInN0YWNrIG92ZXJydW4gaW4gZHRTZWFyY2ghIik7CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCA0NjRlZWNjLi4xZTVjNzE2IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTE2NTksOCArMTY1OSwxMCBAQAogCQllcnJvciA9IGxvY2tzX3ZlcmlmeV9sb2NrZWQoaW5vZGUpOwogCQlpZiAoIWVycm9yKSB7CiAJCQlEUVVPVF9JTklUKGlub2RlKTsKLQkJCQotCQkJZXJyb3IgPSBkb190cnVuY2F0ZShkZW50cnksIDAsIEFUVFJfTVRJTUV8QVRUUl9DVElNRSwgTlVMTCk7CisKKwkJCWVycm9yID0gZG9fdHJ1bmNhdGUoZGVudHJ5LCAwLAorCQkJCQkgICAgQVRUUl9NVElNRXxBVFRSX0NUSU1FfEFUVFJfT1BFTiwKKwkJCQkJICAgIE5VTEwpOwogCQl9CiAJCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOwogCQlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jCmluZGV4IDA3ZGFhNzkuLjg2MDc1MjkgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVzcGFjZS5jCisrKyBiL2ZzL25hbWVzcGFjZS5jCkBAIC0xNDExLDcgKzE0MTEsNyBAQAogCQltbnRfZmxhZ3MgfD0gTU5UX1JFTEFUSU1FOwogCiAJZmxhZ3MgJj0gfihNU19OT1NVSUQgfCBNU19OT0VYRUMgfCBNU19OT0RFViB8IE1TX0FDVElWRSB8Ci0JCSAgIE1TX05PQVRJTUUgfCBNU19OT0RJUkFUSU1FIHwgTVNfUkVMQVRJTUUpOworCQkgICBNU19OT0FUSU1FIHwgTVNfTk9ESVJBVElNRSB8IE1TX1JFTEFUSU1FfCBNU19LRVJOTU9VTlQpOwogCiAJLyogLi4uIGFuZCBnZXQgdGhlIG1vdW50cG9pbnQgKi8KIAlyZXR2YWwgPSBwYXRoX2xvb2t1cChkaXJfbmFtZSwgTE9PS1VQX0ZPTExPVywgJm5kKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IGFmOGIyMzUuLjExODMzZjQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtMTY4LDcgKzE2OCw4IEBACiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCiAJc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7Ci0Ja2ZyZWUoZGVsZWdhdGlvbik7CisJaWYgKGRlbGVnYXRpb24gIT0gTlVMTCkKKwkJbmZzX2ZyZWVfZGVsZWdhdGlvbihkZWxlZ2F0aW9uKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggOGVjN2ZiZC4uMzUzMzQ1MyAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtNTYyLDYgKzU2Miw3IEBACiAJbmZzX2ZhdHRyX2luaXQoJmZhdHRyKTsKIAlkZXNjLT5lbnRyeSA9ICZteV9lbnRyeTsKIAorCW5mc19ibG9ja19zaWxseXJlbmFtZShkZW50cnkpOwogCXdoaWxlKCFkZXNjLT5lbnRyeS0+ZW9mKSB7CiAJCXJlcyA9IHJlYWRkaXJfc2VhcmNoX3BhZ2VjYWNoZShkZXNjKTsKIApAQCAtNTkyLDYgKzU5Myw3IEBACiAJCQlicmVhazsKIAkJfQogCX0KKwluZnNfdW5ibG9ja19zaWxseXJlbmFtZShkZW50cnkpOwogCXVubG9ja19rZXJuZWwoKTsKIAlpZiAocmVzID4gMCkKIAkJcmVzID0gMDsKQEAgLTg2Niw2ICs4NjgsNyBAQAogc3RhdGljIHN0cnVjdCBkZW50cnkgKm5mc19sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKiBkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBkZW50cnkgKnJlczsKKwlzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQ7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJaW50IGVycm9yOwogCXN0cnVjdCBuZnNfZmggZmhhbmRsZTsKQEAgLTg5NCwyNiArODk3LDMxIEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCS8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHNpbGx5ZGVsZXRlcyAqLworCW5mc19ibG9ja19zaWxseXJlbmFtZShwYXJlbnQpOwogCWVycm9yID0gTkZTX1BST1RPKGRpciktPmxvb2t1cChkaXIsICZkZW50cnktPmRfbmFtZSwgJmZoYW5kbGUsICZmYXR0cik7CiAJaWYgKGVycm9yID09IC1FTk9FTlQpCiAJCWdvdG8gbm9fZW50cnk7CiAJaWYgKGVycm9yIDwgMCkgewogCQlyZXMgPSBFUlJfUFRSKGVycm9yKTsKLQkJZ290byBvdXRfdW5sb2NrOworCQlnb3RvIG91dF91bmJsb2NrX3NpbGx5cmVuYW1lOwogCX0KIAlpbm9kZSA9IG5mc19maGdldChkZW50cnktPmRfc2IsICZmaGFuZGxlLCAmZmF0dHIpOwogCXJlcyA9IChzdHJ1Y3QgZGVudHJ5ICopaW5vZGU7CiAJaWYgKElTX0VSUihyZXMpKQotCQlnb3RvIG91dF91bmxvY2s7CisJCWdvdG8gb3V0X3VuYmxvY2tfc2lsbHlyZW5hbWU7CiAKIG5vX2VudHJ5OgogCXJlcyA9IGRfbWF0ZXJpYWxpc2VfdW5pcXVlKGRlbnRyeSwgaW5vZGUpOwogCWlmIChyZXMgIT0gTlVMTCkgewogCQlpZiAoSVNfRVJSKHJlcykpCi0JCQlnb3RvIG91dF91bmxvY2s7CisJCQlnb3RvIG91dF91bmJsb2NrX3NpbGx5cmVuYW1lOwogCQlkZW50cnkgPSByZXM7CiAJfQogCW5mc19zZXRfdmVyaWZpZXIoZGVudHJ5LCBuZnNfc2F2ZV9jaGFuZ2VfYXR0cmlidXRlKGRpcikpOworb3V0X3VuYmxvY2tfc2lsbHlyZW5hbWU6CisJbmZzX3VuYmxvY2tfc2lsbHlyZW5hbWUocGFyZW50KTsKIG91dF91bmxvY2s6CiAJdW5sb2NrX2tlcm5lbCgpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggZDI5ZjkwZC4uYjNiYjg5ZiAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIHsKIAkvKiBFbnN1cmUgdGhhdCBkaXJ0eSBwYWdlcyBhcmUgZmx1c2hlZCBvdXQgd2l0aCB0aGUgcmlnaHQgY3JlZHMgKi8KIAlpZiAoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCWZpbGVtYXBfZmRhdGF3cml0ZShmaWxwLT5mX21hcHBpbmcpOworCQluZnNfd2JfYWxsKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNSRUxFQVNFKTsKIAlyZXR1cm4gTkZTX1BST1RPKGlub2RlKS0+ZmlsZV9yZWxlYXNlKGlub2RlLCBmaWxwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9pbm9kZS5jIGIvZnMvbmZzL2lub2RlLmMKaW5kZXggNmMyMjQ1My4uZGI1ZDk2ZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2lub2RlLmMKKysrIGIvZnMvbmZzL2lub2RlLmMKQEAgLTM1Nyw2ICszNTcsMTAgQEAKIAogCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNTRVRBVFRSKTsKIAorCS8qIHNraXAgbW9kZSBjaGFuZ2UgaWYgaXQncyBqdXN0IGZvciBjbGVhcmluZyBzZXR1aWQvc2V0Z2lkICovCisJaWYgKGF0dHItPmlhX3ZhbGlkICYgKEFUVFJfS0lMTF9TVUlEIHwgQVRUUl9LSUxMX1NHSUQpKQorCQlhdHRyLT5pYV92YWxpZCAmPSB+QVRUUl9NT0RFOworCiAJaWYgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKSB7CiAJCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSB8fCBhdHRyLT5pYV9zaXplID09IGlfc2l6ZV9yZWFkKGlub2RlKSkKIAkJCWF0dHItPmlhX3ZhbGlkICY9IH5BVFRSX1NJWkU7CkBAIC01MTAsNyArNTE0LDcgQEAKIAlyZXR1cm4gY3R4OwogfQogCi12b2lkIHB1dF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgpCitzdGF0aWMgdm9pZCBfX3B1dF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgsIGludCB3YWl0KQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjdHgtPnBhdGguZGVudHJ5LT5kX2lub2RlOwogCkBAIC01MTgsOCArNTIyLDEyIEBACiAJCXJldHVybjsKIAlsaXN0X2RlbCgmY3R4LT5saXN0KTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JaWYgKGN0eC0+c3RhdGUgIT0gTlVMTCkKLQkJbmZzNF9jbG9zZV9zdGF0ZSgmY3R4LT5wYXRoLCBjdHgtPnN0YXRlLCBjdHgtPm1vZGUpOworCWlmIChjdHgtPnN0YXRlICE9IE5VTEwpIHsKKwkJaWYgKHdhaXQpCisJCQluZnM0X2Nsb3NlX3N5bmMoJmN0eC0+cGF0aCwgY3R4LT5zdGF0ZSwgY3R4LT5tb2RlKTsKKwkJZWxzZQorCQkJbmZzNF9jbG9zZV9zdGF0ZSgmY3R4LT5wYXRoLCBjdHgtPnN0YXRlLCBjdHgtPm1vZGUpOworCX0KIAlpZiAoY3R4LT5jcmVkICE9IE5VTEwpCiAJCXB1dF9ycGNjcmVkKGN0eC0+Y3JlZCk7CiAJZHB1dChjdHgtPnBhdGguZGVudHJ5KTsKQEAgLTUyNyw2ICs1MzUsMTYgQEAKIAlrZnJlZShjdHgpOwogfQogCit2b2lkIHB1dF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgpCit7CisJX19wdXRfbmZzX29wZW5fY29udGV4dChjdHgsIDApOworfQorCitzdGF0aWMgdm9pZCBwdXRfbmZzX29wZW5fY29udGV4dF9zeW5jKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgpCit7CisJX19wdXRfbmZzX29wZW5fY29udGV4dChjdHgsIDEpOworfQorCiAvKgogICogRW5zdXJlIHRoYXQgbW1hcCBoYXMgYSByZWNlbnQgUlBDIGNyZWRlbnRpYWwgZm9yIHVzZSB3aGVuIHdyaXRpbmcgb3V0CiAgKiBzaGFyZWQgcGFnZXMKQEAgLTU3Myw3ICs1OTEsNyBAQAogCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwogCQlsaXN0X21vdmVfdGFpbCgmY3R4LT5saXN0LCAmTkZTX0koaW5vZGUpLT5vcGVuX2ZpbGVzKTsKIAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQlwdXRfbmZzX29wZW5fY29udGV4dChjdHgpOworCQlwdXRfbmZzX29wZW5fY29udGV4dF9zeW5jKGN0eCk7CiAJfQogfQogCkBAIC0xMTY1LDYgKzExODMsOSBAQAogCUlOSVRfUkFESVhfVFJFRSgmbmZzaS0+bmZzX3BhZ2VfdHJlZSwgR0ZQX0FUT01JQyk7CiAJbmZzaS0+bmNvbW1pdCA9IDA7CiAJbmZzaS0+bnBhZ2VzID0gMDsKKwlhdG9taWNfc2V0KCZuZnNpLT5zaWxseV9jb3VudCwgMSk7CisJSU5JVF9ITElTVF9IRUFEKCZuZnNpLT5zaWxseV9saXN0KTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZuZnNpLT53YWl0cXVldWUpOwogCW5mczRfaW5pdF9vbmNlKG5mc2kpOwogfQogCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNF9mcy5oIGIvZnMvbmZzL25mczRfZnMuaAppbmRleCBkMjgwMmIxLi5iMzUwNjlhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNF9mcy5oCisrKyBiL2ZzL25mcy9uZnM0X2ZzLmgKQEAgLTE3OCw3ICsxNzgsNyBAQAogZXh0ZXJuIGludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKik7CiBleHRlcm4gaW50IG5mczRfcHJvY19hc3luY19yZW5ldyhzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKik7CiBleHRlcm4gaW50IG5mczRfcHJvY19yZW5ldyhzdHJ1Y3QgbmZzX2NsaWVudCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKik7Ci1leHRlcm4gaW50IG5mczRfZG9fY2xvc2Uoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSk7CitleHRlcm4gaW50IG5mczRfZG9fY2xvc2Uoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgaW50IHdhaXQpOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKm5mczRfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBpbnQgbmZzNF9vcGVuX3JldmFsaWRhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOwogZXh0ZXJuIGludCBuZnM0X3NlcnZlcl9jYXBhYmlsaXRpZXMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSk7CkBAIC0yMDksNiArMjA5LDcgQEAKIGV4dGVybiBzdHJ1Y3QgbmZzNF9zdGF0ZSAqIG5mczRfZ2V0X29wZW5fc3RhdGUoc3RydWN0IGlub2RlICosIHN0cnVjdCBuZnM0X3N0YXRlX293bmVyICopOwogZXh0ZXJuIHZvaWQgbmZzNF9wdXRfb3Blbl9zdGF0ZShzdHJ1Y3QgbmZzNF9zdGF0ZSAqKTsKIGV4dGVybiB2b2lkIG5mczRfY2xvc2Vfc3RhdGUoc3RydWN0IHBhdGggKiwgc3RydWN0IG5mczRfc3RhdGUgKiwgbW9kZV90KTsKK2V4dGVybiB2b2lkIG5mczRfY2xvc2Vfc3luYyhzdHJ1Y3QgcGF0aCAqLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqLCBtb2RlX3QpOwogZXh0ZXJuIHZvaWQgbmZzNF9zdGF0ZV9zZXRfbW9kZV9sb2NrZWQoc3RydWN0IG5mczRfc3RhdGUgKiwgbW9kZV90KTsKIGV4dGVybiB2b2lkIG5mczRfc2NoZWR1bGVfc3RhdGVfcmVjb3Zlcnkoc3RydWN0IG5mc19jbGllbnQgKik7CiBleHRlcm4gdm9pZCBuZnM0X3B1dF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X2xvY2tfc3RhdGUgKmxzcCk7CkBAIC0yMzUsNiArMjM2LDcgQEAKICNlbHNlCiAKICNkZWZpbmUgbmZzNF9jbG9zZV9zdGF0ZShhLCBiLCBjKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5mczRfY2xvc2Vfc3luYyhhLCBiLCBjKSBkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovCiAjZW5kaWYgLyogX19MSU5VWF9GU19ORlNfTkZTNF9GUy5IICovCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGNiOTlmZDkuLmYwM2Q5ZDUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogICoKICAqIE5PVEU6IENhbGxlciBtdXN0IGJlIGhvbGRpbmcgdGhlIHNwLT5zb19vd25lciBzZW1hcGhvcmUhCiAgKi8KLWludCBuZnM0X2RvX2Nsb3NlKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpCitpbnQgbmZzNF9kb19jbG9zZShzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihzdGF0ZS0+aW5vZGUpOwogCXN0cnVjdCBuZnM0X2Nsb3NlZGF0YSAqY2FsbGRhdGE7CkBAIC0xMzMzLDggKzEzMzMsMTEgQEAKIAl0YXNrID0gcnBjX3J1bl90YXNrKHNlcnZlci0+Y2xpZW50LCBSUENfVEFTS19BU1lOQywgJm5mczRfY2xvc2Vfb3BzLCBjYWxsZGF0YSk7CiAJaWYgKElTX0VSUih0YXNrKSkKIAkJcmV0dXJuIFBUUl9FUlIodGFzayk7CisJc3RhdHVzID0gMDsKKwlpZiAod2FpdCkKKwkJc3RhdHVzID0gcnBjX3dhaXRfZm9yX2NvbXBsZXRpb25fdGFzayh0YXNrKTsKIAlycGNfcHV0X3Rhc2sodGFzayk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHN0YXR1czsKIG91dF9mcmVlX2NhbGxkYXRhOgogCWtmcmVlKGNhbGxkYXRhKTsKIG91dDoKQEAgLTEzNjUsMTMgKzEzNjgsMTQgQEAKIAl9CiAJcmV0ID0gUFRSX0VSUihmaWxwKTsKIG91dF9jbG9zZToKLQluZnM0X2Nsb3NlX3N0YXRlKHBhdGgsIHN0YXRlLCBuZC0+aW50ZW50Lm9wZW4uZmxhZ3MpOworCW5mczRfY2xvc2Vfc3luYyhwYXRoLCBzdGF0ZSwgbmQtPmludGVudC5vcGVuLmZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdHJ1Y3QgZGVudHJ5ICoKIG5mczRfYXRvbWljX29wZW4oc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OwogCXN0cnVjdCBwYXRoIHBhdGggPSB7CiAJCS5tbnQgPSBuZC0+bW50LAogCQkuZGVudHJ5ID0gZGVudHJ5LApAQCAtMTM5NCw2ICsxMzk4LDkgQEAKIAljcmVkID0gcnBjYXV0aF9sb29rdXBjcmVkKE5GU19DTElFTlQoZGlyKS0+Y2xfYXV0aCwgMCk7CiAJaWYgKElTX0VSUihjcmVkKSkKIAkJcmV0dXJuIChzdHJ1Y3QgZGVudHJ5ICopY3JlZDsKKwlwYXJlbnQgPSBkZW50cnktPmRfcGFyZW50OworCS8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHNpbGx5ZGVsZXRlcyAqLworCW5mc19ibG9ja19zaWxseXJlbmFtZShwYXJlbnQpOwogCXN0YXRlID0gbmZzNF9kb19vcGVuKGRpciwgJnBhdGgsIG5kLT5pbnRlbnQub3Blbi5mbGFncywgJmF0dHIsIGNyZWQpOwogCXB1dF9ycGNjcmVkKGNyZWQpOwogCWlmIChJU19FUlIoc3RhdGUpKSB7CkBAIC0xNDAxLDEyICsxNDA4LDE0IEBACiAJCQlkX2FkZChkZW50cnksIE5VTEwpOwogCQkJbmZzX3NldF92ZXJpZmllcihkZW50cnksIG5mc19zYXZlX2NoYW5nZV9hdHRyaWJ1dGUoZGlyKSk7CiAJCX0KKwkJbmZzX3VuYmxvY2tfc2lsbHlyZW5hbWUocGFyZW50KTsKIAkJcmV0dXJuIChzdHJ1Y3QgZGVudHJ5ICopc3RhdGU7CiAJfQogCXJlcyA9IGRfYWRkX3VuaXF1ZShkZW50cnksIGlncmFiKHN0YXRlLT5pbm9kZSkpOwogCWlmIChyZXMgIT0gTlVMTCkKIAkJcGF0aC5kZW50cnkgPSByZXM7CiAJbmZzX3NldF92ZXJpZmllcihwYXRoLmRlbnRyeSwgbmZzX3NhdmVfY2hhbmdlX2F0dHJpYnV0ZShkaXIpKTsKKwluZnNfdW5ibG9ja19zaWxseXJlbmFtZShwYXJlbnQpOwogCW5mczRfaW50ZW50X3NldF9maWxlKG5kLCAmcGF0aCwgc3RhdGUpOwogCXJldHVybiByZXM7CiB9CkBAIC0xNDQ0LDcgKzE0NTMsNyBAQAogCQluZnM0X2ludGVudF9zZXRfZmlsZShuZCwgJnBhdGgsIHN0YXRlKTsKIAkJcmV0dXJuIDE7CiAJfQotCW5mczRfY2xvc2Vfc3RhdGUoJnBhdGgsIHN0YXRlLCBvcGVuZmxhZ3MpOworCW5mczRfY2xvc2Vfc3luYygmcGF0aCwgc3RhdGUsIG9wZW5mbGFncyk7CiBvdXRfZHJvcDoKIAlkX2Ryb3AoZGVudHJ5KTsKIAlyZXR1cm4gMDsKQEAgLTE4OTgsNyArMTkwNyw3IEBACiAJaWYgKHN0YXR1cyA9PSAwICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfT1BFTikgIT0gMCkKIAkJc3RhdHVzID0gbmZzNF9pbnRlbnRfc2V0X2ZpbGUobmQsICZwYXRoLCBzdGF0ZSk7CiAJZWxzZQotCQluZnM0X2Nsb3NlX3N0YXRlKCZwYXRoLCBzdGF0ZSwgZmxhZ3MpOworCQluZnM0X2Nsb3NlX3N5bmMoJnBhdGgsIHN0YXRlLCBmbGFncyk7CiBvdXQ6CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCBiZmIzNjI2Li4yM2E5YTM2IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC00MjUsNyArNDI1LDcgQEAKIC8qCiAgKiBDbG9zZSB0aGUgY3VycmVudCBmaWxlLgogICovCi12b2lkIG5mczRfY2xvc2Vfc3RhdGUoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgbW9kZV90IG1vZGUpCitzdGF0aWMgdm9pZCBfX25mczRfY2xvc2Uoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgbW9kZV90IG1vZGUsIGludCB3YWl0KQogewogCXN0cnVjdCBuZnM0X3N0YXRlX293bmVyICpvd25lciA9IHN0YXRlLT5vd25lcjsKIAlpbnQgY2FsbF9jbG9zZSA9IDA7CkBAIC00NjYsNyArNDY2LDE3IEBACiAJCW5mczRfcHV0X29wZW5fc3RhdGUoc3RhdGUpOwogCQluZnM0X3B1dF9zdGF0ZV9vd25lcihvd25lcik7CiAJfSBlbHNlCi0JCW5mczRfZG9fY2xvc2UocGF0aCwgc3RhdGUpOworCQluZnM0X2RvX2Nsb3NlKHBhdGgsIHN0YXRlLCB3YWl0KTsKK30KKwordm9pZCBuZnM0X2Nsb3NlX3N0YXRlKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIG1vZGVfdCBtb2RlKQoreworCV9fbmZzNF9jbG9zZShwYXRoLCBzdGF0ZSwgbW9kZSwgMCk7Cit9CisKK3ZvaWQgbmZzNF9jbG9zZV9zeW5jKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUsIG1vZGVfdCBtb2RlKQoreworCV9fbmZzNF9jbG9zZShwYXRoLCBzdGF0ZSwgbW9kZSwgMSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzcm9vdC5jIGIvZnMvbmZzL25mc3Jvb3QuYwppbmRleCBlODdiNDRlLi40YjAzMzQ1IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzcm9vdC5jCisrKyBiL2ZzL25mcy9uZnNyb290LmMKQEAgLTQzLDcgKzQzLDcgQEAKICAqCQkJCWZyb20gYmVpbmcgdXNlZCAodGhhbmtzIHRvIExlbyBTcGlla21hbikKICAqCUFuZHkgV2Fsa2VyCToJQWxsb3cgdG8gc3BlY2lmeSB0aGUgTkZTIHNlcnZlciBpbiBuZnNfcm9vdAogICoJCQkJd2l0aG91dCBnaXZpbmcgYSBwYXRoIG5hbWUKLSAqCVN3ZW4gVGj8bW1sZXIJOglBbGxvdyB0byBzcGVjaWZ5IHRoZSBORlMgb3B0aW9ucyBpbiBuZnNfcm9vdAorICoJU3dlbiBUaMO8bW1sZXIJOglBbGxvdyB0byBzcGVjaWZ5IHRoZSBORlMgb3B0aW9ucyBpbiBuZnNfcm9vdAogICoJCQkJd2l0aG91dCBnaXZpbmcgYSBwYXRoIG5hbWUuIEZpeCBCT09UUCByZXF1ZXN0CiAgKgkJCQlmb3IgZG9tYWlubmFtZSAoZG9tYWlubmFtZSBpcyBOSVMgZG9tYWluLCBub3QKICAqCQkJCUROUyBkb21haW4hKS4gU2tpcCBkdW1teSBkZXZpY2VzIGZvciBCT09UUC4KZGlmZiAtLWdpdCBhL2ZzL25mcy91bmxpbmsuYyBiL2ZzL25mcy91bmxpbmsuYwppbmRleCAxYWVkODUwLi5jZTU1OGMyIDEwMDY0NAotLS0gYS9mcy9uZnMvdW5saW5rLmMKKysrIGIvZnMvbmZzL3VubGluay5jCkBAIC0xMSw5ICsxMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmZzX2ZzLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAogc3RydWN0IG5mc191bmxpbmtkYXRhIHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OwogCXN0cnVjdCBuZnNfcmVtb3ZlYXJncyBhcmdzOwogCXN0cnVjdCBuZnNfcmVtb3ZlcmVzIHJlczsKIAlzdHJ1Y3QgaW5vZGUgKmRpcjsKQEAgLTUyLDYgKzU0LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG5mc19mcmVlX2RuYW1lKHN0cnVjdCBuZnNfdW5saW5rZGF0YSAqZGF0YSkKK3sKKwlrZnJlZShkYXRhLT5hcmdzLm5hbWUubmFtZSk7CisJZGF0YS0+YXJncy5uYW1lLm5hbWUgPSBOVUxMOworCWRhdGEtPmFyZ3MubmFtZS5sZW4gPSAwOworfQorCitzdGF0aWMgdm9pZCBuZnNfZGVjX3NpbGx5Y291bnQoc3RydWN0IGlub2RlICpkaXIpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGRpcik7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZuZnNpLT5zaWxseV9jb3VudCkgPT0gMSkKKwkJd2FrZV91cCgmbmZzaS0+d2FpdHF1ZXVlKTsKK30KKwogLyoqCiAgKiBuZnNfYXN5bmNfdW5saW5rX2luaXQgLSBJbml0aWFsaXplIHRoZSBSUEMgaW5mbwogICogdGFzazogcnBjX3Rhc2sgb2YgdGhlIHNpbGx5ZGVsZXRlCkBAIC05NSw2ICsxMTEsOCBAQAogc3RhdGljIHZvaWQgbmZzX2FzeW5jX3VubGlua19yZWxlYXNlKHZvaWQgKmNhbGxkYXRhKQogewogCXN0cnVjdCBuZnNfdW5saW5rZGF0YQkqZGF0YSA9IGNhbGxkYXRhOworCisJbmZzX2RlY19zaWxseWNvdW50KGRhdGEtPmRpcik7CiAJbmZzX2ZyZWVfdW5saW5rZGF0YShkYXRhKTsKIH0KIApAQCAtMTA0LDI0ICsxMjIsMzUgQEAKIAkucnBjX3JlbGVhc2UgPSBuZnNfYXN5bmNfdW5saW5rX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgaW50IG5mc19jYWxsX3VubGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuZnNfdW5saW5rZGF0YSAqZGF0YSkKK3N0YXRpYyBpbnQgbmZzX2RvX2NhbGxfdW5saW5rKHN0cnVjdCBkZW50cnkgKnBhcmVudCwgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBuZnNfdW5saW5rZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2s7Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50OwotCXN0cnVjdCBpbm9kZSAqZGlyOworCXN0cnVjdCBkZW50cnkgKmFsaWFzOwogCi0JaWYgKG5mc19jb3B5X2RuYW1lKGRlbnRyeSwgZGF0YSkgPCAwKQotCQlnb3RvIG91dF9mcmVlOwotCi0JcGFyZW50ID0gZGdldF9wYXJlbnQoZGVudHJ5KTsKLQlpZiAocGFyZW50ID09IE5VTEwpCi0JCWdvdG8gb3V0X2ZyZWU7Ci0JZGlyID0gaWdyYWIocGFyZW50LT5kX2lub2RlKTsKLQlkcHV0KHBhcmVudCk7Ci0JaWYgKGRpciA9PSBOVUxMKQotCQlnb3RvIG91dF9mcmVlOwotCi0JZGF0YS0+ZGlyID0gZGlyOworCWFsaWFzID0gZF9sb29rdXAocGFyZW50LCAmZGF0YS0+YXJncy5uYW1lKTsKKwlpZiAoYWxpYXMgIT0gTlVMTCkgeworCQlpbnQgcmV0ID0gMDsKKwkJLyoKKwkJICogSGV5LCB3ZSByYWNlZCB3aXRoIGxvb2t1cC4uLiBTZWUgaWYgd2UgbmVlZCB0byB0cmFuc2ZlcgorCQkgKiB0aGUgc2lsbHlyZW5hbWUgaW5mb3JtYXRpb24gdG8gdGhlIGFsaWFzZWQgZGVudHJ5LgorCQkgKi8KKwkJbmZzX2ZyZWVfZG5hbWUoZGF0YSk7CisJCXNwaW5fbG9jaygmYWxpYXMtPmRfbG9jayk7CisJCWlmICghKGFsaWFzLT5kX2ZsYWdzICYgRENBQ0hFX05GU0ZTX1JFTkFNRUQpKSB7CisJCQlhbGlhcy0+ZF9mc2RhdGEgPSBkYXRhOworCQkJYWxpYXMtPmRfZmxhZ3MgXj0gRENBQ0hFX05GU0ZTX1JFTkFNRUQ7CisJCQlyZXQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrKCZhbGlhcy0+ZF9sb2NrKTsKKwkJbmZzX2RlY19zaWxseWNvdW50KGRpcik7CisJCWRwdXQoYWxpYXMpOworCQlyZXR1cm4gcmV0OworCX0KKwlkYXRhLT5kaXIgPSBpZ3JhYihkaXIpOworCWlmICghZGF0YS0+ZGlyKSB7CisJCW5mc19kZWNfc2lsbHljb3VudChkaXIpOworCQlyZXR1cm4gMDsKKwl9CiAJZGF0YS0+YXJncy5maCA9IE5GU19GSChkaXIpOwogCW5mc19mYXR0cl9pbml0KCZkYXRhLT5yZXMuZGlyX2F0dHIpOwogCkBAIC0xMjksOCArMTU4LDY0IEBACiAJaWYgKCFJU19FUlIodGFzaykpCiAJCXJwY19wdXRfdGFzayh0YXNrKTsKIAlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBuZnNfY2FsbF91bmxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmZzX3VubGlua2RhdGEgKmRhdGEpCit7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCXN0cnVjdCBpbm9kZSAqZGlyOworCWludCByZXQgPSAwOworCisKKwlwYXJlbnQgPSBkZ2V0X3BhcmVudChkZW50cnkpOworCWlmIChwYXJlbnQgPT0gTlVMTCkKKwkJZ290byBvdXRfZnJlZTsKKwlkaXIgPSBwYXJlbnQtPmRfaW5vZGU7CisJaWYgKG5mc19jb3B5X2RuYW1lKGRlbnRyeSwgZGF0YSkgPT0gMCkKKwkJZ290byBvdXRfZHB1dDsKKwkvKiBOb24tZXhjbHVzaXZlIGxvY2sgcHJvdGVjdHMgYWdhaW5zdCBjb25jdXJyZW50IGxvb2t1cCgpIGNhbGxzICovCisJc3Bpbl9sb2NrKCZkaXItPmlfbG9jayk7CisJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJk5GU19JKGRpciktPnNpbGx5X2NvdW50KSA9PSAwKSB7CisJCS8qIERlZmVycmVkIGRlbGV0ZSAqLworCQlobGlzdF9hZGRfaGVhZCgmZGF0YS0+bGlzdCwgJk5GU19JKGRpciktPnNpbGx5X2xpc3QpOworCQlzcGluX3VubG9jaygmZGlyLT5pX2xvY2spOworCQlyZXQgPSAxOworCQlnb3RvIG91dF9kcHV0OworCX0KKwlzcGluX3VubG9jaygmZGlyLT5pX2xvY2spOworCXJldCA9IG5mc19kb19jYWxsX3VubGluayhwYXJlbnQsIGRpciwgZGF0YSk7CitvdXRfZHB1dDoKKwlkcHV0KHBhcmVudCk7CiBvdXRfZnJlZToKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG5mc19ibG9ja19zaWxseXJlbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGRlbnRyeS0+ZF9pbm9kZSk7CisKKwl3YWl0X2V2ZW50KG5mc2ktPndhaXRxdWV1ZSwgYXRvbWljX2NtcHhjaGcoJm5mc2ktPnNpbGx5X2NvdW50LCAxLCAwKSA9PSAxKTsKK30KKwordm9pZCBuZnNfdW5ibG9ja19zaWxseXJlbmFtZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICpkaXIgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGRpcik7CisJc3RydWN0IG5mc191bmxpbmtkYXRhICpkYXRhOworCisJYXRvbWljX2luYygmbmZzaS0+c2lsbHlfY291bnQpOworCXNwaW5fbG9jaygmZGlyLT5pX2xvY2spOworCXdoaWxlICghaGxpc3RfZW1wdHkoJm5mc2ktPnNpbGx5X2xpc3QpKSB7CisJCWlmICghYXRvbWljX2luY19ub3RfemVybygmbmZzaS0+c2lsbHlfY291bnQpKQorCQkJYnJlYWs7CisJCWRhdGEgPSBobGlzdF9lbnRyeShuZnNpLT5zaWxseV9saXN0LmZpcnN0LCBzdHJ1Y3QgbmZzX3VubGlua2RhdGEsIGxpc3QpOworCQlobGlzdF9kZWwoJmRhdGEtPmxpc3QpOworCQlzcGluX3VubG9jaygmZGlyLT5pX2xvY2spOworCQlpZiAobmZzX2RvX2NhbGxfdW5saW5rKGRlbnRyeSwgZGlyLCBkYXRhKSA9PSAwKQorCQkJbmZzX2ZyZWVfdW5saW5rZGF0YShkYXRhKTsKKwkJc3Bpbl9sb2NrKCZkaXItPmlfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZkaXItPmlfbG9jayk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCAwY2Y5ZDFjLi44OTUyN2E0IDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtMTc0LDggKzE3NCw2IEBACiAJCXJldHVybjsKIAlpZiAoY291bnQgIT0gbmZzX3BhZ2VfbGVuZ3RoKHBhZ2UpKQogCQlyZXR1cm47Ci0JaWYgKGNvdW50ICE9IFBBR0VfQ0FDSEVfU0laRSkKLQkJemVyb191c2VyX3BhZ2UocGFnZSwgY291bnQsIFBBR0VfQ0FDSEVfU0laRSAtIGNvdW50LCBLTV9VU0VSMCk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwogfQogCkBAIC02MjcsNyArNjI1LDggQEAKIAkJCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAJCQl9CiAJCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCQlyZXR1cm4gbmV3OworCQkJcmVxID0gbmV3OworCQkJZ290byB6ZXJvX3BhZ2U7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCkBAIC02NTUsMTMgKzY1NCwyMyBAQAogCWlmIChvZmZzZXQgPCByZXEtPndiX29mZnNldCkgewogCQlyZXEtPndiX29mZnNldCA9IG9mZnNldDsKIAkJcmVxLT53Yl9wZ2Jhc2UgPSBvZmZzZXQ7Ci0JCXJlcS0+d2JfYnl0ZXMgPSBycWVuZCAtIHJlcS0+d2Jfb2Zmc2V0OworCQlyZXEtPndiX2J5dGVzID0gbWF4KGVuZCwgcnFlbmQpIC0gcmVxLT53Yl9vZmZzZXQ7CisJCWdvdG8gemVyb19wYWdlOwogCX0KIAogCWlmIChlbmQgPiBycWVuZCkKIAkJcmVxLT53Yl9ieXRlcyA9IGVuZCAtIHJlcS0+d2Jfb2Zmc2V0OwogCiAJcmV0dXJuIHJlcTsKK3plcm9fcGFnZToKKwkvKiBJZiB0aGlzIHBhZ2UgbWlnaHQgcG90ZW50aWFsbHkgYmUgbWFya2VkIGFzIHVwIHRvIGRhdGUsCisJICogdGhlbiB3ZSBuZWVkIHRvIHplcm8gYW55IHVuaW5pdGFsaXNlZCBkYXRhLiAqLworCWlmIChyZXEtPndiX3BnYmFzZSA9PSAwICYmIHJlcS0+d2JfYnl0ZXMgIT0gUEFHRV9DQUNIRV9TSVpFCisJCQkmJiAhUGFnZVVwdG9kYXRlKHJlcS0+d2JfcGFnZSkpCisJCXplcm9fdXNlcl9wYWdlKHJlcS0+d2JfcGFnZSwgcmVxLT53Yl9ieXRlcywKKwkJCQlQQUdFX0NBQ0hFX1NJWkUgLSByZXEtPndiX2J5dGVzLAorCQkJCUtNX1VTRVIwKTsKKwlyZXR1cm4gcmVxOwogfQogCiBpbnQgbmZzX2ZsdXNoX2luY29tcGF0aWJsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCmRpZmYgLS1naXQgYS9mcy9uZnNkL3Zmcy5jIGIvZnMvbmZzZC92ZnMuYwppbmRleCA4MTk1NDVkLi5kMDE5OTE4IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTM2NCwxNCArMzY0LDIzIEBACiAJaWYgKGlhcC0+aWFfdmFsaWQgJiBBVFRSX01PREUpIHsKIAkJaWFwLT5pYV9tb2RlICY9IFNfSUFMTFVHTzsKIAkJaW1vZGUgPSBpYXAtPmlhX21vZGUgfD0gKGltb2RlICYgflNfSUFMTFVHTyk7CisJCS8qIGlmIGNoYW5naW5nIHVpZC9naWQgcmV2b2tlIHNldHVpZC9zZXRnaWQgaW4gbW9kZSAqLworCQlpZiAoKGlhcC0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgJiYgaWFwLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB7CisJCQlpYXAtPmlhX3ZhbGlkIHw9IEFUVFJfS0lMTF9QUklWOworCQkJaWFwLT5pYV9tb2RlICY9IH5TX0lTVUlEOworCQl9CisJCWlmICgoaWFwLT5pYV92YWxpZCAmIEFUVFJfR0lEKSAmJiBpYXAtPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpCisJCQlpYXAtPmlhX21vZGUgJj0gflNfSVNHSUQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogUmV2b2tlIHNldHVpZC9zZXRnaWQgYml0IG9uIGNob3duL2NoZ3JwCisJCSAqLworCQlpZiAoKGlhcC0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgJiYgaWFwLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKQorCQkJaWFwLT5pYV92YWxpZCB8PSBBVFRSX0tJTExfU1VJRCB8IEFUVFJfS0lMTF9QUklWOworCQlpZiAoKGlhcC0+aWFfdmFsaWQgJiBBVFRSX0dJRCkgJiYgaWFwLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKQorCQkJaWFwLT5pYV92YWxpZCB8PSBBVFRSX0tJTExfU0dJRDsKIAl9CiAKLQkvKiBSZXZva2Ugc2V0dWlkL3NldGdpZCBiaXQgb24gY2hvd24vY2hncnAgKi8KLQlpZiAoKGlhcC0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgJiYgaWFwLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKQotCQlpYXAtPmlhX3ZhbGlkIHw9IEFUVFJfS0lMTF9TVUlEIHwgQVRUUl9LSUxMX1BSSVY7Ci0JaWYgKChpYXAtPmlhX3ZhbGlkICYgQVRUUl9HSUQpICYmIGlhcC0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkKLQkJaWFwLT5pYV92YWxpZCB8PSBBVFRSX0tJTExfU0dJRDsKLQogCS8qIENoYW5nZSB0aGUgYXR0cmlidXRlcy4gKi8KIAogCWlhcC0+aWFfdmFsaWQgfD0gQVRUUl9DVElNRTsKQEAgLTEwMjAsMTMgKzEwMjksMTMgQEAKIAkJaWYgKEVYX1dHQVRIRVIoZXhwKSkgewogCQkJaWYgKGF0b21pY19yZWFkKCZpbm9kZS0+aV93cml0ZWNvdW50KSA+IDEKIAkJCSAgICB8fCAobGFzdF9pbm8gPT0gaW5vZGUtPmlfaW5vICYmIGxhc3RfZGV2ID09IGlub2RlLT5pX3NiLT5zX2RldikpIHsKLQkJCQlkcHJpbnRrKCJuZnNkOiB3cml0ZSBkZWZlciAlZFxuIiwgY3VycmVudC0+cGlkKTsKKwkJCQlkcHJpbnRrKCJuZnNkOiB3cml0ZSBkZWZlciAlZFxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQkJCW1zbGVlcCgxMCk7Ci0JCQkJZHByaW50aygibmZzZDogd3JpdGUgcmVzdW1lICVkXG4iLCBjdXJyZW50LT5waWQpOworCQkJCWRwcmludGsoIm5mc2Q6IHdyaXRlIHJlc3VtZSAlZFxuIiwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQkJfQogCiAJCQlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSB7Ci0JCQkJZHByaW50aygibmZzZDogd3JpdGUgc3luYyAlZFxuIiwgY3VycmVudC0+cGlkKTsKKwkJCQlkcHJpbnRrKCJuZnNkOiB3cml0ZSBzeW5jICVkXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCQkJaG9zdF9lcnI9bmZzZF9zeW5jKGZpbGUpOwogCQkJfQogI2lmIDAKZGlmZiAtLWdpdCBhL2ZzL25scy9ubHNfYmFzZS5jIGIvZnMvbmxzL25sc19iYXNlLmMKaW5kZXggZTc5MDU4MS4uNjQ5NjVlMSAxMDA2NDQKLS0tIGEvZnMvbmxzL25sc19iYXNlLmMKKysrIGIvZnMvbmxzL25sc19iYXNlLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCWludCBjLCBuYzsKIAljb25zdCBzdHJ1Y3QgdXRmOF90YWJsZSAqdDsKICAgCi0JaWYgKHMgPT0gMCkKKwlpZiAoIXMpCiAJCXJldHVybiAwOwogICAKIAlsID0gd2M7CmRpZmYgLS1naXQgYS9mcy9udGZzL0NoYW5nZUxvZyBiL2ZzL250ZnMvQ2hhbmdlTG9nCmluZGV4IDM0NTc5OGUuLjM3YzExZTEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvQ2hhbmdlTG9nCisrKyBiL2ZzL250ZnMvQ2hhbmdlTG9nCkBAIC0zODIsNyArMzgyLDcgQEAKIAkgIG93biBsb2NraW5nIHNvIGl0IGRvZXMgbm90IG1hdHRlciBpZiB0aGUgdmZzIGlub2RlIGlzIGxvY2tlZC4KIAktIEZpeCBidWcgaW4gbWZ0IHJlY29yZCB3cml0aW5nIHdoZXJlIHdlIGZvcmdvdCB0byBzZXQgdGhlIGRldmljZSBpbgogCSAgdGhlIGJ1ZmZlcnMgd2hlbiBtYXBwaW5nIHRoZW0gYWZ0ZXIgdGhlIFZNIGhhZCBkaXNjYXJkZWQgdGhlbS4KLQkgIFRoYW5rcyB0byBNYXJ0aW4gTU9LUkVKxaAgZm9yIHRoZSBidWcgcmVwb3J0LgorCSAgVGhhbmtzIHRvIE1hcnRpbiBNT0tSRUrDhSBmb3IgdGhlIGJ1ZyByZXBvcnQuCiAKIDIuMS4yMiAtIE1hbnkgYnVnIGFuZCByYWNlIGZpeGVzIGFuZCBlcnJvciBoYW5kbGluZyBpbXByb3ZlbWVudHMuCiAKQEAgLTE1ODUsNyArMTU4NSw3IEBACiAJICBmb3IgcmVhZGluZyAkTUZUIChudGZzX21mdF9yZWFkcGFnZSkuIEluIHRoZSBwcm9jZXNzIGNyZWF0ZSBkZWRpY2F0ZWQKIAkgIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyAobnRmc19tZnRfYW9wcykgZm9yICRNRlQgaW5vZGUgbWFwcGluZy4gQWxzbwogCSAgcmVtb3ZlZCB0aGUgbm93IHN1cGVyZmx1b3VzIGV4cG9ydHMgZnJvbSB0aGUga2VybmVsIGNvcmUgcGF0Y2guCi0JLSBGaXggYSBidWcgd2hlcmUga2ZyZWUoKSB3YXMgdXNlZCBpbnN0ZWQgb2YgbnRmc19mcmVlKCkuCisJLSBGaXggYSBidWcgd2hlcmUga2ZyZWUoKSB3YXMgdXNlZCBpbnN0ZWFkIG9mIG50ZnNfZnJlZSgpLgogCS0gQ2hhbmdlIG1hcF9tZnRfcmVjb3JkKCkgdG8gdGFrZSBudGZzX2lub2RlIGFzIGFyZ3VtZW50IGluc3RlYWQgb2YKIAkgIHZmcyBpbm9kZS4gRGl0byBmb3IgdW5tYXBfbWZ0X3JlY29yZCgpLiBBZGFwdCBhbGwgY2FsbGVycy4KIAktIEFkZCBwb2ludGVyIHRvIG50ZnNfdm9sdW1lIHRvIG50ZnNfaW5vZGUuCmRpZmYgLS1naXQgYS9mcy9udGZzL3N5c2N0bC5jIGIvZnMvbnRmcy9zeXNjdGwuYwppbmRleCA0ODQ3ZmJmLi45ZWY4NWU2IDEwMDY0NAotLS0gYS9mcy9udGZzL3N5c2N0bC5jCisrKyBiL2ZzL250ZnMvc3lzY3RsLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogc3lzY3RsLmMgLSBDb2RlIGZvciBzeXNjdGwgaGFuZGxpbmcgaW4gTlRGUyBMaW51eCBrZXJuZWwgZHJpdmVyLiBQYXJ0IG9mCiAgKgkgICAgICB0aGUgTGludXgtTlRGUyBwcm9qZWN0LiBBZGFwdGVkIGZyb20gdGhlIG9sZCBOVEZTIGRyaXZlciwKLSAqCSAgICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gdm9uIEz2d2lzLCBS6WdpcyBEdWNoZXNuZQorICoJICAgICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcnRpbiB2b24gTMO2d2lzLCBSw6lnaXMgRHVjaGVzbmUKICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBBbnRvbiBBbHRhcGFybWFrb3YKICAqCmRpZmYgLS1naXQgYS9mcy9udGZzL3N5c2N0bC5oIGIvZnMvbnRmcy9zeXNjdGwuaAppbmRleCBiZWRhNWJmOS4uZDRmOGNlOSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zeXNjdGwuaAorKysgYi9mcy9udGZzL3N5c2N0bC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHN5c2N0bC5oIC0gRGVmaW5lcyBmb3Igc3lzY3RsIGhhbmRsaW5nIGluIE5URlMgTGludXgga2VybmVsIGRyaXZlci4gUGFydCBvZgogICoJICAgICAgdGhlIExpbnV4LU5URlMgcHJvamVjdC4gQWRhcHRlZCBmcm9tIHRoZSBvbGQgTlRGUyBkcml2ZXIsCi0gKgkgICAgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFydGluIHZvbiBM9ndpcywgUulnaXMgRHVjaGVzbmUKKyAqCSAgICAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJ0aW4gdm9uIEzDtndpcywgUsOpZ2lzIER1Y2hlc25lCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDQgQW50b24gQWx0YXBhcm1ha292CiAgKgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggZjE0YjU0MS4uOWNjN2MwNCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0xMzcyLDcgKzEzNzIsNyBAQAogCiAJc3Bpbl9sb2NrKCZvMmhiX2xpdmVfbG9jayk7CiAJaWYgKHJlZy0+aHJfdGFzaykKLQkJcGlkID0gcmVnLT5ocl90YXNrLT5waWQ7CisJCXBpZCA9IHRhc2tfcGlkX25yKHJlZy0+aHJfdGFzayk7CiAJc3Bpbl91bmxvY2soJm8yaGJfbGl2ZV9sb2NrKTsKIAogCWlmICghcGlkKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA3NWNkODc3Li5jZDA0NjA2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTkyLDcgKzE5Miw3IEBACiAgKiBwcmV2aW91cyB0b2tlbiBpZiBhcmdzIGV4cGFuZHMgdG8gbm90aGluZy4KICAqLwogI2RlZmluZSBfX21sb2dfcHJpbnRrKGxldmVsLCBmbXQsIGFyZ3MuLi4pCQkJCVwKLQlwcmludGsobGV2ZWwgIigldSwlbHUpOiVzOiVkICIgZm10LCBjdXJyZW50LT5waWQsCQlcCisJcHJpbnRrKGxldmVsICIoJXUsJWx1KTolczolZCAiIGZtdCwgdGFza19waWRfbnIoY3VycmVudCksCVwKIAkgICAgICAgX19tbG9nX2NwdV9ndWVzcywgX19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18gLAlcCiAJICAgICAgICMjYXJncykKIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGNhY2hlLmMgYi9mcy9vY2ZzMi9kY2FjaGUuYwppbmRleCAwMTRlNzM5Li4zMDk0ZGRiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kY2FjaGUuYworKysgYi9mcy9vY2ZzMi9kY2FjaGUuYwpAQCAtMzc2LDcgKzM3Niw3IEBACiAgKiBkaXJlY3RvcnkgbG9ja3MuIFRoZSBkZW50cmllcyBoYXZlIGFscmVhZHkgYmVlbiBkZWxldGVkIG9uIG90aGVyCiAgKiBub2RlcyB2aWEgb2NmczJfcmVtb3RlX2RlbnRyeV9kZWxldGUoKS4KICAqCi0gKiBOb3JtYWxseSwgdGhlIFZGUyBoYW5kbGVzIHRoZSBkX21vdmUoKSBmb3IgdGhlIGZpbGUgc3l0ZW0sIGFmdGVyCisgKiBOb3JtYWxseSwgdGhlIFZGUyBoYW5kbGVzIHRoZSBkX21vdmUoKSBmb3IgdGhlIGZpbGUgc3lzdGVtLCBhZnRlcgogICogdGhlIC0+cmVuYW1lKCkgY2FsbGJhY2suIE9DRlMyIHdhbnRzIHRvIGhhbmRsZSB0aGlzIGludGVybmFsbHksIHNvCiAgKiB0aGUgbmV3IGxvY2sgY2FuIGJlIGNyZWF0ZWQgYXRvbWljYWxseSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNsdXN0ZXIuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1yZWNvdmVyeS5jIGIvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKaW5kZXggYTJjMzMxNi4uMmZkZTdiZiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCXN0cnVjdCBkbG1fbG9ja19yZXNvdXJjZSAqcmVzOwogCiAJbWxvZyhNTF9OT1RJQ0UsICIlcyglZCk6IHJlY292ZXJ5IGluZm8sIHN0YXRlPSVzLCBkZWFkPSV1LCBtYXN0ZXI9JXVcbiIsCi0JICAgICBkbG0tPm5hbWUsIGRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2stPnBpZCwKKwkgICAgIGRsbS0+bmFtZSwgdGFza19waWRfbnIoZGxtLT5kbG1fcmVjb190aHJlYWRfdGFzayksCiAJICAgICBkbG0tPnJlY28uc3RhdGUgJiBETE1fUkVDT19TVEFURV9BQ1RJVkUgPyAiQUNUSVZFIiA6ICJpbmFjdGl2ZSIsCiAJICAgICBkbG0tPnJlY28uZGVhZF9ub2RlLCBkbG0tPnJlY28ubmV3X21hc3Rlcik7CiAKQEAgLTQyMCw3ICs0MjAsNyBAQAogCWlmIChkbG1faW5fcmVjb3ZlcnkoZGxtKSkgewogCQltbG9nKDAsICIlczogcmVjbyB0aHJlYWQgJWQgaW4gcmVjb3Zlcnk6ICIKIAkJICAgICAic3RhdGU9JWQsIG1hc3Rlcj0ldSwgZGVhZD0ldVxuIiwKLQkJICAgICBkbG0tPm5hbWUsIGRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2stPnBpZCwKKwkJICAgICBkbG0tPm5hbWUsIHRhc2tfcGlkX25yKGRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2spLAogCQkgICAgIGRsbS0+cmVjby5zdGF0ZSwgZGxtLT5yZWNvLm5ld19tYXN0ZXIsCiAJCSAgICAgZGxtLT5yZWNvLmRlYWRfbm9kZSk7CiAJfQpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJCXJldHVybiAwOwogCX0KIAltbG9nKDAsICIlcyglZCk6cmVjb3ZlcnkgdGhyZWFkIGZvdW5kIG5vZGUgJXUgaW4gdGhlIHJlY292ZXJ5IG1hcCFcbiIsCi0JICAgICBkbG0tPm5hbWUsIGRsbS0+ZGxtX3JlY29fdGhyZWFkX3Rhc2stPnBpZCwKKwkgICAgIGRsbS0+bmFtZSwgdGFza19waWRfbnIoZGxtLT5kbG1fcmVjb190aHJlYWRfdGFzayksCiAJICAgICBkbG0tPnJlY28uZGVhZF9ub2RlKTsKIAlzcGluX3VubG9jaygmZGxtLT5zcGlubG9jayk7CiAKQEAgLTUwNyw3ICs1MDcsNyBAQAogCQltbG9nKDAsICJhbm90aGVyIG5vZGUgd2lsbCBtYXN0ZXIgdGhpcyByZWNvdmVyeSBzZXNzaW9uLlxuIik7CiAJfQogCW1sb2coMCwgImRsbT0lcyAoJWQpLCBuZXdfbWFzdGVyPSV1LCB0aGlzIG5vZGU9JXUsIGRlYWRfbm9kZT0ldVxuIiwKLQkgICAgIGRsbS0+bmFtZSwgZGxtLT5kbG1fcmVjb190aHJlYWRfdGFzay0+cGlkLCBkbG0tPnJlY28ubmV3X21hc3RlciwKKwkgICAgIGRsbS0+bmFtZSwgdGFza19waWRfbnIoZGxtLT5kbG1fcmVjb190aHJlYWRfdGFzayksIGRsbS0+cmVjby5uZXdfbWFzdGVyLAogCSAgICAgZGxtLT5ub2RlX251bSwgZGxtLT5yZWNvLmRlYWRfbm9kZSk7CiAKIAkvKiBpdCBpcyBzYWZlIHRvIHN0YXJ0IGV2ZXJ5dGhpbmcgYmFjayB1cCBoZXJlCkBAIC01MjAsNyArNTIwLDcgQEAKIAogbWFzdGVyX2hlcmU6CiAJbWxvZygwLCAiKCVkKSBtYXN0ZXJpbmcgcmVjb3Zlcnkgb2YgJXM6JXUgaGVyZSh0aGlzPSV1KSFcbiIsCi0JICAgICBkbG0tPmRsbV9yZWNvX3RocmVhZF90YXNrLT5waWQsCisJICAgICB0YXNrX3BpZF9ucihkbG0tPmRsbV9yZWNvX3RocmVhZF90YXNrKSwKIAkgICAgIGRsbS0+bmFtZSwgZGxtLT5yZWNvLmRlYWRfbm9kZSwgZGxtLT5ub2RlX251bSk7CiAKIAlzdGF0dXMgPSBkbG1fcmVtYXN0ZXJfbG9ja3MoZGxtLCBkbG0tPnJlY28uZGVhZF9ub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAyN2I1OWY1Li42M2M5NWFmIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC03Nyw2ICs3Nyw3IEBACiAjaW5jbHVkZSA8bGludXgvY3B1c2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KQEAgLTE0NSw4ICsxNDYsNyBAQAogCQkJCQkgICAgVEFTS19VTklOVEVSUlVQVElCTEUgfAogCQkJCQkgICAgVEFTS19TVE9QUEVEIHwKIAkJCQkJICAgIFRBU0tfVFJBQ0VEKSkgfAotCQkJKHRzay0+ZXhpdF9zdGF0ZSAmIChFWElUX1pPTUJJRSB8Ci0JCQkJCSAgICBFWElUX0RFQUQpKTsKKwkJCQkJICAgdHNrLT5leGl0X3N0YXRlOwogCWNvbnN0IGNoYXIgKipwID0gJnRhc2tfc3RhdGVfYXJyYXlbMF07CiAKIAl3aGlsZSAoc3RhdGUpIHsKQEAgLTE2MSw4ICsxNjEsMTUgQEAKIAlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbzsKIAlpbnQgZzsKIAlzdHJ1Y3QgZmR0YWJsZSAqZmR0ID0gTlVMTDsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CisJcGlkX3QgcHBpZCwgdHBpZDsKIAorCW5zID0gY3VycmVudC0+bnNwcm94eS0+cGlkX25zOwogCXJjdV9yZWFkX2xvY2soKTsKKwlwcGlkID0gcGlkX2FsaXZlKHApID8KKwkJdGFza190Z2lkX25yX25zKHJjdV9kZXJlZmVyZW5jZShwLT5yZWFsX3BhcmVudCksIG5zKSA6IDA7CisJdHBpZCA9IHBpZF9hbGl2ZShwKSAmJiBwLT5wdHJhY2UgPworCQl0YXNrX3BwaWRfbnJfbnMocmN1X2RlcmVmZXJlbmNlKHAtPnBhcmVudCksIG5zKSA6IDA7CiAJYnVmZmVyICs9IHNwcmludGYoYnVmZmVyLAogCQkiU3RhdGU6XHQlc1xuIgogCQkiVGdpZDpcdCVkXG4iCkBAIC0xNzIsOSArMTc5LDkgQEAKIAkJIlVpZDpcdCVkXHQlZFx0JWRcdCVkXG4iCiAJCSJHaWQ6XHQlZFx0JWRcdCVkXHQlZFxuIiwKIAkJZ2V0X3Rhc2tfc3RhdGUocCksCi0JCXAtPnRnaWQsIHAtPnBpZCwKLQkJcGlkX2FsaXZlKHApID8gcmN1X2RlcmVmZXJlbmNlKHAtPnJlYWxfcGFyZW50KS0+dGdpZCA6IDAsCi0JCXBpZF9hbGl2ZShwKSAmJiBwLT5wdHJhY2UgPyByY3VfZGVyZWZlcmVuY2UocC0+cGFyZW50KS0+cGlkIDogMCwKKwkJdGFza190Z2lkX25yX25zKHAsIG5zKSwKKwkJdGFza19waWRfbnJfbnMocCwgbnMpLAorCQlwcGlkLCB0cGlkLAogCQlwLT51aWQsIHAtPmV1aWQsIHAtPnN1aWQsIHAtPmZzdWlkLAogCQlwLT5naWQsIHAtPmVnaWQsIHAtPnNnaWQsIHAtPmZzZ2lkKTsKIApAQCAtMzk0LDYgKzQwMSw5IEBACiAJdW5zaWduZWQgbG9uZyByc3NsaW0gPSAwOwogCWNoYXIgdGNvbW1bc2l6ZW9mKHRhc2stPmNvbW0pXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKKworCW5zID0gY3VycmVudC0+bnNwcm94eS0+cGlkX25zOwogCiAJc3RhdGUgPSAqZ2V0X3Rhc2tfc3RhdGUodGFzayk7CiAJdnNpemUgPSBlaXAgPSBlc3AgPSAwOwpAQCAtNDE2LDcgKzQyNiw3IEBACiAJCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPSB0YXNrLT5zaWduYWw7CiAKIAkJaWYgKHNpZy0+dHR5KSB7Ci0JCQl0dHlfcGdycCA9IHBpZF9ucihzaWctPnR0eS0+cGdycCk7CisJCQl0dHlfcGdycCA9IHBpZF9ucl9ucyhzaWctPnR0eS0+cGdycCwgbnMpOwogCQkJdHR5X25yID0gbmV3X2VuY29kZV9kZXYodHR5X2Rldm51bShzaWctPnR0eSkpOwogCQl9CiAKQEAgLTQ0NiwxMiArNDU2LDEyIEBACiAJCQltYWpfZmx0ICs9IHNpZy0+bWFqX2ZsdDsKIAkJCXV0aW1lID0gY3B1dGltZV9hZGQodXRpbWUsIHNpZy0+dXRpbWUpOwogCQkJc3RpbWUgPSBjcHV0aW1lX2FkZChzdGltZSwgc2lnLT5zdGltZSk7Ci0JCQlndGltZSArPSBjcHV0aW1lX2FkZChndGltZSwgc2lnLT5ndGltZSk7CisJCQlndGltZSA9IGNwdXRpbWVfYWRkKGd0aW1lLCBzaWctPmd0aW1lKTsKIAkJfQogCi0JCXNpZCA9IHNpZ25hbF9zZXNzaW9uKHNpZyk7Ci0JCXBnaWQgPSBwcm9jZXNzX2dyb3VwKHRhc2spOwotCQlwcGlkID0gcmN1X2RlcmVmZXJlbmNlKHRhc2stPnJlYWxfcGFyZW50KS0+dGdpZDsKKwkJc2lkID0gdGFza19zZXNzaW9uX25yX25zKHRhc2ssIG5zKTsKKwkJcGdpZCA9IHRhc2tfcGdycF9ucl9ucyh0YXNrLCBucyk7CisJCXBwaWQgPSB0YXNrX3BwaWRfbnJfbnModGFzaywgbnMpOwogCiAJCXVubG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKTsKIAl9CkBAIC00ODMsNyArNDkzLDcgQEAKIAlyZXMgPSBzcHJpbnRmKGJ1ZmZlciwgIiVkICglcykgJWMgJWQgJWQgJWQgJWQgJWQgJXUgJWx1IFwKICVsdSAlbHUgJWx1ICVsdSAlbHUgJWxkICVsZCAlbGQgJWxkICVkIDAgJWxsdSAlbHUgJWxkICVsdSAlbHUgJWx1ICVsdSAlbHUgXAogJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlZCAlZCAldSAldSAlbGx1ICVsdSAlbGRcbiIsCi0JCXRhc2stPnBpZCwKKwkJdGFza19waWRfbnJfbnModGFzaywgbnMpLAogCQl0Y29tbSwKIAkJc3RhdGUsCiAJCXBwaWQsCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IDRmZTc0ZDEuLjM5YTNkN2MgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC02MywxNiArNjMsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvb29tLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qIE5PVEU6CkBAIC0zMDEsNiArMzA0LDc4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmZmVyLCAiJWx1XG4iLCBwb2ludHMpOwogfQogCitzdHJ1Y3QgbGltaXRfbmFtZXMgeworCWNoYXIgKm5hbWU7CisJY2hhciAqdW5pdDsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbGltaXRfbmFtZXMgbG5hbWVzW1JMSU1fTkxJTUlUU10gPSB7CisJW1JMSU1JVF9DUFVdID0geyJNYXggY3B1IHRpbWUiLCAibXMifSwKKwlbUkxJTUlUX0ZTSVpFXSA9IHsiTWF4IGZpbGUgc2l6ZSIsICJieXRlcyJ9LAorCVtSTElNSVRfREFUQV0gPSB7Ik1heCBkYXRhIHNpemUiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX1NUQUNLXSA9IHsiTWF4IHN0YWNrIHNpemUiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX0NPUkVdID0geyJNYXggY29yZSBmaWxlIHNpemUiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX1JTU10gPSB7Ik1heCByZXNpZGVudCBzZXQiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX05QUk9DXSA9IHsiTWF4IHByb2Nlc3NlcyIsICJwcm9jZXNzZXMifSwKKwlbUkxJTUlUX05PRklMRV0gPSB7Ik1heCBvcGVuIGZpbGVzIiwgImZpbGVzIn0sCisJW1JMSU1JVF9NRU1MT0NLXSA9IHsiTWF4IGxvY2tlZCBtZW1vcnkiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX0FTXSA9IHsiTWF4IGFkZHJlc3Mgc3BhY2UiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX0xPQ0tTXSA9IHsiTWF4IGZpbGUgbG9ja3MiLCAibG9ja3MifSwKKwlbUkxJTUlUX1NJR1BFTkRJTkddID0geyJNYXggcGVuZGluZyBzaWduYWxzIiwgInNpZ25hbHMifSwKKwlbUkxJTUlUX01TR1FVRVVFXSA9IHsiTWF4IG1zZ3F1ZXVlIHNpemUiLCAiYnl0ZXMifSwKKwlbUkxJTUlUX05JQ0VdID0geyJNYXggbmljZSBwcmlvcml0eSIsIE5VTEx9LAorCVtSTElNSVRfUlRQUklPXSA9IHsiTWF4IHJlYWx0aW1lIHByaW9yaXR5IiwgTlVMTH0sCit9OworCisvKiBEaXNwbGF5IGxpbWl0cyBmb3IgYSBwcm9jZXNzICovCitzdGF0aWMgaW50IHByb2NfcGlkX2xpbWl0cyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGNoYXIgKmJ1ZmZlcikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJY2hhciAqYnVmcHRyID0gYnVmZmVyOworCisJc3RydWN0IHJsaW1pdCBybGltW1JMSU1fTkxJTUlUU107CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFsb2NrX3Rhc2tfc2lnaGFuZCh0YXNrLCZmbGFncykpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCXJldHVybiAwOworCX0KKwltZW1jcHkocmxpbSwgdGFzay0+c2lnbmFsLT5ybGltLCBzaXplb2Yoc3RydWN0IHJsaW1pdCkgKiBSTElNX05MSU1JVFMpOworCXVubG9ja190YXNrX3NpZ2hhbmQodGFzaywgJmZsYWdzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCS8qCisJICogcHJpbnQgdGhlIGZpbGUgaGVhZGVyCisJICovCisJY291bnQgKz0gc3ByaW50ZigmYnVmcHRyW2NvdW50XSwgIiUtMjVzICUtMjBzICUtMjBzICUtMTBzXG4iLAorCQkJIkxpbWl0IiwgIlNvZnQgTGltaXQiLCAiSGFyZCBMaW1pdCIsICJVbml0cyIpOworCisJZm9yIChpID0gMDsgaSA8IFJMSU1fTkxJTUlUUzsgaSsrKSB7CisJCWlmIChybGltW2ldLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCisJCQljb3VudCArPSBzcHJpbnRmKCZidWZwdHJbY291bnRdLCAiJS0yNXMgJS0yMHMgIiwKKwkJCQkJIGxuYW1lc1tpXS5uYW1lLCAidW5saW1pdGVkIik7CisJCWVsc2UKKwkJCWNvdW50ICs9IHNwcmludGYoJmJ1ZnB0cltjb3VudF0sICIlLTI1cyAlLTIwbHUgIiwKKwkJCQkJIGxuYW1lc1tpXS5uYW1lLCBybGltW2ldLnJsaW1fY3VyKTsKKworCQlpZiAocmxpbVtpXS5ybGltX21heCA9PSBSTElNX0lORklOSVRZKQorCQkJY291bnQgKz0gc3ByaW50ZigmYnVmcHRyW2NvdW50XSwgIiUtMjBzICIsICJ1bmxpbWl0ZWQiKTsKKwkJZWxzZQorCQkJY291bnQgKz0gc3ByaW50ZigmYnVmcHRyW2NvdW50XSwgIiUtMjBsdSAiLAorCQkJCQkgcmxpbVtpXS5ybGltX21heCk7CisKKwkJaWYgKGxuYW1lc1tpXS51bml0KQorCQkJY291bnQgKz0gc3ByaW50ZigmYnVmcHRyW2NvdW50XSwgIiUtMTBzXG4iLAorCQkJCQkgbG5hbWVzW2ldLnVuaXQpOworCQllbHNlCisJCQljb3VudCArPSBzcHJpbnRmKCZidWZwdHJbY291bnRdLCAiXG4iKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiAgICAgICAgICAgICAgICAgICAgICAgSGVyZSB0aGUgZnMgcGFydCBiZWdpbnMgICAgICAgICAgICAgICAgICAgICAgICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM0OSwxOCArNDI0LDIxIEBACiBzdGF0aWMgaW50IG1vdW50c19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOworCXN0cnVjdCBuc3Byb3h5ICpuc3A7CiAJc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zID0gTlVMTDsKIAlzdHJ1Y3QgcHJvY19tb3VudHMgKnA7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKIAlpZiAodGFzaykgewotCQl0YXNrX2xvY2sodGFzayk7Ci0JCWlmICh0YXNrLT5uc3Byb3h5KSB7Ci0JCQlucyA9IHRhc2stPm5zcHJveHktPm1udF9uczsKKwkJcmN1X3JlYWRfbG9jaygpOworCQluc3AgPSB0YXNrX25zcHJveHkodGFzayk7CisJCWlmIChuc3ApIHsKKwkJCW5zID0gbnNwLT5tbnRfbnM7CiAJCQlpZiAobnMpCiAJCQkJZ2V0X21udF9ucyhucyk7CiAJCX0KLQkJdGFza191bmxvY2sodGFzayk7CisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIAl9CiAKQEAgLTQyMywxNiArNTAxLDIwIEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJCXN0cnVjdCBuc3Byb3h5ICpuc3A7CiAJCXN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRfbnMgPSBOVUxMOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGlub2RlKTsKIAogCQlpZiAodGFzaykgewotCQkJdGFza19sb2NrKHRhc2spOwotCQkJaWYgKHRhc2stPm5zcHJveHkpCi0JCQkJbW50X25zID0gdGFzay0+bnNwcm94eS0+bW50X25zOwotCQkJaWYgKG1udF9ucykKLQkJCQlnZXRfbW50X25zKG1udF9ucyk7Ci0JCQl0YXNrX3VubG9jayh0YXNrKTsKKwkJCXJjdV9yZWFkX2xvY2soKTsKKwkJCW5zcCA9IHRhc2tfbnNwcm94eSh0YXNrKTsKKwkJCWlmIChuc3ApIHsKKwkJCQltbnRfbnMgPSBuc3AtPm1udF9uczsKKwkJCQlpZiAobW50X25zKQorCQkJCQlnZXRfbW50X25zKG1udF9ucyk7CisJCQl9CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwogCQkJcHV0X3Rhc2tfc3RydWN0KHRhc2spOwogCQl9CiAKQEAgLTE0MzcsNyArMTUxOSw3IEBACiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGdldF9wcm9jX3Rhc2soaW5vZGUpOwotCXVuc2lnbmVkIGludCBmZCwgdGlkLCBpbm87CisJdW5zaWduZWQgaW50IGZkLCBpbm87CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgZmlsZXNfc3RydWN0ICogZmlsZXM7CiAJc3RydWN0IGZkdGFibGUgKmZkdDsKQEAgLTE0NDYsNyArMTUyOCw2IEBACiAJaWYgKCFwKQogCQlnb3RvIG91dF9ub190YXNrOwogCXJldHZhbCA9IDA7Ci0JdGlkID0gcC0+cGlkOwogCiAJZmQgPSBmaWxwLT5mX3BvczsKIAlzd2l0Y2ggKGZkKSB7CkBAIC0xNjgxLDcgKzE3NjIsNiBAQAogCQljb25zdCBzdHJ1Y3QgcGlkX2VudHJ5ICplbnRzLCB1bnNpZ25lZCBpbnQgbmVudHMpCiB7CiAJaW50IGk7Ci0JaW50IHBpZDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX3BhdGguZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CkBAIC0xNjk0LDcgKzE3NzQsNiBAQAogCQlnb3RvIG91dF9ub190YXNrOwogCiAJcmV0ID0gMDsKLQlwaWQgPSB0YXNrLT5waWQ7CiAJaSA9IGZpbHAtPmZfcG9zOwogCXN3aXRjaCAoaSkgewogCWNhc2UgMDoKQEAgLTE5MjgsMTQgKzIwMDcsMTQgQEAKIAkJCSAgICAgIGludCBidWZsZW4pCiB7CiAJY2hhciB0bXBbUFJPQ19OVU1CVUZdOwotCXNwcmludGYodG1wLCAiJWQiLCBjdXJyZW50LT50Z2lkKTsKKwlzcHJpbnRmKHRtcCwgIiVkIiwgdGFza190Z2lkX3ZucihjdXJyZW50KSk7CiAJcmV0dXJuIHZmc19yZWFkbGluayhkZW50cnksYnVmZmVyLGJ1Zmxlbix0bXApOwogfQogCiBzdGF0aWMgdm9pZCAqcHJvY19zZWxmX2ZvbGxvd19saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CiAJY2hhciB0bXBbUFJPQ19OVU1CVUZdOwotCXNwcmludGYodG1wLCAiJWQiLCBjdXJyZW50LT50Z2lkKTsKKwlzcHJpbnRmKHRtcCwgIiVkIiwgdGFza190Z2lkX3ZucihjdXJyZW50KSk7CiAJcmV0dXJuIEVSUl9QVFIodmZzX2ZvbGxvd19saW5rKG5kLHRtcCkpOwogfQogCkBAIC0yMTAxLDYgKzIxODAsNyBAQAogCVJFRygiZW52aXJvbiIsICAgIFNfSVJVU1IsIGVudmlyb24pLAogCUlORigiYXV4diIsICAgICAgIFNfSVJVU1IsIHBpZF9hdXh2KSwKIAlJTkYoInN0YXR1cyIsICAgICBTX0lSVUdPLCBwaWRfc3RhdHVzKSwKKwlJTkYoImxpbWl0cyIsCSAgU19JUlVTUiwgcGlkX2xpbWl0cyksCiAjaWZkZWYgQ09ORklHX1NDSEVEX0RFQlVHCiAJUkVHKCJzY2hlZCIsICAgICAgU19JUlVHT3xTX0lXVVNSLCBwaWRfc2NoZWQpLAogI2VuZGlmCkBAIC0yMTMwLDkgKzIyMTAsMTIgQEAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCUlORigic2NoZWRzdGF0IiwgIFNfSVJVR08sIHBpZF9zY2hlZHN0YXQpLAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0NQVVNFVFMKKyNpZmRlZiBDT05GSUdfUFJPQ19QSURfQ1BVU0VUCiAJUkVHKCJjcHVzZXQiLCAgICAgU19JUlVHTywgY3B1c2V0KSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19DR1JPVVBTCisJUkVHKCJjZ3JvdXAiLCAgU19JUlVHTywgY2dyb3VwKSwKKyNlbmRpZgogCUlORigib29tX3Njb3JlIiwgIFNfSVJVR08sIG9vbV9zY29yZSksCiAJUkVHKCJvb21fYWRqIiwgICAgU19JUlVHT3xTX0lXVVNSLCBvb21fYWRqdXN0KSwKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCkBAIC0yMTkzLDI3ICsyMjc2LDI3IEBACiAgKiAgICAgICB0aGF0IG5vIGRjYWNoZSBlbnRyaWVzIHdpbGwgZXhpc3QgYXQgcHJvY2VzcyBleGl0IHRpbWUgaXQKICAqICAgICAgIGp1c3QgbWFrZXMgaXQgdmVyeSB1bmxpa2VseSB0aGF0IGFueSB3aWxsIHBlcnNpc3QuCiAgKi8KLXZvaWQgcHJvY19mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3N0YXRpYyB2b2lkIHByb2NfZmx1c2hfdGFza19tbnQoc3RydWN0IHZmc21vdW50ICptbnQsIHBpZF90IHBpZCwgcGlkX3QgdGdpZCkKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnksICpsZWFkZXIsICpkaXI7CiAJY2hhciBidWZbUFJPQ19OVU1CVUZdOwogCXN0cnVjdCBxc3RyIG5hbWU7CiAKIAluYW1lLm5hbWUgPSBidWY7Ci0JbmFtZS5sZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCB0YXNrLT5waWQpOwotCWRlbnRyeSA9IGRfaGFzaF9hbmRfbG9va3VwKHByb2NfbW50LT5tbnRfcm9vdCwgJm5hbWUpOworCW5hbWUubGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgcGlkKTsKKwlkZW50cnkgPSBkX2hhc2hfYW5kX2xvb2t1cChtbnQtPm1udF9yb290LCAmbmFtZSk7CiAJaWYgKGRlbnRyeSkgewogCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwogCQlkX2Ryb3AoZGVudHJ5KTsKIAkJZHB1dChkZW50cnkpOwogCX0KIAotCWlmICh0aHJlYWRfZ3JvdXBfbGVhZGVyKHRhc2spKQorCWlmICh0Z2lkID09IDApCiAJCWdvdG8gb3V0OwogCiAJbmFtZS5uYW1lID0gYnVmOwotCW5hbWUubGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgdGFzay0+dGdpZCk7Ci0JbGVhZGVyID0gZF9oYXNoX2FuZF9sb29rdXAocHJvY19tbnQtPm1udF9yb290LCAmbmFtZSk7CisJbmFtZS5sZW4gPSBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQiLCB0Z2lkKTsKKwlsZWFkZXIgPSBkX2hhc2hfYW5kX2xvb2t1cChtbnQtPm1udF9yb290LCAmbmFtZSk7CiAJaWYgKCFsZWFkZXIpCiAJCWdvdG8gb3V0OwogCkBAIC0yMjI0LDcgKzIzMDcsNyBAQAogCQlnb3RvIG91dF9wdXRfbGVhZGVyOwogCiAJbmFtZS5uYW1lID0gYnVmOwotCW5hbWUubGVuID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVkIiwgdGFzay0+cGlkKTsKKwluYW1lLmxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIHBpZCk7CiAJZGVudHJ5ID0gZF9oYXNoX2FuZF9sb29rdXAoZGlyLCAmbmFtZSk7CiAJaWYgKGRlbnRyeSkgewogCQlzaHJpbmtfZGNhY2hlX3BhcmVudChkZW50cnkpOwpAQCAtMjIzOSw2ICsyMzIyLDM2IEBACiAJcmV0dXJuOwogfQogCisvKgorICogd2hlbiBmbHVzaGluZyBkZW50cmllcyBmcm9tIHByb2Mgb25lIG5lZWQgdG8gZmx1c2ggdGhlbSBmcm9tIGdsb2JhbAorICogcHJvYyAocHJvY19tbnQpIGFuZCBmcm9tIGFsbCB0aGUgbmFtZXNwYWNlcycgcHJvY3MgdGhpcyB0YXNrIHdhcyBzZWVuCisgKiBpbi4gdGhpcyBjYWxsIGlzIHN1cHBvc2VkIHRvIG1ha2UgYWxsIHRoaXMgam9iLgorICovCisKK3ZvaWQgcHJvY19mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlpbnQgaSwgbGVhZGVyOworCXN0cnVjdCBwaWQgKnBpZCwgKnRnaWQ7CisJc3RydWN0IHVwaWQgKnVwaWQ7CisKKwlsZWFkZXIgPSB0aHJlYWRfZ3JvdXBfbGVhZGVyKHRhc2spOworCXByb2NfZmx1c2hfdGFza19tbnQocHJvY19tbnQsIHRhc2stPnBpZCwgbGVhZGVyID8gdGFzay0+dGdpZCA6IDApOworCXBpZCA9IHRhc2tfcGlkKHRhc2spOworCWlmIChwaWQtPmxldmVsID09IDApCisJCXJldHVybjsKKworCXRnaWQgPSB0YXNrX3RnaWQodGFzayk7CisJZm9yIChpID0gMTsgaSA8PSBwaWQtPmxldmVsOyBpKyspIHsKKwkJdXBpZCA9ICZwaWQtPm51bWJlcnNbaV07CisJCXByb2NfZmx1c2hfdGFza19tbnQodXBpZC0+bnMtPnByb2NfbW50LCB1cGlkLT5uciwKKwkJCQlsZWFkZXIgPyAwIDogdGdpZC0+bnVtYmVyc1tpXS5ucik7CisJfQorCisJdXBpZCA9ICZwaWQtPm51bWJlcnNbcGlkLT5sZXZlbF07CisJaWYgKHVwaWQtPm5yID09IDEpCisJCXBpZF9uc19yZWxlYXNlX3Byb2ModXBpZC0+bnMpOworfQorCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqcHJvY19waWRfaW5zdGFudGlhdGUoc3RydWN0IGlub2RlICpkaXIsCiAJCQkJCSAgIHN0cnVjdCBkZW50cnkgKiBkZW50cnksCiAJCQkJCSAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY29uc3Qgdm9pZCAqcHRyKQpAQCAtMjI3NCw2ICsyMzg3LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQgPSBFUlJfUFRSKC1FTk9FTlQpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAl1bnNpZ25lZCB0Z2lkOworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKIAogCXJlc3VsdCA9IHByb2NfYmFzZV9sb29rdXAoZGlyLCBkZW50cnkpOwogCWlmICghSVNfRVJSKHJlc3VsdCkgfHwgUFRSX0VSUihyZXN1bHQpICE9IC1FTk9FTlQpCkBAIC0yMjgzLDggKzIzOTcsOSBAQAogCWlmICh0Z2lkID09IH4wVSkKIAkJZ290byBvdXQ7CiAKKwlucyA9IGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvOwogCXJjdV9yZWFkX2xvY2soKTsKLQl0YXNrID0gZmluZF90YXNrX2J5X3BpZCh0Z2lkKTsKKwl0YXNrID0gZmluZF90YXNrX2J5X3BpZF9ucyh0Z2lkLCBucyk7CiAJaWYgKHRhc2spCiAJCWdldF90YXNrX3N0cnVjdCh0YXNrKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTIzMDEsNyArMjQxNiw4IEBACiAgKiBGaW5kIHRoZSBmaXJzdCB0YXNrIHdpdGggdGdpZCA+PSB0Z2lkCiAgKgogICovCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3RnaWQodW5zaWduZWQgaW50IHRnaWQpCitzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0X3RnaWQodW5zaWduZWQgaW50IHRnaWQsCisJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJc3RydWN0IHBpZCAqcGlkOwpAQCAtMjMwOSw5ICsyNDI1LDkgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiByZXRyeToKIAl0YXNrID0gTlVMTDsKLQlwaWQgPSBmaW5kX2dlX3BpZCh0Z2lkKTsKKwlwaWQgPSBmaW5kX2dlX3BpZCh0Z2lkLCBucyk7CiAJaWYgKHBpZCkgewotCQl0Z2lkID0gcGlkLT5uciArIDE7CisJCXRnaWQgPSBwaWRfbnJfbnMocGlkLCBucykgKyAxOwogCQl0YXNrID0gcGlkX3Rhc2socGlkLCBQSURUWVBFX1BJRCk7CiAJCS8qIFdoYXQgd2UgdG8ga25vdyBpcyBpZiB0aGUgcGlkIHdlIGhhdmUgZmluZCBpcyB0aGUKIAkJICogcGlkIG9mIGEgdGhyZWFkX2dyb3VwX2xlYWRlci4gIFRlc3RpbmcgZm9yIHRhc2sKQEAgLTIzNTEsNiArMjQ2Nyw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpyZWFwZXIgPSBnZXRfcHJvY190YXNrKGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlpbnQgdGdpZDsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKIAlpZiAoIXJlYXBlcikKIAkJZ290byBvdXRfbm9fdGFzazsKQEAgLTIzNjEsMTEgKzI0NzgsMTIgQEAKIAkJCWdvdG8gb3V0OwogCX0KIAorCW5zID0gZmlscC0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKIAl0Z2lkID0gZmlscC0+Zl9wb3MgLSBUR0lEX09GRlNFVDsKLQlmb3IgKHRhc2sgPSBuZXh0X3RnaWQodGdpZCk7CisJZm9yICh0YXNrID0gbmV4dF90Z2lkKHRnaWQsIG5zKTsKIAkgICAgIHRhc2s7Ci0JICAgICBwdXRfdGFza19zdHJ1Y3QodGFzayksIHRhc2sgPSBuZXh0X3RnaWQodGdpZCArIDEpKSB7Ci0JCXRnaWQgPSB0YXNrLT5waWQ7CisJICAgICBwdXRfdGFza19zdHJ1Y3QodGFzayksIHRhc2sgPSBuZXh0X3RnaWQodGdpZCArIDEsIG5zKSkgeworCQl0Z2lkID0gdGFza19waWRfbnJfbnModGFzaywgbnMpOwogCQlmaWxwLT5mX3BvcyA9IHRnaWQgKyBUR0lEX09GRlNFVDsKIAkJaWYgKHByb2NfcGlkX2ZpbGxfY2FjaGUoZmlscCwgZGlyZW50LCBmaWxsZGlyLCB0YXNrLCB0Z2lkKSA8IDApIHsKIAkJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKQEAgLTIzODgsNiArMjUwNiw3IEBACiAJUkVHKCJlbnZpcm9uIiwgICBTX0lSVVNSLCBlbnZpcm9uKSwKIAlJTkYoImF1eHYiLCAgICAgIFNfSVJVU1IsIHBpZF9hdXh2KSwKIAlJTkYoInN0YXR1cyIsICAgIFNfSVJVR08sIHBpZF9zdGF0dXMpLAorCUlORigibGltaXRzIiwJIFNfSVJVU1IsIHBpZF9saW1pdHMpLAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogCVJFRygic2NoZWQiLCAgICAgU19JUlVHT3xTX0lXVVNSLCBwaWRfc2NoZWQpLAogI2VuZGlmCkBAIC0yNDE2LDkgKzI1MzUsMTIgQEAKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCUlORigic2NoZWRzdGF0IiwgU19JUlVHTywgcGlkX3NjaGVkc3RhdCksCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQ1BVU0VUUworI2lmZGVmIENPTkZJR19QUk9DX1BJRF9DUFVTRVQKIAlSRUcoImNwdXNldCIsICAgIFNfSVJVR08sIGNwdXNldCksCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfQ0dST1VQUworCVJFRygiY2dyb3VwIiwgIFNfSVJVR08sIGNncm91cCksCisjZW5kaWYKIAlJTkYoIm9vbV9zY29yZSIsIFNfSVJVR08sIG9vbV9zY29yZSksCiAJUkVHKCJvb21fYWRqIiwgICBTX0lSVUdPfFNfSVdVU1IsIG9vbV9hZGp1c3QpLAogI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKQEAgLTI0ODYsNiArMjYwOCw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbGVhZGVyID0gZ2V0X3Byb2NfdGFzayhkaXIpOwogCXVuc2lnbmVkIHRpZDsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKIAlpZiAoIWxlYWRlcikKIAkJZ290byBvdXRfbm9fdGFzazsKQEAgLTI0OTQsMTQgKzI2MTcsMTUgQEAKIAlpZiAodGlkID09IH4wVSkKIAkJZ290byBvdXQ7CiAKKwlucyA9IGRlbnRyeS0+ZF9zYi0+c19mc19pbmZvOwogCXJjdV9yZWFkX2xvY2soKTsKLQl0YXNrID0gZmluZF90YXNrX2J5X3BpZCh0aWQpOworCXRhc2sgPSBmaW5kX3Rhc2tfYnlfcGlkX25zKHRpZCwgbnMpOwogCWlmICh0YXNrKQogCQlnZXRfdGFza19zdHJ1Y3QodGFzayk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJaWYgKCF0YXNrKQogCQlnb3RvIG91dDsKLQlpZiAobGVhZGVyLT50Z2lkICE9IHRhc2stPnRnaWQpCisJaWYgKCFzYW1lX3RocmVhZF9ncm91cChsZWFkZXIsIHRhc2spKQogCQlnb3RvIG91dF9kcm9wX3Rhc2s7CiAKIAlyZXN1bHQgPSBwcm9jX3Rhc2tfaW5zdGFudGlhdGUoZGlyLCBkZW50cnksIHRhc2ssIE5VTEwpOwpAQCAtMjUyNiwxNCArMjY1MCwxNCBAQAogICogdGhyZWFkcyBwYXN0IGl0LgogICovCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaXJzdF90aWQoc3RydWN0IHRhc2tfc3RydWN0ICpsZWFkZXIsCi0JCQkJCWludCB0aWQsIGludCBucikKKwkJaW50IHRpZCwgaW50IG5yLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwb3M7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJLyogQXR0ZW1wdCB0byBzdGFydCB3aXRoIHRoZSBwaWQgb2YgYSB0aHJlYWQgKi8KIAlpZiAodGlkICYmIChuciA+IDApKSB7Ci0JCXBvcyA9IGZpbmRfdGFza19ieV9waWQodGlkKTsKKwkJcG9zID0gZmluZF90YXNrX2J5X3BpZF9ucyh0aWQsIG5zKTsKIAkJaWYgKHBvcyAmJiAocG9zLT5ncm91cF9sZWFkZXIgPT0gbGVhZGVyKSkKIAkJCWdvdG8gZm91bmQ7CiAJfQpAQCAtMjYwMiw2ICsyNzI2LDcgQEAKIAlpbm9fdCBpbm87CiAJaW50IHRpZDsKIAl1bnNpZ25lZCBsb25nIHBvcyA9IGZpbHAtPmZfcG9zOyAgLyogYXZvaWRpbmcgImxvbmcgbG9uZyIgZmlscC0+Zl9wb3MgKi8KKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKIAl0YXNrID0gZ2V0X3Byb2NfdGFzayhpbm9kZSk7CiAJaWYgKCF0YXNrKQpAQCAtMjYzNSwxMiArMjc2MCwxMyBAQAogCS8qIGZfdmVyc2lvbiBjYWNoZXMgdGhlIHRnaWQgdmFsdWUgdGhhdCB0aGUgbGFzdCByZWFkZGlyIGNhbGwgY291bGRuJ3QKIAkgKiByZXR1cm4uIGxzZWVrIGFrYSB0ZWxsZGlyIGF1dG9tYWdpY2FsbHkgcmVzZXRzIGZfdmVyc2lvbiB0byAwLgogCSAqLworCW5zID0gZmlscC0+Zl9kZW50cnktPmRfc2ItPnNfZnNfaW5mbzsKIAl0aWQgPSAoaW50KWZpbHAtPmZfdmVyc2lvbjsKIAlmaWxwLT5mX3ZlcnNpb24gPSAwOwotCWZvciAodGFzayA9IGZpcnN0X3RpZChsZWFkZXIsIHRpZCwgcG9zIC0gMik7CisJZm9yICh0YXNrID0gZmlyc3RfdGlkKGxlYWRlciwgdGlkLCBwb3MgLSAyLCBucyk7CiAJICAgICB0YXNrOwogCSAgICAgdGFzayA9IG5leHRfdGlkKHRhc2spLCBwb3MrKykgewotCQl0aWQgPSB0YXNrLT5waWQ7CisJCXRpZCA9IHRhc2tfcGlkX25yX25zKHRhc2ssIG5zKTsKIAkJaWYgKHByb2NfdGFza19maWxsX2NhY2hlKGZpbHAsIGRpcmVudCwgZmlsbGRpciwgdGFzaywgdGlkKSA8IDApIHsKIAkJCS8qIHJldHVybmluZyB0aGlzIHRnaWQgZmFpbGVkLCBzYXZlIGl0IGFzIHRoZSBmaXJzdAogCQkJICogcGlkIGZvciB0aGUgbmV4dCByZWFkaXIgY2FsbCAqLwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS5jIGIvZnMvcHJvYy9pbm9kZS5jCmluZGV4IDk5Y2EwMDQuLmFiZTZhM2YgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW5vZGUuYworKysgYi9mcy9wcm9jL2lub2RlLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCXJldHVybiBOVUxMOwogfQkJCQogCi1pbnQgcHJvY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKK2ludCBwcm9jX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogewogCXN0cnVjdCBpbm9kZSAqIHJvb3RfaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvcHJvY19taXNjLmMgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCmluZGV4IGQ2ZGM3MmMuLmUwZDA2NGUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY19taXNjLmMKKysrIGIvZnMvcHJvYy9wcm9jX21pc2MuYwpAQCAtOTEsNyArOTEsOCBAQAogCQlMT0FEX0lOVChhKSwgTE9BRF9GUkFDKGEpLAogCQlMT0FEX0lOVChiKSwgTE9BRF9GUkFDKGIpLAogCQlMT0FEX0lOVChjKSwgTE9BRF9GUkFDKGMpLAotCQlucl9ydW5uaW5nKCksIG5yX3RocmVhZHMsIGN1cnJlbnQtPm5zcHJveHktPnBpZF9ucy0+bGFzdF9waWQpOworCQlucl9ydW5uaW5nKCksIG5yX3RocmVhZHMsCisJCXRhc2tfYWN0aXZlX3BpZF9ucyhjdXJyZW50KS0+bGFzdF9waWQpOwogCXJldHVybiBwcm9jX2NhbGNfbWV0cmljcyhwYWdlLCBzdGFydCwgb2ZmLCBjb3VudCwgZW9mLCBsZW4pOwogfQogCmRpZmYgLS1naXQgYS9mcy9wcm9jL3Jvb3QuYyBiL2ZzL3Byb2Mvcm9vdC5jCmluZGV4IGNmMzA0NjYuLmVjOWNiM2IgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2Mvcm9vdC5jCisrKyBiL2ZzL3Byb2Mvcm9vdC5jCkBAIC0xOCwzMiArMTgsOTAgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2J1cywgKnByb2Nfcm9vdF9mcywgKnByb2Nfcm9vdF9kcml2ZXI7CiAKK3N0YXRpYyBpbnQgcHJvY190ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHNiLT5zX2ZzX2luZm8gPT0gZGF0YTsKK30KKworc3RhdGljIGludCBwcm9jX3NldF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKKworCW5zID0gKHN0cnVjdCBwaWRfbmFtZXNwYWNlICopZGF0YTsKKwlzYi0+c19mc19pbmZvID0gZ2V0X3BpZF9ucyhucyk7CisJcmV0dXJuIHNldF9hbm9uX3N1cGVyKHNiLCBOVUxMKTsKK30KKwogc3RhdGljIGludCBwcm9jX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKIAlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKIHsKKwlpbnQgZXJyOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOworCXN0cnVjdCBwcm9jX2lub2RlICplaTsKKwogCWlmIChwcm9jX21udCkgewogCQkvKiBTZWVkIHRoZSByb290IGRpcmVjdG9yeSB3aXRoIGEgcGlkIHNvIGl0IGRvZXNuJ3QgbmVlZAogCQkgKiB0byBiZSBzcGVjaWFsIGluIGJhc2UuYy4gIEkgd291bGQgZG8gdGhpcyBlYXJsaWVyIGJ1dAogCQkgKiB0aGUgb25seSB0YXNrIGFsaXZlIHdoZW4gL3Byb2MgaXMgbW91bnRlZCB0aGUgZmlyc3QgdGltZQogCQkgKiBpcyB0aGUgaW5pdF90YXNrIGFuZCBpdCBkb2Vzbid0IGhhdmUgYW55IHBpZHMuCiAJCSAqLwotCQlzdHJ1Y3QgcHJvY19pbm9kZSAqZWk7CiAJCWVpID0gUFJPQ19JKHByb2NfbW50LT5tbnRfc2ItPnNfcm9vdC0+ZF9pbm9kZSk7CiAJCWlmICghZWktPnBpZCkKIAkJCWVpLT5waWQgPSBmaW5kX2dldF9waWQoMSk7CiAJfQotCXJldHVybiBnZXRfc2Jfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBwcm9jX2ZpbGxfc3VwZXIsIG1udCk7CisKKwlpZiAoZmxhZ3MgJiBNU19LRVJOTU9VTlQpCisJCW5zID0gKHN0cnVjdCBwaWRfbmFtZXNwYWNlICopZGF0YTsKKwllbHNlCisJCW5zID0gY3VycmVudC0+bnNwcm94eS0+cGlkX25zOworCisJc2IgPSBzZ2V0KGZzX3R5cGUsIHByb2NfdGVzdF9zdXBlciwgcHJvY19zZXRfc3VwZXIsIG5zKTsKKwlpZiAoSVNfRVJSKHNiKSkKKwkJcmV0dXJuIFBUUl9FUlIoc2IpOworCisJaWYgKCFzYi0+c19yb290KSB7CisJCXNiLT5zX2ZsYWdzID0gZmxhZ3M7CisJCWVyciA9IHByb2NfZmlsbF9zdXBlcihzYik7CisJCWlmIChlcnIpIHsKKwkJCXVwX3dyaXRlKCZzYi0+c191bW91bnQpOworCQkJZGVhY3RpdmF0ZV9zdXBlcihzYik7CisJCQlyZXR1cm4gZXJyOworCQl9CisKKwkJZWkgPSBQUk9DX0koc2ItPnNfcm9vdC0+ZF9pbm9kZSk7CisJCWlmICghZWktPnBpZCkgeworCQkJcmN1X3JlYWRfbG9jaygpOworCQkJZWktPnBpZCA9IGdldF9waWQoZmluZF9waWRfbnMoMSwgbnMpKTsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQl9CisKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOworCQlucy0+cHJvY19tbnQgPSBtbnQ7CisJfQorCisJcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworfQorCitzdGF0aWMgdm9pZCBwcm9jX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CisKKwlucyA9IChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqKXNiLT5zX2ZzX2luZm87CisJa2lsbF9hbm9uX3N1cGVyKHNiKTsKKwlwdXRfcGlkX25zKG5zKTsKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIHByb2NfZnNfdHlwZSA9IHsKIAkubmFtZQkJPSAicHJvYyIsCiAJLmdldF9zYgkJPSBwcm9jX2dldF9zYiwKLQkua2lsbF9zYgk9IGtpbGxfYW5vbl9zdXBlciwKKwkua2lsbF9zYgk9IHByb2Nfa2lsbF9zYiwKIH07CiAKIHZvaWQgX19pbml0IHByb2Nfcm9vdF9pbml0KHZvaWQpCkBAIC01NCwxMiArMTEyLDEzIEBACiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmcHJvY19mc190eXBlKTsKIAlpZiAoZXJyKQogCQlyZXR1cm47Ci0JcHJvY19tbnQgPSBrZXJuX21vdW50KCZwcm9jX2ZzX3R5cGUpOworCXByb2NfbW50ID0ga2Vybl9tb3VudF9kYXRhKCZwcm9jX2ZzX3R5cGUsICZpbml0X3BpZF9ucyk7CiAJZXJyID0gUFRSX0VSUihwcm9jX21udCk7CiAJaWYgKElTX0VSUihwcm9jX21udCkpIHsKIAkJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZwcm9jX2ZzX3R5cGUpOwogCQlyZXR1cm47CiAJfQorCiAJcHJvY19taXNjX2luaXQoKTsKIAogCXByb2NfbmV0X2luaXQoKTsKQEAgLTE1Myw2ICsyMTIsMjIgQEAKIAkucGFyZW50CQk9ICZwcm9jX3Jvb3QsCiB9OwogCitpbnQgcGlkX25zX3ByZXBhcmVfcHJvYyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCit7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CisKKwltbnQgPSBrZXJuX21vdW50X2RhdGEoJnByb2NfZnNfdHlwZSwgbnMpOworCWlmIChJU19FUlIobW50KSkKKwkJcmV0dXJuIFBUUl9FUlIobW50KTsKKworCXJldHVybiAwOworfQorCit2b2lkIHBpZF9uc19yZWxlYXNlX3Byb2Moc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQoreworCW1udHB1dChucy0+cHJvY19tbnQpOworfQorCiBFWFBPUlRfU1lNQk9MKHByb2Nfc3ltbGluayk7CiBFWFBPUlRfU1lNQk9MKHByb2NfbWtkaXIpOwogRVhQT1JUX1NZTUJPTChjcmVhdGVfcHJvY19lbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IDJhNWRkMzQuLjE2YjMzMWQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC00Nyw3ICs0Nyw5IEBACiAgICAgdGVzdF9iaXQoX0FMTE9DXyAjIyBvcHRuYW1lICwgJlNCX0FMTE9DX09QVFMocykpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfYml0X2FkZHJlc3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzLAotCQkJCSAgIGJfYmxvY2tucl90IGJsb2NrLCBpbnQgKmJtYXBfbnIsIGludCAqb2Zmc2V0KQorCQkJCSAgIGJfYmxvY2tucl90IGJsb2NrLAorCQkJCSAgIHVuc2lnbmVkIGludCAqYm1hcF9uciwKKwkJCQkgICB1bnNpZ25lZCBpbnQgKm9mZnNldCkKIHsKIAkvKiBJdCBpcyBpbiB0aGUgYml0bWFwIGJsb2NrIG51bWJlciBlcXVhbCB0byB0aGUgYmxvY2sKIAkgKiBudW1iZXIgZGl2aWRlZCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgaW4gYSBibG9jay4gKi8KQEAgLTU2LDEwICs1OCwxMCBAQAogCSpvZmZzZXQgPSBibG9jayAmICgocy0+c19ibG9ja3NpemUgPDwgMykgLSAxKTsKIH0KIAotI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogaW50IGlzX3JldXNhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgYl9ibG9ja25yX3QgYmxvY2ssIGludCBiaXRfdmFsdWUpCiB7Ci0JaW50IGJtYXAsIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgYm1hcCwgb2Zmc2V0OworCXVuc2lnbmVkIGludCBibWFwX2NvdW50ID0gcmVpc2VyZnNfYm1hcF9jb3VudChzKTsKIAogCWlmIChibG9jayA9PSAwIHx8IGJsb2NrID49IFNCX0JMT0NLX0NPVU5UKHMpKSB7CiAJCXJlaXNlcmZzX3dhcm5pbmcocywKQEAgLTc1LDI1ICs3NywyNiBAQAogCWlmICh1bmxpa2VseSh0ZXN0X2JpdChSRUlTRVJGU19PTERfRk9STUFULAogCQkJICAgICAgJihSRUlTRVJGU19TQihzKS0+c19wcm9wZXJ0aWVzKSkpKSB7CiAJCWJfYmxvY2tucl90IGJtYXAxID0gUkVJU0VSRlNfU0IocyktPnNfc2JoLT5iX2Jsb2NrbnIgKyAxOwotCQlpZiAoYmxvY2sgPj0gYm1hcDEgJiYgYmxvY2sgPD0gYm1hcDEgKyBTQl9CTUFQX05SKHMpKSB7CisJCWlmIChibG9jayA+PSBibWFwMSAmJgorCQkgICAgYmxvY2sgPD0gYm1hcDEgKyBibWFwX2NvdW50KSB7CiAJCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2czogNDAxOTogaXNfcmV1c2FibGU6ICIKIAkJCQkJICJiaXRtYXAgYmxvY2sgJWx1KCV1KSBjYW4ndCBiZSBmcmVlZCBvciByZXVzZWQiLAotCQkJCQkgYmxvY2ssIFNCX0JNQVBfTlIocykpOworCQkJCQkgYmxvY2ssIGJtYXBfY291bnQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAob2Zmc2V0ID09IDApIHsKIAkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzOiA0MDIwOiBpc19yZXVzYWJsZTogIgogCQkJCQkgImJpdG1hcCBibG9jayAlbHUoJXUpIGNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCi0JCQkJCSBibG9jaywgU0JfQk1BUF9OUihzKSk7CisJCQkJCSBibG9jaywgYm1hcF9jb3VudCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCWlmIChibWFwID49IFNCX0JNQVBfTlIocykpIHsKKwlpZiAoYm1hcCA+PSBibWFwX2NvdW50KSB7CiAJCXJlaXNlcmZzX3dhcm5pbmcocywKIAkJCQkgInZzLTQwMzA6IGlzX3JldXNhYmxlOiB0aGVyZSBpcyBubyBzbyBtYW55IGJpdG1hcCBibG9ja3M6ICIKLQkJCQkgImJsb2NrPSVsdSwgYml0bWFwX25yPSVkIiwgYmxvY2ssIGJtYXApOworCQkJCSAiYmxvY2s9JWx1LCBiaXRtYXBfbnI9JXUiLCBibG9jaywgYm1hcCk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTA2LDEyICsxMDksMTEgQEAKIAogCXJldHVybiAxOwogfQotI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwogCiAvKiBzZWFyY2hlcyBpbiBqb3VybmFsIHN0cnVjdHVyZXMgZm9yIGEgZ2l2ZW4gYmxvY2sgbnVtYmVyIChibWFwLCBvZmYpLiBJZiBibG9jawogICAgaXMgZm91bmQgaW4gcmVpc2VyZnMgam91cm5hbCBpdCBzdWdnZXN0cyBuZXh0IGZyZWUgYmxvY2sgY2FuZGlkYXRlIHRvIHRlc3QuICovCi1zdGF0aWMgaW5saW5lIGludCBpc19ibG9ja19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGJtYXAsIGludAotCQkJCSAgICAgIG9mZiwgaW50ICpuZXh0KQorc3RhdGljIGlubGluZSBpbnQgaXNfYmxvY2tfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHVuc2lnbmVkIGludCBibWFwLAorCQkJCSAgICAgIGludCBvZmYsIGludCAqbmV4dCkKIHsKIAliX2Jsb2NrbnJfdCB0bXA7CiAKQEAgLTEzMiw4ICsxMzQsOCBAQAogLyogaXQgc2VhcmNoZXMgZm9yIGEgd2luZG93IG9mIHplcm8gYml0cyB3aXRoIGdpdmVuIG1pbmltdW0gYW5kIG1heGltdW0gbGVuZ3RocyBpbiBvbmUgYml0bWFwCiAgKiBibG9jazsgKi8KIHN0YXRpYyBpbnQgc2Nhbl9iaXRtYXBfYmxvY2soc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICAgIGludCBibWFwX24sIGludCAqYmVnLCBpbnQgYm91bmRhcnksIGludCBtaW4sCi0JCQkgICAgIGludCBtYXgsIGludCB1bmZtKQorCQkJICAgICB1bnNpZ25lZCBpbnQgYm1hcF9uLCBpbnQgKmJlZywgaW50IGJvdW5kYXJ5LAorCQkJICAgICBpbnQgbWluLCBpbnQgbWF4LCBpbnQgdW5mbSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSB0aC0+dF9zdXBlcjsKIAlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX2luZm8gKmJpID0gJlNCX0FQX0JJVE1BUChzKVtibWFwX25dOwpAQCAtMTQzLDggKzE0NSw4IEBACiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCVJGQUxTRShibWFwX24gPj0gU0JfQk1BUF9OUihzKSwgIkJpdG1hcCAlZCBpcyBvdXQgb2YgcmFuZ2UgKDAuLiVkKSIsCi0JICAgICAgIGJtYXBfbiwgU0JfQk1BUF9OUihzKSAtIDEpOworCVJGQUxTRShibWFwX24gPj0gcmVpc2VyZnNfYm1hcF9jb3VudChzKSwgIkJpdG1hcCAldSBpcyBvdXQgb2YgIgorCSAgICAgICAicmFuZ2UgKDAuLiV1KSIsIGJtYXBfbiwgcmVpc2VyZnNfYm1hcF9jb3VudChzKSAtIDEpOwogCVBST0NfSU5GT19JTkMocywgc2Nhbl9iaXRtYXAuYm1hcCk7CiAvKiB0aGlzIGlzIHVuY2xlYXIgYW5kIGxhY2tzIGNvbW1lbnRzLCBleHBsYWluIGhvdyBqb3VybmFsIGJpdG1hcHMKICAgIHdvcmsgaGVyZSBmb3IgdGhlIHJlYWRlci4gIENvbnZleSBhIHNlbnNlIG9mIHRoZSBkZXNpZ24gaGVyZS4gV2hhdApAQCAtMjQ5LDEyICsyNTEsMTIgQEAKIAl9IGVsc2UgewogCQloYXNoX2luID0gKGNoYXIgKikoJmlkKTsKIAkJaGFzaCA9IGtleWVkX2hhc2goaGFzaF9pbiwgNCk7Ci0JCWJtID0gaGFzaCAlIFNCX0JNQVBfTlIocyk7CisJCWJtID0gaGFzaCAlIHJlaXNlcmZzX2JtYXBfY291bnQocyk7CiAJCWlmICghYm0pCiAJCQlibSA9IDE7CiAJfQogCS8qIHRoaXMgY2FuIG9ubHkgYmUgdHJ1ZSB3aGVuIFNCX0JNQVBfTlIgPSAxICovCi0JaWYgKGJtID49IFNCX0JNQVBfTlIocykpCisJaWYgKGJtID49IHJlaXNlcmZzX2JtYXBfY291bnQocykpCiAJCWJtID0gMDsKIAlyZXR1cm4gYm07CiB9CkBAIC0yNzMsNyArMjc1LDcgQEAKIAkgKiB0byBtYWtlIGEgYmV0dGVyIGRlY2lzaW9uLiBUaGlzIGZhdm9ycyBsb25nLXRlcm0gcGVyZm9ybWFjZSBnYWluCiAJICogd2l0aCBhIGJldHRlciBvbi1kaXNrIGxheW91dCB2cy4gYSBzaG9ydCB0ZXJtIGdhaW4gb2Ygc2tpcHBpbmcgdGhlCiAJICogcmVhZCBhbmQgcG90ZW50aWFsbHkgaGF2aW5nIGEgYmFkIHBsYWNlbWVudC4gKi8KLQlpZiAoaW5mby0+Zmlyc3RfemVyb19oaW50ID09IDApIHsKKwlpZiAoaW5mby0+ZnJlZV9jb3VudCA9PSBVSU5UX01BWCkgewogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gcmVpc2VyZnNfcmVhZF9iaXRtYXBfYmxvY2socywgYm0pOwogCQlicmVsc2UoYmgpOwogCX0KQEAgLTMwOSwxNiArMzExLDE2IEBACiAgKiBiaXRtYXAgYW5kIHBsYWNlIG5ldyBibG9ja3MgdGhlcmUuIFJldHVybnMgbnVtYmVyIG9mIGFsbG9jYXRlZCBibG9ja3MuICovCiBzdGF0aWMgaW50IHNjYW5fYml0bWFwKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkgICAgICAgYl9ibG9ja25yX3QgKiBzdGFydCwgYl9ibG9ja25yX3QgZmluaXNoLAotCQkgICAgICAgaW50IG1pbiwgaW50IG1heCwgaW50IHVuZm0sIHVuc2lnbmVkIGxvbmcgZmlsZV9ibG9jaykKKwkJICAgICAgIGludCBtaW4sIGludCBtYXgsIGludCB1bmZtLCBzZWN0b3JfdCBmaWxlX2Jsb2NrKQogewogCWludCBucl9hbGxvY2F0ZWQgPSAwOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHRoLT50X3N1cGVyOwogCS8qIGZpbmQgZXZlcnkgYm0gYW5kIGJtYXAgYW5kIGJtYXBfbnIgaW4gdGhpcyBmaWxlLCBhbmQgY2hhbmdlIHRoZW0gYWxsIHRvIGJpdG1hcF9ibG9ja25yCiAJICogLSBIYW5zLCBpdCBpcyBub3QgYSBibG9jayBudW1iZXIgLSBaYW0uICovCiAKLQlpbnQgYm0sIG9mZjsKLQlpbnQgZW5kX2JtLCBlbmRfb2ZmOwotCWludCBvZmZfbWF4ID0gcy0+c19ibG9ja3NpemUgPDwgMzsKKwl1bnNpZ25lZCBpbnQgYm0sIG9mZjsKKwl1bnNpZ25lZCBpbnQgZW5kX2JtLCBlbmRfb2ZmOworCXVuc2lnbmVkIGludCBvZmZfbWF4ID0gcy0+c19ibG9ja3NpemUgPDwgMzsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCkBAIC0zMjgsMTAgKzMzMCwxMCBAQAogCiAJZ2V0X2JpdF9hZGRyZXNzKHMsICpzdGFydCwgJmJtLCAmb2ZmKTsKIAlnZXRfYml0X2FkZHJlc3MocywgZmluaXNoLCAmZW5kX2JtLCAmZW5kX29mZik7Ci0JaWYgKGJtID4gU0JfQk1BUF9OUihzKSkKKwlpZiAoYm0gPiByZWlzZXJmc19ibWFwX2NvdW50KHMpKQogCQlyZXR1cm4gMDsKLQlpZiAoZW5kX2JtID4gU0JfQk1BUF9OUihzKSkKLQkJZW5kX2JtID0gU0JfQk1BUF9OUihzKTsKKwlpZiAoZW5kX2JtID4gcmVpc2VyZnNfYm1hcF9jb3VudChzKSkKKwkJZW5kX2JtID0gcmVpc2VyZnNfYm1hcF9jb3VudChzKTsKIAogCS8qIFdoZW4gdGhlIGJpdG1hcCBpcyBtb3JlIHRoYW4gMTAlIGZyZWUsIGFueW9uZSBjYW4gYWxsb2NhdGUuCiAJICogV2hlbiBpdCdzIGxlc3MgdGhhbiAxMCUgZnJlZSwgb25seSBmaWxlcyB0aGF0IGFscmVhZHkgdXNlIHRoZQpAQCAtMzg1LDcgKzM4Nyw3IEBACiAJc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICpyczsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiaCwgKmJtYmg7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICphcGJpOwotCWludCBuciwgb2Zmc2V0OworCXVuc2lnbmVkIGludCBuciwgb2Zmc2V0OwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKQEAgLTM5NywxMCArMzk5LDEyIEBACiAKIAlnZXRfYml0X2FkZHJlc3MocywgYmxvY2ssICZuciwgJm9mZnNldCk7CiAKLQlpZiAobnIgPj0gc2JfYm1hcF9ucihycykpIHsKKwlpZiAobnIgPj0gcmVpc2VyZnNfYm1hcF9jb3VudChzKSkgewogCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy00MDc1OiByZWlzZXJmc19mcmVlX2Jsb2NrOiAiCi0JCQkJICJibG9jayAlbHUgaXMgb3V0IG9mIHJhbmdlIG9uICVzIiwKLQkJCQkgYmxvY2ssIHJlaXNlcmZzX2JkZXZuYW1lKHMpKTsKKwkJCQkgImJsb2NrICVsdSBpcyBvdXQgb2YgcmFuZ2Ugb24gJXMgIgorCQkJCSAiKG5yPSV1LG1heD0ldSkiLCBibG9jaywKKwkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksIG5yLAorCQkJCSByZWlzZXJmc19ibWFwX2NvdW50KHMpKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDM0LDEyICs0MzgsMTkgQEAKIAkJCSBpbnQgZm9yX3VuZm9ybWF0dGVkKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHRoLT50X3N1cGVyOwotCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKIAlSRkFMU0UoIXMsICJ2cy00MDYxOiB0cnlpbmcgdG8gZnJlZSBibG9jayBvbiBub25leGlzdGVudCBkZXZpY2UiKTsKLQlSRkFMU0UoaXNfcmV1c2FibGUocywgYmxvY2ssIDEpID09IDAsCi0JICAgICAgICJ2cy00MDcxOiBjYW4gbm90IGZyZWUgc3VjaCBibG9jayIpOworCWlmICghaXNfcmV1c2FibGUocywgYmxvY2ssIDEpKQorCQlyZXR1cm47CisKKwlpZiAoYmxvY2sgPiBzYl9ibG9ja19jb3VudChSRUlTRVJGU19TQihzKS0+c19ycykpIHsKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJiaXRtYXAtNDA3MiIsCisJCQkgICAgICAgIlRyeWluZyB0byBmcmVlIGJsb2NrIG91dHNpZGUgZmlsZSBzeXN0ZW0gIgorCQkJICAgICAgICJib3VuZGFyaWVzICglbHUgPiAlbHUpIiwKKwkJCSAgICAgICBibG9jaywgc2JfYmxvY2tfY291bnQoUkVJU0VSRlNfU0IocyktPnNfcnMpKTsKKwkJcmV0dXJuOworCX0KIAkvKiBtYXJrIGl0IGJlZm9yZSB3ZSBjbGVhciBpdCwganVzdCBpbiBjYXNlICovCiAJam91cm5hbF9tYXJrX2ZyZWVkKHRoLCBzLCBibG9jayk7CiAJX3JlaXNlcmZzX2ZyZWVfYmxvY2sodGgsIGlub2RlLCBibG9jaywgZm9yX3VuZm9ybWF0dGVkKTsKQEAgLTQ0OSwxMSArNDYwLDExIEBACiBzdGF0aWMgdm9pZCByZWlzZXJmc19mcmVlX3ByZWFsbG9jX2Jsb2NrKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwgYl9ibG9ja25yX3QgYmxvY2spCiB7CisJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJUkZBTFNFKCF0aC0+dF9zdXBlciwKIAkgICAgICAgInZzLTQwNjA6IHRyeWluZyB0byBmcmVlIGJsb2NrIG9uIG5vbmV4aXN0ZW50IGRldmljZSIpOwotCVJGQUxTRShpc19yZXVzYWJsZSh0aC0+dF9zdXBlciwgYmxvY2ssIDEpID09IDAsCi0JICAgICAgICJ2cy00MDcwOiBjYW4gbm90IGZyZWUgc3VjaCBibG9jayIpOwotCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOworCWlmICghaXNfcmV1c2FibGUodGgtPnRfc3VwZXIsIGJsb2NrLCAxKSkKKwkJcmV0dXJuOwogCV9yZWlzZXJmc19mcmVlX2Jsb2NrKHRoLCBpbm9kZSwgYmxvY2ssIDEpOwogfQogCkBAIC0xMjA3LDI3ICsxMjE4LDIyIEBACiB7CiAJdW5zaWduZWQgbG9uZyAqY3VyID0gKHVuc2lnbmVkIGxvbmcgKikoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUpOwogCi0JaW5mby0+Zmlyc3RfemVyb19oaW50ID0gMSA8PCAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAzKTsKKwkvKiBUaGUgZmlyc3QgYml0IG11c3QgQUxXQVlTIGJlIDEgKi8KKwlCVUdfT04oIXJlaXNlcmZzX3Rlc3RfbGVfYml0KDAsICh1bnNpZ25lZCBsb25nICopYmgtPmJfZGF0YSkpOworCisJaW5mby0+ZnJlZV9jb3VudCA9IDA7CiAKIAl3aGlsZSAoLS1jdXIgPj0gKHVuc2lnbmVkIGxvbmcgKiliaC0+Yl9kYXRhKSB7Ci0JCWludCBiYXNlID0gKChjaGFyICopY3VyIC0gYmgtPmJfZGF0YSkgPDwgMzsKKwkJaW50IGk7CiAKIAkJLyogMCBhbmQgfjAgYXJlIHNwZWNpYWwsIHdlIGNhbiBvcHRpbWl6ZSBmb3IgdGhlbSAqLwotCQlpZiAoKmN1ciA9PSAwKSB7Ci0JCQlpbmZvLT5maXJzdF96ZXJvX2hpbnQgPSBiYXNlOworCQlpZiAoKmN1ciA9PSAwKQogCQkJaW5mby0+ZnJlZV9jb3VudCArPSBCSVRTX1BFUl9MT05HOwotCQl9IGVsc2UgaWYgKCpjdXIgIT0gfjBMKSB7ICAgICAgIC8qIEEgbWl4LCBpbnZlc3RpZ2F0ZSAqLwotCQkJaW50IGI7Ci0JCQlmb3IgKGIgPSBCSVRTX1BFUl9MT05HIC0gMTsgYiA+PSAwOyBiLS0pIHsKLQkJCQlpZiAoIXJlaXNlcmZzX3Rlc3RfbGVfYml0KGIsIGN1cikpIHsKLQkJCQkJaW5mby0+Zmlyc3RfemVyb19oaW50ID0gYmFzZSArIGI7CisJCWVsc2UgaWYgKCpjdXIgIT0gfjBMKQkvKiBBIG1peCwgaW52ZXN0aWdhdGUgKi8KKwkJCWZvciAoaSA9IEJJVFNfUEVSX0xPTkcgLSAxOyBpID49IDA7IGktLSkKKwkJCQlpZiAoIXJlaXNlcmZzX3Rlc3RfbGVfYml0KGksIGN1cikpCiAJCQkJCWluZm8tPmZyZWVfY291bnQrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KIAl9Ci0JLyogVGhlIGZpcnN0IGJpdCBtdXN0IEFMV0FZUyBiZSAxICovCi0JQlVHX09OKGluZm8tPmZpcnN0X3plcm9faGludCA9PSAwKTsKIH0KIAogc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWlzZXJmc19yZWFkX2JpdG1hcF9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLApAQCAtMTI1Nyw3ICsxMjYzLDcgQEAKIAkJQlVHX09OKCFidWZmZXJfdXB0b2RhdGUoYmgpKTsKIAkJQlVHX09OKGF0b21pY19yZWFkKCZiaC0+Yl9jb3VudCkgPT0gMCk7CiAKLQkJaWYgKGluZm8tPmZpcnN0X3plcm9faGludCA9PSAwKQorCQlpZiAoaW5mby0+ZnJlZV9jb3VudCA9PSBVSU5UX01BWCkKIAkJCXJlaXNlcmZzX2NhY2hlX2JpdG1hcF9tZXRhZGF0YShzYiwgYmgsIGluZm8pOwogCX0KIApAQCAtMTI2NywxMiArMTI3MywxMyBAQAogaW50IHJlaXNlcmZzX2luaXRfYml0bWFwX2NhY2hlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICpiaXRtYXA7CisJdW5zaWduZWQgaW50IGJtYXBfbnIgPSByZWlzZXJmc19ibWFwX2NvdW50KHNiKTsKIAotCWJpdG1hcCA9IHZtYWxsb2Moc2l6ZW9mICgqYml0bWFwKSAqIFNCX0JNQVBfTlIoc2IpKTsKKwliaXRtYXAgPSB2bWFsbG9jKHNpemVvZigqYml0bWFwKSAqIGJtYXBfbnIpOwogCWlmIChiaXRtYXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQoYml0bWFwLCAwLCBzaXplb2YgKCpiaXRtYXApICogU0JfQk1BUF9OUihzYikpOworCW1lbXNldChiaXRtYXAsIDB4ZmYsIHNpemVvZigqYml0bWFwKSAqIGJtYXBfbnIpOwogCiAJU0JfQVBfQklUTUFQKHNiKSA9IGJpdG1hcDsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW5vZGUuYyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKaW5kZXggOWVhMTIwMC4uYTk5MWFmOSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW5vZGUuYworKysgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCkBAIC0xOTksNyArMTk5LDcgQEAKIC8vIGZpbGVzIHdoaWNoIHdlcmUgY3JlYXRlZCBpbiB0aGUgZWFybGllciB2ZXJzaW9uIGNhbiBub3QgYmUgbG9uZ2VyLAogLy8gdGhhbiAyIGdiCiAvLwotc3RhdGljIGludCBmaWxlX2NhcGFibGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBibG9jaykKK3N0YXRpYyBpbnQgZmlsZV9jYXBhYmxlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJsb2NrKQogewogCWlmIChnZXRfaW5vZGVfaXRlbV9rZXlfdmVyc2lvbihpbm9kZSkgIT0gS0VZX0ZPUk1BVF8zXzUgfHwJLy8gaXQgaXMgbmV3IGZpbGUuCiAJICAgIGJsb2NrIDwgKDEgPDwgKDMxIC0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpKSkJLy8gb2xkIGZpbGUsIGJ1dCAnYmxvY2snIGlzIGluc2lkZSBvZiAyZ2IKQEAgLTI0Miw3ICsyNDIsNyBAQAogLy8gUGxlYXNlIGltcHJvdmUgdGhlIGVuZ2xpc2gvY2xhcml0eSBpbiB0aGUgY29tbWVudCBhYm92ZSwgYXMgaXQgaXMKIC8vIGhhcmQgdG8gdW5kZXJzdGFuZC4KIAotc3RhdGljIGludCBfZ2V0X2Jsb2NrX2NyZWF0ZV8wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgYmxvY2ssCitzdGF0aWMgaW50IF9nZXRfYmxvY2tfY3JlYXRlXzAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBhcmdzKQogewogCUlOSVRJQUxJWkVfUEFUSChwYXRoKTsKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGl0ZW1faGVhZCAqaWgsIHRtcF9paDsKIAlpbnQgZnNfZ2VuOwotCWludCBibG9ja25yOworCWJfYmxvY2tucl90IGJsb2NrbnI7CiAJY2hhciAqcCA9IE5VTEw7CiAJaW50IGNoYXJzOwogCWludCByZXQ7CkBAIC01NjksNyArNTY5LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX2FsbG9jYXRlX2Jsb2NrKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJCSAgbG9uZyBibG9jaywKKwkJCQkgIHNlY3Rvcl90IGJsb2NrLAogCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgIGJfYmxvY2tucl90ICogYWxsb2NhdGVkX2Jsb2NrX25yLAogCQkJCSAgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBpbnQgZmxhZ3MpCkBAIC0zMDYxLDcgKzMwNjEsMTEgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCWludCBlcnJvcjsKLQl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRyLT5pYV92YWxpZDsKKwl1bnNpZ25lZCBpbnQgaWFfdmFsaWQ7CisKKwkvKiBtdXN0IGJlIHR1cm5lZCBvZmYgZm9yIHJlY3Vyc2l2ZSBub3RpZnlfY2hhbmdlIGNhbGxzICovCisJaWFfdmFsaWQgPSBhdHRyLT5pYV92YWxpZCAmPSB+KEFUVFJfS0lMTF9TVUlEfEFUVFJfS0lMTF9TR0lEKTsKKwogCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwogCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgewogCQkvKiB2ZXJzaW9uIDIgaXRlbXMgd2lsbCBiZSBjYXVnaHQgYnkgdGhlIHNfbWF4Ynl0ZXMgY2hlY2sKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwppbmRleCA0Y2FkOWU3Li5iYjA1YTNlIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMKKysrIGIvZnMvcmVpc2VyZnMvam91cm5hbC5jCkBAIC0yMTksMTEgKzIxOSwxMiBAQAogCX0KIH0KIAotc3RhdGljIGludCBzZXRfYml0X2luX2xpc3RfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBpbnQgYmxvY2ssCitzdGF0aWMgaW50IHNldF9iaXRfaW5fbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCisJCQkJICBiX2Jsb2NrbnJfdCBibG9jaywKIAkJCQkgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamIpCiB7Ci0JaW50IGJtYXBfbnIgPSBibG9jayAvIChwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMpOwotCWludCBiaXRfbnIgPSBibG9jayAlIChwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMpOworCXVuc2lnbmVkIGludCBibWFwX25yID0gYmxvY2sgLyAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKKwl1bnNpZ25lZCBpbnQgYml0X25yID0gYmxvY2sgJSAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKIAogCWlmICghamItPmJpdG1hcHNbYm1hcF9ucl0pIHsKIAkJamItPmJpdG1hcHNbYm1hcF9ucl0gPSBnZXRfYml0bWFwX25vZGUocF9zX3NiKTsKQEAgLTIzOSw3ICsyNDAsNyBAQAogCWlmIChqYi0+Yml0bWFwcyA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgU0JfQk1BUF9OUihwX3Nfc2IpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcmVpc2VyZnNfYm1hcF9jb3VudChwX3Nfc2IpOyBpKyspIHsKIAkJaWYgKGpiLT5iaXRtYXBzW2ldKSB7CiAJCQlmcmVlX2JpdG1hcF9ub2RlKHBfc19zYiwgamItPmJpdG1hcHNbaV0pOwogCQkJamItPmJpdG1hcHNbaV0gPSBOVUxMOwpAQCAtMjg5LDcgKzI5MCw3IEBACiAqLwogaW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKIAkJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiX2FycmF5LAotCQkJCSAgIGludCBibWFwX25yKQorCQkJCSAgIHVuc2lnbmVkIGludCBibWFwX25yKQogewogCWludCBpOwogCWludCBmYWlsZWQgPSAwOwpAQCAtNDgzLDcgKzQ4NCw3IEBACiAqKgogKi8KIGludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAotCQkJaW50IGJtYXBfbnIsIGludCBiaXRfbnIsIGludCBzZWFyY2hfYWxsLAorCQkJdW5zaWduZWQgaW50IGJtYXBfbnIsIGludCBiaXRfbnIsIGludCBzZWFyY2hfYWxsLAogCQkJYl9ibG9ja25yX3QgKiBuZXh0X3plcm9fYml0KQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOwpAQCAtMTAxMyw3ICsxMDE0LDcgQEAKIAkJCSAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsIGludCBmbHVzaGFsbCkKIHsKIAlpbnQgaTsKLQlpbnQgYm47CisJYl9ibG9ja25yX3QgYm47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICp0YmggPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CkBAIC0yMzA3LDggKzIzMDgsOSBAQAogICAgUmlnaHQgbm93IGl0IGlzIG9ubHkgdXNlZCBmcm9tIGpvdXJuYWwgY29kZS4gQnV0IGxhdGVyIHdlIG1pZ2h0IHVzZSBpdAogICAgZnJvbSBvdGhlciBwbGFjZXMuCiAgICBOb3RlOiBEbyBub3QgdXNlIGpvdXJuYWxfZ2V0YmxrL3NiX2dldGJsayBmdW5jdGlvbnMgaGVyZSEgKi8KLXN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlaXNlcmZzX2JyZWFkYShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpkZXYsIGludCBibG9jaywKLQkJCQkJICAgaW50IGJ1ZnNpemUsIHVuc2lnbmVkIGludCBtYXhfYmxvY2spCitzdGF0aWMgc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWlzZXJmc19icmVhZGEoc3RydWN0IGJsb2NrX2RldmljZSAqZGV2LAorCQkJCQkgICBiX2Jsb2NrbnJfdCBibG9jaywgaW50IGJ1ZnNpemUsCisJCQkJCSAgIGJfYmxvY2tucl90IG1heF9ibG9jaykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJobGlzdFtCVUZOUl07CiAJdW5zaWduZWQgaW50IGJsb2NrcyA9IEJVRk5SOwpAQCAtMjczMiw3ICsyNzM0LDcgQEAKIAlqb3VybmFsLT5qX3BlcnNpc3RlbnRfdHJhbnMgPSAwOwogCWlmIChyZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMocF9zX3NiLAogCQkJCQkgICBqb3VybmFsLT5qX2xpc3RfYml0bWFwLAotCQkJCQkgICBTQl9CTUFQX05SKHBfc19zYikpKQorCQkJCQkgICByZWlzZXJmc19ibWFwX2NvdW50KHBfc19zYikpKQogCQlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAlhbGxvY2F0ZV9iaXRtYXBfbm9kZXMocF9zX3NiKTsKIApAQCAtMjc0MCw3ICsyNzQyLDcgQEAKIAlTQl9KT1VSTkFMXzFzdF9SRVNFUlZFRF9CTE9DSyhwX3Nfc2IpID0gKG9sZF9mb3JtYXQgPwogCQkJCQkJIFJFSVNFUkZTX09MRF9ESVNLX09GRlNFVF9JTl9CWVRFUwogCQkJCQkJIC8gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSArCi0JCQkJCQkgU0JfQk1BUF9OUihwX3Nfc2IpICsKKwkJCQkJCSByZWlzZXJmc19ibWFwX2NvdW50KHBfc19zYikgKwogCQkJCQkJIDEgOgogCQkJCQkJIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTIC8KIAkJCQkJCSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgMik7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9wcmludHMuYyBiL2ZzL3JlaXNlcmZzL3ByaW50cy5jCmluZGV4IGJjODA4YTkuLjVlNzM4OGIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3ByaW50cy5jCisrKyBiL2ZzL3JlaXNlcmZzL3ByaW50cy5jCkBAIC0zNTYsMTMgKzM1NiwxMSBAQAogdm9pZCByZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7Ci0JcHJpbnRrKEtFUk5fRU1FUkcgIlJFSVNFUkZTOiBwYW5pYyAoZGV2aWNlICVzKTogJXNcbiIsCi0JICAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKLQlCVUcoKTsKIAotCS8qIHRoaXMgaXMgbm90IGFjdHVhbGx5IGNhbGxlZCwgYnV0IG1ha2VzIHJlaXNlcmZzX3BhbmljKCkgIm5vcmV0dXJuIiAqLwotCXBhbmljKCJSRUlTRVJGUzogcGFuaWMgKGRldmljZSAlcyk6ICVzXG4iLAotCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKKwlkdW1wX3N0YWNrKCk7CisKKwlwYW5pYyhLRVJOX0VNRVJHICJSRUlTRVJGUzogcGFuaWMgKGRldmljZSAlcyk6ICVzXG4iLAorCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7CiB9CiAKIHZvaWQgcmVpc2VyZnNfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vLCBjb25zdCBjaGFyICpmbXQsIC4uLikKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Jlc2l6ZS5jIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKaW5kZXggOTc2Y2M3OC4uZjcxYzM5NCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcmVzaXplLmMKKysrIGIvZnMvcmVpc2VyZnMvcmVzaXplLmMKQEAgLTYxLDcgKzYxLDggQEAKIAl9CiAKIAkvKiBjb3VudCB1c2VkIGJpdHMgaW4gbGFzdCBiaXRtYXAgYmxvY2sgKi8KLQlibG9ja19yID0gU0JfQkxPQ0tfQ09VTlQocykgLSAoU0JfQk1BUF9OUihzKSAtIDEpICogcy0+c19ibG9ja3NpemUgKiA4OworCWJsb2NrX3IgPSBTQl9CTE9DS19DT1VOVChzKSAtCisJCQkocmVpc2VyZnNfYm1hcF9jb3VudChzKSAtIDEpICogcy0+c19ibG9ja3NpemUgKiA4OwogCiAJLyogY291bnQgYml0bWFwIGJsb2NrcyBpbiBuZXcgZnMgKi8KIAlibWFwX25yX25ldyA9IGJsb2NrX2NvdW50X25ldyAvIChzLT5zX2Jsb2Nrc2l6ZSAqIDgpOwpAQCAtNzMsNyArNzQsNyBAQAogCiAJLyogc2F2ZSBvbGQgdmFsdWVzICovCiAJYmxvY2tfY291bnQgPSBTQl9CTE9DS19DT1VOVChzKTsKLQlibWFwX25yID0gU0JfQk1BUF9OUihzKTsKKwlibWFwX25yID0gcmVpc2VyZnNfYm1hcF9jb3VudChzKTsKIAogCS8qIHJlc2l6aW5nIG9mIHJlaXNlcmZzIGJpdG1hcHMgKGpvdXJuYWwgYW5kIHJlYWwpLCBpZiBuZWVkZWQgKi8KIAlpZiAoYm1hcF9ucl9uZXcgPiBibWFwX25yKSB7CkBAIC0xMTksNyArMTIwLDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJCW1lbXNldChiaXRtYXAsIDAsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvKSAqIFNCX0JNQVBfTlIocykpOworCQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbykgKiBibWFwX25yX25ldyk7CiAJCWZvciAoaSA9IDA7IGkgPCBibWFwX25yOyBpKyspCiAJCQliaXRtYXBbaV0gPSBvbGRfYml0bWFwW2ldOwogCkBAIC0xNDMsNyArMTQ0LDYgQEAKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJCS8vIHVwZGF0ZSBiaXRtYXBfaW5mbyBzdHVmZgotCQkJYml0bWFwW2ldLmZpcnN0X3plcm9faGludCA9IDE7CiAJCQliaXRtYXBbaV0uZnJlZV9jb3VudCA9IHNiX2Jsb2Nrc2l6ZShzYikgKiA4IC0gMTsKIAkJCWJyZWxzZShiaCk7CiAJCX0KQEAgLTE3Myw4ICsxNzMsNiBAQAogCWZvciAoaSA9IGJsb2NrX3I7IGkgPCBzLT5zX2Jsb2Nrc2l6ZSAqIDg7IGkrKykKIAkJcmVpc2VyZnNfdGVzdF9hbmRfY2xlYXJfbGVfYml0KGksIGJoLT5iX2RhdGEpOwogCWluZm8tPmZyZWVfY291bnQgKz0gcy0+c19ibG9ja3NpemUgKiA4IC0gYmxvY2tfcjsKLQlpZiAoIWluZm8tPmZpcnN0X3plcm9faGludCkKLQkJaW5mby0+Zmlyc3RfemVyb19oaW50ID0gYmxvY2tfcjsKIAogCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIHMsIGJoKTsKIAlicmVsc2UoYmgpOwpAQCAtMTk2LDkgKzE5NCw2IEBACiAJYnJlbHNlKGJoKTsKIAogCWluZm8tPmZyZWVfY291bnQgLT0gcy0+c19ibG9ja3NpemUgKiA4IC0gYmxvY2tfcl9uZXc7Ci0JLyogRXh0cmVtZSBjYXNlIHdoZXJlIGxhc3QgYml0bWFwIGlzIHRoZSBvbmx5IHZhbGlkIGJsb2NrIGluIGl0c2VsZi4gKi8KLQlpZiAoIWluZm8tPmZyZWVfY291bnQpCi0JCWluZm8tPmZpcnN0X3plcm9faGludCA9IDA7CiAJLyogdXBkYXRlIHN1cGVyICovCiAJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBTQl9CVUZGRVJfV0lUSF9TQihzKSwgMSk7CiAJZnJlZV9ibG9ja3MgPSBTQl9GUkVFX0JMT0NLUyhzKTsKQEAgLTIwNiw3ICsyMDEsNyBAQAogCQkJICAgZnJlZV9ibG9ja3MgKyAoYmxvY2tfY291bnRfbmV3IC0gYmxvY2tfY291bnQgLQogCQkJCQkgIChibWFwX25yX25ldyAtIGJtYXBfbnIpKSk7CiAJUFVUX1NCX0JMT0NLX0NPVU5UKHMsIGJsb2NrX2NvdW50X25ldyk7Ci0JUFVUX1NCX0JNQVBfTlIocywgYm1hcF9ucl9uZXcpOworCVBVVF9TQl9CTUFQX05SKHMsIGJtYXBfd291bGRfd3JhcChibWFwX25yX25ldykgPyA6IGJtYXBfbnJfbmV3KTsKIAlzLT5zX2RpcnQgPSAxOwogCiAJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3RyZWUuYyBiL2ZzL3JlaXNlcmZzL3N0cmVlLmMKaW5kZXggOTgxMDI3ZC4uY2E0MTU2NyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3RyZWUuYworKysgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCkBAIC01NTksNyArNTU5LDcgQEAKIC8qIFRoZSBmdW5jdGlvbiBpcyBOT1QgU0NIRURVTEUtU0FGRSEgKi8KIHN0YXRpYyB2b2lkIHNlYXJjaF9ieV9rZXlfcmVhZGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzLAogCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLAotCQkJCXVuc2lnbmVkIGxvbmcgKmIsIGludCBudW0pCisJCQkJYl9ibG9ja25yX3QgKmIsIGludCBudW0pCiB7CiAJaW50IGksIGo7CiAKQEAgLTYxMSw3ICs2MTEsNyBAQAogCQkJCQkgICBESVNLX0xFQUZfTk9ERV9MRVZFTCAqLwogICAgICkKIHsKLQlpbnQgbl9ibG9ja19udW1iZXI7CisJYl9ibG9ja25yX3Qgbl9ibG9ja19udW1iZXI7CiAJaW50IGV4cGVjdGVkX2xldmVsOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOwogCXN0cnVjdCBwYXRoX2VsZW1lbnQgKnBfc19sYXN0X2VsZW1lbnQ7CkBAIC02MTksNyArNjE5LDcgQEAKIAlpbnQgcmlnaHRfbmVpZ2hib3Jfb2ZfbGVhZl9ub2RlOwogCWludCBmc19nZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZWFkYV9iaFtTRUFSQ0hfQllfS0VZX1JFQURBXTsKLQl1bnNpZ25lZCBsb25nIHJlYWRhX2Jsb2Nrc1tTRUFSQ0hfQllfS0VZX1JFQURBXTsKKwliX2Jsb2NrbnJfdCByZWFkYV9ibG9ja3NbU0VBUkNIX0JZX0tFWV9SRUFEQV07CiAJaW50IHJlYWRhX2NvdW50ID0gMDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvc3VwZXIuYyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKaW5kZXggYjgyODk3YS4uOThjMzc4MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC0zMTksNyArMzE5LDcgQEAKIAogLyogdG8gcHJvdGVjdCBmaWxlIGJlaW5nIHVubGlua2VkIGZyb20gZ2V0dGluZyBsb3N0IHdlICJzYWZlIiBsaW5rIGZpbGVzCiAgICBiZWluZyB1bmxpbmtlZC4gVGhpcyBsaW5rIHdpbGwgYmUgZGVsZXRlZCBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB3aXRoIGxhc3QKLSAgIGl0ZW0gb2YgZmlsZS4gbW91bnRpbmcgdGhlIGZpbGVzeXRlbSB3ZSBzY2FuIGFsbCB0aGVzZSBsaW5rcyBhbmQgcmVtb3ZlCisgICBpdGVtIG9mIGZpbGUuIG1vdW50aW5nIHRoZSBmaWxlc3lzdGVtIHdlIHNjYW4gYWxsIHRoZXNlIGxpbmtzIGFuZCByZW1vdmUKICAgIGZpbGVzIHdoaWNoIGFsbW9zdCBnb3QgbG9zdCAqLwogdm9pZCBhZGRfc2F2ZV9saW5rKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHJ1bmNhdGUpCkBAIC0xNzI1LDYgKzE3MjUsMjEgQEAKIAkJc2V0X3NiX3Vtb3VudF9zdGF0ZShycywgUkVJU0VSRlNfRVJST1JfRlMpOwogCQlzZXRfc2JfZnNfc3RhdGUocnMsIDApOwogCisJCS8qIENsZWFyIG91dCBzX2JtYXBfbnIgaWYgaXQgd291bGQgd3JhcC4gV2UgY2FuIGhhbmRsZSB0aGlzCisJCSAqIGNhc2UsIGJ1dCBvbGRlciByZXZpc2lvbnMgY2FuJ3QuIFRoaXMgd2lsbCBjYXVzZSB0aGUKKwkJICogZmlsZSBzeXN0ZW0gdG8gZmFpbCBtb3VudCBvbiB0aG9zZSBvbGRlciBpbXBsZW1lbnRhdGlvbnMsCisJCSAqIGF2b2lkaW5nIGNvcnJ1cHRpb24uIC1qZWZmbSAqLworCQlpZiAoYm1hcF93b3VsZF93cmFwKHJlaXNlcmZzX2JtYXBfY291bnQocykpICYmCisJCSAgICBzYl9ibWFwX25yKHJzKSAhPSAwKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci0yMDMwOiBUaGlzIGZpbGUgc3lzdGVtICIKKwkJCQkJImNsYWltcyB0byB1c2UgJXUgYml0bWFwIGJsb2NrcyBpbiAiCisJCQkJCSJpdHMgc3VwZXIgYmxvY2ssIGJ1dCByZXF1aXJlcyAldS4gIgorCQkJCQkiQ2xlYXJpbmcgdG8gemVyby4iLCBzYl9ibWFwX25yKHJzKSwKKwkJCQkJcmVpc2VyZnNfYm1hcF9jb3VudChzKSk7CisKKwkJCXNldF9zYl9ibWFwX25yKHJzLCAwKTsKKwkJfQorCiAJCWlmIChvbGRfZm9ybWF0X29ubHkocykpIHsKIAkJCS8qIGZpbGVzeXN0ZW0gb2YgZm9ybWF0IDMuNSBlaXRoZXIgd2l0aCBzdGFuZGFyZCBvciBub24tc3RhbmRhcmQKIAkJCSAgIGpvdXJuYWwgKi8KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IGZhYjRiOWIuLjE1OTdmNmIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtNDg0LDcgKzQ4NCw3IEBACiAJLyogUmVzaXplIGl0IHNvIHdlJ3JlIG9rIHRvIHdyaXRlIHRoZXJlICovCiAJbmV3YXR0cnMuaWFfc2l6ZSA9IGJ1ZmZlcl9zaXplOwogCW5ld2F0dHJzLmlhX3ZhbGlkID0gQVRUUl9TSVpFIHwgQVRUUl9DVElNRTsKLQltdXRleF9sb2NrKCZ4aW5vZGUtPmlfbXV0ZXgpOworCW11dGV4X2xvY2tfbmVzdGVkKCZ4aW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwogCWVyciA9IG5vdGlmeV9jaGFuZ2UoZnAtPmZfcGF0aC5kZW50cnksICZuZXdhdHRycyk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZmlscDsKQEAgLTEyMjMsNyArMTIyMyw4IEBACiAJCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKIAkJCWlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSAmJiAhZGVudHJ5LT5kX2lub2RlKSB7CiAJCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7Ci0JCQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwKKwkJCQkJCSAgSV9NVVRFWF9YQVRUUik7CiAJCQkJZXJyID0gaW5vZGUtPmlfb3AtPm1rZGlyKGlub2RlLCBkZW50cnksIDA3MDApOwogCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQkJCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2ZzL3NlbGVjdC5jIGIvZnMvc2VsZWN0LmMKaW5kZXggN2RlZGU4OS4uNDdmNDc5MiAxMDA2NDQKLS0tIGEvZnMvc2VsZWN0LmMKKysrIGIvZnMvc2VsZWN0LmMKQEAgLTE3NywxMSArMTc3LDYgQEAKIAlyZXR1cm4gbWF4OwogfQogCi0jZGVmaW5lIEJJVChpKQkJKDFVTCA8PCAoKGkpJihfX05GREJJVFMtMSkpKQotI2RlZmluZSBNRU0oaSxtKQkoKG0pKyh1bnNpZ25lZCkoaSkvX19ORkRCSVRTKQotI2RlZmluZSBJU1NFVChpLG0pCSgoKGkpJioobSkpICE9IDApCi0jZGVmaW5lIFNFVChpLG0pCSgqKG0pIHw9IChpKSkKLQogI2RlZmluZSBQT0xMSU5fU0VUIChQT0xMUkROT1JNIHwgUE9MTFJEQkFORCB8IFBPTExJTiB8IFBPTExIVVAgfCBQT0xMRVJSKQogI2RlZmluZSBQT0xMT1VUX1NFVCAoUE9MTFdSQkFORCB8IFBPTExXUk5PUk0gfCBQT0xMT1VUIHwgUE9MTEVSUikKICNkZWZpbmUgUE9MTEVYX1NFVCAoUE9MTFBSSSkKZGlmZiAtLWdpdCBhL2ZzL3N1cGVyLmMgYi9mcy9zdXBlci5jCmluZGV4IDFiZmNjYTIuLmNlYWYyZTMgMTAwNjQ0Ci0tLSBhL2ZzL3N1cGVyLmMKKysrIGIvZnMvc3VwZXIuYwpAQCAtMTUsNyArMTUsNyBAQAogICogIEFkZGVkIGtlcm5lbGQgc3VwcG9ydDogSmFjcXVlcyBHZWxpbmFzIGFuZCBCam9ybiBFa3dhbGwKICAqICBBZGRlZCBjaGFuZ2Vfcm9vdDogV2VybmVyIEFsbWVzYmVyZ2VyICYgSGFucyBMZXJtZW4sIEZlYiAnOTYKICAqICBBZGRlZCBvcHRpb25zIHRvIC9wcm9jL21vdW50czoKLSAqICAgIFRvcmJq9nJuIExpbmRoICh0b3Jiam9ybi5saW5kaEBnb3B0YS5zZSksIEFwcmlsIDE0LCAxOTk2LgorICogICAgVG9yYmrDtnJuIExpbmRoICh0b3Jiam9ybi5saW5kaEBnb3B0YS5zZSksIEFwcmlsIDE0LCAxOTk2LgogICogIEFkZGVkIGRldmZzIHN1cHBvcnQ6IFJpY2hhcmQgR29vY2ggPHJnb29jaEBhdG5mLmNzaXJvLmF1PiwgMTMtSkFOLTE5OTgKICAqICBIZWF2aWx5IHJld3JpdHRlbiBmb3IgJ29uZSBmcyAtIG9uZSB0cmVlJyBkY2FjaGUgYXJjaGl0ZWN0dXJlLiBBViwgTWFyIDIwMDAKICAqLwpAQCAtNDAsMTAgKzQwLDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCiAKLXZvaWQgZ2V0X2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzKTsKLXZvaWQgcHV0X2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzKTsKLXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpnZXRfZnNfdHlwZShjb25zdCBjaGFyICpuYW1lKTsKLQogTElTVF9IRUFEKHN1cGVyX2Jsb2Nrcyk7CiBERUZJTkVfU1BJTkxPQ0soc2JfbG9jayk7CiAKQEAgLTMzNiwyMSArMzMyLDIxIEBACiAJCQl2b2lkICpkYXRhKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IE5VTEw7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm9sZDsKIAlpbnQgZXJyOwogCiByZXRyeToKIAlzcGluX2xvY2soJnNiX2xvY2spOwotCWlmICh0ZXN0KSBsaXN0X2Zvcl9lYWNoKHAsICZ0eXBlLT5mc19zdXBlcnMpIHsKLQkJc3RydWN0IHN1cGVyX2Jsb2NrICpvbGQ7Ci0JCW9sZCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHN1cGVyX2Jsb2NrLCBzX2luc3RhbmNlcyk7Ci0JCWlmICghdGVzdChvbGQsIGRhdGEpKQotCQkJY29udGludWU7Ci0JCWlmICghZ3JhYl9zdXBlcihvbGQpKQotCQkJZ290byByZXRyeTsKLQkJaWYgKHMpCi0JCQlkZXN0cm95X3N1cGVyKHMpOwotCQlyZXR1cm4gb2xkOworCWlmICh0ZXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkob2xkLCAmdHlwZS0+ZnNfc3VwZXJzLCBzX2luc3RhbmNlcykgeworCQkJaWYgKCF0ZXN0KG9sZCwgZGF0YSkpCisJCQkJY29udGludWU7CisJCQlpZiAoIWdyYWJfc3VwZXIob2xkKSkKKwkJCQlnb3RvIHJldHJ5OworCQkJaWYgKHMpCisJCQkJZGVzdHJveV9zdXBlcihzKTsKKwkJCXJldHVybiBvbGQ7CisJCX0KIAl9CiAJaWYgKCFzKSB7CiAJCXNwaW5fdW5sb2NrKCZzYl9sb2NrKTsKQEAgLTQyMSw3ICs0MTcsNyBAQAogfQogCiAvKgotICogQ2FsbCB0aGUgLT5zeW5jX2ZzIHN1cGVyX29wIGFnYWluc3QgYWxsIGZpbGVzeXRlbXMgd2hpY2ggYXJlIHIvdyBhbmQKKyAqIENhbGwgdGhlIC0+c3luY19mcyBzdXBlcl9vcCBhZ2FpbnN0IGFsbCBmaWxlc3lzdGVtcyB3aGljaCBhcmUgci93IGFuZAogICogd2hpY2ggaW1wbGVtZW50IGl0LgogICoKICAqIFRoaXMgb3BlcmF0aW9uIGlzIGNhcmVmdWwgdG8gYXZvaWQgdGhlIGxpdmVsb2NrIHdoaWNoIGNvdWxkIGVhc2lseSBoYXBwZW4KQEAgLTQyOSw3ICs0MjUsNyBAQAogICogaXMgdXNlZCBvbmx5IGhlcmUuICBXZSBzZXQgaXQgYWdhaW5zdCBhbGwgZmlsZXN5c3RlbXMgYW5kIHRoZW4gY2xlYXIgaXQgYXMKICAqIHdlIHN5bmMgdGhlbS4gIFNvIHJlZGlydGllZCBmaWxlc3lzdGVtcyBhcmUgc2tpcHBlZC4KICAqCi0gKiBCdXQgaWYgcHJvY2VzcyBBIGlzIGN1cnJlbnRseSBydW5uaW5nIHN5bmNfZmlsZXN5dGVtcyBhbmQgdGhlbiBwcm9jZXNzIEIKKyAqIEJ1dCBpZiBwcm9jZXNzIEEgaXMgY3VycmVudGx5IHJ1bm5pbmcgc3luY19maWxlc3lzdGVtcyBhbmQgdGhlbiBwcm9jZXNzIEIKICAqIGNhbGxzIHN5bmNfZmlsZXN5c3RlbXMgYXMgd2VsbCwgcHJvY2VzcyBCIHdpbGwgc2V0IGFsbCB0aGUgc19uZWVkX3N5bmNfZnMKICAqIGZsYWdzIGFnYWluLCB3aGljaCB3aWxsIGNhdXNlIHByb2Nlc3MgQSB0byByZXN5bmMgZXZlcnl0aGluZy4gIEZpeCB0aGF0IHdpdGgKICAqIGEgbG9jYWwgbXV0ZXguCkBAIC05NDgsOSArOTQ0LDkgQEAKIAlyZXR1cm4gbW50OwogfQogCi1zdHJ1Y3QgdmZzbW91bnQgKmtlcm5fbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUpCitzdHJ1Y3QgdmZzbW91bnQgKmtlcm5fbW91bnRfZGF0YShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgdm9pZCAqZGF0YSkKIHsKLQlyZXR1cm4gdmZzX2tlcm5fbW91bnQodHlwZSwgMCwgdHlwZS0+bmFtZSwgTlVMTCk7CisJcmV0dXJuIHZmc19rZXJuX21vdW50KHR5cGUsIE1TX0tFUk5NT1VOVCwgdHlwZS0+bmFtZSwgZGF0YSk7CiB9CiAKLUVYUE9SVF9TWU1CT0woa2Vybl9tb3VudCk7CitFWFBPUlRfU1lNQk9MX0dQTChrZXJuX21vdW50X2RhdGEpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZmlsZS5jIGIvZnMvc3lzZnMvZmlsZS5jCmluZGV4IGQzYmUxZTcuLjI3ZDE3ODUgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2ZpbGUuYworKysgYi9mcy9zeXNmcy9maWxlLmMKQEAgLTU0MCw3ICs1NDAsNyBAQAogLyoqCiAgKglzeXNmc19jcmVhdGVfZmlsZSAtIGNyZWF0ZSBhbiBhdHRyaWJ1dGUgZmlsZSBmb3IgYW4gb2JqZWN0LgogICoJQGtvYmo6CW9iamVjdCB3ZSdyZSBjcmVhdGluZyBmb3IuIAotICoJQGF0dHI6CWF0cnJpYnV0ZSBkZXNjcmlwdG9yLgorICoJQGF0dHI6CWF0dHJpYnV0ZSBkZXNjcmlwdG9yLgogICovCiAKIGludCBzeXNmc19jcmVhdGVfZmlsZShzdHJ1Y3Qga29iamVjdCAqIGtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiBhdHRyKQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYwppbmRleCA3MjY0NDlkLi4zNTg2YzdhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYwpAQCAtNTQsOCArNTQsOCBAQAogCQlzdHJ1Y3QgZGVudHJ5CSpkZSksCiAJdm9pZAkJCSpjb250ZXh0KQogewotCXhmc19maWQyX3QJCWlmaWQ7Ci0JeGZzX2ZpZDJfdAkJcGZpZDsKKwl4ZnNfZmlkX3QJCWlmaWQ7CisJeGZzX2ZpZF90CQlwZmlkOwogCXZvaWQJCQkqcGFyZW50ID0gTlVMTDsKIAlpbnQJCQlpczY0ID0gMDsKIAlfX3UzMgkJCSpwID0gZmg7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5CQkqcmVzdWx0OwogCWludAkJCWVycm9yOwogCi0JZXJyb3IgPSB4ZnNfdmdldChYRlNfTShzYiksICZ2cCwgKGZpZF90ICopZGF0YSk7CisJZXJyb3IgPSB4ZnNfdmdldChYRlNfTShzYiksICZ2cCwgZGF0YSk7CiAJaWYgKGVycm9yIHx8IHZwID09IE5VTEwpCiAJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpIDsKIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZXhwb3J0LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuaAppbmRleCBlNzk0Y2E0Li4yZjM2MDcxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuaApAQCAtNzEsMTMgKzcxLDEzIEBACiAKIC8qCiAgKiBEZWNvZGUgZW5jb2RlZCBpbm9kZSBpbmZvcm1hdGlvbiAoZWl0aGVyIGZvciB0aGUgaW5vZGUgaXRzZWxmCi0gKiBvciB0aGUgcGFyZW50KSBpbnRvIGFuIHhmc19maWQyX3Qgc3RydWN0dXJlLiAgQWR2YW5jZXMgYW5kCisgKiBvciB0aGUgcGFyZW50KSBpbnRvIGFuIHhmc19maWRfdCBzdHJ1Y3R1cmUuICBBZHZhbmNlcyBhbmQKICAqIHJldHVybnMgdGhlIG5ldyBkYXRhIHBvaW50ZXIKICAqLwogc3RhdGljIGlubGluZSBfX3UzMiAqCi14ZnNfZmlsZWlkX2RlY29kZV9maWQyKF9fdTMyICpwLCB4ZnNfZmlkMl90ICpmaWQsIGludCBpczY0KQoreGZzX2ZpbGVpZF9kZWNvZGVfZmlkMihfX3UzMiAqcCwgeGZzX2ZpZF90ICpmaWQsIGludCBpczY0KQogewotCWZpZC0+ZmlkX2xlbiA9IHNpemVvZih4ZnNfZmlkMl90KSAtIHNpemVvZihmaWQtPmZpZF9sZW4pOworCWZpZC0+ZmlkX2xlbiA9IHNpemVvZih4ZnNfZmlkX3QpIC0gc2l6ZW9mKGZpZC0+ZmlkX2xlbik7CiAJZmlkLT5maWRfcGFkID0gMDsKIAlmaWQtPmZpZF9pbm8gPSAqcCsrOwogI2lmIFhGU19CSUdfSU5VTVMKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IGZmZWM2MzAuLjJiMzRiYWQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtMTUyLDExICsxNTIsMTEgQEAKIAkJbG9ja19tb2RlID0geGZzX2lsb2NrX21hcF9zaGFyZWQoaXApOwogCiAJCS8qIGZpbGwgaW4gZmlkIHNlY3Rpb24gb2YgaGFuZGxlIGZyb20gaW5vZGUgKi8KLQkJaGFuZGxlLmhhX2ZpZC54ZnNfZmlkX2xlbiA9IHNpemVvZih4ZnNfZmlkX3QpIC0KLQkJCQkJICAgIHNpemVvZihoYW5kbGUuaGFfZmlkLnhmc19maWRfbGVuKTsKLQkJaGFuZGxlLmhhX2ZpZC54ZnNfZmlkX3BhZCA9IDA7Ci0JCWhhbmRsZS5oYV9maWQueGZzX2ZpZF9nZW4gPSBpcC0+aV9kLmRpX2dlbjsKLQkJaGFuZGxlLmhhX2ZpZC54ZnNfZmlkX2lubyA9IGlwLT5pX2lubzsKKwkJaGFuZGxlLmhhX2ZpZC5maWRfbGVuID0gc2l6ZW9mKHhmc19maWRfdCkgLQorCQkJCQlzaXplb2YoaGFuZGxlLmhhX2ZpZC5maWRfbGVuKTsKKwkJaGFuZGxlLmhhX2ZpZC5maWRfcGFkID0gMDsKKwkJaGFuZGxlLmhhX2ZpZC5maWRfZ2VuID0gaXAtPmlfZC5kaV9nZW47CisJCWhhbmRsZS5oYV9maWQuZmlkX2lubyA9IGlwLT5pX2lubzsKIAogCQl4ZnNfaXVubG9ja19tYXBfc2hhcmVkKGlwLCBsb2NrX21vZGUpOwogCkBAIC0yMjIsMTAgKzIyMiwxMCBAQAogCWlmIChobGVuIDwgc2l6ZW9mKCpoYW5kbGVwKSkKIAkJbWVtc2V0KCgoY2hhciAqKWhhbmRsZXApICsgaGxlbiwgMCwgc2l6ZW9mKCpoYW5kbGVwKSAtIGhsZW4pOwogCWlmIChobGVuID4gc2l6ZW9mKGhhbmRsZXAtPmhhX2ZzaWQpKSB7Ci0JCWlmIChoYW5kbGVwLT5oYV9maWQueGZzX2ZpZF9sZW4gIT0KLQkJCQkoaGxlbiAtIHNpemVvZihoYW5kbGVwLT5oYV9mc2lkKQotCQkJCQktIHNpemVvZihoYW5kbGVwLT5oYV9maWQueGZzX2ZpZF9sZW4pKQotCQkgICAgfHwgaGFuZGxlcC0+aGFfZmlkLnhmc19maWRfcGFkKQorCQlpZiAoaGFuZGxlcC0+aGFfZmlkLmZpZF9sZW4gIT0KKwkJICAgIChobGVuIC0gc2l6ZW9mKGhhbmRsZXAtPmhhX2ZzaWQpIC0KKwkJICAgICAgICAgICAgc2l6ZW9mKGhhbmRsZXAtPmhhX2ZpZC5maWRfbGVuKSkgfHwKKwkJICAgIGhhbmRsZXAtPmhhX2ZpZC5maWRfcGFkKQogCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCX0KIApAQCAtMjMzLDkgKzIzMyw5IEBACiAJICogQ3JhY2sgdGhlIGhhbmRsZSwgb2J0YWluIHRoZSBpbm9kZSAjICYgZ2VuZXJhdGlvbiAjCiAJICovCiAJeGZpZCA9IChzdHJ1Y3QgeGZzX2ZpZCAqKSZoYW5kbGVwLT5oYV9maWQ7Ci0JaWYgKHhmaWQtPnhmc19maWRfbGVuID09IHNpemVvZigqeGZpZCkgLSBzaXplb2YoeGZpZC0+eGZzX2ZpZF9sZW4pKSB7Ci0JCWlubyAgPSB4ZmlkLT54ZnNfZmlkX2lubzsKLQkJaWdlbiA9IHhmaWQtPnhmc19maWRfZ2VuOworCWlmICh4ZmlkLT5maWRfbGVuID09IHNpemVvZigqeGZpZCkgLSBzaXplb2YoeGZpZC0+ZmlkX2xlbikpIHsKKwkJaW5vICA9IHhmaWQtPmZpZF9pbm87CisJCWlnZW4gPSB4ZmlkLT5maWRfZ2VuOwogCX0gZWxzZSB7CiAJCXJldHVybiBYRlNfRVJST1IoRUlOVkFMKTsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Rtb3BzLmMgYi9mcy94ZnMveGZzX2Rtb3BzLmMKaW5kZXggNmNkNTcwNC4uYTFlNTVmYiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kbW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfZG1vcHMuYwpAQCAtNDEsMjkgKzQxLDE2IEBACiB4ZnNfZG1vcHNfZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3QgeGZzX21vdW50X2FyZ3MgKmFyZ3MpCiB7CiAJaWYgKGFyZ3MtPmZsYWdzICYgWEZTTU5UX0RNQVBJKSB7Ci0JCXN0cnVjdCB4ZnNfZG1vcHMgKm9wczsKLQotCQlvcHMgPSBzeW1ib2xfZ2V0KHhmc19kbWNvcmVfeGZzKTsKLQkJaWYgKCFvcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJ4ZnNfZG1hcGkiKTsKLQkJCW9wcyA9IHN5bWJvbF9nZXQoeGZzX2RtY29yZV94ZnMpOwotCQl9Ci0KLQkJaWYgKCFvcHMpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8gZG1hcGkgc3VwcG9ydCBhdmFpbGFibGUuIik7Ci0JCQlyZXR1cm4gRUlOVkFMOwotCQl9Ci0JCW1wLT5tX2RtX29wcyA9IG9wczsKLQl9IGVsc2UgewotCQltcC0+bV9kbV9vcHMgPSAmeGZzX2RtY29yZV9zdHViOworCQljbW5fZXJyKENFX1dBUk4sCisJCQkiWEZTOiBkbWFwaSBzdXBwb3J0IG5vdCBhdmFpbGFibGUgaW4gdGhpcyBrZXJuZWwuIik7CisJCXJldHVybiBFSU5WQUw7CiAJfQogCisJbXAtPm1fZG1fb3BzID0gJnhmc19kbWNvcmVfc3R1YjsKIAlyZXR1cm4gMDsKIH0KIAogdm9pZAogeGZzX2Rtb3BzX3B1dChzdHJ1Y3QgeGZzX21vdW50ICptcCkKIHsKLQlpZiAobXAtPm1fZG1fb3BzICE9ICZ4ZnNfZG1jb3JlX3N0dWIpCi0JCXN5bWJvbF9wdXQoeGZzX2RtY29yZV94ZnMpOwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mcy5oIGIvZnMveGZzL3hmc19mcy5oCmluZGV4IGVjM2M5YzIuLmFhYjk2NjIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnMuaAorKysgYi9mcy94ZnMveGZzX2ZzLmgKQEAgLTM4OSwzMCArMzg5LDEzIEBACiAgKi8KIHR5cGVkZWYgc3RydWN0IHsgX191MzIgdmFsWzJdOyB9IHhmc19mc2lkX3Q7IC8qIGZpbGUgc3lzdGVtIGlkIHR5cGUgKi8KIAotCi0jaWZuZGVmIEhBVkVfRklECi0jZGVmaW5lIE1BWEZJRFNaCTQ2Ci0KLXR5cGVkZWYgc3RydWN0IGZpZCB7Ci0JX191MTYJCWZpZF9sZW47CQkvKiBsZW5ndGggb2YgZGF0YSBpbiBieXRlcyAqLwotCXVuc2lnbmVkIGNoYXIJZmlkX2RhdGFbTUFYRklEU1pdOwkvKiBkYXRhIChmaWRfbGVuIHdvcnRoKSAgKi8KLX0gZmlkX3Q7Ci0jZW5kaWYKLQogdHlwZWRlZiBzdHJ1Y3QgeGZzX2ZpZCB7Ci0JX191MTYJeGZzX2ZpZF9sZW47CQkvKiBsZW5ndGggb2YgcmVtYWluZGVyCSovCi0JX191MTYJeGZzX2ZpZF9wYWQ7Ci0JX191MzIJeGZzX2ZpZF9nZW47CQkvKiBnZW5lcmF0aW9uIG51bWJlcgkqLwotCV9fdTY0CXhmc19maWRfaW5vOwkJLyogNjQgYml0cyBpbm9kZSBudW1iZXIgKi8KKwlfX3UxNglmaWRfbGVuOwkJLyogbGVuZ3RoIG9mIHJlbWFpbmRlcgkqLworCV9fdTE2CWZpZF9wYWQ7CisJX191MzIJZmlkX2dlbjsJCS8qIGdlbmVyYXRpb24gbnVtYmVyCSovCisJX191NjQJZmlkX2lubzsJCS8qIDY0IGJpdHMgaW5vZGUgbnVtYmVyICovCiB9IHhmc19maWRfdDsKIAotdHlwZWRlZiBzdHJ1Y3QgeGZzX2ZpZDIgewotCV9fdTE2CWZpZF9sZW47CS8qIGxlbmd0aCBvZiByZW1haW5kZXIgKi8KLQlfX3UxNglmaWRfcGFkOwkvKiBwYWRkaW5nLCBtdXN0IGJlIHplcm8gKi8KLQlfX3UzMglmaWRfZ2VuOwkvKiBnZW5lcmF0aW9uIG51bWJlciAqLwotCV9fdTY0CWZpZF9pbm87CS8qIGlub2RlIG51bWJlciAqLwotfSB4ZnNfZmlkMl90OwotCiB0eXBlZGVmIHN0cnVjdCB4ZnNfaGFuZGxlIHsKIAl1bmlvbiB7CiAJCV9fczY0CSAgICBhbGlnbjsJLyogZm9yY2UgYWxpZ25tZW50IG9mIGhhX2ZpZAkgKi8KQEAgLTQyMiw5ICs0MDUsOSBAQAogfSB4ZnNfaGFuZGxlX3Q7CiAjZGVmaW5lIGhhX2ZzaWQgaGFfdS5faGFfZnNpZAogCi0jZGVmaW5lIFhGU19IU0laRShoYW5kbGUpCSgoKGNoYXIgKikgJihoYW5kbGUpLmhhX2ZpZC54ZnNfZmlkX3BhZAkgXAorI2RlZmluZSBYRlNfSFNJWkUoaGFuZGxlKQkoKChjaGFyICopICYoaGFuZGxlKS5oYV9maWQuZmlkX3BhZAkgXAogCQkJCSAtIChjaGFyICopICYoaGFuZGxlKSkJCQkgIFwKLQkJCQkgKyAoaGFuZGxlKS5oYV9maWQueGZzX2ZpZF9sZW4pCisJCQkJICsgKGhhbmRsZSkuaGFfZmlkLmZpZF9sZW4pCiAKIC8qCiAgKiBGbGFncyBmb3IgZ29pbmcgZG93biBvcGVyYXRpb24KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfcW1vcHMuYyBiL2ZzL3hmcy94ZnNfcW1vcHMuYwppbmRleCBjMjY2YTAxLi4yZWMxZDhhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Ftb3BzLmMKKysrIGIvZnMveGZzL3hmc19xbW9wcy5jCkBAIC0xMzUsMTkgKzEzNSwxMyBAQAogeGZzX3Ftb3BzX2dldChzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHhmc19tb3VudF9hcmdzICphcmdzKQogewogCWlmIChhcmdzLT5mbGFncyAmIChYRlNNTlRfVVFVT1RBIHwgWEZTTU5UX1BRVU9UQSB8IFhGU01OVF9HUVVPVEEpKSB7Ci0JCXN0cnVjdCB4ZnNfcW1vcHMgKm9wczsKLQotCQlvcHMgPSBzeW1ib2xfZ2V0KHhmc19xbWNvcmVfeGZzKTsKLQkJaWYgKCFvcHMpIHsKLQkJCXJlcXVlc3RfbW9kdWxlKCJ4ZnNfcXVvdGEiKTsKLQkJCW9wcyA9IHN5bWJvbF9nZXQoeGZzX3FtY29yZV94ZnMpOwotCQl9Ci0KLQkJaWYgKCFvcHMpIHsKLQkJCWNtbl9lcnIoQ0VfV0FSTiwgIlhGUzogbm8gcXVvdGEgc3VwcG9ydCBhdmFpbGFibGUuIik7Ci0JCQlyZXR1cm4gRUlOVkFMOwotCQl9Ci0JCW1wLT5tX3FtX29wcyA9IG9wczsKKyNpZmRlZiBDT05GSUdfWEZTX1FVT1RBCisJCW1wLT5tX3FtX29wcyA9ICZ4ZnNfcW1jb3JlX3hmczsKKyNlbHNlCisJCWNtbl9lcnIoQ0VfV0FSTiwKKwkJCSJYRlM6IHFvdXRhIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGtlcm5lbC4iKTsKKwkJcmV0dXJuIEVJTlZBTDsKKyNlbmRpZgogCX0gZWxzZSB7CiAJCW1wLT5tX3FtX29wcyA9ICZ4ZnNfcW1jb3JlX3N0dWI7CiAJfQpAQCAtMTU4LDYgKzE1Miw0IEBACiB2b2lkCiB4ZnNfcW1vcHNfcHV0KHN0cnVjdCB4ZnNfbW91bnQgKm1wKQogewotCWlmIChtcC0+bV9xbV9vcHMgIT0gJnhmc19xbWNvcmVfc3R1YikKLQkJc3ltYm9sX3B1dCh4ZnNfcW1jb3JlX3hmcyk7CiB9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zmc29wcy5jIGIvZnMveGZzL3hmc192ZnNvcHMuYwppbmRleCBhNWE4NDU0Li5hMTU0NDU5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zmc29wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKQEAgLTE2MzUsOSArMTYzNSw4IEBACiB4ZnNfdmdldCgKIAl4ZnNfbW91bnRfdAkqbXAsCiAJYmh2X3Zub2RlX3QJKip2cHAsCi0JZmlkX3QJCSpmaWRwKQorCXhmc19maWRfdAkqeGZpZCkKIHsKLQl4ZnNfZmlkX3QJKnhmaWQgPSAoc3RydWN0IHhmc19maWQgKilmaWRwOwogCXhmc19pbm9kZV90CSppcDsKIAlpbnQJCWVycm9yOwogCXhmc19pbm9fdAlpbm87CkBAIC0xNjQ3LDExICsxNjQ2LDExIEBACiAJICogSW52YWxpZC4gIFNpbmNlIGhhbmRsZXMgY2FuIGJlIGNyZWF0ZWQgaW4gdXNlciBzcGFjZSBhbmQgcGFzc2VkIGluCiAJICogdmlhIGdldGhhbmRsZSgpLCB0aGlzIGlzIG5vdCBjYXVzZSBmb3IgYSBwYW5pYy4KIAkgKi8KLQlpZiAoeGZpZC0+eGZzX2ZpZF9sZW4gIT0gc2l6ZW9mKCp4ZmlkKSAtIHNpemVvZih4ZmlkLT54ZnNfZmlkX2xlbikpCisJaWYgKHhmaWQtPmZpZF9sZW4gIT0gc2l6ZW9mKCp4ZmlkKSAtIHNpemVvZih4ZmlkLT5maWRfbGVuKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwogCi0JaW5vICA9IHhmaWQtPnhmc19maWRfaW5vOwotCWlnZW4gPSB4ZmlkLT54ZnNfZmlkX2dlbjsKKwlpbm8gID0geGZpZC0+ZmlkX2lubzsKKwlpZ2VuID0geGZpZC0+ZmlkX2dlbjsKIAogCS8qCiAJICogTkZTIGNhbiBzb21ldGltZXMgc2VuZCByZXF1ZXN0cyBmb3IgaW5vIDAuICBGYWlsIHRoZW0gZ3JhY2VmdWxseS4KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdmZzb3BzLmggYi9mcy94ZnMveGZzX3Zmc29wcy5oCmluZGV4IGJjOTllM2UuLmE1OTJmZTAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdmZzb3BzLmgKKysrIGIvZnMveGZzL3hmc192ZnNvcHMuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX1hGU19WRlNPUFNfSCAxCiAKIHN0cnVjdCBjcmVkOwotc3RydWN0IGZpZDsKK3N0cnVjdCB4ZnNfZmlkOwogc3RydWN0IGlub2RlOwogc3RydWN0IGtzdGF0ZnM7CiBzdHJ1Y3QgeGZzX21vdW50OwpAQCAtMTcsNyArMTcsNyBAQAogaW50IHhmc19zdGF0dmZzKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBzdHJ1Y3Qga3N0YXRmcyAqc3RhdHAsCiAJCWJodl92bm9kZV90ICp2cCk7CiBpbnQgeGZzX3N5bmMoc3RydWN0IHhmc19tb3VudCAqbXAsIGludCBmbGFncyk7Ci1pbnQgeGZzX3ZnZXQoc3RydWN0IHhmc19tb3VudCAqbXAsIGJodl92bm9kZV90ICoqdnBwLCBzdHJ1Y3QgZmlkICpmaWRwKTsKK2ludCB4ZnNfdmdldChzdHJ1Y3QgeGZzX21vdW50ICptcCwgYmh2X3Zub2RlX3QgKip2cHAsIHN0cnVjdCB4ZnNfZmlkICp4ZmlkKTsKIGludCB4ZnNfcGFyc2VhcmdzKHN0cnVjdCB4ZnNfbW91bnQgKm1wLCBjaGFyICpvcHRpb25zLAogCQlzdHJ1Y3QgeGZzX21vdW50X2FyZ3MgKmFyZ3MsIGludCB1cGRhdGUpOwogaW50IHhmc19zaG93YXJncyhzdHJ1Y3QgeGZzX21vdW50ICptcCwgc3RydWN0IHNlcV9maWxlICptKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwppbmRleCA1ZTNjNTdjLi5lZmQ1YWZmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKKysrIGIvZnMveGZzL3hmc192bm9kZW9wcy5jCkBAIC0zNDY2LDIzICszNDY2LDE0IEBACiB9CiAKIAotLyoKLSAqIHhmc19maWQyCi0gKgotICogQSBmaWQgcm91dGluZSB0aGF0IHRha2VzIGEgcG9pbnRlciB0byBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCi0gKiBmaWQgc3RydWN0dXJlIChsaWtlIHhmc19mYXN0X2ZpZCkgYnV0IHVzZXMgYSA2NCBiaXQgaW5vZGUgbnVtYmVyLgotICovCiBpbnQKIHhmc19maWQyKAogCXhmc19pbm9kZV90CSppcCwKLQlmaWRfdAkJKmZpZHApCisJeGZzX2ZpZF90CSp4ZmlkKQogewotCXhmc19maWQyX3QJKnhmaWQgPSAoeGZzX2ZpZDJfdCAqKWZpZHA7Ci0KIAl2bl90cmFjZV9lbnRyeShpcCwgX19GVU5DVElPTl9fLCAoaW5zdF90ICopX19yZXR1cm5fYWRkcmVzcyk7Ci0JQVNTRVJUKHNpemVvZihmaWRfdCkgPj0gc2l6ZW9mKHhmc19maWQyX3QpKTsKIAotCXhmaWQtPmZpZF9sZW4gPSBzaXplb2YoeGZzX2ZpZDJfdCkgLSBzaXplb2YoeGZpZC0+ZmlkX2xlbik7CisJeGZpZC0+ZmlkX2xlbiA9IHNpemVvZih4ZnNfZmlkX3QpIC0gc2l6ZW9mKHhmaWQtPmZpZF9sZW4pOwogCXhmaWQtPmZpZF9wYWQgPSAwOwogCS8qCiAJICogdXNlIG1lbWNweSBiZWNhdXNlIHRoZSBpbm9kZSBpcyBhIGxvbmcgbG9uZyBhbmQgdGhlcmUncyBubwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5oIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCmluZGV4IGYzNmU3NGYuLmI3ZTQ2MWMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAorKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKQEAgLTM5LDcgKzM5LDcgQEAKIGludCB4ZnNfc3ltbGluayhzdHJ1Y3QgeGZzX2lub2RlICpkcCwgYmh2X3ZuYW1lX3QgKmRlbnRyeSwKIAkJY2hhciAqdGFyZ2V0X3BhdGgsIG1vZGVfdCBtb2RlLCBiaHZfdm5vZGVfdCAqKnZwcCwKIAkJc3RydWN0IGNyZWQgKmNyZWRwKTsKLWludCB4ZnNfZmlkMihzdHJ1Y3QgeGZzX2lub2RlICppcCwgZmlkX3QJKmZpZHApOworaW50IHhmc19maWQyKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzdHJ1Y3QgeGZzX2ZpZCAqeGZpZCk7CiBpbnQgeGZzX3J3bG9jayhzdHJ1Y3QgeGZzX2lub2RlICppcCwgYmh2X3Zyd2xvY2tfdCBsb2NrdHlwZSk7CiB2b2lkIHhmc19yd3VubG9jayhzdHJ1Y3QgeGZzX2lub2RlICppcCwgYmh2X3Zyd2xvY2tfdCBsb2NrdHlwZSk7CiBpbnQgeGZzX2lub2RlX2ZsdXNoKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBpbnQgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL2FjaHdhcmUuaCBiL2luY2x1ZGUvYWNwaS9hY2h3YXJlLmgKaW5kZXggOWRmMjc1Yy4uNDA1M2RmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjaHdhcmUuaAorKysgYi9pbmNsdWRlL2FjcGkvYWNod2FyZS5oCkBAIC03MSw5ICs3MSw5IEBACiBzdHJ1Y3QgYWNwaV9iaXRfcmVnaXN0ZXJfaW5mbyAqYWNwaV9od19nZXRfYml0X3JlZ2lzdGVyX2luZm8odTMyIHJlZ2lzdGVyX2lkKTsKIAogYWNwaV9zdGF0dXMKLWFjcGlfaHdfcmVnaXN0ZXJfcmVhZCh1OCB1c2VfbG9jaywgdTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUpOworYWNwaV9od19yZWdpc3Rlcl9yZWFkKHUzMiByZWdpc3Rlcl9pZCwgdTMyICogcmV0dXJuX3ZhbHVlKTsKIAotYWNwaV9zdGF0dXMgYWNwaV9od19yZWdpc3Rlcl93cml0ZSh1OCB1c2VfbG9jaywgdTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUpOworYWNwaV9zdGF0dXMgYWNwaV9od19yZWdpc3Rlcl93cml0ZSh1MzIgcmVnaXN0ZXJfaWQsIHUzMiB2YWx1ZSk7CiAKIGFjcGlfc3RhdHVzCiBhY3BpX2h3X2xvd19sZXZlbF9yZWFkKHUzMiB3aWR0aCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpX2J1cy5oIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKaW5kZXggODZhZWE0NC4uN2I3NGI2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGlfYnVzLmgKQEAgLTI2NCw3ICsyNjQsNiBAQAogCiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwX3N0YXRlIHsKIAl1OCBlbmFibGVkOjE7Ci0JdTggYWN0aXZlOjE7CiB9OwogCiBzdHJ1Y3QgYWNwaV9kZXZpY2Vfd2FrZXVwIHsKQEAgLTMzMyw2ICszMzIsNyBAQAogaW50IGFjcGlfYnVzX3NldF9wb3dlcihhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBzdGF0ZSk7CiAjaWZkZWYgQ09ORklHX0FDUElfUFJPQ19FVkVOVAogaW50IGFjcGlfYnVzX2dlbmVyYXRlX3Byb2NfZXZlbnQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIHU4IHR5cGUsIGludCBkYXRhKTsKK2ludCBhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50NChjb25zdCBjaGFyICpjbGFzcywgY29uc3QgY2hhciAqYmlkLCB1OCB0eXBlLCBpbnQgZGF0YSk7CiBpbnQgYWNwaV9idXNfcmVjZWl2ZV9ldmVudChzdHJ1Y3QgYWNwaV9idXNfZXZlbnQgKmV2ZW50KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1OCB0eXBlLCBpbnQgZGF0YSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9hY3BpeGYuaCBiL2luY2x1ZGUvYWNwaS9hY3BpeGYuaAppbmRleCAzZDdhYjllLi45NTEyZjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvYWNwaXhmLmgKKysrIGIvaW5jbHVkZS9hY3BpL2FjcGl4Zi5oCkBAIC0zMTQsNiArMzE0LDggQEAKICAqLwogYWNwaV9zdGF0dXMgYWNwaV9nZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgKiByZXR1cm5fdmFsdWUpOwogCithY3BpX3N0YXR1cyBhY3BpX2dldF9yZWdpc3Rlcl91bmxvY2tlZCh1MzIgcmVnaXN0ZXJfaWQsIHUzMiAqcmV0dXJuX3ZhbHVlKTsKKwogYWNwaV9zdGF0dXMgYWNwaV9zZXRfcmVnaXN0ZXIodTMyIHJlZ2lzdGVyX2lkLCB1MzIgdmFsdWUpOwogCiBhY3BpX3N0YXR1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCmluZGV4IDk5OTM0YTkuLjI2ZDc5ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKQEAgLTMsNiArMyw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVpZGxlLmg+CiAKICNpbmNsdWRlIDxhc20vYWNwaS5oPgogCkBAIC03NSw3ICs3Niw5IEBACiB9OwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcG93ZXIgeworCXN0cnVjdCBjcHVpZGxlX2RldmljZSBkZXY7CiAJc3RydWN0IGFjcGlfcHJvY2Vzc29yX2N4ICpzdGF0ZTsKKwlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmJtX3N0YXRlOwogCXVuc2lnbmVkIGxvbmcgYm1fY2hlY2tfdGltZXN0YW1wOwogCXUzMiBkZWZhdWx0X3N0YXRlOwogCXUzMiBibV9hY3Rpdml0eTsKQEAgLTE5OSw2ICsyMDIsNyBAQAogCXU4IGJtX2NoZWNrOjE7CiAJdTggaGFzX2NzdDoxOwogCXU4IHBvd2VyX3NldHVwX2RvbmU6MTsKKwl1OCBibV9ybGRfc2V0OjE7CiB9OwogCiBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgewpAQCAtMzIyLDYgKzMyNiw3IEBACiAJCQkgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSk7CiBpbnQgYWNwaV9wcm9jZXNzb3Jfc3VzcGVuZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKiBkZXZpY2UsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBpbnQgYWNwaV9wcm9jZXNzb3JfcmVzdW1lKHN0cnVjdCBhY3BpX2RldmljZSAqIGRldmljZSk7CitleHRlcm4gc3RydWN0IGNwdWlkbGVfZHJpdmVyIGFjcGlfaWRsZV9kcml2ZXI7CiAKIC8qIGluIHByb2Nlc3Nvcl90aGVybWFsLmMgKi8KIGludCBhY3BpX3Byb2Nlc3Nvcl9nZXRfbGltaXRfaW5mbyhzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKaW5kZXggOWU3MTIwMS4uOWUxOWE3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvYml0b3BzLmgKQEAgLTEsNyArMSwxMiBAQAogI2lmbmRlZiBfQUxQSEFfQklUT1BTX0gKICNkZWZpbmUgX0FMUEhBX0JJVE9QU19ICiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vYmFycmllci5oPgogCiAvKgogICogQ29weXJpZ2h0IDE5OTQsIExpbnVzIFRvcnZhbGRzLgpAQCAtNjksNiArNzQsMTMgQEAKIAk6IklyIiAoMVVMIDw8IChuciAmIDMxKSksICJtIiAoKm0pKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl9iaXRfdW5sb2NrKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXNtcF9tYigpOworCWNsZWFyX2JpdChuciwgYWRkcik7Cit9CisKIC8qCiAgKiBXQVJOSU5HOiBub24gYXRvbWljIHZlcnNpb24uCiAgKi8KQEAgLTgxLDYgKzkzLDEzIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAorX19jbGVhcl9iaXRfdW5sb2NrKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQoreworCXNtcF9tYigpOworCV9fY2xlYXJfYml0KG5yLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCiBjaGFuZ2VfYml0KHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgdGVtcDsKQEAgLTExNyw2ICsxMzYsMzYgQEAKIAlpbnQgKm0gPSAoKGludCAqKSBhZGRyKSArIChuciA+PiA1KTsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAorI2lmZGVmIENPTkZJR19TTVAKKwkiCW1iXG4iCisjZW5kaWYKKwkiMToJbGRsX2wgJTAsJTRcbiIKKwkiCWFuZCAlMCwlMywlMlxuIgorCSIJYm5lICUyLDJmXG4iCisJIgl4b3IgJTAsJTMsJTBcbiIKKwkiCXN0bF9jICUwLCUxXG4iCisJIgliZXEgJTAsM2ZcbiIKKwkiMjpcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJIgltYlxuIgorI2VuZGlmCisJIi5zdWJzZWN0aW9uIDJcbiIKKwkiMzoJYnIgMWJcbiIKKwkiLnByZXZpb3VzIgorCToiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKG9sZGJpdCkKKwk6IklyIiAoMVVMIDw8IChuciAmIDMxKSksICJtIiAoKm0pIDogIm1lbW9yeSIpOworCisJcmV0dXJuIG9sZGJpdCAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIGludAordGVzdF9hbmRfc2V0X2JpdF9sb2NrKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHZvaWQgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGRiaXQ7CisJdW5zaWduZWQgbG9uZyB0ZW1wOworCWludCAqbSA9ICgoaW50ICopIGFkZHIpICsgKG5yID4+IDUpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCiAJIjE6CWxkbF9sICUwLCU0XG4iCiAJIglhbmQgJTAsJTMsJTJcbiIKIAkiCWJuZSAlMiwyZlxuIgpAQCAtMTU4LDYgKzIwNyw5IEBACiAJaW50ICptID0gKChpbnQgKikgYWRkcikgKyAobnIgPj4gNSk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyNpZmRlZiBDT05GSUdfU01QCisJIgltYlxuIgorI2VuZGlmCiAJIjE6CWxkbF9sICUwLCU0XG4iCiAJIglhbmQgJTAsJTMsJTJcbiIKIAkiCWJlcSAlMiwyZlxuIgpAQCAtMTk5LDYgKzI1MSw5IEBACiAJaW50ICptID0gKChpbnQgKikgYWRkcikgKyAobnIgPj4gNSk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyNpZmRlZiBDT05GSUdfU01QCisJIgltYlxuIgorI2VuZGlmCiAJIjE6CWxkbF9sICUwLCU0XG4iCiAJIglhbmQgJTAsJTMsJTJcbiIKIAkiCXhvciAlMCwlMywlMFxuIgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvaWRlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAppbmRleCAyYTVjYzBiLi5iN2JmNjhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9pZGUuaApAQCAtNDAsNyArNDAsNiBAQAogCX0KIH0KIAotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYWxwaGEvdGxiZmx1c2guaAppbmRleCAxY2EzZWQzLi5lZWZhYjNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hbHBoYS90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3RsYmZsdXNoLmgKQEAgLTkyLDE3ICs5Miw2IEBACiAJaWYgKCptbWMpICptbWMgPSAwOwogfQogCi0vKiBGbHVzaCBhIHNwZWNpZmllZCByYW5nZSBvZiB1c2VyIG1hcHBpbmcgcGFnZSB0YWJsZXMgZnJvbSBUTEIuCi0gICBBbHRob3VnaCBBbHBoYSB1c2VzIFZQVEUgY2FjaGVzLCB0aGlzIGNhbiBiZSBhIG5vcCwgYXMgQWxwaGEgZG9lcwotICAgbm90IGhhdmUgZmluZWdyYWluZWQgdGxiIGZsdXNoaW5nLCBzbyBpdCB3aWxsIGZsdXNoIFZQVEUgc3R1ZmYKLSAgIGR1cmluZyBuZXh0IGZsdXNoX3RsYl9yYW5nZS4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLX0KLQogI2lmbmRlZiBDT05GSUdfU01QCiAvKiBGbHVzaCBldmVyeXRoaW5nIChrZXJuZWwgbWFwcGluZyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQKICAgIGR1ZSB0byB2bWFsbG9jL3ZmcmVlKS4gICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9hYWVjMjAwMC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYWFlYzIwMDAvYWFlYzIwMDAuaAppbmRleCAwMDIyMjc5Li5hNmQxZWUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hYWVjMjAwMC9hYWVjMjAwMC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWFhZWMyMDAwL2FhZWMyMDAwLmgKQEAgLTE0MCwxMSArMTQwLDExIEBACiAjZGVmaW5lIFRJTUVSM19DTEVBUglfX1JFRygweDgwMDAwZTBjKQkvKiBUaW1lciAzIENsZWFyIFJlZ2lzdGVyICovCiAKIC8qIFRpbWVyIENvbnRyb2wgcmVnaXN0ZXIgYml0cyAqLwotI2RlZmluZSBUSU1FUl9DVFJMX0VOQUJMRQkoMSA8PCA3KSAvKiBFbmFibGUgKFN0YXJ0wrAgVGltZXIgKi8KKyNkZWZpbmUgVElNRVJfQ1RSTF9FTkFCTEUJKDEgPDwgNykgLyogRW5hYmxlIChTdGFydCBUaW1lcikgKi8KICNkZWZpbmUgVElNRVJfQ1RSTF9QRVJJT0RJQwkoMSA8PCA2KSAvKiBQZXJpb2RpYyBSdW5uaW5nIE1vZGUgKi8KICNkZWZpbmUgVElNRVJfQ1RSTF9GUkVFX1JVTk5JTkcgKDAgPDwgNikgLyogTm9ybWFsIFJ1bm5pbmcgTW9kZSAqLwogI2RlZmluZSBUSU1FUl9DVFJMX0NMS1NFTF81MDhLCSgxIDw8IDMpIC8qIDUwOEtIeiBDbG9jayBzZWxlY3QgKFRpbWVyIDEsIDIpICovCi0jZGVmaW5lIFRJTUVSX0NUUkxfQ0xLU0VMXzJLCSgwIDw8IDMpIC8qIDJLSHogQ2xvY2sgU2VsZWN0IChUaW1lciAxLCAyKSovCisjZGVmaW5lIFRJTUVSX0NUUkxfQ0xLU0VMXzJLCSgwIDw8IDMpIC8qIDJLSHogQ2xvY2sgU2VsZWN0IChUaW1lciAxLCAyKSAqLwogCiAvKiBQb3dlciBhbmQgU3RhdGUgQ29udHJvbCAqLwogI2RlZmluZSBQT1dFUl9CQVNFCV9fUkVHKDB4ODAwMDA0MDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pby5oCmluZGV4IGM3MmY5ZDcuLmVlZWVhOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9pby5oCkBAIC0xNyw5ICsxNyw2IEBACiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmMDAwMAogCi0jZGVmaW5lCUJJVCh4KQkoKDEpPDwoeCkpCi0KLQogZXh0ZXJuIGludCAoKml4cDR4eF9wY2lfcmVhZCkodTMyIGFkZHIsIHUzMiBjbWQsIHUzMiogZGF0YSk7CiBleHRlcm4gaW50IGl4cDR4eF9wY2lfd3JpdGUodTMyIGFkZHIsIHUzMiBjbWQsIHUzMiBkYXRhKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3BtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG0uaAppbmRleCA2OTAzZGI3Li45ZDlmNGI1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvcG0uaApAQCAtNyw2ICs3LDggQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKwogc3RydWN0IHB4YV9jcHVfcG1fZm5zIHsKIAlpbnQJc2F2ZV9zaXplOwogCXZvaWQJKCpzYXZlKSh1bnNpZ25lZCBsb25nICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCmluZGV4IGI0MTgzMWI2Li40N2E2YjA4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCkBAIC0xOSw2ICsxOSwxMCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKQEAgLTI4Niw2ICsyOTAsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCiAvKgogICogRXh0MiBpcyBkZWZpbmVkIHRvIHVzZSBsaXR0bGUtZW5kaWFuIGJ5dGUgb3JkZXJpbmcuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCmluZGV4IDY3ODEzNGIuLjFlYjhhYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9kbWEtbWFwcGluZy5oCkBAIC00MDEsNyArNDAxLDcgQEAKICAqCiAgKiBPbiB0aGUgU0EtMTExMSwgYSBidWcgbGltaXRzIERNQSB0byBvbmx5IGNlcnRhaW4gcmVnaW9ucyBvZiBSQU0uCiAgKiBPbiB0aGUgSVhQNDI1LCB0aGUgUENJIGluYm91bmQgd2luZG93IGlzIDY0TUIgKDI1Nk1CIHRvdGFsIFJBTSkKLSAqIE9uIHNvbWUgQURJIGVuZ2luZWVyaW5nIHN5dGVtcywgUENJIGluYm91bmQgd2luZG93IGlzIDMyTUIgKDEyTUIgdG90YWwgUkFNKQorICogT24gc29tZSBBREkgZW5naW5lZXJpbmcgc3lzdGVtcywgUENJIGluYm91bmQgd2luZG93IGlzIDMyTUIgKDEyTUIgdG90YWwgUkFNKQogICoKICAqIFRoZSBmb2xsb3dpbmcgYXJlIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgZG1hYm91bmNlIHN1YnlzdGVtCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2lkZS5oIGIvaW5jbHVkZS9hc20tYXJtL2lkZS5oCmluZGV4IDRmNjhjOGEuLmYzNDhmY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaWRlLmgKQEAgLTE4LDcgKzE4LDYgQEAKICNlbmRpZgogCiAjaWYgIWRlZmluZWQoQ09ORklHX0FSQ0hfTDcyMDApCi0jIGRlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjIGlmZGVmIENPTkZJR19BUkNIX0NMUFM3NTAwCiAjICBkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KICMgZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaAppbmRleCA3MWJlNGZkLi44YzZiYzFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGxiZmx1c2guaApAQCAtNDYzLDExICs0NjMsNiBAQAogICovCiBleHRlcm4gdm9pZCB1cGRhdGVfbW11X2NhY2hlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSk7CiAKLS8qCi0gKiBBUk0gcHJvY2Vzc29ycyBkbyBub3QgY2FjaGUgVExCIHRhYmxlcyBpbiBSQU0uCi0gKi8KLSNkZWZpbmUgZmx1c2hfdGxiX3BndGFibGVzKG1tLHN0YXJ0LGVuZCkJZG8geyB9IHdoaWxlICgwKQotCiAjZW5kaWYKIAogI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWF2cjMyL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYXZyMzIvYml0b3BzLmgKaW5kZXggNTI5OWY4Yy4uMWE1MGI2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYXZyMzIvYml0b3BzLmgKQEAgLTgsNiArOCwxMCBAQAogI2lmbmRlZiBfX0FTTV9BVlIzMl9CSVRPUFNfSAogI2RlZmluZSBfX0FTTV9BVlIzMl9CSVRPUFNfSAogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMjg4LDYgKzI5Miw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXZyMzIvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLWF2cjMyL3RsYmZsdXNoLmgKaW5kZXggNzMwZTI2OC4uNWJjN2M4OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXZyMzIvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hdnIzMi90bGJmbHVzaC5oCkBAIC0xOSw3ICsxOSw2IEBACiAgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQogICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCiAgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKLSAqICAtIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2UgdGFibGVzCiAgKi8KIGV4dGVybiB2b2lkIGZsdXNoX3RsYih2b2lkKTsKIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9hbGwodm9pZCk7CkBAIC0yOSwxMiArMjgsNiBAQAogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSk7CiBleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9wYWdlKHVuc2lnbmVkIGxvbmcgYXNpZCwgdW5zaWduZWQgbG9uZyBwYWdlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiBOb3RoaW5nIHRvIGRvICovCi19Ci0KIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogCiAjZW5kaWYgLyogX19BU01fQVZSMzJfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vYml0b3BzLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9iaXRvcHMuaAppbmRleCAyN2MyZDBlLi5iMzlhMTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9iaXRvcHMuaApAQCAtMTEsNiArMTEsMTAgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KQEAgLTE5OSw2ICsyMDMsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9pZGUuaCBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lkZS5oCmluZGV4IDQxYjJkYjQuLjEyMWUyNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL2lkZS5oCkBAIC0yMCw3ICsyMCw2IEBACiAjZGVmaW5lIE1BWF9IV0lGUwkxCiAKIC8qIExlZ2FjeSAuLi4gQkxLX0RFVl9JREVDUyAqLwotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9wcm9jZXNzb3IuaAppbmRleCA2YmIzZTBkLi5jNTcxZTk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9wcm9jZXNzb3IuaApAQCAtMTA0LDEzICsxMDQsMTMgQEAKICNkZWZpbmUgY3B1X3JlbGF4KCkgICAgCWJhcnJpZXIoKQogCiAvKiBHZXQgdGhlIFNpbGljb24gUmV2aXNpb24gb2YgdGhlIGNoaXAgKi8KLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfcHVyZV9fIHVpbnQzMl90IGJmaW5fcmV2aWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgX19wdXJlIGJmaW5fcmV2aWQodm9pZCkKIHsKIAkvKiBzdG9yZWQgaW4gdGhlIHVwcGVyIDQgYml0cyAqLwogCXJldHVybiBiZmluX3JlYWRfQ0hJUElEKCkgPj4gMjg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfcHVyZV9fIHVpbnQzMl90IGJmaW5fY29tcGlsZWRfcmV2aWQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgX19wdXJlIGJmaW5fY29tcGlsZWRfcmV2aWQodm9pZCkKIHsKICNpZiBkZWZpbmVkKENPTkZJR19CRl9SRVZfMF8wKQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYmxhY2tmaW4vc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9zeXN0ZW0uaAppbmRleCAyYjNkNDdkLi40YTkyNzM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1ibGFja2Zpbi9zeXN0ZW0uaApAQCAtMTI4LDkgKzEyOCw3IEBACiAjZGVmaW5lIG1iKCkgICBhc20gdm9sYXRpbGUgKCIiICAgOiA6IDoibWVtb3J5IikKICNkZWZpbmUgcm1iKCkgIGFzbSB2b2xhdGlsZSAoIiIgICA6IDogOiJtZW1vcnkiKQogI2RlZmluZSB3bWIoKSAgYXNtIHZvbGF0aWxlICgiIiAgIDogOiA6Im1lbW9yeSIpCi0jZGVmaW5lIHNldF9ybWIodmFyLCB2YWx1ZSkgICAgZG8geyAodm9pZCkgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSAgICAgc2V0X3JtYih2YXIsIHZhbHVlKQotI2RlZmluZSBzZXRfd21iKHZhciwgdmFsdWUpICAgIGRvIHsgdmFyID0gdmFsdWU7IHdtYigpOyB9IHdoaWxlICgwKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyAodm9pZCkgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKSAJCWRvIHsgfSB3aGlsZSgwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYmxhY2tmaW4vdGxiZmx1c2guaAppbmRleCAxMGEwN2JhLi4yNzdiNDAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1ibGFja2Zpbi90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWJsYWNrZmluL3RsYmZsdXNoLmgKQEAgLTUzLDEwICs1Myw0IEBACiAJQlVHKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JQlVHKCk7Ci19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pZGUuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvaWRlLmgKaW5kZXggNjU5MGY2NS4uMTEyOTYxNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL2lkZS5oCkBAIC01NCw3ICs1NCw3IEBACiAjZGVmaW5lIFNVUFBPUlRfVkxCX1NZTkMgMAogCiAjZGVmaW5lIElERV9BUkNIX0FDS19JTlRSCi0jZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKQkoaHdpZiktPmh3LmFja19pbnRyKGh3aWYpCisjZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKQkoKGh3aWYpLT5hY2tfaW50cihod2lmKSkKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWNyaXMvYml0b3BzLmgKaW5kZXggYTU2OTA2NS4uZTJmNDljMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL2JpdG9wcy5oCkBAIC0xNCw2ICsxNCwxMCBAQAogLyogQ3VycmVudGx5IHRoaXMgaXMgdW5zdWl0YWJsZSBmb3IgY29uc3VtcHRpb24gb3V0c2lkZSB0aGUga2VybmVsLiAgKi8KICNpZmRlZiBfX0tFUk5FTF9fIAogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtL2FyY2gvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KQEAgLTE1NCw2ICsxNTgsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL3Bvc2l4X3R5cGVzLmggYi9pbmNsdWRlL2FzbS1jcmlzL3Bvc2l4X3R5cGVzLmgKaW5kZXggN2I5ZWQyMi4uOTIwMDBkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9wb3NpeF90eXBlcy5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvcG9zaXhfdHlwZXMuaApAQCAtNTIsNyArNTIsNyBAQAogfSBfX2tlcm5lbF9mc2lkX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCi0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjdW5kZWYJX19GRF9TRVQKICNkZWZpbmUgX19GRF9TRVQoZmQsZmRzZXRwKSBzZXRfYml0KGZkLCAodm9pZCAqKShmZHNldHApKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tY3Jpcy90bGJmbHVzaC5oCmluZGV4IDA1Njk2MTIuLjIwNjk3ZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWNyaXMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1jcmlzL3RsYmZsdXNoLmgKQEAgLTM4LDEzICszOCw2IEBACiAJZmx1c2hfdGxiX21tKHZtYS0+dm1fbW0pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLSAgICAgICAgLyogQ1JJUyBkb2VzIG5vdCBrZWVwIGFueSBwYWdlIHRhYmxlIGNhY2hlcyBpbiBUTEIgKi8KLX0KLQotCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiKHZvaWQpCiB7CiAJZmx1c2hfdGxiX21tKGN1cnJlbnQtPm1tKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWZydi9iaXRvcHMuaAppbmRleCBmODU2MGVkLi5lMjlkZTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1mcnYvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L2JpdG9wcy5oCkBAIC0yMSw2ICsyMSwxMCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oPgogCiAvKgpAQCAtMzAyLDYgKzMwNiw3IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWZydi90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tZnJ2L3RsYmZsdXNoLmgKaW5kZXggODM3MGY5Ny4uN2FjNWVhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tZnJ2L3RsYmZsdXNoLmgKQEAgLTU3LDcgKzU3LDYgQEAKICNkZWZpbmUgX19mbHVzaF90bGJfZ2xvYmFsKCkJCQlmbHVzaF90bGJfYWxsKCkKICNkZWZpbmUgZmx1c2hfdGxiKCkJCQkJZmx1c2hfdGxiX2FsbCgpCiAjZGVmaW5lIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkJZmx1c2hfdGxiX2FsbCgpCi0jZGVmaW5lIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSxzdGFydCxlbmQpCWRvIHsgfSB3aGlsZSgwKQogCiAjZWxzZQogCkBAIC02Niw3ICs2NSw2IEBACiAjZGVmaW5lIGZsdXNoX3RsYl9tbShtbSkJCQlCVUcoKQogI2RlZmluZSBmbHVzaF90bGJfcGFnZSh2bWEsYWRkcikJCUJVRygpCiAjZGVmaW5lIGZsdXNoX3RsYl9yYW5nZShtbSxzdGFydCxlbmQpCQlCVUcoKQotI2RlZmluZSBmbHVzaF90bGJfcGd0YWJsZXMobW0sc3RhcnQsZW5kKQlCVUcoKQogI2RlZmluZSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpCUJVRygpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzLmgKaW5kZXggMWY5ZDk5MS4uMTVlNmYyNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy5oCkBAIC0xOSw5ICsxOSwxNCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKaW5kZXggY2Q4YTk2NC4uNDY1N2YzZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvYXRvbWljLmgKQEAgLTMsOSArMyw2IEBACiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAotI2RlZmluZSBCSVRPUF9NQVNLKG5yKQkJKDFVTCA8PCAoKG5yKSAlIEJJVFNfUEVSX0xPTkcpKQotI2RlZmluZSBCSVRPUF9XT1JEKG5yKQkJKChucikgLyBCSVRTX1BFUl9MT05HKQotCiAjaWZkZWYgQ09ORklHX1NNUAogI2luY2x1ZGUgPGFzbS9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgkJLyogd2UgdXNlIEwxX0NBQ0hFX0JZVEVTICovCkBAIC02Niw4ICs2Myw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRPUF9NQVNLKG5yKTsKLQl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRfTUFTSyhucik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUX1dPUkQobnIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKHAsIGZsYWdzKTsKQEAgLTg3LDggKzg0LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gQklUT1BfTUFTSyhucik7Ci0JdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUX01BU0sobnIpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVF9XT1JEKG5yKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJX2F0b21pY19zcGluX2xvY2tfaXJxc2F2ZShwLCBmbGFncyk7CkBAIC0xMDgsOCArMTA1LDggQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCV9hdG9taWNfc3Bpbl9sb2NrX2lycXNhdmUocCwgZmxhZ3MpOwpAQCAtMTI4LDggKzEyNSw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CiAJdW5zaWduZWQgbG9uZyBvbGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtMTUyLDggKzE0OSw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gQklUT1BfTUFTSyhucik7Ci0JdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUX01BU0sobnIpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVF9XT1JEKG5yKTsKIAl1bnNpZ25lZCBsb25nIG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0xNzUsOCArMTcyLDggQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCiB7Ci0JdW5zaWduZWQgbG9uZyBtYXNrID0gQklUT1BfTUFTSyhucik7Ci0JdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUX01BU0sobnIpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVF9XT1JEKG5yKTsKIAl1bnNpZ25lZCBsb25nIG9sZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA4YTllMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfTE9DS19IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0xPQ0tfSF8KKworLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0X2xvY2sgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlLCBmb3IgbG9jaworICogQG5yOiBCaXQgdG8gc2V0CisgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCisgKgorICogVGhpcyBvcGVyYXRpb24gaXMgYXRvbWljIGFuZCBwcm92aWRlcyBhY3F1aXJlIGJhcnJpZXIgc2VtYW50aWNzLgorICogSXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGJpdCBsb2Nrcy4KKyAqLworI2RlZmluZSB0ZXN0X2FuZF9zZXRfYml0X2xvY2sobnIsIGFkZHIpCXRlc3RfYW5kX3NldF9iaXQobnIsIGFkZHIpCisKKy8qKgorICogY2xlYXJfYml0X3VubG9jayAtIENsZWFyIGEgYml0IGluIG1lbW9yeSwgZm9yIHVubG9jaworICogQG5yOiB0aGUgYml0IHRvIHNldAorICogQGFkZHI6IHRoZSBhZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBUaGlzIG9wZXJhdGlvbiBpcyBhdG9taWMgYW5kIHByb3ZpZGVzIHJlbGVhc2UgYmFycmllciBzZW1hbnRpY3MuCisgKi8KKyNkZWZpbmUgY2xlYXJfYml0X3VubG9jayhuciwgYWRkcikJXAorZG8gewkJCQkJXAorCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOwlcCisJY2xlYXJfYml0KG5yLCBhZGRyKTsJCVwKK30gd2hpbGUgKDApCisKKy8qKgorICogX19jbGVhcl9iaXRfdW5sb2NrIC0gQ2xlYXIgYSBiaXQgaW4gbWVtb3J5LCBmb3IgdW5sb2NrCisgKiBAbnI6IHRoZSBiaXQgdG8gc2V0CisgKiBAYWRkcjogdGhlIGFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGxpa2UgY2xlYXJfYml0X3VubG9jaywgaG93ZXZlciBpdCBpcyBub3QgYXRvbWljLgorICogSXQgZG9lcyBwcm92aWRlIHJlbGVhc2UgYmFycmllciBzZW1hbnRpY3Mgc28gaXQgY2FuIGJlIHVzZWQgdG8gdW5sb2NrCisgKiBhIGJpdCBsb2NrLCBob3dldmVyIGl0IHdvdWxkIG9ubHkgYmUgdXNlZCBpZiBubyBvdGhlciBDUFUgY2FuIG1vZGlmeQorICogYW55IGJpdHMgaW4gdGhlIG1lbW9yeSB1bnRpbCB0aGUgbG9jayBpcyByZWxlYXNlZCAoYSBnb29kIGV4YW1wbGUgaXMKKyAqIGlmIHRoZSBiaXQgbG9jayBpdHNlbGYgcHJvdGVjdHMgYWNjZXNzIHRvIHRoZSBvdGhlciBiaXRzIGluIHRoZSB3b3JkKS4KKyAqLworI2RlZmluZSBfX2NsZWFyX2JpdF91bmxvY2sobnIsIGFkZHIpCVwKK2RvIHsJCQkJCVwKKwlzbXBfbWIoKTsJCQlcCisJX19jbGVhcl9iaXQobnIsIGFkZHIpOwkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qIF9BU01fR0VORVJJQ19CSVRPUFNfTE9DS19IXyAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmgKaW5kZXggNDZhODI1Yy4uNjk3Y2MyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaApAQCAtMyw5ICszLDYgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi0jZGVmaW5lIEJJVE9QX01BU0sobnIpCQkoMVVMIDw8ICgobnIpICUgQklUU19QRVJfTE9ORykpCi0jZGVmaW5lIEJJVE9QX1dPUkQobnIpCQkoKG5yKSAvIEJJVFNfUEVSX0xPTkcpCi0KIC8qKgogICogX19zZXRfYml0IC0gU2V0IGEgYml0IGluIG1lbW9yeQogICogQG5yOiB0aGUgYml0IHRvIHNldApAQCAtMTcsMTYgKzE0LDE2IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CiAKIAkqcCAgfD0gbWFzazsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fY2xlYXJfYml0KGludCBuciwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRPUF9NQVNLKG5yKTsKLQl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRfTUFTSyhucik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUX1dPUkQobnIpOwogCiAJKnAgJj0gfm1hc2s7CiB9CkBAIC00Miw4ICszOSw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CiAKIAkqcCBePSBtYXNrOwogfQpAQCAtNTksOCArNTYsOCBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CiAJdW5zaWduZWQgbG9uZyBvbGQgPSAqcDsKIAogCSpwID0gb2xkIHwgbWFzazsKQEAgLTc4LDggKzc1LDggQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgX190ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOwotCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVF9NQVNLKG5yKTsKKwl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRfV09SRChucik7CiAJdW5zaWduZWQgbG9uZyBvbGQgPSAqcDsKIAogCSpwID0gb2xkICYgfm1hc2s7CkBAIC05MCw4ICs4Nyw4IEBACiBzdGF0aWMgaW5saW5lIGludCBfX3Rlc3RfYW5kX2NoYW5nZV9iaXQoaW50IG5yLAogCQkJCQkgICAgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRPUF9NQVNLKG5yKTsKLQl1bnNpZ25lZCBsb25nICpwID0gKCh1bnNpZ25lZCBsb25nICopYWRkcikgKyBCSVRPUF9XT1JEKG5yKTsKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSBCSVRfTUFTSyhucik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUX1dPUkQobnIpOwogCXVuc2lnbmVkIGxvbmcgb2xkID0gKnA7CiAKIAkqcCA9IG9sZCBeIG1hc2s7CkBAIC0xMDUsNyArMTAyLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgdGVzdF9iaXQoaW50IG5yLCBjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewotCXJldHVybiAxVUwgJiAoYWRkcltCSVRPUF9XT1JEKG5yKV0gPj4gKG5yICYgKEJJVFNfUEVSX0xPTkctMSkpKTsKKwlyZXR1cm4gMVVMICYgKGFkZHJbQklUX1dPUkQobnIpXSA+PiAobnIgJiAoQklUU19QRVJfTE9ORy0xKSkpOwogfQogCiAjZW5kaWYgLyogX0FTTV9HRU5FUklDX0JJVE9QU19OT05fQVRPTUlDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggNTYxNTQ0MC4uOWY1ODRjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMTIsNyArMTIsMTEgQEAKIC8qIC5kYXRhIHNlY3Rpb24gKi8KICNkZWZpbmUgREFUQV9EQVRBCQkJCQkJCVwKIAkqKC5kYXRhKQkJCQkJCQlcCi0JKiguZGF0YS5pbml0LnJlZm9rKQorCSooLmRhdGEuaW5pdC5yZWZvaykJCQkJCQlcCisJLiA9IEFMSUdOKDgpOwkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX21hcmtlcnMpID0gLjsJCQkJXAorCSooX19tYXJrZXJzKQkJCQkJCQlcCisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fbWFya2VycykgPSAuOwogCiAjZGVmaW5lIFJPX0RBVEEoYWxpZ24pCQkJCQkJCVwKIAkuID0gQUxJR04oKGFsaWduKSk7CQkJCQkJXApAQCAtMjAsNiArMjQsNyBAQAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3JvZGF0YSkgPSAuOwkJCVwKIAkJKigucm9kYXRhKSAqKC5yb2RhdGEuKikJCQkJCVwKIAkJKihfX3Zlcm1hZ2ljKQkJLyogS2VybmVsIHZlcnNpb24gbWFnaWMgKi8JXAorCQkqKF9fbWFya2Vyc19zdHJpbmdzKQkvKiBNYXJrZXJzOiBzdHJpbmdzICovCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS5yb2RhdGExICAgICAgICAgIDogQVQoQUREUigucm9kYXRhMSkgLSBMT0FEX09GRlNFVCkgewkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taDgzMDAvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaAppbmRleCBkNzYyOTljLi5jYjE4ZTNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1oODMwMC9iaXRvcHMuaApAQCAtMTAsNiArMTAsMTEgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCisKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKIC8qCiAgKiBGdW5jdGlvbiBwcm90b3R5cGVzIHRvIGtlZXAgZ2NjIC1XYWxsIGhhcHB5CiAgKi8KQEAgLTE5NCw2ICsxOTksNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1hdG9taWMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbWluaXguaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKaW5kZXggNzgwNzAxOC4uMmMxZTgzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvc3lzdGVtLmgKQEAgLTgyLDggKzgyLDcgQEAKICNkZWZpbmUgbWIoKSAgIGFzbSB2b2xhdGlsZSAoIiIgICA6IDogOiJtZW1vcnkiKQogI2RlZmluZSBybWIoKSAgYXNtIHZvbGF0aWxlICgiIiAgIDogOiA6Im1lbW9yeSIpCiAjZGVmaW5lIHdtYigpICBhc20gdm9sYXRpbGUgKCIiICAgOiA6IDoibWVtb3J5IikKLSNkZWZpbmUgc2V0X3JtYih2YXIsIHZhbHVlKSAgICBkbyB7IHhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQotI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgICAgIHNldF9ybWIodmFyLCB2YWx1ZSkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIHNtcF9tYigpCW1iKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1oODMwMC90bGJmbHVzaC5oCmluZGV4IDlhMmM1YzkuLjQxYzE0OGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAvdGxiZmx1c2guaApAQCAtNTIsMTAgKzUyLDQgQEAKIAlCVUcoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlCVUcoKTsKLX0KLQogI2VuZGlmIC8qIF9IODMwMF9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oIGIvaW5jbHVkZS9hc20taWE2NC9iaXRvcHMuaAppbmRleCA2Y2M1MTdlLi5hOTc3YWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvYml0b3BzLmgKQEAgLTksNiArOSwxMCBAQAogICogTygxKSBzY2hlZHVsZXIgcGF0Y2gKICAqLwogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+CkBAIC05NCw2ICs5OCwzOCBAQAogfQogCiAvKioKKyAqIGNsZWFyX2JpdF91bmxvY2sgLSBDbGVhcnMgYSBiaXQgaW4gbWVtb3J5IHdpdGggcmVsZWFzZQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBjbGVhcl9iaXRfdW5sb2NrKCkgaXMgYXRvbWljIGFuZCBtYXkgbm90IGJlIHJlb3JkZXJlZC4gIEl0IGRvZXMKKyAqIGNvbnRhaW4gYSBtZW1vcnkgYmFycmllciBzdWl0YWJsZSBmb3IgdW5sb2NrIHR5cGUgb3BlcmF0aW9ucy4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZAorY2xlYXJfYml0X3VubG9jayAoaW50IG5yLCB2b2xhdGlsZSB2b2lkICphZGRyKQoreworCV9fdTMyIG1hc2ssIG9sZCwgbmV3OworCXZvbGF0aWxlIF9fdTMyICptOworCUNNUFhDSEdfQlVHQ0hFQ0tfREVDTAorCisJbSA9ICh2b2xhdGlsZSBfX3UzMiAqKSBhZGRyICsgKG5yID4+IDUpOworCW1hc2sgPSB+KDEgPDwgKG5yICYgMzEpKTsKKwlkbyB7CisJCUNNUFhDSEdfQlVHQ0hFQ0sobSk7CisJCW9sZCA9ICptOworCQluZXcgPSBvbGQgJiBtYXNrOworCX0gd2hpbGUgKGNtcHhjaGdfcmVsKG0sIG9sZCwgbmV3KSAhPSBvbGQpOworfQorCisvKioKKyAqIF9fY2xlYXJfYml0X3VubG9jayAtIE5vbi1hdG9taWNhbGx5IGNsZWFyIGEgYml0IHdpdGggcmVsZWFzZQorICoKKyAqIFRoaXMgaXMgbGlrZSBjbGVhcl9iaXRfdW5sb2NrLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIG1heSB1c2UgYSBub24tYXRvbWljCisgKiBzdG9yZSAodGhpcyBvbmUgdXNlcyBhbiBhdG9taWMsIGhvd2V2ZXIpLgorICovCisjZGVmaW5lIF9fY2xlYXJfYml0X3VubG9jayBjbGVhcl9iaXRfdW5sb2NrCisKKy8qKgogICogX19jbGVhcl9iaXQgLSBDbGVhcnMgYSBiaXQgaW4gbWVtb3J5IChub24tYXRvbWljIHZlcnNpb24pCiAgKi8KIHN0YXRpYyBfX2lubGluZV9fIHZvaWQKQEAgLTE3MCw2ICsyMDYsMTUgQEAKIH0KIAogLyoqCisgKiB0ZXN0X2FuZF9zZXRfYml0X2xvY2sgLSBTZXQgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlIGZvciBsb2NrCisgKiBAbnI6IEJpdCB0byBzZXQKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIGNvdW50IGZyb20KKyAqCisgKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRlc3RfYW5kX3NldF9iaXQgb24gaWE2NAorICovCisjZGVmaW5lIHRlc3RfYW5kX3NldF9iaXRfbG9jayB0ZXN0X2FuZF9zZXRfYml0CisKKy8qKgogICogX190ZXN0X2FuZF9zZXRfYml0IC0gU2V0IGEgYml0IGFuZCByZXR1cm4gaXRzIG9sZCB2YWx1ZQogICogQG5yOiBCaXQgdG8gc2V0CiAgKiBAYWRkcjogQWRkcmVzcyB0byBjb3VudCBmcm9tCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGVmbHVzaC5oCmluZGV4IDQ5MDY5MTYuLmFmY2ZiZGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvY2FjaGVmbHVzaC5oCkBAIC03LDggKzcsOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvaWRlLmggYi9pbmNsdWRlL2FzbS1pYTY0L2lkZS5oCmluZGV4IGU5Mjg2NzUuLjFjY2YyMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9pZGUuaApAQCAtNDYsNyArNDYsNiBAQAogCX0KIH0KIAotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCiAKICNpZmRlZiBDT05GSUdfUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21lbWluaXQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oCmluZGV4IDNhNjI4NzguLmY5MzMwOGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oCkBAIC0zNSw3ICszNSw3IEBACiBleHRlcm4gdm9pZCByZXNlcnZlX21lbW9yeSAodm9pZCk7CiBleHRlcm4gdm9pZCBmaW5kX2luaXRyZCAodm9pZCk7CiBleHRlcm4gaW50IGZpbHRlcl9yc3ZkX21lbW9yeSAodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIHZvaWQgKmFyZyk7Ci1leHRlcm4gdm9pZCBlZmlfbWVtbWFwX2luaXQodW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZWZpX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgKnMsIHVuc2lnbmVkIGxvbmcgKmUpOwogZXh0ZXJuIGludCBmaW5kX21heF9taW5fbG93X3BmbiAodW5zaWduZWQgbG9uZyAsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHZtY29yZV9maW5kX2Rlc2NyaXB0b3Jfc2l6ZSh1bnNpZ25lZCBsb25nIGFkZHJlc3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAppbmRleCAwOTcxZWM5Li5lNjIwNGYxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3BndGFibGUuaApAQCAtMTUwLDcgKzE1MCw3IEBACiAjIGlmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciBtbV9zdHJ1Y3QgKi8KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaAppbmRleCAxNzAzYzlkLi40NzFjYzJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKQEAgLTE0LDggKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaAppbmRleCBmZjg1N2UzLi4wMjI5ZmI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zcGlubG9jay5oCkBAIC0xMSw5ICsxMSw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20taWE2NC90bGJmbHVzaC5oCmluZGV4IGUzN2Y5ZmIuLjgwYmNiMGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3RsYmZsdXNoLmgKQEAgLTg0LDE5ICs4NCw2IEBACiB9CiAKIC8qCi0gKiBGbHVzaCB0aGUgVExCIGVudHJpZXMgbWFwcGluZyB0aGUgdmlydHVhbGx5IG1hcHBlZCBsaW5lYXIgcGFnZQotICogdGFibGUgY29ycmVzcG9uZGluZyB0byBhZGRyZXNzIHJhbmdlIFtTVEFSVC1FTkQpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWZsdXNoX3RsYl9wZ3RhYmxlcyAoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCS8qCi0JICogRGVwcmVjYXRlZC4gIFRoZSB2aXJ0dWFsIHBhZ2UgdGFibGUgaXMgbm93IGZsdXNoZWQgdmlhIHRoZSBub3JtYWwgZ2F0aGVyL2ZsdXNoCi0JICogaW50ZXJmYWNlIChzZWUgdGxiLmgpLgotCSAqLwotfQotCi0vKgogICogRmx1c2ggdGhlIGxvY2FsIFRMQi4gSW52b2tlZCBmcm9tIGFub3RoZXIgY3B1IHVzaW5nIGFuIElQSS4KICAqLwogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1tMzJyL2JpdG9wcy5oCmluZGV4IDY2YWI2NzIuLjZkYzliODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9iaXRvcHMuaApAQCAtMTEsNiArMTEsMTAgQEAKICAqICAgIENvcHlyaWdodCAoQykgMjAwNCAgSGlyb2thenUgVGFrYXRhIDx0YWthdGEgYXQgbGludXgtbTMyci5vcmc+CiAgKi8KIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTI1NSw2ICsyNTksNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaCBiL2luY2x1ZGUvYXNtLW0zMnIvaWRlLmgKaW5kZXggNDY3MmE0OS4uNWQyMDQ0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL2lkZS5oCkBAIC02NSw3ICs2NSw2IEBACiAJfQogfQogCi0jZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0lOSVQKICNkZWZpbmUgaWRlX2RlZmF1bHRfaW9fY3RsKGJhc2UpCSgoYmFzZSkgKyAweDIwNikgLyogb2Jzb2xldGUgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERVBDSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUuaAppbmRleCA5MmQ3MjY2Li44NjUwNTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUuaApAQCAtMjEsOSArMjEsOSBAQAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiBzdHJ1Y3QgbW1fc3RydWN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTMyci90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tbTMyci90bGJmbHVzaC5oCmluZGV4IDNkMzdhYzAuLjBlZjk1MzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1tMzJyL3RsYmZsdXNoLmgKQEAgLTEyLDcgKzEyLDYgQEAKICAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCiAgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKICAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcwotICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKICAqLwogCiBleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpOwpAQCAtOTMsOCArOTIsNiBAQAogCSk7CiB9CiAKLSNkZWZpbmUgZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKQlkbyB7IH0gd2hpbGUgKDApCi0KIGV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIHB0ZV90KTsKIAogI2VuZGlmCS8qIF9BU01fTTMyUl9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tbTY4ay9iaXRvcHMuaAppbmRleCAxYTYxZmRiLi4yOTc2YjVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvYml0b3BzLmgKQEAgLTgsNiArOCwxMCBAQAogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAogLyoKQEAgLTMxNCw2ICszMTgsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KIAogLyogQml0bWFwIGZ1bmN0aW9ucyBmb3IgdGhlIG1pbml4IGZpbGVzeXN0ZW0gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaCBiL2luY2x1ZGUvYXNtLW02OGsvaWRlLmgKaW5kZXggZjlmZmIyYy4uOTA5YzZkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrL2lkZS5oCkBAIC0xMzcsNyArMTM3LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFICovCiAKICNkZWZpbmUgSURFX0FSQ0hfQUNLX0lOVFIKLSNkZWZpbmUgaWRlX2Fja19pbnRyKGh3aWYpCSgoaHdpZiktPmh3LmFja19pbnRyID8gKGh3aWYpLT5ody5hY2tfaW50cihod2lmKSA6IDEpCisjZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKQkoKGh3aWYpLT5hY2tfaW50ciA/IChod2lmKS0+YWNrX2ludHIoaHdpZikgOiAxKQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9NNjhLX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrL3RsYmZsdXNoLmgKaW5kZXggMzE2Nzg4My4uMTc3MDdlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGsvdGxiZmx1c2guaApAQCAtOTIsMTEgKzkyLDYgQEAKIAlmbHVzaF90bGJfYWxsKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci19Ci0KICNlbHNlCiAKIApAQCAtMjE5LDExICsyMTQsNiBAQAogCXN1bjNfcHV0X3NlZ21hcCAoYWRkciAmIH4oU1VOM19QTUVHX1NJWkUgLSAxKSwgU1VOM19JTlZBTElEX1BNRUcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotfQotCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9NNjhLX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW02OGtub21tdS9iaXRvcHMuaAppbmRleCA3ZDYwNzVkLi5mOGRmYjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L2JpdG9wcy5oCkBAIC0xMCw2ICsxMCwxMCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgpAQCAtMTYwLDYgKzE2NCw3IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KIAogc3RhdGljIF9faW5saW5lX18gaW50IGV4dDJfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTY4a25vbW11L3N5c3RlbS5oCmluZGV4IDFiZDExNDIuLjE1YjRjN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGtub21tdS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvc3lzdGVtLmgKQEAgLTEwNCw4ICsxMDQsNyBAQAogI2RlZmluZSBtYigpICAgYXNtIHZvbGF0aWxlICgiIiAgIDogOiA6Im1lbW9yeSIpCiAjZGVmaW5lIHJtYigpICBhc20gdm9sYXRpbGUgKCIiICAgOiA6IDoibWVtb3J5IikKICNkZWZpbmUgd21iKCkgIGFzbSB2b2xhdGlsZSAoIiIgICA6IDogOiJtZW1vcnkiKQotI2RlZmluZSBzZXRfcm1iKHZhciwgdmFsdWUpICAgIGRvIHsgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSAgICAgc2V0X3JtYih2YXIsIHZhbHVlKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR19TTVAKICNkZWZpbmUgc21wX21iKCkJbWIoKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGxiZmx1c2guaAppbmRleCBkZTg1OGRiLi5hNDcwY2ZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdGxiZmx1c2guaApAQCAtNTIsMTAgKzUyLDQgQEAKIAlCVUcoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlCVUcoKTsKLX0KLQogI2VuZGlmIC8qIF9NNjhLTk9NTVVfVExCRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvYml0b3BzLmgKaW5kZXggODk5MzU3YS4uZWM3NWNlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2JpdG9wcy5oCkBAIC05LDYgKzksMTAgQEAKICNpZm5kZWYgX0FTTV9CSVRPUFNfSAogI2RlZmluZSBfQVNNX0JJVE9QU19ICiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTE3Miw2ICsxNzYsMjAgQEAKIH0KIAogLyoKKyAqIGNsZWFyX2JpdF91bmxvY2sgLSBDbGVhcnMgYSBiaXQgaW4gbWVtb3J5CisgKiBAbnI6IEJpdCB0byBjbGVhcgorICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY291bnRpbmcgZnJvbQorICoKKyAqIGNsZWFyX2JpdCgpIGlzIGF0b21pYyBhbmQgaW1wbGllcyByZWxlYXNlIHNlbWFudGljcyBiZWZvcmUgdGhlIG1lbW9yeQorICogb3BlcmF0aW9uLiBJdCBjYW4gYmUgdXNlZCBmb3IgYW4gdW5sb2NrLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfYml0X3VubG9jayh1bnNpZ25lZCBsb25nIG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXNtcF9tYl9fYmVmb3JlX2NsZWFyX2JpdCgpOworCWNsZWFyX2JpdChuciwgYWRkcik7Cit9CisKKy8qCiAgKiBjaGFuZ2VfYml0IC0gVG9nZ2xlIGEgYml0IGluIG1lbW9yeQogICogQG5yOiBCaXQgdG8gY2hhbmdlCiAgKiBAYWRkcjogQWRkcmVzcyB0byBzdGFydCBjb3VudGluZyBmcm9tCkBAIC0yNDAsNiArMjU4LDggQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCisJc21wX2xsc2NfbWIoKTsKKwogCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CiAJCXVuc2lnbmVkIGxvbmcgdGVtcDsKQEAgLTI5NSw2ICszMTUsNzMgQEAKIH0KIAogLyoKKyAqIHRlc3RfYW5kX3NldF9iaXRfbG9jayAtIFNldCBhIGJpdCBhbmQgcmV0dXJuIGl0cyBvbGQgdmFsdWUKKyAqIEBucjogQml0IHRvIHNldAorICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQorICoKKyAqIFRoaXMgb3BlcmF0aW9uIGlzIGF0b21pYyBhbmQgaW1wbGllcyBhY3F1aXJlIG9yZGVyaW5nIHNlbWFudGljcworICogYWZ0ZXIgdGhlIG1lbW9yeSBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX3NldF9iaXRfbG9jayh1bnNpZ25lZCBsb25nIG5yLAorCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKKwl1bnNpZ25lZCBsb25nIHJlczsKKworCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CisJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CisJCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CSIgX19MTCAiJTAsICUxCQkjIHRlc3RfYW5kX3NldF9iaXQJXG4iCisJCSIJb3IJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgkiIF9fU0MJIiUyLCAlMQkJCQkJXG4iCisJCSIJYmVxemwJJTIsIDFiCQkJCQlcbiIKKwkJIglhbmQJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgkuc2V0CW1pcHMwCQkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKHJlcykKKwkJOiAiciIgKDFVTCA8PCBiaXQpLCAibSIgKCptKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgaWYgKGNwdV9oYXNfbGxzYykgeworCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOworCQl1bnNpZ25lZCBsb25nIHRlbXA7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlwdXNoCQkJCQlcbiIKKwkJIgkuc2V0CW5vcmVvcmRlcgkJCQlcbiIKKwkJIgkuc2V0CW1pcHMzCQkJCQlcbiIKKwkJIjE6CSIgX19MTCAiJTAsICUxCQkjIHRlc3RfYW5kX3NldF9iaXQJXG4iCisJCSIJb3IJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgkiIF9fU0MJIiUyLCAlMQkJCQkJXG4iCisJCSIJYmVxegklMiwgMmYJCQkJCVxuIgorCQkiCSBhbmQJJTIsICUwLCAlMwkJCQlcbiIKKwkJIgkuc3Vic2VjdGlvbiAyCQkJCQlcbiIKKwkJIjI6CWIJMWIJCQkJCVxuIgorCQkiCSBub3AJCQkJCQlcbiIKKwkJIgkucHJldmlvdXMJCQkJCVxuIgorCQkiCS5zZXQJcG9wCQkJCQlcbiIKKwkJOiAiPSZyIiAodGVtcCksICI9bSIgKCptKSwgIj0mciIgKHJlcykKKwkJOiAiciIgKDFVTCA8PCBiaXQpLCAibSIgKCptKQorCQk6ICJtZW1vcnkiKTsKKwl9IGVsc2UgeworCQl2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphID0gYWRkcjsKKwkJdW5zaWduZWQgbG9uZyBtYXNrOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCWEgKz0gbnIgPj4gU1pMT05HX0xPRzsKKwkJbWFzayA9IDFVTCA8PCBiaXQ7CisJCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJlcyA9IChtYXNrICYgKmEpOworCQkqYSB8PSBtYXNrOworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCX0KKworCXNtcF9sbHNjX21iKCk7CisKKwlyZXR1cm4gcmVzICE9IDA7Cit9CisvKgogICogdGVzdF9hbmRfY2xlYXJfYml0IC0gQ2xlYXIgYSBiaXQgYW5kIHJldHVybiBpdHMgb2xkIHZhbHVlCiAgKiBAbnI6IEJpdCB0byBjbGVhcgogICogQGFkZHI6IEFkZHJlc3MgdG8gY291bnQgZnJvbQpAQCAtMzA4LDYgKzM5NSw4IEBACiAJdW5zaWduZWQgc2hvcnQgYml0ID0gbnIgJiBTWkxPTkdfTUFTSzsKIAl1bnNpZ25lZCBsb25nIHJlczsKIAorCXNtcF9sbHNjX21iKCk7CisKIAlpZiAoY3B1X2hhc19sbHNjICYmIFIxMDAwMF9MTFNDX1dBUikgewogCQl1bnNpZ25lZCBsb25nICptID0gKCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG5yID4+IFNaTE9OR19MT0cpOwogCQl1bnNpZ25lZCBsb25nIHRlbXA7CkBAIC0zOTYsNiArNDg1LDggQEAKIAl1bnNpZ25lZCBzaG9ydCBiaXQgPSBuciAmIFNaTE9OR19NQVNLOwogCXVuc2lnbmVkIGxvbmcgcmVzOwogCisJc21wX2xsc2NfbWIoKTsKKwogCWlmIChjcHVfaGFzX2xsc2MgJiYgUjEwMDAwX0xMU0NfV0FSKSB7CiAJCXVuc2lnbmVkIGxvbmcgKm0gPSAoKHVuc2lnbmVkIGxvbmcgKikgYWRkcikgKyAobnIgPj4gU1pMT05HX0xPRyk7CiAJCXVuc2lnbmVkIGxvbmcgdGVtcDsKQEAgLTQ1Myw2ICs1NDQsMjEgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbm9uLWF0b21pYy5oPgogCiAvKgorICogX19jbGVhcl9iaXRfdW5sb2NrIC0gQ2xlYXJzIGEgYml0IGluIG1lbW9yeQorICogQG5yOiBCaXQgdG8gY2xlYXIKKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHN0YXJ0IGNvdW50aW5nIGZyb20KKyAqCisgKiBfX2NsZWFyX2JpdCgpIGlzIG5vbi1hdG9taWMgYW5kIGltcGxpZXMgcmVsZWFzZSBzZW1hbnRpY3MgYmVmb3JlIHRoZSBtZW1vcnkKKyAqIG9wZXJhdGlvbi4gSXQgY2FuIGJlIHVzZWQgZm9yIGFuIHVubG9jayBpZiBubyBvdGhlciBDUFVzIGNhbiBjb25jdXJyZW50bHkKKyAqIG1vZGlmeSBvdGhlciBiaXRzIGluIHRoZSB3b3JkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19jbGVhcl9iaXRfdW5sb2NrKHVuc2lnbmVkIGxvbmcgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJc21wX21iKCk7CisJX19jbGVhcl9iaXQobnIsIGFkZHIpOworfQorCisvKgogICogUmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gKDAuLjYzKSBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCAxIGJpdCBpbiBhIHdvcmQKICAqIFJldHVybnMgLTEgaWYgbm8gMSBiaXQgZXhpc3RzCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmggYi9pbmNsdWRlL2FzbS1taXBzL2ZwdS5oCmluZGV4IDQ4MzY4NWIuLmU1OWQ0YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvZnB1LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9mcHUuaApAQCAtMTIsMTIgKzEyLDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKICNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPGFzbS9oYXphcmRzLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2lwMzIvY3JpbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9jcmltZS5oCmluZGV4IGExMzcwMmYuLjdjMzZiMGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9jcmltZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9jcmltZS5oCkBAIC0xNyw5ICsxNyw2IEBACiAgKi8KICNkZWZpbmUgQ1JJTUVfQkFTRQkweDE0MDAwMDAwCS8qIHBoeXNpY2FsICovCiAKLSN1bmRlZiBCSVQKLSNkZWZpbmUgQklUKHgpCSgxVUwgPDwgKHgpKQotCiBzdHJ1Y3Qgc2dpX2NyaW1lIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGlkOwogI2RlZmluZSBDUklNRV9JRF9NQVNLCQkJMHhmZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvaXAzMi9tYWNlLmgKaW5kZXggOTkwMDgyYy4uZDA4ZDdjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9pcDMyL21hY2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2lwMzIvbWFjZS5oCkBAIC0xNyw5ICsxNyw2IEBACiAgKi8KICNkZWZpbmUgTUFDRV9CQVNFCTB4MWYwMDAwMDAJLyogcGh5c2ljYWwgKi8KIAotI3VuZGVmIEJJVAotI2RlZmluZSBCSVQoeCkgKDFVTCA8PCAoeCkpCi0KIC8qCiAgKiBQQ0kgaW50ZXJmYWNlCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1nZW5lcmljL2lkZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmgKaW5kZXggYTc3MTI4My4uNGVjMmI5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWdlbmVyaWMvaWRlLmgKQEAgLTk4LDcgKzk4LDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAogI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9rZXJuZWwtZW50cnktaW5pdC5oIGIvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWlwMjcva2VybmVsLWVudHJ5LWluaXQuaAppbmRleCBjMWExMDMxLi42MjRkNjZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtaXAyNy9rZXJuZWwtZW50cnktaW5pdC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1pcDI3L2tlcm5lbC1lbnRyeS1pbml0LmgKQEAgLTQ2LDcgKzQ2LDE0IEBACiAJbGgJdDEsIEtWX1JPX05BU0lEX09GRlNFVCh0MCkKIAlsaAl0MiwgS1ZfUldfTkFTSURfT0ZGU0VUKHQwKQogCU1BUFBFRF9LRVJORUxfU0VUVVBfVExCCi0JQVJDNjRfVFdJRERMRV9QQworCisJLyoKKwkgKiBXZSBtaWdodCBub3QgZ2V0IGxhdW5jaGVkIGF0IHRoZSBhZGRyZXNzIHRoZSBrZXJuZWwgaXMgbGlua2VkIHRvLAorCSAqIHNvIHdlIGp1bXAgdGhlcmUuCisJICovCisJUFRSX0xBICB0MCwgMGYKKwlqciAgICAgIHQwCiswOgogCS5lbmRtCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0lQMjdfS0VSTkVMX0VOVFJZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGNpL2JyaWRnZS5oIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKaW5kZXggYjg0ZmVlYi4uNWY0YjlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wY2kvYnJpZGdlLmgKQEAgLTUzOCw3ICs1MzgsNyBAQAogCQkgQlJJREdFX0lTUl9QTVVfRVNJWkVfRkFVTFQpCiAKIC8qCi0gKiBMaXN0IG9mIEVycm9ycyB3aGljaCBhcmUgZmF0YWwgYW5kIGtpbGwgdGhlIHN5dGVtCisgKiBMaXN0IG9mIEVycm9ycyB3aGljaCBhcmUgZmF0YWwgYW5kIGtpbGwgdGhlIHN5c3RlbQogICovCiAjZGVmaW5lIEJSSURHRV9JU1JfRVJST1JfRkFUQUwJCVwKIAkJKChCUklER0VfSVNSX1hUQUxLX0VSUk9SICYgfkJSSURHRV9JU1JfWFJFQURfUkVRX1RJTUVPVVQpfFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc25pLmggYi9pbmNsdWRlL2FzbS1taXBzL3NuaS5oCmluZGV4IDRkNDNkYmIuLmFmMDgxNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc25pLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zbmkuaApAQCAtMTQxLDggKzE0MSw2IEBACiAjZGVmaW5lIEEyMFJfUFRfVElNMF9BQ0sgICAgICAgIDB4YmMwNTAwMDAKICNkZWZpbmUgQTIwUl9QVF9USU0xX0FDSyAgICAgICAgMHhiYzA2MDAwMAogCi0jZGVmaW5lIFNOSV9NSVBTX0lSUV9DUFVfVElNRVIgIChNSVBTX0NQVV9JUlFfQkFTRSs3KQotCiAjZGVmaW5lIFNOSV9BMjBSX0lSUV9CQVNFICAgICAgIE1JUFNfQ1BVX0lSUV9CQVNFCiAjZGVmaW5lIFNOSV9BMjBSX0lSUV9USU1FUiAgICAgIChTTklfQTIwUl9JUlFfQkFTRSs1KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RpbWUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCmluZGV4IDM1NTU1YmQuLmJjNDdhZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGltZS5oCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcnRjLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KIAogZXh0ZXJuIHNwaW5sb2NrX3QgcnRjX2xvY2s7CkBAIC00MCw3ICs0MSw2IEBACiAgKiBtaXBzX3RpbWVyX2FjayBtYXkgYmUgTlVMTCBpZiB0aGUgaW50ZXJydXB0IGlzIHNlbGYtcmVjb3ZlcmFibGUuCiAgKi8KIGV4dGVybiBpbnQgKCptaXBzX3RpbWVyX3N0YXRlKSh2b2lkKTsKLWV4dGVybiB2b2lkICgqbWlwc190aW1lcl9hY2spKHZvaWQpOwogCiAvKgogICogSGlnaCBwcmVjaXNpb24gdGltZXIgY2xvY2tzb3VyY2UuCkBAIC03Niw2ICs3NiwxNiBAQAogLyoKICAqIEluaXRpYWxpemUgdGhlIGNhbGxpbmcgQ1BVJ3MgY29tcGFyZSBpbnRlcnJ1cHQgYXMgY2xvY2tldmVudCBkZXZpY2UKICAqLworI2lmZGVmIENPTkZJR19DRVZUX1I0SwogZXh0ZXJuIHZvaWQgbWlwc19jbG9ja2V2ZW50X2luaXQodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG1pcHNfY2xvY2tldmVudF9pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MsIHVuc2lnbmVkIGludCBjbG9jayk7CitleHRlcm4gdm9pZCBjbG9ja2V2ZW50X3NldF9jbG9jayhzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZCwKKwkJdW5zaWduZWQgaW50IGNsb2NrKTsKIAogI2VuZGlmIC8qIF9BU01fVElNRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1taXBzL3RsYmZsdXNoLmgKaW5kZXggNzMwZTg0MS4uODZiMjFkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdGxiZmx1c2guaApAQCAtMTEsNyArMTEsNiBAQAogICogIC0gZmx1c2hfdGxiX3BhZ2Uodm1hLCB2bWFkZHIpIGZsdXNoZXMgb25lIHBhZ2UKICAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcwogICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCi0gKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcwogICovCiBleHRlcm4gdm9pZCBsb2NhbF9mbHVzaF90bGJfYWxsKHZvaWQpOwogZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKQEAgLTQ1LDEwICs0NCw0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JLyogTm90aGluZyB0byBkbyBvbiBNSVBTLiAgKi8KLX0KLQogI2VuZGlmIC8qIF9fQVNNX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9iaXRvcHMuaAppbmRleCAwMTVjYjBkLi5mOGVlYmNiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2JpdG9wcy5oCkBAIC0xLDYgKzEsMTAgQEAKICNpZm5kZWYgX1BBUklTQ19CSVRPUFNfSAogI2RlZmluZSBfUEFSSVNDX0JJVE9QU19ICiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgkJLyogZm9yIEJJVFNfUEVSX0xPTkcvU0hJRlRfUEVSX0xPTkcgKi8KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC0yMDgsNiArMjEyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9pZGUuaAppbmRleCBiMjdiZjdhLi5iZTg3NjBmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tcGFyaXNjL2lkZS5oCkBAIC0xNyw3ICsxNyw2IEBACiAjZGVmaW5lIE1BWF9IV0lGUwkyCiAjZW5kaWYKIAotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCiAKICNkZWZpbmUgaWRlX3JlcXVlc3RfaXJxKGlycSxoYW5kLGZsZyxkZXYsaWQpCXJlcXVlc3RfaXJxKChpcnEpLChoYW5kKSwoZmxnKSwoZGV2KSwoaWQpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wZ3RhYmxlLmgKaW5kZXggYjVhODc5Ny4uY2QwZmE0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcGFyaXNjL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2MvcGd0YWJsZS5oCkBAIC0xMSw5ICsxMSw5IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igdm1fYXJlYV9zdHJ1Y3QgKi8KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCiAvKgogICoga2Vybl9hZGRyX3ZhbGlkKEFERFIpIHRlc3RzIGlmIEFERFIgaXMgcG9pbnRpbmcgdG8gdmFsaWQga2VybmVsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oCmluZGV4IDc3NThlZTMuLmI3MmVjNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy90bGJmbHVzaC5oCkBAIC01NywxMCArNTcsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotfQotIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXVuc2lnbmVkIGxvbmcgYWRkcikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2JpdG9wcy5oCmluZGV4IDgxNDRhMjcuLjczM2I0YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iaXRvcHMuaApAQCAtMzgsNiArMzgsMTAgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FzbS1jb21wYXQuaD4KICNpbmNsdWRlIDxhc20vc3luY2guaD4KQEAgLTg2LDYgKzkwLDI0IEBACiAJOiAiY2MiICk7CiB9CiAKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgY2xlYXJfYml0X3VubG9jayhpbnQgbnIsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKmFkZHIpCit7CisJdW5zaWduZWQgbG9uZyBvbGQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gQklUT1BfTUFTSyhucik7CisJdW5zaWduZWQgbG9uZyAqcCA9ICgodW5zaWduZWQgbG9uZyAqKWFkZHIpICsgQklUT1BfV09SRChucik7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlMV1NZTkNfT05fU01QCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkjIGNsZWFyX2JpdF91bmxvY2tcbiIKKwkiYW5kYwklMCwlMCwlMlxuIgorCVBQQzQwNV9FUlI3NygwLCUzKQorCVBQQ19TVExDWCAiJTAsMCwlM1xuIgorCSJibmUtCTFiIgorCTogIj0mciIgKG9sZCksICIrbSIgKCpwKQorCTogInIiIChtYXNrKSwgInIiIChwKQorCTogImNjIiwgIm1lbW9yeSIpOworfQorCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgb2xkOwpAQCAtMTI1LDYgKzE0NywyNyBAQAogCXJldHVybiAob2xkICYgbWFzaykgIT0gMDsKIH0KIAorc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5kX3NldF9iaXRfbG9jayh1bnNpZ25lZCBsb25nIG5yLAorCQkJCSAgICAgICB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkLCB0OworCXVuc2lnbmVkIGxvbmcgbWFzayA9IEJJVE9QX01BU0sobnIpOworCXVuc2lnbmVkIGxvbmcgKnAgPSAoKHVuc2lnbmVkIGxvbmcgKilhZGRyKSArIEJJVE9QX1dPUkQobnIpOworCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisiMToiCVBQQ19MTEFSWCAiJTAsMCwlMwkJIyB0ZXN0X2FuZF9zZXRfYml0X2xvY2tcbiIKKwkib3IJJTEsJTAsJTIgXG4iCisJUFBDNDA1X0VSUjc3KDAsJTMpCisJUFBDX1NUTENYICIlMSwwLCUzIFxuIgorCSJibmUtCTFiIgorCUlTWU5DX09OX1NNUAorCTogIj0mciIgKG9sZCksICI9JnIiICh0KQorCTogInIiIChtYXNrKSwgInIiIChwKQorCTogImNjIiwgIm1lbW9yeSIpOworCisJcmV0dXJuIChvbGQgJiBtYXNrKSAhPSAwOworfQorCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJfYml0KHVuc2lnbmVkIGxvbmcgbnIsCiAJCQkJCSB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQogewpAQCAtMTg1LDYgKzIyOCwxMiBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaD4KIAorc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NsZWFyX2JpdF91bmxvY2soaW50IG5yLCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nICphZGRyKQoreworCV9fYXNtX18gX192b2xhdGlsZV9fKExXU1lOQ19PTl9TTVAgIiIgOjo6ICJtZW1vcnkiKTsKKwlfX2NsZWFyX2JpdChuciwgYWRkcik7Cit9CisKIC8qCiAgKiBSZXR1cm4gdGhlIHplcm8tYmFzZWQgYml0IHBvc2l0aW9uIChMRSwgbm90IElCTSBiaXQgbnVtYmVyaW5nKSBvZgogICogdGhlIG1vc3Qgc2lnbmlmaWNhbnQgMS1iaXQgaW4gYSBkb3VibGUgd29yZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaWRlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oCmluZGV4IDE2NDRlNDQuLmZkN2Y1YTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaWRlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaApAQCAtNjksMTIgKzY5LDExIEBACiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9NUEM4eHhfSURFCiAjZGVmaW5lIElERV9BUkNIX0FDS19JTlRSICAxCi0jZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKSAoaHdpZi0+aHcuYWNrX2ludHIgPyBod2lmLT5ody5hY2tfaW50cihod2lmKSA6IDEpCisjZGVmaW5lIGlkZV9hY2tfaW50cihod2lmKSAoKGh3aWYpLT5hY2tfaW50ciA/IChod2lmKS0+YWNrX2ludHIoaHdpZikgOiAxKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKLSNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAogI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oCmluZGV4IGJmMTRhYjQuLmU0NGNkZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmgKQEAgLTUyMiw3ICs1MjIsNyBAQAogI2Vsc2UKIC8qCiAgKiBFbmZvcmNlIHN5bmNocm9uaXNhdGlvbiBvZiBzdG9yZXMgdnMuIHNwaW5fdW5sb2NrCi0gKiAodGhpcyBkb2VzIGl0IGV4cGxpY2l0ZWx5LCB0aG91Z2ggb3VyIGltcGxlbWVudGF0aW9uIG9mIHNwaW5fdW5sb2NrCisgKiAodGhpcyBkb2VzIGl0IGV4cGxpY2l0bHksIHRob3VnaCBvdXIgaW1wbGVtZW50YXRpb24gb2Ygc3Bpbl91bmxvY2sKICAqIGRvZXMgaXQgaW1wbGljaXRlbHkgdG9vKQogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbW1pb3diKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvbW11LmgKaW5kZXggODcwOTY3ZS4uNGE4MmZkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pb21tdS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW9tbXUuaApAQCAtMjYsOSArMjYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KIAogI2RlZmluZSBJT01NVV9QQUdFX1NISUZUICAgICAgMTIKICNkZWZpbmUgSU9NTVVfUEFHRV9TSVpFICAgICAgIChBU01fQ09OU1QoMSkgPDwgSU9NTVVfUEFHRV9TSElGVCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbW11X2NvbnRleHQuaAppbmRleCBmODYzYWMyLi45MTAyYjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9tbXVfY29udGV4dC5oCkBAIC04LDcgKzgsNyBAQAogCiAjaWZuZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKIC8qCiAgKiBPbiAzMi1iaXQgUG93ZXJQQyA2eHgvN3h4Lzd4eHggQ1BVcywgd2UgdXNlIGEgc2V0IG9mIDE2IFZTSURzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzUyeHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjNTJ4eC5oCmluZGV4IDI0NzUxZGYuLjU2ODEzNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjNTJ4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjNTJ4eC5oCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIC8qIFN0cnVjdHVyZXMgbWFwcGluZyBvZiBzb21lIHVuaXQgcmVnaXN0ZXIgc2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMjY3LDkgKzI2OSw5IEBACiBleHRlcm4gaW50IF9faW5pdCBsaXRlNTIwMF9wbV9pbml0KHZvaWQpOwogCiAvKiBsaXRlNTIwMCBjYWxscyBtcGM1MjAwIHN1c3BlbmQgZnVuY3Rpb25zLCBzbyBoZXJlIHRoZXkgYXJlICovCi1leHRlcm4gaW50IG1wYzUyeHhfcG1fcHJlcGFyZShzdXNwZW5kX3N0YXRlX3QpOworZXh0ZXJuIGludCBtcGM1Mnh4X3BtX3ByZXBhcmUodm9pZCk7CiBleHRlcm4gaW50IG1wYzUyeHhfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90KTsKLWV4dGVybiBpbnQgbXBjNTJ4eF9wbV9maW5pc2goc3VzcGVuZF9zdGF0ZV90KTsKK2V4dGVybiB2b2lkIG1wYzUyeHhfcG1fZmluaXNoKHZvaWQpOwogZXh0ZXJuIGNoYXIgc2F2ZWRfc3JhbVsweDQwMDBdOyAvKiByZXVzZSBidWZmZXIgZnJvbSBtcGM1Mnh4IHN1c3BlbmQgKi8KICNlbmRpZgogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAppbmRleCBmY2Q3YjQyLi5mNmRmY2UwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaApAQCAtMTE0LDExICsxMTQsMTIgQEAKIAl1NjQgdXNlcl90aW1lOwkJCS8qIGFjY3VtdWxhdGVkIHVzZXJtb2RlIFRCIHRpY2tzICovCiAJdTY0IHN5c3RlbV90aW1lOwkJLyogYWNjdW11bGF0ZWQgc3lzdGVtIFRCIHRpY2tzICovCiAJdTY0IHN0YXJ0cHVycjsJCQkvKiBQVVJSL1RCIHZhbHVlIHNuYXBzaG90ICovCisJdTY0IHN0YXJ0c3B1cnI7CQkJLyogU1BVUlIgdmFsdWUgc25hcHNob3QgKi8KKwl1NjQgcHVycmRlbHRhOwkJCS8qIEZJWE1FOiBkb2N1bWVudCAqLworCXU2NCBzcHVycmRlbHRhOwkJCS8qIEZJWE1FOiBkb2N1bWVudCAqLwogfTsKIAogZXh0ZXJuIHN0cnVjdCBwYWNhX3N0cnVjdCBwYWNhW107CiAKLXZvaWQgc2V0dXBfYm9vdF9wYWNhKHZvaWQpOwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QQUNBX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdGxiZmx1c2guaAppbmRleCBhMDIyZjgwLi5iNmIwMzZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90bGJmbHVzaC5oCkBAIC04LDcgKzgsNiBAQAogICogIC0gZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlIGlmIFNXIGxvYWRlZCBUTEIKICAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcwogICogIC0gZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2Yga2VybmVsIHBhZ2VzCi0gKiAgLSBmbHVzaF90bGJfcGd0YWJsZXMobW0sIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlIHRhYmxlcwogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE3NCwxNSArMTczLDUgQEAKICAqLwogZXh0ZXJuIHZvaWQgdXBkYXRlX21tdV9jYWNoZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgcHRlX3QpOwogCi0vKgotICogVGhpcyBpcyBjYWxsZWQgaW4gbXVubWFwIHdoZW4gd2UgaGF2ZSBmcmVlZCB1cCBzb21lIHBhZ2UtdGFibGUKLSAqIHBhZ2VzLiAgV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLCB0aGVyZSdzIG5vdGhpbmcgc3BlY2lhbAotICogYWJvdXQgb3VyIHBhZ2UtdGFibGUgcGFnZXMuICAtLSBwYXVsdXMKLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLX0KLQogI2VuZGlmIC8qX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oCmluZGV4IGE2NDQxYTAuLmIyZTI1ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tbXVfY29udGV4dC5oCkBAIC0yLDggKzIsOSBAQAogI2lmbmRlZiBfX1BQQ19NTVVfQ09OVEVYVF9ICiAjZGVmaW5lIF9fUFBDX01NVV9DT05URVhUX0gKIAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbW1faG9va3MuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy90aW1lLmggYi9pbmNsdWRlL2FzbS1wcGMvdGltZS5oCmluZGV4IGY3ZWFkZjYuLjgxZGJjZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy90aW1lLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3RpbWUuaApAQCAtNTcsNyArNTcsNyBAQAogLyogQWNjZXNzb3IgZnVuY3Rpb25zIGZvciB0aGUgdGltZWJhc2UgKFJUQyBvbiA2MDEpIHJlZ2lzdGVycy4gKi8KIC8qIElmIG9uZSBkYXkgQ09ORklHX1BPV0VSIGlzIGFkZGVkIGp1c3QgZGVmaW5lIF9fVVNFX1JUQyBhcyAxICovCiAjaWZkZWYgQ09ORklHXzZ4eAotZXh0ZXJuIF9faW5saW5lX18gaW50IF9fYXR0cmlidXRlX3B1cmVfXyBfX1VTRV9SVEModm9pZCkgeworZXh0ZXJuIF9faW5saW5lX18gaW50IF9fcHVyZSBfX1VTRV9SVEModm9pZCkgewogCXJldHVybiAobWZzcHIoU1BSTl9QVlIpPj4xNikgPT0gMTsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaAppbmRleCBmNzljOWI3Li4zNGQ5YTYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKQEAgLTE1LDYgKzE1LDEwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCiAvKgpAQCAtNzQ2LDYgKzc1MCw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAKIC8qCiAgKiBBVFRFTlRJT046IGludGVsIGJ5dGUgb3JkZXJpbmcgY29udmVudGlvbiBmb3IgZXh0MiBhbmQgbWluaXggISEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaAppbmRleCA2Njc5M2Y1Li42ZGUyNjMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCkBAIC0xNCw3ICsxNCw2IEBACiAgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQogICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCiAgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKLSAqICAtIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2UgdGFibGVzCiAgKi8KIAogLyoKQEAgLTE1MiwxMCArMTUxLDQgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotICAgICAgICAvKiBTLzM5MCBkb2VzIG5vdCBrZWVwIGFueSBwYWdlIHRhYmxlIGNhY2hlcyBpbiBUTEIgKi8KLX0KLQogI2VuZGlmIC8qIF9TMzkwX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tc2gvYml0b3BzLmgKaW5kZXggMWMxNjc5Mi4uZGY4MDVmMjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2JpdG9wcy5oCkBAIC0yLDYgKzIsMTEgQEAKICNkZWZpbmUgX19BU01fU0hfQklUT1BTX0gKIAogI2lmZGVmIF9fS0VSTkVMX18KKworI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIC8qIEZvciBfX3N3YWIzMiAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KQEAgLTEzNyw2ICsxNDIsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTc3NTEuaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS5oCmluZGV4IDAyY2E5MzQuLmIzNjc5MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS5oCkBAIC0zNiw3ICszNiw3IEBACiAjZGVmaW5lIFBBX0xFRAkJMHhiYTAwMDAwMAkvKiBMRUQgKi8KICNkZWZpbmUJUEFfQkNSCQkweGJiMDAwMDAwCS8qIEZQR0Egb24gdGhlIE1TNzc1MVNFMDEgKi8KIAotI2RlZmluZSBQQV9NUlNIUEMJMHhiODNmZmZlMAkvKiBNUi1TSFBDLTAxIFBDTUNJQSBjb250cm9sZXIgKi8KKyNkZWZpbmUgUEFfTVJTSFBDCTB4YjgzZmZmZTAJLyogTVItU0hQQy0wMSBQQ01DSUEgY29udHJvbGxlciAqLwogI2RlZmluZSBQQV9NUlNIUENfTVcxCTB4Yjg0MDAwMDAJLyogTVItU0hQQy0wMSBtZW1vcnkgd2luZG93IGJhc2UgKi8KICNkZWZpbmUgUEFfTVJTSFBDX01XMgkweGI4NTAwMDAwCS8qIE1SLVNIUEMtMDEgYXR0cmlidXRlIHdpbmRvdyBiYXNlICovCiAjZGVmaW5lIFBBX01SU0hQQ19JTwkweGI4NjAwMDAwCS8qIE1SLVNIUEMtMDEgSS9PIHdpbmRvdyBiYXNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW1oNzc1MS5oIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtaDc3NTEuaAppbmRleCBiMTQzYmIyLi40MTYxMTIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW1oNzc1MS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWg3NzUxLmgKQEAgLTM2LDcgKzM2LDcgQEAKICNkZWZpbmUgUEFfTEVECQkweGJhMDAwMDAwCS8qIExFRCAqLwogI2RlZmluZQlQQV9CQ1IJCTB4YmIwMDAwMDAJLyogRlBHQSBvbiB0aGUgTVM3NzUxU0UwMSAqLwogCi0jZGVmaW5lIFBBX01SU0hQQwkweGI4M2ZmZmUwCS8qIE1SLVNIUEMtMDEgUENNQ0lBIGNvbnRyb2xlciAqLworI2RlZmluZSBQQV9NUlNIUEMJMHhiODNmZmZlMAkvKiBNUi1TSFBDLTAxIFBDTUNJQSBjb250cm9sbGVyICovCiAjZGVmaW5lIFBBX01SU0hQQ19NVzEJMHhiODQwMDAwMAkvKiBNUi1TSFBDLTAxIG1lbW9yeSB3aW5kb3cgYmFzZSAqLwogI2RlZmluZSBQQV9NUlNIUENfTVcyCTB4Yjg1MDAwMDAJLyogTVItU0hQQy0wMSBhdHRyaWJ1dGUgd2luZG93IGJhc2UgKi8KICNkZWZpbmUgUEFfTVJTSFBDX0lPCTB4Yjg2MDAwMDAJLyogTVItU0hQQy0wMSBJL08gd2luZG93IGJhc2UgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zaC90bGJmbHVzaC5oCmluZGV4IDQ1NWZiOGQuLmUwYWM5NzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdGxiZmx1c2guaApAQCAtOSw3ICs5LDYgQEAKICAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCiAgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKICAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcwotICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKICAqLwogZXh0ZXJuIHZvaWQgbG9jYWxfZmx1c2hfdGxiX2FsbCh2b2lkKTsKIGV4dGVybiB2b2lkIGxvY2FsX2ZsdXNoX3RsYl9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CkBAIC00Nyw5ICs0Niw0IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JLyogTm90aGluZyB0byBkbyAqLwotfQogI2VuZGlmIC8qIF9fQVNNX1NIX1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zaDY0L2JpdG9wcy5oCmluZGV4IGYzYmRjZGIuLjYwMGM1OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9iaXRvcHMuaApAQCAtMTMsNiArMTMsMTEgQEAKICAqLwogCiAjaWZkZWYgX19LRVJORUxfXworCisjaWZuZGVmIF9MSU5VWF9CSVRPUFNfSAorI2Vycm9yIG9ubHkgPGxpbnV4L2JpdG9wcy5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkKKyNlbmRpZgorCiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAvKiBGb3IgX19zd2FiMzIgKi8KQEAgLTEzNiw2ICsxNDEsNyBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9mZnMuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZXh0Mi1ub24tYXRvbWljLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oIGIvaW5jbHVkZS9hc20tc2g2NC9pZGUuaAppbmRleCBjOWQ4NGQ1Li5iNmUzMWU4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2lkZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvaWRlLmgKQEAgLTE5LDcgKzE5LDYgQEAKIC8qIFdpdGhvdXQgdGhpcywgdGhlIGluaXRpYWxpc2F0aW9uIG9mIFBDSSBJREUgY2FyZHMgZW5kIHVwIGNhbGxpbmcKICAqIGlkZV9pbml0X2h3aWZfcG9ydHMsIHdoaWNoIHdvbid0IHdvcmsuICovCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0jZGVmaW5lIElERV9BUkNIX09CU09MRVRFX0lOSVQgMQogI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKDApCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKaW5kZXggNWZmOTQ2NC4uYmUyYTE1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oCkBAIC02Miw4ICs2Miw3IEBACiAjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLSNkZWZpbmUgc2V0X3JtYih2YXIsIHZhbHVlKSBkbyB7ICh2b2lkKXhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQotI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgc2V0X3JtYih2YXIsIHZhbHVlKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyAodm9pZCl4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKIAogLyogSW50ZXJydXB0IENvbnRyb2wgKi8KICNpZm5kZWYgSEFSRF9DTEkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoNjQvdGxiZmx1c2guaAppbmRleCBlNDViZWFkLi4xNmExNjRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC90bGJmbHVzaC5oCkBAIC0yMCwxMCArMjAsNiBAQAogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAogCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UpOwotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLX0KIAogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmgKaW5kZXggMzI5ZTY5Ni4uY2IzY2VmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvYml0b3BzLmgKQEAgLTE0LDYgKzE0LDEwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fX3NldF9iaXQodW5zaWduZWQgbG9uZyAqYWRkciwgdW5zaWduZWQgbG9uZyBtYXNrKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9fX2NsZWFyX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19fY2hhbmdlX2JpdCh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nIG1hc2spOwpAQCAtOTYsNiArMTAwLDcgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2ZsczY0Lmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9maW5kLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2V4dDItbm9uLWF0b21pYy5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLWF0b21pYy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvaWRlLmggYi9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaAppbmRleCBhNmQ3MzVhLi40MDQwMjI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9pZGUuaApAQCAtMTgsNyArMTgsNiBAQAogI3VuZGVmICBNQVhfSFdJRlMKICNkZWZpbmUgTUFYX0hXSUZTCTIKIAotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCiAKICNkZWZpbmUgX19pZGVfaW5zbChkYXRhX3JlZywgYnVmZmVyLCB3Y291bnQpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjL2lvY3Rscy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9jdGxzLmgKaW5kZXggYmRmNzdiMC4uMDU4YzIwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmMvaW9jdGxzLmgKQEAgLTE1LDYgKzE1LDEwIEBACiAjZGVmaW5lIFRDU0VUUwkJX0lPVygnVCcsIDksIHN0cnVjdCB0ZXJtaW9zKQogI2RlZmluZSBUQ1NFVFNXCQlfSU9XKCdUJywgMTAsIHN0cnVjdCB0ZXJtaW9zKQogI2RlZmluZSBUQ1NFVFNGCQlfSU9XKCdUJywgMTEsIHN0cnVjdCB0ZXJtaW9zKQorI2RlZmluZSBUQ0dFVFMyCQlfSU9SKCdUJywgMTIsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTMgkJX0lPVygnVCcsIDEzLCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUU1cyCV9JT1coJ1QnLCAxNCwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFNGMglfSU9XKCdUJywgMTUsIHN0cnVjdCB0ZXJtaW9zMikKIAogLyogTm90ZSB0aGF0IGFsbCB0aGUgaW9jdGxzIHRoYXQgYXJlIG5vdCBhdmFpbGFibGUgaW4gTGludXggaGF2ZSBhIAogICogZG91YmxlIHVuZGVyc2NvcmUgb24gdGhlIGZyb250IHRvOiBhKSBhdm9pZCBzb21lIHByb2dyYW1zIHRvCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9vZl9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9hc20tc3BhcmMvb2ZfcGxhdGZvcm0uaAppbmRleCA2NGEyMzAwLi5kNjM4NzM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy9vZl9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL29mX3BsYXRmb3JtLmgKQEAgLTE4LDEyICsxOCw5IEBACiAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgZWJ1c19idXNfdHlwZTsKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgc2J1c19idXNfdHlwZTsKLWV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgb2ZfcGxhdGZvcm1fYnVzX3R5cGU7CisKICNkZWZpbmUgb2ZfYnVzX3R5cGUJb2ZfcGxhdGZvcm1fYnVzX3R5cGUJLyogZm9yIGNvbXBhdGliaWxpdHkgKi8KIAotZXh0ZXJuIGludCBvZl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2LAotCQkJICAgICAgc3RydWN0IGJ1c190eXBlICpidXMpOwotZXh0ZXJuIHZvaWQgb2ZfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciAqZHJ2KTsKIGV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9wbGF0Zm9ybV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJCQkgICBjb25zdCBjaGFyICpidXNfaWQsCiAJCQkJCQkgICBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oIGIvaW5jbHVkZS9hc20tc3BhcmMvdGVybWJpdHMuaAppbmRleCA1ZWIwMGExLi45MGNmMjIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1iaXRzLmgKQEAgLTMxLDYgKzMxLDE4IEBACiAjZW5kaWYKIH07CiAKK3N0cnVjdCB0ZXJtaW9zMiB7CisJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2NmbGFnOwkJLyogY29udHJvbCBtb2RlIGZsYWdzICovCisJdGNmbGFnX3QgY19sZmxhZzsJCS8qIGxvY2FsIG1vZGUgZmxhZ3MgKi8KKwljY190IGNfbGluZTsJCQkvKiBsaW5lIGRpc2NpcGxpbmUgKi8KKwljY190IGNfY2NbTkNDU107CQkvKiBjb250cm9sIGNoYXJhY3RlcnMgKi8KKwljY190IF94X2NjWzJdOyAgICAgICAgICAgICAgICAgIC8qIHBhZGRpbmcgdG8gbWF0Y2gga3Rlcm1pb3MgKi8KKwlzcGVlZF90IGNfaXNwZWVkOwkJLyogaW5wdXQgc3BlZWQgKi8KKwlzcGVlZF90IGNfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCit9OworCiBzdHJ1Y3Qga3Rlcm1pb3MgewogCXRjZmxhZ190IGNfaWZsYWc7CQkvKiBpbnB1dCBtb2RlIGZsYWdzICovCiAJdGNmbGFnX3QgY19vZmxhZzsJCS8qIG91dHB1dCBtb2RlIGZsYWdzICovCkBAIC0xNjAsNiArMTcyLDcgQEAKICNkZWZpbmUgQ0xPQ0FMCSAgMHgwMDAwMDgwMAogI2RlZmluZSBDQkFVREVYICAgMHgwMDAwMTAwMAogLyogV2UnbGwgbmV2ZXIgc2VlIHRoZXNlIHNwZWVkcyB3aXRoIHRoZSBaaWxvZ3MsIGJ1dCBmb3IgY29tcGxldGVuZXNzLi4uICovCisjZGVmaW5lICBCT1RIRVIgICAweDAwMDAxMDAwCiAjZGVmaW5lICBCNTc2MDAgICAweDAwMDAxMDAxCiAjZGVmaW5lICBCMTE1MjAwICAweDAwMDAxMDAyCiAjZGVmaW5lICBCMjMwNDAwICAweDAwMDAxMDAzCkBAIC0xODksNiArMjAyLDggQEAKICNkZWZpbmUgQ01TUEFSCSAgMHg0MDAwMDAwMCAgLyogbWFyayBvciBzcGFjZSAoc3RpY2spIHBhcml0eSAqLwogI2RlZmluZSBDUlRTQ1RTCSAgMHg4MDAwMDAwMCAgLyogZmxvdyBjb250cm9sICovCiAKKyNkZWZpbmUgSUJTSElGVAkgIDE2CQkvKiBTaGlmdCBmcm9tIENCQVVEIHRvIENJQkFVRCAqLworCiAvKiBjX2xmbGFnIGJpdHMgKi8KICNkZWZpbmUgSVNJRwkweDAwMDAwMDAxCiAjZGVmaW5lIElDQU5PTgkweDAwMDAwMDAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmggYi9pbmNsdWRlL2FzbS1zcGFyYy90ZXJtaW9zLmgKaW5kZXggZDc2N2YyMC4uNDMzMzIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdGVybWlvcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL3Rlcm1pb3MuaApAQCAtMTA4LDEzICsxMDgsNTUgQEAKIAogI2RlZmluZSB1c2VyX3Rlcm1pb3NfdG9fa2VybmVsX3Rlcm1pb3MoaywgdSkgXAogKHsgXAorCWludCBlcnI7IFwKKwllcnIgID0gZ2V0X3VzZXIoKGspLT5jX2lmbGFnLCAmKHUpLT5jX2lmbGFnKTsgXAorCWVyciB8PSBnZXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCisJZXJyIHw9IGdldF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2xmbGFnLCAmKHUpLT5jX2xmbGFnKTsgXAorCWVyciB8PSBnZXRfdXNlcigoayktPmNfbGluZSwgICYodSktPmNfbGluZSk7IFwKKwllcnIgfD0gY29weV9mcm9tX3VzZXIoKGspLT5jX2NjLCAodSktPmNfY2MsIE5DQ1MpOyBcCisJaWYgKChrKS0+Y19sZmxhZyAmIElDQU5PTikgeyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJfSBlbHNlIHsgXAorCQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCisJfSBcCisJZXJyIHw9IGdldF91c2VyKChrKS0+Y19pc3BlZWQsICAmKHUpLT5jX2lzcGVlZCk7IFwKKwllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX29zcGVlZCwgICYodSktPmNfb3NwZWVkKTsgXAorCWVycjsgXAorfSkKKworI2RlZmluZSBrZXJuZWxfdGVybWlvc190b191c2VyX3Rlcm1pb3ModSwgaykgXAorKHsgXAorCWludCBlcnI7IFwKKwllcnIgID0gcHV0X3VzZXIoKGspLT5jX2lmbGFnLCAmKHUpLT5jX2lmbGFnKTsgXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCisJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19jZmxhZywgJih1KS0+Y19jZmxhZyk7IFwKKwllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2xmbGFnLCAmKHUpLT5jX2xmbGFnKTsgXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfbGluZSwgJih1KS0+Y19saW5lKTsgXAorCWVyciB8PSBjb3B5X3RvX3VzZXIoKHUpLT5jX2NjLCAoayktPmNfY2MsIE5DQ1MpOyBcCisJaWYgKCEoKGspLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKKwkJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19jY1tWVElNRV0sICYodSktPmNfY2NbX1ZUSU1FXSk7IFwKKwl9IGVsc2UgeyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJfSBcCisJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19pc3BlZWQsICYodSktPmNfaXNwZWVkKTsgXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfb3NwZWVkLCAmKHUpLT5jX29zcGVlZCk7IFwKKwllcnI7IFwKK30pCisKKyNkZWZpbmUgdXNlcl90ZXJtaW9zX3RvX2tlcm5lbF90ZXJtaW9zXzEoaywgdSkgXAorKHsgXAogCWdldF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKIAlnZXRfdXNlcigoayktPmNfb2ZsYWcsICYodSktPmNfb2ZsYWcpOyBcCiAJZ2V0X3VzZXIoKGspLT5jX2NmbGFnLCAmKHUpLT5jX2NmbGFnKTsgXAogCWdldF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKIAlnZXRfdXNlcigoayktPmNfbGluZSwgICYodSktPmNfbGluZSk7IFwKIAljb3B5X2Zyb21fdXNlcigoayktPmNfY2MsICh1KS0+Y19jYywgTkNDUyk7IFwKLQlpZigoayktPmNfbGZsYWcgJiBJQ0FOT04pIHsgXAorCWlmICgoayktPmNfbGZsYWcgJiBJQ0FOT04pIHsgXAogCQlnZXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCiAJCWdldF91c2VyKChrKS0+Y19jY1tWRU9MXSwgJih1KS0+Y19jY1tWRU9MXSk7IFwKIAl9IGVsc2UgeyBcCkBAIC0xMjQsNyArMTY2LDcgQEAKIAkwOyBcCiB9KQogCi0jZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcyh1LCBrKSBcCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHUsIGspIFwKICh7IFwKIAlwdXRfdXNlcigoayktPmNfaWZsYWcsICYodSktPmNfaWZsYWcpOyBcCiAJcHV0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXApAQCAtMTMyLDcgKzE3NCw3IEBACiAJcHV0X3VzZXIoKGspLT5jX2xmbGFnLCAmKHUpLT5jX2xmbGFnKTsgXAogCXB1dF91c2VyKChrKS0+Y19saW5lLCAmKHUpLT5jX2xpbmUpOyBcCiAJY29weV90b191c2VyKCh1KS0+Y19jYywgKGspLT5jX2NjLCBOQ0NTKTsgXAotCWlmKCEoKGspLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCisJaWYgKCEoKGspLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCiAJCXB1dF91c2VyKChrKS0+Y19jY1tWTUlOXSwgICYodSktPmNfY2NbX1ZNSU5dKTsgXAogCQlwdXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCiAJfSBlbHNlIHsgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3RsYmZsdXNoLmgKaW5kZXggYTYxOWRhNS4uYjk1N2UyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvdGxiZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy90bGJmbHVzaC5oCkBAIC0xMyw3ICsxMyw2IEBACiAgKiAgLSBmbHVzaF90bGJfcGFnZSh2bWEsIHZtYWRkcikgZmx1c2hlcyBvbmUgcGFnZQogICogIC0gZmx1c2hfdGxiX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCiAgKiAgLSBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBrZXJuZWwgcGFnZXMKLSAqICAtIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2UgdGFibGVzCiAgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTQyLDExICs0MSw2IEBACiBCVEZJWFVQREVGX0NBTEwodm9pZCwgZmx1c2hfdGxiX3JhbmdlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIEJURklYVVBERUZfQ0FMTCh2b2lkLCBmbHVzaF90bGJfcGFnZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpCiAKLS8vIFRoYW5rcyB0byBBbnRvbiBCbGFuY2hhcmQsIG91ciBwYWdldGFibGVzIGJlY2FtZSB1bmNhY2hlZCBpbiAyLjQuIFdlZSEKLS8vIGV4dGVybiB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLS8vICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci0jZGVmaW5lIGZsdXNoX3RsYl9wZ3RhYmxlcyhtbSwgc3RhcnQsIGVuZCkJZG97IH13aGlsZSgwKQotCiAjZGVmaW5lIGZsdXNoX3RsYl9hbGwoKSBCVEZJWFVQX0NBTEwoZmx1c2hfdGxiX2FsbCkoKQogI2RlZmluZSBmbHVzaF90bGJfbW0obW0pIEJURklYVVBfQ0FMTChmbHVzaF90bGJfbW0pKG1tKQogI2RlZmluZSBmbHVzaF90bGJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkgQlRGSVhVUF9DQUxMKGZsdXNoX3RsYl9yYW5nZSkodm1hLHN0YXJ0LGVuZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmFja29mZi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9iYWNrb2ZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUzMmY4YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYmFja29mZi5oCkBAIC0wLDAgKzEsMjggQEAKKyNpZm5kZWYgX1NQQVJDNjRfQkFDS09GRl9ICisjZGVmaW5lIF9TUEFSQzY0X0JBQ0tPRkZfSAorCisjZGVmaW5lIEJBQ0tPRkZfTElNSVQJKDQgKiAxMDI0KQorCisjaWZkZWYgQ09ORklHX1NNUAorCisjZGVmaW5lIEJBQ0tPRkZfU0VUVVAocmVnKQlcCisJbW92CTEsIHJlZworCisjZGVmaW5lIEJBQ0tPRkZfU1BJTihyZWcsIHRtcCwgbGFiZWwpCVwKKwltb3YJcmVnLCB0bXA7IFwKKzg4Oglicm56LHB0CXRtcCwgODhiOyBcCisJIHN1Ygl0bXAsIDEsIHRtcDsgXAorCWNtcAlyZWcsIEJBQ0tPRkZfTElNSVQ7IFwKKwliZyxwbgkleGNjLCBsYWJlbDsgXAorCSBub3A7IFwKKwliYSxwdAkleGNjLCBsYWJlbDsgXAorCSBzbGx4CXJlZywgMSwgcmVnOworCisjZWxzZQorCisjZGVmaW5lIEJBQ0tPRkZfU0VUVVAocmVnKQorI2RlZmluZSBCQUNLT0ZGX1NQSU4ocmVnLCB0bXAsIGxhYmVsKQorCisjZW5kaWYKKworI2VuZGlmIC8qIF9TUEFSQzY0X0JBQ0tPRkZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvYml0b3BzLmgKaW5kZXggM2Q1ZTFhZi4uOTgyY2U4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2JpdG9wcy5oCkBAIC03LDYgKzcsMTAgQEAKICNpZm5kZWYgX1NQQVJDNjRfQklUT1BTX0gKICNkZWZpbmUgX1NQQVJDNjRfQklUT1BTX0gKIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCkBAIC04MSw2ICs4NSw3IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KIAogI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvaWRlLmgKaW5kZXggNTUxNDljZi4uYWM3ZWIyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lkZS5oCkBAIC0yNCw3ICsyNCw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2RlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUCiAjZGVmaW5lIGlkZV9kZWZhdWx0X2lvX2N0bChiYXNlKQkoKGJhc2UpICsgMHgyMDYpIC8qIG9ic29sZXRlICovCiAKICNkZWZpbmUgX19pZGVfaW5zbChkYXRhX3JlZywgYnVmZmVyLCB3Y291bnQpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L2lvY3Rscy5oCmluZGV4IDIyMjNiNmQuLjA4M2M5YTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvaW9jdGxzLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9pb2N0bHMuaApAQCAtMTYsNiArMTYsMTAgQEAKICNkZWZpbmUgVENTRVRTCQlfSU9XKCdUJywgOSwgc3RydWN0IHRlcm1pb3MpCiAjZGVmaW5lIFRDU0VUU1cJCV9JT1coJ1QnLCAxMCwgc3RydWN0IHRlcm1pb3MpCiAjZGVmaW5lIFRDU0VUU0YJCV9JT1coJ1QnLCAxMSwgc3RydWN0IHRlcm1pb3MpCisjZGVmaW5lIFRDR0VUUzIJCV9JT1IoJ1QnLCAxMiwgc3RydWN0IHRlcm1pb3MyKQorI2RlZmluZSBUQ1NFVFMyCQlfSU9XKCdUJywgMTMsIHN0cnVjdCB0ZXJtaW9zMikKKyNkZWZpbmUgVENTRVRTVzIJX0lPVygnVCcsIDE0LCBzdHJ1Y3QgdGVybWlvczIpCisjZGVmaW5lIFRDU0VUU0YyCV9JT1coJ1QnLCAxNSwgc3RydWN0IHRlcm1pb3MyKQogCiAvKiBOb3RlIHRoYXQgYWxsIHRoZSBpb2N0bHMgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSBpbiBMaW51eCBoYXZlIGEgCiAgKiBkb3VibGUgdW5kZXJzY29yZSBvbiB0aGUgZnJvbnQgdG86IGEpIGF2b2lkIHNvbWUgcHJvZ3JhbXMgdG8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvb2ZfcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvb2ZfcGxhdGZvcm0uaAppbmRleCBmN2MxZjE3Li5mMTVjZmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zcGFyYzY0L29mX3BsYXRmb3JtLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9vZl9wbGF0Zm9ybS5oCkBAIC0xOSwxMiArMTksOSBAQAogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBpc2FfYnVzX3R5cGU7CiBleHRlcm4gc3RydWN0IGJ1c190eXBlIGVidXNfYnVzX3R5cGU7CiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHNidXNfYnVzX3R5cGU7Ci1leHRlcm4gc3RydWN0IGJ1c190eXBlIG9mX3BsYXRmb3JtX2J1c190eXBlOworCiAjZGVmaW5lIG9mX2J1c190eXBlCW9mX3BsYXRmb3JtX2J1c190eXBlCS8qIGZvciBjb21wYXRpYmlsaXR5ICovCiAKLWV4dGVybiBpbnQgb2ZfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydiwKLQkJCSAgICAgIHN0cnVjdCBidXNfdHlwZSAqYnVzKTsKLWV4dGVybiB2b2lkIG9mX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgKmRydik7CiBleHRlcm4gc3RydWN0IG9mX2RldmljZSAqb2ZfcGxhdGZvcm1fZGV2aWNlX2NyZWF0ZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCQkJICAgY29uc3QgY2hhciAqYnVzX2lkLAogCQkJCQkJICAgc3RydWN0IGRldmljZSAqcGFyZW50LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc21wLmgKaW5kZXggNDJjMDk5NC4uMWMxYzVlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NtcC5oCkBAIC0yNiw3ICsyNiw3IEBACiAgKglQcml2YXRlIHJvdXRpbmVzL2RhdGEKICAqLwogIAotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3BlcmNwdS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3Rlcm1iaXRzLmgKaW5kZXggNzA1Y2Q0NC4uZWJlMzFjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtYml0cy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWJpdHMuaApAQCAtNSw4ICs1LDYgQEAKIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgY2NfdDsKIHR5cGVkZWYgdW5zaWduZWQgaW50ICAgIHNwZWVkX3Q7Ci0KLS8qIFhYWCBpcyB0aGlzIHJpZ2h0IGZvciBzcGFyYzY0PyAgaXQgd2FzIGFuIHVuc2lnbmVkIGxvbmcuLi4gWFhYICovCiB0eXBlZGVmIHVuc2lnbmVkIGludCAgICB0Y2ZsYWdfdDsKIAogI2RlZmluZSBOQ0MgOApAQCAtMzMsNiArMzEsMTggQEAKICNlbmRpZgogfTsKIAorc3RydWN0IHRlcm1pb3MyIHsKKwl0Y2ZsYWdfdCBjX2lmbGFnOwkJLyogaW5wdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfb2ZsYWc7CQkvKiBvdXRwdXQgbW9kZSBmbGFncyAqLworCXRjZmxhZ190IGNfY2ZsYWc7CQkvKiBjb250cm9sIG1vZGUgZmxhZ3MgKi8KKwl0Y2ZsYWdfdCBjX2xmbGFnOwkJLyogbG9jYWwgbW9kZSBmbGFncyAqLworCWNjX3QgY19saW5lOwkJCS8qIGxpbmUgZGlzY2lwbGluZSAqLworCWNjX3QgY19jY1tOQ0NTXTsJCS8qIGNvbnRyb2wgY2hhcmFjdGVycyAqLworCWNjX3QgX3hfY2NbMl07ICAgICAgICAgICAgICAgICAgLyogcGFkZGluZyB0byBtYXRjaCBrdGVybWlvcyAqLworCXNwZWVkX3QgY19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCXNwZWVkX3QgY19vc3BlZWQ7CQkvKiBvdXRwdXQgc3BlZWQgKi8KK307CisKIHN0cnVjdCBrdGVybWlvcyB7CiAJdGNmbGFnX3QgY19pZmxhZzsJCS8qIGlucHV0IG1vZGUgZmxhZ3MgKi8KIAl0Y2ZsYWdfdCBjX29mbGFnOwkJLyogb3V0cHV0IG1vZGUgZmxhZ3MgKi8KQEAgLTE2MSw2ICsxNzEsNyBAQAogI2RlZmluZSBIVVBDTAkgIDB4MDAwMDA0MDAKICNkZWZpbmUgQ0xPQ0FMCSAgMHgwMDAwMDgwMAogI2RlZmluZSBDQkFVREVYICAgMHgwMDAwMTAwMAorI2RlZmluZSAgQk9USEVSICAgMHgwMDAwMTAwMAogI2RlZmluZSAgQjU3NjAwICAgMHgwMDAwMTAwMQogI2RlZmluZSAgQjExNTIwMCAgMHgwMDAwMTAwMgogI2RlZmluZSAgQjIzMDQwMCAgMHgwMDAwMTAwMwpAQCAtMTkwLDYgKzIwMSw4IEBACiAjZGVmaW5lIENNU1BBUiAgICAweDQwMDAwMDAwICAvKiBtYXJrIG9yIHNwYWNlIChzdGljaykgcGFyaXR5ICovCiAjZGVmaW5lIENSVFNDVFMJICAweDgwMDAwMDAwICAvKiBmbG93IGNvbnRyb2wgKi8KIAorI2RlZmluZSBJQlNISUZUCSAgMTYJCS8qIFNoaWZ0IGZyb20gQ0JBVUQgdG8gQ0lCQVVEICovCisKIC8qIGNfbGZsYWcgYml0cyAqLwogI2RlZmluZSBJU0lHCTB4MDAwMDAwMDEKICNkZWZpbmUgSUNBTk9OCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGVybWlvcy5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKaW5kZXggZjA1ZDM5MC4uZWY1MjcyMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC90ZXJtaW9zLmgKQEAgLTEyMyw2ICsxMjMsOCBAQAogCQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCiAJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCiAJfSBcCisJZXJyIHw9IGdldF91c2VyKChrKS0+Y19pc3BlZWQsICAmKHUpLT5jX2lzcGVlZCk7IFwKKwllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX29zcGVlZCwgICYodSktPmNfb3NwZWVkKTsgXAogCWVycjsgXAogfSkKIApAQCAtMTQyLDYgKzE0NCw0NiBAQAogCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0ZdLCAmKHUpLT5jX2NjW1ZFT0ZdKTsgXAogCQllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2NjW1ZFT0xdLCAmKHUpLT5jX2NjW1ZFT0xdKTsgXAogCX0gXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfaXNwZWVkLCAmKHUpLT5jX2lzcGVlZCk7IFwKKwllcnIgfD0gcHV0X3VzZXIoKGspLT5jX29zcGVlZCwgJih1KS0+Y19vc3BlZWQpOyBcCisJZXJyOyBcCit9KQorCisjZGVmaW5lIHVzZXJfdGVybWlvc190b19rZXJuZWxfdGVybWlvc18xKGssIHUpIFwKKyh7IFwKKwlpbnQgZXJyOyBcCisJZXJyICA9IGdldF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAorCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2ZsYWcsICYodSktPmNfY2ZsYWcpOyBcCisJZXJyIHw9IGdldF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKKwllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2xpbmUsICAmKHUpLT5jX2xpbmUpOyBcCisJZXJyIHw9IGNvcHlfZnJvbV91c2VyKChrKS0+Y19jYywgKHUpLT5jX2NjLCBOQ0NTKTsgXAorCWlmKChrKS0+Y19sZmxhZyAmIElDQU5PTikgeyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJfSBlbHNlIHsgXAorCQllcnIgfD0gZ2V0X3VzZXIoKGspLT5jX2NjW1ZNSU5dLCAgJih1KS0+Y19jY1tfVk1JTl0pOyBcCisJCWVyciB8PSBnZXRfdXNlcigoayktPmNfY2NbVlRJTUVdLCAmKHUpLT5jX2NjW19WVElNRV0pOyBcCisJfSBcCisJZXJyOyBcCit9KQorCisjZGVmaW5lIGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvc18xKHUsIGspIFwKKyh7IFwKKwlpbnQgZXJyOyBcCisJZXJyICA9IHB1dF91c2VyKChrKS0+Y19pZmxhZywgJih1KS0+Y19pZmxhZyk7IFwKKwllcnIgfD0gcHV0X3VzZXIoKGspLT5jX29mbGFnLCAmKHUpLT5jX29mbGFnKTsgXAorCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2ZsYWcsICYodSktPmNfY2ZsYWcpOyBcCisJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19sZmxhZywgJih1KS0+Y19sZmxhZyk7IFwKKwllcnIgfD0gcHV0X3VzZXIoKGspLT5jX2xpbmUsICYodSktPmNfbGluZSk7IFwKKwllcnIgfD0gY29weV90b191c2VyKCh1KS0+Y19jYywgKGspLT5jX2NjLCBOQ0NTKTsgXAorCWlmKCEoKGspLT5jX2xmbGFnICYgSUNBTk9OKSkgeyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVk1JTl0sICAmKHUpLT5jX2NjW19WTUlOXSk7IFwKKwkJZXJyIHw9IHB1dF91c2VyKChrKS0+Y19jY1tWVElNRV0sICYodSktPmNfY2NbX1ZUSU1FXSk7IFwKKwl9IGVsc2UgeyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVkVPRl0sICYodSktPmNfY2NbVkVPRl0pOyBcCisJCWVyciB8PSBwdXRfdXNlcigoayktPmNfY2NbVkVPTF0sICYodSktPmNfY2NbVkVPTF0pOyBcCisJfSBcCiAJZXJyOyBcCiB9KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3RsYmZsdXNoLmgKaW5kZXggMzQ4NzMyOC4uZmJiNjc1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvdGxiZmx1c2guaApAQCAtNDEsMTEgKzQxLDQgQEAKIAogI2VuZGlmIC8qICEgQ09ORklHX1NNUCAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiBXZSBkb24ndCB1c2UgdmlydHVhbCBwYWdlIHRhYmxlcyBmb3IgVExCIG1pc3MgcHJvY2Vzc2luZwotCSAqIGFueSBtb3JlLiAgTm93YWRheXMgd2UgdXNlIHRoZSBUU0IuCi0JICovCi19Ci0KICNlbmRpZiAvKiBfU1BBUkM2NF9UTEJGTFVTSF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9iaXRvcHMuaCBiL2luY2x1ZGUvYXNtLXVtL2JpdG9wcy5oCmluZGV4IDQ2ZDc4MTkuLmU0ZDM4ZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL2JpdG9wcy5oCkBAIC0xLDYgKzEsMTAgQEAKICNpZm5kZWYgX19VTV9CSVRPUFNfSAogI2RlZmluZSBfX1VNX0JJVE9QU19ICiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKICNpbmNsdWRlICJhc20vYXJjaC9iaXRvcHMuaCIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tdW0vdGxiZmx1c2guaAppbmRleCA5ZDY0N2M1Li42MTRmMmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS11bS90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3RsYmZsdXNoLmgKQEAgLTE3LDcgKzE3LDYgQEAKICAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCiAgKiAgLSBmbHVzaF90bGJfa2VybmVsX3ZtKCkgZmx1c2hlcyB0aGUga2VybmVsIHZtIGFyZWEKICAqICAtIGZsdXNoX3RsYl9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpIGZsdXNoZXMgYSByYW5nZSBvZiBwYWdlcwotICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKICAqLwogCiBleHRlcm4gdm9pZCBmbHVzaF90bGJfYWxsKHZvaWQpOwpAQCAtMjksOSArMjgsNCBAQAogZXh0ZXJuIHZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiBleHRlcm4gdm9pZCBfX2ZsdXNoX3RsYl9vbmUodW5zaWduZWQgbG9uZyBhZGRyKTsKIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tdjg1MC9iaXRvcHMuaAppbmRleCAxZmE5OWJhLi5mODJmNWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvYml0b3BzLmgKQEAgLTEzLDYgKzEzLDkgQEAKICNpZm5kZWYgX19WODUwX0JJVE9QU19IX18KICNkZWZpbmUgX19WODUwX0JJVE9QU19IX18KIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CS8qIHVubGlrZWx5ICAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4JLyogc3dhYjMyICovCkBAIC0xNDUsNiArMTQ4LDcgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvZmluZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9od2VpZ2h0Lmg+CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2xvY2suaD4KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9leHQyLW5vbi1hdG9taWMuaD4KICNkZWZpbmUgZXh0Ml9zZXRfYml0X2F0b21pYyhsLG4sYSkgICAgICB0ZXN0X2FuZF9zZXRfYml0KG4sYSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS12ODUwL3N5c3RlbS5oCmluZGV4IDBkZTI0ODEuLmEzNGRkZmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXY4NTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tdjg1MC9zeXN0ZW0uaApAQCAtNjYsOCArNjYsNyBAQAogI2RlZmluZSBybWIoKQkJCW1iICgpCiAjZGVmaW5lIHdtYigpCQkJbWIgKCkKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQkoKHZvaWQpMCkKLSNkZWZpbmUgc2V0X3JtYih2YXIsIHZhbHVlKQlkbyB7IHhjaGcgKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpCXNldF9ybWIgKHZhciwgdmFsdWUpCisjZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKQlkbyB7IHhjaGcgKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBzbXBfbWIoKQltYiAoKQogI2RlZmluZSBzbXBfcm1iKCkJcm1iICgpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS12ODUwL3RsYmZsdXNoLmgKaW5kZXggNWYyZjg1Zi4uYzQ0YWE2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdjg1MC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdGxiZmx1c2guaApAQCAtNjEsMTAgKzYxLDQgQEAKIAlCVUcgKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JQlVHICgpOwotfQotCiAjZW5kaWYgLyogX19WODUwX1RMQkZMVVNIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2FjcGlfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9hY3BpXzMyLmgKaW5kZXggMTI1MTc5YWQuLjcyMzQ5M2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9hY3BpXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L2FjcGlfMzIuaApAQCAtODEsMTEgKzgxLDcgQEAKICAgICAgICAgOiI9ciIobl9oaSksICI9ciIobl9sbykgICAgIFwKICAgICAgICAgOiIwIihuX2hpKSwgIjEiKG5fbG8pKQogCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi1leHRlcm4gdm9pZCBjaGVja19hY3BpX3BjaSh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY2hlY2tfYWNwaV9wY2kodm9pZCkgeyB9Ci0jZW5kaWYKK2V4dGVybiB2b2lkIGVhcmx5X3F1aXJrcyh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19BQ1BJCiBleHRlcm4gaW50IGFjcGlfbGFwaWM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzMyLmgKaW5kZXggYTIwZmU5OC4uMzI2OGEzNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2JpdG9wc18zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHNfMzIuaApAQCAtNSw2ICs1LDEwIEBACiAgKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCiAgKi8KIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAKQEAgLTQwMiw2ICs0MDYsNyBAQAogfQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvYml0b3BzXzY0LmgKaW5kZXggMWQ3ZDliNC4uZGFjYWE1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2JpdG9wc182NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9iaXRvcHNfNjQuaApAQCAtNSw2ICs1LDEwIEBACiAgKiBDb3B5cmlnaHQgMTk5MiwgTGludXMgVG9ydmFsZHMuCiAgKi8KIAorI2lmbmRlZiBfTElOVVhfQklUT1BTX0gKKyNlcnJvciBvbmx5IDxsaW51eC9iaXRvcHMuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5CisjZW5kaWYKKwogI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogCiAjaWYgX19HTlVDX18gPCA0IHx8IChfX0dOVUNfXyA9PSA0ICYmIF9fR05VQ19NSU5PUl9fIDwgMSkKQEAgLTQwOCw2ICs0MTIsNyBAQAogI2RlZmluZSBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIgMQogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL2h3ZWlnaHQuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbG9jay5oPgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvY29tcGF0LmggYi9pbmNsdWRlL2FzbS14ODYvY29tcGF0LmgKaW5kZXggNTNjYjk2Yi4uNjZiYTc5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9jb21wYXQuaApAQCAtNiw2ICs2LDcgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vdXNlcjMyLmg+CiAKICNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJMTAwCiAKQEAgLTE4MSw2ICsxODIsMTEgQEAKIH07CiAKIC8qCisgKiBUaGUgdHlwZSBvZiBzdHJ1Y3QgZWxmX3Byc3RhdHVzLnByX3JlZyBpbiBjb21wYXRpYmxlIGNvcmUgZHVtcHMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QzMiBjb21wYXRfZWxmX2dyZWdzZXRfdDsKKworLyoKICAqIEEgcG9pbnRlciBwYXNzZWQgaW4gZnJvbSB1c2VyIG1vZGUuIFRoaXMgc2hvdWxkIG5vdAogICogYmUgdXNlZCBmb3Igc3lzY2FsbCBwYXJhbWV0ZXJzLCBqdXN0IGRlY2xhcmUgdGhlbQogICogYXMgcG9pbnRlcnMgYmVjYXVzZSB0aGUgc3lzY2FsbCBlbnRyeSBjb2RlIHdpbGwgaGF2ZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2Rlc2NfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9kZXNjXzY0LmgKaW5kZXggYWM5OTFiNS4uN2Q5YzkzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2Rlc2NfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvZGVzY182NC5oCkBAIC0yMCw2ICsyMCwxNiBAQAogI2RlZmluZSBsb2FkX0xEVF9kZXNjKCkgYXNtIHZvbGF0aWxlKCJsbGR0ICV3MCI6OiJyIiAoR0RUX0VOVFJZX0xEVCo4KSkKICNkZWZpbmUgY2xlYXJfTERUKCkgIGFzbSB2b2xhdGlsZSgibGxkdCAldzAiOjoiciIgKDApKQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19zdG9yZV90cih2b2lkKQoreworICAgICAgIHVuc2lnbmVkIGxvbmcgdHI7CisKKyAgICAgICBhc20gdm9sYXRpbGUgKCJzdHIgJXcwIjoiPXIiICh0cikpOworICAgICAgIHJldHVybiB0cjsKK30KKworI2RlZmluZSBzdG9yZV90cih0cikgKHRyKSA9IF9fc3RvcmVfdHIoKQorCiAvKgogICogVGhpcyBpcyB0aGUgbGR0IHRoYXQgZXZlcnkgcHJvY2VzcyB3aWxsIGdldCB1bmxlc3Mgd2UgbmVlZAogICogc29tZXRoaW5nIG90aGVyIHRoYW4gdGhpcy4KQEAgLTMxLDYgKzQxLDE2IEBACiAvKiB0aGUgY3B1IGdkdCBhY2Nlc3NvciAqLwogI2RlZmluZSBjcHVfZ2R0KF9jcHUpICgoc3RydWN0IGRlc2Nfc3RydWN0ICopY3B1X2dkdF9kZXNjcltfY3B1XS5hZGRyZXNzKQogCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9nZHQoY29uc3Qgc3RydWN0IGRlc2NfcHRyICpwdHIpCit7CisJYXNtIHZvbGF0aWxlKCJsZ2R0ICV3MCI6OiJtIiAoKnB0cikpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3RvcmVfZ2R0KHN0cnVjdCBkZXNjX3B0ciAqcHRyKQoreworICAgICAgIGFzbSgic2dkdCAldzAiOiI9bSIgKCpwdHIpKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIF9zZXRfZ2F0ZSh2b2lkICphZHIsIHVuc2lnbmVkIHR5cGUsIHVuc2lnbmVkIGxvbmcgZnVuYywgdW5zaWduZWQgZHBsLCB1bnNpZ25lZCBpc3QpICAKIHsKIAlzdHJ1Y3QgZ2F0ZV9zdHJ1Y3QgczsgCQpAQCAtNzEsNiArOTEsMTYgQEAKIAlfc2V0X2dhdGUoJmlkdF90YWJsZVtucl0sIEdBVEVfSU5URVJSVVBULCAodW5zaWduZWQgbG9uZykgZnVuYywgMywgaXN0KTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGxvYWRfaWR0KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqcHRyKQoreworCWFzbSB2b2xhdGlsZSgibGlkdCAldzAiOjoibSIgKCpwdHIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0b3JlX2lkdChzdHJ1Y3QgZGVzY19wdHIgKmR0cikKK3sKKyAgICAgICBhc20oInNpZHQgJXcwIjoiPW0iICgqZHRyKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHNzbGR0X2Rlc2NyaXB0b3Iodm9pZCAqcHRyLCB1bnNpZ25lZCBsb25nIHRzcywgdW5zaWduZWQgdHlwZSwgCiAJCQkJCSB1bnNpZ25lZCBzaXplKSAKIHsgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvZ2VvZGUuaCBiL2luY2x1ZGUvYXNtLXg4Ni9nZW9kZS5oCmluZGV4IGQ5NDg5ODguLjc3MWFmMzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9nZW9kZS5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9nZW9kZS5oCkBAIC0zOCw2ICszOCw4IEBACiAjZGVmaW5lIE1TUl9MQkFSX0FDUEkJCTB4NTE0MDAwMEUKICNkZWZpbmUgTVNSX0xCQVJfUE1TCQkweDUxNDAwMDBGCiAKKyNkZWZpbmUgTVNSX0RJVklMX1NPRlRfUkVTRVQJMHg1MTQwMDAxNworCiAjZGVmaW5lIE1TUl9QSUNfWVNFTF9MT1cJMHg1MTQwMDAyMAogI2RlZmluZSBNU1JfUElDX1lTRUxfSElHSAkweDUxNDAwMDIxCiAjZGVmaW5lIE1TUl9QSUNfWlNFTF9MT1cJMHg1MTQwMDAyMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2hwZXQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9ocGV0LmgKaW5kZXggZDRhYjZkYi4uYjFmM2MxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L2hwZXQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaHBldC5oCkBAIC0zLDEyICszLDYgQEAKIAogI2lmZGVmIENPTkZJR19IUEVUX1RJTUVSCiAKLS8qCi0gKiBEb2N1bWVudGF0aW9uIG9uIEhQRVQgY2FuIGJlIGZvdW5kIGF0OgotICogICAgICBodHRwOi8vd3d3LmludGVsLmNvbS9pYWwvaG9tZS9zcC9wY21tc3BlYy5odG0KLSAqICAgICAgZnRwOi8vZG93bmxvYWQuaW50ZWwuY29tL2lhbC9ob21lL3NwL21tdHMwOTgucGRmCi0gKi8KLQogI2RlZmluZSBIUEVUX01NQVBfU0laRQkJMTAyNAogCiAjZGVmaW5lIEhQRVRfSUQJCQkweDAwMApAQCAtNjQsNiArNTgsNyBAQAogLyogaHBldCBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIGV4dGVybiB1bnNpZ25lZCBsb25nIGhwZXRfYWRkcmVzczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGZvcmNlX2hwZXRfYWRkcmVzczsKK2V4dGVybiBpbnQgaHBldF9mb3JjZV91c2VyOwogZXh0ZXJuIGludCBpc19ocGV0X2VuYWJsZWQodm9pZCk7CiBleHRlcm4gaW50IGhwZXRfZW5hYmxlKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHBldF9yZWFkbCh1bnNpZ25lZCBsb25nIGEpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lkZS5oIGIvaW5jbHVkZS9hc20teDg2L2lkZS5oCmluZGV4IGU3ODE3YTMuLjQyMTMwYWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaWRlLmgKQEAgLTYyLDcgKzYyLDYgQEAKIAl9CiB9CiAKLSNkZWZpbmUgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAogI2RlZmluZSBpZGVfZGVmYXVsdF9pb19jdGwoYmFzZSkJKChiYXNlKSArIDB4MjA2KSAvKiBvYnNvbGV0ZSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvaW9fYXBpY182NC5oIGIvaW5jbHVkZS9hc20teDg2L2lvX2FwaWNfNjQuaAppbmRleCBkOWYyZTU0Li5lMmMxMzY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvaW9fYXBpY182NC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9pb19hcGljXzY0LmgKQEAgLTEzMyw0ICsxMzMsNiBAQAogCiBleHRlcm4gc3BpbmxvY2tfdCBpODI1OUFfbG9jazsKIAorZXh0ZXJuIGludCB0aW1lcl9vdmVyXzgyNTQ7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lwaS5oIGIvaW5jbHVkZS9hc20teDg2L2lwaS5oCmluZGV4IGE3Yzc1ZWEuLjZkMDExYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcGkuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXBpLmgKQEAgLTExOSw3ICsxMTksNyBAQAogCSAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9jcHVfbWFzayhxdWVyeV9jcHUsIG1hc2spIHsKLQkJX19zZW5kX0lQSV9kZXN0X2ZpZWxkKHg4Nl9jcHVfdG9fYXBpY2lkW3F1ZXJ5X2NwdV0sCisJCV9fc2VuZF9JUElfZGVzdF9maWVsZChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLAogCQkJCSAgICAgIHZlY3RvciwgQVBJQ19ERVNUX1BIWVNJQ0FMKTsKIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L2lycV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L2lycV8zMi5oCmluZGV4IDM2ZjMxMDYuLmFjYTljOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9pcnFfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvaXJxXzMyLmgKQEAgLTQ1LDQgKzQ1LDcgQEAKIHZvaWQgaW5pdF9JUlEodm9pZCk7CiB2b2lkIF9faW5pdCBuYXRpdmVfaW5pdF9JUlEodm9pZCk7CiAKKy8qIEludGVycnVwdCB2ZWN0b3IgbWFuYWdlbWVudCAqLworZXh0ZXJuIERFQ0xBUkVfQklUTUFQKHVzZWRfdmVjdG9ycywgTlJfVkVDVE9SUyk7CisKICNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmggYi9pbmNsdWRlL2FzbS14ODYvbXNyLWluZGV4LmgKaW5kZXggYTAyZWIyOS4uYTQ5NDQ3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L21zci1pbmRleC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9tc3ItaW5kZXguaApAQCAtNzMsOCArNzMsMzIgQEAKICNkZWZpbmUgTVNSX1A2X0VWTlRTRUwwCQkJMHgwMDAwMDE4NgogI2RlZmluZSBNU1JfUDZfRVZOVFNFTDEJCQkweDAwMDAwMTg3CiAKLS8qIEs3L0s4IE1TUnMuIE5vdCBjb21wbGV0ZS4gU2VlIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFsIGZvciBhIG1vcmUKKy8qIEFNRDY0IE1TUnMuIE5vdCBjb21wbGV0ZS4gU2VlIHRoZSBhcmNoaXRlY3R1cmUgbWFudWFsIGZvciBhIG1vcmUKICAgIGNvbXBsZXRlIGxpc3QuICovCisKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0ZFVENIQ1RMCQkweGMwMDExMDMwCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSExJTkFECQkweGMwMDExMDMxCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNGRVRDSFBIWVNBRAkweGMwMDExMDMyCisjZGVmaW5lIE1TUl9BTUQ2NF9JQlNPUENUTAkJMHhjMDAxMTAzMworI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BSSVAJCTB4YzAwMTEwMzQKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU09QREFUQQkJMHhjMDAxMTAzNQorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMgkJMHhjMDAxMTAzNgorI2RlZmluZSBNU1JfQU1ENjRfSUJTT1BEQVRBMwkJMHhjMDAxMTAzNworI2RlZmluZSBNU1JfQU1ENjRfSUJTRENMSU5BRAkJMHhjMDAxMTAzOAorI2RlZmluZSBNU1JfQU1ENjRfSUJTRENQSFlTQUQJCTB4YzAwMTEwMzkKKyNkZWZpbmUgTVNSX0FNRDY0X0lCU0NUTAkJMHhjMDAxMTAzYQorCisvKiBLOCBNU1JzICovCisjZGVmaW5lIE1TUl9LOF9UT1BfTUVNMQkJCTB4YzAwMTAwMWEKKyNkZWZpbmUgTVNSX0s4X1RPUF9NRU0yCQkJMHhjMDAxMDAxZAorI2RlZmluZSBNU1JfSzhfU1lTQ0ZHCQkJMHhjMDAxMDAxMAorI2RlZmluZSBNU1JfSzhfSFdDUgkJCTB4YzAwMTAwMTUKKyNkZWZpbmUgTVNSX0s4X0VOQUJMRV9DMUUJCTB4YzAwMTAwNTUKKyNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFCTB4MDAwNDAwMDAgLyogTXRyckZpeERyYW1FbiBiaXQgICAgKi8KKyNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fTU9ESUZZCTB4MDAwODAwMDAgLyogTXRyckZpeERyYW1Nb2RFbiBiaXQgKi8KKyNkZWZpbmUgSzhfTVRSUl9SRE1FTV9XUk1FTV9NQVNLCTB4MTgxODE4MTggLyogTWFzazogUmRNZW18V3JNZW0gICAgKi8KKworLyogSzcgTVNScyAqLwogI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAJCQkweGMwMDEwMDAwCiAjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4YzAwMTAwMDQKICNkZWZpbmUgTVNSX0s3X0VWTlRTRUwxCQkJMHhjMDAxMDAwMQpAQCAtODMsMjAgKzEwNywxMCBAQAogI2RlZmluZSBNU1JfSzdfUEVSRkNUUjIJCQkweGMwMDEwMDA2CiAjZGVmaW5lIE1TUl9LN19FVk5UU0VMMwkJCTB4YzAwMTAwMDMKICNkZWZpbmUgTVNSX0s3X1BFUkZDVFIzCQkJMHhjMDAxMDAwNwotI2RlZmluZSBNU1JfSzhfVE9QX01FTTEJCQkweGMwMDEwMDFhCiAjZGVmaW5lIE1TUl9LN19DTEtfQ1RMCQkJMHhjMDAxMDAxYgotI2RlZmluZSBNU1JfSzhfVE9QX01FTTIJCQkweGMwMDEwMDFkCi0jZGVmaW5lIE1TUl9LOF9TWVNDRkcJCQkweGMwMDEwMDEwCi0KLSNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFCTB4MDAwNDAwMDAgLyogTXRyckZpeERyYW1FbiBiaXQgICAgKi8KLSNkZWZpbmUgSzhfTVRSUkZJWFJBTkdFX0RSQU1fTU9ESUZZCTB4MDAwODAwMDAgLyogTXRyckZpeERyYW1Nb2RFbiBiaXQgKi8KLSNkZWZpbmUgSzhfTVRSUl9SRE1FTV9XUk1FTV9NQVNLCTB4MTgxODE4MTggLyogTWFzazogUmRNZW18V3JNZW0gICAgKi8KLQogI2RlZmluZSBNU1JfSzdfSFdDUgkJCTB4YzAwMTAwMTUKLSNkZWZpbmUgTVNSX0s4X0hXQ1IJCQkweGMwMDEwMDE1CiAjZGVmaW5lIE1TUl9LN19GSURfVklEX0NUTAkJMHhjMDAxMDA0MQogI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9TVEFUVVMJCTB4YzAwMTAwNDIKLSNkZWZpbmUgTVNSX0s4X0VOQUJMRV9DMUUJCTB4YzAwMTAwNTUKIAogLyogSzYgTVNScyAqLwogI2RlZmluZSBNU1JfSzZfRUZFUgkJCTB4YzAwMDAwODAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV8zMi5oCmluZGV4IGFjZDRiMzMuLmVkM2U3MGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGVfMzIuaApAQCAtMTcsMTAgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmF2aXJ0Lmg+CiAKLSNpZm5kZWYgX0kzODZfQklUT1BTX0gKLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzY0LmggYi9pbmNsdWRlL2FzbS14ODYvcGd0YWJsZV82NC5oCmluZGV4IGE3OWY1MzUuLjliMGZmNDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wZ3RhYmxlXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3BndGFibGVfNjQuaApAQCAtOSw3ICs5LDcgQEAKICAqIHRoZSB4ODYtNjQgcGFnZSB0YWJsZSB0cmVlLgogICovCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL3BkYS5oPgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yXzMyLmggYi9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yXzMyLmgKaW5kZXggODM4MDBlNy4uMTM5NzZiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvcl8zMi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3JfMzIuaApAQCAtNzksNiArNzksNyBAQAogCXVuc2lnbmVkIGNoYXIgYm9vdGVkX2NvcmVzOwkvKiBudW1iZXIgb2YgY29yZXMgYXMgc2VlbiBieSBPUyAqLwogCV9fdTggcGh5c19wcm9jX2lkOyAJCS8qIFBoeXNpY2FsIHByb2Nlc3NvciBpZC4gKi8KIAlfX3U4IGNwdV9jb3JlX2lkOyAgCQkvKiBDb3JlIGlkICovCisJX191OCBjcHVfaW5kZXg7CQkJLyogaW5kZXggaW50byBwZXJfY3B1IGxpc3QgKi8KICNlbmRpZgogfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpKSk7CiAKQEAgLTEwMywxNCArMTA0LDE5IEBACiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHRzc19zdHJ1Y3QsIGluaXRfdHNzKTsKIAogI2lmZGVmIENPTkZJR19TTVAKLWV4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgY3B1X2RhdGFbXTsKLSNkZWZpbmUgY3VycmVudF9jcHVfZGF0YSBjcHVfZGF0YVtzbXBfcHJvY2Vzc29yX2lkKCldCitERUNMQVJFX1BFUl9DUFUoc3RydWN0IGNwdWluZm9feDg2LCBjcHVfaW5mbyk7CisjZGVmaW5lIGNwdV9kYXRhKGNwdSkJCXBlcl9jcHUoY3B1X2luZm8sIGNwdSkKKyNkZWZpbmUgY3VycmVudF9jcHVfZGF0YQljcHVfZGF0YShzbXBfcHJvY2Vzc29yX2lkKCkpCiAjZWxzZQotI2RlZmluZSBjcHVfZGF0YSAoJmJvb3RfY3B1X2RhdGEpCi0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgYm9vdF9jcHVfZGF0YQorI2RlZmluZSBjcHVfZGF0YShjcHUpCQlib290X2NwdV9kYXRhCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEJYm9vdF9jcHVfZGF0YQogI2VuZGlmCiAKLWV4dGVybglpbnQgY3B1X2xsY19pZFtOUl9DUFVTXTsKKy8qCisgKiB0aGUgZm9sbG93aW5nIG5vdyBsaXZlcyBpbiB0aGUgcGVyIGNwdSBhcmVhOgorICogZXh0ZXJuCWludCBjcHVfbGxjX2lkW05SX0NQVVNdOworICovCitERUNMQVJFX1BFUl9DUFUodTgsIGNwdV9sbGNfaWQpOwogZXh0ZXJuIGNoYXIgaWdub3JlX2ZwdV9pcnE7CiAKIHZvaWQgX19pbml0IGNwdV9kZXRlY3Qoc3RydWN0IGNwdWluZm9feDg2ICpjKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3JfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9wcm9jZXNzb3JfNjQuaAppbmRleCBmNDIyYmVjLi5lNGYxOTk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvcHJvY2Vzc29yXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3Byb2Nlc3Nvcl82NC5oCkBAIC03NCw2ICs3NCw3IEBACiAJX191OAlib290ZWRfY29yZXM7CS8qIG51bWJlciBvZiBjb3JlcyBhcyBzZWVuIGJ5IE9TICovCiAJX191OAlwaHlzX3Byb2NfaWQ7CS8qIFBoeXNpY2FsIFByb2Nlc3NvciBpZC4gKi8KIAlfX3U4CWNwdV9jb3JlX2lkOwkvKiBDb3JlIGlkLiAqLworCV9fdTgJY3B1X2luZGV4OwkvKiBpbmRleCBpbnRvIHBlcl9jcHUgbGlzdCAqLwogI2VuZGlmCiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIApAQCAtODgsMTEgKzg5LDEyIEBACiAjZGVmaW5lIFg4Nl9WRU5ET1JfVU5LTk9XTiAweGZmCiAKICNpZmRlZiBDT05GSUdfU01QCi1leHRlcm4gc3RydWN0IGNwdWluZm9feDg2IGNwdV9kYXRhW107Ci0jZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEgY3B1X2RhdGFbc21wX3Byb2Nlc3Nvcl9pZCgpXQorREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBjcHVpbmZvX3g4NiwgY3B1X2luZm8pOworI2RlZmluZSBjcHVfZGF0YShjcHUpCQlwZXJfY3B1KGNwdV9pbmZvLCBjcHUpCisjZGVmaW5lIGN1cnJlbnRfY3B1X2RhdGEJY3B1X2RhdGEoc21wX3Byb2Nlc3Nvcl9pZCgpKQogI2Vsc2UKLSNkZWZpbmUgY3B1X2RhdGEgKCZib290X2NwdV9kYXRhKQotI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhIGJvb3RfY3B1X2RhdGEKKyNkZWZpbmUgY3B1X2RhdGEoY3B1KQkJYm9vdF9jcHVfZGF0YQorI2RlZmluZSBjdXJyZW50X2NwdV9kYXRhCWJvb3RfY3B1X2RhdGEKICNlbmRpZgogCiBleHRlcm4gY2hhciBpZ25vcmVfaXJxMTM7CkBAIC0zOTAsMTIgKzM5Miw2IEBACiAJYXNtIHZvbGF0aWxlKCJjcHVpZCIgOiAiPWEiICh0bXApIDogIjAiICgxKSA6ICJlYngiLCJlY3giLCJlZHgiLCJtZW1vcnkiKTsKIH0gCiAKLSNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKLXN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaCh2b2lkICp4KSAKLXsgCi0JYXNtIHZvbGF0aWxlKCJwcmVmZXRjaHQwICglMCkiIDo6ICJyIiAoeCkpOwotfSAKLQogI2RlZmluZSBBUkNIX0hBU19QUkVGRVRDSFcgMQogc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyh2b2lkICp4KSAKIHsgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODYvcHJvdG8uaCBiL2luY2x1ZGUvYXNtLXg4Ni9wcm90by5oCmluZGV4IGM0NGEzYTkuLmRhYmJhNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wcm90by5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Ni9wcm90by5oCkBAIC04Myw4ICs4Myw2IEBACiBleHRlcm4gaW50IHJlYm9vdF9mb3JjZTsKIGV4dGVybiBpbnQgbm90c2Nfc2V0dXAoY2hhciAqKTsKIAotZXh0ZXJuIGludCB0aW1lcl9vdmVyXzgyNTQ7Ci0KIGV4dGVybiBpbnQgZ3NpX2lycV9zaGFyaW5nKGludCBnc2kpOwogCiBleHRlcm4gaW50IGZvcmNlX213YWl0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3B0cmFjZV8zMi5oCmluZGV4IDYwMDI1OTcuLjc4ZDA2M2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2VfMzIuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlXzMyLmgKQEAgLTU1LDYgKzU1LDggQEAKIH0KIAogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPmVpcCkKKyNkZWZpbmUgZnJhbWVfcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5lYnApCisjZGVmaW5lIHN0YWNrX3BvaW50ZXIocmVncykgKChyZWdzKS0+ZXNwKQogI2RlZmluZSByZWdzX3JldHVybl92YWx1ZShyZWdzKSAoKHJlZ3MpLT5lYXgpCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHByb2ZpbGVfcGMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3B0cmFjZV82NC5oIGIvaW5jbHVkZS9hc20teDg2L3B0cmFjZV82NC5oCmluZGV4IDdmMTY2Y2MuLjdiZmU2MWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9wdHJhY2VfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvcHRyYWNlXzY0LmgKQEAgLTQwLDYgKzQwLDggQEAKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICghISgocmVncyktPmNzICYgMykpCiAjZGVmaW5lIHVzZXJfbW9kZV92bShyZWdzKSB1c2VyX21vZGUocmVncykKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5yaXApCisjZGVmaW5lIGZyYW1lX3BvaW50ZXIocmVncykgKChyZWdzKS0+cmJwKQorI2RlZmluZSBzdGFja19wb2ludGVyKHJlZ3MpICgocmVncyktPnJzcCkKICNkZWZpbmUgcmVnc19yZXR1cm5fdmFsdWUocmVncykgKChyZWdzKS0+cmF4KQogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9maWxlX3BjKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zbXBfMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zbXBfMzIuaAppbmRleCBlZTQ2MDM4Li43MDU2ZDg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc21wXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3NtcF8zMi5oCkBAIC0xMSw3ICsxMSw3IEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCi0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwpAQCAtMzksOSArMzksMTEgQEAKIGV4dGVybiB2b2lkIHVubG9ja19pcGlfY2FsbF9sb2NrKHZvaWQpOwogCiAjZGVmaW5lIE1BWF9BUElDSUQgMjU2Ci1leHRlcm4gdTggeDg2X2NwdV90b19hcGljaWRbXTsKK2V4dGVybiB1OCBfX2luaXRkYXRhIHg4Nl9jcHVfdG9fYXBpY2lkX2luaXRbXTsKK2V4dGVybiB2b2lkICp4ODZfY3B1X3RvX2FwaWNpZF9wdHI7CitERUNMQVJFX1BFUl9DUFUodTgsIHg4Nl9jcHVfdG9fYXBpY2lkKTsKIAotI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQl4ODZfY3B1X3RvX2FwaWNpZFtjcHVdCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCXBlcl9jcHUoeDg2X2NwdV90b19hcGljaWQsIGNwdSkKIAogZXh0ZXJuIHZvaWQgc2V0X2NwdV9zaWJsaW5nX21hcChpbnQgY3B1KTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3NtcF82NC5oIGIvaW5jbHVkZS9hc20teDg2L3NtcF82NC5oCmluZGV4IGQzMGU5YjYuLjZmMGUwMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Ni9zbXBfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc21wXzY0LmgKQEAgLTM3LDYgKzM3LDggQEAKIGV4dGVybiB2b2lkIHVubG9ja19pcGlfY2FsbF9sb2NrKHZvaWQpOwogZXh0ZXJuIGludCBzbXBfbnVtX3NpYmxpbmdzOwogZXh0ZXJuIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KTsKK2V4dGVybiBpbnQgc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVtYXNrX3QgbWFzaywgdm9pZCAoKmZ1bmMpKHZvaWQgKiksCisJCQkJICB2b2lkICppbmZvLCBpbnQgd2FpdCk7CiAKIC8qCiAgKiBjcHVfc2libGluZ19tYXAgYW5kIGNwdV9jb3JlX21hcCBub3cgbGl2ZQpAQCAtNDcsNyArNDksNyBAQAogICovCiBERUNMQVJFX1BFUl9DUFUoY3B1bWFza190LCBjcHVfc2libGluZ19tYXApOwogREVDTEFSRV9QRVJfQ1BVKGNwdW1hc2tfdCwgY3B1X2NvcmVfbWFwKTsKLWV4dGVybiB1OCBjcHVfbGxjX2lkW05SX0NQVVNdOworREVDTEFSRV9QRVJfQ1BVKHU4LCBjcHVfbGxjX2lkKTsKIAogI2RlZmluZSBTTVBfVFJBTVBPTElORV9CQVNFIDB4NjAwMAogCkBAIC04NCw3ICs4Niw5IEBACiAgKiBTb21lIGxvd2xldmVsIGZ1bmN0aW9ucyBtaWdodCB3YW50IHRvIGtub3cgYWJvdXQKICAqIHRoZSByZWFsIEFQSUMgSUQgPC0+IENQVSAjIG1hcHBpbmcuCiAgKi8KLWV4dGVybiB1OCB4ODZfY3B1X3RvX2FwaWNpZFtOUl9DUFVTXTsJLyogcGh5c2ljYWwgSUQgKi8KK2V4dGVybiB1OCBfX2luaXRkYXRhIHg4Nl9jcHVfdG9fYXBpY2lkX2luaXRbXTsKK2V4dGVybiB2b2lkICp4ODZfY3B1X3RvX2FwaWNpZF9wdHI7CitERUNMQVJFX1BFUl9DUFUodTgsIHg4Nl9jcHVfdG9fYXBpY2lkKTsJLyogcGh5c2ljYWwgSUQgKi8KIGV4dGVybiB1OCBiaW9zX2NwdV9hcGljaWRbXTsKIAogc3RhdGljIGlubGluZSBpbnQgY3B1X3ByZXNlbnRfdG9fYXBpY2lkKGludCBtcHNfY3B1KQpAQCAtMTE1LDggKzExOSw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQl4ODZfY3B1X3RvX2FwaWNpZFtjcHVdCisjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBjcHUpCiAjZWxzZQorZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2NwdV9pZDsKICNkZWZpbmUgY3B1X3BoeXNpY2FsX2lkKGNwdSkJCWJvb3RfY3B1X2lkCiAjZW5kaWYgLyogIUNPTkZJR19TTVAgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3N1c3BlbmRfNjQuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zdXNwZW5kXzY0LmgKaW5kZXggYjg5N2U4Yy4uOTQ0MGE3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3N1c3BlbmRfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvc3VzcGVuZF82NC5oCkBAIC01MywzICs1Myw1IEBACiAKIC8qIHJvdXRpbmVzIGZvciBzYXZpbmcvcmVzdG9yaW5nIGtlcm5lbCBzdGF0ZSAqLwogZXh0ZXJuIGludCBhY3BpX3NhdmVfc3RhdGVfbWVtKHZvaWQpOworZXh0ZXJuIGNoYXIgY29yZV9yZXN0b3JlX2NvZGU7CitleHRlcm4gY2hhciByZXN0b3JlX3JlZ2lzdGVyczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni9zeXN0ZW1fMzIuaCBiL2luY2x1ZGUvYXNtLXg4Ni9zeXN0ZW1fMzIuaAppbmRleCBkYjYyODNlLi5lZjg0Njg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvc3lzdGVtXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3N5c3RlbV8zMi5oCkBAIC0zMTUsNSArMzE1LDYgQEAKIGV4dGVybiB2b2lkIGZyZWVfaW5pdF9wYWdlcyhjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCk7CiAKIHZvaWQgZGVmYXVsdF9pZGxlKHZvaWQpOwordm9pZCBfX3Nob3dfcmVnaXN0ZXJzKHN0cnVjdCBwdF9yZWdzICosIGludCBhbGwpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90bGJmbHVzaF8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoXzMyLmgKaW5kZXggYTUwZmE2Ny4uMmJkNWI5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoXzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoXzMyLmgKQEAgLTc4LDcgKzc4LDYgQEAKICAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCiAgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKICAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcwotICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKICAqICAtIGZsdXNoX3RsYl9vdGhlcnMoY3B1bWFzaywgbW0sIHZhKSBmbHVzaGVzIGEgVExCcyBvbiBvdGhlciBjcHVzCiAgKgogICogLi5idXQgdGhlIGkzODYgaGFzIHNvbWV3aGF0IGxpbWl0ZWQgdGxiIGZsdXNoaW5nIGNhcGFiaWxpdGllcywKQEAgLTE2NiwxMCArMTY1LDQgQEAKIAlmbHVzaF90bGJfYWxsKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGd0YWJsZXMoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JLyogaTM4NiBkb2VzIG5vdCBrZWVwIGFueSBwYWdlIHRhYmxlIGNhY2hlcyBpbiBUTEIgKi8KLX0KLQogI2VuZGlmIC8qIF9JMzg2X1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90bGJmbHVzaF82NC5oIGIvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoXzY0LmgKaW5kZXggODg4ZWI0YS4uNzczMWZkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoXzY0LmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RsYmZsdXNoXzY0LmgKQEAgLTMxLDcgKzMxLDYgQEAKICAqICAtIGZsdXNoX3RsYl9wYWdlKHZtYSwgdm1hZGRyKSBmbHVzaGVzIG9uZSBwYWdlCiAgKiAgLSBmbHVzaF90bGJfcmFuZ2Uodm1hLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZXMKICAqICAtIGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIGtlcm5lbCBwYWdlcwotICogIC0gZmx1c2hfdGxiX3BndGFibGVzKG1tLCBzdGFydCwgZW5kKSBmbHVzaGVzIGEgcmFuZ2Ugb2YgcGFnZSB0YWJsZXMKICAqCiAgKiB4ODYtNjQgY2FuIG9ubHkgZmx1c2ggaW5kaXZpZHVhbCBwYWdlcyBvciBmdWxsIFZNcy4gRm9yIGEgcmFuZ2UgZmx1c2gKICAqIHdlIGFsd2F5cyBkbyB0aGUgZnVsbCBWTS4gTWlnaHQgYmUgd29ydGggdHJ5aW5nIGlmIGZvciBhIHNtYWxsCkBAIC05OCwxMiArOTcsNCBAQAogCWZsdXNoX3RsYl9hbGwoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9wZ3RhYmxlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiB4ODZfNjQgZG9lcyBub3Qga2VlcCBhbnkgcGFnZSB0YWJsZSBjYWNoZXMgaW4gYSBzb2Z0d2FyZSBUTEIuCi0JICAgVGhlIENQVXMgZG8gaW4gdGhlaXIgaGFyZHdhcmUgVExCcywgYnV0IHRoZXkgYXJlIGhhbmRsZWQKLQkgICBieSB0aGUgbm9ybWFsIFRMQiBmbHVzaGluZyBhbGdvcml0aG1zLiAqLwotfQotCiAjZW5kaWYgLyogX1g4NjY0X1RMQkZMVVNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Ni90b3BvbG9neV8zMi5oIGIvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5XzMyLmgKaW5kZXggYWUxMDc0Ni4uOTA0MGY1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5XzMyLmgKKysrIGIvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5XzMyLmgKQEAgLTI4LDggKzI4LDggQEAKICNkZWZpbmUgX0FTTV9JMzg2X1RPUE9MT0dZX0gKIAogI2lmZGVmIENPTkZJR19YODZfSFQKLSNkZWZpbmUgdG9wb2xvZ3lfcGh5c2ljYWxfcGFja2FnZV9pZChjcHUpCShjcHVfZGF0YVtjcHVdLnBoeXNfcHJvY19pZCkKLSNkZWZpbmUgdG9wb2xvZ3lfY29yZV9pZChjcHUpCQkJKGNwdV9kYXRhW2NwdV0uY3B1X2NvcmVfaWQpCisjZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQkoY3B1X2RhdGEoY3B1KS5waHlzX3Byb2NfaWQpCisjZGVmaW5lIHRvcG9sb2d5X2NvcmVfaWQoY3B1KQkJCShjcHVfZGF0YShjcHUpLmNwdV9jb3JlX2lkKQogI2RlZmluZSB0b3BvbG9neV9jb3JlX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9jb3JlX21hcCwgY3B1KSkKICNkZWZpbmUgdG9wb2xvZ3lfdGhyZWFkX3NpYmxpbmdzKGNwdSkJCShwZXJfY3B1KGNwdV9zaWJsaW5nX21hcCwgY3B1KSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2L3RvcG9sb2d5XzY0LmggYi9pbmNsdWRlL2FzbS14ODYvdG9wb2xvZ3lfNjQuaAppbmRleCA4NDhjMTdmLi5hNzE4ZGRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODYvdG9wb2xvZ3lfNjQuaAorKysgYi9pbmNsdWRlL2FzbS14ODYvdG9wb2xvZ3lfNjQuaApAQCAtNSw3ICs1LDcgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogCiAjaW5jbHVkZSA8YXNtL21wc3BlYy5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogZXh0ZXJuIGNwdW1hc2tfdCBjcHVfb25saW5lX21hcDsKIApAQCAtNTYsOCArNTYsOCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIHRvcG9sb2d5X3BoeXNpY2FsX3BhY2thZ2VfaWQoY3B1KQkoY3B1X2RhdGFbY3B1XS5waHlzX3Byb2NfaWQpCi0jZGVmaW5lIHRvcG9sb2d5X2NvcmVfaWQoY3B1KQkJCShjcHVfZGF0YVtjcHVdLmNwdV9jb3JlX2lkKQorI2RlZmluZSB0b3BvbG9neV9waHlzaWNhbF9wYWNrYWdlX2lkKGNwdSkJKGNwdV9kYXRhKGNwdSkucGh5c19wcm9jX2lkKQorI2RlZmluZSB0b3BvbG9neV9jb3JlX2lkKGNwdSkJCQkoY3B1X2RhdGEoY3B1KS5jcHVfY29yZV9pZCkKICNkZWZpbmUgdG9wb2xvZ3lfY29yZV9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfY29yZV9tYXAsIGNwdSkpCiAjZGVmaW5lIHRvcG9sb2d5X3RocmVhZF9zaWJsaW5ncyhjcHUpCQkocGVyX2NwdShjcHVfc2libGluZ19tYXAsIGNwdSkpCiAjZGVmaW5lIG1jX2NhcGFibGUoKQkJCShib290X2NwdV9kYXRhLng4Nl9tYXhfY29yZXMgPiAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20teHRlbnNhL2JpdG9wcy5oCmluZGV4IDFjMWUwZDkuLjIzMjYxZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXh0ZW5zYS9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvYml0b3BzLmgKQEAgLTE1LDYgKzE1LDEwIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZXJyb3Igb25seSA8bGludXgvYml0b3BzLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseQorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTEwOCw2ICsxMTIsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvaHdlaWdodC5oPgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2JpdG9wcy9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL21pbml4Lmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXh0ZW5zYS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20teHRlbnNhL3RsYmZsdXNoLmgKaW5kZXggN2M2MzdiMy4uNDZkMjQwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teHRlbnNhL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20teHRlbnNhL3RsYmZsdXNoLmgKQEAgLTQxLDE3ICs0MSw2IEBACiAKICNkZWZpbmUgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCxlbmQpIGZsdXNoX3RsYl9hbGwoKQogCi0KLS8qIFRoaXMgaXMgY2FsbGQgaW4gbXVubWFwIHdoZW4gd2UgaGF2ZSBmcmVlZCB1cCBzb21lIHBhZ2UtdGFibGUgcGFnZXMuCi0gKiBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUsIHRoZXJlJ3Mgbm90aGluZyBzcGVjaWFsIGFib3V0IG91cgotICogcGFnZS10YWJsZSBwYWdlcy4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLX0KLQogLyogVExCIG9wZXJhdGlvbnMuICovCiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpdGxiX3Byb2JlKHVuc2lnbmVkIGxvbmcgYWRkcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKaW5kZXggN2FjODMwMy4uZTNmZmQxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9LYnVpbGQKQEAgLTQ3LDYgKzQ3LDcgQEAKIGhlYWRlci15ICs9IGNvZmYuaAogaGVhZGVyLXkgKz0gY29tc3RhdHMuaAogaGVhZGVyLXkgKz0gY29uc3QuaAoraGVhZGVyLXkgKz0gY2dyb3Vwc3RhdHMuaAogaGVhZGVyLXkgKz0gY3ljeF9jZm0uaAogaGVhZGVyLXkgKz0gZGxtX2RldmljZS5oCiBoZWFkZXIteSArPSBkbG1fbmV0bGluay5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjcGkuaCBiL2luY2x1ZGUvbGludXgvYWNwaS5oCmluZGV4IGJmNWUwMDAuLjhjY2VkZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNwaS5oCkBAIC0xODksMzIgKzE4OSw2IEBACiBleHRlcm4gaW50IGFjcGlfYmxhY2tsaXN0ZWQodm9pZCk7CiBleHRlcm4gdm9pZCBhY3BpX2Jpb3NfeWVhcihjaGFyICpzKTsKIAotI2RlZmluZQlBQ1BJX0NTVEFURV9MSU1JVF9ERUZJTkVECS8qIGZvciBkcml2ZXIgYnVpbGRzICovCi0jaWZkZWYJQ09ORklHX0FDUEkKLQotLyoKLSAqIFNldCBoaWdoZXN0IGxlZ2FsIEMtc3RhdGUKLSAqIDA6IEMwIG9rYXksIGJ1dCBub3QgQzEKLSAqIDE6IEMxIG9rYXksIGJ1dCBub3QgQzIKLSAqIDI6IEMyIG9rYXksIGJ1dCBub3QgQzMgZXRjLgotICovCi0KLWV4dGVybiB1bnNpZ25lZCBpbnQgbWF4X2NzdGF0ZTsKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWNwaV9nZXRfY3N0YXRlX2xpbWl0KHZvaWQpCi17Ci0JcmV0dXJuIG1heF9jc3RhdGU7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYWNwaV9zZXRfY3N0YXRlX2xpbWl0KHVuc2lnbmVkIGludCBuZXdfbGltaXQpCi17Ci0JbWF4X2NzdGF0ZSA9IG5ld19saW1pdDsKLQlyZXR1cm47Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYWNwaV9nZXRfY3N0YXRlX2xpbWl0KHZvaWQpIHsgcmV0dXJuIDA7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhY3BpX3NldF9jc3RhdGVfbGltaXQodW5zaWduZWQgaW50IG5ld19saW1pdCkgeyByZXR1cm47IH0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX0FDUElfTlVNQQogaW50IGFjcGlfZ2V0X3B4bShhY3BpX2hhbmRsZSBoYW5kbGUpOwogaW50IGFjcGlfZ2V0X25vZGUoYWNwaV9oYW5kbGUgKmhhbmRsZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fpby5oIGIvaW5jbHVkZS9saW51eC9haW8uaAppbmRleCBkMTBlNjA4Li43ZWY4ZGU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTIzMiwxOCArMjMyLDYgQEAKIAkJX19wdXRfaW9jdHgoa2lvY3R4KTsJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgaW5fYWlvKCkgKHVubGlrZWx5KCFpc19zeW5jX3dhaXQoY3VycmVudC0+aW9fd2FpdCkpKQotCi0vKiBtYXkgYmUgdXNlZCBmb3IgZGVidWdnaW5nICovCi0jZGVmaW5lIHdhcm5faWZfYXN5bmMoKQkJCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWlmIChpbl9haW8oKSkgewkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0VSUiAiJXMoJXM6JWQpIGNhbGxlZCBpbiBhc3luYyBjb250ZXh0IVxuIiwJXAotCQkJX19GVU5DVElPTl9fLCBfX0ZJTEVfXywgX19MSU5FX18pOwkJXAotCQlkdW1wX3N0YWNrKCk7CQkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KICNkZWZpbmUgaW9fd2FpdF90b19raW9jYih3YWl0KSBjb250YWluZXJfb2Yod2FpdCwgc3RydWN0IGtpb2NiLCBraV93YWl0KQogCiAjaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaCBiL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmgKaW5kZXggNmIyMGFmMC4uNzExM2EzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdF9zcGlubG9jay5oCkBAIC0xOCw3ICsxOCw3IEBACiAJICovCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKLQl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChiaXRudW0sIGFkZHIpKSB7CisJd2hpbGUgKHVubGlrZWx5KHRlc3RfYW5kX3NldF9iaXRfbG9jayhiaXRudW0sIGFkZHIpKSkgewogCQl3aGlsZSAodGVzdF9iaXQoYml0bnVtLCBhZGRyKSkgewogCQkJcHJlZW1wdF9lbmFibGUoKTsKIAkJCWNwdV9yZWxheCgpOwpAQCAtMzYsNyArMzYsNyBAQAogewogCXByZWVtcHRfZGlzYWJsZSgpOwogI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgfHwgZGVmaW5lZChDT05GSUdfREVCVUdfU1BJTkxPQ0spCi0JaWYgKHRlc3RfYW5kX3NldF9iaXQoYml0bnVtLCBhZGRyKSkgeworCWlmICh1bmxpa2VseSh0ZXN0X2FuZF9zZXRfYml0X2xvY2soYml0bnVtLCBhZGRyKSkpIHsKIAkJcHJlZW1wdF9lbmFibGUoKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTAsMTAgKzUwLDI4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBiaXRfc3Bpbl91bmxvY2soaW50IGJpdG51bSwgdW5zaWduZWQgbG9uZyAqYWRkcikKIHsKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwogCUJVR19PTighdGVzdF9iaXQoYml0bnVtLCBhZGRyKSk7Ci0Jc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7Ci0JY2xlYXJfYml0KGJpdG51bSwgYWRkcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0RFQlVHX1NQSU5MT0NLKQorCWNsZWFyX2JpdF91bmxvY2soYml0bnVtLCBhZGRyKTsKKyNlbmRpZgorCXByZWVtcHRfZW5hYmxlKCk7CisJX19yZWxlYXNlKGJpdGxvY2spOworfQorCisvKgorICogIGJpdC1iYXNlZCBzcGluX3VubG9jaygpCisgKiAgbm9uLWF0b21pYyB2ZXJzaW9uLCB3aGljaCBjYW4gYmUgdXNlZCBlZy4gaWYgdGhlIGJpdCBsb2NrIGl0c2VsZiBpcworICogIHByb3RlY3RpbmcgdGhlIHJlc3Qgb2YgdGhlIGZsYWdzIGluIHRoZSB3b3JkLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19iaXRfc3Bpbl91bmxvY2soaW50IGJpdG51bSwgdW5zaWduZWQgbG9uZyAqYWRkcikKK3sKKyNpZmRlZiBDT05GSUdfREVCVUdfU1BJTkxPQ0sKKwlCVUdfT04oIXRlc3RfYml0KGJpdG51bSwgYWRkcikpOworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKKwlfX2NsZWFyX2JpdF91bmxvY2soYml0bnVtLCBhZGRyKTsKICNlbmRpZgogCXByZWVtcHRfZW5hYmxlKCk7CiAJX19yZWxlYXNlKGJpdGxvY2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaCBiL2luY2x1ZGUvbGludXgvYml0bWFwLmgKaW5kZXggNjRiNDY0MS4uYWNhZDExMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9iaXRtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2JpdG1hcC5oCkBAIC02LDYgKzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKIC8qCiAgKiBiaXRtYXBzIHByb3ZpZGUgYml0IGFycmF5cyB0aGF0IGNvbnN1bWUgb25lIG9yIG1vcmUgdW5zaWduZWQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IGI5ZmI4ZWUuLjY5YzFlZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMiw2ICsyLDE0IEBACiAjZGVmaW5lIF9MSU5VWF9CSVRPUFNfSAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCisjaWZkZWYJX19LRVJORUxfXworI2RlZmluZSBCSVQobnIpCQkJKDFVTCA8PCAobnIpKQorI2RlZmluZSBCSVRfTUFTSyhucikJCSgxVUwgPDwgKChucikgJSBCSVRTX1BFUl9MT05HKSkKKyNkZWZpbmUgQklUX1dPUkQobnIpCQkoKG5yKSAvIEJJVFNfUEVSX0xPTkcpCisjZGVmaW5lIEJJVFNfVE9fTE9OR1MobnIpCURJVl9ST1VORF9VUChuciwgQklUU19QRVJfTE9ORykKKyNkZWZpbmUgQklUU19QRVJfQllURQkJOAorI2VuZGlmCisKIC8qCiAgKiBJbmNsdWRlIHRoaXMgaGVyZSBiZWNhdXNlIHNvbWUgYXJjaGl0ZWN0dXJlcyBuZWVkIGdlbmVyaWNfZmZzL2ZscyBpbgogICogc2NvcGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKaW5kZXggODk2MWU3Zi4uN2E4ZDdhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTMxMCwxMCArMzEwLDYgQEAKICNkZWZpbmUgQ0FQX1NFVEZDQVAJICAgICAzMQogCiAjaWZkZWYgX19LRVJORUxfXwotLyoKLSAqIEJvdW5kaW5nIHNldAotICovCi1leHRlcm4ga2VybmVsX2NhcF90IGNhcF9ic2V0OwogCiAvKgogICogSW50ZXJuYWwga2VybmVsIGZ1bmN0aW9ucyBvbmx5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nkcm9tLmggYi9pbmNsdWRlL2xpbnV4L2Nkcm9tLmgKaW5kZXggMmI2NDFiMS4uYzZkM2UyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZHJvbS5oCisrKyBiL2luY2x1ZGUvbGludXgvY2Ryb20uaApAQCAtMiw3ICsyLDcgQEAKICAqIC0tIDxsaW51eC9jZHJvbS5oPgogICogR2VuZXJhbCBoZWFkZXIgZmlsZSBmb3IgbGludXggQ0QtUk9NIGRyaXZlcnMgCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTIgICAgICAgICBEYXZpZCBHaWxsZXIsIHJhZmV0bWFkQG94eS5lZHUKLSAqICAgICAgICAgICAgICAgMTk5NCwgMTk5NSAgIEViZXJoYXJkIE1vZW5rZWJlcmcsIGVtb2Vua2VAZ3dkZy5kZQorICogICAgICAgICAgICAgICAxOTk0LCAxOTk1ICAgRWJlcmhhcmQgTcO2bmtlYmVyZywgZW1vZW5rZUBnd2RnLmRlCiAgKiAgICAgICAgICAgICAgIDE5OTYgICAgICAgICBEYXZpZCB2YW4gTGVldXdlbiwgZGF2aWRAdG0udG5vLm5sCiAgKiAgICAgICAgICAgICAgIDE5OTcsIDE5OTggICBFcmlrIEFuZGVyc2VuLCBhbmRlcnNlZUBkZWJpYW4ub3JnCiAgKiAgICAgICAgICAgICAgIDE5OTgtMjAwMiAgICBKZW5zIEF4Ym9lLCBheGJvZUBzdXNlLmRlCkBAIC03Niw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24pICovCiAjZGVmaW5lIENEUk9NX0dFVF9NQ04JCTB4NTMxMSAvKiBPYnRhaW4gdGhlICJVbml2ZXJzYWwgUHJvZHVjdCBDb2RlIiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhdmFpbGFibGUgKHN0cnVjdCBjZHJvbV9tY24pICovCi0jZGVmaW5lIENEUk9NX0dFVF9VUEMJCUNEUk9NX0dFVF9NQ04gIC8qIFRoaXMgb25lIGlzIGRlcHJpY2F0ZWQsIAorI2RlZmluZSBDRFJPTV9HRVRfVVBDCQlDRFJPTV9HRVRfTUNOICAvKiBUaGlzIG9uZSBpcyBkZXByZWNhdGVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBoZXJlIGFueXdheSBmb3IgY29tcGF0aWJpbGl0eSAqLwogI2RlZmluZSBDRFJPTVJFU0VUCQkweDUzMTIgLyogaGFyZC1yZXNldCB0aGUgZHJpdmUgKi8KICNkZWZpbmUgQ0RST01WT0xSRUFECQkweDUzMTMgLyogR2V0IHRoZSBkcml2ZSdzIHZvbHVtZSBzZXR0aW5nIApAQCAtNTA2LDcgKzUwNiw3IEBACiAjZGVmaW5lIEdQTU9ERV9UT19QUk9URUNUX1BBR0UJCTB4MWQKICNkZWZpbmUgR1BNT0RFX0NBUEFCSUxJVElFU19QQUdFCTB4MmEKICNkZWZpbmUgR1BNT0RFX0FMTF9QQUdFUwkJMHgzZgotLyogTm90IGluIE10LiBGdWppLCBidXQgaW4gQVRBUEkgMi42IC0tIGRlcHJpY2F0ZWQgbm93IGluIGZhdm9yCisvKiBOb3QgaW4gTXQuIEZ1amksIGJ1dCBpbiBBVEFQSSAyLjYgLS0gZGVwcmVjYXRlZCBub3cgaW4gZmF2b3IKICAqIG9mIE1PREVfU0VOU0VfUE9XRVJfUEFHRSAqLwogI2RlZmluZSBHUE1PREVfQ0RST01fUEFHRQkJMHgwZAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzQ3OTMyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaApAQCAtMCwwICsxLDMyNyBAQAorI2lmbmRlZiBfTElOVVhfQ0dST1VQX0gKKyNkZWZpbmUgX0xJTlVYX0NHUk9VUF9ICisvKgorICogIGNncm91cCBpbnRlcmZhY2UKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEJVTEwgU0EKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGludXgvbm9kZW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cHN0YXRzLmg+CisKKyNpZmRlZiBDT05GSUdfQ0dST1VQUworCitzdHJ1Y3QgY2dyb3VwZnNfcm9vdDsKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzOworc3RydWN0IGlub2RlOworCitleHRlcm4gaW50IGNncm91cF9pbml0X2Vhcmx5KHZvaWQpOworZXh0ZXJuIGludCBjZ3JvdXBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGNncm91cF9pbml0X3NtcCh2b2lkKTsKK2V4dGVybiB2b2lkIGNncm91cF9sb2NrKHZvaWQpOworZXh0ZXJuIHZvaWQgY2dyb3VwX3VubG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIGNncm91cF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gdm9pZCBjZ3JvdXBfZm9ya19jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiB2b2lkIGNncm91cF9wb3N0X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKK2V4dGVybiB2b2lkIGNncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHJ1bl9jYWxsYmFja3MpOworZXh0ZXJuIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLAorCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CisKK2V4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3VwX29wZXJhdGlvbnM7CisKKy8qIERlZmluZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIGNncm91cCBzdWJzeXN0ZW1zICovCisjZGVmaW5lIFNVQlNZUyhfeCkgX3ggIyMgX3N1YnN5c19pZCwKK2VudW0gY2dyb3VwX3N1YnN5c19pZCB7CisjaW5jbHVkZSA8bGludXgvY2dyb3VwX3N1YnN5cy5oPgorCUNHUk9VUF9TVUJTWVNfQ09VTlQKK307CisjdW5kZWYgU1VCU1lTCisKKy8qIFBlci1zdWJzeXN0ZW0vcGVyLWNncm91cCBzdGF0ZSBtYWludGFpbmVkIGJ5IHRoZSBzeXN0ZW0uICovCitzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSB7CisJLyogVGhlIGNncm91cCB0aGF0IHRoaXMgc3Vic3lzdGVtIGlzIGF0dGFjaGVkIHRvLiBVc2VmdWwKKwkgKiBmb3Igc3Vic3lzdGVtcyB0aGF0IHdhbnQgdG8ga25vdyBhYm91dCB0aGUgY2dyb3VwCisJICogaGllcmFyY2h5IHN0cnVjdHVyZSAqLworCXN0cnVjdCBjZ3JvdXAgKmNncm91cDsKKworCS8qIFN0YXRlIG1haW50YWluZWQgYnkgdGhlIGNncm91cCBzeXN0ZW0gdG8gYWxsb3cKKwkgKiBzdWJzeXN0ZW1zIHRvIGJlICJidXN5Ii4gU2hvdWxkIGJlIGFjY2Vzc2VkIHZpYSBjc3NfZ2V0KCkKKwkgKiBhbmQgY3NzX3B1dCgpICovCisKKwlhdG9taWNfdCByZWZjbnQ7CisKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworfTsKKworLyogYml0cyBpbiBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBmbGFncyBmaWVsZCAqLworZW51bSB7CisJQ1NTX1JPT1QsIC8qIFRoaXMgQ1NTIGlzIHRoZSByb290IG9mIHRoZSBzdWJzeXN0ZW0gKi8KK307CisKKy8qCisgKiBDYWxsIGNzc19nZXQoKSB0byBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBjZ3JvdXA7CisgKgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjc3NfZ2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJLyogV2UgZG9uJ3QgbmVlZCB0byByZWZlcmVuY2UgY291bnQgdGhlIHJvb3Qgc3RhdGUgKi8KKwlpZiAoIXRlc3RfYml0KENTU19ST09ULCAmY3NzLT5mbGFncykpCisJCWF0b21pY19pbmMoJmNzcy0+cmVmY250KTsKK30KKy8qCisgKiBjc3NfcHV0KCkgc2hvdWxkIGJlIGNhbGxlZCB0byByZWxlYXNlIGEgcmVmZXJlbmNlIHRha2VuIGJ5CisgKiBjc3NfZ2V0KCkKKyAqLworCitleHRlcm4gdm9pZCBfX2Nzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7CitzdGF0aWMgaW5saW5lIHZvaWQgY3NzX3B1dChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKQoreworCWlmICghdGVzdF9iaXQoQ1NTX1JPT1QsICZjc3MtPmZsYWdzKSkKKwkJX19jc3NfcHV0KGNzcyk7Cit9CisKK3N0cnVjdCBjZ3JvdXAgeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkvKiAidW5zaWduZWQgbG9uZyIgc28gYml0b3BzIHdvcmsgKi8KKworCS8qIGNvdW50IHVzZXJzIG9mIHRoaXMgY2dyb3VwLiA+MCBtZWFucyBidXN5LCBidXQgZG9lc24ndAorCSAqIG5lY2Vzc2FyaWx5IGluZGljYXRlIHRoZSBudW1iZXIgb2YgdGFza3MgaW4gdGhlCisJICogY2dyb3VwICovCisJYXRvbWljX3QgY291bnQ7CisKKwkvKgorCSAqIFdlIGxpbmsgb3VyICdzaWJsaW5nJyBzdHJ1Y3QgaW50byBvdXIgcGFyZW50J3MgJ2NoaWxkcmVuJy4KKwkgKiBPdXIgY2hpbGRyZW4gbGluayB0aGVpciAnc2libGluZycgaW50byBvdXIgJ2NoaWxkcmVuJy4KKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNpYmxpbmc7CS8qIG15IHBhcmVudCdzIGNoaWxkcmVuICovCisJc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsJLyogbXkgY2hpbGRyZW4gKi8KKworCXN0cnVjdCBjZ3JvdXAgKnBhcmVudDsJLyogbXkgcGFyZW50ICovCisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwkgIAkvKiBjZ3JvdXAgZnMgZW50cnkgKi8KKworCS8qIFByaXZhdGUgcG9pbnRlcnMgZm9yIGVhY2ggcmVnaXN0ZXJlZCBzdWJzeXN0ZW0gKi8KKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqc3Vic3lzW0NHUk9VUF9TVUJTWVNfQ09VTlRdOworCisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3Q7CisJc3RydWN0IGNncm91cCAqdG9wX2Nncm91cDsKKworCS8qCisJICogTGlzdCBvZiBjZ19jZ3JvdXBfbGlua3MgcG9pbnRpbmcgYXQgY3NzX3NldHMgd2l0aAorCSAqIHRhc2tzIGluIHRoaXMgY2dyb3VwLiBQcm90ZWN0ZWQgYnkgY3NzX3NldF9sb2NrCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBjc3Nfc2V0czsKKworCS8qCisJICogTGlua2VkIGxpc3QgcnVubmluZyB0aHJvdWdoIGFsbCBjZ3JvdXBzIHRoYXQgY2FuCisJICogcG90ZW50aWFsbHkgYmUgcmVhcGVkIGJ5IHRoZSByZWxlYXNlIGFnZW50LiBQcm90ZWN0ZWQgYnkKKwkgKiByZWxlYXNlX2xpc3RfbG9jaworCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmVsZWFzZV9saXN0OworfTsKKworLyogQSBjc3Nfc2V0IGlzIGEgc3RydWN0dXJlIGhvbGRpbmcgcG9pbnRlcnMgdG8gYSBzZXQgb2YKKyAqIGNncm91cF9zdWJzeXNfc3RhdGUgb2JqZWN0cy4gVGhpcyBzYXZlcyBzcGFjZSBpbiB0aGUgdGFzayBzdHJ1Y3QKKyAqIG9iamVjdCBhbmQgc3BlZWRzIHVwIGZvcmsoKS9leGl0KCksIHNpbmNlIGEgc2luZ2xlIGluYy9kZWMgYW5kIGEKKyAqIGxpc3RfYWRkKCkvZGVsKCkgY2FuIGJ1bXAgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgZW50aXJlCisgKiBjZ3JvdXAgc2V0IGZvciBhIHRhc2suCisgKi8KKworc3RydWN0IGNzc19zZXQgeworCisJLyogUmVmZXJlbmNlIGNvdW50ICovCisJc3RydWN0IGtyZWYgcmVmOworCisJLyoKKwkgKiBMaXN0IHJ1bm5pbmcgdGhyb3VnaCBhbGwgY2dyb3VwIGdyb3Vwcy4gUHJvdGVjdGVkIGJ5CisJICogY3NzX3NldF9sb2NrCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCisJLyoKKwkgKiBMaXN0IHJ1bm5pbmcgdGhyb3VnaCBhbGwgdGFza3MgdXNpbmcgdGhpcyBjZ3JvdXAKKwkgKiBncm91cC4gUHJvdGVjdGVkIGJ5IGNzc19zZXRfbG9jaworCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgdGFza3M7CisKKwkvKgorCSAqIExpc3Qgb2YgY2dfY2dyb3VwX2xpbmsgb2JqZWN0cyBvbiBsaW5rIGNoYWlucyBmcm9tCisJICogY2dyb3VwcyByZWZlcmVuY2VkIGZyb20gdGhpcyBjc3Nfc2V0LiBQcm90ZWN0ZWQgYnkKKwkgKiBjc3Nfc2V0X2xvY2sKKwkgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGNnX2xpbmtzOworCisJLyoKKwkgKiBTZXQgb2Ygc3Vic3lzdGVtIHN0YXRlcywgb25lIGZvciBlYWNoIHN1YnN5c3RlbS4gVGhpcyBhcnJheQorCSAqIGlzIGltbXV0YWJsZSBhZnRlciBjcmVhdGlvbiBhcGFydCBmcm9tIHRoZSBpbml0X2Nzc19zZXQKKwkgKiBkdXJpbmcgc3Vic3lzdGVtIHJlZ2lzdHJhdGlvbiAoYXQgYm9vdCB0aW1lKS4KKwkgKi8KKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqc3Vic3lzW0NHUk9VUF9TVUJTWVNfQ09VTlRdOworCit9OworCisvKiBzdHJ1Y3QgY2Z0eXBlOgorICoKKyAqIFRoZSBmaWxlcyBpbiB0aGUgY2dyb3VwIGZpbGVzeXN0ZW0gbW9zdGx5IGhhdmUgYSB2ZXJ5IHNpbXBsZSByZWFkL3dyaXRlCisgKiBoYW5kbGluZywgc29tZSBjb21tb24gZnVuY3Rpb24gd2lsbCB0YWtlIGNhcmUgb2YgaXQuIE5ldmVydGhlbGVzcyBzb21lIGNhc2VzCisgKiAocmVhZCB0YXNrcykgYXJlIHNwZWNpYWwgYW5kIHRoZXJlZm9yZSBJIGRlZmluZSB0aGlzIHN0cnVjdHVyZSBmb3IgZXZlcnkKKyAqIGtpbmQgb2YgZmlsZS4KKyAqCisgKgorICogV2hlbiByZWFkaW5nL3dyaXRpbmcgdG8gYSBmaWxlOgorICoJLSB0aGUgY2dyb3VwIHRvIHVzZSBpbiBmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQtPmRfZnNkYXRhCisgKgktIHRoZSAnY2Z0eXBlJyBvZiB0aGUgZmlsZSBpcyBmaWxlLT5mX2RlbnRyeS0+ZF9mc2RhdGEKKyAqLworCisjZGVmaW5lIE1BWF9DRlRZUEVfTkFNRSA2NAorc3RydWN0IGNmdHlwZSB7CisJLyogQnkgY29udmVudGlvbiwgdGhlIG5hbWUgc2hvdWxkIGJlZ2luIHdpdGggdGhlIG5hbWUgb2YgdGhlCisJICogc3Vic3lzdGVtLCBmb2xsb3dlZCBieSBhIHBlcmlvZCAqLworCWNoYXIgbmFtZVtNQVhfQ0ZUWVBFX05BTUVdOworCWludCBwcml2YXRlOworCWludCAoKm9wZW4pIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CisJc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQkgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKTsKKwkvKgorCSAqIHJlYWRfdWludCgpIGlzIGEgc2hvcnRjdXQgZm9yIHRoZSBjb21tb24gY2FzZSBvZiByZXR1cm5pbmcgYQorCSAqIHNpbmdsZSBpbnRlZ2VyLiBVc2UgaXQgaW4gcGxhY2Ugb2YgcmVhZCgpCisJICovCisJdTY0ICgqcmVhZF91aW50KSAoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0KTsKKwlzc2l6ZV90ICgqd3JpdGUpIChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQkgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpOworCisJLyoKKwkgKiB3cml0ZV91aW50KCkgaXMgYSBzaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIGFjY2VwdGluZworCSAqIGEgc2luZ2xlIGludGVnZXIgKGFzIHBhcnNlZCBieSBzaW1wbGVfc3RydG91bGwpIGZyb20KKwkgKiB1c2Vyc3BhY2UuIFVzZSBpbiBwbGFjZSBvZiB3cml0ZSgpOyByZXR1cm4gMCBvciBlcnJvci4KKwkgKi8KKwlpbnQgKCp3cml0ZV91aW50KSAoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKTsKKworCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit9OworCisvKiBBZGQgYSBuZXcgZmlsZSB0byB0aGUgZ2l2ZW4gY2dyb3VwIGRpcmVjdG9yeS4gU2hvdWxkIG9ubHkgYmUKKyAqIGNhbGxlZCBieSBzdWJzeXN0ZW1zIGZyb20gd2l0aGluIGEgcG9wdWxhdGUoKSBtZXRob2QgKi8KK2ludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cywKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBjZnR5cGUgKmNmdCk7CisKKy8qIEFkZCBhIHNldCBvZiBuZXcgZmlsZXMgdG8gdGhlIGdpdmVuIGNncm91cCBkaXJlY3RvcnkuIFNob3VsZAorICogb25seSBiZSBjYWxsZWQgYnkgc3Vic3lzdGVtcyBmcm9tIHdpdGhpbiBhIHBvcHVsYXRlKCkgbWV0aG9kICovCitpbnQgY2dyb3VwX2FkZF9maWxlcyhzdHJ1Y3QgY2dyb3VwICpjb250LAorCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cywKKwkJCWNvbnN0IHN0cnVjdCBjZnR5cGUgY2Z0W10sCisJCQlpbnQgY291bnQpOworCitpbnQgY2dyb3VwX2lzX3JlbW92ZWQoY29uc3Qgc3RydWN0IGNncm91cCAqY29udCk7CisKK2ludCBjZ3JvdXBfcGF0aChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjb250LCBjaGFyICpidWYsIGludCBidWZsZW4pOworCitpbnQgY2dyb3VwX3Rhc2tfY291bnQoY29uc3Qgc3RydWN0IGNncm91cCAqY29udCk7CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBjZ3JvdXAgaXMgYSBkZXNjZW5kYW50IG9mIHRoZSBjdXJyZW50IGNncm91cCAqLworaW50IGNncm91cF9pc19kZXNjZW5kYW50KGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNvbnQpOworCisvKiBDb250cm9sIEdyb3VwIHN1YnN5c3RlbSB0eXBlLiBTZWUgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBmb3IgZGV0YWlscyAqLworCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyB7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKigqY3JlYXRlKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkJCQkgIHN0cnVjdCBjZ3JvdXAgKmNvbnQpOworCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpOworCWludCAoKmNhbl9hdHRhY2gpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCSAgc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworCXZvaWQgKCphdHRhY2gpKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY29udCwKKwkJCXN0cnVjdCBjZ3JvdXAgKm9sZF9jb250LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CisJdm9pZCAoKmZvcmspKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKKwl2b2lkICgqZXhpdCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCWludCAoKnBvcHVsYXRlKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQlzdHJ1Y3QgY2dyb3VwICpjb250KTsKKwl2b2lkICgqcG9zdF9jbG9uZSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KTsKKwl2b2lkICgqYmluZCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpyb290KTsKKwlpbnQgc3Vic3lzX2lkOworCWludCBhY3RpdmU7CisJaW50IGVhcmx5X2luaXQ7CisjZGVmaW5lIE1BWF9DR1JPVVBfVFlQRV9OQU1FTEVOIDMyCisJY29uc3QgY2hhciAqbmFtZTsKKworCS8qIFByb3RlY3RlZCBieSBSQ1UgKi8KKwlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdDsKKworCXN0cnVjdCBsaXN0X2hlYWQgc2libGluZzsKKworCXZvaWQgKnByaXZhdGU7Cit9OworCisjZGVmaW5lIFNVQlNZUyhfeCkgZXh0ZXJuIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIF94ICMjIF9zdWJzeXM7CisjaW5jbHVkZSA8bGludXgvY2dyb3VwX3N1YnN5cy5oPgorI3VuZGVmIFNVQlNZUworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjZ3JvdXBfc3Vic3lzX3N0YXRlKAorCXN0cnVjdCBjZ3JvdXAgKmNvbnQsIGludCBzdWJzeXNfaWQpCit7CisJcmV0dXJuIGNvbnQtPnN1YnN5c1tzdWJzeXNfaWRdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICp0YXNrX3N1YnN5c19zdGF0ZSgKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBzdWJzeXNfaWQpCit7CisJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZSh0YXNrLT5jZ3JvdXBzLT5zdWJzeXNbc3Vic3lzX2lkXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNncm91cCogdGFza19jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAorCQkJCQkgICAgICAgaW50IHN1YnN5c19pZCkKK3sKKwlyZXR1cm4gdGFza19zdWJzeXNfc3RhdGUodGFzaywgc3Vic3lzX2lkKS0+Y2dyb3VwOworfQorCitpbnQgY2dyb3VwX3BhdGgoY29uc3Qgc3RydWN0IGNncm91cCAqY29udCwgY2hhciAqYnVmLCBpbnQgYnVmbGVuKTsKKworaW50IGNncm91cF9jbG9uZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGNncm91cF9zdWJzeXMgKnNzKTsKKworLyogQSBjZ3JvdXBfaXRlciBzaG91bGQgYmUgdHJlYXRlZCBhcyBhbiBvcGFxdWUgb2JqZWN0ICovCitzdHJ1Y3QgY2dyb3VwX2l0ZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgKmNnX2xpbms7CisJc3RydWN0IGxpc3RfaGVhZCAqdGFzazsKK307CisKKy8qIFRvIGl0ZXJhdGUgYWNyb3NzIHRoZSB0YXNrcyBpbiBhIGNncm91cDoKKyAqCisgKiAxKSBjYWxsIGNncm91cF9pdGVyX3N0YXJ0IHRvIGludGlhbGl6ZSBhbiBpdGVyYXRvcgorICoKKyAqIDIpIGNhbGwgY2dyb3VwX2l0ZXJfbmV4dCgpIHRvIHJldHJpZXZlIG1lbWJlciB0YXNrcyB1bnRpbCBpdAorICogICAgcmV0dXJucyBOVUxMIG9yIHVudGlsIHlvdSB3YW50IHRvIGVuZCB0aGUgaXRlcmF0aW9uCisgKgorICogMykgY2FsbCBjZ3JvdXBfaXRlcl9lbmQoKSB0byBkZXN0cm95IHRoZSBpdGVyYXRvci4KKyAqLwordm9pZCBjZ3JvdXBfaXRlcl9zdGFydChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2dyb3VwX2l0ZXIgKml0KTsKK3N0cnVjdCB0YXNrX3N0cnVjdCAqY2dyb3VwX2l0ZXJfbmV4dChzdHJ1Y3QgY2dyb3VwICpjb250LAorCQkJCQlzdHJ1Y3QgY2dyb3VwX2l0ZXIgKml0KTsKK3ZvaWQgY2dyb3VwX2l0ZXJfZW5kKHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZ3JvdXBfaXRlciAqaXQpOworCisjZWxzZSAvKiAhQ09ORklHX0NHUk9VUFMgKi8KKworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2luaXRfZWFybHkodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9pbml0X3NtcCh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjZ3JvdXBfZm9ya19jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9wb3N0X2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNhbGxiYWNrcykge30KKworc3RhdGljIGlubGluZSB2b2lkIGNncm91cF9sb2NrKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY2dyb3VwX3VubG9jayh2b2lkKSB7fQorc3RhdGljIGlubGluZSBpbnQgY2dyb3Vwc3RhdHNfYnVpbGQoc3RydWN0IGNncm91cHN0YXRzICpzdGF0cywKKwkJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCXJldHVybiAtRUlOVkFMOworfQorCisjZW5kaWYgLyogIUNPTkZJR19DR1JPVVBTICovCisKKyNlbmRpZiAvKiBfTElOVVhfQ0dST1VQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXBfc3Vic3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGI5YmZiZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3VwX3N1YnN5cy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qIEFkZCBzdWJzeXN0ZW0gZGVmaW5pdGlvbnMgb2YgdGhlIGZvcm0gU1VCU1lTKDxuYW1lPikgaW4gdGhpcworICogZmlsZS4gU3Vycm91bmQgZWFjaCBvbmUgYnkgYSBsaW5lIG9mIGNvbW1lbnQgbWFya2VycyBzbyB0aGF0CisgKiBwYXRjaGVzIGRvbid0IGNvbGxpZGUKKyAqLworCisvKiAqLworCisvKiAqLworCisjaWZkZWYgQ09ORklHX0NQVVNFVFMKK1NVQlNZUyhjcHVzZXQpCisjZW5kaWYKKworLyogKi8KKworI2lmZGVmIENPTkZJR19DR1JPVVBfQ1BVQUNDVAorU1VCU1lTKGNwdWFjY3QpCisjZW5kaWYKKworLyogKi8KKworI2lmZGVmIENPTkZJR19DR1JPVVBfREVCVUcKK1NVQlNZUyhkZWJ1ZykKKyNlbmRpZgorCisvKiAqLworCisjaWZkZWYgQ09ORklHX0NHUk9VUF9OUworU1VCU1lTKG5zKQorI2VuZGlmCisKKy8qICovCisKKyNpZmRlZiBDT05GSUdfRkFJUl9DR1JPVVBfU0NIRUQKK1NVQlNZUyhjcHVfY2dyb3VwKQorI2VuZGlmCisKKy8qICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cHN0YXRzLmggYi9pbmNsdWRlL2xpbnV4L2Nncm91cHN0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY1M2FiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY2dyb3Vwc3RhdHMuaApAQCAtMCwwICsxLDcwIEBACisvKiBjZ3JvdXBzdGF0cy5oIC0gZXhwb3J0aW5nIHBlci1jZ3JvdXAgc3RhdGlzdGljcworICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycG9yYXRpb24sIDIwMDcKKyAqIEF1dGhvciBCYWxiaXIgU2luZ2ggPGJhbGJpckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIuMSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3b3VsZCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0NHUk9VUFNUQVRTX0gKKyNkZWZpbmUgX0xJTlVYX0NHUk9VUFNUQVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0cy5oPgorCisvKgorICogRGF0YSBzaGFyZWQgYmV0d2VlbiB1c2VyIHNwYWNlIGFuZCBrZXJuZWwgc3BhY2Ugb24gYSBwZXIgY2dyb3VwCisgKiBiYXNpcy4gVGhpcyBkYXRhIGlzIHNoYXJlZCB1c2luZyB0YXNrc3RhdHMuCisgKgorICogTW9zdCBvZiB0aGVzZSBzdGF0ZXMgYXJlIGRlcml2ZWQgYnkgbG9va2luZyBhdCB0aGUgdGFzay0+c3RhdGUgdmFsdWUKKyAqIEZvciB0aGUgbnJfaW9fd2FpdCBzdGF0ZSwgYSBmbGFnIGluIHRoZSBkZWxheSBhY2NvdW50aW5nIHN0cnVjdHVyZQorICogaW5kaWNhdGVzIHRoYXQgdGhlIHRhc2sgaXMgd2FpdGluZyBvbiBJTworICoKKyAqIEVhY2ggbWVtYmVyIGlzIGFsaWduZWQgdG8gYSA4IGJ5dGUgYm91bmRhcnkuCisgKi8KK3N0cnVjdCBjZ3JvdXBzdGF0cyB7CisJX191NjQJbnJfc2xlZXBpbmc7CQkvKiBOdW1iZXIgb2YgdGFza3Mgc2xlZXBpbmcgKi8KKwlfX3U2NAlucl9ydW5uaW5nOwkJLyogTnVtYmVyIG9mIHRhc2tzIHJ1bm5pbmcgKi8KKwlfX3U2NAlucl9zdG9wcGVkOwkJLyogTnVtYmVyIG9mIHRhc2tzIGluIHN0b3BwZWQgc3RhdGUgKi8KKwlfX3U2NAlucl91bmludGVycnVwdGlibGU7CS8qIE51bWJlciBvZiB0YXNrcyBpbiB1bmludGVycnVwdGlibGUgKi8KKwkJCQkJLyogc3RhdGUgKi8KKwlfX3U2NAlucl9pb193YWl0OwkJLyogTnVtYmVyIG9mIHRhc2tzIHdhaXRpbmcgb24gSU8gKi8KK307CisKKy8qCisgKiBDb21tYW5kcyBzZW50IGZyb20gdXNlcnNwYWNlCisgKiBOb3QgdmVyc2lvbmVkLiBOZXcgY29tbWFuZHMgc2hvdWxkIG9ubHkgYmUgaW5zZXJ0ZWQgYXQgdGhlIGVudW0ncyBlbmQKKyAqIHByaW9yIHRvIF9fQ0dST1VQU1RBVFNfQ01EX01BWAorICovCisKK2VudW0geworCUNHUk9VUFNUQVRTX0NNRF9VTlNQRUMgPSBfX1RBU0tTVEFUU19DTURfTUFYLAkvKiBSZXNlcnZlZCAqLworCUNHUk9VUFNUQVRTX0NNRF9HRVQsCQkvKiB1c2VyLT5rZXJuZWwgcmVxdWVzdC9nZXQtcmVzcG9uc2UgKi8KKwlDR1JPVVBTVEFUU19DTURfTkVXLAkJLyoga2VybmVsLT51c2VyIGV2ZW50ICovCisJX19DR1JPVVBTVEFUU19DTURfTUFYLAorfTsKKworI2RlZmluZSBDR1JPVVBTVEFUU19DTURfTUFYIChfX0NHUk9VUFNUQVRTX0NNRF9NQVggLSAxKQorCitlbnVtIHsKKwlDR1JPVVBTVEFUU19UWVBFX1VOU1BFQyA9IDAsCS8qIFJlc2VydmVkICovCisJQ0dST1VQU1RBVFNfVFlQRV9DR1JPVVBfU1RBVFMsCS8qIGNvbnRhaW5zIG5hbWUgKyBzdGF0cyAqLworCV9fQ0dST1VQU1RBVFNfVFlQRV9NQVgsCit9OworCisjZGVmaW5lIENHUk9VUFNUQVRTX1RZUEVfTUFYIChfX0NHUk9VUFNUQVRTX1RZUEVfTUFYIC0gMSkKKworZW51bSB7CisJQ0dST1VQU1RBVFNfQ01EX0FUVFJfVU5TUEVDID0gMCwKKwlDR1JPVVBTVEFUU19DTURfQVRUUl9GRCwKKwlfX0NHUk9VUFNUQVRTX0NNRF9BVFRSX01BWCwKK307CisKKyNkZWZpbmUgQ0dST1VQU1RBVFNfQ01EX0FUVFJfTUFYIChfX0NHUk9VUFNUQVRTX0NNRF9BVFRSX01BWCAtIDEpCisKKyNlbmRpZiAvKiBfTElOVVhfQ0dST1VQU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IDE2ZWEzMzcuLjEwNzc4N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTIyMSwxMCArMjIxLDE1IEBACiAKICNpZmRlZiBDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMCiBleHRlcm4gdm9pZCB1cGRhdGVfdnN5c2NhbGwoc3RydWN0IHRpbWVzcGVjICp0cywgc3RydWN0IGNsb2Nrc291cmNlICpjKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV92c3lzY2FsbF90eih2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgdXBkYXRlX3ZzeXNjYWxsKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCBjbG9ja3NvdXJjZSAqYykKIHsKIH0KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV92c3lzY2FsbF90eih2b2lkKQoreworfQogI2VuZGlmCiAKICNlbmRpZiAvKiBfTElOVVhfQ0xPQ0tTT1VSQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXItZ2NjLmgKaW5kZXggYWNkNTgzMy4uZmUyMzc5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci1nY2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC0zNiwxMCArMzYsMjAgQEAKICNkZWZpbmUgX193ZWFrCQkJCV9fYXR0cmlidXRlX18oKHdlYWspKQogI2RlZmluZSBfX25ha2VkCQkJCV9fYXR0cmlidXRlX18oKG5ha2VkKSkKICNkZWZpbmUgX19ub3JldHVybgkJCV9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKworLyoKKyAqIEZyb20gdGhlIEdDQyBtYW51YWw6CisgKgorICogTWFueSBmdW5jdGlvbnMgaGF2ZSBubyBlZmZlY3RzIGV4Y2VwdCB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGVpcgorICogcmV0dXJuIHZhbHVlIGRlcGVuZHMgb25seSBvbiB0aGUgcGFyYW1ldGVycyBhbmQvb3IgZ2xvYmFsCisgKiB2YXJpYWJsZXMuICBTdWNoIGEgZnVuY3Rpb24gY2FuIGJlIHN1YmplY3QgdG8gY29tbW9uIHN1YmV4cHJlc3Npb24KKyAqIGVsaW1pbmF0aW9uIGFuZCBsb29wIG9wdGltaXphdGlvbiBqdXN0IGFzIGFuIGFyaXRobWV0aWMgb3BlcmF0b3IKKyAqIHdvdWxkIGJlLgorICogWy4uLl0KKyAqLwogI2RlZmluZSBfX3B1cmUJCQkJX19hdHRyaWJ1dGVfXygocHVyZSkpCiAjZGVmaW5lIF9fYWxpZ25lZCh4KQkJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoeCkpKQogI2RlZmluZSBfX3ByaW50ZihhLGIpCQkJX19hdHRyaWJ1dGVfXygoZm9ybWF0KHByaW50ZixhLGIpKSkKICNkZWZpbmUgIG5vaW5saW5lCQkJX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKQotI2RlZmluZSBfX2F0dHJpYnV0ZV9wdXJlX18JCV9fYXR0cmlidXRlX18oKHB1cmUpKQogI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fCQlfX2F0dHJpYnV0ZV9fKChfX2NvbnN0X18pKQogI2RlZmluZSBfX21heWJlX3VudXNlZAkJCV9fYXR0cmlidXRlX18oKHVudXNlZCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggODZmOWEzYS4uYzgxMWM4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtMTMyLDIwICsxMzIsNiBAQAogIyBkZWZpbmUgX19tYXliZV91bnVzZWQJCS8qIHVuaW1wbGVtZW50ZWQgKi8KICNlbmRpZgogCi0vKgotICogRnJvbSB0aGUgR0NDIG1hbnVhbDoKLSAqCi0gKiBNYW55IGZ1bmN0aW9ucyBoYXZlIG5vIGVmZmVjdHMgZXhjZXB0IHRoZSByZXR1cm4gdmFsdWUgYW5kIHRoZWlyCi0gKiByZXR1cm4gdmFsdWUgZGVwZW5kcyBvbmx5IG9uIHRoZSBwYXJhbWV0ZXJzIGFuZC9vciBnbG9iYWwKLSAqIHZhcmlhYmxlcy4gIFN1Y2ggYSBmdW5jdGlvbiBjYW4gYmUgc3ViamVjdCB0byBjb21tb24gc3ViZXhwcmVzc2lvbgotICogZWxpbWluYXRpb24gYW5kIGxvb3Agb3B0aW1pemF0aW9uIGp1c3QgYXMgYW4gYXJpdGhtZXRpYyBvcGVyYXRvcgotICogd291bGQgYmUuCi0gKiBbLi4uXQotICovCi0jaWZuZGVmIF9fYXR0cmlidXRlX3B1cmVfXwotIyBkZWZpbmUgX19hdHRyaWJ1dGVfcHVyZV9fCS8qIHVuaW1wbGVtZW50ZWQgKi8KLSNlbmRpZgotCiAjaWZuZGVmIG5vaW5saW5lCiAjZGVmaW5lIG5vaW5saW5lCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uc29sZS5oIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKaW5kZXggMGE0NTQyZC4uYTVmODhhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb25zb2xlLmgKQEAgLTEyMiwxNCArMTIyLDExIEBACiBleHRlcm4gdm9pZCBjb25zb2xlX3N0YXJ0KHN0cnVjdCBjb25zb2xlICopOwogZXh0ZXJuIGludCBpc19jb25zb2xlX2xvY2tlZCh2b2lkKTsKIAotI2lmbmRlZiBDT05GSUdfRElTQUJMRV9DT05TT0xFX1NVU1BFTkQKK2V4dGVybiBpbnQgY29uc29sZV9zdXNwZW5kX2VuYWJsZWQ7CisKIC8qIFN1c3BlbmQgYW5kIHJlc3VtZSBjb25zb2xlIG1lc3NhZ2VzIG92ZXIgUE0gZXZlbnRzICovCiBleHRlcm4gdm9pZCBzdXNwZW5kX2NvbnNvbGUodm9pZCk7CiBleHRlcm4gdm9pZCByZXN1bWVfY29uc29sZSh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3VzcGVuZF9jb25zb2xlKHZvaWQpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVzdW1lX2NvbnNvbGUodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfRElTQUJMRV9DT05TT0xFX1NVU1BFTkQgKi8KIAogaW50IG1kYV9jb25zb2xlX2luaXQodm9pZCk7CiB2b2lkIHByb21fY29uX2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdS5oIGIvaW5jbHVkZS9saW51eC9jcHUuaAppbmRleCAwYWQ3MmM0Li5iNzljNTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1LmgKQEAgLTExOSw4ICsxMTksOSBAQAogI2RlZmluZSBsb2NrX2NwdV9ob3RwbHVnKCkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSB1bmxvY2tfY3B1X2hvdHBsdWcoKQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGhvdGNwdV9ub3RpZmllcihmbiwgcHJpKQlkbyB7ICh2b2lkKShmbik7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikJZG8geyAodm9pZCkobmIpOyB9IHdoaWxlICgwKQotI2RlZmluZSB1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikJZG8geyAodm9pZCkobmIpOyB9IHdoaWxlICgwKQorLyogVGhlc2UgYXJlbid0IGlubGluZSBmdW5jdGlvbnMgZHVlIHRvIGEgR0NDIGJ1Zy4gKi8KKyNkZWZpbmUgcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKG5iKQkoeyAodm9pZCkobmIpOyAwOyB9KQorI2RlZmluZSB1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikJKHsgKHZvaWQpKG5iKTsgfSkKIAogLyogQ1BVcyBkb24ndCBnbyBvZmZsaW5lIG9uY2UgdGhleSdyZSBvbmxpbmUgdy9vIENPTkZJR19IT1RQTFVHX0NQVSAqLwogc3RhdGljIGlubGluZSBpbnQgY3B1X2lzX29mZmxpbmUoaW50IGNwdSkgeyByZXR1cm4gMDsgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVfYWNjdC5oIGIvaW5jbHVkZS9saW51eC9jcHVfYWNjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNWZkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdV9hY2N0LmgKQEAgLTAsMCArMSwxNCBAQAorCisjaWZuZGVmIF9MSU5VWF9DUFVfQUNDVF9ICisjZGVmaW5lIF9MSU5VWF9DUFVfQUNDVF9ICisKKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgorCisjaWZkZWYgQ09ORklHX0NHUk9VUF9DUFVBQ0NUCitleHRlcm4gdm9pZCBjcHVhY2N0X2NoYXJnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90IGNwdXRpbWUpOworI2Vsc2UKK3N0YXRpYyB2b2lkIGlubGluZSBjcHVhY2N0X2NoYXJnZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdXRpbWVfdCBjcHV0aW1lKSB7fQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVpZGxlLmggYi9pbmNsdWRlL2xpbnV4L2NwdWlkbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmE1MTU0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9jcHVpZGxlLmgKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBjcHVpZGxlLmggLSBhIGdlbmVyaWMgZnJhbWV3b3JrIGZvciBDUFUgaWRsZSBwb3dlciBtYW5hZ2VtZW50CisgKgorICogKEMpIDIwMDcgVmVua2F0ZXNoIFBhbGxpcGFkaSA8dmVua2F0ZXNoLnBhbGxpcGFkaUBpbnRlbC5jb20+CisgKiAgICAgICAgICBTaGFvaHVhIExpIDxzaGFvaHVhLmxpQGludGVsLmNvbT4KKyAqICAgICAgICAgIEFkYW0gQmVsYXkgPGFiZWxheUBub3ZlbGwuY29tPgorICoKKyAqIFRoaXMgY29kZSBpcyBsaWNlbmNlZCB1bmRlciB0aGUgR1BMLgorICovCisKKyNpZm5kZWYgX0xJTlVYX0NQVUlETEVfSAorI2RlZmluZSBfTElOVVhfQ1BVSURMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKworI2RlZmluZSBDUFVJRExFX1NUQVRFX01BWAk4CisjZGVmaW5lIENQVUlETEVfTkFNRV9MRU4JMTYKKworc3RydWN0IGNwdWlkbGVfZGV2aWNlOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDUFVJRExFIERFVklDRSBJTlRFUkZBQ0UgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjcHVpZGxlX3N0YXRlIHsKKwljaGFyCQluYW1lW0NQVUlETEVfTkFNRV9MRU5dOworCXZvaWQJCSpkcml2ZXJfZGF0YTsKKworCXVuc2lnbmVkIGludAlmbGFnczsKKwl1bnNpZ25lZCBpbnQJZXhpdF9sYXRlbmN5OyAvKiBpbiBVUyAqLworCXVuc2lnbmVkIGludAlwb3dlcl91c2FnZTsgLyogaW4gbVcgKi8KKwl1bnNpZ25lZCBpbnQJdGFyZ2V0X3Jlc2lkZW5jeTsgLyogaW4gVVMgKi8KKworCXVuc2lnbmVkIGludAl1c2FnZTsKKwl1bnNpZ25lZCBpbnQJdGltZTsgLyogaW4gVVMgKi8KKworCWludCAoKmVudGVyKQkoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGNwdWlkbGVfc3RhdGUgKnN0YXRlKTsKK307CisKKy8qIElkbGUgU3RhdGUgRmxhZ3MgKi8KKyNkZWZpbmUgQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQJKDB4MDEpIC8qIGlzIHJlc2lkZW5jeSB0aW1lIG1lYXN1cmFibGU/ICovCisjZGVmaW5lIENQVUlETEVfRkxBR19DSEVDS19CTQkoMHgwMikgLyogQk0gYWN0aXZpdHkgd2lsbCBleGl0IHN0YXRlICovCisjZGVmaW5lIENQVUlETEVfRkxBR19TSEFMTE9XCSgweDEwKSAvKiBsb3cgbGF0ZW5jeSwgbWluaW1hbCBzYXZpbmdzICovCisjZGVmaW5lIENQVUlETEVfRkxBR19CQUxBTkNFRAkoMHgyMCkgLyogbWVkaXVtIGxhdGVuY3ksIG1vZGVyYXRlIHNhdmluZ3MgKi8KKyNkZWZpbmUgQ1BVSURMRV9GTEFHX0RFRVAJKDB4NDApIC8qIGhpZ2ggbGF0ZW5jeSwgbGFyZ2Ugc2F2aW5ncyAqLworCisjZGVmaW5lIENQVUlETEVfRFJJVkVSX0ZMQUdTX01BU0sgKDB4RkZGRjAwMDApCisKKy8qKgorICogY3B1aWRsZV9nZXRfc3RhdGVkYXRhIC0gcmV0cmlldmVzIHByaXZhdGUgZHJpdmVyIHN0YXRlIGRhdGEKKyAqIEBzdGF0ZTogdGhlIHN0YXRlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqIGNwdWlkbGVfZ2V0X3N0YXRlZGF0YShzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGUpCit7CisJcmV0dXJuIHN0YXRlLT5kcml2ZXJfZGF0YTsKK30KKworLyoqCisgKiBjcHVpZGxlX3NldF9zdGF0ZWRhdGEgLSBzdG9yZXMgcHJpdmF0ZSBkcml2ZXIgc3RhdGUgZGF0YQorICogQHN0YXRlOiB0aGUgc3RhdGUKKyAqIEBkYXRhOiB0aGUgcHJpdmF0ZSBkYXRhCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorY3B1aWRsZV9zZXRfc3RhdGVkYXRhKHN0cnVjdCBjcHVpZGxlX3N0YXRlICpzdGF0ZSwgdm9pZCAqZGF0YSkKK3sKKwlzdGF0ZS0+ZHJpdmVyX2RhdGEgPSBkYXRhOworfQorCitzdHJ1Y3QgY3B1aWRsZV9zdGF0ZV9rb2JqIHsKKwlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IGNvbXBsZXRpb24ga29ial91bnJlZ2lzdGVyOworCXN0cnVjdCBrb2JqZWN0IGtvYmo7Cit9OworCitzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgeworCWludAkJCWVuYWJsZWQ6MTsKKwl1bnNpZ25lZCBpbnQJCWNwdTsKKworCWludAkJCWxhc3RfcmVzaWRlbmN5OworCWludAkJCXN0YXRlX2NvdW50OworCXN0cnVjdCBjcHVpZGxlX3N0YXRlCXN0YXRlc1tDUFVJRExFX1NUQVRFX01BWF07CisJc3RydWN0IGNwdWlkbGVfc3RhdGVfa29iaiAqa29ianNbQ1BVSURMRV9TVEFURV9NQVhdOworCXN0cnVjdCBjcHVpZGxlX3N0YXRlCSpsYXN0X3N0YXRlOworCisJc3RydWN0IGxpc3RfaGVhZCAJZGV2aWNlX2xpc3Q7CisJc3RydWN0IGtvYmplY3QJCWtvYmo7CisJc3RydWN0IGNvbXBsZXRpb24Ja29ial91bnJlZ2lzdGVyOworCXZvaWQJCQkqZ292ZXJub3JfZGF0YTsKK307CisKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKiwgY3B1aWRsZV9kZXZpY2VzKTsKKworLyoqCisgKiBjcHVpZGxlX2dldF9sYXN0X3Jlc2lkZW5jeSAtIHJldHJpZXZlcyB0aGUgbGFzdCBzdGF0ZSdzIHJlc2lkZW5jeSB0aW1lCisgKiBAZGV2OiB0aGUgdGFyZ2V0IENQVQorICoKKyAqIE5PVEU6IHRoaXMgdmFsdWUgaXMgaW52YWxpZCBpZiBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCBpc24ndCBzZXQKKyAqLworc3RhdGljIGlubGluZSBpbnQgY3B1aWRsZV9nZXRfbGFzdF9yZXNpZGVuY3koc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+bGFzdF9yZXNpZGVuY3k7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENQVUlETEUgRFJJVkVSIElOVEVSRkFDRSAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IGNwdWlkbGVfZHJpdmVyIHsKKwljaGFyCQkJbmFtZVtDUFVJRExFX05BTUVfTEVOXTsKKwlzdHJ1Y3QgbW9kdWxlIAkJKm93bmVyOworfTsKKworI2lmZGVmIENPTkZJR19DUFVfSURMRQorCitleHRlcm4gaW50IGNwdWlkbGVfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBjcHVpZGxlX2RyaXZlciAqZHJ2KTsKK2V4dGVybiB2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYpOworZXh0ZXJuIGludCBjcHVpZGxlX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBjcHVpZGxlX3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHZvaWQgY3B1aWRsZV9wYXVzZV9hbmRfbG9jayh2b2lkKTsKK2V4dGVybiB2b2lkIGNwdWlkbGVfcmVzdW1lX2FuZF91bmxvY2sodm9pZCk7CitleHRlcm4gaW50IGNwdWlkbGVfZW5hYmxlX2RldmljZShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBjcHVpZGxlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgY3B1aWRsZV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYpCit7cmV0dXJuIDA7fQorc3RhdGljIGlubGluZSB2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IGNwdWlkbGVfZHJpdmVyICpkcnYpIHsgfQorc3RhdGljIGlubGluZSBpbnQgY3B1aWRsZV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpCit7cmV0dXJuIDA7fQorc3RhdGljIGlubGluZSB2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpIHsgfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1aWRsZV9wYXVzZV9hbmRfbG9jayh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVpZGxlX3Jlc3VtZV9hbmRfdW5sb2NrKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSBpbnQgY3B1aWRsZV9lbmFibGVfZGV2aWNlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KQore3JldHVybiAwO30KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVpZGxlX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2KSB7IH0KKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENQVUlETEUgR09WRVJOT1IgSU5URVJGQUNFICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjcHVpZGxlX2dvdmVybm9yIHsKKwljaGFyCQkJbmFtZVtDUFVJRExFX05BTUVfTEVOXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIAlnb3Zlcm5vcl9saXN0OworCXVuc2lnbmVkIGludAkJcmF0aW5nOworCisJaW50ICAoKmVuYWJsZSkJCShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldik7CisJdm9pZCAoKmRpc2FibGUpCQkoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpOworCisJaW50ICAoKnNlbGVjdCkJCShzdHJ1Y3QgY3B1aWRsZV9kZXZpY2UgKmRldik7CisJdm9pZCAoKnJlZmxlY3QpCQkoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYpOworCisJc3RydWN0IG1vZHVsZSAJCSpvd25lcjsKK307CisKKyNpZmRlZiBDT05GSUdfQ1BVX0lETEUKKworZXh0ZXJuIGludCBjcHVpZGxlX3JlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVpZGxlX2dvdmVybm9yICpnb3YpOworZXh0ZXJuIHZvaWQgY3B1aWRsZV91bnJlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVpZGxlX2dvdmVybm9yICpnb3YpOworCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBjcHVpZGxlX3JlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVpZGxlX2dvdmVybm9yICpnb3YpCit7cmV0dXJuIDA7fQorc3RhdGljIGlubGluZSB2b2lkIGNwdWlkbGVfdW5yZWdpc3Rlcl9nb3Zlcm5vcihzdHJ1Y3QgY3B1aWRsZV9nb3Zlcm5vciAqZ292KSB7IH0KKworI2VuZGlmCisKKyNlbmRpZiAvKiBfTElOVVhfQ1BVSURMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaAppbmRleCBlYTQ0ZDJlLi5lY2FlNTg1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogCiAjaWZkZWYgQ09ORklHX0NQVVNFVFMKIApAQCAtMTksOSArMjAsOCBAQAogZXh0ZXJuIGludCBjcHVzZXRfaW5pdF9lYXJseSh2b2lkKTsKIGV4dGVybiBpbnQgY3B1c2V0X2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBjcHVzZXRfaW5pdF9zbXAodm9pZCk7Ci1leHRlcm4gdm9pZCBjcHVzZXRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwotZXh0ZXJuIHZvaWQgY3B1c2V0X2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiBjcHVtYXNrX3QgY3B1c2V0X2NwdXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOworZXh0ZXJuIGNwdW1hc2tfdCBjcHVzZXRfY3B1c19hbGxvd2VkX2xvY2tlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogZXh0ZXJuIG5vZGVtYXNrX3QgY3B1c2V0X21lbXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApOwogI2RlZmluZSBjcHVzZXRfY3VycmVudF9tZW1zX2FsbG93ZWQgKGN1cnJlbnQtPm1lbXNfYWxsb3dlZCkKIHZvaWQgY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQodm9pZCk7CkBAIC03NiwxOCArNzYsMjIgQEAKIAogZXh0ZXJuIHZvaWQgY3B1c2V0X3RyYWNrX29ubGluZV9ub2Rlcyh2b2lkKTsKIAorZXh0ZXJuIGludCBjdXJyZW50X2NwdXNldF9pc19iZWluZ19yZWJvdW5kKHZvaWQpOworCiAjZWxzZSAvKiAhQ09ORklHX0NQVVNFVFMgKi8KIAogc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X2luaXRfZWFybHkodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgY3B1c2V0X2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9pbml0X3NtcCh2b2lkKSB7fQotc3RhdGljIGlubGluZSB2b2lkIGNwdXNldF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHt9CiAKIHN0YXRpYyBpbmxpbmUgY3B1bWFza190IGNwdXNldF9jcHVzX2FsbG93ZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBjcHVfcG9zc2libGVfbWFwOwogfQorc3RhdGljIGlubGluZSBjcHVtYXNrX3QgY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXJldHVybiBjcHVfcG9zc2libGVfbWFwOworfQogCiBzdGF0aWMgaW5saW5lIG5vZGVtYXNrX3QgY3B1c2V0X21lbXNfYWxsb3dlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CkBAIC0xNDgsNiArMTUyLDExIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcHVzZXRfdHJhY2tfb25saW5lX25vZGVzKHZvaWQpIHt9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfY3B1c2V0X2lzX2JlaW5nX3JlYm91bmQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qICFDT05GSUdfQ1BVU0VUUyAqLwogCiAjZW5kaWYgLyogX0xJTlVYX0NQVVNFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCBmYzMyNjk0Li5mMzExMGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTYsNyArNiw3IEBACiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgogICoKICAqIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBDcnlwdG9hcGksIGJ5IEFsZXhhbmRlciBLamVsZGFhcyA8YXN0b3JAZmFzdC5ubz4KLSAqIGFuZCBOZXR0bGUsIGJ5IE5pZWxzIE32bGxlci4KKyAqIGFuZCBOZXR0bGUsIGJ5IE5pZWxzIE3DtmxsZXIuCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oIGIvaW5jbHVkZS9saW51eC9jeWNsYWRlcy5oCmluZGV4IDcyYWEwMGMuLjhmM2RjZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3ljbGFkZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2N5Y2xhZGVzLmgKQEAgLTUxMiwxMSArNTEyLDExIEBACiAgICAgdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CiAgICAgdm9pZCBfX2lvbWVtICpjdGxfYWRkcjsKICAgICBpbnQgaXJxOwotICAgIGludCBudW1fY2hpcHM7CS8qIDAgaWYgY2FyZCBhYnNlbnQsIC0xIGlmIFovUENJLCBlbHNlIFkgKi8KLSAgICBpbnQgZmlyc3RfbGluZTsJLyogbWlub3IgbnVtYmVyIG9mIGZpcnN0IGNoYW5uZWwgb24gY2FyZCAqLwotICAgIGludCBucG9ydHM7CQkvKiBOdW1iZXIgb2YgcG9ydHMgaW4gdGhlIGNhcmQgKi8KLSAgICBpbnQgYnVzX2luZGV4OwkvKiBhZGRyZXNzIHNoaWZ0IC0gMCBmb3IgSVNBLCAxIGZvciBQQ0kgKi8KLSAgICBpbnQJaW50cl9lbmFibGVkOwkvKiBGVyBJbnRlcnJ1cHQgZmxhZyAtIDAgZGlzYWJsZWQsIDEgZW5hYmxlZCAqLworICAgIHVuc2lnbmVkIGludCBudW1fY2hpcHM7CS8qIDAgaWYgY2FyZCBhYnNlbnQsIC0xIGlmIFovUENJLCBlbHNlIFkgKi8KKyAgICB1bnNpZ25lZCBpbnQgZmlyc3RfbGluZTsJLyogbWlub3IgbnVtYmVyIG9mIGZpcnN0IGNoYW5uZWwgb24gY2FyZCAqLworICAgIHVuc2lnbmVkIGludCBucG9ydHM7CS8qIE51bWJlciBvZiBwb3J0cyBpbiB0aGUgY2FyZCAqLworICAgIGludCBidXNfaW5kZXg7CQkvKiBhZGRyZXNzIHNoaWZ0IC0gMCBmb3IgSVNBLCAxIGZvciBQQ0kgKi8KKyAgICBpbnQgaW50cl9lbmFibGVkOwkJLyogRlcgSW50ZXJydXB0IGZsYWcgLSAwIGRpc2FibGVkLCAxIGVuYWJsZWQgKi8KICAgICBzcGlubG9ja190IGNhcmRfbG9jazsKICAgICBzdHJ1Y3QgY3ljbGFkZXNfcG9ydCAqcG9ydHM7CiB9OwpAQCAtNTY2LDEwICs1NjYsOSBAQAogCWludAkJCXJ0c2R0cl9pbnY7CiAJaW50CQkJY2hpcF9yZXY7CiAJaW50CQkJY3VzdG9tX2Rpdmlzb3I7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgeF9jaGFyOyAvKiB0byBiZSBwdXNoZWQgb3V0IEFTQVAgKi8KKwl1OAkJCXhfY2hhcjsgLyogdG8gYmUgcHVzaGVkIG91dCBBU0FQICovCiAJaW50CQkJY2xvc2VfZGVsYXk7CiAJdW5zaWduZWQgc2hvcnQJCWNsb3Npbmdfd2FpdDsKLQl1bnNpZ25lZCBsb25nCQlldmVudDsKIAlpbnQJCQljb3VudDsJLyogIyBvZiBmZCBvbiBkZXZpY2UgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICBicmVha29uOwogCWludCAgICAgICAgICAgICAgICAgICAgIGJyZWFrb2ZmOwpAQCAtNTg0LDcgKzU4Myw2IEBACiAJc3RydWN0IGN5Y2xhZGVzX21vbml0b3IJbW9uOwogCXN0cnVjdCBjeWNsYWRlc19pZGxlX3N0YXRzCWlkbGVfc3RhdHM7CiAJc3RydWN0IGN5Y2xhZGVzX2ljb3VudAlpY291bnQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0CXRxdWV1ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICBvcGVuX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgY2xvc2Vfd2FpdDsKIAlzdHJ1Y3QgY29tcGxldGlvbiAgICAgICBzaHV0ZG93bl93YWl0OwpAQCAtNTkyLDE5ICs1OTAsNiBAQAogCWludCB0aHJvdHRsZTsKIH07CiAKLS8qCi0gKiBFdmVudHMgYXJlIHVzZWQgdG8gc2NoZWR1bGUgdGhpbmdzIHRvIGhhcHBlbiBhdCB0aW1lci1pbnRlcnJ1cHQKLSAqIHRpbWUsIGluc3RlYWQgb2YgYXQgY3kgaW50ZXJydXB0IHRpbWUuCi0gKi8KLSNkZWZpbmUgQ3lfRVZFTlRfUkVBRF9QUk9DRVNTCQkwCi0jZGVmaW5lIEN5X0VWRU5UX1dSSVRFX1dBS0VVUAkJMQotI2RlZmluZSBDeV9FVkVOVF9IQU5HVVAJCQkyCi0jZGVmaW5lIEN5X0VWRU5UX0JSRUFLCQkJMwotI2RlZmluZSBDeV9FVkVOVF9PUEVOX1dBS0VVUAkJNAotI2RlZmluZSBDeV9FVkVOVF9TSFVURE9XTl9XQUtFVVAJNQotI2RlZmluZQlDeV9FVkVOVF9ERUxUQV9XQUtFVVAJCTYKLSNkZWZpbmUJQ3lfRVZFTlRfWl9SWF9GVUxMCQk3Ci0KICNkZWZpbmUJQ0xPU0lOR19XQUlUX0RFTEFZCTMwKkhaCiAjZGVmaW5lIENZX0NMT1NJTkdfV0FJVF9OT05FCTY1NTM1CiAjZGVmaW5lIENZX0NMT1NJTkdfV0FJVF9JTkYJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWxheWFjY3QuaCBiL2luY2x1ZGUvbGludXgvZGVsYXlhY2N0LmgKaW5kZXggNTVkMWNhNS4uYWI5NGJjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWxheWFjY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlbGF5YWNjdC5oCkBAIC0yNiw2ICsyNiw3IEBACiAgKiBVc2VkIHRvIHNldCBjdXJyZW50LT5kZWxheXMtPmZsYWdzCiAgKi8KICNkZWZpbmUgREVMQVlBQ0NUX1BGX1NXQVBJTgkweDAwMDAwMDAxCS8qIEkgYW0gZG9pbmcgYSBzd2FwaW4gKi8KKyNkZWZpbmUgREVMQVlBQ0NUX1BGX0JMS0lPCTB4MDAwMDAwMDIJLyogSSBhbSB3YWl0aW5nIG9uIElPICovCiAKICNpZmRlZiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUCiAKQEAgLTM5LDYgKzQwLDE0IEBACiBleHRlcm4gaW50IF9fZGVsYXlhY2N0X2FkZF90c2soc3RydWN0IHRhc2tzdGF0cyAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gX191NjQgX19kZWxheWFjY3RfYmxraW9fdGlja3Moc3RydWN0IHRhc2tfc3RydWN0ICopOwogCitzdGF0aWMgaW5saW5lIGludCBkZWxheWFjY3RfaXNfdGFza193YWl0aW5nX29uX2lvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAocC0+ZGVsYXlzKQorCQlyZXR1cm4gKHAtPmRlbGF5cy0+ZmxhZ3MgJiBERUxBWUFDQ1RfUEZfQkxLSU8pOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWFjY3Rfc2V0X2ZsYWcoaW50IGZsYWcpCiB7CiAJaWYgKGN1cnJlbnQtPmRlbGF5cykKQEAgLTcxLDYgKzgwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRlbGF5YWNjdF9ibGtpb19zdGFydCh2b2lkKQogeworCWRlbGF5YWNjdF9zZXRfZmxhZyhERUxBWUFDQ1RfUEZfQkxLSU8pOwogCWlmIChjdXJyZW50LT5kZWxheXMpCiAJCV9fZGVsYXlhY2N0X2Jsa2lvX3N0YXJ0KCk7CiB9CkBAIC03OSw2ICs4OSw3IEBACiB7CiAJaWYgKGN1cnJlbnQtPmRlbGF5cykKIAkJX19kZWxheWFjY3RfYmxraW9fZW5kKCk7CisJZGVsYXlhY2N0X2NsZWFyX2ZsYWcoREVMQVlBQ0NUX1BGX0JMS0lPKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZGVsYXlhY2N0X2FkZF90c2soc3RydWN0IHRhc2tzdGF0cyAqZCwKQEAgLTExNiw2ICsxMjcsOCBAQAogeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBfX3U2NCBkZWxheWFjY3RfYmxraW9fdGlja3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIGludCBkZWxheWFjY3RfaXNfdGFza193YWl0aW5nX29uX2lvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfVEFTS19ERUxBWV9BQ0NUICovCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAppbmRleCA0OTlmNTM3Li4zN2M2NmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaApAQCAtMTgzLDExICsxODMsMTQgQEAKICAqLwogdWludDMyX3QgZG1fZ2V0X2V2ZW50X25yKHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCk7CiBpbnQgZG1fd2FpdF9ldmVudChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGludCBldmVudF9ucik7Cit1aW50MzJfdCBkbV9uZXh0X3VldmVudF9zZXEoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKK3ZvaWQgZG1fdWV2ZW50X2FkZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIHN0cnVjdCBsaXN0X2hlYWQgKmVsaXN0KTsKIAogLyoKICAqIEluZm8gZnVuY3Rpb25zLgogICovCiBjb25zdCBjaGFyICpkbV9kZXZpY2VfbmFtZShzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOworaW50IGRtX2NvcHlfbmFtZV9hbmRfdXVpZChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGNoYXIgKm5hbWUsIGNoYXIgKnV1aWQpOwogc3RydWN0IGdlbmRpc2sgKmRtX2Rpc2soc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIGludCBkbV9zdXNwZW5kZWQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIGludCBkbV9ub2ZsdXNoX3N1c3BlbmRpbmcoc3RydWN0IGRtX3RhcmdldCAqdGkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IGI5MzQ4NjEuLjUyMzI4MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTEzMSw2ICsxMzEsNyBAQAogCWNoYXIgbmFtZVtETV9OQU1FX0xFTl07CS8qIGRldmljZSBuYW1lICovCiAJY2hhciB1dWlkW0RNX1VVSURfTEVOXTsJLyogdW5pcXVlIGlkZW50aWZpZXIgZm9yCiAJCQkJICogdGhlIGJsb2NrIGRldmljZSAqLworCWNoYXIgZGF0YVs3XTsJCS8qIHBhZGRpbmcgb3IgZGF0YSAqLwogfTsKIAogLyoKQEAgLTI4NSw5ICsyODYsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTExCisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMTIKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDA2LTEwLTEyKSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDA3LTEwLTAyKSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCAwZWJmYWZiLi4xMDFhMmQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0xMywxNiArMTMsMjYgQEAKIAlETUFfTk9ORSA9IDMsCiB9OwogCi0jZGVmaW5lIERNQV82NEJJVF9NQVNLCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAotI2RlZmluZSBETUFfNDhCSVRfTUFTSwkweDAwMDBmZmZmZmZmZmZmZmZVTEwKLSNkZWZpbmUgRE1BXzQwQklUX01BU0sJMHgwMDAwMDBmZmZmZmZmZmZmVUxMCi0jZGVmaW5lIERNQV8zOUJJVF9NQVNLCTB4MDAwMDAwN2ZmZmZmZmZmZlVMTAotI2RlZmluZSBETUFfMzJCSVRfTUFTSwkweDAwMDAwMDAwZmZmZmZmZmZVTEwKLSNkZWZpbmUgRE1BXzMxQklUX01BU0sJMHgwMDAwMDAwMDdmZmZmZmZmVUxMCi0jZGVmaW5lIERNQV8zMEJJVF9NQVNLCTB4MDAwMDAwMDAzZmZmZmZmZlVMTAotI2RlZmluZSBETUFfMjlCSVRfTUFTSwkweDAwMDAwMDAwMWZmZmZmZmZVTEwKLSNkZWZpbmUgRE1BXzI4QklUX01BU0sJMHgwMDAwMDAwMDBmZmZmZmZmVUxMCi0jZGVmaW5lIERNQV8yNEJJVF9NQVNLCTB4MDAwMDAwMDAwMGZmZmZmZlVMTAorI2RlZmluZSBETUFfQklUX01BU0sobikJKCgobikgPT0gNjQpID8gfjBVTEwgOiAoKDFVTEw8PChuKSktMSkpCisKKy8qCisgKiBOT1RFOiBkbyBub3QgdXNlIHRoZSBiZWxvdyBtYWNyb3MgaW4gbmV3IGNvZGUgYW5kIGRvIG5vdCBhZGQgbmV3IGRlZmluaXRpb25zCisgKiBoZXJlLgorICoKKyAqIEluc3RlYWQsIGp1c3Qgb3Blbi1jb2RlIERNQV9CSVRfTUFTSyhuKSB3aXRoaW4geW91ciBkcml2ZXIKKyAqLworI2RlZmluZSBETUFfNjRCSVRfTUFTSwlETUFfQklUX01BU0soNjQpCisjZGVmaW5lIERNQV80OEJJVF9NQVNLCURNQV9CSVRfTUFTSyg0OCkKKyNkZWZpbmUgRE1BXzQ3QklUX01BU0sJRE1BX0JJVF9NQVNLKDQ3KQorI2RlZmluZSBETUFfNDBCSVRfTUFTSwlETUFfQklUX01BU0soNDApCisjZGVmaW5lIERNQV8zOUJJVF9NQVNLCURNQV9CSVRfTUFTSygzOSkKKyNkZWZpbmUgRE1BXzM1QklUX01BU0sJRE1BX0JJVF9NQVNLKDM1KQorI2RlZmluZSBETUFfMzJCSVRfTUFTSwlETUFfQklUX01BU0soMzIpCisjZGVmaW5lIERNQV8zMUJJVF9NQVNLCURNQV9CSVRfTUFTSygzMSkKKyNkZWZpbmUgRE1BXzMwQklUX01BU0sJRE1BX0JJVF9NQVNLKDMwKQorI2RlZmluZSBETUFfMjlCSVRfTUFTSwlETUFfQklUX01BU0soMjkpCisjZGVmaW5lIERNQV8yOEJJVF9NQVNLCURNQV9CSVRfTUFTSygyOCkKKyNkZWZpbmUgRE1BXzI0QklUX01BU0sJRE1BX0JJVF9NQVNLKDI0KQogCiAjZGVmaW5lIERNQV9NQVNLX05PTkUJMHgwVUxMCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggNTg5YjBiMy4uNjQxMzQ0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTcyLDggKzcyLDggQEAKICAqIE1hY3JvLWluc3RydWN0aW9ucyB1c2VkIHRvIG1hbmFnZSBzZXZlcmFsIGJsb2NrIHNpemVzCiAgKi8KICNkZWZpbmUgRVhUM19NSU5fQkxPQ0tfU0laRQkJMTAyNAotI2RlZmluZQlFWFQzX01BWF9CTE9DS19TSVpFCQk0MDk2Ci0jZGVmaW5lIEVYVDNfTUlOX0JMT0NLX0xPR19TSVpFCQkgIDEwCisjZGVmaW5lCUVYVDNfTUFYX0JMT0NLX1NJWkUJCTY1NTM2CisjZGVmaW5lIEVYVDNfTUlOX0JMT0NLX0xPR19TSVpFCQkxMAogI2lmZGVmIF9fS0VSTkVMX18KICMgZGVmaW5lIEVYVDNfQkxPQ0tfU0laRShzKQkJKChzKS0+c19ibG9ja3NpemUpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQ0X2ZzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnMuaAppbmRleCBjZGVlN2FhLi45N2RkNDA5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnMuaApAQCAtMzYsMTAgKzM2LDYgQEAKIC8qbWF4IHdpbmRvdyBzaXplOiAxMDI0KGRpcmVjdCBibG9ja3MpICsgMyhbdCxkXWluZGlyZWN0IGJsb2NrcykgKi8KICNkZWZpbmUgRVhUNF9NQVhfUkVTRVJWRV9CTE9DS1MJCTEwMjcKICNkZWZpbmUgRVhUNF9SRVNFUlZFX1dJTkRPV19OT1RfQUxMT0NBVEVEIDAKLS8qCi0gKiBBbHdheXMgZW5hYmxlIGhhc2hlZCBkaXJlY3RvcmllcwotICovCi0jZGVmaW5lIENPTkZJR19FWFQ0X0lOREVYCiAKIC8qCiAgKiBEZWJ1ZyBjb2RlCkBAIC0xMDUsMzcgKzEwMSwyOSBAQAogI2RlZmluZSBFWFQ0X0JMT0NLX0FMSUdOKHNpemUsIGJsa2JpdHMpCQlBTElHTigoc2l6ZSksICgxIDw8IChibGtiaXRzKSkpCiAKIC8qCi0gKiBNYWNyby1pbnN0cnVjdGlvbnMgdXNlZCB0byBtYW5hZ2UgZnJhZ21lbnRzCi0gKi8KLSNkZWZpbmUgRVhUNF9NSU5fRlJBR19TSVpFCQkxMDI0Ci0jZGVmaW5lCUVYVDRfTUFYX0ZSQUdfU0laRQkJNDA5NgotI2RlZmluZSBFWFQ0X01JTl9GUkFHX0xPR19TSVpFCQkgIDEwCi0jaWZkZWYgX19LRVJORUxfXwotIyBkZWZpbmUgRVhUNF9GUkFHX1NJWkUocykJCShFWFQ0X1NCKHMpLT5zX2ZyYWdfc2l6ZSkKLSMgZGVmaW5lIEVYVDRfRlJBR1NfUEVSX0JMT0NLKHMpCShFWFQ0X1NCKHMpLT5zX2ZyYWdzX3Blcl9ibG9jaykKLSNlbHNlCi0jIGRlZmluZSBFWFQ0X0ZSQUdfU0laRShzKQkJKEVYVDRfTUlOX0ZSQUdfU0laRSA8PCAocyktPnNfbG9nX2ZyYWdfc2l6ZSkKLSMgZGVmaW5lIEVYVDRfRlJBR1NfUEVSX0JMT0NLKHMpCShFWFQ0X0JMT0NLX1NJWkUocykgLyBFWFQ0X0ZSQUdfU0laRShzKSkKLSNlbmRpZgotCi0vKgogICogU3RydWN0dXJlIG9mIGEgYmxvY2tzIGdyb3VwIGRlc2NyaXB0b3IKICAqLwogc3RydWN0IGV4dDRfZ3JvdXBfZGVzYwogewotCV9fbGUzMgliZ19ibG9ja19iaXRtYXA7CQkvKiBCbG9ja3MgYml0bWFwIGJsb2NrICovCi0JX19sZTMyCWJnX2lub2RlX2JpdG1hcDsJCS8qIElub2RlcyBiaXRtYXAgYmxvY2sgKi8KLQlfX2xlMzIJYmdfaW5vZGVfdGFibGU7CQkvKiBJbm9kZXMgdGFibGUgYmxvY2sgKi8KKwlfX2xlMzIJYmdfYmxvY2tfYml0bWFwX2xvOwkvKiBCbG9ja3MgYml0bWFwIGJsb2NrICovCisJX19sZTMyCWJnX2lub2RlX2JpdG1hcF9sbzsJLyogSW5vZGVzIGJpdG1hcCBibG9jayAqLworCV9fbGUzMgliZ19pbm9kZV90YWJsZV9sbzsJLyogSW5vZGVzIHRhYmxlIGJsb2NrICovCiAJX19sZTE2CWJnX2ZyZWVfYmxvY2tzX2NvdW50OwkvKiBGcmVlIGJsb2NrcyBjb3VudCAqLwogCV9fbGUxNgliZ19mcmVlX2lub2Rlc19jb3VudDsJLyogRnJlZSBpbm9kZXMgY291bnQgKi8KIAlfX2xlMTYJYmdfdXNlZF9kaXJzX2NvdW50OwkvKiBEaXJlY3RvcmllcyBjb3VudCAqLwotCV9fdTE2CWJnX2ZsYWdzOwotCV9fdTMyCWJnX3Jlc2VydmVkWzNdOworCV9fbGUxNgliZ19mbGFnczsJCS8qIEVYVDRfQkdfZmxhZ3MgKElOT0RFX1VOSU5JVCwgZXRjKSAqLworCV9fdTMyCWJnX3Jlc2VydmVkWzJdOwkJLyogTGlrZWx5IGJsb2NrL2lub2RlIGJpdG1hcCBjaGVja3N1bSAqLworCV9fbGUxNiAgYmdfaXRhYmxlX3VudXNlZDsJLyogVW51c2VkIGlub2RlcyBjb3VudCAqLworCV9fbGUxNiAgYmdfY2hlY2tzdW07CQkvKiBjcmMxNihzYl91dWlkK2dyb3VwK2Rlc2MpICovCiAJX19sZTMyCWJnX2Jsb2NrX2JpdG1hcF9oaTsJLyogQmxvY2tzIGJpdG1hcCBibG9jayBNU0IgKi8KIAlfX2xlMzIJYmdfaW5vZGVfYml0bWFwX2hpOwkvKiBJbm9kZXMgYml0bWFwIGJsb2NrIE1TQiAqLwogCV9fbGUzMgliZ19pbm9kZV90YWJsZV9oaTsJLyogSW5vZGVzIHRhYmxlIGJsb2NrIE1TQiAqLwogfTsKIAorI2RlZmluZSBFWFQ0X0JHX0lOT0RFX1VOSU5JVAkweDAwMDEgLyogSW5vZGUgdGFibGUvYml0bWFwIG5vdCBpbiB1c2UgKi8KKyNkZWZpbmUgRVhUNF9CR19CTE9DS19VTklOSVQJMHgwMDAyIC8qIEJsb2NrIGJpdG1hcCBub3QgaW4gdXNlICovCisjZGVmaW5lIEVYVDRfQkdfSU5PREVfWkVST0VECTB4MDAwNCAvKiBPbi1kaXNrIGl0YWJsZSBpbml0aWFsaXplZCB0byB6ZXJvICovCisKICNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvZXh0NF9mc19pLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0NF9mc19zYi5oPgpAQCAtMzExLDI3ICsyOTksMjQgQEAKIAlfX2xlMzIJaV9nZW5lcmF0aW9uOwkvKiBGaWxlIHZlcnNpb24gKGZvciBORlMpICovCiAJX19sZTMyCWlfZmlsZV9hY2w7CS8qIEZpbGUgQUNMICovCiAJX19sZTMyCWlfZGlyX2FjbDsJLyogRGlyZWN0b3J5IEFDTCAqLwotCV9fbGUzMglpX2ZhZGRyOwkvKiBGcmFnbWVudCBhZGRyZXNzICovCisJX19sZTMyCWlfb2Jzb19mYWRkcjsJLyogT2Jzb2xldGVkIGZyYWdtZW50IGFkZHJlc3MgKi8KIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlfX3U4CWxfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KLQkJCV9fdTgJbF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX2xlMTYJbF9pX3Jlc2VydmVkMTsJLyogT2Jzb2xldGVkIGZyYWdtZW50IG51bWJlci9zaXplIHdoaWNoIGFyZSByZW1vdmVkIGluIGV4dDQgKi8KIAkJCV9fbGUxNglsX2lfZmlsZV9hY2xfaGlnaDsKIAkJCV9fbGUxNglsX2lfdWlkX2hpZ2g7CS8qIHRoZXNlIDIgZmllbGRzICovCiAJCQlfX2xlMTYJbF9pX2dpZF9oaWdoOwkvKiB3ZXJlIHJlc2VydmVkMlswXSAqLwogCQkJX191MzIJbF9pX3Jlc2VydmVkMjsKIAkJfSBsaW51eDI7CiAJCXN0cnVjdCB7Ci0JCQlfX3U4CWhfaV9mcmFnOwkvKiBGcmFnbWVudCBudW1iZXIgKi8KLQkJCV9fdTgJaF9pX2ZzaXplOwkvKiBGcmFnbWVudCBzaXplICovCisJCQlfX2xlMTYJaF9pX3Jlc2VydmVkMTsJLyogT2Jzb2xldGVkIGZyYWdtZW50IG51bWJlci9zaXplIHdoaWNoIGFyZSByZW1vdmVkIGluIGV4dDQgKi8KIAkJCV9fdTE2CWhfaV9tb2RlX2hpZ2g7CiAJCQlfX3UxNgloX2lfdWlkX2hpZ2g7CiAJCQlfX3UxNgloX2lfZ2lkX2hpZ2g7CiAJCQlfX3UzMgloX2lfYXV0aG9yOwogCQl9IGh1cmQyOwogCQlzdHJ1Y3QgewotCQkJX191OAltX2lfZnJhZzsJLyogRnJhZ21lbnQgbnVtYmVyICovCi0JCQlfX3U4CW1faV9mc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCQkJX19sZTE2CWhfaV9yZXNlcnZlZDE7CS8qIE9ic29sZXRlZCBmcmFnbWVudCBudW1iZXIvc2l6ZSB3aGljaCBhcmUgcmVtb3ZlZCBpbiBleHQ0ICovCiAJCQlfX2xlMTYJbV9pX2ZpbGVfYWNsX2hpZ2g7CiAJCQlfX3UzMgltX2lfcmVzZXJ2ZWQyWzJdOwogCQl9IG1hc2l4MjsKQEAgLTQxOSw4ICs0MDQsNiBAQAogCiAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKICNkZWZpbmUgaV9yZXNlcnZlZDEJb3NkMS5saW51eDEubF9pX3Jlc2VydmVkMQotI2RlZmluZSBpX2ZyYWcJCW9zZDIubGludXgyLmxfaV9mcmFnCi0jZGVmaW5lIGlfZnNpemUJCW9zZDIubGludXgyLmxfaV9mc2l6ZQogI2RlZmluZSBpX2ZpbGVfYWNsX2hpZ2gJb3NkMi5saW51eDIubF9pX2ZpbGVfYWNsX2hpZ2gKICNkZWZpbmUgaV91aWRfbG93CWlfdWlkCiAjZGVmaW5lIGlfZ2lkX2xvdwlpX2dpZApAQCAtNDMxLDggKzQxNCw2IEBACiAjZWxpZiBkZWZpbmVkKF9fR05VX18pCiAKICNkZWZpbmUgaV90cmFuc2xhdG9yCW9zZDEuaHVyZDEuaF9pX3RyYW5zbGF0b3IKLSNkZWZpbmUgaV9mcmFnCQlvc2QyLmh1cmQyLmhfaV9mcmFnOwotI2RlZmluZSBpX2ZzaXplCQlvc2QyLmh1cmQyLmhfaV9mc2l6ZTsKICNkZWZpbmUgaV91aWRfaGlnaAlvc2QyLmh1cmQyLmhfaV91aWRfaGlnaAogI2RlZmluZSBpX2dpZF9oaWdoCW9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoCiAjZGVmaW5lIGlfYXV0aG9yCW9zZDIuaHVyZDIuaF9pX2F1dGhvcgpAQCAtNDQwLDggKzQyMSw2IEBACiAjZWxpZiBkZWZpbmVkKF9fbWFzaXhfXykKIAogI2RlZmluZSBpX3Jlc2VydmVkMQlvc2QxLm1hc2l4MS5tX2lfcmVzZXJ2ZWQxCi0jZGVmaW5lIGlfZnJhZwkJb3NkMi5tYXNpeDIubV9pX2ZyYWcKLSNkZWZpbmUgaV9mc2l6ZQkJb3NkMi5tYXNpeDIubV9pX2ZzaXplCiAjZGVmaW5lIGlfZmlsZV9hY2xfaGlnaAlvc2QyLm1hc2l4Mi5tX2lfZmlsZV9hY2xfaGlnaAogI2RlZmluZSBpX3Jlc2VydmVkMglvc2QyLm1hc2l4Mi5tX2lfcmVzZXJ2ZWQyCiAKQEAgLTUyMiwxNSArNTAxLDE1IEBACiAgKi8KIHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrIHsKIC8qMDAqLwlfX2xlMzIJc19pbm9kZXNfY291bnQ7CQkvKiBJbm9kZXMgY291bnQgKi8KLQlfX2xlMzIJc19ibG9ja3NfY291bnQ7CQkvKiBCbG9ja3MgY291bnQgKi8KLQlfX2xlMzIJc19yX2Jsb2Nrc19jb3VudDsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCi0JX19sZTMyCXNfZnJlZV9ibG9ja3NfY291bnQ7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCisJX19sZTMyCXNfYmxvY2tzX2NvdW50X2xvOwkvKiBCbG9ja3MgY291bnQgKi8KKwlfX2xlMzIJc19yX2Jsb2Nrc19jb3VudF9sbzsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCisJX19sZTMyCXNfZnJlZV9ibG9ja3NfY291bnRfbG87CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCiAvKjEwKi8JX19sZTMyCXNfZnJlZV9pbm9kZXNfY291bnQ7CS8qIEZyZWUgaW5vZGVzIGNvdW50ICovCiAJX19sZTMyCXNfZmlyc3RfZGF0YV9ibG9jazsJLyogRmlyc3QgRGF0YSBCbG9jayAqLwogCV9fbGUzMglzX2xvZ19ibG9ja19zaXplOwkvKiBCbG9jayBzaXplICovCi0JX19sZTMyCXNfbG9nX2ZyYWdfc2l6ZTsJLyogRnJhZ21lbnQgc2l6ZSAqLworCV9fbGUzMglzX29ic29fbG9nX2ZyYWdfc2l6ZTsJLyogT2Jzb2xldGVkIGZyYWdtZW50IHNpemUgKi8KIC8qMjAqLwlfX2xlMzIJc19ibG9ja3NfcGVyX2dyb3VwOwkvKiAjIEJsb2NrcyBwZXIgZ3JvdXAgKi8KLQlfX2xlMzIJc19mcmFnc19wZXJfZ3JvdXA7CS8qICMgRnJhZ21lbnRzIHBlciBncm91cCAqLworCV9fbGUzMglzX29ic29fZnJhZ3NfcGVyX2dyb3VwOwkvKiBPYnNvbGV0ZWQgZnJhZ21lbnRzIHBlciBncm91cCAqLwogCV9fbGUzMglzX2lub2Rlc19wZXJfZ3JvdXA7CS8qICMgSW5vZGVzIHBlciBncm91cCAqLwogCV9fbGUzMglzX210aW1lOwkJLyogTW91bnQgdGltZSAqLwogLyozMCovCV9fbGUzMglzX3d0aW1lOwkJLyogV3JpdGUgdGltZSAqLwpAQCAtNTk1LDEzICs1NzQsMTMgQEAKIC8qMTUwKi8JX19sZTMyCXNfYmxvY2tzX2NvdW50X2hpOwkvKiBCbG9ja3MgY291bnQgKi8KIAlfX2xlMzIJc19yX2Jsb2Nrc19jb3VudF9oaTsJLyogUmVzZXJ2ZWQgYmxvY2tzIGNvdW50ICovCiAJX19sZTMyCXNfZnJlZV9ibG9ja3NfY291bnRfaGk7CS8qIEZyZWUgYmxvY2tzIGNvdW50ICovCi0JX191MTYJc19taW5fZXh0cmFfaXNpemU7CS8qIEFsbCBpbm9kZXMgaGF2ZSBhdCBsZWFzdCAjIGJ5dGVzICovCi0JX191MTYJc193YW50X2V4dHJhX2lzaXplOyAJLyogTmV3IGlub2RlcyBzaG91bGQgcmVzZXJ2ZSAjIGJ5dGVzICovCi0JX191MzIJc19mbGFnczsJCS8qIE1pc2NlbGxhbmVvdXMgZmxhZ3MgKi8KLQlfX3UxNiAgIHNfcmFpZF9zdHJpZGU7CQkvKiBSQUlEIHN0cmlkZSAqLwotCV9fdTE2ICAgc19tbXBfaW50ZXJ2YWw7ICAgICAgICAgLyogIyBzZWNvbmRzIHRvIHdhaXQgaW4gTU1QIGNoZWNraW5nICovCi0JX191NjQgICBzX21tcF9ibG9jazsgICAgICAgICAgICAvKiBCbG9jayBmb3IgbXVsdGktbW91bnQgcHJvdGVjdGlvbiAqLwotCV9fdTMyICAgc19yYWlkX3N0cmlwZV93aWR0aDsgICAgLyogYmxvY2tzIG9uIGFsbCBkYXRhIGRpc2tzIChOKnN0cmlkZSkqLworCV9fbGUxNglzX21pbl9leHRyYV9pc2l6ZTsJLyogQWxsIGlub2RlcyBoYXZlIGF0IGxlYXN0ICMgYnl0ZXMgKi8KKwlfX2xlMTYJc193YW50X2V4dHJhX2lzaXplOyAJLyogTmV3IGlub2RlcyBzaG91bGQgcmVzZXJ2ZSAjIGJ5dGVzICovCisJX19sZTMyCXNfZmxhZ3M7CQkvKiBNaXNjZWxsYW5lb3VzIGZsYWdzICovCisJX19sZTE2ICBzX3JhaWRfc3RyaWRlOwkJLyogUkFJRCBzdHJpZGUgKi8KKwlfX2xlMTYgIHNfbW1wX2ludGVydmFsOyAgICAgICAgIC8qICMgc2Vjb25kcyB0byB3YWl0IGluIE1NUCBjaGVja2luZyAqLworCV9fbGU2NCAgc19tbXBfYmxvY2s7ICAgICAgICAgICAgLyogQmxvY2sgZm9yIG11bHRpLW1vdW50IHByb3RlY3Rpb24gKi8KKwlfX2xlMzIgIHNfcmFpZF9zdHJpcGVfd2lkdGg7ICAgIC8qIGJsb2NrcyBvbiBhbGwgZGF0YSBkaXNrcyAoTipzdHJpZGUpKi8KIAlfX3UzMiAgIHNfcmVzZXJ2ZWRbMTYzXTsgICAgICAgIC8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KIH07CiAKQEAgLTY5Miw2ICs2NzEsNyBAQAogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUgkweDAwMDEKICNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFCTB4MDAwMgogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0JUUkVFX0RJUgkweDAwMDQKKyNkZWZpbmUgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9HRFRfQ1NVTQkJMHgwMDEwCiAjZGVmaW5lIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LCTB4MDAyMAogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0VYVFJBX0lTSVpFCTB4MDA0MAogCkBAIC03MDIsMTUgKzY4MiwxOCBAQAogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRwkJMHgwMDEwCiAjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTCQkweDAwNDAgLyogZXh0ZW50cyBzdXBwb3J0ICovCiAjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVAkJMHgwMDgwCisjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHCQkweDAyMDAKIAogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfQ09NUEFUX1NVUFAJRVhUMl9GRUFUVVJFX0NPTVBBVF9FWFRfQVRUUgogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfU1VQUAkoRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFfCBcCiAJCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUnwgXAogCQkJCQkgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkd8IFwKIAkJCQkJIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTfCBcCi0JCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVQpCisJCQkJCSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfNjRCSVR8IFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHKQogI2RlZmluZSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX1NVUFAJKEVYVDRfRkVBVFVSRV9ST19DT01QQVRfU1BBUlNFX1NVUEVSfCBcCiAJCQkJCSBFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8IFwKKwkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfR0RUX0NTVU18IFwKIAkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfRElSX05MSU5LIHwgXAogCQkJCQkgRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9FWFRSQV9JU0laRSB8IFwKIAkJCQkJIEVYVDRfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSKQpAQCAtNzg5LDE3ICs3NzIsMTEgQEAKICAqIChjKSBEYW5pZWwgUGhpbGxpcHMsIDIwMDEKICAqLwogCi0jaWZkZWYgQ09ORklHX0VYVDRfSU5ERVgKLSAgI2RlZmluZSBpc19keChkaXIpIChFWFQ0X0hBU19DT01QQVRfRkVBVFVSRShkaXItPmlfc2IsIFwKLQkJCQkJICAgICAgRVhUNF9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpICYmIFwKKyNkZWZpbmUgaXNfZHgoZGlyKSAoRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoZGlyLT5pX3NiLCBcCisJCQkJICAgICAgRVhUNF9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVgpICYmIFwKIAkJICAgICAgKEVYVDRfSShkaXIpLT5pX2ZsYWdzICYgRVhUNF9JTkRFWF9GTCkpCiAjZGVmaW5lIEVYVDRfRElSX0xJTktfTUFYKGRpcikgKCFpc19keChkaXIpICYmIChkaXIpLT5pX25saW5rID49IEVYVDRfTElOS19NQVgpCiAjZGVmaW5lIEVYVDRfRElSX0xJTktfRU1QVFkoZGlyKSAoKGRpciktPmlfbmxpbmsgPT0gMiB8fCAoZGlyKS0+aV9ubGluayA9PSAxKQotI2Vsc2UKLSAgI2RlZmluZSBpc19keChkaXIpIDAKLSNkZWZpbmUgRVhUNF9ESVJfTElOS19NQVgoZGlyKSAoKGRpciktPmlfbmxpbmsgPj0gRVhUNF9MSU5LX01BWCkKLSNkZWZpbmUgRVhUNF9ESVJfTElOS19FTVBUWShkaXIpICgoZGlyKS0+aV9ubGluayA9PSAyKQotI2VuZGlmCiAKIC8qIExlZ2FsIHZhbHVlcyBmb3IgdGhlIGR4X3Jvb3QgaGFzaF92ZXJzaW9uIGZpZWxkOiAqLwogCkBAIC0xMDA0LDM5ICs5ODEsMzkgQEAKIHN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcykKIHsKIAlyZXR1cm4gKChleHQ0X2ZzYmxrX3QpbGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50X2hpKSA8PCAzMikgfAotCQlsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpOworCQlsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnRfbG8pOwogfQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZnNibGtfdCBleHQ0X3JfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcykKIHsKIAlyZXR1cm4gKChleHQ0X2ZzYmxrX3QpbGUzMl90b19jcHUoZXMtPnNfcl9ibG9ja3NfY291bnRfaGkpIDw8IDMyKSB8Ci0JCWxlMzJfdG9fY3B1KGVzLT5zX3JfYmxvY2tzX2NvdW50KTsKKwkJbGUzMl90b19jcHUoZXMtPnNfcl9ibG9ja3NfY291bnRfbG8pOwogfQogCiBzdGF0aWMgaW5saW5lIGV4dDRfZnNibGtfdCBleHQ0X2ZyZWVfYmxvY2tzX2NvdW50KHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcykKIHsKIAlyZXR1cm4gKChleHQ0X2ZzYmxrX3QpbGUzMl90b19jcHUoZXMtPnNfZnJlZV9ibG9ja3NfY291bnRfaGkpIDw8IDMyKSB8Ci0JCWxlMzJfdG9fY3B1KGVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50KTsKKwkJbGUzMl90b19jcHUoZXMtPnNfZnJlZV9ibG9ja3NfY291bnRfbG8pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcywKIAkJCQkJIGV4dDRfZnNibGtfdCBibGspCiB7Ci0JZXMtPnNfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIoKHUzMilibGspOworCWVzLT5zX2Jsb2Nrc19jb3VudF9sbyA9IGNwdV90b19sZTMyKCh1MzIpYmxrKTsKIAllcy0+c19ibG9ja3NfY291bnRfaGkgPSBjcHVfdG9fbGUzMihibGsgPj4gMzIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9mcmVlX2Jsb2Nrc19jb3VudF9zZXQoc3RydWN0IGV4dDRfc3VwZXJfYmxvY2sgKmVzLAogCQkJCQkgICAgICBleHQ0X2ZzYmxrX3QgYmxrKQogewotCWVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50ID0gY3B1X3RvX2xlMzIoKHUzMilibGspOworCWVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50X2xvID0gY3B1X3RvX2xlMzIoKHUzMilibGspOwogCWVzLT5zX2ZyZWVfYmxvY2tzX2NvdW50X2hpID0gY3B1X3RvX2xlMzIoYmxrID4+IDMyKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGV4dDRfcl9ibG9ja3NfY291bnRfc2V0KHN0cnVjdCBleHQ0X3N1cGVyX2Jsb2NrICplcywKIAkJCQkJICAgZXh0NF9mc2Jsa190IGJsaykKIHsKLQllcy0+c19yX2Jsb2Nrc19jb3VudCA9IGNwdV90b19sZTMyKCh1MzIpYmxrKTsKKwllcy0+c19yX2Jsb2Nrc19jb3VudF9sbyA9IGNwdV90b19sZTMyKCh1MzIpYmxrKTsKIAllcy0+c19yX2Jsb2Nrc19jb3VudF9oaSA9IGNwdV90b19sZTMyKGJsayA+PiAzMik7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0NF9mc19leHRlbnRzLmggYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfZXh0ZW50cy5oCmluZGV4IDgxNDA2ZjMuLmQyMDQ1YTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0NF9mc19leHRlbnRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2V4dGVudHMuaApAQCAtNzQsNyArNzQsNyBAQAogCV9fbGUzMgllZV9ibG9jazsJLyogZmlyc3QgbG9naWNhbCBibG9jayBleHRlbnQgY292ZXJzICovCiAJX19sZTE2CWVlX2xlbjsJCS8qIG51bWJlciBvZiBibG9ja3MgY292ZXJlZCBieSBleHRlbnQgKi8KIAlfX2xlMTYJZWVfc3RhcnRfaGk7CS8qIGhpZ2ggMTYgYml0cyBvZiBwaHlzaWNhbCBibG9jayAqLwotCV9fbGUzMgllZV9zdGFydDsJLyogbG93IDMyIGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi8KKwlfX2xlMzIJZWVfc3RhcnRfbG87CS8qIGxvdyAzMiBiaXRzIG9mIHBoeXNpY2FsIGJsb2NrICovCiB9OwogCiAvKgpAQCAtODMsNyArODMsNyBAQAogICovCiBzdHJ1Y3QgZXh0NF9leHRlbnRfaWR4IHsKIAlfX2xlMzIJZWlfYmxvY2s7CS8qIGluZGV4IGNvdmVycyBsb2dpY2FsIGJsb2NrcyBmcm9tICdibG9jaycgKi8KLQlfX2xlMzIJZWlfbGVhZjsJLyogcG9pbnRlciB0byB0aGUgcGh5c2ljYWwgYmxvY2sgb2YgdGhlIG5leHQgKgorCV9fbGUzMgllaV9sZWFmX2xvOwkvKiBwb2ludGVyIHRvIHRoZSBwaHlzaWNhbCBibG9jayBvZiB0aGUgbmV4dCAqCiAJCQkJICogbGV2ZWwuIGxlYWYgb3IgbmV4dCBpbmRleCBjb3VsZCBiZSB0aGVyZSAqLwogCV9fbGUxNgllaV9sZWFmX2hpOwkvKiBoaWdoIDE2IGJpdHMgb2YgcGh5c2ljYWwgYmxvY2sgKi8KIAlfX3UxNgllaV91bnVzZWQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfaS5oIGIvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2kuaAppbmRleCAxYTUxMWU5OS4uODZkZGZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQ0X2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfaS5oCkBAIC03OCwxMSArNzgsNiBAQAogc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7CiAJX19sZTMyCWlfZGF0YVsxNV07CS8qIHVuY29udmVydGVkICovCiAJX191MzIJaV9mbGFnczsKLSNpZmRlZiBFWFQ0X0ZSQUdNRU5UUwotCV9fdTMyCWlfZmFkZHI7Ci0JX191OAlpX2ZyYWdfbm87Ci0JX191OAlpX2ZyYWdfc2l6ZTsKLSNlbmRpZgogCWV4dDRfZnNibGtfdAlpX2ZpbGVfYWNsOwogCV9fdTMyCWlfZGlyX2FjbDsKIAlfX3UzMglpX2R0aW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQ0X2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfc2IuaAppbmRleCAwYThlNDdkLi5iNDBlODI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDRfZnNfc2IuaApAQCAtMjgsMTEgKzI4LDggQEAKICAqIHRoaXJkIGV4dGVuZGVkLWZzIHN1cGVyLWJsb2NrIGRhdGEgaW4gbWVtb3J5CiAgKi8KIHN0cnVjdCBleHQ0X3NiX2luZm8gewotCXVuc2lnbmVkIGxvbmcgc19mcmFnX3NpemU7CS8qIFNpemUgb2YgYSBmcmFnbWVudCBpbiBieXRlcyAqLwogCXVuc2lnbmVkIGxvbmcgc19kZXNjX3NpemU7CS8qIFNpemUgb2YgYSBncm91cCBkZXNjcmlwdG9yIGluIGJ5dGVzICovCi0JdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ibG9jazsvKiBOdW1iZXIgb2YgZnJhZ21lbnRzIHBlciBibG9jayAqLwogCXVuc2lnbmVkIGxvbmcgc19pbm9kZXNfcGVyX2Jsb2NrOy8qIE51bWJlciBvZiBpbm9kZXMgcGVyIGJsb2NrICovCi0JdW5zaWduZWQgbG9uZyBzX2ZyYWdzX3Blcl9ncm91cDsvKiBOdW1iZXIgb2YgZnJhZ21lbnRzIGluIGEgZ3JvdXAgKi8KIAl1bnNpZ25lZCBsb25nIHNfYmxvY2tzX3Blcl9ncm91cDsvKiBOdW1iZXIgb2YgYmxvY2tzIGluIGEgZ3JvdXAgKi8KIAl1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsvKiBOdW1iZXIgb2YgaW5vZGVzIGluIGEgZ3JvdXAgKi8KIAl1bnNpZ25lZCBsb25nIHNfaXRiX3Blcl9ncm91cDsJLyogTnVtYmVyIG9mIGlub2RlIHRhYmxlIGJsb2NrcyBwZXIgZ3JvdXAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0NF9qYmQyLmggYi9pbmNsdWRlL2xpbnV4L2V4dDRfamJkMi5oCmluZGV4IGQ3MTZlNjMuLjM4YzcxZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0NF9qYmQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQ0X2piZDIuaApAQCAtMTIsOCArMTIsOCBAQAogICogRXh0NC1zcGVjaWZpYyBqb3VybmFsaW5nIGV4dGVuc2lvbnMuCiAgKi8KIAotI2lmbmRlZiBfTElOVVhfRVhUNF9KQkRfSAotI2RlZmluZSBfTElOVVhfRVhUNF9KQkRfSAorI2lmbmRlZiBfTElOVVhfRVhUNF9KQkQyX0gKKyNkZWZpbmUgX0xJTlVYX0VYVDRfSkJEMl9ICiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2piZDIuaD4KQEAgLTIyOCw0ICsyMjgsNCBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYJLyogX0xJTlVYX0VYVDRfSkJEX0ggKi8KKyNlbmRpZgkvKiBfTElOVVhfRVhUNF9KQkQyX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L2ZpbHRlci5oCmluZGV4IDkxYjJlM2IuLmRkZmEwMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWx0ZXIuaApAQCAtMTQ2LDYgKzE0Niw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgc2tfcnVuX2ZpbHRlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29ja19maWx0ZXIgKmZpbHRlciwgaW50IGZsZW4pOwogZXh0ZXJuIGludCBza19hdHRhY2hfZmlsdGVyKHN0cnVjdCBzb2NrX2Zwcm9nICpmcHJvZywgc3RydWN0IHNvY2sgKnNrKTsKK2V4dGVybiBpbnQgc2tfZGV0YWNoX2ZpbHRlcihzdHJ1Y3Qgc29jayAqc2spOwogZXh0ZXJuIGludCBza19jaGtfZmlsdGVyKHN0cnVjdCBzb2NrX2ZpbHRlciAqZmlsdGVyLCBpbnQgZmxlbik7CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZyZWV6ZXIuaCBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCmluZGV4IGVmZGVkMDAuLjA4OTM0OTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnJlZXplci5oCisrKyBiL2luY2x1ZGUvbGludXgvZnJlZXplci5oCkBAIC00LDYgKzQsNyBAQAogI2RlZmluZSBGUkVFWkVSX0hfSU5DTFVERUQKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAvKgpAQCAtMTI2LDYgKzEyNywzNiBAQAogCWN1cnJlbnQtPmZsYWdzICY9IH5QRl9OT0ZSRUVaRTsKIH0KIAorLyoKKyAqIEZyZWV6ZXItZnJpZW5kbHkgd3JhcHBlcnMgYXJvdW5kIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpIGFuZAorICogd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoKSwgb3JpZ2luYWxseSBkZWZpbmVkIGluIDxsaW51eC93YWl0Lmg+CisgKi8KKworI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX19yZXR2YWw7CQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCV9fcmV0dmFsID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKHdxLCAJCVwKKwkJCQkoY29uZGl0aW9uKSB8fCBmcmVlemluZyhjdXJyZW50KSk7CVwKKwkJaWYgKF9fcmV0dmFsICYmICFmcmVlemluZyhjdXJyZW50KSkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCWVsc2UgaWYgKCEoY29uZGl0aW9uKSkJCQkJCVwKKwkJCV9fcmV0dmFsID0gLUVSRVNUQVJUU1lTOwkJCVwKKwl9IHdoaWxlICh0cnlfdG9fZnJlZXplKCkpOwkJCQkJXAorCV9fcmV0dmFsOwkJCQkJCQlcCit9KQorCisKKyNkZWZpbmUgd2FpdF9ldmVudF9mcmVlemFibGVfdGltZW91dCh3cSwgY29uZGl0aW9uLCB0aW1lb3V0KQkJXAorKHsJCQkJCQkJCQlcCisJbG9uZyBfX3JldHZhbCA9IHRpbWVvdXQ7CQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlfX3JldHZhbCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHdxLAkJXAorCQkJCShjb25kaXRpb24pIHx8IGZyZWV6aW5nKGN1cnJlbnQpLAlcCisJCQkJX19yZXR2YWwpOyAJCQkJXAorCX0gd2hpbGUgKHRyeV90b19mcmVlemUoKSk7CQkJCQlcCisJX19yZXR2YWw7CQkJCQkJCVwKK30pCiAjZWxzZSAvKiAhQ09ORklHX1BNX1NMRUVQICovCiBzdGF0aWMgaW5saW5lIGludCBmcm96ZW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBmcmVlemluZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApIHsgcmV0dXJuIDA7IH0KQEAgLTE0Myw2ICsxNzQsMTMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlemVyX2NvdW50KHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIGludCBmcmVlemVyX3Nob3VsZF9za2lwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkgeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlemFibGUodm9pZCkge30KKworI2RlZmluZSB3YWl0X2V2ZW50X2ZyZWV6YWJsZSh3cSwgY29uZGl0aW9uKQkJCQlcCisJCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh3cSwgY29uZGl0aW9uKQorCisjZGVmaW5lIHdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkJCVwKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQod3EsIGNvbmRpdGlvbiwgdGltZW91dCkKKwogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogI2VuZGlmCS8qIEZSRUVaRVJfSF9JTkNMVURFRCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGUzZmM1ZGIuLjFiY2NlNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogI2RlZmluZSBNU19TTEFWRQkoMTw8MTkpCS8qIGNoYW5nZSB0byBzbGF2ZSAqLwogI2RlZmluZSBNU19TSEFSRUQJKDE8PDIwKQkvKiBjaGFuZ2UgdG8gc2hhcmVkICovCiAjZGVmaW5lIE1TX1JFTEFUSU1FCSgxPDwyMSkJLyogVXBkYXRlIGF0aW1lIHJlbGF0aXZlIHRvIG10aW1lL2N0aW1lLiAqLworI2RlZmluZSBNU19LRVJOTU9VTlQJKDE8PDIyKSAvKiB0aGlzIGlzIGEga2Vybl9tb3VudCBjYWxsICovCiAjZGVmaW5lIE1TX0FDVElWRQkoMTw8MzApCiAjZGVmaW5lIE1TX05PVVNFUgkoMTw8MzEpCiAKQEAgLTMzMCw2ICszMzEsNyBAQAogI2RlZmluZSBBVFRSX0tJTExfU0dJRAk0MDk2CiAjZGVmaW5lIEFUVFJfRklMRQk4MTkyCiAjZGVmaW5lIEFUVFJfS0lMTF9QUklWCTE2Mzg0CisjZGVmaW5lIEFUVFJfT1BFTgkzMjc2OAkvKiBUcnVuY2F0aW5nIGZyb20gb3BlbihPX1RSVU5DKSAqLwogCiAvKgogICogVGhpcyBpcyB0aGUgSW5vZGUgQXR0cmlidXRlcyBzdHJ1Y3R1cmUsIHVzZWQgZm9yIG5vdGlmeV9jaGFuZ2UoKS4gIEl0CkBAIC0xNDU4LDcgKzE0NjAsOCBAQAogCiBleHRlcm4gaW50IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CiBleHRlcm4gaW50IHVucmVnaXN0ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqKTsKLWV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKmtlcm5fbW91bnQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKik7CitleHRlcm4gc3RydWN0IHZmc21vdW50ICprZXJuX21vdW50X2RhdGEoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiwgdm9pZCAqZGF0YSk7CisjZGVmaW5lIGtlcm5fbW91bnQodHlwZSkga2Vybl9tb3VudF9kYXRhKHR5cGUsIE5VTEwpCiBleHRlcm4gaW50IG1heV91bW91bnRfdHJlZShzdHJ1Y3QgdmZzbW91bnQgKik7CiBleHRlcm4gaW50IG1heV91bW91bnQoc3RydWN0IHZmc21vdW50ICopOwogZXh0ZXJuIHZvaWQgdW1vdW50X3RyZWUoc3RydWN0IHZmc21vdW50ICosIGludCwgc3RydWN0IGxpc3RfaGVhZCAqKTsKQEAgLTE1MzMsNyArMTUzNiw3IEBACiAKIGV4dGVybiBpbnQgZG9fdHJ1bmNhdGUoc3RydWN0IGRlbnRyeSAqLCBsb2ZmX3Qgc3RhcnQsIHVuc2lnbmVkIGludCB0aW1lX2F0dHJzLAogCQkgICAgICAgc3RydWN0IGZpbGUgKmZpbHApOwotZXh0ZXJuIGxvbmcgZG9fc3lzX29wZW4oaW50IGZkZiwgY29uc3QgY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MsCitleHRlcm4gbG9uZyBkb19zeXNfb3BlbihpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBmbGFncywKIAkJCWludCBtb2RlKTsKIGV4dGVybiBzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwogZXh0ZXJuIHN0cnVjdCBmaWxlICogZGVudHJ5X29wZW4oc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgaW50KTsKQEAgLTE5MjEsNiArMTkyNCw4IEBACiAKIGV4dGVybiBpbnQgdmZzX2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAorZXh0ZXJuIHZvaWQgZ2V0X2ZpbGVzeXN0ZW0oc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzKTsKK2V4dGVybiB2b2lkIHB1dF9maWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmcyk7CiBleHRlcm4gc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHN0cnVjdCBzdXBlcl9ibG9jayAqZ2V0X3N1cGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKik7CiBleHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICp1c2VyX2dldF9zdXBlcihkZXZfdCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1c2UuaCBiL2luY2x1ZGUvbGludXgvZnVzZS5oCmluZGV4IDlmYmU5ZDIuLmQwYzQzNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnVzZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnVzZS5oCkBAIC02LDcgKzYsMTcgQEAKICAgICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KICovCiAKLS8qIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSBrZXJuZWwgaW50ZXJmYWNlIG9mIEZVU0UgKi8KKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyB0aGUga2VybmVsIGludGVyZmFjZSBvZiBGVVNFCisgKgorICogUHJvdG9jb2wgY2hhbmdlbG9nOgorICoKKyAqIDcuOToKKyAqICAtIG5ldyBmdXNlX2dldGF0dHJfaW4gaW5wdXQgYXJndW1lbnQgb2YgR0VUQVRUUgorICogIC0gYWRkIGxrX2ZsYWdzIGluIGZ1c2VfbGtfaW4KKyAqICAtIGFkZCBsb2NrX293bmVyIGZpZWxkIHRvIGZ1c2Vfc2V0YXR0cl9pbiwgZnVzZV9yZWFkX2luIGFuZCBmdXNlX3dyaXRlX2luCisgKiAgLSBhZGQgYmxrc2l6ZSBmaWVsZCB0byBmdXNlX2F0dHIKKyAqLwogCiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KQEAgLTE1LDcgKzI1LDcgQEAKICNkZWZpbmUgRlVTRV9LRVJORUxfVkVSU0lPTiA3CiAKIC8qKiBNaW5vciB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIGludGVyZmFjZSAqLwotI2RlZmluZSBGVVNFX0tFUk5FTF9NSU5PUl9WRVJTSU9OIDgKKyNkZWZpbmUgRlVTRV9LRVJORUxfTUlOT1JfVkVSU0lPTiA5CiAKIC8qKiBUaGUgbm9kZSBJRCBvZiB0aGUgcm9vdCBpbm9kZSAqLwogI2RlZmluZSBGVVNFX1JPT1RfSUQgMQpAQCAtNDQsNiArNTQsOCBAQAogCV9fdTMyCXVpZDsKIAlfX3UzMglnaWQ7CiAJX191MzIJcmRldjsKKwlfX3UzMglibGtzaXplOworCV9fdTMyCXBhZGRpbmc7CiB9OwogCiBzdHJ1Y3QgZnVzZV9rc3RhdGZzIHsKQEAgLTc2LDYgKzg4LDkgQEAKICNkZWZpbmUgRkFUVFJfQVRJTUUJKDEgPDwgNCkKICNkZWZpbmUgRkFUVFJfTVRJTUUJKDEgPDwgNSkKICNkZWZpbmUgRkFUVFJfRkgJKDEgPDwgNikKKyNkZWZpbmUgRkFUVFJfQVRJTUVfTk9XCSgxIDw8IDcpCisjZGVmaW5lIEZBVFRSX01USU1FX05PVwkoMSA8PCA4KQorI2RlZmluZSBGQVRUUl9MT0NLT1dORVIJKDEgPDwgOSkKIAogLyoqCiAgKiBGbGFncyByZXR1cm5lZCBieSB0aGUgT1BFTiByZXF1ZXN0CkBAIC05MSwxMiArMTA2LDM4IEBACiAgKi8KICNkZWZpbmUgRlVTRV9BU1lOQ19SRUFECQkoMSA8PCAwKQogI2RlZmluZSBGVVNFX1BPU0lYX0xPQ0tTCSgxIDw8IDEpCisjZGVmaW5lIEZVU0VfRklMRV9PUFMJCSgxIDw8IDIpCisjZGVmaW5lIEZVU0VfQVRPTUlDX09fVFJVTkMJKDEgPDwgMykKIAogLyoqCiAgKiBSZWxlYXNlIGZsYWdzCiAgKi8KICNkZWZpbmUgRlVTRV9SRUxFQVNFX0ZMVVNICSgxIDw8IDApCiAKKy8qKgorICogR2V0YXR0ciBmbGFncworICovCisjZGVmaW5lIEZVU0VfR0VUQVRUUl9GSAkJKDEgPDwgMCkKKworLyoqCisgKiBMb2NrIGZsYWdzCisgKi8KKyNkZWZpbmUgRlVTRV9MS19GTE9DSwkJKDEgPDwgMCkKKworLyoqCisgKiBXUklURSBmbGFncworICoKKyAqIEZVU0VfV1JJVEVfQ0FDSEU6IGRlbGF5ZWQgd3JpdGUgZnJvbSBwYWdlIGNhY2hlLCBmaWxlIGhhbmRsZSBpcyBndWVzc2VkCisgKiBGVVNFX1dSSVRFX0xPQ0tPV05FUjogbG9ja19vd25lciBmaWVsZCBpcyB2YWxpZAorICovCisjZGVmaW5lIEZVU0VfV1JJVEVfQ0FDSEUJKDEgPDwgMCkKKyNkZWZpbmUgRlVTRV9XUklURV9MT0NLT1dORVIJKDEgPDwgMSkKKworLyoqCisgKiBSZWFkIGZsYWdzCisgKi8KKyNkZWZpbmUgRlVTRV9SRUFEX0xPQ0tPV05FUgkoMSA8PCAxKQorCiBlbnVtIGZ1c2Vfb3Bjb2RlIHsKIAlGVVNFX0xPT0tVUAkgICA9IDEsCiAJRlVTRV9GT1JHRVQJICAgPSAyLCAgLyogbm8gcmVwbHkgKi8KQEAgLTEzOSw2ICsxODAsOCBAQAogLyogVGhlIHJlYWQgYnVmZmVyIGlzIHJlcXVpcmVkIHRvIGJlIGF0IGxlYXN0IDhrLCBidXQgbWF5IGJlIG11Y2ggbGFyZ2VyICovCiAjZGVmaW5lIEZVU0VfTUlOX1JFQURfQlVGRkVSIDgxOTIKIAorI2RlZmluZSBGVVNFX0NPTVBBVF9FTlRSWV9PVVRfU0laRSAxMjAKKwogc3RydWN0IGZ1c2VfZW50cnlfb3V0IHsKIAlfX3U2NAlub2RlaWQ7CQkvKiBJbm9kZSBJRCAqLwogCV9fdTY0CWdlbmVyYXRpb247CS8qIElub2RlIGdlbmVyYXRpb246IG5vZGVpZDpnZW4gbXVzdApAQCAtMTU0LDYgKzE5NywxNCBAQAogCV9fdTY0CW5sb29rdXA7CiB9OwogCitzdHJ1Y3QgZnVzZV9nZXRhdHRyX2luIHsKKwlfX3UzMglnZXRhdHRyX2ZsYWdzOworCV9fdTMyCWR1bW15OworCV9fdTY0CWZoOworfTsKKworI2RlZmluZSBGVVNFX0NPTVBBVF9BVFRSX09VVF9TSVpFIDk2CisKIHN0cnVjdCBmdXNlX2F0dHJfb3V0IHsKIAlfX3U2NAlhdHRyX3ZhbGlkOwkvKiBDYWNoZSB0aW1lb3V0IGZvciB0aGUgYXR0cmlidXRlcyAqLwogCV9fdTMyCWF0dHJfdmFsaWRfbnNlYzsKQEAgLTE4NCw3ICsyMzUsNyBAQAogCV9fdTMyCXBhZGRpbmc7CiAJX191NjQJZmg7CiAJX191NjQJc2l6ZTsKLQlfX3U2NAl1bnVzZWQxOworCV9fdTY0CWxvY2tfb3duZXI7CiAJX191NjQJYXRpbWU7CiAJX191NjQJbXRpbWU7CiAJX191NjQJdW51c2VkMjsKQEAgLTIyNywxNCArMjc4LDE4IEBACiAJX191NjQJZmg7CiAJX191NjQJb2Zmc2V0OwogCV9fdTMyCXNpemU7Ci0JX191MzIJcGFkZGluZzsKKwlfX3UzMglyZWFkX2ZsYWdzOworCV9fdTY0CWxvY2tfb3duZXI7CiB9OwogCisjZGVmaW5lIEZVU0VfQ09NUEFUX1dSSVRFX0lOX1NJWkUgMjQKKwogc3RydWN0IGZ1c2Vfd3JpdGVfaW4gewogCV9fdTY0CWZoOwogCV9fdTY0CW9mZnNldDsKIAlfX3UzMglzaXplOwogCV9fdTMyCXdyaXRlX2ZsYWdzOworCV9fdTY0CWxvY2tfb3duZXI7CiB9OwogCiBzdHJ1Y3QgZnVzZV93cml0ZV9vdXQgewpAQCAtMjczLDYgKzMyOCw4IEBACiAJX191NjQJZmg7CiAJX191NjQJb3duZXI7CiAJc3RydWN0IGZ1c2VfZmlsZV9sb2NrIGxrOworCV9fdTMyCWxrX2ZsYWdzOworCV9fdTMyCXBhZGRpbmc7CiB9OwogCiBzdHJ1Y3QgZnVzZV9sa19vdXQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWQuaCBiL2luY2x1ZGUvbGludXgvaGlkLmgKaW5kZXggZWRiODAyNC4uNmUzNWI5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpZC5oCkBAIC00NjksOCArNDY5LDggQEAKIAkvKiBoYW5kbGVyIGZvciByYXcgb3V0cHV0IGRhdGEsIHVzZWQgYnkgaGlkcmF3ICovCiAJaW50ICgqaGlkX291dHB1dF9yYXdfcmVwb3J0KSAoc3RydWN0IGhpZF9kZXZpY2UgKiwgX191OCAqLCBzaXplX3QpOwogI2lmZGVmIENPTkZJR19VU0JfSElESU5QVVRfUE9XRVJCT09LCi0JdW5zaWduZWQgbG9uZyBwYl9wcmVzc2VkX2ZuW05CSVRTKEtFWV9NQVgpXTsKLQl1bnNpZ25lZCBsb25nIHBiX3ByZXNzZWRfbnVtbG9ja1tOQklUUyhLRVlfTUFYKV07CisJdW5zaWduZWQgbG9uZyBwYl9wcmVzc2VkX2ZuW0JJVFNfVE9fTE9OR1MoS0VZX0NOVCldOworCXVuc2lnbmVkIGxvbmcgcGJfcHJlc3NlZF9udW1sb2NrW0JJVFNfVE9fTE9OR1MoS0VZX0NOVCldOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCmluZGV4IDU0MDc5OWIuLjdhOTM5OGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCkBAIC0zMDAsNyArMzAwLDcgQEAKIAogLyogUHJlY2lzZSBzbGVlcDogKi8KIGV4dGVybiBsb25nIGhydGltZXJfbmFub3NsZWVwKHN0cnVjdCB0aW1lc3BlYyAqcnF0cCwKLQkJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHAsCisJCQkgICAgICBzdHJ1Y3QgdGltZXNwZWMgKnJtdHAsCiAJCQkgICAgICBjb25zdCBlbnVtIGhydGltZXJfbW9kZSBtb2RlLAogCQkJICAgICAgY29uc3QgY2xvY2tpZF90IGNsb2NraWQpOwogZXh0ZXJuIGxvbmcgaHJ0aW1lcl9uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCBlMzllZTJmLi4yZTRiOGRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTE5MiwyMiArMTkyLDIwIEBACiBzdHJ1Y3QgaHdpZl9zOwogdHlwZWRlZiBpbnQgKGlkZV9hY2tfaW50cl90KShzdHJ1Y3QgaHdpZl9zICopOwogCi0jaWZuZGVmIE5PX0RNQQotI2RlZmluZSBOT19ETUEgIDI1NQotI2VuZGlmCi0KIC8qCiAgKiBod2lmX2NoaXBzZXRfdCBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHNwZWNpZmljIGhhcmR3YXJlCiAgKiBjaGlwc2V0IHVzZWQgYnkgZWFjaCBJREUgaW50ZXJmYWNlLCBpZiBrbm93bi4KICAqLwotdHlwZWRlZiBlbnVtIHsJaWRlX3Vua25vd24sCWlkZV9nZW5lcmljLAlpZGVfcGNpLAorZW51bSB7CQlpZGVfdW5rbm93biwJaWRlX2dlbmVyaWMsCWlkZV9wY2ksCiAJCWlkZV9jbWQ2NDAsCWlkZV9kdGMyMjc4LAlpZGVfYWxpMTR4eCwKIAkJaWRlX3FkNjV4eCwJaWRlX3VtYzg2NzIsCWlkZV9odDY1NjBiLAogCQlpZGVfcnoxMDAwLAlpZGVfdHJtMjkwLAogCQlpZGVfY21kNjQ2LAlpZGVfY3k4MmM2OTMsCWlkZV80ZHJpdmVzLAogCQlpZGVfcG1hYywJaWRlX2V0cmF4MTAwLAlpZGVfYWNvcm4sCiAJCWlkZV9hdTF4eHgsIGlkZV9mb3JjZWQKLX0gaHdpZl9jaGlwc2V0X3Q7Cit9OworCit0eXBlZGVmIHU4IGh3aWZfY2hpcHNldF90OwogCiAvKgogICogU3RydWN0dXJlIHRvIGhvbGQgYWxsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGlzIHBvcnQKQEAgLTIxNSwyMiArMjEzLDE2IEBACiB0eXBlZGVmIHN0cnVjdCBod19yZWdzX3MgewogCXVuc2lnbmVkIGxvbmcJaW9fcG9ydHNbSURFX05SX1BPUlRTXTsJLyogdGFzayBmaWxlIHJlZ2lzdGVycyAqLwogCWludAkJaXJxOwkJCS8qIG91ciBpcnEgbnVtYmVyICovCi0JaW50CQlkbWE7CQkJLyogb3VyIGRtYSBlbnRyeSAqLwogCWlkZV9hY2tfaW50cl90CSphY2tfaW50cjsJCS8qIGFja25vd2xlZGdlIGludGVycnVwdCAqLwogCWh3aWZfY2hpcHNldF90ICBjaGlwc2V0OwogCXN0cnVjdCBkZXZpY2UJKmRldjsKIH0gaHdfcmVnc190OwogCi0vKgotICogUmVnaXN0ZXIgbmV3IGhhcmR3YXJlIHdpdGggaWRlCi0gKi8KLWludCBpZGVfcmVnaXN0ZXJfaHcoaHdfcmVnc190ICosIGludCwgc3RydWN0IGh3aWZfcyAqKik7Ci1pbnQgaWRlX3JlZ2lzdGVyX2h3X3dpdGhfZml4dXAoaHdfcmVnc190ICosIGludCwgc3RydWN0IGh3aWZfcyAqKiwKLQkJCSAgICAgICB2b2lkICgqKShzdHJ1Y3QgaHdpZl9zICopKTsKK3N0cnVjdCBod2lmX3MgKiBpZGVfZmluZF9wb3J0KHVuc2lnbmVkIGxvbmcpOwogCi0vKgotICogU2V0IHVwIGh3X3JlZ3NfdCBzdHJ1Y3R1cmUgYmVmb3JlIGNhbGxpbmcgaWRlX3JlZ2lzdGVyX2h3IChvcHRpb25hbCkKLSAqLworaW50IGlkZV9yZWdpc3Rlcl9odyhod19yZWdzX3QgKiwgdm9pZCAoKikoc3RydWN0IGh3aWZfcyAqKSwgaW50LAorCQkgICAgc3RydWN0IGh3aWZfcyAqKik7CisKIHZvaWQgaWRlX3NldHVwX3BvcnRzKAlod19yZWdzX3QgKmh3LAogCQkJdW5zaWduZWQgbG9uZyBiYXNlLAogCQkJaW50ICpvZmZzZXRzLApAQCAtMjY4LDExICsyNjAsNyBAQAogIyBkZWZpbmUgaWRlX2luaXRfZGVmYXVsdF9pcnEoYmFzZSkJKDApCiAjZW5kaWYKIAotLyoKLSAqIGlkZV9pbml0X2h3aWZfcG9ydHMoKSBpcyBPQlNPTEVURSBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDIuNyBzZXJpZXMuCi0gKiBOZXcgcG9ydHMgc2hvdWxkbid0IGRlZmluZSBJREVfQVJDSF9PQlNPTEVURV9JTklUIGluIDxhc20vaWRlLmg+LgotICovCi0jaWZkZWYgSURFX0FSQ0hfT0JTT0xFVEVfSU5JVAorI2lmZGVmIENPTkZJR19JREVfQVJDSF9PQlNPTEVURV9JTklUCiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2luaXRfaHdpZl9wb3J0cyhod19yZWdzX3QgKmh3LAogCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGlvX2FkZHIsCiAJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgY3RsX2FkZHIsCkBAIC0zMDIsNyArMjkwLDcgQEAKIAlpZiAoaW9fYWRkciB8fCBjdGxfYWRkcikKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG11c3Qgbm90IGJlIGNhbGxlZFxuIiwgX19GVU5DVElPTl9fKTsKIH0KLSNlbmRpZiAvKiBJREVfQVJDSF9PQlNPTEVURV9JTklUICovCisjZW5kaWYgLyogQ09ORklHX0lERV9BUkNIX09CU09MRVRFX0lOSVQgKi8KIAogLyogQ3VycmVudGx5IG9ubHkgbTY4aywgYXB1cyBhbmQgbTh4eCBuZWVkIGl0ICovCiAjaWZuZGVmIElERV9BUkNIX0FDS19JTlRSCkBAIC0zNjMsNyArMzUxLDYgQEAKICAqIEFUQSBEQVRBIFJlZ2lzdGVyIFNwZWNpYWwuCiAgKiBBVEEgTlNFQ1RPUiBDb3VudCBSZWdpc3RlcigpLgogICogQVRBUEkgQnl0ZSBDb3VudCBSZWdpc3Rlci4KLSAqIENoYW5uZWwgaW5kZXggb3JkZXJpbmcgcGFpcnMuCiAgKi8KIHR5cGVkZWYgdW5pb24gewogCXVuc2lnbmVkIGFsbAkJCToxNjsKQEAgLTM3OCw3ICszNjUsNyBAQAogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogI2VuZGlmCiAJfSBiOwotfSBhdGFfbnNlY3Rvcl90LCBhdGFfZGF0YV90LCBhdGFwaV9iY291bnRfdCwgYXRhX2luZGV4X3Q7Cit9IGF0YV9uc2VjdG9yX3QsIGF0YV9kYXRhX3QsIGF0YXBpX2Jjb3VudF90OwogCiAvKgogICogQVRBLUlERSBTZWxlY3QgUmVnaXN0ZXIsIGFrYSBEZXZpY2UtSGVhZApAQCAtNjU3LDcgKzY0NCw3IEBACiAgICAgKCgxPDxpZGVfcGNpKXwoMTw8aWRlX2NtZDY0Nil8KDE8PGlkZV9hbGkxNHh4KSkKICNkZWZpbmUgSURFX0NISVBTRVRfSVNfUENJKGMpCSgoSURFX0NISVBTRVRfUENJX01BU0sgPj4gKGMpKSAmIDEpCiAKLXN0cnVjdCBpZGVfcGNpX2RldmljZV9zOworc3RydWN0IGlkZV9wb3J0X2luZm87CiAKIHR5cGVkZWYgc3RydWN0IGh3aWZfcyB7CiAJc3RydWN0IGh3aWZfcyAqbmV4dDsJCS8qIGZvciBsaW5rZWQtbGlzdCBpbiBpZGVfaHdncm91cF90ICovCkBAIC02NzIsNyArNjU5LDYgQEAKIAl1bnNpZ25lZCBsb25nCXNhdGFfc2NyW1NBVEFfTlJfUE9SVFNdOwogCXVuc2lnbmVkIGxvbmcJc2F0YV9taXNjW1NBVEFfTlJfUE9SVFNdOwogCi0JaHdfcmVnc190CWh3OwkJLyogSGFyZHdhcmUgaW5mbyAqLwogCWlkZV9kcml2ZV90CWRyaXZlc1tNQVhfRFJJVkVTXTsJLyogZHJpdmUgaW5mbyAqLwogCiAJdTggbWFqb3I7CS8qIG91ciBtYWpvciBudW1iZXIgKi8KQEAgLTY4NSw3ICs2NzEsNiBAQAogCiAJdTggcGlvX21hc2s7CiAKLQl1OCBhdGFwaV9kbWE7CS8qIGhvc3Qgc3VwcG9ydHMgYXRhcGlfZG1hICovCiAJdTggdWx0cmFfbWFzazsKIAl1OCBtd2RtYV9tYXNrOwogCXU4IHN3ZG1hX21hc2s7CkBAIC02OTUsNyArNjgwLDkgQEAKIAlod2lmX2NoaXBzZXRfdCBjaGlwc2V0OwkvKiBzdWItbW9kdWxlIGZvciB0dW5pbmcuLiAqLwogCiAJc3RydWN0IHBjaV9kZXYgICpwY2lfZGV2OwkvKiBmb3IgcGNpIGNoaXBzZXRzICovCi0Jc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MJKmNkczsJLyogY2hpcHNldCBkZXZpY2Ugc3RydWN0ICovCisJY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKmNkczsJLyogY2hpcHNldCBkZXZpY2Ugc3RydWN0ICovCisKKwlpZGVfYWNrX2ludHJfdCAqYWNrX2ludHI7CiAKIAl2b2lkICgqcndfZGlzaykoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKQEAgLTcyNiw2ICs3MTMsOCBAQAogCXU4ICgqbWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOwogCXU4ICgqdWRtYV9maWx0ZXIpKGlkZV9kcml2ZV90ICopOwogCisJdm9pZCAoKmZpeHVwKShzdHJ1Y3QgaHdpZl9zICopOworCiAJdm9pZCAoKmF0YV9pbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCB2b2lkICosIHUzMik7CiAJdm9pZCAoKmF0YV9vdXRwdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgdm9pZCAqLCB1MzIpOwogCkBAIC03OTcsMTIgKzc4Niw5IEBACiAJdW5zaWduZWQJc2VyaWFsaXplZCA6IDE7CS8qIHNlcmlhbGl6ZWQgYWxsIGNoYW5uZWwgb3BlcmF0aW9uICovCiAJdW5zaWduZWQJc2hhcmluZ19pcnE6IDE7CS8qIDEgPSBzaGFyaW5nIGlycSB3aXRoIGFub3RoZXIgaHdpZiAqLwogCXVuc2lnbmVkCXJlc2V0ICAgICAgOiAxOwkvKiByZXNldCBhZnRlciBwcm9iZSAqLwotCXVuc2lnbmVkCW5vX2xiYTQ4ICAgOiAxOyAvKiAxID0gY2Fubm90IGRvIExCQTQ4ICovCi0JdW5zaWduZWQJbm9fbGJhNDhfZG1hIDogMTsgLyogMSA9IGNhbm5vdCBkbyBMQkE0OCBETUEgKi8KIAl1bnNpZ25lZAlhdXRvX3BvbGwgIDogMTsgLyogc3VwcG9ydHMgbm9wIGF1dG8tcG9sbCAqLwogCXVuc2lnbmVkCXNnX21hcHBlZCAgOiAxOwkvKiBzZ190YWJsZSBhbmQgc2dfbmVudHMgYXJlIHJlYWR5ICovCiAJdW5zaWduZWQJbm9faW9fMzJiaXQgOiAxOyAvKiAxID0gY2FuIG5vdCBkbyAzMi1iaXQgSU8gb3BzICovCi0JdW5zaWduZWQJZXJyX3N0b3BzX2ZpZm8gOiAxOyAvKiAxPWRhdGEgRklGTyBpcyBjbGVhcmVkIGJ5IGFuIGVycm9yICovCiAJdW5zaWduZWQJbW1pbyAgICAgICA6IDE7IC8qIGhvc3QgdXNlcyBNTUlPICovCiAKIAlzdHJ1Y3QgZGV2aWNlCWdlbmRldjsKQEAgLTg0NSw4ICs4MzEsNiBAQAogCiAJCS8qIGZvciBwY2kgY2hpcHNldHMgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQkJLyogY2hpcHNldCBkZXZpY2Ugc3RydWN0ICovCi0Jc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKmNkczsKIAogCQkvKiBjdXJyZW50IHJlcXVlc3QgKi8KIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CkBAIC0xMDM0LDM2ICsxMDE4LDE2IEBACiBpbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKTsKIAotLyoKLSAqIFRoaXMgaXMgdXNlZCBvbiBleGl0IGZyb20gdGhlIGRyaXZlciB0byBkZXNpZ25hdGUgdGhlIG5leHQgaXJxIGhhbmRsZXIKLSAqIGFuZCBhbHNvIHRvIHN0YXJ0IHRoZSBzYWZldHkgdGltZXIuCi0gKi8KIGV4dGVybiB2b2lkIGlkZV9zZXRfaGFuZGxlciAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLCB1bnNpZ25lZCBpbnQgdGltZW91dCwgaWRlX2V4cGlyeV90ICpleHBpcnkpOwogCi0vKgotICogVGhpcyBpcyB1c2VkIG9uIGV4aXQgZnJvbSB0aGUgZHJpdmVyIHRvIGRlc2lnbmF0ZSB0aGUgbmV4dCBpcnEgaGFuZGxlcgotICogYW5kIHN0YXJ0IHRoZSBzYWZldHkgdGltZSBzYWZlbHkgYW5kIGF0b21pY2FsbHkgZnJvbSB0aGUgSVJRIGhhbmRsZXIKLSAqIHdpdGggcmVzcGVjdCB0byB0aGUgY29tbWFuZCBpc3N1ZSAod2hpY2ggaXQgYWxzbyBkb2VzKQotICovCiBleHRlcm4gdm9pZCBpZGVfZXhlY3V0ZV9jb21tYW5kKGlkZV9kcml2ZV90ICosIHRhc2tfaW9yZWdfdCBjbWQsIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LCBpZGVfZXhwaXJ5X3QgKik7CiAKIGlkZV9zdGFydHN0b3BfdCBfX2lkZV9lcnJvcihpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCwgdTgpOwogCi0vKgotICogaWRlX2Vycm9yKCkgdGFrZXMgYWN0aW9uIGJhc2VkIG9uIHRoZSBlcnJvciByZXR1cm5lZCBieSB0aGUgY29udHJvbGxlci4KLSAqIFRoZSBjYWxsZXIgc2hvdWxkIHJldHVybiBpbW1lZGlhdGVseSBhZnRlciBpbnZva2luZyB0aGlzLgotICoKLSAqIChkcml2ZSwgbXNnLCBzdGF0dXMpCi0gKi8KIGlkZV9zdGFydHN0b3BfdCBpZGVfZXJyb3IgKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCBieXRlIHN0YXQpOwogCiBpZGVfc3RhcnRzdG9wX3QgX19pZGVfYWJvcnQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKLS8qCi0gKiBBYm9ydCBhIHJ1bm5pbmcgY29tbWFuZCBvbiB0aGUgY29udHJvbGxlciB0cmlnZ2VyaW5nIHRoZSBhYm9ydAotICogZnJvbSBhIGhvc3Qgc2lkZSwgbm9uIGVycm9yIHNpdHVhdGlvbgotICogKGRyaXZlLCBtc2cpCi0gKi8KIGV4dGVybiBpZGVfc3RhcnRzdG9wX3QgaWRlX2Fib3J0KGlkZV9kcml2ZV90ICosIGNvbnN0IGNoYXIgKik7CiAKIGV4dGVybiB2b2lkIGlkZV9maXhfZHJpdmVpZChzdHJ1Y3QgaGRfZHJpdmVpZCAqKTsKQEAgLTEwNzksMTUgKzEwNDMsOCBAQAogCiBpbnQgaWRlX3dhaXRfc3RhdChpZGVfc3RhcnRzdG9wX3QgKiwgaWRlX2RyaXZlX3QgKiwgdTgsIHU4LCB1bnNpZ25lZCBsb25nKTsKIAotLyoKLSAqIFN0YXJ0IGEgcmVzZXQgb3BlcmF0aW9uIGZvciBhbiBJREUgaW50ZXJmYWNlLgotICogVGhlIGNhbGxlciBzaG91bGQgcmV0dXJuIGltbWVkaWF0ZWx5IGFmdGVyIGludm9raW5nIHRoaXMuCi0gKi8KIGV4dGVybiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3Jlc2V0IChpZGVfZHJpdmVfdCAqKTsKIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBwcmlvciB0byBpbnZva2luZyBpZGVfZG9fZHJpdmVfY21kKCkuCi0gKi8KIGV4dGVybiB2b2lkIGlkZV9pbml0X2RyaXZlX2NtZCAoc3RydWN0IHJlcXVlc3QgKnJxKTsKIAogLyoKQEAgLTExMDIsMTMgKzEwNTksNiBAQAogCiBleHRlcm4gaW50IGlkZV9kb19kcml2ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaWRlX2FjdGlvbl90KTsKIAotLyoKLSAqIENsZWFuIHVwIGFmdGVyIHN1Y2Nlc3MvZmFpbHVyZSBvZiBhbiBleHBsaWNpdCBkcml2ZSBjbWQuCi0gKiBzdGF0L2VyciBhcmUgdXNlZCBvbmx5IHdoZW4gKEhXR1JPVVAoZHJpdmUpLT5ycS0+Y21kID09IElERV9EUklWRV9DTUQpLgotICogc3RhdC9lcnIgYXJlIHVzZWQgb25seSB3aGVuIChIV0dST1VQKGRyaXZlKS0+cnEtPmNtZCA9PSBJREVfRFJJVkVfVEFTS19NQVNLKS4KLSAqCi0gKiAoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBzdGF0LCB1OCBlcnIpCi0gKi8KIGV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7CiAKIC8qCkBAIC0xMTgxLDEwICsxMTMxLDYgQEAKIAogZXh0ZXJuIGludCBpZGVfd2FpdF9ub3RfYnVzeShpZGVfaHdpZl90ICpod2lmLCB1bnNpZ25lZCBsb25nIHRpbWVvdXQpOwogCi0vKgotICogaWRlX3N0YWxsX3F1ZXVlKCkgY2FuIGJlIHVzZWQgYnkgYSBkcml2ZSB0byBnaXZlIGV4Y2VzcyBiYW5kd2lkdGggYmFjawotICogdG8gdGhlIGh3Z3JvdXAgYnkgc2xlZXBpbmcgZm9yIHRpbWVvdXQgamlmZmllcy4KLSAqLwogZXh0ZXJuIHZvaWQgaWRlX3N0YWxsX3F1ZXVlKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyB0aW1lb3V0KTsKIAogZXh0ZXJuIGludCBpZGVfc3Bpbl93YWl0X2h3Z3JvdXAoaWRlX2RyaXZlX3QgKik7CkBAIC0xMjA0LDI2ICsxMTUwLDEzIEBACiAjZGVmaW5lIGlkZV9wY2lfcmVnaXN0ZXJfZHJpdmVyKGQpIHBjaV9yZWdpc3Rlcl9kcml2ZXIoZCkKICNlbmRpZgogCi12b2lkIGlkZV9wY2lfc2V0dXBfcG9ydHMoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKiwgaW50LCBhdGFfaW5kZXhfdCAqKTsKLWV4dGVybiB2b2lkIGlkZV9zZXR1cF9wY2lfbm9pc2UgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zICpkKTsKK3ZvaWQgaWRlX3BjaV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyAqLCBpbnQsIHU4ICopOwordm9pZCBpZGVfc2V0dXBfcGNpX25vaXNlKHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwogCiBleHRlcm4gdm9pZCBkZWZhdWx0X2h3aWZfaW9wcyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIHZvaWQgZGVmYXVsdF9od2lmX21taW9wcyhpZGVfaHdpZl90ICopOwogZXh0ZXJuIHZvaWQgZGVmYXVsdF9od2lmX3RyYW5zcG9ydChpZGVfaHdpZl90ICopOwogCi0jZGVmaW5lIE9OX0JPQVJECQkxCi0jZGVmaW5lIE5FVkVSX0JPQVJECQkwCi0KLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRAotIyAgZGVmaW5lIE9GRl9CT0FSRAkJT05fQk9BUkQKLSNlbHNlIC8qIENPTkZJR19CTEtfREVWX09GRkJPQVJEICovCi0jICBkZWZpbmUgT0ZGX0JPQVJECQlORVZFUl9CT0FSRAotI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX09GRkJPQVJEICovCi0KLSNkZWZpbmUgTk9ETUEgMAotI2RlZmluZSBOT0FVVE9ETUEgMQotI2RlZmluZSBBVVRPRE1BIDIKLQogdHlwZWRlZiBzdHJ1Y3QgaWRlX3BjaV9lbmFibGViaXRfcyB7CiAJdTgJcmVnOwkvKiBieXRlIHBjaSByZWcgaG9sZGluZyB0aGUgZW5hYmxlLWJpdCAqLwogCXU4CW1hc2s7CS8qIG1hc2sgdG8gaXNvbGF0ZSB0aGUgZW5hYmxlLWJpdCAqLwpAQCAtMTI1OCwyOSArMTE5MSw2MSBAQAogCUlERV9IRkxBR19UUlVTVF9CSU9TX0ZPUl9ETUEJPSAoMSA8PCAxMCksCiAJLyogaG9zdCB1c2VzIFZETUEgKi8KIAlJREVfSEZMQUdfVkRNQQkJCT0gKDEgPDwgMTEpLAorCS8qIEFUQVBJIERNQSBpcyB1bnN1cHBvcnRlZCAqLworCUlERV9IRkxBR19OT19BVEFQSV9ETUEJCT0gKDEgPDwgMTIpLAorCS8qIHNldCBpZiBob3N0IGlzIGEgImJvb3RhYmxlIiBjb250cm9sbGVyICovCisJSURFX0hGTEFHX0JPT1RBQkxFCQk9ICgxIDw8IDEzKSwKKwkvKiBob3N0IGRvZXNuJ3Qgc3VwcG9ydCBETUEgKi8KKwlJREVfSEZMQUdfTk9fRE1BCQk9ICgxIDw8IDE0KSwKKwkvKiBjaGVjayBpZiBob3N0IGlzIFBDSSBJREUgZGV2aWNlIGJlZm9yZSBhbGxvd2luZyBETUEgKi8KKwlJREVfSEZMQUdfTk9fQVVUT0RNQQkJPSAoMSA8PCAxNSksCisJLyogaG9zdCBpcyBDUzU1MTAvQ1M1NTIwICovCisJSURFX0hGTEFHX0NTNTUyMAkJPSAoMSA8PCAxNiksCisJLyogbm8gTEJBNDggKi8KKwlJREVfSEZMQUdfTk9fTEJBNDgJCT0gKDEgPDwgMTcpLAorCS8qIG5vIExCQTQ4IERNQSAqLworCUlERV9IRkxBR19OT19MQkE0OF9ETUEJCT0gKDEgPDwgMTgpLAorCS8qIGRhdGEgRklGTyBpcyBjbGVhcmVkIGJ5IGFuIGVycm9yICovCisJSURFX0hGTEFHX0VSUk9SX1NUT1BTX0ZJRk8JPSAoMSA8PCAxOSksCisJLyogc2VyaWFsaXplIHBvcnRzICovCisJSURFX0hGTEFHX1NFUklBTElaRQkJPSAoMSA8PCAyMCksCisJLyogdXNlIGxlZ2FjeSBJUlFzICovCisJSURFX0hGTEFHX0xFR0FDWV9JUlFTCQk9ICgxIDw8IDIxKSwKKwkvKiBmb3JjZSB1c2Ugb2YgbGVnYWN5IElSUXMgKi8KKwlJREVfSEZMQUdfRk9SQ0VfTEVHQUNZX0lSUVMJPSAoMSA8PCAyMiksCisJLyogbGltaXQgTEJBNDggcmVxdWVzdHMgdG8gMjU2IHNlY3RvcnMgKi8KKwlJREVfSEZMQUdfUlFTSVpFXzI1NgkJPSAoMSA8PCAyMyksCisJLyogdXNlIDMyLWJpdCBJL08gb3BzICovCisJSURFX0hGTEFHX0lPXzMyQklUCQk9ICgxIDw8IDI0KSwKKwkvKiB1bm1hc2sgSVJRcyAqLworCUlERV9IRkxBR19VTk1BU0tfSVJRUwkJPSAoMSA8PCAyNSksCiB9OwogCi10eXBlZGVmIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zIHsKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRAorIyBkZWZpbmUgSURFX0hGTEFHX09GRl9CT0FSRAlJREVfSEZMQUdfQk9PVEFCTEUKKyNlbHNlCisjIGRlZmluZSBJREVfSEZMQUdfT0ZGX0JPQVJECTAKKyNlbmRpZgorCitzdHJ1Y3QgaWRlX3BvcnRfaW5mbyB7CiAJY2hhcgkJCSpuYW1lOwotCWludAkJCSgqaW5pdF9zZXR1cCkoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MgKik7Ci0Jdm9pZAkJCSgqaW5pdF9zZXR1cF9kbWEpKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBpZGVfcGNpX2RldmljZV9zICosIGlkZV9od2lmX3QgKik7CiAJdW5zaWduZWQgaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKiwgY29uc3QgY2hhciAqKTsKIAl2b2lkCQkJKCppbml0X2lvcHMpKGlkZV9od2lmX3QgKik7CiAJdm9pZCAgICAgICAgICAgICAgICAgICAgKCppbml0X2h3aWYpKGlkZV9od2lmX3QgKik7CiAJdm9pZAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwgdW5zaWduZWQgbG9uZyk7CiAJdm9pZAkJCSgqZml4dXApKGlkZV9od2lmX3QgKik7Ci0JdTgJCQlhdXRvZG1hOwogCWlkZV9wY2lfZW5hYmxlYml0X3QJZW5hYmxlYml0c1syXTsKLQl1OAkJCWJvb3RhYmxlOworCWh3aWZfY2hpcHNldF90CQljaGlwc2V0OwogCXVuc2lnbmVkIGludAkJZXh0cmE7Ci0Jc3RydWN0IGlkZV9wY2lfZGV2aWNlX3MJKm5leHQ7Ci0JdTE2CQkJaG9zdF9mbGFnczsKKwl1MzIJCQlob3N0X2ZsYWdzOwogCXU4CQkJcGlvX21hc2s7CisJdTgJCQlzd2RtYV9tYXNrOworCXU4CQkJbXdkbWFfbWFzazsKIAl1OAkJCXVkbWFfbWFzazsKLX0gaWRlX3BjaV9kZXZpY2VfdDsKK307CiAKLWV4dGVybiBpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiwgaWRlX3BjaV9kZXZpY2VfdCAqKTsKLWV4dGVybiBpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBwY2lfZGV2ICosIGlkZV9wY2lfZGV2aWNlX3QgKik7CitpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKiwgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gKik7CitpbnQgaWRlX3NldHVwX3BjaV9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICosIHN0cnVjdCBwY2lfZGV2ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwogCiB2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB2b2lkIGlkZV9pbml0X3NnX2NtZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKQEAgLTEzNjMsOCArMTMyOCw3IEBACiAKIHZvaWQgaWRlX3VuZGVjb2RlZF9zbGF2ZShpZGVfaHdpZl90ICopOwogCi1pbnQgcHJvYmVfaHdpZl9pbml0X3dpdGhfZml4dXAoaWRlX2h3aWZfdCAqLCB2b2lkICgqKShpZGVfaHdpZl90ICopKTsKLWV4dGVybiBpbnQgcHJvYmVfaHdpZl9pbml0KGlkZV9od2lmX3QgKik7CitpbnQgaWRlX2RldmljZV9hZGQodTggaWR4WzRdKTsKIAogc3RhdGljIGlubGluZSB2b2lkICppZGVfZ2V0X2h3aWZkYXRhIChpZGVfaHdpZl90ICogaHdpZikKIHsKQEAgLTE0NTQsNCArMTQxOCwxMSBAQAogCXJldHVybiBkZXYgPyBwY2lidXNfdG9fbm9kZShkZXYtPmJ1cykgOiAtMTsKIH0KIAorc3RhdGljIGlubGluZSBpZGVfZHJpdmVfdCAqaWRlX2dldF9wYWlyZWRfZHJpdmUoaWRlX2RyaXZlX3QgKmRyaXZlKQoreworCWlkZV9od2lmX3QgKmh3aWYJPSBIV0lGKGRyaXZlKTsKKworCXJldHVybiAmaHdpZi0+ZHJpdmVzWyhkcml2ZS0+ZG4gXiAxKSAmIDFdOworfQorCiAjZW5kaWYgLyogX0lERV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCBkNGIyZjFjLi5jYWUzNWI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTY3LDkgKzY3LDYgQEAKIAkucG9zaXhfdGltZXJzCSA9IExJU1RfSEVBRF9JTklUKHNpZy5wb3NpeF90aW1lcnMpLAkJXAogCS5jcHVfdGltZXJzCT0gSU5JVF9DUFVfVElNRVJTKHNpZy5jcHVfdGltZXJzKSwJCVwKIAkucmxpbQkJPSBJTklUX1JMSU1JVFMsCQkJCQlcCi0JLnBncnAJCT0gMCwJCQkJCQlcCi0JLnR0eV9vbGRfcGdycCAgID0gTlVMTCwJCQkJCQlcCi0JeyAuX19zZXNzaW9uICAgICAgPSAwfSwJCQkJCQlcCiB9CiAKIGV4dGVybiBzdHJ1Y3QgbnNwcm94eSBpbml0X25zcHJveHk7CkBAIC05NCwxNSArOTEsMTggQEAKIAogI2RlZmluZSBJTklUX1NUUlVDVF9QSUQgewkJCQkJCVwKIAkuY291bnQgCQk9IEFUT01JQ19JTklUKDEpLAkJCQlcCi0JLm5yCQk9IDAsIAkJCQkJCVwKLQkvKiBEb24ndCBwdXQgdGhpcyBzdHJ1Y3QgcGlkIGluIHBpZF9oYXNoICovCQkJXAotCS5waWRfY2hhaW4JPSB7IC5uZXh0ID0gTlVMTCwgLnBwcmV2ID0gTlVMTCB9LAkJXAogCS50YXNrcwkJPSB7CQkJCQkJXAogCQl7IC5maXJzdCA9ICZpbml0X3Rhc2sucGlkc1tQSURUWVBFX1BJRF0ubm9kZSB9LAkJXAogCQl7IC5maXJzdCA9ICZpbml0X3Rhc2sucGlkc1tQSURUWVBFX1BHSURdLm5vZGUgfSwJXAogCQl7IC5maXJzdCA9ICZpbml0X3Rhc2sucGlkc1tQSURUWVBFX1NJRF0ubm9kZSB9LAkJXAogCX0sCQkJCQkJCQlcCiAJLnJjdQkJPSBSQ1VfSEVBRF9JTklULAkJCQlcCisJLmxldmVsCQk9IDAsCQkJCQkJXAorCS5udW1iZXJzCT0geyB7CQkJCQkJXAorCQkubnIJCT0gMCwJCQkJCVwKKwkJLm5zCQk9ICZpbml0X3BpZF9ucywJCQkJXAorCQkucGlkX2NoYWluCT0geyAubmV4dCA9IE5VTEwsIC5wcHJldiA9IE5VTEwgfSwJXAorCX0sIH0JCQkJCQkJCVwKIH0KIAogI2RlZmluZSBJTklUX1BJRF9MSU5LKHR5cGUpIAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGYzMGRhNmYuLjYyMjY4OTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTk4LDYgKzk4LDcgQEAKICNkZWZpbmUgRVZfUFdSCQkJMHgxNgogI2RlZmluZSBFVl9GRl9TVEFUVVMJCTB4MTcKICNkZWZpbmUgRVZfTUFYCQkJMHgxZgorI2RlZmluZSBFVl9DTlQJCQkoRVZfTUFYKzEpCiAKIC8qCiAgKiBTeW5jaHJvbml6YXRpb24gZXZlbnRzLgpAQCAtNTY3LDYgKzU2OCw3IEBACiAvKiBXZSBhdm9pZCBsb3cgY29tbW9uIGtleXMgaW4gbW9kdWxlIGFsaWFzZXMgc28gdGhleSBkb24ndCBnZXQgaHVnZS4gKi8KICNkZWZpbmUgS0VZX01JTl9JTlRFUkVTVElORwlLRVlfTVVURQogI2RlZmluZSBLRVlfTUFYCQkJMHgxZmYKKyNkZWZpbmUgS0VZX0NOVAkJCShLRVlfTUFYKzEpCiAKIC8qCiAgKiBSZWxhdGl2ZSBheGVzCkBAIC01ODMsNiArNTg1LDcgQEAKICNkZWZpbmUgUkVMX1dIRUVMCQkweDA4CiAjZGVmaW5lIFJFTF9NSVNDCQkweDA5CiAjZGVmaW5lIFJFTF9NQVgJCQkweDBmCisjZGVmaW5lIFJFTF9DTlQJCQkoUkVMX01BWCsxKQogCiAvKgogICogQWJzb2x1dGUgYXhlcwpAQCAtNjE1LDYgKzYxOCw3IEBACiAjZGVmaW5lIEFCU19WT0xVTUUJCTB4MjAKICNkZWZpbmUgQUJTX01JU0MJCTB4MjgKICNkZWZpbmUgQUJTX01BWAkJCTB4M2YKKyNkZWZpbmUgQUJTX0NOVAkJCShBQlNfTUFYKzEpCiAKIC8qCiAgKiBTd2l0Y2ggZXZlbnRzCkBAIC02MjUsNiArNjI5LDcgQEAKICNkZWZpbmUgU1dfSEVBRFBIT05FX0lOU0VSVAkweDAyICAvKiBzZXQgPSBpbnNlcnRlZCAqLwogI2RlZmluZSBTV19SQURJTwkJMHgwMyAgLyogc2V0ID0gcmFkaW8gZW5hYmxlZCAqLwogI2RlZmluZSBTV19NQVgJCQkweDBmCisjZGVmaW5lIFNXX0NOVAkJCShTV19NQVgrMSkKIAogLyoKICAqIE1pc2MgZXZlbnRzCkBAIC02MzYsNiArNjQxLDcgQEAKICNkZWZpbmUgTVNDX1JBVwkJCTB4MDMKICNkZWZpbmUgTVNDX1NDQU4JCTB4MDQKICNkZWZpbmUgTVNDX01BWAkJCTB4MDcKKyNkZWZpbmUgTVNDX0NOVAkJCShNU0NfTUFYKzEpCiAKIC8qCiAgKiBMRURzCkBAIC02NTMsNiArNjU5LDcgQEAKICNkZWZpbmUgTEVEX01BSUwJCTB4MDkKICNkZWZpbmUgTEVEX0NIQVJHSU5HCQkweDBhCiAjZGVmaW5lIExFRF9NQVgJCQkweDBmCisjZGVmaW5lIExFRF9DTlQJCQkoTEVEX01BWCsxKQogCiAvKgogICogQXV0b3JlcGVhdCB2YWx1ZXMKQEAgLTY3MCw2ICs2NzcsNyBAQAogI2RlZmluZSBTTkRfQkVMTAkJMHgwMQogI2RlZmluZSBTTkRfVE9ORQkJMHgwMgogI2RlZmluZSBTTkRfTUFYCQkJMHgwNworI2RlZmluZSBTTkRfQ05UCQkJKFNORF9NQVgrMSkKIAogLyoKICAqIElEcy4KQEAgLTkyMCw2ICs5MjgsNyBAQAogI2RlZmluZSBGRl9BVVRPQ0VOVEVSCTB4NjEKIAogI2RlZmluZSBGRl9NQVgJCTB4N2YKKyNkZWZpbmUgRkZfQ05UCQkoRkZfTUFYKzEpCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKQEAgLTkzMiwxMCArOTQxLDYgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCi0jZGVmaW5lIE5CSVRTKHgpICgoKHgpL0JJVFNfUEVSX0xPTkcpKzEpCi0jZGVmaW5lIEJJVCh4KQkoMVVMPDwoKHgpJUJJVFNfUEVSX0xPTkcpKQotI2RlZmluZSBMT05HKHgpICgoeCkvQklUU19QRVJfTE9ORykKLQogLyoqCiAgKiBzdHJ1Y3QgaW5wdXRfZGV2IC0gcmVwcmVzZW50cyBhbiBpbnB1dCBkZXZpY2UKICAqIEBuYW1lOiBuYW1lIG9mIHRoZSBkZXZpY2UKQEAgLTEwMDUsMjggKzEwMTAsMzAgQEAKICAqIEBnb2luZ19hd2F5OiBtYXJrcyBkZXZpY2VzIHRoYXQgYXJlIGluIGEgbWlkZGxlIG9mIHVucmVnaXN0ZXJpbmcgYW5kCiAgKgljYXVzZXMgaW5wdXRfb3Blbl9kZXZpY2UqKCkgZmFpbCB3aXRoIC1FTk9ERVYuCiAgKiBAZGV2OiBkcml2ZXIgbW9kZWwncyB2aWV3IG9mIHRoaXMgZGV2aWNlCisgKiBAY2RldjogdW5pb24gZm9yIHN0cnVjdCBkZXZpY2UgcG9pbnRlcgogICogQGhfbGlzdDogbGlzdCBvZiBpbnB1dCBoYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlLiBXaGVuCiAgKglhY2Nlc3NpbmcgdGhlIGxpc3QgZGV2LT5tdXRleCBtdXN0IGJlIGhlbGQKICAqIEBub2RlOiB1c2VkIHRvIHBsYWNlIHRoZSBkZXZpY2Ugb250byBpbnB1dF9kZXZfbGlzdAogICovCiBzdHJ1Y3QgaW5wdXRfZGV2IHsKLQorCS8qIHByaXZhdGU6ICovCiAJdm9pZCAqcHJpdmF0ZTsJLyogZG8gbm90IHVzZSAqLworCS8qIHB1YmxpYzogKi8KIAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJY29uc3QgY2hhciAqcGh5czsKIAljb25zdCBjaGFyICp1bmlxOwogCXN0cnVjdCBpbnB1dF9pZCBpZDsKIAotCXVuc2lnbmVkIGxvbmcgZXZiaXRbTkJJVFMoRVZfTUFYKV07Ci0JdW5zaWduZWQgbG9uZyBrZXliaXRbTkJJVFMoS0VZX01BWCldOwotCXVuc2lnbmVkIGxvbmcgcmVsYml0W05CSVRTKFJFTF9NQVgpXTsKLQl1bnNpZ25lZCBsb25nIGFic2JpdFtOQklUUyhBQlNfTUFYKV07Ci0JdW5zaWduZWQgbG9uZyBtc2NiaXRbTkJJVFMoTVNDX01BWCldOwotCXVuc2lnbmVkIGxvbmcgbGVkYml0W05CSVRTKExFRF9NQVgpXTsKLQl1bnNpZ25lZCBsb25nIHNuZGJpdFtOQklUUyhTTkRfTUFYKV07Ci0JdW5zaWduZWQgbG9uZyBmZmJpdFtOQklUUyhGRl9NQVgpXTsKLQl1bnNpZ25lZCBsb25nIHN3Yml0W05CSVRTKFNXX01BWCldOworCXVuc2lnbmVkIGxvbmcgZXZiaXRbQklUU19UT19MT05HUyhFVl9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIGtleWJpdFtCSVRTX1RPX0xPTkdTKEtFWV9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIHJlbGJpdFtCSVRTX1RPX0xPTkdTKFJFTF9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIGFic2JpdFtCSVRTX1RPX0xPTkdTKEFCU19DTlQpXTsKKwl1bnNpZ25lZCBsb25nIG1zY2JpdFtCSVRTX1RPX0xPTkdTKE1TQ19DTlQpXTsKKwl1bnNpZ25lZCBsb25nIGxlZGJpdFtCSVRTX1RPX0xPTkdTKExFRF9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIHNuZGJpdFtCSVRTX1RPX0xPTkdTKFNORF9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIGZmYml0W0JJVFNfVE9fTE9OR1MoRkZfQ05UKV07CisJdW5zaWduZWQgbG9uZyBzd2JpdFtCSVRTX1RPX0xPTkdTKFNXX0NOVCldOwogCiAJdW5zaWduZWQgaW50IGtleWNvZGVtYXg7CiAJdW5zaWduZWQgaW50IGtleWNvZGVzaXplOwpAQCAtMTA0NCwxMCArMTA1MSwxMCBAQAogCWludCBhYnNbQUJTX01BWCArIDFdOwogCWludCByZXBbUkVQX01BWCArIDFdOwogCi0JdW5zaWduZWQgbG9uZyBrZXlbTkJJVFMoS0VZX01BWCldOwotCXVuc2lnbmVkIGxvbmcgbGVkW05CSVRTKExFRF9NQVgpXTsKLQl1bnNpZ25lZCBsb25nIHNuZFtOQklUUyhTTkRfTUFYKV07Ci0JdW5zaWduZWQgbG9uZyBzd1tOQklUUyhTV19NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGtleVtCSVRTX1RPX0xPTkdTKEtFWV9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIGxlZFtCSVRTX1RPX0xPTkdTKExFRF9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIHNuZFtCSVRTX1RPX0xPTkdTKFNORF9DTlQpXTsKKwl1bnNpZ25lZCBsb25nIHN3W0JJVFNfVE9fTE9OR1MoU1dfQ05UKV07CiAKIAlpbnQgYWJzbWF4W0FCU19NQVggKyAxXTsKIAlpbnQgYWJzbWluW0FCU19NQVggKyAxXTsKQEAgLTEyOTEsNyArMTI5OCw3IEBACiAJZGV2LT5hYnNmdXp6W2F4aXNdID0gZnV6ejsKIAlkZXYtPmFic2ZsYXRbYXhpc10gPSBmbGF0OwogCi0JZGV2LT5hYnNiaXRbTE9ORyhheGlzKV0gfD0gQklUKGF4aXMpOworCWRldi0+YWJzYml0W0JJVF9XT1JEKGF4aXMpXSB8PSBCSVRfTUFTSyhheGlzKTsKIH0KIAogZXh0ZXJuIHN0cnVjdCBjbGFzcyBpbnB1dF9jbGFzczsKQEAgLTEzMzIsNyArMTMzOSw3IEBACiAKIAl2b2lkICpwcml2YXRlOwogCi0JdW5zaWduZWQgbG9uZyBmZmJpdFtOQklUUyhGRl9NQVgpXTsKKwl1bnNpZ25lZCBsb25nIGZmYml0W0JJVFNfVE9fTE9OR1MoRkZfQ05UKV07CiAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBjLmggYi9pbmNsdWRlL2xpbnV4L2lwYy5oCmluZGV4IGVlMTExODMuLjQwODY5NmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcGMuaApAQCAtODksNiArODksNyBAQAogewogCXNwaW5sb2NrX3QJbG9jazsKIAlpbnQJCWRlbGV0ZWQ7CisJaW50CQlpZDsKIAlrZXlfdAkJa2V5OwogCXVpZF90CQl1aWQ7CiAJZ2lkX3QJCWdpZDsKQEAgLTExMCw2ICsxMTEsOCBAQAogCWludAkJbXNnX2N0bG1heDsKIAlpbnQJCW1zZ19jdGxtbmI7CiAJaW50CQltc2dfY3RsbW5pOworCWF0b21pY190CW1zZ19ieXRlczsKKwlhdG9taWNfdAltc2dfaGRyczsKIAogCXNpemVfdAkJc2htX2N0bG1heDsKIAlzaXplX3QJCXNobV9jdGxhbGw7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwbWkuaCBiL2luY2x1ZGUvbGludXgvaXBtaS5oCmluZGV4IDdhOWRiMzkwLi5jNWJkMjhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWkuaApAQCAtMzY1LDYgKzM2NSwxNiBAQAogCQkJICAgICBpbnQgICAgICAgICAgICAgICAgICBwcmlvcml0eSk7CiAKIC8qCisgKiBQb2xsIHRoZSBJUE1JIGludGVyZmFjZSBmb3IgdGhlIHVzZXIuICBUaGlzIGNhdXNlcyB0aGUgSVBNSSBjb2RlIHRvCisgKiBkbyBhbiBpbW1lZGlhdGUgY2hlY2sgZm9yIGluZm9ybWF0aW9uIGZyb20gdGhlIGRyaXZlciBhbmQgaGFuZGxlCisgKiBhbnl0aGluZyB0aGF0IGlzIGltbWVkaWF0ZWx5IHBlbmRpbmcuICBUaGlzIHdpbGwgbm90IGJsb2NrIGluIGFueQorICogd2F5LiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IG5lZWQgdG8gaW1wbGVtZW50IHBvbGxpbmcgZnJvbSB0aGUgdXNlcgorICogZm9yIHRoaW5ncyBsaWtlIG1vZGlmeWluZyB0aGUgd2F0Y2hkb2cgdGltZW91dCB3aGVuIGEgcGFuaWMgb2NjdXJzCisgKiBvciBkaXNhYmxpbmcgdGhlIHdhdGNoZG9nIHRpbWVyIG9uIGEgcmVib290LgorICovCit2b2lkIGlwbWlfcG9sbF9pbnRlcmZhY2UoaXBtaV91c2VyX3QgdXNlcik7CisKKy8qCiAgKiBXaGVuIGNvbW1hbmRzIGNvbWUgaW4gdG8gdGhlIFNNUywgdGhlIHVzZXIgY2FuIHJlZ2lzdGVyIHRvIHJlY2VpdmUKICAqIHRoZW0uICBPbmx5IG9uZSB1c2VyIGNhbiBiZSBsaXN0ZW5pbmcgb24gYSBzcGVjaWZpYyBuZXRmbi9jbWQvY2hhbiB0dXBsZQogICogYXQgYSB0aW1lLCB5b3Ugd2lsbCBnZXQgYW4gRUJVU1kgZXJyb3IgaWYgdGhlIGNvbW1hbmQgaXMgYWxyZWFkeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oIGIvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oCmluZGV4IGMwNjMzMTAuLjU2YWU0MzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKQEAgLTExOCw3ICsxMTgsNyBAQAogCS8qIEVuYWJsZS9kaXNhYmxlIGZpcm13YXJlIG1haW50ZW5hbmNlIG1vZGUuICBOb3RlIHRoYXQgdGhpcwogCSAgIGlzICpub3QqIHRoZSBtb2RlcyBkZWZpbmVkLCB0aGlzIGlzIHNpbXBseSBhbiBvbi9vZmYKIAkgICBzZXR0aW5nLiAgVGhlIG1lc3NhZ2UgaGFuZGxlciBkb2VzIHRoZSBtb2RlIGhhbmRsaW5nLiAgTm90ZQotCSAgIHRoYXQgdGhpcyBpcyBjYWxsZWQgZnJvbSBpbnRlcnVwdCBjb250ZXh0LCBzbyBpdCBjYW5ub3QKKwkgICB0aGF0IHRoaXMgaXMgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHNvIGl0IGNhbm5vdAogCSAgIGJsb2NrLiAqLwogCXZvaWQgKCpzZXRfbWFpbnRlbmFuY2VfbW9kZSkodm9pZCAqc2VuZF9pbmZvLCBpbnQgZW5hYmxlKTsKIApAQCAtMTQ4LDI2ICsxNDgsNDYgQEAKIAogLyogVGFrZSBhIHBvaW50ZXIgdG8gYSByYXcgZGF0YSBidWZmZXIgYW5kIGEgbGVuZ3RoIGFuZCBleHRyYWN0IGRldmljZQogICAgaWQgaW5mb3JtYXRpb24gZnJvbSBpdC4gIFRoZSBmaXJzdCBieXRlIG9mIGRhdGEgbXVzdCBwb2ludCB0byB0aGUKLSAgIGJ5dGUgZnJvbSB0aGUgZ2V0IGRldmljZSBpZCByZXNwb25zZSBhZnRlciB0aGUgY29tcGxldGlvbiBjb2RlLgotICAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgbWFraW5nIHN1cmUgdGhlIGxlbmd0aCBpcyBhdCBsZWFzdAotICAgMTEgYW5kIHRoZSBjb21tYW5kIGNvbXBsZXRlZCB3aXRob3V0IGVycm9yLiAqLwotc3RhdGljIGlubGluZSB2b2lkIGlwbWlfZGVtYW5nbGVfZGV2aWNlX2lkKHVuc2lnbmVkIGNoYXIgKmRhdGEsCi0JCQkJCSAgIHVuc2lnbmVkIGludCAgZGF0YV9sZW4sCi0JCQkJCSAgIHN0cnVjdCBpcG1pX2RldmljZV9pZCAqaWQpCisgICBuZXRmbiA8PCAyLCB0aGUgZGF0YSBzaG91bGQgYmUgb2YgdGhlIGZvcm1hdDoKKyAgICAgIG5ldGZuIDw8IDIsIGNtZCwgY29tcGxldGlvbiBjb2RlLCBkYXRhCisgICBhcyBub3JtYWxseSBjb21lcyBmcm9tIGEgZGV2aWNlIGludGVyZmFjZS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlwbWlfZGVtYW5nbGVfZGV2aWNlX2lkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEsCisJCQkJCSAgdW5zaWduZWQgaW50IGRhdGFfbGVuLAorCQkJCQkgIHN0cnVjdCBpcG1pX2RldmljZV9pZCAqaWQpCiB7CisJaWYgKGRhdGFfbGVuIDwgOSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFbMF0gIT0gSVBNSV9ORVRGTl9BUFBfUkVTUE9OU0UgPDwgMiB8fAorCSAgICBkYXRhWzFdICE9IElQTUlfR0VUX0RFVklDRV9JRF9DTUQpCisJCS8qIFN0cmFuZ2UsIGRpZG4ndCBnZXQgdGhlIHJlc3BvbnNlIHdlIGV4cGVjdGVkLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoZGF0YVsyXSAhPSAwKQorCQkvKiBUaGF0J3Mgb2RkLCBpdCBzaG91bGRuJ3QgYmUgYWJsZSB0byBmYWlsLiAqLworCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEgKz0gMzsKKwlkYXRhX2xlbiAtPSAzOwogCWlkLT5kZXZpY2VfaWQgPSBkYXRhWzBdOwogCWlkLT5kZXZpY2VfcmV2aXNpb24gPSBkYXRhWzFdOwogCWlkLT5maXJtd2FyZV9yZXZpc2lvbl8xID0gZGF0YVsyXTsKIAlpZC0+ZmlybXdhcmVfcmV2aXNpb25fMiA9IGRhdGFbM107CiAJaWQtPmlwbWlfdmVyc2lvbiA9IGRhdGFbNF07CiAJaWQtPmFkZGl0aW9uYWxfZGV2aWNlX3N1cHBvcnQgPSBkYXRhWzVdOwotCWlkLT5tYW51ZmFjdHVyZXJfaWQgPSBkYXRhWzZdIHwgKGRhdGFbN10gPDwgOCkgfCAoZGF0YVs4XSA8PCAxNik7Ci0JaWQtPnByb2R1Y3RfaWQgPSBkYXRhWzldIHwgKGRhdGFbMTBdIDw8IDgpOworCWlmIChkYXRhX2xlbiA+PSA2KSB7CisJCWlkLT5tYW51ZmFjdHVyZXJfaWQgPSAoZGF0YVs2XSB8IChkYXRhWzddIDw8IDgpIHwKKwkJCQkgICAgICAgKGRhdGFbOF0gPDwgMTYpKTsKKwkJaWQtPnByb2R1Y3RfaWQgPSBkYXRhWzldIHwgKGRhdGFbMTBdIDw8IDgpOworCX0gZWxzZSB7CisJCWlkLT5tYW51ZmFjdHVyZXJfaWQgPSAwOworCQlpZC0+cHJvZHVjdF9pZCA9IDA7CisJfQogCWlmIChkYXRhX2xlbiA+PSAxNSkgewogCQltZW1jcHkoaWQtPmF1eF9maXJtd2FyZV9yZXZpc2lvbiwgZGF0YSsxMSwgNCk7CiAJCWlkLT5hdXhfZmlybXdhcmVfcmV2aXNpb25fc2V0ID0gMTsKIAl9IGVsc2UKIAkJaWQtPmF1eF9maXJtd2FyZV9yZXZpc2lvbl9zZXQgPSAwOworCisJcmV0dXJuIDA7CiB9CiAKIC8qIEFkZCBhIGxvdy1sZXZlbCBpbnRlcmZhY2UgdG8gdGhlIElQTUkgZHJpdmVyLiAgTm90ZSB0aGF0IGlmIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9qYmQuaCBiL2luY2x1ZGUvbGludXgvamJkLmgKaW5kZXggNzJmNTIyMy4uMTZlN2VkOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2piZC5oCkBAIC01OCw3ICs1OCw3IEBACiAgKiBDT05GSUdfSkJEX0RFQlVHIGlzIG9uLgogICovCiAjZGVmaW5lIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcKLWV4dGVybiBpbnQgam91cm5hbF9lbmFibGVfZGVidWc7CitleHRlcm4gdTggam91cm5hbF9lbmFibGVfZGVidWc7CiAKICNkZWZpbmUgamJkX2RlYnVnKG4sIGYsIGEuLi4pCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKQEAgLTcyLDE0ICs3MiwxNSBAQAogI2RlZmluZSBqYmRfZGVidWcoZiwgYS4uLikJLyoqLwogI2VuZGlmCiAKLWV4dGVybiB2b2lkICogX19qYmRfa21hbGxvYyAoY29uc3QgY2hhciAqd2hlcmUsIHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IHJldHJ5KTsKLWV4dGVybiB2b2lkICogamJkX3NsYWJfYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKLWV4dGVybiB2b2lkIGpiZF9zbGFiX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgaW5saW5lIHZvaWQgKmpiZF9hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgZ2V0X29yZGVyKHNpemUpKTsKK30KIAotI2RlZmluZSBqYmRfa21hbGxvYyhzaXplLCBmbGFncykgXAotCV9famJkX2ttYWxsb2MoX19GVU5DVElPTl9fLCAoc2l6ZSksIChmbGFncyksIGpvdXJuYWxfb29tX3JldHJ5KQotI2RlZmluZSBqYmRfcmVwX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIFwKLQlfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCAxKQorc3RhdGljIGlubGluZSB2b2lkIGpiZF9mcmVlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZylwdHIsIGdldF9vcmRlcihzaXplKSk7Cit9OwogCiAjZGVmaW5lIEpGU19NSU5fSk9VUk5BTF9CTE9DS1MgMTAyNAogCkBAIC0yNDcsMTcgKzI0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jZGVmaW5lIEpCRF9BU1NFUlRJT05TCi0jaWZkZWYgSkJEX0FTU0VSVElPTlMKLSNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQkJCQkJCVwKLWRvIHsJCQkJCQkJCQlcCi0JaWYgKCEoYXNzZXJ0KSkgewkJCQkJCVwKLQkJcHJpbnRrIChLRVJOX0VNRVJHCQkJCQlcCi0JCQkiQXNzZXJ0aW9uIGZhaWx1cmUgaW4gJXMoKSBhdCAlczolZDogXCIlc1wiXG4iLAlcCi0JCQlfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXywgIyBhc3NlcnQpOwlcCi0JCUJVRygpOwkJCQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKKyNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQlCVUdfT04oIShhc3NlcnQpKQogCiAjaWYgZGVmaW5lZChDT05GSUdfQlVGRkVSX0RFQlVHKQogdm9pZCBidWZmZXJfYXNzZXJ0aW9uX2ZhaWx1cmUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CkBAIC0yNzMsMTAgKzI2NCw2IEBACiAjZGVmaW5lIEpfQVNTRVJUX0pIKGpoLCBleHByKQlKX0FTU0VSVChleHByKQogI2VuZGlmCiAKLSNlbHNlCi0jZGVmaW5lIEpfQVNTRVJUKGFzc2VydCkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCQkvKiBKQkRfQVNTRVJUSU9OUyAqLwotCiAjaWYgZGVmaW5lZChKQkRfUEFSQU5PSURfSU9GQUlMKQogI2RlZmluZSBKX0VYUEVDVChleHByLCB3aHkuLi4pCQlKX0FTU0VSVChleHByKQogI2RlZmluZSBKX0VYUEVDVF9CSChiaCwgZXhwciwgd2h5Li4uKQlKX0FTU0VSVF9CSChiaCwgZXhwcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkMi5oIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKaW5kZXggMjYwZDZkNy4uMDZlZjExNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qYmQyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQyLmgKQEAgLTEzLDggKzEzLDggQEAKICAqIGZpbGVzeXN0ZW0gam91cm5hbGluZyBzdXBwb3J0LgogICovCiAKLSNpZm5kZWYgX0xJTlVYX0pCRF9ICi0jZGVmaW5lIF9MSU5VWF9KQkRfSAorI2lmbmRlZiBfTElOVVhfSkJEMl9ICisjZGVmaW5lIF9MSU5VWF9KQkQyX0gKIAogLyogQWxsb3cgdGhpcyBmaWxlIHRvIGJlIGluY2x1ZGVkIGRpcmVjdGx5IGludG8gZTJmc3Byb2dzICovCiAjaWZuZGVmIF9fS0VSTkVMX18KQEAgLTM3LDI2ICszNywyNiBAQAogI2RlZmluZSBqb3VybmFsX29vbV9yZXRyeSAxCiAKIC8qCi0gKiBEZWZpbmUgSkJEX1BBUkFOSU9EX0lPRkFJTCB0byBjYXVzZSBhIGtlcm5lbCBCVUcoKSBpZiBleHQzIGZpbmRzCisgKiBEZWZpbmUgSkJEMl9QQVJBTklPRF9JT0ZBSUwgdG8gY2F1c2UgYSBrZXJuZWwgQlVHKCkgaWYgZXh0NCBmaW5kcwogICogY2VydGFpbiBjbGFzc2VzIG9mIGVycm9yIHdoaWNoIGNhbiBvY2N1ciBkdWUgdG8gZmFpbGVkIElPcy4gIFVuZGVyCi0gKiBub3JtYWwgdXNlIHdlIHdhbnQgZXh0MyB0byBjb250aW51ZSBhZnRlciBzdWNoIGVycm9ycywgYmVjYXVzZQorICogbm9ybWFsIHVzZSB3ZSB3YW50IGV4dDQgdG8gY29udGludWUgYWZ0ZXIgc3VjaCBlcnJvcnMsIGJlY2F1c2UKICAqIGhhcmR3YXJlIF9jYW5fIGZhaWwsIGJ1dCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHdoZW4gcnVubmluZyB0ZXN0cyBvbgogICoga25vd24tZ29vZCBoYXJkd2FyZSB3ZSBtYXkgd2FudCB0byB0cmFwIHRoZXNlIGVycm9ycy4KICAqLwotI3VuZGVmIEpCRF9QQVJBTk9JRF9JT0ZBSUwKKyN1bmRlZiBKQkQyX1BBUkFOT0lEX0lPRkFJTAogCiAvKgogICogVGhlIGRlZmF1bHQgbWF4aW11bSBjb21taXQgYWdlLCBpbiBzZWNvbmRzLgogICovCi0jZGVmaW5lIEpCRF9ERUZBVUxUX01BWF9DT01NSVRfQUdFIDUKKyNkZWZpbmUgSkJEMl9ERUZBVUxUX01BWF9DT01NSVRfQUdFIDUKIAogI2lmZGVmIENPTkZJR19KQkQyX0RFQlVHCiAvKgotICogRGVmaW5lIEpCRF9FWFBFTlNJVkVfQ0hFQ0tJTkcgdG8gZW5hYmxlIG1vcmUgZXhwZW5zaXZlIGludGVybmFsCisgKiBEZWZpbmUgSkJEMl9FWFBFTlNJVkVfQ0hFQ0tJTkcgdG8gZW5hYmxlIG1vcmUgZXhwZW5zaXZlIGludGVybmFsCiAgKiBjb25zaXN0ZW5jeSBjaGVja3MuICBCeSBkZWZhdWx0IHdlIGRvbid0IGRvIHRoaXMgdW5sZXNzCiAgKiBDT05GSUdfSkJEMl9ERUJVRyBpcyBvbi4KICAqLwotI2RlZmluZSBKQkRfRVhQRU5TSVZFX0NIRUNLSU5HCisjZGVmaW5lIEpCRDJfRVhQRU5TSVZFX0NIRUNLSU5HCiBleHRlcm4gdTggamJkMl9qb3VybmFsX2VuYWJsZV9kZWJ1ZzsKIAogI2RlZmluZSBqYmRfZGVidWcobiwgZiwgYS4uLikJCQkJCQlcCkBAIC03MSwxNCArNzEsMTUgQEAKICNkZWZpbmUgamJkX2RlYnVnKGYsIGEuLi4pCS8qKi8KICNlbmRpZgogCi1leHRlcm4gdm9pZCAqIF9famJkMl9rbWFsbG9jIChjb25zdCBjaGFyICp3aGVyZSwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgcmV0cnkpOwotZXh0ZXJuIHZvaWQgKiBqYmQyX3NsYWJfYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKLWV4dGVybiB2b2lkIGpiZDJfc2xhYl9mcmVlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworc3RhdGljIGlubGluZSB2b2lkICpqYmQyX2FsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKK3sKKwlyZXR1cm4gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2VzKGZsYWdzLCBnZXRfb3JkZXIoc2l6ZSkpOworfQogCi0jZGVmaW5lIGpiZF9rbWFsbG9jKHNpemUsIGZsYWdzKSBcCi0JX19qYmQyX2ttYWxsb2MoX19GVU5DVElPTl9fLCAoc2l6ZSksIChmbGFncyksIGpvdXJuYWxfb29tX3JldHJ5KQotI2RlZmluZSBqYmRfcmVwX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIFwKLQlfX2piZDJfa21hbGxvYyhfX0ZVTkNUSU9OX18sIChzaXplKSwgKGZsYWdzKSwgMSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBqYmQyX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKK3sKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXB0ciwgZ2V0X29yZGVyKHNpemUpKTsKK307CiAKICNkZWZpbmUgSkJEMl9NSU5fSk9VUk5BTF9CTE9DS1MgMTAyNAogCkBAIC0xNjIsOCArMTYzLDggQEAKIAlfX2JlMzIJCXRfYmxvY2tucl9oaWdoOyAvKiBtb3N0LXNpZ25pZmljYW50IGhpZ2ggMzJiaXRzLiAqLwogfSBqb3VybmFsX2Jsb2NrX3RhZ190OwogCi0jZGVmaW5lIEpCRF9UQUdfU0laRTMyIChvZmZzZXRvZihqb3VybmFsX2Jsb2NrX3RhZ190LCB0X2Jsb2NrbnJfaGlnaCkpCi0jZGVmaW5lIEpCRF9UQUdfU0laRTY0IChzaXplb2Yoam91cm5hbF9ibG9ja190YWdfdCkpCisjZGVmaW5lIEpCRDJfVEFHX1NJWkUzMiAob2Zmc2V0b2Yoam91cm5hbF9ibG9ja190YWdfdCwgdF9ibG9ja25yX2hpZ2gpKQorI2RlZmluZSBKQkQyX1RBR19TSVpFNjQgKHNpemVvZihqb3VybmFsX2Jsb2NrX3RhZ190KSkKIAogLyoKICAqIFRoZSByZXZva2UgZGVzY3JpcHRvcjogdXNlZCBvbiBkaXNrIHRvIGRlc2NyaWJlIGEgc2VyaWVzIG9mIGJsb2NrcyB0bwpAQCAtMjU1LDggKzI1Niw4IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jZGVmaW5lIEpCRF9BU1NFUlRJT05TCi0jaWZkZWYgSkJEX0FTU0VSVElPTlMKKyNkZWZpbmUgSkJEMl9BU1NFUlRJT05TCisjaWZkZWYgSkJEMl9BU1NFUlRJT05TCiAjZGVmaW5lIEpfQVNTRVJUKGFzc2VydCkJCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmICghKGFzc2VydCkpIHsJCQkJCQlcCkBAIC0yODMsOSArMjg0LDkgQEAKIAogI2Vsc2UKICNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYJCS8qIEpCRF9BU1NFUlRJT05TICovCisjZW5kaWYJCS8qIEpCRDJfQVNTRVJUSU9OUyAqLwogCi0jaWYgZGVmaW5lZChKQkRfUEFSQU5PSURfSU9GQUlMKQorI2lmIGRlZmluZWQoSkJEMl9QQVJBTk9JRF9JT0ZBSUwpCiAjZGVmaW5lIEpfRVhQRUNUKGV4cHIsIHdoeS4uLikJCUpfQVNTRVJUKGV4cHIpCiAjZGVmaW5lIEpfRVhQRUNUX0JIKGJoLCBleHByLCB3aHkuLi4pCUpfQVNTRVJUX0JIKGJoLCBleHByKQogI2RlZmluZSBKX0VYUEVDVF9KSChqaCwgZXhwciwgd2h5Li4uKQlKX0FTU0VSVF9KSChqaCwgZXhwcikKQEAgLTk1OSwxMiArOTYwLDEyIEBACiAgKi8KIGV4dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqamJkMl9oYW5kbGVfY2FjaGU7CiAKLXN0YXRpYyBpbmxpbmUgaGFuZGxlX3QgKmpiZF9hbGxvY19oYW5kbGUoZ2ZwX3QgZ2ZwX2ZsYWdzKQorc3RhdGljIGlubGluZSBoYW5kbGVfdCAqamJkMl9hbGxvY19oYW5kbGUoZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGpiZDJfaGFuZGxlX2NhY2hlLCBnZnBfZmxhZ3MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgamJkX2ZyZWVfaGFuZGxlKGhhbmRsZV90ICpoYW5kbGUpCitzdGF0aWMgaW5saW5lIHZvaWQgamJkMl9mcmVlX2hhbmRsZShoYW5kbGVfdCAqaGFuZGxlKQogewogCWttZW1fY2FjaGVfZnJlZShqYmQyX2hhbmRsZV9jYWNoZSwgaGFuZGxlKTsKIH0KQEAgLTExMDMsNCArMTEwNCw0IEBACiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKLSNlbmRpZgkvKiBfTElOVVhfSkJEX0ggKi8KKyNlbmRpZgkvKiBfTElOVVhfSkJEMl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbF9zdGF0LmgKaW5kZXggMTJiZjQ0Zi4uZThmZmNlOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWxfc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsX3N0YXQuaApAQCAtNTMsNyArNTMsOSBAQAogfQogCiBleHRlcm4gdm9pZCBhY2NvdW50X3VzZXJfdGltZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90KTsKK2V4dGVybiB2b2lkIGFjY291bnRfdXNlcl90aW1lX3NjYWxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgY3B1dGltZV90KTsKIGV4dGVybiB2b2lkIGFjY291bnRfc3lzdGVtX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICosIGludCwgY3B1dGltZV90KTsKK2V4dGVybiB2b2lkIGFjY291bnRfc3lzdGVtX3RpbWVfc2NhbGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjcHV0aW1lX3QpOwogZXh0ZXJuIHZvaWQgYWNjb3VudF9zdGVhbF90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBjcHV0aW1lX3QpOwogCiAjZW5kaWYgLyogX0xJTlVYX0tFUk5FTF9TVEFUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V4ZWMuaCBiL2luY2x1ZGUvbGludXgva2V4ZWMuaAppbmRleCBhZDRiODJjLi4yZDljNDQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleGVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXhlYy5oCkBAIC0xODcsNiArMTg3LDggQEAKIGV4dGVybiBzaXplX3Qgdm1jb3JlaW5mb19zaXplOwogZXh0ZXJuIHNpemVfdCB2bWNvcmVpbmZvX21heF9zaXplOwogCitpbnQgX19pbml0IHBhcnNlX2NyYXNoa2VybmVsKGNoYXIgKmNtZGxpbmUsIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXN0ZW1fcmFtLAorCQl1bnNpZ25lZCBsb25nIGxvbmcgKmNyYXNoX3NpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3Jhc2hfYmFzZSk7CiAKICNlbHNlIC8qICFDT05GSUdfS0VYRUMgKi8KIHN0cnVjdCBwdF9yZWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oIGIvaW5jbHVkZS9saW51eC9rZXlib2FyZC5oCmluZGV4IDMzYjVjMmUuLjY1YzJkNzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2V5Ym9hcmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tleWJvYXJkLmgKQEAgLTIzLDEwICsyMywyMSBAQAogI2RlZmluZSBNQVhfTlJfT0ZfVVNFUl9LRVlNQVBTIDI1NiAJLyogc2hvdWxkIGJlIGF0IGxlYXN0IDcgKi8KIAogI2lmZGVmIF9fS0VSTkVMX18KK3N0cnVjdCBub3RpZmllcl9ibG9jazsKIGV4dGVybiBjb25zdCBpbnQgTlJfVFlQRVM7CiBleHRlcm4gY29uc3QgaW50IG1heF92YWxzW107CiBleHRlcm4gdW5zaWduZWQgc2hvcnQgKmtleV9tYXBzW01BWF9OUl9LRVlNQVBTXTsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBwbGFpbl9tYXBbTlJfS0VZU107CisKK3N0cnVjdCBrZXlib2FyZF9ub3RpZmllcl9wYXJhbSB7CisJc3RydWN0IHZjX2RhdGEgKnZjOwkvKiBWQyBvbiB3aGljaCB0aGUga2V5Ym9hcmQgcHJlc3Mgd2FzIGRvbmUgKi8KKwlpbnQgZG93bjsJCS8qIFByZXNzdXJlIG9mIHRoZSBrZXk/ICovCisJaW50IHNoaWZ0OwkJLyogQ3VycmVudCBzaGlmdCBtYXNrICovCisJdW5zaWduZWQgaW50IHZhbHVlOwkvKiBrZXljb2RlLCB1bmljb2RlIHZhbHVlIG9yIGtleXN5bSAqLworfTsKKworZXh0ZXJuIGludCByZWdpc3Rlcl9rZXlib2FyZF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2V4dGVybiBpbnQgdW5yZWdpc3Rlcl9rZXlib2FyZF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKICNlbmRpZgogCiAjZGVmaW5lIE1BWF9OUl9GVU5DCTI1NgkvKiBtYXggbnIgb2Ygc3RyaW5ncyBhc3NpZ25lZCB0byBrZXlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCAzNzdlNmQ0Li5iYzNiNmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTEwMzcsMTggKzEwMzcsNiBAQAogLyoKICAqIHFjIGhlbHBlcnMKICAqLwotc3RhdGljIGlubGluZSBpbnQKLWF0YV9zZ19pc19sYXN0KHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHN0cnVjdCBhdGFfcXVldWVkX2NtZCAqcWMpCi17Ci0JaWYgKHNnID09ICZxYy0+cGFkX3NnZW50KQotCQlyZXR1cm4gMTsKLQlpZiAocWMtPnBhZF9sZW4pCi0JCXJldHVybiAwOwotCWlmIChxYy0+bl9pdGVyID09IHFjLT5uX2VsZW0pCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0dGVybGlzdCAqCiBhdGFfcWNfZmlyc3Rfc2coc3RydWN0IGF0YV9xdWV1ZWRfY21kICpxYykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGlzdC5oIGIvaW5jbHVkZS9saW51eC9saXN0LmgKaW5kZXggYjBjZjAxMzUuLjc1Y2UyY2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC00NzgsOCArNDc4LDcgQEAKIAkJcG9zID0gbiwgbiA9IHBvcy0+bmV4dCkKIAogLyoqCi0gKiBsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3QgYmFja3dhcmRzIHNhZmUgYWdhaW5zdCByZW1vdmFsCi0JCQlvZiBsaXN0IGVudHJ5CisgKiBsaXN0X2Zvcl9lYWNoX3ByZXZfc2FmZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3QgYmFja3dhcmRzIHNhZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkKICAqIEBwb3M6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KICAqIEBuOgkJYW5vdGhlciAmc3RydWN0IGxpc3RfaGVhZCB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKICAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCBmNjI3OWY2Li40YzRkMjM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaApAQCAtMjc2LDYgKzI3NiwxNCBAQAogCQkJCSAobG9jayktPmRlcF9tYXAua2V5LCBzdWIpCiAKIC8qCisgKiBUbyBpbml0aWFsaXplIGEgbG9ja2RlcF9tYXAgc3RhdGljYWxseSB1c2UgdGhpcyBtYWNyby4KKyAqIE5vdGUgdGhhdCBfbmFtZSBtdXN0IG5vdCBiZSBOVUxMLgorICovCisjZGVmaW5lIFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9uYW1lLCBfa2V5KSBcCisJeyAubmFtZSA9IChfbmFtZSksIC5rZXkgPSAodm9pZCAqKShfa2V5KSwgfQorCisKKy8qCiAgKiBBY3F1aXJlIGEgbG9jay4KICAqCiAgKiBWYWx1ZXMgZm9yICJyZWFkIjoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWFnaWMuaCBiL2luY2x1ZGUvbGludXgvbWFnaWMuaAppbmRleCA3MjJkNDc1Li4xZmEwYzJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKKysrIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCkBAIC0zNyw2ICszNyw3IEBACiAKICNkZWZpbmUgU01CX1NVUEVSX01BR0lDCQkweDUxN0IKICNkZWZpbmUgVVNCREVWSUNFX1NVUEVSX01BR0lDCTB4OWZhMgorI2RlZmluZSBDR1JPVVBfU1VQRVJfTUFHSUMJMHgyN2UwZWIKIAogI2RlZmluZSBGVVRFWEZTX1NVUEVSX01BR0lDCTB4QkFEMURFQQogI2RlZmluZSBJTk9USUZZRlNfU1VQRVJfTUFHSUMJMHgyQkFEMURFQQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYXJrZXIuaCBiL2luY2x1ZGUvbGludXgvbWFya2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWYzNmNmOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWFya2VyLmgKQEAgLTAsMCArMSwxMjkgQEAKKyNpZm5kZWYgX0xJTlVYX01BUktFUl9ICisjZGVmaW5lIF9MSU5VWF9NQVJLRVJfSAorCisvKgorICogQ29kZSBtYXJrdXAgZm9yIGR5bmFtaWMgYW5kIHN0YXRpYyB0cmFjaW5nLgorICoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL21hcmtlci50eHQuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA2IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbW9kdWxlOworc3RydWN0IG1hcmtlcjsKKworLyoqCisgKiBtYXJrZXJfcHJvYmVfZnVuYyAtIFR5cGUgb2YgYSBtYXJrZXIgcHJvYmUgZnVuY3Rpb24KKyAqIEBtZGF0YTogcG9pbnRlciBvZiB0eXBlIHN0cnVjdCBtYXJrZXIKKyAqIEBwcml2YXRlX2RhdGE6IGNhbGxlciBzaXRlIHByaXZhdGUgZGF0YQorICogQGZtdDogZm9ybWF0IHN0cmluZworICogQC4uLjogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICoKKyAqIFR5cGUgb2YgbWFya2VyIHByb2JlIGZ1bmN0aW9ucy4gVGhleSByZWNlaXZlIHRoZSBtZGF0YSBhbmQgbmVlZCB0byBwYXJzZSB0aGUKKyAqIGZvcm1hdCBzdHJpbmcgdG8gcmVjb3ZlciB0aGUgdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KKyAqLwordHlwZWRlZiB2b2lkIG1hcmtlcl9wcm9iZV9mdW5jKGNvbnN0IHN0cnVjdCBtYXJrZXIgKm1kYXRhLAorCXZvaWQgKnByaXZhdGVfZGF0YSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworCitzdHJ1Y3QgbWFya2VyIHsKKwljb25zdCBjaGFyICpuYW1lOwkvKiBNYXJrZXIgbmFtZSAqLworCWNvbnN0IGNoYXIgKmZvcm1hdDsJLyogTWFya2VyIGZvcm1hdCBzdHJpbmcsIGRlc2NyaWJpbmcgdGhlCisJCQkJICogdmFyaWFibGUgYXJndW1lbnQgbGlzdC4KKwkJCQkgKi8KKwljaGFyIHN0YXRlOwkJLyogTWFya2VyIHN0YXRlLiAqLworCW1hcmtlcl9wcm9iZV9mdW5jICpjYWxsOy8qIFByb2JlIGhhbmRsZXIgZnVuY3Rpb24gcG9pbnRlciAqLworCXZvaWQgKnByaXZhdGU7CQkvKiBQcml2YXRlIHByb2JlIGRhdGEgKi8KK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpOworCisjaWZkZWYgQ09ORklHX01BUktFUlMKKworLyoKKyAqIE5vdGUgOiB0aGUgZW1wdHkgYXNtIHZvbGF0aWxlIHdpdGggcmVhZCBjb25zdHJhaW50IGlzIHVzZWQgaGVyZSBpbnN0ZWFkIG9mIGEKKyAqICJ1c2VkIiBhdHRyaWJ1dGUgdG8gZml4IGEgZ2NjIDQuMS54IGJ1Zy4KKyAqIE1ha2Ugc3VyZSB0aGUgYWxpZ25tZW50IG9mIHRoZSBzdHJ1Y3R1cmUgaW4gdGhlIF9fbWFya2VycyBzZWN0aW9uIHdpbGwKKyAqIG5vdCBhZGQgdW53YW50ZWQgcGFkZGluZyBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY3Rpb24gYW5kIHRoZQorICogc3RydWN0dXJlLiBGb3JjZSBhbGlnbm1lbnQgdG8gdGhlIHNhbWUgYWxpZ25tZW50IGFzIHRoZSBzZWN0aW9uIHN0YXJ0LgorICovCisjZGVmaW5lIF9fdHJhY2VfbWFyayhuYW1lLCBjYWxsX2RhdGEsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgY29uc3QgY2hhciBfX21zdHJ0YWJfbmFtZV8jI25hbWVbXQkJXAorCQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX21hcmtlcnNfc3RyaW5ncyIpKSkJCVwKKwkJPSAjbmFtZTsJCQkJCQlcCisJCXN0YXRpYyBjb25zdCBjaGFyIF9fbXN0cnRhYl9mb3JtYXRfIyNuYW1lW10JCVwKKwkJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19tYXJrZXJzX3N0cmluZ3MiKSkpCQlcCisJCT0gZm9ybWF0OwkJCQkJCVwKKwkJc3RhdGljIHN0cnVjdCBtYXJrZXIgX19tYXJrXyMjbmFtZQkJCVwKKwkJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX19tYXJrZXJzIiksIGFsaWduZWQoOCkpKSA9CVwKKwkJeyBfX21zdHJ0YWJfbmFtZV8jI25hbWUsIF9fbXN0cnRhYl9mb3JtYXRfIyNuYW1lLAlcCisJCTAsIF9fbWFya19lbXB0eV9mdW5jdGlvbiwgTlVMTCB9OwkJCVwKKwkJX19tYXJrX2NoZWNrX2Zvcm1hdChmb3JtYXQsICMjIGFyZ3MpOwkJCVwKKwkJaWYgKHVubGlrZWx5KF9fbWFya18jI25hbWUuc3RhdGUpKSB7CQkJXAorCQkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCVwKKwkJCSgqX19tYXJrXyMjbmFtZS5jYWxsKQkJCQlcCisJCQkJKCZfX21hcmtfIyNuYW1lLCBjYWxsX2RhdGEsCQlcCisJCQkJZm9ybWF0LCAjIyBhcmdzKTsJCQlcCisJCQlwcmVlbXB0X2VuYWJsZSgpOwkJCQlcCisJCX0JCQkJCQkJXAorCX0gd2hpbGUgKDApCisKK2V4dGVybiB2b2lkIG1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2Uoc3RydWN0IG1hcmtlciAqYmVnaW4sCisJc3RydWN0IG1hcmtlciAqZW5kLCBzdHJ1Y3QgbW9kdWxlICpwcm9iZV9tb2R1bGUsIGludCAqcmVmY291bnQpOworI2Vsc2UgLyogIUNPTkZJR19NQVJLRVJTICovCisjZGVmaW5lIF9fdHJhY2VfbWFyayhuYW1lLCBjYWxsX2RhdGEsIGZvcm1hdCwgYXJncy4uLikgXAorCQlfX21hcmtfY2hlY2tfZm9ybWF0KGZvcm1hdCwgIyMgYXJncykKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCBtYXJrZXIgKmJlZ2luLAorCXN0cnVjdCBtYXJrZXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqcHJvYmVfbW9kdWxlLCBpbnQgKnJlZmNvdW50KQoreyB9CisjZW5kaWYgLyogQ09ORklHX01BUktFUlMgKi8KKworLyoqCisgKiB0cmFjZV9tYXJrIC0gTWFya2VyCisgKiBAbmFtZTogbWFya2VyIG5hbWUsIG5vdCBxdW90ZWQuCisgKiBAZm9ybWF0OiBmb3JtYXQgc3RyaW5nCisgKiBAYXJncy4uLjogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICoKKyAqIFBsYWNlcyBhIG1hcmtlci4KKyAqLworI2RlZmluZSB0cmFjZV9tYXJrKG5hbWUsIGZvcm1hdCwgYXJncy4uLikgXAorCV9fdHJhY2VfbWFyayhuYW1lLCBOVUxMLCBmb3JtYXQsICMjIGFyZ3MpCisKKyNkZWZpbmUgTUFSS19NQVhfRk9STUFUX0xFTgkxMDI0CisKKy8qKgorICogTUFSS19OT0FSR1MgLSBGb3JtYXQgc3RyaW5nIGZvciBhIG1hcmtlciB3aXRoIG5vIGFyZ3VtZW50LgorICovCisjZGVmaW5lIE1BUktfTk9BUkdTICIgIgorCisvKiBUbyBiZSB1c2VkIGZvciBzdHJpbmcgZm9ybWF0IHZhbGlkaXR5IGNoZWNraW5nIHdpdGggZ2NjICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19wcmludGYoMSwgMikgX19tYXJrX2NoZWNrX2Zvcm1hdChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KKworZXh0ZXJuIG1hcmtlcl9wcm9iZV9mdW5jIF9fbWFya19lbXB0eV9mdW5jdGlvbjsKKworLyoKKyAqIENvbm5lY3QgYSBwcm9iZSB0byBhIG1hcmtlci4KKyAqIHByaXZhdGUgZGF0YSBwb2ludGVyIG11c3QgYmUgYSB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5IGFkZHJlc3MsIG9yIE5VTEwuCisgKi8KK2V4dGVybiBpbnQgbWFya2VyX3Byb2JlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJCQltYXJrZXJfcHJvYmVfZnVuYyAqcHJvYmUsIHZvaWQgKnByaXZhdGUpOworCisvKgorICogUmV0dXJucyB0aGUgcHJpdmF0ZSBkYXRhIGdpdmVuIHRvIG1hcmtlcl9wcm9iZV9yZWdpc3Rlci4KKyAqLworZXh0ZXJuIHZvaWQgKm1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUpOworLyoKKyAqIFVucmVnaXN0ZXIgYSBtYXJrZXIgYnkgcHJvdmlkaW5nIHRoZSByZWdpc3RlcmVkIHByaXZhdGUgZGF0YS4KKyAqLworZXh0ZXJuIHZvaWQgKm1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyX3ByaXZhdGVfZGF0YSh2b2lkICpwcml2YXRlKTsKKworZXh0ZXJuIGludCBtYXJrZXJfYXJtKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIGludCBtYXJrZXJfZGlzYXJtKGNvbnN0IGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgKm1hcmtlcl9nZXRfcHJpdmF0ZV9kYXRhKGNvbnN0IGNoYXIgKm5hbWUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmggYi9pbmNsdWRlL2xpbnV4L21lbXBvbGljeS5oCmluZGV4IDM4YzA0ZDYuLjU5YzQ4NjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtcG9saWN5LmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1wb2xpY3kuaApAQCAtMTQ4LDE0ICsxNDgsNiBAQAogCQkJCQljb25zdCBub2RlbWFza190ICpuZXcpOwogZXh0ZXJuIHZvaWQgbXBvbF9yZWJpbmRfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIG5vZGVtYXNrX3QgKm5ldyk7CiBleHRlcm4gdm9pZCBtcG9sX2ZpeF9mb3JrX2NoaWxkX2ZsYWcoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKLSNkZWZpbmUgc2V0X2NwdXNldF9iZWluZ19yZWJvdW5kKHgpIChjcHVzZXRfYmVpbmdfcmVib3VuZCA9ICh4KSkKLQotI2lmZGVmIENPTkZJR19DUFVTRVRTCi0jZGVmaW5lIGN1cnJlbnRfY3B1c2V0X2lzX2JlaW5nX3JlYm91bmQoKSBcCi0JCQkJKGNwdXNldF9iZWluZ19yZWJvdW5kID09IGN1cnJlbnQtPmNwdXNldCkKLSNlbHNlCi0jZGVmaW5lIGN1cnJlbnRfY3B1c2V0X2lzX2JlaW5nX3JlYm91bmQoKSAwCi0jZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBtZW1wb2xpY3kgZGVmYXVsdF9wb2xpY3k7CiBleHRlcm4gc3RydWN0IHpvbmVsaXN0ICpodWdlX3pvbmVsaXN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLApAQCAtMTczLDggKzE2NSw2IEBACiBpbnQgZG9fbWlncmF0ZV9wYWdlcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAljb25zdCBub2RlbWFza190ICpmcm9tX25vZGVzLCBjb25zdCBub2RlbWFza190ICp0b19ub2RlcywgaW50IGZsYWdzKTsKIAotZXh0ZXJuIHZvaWQgKmNwdXNldF9iZWluZ19yZWJvdW5kOwkvKiBUcmlnZ2VyIG1wb2xfY29weSB2bWEgcmViaW5kICovCi0KICNlbHNlCiAKIHN0cnVjdCBtZW1wb2xpY3kge307CkBAIC0yNDgsOCArMjM4LDYgQEAKIHsKIH0KIAotI2RlZmluZSBzZXRfY3B1c2V0X2JlaW5nX3JlYm91bmQoeCkgZG8ge30gd2hpbGUgKDApCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHpvbmVsaXN0ICpodWdlX3pvbmVsaXN0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogIAkJdW5zaWduZWQgbG9uZyBhZGRyLCBnZnBfdCBnZnBfZmxhZ3MsIHN0cnVjdCBtZW1wb2xpY3kgKiptcG9sKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNjQyZjMyNS4uMmNiYzBiOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CiAjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CiAKICNpbmNsdWRlIDxhc20vbW9kdWxlLmg+CkBAIC0zNTQsNiArMzU1LDEwIEBACiAJLyogVGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgKG1heSBiZSBtYW5nbGVkKS4gIFBlb3BsZSBsaWtlCiAJICAga2VlcGluZyBwb2ludGVycyB0byB0aGlzIHN0dWZmICovCiAJY2hhciAqYXJnczsKKyNpZmRlZiBDT05GSUdfTUFSS0VSUworCXN0cnVjdCBtYXJrZXIgKm1hcmtlcnM7CisJdW5zaWduZWQgaW50IG51bV9tYXJrZXJzOworI2VuZGlmCiB9OwogI2lmbmRlZiBNT0RVTEVfQVJDSF9JTklUCiAjZGVmaW5lIE1PRFVMRV9BUkNIX0lOSVQge30KQEAgLTQ1Nyw2ICs0NjIsOCBAQAogCiBleHRlcm4gdm9pZCBwcmludF9tb2R1bGVzKHZvaWQpOwogCitleHRlcm4gdm9pZCBtb2R1bGVfdXBkYXRlX21hcmtlcnMoc3RydWN0IG1vZHVsZSAqcHJvYmVfbW9kdWxlLCBpbnQgKnJlZmNvdW50KTsKKwogI2Vsc2UgLyogIUNPTkZJR19NT0RVTEVTLi4uICovCiAjZGVmaW5lIEVYUE9SVF9TWU1CT0woc3ltKQogI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChzeW0pCkBAIC01NTYsNiArNTYzLDExIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2R1bGVfdXBkYXRlX21hcmtlcnMoc3RydWN0IG1vZHVsZSAqcHJvYmVfbW9kdWxlLAorCQlpbnQgKnJlZmNvdW50KQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KIAogc3RydWN0IGRldmljZV9kcml2ZXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21zZy5oIGIvaW5jbHVkZS9saW51eC9tc2cuaAppbmRleCBmMWI2MDc0Li4xMGEzZDVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21zZy5oCisrKyBiL2luY2x1ZGUvbGludXgvbXNnLmgKQEAgLTc3LDcgKzc3LDYgQEAKIC8qIG9uZSBtc3FfcXVldWUgc3RydWN0dXJlIGZvciBlYWNoIHByZXNlbnQgcXVldWUgb24gdGhlIHN5c3RlbSAqLwogc3RydWN0IG1zZ19xdWV1ZSB7CiAJc3RydWN0IGtlcm5faXBjX3Blcm0gcV9wZXJtOwotCWludCBxX2lkOwogCXRpbWVfdCBxX3N0aW1lOwkJCS8qIGxhc3QgbXNnc25kIHRpbWUgKi8KIAl0aW1lX3QgcV9ydGltZTsJCQkvKiBsYXN0IG1zZ3JjdiB0aW1lICovCiAJdGltZV90IHFfY3RpbWU7CQkJLyogbGFzdCBjaGFuZ2UgdGltZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggMzlkZDgzYi4uNmY4NWRiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCkBAIC00MDcsNiArNDA3LDI0IEBACiAJY2xlYXJfYml0KE5BUElfU1RBVEVfU0NIRUQsICZuLT5zdGF0ZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01QCisvKioKKyAqCW5hcGlfc3luY2hyb25pemUgLSB3YWl0IHVudGlsIE5BUEkgaXMgbm90IHJ1bm5pbmcKKyAqCUBuOiBuYXBpIGNvbnRleHQKKyAqCisgKiBXYWl0IHVudGlsIE5BUEkgaXMgZG9uZSBiZWluZyBzY2hlZHVsZWQgb24gdGhpcyBjb250ZXh0LgorICogV2FpdHMgdGlsbCBhbnkgb3V0c3RhbmRpbmcgcHJvY2Vzc2luZyBjb21wbGV0ZXMgYnV0CisgKiBkb2VzIG5vdCBkaXNhYmxlIGZ1dHVyZSBhY3RpdmF0aW9ucy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5hcGlfc3luY2hyb25pemUoY29uc3Qgc3RydWN0IG5hcGlfc3RydWN0ICpuKQoreworCXdoaWxlICh0ZXN0X2JpdChOQVBJX1NUQVRFX1NDSEVELCAmbi0+c3RhdGUpKQorCQltc2xlZXAoMSk7Cit9CisjZWxzZQorIyBkZWZpbmUgbmFwaV9zeW5jaHJvbml6ZShuKQliYXJyaWVyKCkKKyNlbmRpZgorCiAvKgogICoJVGhlIERFVklDRSBzdHJ1Y3R1cmUuCiAgKglBY3R1YWxseSwgdGhpcyB3aG9sZSBzdHJ1Y3R1cmUgaXMgYSBiaWcgbWlzdGFrZS4gIEl0IG1peGVzIEkvTwpAQCAtODI3LDcgKzg0NSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCi0JaWYgKCFkZXYtPmhlYWRlcl9vcHMtPnBhcnNlKQorCWlmICghZGV2LT5oZWFkZXJfb3BzIHx8ICFkZXYtPmhlYWRlcl9vcHMtPnBhcnNlKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gZGV2LT5oZWFkZXJfb3BzLT5wYXJzZShza2IsIGhhZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X3NjdHAuaAppbmRleCBiMTU3ODk3Li5kZDVhNGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCkBAIC03LDkgKzcsNiBAQAogCiAjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MJCTB4MDcKIAotI2RlZmluZSBFTEVNQ09VTlQoeCkgKHNpemVvZih4KS9zaXplb2YoeFswXSkpCi0KLQogc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKIAl1X2ludDhfdCBjaHVua3R5cGU7CiAJdV9pbnQ4X3QgZmxhZzsKQEAgLTU5LDIxICs1NiwyMSBAQAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSAJCQkJXAogCWRvIHsJCQkJCQkJXAogCQlpbnQgaTsgCQkJCQkJXAotCQlmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKQlcCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKQlcCiAJCQljaHVua21hcFtpXSA9IDA7CQkJXAogCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVRfQUxMKGNodW5rbWFwKSAJCQlcCiAJZG8gewkJCQkJCQlcCiAJCWludCBpOyAJCQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspIAlcCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSAJXAogCQkJY2h1bmttYXBbaV0gPSB+MDsJCQlcCiAJfSB3aGlsZSAoMCkKIAogI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NPUFkoZGVzdG1hcCwgc3JjbWFwKSAJCQlcCiAJZG8gewkJCQkJCQlcCiAJCWludCBpOyAJCQkJCQlcCi0JCWZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspIAlcCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNyY21hcCk7IGkrKykgCVwKIAkJCWRlc3RtYXBbaV0gPSBzcmNtYXBbaV07CQkJXAogCX0gd2hpbGUgKDApCiAKQEAgLTgxLDcgKzc4LDcgQEAKICh7CQkJCQkJCVwKIAlpbnQgaTsgCQkJCQkJXAogCWludCBmbGFnID0gMTsJCQkJCVwKLQlmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSB7CVwKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgewlcCiAJCWlmIChjaHVua21hcFtpXSkgewkJCVwKIAkJCWZsYWcgPSAwOwkJCVwKIAkJCWJyZWFrOwkJCQlcCkBAIC05NCw3ICs5MSw3IEBACiAoewkJCQkJCQlcCiAJaW50IGk7IAkJCQkJCVwKIAlpbnQgZmxhZyA9IDE7CQkJCQlcCi0JZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykgewlcCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2h1bmttYXApOyBpKyspIHsJXAogCQlpZiAoY2h1bmttYXBbaV0gIT0gfjApIHsJCVwKIAkJCWZsYWcgPSAwOwkJCVwKIAkJCQlicmVhazsJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaAppbmRleCBjNTE2NGMyLi5lODJhNmViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKQEAgLTE2MCw2ICsxNjAsMTIgQEAKIAkvKiBPcGVuIGNvbnRleHRzIGZvciBzaGFyZWQgbW1hcCB3cml0ZXMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW9wZW5fZmlsZXM7CiAKKwkvKiBOdW1iZXIgb2YgaW4tZmxpZ2h0IHNpbGx5ZGVsZXRlIFJQQyBjYWxscyAqLworCWF0b21pY190CQlzaWxseV9jb3VudDsKKwkvKiBMaXN0IG9mIGRlZmVycmVkIHNpbGx5ZGVsZXRlIHJlcXVlc3RzICovCisJc3RydWN0IGhsaXN0X2hlYWQJc2lsbHlfbGlzdDsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0cXVldWU7CisKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiAJc3RydWN0IG5mczRfY2FjaGVkX2FjbAkqbmZzNF9hY2w7CiAgICAgICAgIC8qIE5GU3Y0IHN0YXRlICovCkBAIC0zOTQsNiArNDAwLDggQEAKICAqLwogZXh0ZXJuIGludCAgbmZzX2FzeW5jX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKIGV4dGVybiB2b2lkIG5mc19jb21wbGV0ZV91bmxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKik7CitleHRlcm4gdm9pZCBuZnNfYmxvY2tfc2lsbHlyZW5hbWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKK2V4dGVybiB2b2lkIG5mc191bmJsb2NrX3NpbGx5cmVuYW1lKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAKIC8qCiAgKiBsaW51eC9mcy9uZnMvd3JpdGUuYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ub3RpZmllci5oIGIvaW5jbHVkZS9saW51eC9ub3RpZmllci5oCmluZGV4IGZhZDdmZjEuLjBjNDBjYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbm90aWZpZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25vdGlmaWVyLmgKQEAgLTIzMSw1ICsyMzEsMjIgQEAKICNkZWZpbmUgUE1fU1VTUEVORF9QUkVQQVJFCTB4MDAwMyAvKiBHb2luZyB0byBzdXNwZW5kIHRoZSBzeXN0ZW0gKi8KICNkZWZpbmUgUE1fUE9TVF9TVVNQRU5ECQkweDAwMDQgLyogU3VzcGVuZCBmaW5pc2hlZCAqLwogCisvKiBDb25zb2xlIGtleWJvYXJkIGV2ZW50cy4KKyAqIE5vdGU6IEtCRF9LRVlDT0RFIGlzIGFsd2F5cyBzZW50IGJlZm9yZSBLQkRfVU5CT1VORF9LRVlDT0RFLCBLQkRfVU5JQ09ERSBhbmQKKyAqIEtCRF9LRVlTWU0uICovCisjZGVmaW5lIEtCRF9LRVlDT0RFCQkweDAwMDEgLyogS2V5Ym9hcmQga2V5Y29kZSwgY2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgKi8KKyNkZWZpbmUgS0JEX1VOQk9VTkRfS0VZQ09ERQkweDAwMDIgLyogS2V5Ym9hcmQga2V5Y29kZSB3aGljaCBpcyBub3QgYm91bmQgdG8gYW55IG90aGVyICovCisjZGVmaW5lIEtCRF9VTklDT0RFCQkweDAwMDMgLyogS2V5Ym9hcmQgdW5pY29kZSAqLworI2RlZmluZSBLQkRfS0VZU1lNCQkweDAwMDQgLyogS2V5Ym9hcmQga2V5c3ltICovCisjZGVmaW5lIEtCRF9QT1NUX0tFWVNZTQkJMHgwMDA1IC8qIENhbGxlZCBhZnRlciBrZXlib2FyZCBrZXlzeW0gaW50ZXJwcmV0YXRpb24gKi8KKworZXh0ZXJuIHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIHJlYm9vdF9ub3RpZmllcl9saXN0OworCisvKiBWaXJ0dWFsIFRlcm1pbmFsIGV2ZW50cy4gKi8KKyNkZWZpbmUgVlRfQUxMT0NBVEUJCTB4MDAwMSAvKiBDb25zb2xlIGdvdCBhbGxvY2F0ZWQgKi8KKyNkZWZpbmUgVlRfREVBTExPQ0FURQkJMHgwMDAyIC8qIENvbnNvbGUgd2lsbCBiZSBkZWFsbG9jYXRlZCAqLworI2RlZmluZSBWVF9XUklURQkJMHgwMDAzIC8qIEEgY2hhciBnb3Qgb3V0cHV0ICovCisjZGVmaW5lIFZUX1VQREFURQkJMHgwMDA0IC8qIEEgYmlnZ2VyIHVwZGF0ZSBvY2N1cnJlZCAqLworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9OT1RJRklFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25zcHJveHkuaCBiL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCmluZGV4IDAzM2E2NDguLjBlNjZiNTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCisrKyBiL2luY2x1ZGUvbGludXgvbnNwcm94eS5oCkBAIC0zMiw4ICszMiwzOSBAQAogfTsKIGV4dGVybiBzdHJ1Y3QgbnNwcm94eSBpbml0X25zcHJveHk7CiAKKy8qCisgKiB0aGUgbmFtZXNwYWNlcyBhY2Nlc3MgcnVsZXMgYXJlOgorICoKKyAqICAxLiBvbmx5IGN1cnJlbnQgdGFzayBpcyBhbGxvd2VkIHRvIGNoYW5nZSB0c2stPm5zcHJveHkgcG9pbnRlciBvcgorICogICAgIGFueSBwb2ludGVyIG9uIHRoZSBuc3Byb3h5IGl0c2VsZgorICoKKyAqICAyLiB3aGVuIGFjY2Vzc2luZyAoaS5lLiByZWFkaW5nKSBjdXJyZW50IHRhc2sncyBuYW1lc3BhY2VzIC0gbm8KKyAqICAgICBwcmVjYXV0aW9ucyBzaG91bGQgYmUgdGFrZW4gLSBqdXN0IGRlcmVmZXJlbmNlIHRoZSBwb2ludGVycworICoKKyAqICAzLiB0aGUgYWNjZXNzIHRvIG90aGVyIHRhc2sgbmFtZXNwYWNlcyBpcyBwZXJmb3JtZWQgbGlrZSB0aGlzCisgKiAgICAgcmN1X3JlYWRfbG9jaygpOworICogICAgIG5zcHJveHkgPSB0YXNrX25zcHJveHkodHNrKTsKKyAqICAgICBpZiAobnNwcm94eSAhPSBOVUxMKSB7CisgKiAgICAgICAgICAgICAvICoKKyAqICAgICAgICAgICAgICAgKiB3b3JrIHdpdGggdGhlIG5hbWVzcGFjZXMgaGVyZQorICogICAgICAgICAgICAgICAqIGUuZy4gZ2V0IHRoZSByZWZlcmVuY2Ugb24gb25lIG9mIHRoZW0KKyAqICAgICAgICAgICAgICAgKiAvCisgKiAgICAgfSAvICoKKyAqICAgICAgICAgKiBOVUxMIHRhc2tfbnNwcm94eSgpIG1lYW5zIHRoYXQgdGhpcyB0YXNrIGlzCisgKiAgICAgICAgICogYWxtb3N0IGRlYWQgKHpvbWJpZSkKKyAqICAgICAgICAgKiAvCisgKiAgICAgcmN1X3JlYWRfdW5sb2NrKCk7CisgKgorICovCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5zcHJveHkgKnRhc2tfbnNwcm94eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKHRzay0+bnNwcm94eSk7Cit9CisKIGludCBjb3B5X25hbWVzcGFjZXModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwotdm9pZCBnZXRfdGFza19uYW1lc3BhY2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK3ZvaWQgZXhpdF90YXNrX25hbWVzcGFjZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwordm9pZCBzd2l0Y2hfdGFza19uYW1lc3BhY2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbnNwcm94eSAqbmV3KTsKIHZvaWQgZnJlZV9uc3Byb3h5KHN0cnVjdCBuc3Byb3h5ICpucyk7CiBpbnQgdW5zaGFyZV9uc3Byb3h5X25hbWVzcGFjZXModW5zaWduZWQgbG9uZywgc3RydWN0IG5zcHJveHkgKiosCiAJc3RydWN0IGZzX3N0cnVjdCAqKTsKQEAgLTQ1LDE0ICs3NiwxNSBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGV4aXRfdGFza19uYW1lc3BhY2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbnNwcm94eShzdHJ1Y3QgbnNwcm94eSAqbnMpCiB7Ci0Jc3RydWN0IG5zcHJveHkgKm5zID0gcC0+bnNwcm94eTsKLQlpZiAobnMpIHsKLQkJdGFza19sb2NrKHApOwotCQlwLT5uc3Byb3h5ID0gTlVMTDsKLQkJdGFza191bmxvY2socCk7Ci0JCXB1dF9uc3Byb3h5KG5zKTsKLQl9CisJYXRvbWljX2luYygmbnMtPmNvdW50KTsKIH0KKworI2lmZGVmIENPTkZJR19DR1JPVVBfTlMKK2ludCBuc19jZ3JvdXBfY2xvbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG5zX2Nncm91cF9jbG9uZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vZi5oIGIvaW5jbHVkZS9saW51eC9vZi5oCmluZGV4IDZkZjgwZTkuLjVjMzliOTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2YuaAorKysgYi9pbmNsdWRlL2xpbnV4L29mLmgKQEAgLTE2LDggKzE2LDggQEAKICAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAKIC8qIGZsYWcgZGVzY3JpcHRpb25zICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L29mX3BsYXRmb3JtLmggYi9pbmNsdWRlL2xpbnV4L29mX3BsYXRmb3JtLmgKaW5kZXggNDQ4ZjcwYi4uYThlZmNmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vZl9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvbGludXgvb2ZfcGxhdGZvcm0uaApAQCAtNDgsNiArNDgsMTAgQEAKICNkZWZpbmUJdG9fb2ZfcGxhdGZvcm1fZHJpdmVyKGRydikgXAogCWNvbnRhaW5lcl9vZihkcnYsc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciwgZHJpdmVyKQogCitleHRlcm4gaW50IG9mX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYsCisJCQkgICAgICBzdHJ1Y3QgYnVzX3R5cGUgKmJ1cyk7CitleHRlcm4gdm9pZCBvZl91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyICpkcnYpOworCiAjaW5jbHVkZSA8YXNtL29mX3BsYXRmb3JtLmg+CiAKIGV4dGVybiBzdHJ1Y3Qgb2ZfZGV2aWNlICpvZl9maW5kX2RldmljZV9ieV9ub2RlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYXJwb3J0LmggYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAppbmRleCA5Y2RkNjk0Li5lYzNmNzY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BhcnBvcnQuaApAQCAtNTEwLDcgKzUxMCw2IEBACiAJCQkJICAgICAgIGludCBmbGFncywgdm9pZCAqaGFuZGxlKTsKIGV4dGVybiB2b2lkIHBhcnBvcnRfY2xvc2UgKHN0cnVjdCBwYXJkZXZpY2UgKmRldik7CiBleHRlcm4gc3NpemVfdCBwYXJwb3J0X2RldmljZV9pZCAoaW50IGRldm51bSwgY2hhciAqYnVmZmVyLCBzaXplX3QgbGVuKTsKLWV4dGVybiBpbnQgcGFycG9ydF9kZXZpY2VfbnVtIChpbnQgcGFycG9ydCwgaW50IG11eCwgaW50IGRhaXN5KTsKIGV4dGVybiB2b2lkIHBhcnBvcnRfZGFpc3lfZGVzZWxlY3RfYWxsIChzdHJ1Y3QgcGFycG9ydCAqcG9ydCk7CiBleHRlcm4gaW50IHBhcnBvcnRfZGFpc3lfc2VsZWN0IChzdHJ1Y3QgcGFycG9ydCAqcG9ydCwgaW50IGRhaXN5LCBpbnQgbW9kZSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGhhbnRvbS5oIGIvaW5jbHVkZS9saW51eC9waGFudG9tLmgKaW5kZXggZDNlYmJmYS4uOTZmNDA0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waGFudG9tLmgKKysrIGIvaW5jbHVkZS9saW51eC9waGFudG9tLmgKQEAgLTMwLDcgKzMwLDExIEBACiAjZGVmaW5lIFBITl9TRVRfUkVHCQlfSU9XIChQSF9JT0NfTUFHSUMsIDEsIHN0cnVjdCBwaG1fcmVnICopCiAjZGVmaW5lIFBITl9HRVRfUkVHUwkJX0lPV1IoUEhfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgcGhtX3JlZ3MgKikKICNkZWZpbmUgUEhOX1NFVF9SRUdTCQlfSU9XIChQSF9JT0NfTUFHSUMsIDMsIHN0cnVjdCBwaG1fcmVncyAqKQotI2RlZmluZSBQSF9JT0NfTUFYTlIJCTMKKy8qIHRoaXMgaW9jdGwgdGVsbHMgdGhlIGRyaXZlciwgdGhhdCB0aGUgY2FsbGVyIGlzIG5vdCBPcGVuSGFwdGljcyBhbmQgbWlnaHQKKyAqIHVzZSBpbXByb3ZlZCByZWdpc3RlcnMgdXBkYXRlIChubyBtb3JlIHBoYW50b20gc3dpdGNob2ZmcyB3aGVuIHVzaW5nCisgKiBsaWJwaGFudG9tKSAqLworI2RlZmluZSBQSE5fTk9UX09ICQlfSU8gIChQSF9JT0NfTUFHSUMsIDQpCisjZGVmaW5lIFBIX0lPQ19NQVhOUgkJNAogCiAjZGVmaW5lIFBITl9DT05UUk9MCQkweDYgICAgIC8qIGNvbnRyb2wgYnl0ZSBpbiBpYWRkciBzcGFjZSAqLwogI2RlZmluZSBQSE5fQ1RMX0FNUAkJMHgxICAgICAvKiAgIHN3aXRjaCBhZnRlciB0b3JxdWVzIGNoYW5nZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waWQuaCBiL2luY2x1ZGUvbGludXgvcGlkLmgKaW5kZXggMWUwZTRlMy4uZTI5YTkwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpZC5oCkBAIC00MCwxNSArNDAsMjggQEAKICAqIHByb2Nlc3Nlcy4KICAqLwogCisKKy8qCisgKiBzdHJ1Y3QgdXBpZCBpcyB1c2VkIHRvIGdldCB0aGUgaWQgb2YgdGhlIHN0cnVjdCBwaWQsIGFzIGl0IGlzCisgKiBzZWVuIGluIHBhcnRpY3VsYXIgbmFtZXNwYWNlLiBMYXRlciB0aGUgc3RydWN0IHBpZCBpcyBmb3VuZCB3aXRoCisgKiBmaW5kX3BpZF9ucygpIHVzaW5nIHRoZSBpbnQgbnIgYW5kIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucy4KKyAqLworCitzdHJ1Y3QgdXBpZCB7CisJLyogVHJ5IHRvIGtlZXAgcGlkX2NoYWluIGluIHRoZSBzYW1lIGNhY2hlbGluZSBhcyBuciBmb3IgZmluZF9waWQgKi8KKwlpbnQgbnI7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOworCXN0cnVjdCBobGlzdF9ub2RlIHBpZF9jaGFpbjsKK307CisKIHN0cnVjdCBwaWQKIHsKIAlhdG9taWNfdCBjb3VudDsKLQkvKiBUcnkgdG8ga2VlcCBwaWRfY2hhaW4gaW4gdGhlIHNhbWUgY2FjaGVsaW5lIGFzIG5yIGZvciBmaW5kX3BpZCAqLwotCWludCBucjsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBwaWRfY2hhaW47CiAJLyogbGlzdHMgb2YgdGFza3MgdGhhdCB1c2UgdGhpcyBwaWQgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZCB0YXNrc1tQSURUWVBFX01BWF07CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKKwlpbnQgbGV2ZWw7CisJc3RydWN0IHVwaWQgbnVtYmVyc1sxXTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcGlkIGluaXRfc3RydWN0X3BpZDsKQEAgLTgzLDI2ICs5Niw2MCBAQAogZXh0ZXJuIHZvaWQgRkFTVENBTEwodHJhbnNmZXJfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLAogCQkJCSAgc3RydWN0IHRhc2tfc3RydWN0ICpuZXcsIGVudW0gcGlkX3R5cGUpKTsKIAorc3RydWN0IHBpZF9uYW1lc3BhY2U7CitleHRlcm4gc3RydWN0IHBpZF9uYW1lc3BhY2UgaW5pdF9waWRfbnM7CisKIC8qCiAgKiBsb29rIHVwIGEgUElEIGluIHRoZSBoYXNoIHRhYmxlLiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0YXNrbGlzdF9sb2NrCiAgKiBvciByY3VfcmVhZF9sb2NrKCkgaGVsZC4KKyAqCisgKiBmaW5kX3BpZF9ucygpIGZpbmRzIHRoZSBwaWQgaW4gdGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQKKyAqIGZpbmRfcGlkKCkgZmluZCB0aGUgcGlkIGJ5IGl0cyBnbG9iYWwgaWQsIGkuZS4gaW4gdGhlIGluaXQgbmFtZXNwYWNlCisgKiBmaW5kX3ZwaWQoKSBmaW5yIHRoZSBwaWQgYnkgaXRzIHZpcnR1YWwgaWQsIGkuZS4gaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlCisgKgorICogc2VlIGFsc28gZmluZF90YXNrX2J5X3BpZCgpIHNldCBpbiBpbmNsdWRlL2xpbnV4L3NjaGVkLmgKICAqLwotZXh0ZXJuIHN0cnVjdCBwaWQgKkZBU1RDQUxMKGZpbmRfcGlkKGludCBucikpOworZXh0ZXJuIHN0cnVjdCBwaWQgKkZBU1RDQUxMKGZpbmRfcGlkX25zKGludCBuciwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKSk7CitleHRlcm4gc3RydWN0IHBpZCAqZmluZF92cGlkKGludCBucik7CitleHRlcm4gc3RydWN0IHBpZCAqZmluZF9waWQoaW50IG5yKTsKIAogLyoKICAqIExvb2t1cCBhIFBJRCBpbiB0aGUgaGFzaCB0YWJsZSwgYW5kIHJldHVybiB3aXRoIGl0J3MgY291bnQgZWxldmF0ZWQuCiAgKi8KIGV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dldF9waWQoaW50IG5yKTsKLWV4dGVybiBzdHJ1Y3QgcGlkICpmaW5kX2dlX3BpZChpbnQgbnIpOworZXh0ZXJuIHN0cnVjdCBwaWQgKmZpbmRfZ2VfcGlkKGludCBuciwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKik7CiAKLWV4dGVybiBzdHJ1Y3QgcGlkICphbGxvY19waWQodm9pZCk7CitleHRlcm4gc3RydWN0IHBpZCAqYWxsb2NfcGlkKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CiBleHRlcm4gdm9pZCBGQVNUQ0FMTChmcmVlX3BpZChzdHJ1Y3QgcGlkICpwaWQpKTsKK2V4dGVybiB2b2lkIHphcF9waWRfbnNfcHJvY2Vzc2VzKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMpOworCisvKgorICogdGhlIGhlbHBlcnMgdG8gZ2V0IHRoZSBwaWQncyBpZCBzZWVuIGZyb20gZGlmZmVyZW50IG5hbWVzcGFjZXMKKyAqCisgKiBwaWRfbnIoKSAgICA6IGdsb2JhbCBpZCwgaS5lLiB0aGUgaWQgc2VlbiBmcm9tIHRoZSBpbml0IG5hbWVzcGFjZTsKKyAqIHBpZF92bnIoKSAgIDogdmlydHVhbCBpZCwgaS5lLiB0aGUgaWQgc2VlbiBmcm9tIHRoZSBuYW1lc3BhY2UgdGhpcyBwaWQKKyAqICAgICAgICAgICAgICAgYmVsb25ncyB0by4gdGhpcyBvbmx5IG1ha2VzIHNlbmNlIHdoZW4gY2FsbGVkIGluIHRoZQorICogICAgICAgICAgICAgICBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBuYW1lc3BhY2U7CisgKiBwaWRfbnJfbnMoKSA6IGlkIHNlZW4gZnJvbSB0aGUgbnMgc3BlY2lmaWVkLgorICoKKyAqIHNlZSBhbHNvIHRhc2tfeGlkX25yKCkgZXRjIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaAorICovCiAKIHN0YXRpYyBpbmxpbmUgcGlkX3QgcGlkX25yKHN0cnVjdCBwaWQgKnBpZCkKIHsKIAlwaWRfdCBuciA9IDA7CiAJaWYgKHBpZCkKLQkJbnIgPSBwaWQtPm5yOworCQluciA9IHBpZC0+bnVtYmVyc1swXS5ucjsKKwlyZXR1cm4gbnI7Cit9CisKK3BpZF90IHBpZF9ucl9ucyhzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CisKK3N0YXRpYyBpbmxpbmUgcGlkX3QgcGlkX3ZucihzdHJ1Y3QgcGlkICpwaWQpCit7CisJcGlkX3QgbnIgPSAwOworCWlmIChwaWQpCisJCW5yID0gcGlkLT5udW1iZXJzW3BpZC0+bGV2ZWxdLm5yOwogCXJldHVybiBucjsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waWRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaAppbmRleCBiOWExN2UwLi4wMTM1Yzc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpZF9uYW1lc3BhY2UuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BpZC5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAKQEAgLTIwLDEzICsxOSwyMSBAQAogCXN0cnVjdCBwaWRtYXAgcGlkbWFwW1BJRE1BUF9FTlRSSUVTXTsKIAlpbnQgbGFzdF9waWQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZF9yZWFwZXI7CisJc3RydWN0IGttZW1fY2FjaGUgKnBpZF9jYWNoZXA7CisJaW50IGxldmVsOworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpwYXJlbnQ7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgdmZzbW91bnQgKnByb2NfbW50OworI2VuZGlmCiB9OwogCiBleHRlcm4gc3RydWN0IHBpZF9uYW1lc3BhY2UgaW5pdF9waWRfbnM7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfcGlkX25zKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBpZF9uYW1lc3BhY2UgKmdldF9waWRfbnMoc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQogewotCWtyZWZfZ2V0KCZucy0+a3JlZik7CisJaWYgKG5zICE9ICZpbml0X3BpZF9ucykKKwkJa3JlZl9nZXQoJm5zLT5rcmVmKTsKKwlyZXR1cm4gbnM7CiB9CiAKIGV4dGVybiBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY29weV9waWRfbnModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKQEAgLTM0LDEyICs0MSwxOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3BpZF9ucyhzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0Ja3JlZl9wdXQoJm5zLT5rcmVmLCBmcmVlX3BpZF9ucyk7CisJaWYgKG5zICE9ICZpbml0X3BpZF9ucykKKwkJa3JlZl9wdXQoJm5zLT5rcmVmLCBmcmVlX3BpZF9ucyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwaWRfbmFtZXNwYWNlICp0YXNrX2FjdGl2ZV9waWRfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcmV0dXJuIGluaXRfcGlkX25zLmNoaWxkX3JlYXBlcjsKKwlyZXR1cm4gdHNrLT5uc3Byb3h5LT5waWRfbnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrX2NoaWxkX3JlYXBlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlCVUdfT04odHNrICE9IGN1cnJlbnQpOworCXJldHVybiB0c2stPm5zcHJveHktPnBpZF9ucy0+Y2hpbGRfcmVhcGVyOwogfQogCiAjZW5kaWYgLyogX0xJTlVYX1BJRF9OU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BtLmggYi9pbmNsdWRlL2xpbnV4L3BtLmgKaW5kZXggNDhiNzFiYS4uMDlhMzA5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbS5oCisrKyBiL2luY2x1ZGUvbGludXgvcG0uaApAQCAtMTA0LDEwNCArMTA0LDYgQEAKIGV4dGVybiB2b2lkICgqcG1fcG93ZXJfb2ZmKSh2b2lkKTsKIGV4dGVybiB2b2lkICgqcG1fcG93ZXJfb2ZmX3ByZXBhcmUpKHZvaWQpOwogCi10eXBlZGVmIGludCBfX2JpdHdpc2Ugc3VzcGVuZF9zdGF0ZV90OwotCi0jZGVmaW5lIFBNX1NVU1BFTkRfT04JCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDApCi0jZGVmaW5lIFBNX1NVU1BFTkRfU1RBTkRCWQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSAxKQotI2RlZmluZSBQTV9TVVNQRU5EX01FTQkJKChfX2ZvcmNlIHN1c3BlbmRfc3RhdGVfdCkgMykKLSNkZWZpbmUgUE1fU1VTUEVORF9NQVgJCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDQpCi0KLS8qKgotICogc3RydWN0IHBtX29wcyAtIENhbGxiYWNrcyBmb3IgbWFuYWdpbmcgcGxhdGZvcm0gZGVwZW5kZW50IHN5c3RlbSBzbGVlcAotICoJc3RhdGVzLgotICoKLSAqIEB2YWxpZDogQ2FsbGJhY2sgdG8gZGV0ZXJtaW5lIGlmIGdpdmVuIHN5c3RlbSBzbGVlcCBzdGF0ZSBpcyBzdXBwb3J0ZWQgYnkKLSAqCXRoZSBwbGF0Zm9ybS4KLSAqCVZhbGlkIChpZS4gc3VwcG9ydGVkKSBzdGF0ZXMgYXJlIGFkdmVydGlzZWQgaW4gL3N5cy9wb3dlci9zdGF0ZS4gIE5vdGUKLSAqCXRoYXQgaXQgc3RpbGwgbWF5IGJlIGltcG9zc2libGUgdG8gZW50ZXIgZ2l2ZW4gc3lzdGVtIHNsZWVwIHN0YXRlIGlmIHRoZQotICoJY29uZGl0aW9ucyBhcmVuJ3QgcmlnaHQuCi0gKglUaGVyZSBpcyB0aGUgJXBtX3ZhbGlkX29ubHlfbWVtIGZ1bmN0aW9uIGF2YWlsYWJsZSB0aGF0IGNhbiBiZSBhc3NpZ25lZAotICoJdG8gdGhpcyBpZiB0aGUgcGxhdGZvcm0gb25seSBzdXBwb3J0cyBtZW0gc2xlZXAuCi0gKgotICogQHNldF90YXJnZXQ6IFRlbGwgdGhlIHBsYXRmb3JtIHdoaWNoIHN5c3RlbSBzbGVlcCBzdGF0ZSBpcyBnb2luZyB0byBiZQotICoJZW50ZXJlZC4KLSAqCUBzZXRfdGFyZ2V0KCkgaXMgZXhlY3V0ZWQgcmlnaHQgcHJpb3IgdG8gc3VzcGVuZGluZyBkZXZpY2VzLiAgVGhlCi0gKglpbmZvcm1hdGlvbiBjb252ZXllZCB0byB0aGUgcGxhdGZvcm0gY29kZSBieSBAc2V0X3RhcmdldCgpIHNob3VsZCBiZQotICoJZGlzcmVnYXJkZWQgYnkgdGhlIHBsYXRmb3JtIGFzIHNvb24gYXMgQGZpbmlzaCgpIGlzIGV4ZWN1dGVkIGFuZCBpZgotICoJQHByZXBhcmUoKSBmYWlscy4gIElmIEBzZXRfdGFyZ2V0KCkgZmFpbHMgKGllLiByZXR1cm5zIG5vbnplcm8pLAotICoJQHByZXBhcmUoKSwgQGVudGVyKCkgYW5kIEBmaW5pc2goKSB3aWxsIG5vdCBiZSBjYWxsZWQgYnkgdGhlIFBNIGNvcmUuCi0gKglUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLiAgSG93ZXZlciwgaWYgaXQgaXMgaW1wbGVtZW50ZWQsIHRoZSBhcmd1bWVudAotICoJcGFzc2VkIHRvIEBwcmVwYXJlKCksIEBlbnRlcigpIGFuZCBAZmluaXNoKCkgaXMgbWVhbmluZ2xlc3MgYW5kIHNob3VsZAotICoJYmUgaWdub3JlZC4KLSAqCi0gKiBAcHJlcGFyZTogUHJlcGFyZSB0aGUgcGxhdGZvcm0gZm9yIGVudGVyaW5nIHRoZSBzeXN0ZW0gc2xlZXAgc3RhdGUgaW5kaWNhdGVkCi0gKglieSBAc2V0X3RhcmdldCgpIG9yIHJlcHJlc2VudGVkIGJ5IHRoZSBhcmd1bWVudCBpZiBAc2V0X3RhcmdldCgpIGlzIG5vdAotICoJaW1wbGVtZW50ZWQuCi0gKglAcHJlcGFyZSgpIGlzIGNhbGxlZCByaWdodCBhZnRlciBkZXZpY2VzIGhhdmUgYmVlbiBzdXNwZW5kZWQgKGllLiB0aGUKLSAqCWFwcHJvcHJpYXRlIC5zdXNwZW5kKCkgbWV0aG9kIGhhcyBiZWVuIGV4ZWN1dGVkIGZvciBlYWNoIGRldmljZSkgYW5kCi0gKgliZWZvcmUgdGhlIG5vbmJvb3QgQ1BVcyBhcmUgZGlzYWJsZWQgKGl0IGlzIGV4ZWN1dGVkIHdpdGggSVJRcyBlbmFibGVkKS4KLSAqCVRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwuICBJdCByZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlCi0gKgllcnJvciBjb2RlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgc3lzdGVtIGNhbm5vdCBlbnRlciB0aGUgZGVzaXJlZAotICoJc2xlZXAgc3RhdGUgKEBlbnRlcigpIGFuZCBAZmluaXNoKCkgd2lsbCBub3QgYmUgY2FsbGVkIGluIHRoYXQgY2FzZSkuCi0gKgotICogQGVudGVyOiBFbnRlciB0aGUgc3lzdGVtIHNsZWVwIHN0YXRlIGluZGljYXRlZCBieSBAc2V0X3RhcmdldCgpIG9yCi0gKglyZXByZXNlbnRlZCBieSB0aGUgYXJndW1lbnQgaWYgQHNldF90YXJnZXQoKSBpcyBub3QgaW1wbGVtZW50ZWQuCi0gKglUaGlzIGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4gIEl0IHJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUKLSAqCWVycm9yIGNvZGUgb3RoZXJ3aXNlLCBpbiB3aGljaCBjYXNlIHRoZSBzeXN0ZW0gY2Fubm90IGVudGVyIHRoZSBkZXNpcmVkCi0gKglzbGVlcCBzdGF0ZS4KLSAqCi0gKiBAZmluaXNoOiBDYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGhhcyBqdXN0IGxlZnQgYSBzbGVlcCBzdGF0ZSwgcmlnaHQgYWZ0ZXIKLSAqCXRoZSBub25ib290IENQVXMgaGF2ZSBiZWVuIGVuYWJsZWQgYW5kIGJlZm9yZSBkZXZpY2VzIGFyZSByZXN1bWVkIChpdCBpcwotICoJZXhlY3V0ZWQgd2l0aCBJUlFzIGVuYWJsZWQpLiAgSWYgQHNldF90YXJnZXQoKSBpcyBub3QgaW1wbGVtZW50ZWQsIHRoZQotICoJYXJndW1lbnQgcmVwcmVzZW50cyB0aGUgc2xlZXAgc3RhdGUgYmVpbmcgbGVmdC4KLSAqCVRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGJ1dCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtcwotICoJdGhhdCBpbXBsZW1lbnQgQHByZXBhcmUoKS4gIElmIGltcGxlbWVudGVkLCBpdCBpcyBhbHdheXMgY2FsbGVkIGFmdGVyCi0gKglAZW50ZXIoKSAoZXZlbiBpZiBAZW50ZXIoKSBmYWlscykuCi0gKi8KLXN0cnVjdCBwbV9vcHMgewotCWludCAoKnZhbGlkKShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwotCWludCAoKnNldF90YXJnZXQpKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7Ci0JaW50ICgqcHJlcGFyZSkoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKLQlpbnQgKCplbnRlcikoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKLQlpbnQgKCpmaW5pc2gpKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7Ci19OwotCi0jaWZkZWYgQ09ORklHX1NVU1BFTkQKLWV4dGVybiBzdHJ1Y3QgcG1fb3BzICpwbV9vcHM7Ci0KLS8qKgotICogcG1fc2V0X29wcyAtIHNldCBwbGF0Zm9ybSBkZXBlbmRlbnQgcG93ZXIgbWFuYWdlbWVudCBvcHMKLSAqIEBwbV9vcHM6IFRoZSBuZXcgcG93ZXIgbWFuYWdlbWVudCBvcGVyYXRpb25zIHRvIHNldC4KLSAqLwotZXh0ZXJuIHZvaWQgcG1fc2V0X29wcyhzdHJ1Y3QgcG1fb3BzICpwbV9vcHMpOwotZXh0ZXJuIGludCBwbV92YWxpZF9vbmx5X21lbShzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpOwotCi0vKioKLSAqIGFyY2hfc3VzcGVuZF9kaXNhYmxlX2lycXMgLSBkaXNhYmxlIElSUXMgZm9yIHN1c3BlbmQKLSAqCi0gKiBEaXNhYmxlcyBJUlFzIChpbiB0aGUgZGVmYXVsdCBjYXNlKS4gVGhpcyBpcyBhIHdlYWsgc3ltYm9sIGluIHRoZSBjb21tb24KLSAqIGNvZGUgYW5kIHRodXMgYWxsb3dzIGFyY2hpdGVjdHVyZXMgdG8gb3ZlcnJpZGUgaXQgaWYgbW9yZSBuZWVkcyB0byBiZQotICogZG9uZS4gTm90IGNhbGxlZCBmb3Igc3VzcGVuZCB0byBkaXNrLgotICovCi1leHRlcm4gdm9pZCBhcmNoX3N1c3BlbmRfZGlzYWJsZV9pcnFzKHZvaWQpOwotCi0vKioKLSAqIGFyY2hfc3VzcGVuZF9lbmFibGVfaXJxcyAtIGVuYWJsZSBJUlFzIGFmdGVyIHN1c3BlbmQKLSAqCi0gKiBFbmFibGVzIElSUXMgKGluIHRoZSBkZWZhdWx0IGNhc2UpLiBUaGlzIGlzIGEgd2VhayBzeW1ib2wgaW4gdGhlIGNvbW1vbgotICogY29kZSBhbmQgdGh1cyBhbGxvd3MgYXJjaGl0ZWN0dXJlcyB0byBvdmVycmlkZSBpdCBpZiBtb3JlIG5lZWRzIHRvIGJlCi0gKiBkb25lLiBOb3QgY2FsbGVkIGZvciBzdXNwZW5kIHRvIGRpc2suCi0gKi8KLWV4dGVybiB2b2lkIGFyY2hfc3VzcGVuZF9lbmFibGVfaXJxcyh2b2lkKTsKLQotZXh0ZXJuIGludCBwbV9zdXNwZW5kKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7Ci0jZWxzZSAvKiAhQ09ORklHX1NVU1BFTkQgKi8KLSNkZWZpbmUgc3VzcGVuZF92YWxpZF9vbmx5X21lbQlOVUxMCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwbV9zZXRfb3BzKHN0cnVjdCBwbV9vcHMgKnBtX29wcykge30KLXN0YXRpYyBpbmxpbmUgaW50IHBtX3N1c3BlbmQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKSB7IHJldHVybiAtRU5PU1lTOyB9Ci0jZW5kaWYgLyogIUNPTkZJR19TVVNQRU5EICovCi0KIC8qCiAgKiBEZXZpY2UgcG93ZXIgbWFuYWdlbWVudAogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oIGIvaW5jbHVkZS9saW51eC9wb2lzb24uaAppbmRleCBkOTNjMzAwLi5hOWMzMWJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvaXNvbi5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9pc29uLmgKQEAgLTM2LDcgKzM2LDggQEAKICAqLwogCiAvKioqKioqKioqKiBmcy9qYmQvam91cm5hbC5jICoqKioqKioqKiovCi0jZGVmaW5lIEpCRF9QT0lTT05fRlJFRQkweDViCisjZGVmaW5lIEpCRF9QT0lTT05fRlJFRQkJMHg1YgorI2RlZmluZSBKQkQyX1BPSVNPTl9GUkVFCTB4NWMKIAogLyoqKioqKioqKiogZHJpdmVycy9iYXNlL2RtYXBvb2wuYyAqKioqKioqKioqLwogI2RlZmluZQlQT09MX1BPSVNPTl9GUkVFRAkweGE3CS8qICFpbnVzZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIGIvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oCmluZGV4IDFhZGZlNjYuLmFmN2MzNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaAorKysgYi9pbmNsdWRlL2xpbnV4L3ByZWZldGNoLmgKQEAgLTM0LDE3ICszNCwxMiBAQAogCQogKi8KIAotLyoKLSAqCVRoZXNlIGNhbm5vdCBiZSBkb3t9d2hpbGUoMCkgbWFjcm9zLiBTZWUgdGhlIG1lbnRhbCBneW1uYXN0aWNzIGluCi0gKgl0aGUgbG9vcCBtYWNyby4KLSAqLwotIAogI2lmbmRlZiBBUkNIX0hBU19QUkVGRVRDSAotc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNoKGNvbnN0IHZvaWQgKngpIHs7fQorI2RlZmluZSBwcmVmZXRjaCh4KSBfX2J1aWx0aW5fcHJlZmV0Y2goeCkKICNlbmRpZgogCiAjaWZuZGVmIEFSQ0hfSEFTX1BSRUZFVENIVwotc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNodyhjb25zdCB2b2lkICp4KSB7O30KKyNkZWZpbmUgcHJlZmV0Y2h3KHgpIF9fYnVpbHRpbl9wcmVmZXRjaCh4LDEpCiAjZW5kaWYKIAogI2lmbmRlZiBBUkNIX0hBU19TUElOTE9DS19QUkVGRVRDSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcmlvX2hlYXAuaCBiL2luY2x1ZGUvbGludXgvcHJpb19oZWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgwOTQzNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvcHJpb19oZWFwLmgKQEAgLTAsMCArMSw1OCBAQAorI2lmbmRlZiBfTElOVVhfUFJJT19IRUFQX0gKKyNkZWZpbmUgX0xJTlVYX1BSSU9fSEVBUF9ICisKKy8qCisgKiBTaW1wbGUgaW5zZXJ0aW9uLW9ubHkgc3RhdGljLXNpemVkIHByaW9yaXR5IGhlYXAgY29udGFpbmluZworICogcG9pbnRlcnMsIGJhc2VkIG9uIENMUiwgY2hhcHRlciA3CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgorCisvKioKKyAqIHN0cnVjdCBwdHJfaGVhcCAtIHNpbXBsZSBzdGF0aWMtc2l6ZWQgcHJpb3JpdHkgaGVhcAorICogQHB0cnMgLSBwb2ludGVyIHRvIGRhdGEgYXJlYQorICogQG1heCAtIG1heCBudW1iZXIgb2YgZWxlbWVudHMgdGhhdCBjYW4gYmUgc3RvcmVkIGluIEBwdHJzCisgKiBAc2l6ZSAtIGN1cnJlbnQgbnVtYmVyIG9mIHZhbGlkIGVsZW1lbnRzIGluIEBwdHJzIChpbiB0aGUgcmFuZ2UgMC4uQHNpemUtMQorICogQGd0OiBjb21wYXJpc29uIG9wZXJhdG9yLCB3aGljaCBzaG91bGQgaW1wbGVtZW50ICJncmVhdGVyIHRoYW4iCisgKi8KK3N0cnVjdCBwdHJfaGVhcCB7CisJdm9pZCAqKnB0cnM7CisJaW50IG1heDsKKwlpbnQgc2l6ZTsKKwlpbnQgKCpndCkodm9pZCAqLCB2b2lkICopOworfTsKKworLyoqCisgKiBoZWFwX2luaXQgLSBpbml0aWFsaXplIGFuIGVtcHR5IGhlYXAgd2l0aCBhIGdpdmVuIG1lbW9yeSBzaXplCisgKiBAaGVhcDogdGhlIGhlYXAgc3RydWN0dXJlIHRvIGJlIGluaXRpYWxpemVkCisgKiBAc2l6ZTogYW1vdW50IG9mIG1lbW9yeSB0byB1c2UgaW4gYnl0ZXMKKyAqIEBnZnBfbWFzazogbWFzayB0byBwYXNzIHRvIGttYWxsb2MoKQorICogQGd0OiBjb21wYXJpc29uIG9wZXJhdG9yLCB3aGljaCBzaG91bGQgaW1wbGVtZW50ICJncmVhdGVyIHRoYW4iCisgKi8KK2V4dGVybiBpbnQgaGVhcF9pbml0KHN0cnVjdCBwdHJfaGVhcCAqaGVhcCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrLAorCQkgICAgIGludCAoKmd0KSh2b2lkICosIHZvaWQgKikpOworCisvKioKKyAqIGhlYXBfZnJlZSAtIHJlbGVhc2UgYSBoZWFwJ3Mgc3RvcmFnZQorICogQGhlYXA6IHRoZSBoZWFwIHN0cnVjdHVyZSB3aG9zZSBkYXRhIHNob3VsZCBiZSByZWxlYXNlZAorICovCit2b2lkIGhlYXBfZnJlZShzdHJ1Y3QgcHRyX2hlYXAgKmhlYXApOworCisvKioKKyAqIGhlYXBfaW5zZXJ0IC0gaW5zZXJ0IGEgdmFsdWUgaW50byB0aGUgaGVhcCBhbmQgcmV0dXJuIGFueSBvdmVyZmxvd2VkIHZhbHVlCisgKiBAaGVhcDogdGhlIGhlYXAgdG8gYmUgb3BlcmF0ZWQgb24KKyAqIEBwOiB0aGUgcG9pbnRlciB0byBiZSBpbnNlcnRlZAorICoKKyAqIEF0dGVtcHRzIHRvIGluc2VydCB0aGUgZ2l2ZW4gdmFsdWUgaW50byB0aGUgcHJpb3JpdHkgaGVhcC4gSWYgdGhlCisgKiBoZWFwIGlzIGZ1bGwgcHJpb3IgdG8gdGhlIGluc2VydGlvbiwgdGhlbiB0aGUgcmVzdWx0aW5nIGhlYXAgd2lsbAorICogY29uc2lzdCBvZiB0aGUgc21hbGxlc3QgQG1heCBlbGVtZW50cyBvZiB0aGUgb3JpZ2luYWwgaGVhcCBhbmQgdGhlCisgKiBuZXcgZWxlbWVudDsgdGhlIGdyZWF0ZXN0IGVsZW1lbnQgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGhlYXAgYW5kCisgKiByZXR1cm5lZC4gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBlbGVtZW50IHdpbGwgYmUgdGhlIG5ldyBlbGVtZW50CisgKiAoaS5lLiBubyBjaGFuZ2UgdG8gdGhlIGhlYXApIGlmIHRoZSBuZXcgZWxlbWVudCBpcyBncmVhdGVyIHRoYW4gYWxsCisgKiBlbGVtZW50cyBjdXJyZW50bHkgaW4gdGhlIGhlYXAuCisgKi8KK2V4dGVybiB2b2lkICpoZWFwX2luc2VydChzdHJ1Y3QgcHRyX2hlYXAgKmhlYXAsIHZvaWQgKnApOworCisKKworI2VuZGlmIC8qIF9MSU5VWF9QUklPX0hFQVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCAyMDc0MWY2Li4xZmY0NjE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtMTI1LDcgKzEyNSw4IEBACiBleHRlcm4gdm9pZCByZW1vdmVfcHJvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCk7CiAKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKnByb2NfbW50OwotZXh0ZXJuIGludCBwcm9jX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICosdm9pZCAqLGludCk7CitzdHJ1Y3QgcGlkX25hbWVzcGFjZTsKK2V4dGVybiBpbnQgcHJvY19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKnByb2NfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKTsKIAogLyoKQEAgLTE0Miw2ICsxNDMsOSBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19rbXNnX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcGNfaHRhYl9vcGVyYXRpb25zOwogCitleHRlcm4gaW50IHBpZF9uc19wcmVwYXJlX3Byb2Moc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKK2V4dGVybiB2b2lkIHBpZF9uc19yZWxlYXNlX3Byb2Moc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKKwogLyoKICAqIHByb2NfdHR5LmMKICAqLwpAQCAtMjA3LDcgKzIxMSw5IEBACiAjZGVmaW5lIHByb2NfbmV0X2NyZWF0ZShuZXQsIG5hbWUsIG1vZGUsIGluZm8pCSh7ICh2b2lkKShtb2RlKSwgTlVMTDsgfSkKIHN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jX25ldF9yZW1vdmUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKSB7fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY19mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgcHJvY19mbHVzaF90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKK30KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmNyZWF0ZV9wcm9jX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsCiAJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7IHJldHVybiBOVUxMOyB9CkBAIC0yMzIsNiArMjM4LDE1IEBACiAKIGV4dGVybiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgcHJvY19yb290OwogCitzdGF0aWMgaW5saW5lIGludCBwaWRfbnNfcHJlcGFyZV9wcm9jKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBpZF9uc19yZWxlYXNlX3Byb2Moc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQoreworfQorCiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogI2lmICFkZWZpbmVkKENPTkZJR19QUk9DX0tDT1JFKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IDhkY2YyMzcuLjcyYmZjY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTg1LDcgKzg1LDcgQEAKIGlmKCAhKCBjb25kICkgKSAJCQkJCQkJCVwKICAgcmVpc2VyZnNfcGFuaWMoIE5VTEwsICJyZWlzZXJmc1slaV06IGFzc2VydGlvbiAiIHNjb25kICIgZmFpbGVkIGF0ICIJXAogCQkgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCi0JCSAgaW5faW50ZXJydXB0KCkgPyAtMSA6IGN1cnJlbnQgLT4gcGlkLCBfX0xJTkVfXyAsIF9fRlVOQ1RJT05fXyAsICMjYXJncyApCisJCSAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBfX0xJTkVfXyAsIF9fRlVOQ1RJT05fXyAsICMjYXJncyApCiAKICNkZWZpbmUgUkFTU0VSVChjb25kLCBmb3JtYXQsIGFyZ3MuLi4pIF9fUkFTU0VSVChjb25kLCAjY29uZCwgZm9ybWF0LCAjI2FyZ3MpCiAKQEAgLTI4Myw2ICsyODMsMTggQEAKIAlyZXR1cm4gc2ItPnNfZnNfaW5mbzsKIH0KIAorLyogRG9uJ3QgdHJ1c3QgUkVJU0VSRlNfU0Ioc2IpLT5zX2JtYXBfbnIsIGl0J3MgYSB1MTYKKyAqIHdoaWNoIG92ZXJmbG93cyBvbiBsYXJnZSBmaWxlIHN5c3RlbXMuICovCitzdGF0aWMgaW5saW5lIHUzMiByZWlzZXJmc19ibWFwX2NvdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIChTQl9CTE9DS19DT1VOVChzYikgLSAxKSAvIChzYi0+c19ibG9ja3NpemUgKiA4KSArIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJtYXBfd291bGRfd3JhcCh1bnNpZ25lZCBibWFwX25yKQoreworCXJldHVybiBibWFwX25yID4gKCgxTEwgPDwgMTYpIC0gMSk7Cit9CisKIC8qKiB0aGlzIHNheXMgYWJvdXQgdmVyc2lvbiBvZiBrZXkgb2YgYWxsIGl0ZW1zIChidXQgc3RhdCBkYXRhKSB0aGUKICAgICBvYmplY3QgY29uc2lzdHMgb2YgKi8KICNkZWZpbmUgZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24oIGlub2RlICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xNzM0LDggKzE3NDYsOCBAQAogaW50IGpvdXJuYWxfbWFya19mcmVlZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCiAJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgYl9ibG9ja25yX3QgYmxvY2tucik7CiBpbnQgam91cm5hbF90cmFuc2FjdGlvbl9zaG91bGRfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgaW50KTsKLWludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBpbnQgYm1hcF9uciwgaW50IGJpdF9uciwKLQkJCWludCBzZWFyY2hhbGwsIGJfYmxvY2tucl90ICogbmV4dCk7CitpbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgaW50IGJtYXBfbnIsCisJCQlpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CiBpbnQgam91cm5hbF9iZWdpbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCiAJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcpOwogaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCkBAIC0xNzQzLDcgKzE3NTUsNyBAQAogdm9pZCByZWlzZXJmc19qb3VybmFsX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubyk7CiB2b2lkIHJlaXNlcmZzX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubywgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCi0JCQkJICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICosIGludCk7CisJCQkJICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICosIHVuc2lnbmVkIGludCk7CiAKIHZvaWQgYWRkX3NhdmVfbGluayhzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJICAgc3RydWN0IGlub2RlICppbm9kZSwgaW50IHRydW5jYXRlKTsKQEAgLTIwNDEsNyArMjA1Myw3IEBACiAgKiBhcmd1bWVudHMsIHN1Y2ggYXMgbm9kZSwgc2VhcmNoIHBhdGgsIHRyYW5zYWN0aW9uX2hhbmRsZSwgZXRjLiAqLwogc3RydWN0IF9fcmVpc2VyZnNfYmxvY2tucl9oaW50IHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwkvKiBpbm9kZSBwYXNzZWQgdG8gYWxsb2NhdG9yLCBpZiB3ZSBhbGxvY2F0ZSB1bmYuIG5vZGVzICovCi0JbG9uZyBibG9jazsJCS8qIGZpbGUgb2Zmc2V0LCBpbiBibG9ja3MgKi8KKwlzZWN0b3JfdCBibG9jazsJCS8qIGZpbGUgb2Zmc2V0LCBpbiBibG9ja3MgKi8KIAlzdHJ1Y3QgaW5fY29yZV9rZXkga2V5OwogCXN0cnVjdCB0cmVlcGF0aCAqcGF0aDsJLyogc2VhcmNoIHBhdGgsIHVzZWQgYnkgYWxsb2NhdG9yIHRvIGRldGVybmluZSBzZWFyY2hfc3RhcnQgYnkKIAkJCQkgKiB2YXJpb3VzIHdheXMgKi8KQEAgLTIwOTksNyArMjExMSw4IEBACiBzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19uZXdfdW5mX2Jsb2NrbnJzKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUKIAkJCQkJICAgICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgIGJfYmxvY2tucl90ICogbmV3X2Jsb2NrbnJzLAotCQkJCQkgICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLCBsb25nIGJsb2NrKQorCQkJCQkgICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLAorCQkJCQkgICAgc2VjdG9yX3QgYmxvY2spCiB7CiAJcmVpc2VyZnNfYmxvY2tucl9oaW50X3QgaGludCA9IHsKIAkJLnRoID0gdGgsCkBAIC0yMTE2LDcgKzIxMjksOCBAQAogc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfbmV3X3VuZl9ibG9ja25yczIoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZQogCQkJCQkgICAgICp0aCwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgICBiX2Jsb2NrbnJfdCAqIG5ld19ibG9ja25ycywKLQkJCQkJICAgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGxvbmcgYmxvY2spCisJCQkJCSAgICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLAorCQkJCQkgICAgIHNlY3Rvcl90IGJsb2NrKQogewogCXJlaXNlcmZzX2Jsb2NrbnJfaGludF90IGhpbnQgPSB7CiAJCS50aCA9IHRoLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCmluZGV4IGZmOWU5MjMuLjEwZmEwYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKQEAgLTI2NSw5ICsyNjUsNyBAQAogdHlwZWRlZiBfX3UzMigqaGFzaGZfdCkgKGNvbnN0IHNpZ25lZCBjaGFyICosIGludCk7CiAKIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyB7Ci0JLy8gRklYTUU6IFdvbid0IHdvcmsgd2l0aCBibG9jayBzaXplcyA+IDhLCi0JX191MTYgZmlyc3RfemVyb19oaW50OwotCV9fdTE2IGZyZWVfY291bnQ7CisJX191MzIgZnJlZV9jb3VudDsKIH07CiAKIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCBjMjA0YWIwLi4xM2RmOTlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIENMT05FX05FV1VUUwkJMHgwNDAwMDAwMAkvKiBOZXcgdXRzbmFtZSBncm91cD8gKi8KICNkZWZpbmUgQ0xPTkVfTkVXSVBDCQkweDA4MDAwMDAwCS8qIE5ldyBpcGNzICovCiAjZGVmaW5lIENMT05FX05FV1VTRVIJCTB4MTAwMDAwMDAJLyogTmV3IHVzZXIgbmFtZXNwYWNlICovCisjZGVmaW5lIENMT05FX05FV1BJRAkJMHgyMDAwMDAwMAkvKiBOZXcgcGlkIG5hbWVzcGFjZSAqLwogI2RlZmluZSBDTE9ORV9ORVdORVQJCTB4NDAwMDAwMDAJLyogTmV3IG5ldHdvcmsgbmFtZXNwYWNlICovCiAKIC8qCkBAIC00MjgsNyArNDI5LDE3IEBACiAJY3B1dGltZV90IGl0X3Byb2ZfaW5jciwgaXRfdmlydF9pbmNyOwogCiAJLyogam9iIGNvbnRyb2wgSURzICovCi0JcGlkX3QgcGdycDsKKworCS8qCisJICogcGdycCBhbmQgc2Vzc2lvbiBmaWVsZHMgYXJlIGRlcHJlY2F0ZWQuCisJICogdXNlIHRoZSB0YXNrX3Nlc3Npb25fWG5yIGFuZCB0YXNrX3BncnBfWG5yIHJvdXRpbmVzIGJlbG93CisJICovCisKKwl1bmlvbiB7CisJCXBpZF90IHBncnAgX19kZXByZWNhdGVkOworCQlwaWRfdCBfX3BncnA7CisJfTsKKwogCXN0cnVjdCBwaWQgKnR0eV9vbGRfcGdycDsKIAogCXVuaW9uIHsKQEAgLTU2OSw3ICs1ODAsNyBAQAogCQkJICAgbGFzdF9xdWV1ZWQ7CS8qIHdoZW4gd2Ugd2VyZSBsYXN0IHF1ZXVlZCB0byBydW4gKi8KICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwogCS8qIEJLTCBzdGF0cyAqLwotCXVuc2lnbmVkIGxvbmcgYmtsX2NvdW50OworCXVuc2lnbmVkIGludCBia2xfY291bnQ7CiAjZW5kaWYKIH07CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfU0NIRURTVEFUUykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKSAqLwpAQCAtNzA1LDM3ICs3MTYsMzkgQEAKIAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJLyogbG9hZF9iYWxhbmNlKCkgc3RhdHMgKi8KLQl1bnNpZ25lZCBsb25nIGxiX2NvdW50W0NQVV9NQVhfSURMRV9UWVBFU107Ci0JdW5zaWduZWQgbG9uZyBsYl9mYWlsZWRbQ1BVX01BWF9JRExFX1RZUEVTXTsKLQl1bnNpZ25lZCBsb25nIGxiX2JhbGFuY2VkW0NQVV9NQVhfSURMRV9UWVBFU107Ci0JdW5zaWduZWQgbG9uZyBsYl9pbWJhbGFuY2VbQ1BVX01BWF9JRExFX1RZUEVTXTsKLQl1bnNpZ25lZCBsb25nIGxiX2dhaW5lZFtDUFVfTUFYX0lETEVfVFlQRVNdOwotCXVuc2lnbmVkIGxvbmcgbGJfaG90X2dhaW5lZFtDUFVfTUFYX0lETEVfVFlQRVNdOwotCXVuc2lnbmVkIGxvbmcgbGJfbm9idXN5Z1tDUFVfTUFYX0lETEVfVFlQRVNdOwotCXVuc2lnbmVkIGxvbmcgbGJfbm9idXN5cVtDUFVfTUFYX0lETEVfVFlQRVNdOworCXVuc2lnbmVkIGludCBsYl9jb3VudFtDUFVfTUFYX0lETEVfVFlQRVNdOworCXVuc2lnbmVkIGludCBsYl9mYWlsZWRbQ1BVX01BWF9JRExFX1RZUEVTXTsKKwl1bnNpZ25lZCBpbnQgbGJfYmFsYW5jZWRbQ1BVX01BWF9JRExFX1RZUEVTXTsKKwl1bnNpZ25lZCBpbnQgbGJfaW1iYWxhbmNlW0NQVV9NQVhfSURMRV9UWVBFU107CisJdW5zaWduZWQgaW50IGxiX2dhaW5lZFtDUFVfTUFYX0lETEVfVFlQRVNdOworCXVuc2lnbmVkIGludCBsYl9ob3RfZ2FpbmVkW0NQVV9NQVhfSURMRV9UWVBFU107CisJdW5zaWduZWQgaW50IGxiX25vYnVzeWdbQ1BVX01BWF9JRExFX1RZUEVTXTsKKwl1bnNpZ25lZCBpbnQgbGJfbm9idXN5cVtDUFVfTUFYX0lETEVfVFlQRVNdOwogCiAJLyogQWN0aXZlIGxvYWQgYmFsYW5jaW5nICovCi0JdW5zaWduZWQgbG9uZyBhbGJfY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBhbGJfZmFpbGVkOwotCXVuc2lnbmVkIGxvbmcgYWxiX3B1c2hlZDsKKwl1bnNpZ25lZCBpbnQgYWxiX2NvdW50OworCXVuc2lnbmVkIGludCBhbGJfZmFpbGVkOworCXVuc2lnbmVkIGludCBhbGJfcHVzaGVkOwogCiAJLyogU0RfQkFMQU5DRV9FWEVDIHN0YXRzICovCi0JdW5zaWduZWQgbG9uZyBzYmVfY291bnQ7Ci0JdW5zaWduZWQgbG9uZyBzYmVfYmFsYW5jZWQ7Ci0JdW5zaWduZWQgbG9uZyBzYmVfcHVzaGVkOworCXVuc2lnbmVkIGludCBzYmVfY291bnQ7CisJdW5zaWduZWQgaW50IHNiZV9iYWxhbmNlZDsKKwl1bnNpZ25lZCBpbnQgc2JlX3B1c2hlZDsKIAogCS8qIFNEX0JBTEFOQ0VfRk9SSyBzdGF0cyAqLwotCXVuc2lnbmVkIGxvbmcgc2JmX2NvdW50OwotCXVuc2lnbmVkIGxvbmcgc2JmX2JhbGFuY2VkOwotCXVuc2lnbmVkIGxvbmcgc2JmX3B1c2hlZDsKKwl1bnNpZ25lZCBpbnQgc2JmX2NvdW50OworCXVuc2lnbmVkIGludCBzYmZfYmFsYW5jZWQ7CisJdW5zaWduZWQgaW50IHNiZl9wdXNoZWQ7CiAKIAkvKiB0cnlfdG9fd2FrZV91cCgpIHN0YXRzICovCi0JdW5zaWduZWQgbG9uZyB0dHd1X3dha2VfcmVtb3RlOwotCXVuc2lnbmVkIGxvbmcgdHR3dV9tb3ZlX2FmZmluZTsKLQl1bnNpZ25lZCBsb25nIHR0d3VfbW92ZV9iYWxhbmNlOworCXVuc2lnbmVkIGludCB0dHd1X3dha2VfcmVtb3RlOworCXVuc2lnbmVkIGludCB0dHd1X21vdmVfYWZmaW5lOworCXVuc2lnbmVkIGludCB0dHd1X21vdmVfYmFsYW5jZTsKICNlbmRpZgogfTsKIAorZXh0ZXJuIHZvaWQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgY3B1bWFza190ICpkb21zX25ldyk7CisKICNlbmRpZgkvKiBDT05GSUdfU01QICovCiAKIC8qCkBAIC03NTYsOCArNzY5LDYgQEAKIH0KIAogc3RydWN0IGlvX2NvbnRleHQ7CQkJLyogU2VlIGJsa2Rldi5oICovCi1zdHJ1Y3QgY3B1c2V0OwotCiAjZGVmaW5lIE5HUk9VUFNfU01BTEwJCTMyCiAjZGVmaW5lIE5HUk9VUFNfUEVSX0JMT0NLCSgoaW50KShQQUdFX1NJWkUgLyBzaXplb2YoZ2lkX3QpKSkKIHN0cnVjdCBncm91cF9pbmZvIHsKQEAgLTk5MSw3ICsxMDAyLDcgQEAKIAlpbnQgX191c2VyICpjbGVhcl9jaGlsZF90aWQ7CQkvKiBDTE9ORV9DSElMRF9DTEVBUlRJRCAqLwogCiAJdW5zaWduZWQgaW50IHJ0X3ByaW9yaXR5OwotCWNwdXRpbWVfdCB1dGltZSwgc3RpbWU7CisJY3B1dGltZV90IHV0aW1lLCBzdGltZSwgdXRpbWVzY2FsZWQsIHN0aW1lc2NhbGVkOwogCWNwdXRpbWVfdCBndGltZTsKIAl1bnNpZ25lZCBsb25nIG52Y3N3LCBuaXZjc3c7IC8qIGNvbnRleHQgc3dpdGNoIGNvdW50cyAqLwogCXN0cnVjdCB0aW1lc3BlYyBzdGFydF90aW1lOyAJCS8qIG1vbm90b25pYyB0aW1lICovCkBAIC0xMTEwLDEzICsxMTIxLDYgQEAKIAogCXVuc2lnbmVkIGxvbmcgcHRyYWNlX21lc3NhZ2U7CiAJc2lnaW5mb190ICpsYXN0X3NpZ2luZm87IC8qIEZvciBwdHJhY2UgdXNlLiAgKi8KLS8qCi0gKiBjdXJyZW50IGlvIHdhaXQgaGFuZGxlOiB3YWl0IHF1ZXVlIGVudHJ5IHRvIHVzZSBmb3IgaW8gd2FpdHMKLSAqIElmIHRoaXMgdGhyZWFkIGlzIHByb2Nlc3NpbmcgYWlvLCB0aGlzIHBvaW50cyBhdCB0aGUgd2FpdHF1ZXVlCi0gKiBpbnNpZGUgdGhlIGN1cnJlbnRseSBoYW5kbGVkIGtpb2NiLiBJdCBtYXkgYmUgTlVMTCAoaS5lLiBkZWZhdWx0Ci0gKiB0byBhIHN0YWNrIGJhc2VkIHN5bmNocm9ub3VzIHdhaXQpIGlmIGl0cyBkb2luZyBzeW5jIElPLgotICovCi0Jd2FpdF9xdWV1ZV90ICppb193YWl0OwogI2lmZGVmIENPTkZJR19UQVNLX1hBQ0NUCiAvKiBpL28gY291bnRlcnMoYnl0ZXMgcmVhZC93cml0dGVuLCAjc3lzY2FsbHMgKi8KIAl1NjQgcmNoYXIsIHdjaGFyLCBzeXNjciwgc3lzY3c7CkBAIC0xMTMyLDExICsxMTM2LDE2IEBACiAJc2hvcnQgaWxfbmV4dDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19DUFVTRVRTCi0Jc3RydWN0IGNwdXNldCAqY3B1c2V0OwogCW5vZGVtYXNrX3QgbWVtc19hbGxvd2VkOwogCWludCBjcHVzZXRfbWVtc19nZW5lcmF0aW9uOwogCWludCBjcHVzZXRfbWVtX3NwcmVhZF9yb3RvcjsKICNlbmRpZgorI2lmZGVmIENPTkZJR19DR1JPVVBTCisJLyogQ29udHJvbCBHcm91cCBpbmZvIHByb3RlY3RlZCBieSBjc3Nfc2V0X2xvY2sgKi8KKwlzdHJ1Y3QgY3NzX3NldCAqY2dyb3VwczsKKwkvKiBjZ19saXN0IHByb3RlY3RlZCBieSBjc3Nfc2V0X2xvY2sgYW5kIHRzay0+YWxsb2NfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgY2dfbGlzdDsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19GVVRFWAogCXN0cnVjdCByb2J1c3RfbGlzdF9oZWFkIF9fdXNlciAqcm9idXN0X2xpc3Q7CiAjaWZkZWYgQ09ORklHX0NPTVBBVApAQCAtMTE5MiwyNCArMTIwMSwxNCBAQAogCXJldHVybiBydF9wcmlvKHAtPnByaW8pOwogfQogCi1zdGF0aWMgaW5saW5lIHBpZF90IHByb2Nlc3NfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3Rhc2tfc2Vzc2lvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgcGlkX3Qgc2Vzc2lvbikKIHsKLQlyZXR1cm4gdHNrLT5zaWduYWwtPnBncnA7CisJdHNrLT5zaWduYWwtPl9fc2Vzc2lvbiA9IHNlc3Npb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgcGlkX3Qgc2lnbmFsX3Nlc3Npb24oc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdGFza19wZ3JwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBwaWRfdCBwZ3JwKQogewotCXJldHVybiBzaWctPl9fc2Vzc2lvbjsKLX0KLQotc3RhdGljIGlubGluZSBwaWRfdCBwcm9jZXNzX3Nlc3Npb24oc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JcmV0dXJuIHNpZ25hbF9zZXNzaW9uKHRzay0+c2lnbmFsKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9zaWduYWxfc2Vzc2lvbihzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnLCBwaWRfdCBzZXNzaW9uKQotewotCXNpZy0+X19zZXNzaW9uID0gc2Vzc2lvbjsKKwl0c2stPnNpZ25hbC0+X19wZ3JwID0gcGdycDsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcGlkICp0YXNrX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCkBAIC0xMjMyLDYgKzEyMzEsODggQEAKIAlyZXR1cm4gdGFzay0+Z3JvdXBfbGVhZGVyLT5waWRzW1BJRFRZUEVfU0lEXS5waWQ7CiB9CiAKK3N0cnVjdCBwaWRfbmFtZXNwYWNlOworCisvKgorICogdGhlIGhlbHBlcnMgdG8gZ2V0IHRoZSB0YXNrJ3MgZGlmZmVyZW50IHBpZHMgYXMgdGhleSBhcmUgc2VlbgorICogZnJvbSB2YXJpb3VzIG5hbWVzcGFjZXMKKyAqCisgKiB0YXNrX3hpZF9ucigpICAgICA6IGdsb2JhbCBpZCwgaS5lLiB0aGUgaWQgc2VlbiBmcm9tIHRoZSBpbml0IG5hbWVzcGFjZTsKKyAqIHRhc2tfeGlkX3ZucigpICAgIDogdmlydHVhbCBpZCwgaS5lLiB0aGUgaWQgc2VlbiBmcm9tIHRoZSBuYW1lc3BhY2UgdGhlIHRhc2sKKyAqICAgICAgICAgICAgICAgICAgICAgYmVsb25ncyB0by4gdGhpcyBvbmx5IG1ha2VzIHNlbmNlIHdoZW4gY2FsbGVkIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgICBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgYmVsb25ncyB0byB0aGUgc2FtZSBuYW1lc3BhY2U7CisgKiB0YXNrX3hpZF9ucl9ucygpICA6IGlkIHNlZW4gZnJvbSB0aGUgbnMgc3BlY2lmaWVkOworICoKKyAqIHNldF90YXNrX3Z4aWQoKSAgIDogYXNzaWducyBhIHZpcnR1YWwgaWQgdG8gYSB0YXNrOworICoKKyAqIHRhc2tfcHBpZF9ucl9ucygpIDogdGhlIHBhcmVudCdzIGlkIGFzIHNlZW4gZnJvbSB0aGUgbmFtZXNwYWNlIHNwZWNpZmllZC4KKyAqICAgICAgICAgICAgICAgICAgICAgdGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBuYW1lc3BhY2UgYW5kIHdoZXRoZXIgdGhlCisgKiAgICAgICAgICAgICAgICAgICAgIHRhc2sgaW4gcXVlc3Rpb24gaXMgdGhlIG5hbWVzcGFjZSdzIGluaXQuIGUuZy4gZm9yIHRoZQorICogICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UncyBpbml0IHRoaXMgd2lsbCByZXR1cm4gMCB3aGVuIGNhbGxlZCBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgIHRoZSBuYW1lc3BhY2Ugb2YgdGhpcyBpbml0LCBvciBhcHByb3ByaWF0ZSBpZCBvdGhlcndpc2UuCisgKgorICoKKyAqIHNlZSBhbHNvIHBpZF9ucigpIGV0YyBpbiBpbmNsdWRlL2xpbnV4L3BpZC5oCisgKi8KKworc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BpZF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gdHNrLT5waWQ7Cit9CisKK3BpZF90IHRhc2tfcGlkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOworCitzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfcGlkX3ZucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gcGlkX3Zucih0YXNrX3BpZCh0c2spKTsKK30KKworCitzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfdGdpZF9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gdHNrLT50Z2lkOworfQorCitwaWRfdCB0YXNrX3RnaWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CisKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza190Z2lkX3ZucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gcGlkX3Zucih0YXNrX3RnaWQodHNrKSk7Cit9CisKKworc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BncnBfbnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuIHRzay0+c2lnbmFsLT5fX3BncnA7Cit9CisKK3BpZF90IHRhc2tfcGdycF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKKworc3RhdGljIGlubGluZSBwaWRfdCB0YXNrX3BncnBfdm5yKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXJldHVybiBwaWRfdm5yKHRhc2tfcGdycCh0c2spKTsKK30KKworCitzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfc2Vzc2lvbl9ucihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlyZXR1cm4gdHNrLT5zaWduYWwtPl9fc2Vzc2lvbjsKK30KKworcGlkX3QgdGFza19zZXNzaW9uX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOworCitzdGF0aWMgaW5saW5lIHBpZF90IHRhc2tfc2Vzc2lvbl92bnIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuIHBpZF92bnIodGFza19zZXNzaW9uKHRzaykpOworfQorCisKK3N0YXRpYyBpbmxpbmUgcGlkX3QgdGFza19wcGlkX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAorCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCit7CisJcmV0dXJuIHBpZF9ucl9ucyh0YXNrX3BpZChyY3VfZGVyZWZlcmVuY2UodHNrLT5yZWFsX3BhcmVudCkpLCBucyk7Cit9CisKIC8qKgogICogcGlkX2FsaXZlIC0gY2hlY2sgdGhhdCBhIHRhc2sgc3RydWN0dXJlIGlzIG5vdCBzdGFsZQogICogQHA6IFRhc2sgc3RydWN0dXJlIHRvIGJlIGNoZWNrZWQuCkBAIC0xMjQ2LDE2ICsxMzI3LDIyIEBACiB9CiAKIC8qKgotICogaXNfaW5pdCAtIGNoZWNrIGlmIGEgdGFzayBzdHJ1Y3R1cmUgaXMgaW5pdAorICogaXNfZ2xvYmFsX2luaXQgLSBjaGVjayBpZiBhIHRhc2sgc3RydWN0dXJlIGlzIGluaXQKICAqIEB0c2s6IFRhc2sgc3RydWN0dXJlIHRvIGJlIGNoZWNrZWQuCiAgKgogICogQ2hlY2sgaWYgYSB0YXNrIHN0cnVjdHVyZSBpcyB0aGUgZmlyc3QgdXNlciBzcGFjZSB0YXNrIHRoZSBrZXJuZWwgY3JlYXRlZC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaXNfaW5pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2dsb2JhbF9pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXJldHVybiB0c2stPnBpZCA9PSAxOwogfQogCisvKgorICogaXNfY29udGFpbmVyX2luaXQ6CisgKiBjaGVjayB3aGV0aGVyIGluIHRoZSB0YXNrIGlzIGluaXQgaW4gaXRzIG93biBwaWQgbmFtZXNwYWNlLgorICovCitleHRlcm4gaW50IGlzX2NvbnRhaW5lcl9pbml0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKKwogZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7CiAKIGV4dGVybiB2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CkBAIC0xNDI3LDggKzE1MTQsMzIgQEAKIAogZXh0ZXJuIHN0cnVjdCAgIG1tX3N0cnVjdCBpbml0X21tOwogCi0jZGVmaW5lIGZpbmRfdGFza19ieV9waWQobnIpCWZpbmRfdGFza19ieV9waWRfdHlwZShQSURUWVBFX1BJRCwgbnIpCi1leHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoaW50IHR5cGUsIGludCBwaWQpOworZXh0ZXJuIHN0cnVjdCBwaWRfbmFtZXNwYWNlIGluaXRfcGlkX25zOworCisvKgorICogZmluZCBhIHRhc2sgYnkgb25lIG9mIGl0cyBudW1lcmljYWwgaWRzCisgKgorICogZmluZF90YXNrX2J5X3BpZF90eXBlX25zKCk6CisgKiAgICAgIGl0IGlzIHRoZSBtb3N0IGdlbmVyaWMgY2FsbCAtIGl0IGZpbmRzIGEgdGFzayBieSBhbGwgaWQsCisgKiAgICAgIHR5cGUgYW5kIG5hbWVzcGFjZSBzcGVjaWZpZWQKKyAqIGZpbmRfdGFza19ieV9waWRfbnMoKToKKyAqICAgICAgZmluZHMgYSB0YXNrIGJ5IGl0cyBwaWQgaW4gdGhlIHNwZWNpZmllZCBuYW1lc3BhY2UKKyAqIGZpbmRfdGFza19ieV92cGlkKCk6CisgKiAgICAgIGZpbmRzIGEgdGFzayBieSBpdHMgdmlydHVhbCBwaWQKKyAqIGZpbmRfdGFza19ieV9waWQoKToKKyAqICAgICAgZmluZHMgYSB0YXNrIGJ5IGl0cyBnbG9iYWwgcGlkCisgKgorICogc2VlIGFsc28gZmluZF9waWQoKSBldGMgaW4gaW5jbHVkZS9saW51eC9waWQuaAorICovCisKK2V4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfdGFza19ieV9waWRfdHlwZV9ucyhpbnQgdHlwZSwgaW50IHBpZCwKKwkJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKTsKKworZXh0ZXJuIHN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZChwaWRfdCBucik7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfdnBpZChwaWRfdCBucik7CitleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZF90IG5yLAorCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpOworCiBleHRlcm4gdm9pZCBfX3NldF9zcGVjaWFsX3BpZHMocGlkX3Qgc2Vzc2lvbiwgcGlkX3QgcGdycCk7CiAKIC8qIHBlci1VSUQgcHJvY2VzcyBjaGFyZ2luZy4gKi8KQEAgLTE2MTUsNiArMTcyNiwxMiBAQAogCXJldHVybiBwLT5waWQgPT0gcC0+dGdpZDsKIH0KIAorc3RhdGljIGlubGluZQoraW50IHNhbWVfdGhyZWFkX2dyb3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcDEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcDIpCit7CisJcmV0dXJuIHAxLT50Z2lkID09IHAyLT50Z2lkOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dF90aHJlYWQoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXJldHVybiBsaXN0X2VudHJ5KHJjdV9kZXJlZmVyZW5jZShwLT50aHJlYWRfZ3JvdXAubmV4dCksCkBAIC0xNjMyLDcgKzE3NDksOCBAQAogLyoKICAqIFByb3RlY3RzIC0+ZnMsIC0+ZmlsZXMsIC0+bW0sIC0+Z3JvdXBfaW5mbywgLT5jb21tLCBrZXlyaW5nCiAgKiBzdWJzY3JpcHRpb25zIGFuZCBzeW5jaHJvbmlzZXMgd2l0aCB3YWl0NCgpLiAgQWxzbyB1c2VkIGluIHByb2Nmcy4gIEFsc28KLSAqIHBpbnMgdGhlIGZpbmFsIHJlbGVhc2Ugb2YgdGFzay5pb19jb250ZXh0LiAgQWxzbyBwcm90ZWN0cyAtPmNwdXNldC4KKyAqIHBpbnMgdGhlIGZpbmFsIHJlbGVhc2Ugb2YgdGFzay5pb19jb250ZXh0LiAgQWxzbyBwcm90ZWN0cyAtPmNwdXNldCBhbmQKKyAqIC0+Y2dyb3VwLnN1YnN5c1tdLgogICoKICAqIE5lc3RzIGJvdGggaW5zaWRlIGFuZCBvdXRzaWRlIG9mIHJlYWRfbG9jaygmdGFza2xpc3RfbG9jaykuCiAgKiBJdCBtdXN0IG5vdCBiZSBuZXN0ZWQgd2l0aCB3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggOWIwYjYzYy4uYWMwNTA4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMzQsNiArMzQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2Zsb3cuaD4KIAorLyoKKyAqIEJvdW5kaW5nIHNldAorICovCitleHRlcm4ga2VybmVsX2NhcF90IGNhcF9ic2V0OworCitleHRlcm4gdW5zaWduZWQgc2VjdXJlYml0czsKKwogc3RydWN0IGN0bF90YWJsZTsKIAogLyoKQEAgLTgyNSw5ICs4MzIsMTEgQEAKICAqCWluY29taW5nIHNrX2J1ZmYgQHNrYiBoYXMgYmVlbiBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIHNvY2tldCwgQHNrLgogICoJQHNrIGNvbnRhaW5zIHRoZSBzb2NrIChub3Qgc29ja2V0KSBhc3NvY2lhdGVkIHdpdGggdGhlIGluY29taW5nIHNrX2J1ZmYuCiAgKglAc2tiIGNvbnRhaW5zIHRoZSBpbmNvbWluZyBuZXR3b3JrIGRhdGEuCi0gKiBAc29ja2V0X2dldHBlZXJzZWM6CisgKiBAc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtOgogICoJVGhpcyBob29rIGFsbG93cyB0aGUgc2VjdXJpdHkgbW9kdWxlIHRvIHByb3ZpZGUgcGVlciBzb2NrZXQgc2VjdXJpdHkKLSAqCXN0YXRlIHRvIHVzZXJzcGFjZSB2aWEgZ2V0c29ja29wdCBTT19HRVRQRUVSU0VDLgorICoJc3RhdGUgZm9yIHVuaXggb3IgY29ubmVjdGVkIHRjcCBzb2NrZXRzIHRvIHVzZXJzcGFjZSB2aWEgZ2V0c29ja29wdAorICoJU09fR0VUUEVFUlNFQy4gIEZvciB0Y3Agc29ja2V0cyB0aGlzIGNhbiBiZSBtZWFuaW5nZnVsIGlmIHRoZQorICoJc29ja2V0IGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBpcHNlYyBTQS4KICAqCUBzb2NrIGlzIHRoZSBsb2NhbCBzb2NrZXQuCiAgKglAb3B0dmFsIHVzZXJzcGFjZSBtZW1vcnkgd2hlcmUgdGhlIHNlY3VyaXR5IHN0YXRlIGlzIHRvIGJlIGNvcGllZC4KICAqCUBvcHRsZW4gdXNlcnNwYWNlIGludCB3aGVyZSB0aGUgbW9kdWxlIHNob3VsZCBjb3B5IHRoZSBhY3R1YWwgbGVuZ3RoCkBAIC04MzYsNiArODQ1LDE3IEBACiAgKglieSB0aGUgY2FsbGVyLgogICoJUmV0dXJuIDAgaWYgYWxsIGlzIHdlbGwsIG90aGVyd2lzZSwgdHlwaWNhbCBnZXRzb2Nrb3B0IHJldHVybgogICoJdmFsdWVzLgorICogQHNvY2tldF9nZXRwZWVyc2VjX2RncmFtOgorICogCVRoaXMgaG9vayBhbGxvd3MgdGhlIHNlY3VyaXR5IG1vZHVsZSB0byBwcm92aWRlIHBlZXIgc29ja2V0IHNlY3VyaXR5CisgKiAJc3RhdGUgZm9yIHVkcCBzb2NrZXRzIG9uIGEgcGVyLXBhY2tldCBiYXNpcyB0byB1c2Vyc3BhY2UgdmlhCisgKiAJZ2V0c29ja29wdCBTT19HRVRQRUVSU0VDLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgZmlyc3QgaGF2ZSBpbmRpY2F0ZWQKKyAqIAl0aGUgSVBfUEFTU1NFQyBvcHRpb24gdmlhIGdldHNvY2tvcHQuICBJdCBjYW4gdGhlbiByZXRyaWV2ZSB0aGUKKyAqIAlzZWN1cml0eSBzdGF0ZSByZXR1cm5lZCBieSB0aGlzIGhvb2sgZm9yIGEgcGFja2V0IHZpYSB0aGUgU0NNX1NFQ1VSSVRZCisgKiAJYW5jaWxsYXJ5IG1lc3NhZ2UgdHlwZS4KKyAqIAlAc2tiIGlzIHRoZSBza2J1ZmYgZm9yIHRoZSBwYWNrZXQgYmVpbmcgcXVlcmllZAorICogCUBzZWNkYXRhIGlzIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBpbiB3aGljaCB0byBjb3B5IHRoZSBzZWN1cml0eSBkYXRhCisgKiAJQHNlY2xlbiBpcyB0aGUgbWF4aW11bSBsZW5ndGggZm9yIEBzZWNkYXRhCisgKiAJUmV0dXJuIDAgb24gc3VjY2VzcywgZXJyb3Igb24gZmFpbHVyZS4KICAqIEBza19hbGxvY19zZWN1cml0eToKICAqICAgICAgQWxsb2NhdGUgYW5kIGF0dGFjaCBhIHNlY3VyaXR5IHN0cnVjdHVyZSB0byB0aGUgc2stPnNrX3NlY3VyaXR5IGZpZWxkLAogICogICAgICB3aGljaCBpcyB1c2VkIHRvIGNvcHkgc2VjdXJpdHkgYXR0cmlidXRlcyBiZXR3ZWVuIGxvY2FsIHN0cmVhbSBzb2NrZXRzLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZW0uaCBiL2luY2x1ZGUvbGludXgvc2VtLmgKaW5kZXggOWFhZmZiMC4uYzhlYWFkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlbS5oCkBAIC05MCw3ICs5MCw2IEBACiAvKiBPbmUgc2VtX2FycmF5IGRhdGEgc3RydWN0dXJlIGZvciBlYWNoIHNldCBvZiBzZW1hcGhvcmVzIGluIHRoZSBzeXN0ZW0uICovCiBzdHJ1Y3Qgc2VtX2FycmF5IHsKIAlzdHJ1Y3Qga2Vybl9pcGNfcGVybQlzZW1fcGVybTsJLyogcGVybWlzc2lvbnMgLi4gc2VlIGlwYy5oICovCi0JaW50CQkJc2VtX2lkOwogCXRpbWVfdAkJCXNlbV9vdGltZTsJLyogbGFzdCBzZW1vcCB0aW1lICovCiAJdGltZV90CQkJc2VtX2N0aW1lOwkvKiBsYXN0IGNoYW5nZSB0aW1lICovCiAJc3RydWN0IHNlbQkJKnNlbV9iYXNlOwkvKiBwdHIgdG8gZmlyc3Qgc2VtYXBob3JlIGluIGFycmF5ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NobS5oIGIvaW5jbHVkZS9saW51eC9zaG0uaAppbmRleCBiZWE2NWQ5Li5lZWFlZDkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NobS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2htLmgKQEAgLTc5LDcgKzc5LDYgQEAKIHsJCiAJc3RydWN0IGtlcm5faXBjX3Blcm0Jc2htX3Blcm07CiAJc3RydWN0IGZpbGUgKgkJc2htX2ZpbGU7Ci0JaW50CQkJaWQ7CiAJdW5zaWduZWQgbG9uZwkJc2htX25hdHRjaDsKIAl1bnNpZ25lZCBsb25nCQlzaG1fc2Vnc3o7CiAJdGltZV90CQkJc2htX2F0aW07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1c3BlbmQuaCBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCmluZGV4IDM4OGNhY2UuLjQzNjBlMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VzcGVuZC5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBfTElOVVhfU1dTVVNQX0gKLSNkZWZpbmUgX0xJTlVYX1NXU1VTUF9ICisjaWZuZGVmIF9MSU5VWF9TVVNQRU5EX0gKKyNkZWZpbmUgX0xJTlVYX1NVU1BFTkRfSAogCiAjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19GUlYpIHx8IGRlZmluZWQoQ09ORklHX1BQQzMyKSB8fCBkZWZpbmVkKENPTkZJR19QUEM2NCkKICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgpAQCAtOSw2ICs5LDEwOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTV9TTEVFUCkgJiYgZGVmaW5lZChDT05GSUdfVlQpICYmIGRlZmluZWQoQ09ORklHX1ZUX0NPTlNPTEUpCitleHRlcm4gaW50IHBtX3ByZXBhcmVfY29uc29sZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBtX3Jlc3RvcmVfY29uc29sZSh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBwbV9wcmVwYXJlX2NvbnNvbGUodm9pZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHBtX3Jlc3RvcmVfY29uc29sZSh2b2lkKSB7fQorI2VuZGlmCisKK3R5cGVkZWYgaW50IF9fYml0d2lzZSBzdXNwZW5kX3N0YXRlX3Q7CisKKyNkZWZpbmUgUE1fU1VTUEVORF9PTgkJKChfX2ZvcmNlIHN1c3BlbmRfc3RhdGVfdCkgMCkKKyNkZWZpbmUgUE1fU1VTUEVORF9TVEFOREJZCSgoX19mb3JjZSBzdXNwZW5kX3N0YXRlX3QpIDEpCisjZGVmaW5lIFBNX1NVU1BFTkRfTUVNCQkoKF9fZm9yY2Ugc3VzcGVuZF9zdGF0ZV90KSAzKQorI2RlZmluZSBQTV9TVVNQRU5EX01BWAkJKChfX2ZvcmNlIHN1c3BlbmRfc3RhdGVfdCkgNCkKKworLyoqCisgKiBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgLSBDYWxsYmFja3MgZm9yIG1hbmFnaW5nIHBsYXRmb3JtIGRlcGVuZGVudAorICoJc3lzdGVtIHNsZWVwIHN0YXRlcy4KKyAqCisgKiBAdmFsaWQ6IENhbGxiYWNrIHRvIGRldGVybWluZSBpZiBnaXZlbiBzeXN0ZW0gc2xlZXAgc3RhdGUgaXMgc3VwcG9ydGVkIGJ5CisgKgl0aGUgcGxhdGZvcm0uCisgKglWYWxpZCAoaWUuIHN1cHBvcnRlZCkgc3RhdGVzIGFyZSBhZHZlcnRpc2VkIGluIC9zeXMvcG93ZXIvc3RhdGUuICBOb3RlCisgKgl0aGF0IGl0IHN0aWxsIG1heSBiZSBpbXBvc3NpYmxlIHRvIGVudGVyIGdpdmVuIHN5c3RlbSBzbGVlcCBzdGF0ZSBpZiB0aGUKKyAqCWNvbmRpdGlvbnMgYXJlbid0IHJpZ2h0LgorICoJVGhlcmUgaXMgdGhlICVzdXNwZW5kX3ZhbGlkX29ubHlfbWVtIGZ1bmN0aW9uIGF2YWlsYWJsZSB0aGF0IGNhbiBiZQorICoJYXNzaWduZWQgdG8gdGhpcyBpZiB0aGUgcGxhdGZvcm0gb25seSBzdXBwb3J0cyBtZW0gc2xlZXAuCisgKgorICogQHNldF90YXJnZXQ6IFRlbGwgdGhlIHBsYXRmb3JtIHdoaWNoIHN5c3RlbSBzbGVlcCBzdGF0ZSBpcyBnb2luZyB0byBiZQorICoJZW50ZXJlZC4KKyAqCUBzZXRfdGFyZ2V0KCkgaXMgZXhlY3V0ZWQgcmlnaHQgcHJpb3IgdG8gc3VzcGVuZGluZyBkZXZpY2VzLiAgVGhlCisgKglpbmZvcm1hdGlvbiBjb252ZXllZCB0byB0aGUgcGxhdGZvcm0gY29kZSBieSBAc2V0X3RhcmdldCgpIHNob3VsZCBiZQorICoJZGlzcmVnYXJkZWQgYnkgdGhlIHBsYXRmb3JtIGFzIHNvb24gYXMgQGZpbmlzaCgpIGlzIGV4ZWN1dGVkIGFuZCBpZgorICoJQHByZXBhcmUoKSBmYWlscy4gIElmIEBzZXRfdGFyZ2V0KCkgZmFpbHMgKGllLiByZXR1cm5zIG5vbnplcm8pLAorICoJQHByZXBhcmUoKSwgQGVudGVyKCkgYW5kIEBmaW5pc2goKSB3aWxsIG5vdCBiZSBjYWxsZWQgYnkgdGhlIFBNIGNvcmUuCisgKglUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLiAgSG93ZXZlciwgaWYgaXQgaXMgaW1wbGVtZW50ZWQsIHRoZSBhcmd1bWVudAorICoJcGFzc2VkIHRvIEBlbnRlcigpIGlzIG1lYW5pbmdsZXNzIGFuZCBzaG91bGQgYmUgaWdub3JlZC4KKyAqCisgKiBAcHJlcGFyZTogUHJlcGFyZSB0aGUgcGxhdGZvcm0gZm9yIGVudGVyaW5nIHRoZSBzeXN0ZW0gc2xlZXAgc3RhdGUgaW5kaWNhdGVkCisgKglieSBAc2V0X3RhcmdldCgpLgorICoJQHByZXBhcmUoKSBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgZGV2aWNlcyBoYXZlIGJlZW4gc3VzcGVuZGVkIChpZS4gdGhlCisgKglhcHByb3ByaWF0ZSAuc3VzcGVuZCgpIG1ldGhvZCBoYXMgYmVlbiBleGVjdXRlZCBmb3IgZWFjaCBkZXZpY2UpIGFuZAorICoJYmVmb3JlIHRoZSBub25ib290IENQVXMgYXJlIGRpc2FibGVkIChpdCBpcyBleGVjdXRlZCB3aXRoIElSUXMgZW5hYmxlZCkuCisgKglUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLiAgSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZQorICoJZXJyb3IgY29kZSBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UgdGhlIHN5c3RlbSBjYW5ub3QgZW50ZXIgdGhlIGRlc2lyZWQKKyAqCXNsZWVwIHN0YXRlIChAZW50ZXIoKSBhbmQgQGZpbmlzaCgpIHdpbGwgbm90IGJlIGNhbGxlZCBpbiB0aGF0IGNhc2UpLgorICoKKyAqIEBlbnRlcjogRW50ZXIgdGhlIHN5c3RlbSBzbGVlcCBzdGF0ZSBpbmRpY2F0ZWQgYnkgQHNldF90YXJnZXQoKSBvcgorICoJcmVwcmVzZW50ZWQgYnkgdGhlIGFyZ3VtZW50IGlmIEBzZXRfdGFyZ2V0KCkgaXMgbm90IGltcGxlbWVudGVkLgorICoJVGhpcyBjYWxsYmFjayBpcyBtYW5kYXRvcnkuICBJdCByZXR1cm5zIDAgb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlCisgKgllcnJvciBjb2RlIG90aGVyd2lzZSwgaW4gd2hpY2ggY2FzZSB0aGUgc3lzdGVtIGNhbm5vdCBlbnRlciB0aGUgZGVzaXJlZAorICoJc2xlZXAgc3RhdGUuCisgKgorICogQGZpbmlzaDogQ2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBoYXMganVzdCBsZWZ0IGEgc2xlZXAgc3RhdGUsIHJpZ2h0IGFmdGVyCisgKgl0aGUgbm9uYm9vdCBDUFVzIGhhdmUgYmVlbiBlbmFibGVkIGFuZCBiZWZvcmUgZGV2aWNlcyBhcmUgcmVzdW1lZCAoaXQgaXMKKyAqCWV4ZWN1dGVkIHdpdGggSVJRcyBlbmFibGVkKS4KKyAqCVRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGJ1dCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtcworICoJdGhhdCBpbXBsZW1lbnQgQHByZXBhcmUoKS4gIElmIGltcGxlbWVudGVkLCBpdCBpcyBhbHdheXMgY2FsbGVkIGFmdGVyCisgKglAZW50ZXIoKSAoZXZlbiBpZiBAZW50ZXIoKSBmYWlscykuCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9zdXNwZW5kX29wcyB7CisJaW50ICgqdmFsaWQpKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CisJaW50ICgqc2V0X3RhcmdldCkoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKKwlpbnQgKCpwcmVwYXJlKSh2b2lkKTsKKwlpbnQgKCplbnRlcikoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKKwl2b2lkICgqZmluaXNoKSh2b2lkKTsKK307CisKKyNpZmRlZiBDT05GSUdfU1VTUEVORAorLyoqCisgKiBzdXNwZW5kX3NldF9vcHMgLSBzZXQgcGxhdGZvcm0gZGVwZW5kZW50IHN1c3BlbmQgb3BlcmF0aW9ucworICogQG9wczogVGhlIG5ldyBzdXNwZW5kIG9wZXJhdGlvbnMgdG8gc2V0LgorICovCitleHRlcm4gdm9pZCBzdXNwZW5kX3NldF9vcHMoc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzICpvcHMpOworZXh0ZXJuIGludCBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSk7CisKKy8qKgorICogYXJjaF9zdXNwZW5kX2Rpc2FibGVfaXJxcyAtIGRpc2FibGUgSVJRcyBmb3Igc3VzcGVuZAorICoKKyAqIERpc2FibGVzIElSUXMgKGluIHRoZSBkZWZhdWx0IGNhc2UpLiBUaGlzIGlzIGEgd2VhayBzeW1ib2wgaW4gdGhlIGNvbW1vbgorICogY29kZSBhbmQgdGh1cyBhbGxvd3MgYXJjaGl0ZWN0dXJlcyB0byBvdmVycmlkZSBpdCBpZiBtb3JlIG5lZWRzIHRvIGJlCisgKiBkb25lLiBOb3QgY2FsbGVkIGZvciBzdXNwZW5kIHRvIGRpc2suCisgKi8KK2V4dGVybiB2b2lkIGFyY2hfc3VzcGVuZF9kaXNhYmxlX2lycXModm9pZCk7CisKKy8qKgorICogYXJjaF9zdXNwZW5kX2VuYWJsZV9pcnFzIC0gZW5hYmxlIElSUXMgYWZ0ZXIgc3VzcGVuZAorICoKKyAqIEVuYWJsZXMgSVJRcyAoaW4gdGhlIGRlZmF1bHQgY2FzZSkuIFRoaXMgaXMgYSB3ZWFrIHN5bWJvbCBpbiB0aGUgY29tbW9uCisgKiBjb2RlIGFuZCB0aHVzIGFsbG93cyBhcmNoaXRlY3R1cmVzIHRvIG92ZXJyaWRlIGl0IGlmIG1vcmUgbmVlZHMgdG8gYmUKKyAqIGRvbmUuIE5vdCBjYWxsZWQgZm9yIHN1c3BlbmQgdG8gZGlzay4KKyAqLworZXh0ZXJuIHZvaWQgYXJjaF9zdXNwZW5kX2VuYWJsZV9pcnFzKHZvaWQpOworCitleHRlcm4gaW50IHBtX3N1c3BlbmQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKTsKKyNlbHNlIC8qICFDT05GSUdfU1VTUEVORCAqLworI2RlZmluZSBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtCU5VTEwKKworc3RhdGljIGlubGluZSB2b2lkIHN1c3BlbmRfc2V0X29wcyhzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgKm9wcykge30KK3N0YXRpYyBpbmxpbmUgaW50IHBtX3N1c3BlbmQoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKSB7IHJldHVybiAtRU5PU1lTOyB9CisjZW5kaWYgLyogIUNPTkZJR19TVVNQRU5EICovCiAKIC8qIHN0cnVjdCBwYmUgaXMgdXNlZCBmb3IgY3JlYXRpbmcgbGlzdHMgb2YgcGFnZXMgdGhhdCBzaG91bGQgYmUgcmVzdG9yZWQKICAqIGF0b21pY2FsbHkgZHVyaW5nIHRoZSByZXN1bWUgZnJvbSBkaXNrLCBiZWNhdXNlIHRoZSBwYWdlIGZyYW1lcyB0aGV5IGhhdmUKQEAgLTI0LDMyICsxMjYsNTcgQEAKIGV4dGVybiB2b2lkIGRyYWluX2xvY2FsX3BhZ2VzKHZvaWQpOwogZXh0ZXJuIHZvaWQgbWFya19mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1BNX1NMRUVQKSAmJiBkZWZpbmVkKENPTkZJR19WVCkgJiYgZGVmaW5lZChDT05GSUdfVlRfQ09OU09MRSkKLWV4dGVybiBpbnQgcG1fcHJlcGFyZV9jb25zb2xlKHZvaWQpOwotZXh0ZXJuIHZvaWQgcG1fcmVzdG9yZV9jb25zb2xlKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHBtX3ByZXBhcmVfY29uc29sZSh2b2lkKSB7IHJldHVybiAwOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgcG1fcmVzdG9yZV9jb25zb2xlKHZvaWQpIHt9Ci0jZW5kaWYKLQogLyoqCi0gKiBzdHJ1Y3QgaGliZXJuYXRpb25fb3BzIC0gaGliZXJuYXRpb24gcGxhdGZvcm0gc3VwcG9ydAorICogc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyAtIGhpYmVybmF0aW9uIHBsYXRmb3JtIHN1cHBvcnQKICAqCiAgKiBUaGUgbWV0aG9kcyBpbiB0aGlzIHN0cnVjdHVyZSBhbGxvdyBhIHBsYXRmb3JtIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CiAgKiBtZWNoYW5pc20gb2Ygc2h1dHRpbmcgZG93biB0aGUgbWFjaGluZSBkdXJpbmcgYSBoaWJlcm5hdGlvbiB0cmFuc2l0aW9uLgogICoKICAqIEFsbCB0aHJlZSBtZXRob2RzIG11c3QgYmUgYXNzaWduZWQuCiAgKgotICogQHByZXBhcmU6IHByZXBhcmUgc3lzdGVtIGZvciBoaWJlcm5hdGlvbgotICogQGVudGVyOiBzaHV0IGRvd24gc3lzdGVtIGFmdGVyIHN0YXRlIGhhcyBiZWVuIHNhdmVkIHRvIGRpc2sKLSAqIEBmaW5pc2g6IGZpbmlzaC9jbGVhbiB1cCBhZnRlciBzdGF0ZSBoYXMgYmVlbiByZWxvYWRlZAotICogQHByZV9yZXN0b3JlOiBwcmVwYXJlIHN5c3RlbSBmb3IgdGhlIHJlc3RvcmF0aW9uIGZyb20gYSBoaWJlcm5hdGlvbiBpbWFnZQotICogQHJlc3RvcmVfY2xlYW51cDogY2xlYW4gdXAgYWZ0ZXIgYSBmYWlsaW5nIGltYWdlIHJlc3RvcmF0aW9uCisgKiBAc3RhcnQ6IFRlbGwgdGhlIHBsYXRmb3JtIGRyaXZlciB0aGF0IHdlJ3JlIHN0YXJ0aW5nIGhpYmVybmF0aW9uLgorICoJQ2FsbGVkIHJpZ2h0IGFmdGVyIHNocmlua2luZyBtZW1vcnkgYW5kIGJlZm9yZSBmcmVlemluZyBkZXZpY2VzLgorICoKKyAqIEBwcmVfc25hcHNob3Q6IFByZXBhcmUgdGhlIHBsYXRmb3JtIGZvciBjcmVhdGluZyB0aGUgaGliZXJuYXRpb24gaW1hZ2UuCisgKglDYWxsZWQgcmlnaHQgYWZ0ZXIgZGV2aWNlcyBoYXZlIGJlZW4gZnJvemVuIGFuZCBiZWZvcmUgdGhlIG5vbmJvb3QKKyAqCUNQVXMgYXJlIGRpc2FibGVkIChydW5zIHdpdGggSVJRcyBvbikuCisgKgorICogQGZpbmlzaDogUmVzdG9yZSB0aGUgcHJldmlvdXMgc3RhdGUgb2YgdGhlIHBsYXRmb3JtIGFmdGVyIHRoZSBoaWJlcm5hdGlvbgorICoJaW1hZ2UgaGFzIGJlZW4gY3JlYXRlZCAqb3IqIHB1dCB0aGUgcGxhdGZvcm0gaW50byB0aGUgbm9ybWFsIG9wZXJhdGlvbgorICoJbW9kZSBhZnRlciB0aGUgaGliZXJuYXRpb24gKHRoZSBzYW1lIG1ldGhvZCBpcyBleGVjdXRlZCBpbiBib3RoIGNhc2VzKS4KKyAqCUNhbGxlZCByaWdodCBhZnRlciB0aGUgbm9uYm9vdCBDUFVzIGhhdmUgYmVlbiBlbmFibGVkIGFuZCBiZWZvcmUKKyAqCXRoYXdpbmcgZGV2aWNlcyAocnVucyB3aXRoIElSUXMgb24pLgorICoKKyAqIEBwcmVwYXJlOiBQcmVwYXJlIHRoZSBwbGF0Zm9ybSBmb3IgZW50ZXJpbmcgdGhlIGxvdyBwb3dlciBzdGF0ZS4KKyAqCUNhbGxlZCByaWdodCBhZnRlciB0aGUgaGliZXJuYXRpb24gaW1hZ2UgaGFzIGJlZW4gc2F2ZWQgYW5kIGJlZm9yZQorICoJZGV2aWNlcyBhcmUgcHJlcGFyZWQgZm9yIGVudGVyaW5nIHRoZSBsb3cgcG93ZXIgc3RhdGUuCisgKgorICogQGVudGVyOiBQdXQgdGhlIHN5c3RlbSBpbnRvIHRoZSBsb3cgcG93ZXIgc3RhdGUgYWZ0ZXIgdGhlIGhpYmVybmF0aW9uIGltYWdlCisgKgloYXMgYmVlbiBzYXZlZCB0byBkaXNrLgorICoJQ2FsbGVkIGFmdGVyIHRoZSBub25ib290IENQVXMgaGF2ZSBiZWVuIGRpc2FibGVkIGFuZCBhbGwgb2YgdGhlIGxvdworICoJbGV2ZWwgZGV2aWNlcyBoYXZlIGJlZW4gc2h1dCBkb3duIChydW5zIHdpdGggSVJRcyBvZmYpLgorICoKKyAqIEBsZWF2ZTogUGVyZm9ybSB0aGUgZmlyc3Qgc3RhZ2Ugb2YgdGhlIGNsZWFudXAgYWZ0ZXIgdGhlIHN5c3RlbSBzbGVlcCBzdGF0ZQorICoJaW5kaWNhdGVkIGJ5IEBzZXRfdGFyZ2V0KCkgaGFzIGJlZW4gbGVmdC4KKyAqCUNhbGxlZCByaWdodCBhZnRlciB0aGUgY29udHJvbCBoYXMgYmVlbiBwYXNzZWQgZnJvbSB0aGUgYm9vdCBrZXJuZWwgdG8KKyAqCXRoZSBpbWFnZSBrZXJuZWwsIGJlZm9yZSB0aGUgbm9uYm9vdCBDUFVzIGFyZSBlbmFibGVkIGFuZCBiZWZvcmUgZGV2aWNlcworICoJYXJlIHJlc3VtZWQuICBFeGVjdXRlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKgorICogQHByZV9yZXN0b3JlOiBQcmVwYXJlIHN5c3RlbSBmb3IgdGhlIHJlc3RvcmF0aW9uIGZyb20gYSBoaWJlcm5hdGlvbiBpbWFnZS4KKyAqCUNhbGxlZCByaWdodCBhZnRlciBkZXZpY2VzIGhhdmUgYmVlbiBmcm96ZW4gYW5kIGJlZm9yZSB0aGUgbm9uYm9vdAorICoJQ1BVcyBhcmUgZGlzYWJsZWQgKHJ1bnMgd2l0aCBJUlFzIG9uKS4KKyAqCisgKiBAcmVzdG9yZV9jbGVhbnVwOiBDbGVhbiB1cCBhZnRlciBhIGZhaWxpbmcgaW1hZ2UgcmVzdG9yYXRpb24uCisgKglDYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIG5vbmJvb3QgQ1BVcyBoYXZlIGJlZW4gZW5hYmxlZCBhbmQgYmVmb3JlCisgKgl0aGF3aW5nIGRldmljZXMgKHJ1bnMgd2l0aCBJUlFzIG9uKS4KICAqLwotc3RydWN0IGhpYmVybmF0aW9uX29wcyB7CitzdHJ1Y3QgcGxhdGZvcm1faGliZXJuYXRpb25fb3BzIHsKKwlpbnQgKCpzdGFydCkodm9pZCk7CisJaW50ICgqcHJlX3NuYXBzaG90KSh2b2lkKTsKKwl2b2lkICgqZmluaXNoKSh2b2lkKTsKIAlpbnQgKCpwcmVwYXJlKSh2b2lkKTsKIAlpbnQgKCplbnRlcikodm9pZCk7Ci0Jdm9pZCAoKmZpbmlzaCkodm9pZCk7CisJdm9pZCAoKmxlYXZlKSh2b2lkKTsKIAlpbnQgKCpwcmVfcmVzdG9yZSkodm9pZCk7CiAJdm9pZCAoKnJlc3RvcmVfY2xlYW51cCkodm9pZCk7CiB9OwpAQCAtNzAsMTQgKzE5NywxNCBAQAogZXh0ZXJuIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGdldF9zYWZlX3BhZ2UoZ2ZwX3QgZ2ZwX21hc2spOwogCi1leHRlcm4gdm9pZCBoaWJlcm5hdGlvbl9zZXRfb3BzKHN0cnVjdCBoaWJlcm5hdGlvbl9vcHMgKm9wcyk7CitleHRlcm4gdm9pZCBoaWJlcm5hdGlvbl9zZXRfb3BzKHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgKm9wcyk7CiBleHRlcm4gaW50IGhpYmVybmF0ZSh2b2lkKTsKICNlbHNlIC8qIENPTkZJR19ISUJFUk5BVElPTiAqLwogc3RhdGljIGlubGluZSBpbnQgc3dzdXNwX3BhZ2VfaXNfZm9yYmlkZGVuKHN0cnVjdCBwYWdlICpwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3NldF9wYWdlX2ZyZWUoc3RydWN0IHBhZ2UgKnApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgc3dzdXNwX3Vuc2V0X3BhZ2VfZnJlZShzdHJ1Y3QgcGFnZSAqcCkge30KIAotc3RhdGljIGlubGluZSB2b2lkIGhpYmVybmF0aW9uX3NldF9vcHMoc3RydWN0IGhpYmVybmF0aW9uX29wcyAqb3BzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGhpYmVybmF0aW9uX3NldF9vcHMoc3RydWN0IHBsYXRmb3JtX2hpYmVybmF0aW9uX29wcyAqb3BzKSB7fQogc3RhdGljIGlubGluZSBpbnQgaGliZXJuYXRlKHZvaWQpIHsgcmV0dXJuIC1FTk9TWVM7IH0KICNlbmRpZiAvKiBDT05GSUdfSElCRVJOQVRJT04gKi8KIApAQCAtMTMwLDQgKzI1Nyw0IEBACiB9CiAjZW5kaWYKIAotI2VuZGlmIC8qIF9MSU5VWF9TV1NVU1BfSCAqLworI2VuZGlmIC8qIF9MSU5VWF9TVVNQRU5EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmggYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCmluZGV4IDQ4MzA1MGMuLmU5OTE3MWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjdGwuaApAQCAtMjM4LDYgKzIzOCw3IEBACiAJTkVUX0xMQz0xOCwKIAlORVRfTkVURklMVEVSPTE5LAogCU5FVF9EQ0NQPTIwLAorCU5FVF9JUkRBPTQxMiwKIH07CiAKIC8qIC9wcm9jL3N5cy9rZXJuZWwvcmFuZG9tICovCkBAIC03OTUsNiArNzk2LDI1IEBACiAJTkVUX0JSSURHRV9ORl9GSUxURVJfUFBQT0VfVEFHR0VEID0gNSwKIH07CiAKKy8qIHByb2Mvc3lzL25ldC9pcmRhICovCitlbnVtIHsKKwlORVRfSVJEQV9ESVNDT1ZFUlk9MSwKKwlORVRfSVJEQV9ERVZOQU1FPTIsCisJTkVUX0lSREFfREVCVUc9MywKKwlORVRfSVJEQV9GQVNUX1BPTEw9NCwKKwlORVRfSVJEQV9ESVNDT1ZFUllfU0xPVFM9NSwKKwlORVRfSVJEQV9ESVNDT1ZFUllfVElNRU9VVD02LAorCU5FVF9JUkRBX1NMT1RfVElNRU9VVD03LAorCU5FVF9JUkRBX01BWF9CQVVEX1JBVEU9OCwKKwlORVRfSVJEQV9NSU5fVFhfVFVSTl9USU1FPTksCisJTkVUX0lSREFfTUFYX1RYX0RBVEFfU0laRT0xMCwKKwlORVRfSVJEQV9NQVhfVFhfV0lORE9XPTExLAorCU5FVF9JUkRBX01BWF9OT1JFUExZX1RJTUU9MTIsCisJTkVUX0lSREFfV0FSTl9OT1JFUExZX1RJTUU9MTMsCisJTkVUX0lSREFfTEFQX0tFRVBBTElWRV9USU1FPTE0LAorfTsKKworCiAvKiBDVExfRlMgbmFtZXM6ICovCiBlbnVtCiB7CkBAIC05MzcsNDEgKzk1Nyw0MiBAQAogCiB0eXBlZGVmIHN0cnVjdCBjdGxfdGFibGUgY3RsX3RhYmxlOwogCi10eXBlZGVmIGludCBjdGxfaGFuZGxlciAoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCit0eXBlZGVmIGludCBjdGxfaGFuZGxlciAoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCQkgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbik7CiAKLXR5cGVkZWYgaW50IHByb2NfaGFuZGxlciAoY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLAordHlwZWRlZiBpbnQgcHJvY19oYW5kbGVyIChzdHJ1Y3QgY3RsX3RhYmxlICpjdGwsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKiBmaWxwLAogCQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcyk7CiAKLWV4dGVybiBpbnQgcHJvY19kb3N0cmluZyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAorZXh0ZXJuIGludCBwcm9jX2Rvc3RyaW5nKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJIHZvaWQgX191c2VyICosIHNpemVfdCAqLCBsb2ZmX3QgKik7Ci1leHRlcm4gaW50IHByb2NfZG9pbnR2ZWMoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKK2V4dGVybiBpbnQgcHJvY19kb2ludHZlYyhzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKIAkJCSB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotZXh0ZXJuIGludCBwcm9jX2RvaW50dmVjX2JzZXQoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKK2V4dGVybiBpbnQgcHJvY19kb2ludHZlY19ic2V0KHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJICAgICAgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLWV4dGVybiBpbnQgcHJvY19kb2ludHZlY19taW5tYXgoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKK2V4dGVybiBpbnQgcHJvY19kb2ludHZlY19taW5tYXgoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCiAJCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLWV4dGVybiBpbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCitleHRlcm4gaW50IHByb2NfZG9pbnR2ZWNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKIAkJCQkgdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKLWV4dGVybiBpbnQgcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcyhjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAorZXh0ZXJuIGludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotZXh0ZXJuIGludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY3RsX3RhYmxlICosIGludCwgc3RydWN0IGZpbGUgKiwKK2V4dGVybiBpbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKiwgaW50LCBzdHJ1Y3QgZmlsZSAqLAogCQkJCSAgICB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotZXh0ZXJuIGludCBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCitleHRlcm4gaW50IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQsIHN0cnVjdCBmaWxlICosCiAJCQkJICB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotZXh0ZXJuIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwgaW50LAorZXh0ZXJuIGludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCwKIAkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqLCB2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwogCiBleHRlcm4gaW50IGRvX3N5c2N0bCAoaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCSAgICAgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCSAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pOwogCi1leHRlcm4gaW50IGRvX3N5c2N0bF9zdHJhdGVneSAoY3RsX3RhYmxlICp0YWJsZSwgCitleHRlcm4gaW50IGRvX3N5c2N0bF9zdHJhdGVneSAoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCiAJCQkgICAgICAgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCQkgICAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKTsKIAorZXh0ZXJuIGN0bF9oYW5kbGVyIHN5c2N0bF9kYXRhOwogZXh0ZXJuIGN0bF9oYW5kbGVyIHN5c2N0bF9zdHJpbmc7CiBleHRlcm4gY3RsX2hhbmRsZXIgc3lzY3RsX2ludHZlYzsKIGV4dGVybiBjdGxfaGFuZGxlciBzeXNjdGxfamlmZmllczsKQEAgLTk4MCw3ICsxMDAxLDcgQEAKIAogLyoKICAqIFJlZ2lzdGVyIGEgc2V0IG9mIHN5c2N0bCBuYW1lcyBieSBjYWxsaW5nIHJlZ2lzdGVyX3N5c2N0bF90YWJsZQotICogd2l0aCBhbiBpbml0aWFsaXNlZCBhcnJheSBvZiBjdGxfdGFibGUncy4gIEFuIGVudHJ5IHdpdGggemVybworICogd2l0aCBhbiBpbml0aWFsaXNlZCBhcnJheSBvZiBzdHJ1Y3QgY3RsX3RhYmxlJ3MuICBBbiBlbnRyeSB3aXRoIHplcm8KICAqIGN0bF9uYW1lIGFuZCBOVUxMIHByb2NuYW1lIHRlcm1pbmF0ZXMgdGhlIHRhYmxlLiAgdGFibGUtPmRlIHdpbGwgYmUKICAqIHNldCB1cCBieSB0aGUgcmVnaXN0cmF0aW9uIGFuZCBuZWVkIG5vdCBiZSBpbml0aWFsaXNlZCBpbiBhZHZhbmNlLgogICoKQEAgLTEwMjYsOCArMTA0Nyw4IEBACiAJdm9pZCAqZGF0YTsKIAlpbnQgbWF4bGVuOwogCW1vZGVfdCBtb2RlOwotCWN0bF90YWJsZSAqY2hpbGQ7Ci0JY3RsX3RhYmxlICpwYXJlbnQ7CQkvKiBBdXRvbWF0aWNhbGx5IHNldCAqLworCXN0cnVjdCBjdGxfdGFibGUgKmNoaWxkOworCXN0cnVjdCBjdGxfdGFibGUgKnBhcmVudDsJLyogQXV0b21hdGljYWxseSBzZXQgKi8KIAlwcm9jX2hhbmRsZXIgKnByb2NfaGFuZGxlcjsJLyogQ2FsbGJhY2sgZm9yIHRleHQgZm9ybWF0dGluZyAqLwogCWN0bF9oYW5kbGVyICpzdHJhdGVneTsJCS8qIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBhbGwgci93ICovCiAJdm9pZCAqZXh0cmExOwpAQCAtMTAzNSwxOCArMTA1NiwxOSBAQAogfTsKIAogLyogc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgaXMgdXNlZCB0byBtYWludGFpbiBkeW5hbWljIGxpc3RzIG9mCi0gICBjdGxfdGFibGUgdHJlZXMuICovCisgICBzdHJ1Y3QgY3RsX3RhYmxlIHRyZWVzLiAqLwogc3RydWN0IGN0bF90YWJsZV9oZWFkZXIKIHsKLQljdGxfdGFibGUgKmN0bF90YWJsZTsKKwlzdHJ1Y3QgY3RsX3RhYmxlICpjdGxfdGFibGU7CiAJc3RydWN0IGxpc3RfaGVhZCBjdGxfZW50cnk7CiAJaW50IHVzZWQ7CiAJc3RydWN0IGNvbXBsZXRpb24gKnVucmVnaXN0ZXJpbmc7CiB9OwogCi1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqIHJlZ2lzdGVyX3N5c2N0bF90YWJsZShjdGxfdGFibGUgKiB0YWJsZSk7CitzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKiB0YWJsZSk7CiAKIHZvaWQgdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKiB0YWJsZSk7CitpbnQgc3lzY3RsX2NoZWNrX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKTsKIAogI2Vsc2UgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0cy5oIGIvaW5jbHVkZS9saW51eC90YXNrc3RhdHMuaAppbmRleCBkY2UxZWQyMDQuLjVkNjljMDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGFza3N0YXRzLmgKKysrIGIvaW5jbHVkZS9saW51eC90YXNrc3RhdHMuaApAQCAtMzEsNyArMzEsNyBAQAogICovCiAKIAotI2RlZmluZSBUQVNLU1RBVFNfVkVSU0lPTgk1CisjZGVmaW5lIFRBU0tTVEFUU19WRVJTSU9OCTYKICNkZWZpbmUgVFNfQ09NTV9MRU4JCTMyCS8qIHNob3VsZCBiZSA+PSBUQVNLX0NPTU1fTEVOCiAJCQkJCSAqIGluIGxpbnV4L3NjaGVkLmggKi8KIApAQCAtMTUyLDYgKzE1MiwxMSBAQAogCiAJX191NjQgIG52Y3N3OwkJCS8qIHZvbHVudGFyeV9jdHh0X3N3aXRjaGVzICovCiAJX191NjQgIG5pdmNzdzsJCQkvKiBub252b2x1bnRhcnlfY3R4dF9zd2l0Y2hlcyAqLworCisJLyogdGltZSBhY2NvdW50aW5nIGZvciBTTVQgbWFjaGluZXMgKi8KKwlfX3U2NAlhY191dGltZXNjYWxlZDsJCS8qIHV0aW1lIHNjYWxlZCBvbiBmcmVxdWVuY3kgZXRjICovCisJX191NjQJYWNfc3RpbWVzY2FsZWQ7CQkvKiBzdGltZSBzY2FsZWQgb24gZnJlcXVlbmN5IGV0YyAqLworCV9fdTY0CWNwdV9zY2FsZWRfcnVuX3JlYWxfdG90YWw7IC8qIHNjYWxlZCBjcHVfcnVuX3JlYWxfdG90YWwgKi8KIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aWNrLmggYi9pbmNsdWRlL2xpbnV4L3RpY2suaAppbmRleCA5YTcyNTJlLi5mNGExMzk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpY2suaApAQCAtNDAsNiArNDAsNyBAQAogICogQGlkbGVfc2xlZXBzOglOdW1iZXIgb2YgaWRsZSBjYWxscywgd2hlcmUgdGhlIHNjaGVkIHRpY2sgd2FzIHN0b3BwZWQKICAqIEBpZGxlX2VudHJ5dGltZToJVGltZSB3aGVuIHRoZSBpZGxlIGNhbGwgd2FzIGVudGVyZWQKICAqIEBpZGxlX3NsZWVwdGltZToJU3VtIG9mIHRoZSB0aW1lIHNsZXB0IGluIGlkbGUgd2l0aCBzY2hlZCB0aWNrIHN0b3BwZWQKKyAqIEBzbGVlcF9sZW5ndGg6CUR1cmF0aW9uIG9mIHRoZSBjdXJyZW50IGlkbGUgc2xlZXAKICAqLwogc3RydWN0IHRpY2tfc2NoZWQgewogCXN0cnVjdCBocnRpbWVyCQkJc2NoZWRfdGltZXI7CkBAIC01Miw2ICs1Myw3IEBACiAJdW5zaWduZWQgbG9uZwkJCWlkbGVfc2xlZXBzOwogCWt0aW1lX3QJCQkJaWRsZV9lbnRyeXRpbWU7CiAJa3RpbWVfdAkJCQlpZGxlX3NsZWVwdGltZTsKKwlrdGltZV90CQkJCXNsZWVwX2xlbmd0aDsKIAl1bnNpZ25lZCBsb25nCQkJbGFzdF9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcJCQluZXh0X2ppZmZpZXM7CiAJa3RpbWVfdAkJCQlpZGxlX2V4cGlyZXM7CkBAIC0xMDAsMTAgKzEwMiwxNyBAQAogZXh0ZXJuIHZvaWQgdGlja19ub2h6X3N0b3Bfc2NoZWRfdGljayh2b2lkKTsKIGV4dGVybiB2b2lkIHRpY2tfbm9oel9yZXN0YXJ0X3NjaGVkX3RpY2sodm9pZCk7CiBleHRlcm4gdm9pZCB0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXModm9pZCk7CitleHRlcm4ga3RpbWVfdCB0aWNrX25vaHpfZ2V0X3NsZWVwX2xlbmd0aCh2b2lkKTsKICMgZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHRpY2tfbm9oel9zdG9wX3NjaGVkX3RpY2sodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGlja19ub2h6X3Jlc3RhcnRfc2NoZWRfdGljayh2b2lkKSB7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0aWNrX25vaHpfdXBkYXRlX2ppZmZpZXModm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIGt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCkKK3sKKwlrdGltZV90IGxlbiA9IHsgLnR2NjQgPSBOU0VDX1BFUl9TRUMvSFogfTsKKworCXJldHVybiBsZW47Cit9CiAjIGVuZGlmIC8qICFOT19IWiAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHlwZXMuaCBiL2luY2x1ZGUvbGludXgvdHlwZXMuaAppbmRleCAwMzUxYmYyLi40ZjBkYWQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC90eXBlcy5oCkBAIC0zLDEyICszLDkgQEAKIAogI2lmZGVmCV9fS0VSTkVMX18KIAotI2RlZmluZSBCSVRTX1RPX0xPTkdTKGJpdHMpIFwKLQkoKChiaXRzKStCSVRTX1BFUl9MT05HLTEpL0JJVFNfUEVSX0xPTkcpCiAjZGVmaW5lIERFQ0xBUkVfQklUTUFQKG5hbWUsYml0cykgXAogCXVuc2lnbmVkIGxvbmcgbmFtZVtCSVRTX1RPX0xPTkdTKGJpdHMpXQogCi0jZGVmaW5lIEJJVFNfUEVSX0JZVEUgOAogI2VuZGlmCiAKICNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91aW5wdXQuaCBiL2luY2x1ZGUvbGludXgvdWlucHV0LmgKaW5kZXggYTZjMWU4ZS4uMTVkZGQ0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91aW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VpbnB1dC5oCkBAIC0xNjIsMTAgKzE2Miw2IEBACiAjZGVmaW5lIFVJX0ZGX1VQTE9BRAkJMQogI2RlZmluZSBVSV9GRl9FUkFTRQkJMgogCi0jaWZuZGVmIE5CSVRTCi0jZGVmaW5lIE5CSVRTKHgpICgoKCh4KS0xKS8oc2l6ZW9mKGxvbmcpKjgpKSsxKQotI2VuZGlmCS8qIE5CSVRTICovCi0KICNkZWZpbmUgVUlOUFVUX01BWF9OQU1FX1NJWkUJODAKIHN0cnVjdCB1aW5wdXRfdXNlcl9kZXYgewogCWNoYXIgbmFtZVtVSU5QVVRfTUFYX05BTUVfU0laRV07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Z0LmggYi9pbmNsdWRlL2xpbnV4L3Z0LmgKaW5kZXggYmE4MDZlOC4uMDJjMWMwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92dC5oCisrKyBiL2luY2x1ZGUvbGludXgvdnQuaApAQCAtMSw2ICsxLDE4IEBACiAjaWZuZGVmIF9MSU5VWF9WVF9ICiAjZGVmaW5lIF9MSU5VWF9WVF9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CisKK3N0cnVjdCB2dF9ub3RpZmllcl9wYXJhbSB7CisJc3RydWN0IHZjX2RhdGEgKnZjOwkvKiBWQyBvbiB3aGljaCB0aGUgdXBkYXRlIGhhcHBlbmVkICovCisJdW5zaWduZWQgaW50IGM7CQkvKiBQcmludGVkIGNoYXIgKi8KK307CisKK2V4dGVybiBpbnQgcmVnaXN0ZXJfdnRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfdnRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CisjZW5kaWYKKwogLyoKICAqIFRoZXNlIGNvbnN0YW50cyBhcmUgYWxzbyB1c2VmdWwgZm9yIHVzZXItbGV2ZWwgYXBwcyAoZS5nLiwgVkMKICAqIHJlc2l6aW5nKS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L3dvcmtxdWV1ZS5oCmluZGV4IGNlNmJhZGMuLjdkYWFmZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvd29ya3F1ZXVlLmgKKysrIGIvaW5jbHVkZS9saW51eC93b3JrcXVldWUuaApAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdDsKQEAgLTI4LDYgKzI5LDkgQEAKICNkZWZpbmUgV09SS19TVFJVQ1RfV1FfREFUQV9NQVNLICh+V09SS19TVFJVQ1RfRkxBR19NQVNLKQogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CiAJd29ya19mdW5jX3QgZnVuYzsKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCXN0cnVjdCBsb2NrZGVwX21hcCBsb2NrZGVwX21hcDsKKyNlbmRpZgogfTsKIAogI2RlZmluZSBXT1JLX0RBVEFfSU5JVCgpCUFUT01JQ19MT05HX0lOSVQoMCkKQEAgLTQxLDEwICs0NSwyMyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwogfTsKIAorI2lmZGVmIENPTkZJR19MT0NLREVQCisvKgorICogTkI6IGJlY2F1c2Ugd2UgaGF2ZSB0byBjb3B5IHRoZSBsb2NrZGVwX21hcCwgc2V0dGluZyBfa2V5CisgKiBoZXJlIGlzIHJlcXVpcmVkLCBvdGhlcndpc2UgaXQgY291bGQgZ2V0IGluaXRpYWxpc2VkIHRvIHRoZQorICogY29weSBvZiB0aGUgbG9ja2RlcF9tYXAhCisgKi8KKyNkZWZpbmUgX19XT1JLX0lOSVRfTE9DS0RFUF9NQVAobiwgaykgXAorCS5sb2NrZGVwX21hcCA9IFNUQVRJQ19MT0NLREVQX01BUF9JTklUKG4sIGspLAorI2Vsc2UKKyNkZWZpbmUgX19XT1JLX0lOSVRfTE9DS0RFUF9NQVAobiwgaykKKyNlbmRpZgorCiAjZGVmaW5lIF9fV09SS19JTklUSUFMSVpFUihuLCBmKSB7CQkJCVwKIAkuZGF0YSA9IFdPUktfREFUQV9JTklUKCksCQkJCVwKIAkuZW50cnkJPSB7ICYobikuZW50cnksICYobikuZW50cnkgfSwJCQlcCiAJLmZ1bmMgPSAoZiksCQkJCQkJXAorCV9fV09SS19JTklUX0xPQ0tERVBfTUFQKCNuLCAmKG4pKQkJCVwKIAl9CiAKICNkZWZpbmUgX19ERUxBWUVEX1dPUktfSU5JVElBTElaRVIobiwgZikgewkJCVwKQEAgLTc2LDEyICs5MywyNCBAQAogICogYXNzaWdubWVudCBvZiB0aGUgd29yayBkYXRhIGluaXRpYWxpemVyIGFsbG93cyB0aGUgY29tcGlsZXIKICAqIHRvIGdlbmVyYXRlIGJldHRlciBjb2RlLgogICovCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKyNkZWZpbmUgSU5JVF9XT1JLKF93b3JrLCBfZnVuYykJCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJCQkJCQkJCVwKKwkJKF93b3JrKS0+ZGF0YSA9IChhdG9taWNfbG9uZ190KSBXT1JLX0RBVEFfSU5JVCgpOwlcCisJCWxvY2tkZXBfaW5pdF9tYXAoJihfd29yayktPmxvY2tkZXBfbWFwLCAjX3dvcmssICZfX2tleSwgMCk7XAorCQlJTklUX0xJU1RfSEVBRCgmKF93b3JrKS0+ZW50cnkpOwkJCVwKKwkJUFJFUEFSRV9XT1JLKChfd29yayksIChfZnVuYykpOwkJCQlcCisJfSB3aGlsZSAoMCkKKyNlbHNlCiAjZGVmaW5lIElOSVRfV09SSyhfd29yaywgX2Z1bmMpCQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKIAkJKF93b3JrKS0+ZGF0YSA9IChhdG9taWNfbG9uZ190KSBXT1JLX0RBVEFfSU5JVCgpOwlcCiAJCUlOSVRfTElTVF9IRUFEKCYoX3dvcmspLT5lbnRyeSk7CQkJXAogCQlQUkVQQVJFX1dPUksoKF93b3JrKSwgKF9mdW5jKSk7CQkJCVwKIAl9IHdoaWxlICgwKQorI2VuZGlmCiAKICNkZWZpbmUgSU5JVF9ERUxBWUVEX1dPUksoX3dvcmssIF9mdW5jKQkJCQlcCiAJZG8gewkJCQkJCQlcCkBAIC0xMTgsOSArMTQ3LDIzIEBACiAJY2xlYXJfYml0KFdPUktfU1RSVUNUX1BFTkRJTkcsIHdvcmtfZGF0YV9iaXRzKHdvcmspKQogCiAKLWV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX19jcmVhdGVfd29ya3F1ZXVlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCQkgICAgaW50IHNpbmdsZXRocmVhZCwKLQkJCQkJCSAgICBpbnQgZnJlZXplYWJsZSk7CitleHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKgorX19jcmVhdGVfd29ya3F1ZXVlX2tleShjb25zdCBjaGFyICpuYW1lLCBpbnQgc2luZ2xldGhyZWFkLAorCQkgICAgICAgaW50IGZyZWV6ZWFibGUsIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKKworI2lmZGVmIENPTkZJR19MT0NLREVQCisjZGVmaW5lIF9fY3JlYXRlX3dvcmtxdWV1ZShuYW1lLCBzaW5nbGV0aHJlYWQsIGZyZWV6ZWFibGUpCVwKKyh7CQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCisJCQkJCQkJCVwKKwlfX2NyZWF0ZV93b3JrcXVldWVfa2V5KChuYW1lKSwgKHNpbmdsZXRocmVhZCksCQlcCisJCQkgICAgICAgKGZyZWV6ZWFibGUpLCAmX19rZXkpOwkJXAorfSkKKyNlbHNlCisjZGVmaW5lIF9fY3JlYXRlX3dvcmtxdWV1ZShuYW1lLCBzaW5nbGV0aHJlYWQsIGZyZWV6ZWFibGUpCVwKKwlfX2NyZWF0ZV93b3JrcXVldWVfa2V5KChuYW1lKSwgKHNpbmdsZXRocmVhZCksIChmcmVlemVhYmxlKSwgTlVMTCkKKyNlbmRpZgorCiAjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMCwgMCkKICNkZWZpbmUgY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDEpCiAjZGVmaW5lIGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5hbWUpIF9fY3JlYXRlX3dvcmtxdWV1ZSgobmFtZSksIDEsIDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC85cC85cC5oIGIvaW5jbHVkZS9uZXQvOXAvOXAuaAppbmRleCA2ODY0MjVhLi42MjUzNDZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC85cC5oCisrKyBiL2luY2x1ZGUvbmV0LzlwLzlwLmgKQEAgLTQ0LDcgKzQ0LDcgQEAKIGRvIHsgIFwKIAlpZiAoKHA5X2RlYnVnX2xldmVsICYgbGV2ZWwpID09IGxldmVsKSBcCiAJCXByaW50ayhLRVJOX05PVElDRSAiLS0gJXMgKCVkKTogIiBcCi0JCWZvcm1hdCAsIF9fRlVOQ1RJT05fXywgY3VycmVudC0+cGlkICwgIyMgYXJnKTsgXAorCQlmb3JtYXQgLCBfX0ZVTkNUSU9OX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpICwgIyMgYXJnKTsgXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBQUklOVF9GQ0FMTF9FUlJPUihzLCBmY2FsbCkgUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwgICBcCkBAIC01OSw3ICs1OSw3IEBACiAjZGVmaW5lIFA5X0VQUklOVEsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSBcCiBkbyB7IFwKIAlwcmludGsobGV2ZWwgIjlwOiAlcyAoJWQpOiAiIFwKLQkJZm9ybWF0ICwgX19GVU5DVElPTl9fLCBjdXJyZW50LT5waWQgLCAjIyBhcmcpOyBcCisJCWZvcm1hdCAsIF9fRlVOQ1RJT05fXywgdGFza19waWRfbnIoY3VycmVudCksICMjIGFyZyk7IFwKIH0gd2hpbGUgKDApCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9mcmFnLmggYi9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaAppbmRleCA5MTFjMmNkLi45NTRkZWY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2ZyYWcuaApAQCAtMzksOCArMzksMTMgQEAKIAlzdHJ1Y3QgaW5ldF9mcmFnc19jdGwJKmN0bDsKIAogCXVuc2lnbmVkIGludAkJKCpoYXNoZm4pKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKik7CisJdm9pZAkJCSgqY29uc3RydWN0b3IpKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsCisJCQkJCQl2b2lkICphcmcpOwogCXZvaWQJCQkoKmRlc3RydWN0b3IpKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKik7CiAJdm9pZAkJCSgqc2tiX2ZyZWUpKHN0cnVjdCBza19idWZmICopOworCWludAkJCSgqbWF0Y2gpKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsCisJCQkJCQl2b2lkICphcmcpOworCXZvaWQJCQkoKmZyYWdfZXhwaXJlKSh1bnNpZ25lZCBsb25nIGRhdGEpOwogfTsKIAogdm9pZCBpbmV0X2ZyYWdzX2luaXQoc3RydWN0IGluZXRfZnJhZ3MgKik7CkBAIC01MCw2ICs1NSw4IEBACiB2b2lkIGluZXRfZnJhZ19kZXN0cm95KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsCiAJCQkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIGludCAqd29yayk7CiBpbnQgaW5ldF9mcmFnX2V2aWN0b3Ioc3RydWN0IGluZXRfZnJhZ3MgKmYpOworc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqaW5ldF9mcmFnX2ZpbmQoc3RydWN0IGluZXRfZnJhZ3MgKmYsIHZvaWQgKmtleSwKKwkJdW5zaWduZWQgaW50IGhhc2gpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgaW5ldF9mcmFnX3B1dChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCBzdHJ1Y3QgaW5ldF9mcmFncyAqZikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBjYzc5NmNiLi5hZTMyOGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC0zNzcsNiArMzc3LDE3IEBACiAJCQkJICAgcHJlZml4bGVuKTsKIH0KIAorc3RydWN0IGluZXRfZnJhZ19xdWV1ZTsKKworc3RydWN0IGlwNl9jcmVhdGVfYXJnIHsKKwlfX2JlMzIgaWQ7CisJc3RydWN0IGluNl9hZGRyICpzcmM7CisJc3RydWN0IGluNl9hZGRyICpkc3Q7Cit9OworCit2b2lkIGlwNl9mcmFnX2luaXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgdm9pZCAqYSk7CitpbnQgaXA2X2ZyYWdfbWF0Y2goc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgdm9pZCAqYSk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGlwdjZfYWRkcl9hbnkoY29uc3Qgc3RydWN0IGluNl9hZGRyICphKQogewogCXJldHVybiAoKGEtPnM2X2FkZHIzMlswXSB8IGEtPnM2X2FkZHIzMlsxXSB8IApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oCmluZGV4IGNmODBjMWEuLjMyYzM4NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJ0dHAuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmgKQEAgLTU2LDcgKzU2LDcgQEAKIAogLyogUmVjZWl2ZSBxdWV1ZSBzaXplcyAqLwogLyogTWluaW11bSBvZiBjcmVkaXQgdGhhdCB0aGUgcGVlciBzaG91bGQgaG9sZC4KLSAqIElmIHRoZSBwZWVyIGhhcyBsZXNzIGNyZWRpdHMgdGhhbiA5IGZyYW1lcywgd2Ugd2lsbCBleHBsaWNpdGVseSBzZW5kCisgKiBJZiB0aGUgcGVlciBoYXMgbGVzcyBjcmVkaXRzIHRoYW4gOSBmcmFtZXMsIHdlIHdpbGwgZXhwbGljaXRseSBzZW5kCiAgKiBoaW0gc29tZSBjcmVkaXRzICh0aHJvdWdoIGlydHRwX2dpdmVfY3JlZGl0KCkgYW5kIGEgc3BlY2lmaWMgZnJhbWUpLgogICogTm90ZSB0aGF0IHdoZW4gd2UgZ2l2ZSBjcmVkaXRzIGl0J3MgbGlrZWx5IHRoYXQgaXQgd29uJ3QgYmUgc2VudCBpbgogICogdGhpcyBMQVAgd2luZG93LCBidXQgaW4gdGhlIG5leHQgb25lLiBTbywgd2UgbWFrZSBzdXJlIHRoYXQgdGhlIHBlZXIKQEAgLTY2LDcgKzY2LDcgQEAKIC8qIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgY3JlZGl0cyBoZWxkIGJ5IHRoZSBwZWVyLCBzbyB0aGUKICAqIGRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGhlIGNhbiBzZW5kIHVzIGJlZm9yZSBuZWVkaW5nIGZsb3cKICAqIGNvbnRyb2wgYW5zd2VyIGZyb20gdXMgKHRoaXMgbWF5IGJlIG5lZ29jaWF0ZWQgZGlmZmVyZW50bHkgYXQgVFNBUCBzZXR1cCkuCi0gKiBXZSB3YW50IHRvIG1pbmltaXNlIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgaGF2ZSB0byBleHBsaWNpdGVseSBzZW5kIHNvbWUKKyAqIFdlIHdhbnQgdG8gbWluaW1pc2UgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgc2VuZCBzb21lCiAgKiBjcmVkaXQgdG8gdGhlIHBlZXIsIGhvcGluZyB3ZSBjYW4gcGlnZ3liYWNrIGl0IG9uIHRoZSByZXR1cm4gZGF0YS4gSW4KICAqIHBhcnRpY3VsYXIsIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgdXMgdG8gc2VuZCBjcmVkaXQgbW9yZSB0aGFuIG9uY2UKICAqIHBlciBMQVAgd2luZG93LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaAppbmRleCA0MjNjYjFkLi4wNmRmMTI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY20uaAorKysgYi9pbmNsdWRlL25ldC9zY20uaApAQCAtNCw2ICs0LDggQEAKICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXQuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZC5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KIAogLyogV2VsbCwgd2Ugc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIGRlc2NyaXB0b3Igb3BlbgogICogdG8gYWNjZXB0IHBhc3NlZCBGRHMgOCkKQEAgLTU0LDcgKzU2LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBjdXJyZW50OwogCXNjbS0+Y3JlZHMudWlkID0gcC0+dWlkOwogCXNjbS0+Y3JlZHMuZ2lkID0gcC0+Z2lkOwotCXNjbS0+Y3JlZHMucGlkID0gcC0+dGdpZDsKKwlzY20tPmNyZWRzLnBpZCA9IHRhc2tfdGdpZF92bnIocCk7CiAJc2NtLT5mcCA9IE5VTEw7CiAJc2NtLT5zZXEgPSAwOwogCXVuaXhfZ2V0X3BlZXJzZWNfZGdyYW0oc29jaywgc2NtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCA0NTNjNzlkLi40M2ZjM2ZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC05MDUsMTYgKzkwNSw2IEBACiB9CiAKIC8qKgotICogCXNrX2ZpbHRlcl9yY3VfZnJlZTogRnJlZSBhIHNvY2tldCBmaWx0ZXIKLSAqCUByY3U6IHJjdV9oZWFkIHRoYXQgY29udGFpbnMgdGhlIHNrX2ZpbHRlciB0byBmcmVlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBza19maWx0ZXJfcmN1X2ZyZWUoc3RydWN0IHJjdV9oZWFkICpyY3UpCi17Ci0Jc3RydWN0IHNrX2ZpbHRlciAqZnAgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgc2tfZmlsdGVyLCByY3UpOwotCWtmcmVlKGZwKTsKLX0KLQotLyoqCiAgKglza19maWx0ZXJfcmVsZWFzZTogUmVsZWFzZSBhIHNvY2tldCBmaWx0ZXIKICAqCUBzazogc29ja2V0CiAgKglAZnA6IGZpbHRlciB0byByZW1vdmUKQEAgLTkyMiwxNCArOTEyLDE4IEBACiAgKglSZW1vdmUgYSBmaWx0ZXIgZnJvbSBhIHNvY2tldCBhbmQgcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgogICovCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBza19maWx0ZXJfcmVsZWFzZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19maWx0ZXIgKmZwKQorc3RhdGljIGlubGluZSB2b2lkIHNrX2ZpbHRlcl9yZWxlYXNlKHN0cnVjdCBza19maWx0ZXIgKmZwKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmcC0+cmVmY250KSkKKwkJa2ZyZWUoZnApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2tfZmlsdGVyX3VuY2hhcmdlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2ZpbHRlciAqZnApCiB7CiAJdW5zaWduZWQgaW50IHNpemUgPSBza19maWx0ZXJfbGVuKGZwKTsKIAogCWF0b21pY19zdWIoc2l6ZSwgJnNrLT5za19vbWVtX2FsbG9jKTsKLQotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZmcC0+cmVmY250KSkKLQkJY2FsbF9yY3VfYmgoJmZwLT5yY3UsIHNrX2ZpbHRlcl9yY3VfZnJlZSk7CisJc2tfZmlsdGVyX3JlbGVhc2UoZnApOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2tfZmlsdGVyX2NoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19maWx0ZXIgKmZwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDBlODQ0ODQuLjY4OGY2ZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTE4Niw3ICsxODYsOCBAQAogCS8qIFJlZmVyZW5jZSB0byBkYXRhIGNvbW1vbiB0byBhbGwgdGhlIGluc3RhbmNlcyBvZiB0aGlzCiAJICogdHJhbnNmb3JtZXIuICovCiAJc3RydWN0IHhmcm1fdHlwZQkqdHlwZTsKLQlzdHJ1Y3QgeGZybV9tb2RlCSptb2RlOworCXN0cnVjdCB4ZnJtX21vZGUJKmlubmVyX21vZGU7CisJc3RydWN0IHhmcm1fbW9kZQkqb3V0ZXJfbW9kZTsKIAogCS8qIFNlY3VyaXR5IGNvbnRleHQgKi8KIAlzdHJ1Y3QgeGZybV9zZWNfY3R4CSpzZWN1cml0eTsKQEAgLTIyOCw4ICsyMjksNiBAQAogc3RydWN0IHhmcm1fZHN0Owogc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyB7CiAJdW5zaWduZWQgc2hvcnQJCWZhbWlseTsKLQlzdHJ1Y3QgeGZybV90eXBlCSp0eXBlX21hcFtJUFBST1RPX01BWF07Ci0Jc3RydWN0IHhmcm1fbW9kZQkqbW9kZV9tYXBbWEZSTV9NT0RFX01BWF07CiAJc3RydWN0IGRzdF9vcHMJCSpkc3Rfb3BzOwogCXZvaWQJCQkoKmdhcmJhZ2VfY29sbGVjdCkodm9pZCk7CiAJaW50CQkJKCpkc3RfbG9va3VwKShzdHJ1Y3QgeGZybV9kc3QgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpOwpAQCAtMjU1LDcgKzI1NCwxMCBAQAogZXh0ZXJuIGludCBfX3hmcm1fc3RhdGVfZGVsZXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIAogc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvIHsKLQl1bnNpZ25lZCBzaG9ydAkJZmFtaWx5OworCXVuc2lnbmVkIGludAkJZmFtaWx5OworCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKKwlzdHJ1Y3QgeGZybV90eXBlCSp0eXBlX21hcFtJUFBST1RPX01BWF07CisJc3RydWN0IHhmcm1fbW9kZQkqbW9kZV9tYXBbWEZSTV9NT0RFX01BWF07CiAJaW50CQkJKCppbml0X2ZsYWdzKShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiAJdm9pZAkJCSgqaW5pdF90ZW1wc2VsKShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IGZsb3dpICpmbCwKIAkJCQkJCXN0cnVjdCB4ZnJtX3RtcGwgKnRtcGwsCkBAIC0yNjcsOCArMjY5LDYgQEAKIAogZXh0ZXJuIGludCB4ZnJtX3N0YXRlX3JlZ2lzdGVyX2FmaW5mbyhzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbyk7CiBleHRlcm4gaW50IHhmcm1fc3RhdGVfdW5yZWdpc3Rlcl9hZmluZm8oc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm8pOwotZXh0ZXJuIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqeGZybV9zdGF0ZV9nZXRfYWZpbmZvKHVuc2lnbmVkIHNob3J0IGZhbWlseSk7Ci1leHRlcm4gdm9pZCB4ZnJtX3N0YXRlX3B1dF9hZmluZm8oc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm8pOwogCiBleHRlcm4gdm9pZCB4ZnJtX3N0YXRlX2RlbGV0ZV90dW5uZWwoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogCkBAIC0yOTUsOCArMjk1LDYgQEAKIAogZXh0ZXJuIGludCB4ZnJtX3JlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBpbnQgeGZybV91bnJlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKLWV4dGVybiBzdHJ1Y3QgeGZybV90eXBlICp4ZnJtX2dldF90eXBlKHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwotZXh0ZXJuIHZvaWQgeGZybV9wdXRfdHlwZShzdHJ1Y3QgeGZybV90eXBlICp0eXBlKTsKIAogc3RydWN0IHhmcm1fbW9kZSB7CiAJaW50ICgqaW5wdXQpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTMxNCwxNCArMzEyLDE5IEBACiAJICovCiAJaW50ICgqb3V0cHV0KShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAorCXN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwogCXVuc2lnbmVkIGludCBlbmNhcDsKKwlpbnQgZmxhZ3M7Cit9OworCisvKiBGbGFncyBmb3IgeGZybV9tb2RlLiAqLworZW51bSB7CisJWEZSTV9NT0RFX0ZMQUdfVFVOTkVMID0gMSwKIH07CiAKIGV4dGVybiBpbnQgeGZybV9yZWdpc3Rlcl9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUsIGludCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtX3VucmVnaXN0ZXJfbW9kZShzdHJ1Y3QgeGZybV9tb2RlICptb2RlLCBpbnQgZmFtaWx5KTsKLWV4dGVybiBzdHJ1Y3QgeGZybV9tb2RlICp4ZnJtX2dldF9tb2RlKHVuc2lnbmVkIGludCBlbmNhcCwgaW50IGZhbWlseSk7Ci1leHRlcm4gdm9pZCB4ZnJtX3B1dF9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUpOwogCiBzdHJ1Y3QgeGZybV90bXBsCiB7CkBAIC0xMDQ2LDExICsxMDQ5LDE5IEBACiBleHRlcm4gaW50IHhmcm1fc3RhdGVfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgbXR1KTsKIGV4dGVybiBpbnQgeGZybV9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIGV4dGVybiBpbnQgeGZybV9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gaW50IHhmcm00X3Jjdl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwKKwkJCSAgIGludCBlbmNhcF90eXBlKTsKIGV4dGVybiBpbnQgeGZybTRfcmN2KHN0cnVjdCBza19idWZmICpza2IpOworCitzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpKQoreworCXJldHVybiB4ZnJtNF9yY3ZfZW5jYXAoc2tiLCBuZXh0aGRyLCBzcGksIDApOworfQorCiBleHRlcm4gaW50IHhmcm00X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTRfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCB4ZnJtX3R1bm5lbCAqaGFuZGxlciwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBpbnQgeGZybTRfdHVubmVsX2RlcmVnaXN0ZXIoc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwotZXh0ZXJuIGludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcGkpOworZXh0ZXJuIGludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIGludCBuZXh0aGRyLCBfX2JlMzIgc3BpKTsKIGV4dGVybiBpbnQgeGZybTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9pbnB1dF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHhmcm1fYWRkcmVzc190ICpkYWRkciwKIAkJCSAgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaCBiL2luY2x1ZGUvdmlkZW8vc3N0ZmIuaAppbmRleCBiYWExNjNmLi5iNTJmMDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL3NzdGZiLmgKKysrIGIvaW5jbHVkZS92aWRlby9zc3RmYi5oCkBAIC02OCw3ICs2OCw2IEBACiAjICBkZWZpbmUgcHJpbnRfdmFyKFgsWS4uLikKICNlbmRpZgogCi0jZGVmaW5lIEJJVCh4KQkJKDF1bDw8KHgpKQogI2RlZmluZSBQT1cyKHgpCQkoMXVsPDwoeCkpCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL3ZpZGVvL3RkZnguaCBiL2luY2x1ZGUvdmlkZW8vdGRmeC5oCmluZGV4IDA1YjYzYzIuLjc0MzFkOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdmlkZW8vdGRmeC5oCisrKyBiL2luY2x1ZGUvdmlkZW8vdGRmeC5oCkBAIC03OSw4ICs3OSw2IEBACiAKIC8qIHJlZ2lzdGVyIGJpdGZpZWxkcyAobm90IGFsbCwgb25seSBhcyBuZWVkZWQpICovCiAKLSNkZWZpbmUgQklUKHgpCSgxVUwgPDwgKHgpKQotCiAvKiBDT01NQU5EXzJEIHJlZy4gdmFsdWVzICovCiAjZGVmaW5lIFRERlhfUk9QX0NPUFkJCTB4Y2MJLyogc3JjICovCiAjZGVmaW5lIFRERlhfUk9QX0lOVkVSVAkJMHg1NQkvKiBOT1QgZHN0ICovCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYTI5YTY4OC4uNTQxMzgyZCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMjcwLDkgKzI3MCw0MyBAQAogCQkgICAgIDEzID0+ICA4IEtCCiAJCSAgICAgMTIgPT4gIDQgS0IKIAorY29uZmlnIENHUk9VUFMKKwlib29sICJDb250cm9sIEdyb3VwIHN1cHBvcnQiCisJaGVscAorCSAgVGhpcyBvcHRpb24gd2lsbCBsZXQgeW91IHVzZSBwcm9jZXNzIGNncm91cCBzdWJzeXN0ZW1zCisJICBzdWNoIGFzIENwdXNldHMKKworCSAgU2F5IE4gaWYgdW5zdXJlLgorCitjb25maWcgQ0dST1VQX0RFQlVHCisJYm9vbCAiRXhhbXBsZSBkZWJ1ZyBjZ3JvdXAgc3Vic3lzdGVtIgorCWRlcGVuZHMgb24gQ0dST1VQUworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBzaW1wbGUgY2dyb3VwIHN1YnN5c3RlbSB0aGF0CisJICBleHBvcnRzIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNncm91cHMKKwkgIGZyYW1ld29yaworCisJICBTYXkgTiBpZiB1bnN1cmUKKworY29uZmlnIENHUk9VUF9OUworICAgICAgICBib29sICJOYW1lc3BhY2UgY2dyb3VwIHN1YnN5c3RlbSIKKyAgICAgICAgZGVwZW5kcyBvbiBDR1JPVVBTCisgICAgICAgIGhlbHAKKyAgICAgICAgICBQcm92aWRlcyBhIHNpbXBsZSBuYW1lc3BhY2UgY2dyb3VwIHN1YnN5c3RlbSB0bworICAgICAgICAgIHByb3ZpZGUgaGllcmFyY2hpY2FsIG5hbWluZyBvZiBzZXRzIG9mIG5hbWVzcGFjZXMsCisgICAgICAgICAgZm9yIGluc3RhbmNlIHZpcnR1YWwgc2VydmVycyBhbmQgY2hlY2twb2ludC9yZXN0YXJ0CisgICAgICAgICAgam9icy4KKworY29uZmlnIENHUk9VUF9DUFVBQ0NUCisJYm9vbCAiU2ltcGxlIENQVSBhY2NvdW50aW5nIGNncm91cCBzdWJzeXN0ZW0iCisJZGVwZW5kcyBvbiBDR1JPVVBTCisJaGVscAorCSAgUHJvdmlkZXMgYSBzaW1wbGUgUmVzb3VyY2UgQ29udHJvbGxlciBmb3IgbW9uaXRvcmluZyB0aGUKKwkgIHRvdGFsIENQVSBjb25zdW1lZCBieSB0aGUgdGFza3MgaW4gYSBjZ3JvdXAKKwogY29uZmlnIENQVVNFVFMKIAlib29sICJDcHVzZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNNUAorCWRlcGVuZHMgb24gU01QICYmIENHUk9VUFMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiB3aWxsIGxldCB5b3UgY3JlYXRlIGFuZCBtYW5hZ2UgQ1BVU0VUcyB3aGljaAogCSAgYWxsb3cgZHluYW1pY2FsbHkgcGFydGl0aW9uaW5nIGEgc3lzdGVtIGludG8gc2V0cyBvZiBDUFVzIGFuZApAQCAtMzAwLDYgKzMzNCwxNiBAQAogCSAgVGhpcyBvcHRpb24gd2lsbCBjaG9vc2UgdXNlcmlkIGFzIHRoZSBiYXNpcyBmb3IgZ3JvdXBpbmcKIAkgIHRhc2tzLCB0aHVzIHByb3ZpZGluZyBlcXVhbCBDUFUgYmFuZHdpZHRoIHRvIGVhY2ggdXNlci4KIAorY29uZmlnIEZBSVJfQ0dST1VQX1NDSEVECisJYm9vbCAiQ29udHJvbCBncm91cHMiCisgCWRlcGVuZHMgb24gQ0dST1VQUworIAloZWxwCisJICBUaGlzIG9wdGlvbiBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhcmJpdHJhcnkgdGFzayBncm91cHMKKwkgIHVzaW5nIHRoZSAiY2dyb3VwIiBwc2V1ZG8gZmlsZXN5c3RlbSBhbmQgY29udHJvbAorCSAgdGhlIGNwdSBiYW5kd2lkdGggYWxsb2NhdGVkIHRvIGVhY2ggc3VjaCB0YXNrIGdyb3VwLgorCSAgUmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9jZ3JvdXBzLnR4dCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorCSAgb24gImNncm91cCIgcHNldWRvIGZpbGVzeXN0ZW0uCisKIGVuZGNob2ljZQogCiBjb25maWcgU1lTRlNfREVQUkVDQVRFRApAQCAtMzIyLDYgKzM2NiwxMSBAQAogCSAgSWYgeW91IGFyZSB1c2luZyBhIGRpc3RybyB0aGF0IHdhcyByZWxlYXNlZCBpbiAyMDA2IG9yIGxhdGVyLAogCSAgaXQgc2hvdWxkIGJlIHNhZmUgdG8gc2F5IE4gaGVyZS4KIAorY29uZmlnIFBST0NfUElEX0NQVVNFVAorCWJvb2wgIkluY2x1ZGUgbGVnYWN5IC9wcm9jLzxwaWQ+L2NwdXNldCBmaWxlIgorCWRlcGVuZHMgb24gQ1BVU0VUUworCWRlZmF1bHQgeQorCiBjb25maWcgUkVMQVkKIAlib29sICJLZXJuZWwtPnVzZXIgc3BhY2UgcmVsYXkgc3VwcG9ydCAoZm9ybWVybHkgcmVsYXlmcykiCiAJaGVscApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHNfcmQuYyBiL2luaXQvZG9fbW91bnRzX3JkLmMKaW5kZXggZWQ2NTJmNC4uM2FjNTkwNCAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfcmQuYworKysgYi9pbml0L2RvX21vdW50c19yZC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJdW5zaWduZWQgY2hhciAqYnVmOwogCiAJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmID09IDApCisJaWYgKCFidWYpCiAJCXJldHVybiAtMTsKIAogCW1pbml4c2IgPSAoc3RydWN0IG1pbml4X3N1cGVyX2Jsb2NrICopIGJ1ZjsKQEAgLTQwNywxMiArNDA3LDEyIEBACiAJY3JkX2luZmQgPSBpbl9mZDsKIAljcmRfb3V0ZmQgPSBvdXRfZmQ7CiAJaW5idWYgPSBrbWFsbG9jKElOQlVGU0laLCBHRlBfS0VSTkVMKTsKLQlpZiAoaW5idWYgPT0gMCkgeworCWlmICghaW5idWYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJSQU1ESVNLOiBDb3VsZG4ndCBhbGxvY2F0ZSBnemlwIGJ1ZmZlclxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAJd2luZG93ID0ga21hbGxvYyhXU0laRSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHdpbmRvdyA9PSAwKSB7CisJaWYgKCF3aW5kb3cpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJSQU1ESVNLOiBDb3VsZG4ndCBhbGxvY2F0ZSBnemlwIHdpbmRvd1xuIik7CiAJCWtmcmVlKGluYnVmKTsKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvaW5pdC9tYWluLmMgYi9pbml0L21haW4uYwppbmRleCA5ZGVmOTM1Li5mNjA1YTk2IDEwMDY0NAotLS0gYS9pbml0L21haW4uYworKysgYi9pbml0L21haW4uYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L2VmaS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTY5LDE1ICs3MCw3IEBACiAvKgogICogVGhpcyBpcyBvbmUgb2YgdGhlIGZpcnN0IC5jIGZpbGVzIGJ1aWx0LiBFcnJvciBvdXQgZWFybHkgaWYgd2UgaGF2ZSBjb21waWxlcgogICogdHJvdWJsZS4KLSAqCi0gKiBWZXJzaW9ucyBvZiBnY2Mgb2xkZXIgdGhhbiB0aGF0IGxpc3RlZCBiZWxvdyBtYXkgYWN0dWFsbHkgY29tcGlsZSBhbmQgbGluawotICogb2theSwgYnV0IHRoZSBlbmQgcHJvZHVjdCBjYW4gaGF2ZSBzdWJ0bGUgcnVuIHRpbWUgYnVncy4gIFRvIGF2b2lkIGFzc29jaWF0ZWQKLSAqIGJvZ3VzIGJ1ZyByZXBvcnRzLCB3ZSBmbGF0bHkgcmVmdXNlIHRvIGNvbXBpbGUgd2l0aCBhIGdjYyB0aGF0IGlzIGtub3duIHRvIGJlCi0gKiB0b28gb2xkIGZyb20gdGhlIHZlcnkgYmVnaW5uaW5nLgogICovCi0jaWYgKF9fR05VQ19fIDwgMykgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPCAyKQotI2Vycm9yIFNvcnJ5LCB5b3VyIEdDQyBpcyB0b28gb2xkLiBJdCBidWlsZHMgaW5jb3JyZWN0IGtlcm5lbHMuCi0jZW5kaWYKIAogI2lmIF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPT0gMSAmJiBfX0dOVUNfUEFUQ0hMRVZFTF9fID09IDAKICN3YXJuaW5nIGdjYy00LjEuMCBpcyBrbm93biB0byBtaXNjb21waWxlIHRoZSBrZXJuZWwuICBBIGRpZmZlcmVudCBjb21waWxlciB2ZXJzaW9uIGlzIHJlY29tbWVuZGVkLgpAQCAtMjg3LDcgKzI4MCw3IEBACiAJCXJldHVybiAwOwogCiAJLyoKLQkgKiBQcmVlbXB0aXZlIG1haW50ZW5hbmNlIGZvciAid2h5IGRpZG4ndCBteSBtaXNwZWxsZWQgY29tbWFuZAorCSAqIFByZWVtcHRpdmUgbWFpbnRlbmFuY2UgZm9yICJ3aHkgZGlkbid0IG15IG1pc3NwZWxsZWQgY29tbWFuZAogCSAqIGxpbmUgd29yaz8iCiAJICovCiAJaWYgKHN0cmNocihwYXJhbSwgJy4nKSAmJiAoIXZhbCB8fCBzdHJjaHIocGFyYW0sICcuJykgPCB2YWwpKSB7CkBAIC01MjMsNiArNTE2LDcgQEAKIAkgKi8KIAl1bndpbmRfaW5pdCgpOwogCWxvY2tkZXBfaW5pdCgpOworCWNncm91cF9pbml0X2Vhcmx5KCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWVhcmx5X2Jvb3RfaXJxc19vZmYoKTsKQEAgLTY0MCw2ICs2MzQsNyBAQAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJcHJvY19yb290X2luaXQoKTsKICNlbmRpZgorCWNncm91cF9pbml0KCk7CiAJY3B1c2V0X2luaXQoKTsKIAl0YXNrc3RhdHNfaW5pdF9lYXJseSgpOwogCWRlbGF5YWNjdF9pbml0KCk7CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggNzc0ODQzYy4uYzBiMjZkYyAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMjksNiArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CisjaW5jbHVkZSA8bGludXgvcGlkLmg+CiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgInV0aWwuaCIKQEAgLTQ0LDEyICs0Niw2IEBACiAjZGVmaW5lIFNUQVRFX1BFTkRJTkcJMQogI2RlZmluZSBTVEFURV9SRUFEWQkyCiAKLS8qIHVzZWQgYnkgc3lzY3RsICovCi0jZGVmaW5lIEZTX01RVUVVRSAJMQotI2RlZmluZSBDVExfUVVFVUVTTUFYIAkyCi0jZGVmaW5lIENUTF9NU0dNQVggCTMKLSNkZWZpbmUgQ1RMX01TR1NJWkVNQVggCTQKLQogLyogZGVmYXVsdCB2YWx1ZXMgKi8KICNkZWZpbmUgREZMVF9RVUVVRVNNQVgJMjU2CS8qIG1heCBudW1iZXIgb2YgbWVzc2FnZSBxdWV1ZXMgKi8KICNkZWZpbmUgREZMVF9NU0dNQVggCTEwCS8qIG1heCBudW1iZXIgb2YgbWVzc2FnZXMgaW4gZWFjaCBxdWV1ZSAqLwpAQCAtMzM2LDcgKzMzMiw4IEBACiAJCQkoaW5mby0+bm90aWZ5X293bmVyICYmCiAJCQkgaW5mby0+bm90aWZ5LnNpZ2V2X25vdGlmeSA9PSBTSUdFVl9TSUdOQUwpID8KIAkJCQlpbmZvLT5ub3RpZnkuc2lnZXZfc2lnbm8gOiAwLAotCQkJcGlkX25yKGluZm8tPm5vdGlmeV9vd25lcikpOworCQkJcGlkX25yX25zKGluZm8tPm5vdGlmeV9vd25lciwKKwkJCQljdXJyZW50LT5uc3Byb3h5LT5waWRfbnMpKTsKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJYnVmZmVyW3NpemVvZihidWZmZXIpLTFdID0gJ1wwJzsKIAlzbGVuID0gc3RybGVuKGJ1ZmZlcikrMTsKQEAgLTUxMyw3ICs1MTAsNyBAQAogCQkJc2lnX2kuc2lfZXJybm8gPSAwOwogCQkJc2lnX2kuc2lfY29kZSA9IFNJX01FU0dROwogCQkJc2lnX2kuc2lfdmFsdWUgPSBpbmZvLT5ub3RpZnkuc2lnZXZfdmFsdWU7Ci0JCQlzaWdfaS5zaV9waWQgPSBjdXJyZW50LT50Z2lkOworCQkJc2lnX2kuc2lfcGlkID0gdGFza19waWRfdm5yKGN1cnJlbnQpOwogCQkJc2lnX2kuc2lfdWlkID0gY3VycmVudC0+dWlkOwogCiAJCQlraWxsX3BpZF9pbmZvKGluZm8tPm5vdGlmeS5zaWdldl9zaWdubywKQEAgLTExOTYsNyArMTE5Myw2IEBACiAKIHN0YXRpYyBjdGxfdGFibGUgbXFfc3lzY3Rsc1tdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gQ1RMX1FVRVVFU01BWCwKIAkJLnByb2NuYW1lCT0gInF1ZXVlc19tYXgiLAogCQkuZGF0YQkJPSAmcXVldWVzX21heCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTEyMDQsNyArMTIwMCw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gQ1RMX01TR01BWCwKIAkJLnByb2NuYW1lCT0gIm1zZ19tYXgiLAogCQkuZGF0YQkJPSAmbXNnX21heCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTEyMTQsNyArMTIwOSw2IEBACiAJCS5leHRyYTIJCT0gJm1zZ19tYXhfbGltaXRfbWF4LAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBDVExfTVNHU0laRU1BWCwKIAkJLnByb2NuYW1lCT0gIm1zZ3NpemVfbWF4IiwKIAkJLmRhdGEJCT0gJm1zZ3NpemVfbWF4LAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTIyOCw3ICsxMjIyLDYgQEAKIAogc3RhdGljIGN0bF90YWJsZSBtcV9zeXNjdGxfZGlyW10gPSB7CiAJewotCQkuY3RsX25hbWUJPSBGU19NUVVFVUUsCiAJCS5wcm9jbmFtZQk9ICJtcXVldWUiLAogCQkubW9kZQkJPSAwNTU1LAogCQkuY2hpbGQJCT0gbXFfc3lzY3RscywKZGlmZiAtLWdpdCBhL2lwYy9tc2cuYyBiL2lwYy9tc2cuYwppbmRleCBhMDNmY2I1Li5mZGYzZGI1IDEwMDY0NAotLS0gYS9pcGMvbXNnLmMKKysrIGIvaXBjL21zZy5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KIAogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CkBAIC02NiwyMyArNjYsMTUgQEAKICNkZWZpbmUgU0VBUkNIX05PVEVRVUFMCQkzCiAjZGVmaW5lIFNFQVJDSF9MRVNTRVFVQUwJNAogCi1zdGF0aWMgYXRvbWljX3QgbXNnX2J5dGVzID0JQVRPTUlDX0lOSVQoMCk7Ci1zdGF0aWMgYXRvbWljX3QgbXNnX2hkcnMgPQlBVE9NSUNfSU5JVCgwKTsKLQogc3RhdGljIHN0cnVjdCBpcGNfaWRzIGluaXRfbXNnX2lkczsKIAogI2RlZmluZSBtc2dfaWRzKG5zKQkoKigobnMpLT5pZHNbSVBDX01TR19JRFNdKSkKIAotI2RlZmluZSBtc2dfbG9jayhucywgaWQpCSgoc3RydWN0IG1zZ19xdWV1ZSopaXBjX2xvY2soJm1zZ19pZHMobnMpLCBpZCkpCiAjZGVmaW5lIG1zZ191bmxvY2sobXNxKQkJaXBjX3VubG9jaygmKG1zcSktPnFfcGVybSkKLSNkZWZpbmUgbXNnX3JtaWQobnMsIGlkKQkoKHN0cnVjdCBtc2dfcXVldWUqKWlwY19ybWlkKCZtc2dfaWRzKG5zKSwgaWQpKQotI2RlZmluZSBtc2dfY2hlY2tpZChucywgbXNxLCBtc2dpZCkJXAotCWlwY19jaGVja2lkKCZtc2dfaWRzKG5zKSwgJm1zcS0+cV9wZXJtLCBtc2dpZCkKLSNkZWZpbmUgbXNnX2J1aWxkaWQobnMsIGlkLCBzZXEpIFwKLQlpcGNfYnVpbGRpZCgmbXNnX2lkcyhucyksIGlkLCBzZXEpCisjZGVmaW5lIG1zZ19idWlsZGlkKGlkLCBzZXEpCWlwY19idWlsZGlkKGlkLCBzZXEpCiAKLXN0YXRpYyB2b2lkIGZyZWVxdWUgKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IG1zZ19xdWV1ZSAqbXNxLCBpbnQgaWQpOwotc3RhdGljIGludCBuZXdxdWUgKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywga2V5X3Qga2V5LCBpbnQgbXNnZmxnKTsKK3N0YXRpYyB2b2lkIGZyZWVxdWUoc3RydWN0IGlwY19uYW1lc3BhY2UgKiwgc3RydWN0IG1zZ19xdWV1ZSAqKTsKK3N0YXRpYyBpbnQgbmV3cXVlKHN0cnVjdCBpcGNfbmFtZXNwYWNlICosIHN0cnVjdCBpcGNfcGFyYW1zICopOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiBzdGF0aWMgaW50IHN5c3ZpcGNfbXNnX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KTsKICNlbmRpZgpAQCAtOTMsNyArODUsOSBAQAogCW5zLT5tc2dfY3RsbWF4ID0gTVNHTUFYOwogCW5zLT5tc2dfY3RsbW5iID0gTVNHTU5COwogCW5zLT5tc2dfY3RsbW5pID0gTVNHTU5JOwotCWlwY19pbml0X2lkcyhpZHMsIG5zLT5tc2dfY3RsbW5pKTsKKwlhdG9taWNfc2V0KCZucy0+bXNnX2J5dGVzLCAwKTsKKwlhdG9taWNfc2V0KCZucy0+bXNnX2hkcnMsIDApOworCWlwY19pbml0X2lkcyhpZHMpOwogfQogCiBpbnQgbXNnX2luaXRfbnMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQpAQCAtMTEwLDIwICsxMDQsMjUgQEAKIAogdm9pZCBtc2dfZXhpdF9ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpCiB7Ci0JaW50IGk7CiAJc3RydWN0IG1zZ19xdWV1ZSAqbXNxOworCWludCBuZXh0X2lkOworCWludCB0b3RhbCwgaW5fdXNlOwogCi0JbXV0ZXhfbG9jaygmbXNnX2lkcyhucykubXV0ZXgpOwotCWZvciAoaSA9IDA7IGkgPD0gbXNnX2lkcyhucykubWF4X2lkOyBpKyspIHsKLQkJbXNxID0gbXNnX2xvY2sobnMsIGkpOworCWRvd25fd3JpdGUoJm1zZ19pZHMobnMpLnJ3X211dGV4KTsKKworCWluX3VzZSA9IG1zZ19pZHMobnMpLmluX3VzZTsKKworCWZvciAodG90YWwgPSAwLCBuZXh0X2lkID0gMDsgdG90YWwgPCBpbl91c2U7IG5leHRfaWQrKykgeworCQltc3EgPSBpZHJfZmluZCgmbXNnX2lkcyhucykuaXBjc19pZHIsIG5leHRfaWQpOwogCQlpZiAobXNxID09IE5VTEwpCiAJCQljb250aW51ZTsKLQotCQlmcmVlcXVlKG5zLCBtc3EsIGkpOworCQlpcGNfbG9ja19ieV9wdHIoJm1zcS0+cV9wZXJtKTsKKwkJZnJlZXF1ZShucywgbXNxKTsKKwkJdG90YWwrKzsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZtc2dfaWRzKG5zKS5tdXRleCk7CiAKLQlpcGNfZmluaV9pZHMobnMtPmlkc1tJUENfTVNHX0lEU10pOworCXVwX3dyaXRlKCZtc2dfaWRzKG5zKS5yd19tdXRleCk7CisKIAlrZnJlZShucy0+aWRzW0lQQ19NU0dfSURTXSk7CiAJbnMtPmlkc1tJUENfTVNHX0lEU10gPSBOVUxMOwogfQpAQCAtMTM2LDEwICsxMzUsNTUgQEAKIAkJCQlJUENfTVNHX0lEUywgc3lzdmlwY19tc2dfcHJvY19zaG93KTsKIH0KIAotc3RhdGljIGludCBuZXdxdWUgKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywga2V5X3Qga2V5LCBpbnQgbXNnZmxnKQorLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgaW4gdGhlIHBhdGhzIHdoZXJlIHRoZSByd19tdXRleCBpcyBoZWxkIHRvIHByb3RlY3QKKyAqIGFjY2VzcyB0byB0aGUgaWRyIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1zZ19xdWV1ZSAqbXNnX2xvY2tfY2hlY2tfZG93bihzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsCisJCQkJCQlpbnQgaWQpCit7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AgPSBpcGNfbG9ja19jaGVja19kb3duKCZtc2dfaWRzKG5zKSwgaWQpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3QgbXNnX3F1ZXVlLCBxX3Blcm0pOworfQorCisvKgorICogbXNnX2xvY2tfKGNoZWNrXykgcm91dGluZXMgYXJlIGNhbGxlZCBpbiB0aGUgcGF0aHMgd2hlcmUgdGhlIHJ3X211dGV4CisgKiBpcyBub3QgaGVsZC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXNnX3F1ZXVlICptc2dfbG9jayhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIGludCBpZCkKK3sKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCA9IGlwY19sb2NrKCZtc2dfaWRzKG5zKSwgaWQpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3QgbXNnX3F1ZXVlLCBxX3Blcm0pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtc2dfcXVldWUgKm1zZ19sb2NrX2NoZWNrKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywKKwkJCQkJCWludCBpZCkKK3sKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCA9IGlwY19sb2NrX2NoZWNrKCZtc2dfaWRzKG5zKSwgaWQpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3QgbXNnX3F1ZXVlLCBxX3Blcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbXNnX3JtaWQoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3QgbXNnX3F1ZXVlICpzKQoreworCWlwY19ybWlkKCZtc2dfaWRzKG5zKSwgJnMtPnFfcGVybSk7Cit9CisKKy8qKgorICogbmV3cXVlIC0gQ3JlYXRlIGEgbmV3IG1zZyBxdWV1ZQorICogQG5zOiBuYW1lc3BhY2UKKyAqIEBwYXJhbXM6IHB0ciB0byB0aGUgc3RydWN0dXJlIHRoYXQgY29udGFpbnMgdGhlIGtleSBhbmQgbXNnZmxnCisgKgorICogQ2FsbGVkIHdpdGggbXNnX2lkcy5yd19tdXRleCBoZWxkICh3cml0ZXIpCisgKi8KK3N0YXRpYyBpbnQgbmV3cXVlKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgbXNnX3F1ZXVlICptc3E7CiAJaW50IGlkLCByZXR2YWw7CisJa2V5X3Qga2V5ID0gcGFyYW1zLT5rZXk7CisJaW50IG1zZ2ZsZyA9IHBhcmFtcy0+ZmxnOwogCiAJbXNxID0gaXBjX3JjdV9hbGxvYyhzaXplb2YoKm1zcSkpOwogCWlmICghbXNxKQpAQCAtMTU1LDE0ICsxOTksMTcgQEAKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKKwkvKgorCSAqIGlwY19hZGRpZCgpIGxvY2tzIG1zcQorCSAqLwogCWlkID0gaXBjX2FkZGlkKCZtc2dfaWRzKG5zKSwgJm1zcS0+cV9wZXJtLCBucy0+bXNnX2N0bG1uaSk7Ci0JaWYgKGlkID09IC0xKSB7CisJaWYgKGlkIDwgMCkgewogCQlzZWN1cml0eV9tc2dfcXVldWVfZnJlZShtc3EpOwogCQlpcGNfcmN1X3B1dHJlZihtc3EpOwotCQlyZXR1cm4gLUVOT1NQQzsKKwkJcmV0dXJuIGlkOwogCX0KIAotCW1zcS0+cV9pZCA9IG1zZ19idWlsZGlkKG5zLCBpZCwgbXNxLT5xX3Blcm0uc2VxKTsKKwltc3EtPnFfcGVybS5pZCA9IG1zZ19idWlsZGlkKGlkLCBtc3EtPnFfcGVybS5zZXEpOwogCW1zcS0+cV9zdGltZSA9IG1zcS0+cV9ydGltZSA9IDA7CiAJbXNxLT5xX2N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAltc3EtPnFfY2J5dGVzID0gbXNxLT5xX3FudW0gPSAwOwpAQCAtMTcxLDkgKzIxOCwxMCBAQAogCUlOSVRfTElTVF9IRUFEKCZtc3EtPnFfbWVzc2FnZXMpOwogCUlOSVRfTElTVF9IRUFEKCZtc3EtPnFfcmVjZWl2ZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmbXNxLT5xX3NlbmRlcnMpOworCiAJbXNnX3VubG9jayhtc3EpOwogCi0JcmV0dXJuIG1zcS0+cV9pZDsKKwlyZXR1cm4gbXNxLT5xX3Blcm0uaWQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzc19hZGQoc3RydWN0IG1zZ19xdWV1ZSAqbXNxLCBzdHJ1Y3QgbXNnX3NlbmRlciAqbXNzKQpAQCAtMjI0LDE5ICsyNzIsMTkgQEAKIAogLyoKICAqIGZyZWVxdWUoKSB3YWtlcyB1cCB3YWl0ZXJzIG9uIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHdhaXRpbmcgcXVldWUsCi0gKiByZW1vdmVzIHRoZSBtZXNzYWdlIHF1ZXVlIGZyb20gbWVzc2FnZSBxdWV1ZSBJRAotICogYXJyYXksIGFuZCBjbGVhbnMgdXAgYWxsIHRoZSBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS4KKyAqIHJlbW92ZXMgdGhlIG1lc3NhZ2UgcXVldWUgZnJvbSBtZXNzYWdlIHF1ZXVlIElEIElEUiwgYW5kIGNsZWFucyB1cCBhbGwgdGhlCisgKiBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS4KICAqCi0gKiBtc2dfaWRzLm11dGV4IGFuZCB0aGUgc3BpbmxvY2sgZm9yIHRoaXMgbWVzc2FnZSBxdWV1ZSBpcyBob2xkCi0gKiBiZWZvcmUgZnJlZXF1ZSgpIGlzIGNhbGxlZC4gbXNnX2lkcy5tdXRleCByZW1haW5zIGxvY2tlZCBvbiBleGl0LgorICogbXNnX2lkcy5yd19tdXRleCAod3JpdGVyKSBhbmQgdGhlIHNwaW5sb2NrIGZvciB0aGlzIG1lc3NhZ2UgcXVldWUgYXJlIGhlbGQKKyAqIGJlZm9yZSBmcmVlcXVlKCkgaXMgY2FsbGVkLiBtc2dfaWRzLnJ3X211dGV4IHJlbWFpbnMgbG9ja2VkIG9uIGV4aXQuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVxdWUoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3QgbXNnX3F1ZXVlICptc3EsIGludCBpZCkKK3N0YXRpYyB2b2lkIGZyZWVxdWUoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3QgbXNnX3F1ZXVlICptc3EpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCiAJZXhwdW5nZV9hbGwobXNxLCAtRUlEUk0pOwogCXNzX3dha2V1cCgmbXNxLT5xX3NlbmRlcnMsIDEpOwotCW1zcSA9IG1zZ19ybWlkKG5zLCBpZCk7CisJbXNnX3JtaWQobnMsIG1zcSk7CiAJbXNnX3VubG9jayhtc3EpOwogCiAJdG1wID0gbXNxLT5xX21lc3NhZ2VzLm5leHQ7CkBAIC0yNDQsNDkgKzI5Miw0MCBAQAogCQlzdHJ1Y3QgbXNnX21zZyAqbXNnID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtc2dfbXNnLCBtX2xpc3QpOwogCiAJCXRtcCA9IHRtcC0+bmV4dDsKLQkJYXRvbWljX2RlYygmbXNnX2hkcnMpOworCQlhdG9taWNfZGVjKCZucy0+bXNnX2hkcnMpOwogCQlmcmVlX21zZyhtc2cpOwogCX0KLQlhdG9taWNfc3ViKG1zcS0+cV9jYnl0ZXMsICZtc2dfYnl0ZXMpOworCWF0b21pY19zdWIobXNxLT5xX2NieXRlcywgJm5zLT5tc2dfYnl0ZXMpOwogCXNlY3VyaXR5X21zZ19xdWV1ZV9mcmVlKG1zcSk7CiAJaXBjX3JjdV9wdXRyZWYobXNxKTsKIH0KIAorLyoKKyAqIENhbGxlZCB3aXRoIG1zZ19pZHMucndfbXV0ZXggYW5kIGlwY3AgbG9ja2VkLgorICovCitzdGF0aWMgaW5saW5lIGludCBtc2dfc2VjdXJpdHkoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AsIGludCBtc2dmbGcpCit7CisJc3RydWN0IG1zZ19xdWV1ZSAqbXNxID0gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBtc2dfcXVldWUsIHFfcGVybSk7CisKKwlyZXR1cm4gc2VjdXJpdHlfbXNnX3F1ZXVlX2Fzc29jaWF0ZShtc3EsIG1zZ2ZsZyk7Cit9CisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbXNnZ2V0KGtleV90IGtleSwgaW50IG1zZ2ZsZykKIHsKLQlzdHJ1Y3QgbXNnX3F1ZXVlICptc3E7Ci0JaW50IGlkLCByZXQgPSAtRVBFUk07CiAJc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zOworCXN0cnVjdCBpcGNfb3BzIG1zZ19vcHM7CisJc3RydWN0IGlwY19wYXJhbXMgbXNnX3BhcmFtczsKIAogCW5zID0gY3VycmVudC0+bnNwcm94eS0+aXBjX25zOwotCQotCW11dGV4X2xvY2soJm1zZ19pZHMobnMpLm11dGV4KTsKLQlpZiAoa2V5ID09IElQQ19QUklWQVRFKSAKLQkJcmV0ID0gbmV3cXVlKG5zLCBrZXksIG1zZ2ZsZyk7Ci0JZWxzZSBpZiAoKGlkID0gaXBjX2ZpbmRrZXkoJm1zZ19pZHMobnMpLCBrZXkpKSA9PSAtMSkgeyAvKiBrZXkgbm90IHVzZWQgKi8KLQkJaWYgKCEobXNnZmxnICYgSVBDX0NSRUFUKSkKLQkJCXJldCA9IC1FTk9FTlQ7Ci0JCWVsc2UKLQkJCXJldCA9IG5ld3F1ZShucywga2V5LCBtc2dmbGcpOwotCX0gZWxzZSBpZiAobXNnZmxnICYgSVBDX0NSRUFUICYmIG1zZ2ZsZyAmIElQQ19FWENMKSB7Ci0JCXJldCA9IC1FRVhJU1Q7Ci0JfSBlbHNlIHsKLQkJbXNxID0gbXNnX2xvY2sobnMsIGlkKTsKLQkJQlVHX09OKG1zcSA9PSBOVUxMKTsKLQkJaWYgKGlwY3Blcm1zKCZtc3EtPnFfcGVybSwgbXNnZmxnKSkKLQkJCXJldCA9IC1FQUNDRVM7Ci0JCWVsc2UgewotCQkJaW50IHFpZCA9IG1zZ19idWlsZGlkKG5zLCBpZCwgbXNxLT5xX3Blcm0uc2VxKTsKIAotCQkJcmV0ID0gc2VjdXJpdHlfbXNnX3F1ZXVlX2Fzc29jaWF0ZShtc3EsIG1zZ2ZsZyk7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSBxaWQ7Ci0JCX0KLQkJbXNnX3VubG9jayhtc3EpOwotCX0KLQltdXRleF91bmxvY2soJm1zZ19pZHMobnMpLm11dGV4KTsKKwltc2dfb3BzLmdldG5ldyA9IG5ld3F1ZTsKKwltc2dfb3BzLmFzc29jaWF0ZSA9IG1zZ19zZWN1cml0eTsKKwltc2dfb3BzLm1vcmVfY2hlY2tzID0gTlVMTDsKIAotCXJldHVybiByZXQ7CisJbXNnX3BhcmFtcy5rZXkgPSBrZXk7CisJbXNnX3BhcmFtcy5mbGcgPSBtc2dmbGc7CisKKwlyZXR1cm4gaXBjZ2V0KG5zLCAmbXNnX2lkcyhucyksICZtc2dfb3BzLCAmbXNnX3BhcmFtcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpAQCAtNDIwLDIzICs0NTksMjMgQEAKIAkJbXNnaW5mby5tc2dtbmIgPSBucy0+bXNnX2N0bG1uYjsKIAkJbXNnaW5mby5tc2dzc3ogPSBNU0dTU1o7CiAJCW1zZ2luZm8ubXNnc2VnID0gTVNHU0VHOwotCQltdXRleF9sb2NrKCZtc2dfaWRzKG5zKS5tdXRleCk7CisJCWRvd25fcmVhZCgmbXNnX2lkcyhucykucndfbXV0ZXgpOwogCQlpZiAoY21kID09IE1TR19JTkZPKSB7CiAJCQltc2dpbmZvLm1zZ3Bvb2wgPSBtc2dfaWRzKG5zKS5pbl91c2U7Ci0JCQltc2dpbmZvLm1zZ21hcCA9IGF0b21pY19yZWFkKCZtc2dfaGRycyk7Ci0JCQltc2dpbmZvLm1zZ3RxbCA9IGF0b21pY19yZWFkKCZtc2dfYnl0ZXMpOworCQkJbXNnaW5mby5tc2dtYXAgPSBhdG9taWNfcmVhZCgmbnMtPm1zZ19oZHJzKTsKKwkJCW1zZ2luZm8ubXNndHFsID0gYXRvbWljX3JlYWQoJm5zLT5tc2dfYnl0ZXMpOwogCQl9IGVsc2UgewogCQkJbXNnaW5mby5tc2dtYXAgPSBNU0dNQVA7CiAJCQltc2dpbmZvLm1zZ3Bvb2wgPSBNU0dQT09MOwogCQkJbXNnaW5mby5tc2d0cWwgPSBNU0dUUUw7CiAJCX0KLQkJbWF4X2lkID0gbXNnX2lkcyhucykubWF4X2lkOwotCQltdXRleF91bmxvY2soJm1zZ19pZHMobnMpLm11dGV4KTsKKwkJbWF4X2lkID0gaXBjX2dldF9tYXhpZCgmbXNnX2lkcyhucykpOworCQl1cF9yZWFkKCZtc2dfaWRzKG5zKS5yd19tdXRleCk7CiAJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmbXNnaW5mbywgc2l6ZW9mKHN0cnVjdCBtc2dpbmZvKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIChtYXhfaWQgPCAwKSA/IDAgOiBtYXhfaWQ7CiAJfQotCWNhc2UgTVNHX1NUQVQ6CisJY2FzZSBNU0dfU1RBVDoJLyogbXNxaWQgaXMgYW4gaW5kZXggcmF0aGVyIHRoYW4gYSBtc2cgcXVldWUgaWQgKi8KIAljYXNlIElQQ19TVEFUOgogCXsKIAkJc3RydWN0IG1zcWlkNjRfZHMgdGJ1ZjsKQEAgLTQ0NCwyMSArNDgzLDE2IEBACiAKIAkJaWYgKCFidWYpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGNtZCA9PSBNU0dfU1RBVCAmJiBtc3FpZCA+PSBtc2dfaWRzKG5zKS5lbnRyaWVzLT5zaXplKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KCZ0YnVmLCAwLCBzaXplb2YodGJ1ZikpOwotCi0JCW1zcSA9IG1zZ19sb2NrKG5zLCBtc3FpZCk7Ci0JCWlmIChtc3EgPT0gTlVMTCkKLQkJCXJldHVybiAtRUlOVkFMOwogCiAJCWlmIChjbWQgPT0gTVNHX1NUQVQpIHsKLQkJCXN1Y2Nlc3NfcmV0dXJuID0gbXNnX2J1aWxkaWQobnMsIG1zcWlkLCBtc3EtPnFfcGVybS5zZXEpOworCQkJbXNxID0gbXNnX2xvY2sobnMsIG1zcWlkKTsKKwkJCWlmIChJU19FUlIobXNxKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihtc3EpOworCQkJc3VjY2Vzc19yZXR1cm4gPSBtc3EtPnFfcGVybS5pZDsKIAkJfSBlbHNlIHsKLQkJCWVyciA9IC1FSURSTTsKLQkJCWlmIChtc2dfY2hlY2tpZChucywgbXNxLCBtc3FpZCkpCi0JCQkJZ290byBvdXRfdW5sb2NrOworCQkJbXNxID0gbXNnX2xvY2tfY2hlY2sobnMsIG1zcWlkKTsKKwkJCWlmIChJU19FUlIobXNxKSkKKwkJCQlyZXR1cm4gUFRSX0VSUihtc3EpOwogCQkJc3VjY2Vzc19yZXR1cm4gPSAwOwogCQl9CiAJCWVyciA9IC1FQUNDRVM7CkBAIC00NjksNiArNTAzLDggQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X3VubG9jazsKIAorCQltZW1zZXQoJnRidWYsIDAsIHNpemVvZih0YnVmKSk7CisKIAkJa2VybmVsX3RvX2lwYzY0X3Blcm0oJm1zcS0+cV9wZXJtLCAmdGJ1Zi5tc2dfcGVybSk7CiAJCXRidWYubXNnX3N0aW1lICA9IG1zcS0+cV9zdGltZTsKIAkJdGJ1Zi5tc2dfcnRpbWUgID0gbXNxLT5xX3J0aW1lOwpAQCAtNDk1LDE1ICs1MzEsMTMgQEAKIAkJcmV0dXJuICAtRUlOVkFMOwogCX0KIAotCW11dGV4X2xvY2soJm1zZ19pZHMobnMpLm11dGV4KTsKLQltc3EgPSBtc2dfbG9jayhucywgbXNxaWQpOwotCWVyciA9IC1FSU5WQUw7Ci0JaWYgKG1zcSA9PSBOVUxMKQorCWRvd25fd3JpdGUoJm1zZ19pZHMobnMpLnJ3X211dGV4KTsKKwltc3EgPSBtc2dfbG9ja19jaGVja19kb3duKG5zLCBtc3FpZCk7CisJaWYgKElTX0VSUihtc3EpKSB7CisJCWVyciA9IFBUUl9FUlIobXNxKTsKIAkJZ290byBvdXRfdXA7CisJfQogCi0JZXJyID0gLUVJRFJNOwotCWlmIChtc2dfY2hlY2tpZChucywgbXNxLCBtc3FpZCkpCi0JCWdvdG8gb3V0X3VubG9ja191cDsKIAlpcGNwID0gJm1zcS0+cV9wZXJtOwogCiAJZXJyID0gYXVkaXRfaXBjX29iaihpcGNwKTsKQEAgLTU1MiwxMiArNTg2LDEyIEBACiAJCWJyZWFrOwogCX0KIAljYXNlIElQQ19STUlEOgotCQlmcmVlcXVlKG5zLCBtc3EsIG1zcWlkKTsKKwkJZnJlZXF1ZShucywgbXNxKTsKIAkJYnJlYWs7CiAJfQogCWVyciA9IDA7CiBvdXRfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZtc2dfaWRzKG5zKS5tdXRleCk7CisJdXBfd3JpdGUoJm1zZ19pZHMobnMpLnJ3X211dGV4KTsKIAlyZXR1cm4gZXJyOwogb3V0X3VubG9ja191cDoKIAltc2dfdW5sb2NrKG1zcSk7CkBAIC02MTEsNyArNjQ1LDcgQEAKIAkJCQltc3ItPnJfbXNnID0gRVJSX1BUUigtRTJCSUcpOwogCQkJfSBlbHNlIHsKIAkJCQltc3ItPnJfbXNnID0gTlVMTDsKLQkJCQltc3EtPnFfbHJwaWQgPSBtc3ItPnJfdHNrLT5waWQ7CisJCQkJbXNxLT5xX2xycGlkID0gdGFza19waWRfdm5yKG1zci0+cl90c2spOwogCQkJCW1zcS0+cV9ydGltZSA9IGdldF9zZWNvbmRzKCk7CiAJCQkJd2FrZV91cF9wcm9jZXNzKG1zci0+cl90c2spOwogCQkJCXNtcF9tYigpOwpAQCAtNjQ2LDE0ICs2ODAsMTEgQEAKIAltc2ctPm1fdHlwZSA9IG10eXBlOwogCW1zZy0+bV90cyA9IG1zZ3N6OwogCi0JbXNxID0gbXNnX2xvY2sobnMsIG1zcWlkKTsKLQllcnIgPSAtRUlOVkFMOwotCWlmIChtc3EgPT0gTlVMTCkKKwltc3EgPSBtc2dfbG9ja19jaGVjayhucywgbXNxaWQpOworCWlmIChJU19FUlIobXNxKSkgeworCQllcnIgPSBQVFJfRVJSKG1zcSk7CiAJCWdvdG8gb3V0X2ZyZWU7Ci0KLQllcnI9IC1FSURSTTsKLQlpZiAobXNnX2NoZWNraWQobnMsIG1zcSwgbXNxaWQpKQotCQlnb3RvIG91dF91bmxvY2tfZnJlZTsKKwl9CiAKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBtc2dfc2VuZGVyIHM7CkBAIC02OTUsNyArNzI2LDcgQEAKIAkJfQogCX0KIAotCW1zcS0+cV9sc3BpZCA9IGN1cnJlbnQtPnRnaWQ7CisJbXNxLT5xX2xzcGlkID0gdGFza190Z2lkX3ZucihjdXJyZW50KTsKIAltc3EtPnFfc3RpbWUgPSBnZXRfc2Vjb25kcygpOwogCiAJaWYgKCFwaXBlbGluZWRfc2VuZChtc3EsIG1zZykpIHsKQEAgLTcwMyw4ICs3MzQsOCBAQAogCQlsaXN0X2FkZF90YWlsKCZtc2ctPm1fbGlzdCwgJm1zcS0+cV9tZXNzYWdlcyk7CiAJCW1zcS0+cV9jYnl0ZXMgKz0gbXNnc3o7CiAJCW1zcS0+cV9xbnVtKys7Ci0JCWF0b21pY19hZGQobXNnc3osICZtc2dfYnl0ZXMpOwotCQlhdG9taWNfaW5jKCZtc2dfaGRycyk7CisJCWF0b21pY19hZGQobXNnc3osICZucy0+bXNnX2J5dGVzKTsKKwkJYXRvbWljX2luYygmbnMtPm1zZ19oZHJzKTsKIAl9CiAKIAllcnIgPSAwOwpAQCAtNzYwLDEzICs3OTEsOSBAQAogCW1vZGUgPSBjb252ZXJ0X21vZGUoJm1zZ3R5cCwgbXNnZmxnKTsKIAlucyA9IGN1cnJlbnQtPm5zcHJveHktPmlwY19uczsKIAotCW1zcSA9IG1zZ19sb2NrKG5zLCBtc3FpZCk7Ci0JaWYgKG1zcSA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1zZyA9IEVSUl9QVFIoLUVJRFJNKTsKLQlpZiAobXNnX2NoZWNraWQobnMsIG1zcSwgbXNxaWQpKQotCQlnb3RvIG91dF91bmxvY2s7CisJbXNxID0gbXNnX2xvY2tfY2hlY2sobnMsIG1zcWlkKTsKKwlpZiAoSVNfRVJSKG1zcSkpCisJCXJldHVybiBQVFJfRVJSKG1zcSk7CiAKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBtc2dfcmVjZWl2ZXIgbXNyX2Q7CkBAIC04MTAsMTAgKzgzNywxMCBAQAogCQkJbGlzdF9kZWwoJm1zZy0+bV9saXN0KTsKIAkJCW1zcS0+cV9xbnVtLS07CiAJCQltc3EtPnFfcnRpbWUgPSBnZXRfc2Vjb25kcygpOwotCQkJbXNxLT5xX2xycGlkID0gY3VycmVudC0+dGdpZDsKKwkJCW1zcS0+cV9scnBpZCA9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7CiAJCQltc3EtPnFfY2J5dGVzIC09IG1zZy0+bV90czsKLQkJCWF0b21pY19zdWIobXNnLT5tX3RzLCAmbXNnX2J5dGVzKTsKLQkJCWF0b21pY19kZWMoJm1zZ19oZHJzKTsKKwkJCWF0b21pY19zdWIobXNnLT5tX3RzLCAmbnMtPm1zZ19ieXRlcyk7CisJCQlhdG9taWNfZGVjKCZucy0+bXNnX2hkcnMpOwogCQkJc3Nfd2FrZXVwKCZtc3EtPnFfc2VuZGVycywgMCk7CiAJCQltc2dfdW5sb2NrKG1zcSk7CiAJCQlicmVhazsKQEAgLTkyNiw3ICs5NTMsNyBAQAogCXJldHVybiBzZXFfcHJpbnRmKHMsCiAJCQkiJTEwZCAlMTBkICAlNG8gICUxMGx1ICUxMGx1ICU1dSAlNXUgJTV1ICU1dSAlNXUgJTV1ICUxMGx1ICUxMGx1ICUxMGx1XG4iLAogCQkJbXNxLT5xX3Blcm0ua2V5LAotCQkJbXNxLT5xX2lkLAorCQkJbXNxLT5xX3Blcm0uaWQsCiAJCQltc3EtPnFfcGVybS5tb2RlLAogCQkJbXNxLT5xX2NieXRlcywKIAkJCW1zcS0+cV9xbnVtLApkaWZmIC0tZ2l0IGEvaXBjL3NlbS5jIGIvaXBjL3NlbS5jCmluZGV4IGI2NzZmZWYuLjM1OTUyYzAgMTAwNjQ0Ci0tLSBhL2lwYy9zZW0uYworKysgYi9pcGMvc2VtLmMKQEAgLTgwLDcgKzgwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODgsMTggKzg4LDE0IEBACiAKICNkZWZpbmUgc2VtX2lkcyhucykJKCooKG5zKS0+aWRzW0lQQ19TRU1fSURTXSkpCiAKLSNkZWZpbmUgc2VtX2xvY2sobnMsIGlkKQkoKHN0cnVjdCBzZW1fYXJyYXkqKWlwY19sb2NrKCZzZW1faWRzKG5zKSwgaWQpKQogI2RlZmluZSBzZW1fdW5sb2NrKHNtYSkJCWlwY191bmxvY2soJihzbWEpLT5zZW1fcGVybSkKLSNkZWZpbmUgc2VtX3JtaWQobnMsIGlkKQkoKHN0cnVjdCBzZW1fYXJyYXkqKWlwY19ybWlkKCZzZW1faWRzKG5zKSwgaWQpKQotI2RlZmluZSBzZW1fY2hlY2tpZChucywgc21hLCBzZW1pZCkJXAotCWlwY19jaGVja2lkKCZzZW1faWRzKG5zKSwmc21hLT5zZW1fcGVybSxzZW1pZCkKLSNkZWZpbmUgc2VtX2J1aWxkaWQobnMsIGlkLCBzZXEpIFwKLQlpcGNfYnVpbGRpZCgmc2VtX2lkcyhucyksIGlkLCBzZXEpCisjZGVmaW5lIHNlbV9jaGVja2lkKHNtYSwgc2VtaWQpCWlwY19jaGVja2lkKCZzbWEtPnNlbV9wZXJtLCBzZW1pZCkKKyNkZWZpbmUgc2VtX2J1aWxkaWQoaWQsIHNlcSkJaXBjX2J1aWxkaWQoaWQsIHNlcSkKIAogc3RhdGljIHN0cnVjdCBpcGNfaWRzIGluaXRfc2VtX2lkczsKIAotc3RhdGljIGludCBuZXdhcnkoc3RydWN0IGlwY19uYW1lc3BhY2UgKiwga2V5X3QsIGludCwgaW50KTsKLXN0YXRpYyB2b2lkIGZyZWVhcnkoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3Qgc2VtX2FycmF5ICpzbWEsIGludCBpZCk7CitzdGF0aWMgaW50IG5ld2FyeShzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqLCBzdHJ1Y3QgaXBjX3BhcmFtcyAqKTsKK3N0YXRpYyB2b2lkIGZyZWVhcnkoc3RydWN0IGlwY19uYW1lc3BhY2UgKiwgc3RydWN0IHNlbV9hcnJheSAqKTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RhdGljIGludCBzeXN2aXBjX3NlbV9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCk7CiAjZW5kaWYKQEAgLTEyOSw3ICsxMjUsNyBAQAogCW5zLT5zY19zZW1vcG0gPSBTRU1PUE07CiAJbnMtPnNjX3NlbW1uaSA9IFNFTU1OSTsKIAlucy0+dXNlZF9zZW1zID0gMDsKLQlpcGNfaW5pdF9pZHMoaWRzLCBucy0+c2Nfc2VtbW5pKTsKKwlpcGNfaW5pdF9pZHMoaWRzKTsKIH0KIAogaW50IHNlbV9pbml0X25zKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucykKQEAgLTE0NiwyMCArMTQyLDI0IEBACiAKIHZvaWQgc2VtX2V4aXRfbnMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQogewotCWludCBpOwogCXN0cnVjdCBzZW1fYXJyYXkgKnNtYTsKKwlpbnQgbmV4dF9pZDsKKwlpbnQgdG90YWwsIGluX3VzZTsKIAotCW11dGV4X2xvY2soJnNlbV9pZHMobnMpLm11dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDw9IHNlbV9pZHMobnMpLm1heF9pZDsgaSsrKSB7Ci0JCXNtYSA9IHNlbV9sb2NrKG5zLCBpKTsKKwlkb3duX3dyaXRlKCZzZW1faWRzKG5zKS5yd19tdXRleCk7CisKKwlpbl91c2UgPSBzZW1faWRzKG5zKS5pbl91c2U7CisKKwlmb3IgKHRvdGFsID0gMCwgbmV4dF9pZCA9IDA7IHRvdGFsIDwgaW5fdXNlOyBuZXh0X2lkKyspIHsKKwkJc21hID0gaWRyX2ZpbmQoJnNlbV9pZHMobnMpLmlwY3NfaWRyLCBuZXh0X2lkKTsKIAkJaWYgKHNtYSA9PSBOVUxMKQogCQkJY29udGludWU7Ci0KLQkJZnJlZWFyeShucywgc21hLCBpKTsKKwkJaXBjX2xvY2tfYnlfcHRyKCZzbWEtPnNlbV9wZXJtKTsKKwkJZnJlZWFyeShucywgc21hKTsKKwkJdG90YWwrKzsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZzZW1faWRzKG5zKS5tdXRleCk7CisJdXBfd3JpdGUoJnNlbV9pZHMobnMpLnJ3X211dGV4KTsKIAotCWlwY19maW5pX2lkcyhucy0+aWRzW0lQQ19TRU1fSURTXSk7CiAJa2ZyZWUobnMtPmlkc1tJUENfU0VNX0lEU10pOwogCW5zLT5pZHNbSVBDX1NFTV9JRFNdID0gTlVMTDsKIH0KQEAgLTE3Myw2ICsxNzMsNDIgQEAKIH0KIAogLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgaW4gdGhlIHBhdGhzIHdoZXJlIHRoZSByd19tdXRleCBpcyBoZWxkIHRvIHByb3RlY3QKKyAqIGFjY2VzcyB0byB0aGUgaWRyIHRyZWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNlbV9hcnJheSAqc2VtX2xvY2tfY2hlY2tfZG93bihzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsCisJCQkJCQlpbnQgaWQpCit7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AgPSBpcGNfbG9ja19jaGVja19kb3duKCZzZW1faWRzKG5zKSwgaWQpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3Qgc2VtX2FycmF5LCBzZW1fcGVybSk7Cit9CisKKy8qCisgKiBzZW1fbG9ja18oY2hlY2tfKSByb3V0aW5lcyBhcmUgY2FsbGVkIGluIHRoZSBwYXRocyB3aGVyZSB0aGUgcndfbXV0ZXgKKyAqIGlzIG5vdCBoZWxkLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzZW1fYXJyYXkgKnNlbV9sb2NrKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgaW50IGlkKQoreworCXN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwID0gaXBjX2xvY2soJnNlbV9pZHMobnMpLCBpZCk7CisKKwlyZXR1cm4gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzZW1fYXJyYXksIHNlbV9wZXJtKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2VtX2FycmF5ICpzZW1fbG9ja19jaGVjayhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsCisJCQkJCQlpbnQgaWQpCit7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AgPSBpcGNfbG9ja19jaGVjaygmc2VtX2lkcyhucyksIGlkKTsKKworCXJldHVybiBjb250YWluZXJfb2YoaXBjcCwgc3RydWN0IHNlbV9hcnJheSwgc2VtX3Blcm0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2VtX3JtaWQoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3Qgc2VtX2FycmF5ICpzKQoreworCWlwY19ybWlkKCZzZW1faWRzKG5zKSwgJnMtPnNlbV9wZXJtKTsKK30KKworLyoKICAqIExvY2tsZXNzIHdha2V1cCBhbGdvcml0aG06CiAgKiBXaXRob3V0IHRoZSBjaGVjay9yZXRyeSBhbGdvcml0aG0gYSBsb2NrbGVzcyB3YWtldXAgaXMgcG9zc2libGU6CiAgKiAtIHF1ZXVlLnN0YXR1cyBpcyBpbml0aWFsaXplZCB0byAtRUlOVFIgYmVmb3JlIGJsb2NraW5nLgpAQCAtMjA2LDEyICsyNDIsMjMgQEAKICAqLwogI2RlZmluZSBJTl9XQUtFVVAJMQogCi1zdGF0aWMgaW50IG5ld2FyeSAoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBrZXlfdCBrZXksIGludCBuc2VtcywgaW50IHNlbWZsZykKKy8qKgorICogbmV3YXJ5IC0gQ3JlYXRlIGEgbmV3IHNlbWFwaG9yZSBzZXQKKyAqIEBuczogbmFtZXNwYWNlCisgKiBAcGFyYW1zOiBwdHIgdG8gdGhlIHN0cnVjdHVyZSB0aGF0IGNvbnRhaW5zIGtleSwgc2VtZmxnIGFuZCBuc2VtcworICoKKyAqIENhbGxlZCB3aXRoIHNlbV9pZHMucndfbXV0ZXggaGVsZCAoYXMgYSB3cml0ZXIpCisgKi8KKworc3RhdGljIGludCBuZXdhcnkoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3QgaXBjX3BhcmFtcyAqcGFyYW1zKQogewogCWludCBpZDsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBzZW1fYXJyYXkgKnNtYTsKIAlpbnQgc2l6ZTsKKwlrZXlfdCBrZXkgPSBwYXJhbXMtPmtleTsKKwlpbnQgbnNlbXMgPSBwYXJhbXMtPnUubnNlbXM7CisJaW50IHNlbWZsZyA9IHBhcmFtcy0+ZmxnOwogCiAJaWYgKCFuc2VtcykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yMzYsMTQgKzI4MywxNCBAQAogCX0KIAogCWlkID0gaXBjX2FkZGlkKCZzZW1faWRzKG5zKSwgJnNtYS0+c2VtX3Blcm0sIG5zLT5zY19zZW1tbmkpOwotCWlmKGlkID09IC0xKSB7CisJaWYgKGlkIDwgMCkgewogCQlzZWN1cml0eV9zZW1fZnJlZShzbWEpOwogCQlpcGNfcmN1X3B1dHJlZihzbWEpOwotCQlyZXR1cm4gLUVOT1NQQzsKKwkJcmV0dXJuIGlkOwogCX0KIAlucy0+dXNlZF9zZW1zICs9IG5zZW1zOwogCi0Jc21hLT5zZW1faWQgPSBzZW1fYnVpbGRpZChucywgaWQsIHNtYS0+c2VtX3Blcm0uc2VxKTsKKwlzbWEtPnNlbV9wZXJtLmlkID0gc2VtX2J1aWxkaWQoaWQsIHNtYS0+c2VtX3Blcm0uc2VxKTsKIAlzbWEtPnNlbV9iYXNlID0gKHN0cnVjdCBzZW0gKikgJnNtYVsxXTsKIAkvKiBzbWEtPnNlbV9wZW5kaW5nID0gTlVMTDsgKi8KIAlzbWEtPnNlbV9wZW5kaW5nX2xhc3QgPSAmc21hLT5zZW1fcGVuZGluZzsKQEAgLTI1Miw0OCArMjk5LDU2IEBACiAJc21hLT5zZW1fY3RpbWUgPSBnZXRfc2Vjb25kcygpOwogCXNlbV91bmxvY2soc21hKTsKIAotCXJldHVybiBzbWEtPnNlbV9pZDsKKwlyZXR1cm4gc21hLT5zZW1fcGVybS5pZDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19zZW1nZXQgKGtleV90IGtleSwgaW50IG5zZW1zLCBpbnQgc2VtZmxnKQorCisvKgorICogQ2FsbGVkIHdpdGggc2VtX2lkcy5yd19tdXRleCBhbmQgaXBjcCBsb2NrZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNlbV9zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgaW50IHNlbWZsZykKIHsKLQlpbnQgaWQsIGVyciA9IC1FSU5WQUw7CiAJc3RydWN0IHNlbV9hcnJheSAqc21hOworCisJc21hID0gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzZW1fYXJyYXksIHNlbV9wZXJtKTsKKwlyZXR1cm4gc2VjdXJpdHlfc2VtX2Fzc29jaWF0ZShzbWEsIHNlbWZsZyk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBzZW1faWRzLnJ3X211dGV4IGFuZCBpcGNwIGxvY2tlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2VtX21vcmVfY2hlY2tzKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLAorCQkJCXN0cnVjdCBpcGNfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNlbV9hcnJheSAqc21hOworCisJc21hID0gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzZW1fYXJyYXksIHNlbV9wZXJtKTsKKwlpZiAocGFyYW1zLT51Lm5zZW1zID4gc21hLT5zZW1fbnNlbXMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK2FzbWxpbmthZ2UgbG9uZyBzeXNfc2VtZ2V0KGtleV90IGtleSwgaW50IG5zZW1zLCBpbnQgc2VtZmxnKQorewogCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpuczsKKwlzdHJ1Y3QgaXBjX29wcyBzZW1fb3BzOworCXN0cnVjdCBpcGNfcGFyYW1zIHNlbV9wYXJhbXM7CiAKIAlucyA9IGN1cnJlbnQtPm5zcHJveHktPmlwY19uczsKIAogCWlmIChuc2VtcyA8IDAgfHwgbnNlbXMgPiBucy0+c2Nfc2VtbXNsKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltdXRleF9sb2NrKCZzZW1faWRzKG5zKS5tdXRleCk7Ci0JCi0JaWYgKGtleSA9PSBJUENfUFJJVkFURSkgewotCQllcnIgPSBuZXdhcnkobnMsIGtleSwgbnNlbXMsIHNlbWZsZyk7Ci0JfSBlbHNlIGlmICgoaWQgPSBpcGNfZmluZGtleSgmc2VtX2lkcyhucyksIGtleSkpID09IC0xKSB7ICAvKiBrZXkgbm90IHVzZWQgKi8KLQkJaWYgKCEoc2VtZmxnICYgSVBDX0NSRUFUKSkKLQkJCWVyciA9IC1FTk9FTlQ7Ci0JCWVsc2UKLQkJCWVyciA9IG5ld2FyeShucywga2V5LCBuc2Vtcywgc2VtZmxnKTsKLQl9IGVsc2UgaWYgKHNlbWZsZyAmIElQQ19DUkVBVCAmJiBzZW1mbGcgJiBJUENfRVhDTCkgewotCQllcnIgPSAtRUVYSVNUOwotCX0gZWxzZSB7Ci0JCXNtYSA9IHNlbV9sb2NrKG5zLCBpZCk7Ci0JCUJVR19PTihzbWE9PU5VTEwpOwotCQlpZiAobnNlbXMgPiBzbWEtPnNlbV9uc2VtcykKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWVsc2UgaWYgKGlwY3Blcm1zKCZzbWEtPnNlbV9wZXJtLCBzZW1mbGcpKQotCQkJZXJyID0gLUVBQ0NFUzsKLQkJZWxzZSB7Ci0JCQlpbnQgc2VtaWQgPSBzZW1fYnVpbGRpZChucywgaWQsIHNtYS0+c2VtX3Blcm0uc2VxKTsKLQkJCWVyciA9IHNlY3VyaXR5X3NlbV9hc3NvY2lhdGUoc21hLCBzZW1mbGcpOwotCQkJaWYgKCFlcnIpCi0JCQkJZXJyID0gc2VtaWQ7Ci0JCX0KLQkJc2VtX3VubG9jayhzbWEpOwotCX0KIAotCW11dGV4X3VubG9jaygmc2VtX2lkcyhucykubXV0ZXgpOwotCXJldHVybiBlcnI7CisJc2VtX29wcy5nZXRuZXcgPSBuZXdhcnk7CisJc2VtX29wcy5hc3NvY2lhdGUgPSBzZW1fc2VjdXJpdHk7CisJc2VtX29wcy5tb3JlX2NoZWNrcyA9IHNlbV9tb3JlX2NoZWNrczsKKworCXNlbV9wYXJhbXMua2V5ID0ga2V5OworCXNlbV9wYXJhbXMuZmxnID0gc2VtZmxnOworCXNlbV9wYXJhbXMudS5uc2VtcyA9IG5zZW1zOworCisJcmV0dXJuIGlwY2dldChucywgJnNlbV9pZHMobnMpLCAmc2VtX29wcywgJnNlbV9wYXJhbXMpOwogfQogCiAvKiBNYW5hZ2UgdGhlIGRvdWJseSBsaW5rZWQgbGlzdCBzbWEtPnNlbV9wZW5kaW5nIGFzIGEgRklGTzoKQEAgLTQ4NywxNSArNTQyLDE0IEBACiAJcmV0dXJuIHNlbXpjbnQ7CiB9CiAKLS8qIEZyZWUgYSBzZW1hcGhvcmUgc2V0LiBmcmVlYXJ5KCkgaXMgY2FsbGVkIHdpdGggc2VtX2lkcy5tdXRleCBsb2NrZWQgYW5kCi0gKiB0aGUgc3BpbmxvY2sgZm9yIHRoaXMgc2VtYXBob3JlIHNldCBob2xkLiBzZW1faWRzLm11dGV4IHJlbWFpbnMgbG9ja2VkCi0gKiBvbiBleGl0LgorLyogRnJlZSBhIHNlbWFwaG9yZSBzZXQuIGZyZWVhcnkoKSBpcyBjYWxsZWQgd2l0aCBzZW1faWRzLnJ3X211dGV4IGxvY2tlZAorICogYXMgYSB3cml0ZXIgYW5kIHRoZSBzcGlubG9jayBmb3IgdGhpcyBzZW1hcGhvcmUgc2V0IGhvbGQuIHNlbV9pZHMucndfbXV0ZXgKKyAqIHJlbWFpbnMgbG9ja2VkIG9uIGV4aXQuCiAgKi8KLXN0YXRpYyB2b2lkIGZyZWVhcnkgKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IHNlbV9hcnJheSAqc21hLCBpbnQgaWQpCitzdGF0aWMgdm9pZCBmcmVlYXJ5KHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IHNlbV9hcnJheSAqc21hKQogewogCXN0cnVjdCBzZW1fdW5kbyAqdW47CiAJc3RydWN0IHNlbV9xdWV1ZSAqcTsKLQlpbnQgc2l6ZTsKIAogCS8qIEludmFsaWRhdGUgdGhlIGV4aXN0aW5nIHVuZG8gc3RydWN0dXJlcyBmb3IgdGhpcyBzZW1hcGhvcmUgc2V0LgogCSAqIChUaGV5IHdpbGwgYmUgZnJlZWQgd2l0aG91dCBhbnkgZnVydGhlciBhY3Rpb24gaW4gZXhpdF9zZW0oKQpAQCAtNTE4LDEyICs1NzIsMTEgQEAKIAkJcSA9IG47CiAJfQogCi0JLyogUmVtb3ZlIHRoZSBzZW1hcGhvcmUgc2V0IGZyb20gdGhlIElEIGFycmF5Ki8KLQlzbWEgPSBzZW1fcm1pZChucywgaWQpOworCS8qIFJlbW92ZSB0aGUgc2VtYXBob3JlIHNldCBmcm9tIHRoZSBJRFIgKi8KKwlzZW1fcm1pZChucywgc21hKTsKIAlzZW1fdW5sb2NrKHNtYSk7CiAKIAlucy0+dXNlZF9zZW1zIC09IHNtYS0+c2VtX25zZW1zOwotCXNpemUgPSBzaXplb2YgKCpzbWEpICsgc21hLT5zZW1fbnNlbXMgKiBzaXplb2YgKHN0cnVjdCBzZW0pOwogCXNlY3VyaXR5X3NlbV9mcmVlKHNtYSk7CiAJaXBjX3JjdV9wdXRyZWYoc21hKTsKIH0KQEAgLTU3Niw3ICs2MjksNyBAQAogCQlzZW1pbmZvLnNlbW1udSA9IFNFTU1OVTsKIAkJc2VtaW5mby5zZW1tYXAgPSBTRU1NQVA7CiAJCXNlbWluZm8uc2VtdW1lID0gU0VNVU1FOwotCQltdXRleF9sb2NrKCZzZW1faWRzKG5zKS5tdXRleCk7CisJCWRvd25fcmVhZCgmc2VtX2lkcyhucykucndfbXV0ZXgpOwogCQlpZiAoY21kID09IFNFTV9JTkZPKSB7CiAJCQlzZW1pbmZvLnNlbXVzeiA9IHNlbV9pZHMobnMpLmluX3VzZTsKIAkJCXNlbWluZm8uc2VtYWVtID0gbnMtPnVzZWRfc2VtczsKQEAgLTU4NCw4ICs2MzcsOCBAQAogCQkJc2VtaW5mby5zZW11c3ogPSBTRU1VU1o7CiAJCQlzZW1pbmZvLnNlbWFlbSA9IFNFTUFFTTsKIAkJfQotCQltYXhfaWQgPSBzZW1faWRzKG5zKS5tYXhfaWQ7Ci0JCW11dGV4X3VubG9jaygmc2VtX2lkcyhucykubXV0ZXgpOworCQltYXhfaWQgPSBpcGNfZ2V0X21heGlkKCZzZW1faWRzKG5zKSk7CisJCXVwX3JlYWQoJnNlbV9pZHMobnMpLnJ3X211dGV4KTsKIAkJaWYgKGNvcHlfdG9fdXNlciAoYXJnLl9fYnVmLCAmc2VtaW5mbywgc2l6ZW9mKHN0cnVjdCBzZW1pbmZvKSkpIAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAobWF4X2lkIDwgMCkgPyAwOiBtYXhfaWQ7CkBAIC01OTUsMTQgKzY0OCw5IEBACiAJCXN0cnVjdCBzZW1pZDY0X2RzIHRidWY7CiAJCWludCBpZDsKIAotCQlpZihzZW1pZCA+PSBzZW1faWRzKG5zKS5lbnRyaWVzLT5zaXplKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbWVtc2V0KCZ0YnVmLDAsc2l6ZW9mKHRidWYpKTsKLQogCQlzbWEgPSBzZW1fbG9jayhucywgc2VtaWQpOwotCQlpZihzbWEgPT0gTlVMTCkKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoSVNfRVJSKHNtYSkpCisJCQlyZXR1cm4gUFRSX0VSUihzbWEpOwogCiAJCWVyciA9IC1FQUNDRVM7CiAJCWlmIChpcGNwZXJtcyAoJnNtYS0+c2VtX3Blcm0sIFNfSVJVR08pKQpAQCAtNjEyLDcgKzY2MCw5IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKLQkJaWQgPSBzZW1fYnVpbGRpZChucywgc2VtaWQsIHNtYS0+c2VtX3Blcm0uc2VxKTsKKwkJaWQgPSBzbWEtPnNlbV9wZXJtLmlkOworCisJCW1lbXNldCgmdGJ1ZiwgMCwgc2l6ZW9mKHRidWYpKTsKIAogCQlrZXJuZWxfdG9faXBjNjRfcGVybSgmc21hLT5zZW1fcGVybSwgJnRidWYuc2VtX3Blcm0pOwogCQl0YnVmLnNlbV9vdGltZSAgPSBzbWEtPnNlbV9vdGltZTsKQEAgLTY0MiwxNiArNjkyLDEyIEBACiAJdXNob3J0KiBzZW1faW8gPSBmYXN0X3NlbV9pbzsKIAlpbnQgbnNlbXM7CiAKLQlzbWEgPSBzZW1fbG9jayhucywgc2VtaWQpOwotCWlmKHNtYT09TlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc21hID0gc2VtX2xvY2tfY2hlY2sobnMsIHNlbWlkKTsKKwlpZiAoSVNfRVJSKHNtYSkpCisJCXJldHVybiBQVFJfRVJSKHNtYSk7CiAKIAluc2VtcyA9IHNtYS0+c2VtX25zZW1zOwogCi0JZXJyPS1FSURSTTsKLQlpZiAoc2VtX2NoZWNraWQobnMsc21hLHNlbWlkKSkKLQkJZ290byBvdXRfdW5sb2NrOwotCiAJZXJyID0gLUVBQ0NFUzsKIAlpZiAoaXBjcGVybXMgKCZzbWEtPnNlbV9wZXJtLCAoY21kPT1TRVRWQUx8fGNtZD09U0VUQUxMKT9TX0lXVUdPOlNfSVJVR08pKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC03OTUsNyArODQxLDcgQEAKIAkJZm9yICh1biA9IHNtYS0+dW5kbzsgdW47IHVuID0gdW4tPmlkX25leHQpCiAJCQl1bi0+c2VtYWRqW3NlbW51bV0gPSAwOwogCQljdXJyLT5zZW12YWwgPSB2YWw7Ci0JCWN1cnItPnNlbXBpZCA9IGN1cnJlbnQtPnRnaWQ7CisJCWN1cnItPnNlbXBpZCA9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7CiAJCXNtYS0+c2VtX2N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAkJLyogbWF5YmUgc29tZSBxdWV1ZWQtdXAgcHJvY2Vzc2VzIHdlcmUgd2FpdGluZyBmb3IgdGhpcyAqLwogCQl1cGRhdGVfcXVldWUoc21hKTsKQEAgLTg2MywxNCArOTA5LDEwIEBACiAJCWlmKGNvcHlfc2VtaWRfZnJvbV91c2VyICgmc2V0YnVmLCBhcmcuYnVmLCB2ZXJzaW9uKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KLQlzbWEgPSBzZW1fbG9jayhucywgc2VtaWQpOwotCWlmKHNtYT09TlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc21hID0gc2VtX2xvY2tfY2hlY2tfZG93bihucywgc2VtaWQpOworCWlmIChJU19FUlIoc21hKSkKKwkJcmV0dXJuIFBUUl9FUlIoc21hKTsKIAotCWlmIChzZW1fY2hlY2tpZChucyxzbWEsc2VtaWQpKSB7Ci0JCWVycj0tRUlEUk07Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9CQogCWlwY3AgPSAmc21hLT5zZW1fcGVybTsKIAogCWVyciA9IGF1ZGl0X2lwY19vYmooaXBjcCk7CkBAIC04OTQsNyArOTM2LDcgQEAKIAogCXN3aXRjaChjbWQpewogCWNhc2UgSVBDX1JNSUQ6Ci0JCWZyZWVhcnkobnMsIHNtYSwgc2VtaWQpOworCQlmcmVlYXJ5KG5zLCBzbWEpOwogCQllcnIgPSAwOwogCQlicmVhazsKIAljYXNlIElQQ19TRVQ6CkBAIC05NDgsNDUgKzk5MCwxNSBAQAogCQlyZXR1cm4gZXJyOwogCWNhc2UgSVBDX1JNSUQ6CiAJY2FzZSBJUENfU0VUOgotCQltdXRleF9sb2NrKCZzZW1faWRzKG5zKS5tdXRleCk7CisJCWRvd25fd3JpdGUoJnNlbV9pZHMobnMpLnJ3X211dGV4KTsKIAkJZXJyID0gc2VtY3RsX2Rvd24obnMsc2VtaWQsc2VtbnVtLGNtZCx2ZXJzaW9uLGFyZyk7Ci0JCW11dGV4X3VubG9jaygmc2VtX2lkcyhucykubXV0ZXgpOworCQl1cF93cml0ZSgmc2VtX2lkcyhucykucndfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGxvY2tfc2VtdW5kbyh2b2lkKQotewotCXN0cnVjdCBzZW1fdW5kb19saXN0ICp1bmRvX2xpc3Q7Ci0KLQl1bmRvX2xpc3QgPSBjdXJyZW50LT5zeXN2c2VtLnVuZG9fbGlzdDsKLQlpZiAodW5kb19saXN0KQotCQlzcGluX2xvY2soJnVuZG9fbGlzdC0+bG9jayk7Ci19Ci0KLS8qIFRoaXMgY29kZSBoYXMgYW4gaW50ZXJhY3Rpb24gd2l0aCBjb3B5X3NlbXVuZG8oKS4KLSAqIENvbnNpZGVyOyB0d28gdGFza3MgYXJlIHNoYXJpbmcgdGhlIHVuZG9fbGlzdC4gdGFzazEKLSAqIGFjcXVpcmVzIHRoZSB1bmRvX2xpc3QgbG9jayBpbiBsb2NrX3NlbXVuZG8oKS4gIElmIHRhc2syIG5vdwotICogZXhpdHMgYmVmb3JlIHRhc2sxIHJlbGVhc2VzIHRoZSBsb2NrIChieSBjYWxsaW5nCi0gKiB1bmxvY2tfc2VtdW5kbygpKSwgdGhlbiB0YXNrMSB3aWxsIG5ldmVyIGNhbGwgc3Bpbl91bmxvY2soKS4KLSAqIFRoaXMgbGVhdmUgdGhlIHNlbV91bmRvX2xpc3QgaW4gYSBsb2NrZWQgc3RhdGUuICBJZiB0YXNrMSBub3cgY3JlYXRzIHRhc2szCi0gKiBhbmQgb25jZSBhZ2FpbiBzaGFyZXMgdGhlIHNlbV91bmRvX2xpc3QsIHRoZSBzZW1fdW5kb19saXN0IHdpbGwgc3RpbGwgYmUKLSAqIGxvY2tlZCwgYW5kIGZ1dHVyZSBTRU1fVU5ETyBvcGVyYXRpb25zIHdpbGwgZGVhZGxvY2suICBUaGlzIGNhc2UgaXMKLSAqIGRlYWx0IHdpdGggaW4gY29weV9zZW11bmRvKCkgYnkgaGF2aW5nIGl0IHJlaW5pdGlhbGl6ZSB0aGUgc3BpbiBsb2NrIHdoZW4gCi0gKiB0aGUgcmVmY250IGdvZXMgZnJvbSAxIHRvIDIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfc2VtdW5kbyh2b2lkKQotewotCXN0cnVjdCBzZW1fdW5kb19saXN0ICp1bmRvX2xpc3Q7Ci0KLQl1bmRvX2xpc3QgPSBjdXJyZW50LT5zeXN2c2VtLnVuZG9fbGlzdDsKLQlpZiAodW5kb19saXN0KQotCQlzcGluX3VubG9jaygmdW5kb19saXN0LT5sb2NrKTsKLX0KLQotCiAvKiBJZiB0aGUgdGFzayBkb2Vzbid0IGFscmVhZHkgaGF2ZSBhIHVuZG9fbGlzdCwgdGhlbiBhbGxvY2F0ZSBvbmUKICAqIGhlcmUuICBXZSBndWFyYW50ZWUgdGhlcmUgaXMgb25seSBvbmUgdGhyZWFkIHVzaW5nIHRoaXMgdW5kbyBsaXN0LAogICogYW5kIGN1cnJlbnQgaXMgVEhFIE9ORQpAQCAtMTA0NywyMiArMTA1OSwxNyBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCi0JbG9ja19zZW11bmRvKCk7CisJc3Bpbl9sb2NrKCZ1bHAtPmxvY2spOwogCXVuID0gbG9va3VwX3VuZG8odWxwLCBzZW1pZCk7Ci0JdW5sb2NrX3NlbXVuZG8oKTsKKwlzcGluX3VubG9jaygmdWxwLT5sb2NrKTsKIAlpZiAobGlrZWx5KHVuIT1OVUxMKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBubyB1bmRvIHN0cnVjdHVyZSBhcm91bmQgLSBhbGxvY2F0ZSBvbmUuICovCi0Jc21hID0gc2VtX2xvY2sobnMsIHNlbWlkKTsKLQl1biA9IEVSUl9QVFIoLUVJTlZBTCk7Ci0JaWYoc21hPT1OVUxMKQotCQlnb3RvIG91dDsKLQl1biA9IEVSUl9QVFIoLUVJRFJNKTsKLQlpZiAoc2VtX2NoZWNraWQobnMsc21hLHNlbWlkKSkgewotCQlzZW1fdW5sb2NrKHNtYSk7Ci0JCWdvdG8gb3V0OwotCX0KKwlzbWEgPSBzZW1fbG9ja19jaGVjayhucywgc2VtaWQpOworCWlmIChJU19FUlIoc21hKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihzbWEpKTsKKwogCW5zZW1zID0gc21hLT5zZW1fbnNlbXM7CiAJaXBjX3JjdV9nZXRyZWYoc21hKTsKIAlzZW1fdW5sb2NrKHNtYSk7CkBAIC0xMDc3LDEwICsxMDg0LDEwIEBACiAJbmV3LT5zZW1hZGogPSAoc2hvcnQgKikgJm5ld1sxXTsKIAluZXctPnNlbWlkID0gc2VtaWQ7CiAKLQlsb2NrX3NlbXVuZG8oKTsKKwlzcGluX2xvY2soJnVscC0+bG9jayk7CiAJdW4gPSBsb29rdXBfdW5kbyh1bHAsIHNlbWlkKTsKIAlpZiAodW4pIHsKLQkJdW5sb2NrX3NlbXVuZG8oKTsKKwkJc3Bpbl91bmxvY2soJnVscC0+bG9jayk7CiAJCWtmcmVlKG5ldyk7CiAJCWlwY19sb2NrX2J5X3B0cigmc21hLT5zZW1fcGVybSk7CiAJCWlwY19yY3VfcHV0cmVmKHNtYSk7CkBAIC0xMDkxLDcgKzEwOTgsNyBAQAogCWlwY19yY3VfcHV0cmVmKHNtYSk7CiAJaWYgKHNtYS0+c2VtX3Blcm0uZGVsZXRlZCkgewogCQlzZW1fdW5sb2NrKHNtYSk7Ci0JCXVubG9ja19zZW11bmRvKCk7CisJCXNwaW5fdW5sb2NrKCZ1bHAtPmxvY2spOwogCQlrZnJlZShuZXcpOwogCQl1biA9IEVSUl9QVFIoLUVJRFJNKTsKIAkJZ290byBvdXQ7CkBAIC0xMTAyLDcgKzExMDksNyBAQAogCXNtYS0+dW5kbyA9IG5ldzsKIAlzZW1fdW5sb2NrKHNtYSk7CiAJdW4gPSBuZXc7Ci0JdW5sb2NrX3NlbXVuZG8oKTsKKwlzcGluX3VubG9jaygmdWxwLT5sb2NrKTsKIG91dDoKIAlyZXR1cm4gdW47CiB9CkBAIC0xMTY4LDE1ICsxMTc1LDE0IEBACiAJfSBlbHNlCiAJCXVuID0gTlVMTDsKIAotCXNtYSA9IHNlbV9sb2NrKG5zLCBzZW1pZCk7Ci0JZXJyb3I9LUVJTlZBTDsKLQlpZihzbWE9PU5VTEwpCisJc21hID0gc2VtX2xvY2tfY2hlY2sobnMsIHNlbWlkKTsKKwlpZiAoSVNfRVJSKHNtYSkpIHsKKwkJZXJyb3IgPSBQVFJfRVJSKHNtYSk7CiAJCWdvdG8gb3V0X2ZyZWU7Ci0JZXJyb3IgPSAtRUlEUk07Ci0JaWYgKHNlbV9jaGVja2lkKG5zLHNtYSxzZW1pZCkpCi0JCWdvdG8gb3V0X3VubG9ja19mcmVlOworCX0KKwogCS8qCi0JICogc2VtaWQgaWRlbnRpZmllcyBhcmUgbm90IHVuaXF1ZSAtIGZpbmRfdW5kbyBtYXkgaGF2ZQorCSAqIHNlbWlkIGlkZW50aWZpZXJzIGFyZSBub3QgdW5pcXVlIC0gZmluZF91bmRvIG1heSBoYXZlCiAJICogYWxsb2NhdGVkIGFuIHVuZG8gc3RydWN0dXJlLCBpdCB3YXMgaW52YWxpZGF0ZWQgYnkgYW4gUk1JRAogCSAqIGFuZCBub3cgYSBuZXcgYXJyYXkgd2l0aCByZWNlaXZlZCB0aGUgc2FtZSBpZC4gQ2hlY2sgYW5kIHJldHJ5LgogCSAqLwpAQCAtMTE5Niw3ICsxMjAyLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X3VubG9ja19mcmVlOwogCi0JZXJyb3IgPSB0cnlfYXRvbWljX3NlbW9wIChzbWEsIHNvcHMsIG5zb3BzLCB1biwgY3VycmVudC0+dGdpZCk7CisJZXJyb3IgPSB0cnlfYXRvbWljX3NlbW9wIChzbWEsIHNvcHMsIG5zb3BzLCB1biwgdGFza190Z2lkX3ZucihjdXJyZW50KSk7CiAJaWYgKGVycm9yIDw9IDApIHsKIAkJaWYgKGFsdGVyICYmIGVycm9yID09IDApCiAJCQl1cGRhdGVfcXVldWUgKHNtYSk7CkBAIC0xMjExLDcgKzEyMTcsNyBAQAogCXF1ZXVlLnNvcHMgPSBzb3BzOwogCXF1ZXVlLm5zb3BzID0gbnNvcHM7CiAJcXVldWUudW5kbyA9IHVuOwotCXF1ZXVlLnBpZCA9IGN1cnJlbnQtPnRnaWQ7CisJcXVldWUucGlkID0gdGFza190Z2lkX3ZucihjdXJyZW50KTsKIAlxdWV1ZS5pZCA9IHNlbWlkOwogCXF1ZXVlLmFsdGVyID0gYWx0ZXI7CiAJaWYgKGFsdGVyKQpAQCAtMTI0Miw3ICsxMjQ4LDcgQEAKIAl9CiAKIAlzbWEgPSBzZW1fbG9jayhucywgc2VtaWQpOwotCWlmKHNtYT09TlVMTCkgeworCWlmIChJU19FUlIoc21hKSkgewogCQlCVUdfT04ocXVldWUucHJldiAhPSBOVUxMKTsKIAkJZXJyb3IgPSAtRUlEUk07CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xMjc5LDEwICsxMjg1LDYgQEAKIAogLyogSWYgQ0xPTkVfU1lTVlNFTSBpcyBzZXQsIGVzdGFibGlzaCBzaGFyaW5nIG9mIFNFTV9VTkRPIHN0YXRlIGJldHdlZW4KICAqIHBhcmVudCBhbmQgY2hpbGQgdGFza3MuCi0gKgotICogU2VlIHRoZSBub3RlcyBhYm92ZSB1bmxvY2tfc2VtdW5kbygpIHJlZ2FyZGluZyB0aGUgc3Bpbl9sb2NrX2luaXQoKQotICogaW4gdGhpcyBjb2RlLiAgSW5pdGlhbGl6ZSB0aGUgdW5kb19saXN0LT5sb2NrIGhlcmUgaW5zdGVhZCBvZiBnZXRfdW5kb19saXN0KCkKLSAqIGJlY2F1c2Ugb2YgdGhlIHJlYXNvbmluZyBpbiB0aGUgY29tbWVudCBhYm92ZSB1bmxvY2tfc2VtdW5kby4KICAqLwogCiBpbnQgY29weV9zZW11bmRvKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQpAQCAtMTM0MiwxMyArMTM0NCwxMyBAQAogCQlpZihzZW1pZCA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCQlzbWEgPSBzZW1fbG9jayhucywgc2VtaWQpOwotCQlpZiAoc21hID09IE5VTEwpCisJCWlmIChJU19FUlIoc21hKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICh1LT5zZW1pZCA9PSAtMSkKIAkJCWdvdG8gbmV4dF9lbnRyeTsKIAotCQlCVUdfT04oc2VtX2NoZWNraWQobnMsc21hLHUtPnNlbWlkKSk7CisJCUJVR19PTihzZW1fY2hlY2tpZChzbWEsIHUtPnNlbWlkKSk7CiAKIAkJLyogcmVtb3ZlIHUgZnJvbSB0aGUgc21hLT51bmRvIGxpc3QgKi8KIAkJZm9yICh1bnAgPSAmc21hLT51bmRvOyAodW4gPSAqdW5wKTsgdW5wID0gJnVuLT5pZF9uZXh0KSB7CkBAIC0xMzgyLDcgKzEzODQsNyBAQAogCQkJCQlzZW1hcGhvcmUtPnNlbXZhbCA9IDA7CiAJCQkJaWYgKHNlbWFwaG9yZS0+c2VtdmFsID4gU0VNVk1YKQogCQkJCQlzZW1hcGhvcmUtPnNlbXZhbCA9IFNFTVZNWDsKLQkJCQlzZW1hcGhvcmUtPnNlbXBpZCA9IGN1cnJlbnQtPnRnaWQ7CisJCQkJc2VtYXBob3JlLT5zZW1waWQgPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpOwogCQkJfQogCQl9CiAJCXNtYS0+c2VtX290aW1lID0gZ2V0X3NlY29uZHMoKTsKQEAgLTE0MDIsNyArMTQwNCw3IEBACiAJcmV0dXJuIHNlcV9wcmludGYocywKIAkJCSAgIiUxMGQgJTEwZCAgJTRvICUxMGx1ICU1dSAlNXUgJTV1ICU1dSAlMTBsdSAlMTBsdVxuIiwKIAkJCSAgc21hLT5zZW1fcGVybS5rZXksCi0JCQkgIHNtYS0+c2VtX2lkLAorCQkJICBzbWEtPnNlbV9wZXJtLmlkLAogCQkJICBzbWEtPnNlbV9wZXJtLm1vZGUsCiAJCQkgIHNtYS0+c2VtX25zZW1zLAogCQkJICBzbWEtPnNlbV9wZXJtLnVpZCwKZGlmZiAtLWdpdCBhL2lwYy9zaG0uYyBiL2lwYy9zaG0uYwppbmRleCA1ZmM1Y2Y1Li4zODE4ZmFlIDEwMDY0NAotLS0gYS9pcGMvc2htLmMKKysrIGIvaXBjL3NobS5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogCkBAIC01OSwxNyArNTksMTEgQEAKIAogI2RlZmluZSBzaG1faWRzKG5zKQkoKigobnMpLT5pZHNbSVBDX1NITV9JRFNdKSkKIAotI2RlZmluZSBzaG1fbG9jayhucywgaWQpCQlcCi0JKChzdHJ1Y3Qgc2htaWRfa2VybmVsKilpcGNfbG9jaygmc2htX2lkcyhucyksaWQpKQogI2RlZmluZSBzaG1fdW5sb2NrKHNocCkJCQlcCiAJaXBjX3VubG9jaygmKHNocCktPnNobV9wZXJtKQotI2RlZmluZSBzaG1fZ2V0KG5zLCBpZCkJCQlcCi0JKChzdHJ1Y3Qgc2htaWRfa2VybmVsKilpcGNfZ2V0KCZzaG1faWRzKG5zKSxpZCkpCi0jZGVmaW5lIHNobV9idWlsZGlkKG5zLCBpZCwgc2VxKQlcCi0JaXBjX2J1aWxkaWQoJnNobV9pZHMobnMpLCBpZCwgc2VxKQorI2RlZmluZSBzaG1fYnVpbGRpZChpZCwgc2VxKQlpcGNfYnVpbGRpZChpZCwgc2VxKQogCi1zdGF0aWMgaW50IG5ld3NlZyAoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBrZXlfdCBrZXksCi0JCWludCBzaG1mbGcsIHNpemVfdCBzaXplKTsKK3N0YXRpYyBpbnQgbmV3c2VnKHN0cnVjdCBpcGNfbmFtZXNwYWNlICosIHN0cnVjdCBpcGNfcGFyYW1zICopOwogc3RhdGljIHZvaWQgc2htX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogc3RhdGljIHZvaWQgc2htX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIHN0YXRpYyB2b2lkIHNobV9kZXN0cm95IChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocCk7CkBAIC04NCw5ICs3OCwxMyBAQAogCW5zLT5zaG1fY3RsYWxsID0gU0hNQUxMOwogCW5zLT5zaG1fY3RsbW5pID0gU0hNTU5JOwogCW5zLT5zaG1fdG90ID0gMDsKLQlpcGNfaW5pdF9pZHMoaWRzLCAxKTsKKwlpcGNfaW5pdF9pZHMoaWRzKTsKIH0KIAorLyoKKyAqIENhbGxlZCB3aXRoIHNobV9pZHMucndfbXV0ZXggKHdyaXRlcikgYW5kIHRoZSBzaHAgc3RydWN0dXJlIGxvY2tlZC4KKyAqIE9ubHkgc2htX2lkcy5yd19tdXRleCByZW1haW5zIGxvY2tlZCBvbiBleGl0LgorICovCiBzdGF0aWMgdm9pZCBkb19zaG1fcm1pZChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocCkKIHsKIAlpZiAoc2hwLT5zaG1fbmF0dGNoKXsKQEAgLTExMiwyMCArMTEwLDI0IEBACiAKIHZvaWQgc2htX2V4aXRfbnMoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zKQogewotCWludCBpOwogCXN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocDsKKwlpbnQgbmV4dF9pZDsKKwlpbnQgdG90YWwsIGluX3VzZTsKIAotCW11dGV4X2xvY2soJnNobV9pZHMobnMpLm11dGV4KTsKLQlmb3IgKGkgPSAwOyBpIDw9IHNobV9pZHMobnMpLm1heF9pZDsgaSsrKSB7Ci0JCXNocCA9IHNobV9sb2NrKG5zLCBpKTsKKwlkb3duX3dyaXRlKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CisKKwlpbl91c2UgPSBzaG1faWRzKG5zKS5pbl91c2U7CisKKwlmb3IgKHRvdGFsID0gMCwgbmV4dF9pZCA9IDA7IHRvdGFsIDwgaW5fdXNlOyBuZXh0X2lkKyspIHsKKwkJc2hwID0gaWRyX2ZpbmQoJnNobV9pZHMobnMpLmlwY3NfaWRyLCBuZXh0X2lkKTsKIAkJaWYgKHNocCA9PSBOVUxMKQogCQkJY29udGludWU7Ci0KKwkJaXBjX2xvY2tfYnlfcHRyKCZzaHAtPnNobV9wZXJtKTsKIAkJZG9fc2htX3JtaWQobnMsIHNocCk7CisJCXRvdGFsKys7CiAJfQotCW11dGV4X3VubG9jaygmc2htX2lkcyhucykubXV0ZXgpOworCXVwX3dyaXRlKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CiAKLQlpcGNfZmluaV9pZHMobnMtPmlkc1tJUENfU0hNX0lEU10pOwogCWtmcmVlKG5zLT5pZHNbSVBDX1NITV9JRFNdKTsKIAlucy0+aWRzW0lQQ19TSE1fSURTXSA9IE5VTEw7CiB9CkBAIC0xMzgsMTcgKzE0MCw0OSBAQAogCQkJCUlQQ19TSE1fSURTLCBzeXN2aXBjX3NobV9wcm9jX3Nob3cpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzaG1fY2hlY2tpZChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsCi0JCXN0cnVjdCBzaG1pZF9rZXJuZWwgKnMsIGludCBpZCkKKy8qCisgKiBzaG1fbG9ja18oY2hlY2tfKWRvd24gcm91dGluZXMgYXJlIGNhbGxlZCBpbiB0aGUgcGF0aHMgd2hlcmUgdGhlIHJ3X211dGV4CisgKiBpcyBoZWxkIHRvIHByb3RlY3QgYWNjZXNzIHRvIHRoZSBpZHIgdHJlZS4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaG1fbG9ja19kb3duKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywKKwkJCQkJCWludCBpZCkKIHsKLQlpZiAoaXBjX2NoZWNraWQoJnNobV9pZHMobnMpLCAmcy0+c2htX3Blcm0sIGlkKSkKLQkJcmV0dXJuIC1FSURSTTsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCA9IGlwY19sb2NrX2Rvd24oJnNobV9pZHMobnMpLCBpZCk7CisKKwlyZXR1cm4gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaG1fcm1pZChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIGludCBpZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNobWlkX2tlcm5lbCAqc2htX2xvY2tfY2hlY2tfZG93bigKKwkJCQkJCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywKKwkJCQkJCWludCBpZCkKIHsKLQlyZXR1cm4gKHN0cnVjdCBzaG1pZF9rZXJuZWwgKilpcGNfcm1pZCgmc2htX2lkcyhucyksIGlkKTsKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCA9IGlwY19sb2NrX2NoZWNrX2Rvd24oJnNobV9pZHMobnMpLCBpZCk7CisKKwlyZXR1cm4gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKK30KKworLyoKKyAqIHNobV9sb2NrXyhjaGVja18pIHJvdXRpbmVzIGFyZSBjYWxsZWQgaW4gdGhlIHBhdGhzIHdoZXJlIHRoZSByd19tdXRleAorICogaXMgbm90IGhlbGQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNobWlkX2tlcm5lbCAqc2htX2xvY2soc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBpbnQgaWQpCit7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3AgPSBpcGNfbG9jaygmc2htX2lkcyhucyksIGlkKTsKKworCXJldHVybiBjb250YWluZXJfb2YoaXBjcCwgc3RydWN0IHNobWlkX2tlcm5lbCwgc2htX3Blcm0pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzaG1pZF9rZXJuZWwgKnNobV9sb2NrX2NoZWNrKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywKKwkJCQkJCWludCBpZCkKK3sKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCA9IGlwY19sb2NrX2NoZWNrKCZzaG1faWRzKG5zKSwgaWQpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihpcGNwLCBzdHJ1Y3Qgc2htaWRfa2VybmVsLCBzaG1fcGVybSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzaG1fcm1pZChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBzaG1pZF9rZXJuZWwgKnMpCit7CisJaXBjX3JtaWQoJnNobV9pZHMobnMpLCAmcy0+c2htX3Blcm0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzaG1fYWRkaWQoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHApCkBAIC0xNjYsOSArMjAwLDkgQEAKIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7CiAKIAlzaHAgPSBzaG1fbG9jayhzZmQtPm5zLCBzZmQtPmlkKTsKLQlCVUdfT04oIXNocCk7CisJQlVHX09OKElTX0VSUihzaHApKTsKIAlzaHAtPnNobV9hdGltID0gZ2V0X3NlY29uZHMoKTsKLQlzaHAtPnNobV9scHJpZCA9IGN1cnJlbnQtPnRnaWQ7CisJc2hwLT5zaG1fbHByaWQgPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpOwogCXNocC0+c2htX25hdHRjaCsrOwogCXNobV91bmxvY2soc2hwKTsKIH0KQEAgLTE3NiwxNSArMjEwLDE2IEBACiAvKgogICogc2htX2Rlc3Ryb3kgLSBmcmVlIHRoZSBzdHJ1Y3Qgc2htaWRfa2VybmVsCiAgKgorICogQG5zOiBuYW1lc3BhY2UKICAqIEBzaHA6IHN0cnVjdCB0byBmcmVlCiAgKgotICogSXQgaGFzIHRvIGJlIGNhbGxlZCB3aXRoIHNocCBhbmQgc2htX2lkcy5tdXRleCBsb2NrZWQsCisgKiBJdCBoYXMgdG8gYmUgY2FsbGVkIHdpdGggc2hwIGFuZCBzaG1faWRzLnJ3X211dGV4ICh3cml0ZXIpIGxvY2tlZCwKICAqIGJ1dCByZXR1cm5zIHdpdGggc2hwIHVubG9ja2VkIGFuZCBmcmVlZC4KICAqLwogc3RhdGljIHZvaWQgc2htX2Rlc3Ryb3koc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHApCiB7CiAJbnMtPnNobV90b3QgLT0gKHNocC0+c2htX3NlZ3N6ICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQlzaG1fcm1pZChucywgc2hwLT5pZCk7CisJc2htX3JtaWQobnMsIHNocCk7CiAJc2htX3VubG9jayhzaHApOwogCWlmICghaXNfZmlsZV9odWdlcGFnZXMoc2hwLT5zaG1fZmlsZSkpCiAJCXNobWVtX2xvY2soc2hwLT5zaG1fZmlsZSwgMCwgc2hwLT5tbG9ja191c2VyKTsKQEAgLTIwOSwxMSArMjQ0LDExIEBACiAJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwOwogCXN0cnVjdCBpcGNfbmFtZXNwYWNlICpucyA9IHNmZC0+bnM7CiAKLQltdXRleF9sb2NrKCZzaG1faWRzKG5zKS5tdXRleCk7CisJZG93bl93cml0ZSgmc2htX2lkcyhucykucndfbXV0ZXgpOwogCS8qIHJlbW92ZSBmcm9tIHRoZSBsaXN0IG9mIGF0dGFjaGVzIG9mIHRoZSBzaG0gc2VnbWVudCAqLwotCXNocCA9IHNobV9sb2NrKG5zLCBzZmQtPmlkKTsKLQlCVUdfT04oIXNocCk7Ci0Jc2hwLT5zaG1fbHByaWQgPSBjdXJyZW50LT50Z2lkOworCXNocCA9IHNobV9sb2NrX2Rvd24obnMsIHNmZC0+aWQpOworCUJVR19PTihJU19FUlIoc2hwKSk7CisJc2hwLT5zaG1fbHByaWQgPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpOwogCXNocC0+c2htX2R0aW0gPSBnZXRfc2Vjb25kcygpOwogCXNocC0+c2htX25hdHRjaC0tOwogCWlmKHNocC0+c2htX25hdHRjaCA9PSAwICYmCkBAIC0yMjEsNyArMjU2LDcgQEAKIAkJc2htX2Rlc3Ryb3kobnMsIHNocCk7CiAJZWxzZQogCQlzaG1fdW5sb2NrKHNocCk7Ci0JbXV0ZXhfdW5sb2NrKCZzaG1faWRzKG5zKS5tdXRleCk7CisJdXBfd3JpdGUoJnNobV9pZHMobnMpLnJ3X211dGV4KTsKIH0KIAogc3RhdGljIGludCBzaG1fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQpAQCAtMzM3LDggKzM3MiwxOSBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IG5ld3NlZyAoc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zLCBrZXlfdCBrZXksIGludCBzaG1mbGcsIHNpemVfdCBzaXplKQorLyoqCisgKiBuZXdzZWcgLSBDcmVhdGUgYSBuZXcgc2hhcmVkIG1lbW9yeSBzZWdtZW50CisgKiBAbnM6IG5hbWVzcGFjZQorICogQHBhcmFtczogcHRyIHRvIHRoZSBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyBrZXksIHNpemUgYW5kIHNobWZsZworICoKKyAqIENhbGxlZCB3aXRoIHNobV9pZHMucndfbXV0ZXggaGVsZCBhcyBhIHdyaXRlci4KKyAqLworCitzdGF0aWMgaW50IG5ld3NlZyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBpcGNfcGFyYW1zICpwYXJhbXMpCiB7CisJa2V5X3Qga2V5ID0gcGFyYW1zLT5rZXk7CisJaW50IHNobWZsZyA9IHBhcmFtcy0+ZmxnOworCXNpemVfdCBzaXplID0gcGFyYW1zLT51LnNpemU7CiAJaW50IGVycm9yOwogCXN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocDsKIAlpbnQgbnVtcGFnZXMgPSAoc2l6ZSArIFBBR0VfU0laRSAtMSkgPj4gUEFHRV9TSElGVDsKQEAgLTM4NywyOCArNDMzLDMwIEBACiAJaWYgKElTX0VSUihmaWxlKSkKIAkJZ290byBub19maWxlOwogCi0JZXJyb3IgPSAtRU5PU1BDOwogCWlkID0gc2htX2FkZGlkKG5zLCBzaHApOwotCWlmKGlkID09IC0xKSAKKwlpZiAoaWQgPCAwKSB7CisJCWVycm9yID0gaWQ7CiAJCWdvdG8gbm9faWQ7CisJfQogCi0Jc2hwLT5zaG1fY3ByaWQgPSBjdXJyZW50LT50Z2lkOworCXNocC0+c2htX2NwcmlkID0gdGFza190Z2lkX3ZucihjdXJyZW50KTsKIAlzaHAtPnNobV9scHJpZCA9IDA7CiAJc2hwLT5zaG1fYXRpbSA9IHNocC0+c2htX2R0aW0gPSAwOwogCXNocC0+c2htX2N0aW0gPSBnZXRfc2Vjb25kcygpOwogCXNocC0+c2htX3NlZ3N6ID0gc2l6ZTsKIAlzaHAtPnNobV9uYXR0Y2ggPSAwOwotCXNocC0+aWQgPSBzaG1fYnVpbGRpZChucywgaWQsIHNocC0+c2htX3Blcm0uc2VxKTsKKwlzaHAtPnNobV9wZXJtLmlkID0gc2htX2J1aWxkaWQoaWQsIHNocC0+c2htX3Blcm0uc2VxKTsKIAlzaHAtPnNobV9maWxlID0gZmlsZTsKIAkvKgogCSAqIHNobWlkIGdldHMgcmVwb3J0ZWQgYXMgImlub2RlIyIgaW4gL3Byb2MvcGlkL21hcHMuCiAJICogcHJvYy1wcyB0b29scyB1c2UgdGhpcy4gQ2hhbmdpbmcgdGhpcyB3aWxsIGJyZWFrIHRoZW0uCiAJICovCi0JZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfaW5vID0gc2hwLT5pZDsKKwlmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9pbm8gPSBzaHAtPnNobV9wZXJtLmlkOwogCiAJbnMtPnNobV90b3QgKz0gbnVtcGFnZXM7CisJZXJyb3IgPSBzaHAtPnNobV9wZXJtLmlkOwogCXNobV91bmxvY2soc2hwKTsKLQlyZXR1cm4gc2hwLT5pZDsKKwlyZXR1cm4gZXJyb3I7CiAKIG5vX2lkOgogCWZwdXQoZmlsZSk7CkBAIC00MTgsNDIgKzQ2Niw0OSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19zaG1nZXQgKGtleV90IGtleSwgc2l6ZV90IHNpemUsIGludCBzaG1mbGcpCisvKgorICogQ2FsbGVkIHdpdGggc2htX2lkcy5yd19tdXRleCBhbmQgaXBjcCBsb2NrZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHNobV9zZWN1cml0eShzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgaW50IHNobWZsZykKIHsKIAlzdHJ1Y3Qgc2htaWRfa2VybmVsICpzaHA7Ci0JaW50IGVyciwgaWQgPSAwOworCisJc2hwID0gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKKwlyZXR1cm4gc2VjdXJpdHlfc2htX2Fzc29jaWF0ZShzaHAsIHNobWZsZyk7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBzaG1faWRzLnJ3X211dGV4IGFuZCBpcGNwIGxvY2tlZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2htX21vcmVfY2hlY2tzKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwLAorCQkJCXN0cnVjdCBpcGNfcGFyYW1zICpwYXJhbXMpCit7CisJc3RydWN0IHNobWlkX2tlcm5lbCAqc2hwOworCisJc2hwID0gY29udGFpbmVyX29mKGlwY3AsIHN0cnVjdCBzaG1pZF9rZXJuZWwsIHNobV9wZXJtKTsKKwlpZiAoc2hwLT5zaG1fc2Vnc3ogPCBwYXJhbXMtPnUuc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19zaG1nZXQgKGtleV90IGtleSwgc2l6ZV90IHNpemUsIGludCBzaG1mbGcpCit7CiAJc3RydWN0IGlwY19uYW1lc3BhY2UgKm5zOworCXN0cnVjdCBpcGNfb3BzIHNobV9vcHM7CisJc3RydWN0IGlwY19wYXJhbXMgc2htX3BhcmFtczsKIAogCW5zID0gY3VycmVudC0+bnNwcm94eS0+aXBjX25zOwogCi0JbXV0ZXhfbG9jaygmc2htX2lkcyhucykubXV0ZXgpOwotCWlmIChrZXkgPT0gSVBDX1BSSVZBVEUpIHsKLQkJZXJyID0gbmV3c2VnKG5zLCBrZXksIHNobWZsZywgc2l6ZSk7Ci0JfSBlbHNlIGlmICgoaWQgPSBpcGNfZmluZGtleSgmc2htX2lkcyhucyksIGtleSkpID09IC0xKSB7Ci0JCWlmICghKHNobWZsZyAmIElQQ19DUkVBVCkpCi0JCQllcnIgPSAtRU5PRU5UOwotCQllbHNlCi0JCQllcnIgPSBuZXdzZWcobnMsIGtleSwgc2htZmxnLCBzaXplKTsKLQl9IGVsc2UgaWYgKChzaG1mbGcgJiBJUENfQ1JFQVQpICYmIChzaG1mbGcgJiBJUENfRVhDTCkpIHsKLQkJZXJyID0gLUVFWElTVDsKLQl9IGVsc2UgewotCQlzaHAgPSBzaG1fbG9jayhucywgaWQpOwotCQlCVUdfT04oc2hwPT1OVUxMKTsKLQkJaWYgKHNocC0+c2htX3NlZ3N6IDwgc2l6ZSkKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWVsc2UgaWYgKGlwY3Blcm1zKCZzaHAtPnNobV9wZXJtLCBzaG1mbGcpKQotCQkJZXJyID0gLUVBQ0NFUzsKLQkJZWxzZSB7Ci0JCQlpbnQgc2htaWQgPSBzaG1fYnVpbGRpZChucywgaWQsIHNocC0+c2htX3Blcm0uc2VxKTsKLQkJCWVyciA9IHNlY3VyaXR5X3NobV9hc3NvY2lhdGUoc2hwLCBzaG1mbGcpOwotCQkJaWYgKCFlcnIpCi0JCQkJZXJyID0gc2htaWQ7Ci0JCX0KLQkJc2htX3VubG9jayhzaHApOwotCX0KLQltdXRleF91bmxvY2soJnNobV9pZHMobnMpLm11dGV4KTsKKwlzaG1fb3BzLmdldG5ldyA9IG5ld3NlZzsKKwlzaG1fb3BzLmFzc29jaWF0ZSA9IHNobV9zZWN1cml0eTsKKwlzaG1fb3BzLm1vcmVfY2hlY2tzID0gc2htX21vcmVfY2hlY2tzOwogCi0JcmV0dXJuIGVycjsKKwlzaG1fcGFyYW1zLmtleSA9IGtleTsKKwlzaG1fcGFyYW1zLmZsZyA9IHNobWZsZzsKKwlzaG1fcGFyYW1zLnUuc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gaXBjZ2V0KG5zLCAmc2htX2lkcyhucyksICZzaG1fb3BzLCAmc2htX3BhcmFtcyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBjb3B5X3NobWlkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmJ1Ziwgc3RydWN0IHNobWlkNjRfZHMgKmluLCBpbnQgdmVyc2lvbikKQEAgLTU0NywyMCArNjAyLDI2IEBACiAJfQogfQogCisvKgorICogQ2FsbGVkIHdpdGggc2htX2lkcy5yd19tdXRleCBoZWxkIGFzIGEgcmVhZGVyCisgKi8KIHN0YXRpYyB2b2lkIHNobV9nZXRfc3RhdChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIHVuc2lnbmVkIGxvbmcgKnJzcywKIAkJdW5zaWduZWQgbG9uZyAqc3dwKQogewotCWludCBpOworCWludCBuZXh0X2lkOworCWludCB0b3RhbCwgaW5fdXNlOwogCiAJKnJzcyA9IDA7CiAJKnN3cCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IHNobV9pZHMobnMpLm1heF9pZDsgaSsrKSB7CisJaW5fdXNlID0gc2htX2lkcyhucykuaW5fdXNlOworCisJZm9yICh0b3RhbCA9IDAsIG5leHRfaWQgPSAwOyB0b3RhbCA8IGluX3VzZTsgbmV4dF9pZCsrKSB7CiAJCXN0cnVjdCBzaG1pZF9rZXJuZWwgKnNocDsKIAkJc3RydWN0IGlub2RlICppbm9kZTsKIAotCQlzaHAgPSBzaG1fZ2V0KG5zLCBpKTsKLQkJaWYoIXNocCkKKwkJc2hwID0gaWRyX2ZpbmQoJnNobV9pZHMobnMpLmlwY3NfaWRyLCBuZXh0X2lkKTsKKwkJaWYgKHNocCA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJaW5vZGUgPSBzaHAtPnNobV9maWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwpAQCAtNTc1LDYgKzYzNiw4IEBACiAJCQkqc3dwICs9IGluZm8tPnN3YXBwZWQ7CiAJCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCX0KKworCQl0b3RhbCsrOwogCX0KIH0KIApAQCAtNjEwLDggKzY3MywxMSBAQAogCQlzaG1pbmZvLnNobW1pbiA9IFNITU1JTjsKIAkJaWYoY29weV9zaG1pbmZvX3RvX3VzZXIgKGJ1ZiwgJnNobWluZm8sIHZlcnNpb24pKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCS8qIHJlYWRpbmcgYSBpbnRlZ2VyIGlzIGFsd2F5cyBhdG9taWMgKi8KLQkJZXJyPSBzaG1faWRzKG5zKS5tYXhfaWQ7CisKKwkJZG93bl9yZWFkKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CisJCWVyciA9IGlwY19nZXRfbWF4aWQoJnNobV9pZHMobnMpKTsKKwkJdXBfcmVhZCgmc2htX2lkcyhucykucndfbXV0ZXgpOworCiAJCWlmKGVycjwwKQogCQkJZXJyID0gMDsKIAkJZ290byBvdXQ7CkBAIC02MjUsMTQgKzY5MSwxNCBAQAogCQkJcmV0dXJuIGVycjsKIAogCQltZW1zZXQoJnNobV9pbmZvLDAsc2l6ZW9mKHNobV9pbmZvKSk7Ci0JCW11dGV4X2xvY2soJnNobV9pZHMobnMpLm11dGV4KTsKKwkJZG93bl9yZWFkKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CiAJCXNobV9pbmZvLnVzZWRfaWRzID0gc2htX2lkcyhucykuaW5fdXNlOwogCQlzaG1fZ2V0X3N0YXQgKG5zLCAmc2htX2luZm8uc2htX3JzcywgJnNobV9pbmZvLnNobV9zd3ApOwogCQlzaG1faW5mby5zaG1fdG90ID0gbnMtPnNobV90b3Q7CiAJCXNobV9pbmZvLnN3YXBfYXR0ZW1wdHMgPSAwOwogCQlzaG1faW5mby5zd2FwX3N1Y2Nlc3NlcyA9IDA7Ci0JCWVyciA9IHNobV9pZHMobnMpLm1heF9pZDsKLQkJbXV0ZXhfdW5sb2NrKCZzaG1faWRzKG5zKS5tdXRleCk7CisJCWVyciA9IGlwY19nZXRfbWF4aWQoJnNobV9pZHMobnMpKTsKKwkJdXBfcmVhZCgmc2htX2lkcyhucykucndfbXV0ZXgpOwogCQlpZihjb3B5X3RvX3VzZXIgKGJ1ZiwgJnNobV9pbmZvLCBzaXplb2Yoc2htX2luZm8pKSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwpAQCAtNjQ2LDIwICs3MTIsMjUgQEAKIAl7CiAJCXN0cnVjdCBzaG1pZDY0X2RzIHRidWY7CiAJCWludCByZXN1bHQ7Ci0JCW1lbXNldCgmdGJ1ZiwgMCwgc2l6ZW9mKHRidWYpKTsKLQkJc2hwID0gc2htX2xvY2sobnMsIHNobWlkKTsKLQkJaWYoc2hwPT1OVUxMKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCisJCWlmICghYnVmKSB7CisJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSBpZihjbWQ9PVNITV9TVEFUKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJaWYgKHNobWlkID4gc2htX2lkcyhucykubWF4X2lkKQotCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCXJlc3VsdCA9IHNobV9idWlsZGlkKG5zLCBzaG1pZCwgc2hwLT5zaG1fcGVybS5zZXEpOworCQl9CisKKwkJaWYgKGNtZCA9PSBTSE1fU1RBVCkgeworCQkJc2hwID0gc2htX2xvY2sobnMsIHNobWlkKTsKKwkJCWlmIChJU19FUlIoc2hwKSkgeworCQkJCWVyciA9IFBUUl9FUlIoc2hwKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXJlc3VsdCA9IHNocC0+c2htX3Blcm0uaWQ7CiAJCX0gZWxzZSB7Ci0JCQllcnIgPSBzaG1fY2hlY2tpZChucywgc2hwLHNobWlkKTsKLQkJCWlmKGVycikKLQkJCQlnb3RvIG91dF91bmxvY2s7CisJCQlzaHAgPSBzaG1fbG9ja19jaGVjayhucywgc2htaWQpOworCQkJaWYgKElTX0VSUihzaHApKSB7CisJCQkJZXJyID0gUFRSX0VSUihzaHApOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJcmVzdWx0ID0gMDsKIAkJfQogCQllcnI9LUVBQ0NFUzsKQEAgLTY2OCw2ICs3MzksNyBAQAogCQllcnIgPSBzZWN1cml0eV9zaG1fc2htY3RsKHNocCwgY21kKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X3VubG9jazsKKwkJbWVtc2V0KCZ0YnVmLCAwLCBzaXplb2YodGJ1ZikpOwogCQlrZXJuZWxfdG9faXBjNjRfcGVybSgmc2hwLT5zaG1fcGVybSwgJnRidWYuc2htX3Blcm0pOwogCQl0YnVmLnNobV9zZWdzegk9IHNocC0+c2htX3NlZ3N6OwogCQl0YnVmLnNobV9hdGltZQk9IHNocC0+c2htX2F0aW07CkBAIC02ODYsMTQgKzc1OCwxMSBAQAogCWNhc2UgU0hNX0xPQ0s6CiAJY2FzZSBTSE1fVU5MT0NLOgogCXsKLQkJc2hwID0gc2htX2xvY2sobnMsIHNobWlkKTsKLQkJaWYoc2hwPT1OVUxMKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQlzaHAgPSBzaG1fbG9ja19jaGVjayhucywgc2htaWQpOworCQlpZiAoSVNfRVJSKHNocCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoc2hwKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWVyciA9IHNobV9jaGVja2lkKG5zLCBzaHAsc2htaWQpOwotCQlpZihlcnIpCi0JCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJZXJyID0gYXVkaXRfaXBjX29iaigmKHNocC0+c2htX3Blcm0pKTsKIAkJaWYgKGVycikKQEAgLTc0MiwxNCArODExLDEyIEBACiAJCSAqCUluc3RlYWQgd2Ugc2V0IGEgZGVzdHJveWVkIGZsYWcsIGFuZCB0aGVuIGJsb3cKIAkJICoJdGhlIG5hbWUgYXdheSB3aGVuIHRoZSB1c2FnZSBoaXRzIHplcm8uCiAJCSAqLwotCQltdXRleF9sb2NrKCZzaG1faWRzKG5zKS5tdXRleCk7Ci0JCXNocCA9IHNobV9sb2NrKG5zLCBzaG1pZCk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChzaHAgPT0gTlVMTCkgCisJCWRvd25fd3JpdGUoJnNobV9pZHMobnMpLnJ3X211dGV4KTsKKwkJc2hwID0gc2htX2xvY2tfY2hlY2tfZG93bihucywgc2htaWQpOworCQlpZiAoSVNfRVJSKHNocCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoc2hwKTsKIAkJCWdvdG8gb3V0X3VwOwotCQllcnIgPSBzaG1fY2hlY2tpZChucywgc2hwLCBzaG1pZCk7Ci0JCWlmKGVycikKLQkJCWdvdG8gb3V0X3VubG9ja191cDsKKwkJfQogCiAJCWVyciA9IGF1ZGl0X2lwY19vYmooJihzaHAtPnNobV9wZXJtKSk7CiAJCWlmIChlcnIpCkBAIC03NjcsMjQgKzgzNCwyNyBAQAogCQkJZ290byBvdXRfdW5sb2NrX3VwOwogCiAJCWRvX3NobV9ybWlkKG5zLCBzaHApOwotCQltdXRleF91bmxvY2soJnNobV9pZHMobnMpLm11dGV4KTsKKwkJdXBfd3JpdGUoJnNobV9pZHMobnMpLnJ3X211dGV4KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJY2FzZSBJUENfU0VUOgogCXsKKwkJaWYgKCFidWYpIHsKKwkJCWVyciA9IC1FRkFVTFQ7CisJCQlnb3RvIG91dDsKKwkJfQorCiAJCWlmIChjb3B5X3NobWlkX2Zyb21fdXNlciAoJnNldGJ1ZiwgYnVmLCB2ZXJzaW9uKSkgewogCQkJZXJyID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCW11dGV4X2xvY2soJnNobV9pZHMobnMpLm11dGV4KTsKLQkJc2hwID0gc2htX2xvY2sobnMsIHNobWlkKTsKLQkJZXJyPS1FSU5WQUw7Ci0JCWlmKHNocD09TlVMTCkKKwkJZG93bl93cml0ZSgmc2htX2lkcyhucykucndfbXV0ZXgpOworCQlzaHAgPSBzaG1fbG9ja19jaGVja19kb3duKG5zLCBzaG1pZCk7CisJCWlmIChJU19FUlIoc2hwKSkgeworCQkJZXJyID0gUFRSX0VSUihzaHApOwogCQkJZ290byBvdXRfdXA7Ci0JCWVyciA9IHNobV9jaGVja2lkKG5zLCBzaHAsc2htaWQpOwotCQlpZihlcnIpCi0JCQlnb3RvIG91dF91bmxvY2tfdXA7CisJCX0KIAkJZXJyID0gYXVkaXRfaXBjX29iaigmKHNocC0+c2htX3Blcm0pKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0X3VubG9ja191cDsKQEAgLTgxOSw3ICs4ODksNyBAQAogb3V0X3VubG9ja191cDoKIAlzaG1fdW5sb2NrKHNocCk7CiBvdXRfdXA6Ci0JbXV0ZXhfdW5sb2NrKCZzaG1faWRzKG5zKS5tdXRleCk7CisJdXBfd3JpdGUoJnNobV9pZHMobnMpLnJ3X211dGV4KTsKIAlnb3RvIG91dDsKIG91dF91bmxvY2s6CiAJc2htX3VubG9jayhzaHApOwpAQCAtODkwLDEzICs5NjAsMTEgQEAKIAkgKiBhZGRpdGlvbmFsIGNyZWF0b3IgaWQuLi4KIAkgKi8KIAlucyA9IGN1cnJlbnQtPm5zcHJveHktPmlwY19uczsKLQlzaHAgPSBzaG1fbG9jayhucywgc2htaWQpOwotCWlmKHNocCA9PSBOVUxMKQorCXNocCA9IHNobV9sb2NrX2NoZWNrKG5zLCBzaG1pZCk7CisJaWYgKElTX0VSUihzaHApKSB7CisJCWVyciA9IFBUUl9FUlIoc2hwKTsKIAkJZ290byBvdXQ7Ci0KLQllcnIgPSBzaG1fY2hlY2tpZChucywgc2hwLHNobWlkKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJZXJyID0gLUVBQ0NFUzsKIAlpZiAoaXBjcGVybXMoJnNocC0+c2htX3Blcm0sIGFjY19tb2RlKSkKQEAgLTkyNSw3ICs5OTMsNyBAQAogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gc2ZkOwogCWZpbGUtPmZfbWFwcGluZyA9IHNocC0+c2htX2ZpbGUtPmZfbWFwcGluZzsKLQlzZmQtPmlkID0gc2hwLT5pZDsKKwlzZmQtPmlkID0gc2hwLT5zaG1fcGVybS5pZDsKIAlzZmQtPm5zID0gZ2V0X2lwY19ucyhucyk7CiAJc2ZkLT5maWxlID0gc2hwLT5zaG1fZmlsZTsKIAlzZmQtPnZtX29wcyA9IE5VTEw7CkBAIC05NTUsMTYgKzEwMjMsMTYgQEAKIAlmcHV0KGZpbGUpOwogCiBvdXRfbmF0dGNoOgotCW11dGV4X2xvY2soJnNobV9pZHMobnMpLm11dGV4KTsKLQlzaHAgPSBzaG1fbG9jayhucywgc2htaWQpOwotCUJVR19PTighc2hwKTsKKwlkb3duX3dyaXRlKCZzaG1faWRzKG5zKS5yd19tdXRleCk7CisJc2hwID0gc2htX2xvY2tfZG93bihucywgc2htaWQpOworCUJVR19PTihJU19FUlIoc2hwKSk7CiAJc2hwLT5zaG1fbmF0dGNoLS07CiAJaWYoc2hwLT5zaG1fbmF0dGNoID09IDAgJiYKIAkgICBzaHAtPnNobV9wZXJtLm1vZGUgJiBTSE1fREVTVCkKIAkJc2htX2Rlc3Ryb3kobnMsIHNocCk7CiAJZWxzZQogCQlzaG1fdW5sb2NrKHNocCk7Ci0JbXV0ZXhfdW5sb2NrKCZzaG1faWRzKG5zKS5tdXRleCk7CisJdXBfd3JpdGUoJnNobV9pZHMobnMpLnJ3X211dGV4KTsKIAogb3V0OgogCXJldHVybiBlcnI7CkBAIC0xMDk0LDcgKzExNjIsNyBAQAogCQlmb3JtYXQgPSBCSUdfU1RSSU5HOwogCXJldHVybiBzZXFfcHJpbnRmKHMsIGZvcm1hdCwKIAkJCSAgc2hwLT5zaG1fcGVybS5rZXksCi0JCQkgIHNocC0+aWQsCisJCQkgIHNocC0+c2htX3Blcm0uaWQsCiAJCQkgIHNocC0+c2htX3Blcm0ubW9kZSwKIAkJCSAgc2hwLT5zaG1fc2Vnc3osCiAJCQkgIHNocC0+c2htX2NwcmlkLApkaWZmIC0tZ2l0IGEvaXBjL3V0aWwuYyBiL2lwYy91dGlsLmMKaW5kZXggNDRlNTEzNS4uMWFhMGViZiAxMDA2NDQKLS0tIGEvaXBjL3V0aWwuYworKysgYi9pcGMvdXRpbC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CiAKICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKQEAgLTEyOSwyMyArMTMwLDE2IEBACiAvKioKICAqCWlwY19pbml0X2lkcwkJLQlpbml0aWFsaXNlIElQQyBpZGVudGlmaWVycwogICoJQGlkczogSWRlbnRpZmllciBzZXQKLSAqCUBzaXplOiBOdW1iZXIgb2YgaWRlbnRpZmllcnMKICAqCi0gKglHaXZlbiBhIHNpemUgZm9yIHRoZSBpcGMgaWRlbnRpZmllciByYW5nZSAobGltaXRlZCBiZWxvdyBJUENNTkkpCi0gKglzZXQgdXAgdGhlIHNlcXVlbmNlIHJhbmdlIHRvIHVzZSB0aGVuIGFsbG9jYXRlIGFuZCBpbml0aWFsaXNlIHRoZQotICoJYXJyYXkgaXRzZWxmLiAKKyAqCVNldCB1cCB0aGUgc2VxdWVuY2UgcmFuZ2UgdG8gdXNlIGZvciB0aGUgaXBjIGlkZW50aWZpZXIgcmFuZ2UgKGxpbWl0ZWQKKyAqCWJlbG93IElQQ01OSSkgdGhlbiBpbml0aWFsaXNlIHRoZSBpZHMgaWRyLgogICovCiAgCi12b2lkIGlwY19pbml0X2lkcyhzdHJ1Y3QgaXBjX2lkcyogaWRzLCBpbnQgc2l6ZSkKK3ZvaWQgaXBjX2luaXRfaWRzKHN0cnVjdCBpcGNfaWRzICppZHMpCiB7Ci0JaW50IGk7CisJaW5pdF9yd3NlbSgmaWRzLT5yd19tdXRleCk7CiAKLQltdXRleF9pbml0KCZpZHMtPm11dGV4KTsKLQotCWlmKHNpemUgPiBJUENNTkkpCi0JCXNpemUgPSBJUENNTkk7CiAJaWRzLT5pbl91c2UgPSAwOwotCWlkcy0+bWF4X2lkID0gLTE7CiAJaWRzLT5zZXEgPSAwOwogCXsKIAkJaW50IHNlcV9saW1pdCA9IElOVF9NQVgvU0VRX01VTFRJUExJRVI7CkBAIC0xNTUsMTcgKzE0OSw3IEBACiAJCSAJaWRzLT5zZXFfbWF4ID0gc2VxX2xpbWl0OwogCX0KIAotCWlkcy0+ZW50cmllcyA9IGlwY19yY3VfYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKnNpemUgKwotCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBpcGNfaWRfYXJ5KSk7Ci0KLQlpZihpZHMtPmVudHJpZXMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImlwY19pbml0X2lkcygpIGZhaWxlZCwgaXBjIHNlcnZpY2UgZGlzYWJsZWQuXG4iKTsKLQkJc2l6ZSA9IDA7Ci0JCWlkcy0+ZW50cmllcyA9ICZpZHMtPm51bGxlbnRyeTsKLQl9Ci0JaWRzLT5lbnRyaWVzLT5zaXplID0gc2l6ZTsKLQlmb3IoaT0wO2k8c2l6ZTtpKyspCi0JCWlkcy0+ZW50cmllcy0+cFtpXSA9IE5VTEw7CisJaWRyX2luaXQoJmlkcy0+aXBjc19pZHIpOwogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTIwOCw5OSArMTkyLDk2IEBACiAgKglAaWRzOiBJZGVudGlmaWVyIHNldAogICoJQGtleTogVGhlIGtleSB0byBmaW5kCiAgKgkKLSAqCVJlcXVpcmVzIGlwY19pZHMubXV0ZXggbG9ja2VkLgotICoJUmV0dXJucyB0aGUgaWRlbnRpZmllciBpZiBmb3VuZCBvciAtMSBpZiBub3QuCisgKglSZXF1aXJlcyBpcGNfaWRzLnJ3X211dGV4IGxvY2tlZC4KKyAqCVJldHVybnMgdGhlIExPQ0tFRCBwb2ludGVyIHRvIHRoZSBpcGMgc3RydWN0dXJlIGlmIGZvdW5kIG9yIE5VTEwKKyAqCWlmIG5vdC4KKyAqCUlmIGtleSBpcyBmb3VuZCBpcGMgcG9pbnRzIHRvIHRoZSBvd25pbmcgaXBjIHN0cnVjdHVyZQogICovCiAgCi1pbnQgaXBjX2ZpbmRrZXkoc3RydWN0IGlwY19pZHMqIGlkcywga2V5X3Qga2V5KQorc3RhdGljIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfZmluZGtleShzdHJ1Y3QgaXBjX2lkcyAqaWRzLCBrZXlfdCBrZXkpCiB7Ci0JaW50IGlkOwotCXN0cnVjdCBrZXJuX2lwY19wZXJtKiBwOwotCWludCBtYXhfaWQgPSBpZHMtPm1heF9pZDsKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjOworCWludCBuZXh0X2lkOworCWludCB0b3RhbDsKIAotCS8qCi0JICogcmN1X2RlcmVmZXJlbmNlKCkgaXMgbm90IG5lZWRlZCBoZXJlCi0JICogc2luY2UgaXBjX2lkcy5tdXRleCBpcyBoZWxkCi0JICovCi0JZm9yIChpZCA9IDA7IGlkIDw9IG1heF9pZDsgaWQrKykgewotCQlwID0gaWRzLT5lbnRyaWVzLT5wW2lkXTsKLQkJaWYocD09TlVMTCkKKwlmb3IgKHRvdGFsID0gMCwgbmV4dF9pZCA9IDA7IHRvdGFsIDwgaWRzLT5pbl91c2U7IG5leHRfaWQrKykgeworCQlpcGMgPSBpZHJfZmluZCgmaWRzLT5pcGNzX2lkciwgbmV4dF9pZCk7CisKKwkJaWYgKGlwYyA9PSBOVUxMKQogCQkJY29udGludWU7Ci0JCWlmIChrZXkgPT0gcC0+a2V5KQotCQkJcmV0dXJuIGlkOworCisJCWlmIChpcGMtPmtleSAhPSBrZXkpIHsKKwkJCXRvdGFsKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlwY19sb2NrX2J5X3B0cihpcGMpOworCQlyZXR1cm4gaXBjOwogCX0KLQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gTlVMTDsKIH0KIAotLyoKLSAqIFJlcXVpcmVzIGlwY19pZHMubXV0ZXggbG9ja2VkCisvKioKKyAqCWlwY19nZXRfbWF4aWQgCS0JZ2V0IHRoZSBsYXN0IGFzc2lnbmVkIGlkCisgKglAaWRzOiBJUEMgaWRlbnRpZmllciBzZXQKKyAqCisgKglDYWxsZWQgd2l0aCBpcGNfaWRzLnJ3X211dGV4IGhlbGQuCiAgKi8KLXN0YXRpYyBpbnQgZ3Jvd19hcnkoc3RydWN0IGlwY19pZHMqIGlkcywgaW50IG5ld3NpemUpCisKK2ludCBpcGNfZ2V0X21heGlkKHN0cnVjdCBpcGNfaWRzICppZHMpCiB7Ci0Jc3RydWN0IGlwY19pZF9hcnkqIG5ldzsKLQlzdHJ1Y3QgaXBjX2lkX2FyeSogb2xkOwotCWludCBpOwotCWludCBzaXplID0gaWRzLT5lbnRyaWVzLT5zaXplOworCXN0cnVjdCBrZXJuX2lwY19wZXJtICppcGM7CisJaW50IG1heF9pZCA9IC0xOworCWludCB0b3RhbCwgaWQ7CiAKLQlpZihuZXdzaXplID4gSVBDTU5JKQotCQluZXdzaXplID0gSVBDTU5JOwotCWlmKG5ld3NpemUgPD0gc2l6ZSkKLQkJcmV0dXJuIG5ld3NpemU7CisJaWYgKGlkcy0+aW5fdXNlID09IDApCisJCXJldHVybiAtMTsKIAotCW5ldyA9IGlwY19yY3VfYWxsb2Moc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKm5ld3NpemUgKwotCQkJICAgIHNpemVvZihzdHJ1Y3QgaXBjX2lkX2FyeSkpOwotCWlmKG5ldyA9PSBOVUxMKQotCQlyZXR1cm4gc2l6ZTsKLQluZXctPnNpemUgPSBuZXdzaXplOwotCW1lbWNweShuZXctPnAsIGlkcy0+ZW50cmllcy0+cCwgc2l6ZW9mKHN0cnVjdCBrZXJuX2lwY19wZXJtICopKnNpemUpOwotCWZvcihpPXNpemU7aTxuZXdzaXplO2krKykgewotCQluZXctPnBbaV0gPSBOVUxMOworCWlmIChpZHMtPmluX3VzZSA9PSBJUENNTkkpCisJCXJldHVybiBJUENNTkkgLSAxOworCisJLyogTG9vayBmb3IgdGhlIGxhc3QgYXNzaWduZWQgaWQgKi8KKwl0b3RhbCA9IDA7CisJZm9yIChpZCA9IDA7IGlkIDwgSVBDTU5JICYmIHRvdGFsIDwgaWRzLT5pbl91c2U7IGlkKyspIHsKKwkJaXBjID0gaWRyX2ZpbmQoJmlkcy0+aXBjc19pZHIsIGlkKTsKKwkJaWYgKGlwYyAhPSBOVUxMKSB7CisJCQltYXhfaWQgPSBpZDsKKwkJCXRvdGFsKys7CisJCX0KIAl9Ci0Jb2xkID0gaWRzLT5lbnRyaWVzOwotCi0JLyoKLQkgKiBVc2UgcmN1X2Fzc2lnbl9wb2ludGVyKCkgdG8gbWFrZSBzdXJlIHRoZSBtZW1jcHllZCBjb250ZW50cwotCSAqIG9mIHRoZSBuZXcgYXJyYXkgYXJlIHZpc2libGUgYmVmb3JlIHRoZSBuZXcgYXJyYXkgYmVjb21lcyB2aXNpYmxlLgotCSAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihpZHMtPmVudHJpZXMsIG5ldyk7Ci0KLQlfX2lwY19maW5pX2lkcyhpZHMsIG9sZCk7Ci0JcmV0dXJuIG5ld3NpemU7CisJcmV0dXJuIG1heF9pZDsKIH0KIAogLyoqCiAgKglpcGNfYWRkaWQgCS0JYWRkIGFuIElQQyBpZGVudGlmaWVyCiAgKglAaWRzOiBJUEMgaWRlbnRpZmllciBzZXQKICAqCUBuZXc6IG5ldyBJUEMgcGVybWlzc2lvbiBzZXQKLSAqCUBzaXplOiBuZXcgc2l6ZSBsaW1pdCBmb3IgdGhlIGlkIGFycmF5CisgKglAc2l6ZTogbGltaXQgZm9yIHRoZSBudW1iZXIgb2YgdXNlZCBpZHMKICAqCi0gKglBZGQgYW4gZW50cnkgJ25ldycgdG8gdGhlIElQQyBhcnJheXMuIFRoZSBwZXJtaXNzaW9ucyBvYmplY3QgaXMKKyAqCUFkZCBhbiBlbnRyeSAnbmV3JyB0byB0aGUgSVBDIGlkcyBpZHIuIFRoZSBwZXJtaXNzaW9ucyBvYmplY3QgaXMKICAqCWluaXRpYWxpc2VkIGFuZCB0aGUgZmlyc3QgZnJlZSBlbnRyeSBpcyBzZXQgdXAgYW5kIHRoZSBpZCBhc3NpZ25lZAotICoJaXMgcmV0dXJuZWQuIFRoZSBsaXN0IGlzIHJldHVybmVkIGluIGEgbG9ja2VkIHN0YXRlIG9uIHN1Y2Nlc3MuCi0gKglPbiBmYWlsdXJlIHRoZSBsaXN0IGlzIG5vdCBsb2NrZWQgYW5kIC0xIGlzIHJldHVybmVkLgorICoJaXMgcmV0dXJuZWQuIFRoZSAnbmV3JyBlbnRyeSBpcyByZXR1cm5lZCBpbiBhIGxvY2tlZCBzdGF0ZSBvbiBzdWNjZXNzLgorICoJT24gZmFpbHVyZSB0aGUgZW50cnkgaXMgbm90IGxvY2tlZCBhbmQgYSBuZWdhdGl2ZSBlcnItY29kZSBpcyByZXR1cm5lZC4KICAqCi0gKglDYWxsZWQgd2l0aCBpcGNfaWRzLm11dGV4IGhlbGQuCisgKglDYWxsZWQgd2l0aCBpcGNfaWRzLnJ3X211dGV4IGhlbGQgYXMgYSB3cml0ZXIuCiAgKi8KICAKIGludCBpcGNfYWRkaWQoc3RydWN0IGlwY19pZHMqIGlkcywgc3RydWN0IGtlcm5faXBjX3Blcm0qIG5ldywgaW50IHNpemUpCiB7Ci0JaW50IGlkOworCWludCBpZCwgZXJyOwogCi0Jc2l6ZSA9IGdyb3dfYXJ5KGlkcyxzaXplKTsKKwlpZiAoc2l6ZSA+IElQQ01OSSkKKwkJc2l6ZSA9IElQQ01OSTsKIAotCS8qCi0JICogcmN1X2RlcmVmZXJlbmNlKCkoKSBpcyBub3QgbmVlZGVkIGhlcmUgc2luY2UKLQkgKiBpcGNfaWRzLm11dGV4IGlzIGhlbGQKLQkgKi8KLQlmb3IgKGlkID0gMDsgaWQgPCBzaXplOyBpZCsrKSB7Ci0JCWlmKGlkcy0+ZW50cmllcy0+cFtpZF0gPT0gTlVMTCkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCXJldHVybiAtMTsKLWZvdW5kOgorCWlmIChpZHMtPmluX3VzZSA+PSBzaXplKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWVyciA9IGlkcl9nZXRfbmV3KCZpZHMtPmlwY3NfaWRyLCBuZXcsICZpZCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCWlkcy0+aW5fdXNlKys7Ci0JaWYgKGlkID4gaWRzLT5tYXhfaWQpCi0JCWlkcy0+bWF4X2lkID0gaWQ7CiAKIAluZXctPmN1aWQgPSBuZXctPnVpZCA9IGN1cnJlbnQtPmV1aWQ7CiAJbmV3LT5naWQgPSBuZXctPmNnaWQgPSBjdXJyZW50LT5lZ2lkOwpAQCAtMzEzLDQ4ICsyOTQsMTUzIEBACiAJbmV3LT5kZWxldGVkID0gMDsKIAlyY3VfcmVhZF9sb2NrKCk7CiAJc3Bpbl9sb2NrKCZuZXctPmxvY2spOwotCWlkcy0+ZW50cmllcy0+cFtpZF0gPSBuZXc7CiAJcmV0dXJuIGlkOwogfQogCiAvKioKLSAqCWlwY19ybWlkCS0JcmVtb3ZlIGFuIElQQyBpZGVudGlmaWVyCi0gKglAaWRzOiBpZGVudGlmaWVyIHNldAotICoJQGlkOiBJZGVudGlmaWVyIHRvIHJlbW92ZQorICoJaXBjZ2V0X25ldwktCWNyZWF0ZSBhIG5ldyBpcGMgb2JqZWN0CisgKglAbnM6IG5hbWVzcGFjZQorICoJQGlkczogSVBDIGlkZW50aWZlciBzZXQKKyAqCUBvcHM6IHRoZSBhY3R1YWwgY3JlYXRpb24gcm91dGluZSB0byBjYWxsCisgKglAcGFyYW1zOiBpdHMgcGFyYW1ldGVycwogICoKLSAqCVRoZSBpZGVudGlmaWVyIG11c3QgYmUgdmFsaWQsIGFuZCBpbiB1c2UuIFRoZSBrZXJuZWwgd2lsbCBwYW5pYyBpZgotICoJZmVkIGFuIGludmFsaWQgaWRlbnRpZmllci4gVGhlIGVudHJ5IGlzIHJlbW92ZWQgYW5kIGludGVybmFsCi0gKgl2YXJpYWJsZXMgcmVjb21wdXRlZC4gVGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIGlkZW50aWZpZXIKLSAqCWlzIHJldHVybmVkLgotICoJaXBjX2lkcy5tdXRleCBhbmQgdGhlIHNwaW5sb2NrIGZvciB0aGlzIElEIGlzIGhvbGQgYmVmb3JlIHRoaXMgZnVuY3Rpb24KLSAqCWlzIGNhbGxlZCwgYW5kIHJlbWFpbiBsb2NrZWQgb24gdGhlIGV4aXQuCisgKglUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGJ5IHN5c19tc2dnZXQsIHN5c19zZW1nZXQoKSBhbmQgc3lzX3NobWdldCgpCisgKgl3aGVuIHRoZSBrZXkgaXMgSVBDX1BSSVZBVEUuCisgKi8KK2ludCBpcGNnZXRfbmV3KHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19pZHMgKmlkcywKKwkJc3RydWN0IGlwY19vcHMgKm9wcywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcykKK3sKKwlpbnQgZXJyOworcmV0cnk6CisJZXJyID0gaWRyX3ByZV9nZXQoJmlkcy0+aXBjc19pZHIsIEdGUF9LRVJORUwpOworCisJaWYgKCFlcnIpCisJCXJldHVybiAtRU5PTUVNOworCisJZG93bl93cml0ZSgmaWRzLT5yd19tdXRleCk7CisJZXJyID0gb3BzLT5nZXRuZXcobnMsIHBhcmFtcyk7CisJdXBfd3JpdGUoJmlkcy0+cndfbXV0ZXgpOworCisJaWYgKGVyciA9PSAtRUFHQUlOKQorCQlnb3RvIHJldHJ5OworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKglpcGNfY2hlY2tfcGVybXMJLQljaGVjayBzZWN1cml0eSBhbmQgcGVybWlzc2lvbnMgZm9yIGFuIElQQworICoJQGlwY3A6IGlwYyBwZXJtaXNzaW9uIHNldAorICoJQG9wczogdGhlIGFjdHVhbCBzZWN1cml0eSByb3V0aW5lIHRvIGNhbGwKKyAqCUBwYXJhbXM6IGl0cyBwYXJhbWV0ZXJzCisgKgorICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBieSBzeXNfbXNnZ2V0KCksIHN5c19zZW1nZXQoKSBhbmQgc3lzX3NobWdldCgpCisgKiAgICAgIHdoZW4gdGhlIGtleSBpcyBub3QgSVBDX1BSSVZBVEUgYW5kIHRoYXQga2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZQorICogICAgICBpZHMgSURSLgorICoKKyAqCU9uIHN1Y2Nlc3MsIHRoZSBJUEMgaWQgaXMgcmV0dXJuZWQuCisgKgorICoJSXQgaXMgY2FsbGVkIHdpdGggaXBjX2lkcy5yd19tdXRleCBhbmQgaXBjcC0+bG9jayBoZWxkLgorICovCitzdGF0aWMgaW50IGlwY19jaGVja19wZXJtcyhzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgc3RydWN0IGlwY19vcHMgKm9wcywKKwkJCXN0cnVjdCBpcGNfcGFyYW1zICpwYXJhbXMpCit7CisJaW50IGVycjsKKworCWlmIChpcGNwZXJtcyhpcGNwLCBwYXJhbXMtPmZsZykpCisJCWVyciA9IC1FQUNDRVM7CisJZWxzZSB7CisJCWVyciA9IG9wcy0+YXNzb2NpYXRlKGlwY3AsIHBhcmFtcy0+ZmxnKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBpcGNwLT5pZDsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqCWlwY2dldF9wdWJsaWMJLQlnZXQgYW4gaXBjIG9iamVjdCBvciBjcmVhdGUgYSBuZXcgb25lCisgKglAbnM6IG5hbWVzcGFjZQorICoJQGlkczogSVBDIGlkZW50aWZlciBzZXQKKyAqCUBvcHM6IHRoZSBhY3R1YWwgY3JlYXRpb24gcm91dGluZSB0byBjYWxsCisgKglAcGFyYW1zOiBpdHMgcGFyYW1ldGVycworICoKKyAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgYnkgc3lzX21zZ2dldCwgc3lzX3NlbWdldCgpIGFuZCBzeXNfc2htZ2V0KCkKKyAqCXdoZW4gdGhlIGtleSBpcyBub3QgSVBDX1BSSVZBVEUuCisgKglJdCBhZGRzIGEgbmV3IGVudHJ5IGlmIHRoZSBrZXkgaXMgbm90IGZvdW5kIGFuZCBkb2VzIHNvbWUgcGVybWlzc2lvbgorICogICAgICAvIHNlY3VyaXR5IGNoZWNraW5ncyBpZiB0aGUga2V5IGlzIGZvdW5kLgorICoKKyAqCU9uIHN1Y2Nlc3MsIHRoZSBpcGMgaWQgaXMgcmV0dXJuZWQuCisgKi8KK2ludCBpcGNnZXRfcHVibGljKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19pZHMgKmlkcywKKwkJc3RydWN0IGlwY19vcHMgKm9wcywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcDsKKwlpbnQgZmxnID0gcGFyYW1zLT5mbGc7CisJaW50IGVycjsKK3JldHJ5OgorCWVyciA9IGlkcl9wcmVfZ2V0KCZpZHMtPmlwY3NfaWRyLCBHRlBfS0VSTkVMKTsKKworCS8qCisJICogVGFrZSB0aGUgbG9jayBhcyBhIHdyaXRlciBzaW5jZSB3ZSBhcmUgcG90ZW50aWFsbHkgZ29pbmcgdG8gYWRkCisJICogYSBuZXcgZW50cnkgKyByZWFkIGxvY2tzIGFyZSBub3QgInVwZ3JhZGFibGUiCisJICovCisJZG93bl93cml0ZSgmaWRzLT5yd19tdXRleCk7CisJaXBjcCA9IGlwY19maW5ka2V5KGlkcywgcGFyYW1zLT5rZXkpOworCWlmIChpcGNwID09IE5VTEwpIHsKKwkJLyoga2V5IG5vdCB1c2VkICovCisJCWlmICghKGZsZyAmIElQQ19DUkVBVCkpCisJCQllcnIgPSAtRU5PRU5UOworCQllbHNlIGlmICghZXJyKQorCQkJZXJyID0gLUVOT01FTTsKKwkJZWxzZQorCQkJZXJyID0gb3BzLT5nZXRuZXcobnMsIHBhcmFtcyk7CisJfSBlbHNlIHsKKwkJLyogaXBjIG9iamVjdCBoYXMgYmVlbiBsb2NrZWQgYnkgaXBjX2ZpbmRrZXkoKSAqLworCisJCWlmIChmbGcgJiBJUENfQ1JFQVQgJiYgZmxnICYgSVBDX0VYQ0wpCisJCQllcnIgPSAtRUVYSVNUOworCQllbHNlIHsKKwkJCWVyciA9IDA7CisJCQlpZiAob3BzLT5tb3JlX2NoZWNrcykKKwkJCQllcnIgPSBvcHMtPm1vcmVfY2hlY2tzKGlwY3AsIHBhcmFtcyk7CisJCQlpZiAoIWVycikKKwkJCQkvKgorCQkJCSAqIGlwY19jaGVja19wZXJtcyByZXR1cm5zIHRoZSBJUEMgaWQgb24KKwkJCQkgKiBzdWNjZXNzCisJCQkJICovCisJCQkJZXJyID0gaXBjX2NoZWNrX3Blcm1zKGlwY3AsIG9wcywgcGFyYW1zKTsKKwkJfQorCQlpcGNfdW5sb2NrKGlwY3ApOworCX0KKwl1cF93cml0ZSgmaWRzLT5yd19tdXRleCk7CisKKwlpZiAoZXJyID09IC1FQUdBSU4pCisJCWdvdG8gcmV0cnk7CisKKwlyZXR1cm4gZXJyOworfQorCisKKy8qKgorICoJaXBjX3JtaWQJLQlyZW1vdmUgYW4gSVBDIGlkZW50aWZpZXIKKyAqCUBpZHM6IElQQyBpZGVudGlmaWVyIHNldAorICoJQGlwY3A6IGlwYyBwZXJtIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpZGVudGlmaWVyIHRvIHJlbW92ZQorICoKKyAqCWlwY19pZHMucndfbXV0ZXggKGFzIGEgd3JpdGVyKSBhbmQgdGhlIHNwaW5sb2NrIGZvciB0aGlzIElEIGFyZSBoZWxkCisgKgliZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCByZW1haW4gbG9ja2VkIG9uIHRoZSBleGl0LgogICovCiAgCi1zdHJ1Y3Qga2Vybl9pcGNfcGVybSogaXBjX3JtaWQoc3RydWN0IGlwY19pZHMqIGlkcywgaW50IGlkKQordm9pZCBpcGNfcm1pZChzdHJ1Y3QgaXBjX2lkcyAqaWRzLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCkKIHsKLQlzdHJ1Y3Qga2Vybl9pcGNfcGVybSogcDsKLQlpbnQgbGlkID0gaWQgJSBTRVFfTVVMVElQTElFUjsKLQlCVUdfT04obGlkID49IGlkcy0+ZW50cmllcy0+c2l6ZSk7CisJaW50IGxpZCA9IGlwY2lkX3RvX2lkeChpcGNwLT5pZCk7CiAKLQkvKiAKLQkgKiBkbyBub3QgbmVlZCBhIHJjdV9kZXJlZmVyZW5jZSgpKCkgaGVyZSB0byBmb3JjZSBvcmRlcmluZwotCSAqIG9uIEFscGhhLCBzaW5jZSB0aGUgaXBjX2lkcy5tdXRleCBpcyBoZWxkLgotCSAqLwkKLQlwID0gaWRzLT5lbnRyaWVzLT5wW2xpZF07Ci0JaWRzLT5lbnRyaWVzLT5wW2xpZF0gPSBOVUxMOwotCUJVR19PTihwPT1OVUxMKTsKKwlpZHJfcmVtb3ZlKCZpZHMtPmlwY3NfaWRyLCBsaWQpOworCiAJaWRzLT5pbl91c2UtLTsKIAotCWlmIChsaWQgPT0gaWRzLT5tYXhfaWQpIHsKLQkJZG8gewotCQkJbGlkLS07Ci0JCQlpZihsaWQgPT0gLTEpCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKGlkcy0+ZW50cmllcy0+cFtsaWRdID09IE5VTEwpOwotCQlpZHMtPm1heF9pZCA9IGxpZDsKLQl9Ci0JcC0+ZGVsZXRlZCA9IDE7Ci0JcmV0dXJuIHA7CisJaXBjcC0+ZGVsZXRlZCA9IDE7CisKKwlyZXR1cm47CiB9CiAKIC8qKgpAQCAtNDkxLDEwICs1NzcsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgaXBjX3NjaGVkdWxlX2ZyZWUoc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewotCXN0cnVjdCBpcGNfcmN1X2dyYWNlICpncmFjZSA9Ci0JCWNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgaXBjX3JjdV9ncmFjZSwgcmN1KTsKLQlzdHJ1Y3QgaXBjX3JjdV9zY2hlZCAqc2NoZWQgPQotCQkJY29udGFpbmVyX29mKCYoZ3JhY2UtPmRhdGFbMF0pLCBzdHJ1Y3QgaXBjX3JjdV9zY2hlZCwgZGF0YVswXSk7CisJc3RydWN0IGlwY19yY3VfZ3JhY2UgKmdyYWNlOworCXN0cnVjdCBpcGNfcmN1X3NjaGVkICpzY2hlZDsKKworCWdyYWNlID0gY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBpcGNfcmN1X2dyYWNlLCByY3UpOworCXNjaGVkID0gY29udGFpbmVyX29mKCYoZ3JhY2UtPmRhdGFbMF0pLCBzdHJ1Y3QgaXBjX3JjdV9zY2hlZCwKKwkJCQlkYXRhWzBdKTsKIAogCUlOSVRfV09SSygmc2NoZWQtPndvcmssIGlwY19kb192ZnJlZSk7CiAJc2NoZWR1bGVfd29yaygmc2NoZWQtPndvcmspOwpAQCAtNTgzLDcgKzY3MSw3IEBACiB9CiAKIC8qKgotICoJaXBjNjRfcGVybV90b19pcGNfcGVybQktCWNvbnZlcnQgb2xkIGlwYyBwZXJtaXNzaW9ucyB0byBuZXcKKyAqCWlwYzY0X3Blcm1fdG9faXBjX3Blcm0JLQljb252ZXJ0IG5ldyBpcGMgcGVybWlzc2lvbnMgdG8gb2xkCiAgKglAaW46IG5ldyBzdHlsZSBJUEMgcGVybWlzc2lvbnMKICAqCUBvdXQ6IG9sZCBzdHlsZSBJUEMgcGVybWlzc2lvbnMKICAqCkBAIC02MDIsNDQgKzY5MCwzNyBAQAogCW91dC0+c2VxCT0gaW4tPnNlcTsKIH0KIAotLyoKLSAqIFNvIGZhciBvbmx5IHNobV9nZXRfc3RhdCgpIGNhbGxzIGlwY19nZXQoKSB2aWEgc2htX2dldCgpLCBzbyBpcGNfZ2V0KCkKLSAqIGlzIGNhbGxlZCB3aXRoIHNobV9pZHMubXV0ZXggbG9ja2VkLiAgU2luY2UgZ3Jvd19hcnkoKSBpcyBhbHNvIGNhbGxlZCB3aXRoCi0gKiBzaG1faWRzLm11dGV4IGRvd24oZm9yIFNoYXJlZCBNZW1vcnkpLCB0aGVyZSBpcyBubyBuZWVkIHRvIGFkZCByZWFkCi0gKiBiYXJyaWVycyBoZXJlIHRvIGd1cmFudGVlIHRoZSB3cml0ZXMgaW4gZ3Jvd19hcnkoKSBhcmUgc2VlbiBpbiBvcmRlciAKLSAqIGhlcmUgKGZvciBBbHBoYSkuCisvKioKKyAqIGlwY19sb2NrIC0gTG9jayBhbiBpcGMgc3RydWN0dXJlIHdpdGhvdXQgcndfbXV0ZXggaGVsZAorICogQGlkczogSVBDIGlkZW50aWZpZXIgc2V0CisgKiBAaWQ6IGlwYyBpZCB0byBsb29rIGZvcgogICoKLSAqIEhvd2V2ZXIgaXBjX2dldCgpIGl0c2VsZiBkb2VzIG5vdCBuZWNlc3NhcnkgcmVxdWlyZSBpcGNfaWRzLm11dGV4IGRvd24uIFNvCi0gKiBpZiBpbiB0aGUgZnV0dXJlIGlwY19nZXQoKSBpcyB1c2VkIGJ5IG90aGVyIHBsYWNlcyB3aXRob3V0IGlwY19pZHMubXV0ZXgKLSAqIGRvd24sIHRoZW4gaXBjX2dldCgpIG5lZWRzIHJlYWQgbWVtZXJ5IGJhcnJpZXJzIGFzIGlwY19sb2NrKCkgZG9lcy4KKyAqIExvb2sgZm9yIGFuIGlkIGluIHRoZSBpcGMgaWRzIGlkciBhbmQgbG9jayB0aGUgYXNzb2NpYXRlZCBpcGMgb2JqZWN0LgorICoKKyAqIFRoZSBpcGMgb2JqZWN0IGlzIGxvY2tlZCBvbiBleGl0LgorICoKKyAqIFRoaXMgaXMgdGhlIHJvdXRpbmUgdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHJ3X211dGV4IGlzIG5vdCBhbHJlYWR5CisgKiBoZWxkLCBpLmUuIGlkciB0cmVlIG5vdCBwcm90ZWN0ZWQ6IGl0IHByb3RlY3RzIHRoZSBpZHIgdHJlZSBpbiByZWFkIG1vZGUKKyAqIGR1cmluZyB0aGUgaWRyX2ZpbmQoKS4KICAqLwotc3RydWN0IGtlcm5faXBjX3Blcm0qIGlwY19nZXQoc3RydWN0IGlwY19pZHMqIGlkcywgaW50IGlkKQotewotCXN0cnVjdCBrZXJuX2lwY19wZXJtKiBvdXQ7Ci0JaW50IGxpZCA9IGlkICUgU0VRX01VTFRJUExJRVI7Ci0JaWYobGlkID49IGlkcy0+ZW50cmllcy0+c2l6ZSkKLQkJcmV0dXJuIE5VTEw7Ci0Jb3V0ID0gaWRzLT5lbnRyaWVzLT5wW2xpZF07Ci0JcmV0dXJuIG91dDsKLX0KIAotc3RydWN0IGtlcm5faXBjX3Blcm0qIGlwY19sb2NrKHN0cnVjdCBpcGNfaWRzKiBpZHMsIGludCBpZCkKK3N0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfbG9jayhzdHJ1Y3QgaXBjX2lkcyAqaWRzLCBpbnQgaWQpCiB7Ci0Jc3RydWN0IGtlcm5faXBjX3Blcm0qIG91dDsKLQlpbnQgbGlkID0gaWQgJSBTRVFfTVVMVElQTElFUjsKLQlzdHJ1Y3QgaXBjX2lkX2FyeSogZW50cmllczsKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqb3V0OworCWludCBsaWQgPSBpcGNpZF90b19pZHgoaWQpOworCisJZG93bl9yZWFkKCZpZHMtPnJ3X211dGV4KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQllbnRyaWVzID0gcmN1X2RlcmVmZXJlbmNlKGlkcy0+ZW50cmllcyk7Ci0JaWYobGlkID49IGVudHJpZXMtPnNpemUpIHsKKwlvdXQgPSBpZHJfZmluZCgmaWRzLT5pcGNzX2lkciwgbGlkKTsKKwlpZiAob3V0ID09IE5VTEwpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybiBOVUxMOworCQl1cF9yZWFkKCZpZHMtPnJ3X211dGV4KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQotCW91dCA9IGVudHJpZXMtPnBbbGlkXTsKLQlpZihvdXQgPT0gTlVMTCkgewotCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQorCisJdXBfcmVhZCgmaWRzLT5yd19tdXRleCk7CisKIAlzcGluX2xvY2soJm91dC0+bG9jayk7CiAJCiAJLyogaXBjX3JtaWQoKSBtYXkgaGF2ZSBhbHJlYWR5IGZyZWVkIHRoZSBJRCB3aGlsZSBpcGNfbG9jawpAQCAtNjQ4LDMzICs3MjksNDQgQEAKIAlpZiAob3V0LT5kZWxldGVkKSB7CiAJCXNwaW5fdW5sb2NrKCZvdXQtPmxvY2spOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcmV0dXJuIE5VTEw7CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwogCX0KKwogCXJldHVybiBvdXQ7CiB9CiAKLXZvaWQgaXBjX2xvY2tfYnlfcHRyKHN0cnVjdCBrZXJuX2lwY19wZXJtICpwZXJtKQorLyoqCisgKiBpcGNfbG9ja19kb3duIC0gTG9jayBhbiBpcGMgc3RydWN0dXJlIHdpdGggcndfc2VtIGhlbGQKKyAqIEBpZHM6IElQQyBpZGVudGlmaWVyIHNldAorICogQGlkOiBpcGMgaWQgdG8gbG9vayBmb3IKKyAqCisgKiBMb29rIGZvciBhbiBpZCBpbiB0aGUgaXBjIGlkcyBpZHIgYW5kIGxvY2sgdGhlIGFzc29jaWF0ZWQgaXBjIG9iamVjdC4KKyAqCisgKiBUaGUgaXBjIG9iamVjdCBpcyBsb2NrZWQgb24gZXhpdC4KKyAqCisgKiBUaGlzIGlzIHRoZSByb3V0aW5lIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSByd19tdXRleCBpcyBhbHJlYWR5CisgKiBoZWxkLCBpLmUuIGlkciB0cmVlIHByb3RlY3RlZC4KKyAqLworCitzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjX2xvY2tfZG93bihzdHJ1Y3QgaXBjX2lkcyAqaWRzLCBpbnQgaWQpCiB7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKm91dDsKKwlpbnQgbGlkID0gaXBjaWRfdG9faWR4KGlkKTsKKwogCXJjdV9yZWFkX2xvY2soKTsKLQlzcGluX2xvY2soJnBlcm0tPmxvY2spOwotfQorCW91dCA9IGlkcl9maW5kKCZpZHMtPmlwY3NfaWRyLCBsaWQpOworCWlmIChvdXQgPT0gTlVMTCkgeworCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQogCi12b2lkIGlwY191bmxvY2soc3RydWN0IGtlcm5faXBjX3Blcm0qIHBlcm0pCi17Ci0Jc3Bpbl91bmxvY2soJnBlcm0tPmxvY2spOwotCXJjdV9yZWFkX3VubG9jaygpOwotfQorCXNwaW5fbG9jaygmb3V0LT5sb2NrKTsKIAotaW50IGlwY19idWlsZGlkKHN0cnVjdCBpcGNfaWRzKiBpZHMsIGludCBpZCwgaW50IHNlcSkKLXsKLQlyZXR1cm4gU0VRX01VTFRJUExJRVIqc2VxICsgaWQ7Ci19Ci0KLWludCBpcGNfY2hlY2tpZChzdHJ1Y3QgaXBjX2lkcyogaWRzLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSogaXBjcCwgaW50IHVpZCkKLXsKLQlpZih1aWQvU0VRX01VTFRJUExJRVIgIT0gaXBjcC0+c2VxKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gMDsKKwkvKgorCSAqIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHN0cnVjdHVyZSBpcyBzdGlsbCB2YWxpZCBzaW5jZSB0aGUKKwkgKiByd19tdXRleCBpcyBoZWxkLgorCSAqLworCXJldHVybiBvdXQ7CiB9CiAKICNpZmRlZiBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgpAQCAtNzA3LDI3ICs3OTksMzAgQEAKIAlzdHJ1Y3QgaXBjX3Byb2NfaWZhY2UgKmlmYWNlOwogfTsKIAotc3RhdGljIHZvaWQgKnN5c3ZpcGNfcHJvY19uZXh0KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQsIGxvZmZfdCAqcG9zKQorLyoKKyAqIFRoaXMgcm91dGluZSBsb2NrcyB0aGUgaXBjIHN0cnVjdHVyZSBmb3VuZCBhdCBsZWFzdCBhdCBwb3NpdGlvbiBwb3MuCisgKi8KK3N0cnVjdCBrZXJuX2lwY19wZXJtICpzeXN2aXBjX2ZpbmRfaXBjKHN0cnVjdCBpcGNfaWRzICppZHMsIGxvZmZfdCBwb3MsCisJCQkJCWxvZmZfdCAqbmV3X3BvcykKIHsKLQlzdHJ1Y3QgaXBjX3Byb2NfaXRlciAqaXRlciA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IGlwY19wcm9jX2lmYWNlICppZmFjZSA9IGl0ZXItPmlmYWNlOwotCXN0cnVjdCBrZXJuX2lwY19wZXJtICppcGMgPSBpdDsKLQlsb2ZmX3QgcDsKLQlzdHJ1Y3QgaXBjX2lkcyAqaWRzOworCXN0cnVjdCBrZXJuX2lwY19wZXJtICppcGM7CisJaW50IHRvdGFsLCBpZDsKIAotCWlkcyA9IGl0ZXItPm5zLT5pZHNbaWZhY2UtPmlkc107CisJdG90YWwgPSAwOworCWZvciAoaWQgPSAwOyBpZCA8IHBvcyAmJiB0b3RhbCA8IGlkcy0+aW5fdXNlOyBpZCsrKSB7CisJCWlwYyA9IGlkcl9maW5kKCZpZHMtPmlwY3NfaWRyLCBpZCk7CisJCWlmIChpcGMgIT0gTlVMTCkKKwkJCXRvdGFsKys7CisJfQogCi0JLyogSWYgd2UgaGFkIGFuIGlwYyBpZCBsb2NrZWQgYmVmb3JlLCB1bmxvY2sgaXQgKi8KLQlpZiAoaXBjICYmIGlwYyAhPSBTRVFfU1RBUlRfVE9LRU4pCi0JCWlwY191bmxvY2soaXBjKTsKKwlpZiAodG90YWwgPj0gaWRzLT5pbl91c2UpCisJCXJldHVybiBOVUxMOwogCi0JLyoKLQkgKiBwID0gKnBvcyAtIDEgKGJlY2F1c2UgaWQgMCBzdGFydHMgYXQgcG9zaXRpb24gMSkKLQkgKiAgICAgICAgICArIDEgKGJlY2F1c2Ugd2UgaW5jcmVtZW50IHRoZSBwb3NpdGlvbiBieSBvbmUpCi0JICovCi0JZm9yIChwID0gKnBvczsgcCA8PSBpZHMtPm1heF9pZDsgcCsrKSB7Ci0JCWlmICgoaXBjID0gaXBjX2xvY2soaWRzLCBwKSkgIT0gTlVMTCkgewotCQkJKnBvcyA9IHAgKyAxOworCWZvciAoIDsgcG9zIDwgSVBDTU5JOyBwb3MrKykgeworCQlpcGMgPSBpZHJfZmluZCgmaWRzLT5pcGNzX2lkciwgcG9zKTsKKwkJaWYgKGlwYyAhPSBOVUxMKSB7CisJCQkqbmV3X3BvcyA9IHBvcyArIDE7CisJCQlpcGNfbG9ja19ieV9wdHIoaXBjKTsKIAkJCXJldHVybiBpcGM7CiAJCX0KIAl9CkBAIC03MzYsMTYgKzgzMSwyNyBAQAogCXJldHVybiBOVUxMOwogfQogCitzdGF0aWMgdm9pZCAqc3lzdmlwY19wcm9jX25leHQoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICppdCwgbG9mZl90ICpwb3MpCit7CisJc3RydWN0IGlwY19wcm9jX2l0ZXIgKml0ZXIgPSBzLT5wcml2YXRlOworCXN0cnVjdCBpcGNfcHJvY19pZmFjZSAqaWZhY2UgPSBpdGVyLT5pZmFjZTsKKwlzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjID0gaXQ7CisKKwkvKiBJZiB3ZSBoYWQgYW4gaXBjIGlkIGxvY2tlZCBiZWZvcmUsIHVubG9jayBpdCAqLworCWlmIChpcGMgJiYgaXBjICE9IFNFUV9TVEFSVF9UT0tFTikKKwkJaXBjX3VubG9jayhpcGMpOworCisJcmV0dXJuIHN5c3ZpcGNfZmluZF9pcGMoaXRlci0+bnMtPmlkc1tpZmFjZS0+aWRzXSwgKnBvcywgcG9zKTsKK30KKwogLyoKLSAqIEZpbGUgcG9zaXRpb25zOiBwb3MgMCAtPiBoZWFkZXIsIHBvcyBuIC0+IGlwYyBpZCArIDEuCi0gKiBTZXFGaWxlIGl0ZXJhdG9yOiBpdGVyYXRvciB2YWx1ZSBsb2NrZWQgc2hwIG9yIFNFUV9UT0tFTl9TVEFSVC4KKyAqIEZpbGUgcG9zaXRpb25zOiBwb3MgMCAtPiBoZWFkZXIsIHBvcyBuIC0+IGlwYyBpZCA9IG4gLSAxLgorICogU2VxRmlsZSBpdGVyYXRvcjogaXRlcmF0b3IgdmFsdWUgbG9ja2VkIGlwYyBwb2ludGVyIG9yIFNFUV9UT0tFTl9TVEFSVC4KICAqLwogc3RhdGljIHZvaWQgKnN5c3ZpcGNfcHJvY19zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBpcGNfcHJvY19pdGVyICppdGVyID0gcy0+cHJpdmF0ZTsKIAlzdHJ1Y3QgaXBjX3Byb2NfaWZhY2UgKmlmYWNlID0gaXRlci0+aWZhY2U7Ci0Jc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwYzsKLQlsb2ZmX3QgcDsKIAlzdHJ1Y3QgaXBjX2lkcyAqaWRzOwogCiAJaWRzID0gaXRlci0+bnMtPmlkc1tpZmFjZS0+aWRzXTsKQEAgLTc1NCw3ICs4NjAsNyBAQAogCSAqIFRha2UgdGhlIGxvY2sgLSB0aGlzIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKIAkgKiBjYWxsIHRvIHN0b3AoKS4KIAkgKi8KLQltdXRleF9sb2NrKCZpZHMtPm11dGV4KTsKKwlkb3duX3JlYWQoJmlkcy0+cndfbXV0ZXgpOwogCiAJLyogcG9zIDwgMCBpcyBpbnZhbGlkICovCiAJaWYgKCpwb3MgPCAwKQpAQCAtNzY1LDEzICs4NzEsNyBAQAogCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwogCiAJLyogRmluZCB0aGUgKHBvcy0xKXRoIGlwYyAqLwotCWZvciAocCA9ICpwb3MgLSAxOyBwIDw9IGlkcy0+bWF4X2lkOyBwKyspIHsKLQkJaWYgKChpcGMgPSBpcGNfbG9jayhpZHMsIHApKSAhPSBOVUxMKSB7Ci0JCQkqcG9zID0gcCArIDE7Ci0JCQlyZXR1cm4gaXBjOwotCQl9Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBzeXN2aXBjX2ZpbmRfaXBjKGlkcywgKnBvcyAtIDEsIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHN5c3ZpcGNfcHJvY19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQpCkBAIC03ODEsMTMgKzg4MSwxMyBAQAogCXN0cnVjdCBpcGNfcHJvY19pZmFjZSAqaWZhY2UgPSBpdGVyLT5pZmFjZTsKIAlzdHJ1Y3QgaXBjX2lkcyAqaWRzOwogCi0JLyogSWYgd2UgaGFkIGEgbG9ja2VkIHNlZ21lbnQsIHJlbGVhc2UgaXQgKi8KKwkvKiBJZiB3ZSBoYWQgYSBsb2NrZWQgc3RydWN0dXJlLCByZWxlYXNlIGl0ICovCiAJaWYgKGlwYyAmJiBpcGMgIT0gU0VRX1NUQVJUX1RPS0VOKQogCQlpcGNfdW5sb2NrKGlwYyk7CiAKIAlpZHMgPSBpdGVyLT5ucy0+aWRzW2lmYWNlLT5pZHNdOwogCS8qIFJlbGVhc2UgdGhlIGxvY2sgd2UgdG9vayBpbiBzdGFydCgpICovCi0JbXV0ZXhfdW5sb2NrKCZpZHMtPm11dGV4KTsKKwl1cF9yZWFkKCZpZHMtPnJ3X211dGV4KTsKIH0KIAogc3RhdGljIGludCBzeXN2aXBjX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKml0KQpkaWZmIC0tZ2l0IGEvaXBjL3V0aWwuaCBiL2lwYy91dGlsLmgKaW5kZXggMzMzZTg5MS4uOWZmZWE0MCAxMDA2NDQKLS0tIGEvaXBjL3V0aWwuaAorKysgYi9pcGMvdXRpbC5oCkBAIC0xMCw2ICsxMCw5IEBACiAjaWZuZGVmIF9JUENfVVRJTF9ICiAjZGVmaW5lIF9JUENfVVRJTF9ICiAKKyNpbmNsdWRlIDxsaW51eC9pZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwogI2RlZmluZSBVU0hSVF9NQVggMHhmZmZmCiAjZGVmaW5lIFNFUV9NVUxUSVBMSUVSCShJUENNTkkpCiAKQEAgLTI1LDI0ICsyOCw0NiBAQAogdm9pZCBtc2dfZXhpdF9ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpOwogdm9pZCBzaG1fZXhpdF9ucyhzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMpOwogCi1zdHJ1Y3QgaXBjX2lkX2FyeSB7Ci0JaW50IHNpemU7Ci0Jc3RydWN0IGtlcm5faXBjX3Blcm0gKnBbMF07Ci19OwotCiBzdHJ1Y3QgaXBjX2lkcyB7CiAJaW50IGluX3VzZTsKLQlpbnQgbWF4X2lkOwogCXVuc2lnbmVkIHNob3J0IHNlcTsKIAl1bnNpZ25lZCBzaG9ydCBzZXFfbWF4OwotCXN0cnVjdCBtdXRleCBtdXRleDsKLQlzdHJ1Y3QgaXBjX2lkX2FyeSBudWxsZW50cnk7Ci0Jc3RydWN0IGlwY19pZF9hcnkqIGVudHJpZXM7CisJc3RydWN0IHJ3X3NlbWFwaG9yZSByd19tdXRleDsKKwlzdHJ1Y3QgaWRyIGlwY3NfaWRyOworfTsKKworLyoKKyAqIFN0cnVjdHVyZSB0aGF0IGhvbGRzIHRoZSBwYXJhbWV0ZXJzIG5lZWRlZCBieSB0aGUgaXBjIG9wZXJhdGlvbnMKKyAqIChzZWUgYWZ0ZXIpCisgKi8KK3N0cnVjdCBpcGNfcGFyYW1zIHsKKwlrZXlfdCBrZXk7CisJaW50IGZsZzsKKwl1bmlvbiB7CisJCXNpemVfdCBzaXplOwkvKiBmb3Igc2hhcmVkIG1lbW9yaWVzICovCisJCWludCBuc2VtczsJLyogZm9yIHNlbWFwaG9yZXMgKi8KKwl9IHU7CQkJLyogaG9sZHMgdGhlIGdldG5ldygpIHNwZWNpZmljIHBhcmFtICovCit9OworCisvKgorICogU3RydWN0dXJlIHRoYXQgaG9sZHMgc29tZSBpcGMgb3BlcmF0aW9ucy4gVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byB1bmlmeQorICogdGhlIGNhbGxzIHRvIHN5c19tc2dnZXQoKSwgc3lzX3NlbWdldCgpLCBzeXNfc2htZ2V0KCkKKyAqICAgICAgLiByb3V0aW5lIHRvIGNhbGwgdG8gY3JlYXRlIGEgbmV3IGlwYyBvYmplY3QuIENhbiBiZSBvbmUgb2YgbmV3cXVlLAorICogICAgICAgIG5ld2FyeSwgbmV3c2VnCisgKiAgICAgIC4gcm91dGluZSB0byBjYWxsIHRvIGNoZWNrIHBlcm1pc3Npb25zIGZvciBhIG5ldyBpcGMgb2JqZWN0LgorICogICAgICAgIENhbiBiZSBvbmUgb2Ygc2VjdXJpdHlfbXNnX2Fzc29jaWF0ZSwgc2VjdXJpdHlfc2VtX2Fzc29jaWF0ZSwKKyAqICAgICAgICBzZWN1cml0eV9zaG1fYXNzb2NpYXRlCisgKiAgICAgIC4gcm91dGluZSB0byBjYWxsIGZvciBhbiBleHRyYSBjaGVjayBpZiBuZWVkZWQKKyAqLworc3RydWN0IGlwY19vcHMgeworCWludCAoKmdldG5ldykgKHN0cnVjdCBpcGNfbmFtZXNwYWNlICosIHN0cnVjdCBpcGNfcGFyYW1zICopOworCWludCAoKmFzc29jaWF0ZSkgKHN0cnVjdCBrZXJuX2lwY19wZXJtICosIGludCk7CisJaW50ICgqbW9yZV9jaGVja3MpIChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqLCBzdHJ1Y3QgaXBjX3BhcmFtcyAqKTsKIH07CiAKIHN0cnVjdCBzZXFfZmlsZTsKIAotdm9pZCBpcGNfaW5pdF9pZHMoc3RydWN0IGlwY19pZHMgKmlkcywgaW50IHNpemUpOwordm9pZCBpcGNfaW5pdF9pZHMoc3RydWN0IGlwY19pZHMgKik7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHZvaWQgX19pbml0IGlwY19pbml0X3Byb2NfaW50ZXJmYWNlKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKmhlYWRlciwKIAkJaW50IGlkcywgaW50ICgqc2hvdykoc3RydWN0IHNlcV9maWxlICosIHZvaWQgKikpOwpAQCAtNTQsMTQgKzc5LDE5IEBACiAjZGVmaW5lIElQQ19NU0dfSURTCTEKICNkZWZpbmUgSVBDX1NITV9JRFMJMgogCi0vKiBtdXN0IGJlIGNhbGxlZCB3aXRoIGlkcy0+bXV0ZXggYWNxdWlyZWQuKi8KLWludCBpcGNfZmluZGtleShzdHJ1Y3QgaXBjX2lkcyogaWRzLCBrZXlfdCBrZXkpOwotaW50IGlwY19hZGRpZChzdHJ1Y3QgaXBjX2lkcyogaWRzLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSogbmV3LCBpbnQgc2l6ZSk7CisjZGVmaW5lIGlwY2lkX3RvX2lkeChpZCkgKChpZCkgJSBTRVFfTVVMVElQTElFUikKKworLyogbXVzdCBiZSBjYWxsZWQgd2l0aCBpZHMtPnJ3X211dGV4IGFjcXVpcmVkIGZvciB3cml0aW5nICovCitpbnQgaXBjX2FkZGlkKHN0cnVjdCBpcGNfaWRzICosIHN0cnVjdCBrZXJuX2lwY19wZXJtICosIGludCk7CisKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggaWRzLT5yd19tdXRleCBhY3F1aXJlZCBmb3IgcmVhZGluZyAqLworaW50IGlwY19nZXRfbWF4aWQoc3RydWN0IGlwY19pZHMgKik7CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggYm90aCBsb2NrcyBhY3F1aXJlZC4gKi8KLXN0cnVjdCBrZXJuX2lwY19wZXJtKiBpcGNfcm1pZChzdHJ1Y3QgaXBjX2lkcyogaWRzLCBpbnQgaWQpOwordm9pZCBpcGNfcm1pZChzdHJ1Y3QgaXBjX2lkcyAqLCBzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqKTsKIAotaW50IGlwY3Blcm1zIChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgc2hvcnQgZmxnKTsKKy8qIG11c3QgYmUgY2FsbGVkIHdpdGggaXBjcCBsb2NrZWQgKi8KK2ludCBpcGNwZXJtcyhzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgc2hvcnQgZmxnKTsKIAogLyogZm9yIHJhcmUsIHBvdGVudGlhbGx5IGh1Z2UgYWxsb2NhdGlvbnMuCiAgKiBib3RoIGZ1bmN0aW9uIGNhbiBzbGVlcApAQCAtNzksMjQgKzEwOSwxMiBAQAogdm9pZCBpcGNfcmN1X2dldHJlZih2b2lkICpwdHIpOwogdm9pZCBpcGNfcmN1X3B1dHJlZih2b2lkICpwdHIpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pcGNfZmluaV9pZHMoc3RydWN0IGlwY19pZHMgKmlkcywKLQkJc3RydWN0IGlwY19pZF9hcnkgKmVudHJpZXMpCi17Ci0JaWYgKGVudHJpZXMgIT0gJmlkcy0+bnVsbGVudHJ5KQotCQlpcGNfcmN1X3B1dHJlZihlbnRyaWVzKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlwY19maW5pX2lkcyhzdHJ1Y3QgaXBjX2lkcyAqaWRzKQotewotCV9faXBjX2ZpbmlfaWRzKGlkcywgaWRzLT5lbnRyaWVzKTsKLX0KLQotc3RydWN0IGtlcm5faXBjX3Blcm0qIGlwY19nZXQoc3RydWN0IGlwY19pZHMqIGlkcywgaW50IGlkKTsKLXN0cnVjdCBrZXJuX2lwY19wZXJtKiBpcGNfbG9jayhzdHJ1Y3QgaXBjX2lkcyogaWRzLCBpbnQgaWQpOwotdm9pZCBpcGNfbG9ja19ieV9wdHIoc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3ApOwotdm9pZCBpcGNfdW5sb2NrKHN0cnVjdCBrZXJuX2lwY19wZXJtKiBwZXJtKTsKLWludCBpcGNfYnVpbGRpZChzdHJ1Y3QgaXBjX2lkcyogaWRzLCBpbnQgaWQsIGludCBzZXEpOwotaW50IGlwY19jaGVja2lkKHN0cnVjdCBpcGNfaWRzKiBpZHMsIHN0cnVjdCBrZXJuX2lwY19wZXJtKiBpcGNwLCBpbnQgdWlkKTsKKy8qCisgKiBpcGNfbG9ja19kb3duOiBjYWxsZWQgd2l0aCByd19tdXRleCBoZWxkCisgKiBpcGNfbG9jazogY2FsbGVkIHdpdGhvdXQgdGhhdCBsb2NrIGhlbGQKKyAqLworc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY19sb2NrX2Rvd24oc3RydWN0IGlwY19pZHMgKiwgaW50KTsKK3N0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfbG9jayhzdHJ1Y3QgaXBjX2lkcyAqLCBpbnQpOwogCiB2b2lkIGtlcm5lbF90b19pcGM2NF9wZXJtKHN0cnVjdCBrZXJuX2lwY19wZXJtICppbiwgc3RydWN0IGlwYzY0X3Blcm0gKm91dCk7CiB2b2lkIGlwYzY0X3Blcm1fdG9faXBjX3Blcm0oc3RydWN0IGlwYzY0X3Blcm0gKmluLCBzdHJ1Y3QgaXBjX3Blcm0gKm91dCk7CkBAIC0xMTEsNSArMTI5LDg5IEBACiBleHRlcm4gdm9pZCBmcmVlX21zZyhzdHJ1Y3QgbXNnX21zZyAqbXNnKTsKIGV4dGVybiBzdHJ1Y3QgbXNnX21zZyAqbG9hZF9tc2coY29uc3Qgdm9pZCBfX3VzZXIgKnNyYywgaW50IGxlbik7CiBleHRlcm4gaW50IHN0b3JlX21zZyh2b2lkIF9fdXNlciAqZGVzdCwgc3RydWN0IG1zZ19tc2cgKm1zZywgaW50IGxlbik7CitleHRlcm4gaW50IGlwY2dldF9uZXcoc3RydWN0IGlwY19uYW1lc3BhY2UgKiwgc3RydWN0IGlwY19pZHMgKiwKKwkJCXN0cnVjdCBpcGNfb3BzICosIHN0cnVjdCBpcGNfcGFyYW1zICopOworZXh0ZXJuIGludCBpcGNnZXRfcHVibGljKHN0cnVjdCBpcGNfbmFtZXNwYWNlICosIHN0cnVjdCBpcGNfaWRzICosCisJCQlzdHJ1Y3QgaXBjX29wcyAqLCBzdHJ1Y3QgaXBjX3BhcmFtcyAqKTsKKworc3RhdGljIGlubGluZSBpbnQgaXBjX2J1aWxkaWQoaW50IGlkLCBpbnQgc2VxKQoreworCXJldHVybiBTRVFfTVVMVElQTElFUiAqIHNlcSArIGlkOworfQorCisvKgorICogTXVzdCBiZSBjYWxsZWQgd2l0aCBpcGNwIGxvY2tlZAorICovCitzdGF0aWMgaW5saW5lIGludCBpcGNfY2hlY2tpZChzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqaXBjcCwgaW50IHVpZCkKK3sKKwlpZiAodWlkIC8gU0VRX01VTFRJUExJRVIgIT0gaXBjcC0+c2VxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwY19sb2NrX2J5X3B0cihzdHJ1Y3Qga2Vybl9pcGNfcGVybSAqcGVybSkKK3sKKwlyY3VfcmVhZF9sb2NrKCk7CisJc3Bpbl9sb2NrKCZwZXJtLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwY191bmxvY2soc3RydWN0IGtlcm5faXBjX3Blcm0gKnBlcm0pCit7CisJc3Bpbl91bmxvY2soJnBlcm0tPmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfbG9ja19jaGVja19kb3duKHN0cnVjdCBpcGNfaWRzICppZHMsCisJCQkJCQlpbnQgaWQpCit7CisJc3RydWN0IGtlcm5faXBjX3Blcm0gKm91dDsKKworCW91dCA9IGlwY19sb2NrX2Rvd24oaWRzLCBpZCk7CisJaWYgKElTX0VSUihvdXQpKQorCQlyZXR1cm4gb3V0OworCisJaWYgKGlwY19jaGVja2lkKG91dCwgaWQpKSB7CisJCWlwY191bmxvY2sob3V0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJRFJNKTsKKwl9CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNfbG9ja19jaGVjayhzdHJ1Y3QgaXBjX2lkcyAqaWRzLAorCQkJCQkJaW50IGlkKQoreworCXN0cnVjdCBrZXJuX2lwY19wZXJtICpvdXQ7CisKKwlvdXQgPSBpcGNfbG9jayhpZHMsIGlkKTsKKwlpZiAoSVNfRVJSKG91dCkpCisJCXJldHVybiBvdXQ7CisKKwlpZiAoaXBjX2NoZWNraWQob3V0LCBpZCkpIHsKKwkJaXBjX3VubG9jayhvdXQpOworCQlyZXR1cm4gRVJSX1BUUigtRUlEUk0pOworCX0KKworCXJldHVybiBvdXQ7Cit9CisKKy8qKgorICogaXBjZ2V0IC0gQ29tbW9uIHN5c18qZ2V0KCkgY29kZQorICogQG5zIDogbmFtc2VwYWNlCisgKiBAaWRzIDogSVBDIGlkZW50aWZpZXIgc2V0CisgKiBAb3BzIDogb3BlcmF0aW9ucyB0byBiZSBjYWxsZWQgb24gaXBjIG9iamVjdCBjcmVhdGlvbiwgcGVybWlzc2lvbiBjaGVja3MKKyAqICAgICAgICBhbmQgZnVydGhlciBjaGVja3MKKyAqIEBwYXJhbXMgOiB0aGUgcGFyYW1ldGVycyBuZWVkZWQgYnkgdGhlIHByZXZpb3VzIG9wZXJhdGlvbnMuCisgKgorICogQ29tbW9uIHJvdXRpbmUgY2FsbGVkIGJ5IHN5c19tc2dnZXQoKSwgc3lzX3NlbWdldCgpIGFuZCBzeXNfc2htZ2V0KCkuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlwY2dldChzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMsIHN0cnVjdCBpcGNfaWRzICppZHMsCisJCQlzdHJ1Y3QgaXBjX29wcyAqb3BzLCBzdHJ1Y3QgaXBjX3BhcmFtcyAqcGFyYW1zKQoreworCWlmIChwYXJhbXMtPmtleSA9PSBJUENfUFJJVkFURSkKKwkJcmV0dXJuIGlwY2dldF9uZXcobnMsIGlkcywgb3BzLCBwYXJhbXMpOworCWVsc2UKKwkJcmV0dXJuIGlwY2dldF9wdWJsaWMobnMsIGlkcywgb3BzLCBwYXJhbXMpOworfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbiBiL2tlcm5lbC9LY29uZmlnLmluc3RydW1lbnRhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWYyYzc2Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL0tjb25maWcuaW5zdHJ1bWVudGF0aW9uCkBAIC0wLDAgKzEsNDkgQEAKK21lbnVjb25maWcgSU5TVFJVTUVOVEFUSU9OCisJYm9vbCAiSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQiCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgU2F5IFkgaGVyZSB0byBnZXQgdG8gc2VlIG9wdGlvbnMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudCwKKwkgIHN5c3RlbS13aWRlIGRlYnVnZ2luZywgYW5kIHRlc3RpbmcuIFRoaXMgb3B0aW9uIGFsb25lIGRvZXMgbm90IGFkZCBhbnkKKwkgIGtlcm5lbCBjb2RlLgorCisJICBJZiB5b3Ugc2F5IE4sIGFsbCBvcHRpb25zIGluIHRoaXMgc3VibWVudSB3aWxsIGJlIHNraXBwZWQgYW5kCisJICBkaXNhYmxlZC4gSWYgeW91J3JlIHRyeWluZyB0byBkZWJ1ZyB0aGUga2VybmVsIGl0c2VsZiwgZ28gc2VlIHRoZQorCSAgS2VybmVsIEhhY2tpbmcgbWVudS4KKworaWYgSU5TVFJVTUVOVEFUSU9OCisKK2NvbmZpZyBQUk9GSUxJTkcKKwlib29sICJQcm9maWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgZXh0ZW5kZWQgcHJvZmlsaW5nIHN1cHBvcnQgbWVjaGFuaXNtcyB1c2VkCisJICBieSBwcm9maWxlcnMgc3VjaCBhcyBPUHJvZmlsZS4KKworY29uZmlnIE9QUk9GSUxFCisJdHJpc3RhdGUgIk9Qcm9maWxlIHN5c3RlbSBwcm9maWxpbmcgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBQUk9GSUxJTkcKKwlkZXBlbmRzIG9uIEFMUEhBIHx8IEFSTSB8fCBCTEFDS0ZJTiB8fCBYODZfMzIgfHwgSUE2NCB8fCBNMzJSIHx8IE1JUFMgfHwgUEFSSVNDIHx8IFBQQyB8fCBTMzkwIHx8IFNVUEVSSCB8fCBTUEFSQyB8fCBYODZfNjQKKwloZWxwCisJICBPUHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlCisJICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVsZXMsIGxpYnJhcmllcywKKwkgIGFuZCBhcHBsaWNhdGlvbnMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKK2NvbmZpZyBLUFJPQkVTCisJYm9vbCAiS3Byb2JlcyIKKwlkZXBlbmRzIG9uIEtBTExTWU1TICYmIE1PRFVMRVMKKwlkZXBlbmRzIG9uIFg4Nl8zMiB8fCBJQTY0IHx8IFBQQyB8fCBTMzkwIHx8IFNQQVJDNjQgfHwgWDg2XzY0IHx8IEFWUjMyCisJaGVscAorCSAgS3Byb2JlcyBhbGxvd3MgeW91IHRvIHRyYXAgYXQgYWxtb3N0IGFueSBrZXJuZWwgYWRkcmVzcyBhbmQKKwkgIGV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbi4gIHJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCisJICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bAorCSAgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcsIG5vbi1pbnRydXNpdmUgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLgorCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCisKK2NvbmZpZyBNQVJLRVJTCisJYm9vbCAiQWN0aXZhdGUgbWFya2VycyIKKwloZWxwCisJICBQbGFjZSBhbiBlbXB0eSBmdW5jdGlvbiBjYWxsIGF0IGVhY2ggbWFya2VyIHNpdGUuIENhbiBiZQorCSAgZHluYW1pY2FsbHkgY2hhbmdlZCBmb3IgYSBwcm9iZSBmdW5jdGlvbi4KKworZW5kaWYgIyBJTlNUUlVNRU5UQVRJT04KZGlmZiAtLWdpdCBhL2tlcm5lbC9NYWtlZmlsZSBiL2tlcm5lbC9NYWtlZmlsZQppbmRleCAyYTk5OTgzLi43OWYwMTdlIDEwMDY0NAotLS0gYS9rZXJuZWwvTWFrZWZpbGUKKysrIGIva2VybmVsL01ha2VmaWxlCkBAIC04LDkgKzgsMTAgQEAKIAkgICAgc2lnbmFsLm8gc3lzLm8ga21vZC5vIHdvcmtxdWV1ZS5vIHBpZC5vIFwKIAkgICAgcmN1cGRhdGUubyBleHRhYmxlLm8gcGFyYW1zLm8gcG9zaXgtdGltZXJzLm8gXAogCSAgICBrdGhyZWFkLm8gd2FpdC5vIGtmaWZvLm8gc3lzX25pLm8gcG9zaXgtY3B1LXRpbWVycy5vIG11dGV4Lm8gXAotCSAgICBocnRpbWVyLm8gcndzZW0ubyBsYXRlbmN5Lm8gbnNwcm94eS5vIHNyY3UubyBkaWVfbm90aWZpZXIubyBcCi0JICAgIHV0c25hbWUubworCSAgICBocnRpbWVyLm8gcndzZW0ubyBsYXRlbmN5Lm8gbnNwcm94eS5vIHNyY3UubyBcCisJICAgIHV0c25hbWUubyBub3RpZmllci5vCiAKK29iai0kKENPTkZJR19TWVNDVEwpICs9IHN5c2N0bF9jaGVjay5vCiBvYmotJChDT05GSUdfU1RBQ0tUUkFDRSkgKz0gc3RhY2t0cmFjZS5vCiBvYmoteSArPSB0aW1lLwogb2JqLSQoQ09ORklHX0RFQlVHX01VVEVYRVMpICs9IG11dGV4LWRlYnVnLm8KQEAgLTM2LDcgKzM3LDExIEBACiBvYmotJChDT05GSUdfQlNEX1BST0NFU1NfQUNDVCkgKz0gYWNjdC5vCiBvYmotJChDT05GSUdfS0VYRUMpICs9IGtleGVjLm8KIG9iai0kKENPTkZJR19DT01QQVQpICs9IGNvbXBhdC5vCitvYmotJChDT05GSUdfQ0dST1VQUykgKz0gY2dyb3VwLm8KK29iai0kKENPTkZJR19DR1JPVVBfREVCVUcpICs9IGNncm91cF9kZWJ1Zy5vCiBvYmotJChDT05GSUdfQ1BVU0VUUykgKz0gY3B1c2V0Lm8KK29iai0kKENPTkZJR19DR1JPVVBfQ1BVQUNDVCkgKz0gY3B1X2FjY3Qubworb2JqLSQoQ09ORklHX0NHUk9VUF9OUykgKz0gbnNfY2dyb3VwLm8KIG9iai0kKENPTkZJR19JS0NPTkZJRykgKz0gY29uZmlncy5vCiBvYmotJChDT05GSUdfU1RPUF9NQUNISU5FKSArPSBzdG9wX21hY2hpbmUubwogb2JqLSQoQ09ORklHX0FVRElUKSArPSBhdWRpdC5vIGF1ZGl0ZmlsdGVyLm8KQEAgLTUxLDYgKzU2LDcgQEAKIG9iai0kKENPTkZJR19TWVNDVEwpICs9IHV0c25hbWVfc3lzY3RsLm8KIG9iai0kKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpICs9IGRlbGF5YWNjdC5vCiBvYmotJChDT05GSUdfVEFTS1NUQVRTKSArPSB0YXNrc3RhdHMubyB0c2FjY3Qubworb2JqLSQoQ09ORklHX01BUktFUlMpICs9IG1hcmtlci5vCiAKIGlmbmVxICgkKENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVIpLHkpCiAjIEFjY29yZGluZyB0byBBbGFuIE1vZHJhIDxhbGFuQGxpbnV4Y2FyZS5jb20uYXU+LCB0aGUgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgaXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9hY2N0LmMgYi9rZXJuZWwvYWNjdC5jCmluZGV4IDI0ZjBmOGIuLmZjZTUzZDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hY2N0LmMKKysrIGIva2VybmVsL2FjY3QuYwpAQCAtMzI5LDE2ICszMjksMTYgQEAKIAl9CiAKIAkvKgotICAgICAgICAgKiBJZiB3ZSBuZWVkIHRvIHJvdW5kIHVwLCBkbyBpdCAoYW5kIGhhbmRsZSBvdmVyZmxvdyBjb3JyZWN0bHkpLgotICAgICAgICAgKi8KKwkgKiBJZiB3ZSBuZWVkIHRvIHJvdW5kIHVwLCBkbyBpdCAoYW5kIGhhbmRsZSBvdmVyZmxvdyBjb3JyZWN0bHkpLgorCSAqLwogCWlmIChybmQgJiYgKCsrdmFsdWUgPiBNQVhGUkFDVCkpIHsKIAkJdmFsdWUgPj49IEVYUFNJWkU7CiAJCWV4cCsrOwogCX0KIAogCS8qCi0gICAgICAgICAqIENsZWFuIGl0IHVwIGFuZCBwb2xpc2ggaXQgb2ZmLgotICAgICAgICAgKi8KKwkgKiBDbGVhbiBpdCB1cCBhbmQgcG9saXNoIGl0IG9mZi4KKwkgKi8KIAlleHAgPDw9IE1BTlRTSVpFOwkJLyogU2hpZnQgdGhlIGV4cG9uZW50IGludG8gcGxhY2UgKi8KIAlleHAgKz0gdmFsdWU7CQkJLyogYW5kIGFkZCBvbiB0aGUgbWFudGlzc2EuICovCiAJcmV0dXJuIGV4cDsKQEAgLTM2MSwzMCArMzYxLDMwIEBACiAKIHN0YXRpYyBjb21wMl90IGVuY29kZV9jb21wMl90KHU2NCB2YWx1ZSkKIHsKLSAgICAgICAgaW50IGV4cCwgcm5kOworCWludCBleHAsIHJuZDsKIAotICAgICAgICBleHAgPSAodmFsdWUgPiAoTUFYRlJBQ1QyPj4xKSk7Ci0gICAgICAgIHJuZCA9IDA7Ci0gICAgICAgIHdoaWxlICh2YWx1ZSA+IE1BWEZSQUNUMikgewotICAgICAgICAgICAgICAgIHJuZCA9IHZhbHVlICYgMTsKLSAgICAgICAgICAgICAgICB2YWx1ZSA+Pj0gMTsKLSAgICAgICAgICAgICAgICBleHArKzsKLSAgICAgICAgfQorCWV4cCA9ICh2YWx1ZSA+IChNQVhGUkFDVDI+PjEpKTsKKwlybmQgPSAwOworCXdoaWxlICh2YWx1ZSA+IE1BWEZSQUNUMikgeworCQlybmQgPSB2YWx1ZSAmIDE7CisJCXZhbHVlID4+PSAxOworCQlleHArKzsKKwl9CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgd2UgbmVlZCB0byByb3VuZCB1cCwgZG8gaXQgKGFuZCBoYW5kbGUgb3ZlcmZsb3cgY29ycmVjdGx5KS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChybmQgJiYgKCsrdmFsdWUgPiBNQVhGUkFDVDIpKSB7Ci0gICAgICAgICAgICAgICAgdmFsdWUgPj49IDE7Ci0gICAgICAgICAgICAgICAgZXhwKys7Ci0gICAgICAgIH0KKwkvKgorCSAqIElmIHdlIG5lZWQgdG8gcm91bmQgdXAsIGRvIGl0IChhbmQgaGFuZGxlIG92ZXJmbG93IGNvcnJlY3RseSkuCisJICovCisJaWYgKHJuZCAmJiAoKyt2YWx1ZSA+IE1BWEZSQUNUMikpIHsKKwkJdmFsdWUgPj49IDE7CisJCWV4cCsrOworCX0KIAotICAgICAgICBpZiAoZXhwID4gTUFYRVhQMikgewotICAgICAgICAgICAgICAgIC8qIE92ZXJmbG93LiBSZXR1cm4gbGFyZ2VzdCByZXByZXNlbnRhYmxlIG51bWJlciBpbnN0ZWFkLiAqLwotICAgICAgICAgICAgICAgIHJldHVybiAoMXVsIDw8IChNQU5UU0laRTIrRVhQU0laRTItMSkpIC0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlICYgKE1BWEZSQUNUMj4+MSkpIHwgKGV4cCA8PCAoTUFOVFNJWkUyLTEpKTsKLSAgICAgICAgfQorCWlmIChleHAgPiBNQVhFWFAyKSB7CisJCS8qIE92ZXJmbG93LiBSZXR1cm4gbGFyZ2VzdCByZXByZXNlbnRhYmxlIG51bWJlciBpbnN0ZWFkLiAqLworCQlyZXR1cm4gKDF1bCA8PCAoTUFOVFNJWkUyK0VYUFNJWkUyLTEpKSAtIDE7CisJfSBlbHNlIHsKKwkJcmV0dXJuICh2YWx1ZSAmIChNQVhGUkFDVDI+PjEpKSB8IChleHAgPDwgKE1BTlRTSVpFMi0xKSk7CisJfQogfQogI2VuZGlmCiAKQEAgLTUwMSwxNCArNTAxLDE0IEBACiAJYWMuYWNfc3dhcHMgPSBlbmNvZGVfY29tcF90KDApOwogCiAJLyoKLSAgICAgICAgICogS2VybmVsIHNlZ21lbnQgb3ZlcnJpZGUgdG8gZGF0YXNlZ21lbnQgYW5kIHdyaXRlIGl0Ci0gICAgICAgICAqIHRvIHRoZSBhY2NvdW50aW5nIGZpbGUuCi0gICAgICAgICAqLworCSAqIEtlcm5lbCBzZWdtZW50IG92ZXJyaWRlIHRvIGRhdGFzZWdtZW50IGFuZCB3cml0ZSBpdAorCSAqIHRvIHRoZSBhY2NvdW50aW5nIGZpbGUuCisJICovCiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAkvKgotIAkgKiBBY2NvdW50aW5nIHJlY29yZHMgYXJlIG5vdCBzdWJqZWN0IHRvIHJlc291cmNlIGxpbWl0cy4KLSAJICovCisJICogQWNjb3VudGluZyByZWNvcmRzIGFyZSBub3Qgc3ViamVjdCB0byByZXNvdXJjZSBsaW1pdHMuCisJICovCiAJZmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfRlNJWkVdLnJsaW1fY3VyOwogCWN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfRlNJWkVdLnJsaW1fY3VyID0gUkxJTV9JTkZJTklUWTsKIAlmaWxlLT5mX29wLT53cml0ZShmaWxlLCAoY2hhciAqKSZhYywKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdC5jIGIva2VybmVsL2F1ZGl0LmMKaW5kZXggMjkyNDI1MS4uNjk3N2VhNSAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0LmMKKysrIGIva2VybmVsL2F1ZGl0LmMKQEAgLTY2NCwxMSArNjY0LDExIEBACiAJCQkJaWYgKHNpZCkgewogCQkJCQlpZiAoc2VsaW51eF9zaWRfdG9fc3RyaW5nKAogCQkJCQkJCXNpZCwgJmN0eCwgJmxlbikpIHsKLQkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsIAorCQkJCQkJYXVkaXRfbG9nX2Zvcm1hdChhYiwKIAkJCQkJCQkiIHNzaWQ9JXUiLCBzaWQpOwogCQkJCQkJLyogTWF5YmUgY2FsbCBhdWRpdF9wYW5pYz8gKi8KIAkJCQkJfSBlbHNlCi0JCQkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAKKwkJCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsCiAJCQkJCQkJIiBzdWJqPSVzIiwgY3R4KTsKIAkJCQkJa2ZyZWUoY3R4KTsKIAkJCQl9CkBAIC03NjksNyArNzY5LDcgQEAKIAkJc2lnX2RhdGEtPnBpZCA9IGF1ZGl0X3NpZ19waWQ7CiAJCW1lbWNweShzaWdfZGF0YS0+Y3R4LCBjdHgsIGxlbik7CiAJCWtmcmVlKGN0eCk7Ci0JCWF1ZGl0X3NlbmRfcmVwbHkoTkVUTElOS19DQihza2IpLnBpZCwgc2VxLCBBVURJVF9TSUdOQUxfSU5GTywgCisJCWF1ZGl0X3NlbmRfcmVwbHkoTkVUTElOS19DQihza2IpLnBpZCwgc2VxLCBBVURJVF9TSUdOQUxfSU5GTywKIAkJCQkwLCAwLCBzaWdfZGF0YSwgc2l6ZW9mKCpzaWdfZGF0YSkgKyBsZW4pOwogCQlrZnJlZShzaWdfZGF0YSk7CiAJCWJyZWFrOwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXVkaXRfZ2V0X3N0YW1wKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIAorc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2dldF9zdGFtcChzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LAogCQkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqdCwgdW5zaWduZWQgaW50ICpzZXJpYWwpCiB7CiAJaWYgKGN0eCkKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAJaWYgKGdmcF9tYXNrICYgX19HRlBfV0FJVCkKIAkJcmVzZXJ2ZSA9IDA7CiAJZWxzZQotCQlyZXNlcnZlID0gNTsgLyogQWxsb3cgYXRvbWljIGNhbGxlcnMgdG8gZ28gdXAgdG8gZml2ZSAKKwkJcmVzZXJ2ZSA9IDU7IC8qIEFsbG93IGF0b21pYyBjYWxsZXJzIHRvIGdvIHVwIHRvIGZpdmUKIAkJCQllbnRyaWVzIG92ZXIgdGhlIG5vcm1hbCBiYWNrbG9nIGxpbWl0ICovCiAKIAl3aGlsZSAoYXVkaXRfYmFja2xvZ19saW1pdApAQCAtMTMxOSw3ICsxMzE5LDcgQEAKIAlpZiAoSVNfRVJSKHApKSB7IC8qIFNob3VsZCBuZXZlciBoYXBwZW4gc2luY2Ugd2Ugc2VuZCBQQVRIX01BWCAqLwogCQkvKiBGSVhNRTogY2FuIHdlIHNhdmUgc29tZSBpbmZvcm1hdGlvbiBoZXJlPyAqLwogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiPHRvbyBsb25nPiIpOwotCX0gZWxzZSAKKwl9IGVsc2UKIAkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgcCk7CiAJa2ZyZWUocGF0aCk7CiB9CkBAIC0xMzY1LDcgKzEzNjUsNyBAQAogICogYXVkaXRfbG9nX3Zmb3JtYXQsIGFuZCBhdWRpdF9sb2dfZW5kLiAgSXQgbWF5IGJlIGNhbGxlZAogICogaW4gYW55IGNvbnRleHQuCiAgKi8KLXZvaWQgYXVkaXRfbG9nKHN0cnVjdCBhdWRpdF9jb250ZXh0ICpjdHgsIGdmcF90IGdmcF9tYXNrLCBpbnQgdHlwZSwgCit2b2lkIGF1ZGl0X2xvZyhzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LCBnZnBfdCBnZnBfbWFzaywgaW50IHR5cGUsCiAJICAgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXN0cnVjdCBhdWRpdF9idWZmZXIgKmFiOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwppbmRleCAzNTk2NDVjLi5kZjY2YTIxIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRmaWx0ZXIuYworKysgYi9rZXJuZWwvYXVkaXRmaWx0ZXIuYwpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAKIAkJICogYXVkaXRjdGwgdG8gcmVhZCBmcm9tIGl0Li4uIHdoaWNoIGlzbid0IGV2ZXIgZ29pbmcgdG8KIAkJICogaGFwcGVuIGlmIHdlJ3JlIGFjdHVhbGx5IHJ1bm5pbmcgaW4gdGhlIGNvbnRleHQgb2YgYXVkaXRjdGwKIAkJICogdHJ5aW5nIHRvIF9zZW5kXyB0aGUgc3R1ZmYgKi8KLQkJIAorCiAJCWRlc3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYXVkaXRfbmV0bGlua19saXN0KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghZGVzdCkKIAkJCXJldHVybiAtRU5PTUVNOwpAQCAtMTY3OCw3ICsxNjc4LDcgQEAKIHsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CiAJaW50IHJlc3VsdCA9IDA7Ci0JCisKIAlyY3VfcmVhZF9sb2NrKCk7CiAJaWYgKGxpc3RfZW1wdHkoJmF1ZGl0X2ZpbHRlcl9saXN0W0FVRElUX0ZJTFRFUl9UWVBFXSkpCiAJCWdvdG8gdW5sb2NrX2FuZF9yZXR1cm47CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCA5MzhlNjBhLi5lMTliNWEzIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTMyMCw3ICszMjAsNyBAQAogCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcih0c2stPnBlcnNvbmFsaXR5LCBmLT5vcCwgZi0+dmFsKTsKIAkJCWJyZWFrOwogCQljYXNlIEFVRElUX0FSQ0g6Ci0gCQkJaWYgKGN0eCkKKwkJCWlmIChjdHgpCiAJCQkJcmVzdWx0ID0gYXVkaXRfY29tcGFyYXRvcihjdHgtPmFyY2gsIGYtPm9wLCBmLT52YWwpOwogCQkJYnJlYWs7CiAKQEAgLTg5OCw3ICs4OTgsNyBAQAogCWlmIChjb250ZXh0LT5wZXJzb25hbGl0eSAhPSBQRVJfTElOVVgpCiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgcGVyPSVseCIsIGNvbnRleHQtPnBlcnNvbmFsaXR5KTsKIAlpZiAoY29udGV4dC0+cmV0dXJuX3ZhbGlkKQotCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHN1Y2Nlc3M9JXMgZXhpdD0lbGQiLCAKKwkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiBzdWNjZXNzPSVzIGV4aXQ9JWxkIiwKIAkJCQkgKGNvbnRleHQtPnJldHVybl92YWxpZD09QVVESVRTQ19TVUNDRVNTKT8ieWVzIjoibm8iLAogCQkJCSBjb250ZXh0LT5yZXR1cm5fY29kZSk7CiAKQEAgLTExMzUsOCArMTEzNSw4IEBACiAJCXJldHVybjsKIAogCS8qIENoZWNrIGZvciBzeXN0ZW0gY2FsbHMgdGhhdCBkbyBub3QgZ28gdGhyb3VnaCB0aGUgZXhpdAotCSAqIGZ1bmN0aW9uIChlLmcuLCBleGl0X2dyb3VwKSwgdGhlbiBmcmVlIGNvbnRleHQgYmxvY2suIAotCSAqIFdlIHVzZSBHRlBfQVRPTUlDIGhlcmUgYmVjYXVzZSB3ZSBtaWdodCBiZSBkb2luZyB0aGlzIAorCSAqIGZ1bmN0aW9uIChlLmcuLCBleGl0X2dyb3VwKSwgdGhlbiBmcmVlIGNvbnRleHQgYmxvY2suCisJICogV2UgdXNlIEdGUF9BVE9NSUMgaGVyZSBiZWNhdXNlIHdlIG1pZ2h0IGJlIGRvaW5nIHRoaXMKIAkgKiBpbiB0aGUgY29udGV4dCBvZiB0aGUgaWRsZSB0aHJlYWQgKi8KIAkvKiB0aGF0IGNhbiBoYXBwZW4gb25seSBpZiB3ZSBhcmUgY2FsbGVkIGZyb20gZG9fZXhpdCgpICovCiAJaWYgKGNvbnRleHQtPmluX3N5c2NhbGwgJiYgY29udGV4dC0+YXVkaXRhYmxlKQpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIAkJY29udGV4dC0+cHdkbW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5wd2RtbnQpOwogCQlyZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwogCX0KLQkJCisKIH0KIAogLyogYXVkaXRfcHV0bmFtZSAtIGludGVyY2VwdCBhIHB1dG5hbWUgcmVxdWVzdApkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggNGUzNTBhMy4uZWZiZDljZCAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0zLDIwICszLDE4IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk3ICBBbmRyZXcgTWFpbiA8emVmcmFtQGZ5c2gub3JnPgogICoKLSAqIEludGVncmF0ZWQgaW50byAyLjEuOTcrLCAgQW5kcmV3IEcuIE1vcmdhbiA8bW9yZ2FuQHRyYW5zbWV0YS5jb20+CisgKiBJbnRlZ3JhdGVkIGludG8gMi4xLjk3KywgIEFuZHJldyBHLiBNb3JnYW4gPG1vcmdhbkBrZXJuZWwub3JnPgogICogMzAgTWF5IDIwMDI6CUNsZWFudXAsIFJvYmVydCBNLiBMb3ZlIDxybWxAdGVjaDkubmV0PgotICovIAorICovCiAKICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXVuc2lnbmVkIHNlY3VyZWJpdHMgPSBTRUNVUkVCSVRTX0RFRkFVTFQ7IC8qIHN5c3RlbXdpZGUgc2VjdXJpdHkgc2V0dGluZ3MgKi8KLWtlcm5lbF9jYXBfdCBjYXBfYnNldCA9IENBUF9JTklUX0VGRl9TRVQ7Ci0KIC8qCiAgKiBUaGlzIGxvY2sgcHJvdGVjdHMgdGFzay0+Y2FwXyogZm9yIGFsbCB0YXNrcyBpbmNsdWRpbmcgY3VycmVudC4KICAqIExvY2tpbmcgcnVsZTogYWNxdWlyZSB0aGlzIHByaW9yIHRvIHRhc2tsaXN0X2xvY2suCkBAIC00MCw0OSArMzgsNDkgQEAKICAqLwogYXNtbGlua2FnZSBsb25nIHN5c19jYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9kYXRhX3QgZGF0YXB0cikKIHsKLSAgICAgaW50IHJldCA9IDA7Ci0gICAgIHBpZF90IHBpZDsKLSAgICAgX191MzIgdmVyc2lvbjsKLSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQ7Ci0gICAgIHN0cnVjdCBfX3VzZXJfY2FwX2RhdGFfc3RydWN0IGRhdGE7CisJaW50IHJldCA9IDA7CisJcGlkX3QgcGlkOworCV9fdTMyIHZlcnNpb247CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQ7CisJc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgZGF0YTsKIAotICAgICBpZiAoZ2V0X3VzZXIodmVyc2lvbiwgJmhlYWRlci0+dmVyc2lvbikpCi0JICAgICByZXR1cm4gLUVGQVVMVDsKKwlpZiAoZ2V0X3VzZXIodmVyc2lvbiwgJmhlYWRlci0+dmVyc2lvbikpCisJCXJldHVybiAtRUZBVUxUOwogCi0gICAgIGlmICh2ZXJzaW9uICE9IF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT04pIHsKLQkgICAgIGlmIChwdXRfdXNlcihfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OLCAmaGVhZGVyLT52ZXJzaW9uKSkKLQkJICAgICByZXR1cm4gLUVGQVVMVDsgCi0gICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgIH0KKwlpZiAodmVyc2lvbiAhPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OKSB7CisJCWlmIChwdXRfdXNlcihfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OLCAmaGVhZGVyLT52ZXJzaW9uKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgICAgaWYgKGdldF91c2VyKHBpZCwgJmhlYWRlci0+cGlkKSkKLQkgICAgIHJldHVybiAtRUZBVUxUOworCWlmIChnZXRfdXNlcihwaWQsICZoZWFkZXItPnBpZCkpCisJCXJldHVybiAtRUZBVUxUOwogCi0gICAgIGlmIChwaWQgPCAwKSAKLSAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAocGlkIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICAgc3Bpbl9sb2NrKCZ0YXNrX2NhcGFiaWxpdHlfbG9jayk7Ci0gICAgIHJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7IAorCXNwaW5fbG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2spOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAKLSAgICAgaWYgKHBpZCAmJiBwaWQgIT0gY3VycmVudC0+cGlkKSB7Ci0JICAgICB0YXJnZXQgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0JICAgICBpZiAoIXRhcmdldCkgewotCSAgICAgICAgICByZXQgPSAtRVNSQ0g7Ci0JICAgICAgICAgIGdvdG8gb3V0OwotCSAgICAgfQotICAgICB9IGVsc2UKLQkgICAgIHRhcmdldCA9IGN1cnJlbnQ7CisJaWYgKHBpZCAmJiBwaWQgIT0gdGFza19waWRfdm5yKGN1cnJlbnQpKSB7CisJCXRhcmdldCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJCWlmICghdGFyZ2V0KSB7CisJCQlyZXQgPSAtRVNSQ0g7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZQorCQl0YXJnZXQgPSBjdXJyZW50OwogCi0gICAgIHJldCA9IHNlY3VyaXR5X2NhcGdldCh0YXJnZXQsICZkYXRhLmVmZmVjdGl2ZSwgJmRhdGEuaW5oZXJpdGFibGUsICZkYXRhLnBlcm1pdHRlZCk7CisJcmV0ID0gc2VjdXJpdHlfY2FwZ2V0KHRhcmdldCwgJmRhdGEuZWZmZWN0aXZlLCAmZGF0YS5pbmhlcml0YWJsZSwgJmRhdGEucGVybWl0dGVkKTsKIAogb3V0OgotICAgICByZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7IAotICAgICBzcGluX3VubG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2spOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2spOwogCi0gICAgIGlmICghcmV0ICYmIGNvcHlfdG9fdXNlcihkYXRhcHRyLCAmZGF0YSwgc2l6ZW9mIGRhdGEpKQotICAgICAgICAgIHJldHVybiAtRUZBVUxUOyAKKwlpZiAoIXJldCAmJiBjb3B5X3RvX3VzZXIoZGF0YXB0ciwgJmRhdGEsIHNpemVvZiBkYXRhKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKLSAgICAgcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OwogfQogCiAvKgpAQCAtOTgsNyArOTYsNyBAQAogCWludCBmb3VuZCA9IDA7CiAJc3RydWN0IHBpZCAqcGdycDsKIAotCXBncnAgPSBmaW5kX3BpZChwZ3JwX25yKTsKKwlwZ3JwID0gZmluZF92cGlkKHBncnBfbnIpOwogCWRvX2VhY2hfcGlkX3Rhc2socGdycCwgUElEVFlQRV9QR0lELCBnKSB7CiAJCXRhcmdldCA9IGc7CiAJCXdoaWxlX2VhY2hfdGhyZWFkKGcsIHRhcmdldCkgewpAQCAtMTE1LDcgKzExMyw3IEBACiAJfSB3aGlsZV9lYWNoX3BpZF90YXNrKHBncnAsIFBJRFRZUEVfUEdJRCwgZyk7CiAKIAlpZiAoIWZvdW5kKQotCSAgICAgcmV0ID0gMDsKKwkJcmV0ID0gMDsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzIsNyArMTMwLDcgQEAKICAgICAgaW50IGZvdW5kID0gMDsKIAogICAgICBkb19lYWNoX3RocmVhZChnLCB0YXJnZXQpIHsKLSAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGN1cnJlbnQgfHwgaXNfaW5pdCh0YXJnZXQpKQorICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gY3VycmVudCB8fCBpc19jb250YWluZXJfaW5pdCh0YXJnZXQtPmdyb3VwX2xlYWRlcikpCiAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICBmb3VuZCA9IDE7CiAJICAgICBpZiAoc2VjdXJpdHlfY2Fwc2V0X2NoZWNrKHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwKQEAgLTE2OSw2OCArMTY3LDY4IEBACiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY29uc3QgY2FwX3VzZXJfZGF0YV90IGRhdGEpCiB7Ci0gICAgIGtlcm5lbF9jYXBfdCBpbmhlcml0YWJsZSwgcGVybWl0dGVkLCBlZmZlY3RpdmU7Ci0gICAgIF9fdTMyIHZlcnNpb247Ci0gICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0OwotICAgICBpbnQgcmV0OwotICAgICBwaWRfdCBwaWQ7CisJa2VybmVsX2NhcF90IGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQsIGVmZmVjdGl2ZTsKKwlfX3UzMiB2ZXJzaW9uOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0OworCWludCByZXQ7CisJcGlkX3QgcGlkOwogCi0gICAgIGlmIChnZXRfdXNlcih2ZXJzaW9uLCAmaGVhZGVyLT52ZXJzaW9uKSkKLQkgICAgIHJldHVybiAtRUZBVUxUOyAKKwlpZiAoZ2V0X3VzZXIodmVyc2lvbiwgJmhlYWRlci0+dmVyc2lvbikpCisJCXJldHVybiAtRUZBVUxUOwogCi0gICAgIGlmICh2ZXJzaW9uICE9IF9MSU5VWF9DQVBBQklMSVRZX1ZFUlNJT04pIHsKLQkgICAgIGlmIChwdXRfdXNlcihfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OLCAmaGVhZGVyLT52ZXJzaW9uKSkKLQkJICAgICByZXR1cm4gLUVGQVVMVDsgCi0gICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgIH0KKwlpZiAodmVyc2lvbiAhPSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OKSB7CisJCWlmIChwdXRfdXNlcihfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OLCAmaGVhZGVyLT52ZXJzaW9uKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgICAgaWYgKGdldF91c2VyKHBpZCwgJmhlYWRlci0+cGlkKSkKLQkgICAgIHJldHVybiAtRUZBVUxUOyAKKwlpZiAoZ2V0X3VzZXIocGlkLCAmaGVhZGVyLT5waWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAotICAgICBpZiAocGlkICYmIHBpZCAhPSBjdXJyZW50LT5waWQgJiYgIWNhcGFibGUoQ0FQX1NFVFBDQVApKQotICAgICAgICAgICAgIHJldHVybiAtRVBFUk07CisJaWYgKHBpZCAmJiBwaWQgIT0gdGFza19waWRfdm5yKGN1cnJlbnQpICYmICFjYXBhYmxlKENBUF9TRVRQQ0FQKSkKKwkJcmV0dXJuIC1FUEVSTTsKIAotICAgICBpZiAoY29weV9mcm9tX3VzZXIoJmVmZmVjdGl2ZSwgJmRhdGEtPmVmZmVjdGl2ZSwgc2l6ZW9mKGVmZmVjdGl2ZSkpIHx8Ci0JIGNvcHlfZnJvbV91c2VyKCZpbmhlcml0YWJsZSwgJmRhdGEtPmluaGVyaXRhYmxlLCBzaXplb2YoaW5oZXJpdGFibGUpKSB8fAotCSBjb3B5X2Zyb21fdXNlcigmcGVybWl0dGVkLCAmZGF0YS0+cGVybWl0dGVkLCBzaXplb2YocGVybWl0dGVkKSkpCi0JICAgICByZXR1cm4gLUVGQVVMVDsgCisJaWYgKGNvcHlfZnJvbV91c2VyKCZlZmZlY3RpdmUsICZkYXRhLT5lZmZlY3RpdmUsIHNpemVvZihlZmZlY3RpdmUpKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcigmaW5oZXJpdGFibGUsICZkYXRhLT5pbmhlcml0YWJsZSwgc2l6ZW9mKGluaGVyaXRhYmxlKSkgfHwKKwkgICAgY29weV9mcm9tX3VzZXIoJnBlcm1pdHRlZCwgJmRhdGEtPnBlcm1pdHRlZCwgc2l6ZW9mKHBlcm1pdHRlZCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKIAotICAgICBzcGluX2xvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKLSAgICAgcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX2xvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCi0gICAgIGlmIChwaWQgPiAwICYmIHBpZCAhPSBjdXJyZW50LT5waWQpIHsKLSAgICAgICAgICB0YXJnZXQgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0gICAgICAgICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgICAgICAgIHJldCA9IC1FU1JDSDsKLSAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgIH0KLSAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICB0YXJnZXQgPSBjdXJyZW50OworCWlmIChwaWQgPiAwICYmIHBpZCAhPSB0YXNrX3BpZF92bnIoY3VycmVudCkpIHsKKwkJdGFyZ2V0ID0gZmluZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKCF0YXJnZXQpIHsKKwkJCXJldCA9IC1FU1JDSDsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlCisJCXRhcmdldCA9IGN1cnJlbnQ7CiAKLSAgICAgcmV0ID0gMDsKKwlyZXQgPSAwOwogCi0gICAgIC8qIGhhdmluZyB2ZXJpZmllZCB0aGF0IHRoZSBwcm9wb3NlZCBjaGFuZ2VzIGFyZSBsZWdhbCwKLSAgICAgICAgICAgd2Ugbm93IHB1dCB0aGVtIGludG8gZWZmZWN0LiAqLwotICAgICBpZiAocGlkIDwgMCkgewotICAgICAgICAgICAgIGlmIChwaWQgPT0gLTEpICAvKiBhbGwgcHJvY3Mgb3RoZXIgdGhhbiBjdXJyZW50IGFuZCBpbml0ICovCi0gICAgICAgICAgICAgICAgICAgICByZXQgPSBjYXBfc2V0X2FsbCgmZWZmZWN0aXZlLCAmaW5oZXJpdGFibGUsICZwZXJtaXR0ZWQpOworCS8qIGhhdmluZyB2ZXJpZmllZCB0aGF0IHRoZSBwcm9wb3NlZCBjaGFuZ2VzIGFyZSBsZWdhbCwKKwkgICB3ZSBub3cgcHV0IHRoZW0gaW50byBlZmZlY3QuICovCisJaWYgKHBpZCA8IDApIHsKKwkJaWYgKHBpZCA9PSAtMSkJLyogYWxsIHByb2NzIG90aGVyIHRoYW4gY3VycmVudCBhbmQgaW5pdCAqLworCQkJcmV0ID0gY2FwX3NldF9hbGwoJmVmZmVjdGl2ZSwgJmluaGVyaXRhYmxlLCAmcGVybWl0dGVkKTsKIAotICAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAvKiBhbGwgcHJvY3MgaW4gcHJvY2VzcyBncm91cCAqLwotICAgICAgICAgICAgICAgICAgICAgcmV0ID0gY2FwX3NldF9wZygtcGlkLCAmZWZmZWN0aXZlLCAmaW5oZXJpdGFibGUsCi0JCSAgICAgCQkJCQkmcGVybWl0dGVkKTsKLSAgICAgfSBlbHNlIHsKLQkgICAgIHJldCA9IHNlY3VyaXR5X2NhcHNldF9jaGVjayh0YXJnZXQsICZlZmZlY3RpdmUsICZpbmhlcml0YWJsZSwKLQkgICAgIAkJCQkJCSZwZXJtaXR0ZWQpOwotCSAgICAgaWYgKCFyZXQpCi0JCSAgICAgc2VjdXJpdHlfY2Fwc2V0X3NldCh0YXJnZXQsICZlZmZlY3RpdmUsICZpbmhlcml0YWJsZSwKLQkJICAgICAJCQkJCSZwZXJtaXR0ZWQpOwotICAgICB9CisJCWVsc2UJCS8qIGFsbCBwcm9jcyBpbiBwcm9jZXNzIGdyb3VwICovCisJCQlyZXQgPSBjYXBfc2V0X3BnKC1waWQsICZlZmZlY3RpdmUsICZpbmhlcml0YWJsZSwKKwkJCQkJICZwZXJtaXR0ZWQpOworCX0gZWxzZSB7CisJCXJldCA9IHNlY3VyaXR5X2NhcHNldF9jaGVjayh0YXJnZXQsICZlZmZlY3RpdmUsICZpbmhlcml0YWJsZSwKKwkJCQkJICAgICZwZXJtaXR0ZWQpOworCQlpZiAoIXJldCkKKwkJCXNlY3VyaXR5X2NhcHNldF9zZXQodGFyZ2V0LCAmZWZmZWN0aXZlLCAmaW5oZXJpdGFibGUsCisJCQkJCSAgICAmcGVybWl0dGVkKTsKKwl9CiAKIG91dDoKLSAgICAgcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotICAgICBzcGluX3VubG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2spOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2spOwogCi0gICAgIHJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKIH0KIAogaW50IF9fY2FwYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApCmRpZmYgLS1naXQgYS9rZXJuZWwvY2dyb3VwLmMgYi9rZXJuZWwvY2dyb3VwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk4N2RjYwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9jZ3JvdXAuYwpAQCAtMCwwICsxLDI4MDUgQEAKKy8qCisgKiAga2VybmVsL2Nncm91cC5jCisgKgorICogIEdlbmVyaWMgcHJvY2Vzcy1ncm91cGluZyBzeXN0ZW0uCisgKgorICogIEJhc2VkIG9yaWdpbmFsbHkgb24gdGhlIGNwdXNldCBzeXN0ZW0sIGV4dHJhY3RlZCBieSBQYXVsIE1lbmFnZQorICogIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYworICoKKyAqICBDb3B5cmlnaHQgbm90aWNlcyBmcm9tIHRoZSBvcmlnaW5hbCBjcHVzZXQgY29kZToKKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENvcHlyaWdodCAoQykgMjAwMyBCVUxMIFNBLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqCisgKiAgUG9ydGlvbnMgZGVyaXZlZCBmcm9tIFBhdHJpY2sgTW9jaGVsJ3Mgc3lzZnMgY29kZS4KKyAqICBzeXNmcyBpcyBDb3B5cmlnaHQgKGMpIDIwMDEtMyBQYXRyaWNrIE1vY2hlbAorICoKKyAqICAyMDAzLTEwLTEwIFdyaXR0ZW4gYnkgU2ltb24gRGVyci4KKyAqICAyMDAzLTEwLTIyIFVwZGF0ZXMgYnkgU3RlcGhlbiBIZW1taW5nZXIuCisgKiAgMjAwNCBNYXktSnVseSBSZXdvcmsgYnkgUGF1bCBKYWNrc29uLgorICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhlIExpbnV4CisgKiAgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXBzdGF0cy5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdGF0aWMgREVGSU5FX01VVEVYKGNncm91cF9tdXRleCk7CisKKy8qIEdlbmVyYXRlIGFuIGFycmF5IG9mIGNncm91cCBzdWJzeXN0ZW0gcG9pbnRlcnMgKi8KKyNkZWZpbmUgU1VCU1lTKF94KSAmX3ggIyMgX3N1YnN5cywKKworc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXNbXSA9IHsKKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXBfc3Vic3lzLmg+Cit9OworCisvKgorICogQSBjZ3JvdXBmc19yb290IHJlcHJlc2VudHMgdGhlIHJvb3Qgb2YgYSBjZ3JvdXAgaGllcmFyY2h5LAorICogYW5kIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggYSBzdXBlcmJsb2NrIHRvIGZvcm0gYW4gYWN0aXZlCisgKiBoaWVyYXJjaHkKKyAqLworc3RydWN0IGNncm91cGZzX3Jvb3QgeworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisKKwkvKgorCSAqIFRoZSBiaXRtYXNrIG9mIHN1YnN5c3RlbXMgaW50ZW5kZWQgdG8gYmUgYXR0YWNoZWQgdG8gdGhpcworCSAqIGhpZXJhcmNoeQorCSAqLworCXVuc2lnbmVkIGxvbmcgc3Vic3lzX2JpdHM7CisKKwkvKiBUaGUgYml0bWFzayBvZiBzdWJzeXN0ZW1zIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGlzIGhpZXJhcmNoeSAqLworCXVuc2lnbmVkIGxvbmcgYWN0dWFsX3N1YnN5c19iaXRzOworCisJLyogQSBsaXN0IHJ1bm5pbmcgdGhyb3VnaCB0aGUgYXR0YWNoZWQgc3Vic3lzdGVtcyAqLworCXN0cnVjdCBsaXN0X2hlYWQgc3Vic3lzX2xpc3Q7CisKKwkvKiBUaGUgcm9vdCBjZ3JvdXAgZm9yIHRoaXMgaGllcmFyY2h5ICovCisJc3RydWN0IGNncm91cCB0b3BfY2dyb3VwOworCisJLyogVHJhY2tzIGhvdyBtYW55IGNncm91cHMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIGhpZXJhcmNoeS4qLworCWludCBudW1iZXJfb2ZfY2dyb3VwczsKKworCS8qIEEgbGlzdCBydW5uaW5nIHRocm91Z2ggdGhlIG1vdW50ZWQgaGllcmFyY2hpZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHJvb3RfbGlzdDsKKworCS8qIEhpZXJhcmNoeS1zcGVjaWZpYyBmbGFncyAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBUaGUgcGF0aCB0byB1c2UgZm9yIHJlbGVhc2Ugbm90aWZpY2F0aW9ucy4gTm8gbG9ja2luZworCSAqIGJldHdlZW4gc2V0dGluZyBhbmQgdXNlIC0gc28gaWYgdXNlcnNwYWNlIHVwZGF0ZXMgdGhpcworCSAqIHdoaWxlIGNoaWxkIGNncm91cHMgZXhpc3QsIHlvdSBjb3VsZCBtaXNzIGEKKwkgKiBub3RpZmljYXRpb24uIFdlIGVuc3VyZSB0aGF0IGl0J3MgYWx3YXlzIGEgdmFsaWQKKwkgKiBOVUwtdGVybWluYXRlZCBzdHJpbmcgKi8KKwljaGFyIHJlbGVhc2VfYWdlbnRfcGF0aFtQQVRIX01BWF07Cit9OworCisKKy8qCisgKiBUaGUgInJvb3Rub2RlIiBoaWVyYXJjaHkgaXMgdGhlICJkdW1teSBoaWVyYXJjaHkiLCByZXNlcnZlZCBmb3IgdGhlCisgKiBzdWJzeXN0ZW1zIHRoYXQgYXJlIG90aGVyd2lzZSB1bmF0dGFjaGVkIC0gaXQgbmV2ZXIgaGFzIG1vcmUgdGhhbiBhCisgKiBzaW5nbGUgY2dyb3VwLCBhbmQgYWxsIHRhc2tzIGFyZSBwYXJ0IG9mIHRoYXQgY2dyb3VwLgorICovCitzdGF0aWMgc3RydWN0IGNncm91cGZzX3Jvb3Qgcm9vdG5vZGU7CisKKy8qIFRoZSBsaXN0IG9mIGhpZXJhcmNoeSByb290cyAqLworCitzdGF0aWMgTElTVF9IRUFEKHJvb3RzKTsKK3N0YXRpYyBpbnQgcm9vdF9jb3VudDsKKworLyogZHVtbXl0b3AgaXMgYSBzaG9ydGhhbmQgZm9yIHRoZSBkdW1teSBoaWVyYXJjaHkncyB0b3AgY2dyb3VwICovCisjZGVmaW5lIGR1bW15dG9wICgmcm9vdG5vZGUudG9wX2Nncm91cCkKKworLyogVGhpcyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIHRhc2tzIGluIHRoZSBmb3JrIGFuZCBleGl0IHBhdGhzIHNob3VsZAorICogdGFrZSBjYWxsYmFja19tdXRleCBhbmQgY2hlY2sgZm9yIGZvcmsvZXhpdCBoYW5kbGVycyB0byBjYWxsLiBUaGlzCisgKiBhdm9pZHMgdXMgaGF2aW5nIHRvIGRvIGV4dHJhIHdvcmsgaW4gdGhlIGZvcmsvZXhpdCBwYXRoIGlmIG5vbmUgb2YgdGhlCisgKiBzdWJzeXN0ZW1zIG5lZWQgdG8gYmUgY2FsbGVkLgorICovCitzdGF0aWMgaW50IG5lZWRfZm9ya2V4aXRfY2FsbGJhY2s7CisKKy8qIGJpdHMgaW4gc3RydWN0IGNncm91cCBmbGFncyBmaWVsZCAqLworZW51bSB7CisJLyogQ29udHJvbCBHcm91cCBpcyBkZWFkICovCisJQ0dSUF9SRU1PVkVELAorCS8qIENvbnRyb2wgR3JvdXAgaGFzIHByZXZpb3VzbHkgaGFkIGEgY2hpbGQgY2dyb3VwIG9yIGEgdGFzaywKKwkgKiBidXQgbm8gbG9uZ2VyIChvbmx5IGlmIENHUlBfTk9USUZZX09OX1JFTEVBU0UgaXMgc2V0KSAqLworCUNHUlBfUkVMRUFTQUJMRSwKKwkvKiBDb250cm9sIEdyb3VwIHJlcXVpcmVzIHJlbGVhc2Ugbm90aWZpY2F0aW9ucyB0byB1c2Vyc3BhY2UgKi8KKwlDR1JQX05PVElGWV9PTl9SRUxFQVNFLAorfTsKKworLyogY29udmVuaWVudCB0ZXN0cyBmb3IgdGhlc2UgYml0cyAqLworaW5saW5lIGludCBjZ3JvdXBfaXNfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCXJldHVybiB0ZXN0X2JpdChDR1JQX1JFTU9WRUQsICZjZ3JwLT5mbGFncyk7Cit9CisKKy8qIGJpdHMgaW4gc3RydWN0IGNncm91cGZzX3Jvb3QgZmxhZ3MgZmllbGQgKi8KK2VudW0geworCVJPT1RfTk9QUkVGSVgsIC8qIG1vdW50ZWQgc3Vic3lzdGVtcyBoYXZlIG5vIG5hbWVkIHByZWZpeCAqLworfTsKKworaW5saW5lIGludCBjZ3JvdXBfaXNfcmVsZWFzYWJsZShjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCWNvbnN0IGludCBiaXRzID0KKwkJKDEgPDwgQ0dSUF9SRUxFQVNBQkxFKSB8CisJCSgxIDw8IENHUlBfTk9USUZZX09OX1JFTEVBU0UpOworCXJldHVybiAoY2dycC0+ZmxhZ3MgJiBiaXRzKSA9PSBiaXRzOworfQorCitpbmxpbmUgaW50IG5vdGlmeV9vbl9yZWxlYXNlKGNvbnN0IHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJcmV0dXJuIHRlc3RfYml0KENHUlBfTk9USUZZX09OX1JFTEVBU0UsICZjZ3JwLT5mbGFncyk7Cit9CisKKy8qCisgKiBmb3JfZWFjaF9zdWJzeXMoKSBhbGxvd3MgeW91IHRvIGl0ZXJhdGUgb24gZWFjaCBzdWJzeXN0ZW0gYXR0YWNoZWQgdG8KKyAqIGFuIGFjdGl2ZSBoaWVyYXJjaHkKKyAqLworI2RlZmluZSBmb3JfZWFjaF9zdWJzeXMoX3Jvb3QsIF9zcykgXAorbGlzdF9mb3JfZWFjaF9lbnRyeShfc3MsICZfcm9vdC0+c3Vic3lzX2xpc3QsIHNpYmxpbmcpCisKKy8qIGZvcl9lYWNoX3Jvb3QoKSBhbGxvd3MgeW91IHRvIGl0ZXJhdGUgYWNyb3NzIHRoZSBhY3RpdmUgaGllcmFyY2hpZXMgKi8KKyNkZWZpbmUgZm9yX2VhY2hfcm9vdChfcm9vdCkgXAorbGlzdF9mb3JfZWFjaF9lbnRyeShfcm9vdCwgJnJvb3RzLCByb290X2xpc3QpCisKKy8qIHRoZSBsaXN0IG9mIGNncm91cHMgZWxpZ2libGUgZm9yIGF1dG9tYXRpYyByZWxlYXNlLiBQcm90ZWN0ZWQgYnkKKyAqIHJlbGVhc2VfbGlzdF9sb2NrICovCitzdGF0aWMgTElTVF9IRUFEKHJlbGVhc2VfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlbGVhc2VfbGlzdF9sb2NrKTsKK3N0YXRpYyB2b2lkIGNncm91cF9yZWxlYXNlX2FnZW50KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgREVDTEFSRV9XT1JLKHJlbGVhc2VfYWdlbnRfd29yaywgY2dyb3VwX3JlbGVhc2VfYWdlbnQpOworc3RhdGljIHZvaWQgY2hlY2tfZm9yX3JlbGVhc2Uoc3RydWN0IGNncm91cCAqY2dycCk7CisKKy8qIExpbmsgc3RydWN0dXJlIGZvciBhc3NvY2lhdGluZyBjc3Nfc2V0IG9iamVjdHMgd2l0aCBjZ3JvdXBzICovCitzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgeworCS8qCisJICogTGlzdCBydW5uaW5nIHRocm91Z2ggY2dfY2dyb3VwX2xpbmtzIGFzc29jaWF0ZWQgd2l0aCBhCisJICogY2dyb3VwLCBhbmNob3JlZCBvbiBjZ3JvdXAtPmNzc19zZXRzCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBjZ3JwX2xpbmtfbGlzdDsKKwkvKgorCSAqIExpc3QgcnVubmluZyB0aHJvdWdoIGNnX2Nncm91cF9saW5rcyBwb2ludGluZyBhdCBhCisJICogc2luZ2xlIGNzc19zZXQgb2JqZWN0LCBhbmNob3JlZCBvbiBjc3Nfc2V0LT5jZ19saW5rcworCSAqLworCXN0cnVjdCBsaXN0X2hlYWQgY2dfbGlua19saXN0OworCXN0cnVjdCBjc3Nfc2V0ICpjZzsKK307CisKKy8qIFRoZSBkZWZhdWx0IGNzc19zZXQgLSB1c2VkIGJ5IGluaXQgYW5kIGl0cyBjaGlsZHJlbiBwcmlvciB0byBhbnkKKyAqIGhpZXJhcmNoaWVzIGJlaW5nIG1vdW50ZWQuIEl0IGNvbnRhaW5zIGEgcG9pbnRlciB0byB0aGUgcm9vdCBzdGF0ZQorICogZm9yIGVhY2ggc3Vic3lzdGVtLiBBbHNvIHVzZWQgdG8gYW5jaG9yIHRoZSBsaXN0IG9mIGNzc19zZXRzLiBOb3QKKyAqIHJlZmVyZW5jZS1jb3VudGVkLCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIHdoZW4gY2hpbGQgY2dyb3VwcworICogaGF2ZW4ndCBiZWVuIGNyZWF0ZWQuCisgKi8KKworc3RhdGljIHN0cnVjdCBjc3Nfc2V0IGluaXRfY3NzX3NldDsKK3N0YXRpYyBzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgaW5pdF9jc3Nfc2V0X2xpbms7CisKKy8qIGNzc19zZXRfbG9jayBwcm90ZWN0cyB0aGUgbGlzdCBvZiBjc3Nfc2V0IG9iamVjdHMsIGFuZCB0aGUKKyAqIGNoYWluIG9mIHRhc2tzIG9mZiBlYWNoIGNzc19zZXQuICBOZXN0cyBvdXRzaWRlIHRhc2stPmFsbG9jX2xvY2sKKyAqIGR1ZSB0byBjZ3JvdXBfaXRlcl9zdGFydCgpICovCitzdGF0aWMgREVGSU5FX1JXTE9DSyhjc3Nfc2V0X2xvY2spOworc3RhdGljIGludCBjc3Nfc2V0X2NvdW50OworCisvKiBXZSBkb24ndCBtYWludGFpbiB0aGUgbGlzdHMgcnVubmluZyB0aHJvdWdoIGVhY2ggY3NzX3NldCB0byBpdHMKKyAqIHRhc2sgdW50aWwgYWZ0ZXIgdGhlIGZpcnN0IGNhbGwgdG8gY2dyb3VwX2l0ZXJfc3RhcnQoKS4gVGhpcworICogcmVkdWNlcyB0aGUgZm9yaygpL2V4aXQoKSBvdmVyaGVhZCBmb3IgcGVvcGxlIHdobyBoYXZlIGNncm91cHMKKyAqIGNvbXBpbGVkIGludG8gdGhlaXIga2VybmVsIGJ1dCBub3QgYWN0dWFsbHkgaW4gdXNlICovCitzdGF0aWMgaW50IHVzZV90YXNrX2Nzc19zZXRfbGlua3M7CisKKy8qIFdoZW4gd2UgY3JlYXRlIG9yIGRlc3Ryb3kgYSBjc3Nfc2V0LCB0aGUgb3BlcmF0aW9uIHNpbXBseQorICogdGFrZXMvcmVsZWFzZXMgYSByZWZlcmVuY2UgY291bnQgb24gYWxsIHRoZSBjZ3JvdXBzIHJlZmVyZW5jZWQKKyAqIGJ5IHN1YnN5c3RlbXMgaW4gdGhpcyBjc3Nfc2V0LiBUaGlzIGNhbiBlbmQgdXAgbXVsdGlwbGUtY291bnRpbmcKKyAqIHNvbWUgY2dyb3VwcywgYnV0IHRoYXQncyBPSyAtIHRoZSByZWYtY291bnQgaXMganVzdCBhCisgKiBidXN5L25vdC1idXN5IGluZGljYXRvcjsgZW5zdXJpbmcgdGhhdCB3ZSBvbmx5IGNvdW50IGVhY2ggY2dyb3VwCisgKiBvbmNlIHdvdWxkIHJlcXVpcmUgdGFraW5nIGEgZ2xvYmFsIGxvY2sgdG8gZW5zdXJlIHRoYXQgbm8KKyAqIHN1YnN5c3RlbXMgbW92ZWQgYmV0d2VlbiBoaWVyYXJjaGllcyB3aGlsZSB3ZSB3ZXJlIGRvaW5nIHNvLgorICoKKyAqIFBvc3NpYmxlIFRPRE86IGRlY2lkZSBhdCBib290IHRpbWUgYmFzZWQgb24gdGhlIG51bWJlciBvZgorICogcmVnaXN0ZXJlZCBzdWJzeXN0ZW1zIGFuZCB0aGUgbnVtYmVyIG9mIENQVXMgb3IgTlVNQSBub2RlcyB3aGV0aGVyCisgKiBpdCdzIGJldHRlciBmb3IgcGVyZm9ybWFuY2UgdG8gcmVmLWNvdW50IGV2ZXJ5IHN1YnN5c3RlbSwgb3IgdG8KKyAqIHRha2UgYSBnbG9iYWwgbG9jayBhbmQgb25seSBhZGQgb25lIHJlZiBjb3VudCB0byBlYWNoIGhpZXJhcmNoeS4KKyAqLworCisvKgorICogdW5saW5rIGEgY3NzX3NldCBmcm9tIHRoZSBsaXN0IGFuZCBmcmVlIGl0CisgKi8KK3N0YXRpYyB2b2lkIHVubGlua19jc3Nfc2V0KHN0cnVjdCBjc3Nfc2V0ICpjZykKK3sKKwl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOworCWxpc3RfZGVsKCZjZy0+bGlzdCk7CisJY3NzX3NldF9jb3VudC0tOworCXdoaWxlICghbGlzdF9lbXB0eSgmY2ctPmNnX2xpbmtzKSkgeworCQlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CisJCWxpbmsgPSBsaXN0X2VudHJ5KGNnLT5jZ19saW5rcy5uZXh0LAorCQkJCSAgc3RydWN0IGNnX2Nncm91cF9saW5rLCBjZ19saW5rX2xpc3QpOworCQlsaXN0X2RlbCgmbGluay0+Y2dfbGlua19saXN0KTsKKwkJbGlzdF9kZWwoJmxpbmstPmNncnBfbGlua19saXN0KTsKKwkJa2ZyZWUobGluayk7CisJfQorCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgX19yZWxlYXNlX2Nzc19zZXQoc3RydWN0IGtyZWYgKmssIGludCB0YXNrZXhpdCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3NzX3NldCAqY2cgPSBjb250YWluZXJfb2Yoaywgc3RydWN0IGNzc19zZXQsIHJlZik7CisKKwl1bmxpbmtfY3NzX3NldChjZyk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gY2ctPnN1YnN5c1tpXS0+Y2dyb3VwOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2dycC0+Y291bnQpICYmCisJCSAgICBub3RpZnlfb25fcmVsZWFzZShjZ3JwKSkgeworCQkJaWYgKHRhc2tleGl0KQorCQkJCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmY2dycC0+ZmxhZ3MpOworCQkJY2hlY2tfZm9yX3JlbGVhc2UoY2dycCk7CisJCX0KKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJa2ZyZWUoY2cpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX2Nzc19zZXQoc3RydWN0IGtyZWYgKmspCit7CisJX19yZWxlYXNlX2Nzc19zZXQoaywgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbGVhc2VfY3NzX3NldF90YXNrZXhpdChzdHJ1Y3Qga3JlZiAqaykKK3sKKwlfX3JlbGVhc2VfY3NzX3NldChrLCAxKTsKK30KKworLyoKKyAqIHJlZmNvdW50ZWQgZ2V0L3B1dCBmb3IgY3NzX3NldCBvYmplY3RzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfY3NzX3NldChzdHJ1Y3QgY3NzX3NldCAqY2cpCit7CisJa3JlZl9nZXQoJmNnLT5yZWYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nzc19zZXQoc3RydWN0IGNzc19zZXQgKmNnKQoreworCWtyZWZfcHV0KCZjZy0+cmVmLCByZWxlYXNlX2Nzc19zZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0X2Nzc19zZXRfdGFza2V4aXQoc3RydWN0IGNzc19zZXQgKmNnKQoreworCWtyZWZfcHV0KCZjZy0+cmVmLCByZWxlYXNlX2Nzc19zZXRfdGFza2V4aXQpOworfQorCisvKgorICogZmluZF9leGlzdGluZ19jc3Nfc2V0KCkgaXMgYSBoZWxwZXIgZm9yCisgKiBmaW5kX2Nzc19zZXQoKSwgYW5kIGNoZWNrcyB0byBzZWUgd2hldGhlciBhbiBleGlzdGluZworICogY3NzX3NldCBpcyBzdWl0YWJsZS4gVGhpcyBjdXJyZW50bHkgd2Fsa3MgYSBsaW5rZWQtbGlzdCBmb3IKKyAqIHNpbXBsaWNpdHk7IGEgbGF0ZXIgcGF0Y2ggd2lsbCB1c2UgYSBoYXNoIHRhYmxlIGZvciBiZXR0ZXIKKyAqIHBlcmZvcm1hbmNlCisgKgorICogb2xkY2c6IHRoZSBjZ3JvdXAgZ3JvdXAgdGhhdCB3ZSdyZSB1c2luZyBiZWZvcmUgdGhlIGNncm91cAorICogdHJhbnNpdGlvbgorICoKKyAqIGNncnA6IHRoZSBjZ3JvdXAgdGhhdCB3ZSdyZSBtb3ZpbmcgaW50bworICoKKyAqIHRlbXBsYXRlOiBsb2NhdGlvbiBpbiB3aGljaCB0byBidWlsZCB0aGUgZGVzaXJlZCBzZXQgb2Ygc3Vic3lzdGVtCisgKiBzdGF0ZSBvYmplY3RzIGZvciB0aGUgbmV3IGNncm91cCBncm91cAorICovCisKK3N0YXRpYyBzdHJ1Y3QgY3NzX3NldCAqZmluZF9leGlzdGluZ19jc3Nfc2V0KAorCXN0cnVjdCBjc3Nfc2V0ICpvbGRjZywKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICp0ZW1wbGF0ZVtdKQoreworCWludCBpOworCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290ID0gY2dycC0+cm9vdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsID0gJmluaXRfY3NzX3NldC5saXN0OworCisJLyogQnVpbHQgdGhlIHNldCBvZiBzdWJzeXN0ZW0gc3RhdGUgb2JqZWN0cyB0aGF0IHdlIHdhbnQgdG8KKwkgKiBzZWUgaW4gdGhlIG5ldyBjc3Nfc2V0ICovCisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQlpZiAocm9vdC0+c3Vic3lzX2JpdHMgJiAoMXVsbCA8PCBpKSkgeworCQkJLyogU3Vic3lzdGVtIGlzIGluIHRoaXMgaGllcmFyY2h5LiBTbyB3ZSB3YW50CisJCQkgKiB0aGUgc3Vic3lzdGVtIHN0YXRlIGZyb20gdGhlIG5ldworCQkJICogY2dyb3VwICovCisJCQl0ZW1wbGF0ZVtpXSA9IGNncnAtPnN1YnN5c1tpXTsKKwkJfSBlbHNlIHsKKwkJCS8qIFN1YnN5c3RlbSBpcyBub3QgaW4gdGhpcyBoaWVyYXJjaHksIHNvIHdlCisJCQkgKiBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgc3Vic3lzdGVtIHN0YXRlICovCisJCQl0ZW1wbGF0ZVtpXSA9IG9sZGNnLT5zdWJzeXNbaV07CisJCX0KKwl9CisKKwkvKiBMb29rIHRocm91Z2ggZXhpc3RpbmcgY2dyb3VwIGdyb3VwcyB0byBmaW5kIG9uZSB0byByZXVzZSAqLworCWRvIHsKKwkJc3RydWN0IGNzc19zZXQgKmNnID0KKwkJCWxpc3RfZW50cnkobCwgc3RydWN0IGNzc19zZXQsIGxpc3QpOworCisJCWlmICghbWVtY21wKHRlbXBsYXRlLCBjZy0+c3Vic3lzLCBzaXplb2YoY2ctPnN1YnN5cykpKSB7CisJCQkvKiBBbGwgc3Vic3lzdGVtcyBtYXRjaGVkICovCisJCQlyZXR1cm4gY2c7CisJCX0KKwkJLyogVHJ5IHRoZSBuZXh0IGNncm91cCBncm91cCAqLworCQlsID0gbC0+bmV4dDsKKwl9IHdoaWxlIChsICE9ICZpbml0X2Nzc19zZXQubGlzdCk7CisKKwkvKiBObyBleGlzdGluZyBjZ3JvdXAgZ3JvdXAgbWF0Y2hlZCAqLworCXJldHVybiBOVUxMOworfQorCisvKgorICogYWxsb2NhdGVfY2dfbGlua3MoKSBhbGxvY2F0ZXMgImNvdW50IiBjZ19jZ3JvdXBfbGluayBzdHJ1Y3R1cmVzCisgKiBhbmQgY2hhaW5zIHRoZW0gb24gdG1wIHRocm91Z2ggdGhlaXIgY2dycF9saW5rX2xpc3QgZmllbGRzLiBSZXR1cm5zIDAgb24KKyAqIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJvcgorICovCisKK3N0YXRpYyBpbnQgYWxsb2NhdGVfY2dfbGlua3MoaW50IGNvdW50LCBzdHJ1Y3QgbGlzdF9oZWFkICp0bXApCit7CisJc3RydWN0IGNnX2Nncm91cF9saW5rICpsaW5rOworCWludCBpOworCUlOSVRfTElTVF9IRUFEKHRtcCk7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJbGluayA9IGttYWxsb2Moc2l6ZW9mKCpsaW5rKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbGluaykgeworCQkJd2hpbGUgKCFsaXN0X2VtcHR5KHRtcCkpIHsKKwkJCQlsaW5rID0gbGlzdF9lbnRyeSh0bXAtPm5leHQsCisJCQkJCQkgIHN0cnVjdCBjZ19jZ3JvdXBfbGluaywKKwkJCQkJCSAgY2dycF9saW5rX2xpc3QpOworCQkJCWxpc3RfZGVsKCZsaW5rLT5jZ3JwX2xpbmtfbGlzdCk7CisJCQkJa2ZyZWUobGluayk7CisJCQl9CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlsaXN0X2FkZCgmbGluay0+Y2dycF9saW5rX2xpc3QsIHRtcCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2NnX2xpbmtzKHN0cnVjdCBsaXN0X2hlYWQgKnRtcCkKK3sKKwl3aGlsZSAoIWxpc3RfZW1wdHkodG1wKSkgeworCQlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CisJCWxpbmsgPSBsaXN0X2VudHJ5KHRtcC0+bmV4dCwKKwkJCQkgIHN0cnVjdCBjZ19jZ3JvdXBfbGluaywKKwkJCQkgIGNncnBfbGlua19saXN0KTsKKwkJbGlzdF9kZWwoJmxpbmstPmNncnBfbGlua19saXN0KTsKKwkJa2ZyZWUobGluayk7CisJfQorfQorCisvKgorICogZmluZF9jc3Nfc2V0KCkgdGFrZXMgYW4gZXhpc3RpbmcgY2dyb3VwIGdyb3VwIGFuZCBhCisgKiBjZ3JvdXAgb2JqZWN0LCBhbmQgcmV0dXJucyBhIGNzc19zZXQgb2JqZWN0IHRoYXQncworICogZXF1aXZhbGVudCB0byB0aGUgb2xkIGdyb3VwLCBidXQgd2l0aCB0aGUgZ2l2ZW4gY2dyb3VwCisgKiBzdWJzdGl0dXRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBoaWVyYXJjaHkuIE11c3QgYmUgY2FsbGVkIHdpdGgKKyAqIGNncm91cF9tdXRleCBoZWxkCisgKi8KKworc3RhdGljIHN0cnVjdCBjc3Nfc2V0ICpmaW5kX2Nzc19zZXQoCisJc3RydWN0IGNzc19zZXQgKm9sZGNnLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCXN0cnVjdCBjc3Nfc2V0ICpyZXM7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnRlbXBsYXRlW0NHUk9VUF9TVUJTWVNfQ09VTlRdOworCWludCBpOworCisJc3RydWN0IGxpc3RfaGVhZCB0bXBfY2dfbGlua3M7CisJc3RydWN0IGNnX2Nncm91cF9saW5rICpsaW5rOworCisJLyogRmlyc3Qgc2VlIGlmIHdlIGFscmVhZHkgaGF2ZSBhIGNncm91cCBncm91cCB0aGF0IG1hdGNoZXMKKwkgKiB0aGUgZGVzaXJlZCBzZXQgKi8KKwl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOworCXJlcyA9IGZpbmRfZXhpc3RpbmdfY3NzX3NldChvbGRjZywgY2dycCwgdGVtcGxhdGUpOworCWlmIChyZXMpCisJCWdldF9jc3Nfc2V0KHJlcyk7CisJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOworCisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKworCXJlcyA9IGttYWxsb2Moc2l6ZW9mKCpyZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBbGxvY2F0ZSBhbGwgdGhlIGNnX2Nncm91cF9saW5rIG9iamVjdHMgdGhhdCB3ZSdsbCBuZWVkICovCisJaWYgKGFsbG9jYXRlX2NnX2xpbmtzKHJvb3RfY291bnQsICZ0bXBfY2dfbGlua3MpIDwgMCkgeworCQlrZnJlZShyZXMpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlrcmVmX2luaXQoJnJlcy0+cmVmKTsKKwlJTklUX0xJU1RfSEVBRCgmcmVzLT5jZ19saW5rcyk7CisJSU5JVF9MSVNUX0hFQUQoJnJlcy0+dGFza3MpOworCisJLyogQ29weSB0aGUgc2V0IG9mIHN1YnN5c3RlbSBzdGF0ZSBvYmplY3RzIGdlbmVyYXRlZCBpbgorCSAqIGZpbmRfZXhpc3RpbmdfY3NzX3NldCgpICovCisJbWVtY3B5KHJlcy0+c3Vic3lzLCB0ZW1wbGF0ZSwgc2l6ZW9mKHJlcy0+c3Vic3lzKSk7CisKKwl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOworCS8qIEFkZCByZWZlcmVuY2UgY291bnRzIGFuZCBsaW5rcyBmcm9tIHRoZSBuZXcgY3NzX3NldC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CisJCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSByZXMtPnN1YnN5c1tpXS0+Y2dyb3VwOworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisJCWF0b21pY19pbmMoJmNncnAtPmNvdW50KTsKKwkJLyoKKwkJICogV2Ugd2FudCB0byBhZGQgYSBsaW5rIG9uY2UgcGVyIGNncm91cCwgc28gd2UKKwkJICogb25seSBkbyBpdCBmb3IgdGhlIGZpcnN0IHN1YnN5c3RlbSBpbiBlYWNoCisJCSAqIGhpZXJhcmNoeQorCQkgKi8KKwkJaWYgKHNzLT5yb290LT5zdWJzeXNfbGlzdC5uZXh0ID09ICZzcy0+c2libGluZykgeworCQkJQlVHX09OKGxpc3RfZW1wdHkoJnRtcF9jZ19saW5rcykpOworCQkJbGluayA9IGxpc3RfZW50cnkodG1wX2NnX2xpbmtzLm5leHQsCisJCQkJCSAgc3RydWN0IGNnX2Nncm91cF9saW5rLAorCQkJCQkgIGNncnBfbGlua19saXN0KTsKKwkJCWxpc3RfZGVsKCZsaW5rLT5jZ3JwX2xpbmtfbGlzdCk7CisJCQlsaXN0X2FkZCgmbGluay0+Y2dycF9saW5rX2xpc3QsICZjZ3JwLT5jc3Nfc2V0cyk7CisJCQlsaW5rLT5jZyA9IHJlczsKKwkJCWxpc3RfYWRkKCZsaW5rLT5jZ19saW5rX2xpc3QsICZyZXMtPmNnX2xpbmtzKTsKKwkJfQorCX0KKwlpZiAobGlzdF9lbXB0eSgmcm9vdG5vZGUuc3Vic3lzX2xpc3QpKSB7CisJCWxpbmsgPSBsaXN0X2VudHJ5KHRtcF9jZ19saW5rcy5uZXh0LAorCQkJCSAgc3RydWN0IGNnX2Nncm91cF9saW5rLAorCQkJCSAgY2dycF9saW5rX2xpc3QpOworCQlsaXN0X2RlbCgmbGluay0+Y2dycF9saW5rX2xpc3QpOworCQlsaXN0X2FkZCgmbGluay0+Y2dycF9saW5rX2xpc3QsICZkdW1teXRvcC0+Y3NzX3NldHMpOworCQlsaW5rLT5jZyA9IHJlczsKKwkJbGlzdF9hZGQoJmxpbmstPmNnX2xpbmtfbGlzdCwgJnJlcy0+Y2dfbGlua3MpOworCX0KKworCUJVR19PTighbGlzdF9lbXB0eSgmdG1wX2NnX2xpbmtzKSk7CisKKwkvKiBMaW5rIHRoaXMgY2dyb3VwIGdyb3VwIGludG8gdGhlIGxpc3QgKi8KKwlsaXN0X2FkZCgmcmVzLT5saXN0LCAmaW5pdF9jc3Nfc2V0Lmxpc3QpOworCWNzc19zZXRfY291bnQrKzsKKwlJTklUX0xJU1RfSEVBRCgmcmVzLT50YXNrcyk7CisJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIFRoZXJlIGlzIG9uZSBnbG9iYWwgY2dyb3VwIG11dGV4LiBXZSBhbHNvIHJlcXVpcmUgdGFraW5nCisgKiB0YXNrX2xvY2soKSB3aGVuIGRlcmVmZXJlbmNpbmcgYSB0YXNrJ3MgY2dyb3VwIHN1YnN5cyBwb2ludGVycy4KKyAqIFNlZSAiVGhlIHRhc2tfbG9jaygpIGV4Y2VwdGlvbiIsIGF0IHRoZSBlbmQgb2YgdGhpcyBjb21tZW50LgorICoKKyAqIEEgdGFzayBtdXN0IGhvbGQgY2dyb3VwX211dGV4IHRvIG1vZGlmeSBjZ3JvdXBzLgorICoKKyAqIEFueSB0YXNrIGNhbiBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCB0aGUgY291bnQgZmllbGQgd2l0aG91dCBsb2NrLgorICogU28gaW4gZ2VuZXJhbCwgY29kZSBob2xkaW5nIGNncm91cF9tdXRleCBjYW4ndCByZWx5IG9uIHRoZSBjb3VudAorICogZmllbGQgbm90IGNoYW5naW5nLiAgSG93ZXZlciwgaWYgdGhlIGNvdW50IGdvZXMgdG8gemVybywgdGhlbiBvbmx5CisgKiBhdHRhY2hfdGFzaygpIGNhbiBpbmNyZW1lbnQgaXQgYWdhaW4uICBCZWNhdXNlIGEgY291bnQgb2YgemVybworICogbWVhbnMgdGhhdCBubyB0YXNrcyBhcmUgY3VycmVudGx5IGF0dGFjaGVkLCB0aGVyZWZvcmUgdGhlcmUgaXMgbm8KKyAqIHdheSBhIHRhc2sgYXR0YWNoZWQgdG8gdGhhdCBjZ3JvdXAgY2FuIGZvcmsgKHRoZSBvdGhlciB3YXkgdG8KKyAqIGluY3JlbWVudCB0aGUgY291bnQpLiAgU28gY29kZSBob2xkaW5nIGNncm91cF9tdXRleCBjYW4gc2FmZWx5CisgKiBhc3N1bWUgdGhhdCBpZiB0aGUgY291bnQgaXMgemVybywgaXQgd2lsbCBzdGF5IHplcm8uIFNpbWlsYXJseSwgaWYKKyAqIGEgdGFzayBob2xkcyBjZ3JvdXBfbXV0ZXggb24gYSBjZ3JvdXAgd2l0aCB6ZXJvIGNvdW50LCBpdAorICoga25vd3MgdGhhdCB0aGUgY2dyb3VwIHdvbid0IGJlIHJlbW92ZWQsIGFzIGNncm91cF9ybWRpcigpCisgKiBuZWVkcyB0aGF0IG11dGV4LgorICoKKyAqIFRoZSBjZ3JvdXBfY29tbW9uX2ZpbGVfd3JpdGUgaGFuZGxlciBmb3Igb3BlcmF0aW9ucyB0aGF0IG1vZGlmeQorICogdGhlIGNncm91cCBoaWVyYXJjaHkgaG9sZHMgY2dyb3VwX211dGV4IGFjcm9zcyB0aGUgZW50aXJlIG9wZXJhdGlvbiwKKyAqIHNpbmdsZSB0aHJlYWRpbmcgYWxsIHN1Y2ggY2dyb3VwIG1vZGlmaWNhdGlvbnMgYWNyb3NzIHRoZSBzeXN0ZW0uCisgKgorICogVGhlIGZvcmsgYW5kIGV4aXQgY2FsbGJhY2tzIGNncm91cF9mb3JrKCkgYW5kIGNncm91cF9leGl0KCksIGRvbid0CisgKiAodXN1YWxseSkgdGFrZSBjZ3JvdXBfbXV0ZXguICBUaGVzZSBhcmUgdGhlIHR3byBtb3N0IHBlcmZvcm1hbmNlCisgKiBjcml0aWNhbCBwaWVjZXMgb2YgY29kZSBoZXJlLiAgVGhlIGV4Y2VwdGlvbiBvY2N1cnMgb24gY2dyb3VwX2V4aXQoKSwKKyAqIHdoZW4gYSB0YXNrIGluIGEgbm90aWZ5X29uX3JlbGVhc2UgY2dyb3VwIGV4aXRzLiAgVGhlbiBjZ3JvdXBfbXV0ZXgKKyAqIGlzIHRha2VuLCBhbmQgaWYgdGhlIGNncm91cCBjb3VudCBpcyB6ZXJvLCBhIHVzZXJtb2RlIGNhbGwgbWFkZQorICogdG8gL3NiaW4vY2dyb3VwX3JlbGVhc2VfYWdlbnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY2dyb3VwIChwYXRoCisgKiByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiBjZ3JvdXAgZmlsZSBzeXN0ZW0pIGFzIHRoZSBhcmd1bWVudC4KKyAqCisgKiBBIGNncm91cCBjYW4gb25seSBiZSBkZWxldGVkIGlmIGJvdGggaXRzICdjb3VudCcgb2YgdXNpbmcgdGFza3MKKyAqIGlzIHplcm8sIGFuZCBpdHMgbGlzdCBvZiAnY2hpbGRyZW4nIGNncm91cHMgaXMgZW1wdHkuICBTaW5jZSBhbGwKKyAqIHRhc2tzIGluIHRoZSBzeXN0ZW0gdXNlIF9zb21lXyBjZ3JvdXAsIGFuZCBzaW5jZSB0aGVyZSBpcyBhbHdheXMgYXQKKyAqIGxlYXN0IG9uZSB0YXNrIGluIHRoZSBzeXN0ZW0gKGluaXQsIHBpZCA9PSAxKSwgdGhlcmVmb3JlLCB0b3BfY2dyb3VwCisgKiBhbHdheXMgaGFzIGVpdGhlciBjaGlsZHJlbiBjZ3JvdXBzIGFuZC9vciB1c2luZyB0YXNrcy4gIFNvIHdlIGRvbid0CisgKiBuZWVkIGEgc3BlY2lhbCBoYWNrIHRvIGVuc3VyZSB0aGF0IHRvcF9jZ3JvdXAgY2Fubm90IGJlIGRlbGV0ZWQuCisgKgorICoJVGhlIHRhc2tfbG9jaygpIGV4Y2VwdGlvbgorICoKKyAqIFRoZSBuZWVkIGZvciB0aGlzIGV4Y2VwdGlvbiBhcmlzZXMgZnJvbSB0aGUgYWN0aW9uIG9mCisgKiBhdHRhY2hfdGFzaygpLCB3aGljaCBvdmVyd3JpdGVzIG9uZSB0YXNrcyBjZ3JvdXAgcG9pbnRlciB3aXRoCisgKiBhbm90aGVyLiAgSXQgZG9lcyBzbyB1c2luZyBjZ3JvdXBfbXV0ZXhlLCBob3dldmVyIHRoZXJlIGFyZQorICogc2V2ZXJhbCBwZXJmb3JtYW5jZSBjcml0aWNhbCBwbGFjZXMgdGhhdCBuZWVkIHRvIHJlZmVyZW5jZQorICogdGFzay0+Y2dyb3VwIHdpdGhvdXQgdGhlIGV4cGVuc2Ugb2YgZ3JhYmJpbmcgYSBzeXN0ZW0gZ2xvYmFsCisgKiBtdXRleC4gIFRoZXJlZm9yZSBleGNlcHQgYXMgbm90ZWQgYmVsb3csIHdoZW4gZGVyZWZlcmVuY2luZyBvciwgYXMKKyAqIGluIGF0dGFjaF90YXNrKCksIG1vZGlmeWluZyBhIHRhc2snc3MgY2dyb3VwIHBvaW50ZXIgd2UgdXNlCisgKiB0YXNrX2xvY2soKSwgd2hpY2ggYWN0cyBvbiBhIHNwaW5sb2NrICh0YXNrLT5hbGxvY19sb2NrKSBhbHJlYWR5IGluCisgKiB0aGUgdGFza19zdHJ1Y3Qgcm91dGluZWx5IHVzZWQgZm9yIHN1Y2ggbWF0dGVycy4KKyAqCisgKiBQLlMuICBPbmUgbW9yZSBsb2NraW5nIGV4Y2VwdGlvbi4gIFJDVSBpcyB1c2VkIHRvIGd1YXJkIHRoZQorICogdXBkYXRlIG9mIGEgdGFza3MgY2dyb3VwIHBvaW50ZXIgYnkgYXR0YWNoX3Rhc2soKQorICovCisKKy8qKgorICogY2dyb3VwX2xvY2sgLSBsb2NrIG91dCBhbnkgY2hhbmdlcyB0byBjZ3JvdXAgc3RydWN0dXJlcworICoKKyAqLworCit2b2lkIGNncm91cF9sb2NrKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKK30KKworLyoqCisgKiBjZ3JvdXBfdW5sb2NrIC0gcmVsZWFzZSBsb2NrIG9uIGNncm91cCBjaGFuZ2VzCisgKgorICogVW5kbyB0aGUgbG9jayB0YWtlbiBpbiBhIHByZXZpb3VzIGNncm91cF9sb2NrKCkgY2FsbC4KKyAqLworCit2b2lkIGNncm91cF91bmxvY2sodm9pZCkKK3sKKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7Cit9CisKKy8qCisgKiBBIGNvdXBsZSBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucyByZXF1aXJlZCwgZHVlIHRvIGN5Y2xpYyByZWZlcmVuY2UgbG9vcDoKKyAqIGNncm91cF9ta2RpciAtPiBjZ3JvdXBfY3JlYXRlIC0+IGNncm91cF9wb3B1bGF0ZV9kaXIgLT4KKyAqIGNncm91cF9hZGRfZmlsZSAtPiBjZ3JvdXBfY3JlYXRlX2ZpbGUgLT4gY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zCisgKiAtPiBjZ3JvdXBfbWtkaXIuCisgKi8KKworc3RhdGljIGludCBjZ3JvdXBfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpOworc3RhdGljIGludCBjZ3JvdXBfcm1kaXIoc3RydWN0IGlub2RlICp1bnVzZWRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworc3RhdGljIGludCBjZ3JvdXBfcG9wdWxhdGVfZGlyKHN0cnVjdCBjZ3JvdXAgKmNncnApOworc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNncm91cF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKKworc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGNncm91cF9iYWNraW5nX2Rldl9pbmZvID0geworCS5jYXBhYmlsaXRpZXMJPSBCRElfQ0FQX05PX0FDQ1RfRElSVFkgfCBCRElfQ0FQX05PX1dSSVRFQkFDSywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmNncm91cF9uZXdfaW5vZGUobW9kZV90IG1vZGUsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG5ld19pbm9kZShzYik7CisKKwlpZiAoaW5vZGUpIHsKKwkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOworCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKKwkJaW5vZGUtPmlfYmxvY2tzID0gMDsKKwkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJmNncm91cF9iYWNraW5nX2Rldl9pbmZvOworCX0KKwlyZXR1cm4gaW5vZGU7Cit9CisKK3N0YXRpYyB2b2lkIGNncm91cF9kaXB1dChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJLyogaXMgZGVudHJ5IGEgZGlyZWN0b3J5ID8gaWYgc28sIGtmcmVlKCkgYXNzb2NpYXRlZCBjZ3JvdXAgKi8KKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gZGVudHJ5LT5kX2ZzZGF0YTsKKwkJQlVHX09OKCEoY2dyb3VwX2lzX3JlbW92ZWQoY2dycCkpKTsKKwkJLyogSXQncyBwb3NzaWJsZSBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gYmUgaG9sZGluZyBjc3MKKwkJICogcmVmZXJlbmNlIGNvdW50cyBvbiBhIGNncm91cDsgY3NzX3B1dCgpIG5lZWRzIHRvCisJCSAqIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBjZ3JvdXAgYWZ0ZXIgZGVjcmVtZW50aW5nCisJCSAqIHRoZSByZWZlcmVuY2UgY291bnQgaW4gb3JkZXIgdG8ga25vdyBpZiBpdCBuZWVkcyB0bworCQkgKiBxdWV1ZSB0aGUgY2dyb3VwIHRvIGJlIGhhbmRsZWQgYnkgdGhlIHJlbGVhc2UKKwkJICogYWdlbnQgKi8KKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWtmcmVlKGNncnApOworCX0KKwlpcHV0KGlub2RlKTsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2RpcihzdHJ1Y3QgZGVudHJ5ICpkKQoreworCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRnZXQoZC0+ZF9wYXJlbnQpOworCisJZF9kZWxldGUoZCk7CisJc2ltcGxlX3JtZGlyKHBhcmVudC0+ZF9pbm9kZSwgZCk7CisJZHB1dChwYXJlbnQpOworfQorCitzdGF0aWMgdm9pZCBjZ3JvdXBfY2xlYXJfZGlyZWN0b3J5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOworCisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCkpOworCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOworCW5vZGUgPSBkZW50cnktPmRfc3ViZGlycy5uZXh0OworCXdoaWxlIChub2RlICE9ICZkZW50cnktPmRfc3ViZGlycykgeworCQlzdHJ1Y3QgZGVudHJ5ICpkID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7CisJCWxpc3RfZGVsX2luaXQobm9kZSk7CisJCWlmIChkLT5kX2lub2RlKSB7CisJCQkvKiBUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgb24gYSBjZ3JvdXAKKwkJCSAqIGRpcmVjdG9yeSB3aXRoIGNoaWxkIGNncm91cHMgKi8KKwkJCUJVR19PTihkLT5kX2lub2RlLT5pX21vZGUgJiBTX0lGRElSKTsKKwkJCWQgPSBkZ2V0X2xvY2tlZChkKTsKKwkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlkX2RlbGV0ZShkKTsKKwkJCXNpbXBsZV91bmxpbmsoZGVudHJ5LT5kX2lub2RlLCBkKTsKKwkJCWRwdXQoZCk7CisJCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwkJfQorCQlub2RlID0gZGVudHJ5LT5kX3N1YmRpcnMubmV4dDsKKwl9CisJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKK30KKworLyoKKyAqIE5PVEUgOiB0aGUgZGVudHJ5IG11c3QgaGF2ZSBiZWVuIGRnZXQoKSdlZAorICovCitzdGF0aWMgdm9pZCBjZ3JvdXBfZF9yZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwljZ3JvdXBfY2xlYXJfZGlyZWN0b3J5KGRlbnRyeSk7CisKKwlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlsaXN0X2RlbF9pbml0KCZkZW50cnktPmRfdS5kX2NoaWxkKTsKKwlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOworCXJlbW92ZV9kaXIoZGVudHJ5KTsKK30KKworc3RhdGljIGludCByZWJpbmRfc3Vic3lzdGVtcyhzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmluYWxfYml0cykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZGVkX2JpdHMsIHJlbW92ZWRfYml0czsKKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwID0gJnJvb3QtPnRvcF9jZ3JvdXA7CisJaW50IGk7CisKKwlyZW1vdmVkX2JpdHMgPSByb290LT5hY3R1YWxfc3Vic3lzX2JpdHMgJiB+ZmluYWxfYml0czsKKwlhZGRlZF9iaXRzID0gZmluYWxfYml0cyAmIH5yb290LT5hY3R1YWxfc3Vic3lzX2JpdHM7CisJLyogQ2hlY2sgdGhhdCBhbnkgYWRkZWQgc3Vic3lzdGVtcyBhcmUgY3VycmVudGx5IGZyZWUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgbG9uZyBiaXQgPSAxdWxsIDw8IGk7CisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyA9IHN1YnN5c1tpXTsKKwkJaWYgKCEoYml0ICYgYWRkZWRfYml0cykpCisJCQljb250aW51ZTsKKwkJaWYgKHNzLT5yb290ICE9ICZyb290bm9kZSkgeworCQkJLyogU3Vic3lzdGVtIGlzbid0IGZyZWUgKi8KKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisKKwkvKiBDdXJyZW50bHkgd2UgZG9uJ3QgaGFuZGxlIGFkZGluZy9yZW1vdmluZyBzdWJzeXN0ZW1zIHdoZW4KKwkgKiBhbnkgY2hpbGQgY2dyb3VwcyBleGlzdC4gVGhpcyBpcyB0aGVvcmV0aWNhbGx5IHN1cHBvcnRhYmxlCisJICogYnV0IGludm9sdmVzIGNvbXBsZXggZXJyb3IgaGFuZGxpbmcsIHNvIGl0J3MgYmVpbmcgbGVmdCB1bnRpbAorCSAqIGxhdGVyICovCisJaWYgKCFsaXN0X2VtcHR5KCZjZ3JwLT5jaGlsZHJlbikpCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBQcm9jZXNzIGVhY2ggc3Vic3lzdGVtICovCisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisJCXVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IGk7CisJCWlmIChiaXQgJiBhZGRlZF9iaXRzKSB7CisJCQkvKiBXZSdyZSBiaW5kaW5nIHRoaXMgc3Vic3lzdGVtIHRvIHRoaXMgaGllcmFyY2h5ICovCisJCQlCVUdfT04oY2dycC0+c3Vic3lzW2ldKTsKKwkJCUJVR19PTighZHVtbXl0b3AtPnN1YnN5c1tpXSk7CisJCQlCVUdfT04oZHVtbXl0b3AtPnN1YnN5c1tpXS0+Y2dyb3VwICE9IGR1bW15dG9wKTsKKwkJCWNncnAtPnN1YnN5c1tpXSA9IGR1bW15dG9wLT5zdWJzeXNbaV07CisJCQljZ3JwLT5zdWJzeXNbaV0tPmNncm91cCA9IGNncnA7CisJCQlsaXN0X2FkZCgmc3MtPnNpYmxpbmcsICZyb290LT5zdWJzeXNfbGlzdCk7CisJCQlyY3VfYXNzaWduX3BvaW50ZXIoc3MtPnJvb3QsIHJvb3QpOworCQkJaWYgKHNzLT5iaW5kKQorCQkJCXNzLT5iaW5kKHNzLCBjZ3JwKTsKKworCQl9IGVsc2UgaWYgKGJpdCAmIHJlbW92ZWRfYml0cykgeworCQkJLyogV2UncmUgcmVtb3ZpbmcgdGhpcyBzdWJzeXN0ZW0gKi8KKwkJCUJVR19PTihjZ3JwLT5zdWJzeXNbaV0gIT0gZHVtbXl0b3AtPnN1YnN5c1tpXSk7CisJCQlCVUdfT04oY2dycC0+c3Vic3lzW2ldLT5jZ3JvdXAgIT0gY2dycCk7CisJCQlpZiAoc3MtPmJpbmQpCisJCQkJc3MtPmJpbmQoc3MsIGR1bW15dG9wKTsKKwkJCWR1bW15dG9wLT5zdWJzeXNbaV0tPmNncm91cCA9IGR1bW15dG9wOworCQkJY2dycC0+c3Vic3lzW2ldID0gTlVMTDsKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihzdWJzeXNbaV0tPnJvb3QsICZyb290bm9kZSk7CisJCQlsaXN0X2RlbCgmc3MtPnNpYmxpbmcpOworCQl9IGVsc2UgaWYgKGJpdCAmIGZpbmFsX2JpdHMpIHsKKwkJCS8qIFN1YnN5c3RlbSBzdGF0ZSBzaG91bGQgYWxyZWFkeSBleGlzdCAqLworCQkJQlVHX09OKCFjZ3JwLT5zdWJzeXNbaV0pOworCQl9IGVsc2UgeworCQkJLyogU3Vic3lzdGVtIHN0YXRlIHNob3VsZG4ndCBleGlzdCAqLworCQkJQlVHX09OKGNncnAtPnN1YnN5c1tpXSk7CisJCX0KKwl9CisJcm9vdC0+c3Vic3lzX2JpdHMgPSByb290LT5hY3R1YWxfc3Vic3lzX2JpdHMgPSBmaW5hbF9iaXRzOworCXN5bmNocm9uaXplX3JjdSgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2dyb3VwX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IHZmc21vdW50ICp2ZnMpCit7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QgPSB2ZnMtPm1udF9zYi0+c19mc19pbmZvOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzczsKKworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKQorCQlzZXFfcHJpbnRmKHNlcSwgIiwlcyIsIHNzLT5uYW1lKTsKKwlpZiAodGVzdF9iaXQoUk9PVF9OT1BSRUZJWCwgJnJvb3QtPmZsYWdzKSkKKwkJc2VxX3B1dHMoc2VxLCAiLG5vcHJlZml4Iik7CisJaWYgKHN0cmxlbihyb290LT5yZWxlYXNlX2FnZW50X3BhdGgpKQorCQlzZXFfcHJpbnRmKHNlcSwgIixyZWxlYXNlX2FnZW50PSVzIiwgcm9vdC0+cmVsZWFzZV9hZ2VudF9wYXRoKTsKKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjZ3JvdXBfc2Jfb3B0cyB7CisJdW5zaWduZWQgbG9uZyBzdWJzeXNfYml0czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgKnJlbGVhc2VfYWdlbnQ7Cit9OworCisvKiBDb252ZXJ0IGEgaGllcmFyY2h5IHNwZWNpZmllciBpbnRvIGEgYml0bWFzayBvZiBzdWJzeXN0ZW1zIGFuZAorICogZmxhZ3MuICovCitzdGF0aWMgaW50IHBhcnNlX2Nncm91cGZzX29wdGlvbnMoY2hhciAqZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBjZ3JvdXBfc2Jfb3B0cyAqb3B0cykKK3sKKwljaGFyICp0b2tlbiwgKm8gPSBkYXRhID86ICJhbGwiOworCisJb3B0cy0+c3Vic3lzX2JpdHMgPSAwOworCW9wdHMtPmZsYWdzID0gMDsKKwlvcHRzLT5yZWxlYXNlX2FnZW50ID0gTlVMTDsKKworCXdoaWxlICgodG9rZW4gPSBzdHJzZXAoJm8sICIsIikpICE9IE5VTEwpIHsKKwkJaWYgKCEqdG9rZW4pCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCFzdHJjbXAodG9rZW4sICJhbGwiKSkgeworCQkJb3B0cy0+c3Vic3lzX2JpdHMgPSAoMSA8PCBDR1JPVVBfU1VCU1lTX0NPVU5UKSAtIDE7CisJCX0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgIm5vcHJlZml4IikpIHsKKwkJCXNldF9iaXQoUk9PVF9OT1BSRUZJWCwgJm9wdHMtPmZsYWdzKTsKKwkJfSBlbHNlIGlmICghc3RybmNtcCh0b2tlbiwgInJlbGVhc2VfYWdlbnQ9IiwgMTQpKSB7CisJCQkvKiBTcGVjaWZ5aW5nIHR3byByZWxlYXNlIGFnZW50cyBpcyBmb3JiaWRkZW4gKi8KKwkJCWlmIChvcHRzLT5yZWxlYXNlX2FnZW50KQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJb3B0cy0+cmVsZWFzZV9hZ2VudCA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOworCQkJaWYgKCFvcHRzLT5yZWxlYXNlX2FnZW50KQorCQkJCXJldHVybiAtRU5PTUVNOworCQkJc3RybmNweShvcHRzLT5yZWxlYXNlX2FnZW50LCB0b2tlbiArIDE0LCBQQVRIX01BWCAtIDEpOworCQkJb3B0cy0+cmVsZWFzZV9hZ2VudFtQQVRIX01BWCAtIDFdID0gMDsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzczsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQkJCXNzID0gc3Vic3lzW2ldOworCQkJCWlmICghc3RyY21wKHRva2VuLCBzcy0+bmFtZSkpIHsKKwkJCQkJc2V0X2JpdChpLCAmb3B0cy0+c3Vic3lzX2JpdHMpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoaSA9PSBDR1JPVVBfU1VCU1lTX0NPVU5UKQorCQkJCXJldHVybiAtRU5PRU5UOworCQl9CisJfQorCisJLyogV2UgY2FuJ3QgaGF2ZSBhbiBlbXB0eSBoaWVyYXJjaHkgKi8KKwlpZiAoIW9wdHMtPnN1YnN5c19iaXRzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNncm91cF9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSAmcm9vdC0+dG9wX2Nncm91cDsKKwlzdHJ1Y3QgY2dyb3VwX3NiX29wdHMgb3B0czsKKworCW11dGV4X2xvY2soJmNncnAtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKKworCS8qIFNlZSB3aGF0IHN1YnN5c3RlbXMgYXJlIHdhbnRlZCAqLworCXJldCA9IHBhcnNlX2Nncm91cGZzX29wdGlvbnMoZGF0YSwgJm9wdHMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCS8qIERvbid0IGFsbG93IGZsYWdzIHRvIGNoYW5nZSBhdCByZW1vdW50ICovCisJaWYgKG9wdHMuZmxhZ3MgIT0gcm9vdC0+ZmxhZ3MpIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXJldCA9IHJlYmluZF9zdWJzeXN0ZW1zKHJvb3QsIG9wdHMuc3Vic3lzX2JpdHMpOworCisJLyogKHJlKXBvcHVsYXRlIHN1YnN5c3RlbSBmaWxlcyAqLworCWlmICghcmV0KQorCQljZ3JvdXBfcG9wdWxhdGVfZGlyKGNncnApOworCisJaWYgKG9wdHMucmVsZWFzZV9hZ2VudCkKKwkJc3RyY3B5KHJvb3QtPnJlbGVhc2VfYWdlbnRfcGF0aCwgb3B0cy5yZWxlYXNlX2FnZW50KTsKKyBvdXRfdW5sb2NrOgorCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCisJCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCW11dGV4X3VubG9jaygmY2dycC0+ZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY2dyb3VwX29wcyA9IHsKKwkuc3RhdGZzID0gc2ltcGxlX3N0YXRmcywKKwkuZHJvcF9pbm9kZSA9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAorCS5zaG93X29wdGlvbnMgPSBjZ3JvdXBfc2hvd19vcHRpb25zLAorCS5yZW1vdW50X2ZzID0gY2dyb3VwX3JlbW91bnQsCit9OworCitzdGF0aWMgdm9pZCBpbml0X2Nncm91cF9yb290KHN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290KQoreworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSAmcm9vdC0+dG9wX2Nncm91cDsKKwlJTklUX0xJU1RfSEVBRCgmcm9vdC0+c3Vic3lzX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZyb290LT5yb290X2xpc3QpOworCXJvb3QtPm51bWJlcl9vZl9jZ3JvdXBzID0gMTsKKwljZ3JwLT5yb290ID0gcm9vdDsKKwljZ3JwLT50b3BfY2dyb3VwID0gY2dycDsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+c2libGluZyk7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNoaWxkcmVuKTsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+Y3NzX3NldHMpOworCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworfQorCitzdGF0aWMgaW50IGNncm91cF90ZXN0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKm5ldyA9IGRhdGE7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QgPSBzYi0+c19mc19pbmZvOworCisJLyogRmlyc3QgY2hlY2sgc3Vic3lzdGVtcyAqLworCWlmIChuZXctPnN1YnN5c19iaXRzICE9IHJvb3QtPnN1YnN5c19iaXRzKQorCSAgICByZXR1cm4gMDsKKworCS8qIE5leHQgY2hlY2sgZmxhZ3MgKi8KKwlpZiAobmV3LT5mbGFncyAhPSByb290LT5mbGFncykKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjZ3JvdXBfc2V0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCA9IGRhdGE7CisKKwlyZXQgPSBzZXRfYW5vbl9zdXBlcihzYiwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNiLT5zX2ZzX2luZm8gPSByb290OworCXJvb3QtPnNiID0gc2I7CisKKwlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOworCXNiLT5zX21hZ2ljID0gQ0dST1VQX1NVUEVSX01BR0lDOworCXNiLT5zX29wID0gJmNncm91cF9vcHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZ3JvdXBfZ2V0X3Jvb3RkaXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0KKwkJY2dyb3VwX25ld19pbm9kZShTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08gfCBTX0lXVVNSLCBzYik7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKKwlpbm9kZS0+aV9vcCA9ICZjZ3JvdXBfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJLyogZGlyZWN0b3JpZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLworCWluY19ubGluayhpbm9kZSk7CisJZGVudHJ5ID0gZF9hbGxvY19yb290KGlub2RlKTsKKwlpZiAoIWRlbnRyeSkgeworCQlpcHV0KGlub2RlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNiLT5zX3Jvb3QgPSBkZW50cnk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2dyb3VwX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwkJCSBpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKnVudXNlZF9kZXZfbmFtZSwKKwkJCSB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlzdHJ1Y3QgY2dyb3VwX3NiX29wdHMgb3B0czsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290OworCXN0cnVjdCBsaXN0X2hlYWQgdG1wX2NnX2xpbmtzLCAqbDsKKwlJTklUX0xJU1RfSEVBRCgmdG1wX2NnX2xpbmtzKTsKKworCS8qIEZpcnN0IGZpbmQgdGhlIGRlc2lyZWQgc2V0IG9mIHN1YnN5c3RlbXMgKi8KKwlyZXQgPSBwYXJzZV9jZ3JvdXBmc19vcHRpb25zKGRhdGEsICZvcHRzKTsKKwlpZiAocmV0KSB7CisJCWlmIChvcHRzLnJlbGVhc2VfYWdlbnQpCisJCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJvb3QgPSBremFsbG9jKHNpemVvZigqcm9vdCksIEdGUF9LRVJORUwpOworCWlmICghcm9vdCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpbml0X2Nncm91cF9yb290KHJvb3QpOworCXJvb3QtPnN1YnN5c19iaXRzID0gb3B0cy5zdWJzeXNfYml0czsKKwlyb290LT5mbGFncyA9IG9wdHMuZmxhZ3M7CisJaWYgKG9wdHMucmVsZWFzZV9hZ2VudCkgeworCQlzdHJjcHkocm9vdC0+cmVsZWFzZV9hZ2VudF9wYXRoLCBvcHRzLnJlbGVhc2VfYWdlbnQpOworCQlrZnJlZShvcHRzLnJlbGVhc2VfYWdlbnQpOworCX0KKworCXNiID0gc2dldChmc190eXBlLCBjZ3JvdXBfdGVzdF9zdXBlciwgY2dyb3VwX3NldF9zdXBlciwgcm9vdCk7CisKKwlpZiAoSVNfRVJSKHNiKSkgeworCQlrZnJlZShyb290KTsKKwkJcmV0dXJuIFBUUl9FUlIoc2IpOworCX0KKworCWlmIChzYi0+c19mc19pbmZvICE9IHJvb3QpIHsKKwkJLyogUmV1c2luZyBhbiBleGlzdGluZyBzdXBlcmJsb2NrICovCisJCUJVR19PTihzYi0+c19yb290ID09IE5VTEwpOworCQlrZnJlZShyb290KTsKKwkJcm9vdCA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyogTmV3IHN1cGVyYmxvY2sgKi8KKwkJc3RydWN0IGNncm91cCAqY2dycCA9ICZyb290LT50b3BfY2dyb3VwOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJCUJVR19PTihzYi0+c19yb290ICE9IE5VTEwpOworCisJCXJldCA9IGNncm91cF9nZXRfcm9vdGRpcihzYik7CisJCWlmIChyZXQpCisJCQlnb3RvIGRyb3BfbmV3X3N1cGVyOworCQlpbm9kZSA9IHNiLT5zX3Jvb3QtPmRfaW5vZGU7CisKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCisJCS8qCisJCSAqIFdlJ3JlIGFjY2Vzc2luZyBjc3Nfc2V0X2NvdW50IHdpdGhvdXQgbG9ja2luZworCQkgKiBjc3Nfc2V0X2xvY2sgaGVyZSwgYnV0IHRoYXQncyBPSyAtIGl0IGNhbiBvbmx5IGJlCisJCSAqIGluY3JlYXNlZCBieSBzb21lb25lIGhvbGRpbmcgY2dyb3VwX2xvY2ssIGFuZAorCQkgKiB0aGF0J3MgdXMuIFRoZSB3b3JzdCB0aGF0IGNhbiBoYXBwZW4gaXMgdGhhdCB3ZQorCQkgKiBoYXZlIHNvbWUgbGluayBzdHJ1Y3R1cmVzIGxlZnQgb3ZlcgorCQkgKi8KKwkJcmV0ID0gYWxsb2NhdGVfY2dfbGlua3MoY3NzX3NldF9jb3VudCwgJnRtcF9jZ19saW5rcyk7CisJCWlmIChyZXQpIHsKKwkJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJZ290byBkcm9wX25ld19zdXBlcjsKKwkJfQorCisJCXJldCA9IHJlYmluZF9zdWJzeXN0ZW1zKHJvb3QsIHJvb3QtPnN1YnN5c19iaXRzKTsKKwkJaWYgKHJldCA9PSAtRUJVU1kpIHsKKwkJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJZ290byBkcm9wX25ld19zdXBlcjsKKwkJfQorCisJCS8qIEVCVVNZIHNob3VsZCBiZSB0aGUgb25seSBlcnJvciBoZXJlICovCisJCUJVR19PTihyZXQpOworCisJCWxpc3RfYWRkKCZyb290LT5yb290X2xpc3QsICZyb290cyk7CisJCXJvb3RfY291bnQrKzsKKworCQlzYi0+c19yb290LT5kX2ZzZGF0YSA9ICZyb290LT50b3BfY2dyb3VwOworCQlyb290LT50b3BfY2dyb3VwLmRlbnRyeSA9IHNiLT5zX3Jvb3Q7CisKKwkJLyogTGluayB0aGUgdG9wIGNncm91cCBpbiB0aGlzIGhpZXJhcmNoeSBpbnRvIGFsbAorCQkgKiB0aGUgY3NzX3NldCBvYmplY3RzICovCisJCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJCWwgPSAmaW5pdF9jc3Nfc2V0Lmxpc3Q7CisJCWRvIHsKKwkJCXN0cnVjdCBjc3Nfc2V0ICpjZzsKKwkJCXN0cnVjdCBjZ19jZ3JvdXBfbGluayAqbGluazsKKwkJCWNnID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgY3NzX3NldCwgbGlzdCk7CisJCQlCVUdfT04obGlzdF9lbXB0eSgmdG1wX2NnX2xpbmtzKSk7CisJCQlsaW5rID0gbGlzdF9lbnRyeSh0bXBfY2dfbGlua3MubmV4dCwKKwkJCQkJICBzdHJ1Y3QgY2dfY2dyb3VwX2xpbmssCisJCQkJCSAgY2dycF9saW5rX2xpc3QpOworCQkJbGlzdF9kZWwoJmxpbmstPmNncnBfbGlua19saXN0KTsKKwkJCWxpbmstPmNnID0gY2c7CisJCQlsaXN0X2FkZCgmbGluay0+Y2dycF9saW5rX2xpc3QsCisJCQkJICZyb290LT50b3BfY2dyb3VwLmNzc19zZXRzKTsKKwkJCWxpc3RfYWRkKCZsaW5rLT5jZ19saW5rX2xpc3QsICZjZy0+Y2dfbGlua3MpOworCQkJbCA9IGwtPm5leHQ7CisJCX0gd2hpbGUgKGwgIT0gJmluaXRfY3NzX3NldC5saXN0KTsKKwkJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOworCisJCWZyZWVfY2dfbGlua3MoJnRtcF9jZ19saW5rcyk7CisKKwkJQlVHX09OKCFsaXN0X2VtcHR5KCZjZ3JwLT5zaWJsaW5nKSk7CisJCUJVR19PTighbGlzdF9lbXB0eSgmY2dycC0+Y2hpbGRyZW4pKTsKKwkJQlVHX09OKHJvb3QtPm51bWJlcl9vZl9jZ3JvdXBzICE9IDEpOworCisJCWNncm91cF9wb3B1bGF0ZV9kaXIoY2dycCk7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJfQorCisJcmV0dXJuIHNpbXBsZV9zZXRfbW50KG1udCwgc2IpOworCisgZHJvcF9uZXdfc3VwZXI6CisJdXBfd3JpdGUoJnNiLT5zX3Vtb3VudCk7CisJZGVhY3RpdmF0ZV9zdXBlcihzYik7CisJZnJlZV9jZ19saW5rcygmdG1wX2NnX2xpbmtzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjZ3JvdXBfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKSB7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3QgPSBzYi0+c19mc19pbmZvOworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSAmcm9vdC0+dG9wX2Nncm91cDsKKwlpbnQgcmV0OworCisJQlVHX09OKCFyb290KTsKKworCUJVR19PTihyb290LT5udW1iZXJfb2ZfY2dyb3VwcyAhPSAxKTsKKwlCVUdfT04oIWxpc3RfZW1wdHkoJmNncnAtPmNoaWxkcmVuKSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZjZ3JwLT5zaWJsaW5nKSk7CisKKwltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCisJLyogUmViaW5kIGFsbCBzdWJzeXN0ZW1zIGJhY2sgdG8gdGhlIGRlZmF1bHQgaGllcmFyY2h5ICovCisJcmV0ID0gcmViaW5kX3N1YnN5c3RlbXMocm9vdCwgMCk7CisJLyogU2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCAuLi4gKi8KKwlCVUdfT04ocmV0KTsKKworCS8qCisJICogUmVsZWFzZSBhbGwgdGhlIGxpbmtzIGZyb20gY3NzX3NldHMgdG8gdGhpcyBoaWVyYXJjaHkncworCSAqIHJvb3QgY2dyb3VwCisJICovCisJd3JpdGVfbG9jaygmY3NzX3NldF9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmNncnAtPmNzc19zZXRzKSkgeworCQlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CisJCWxpbmsgPSBsaXN0X2VudHJ5KGNncnAtPmNzc19zZXRzLm5leHQsCisJCQkJICBzdHJ1Y3QgY2dfY2dyb3VwX2xpbmssIGNncnBfbGlua19saXN0KTsKKwkJbGlzdF9kZWwoJmxpbmstPmNnX2xpbmtfbGlzdCk7CisJCWxpc3RfZGVsKCZsaW5rLT5jZ3JwX2xpbmtfbGlzdCk7CisJCWtmcmVlKGxpbmspOworCX0KKwl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CisKKwlpZiAoIWxpc3RfZW1wdHkoJnJvb3QtPnJvb3RfbGlzdCkpIHsKKwkJbGlzdF9kZWwoJnJvb3QtPnJvb3RfbGlzdCk7CisJCXJvb3RfY291bnQtLTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCisJa2ZyZWUocm9vdCk7CisJa2lsbF9saXR0ZXJfc3VwZXIoc2IpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgY2dyb3VwX2ZzX3R5cGUgPSB7CisJLm5hbWUgPSAiY2dyb3VwIiwKKwkuZ2V0X3NiID0gY2dyb3VwX2dldF9zYiwKKwkua2lsbF9zYiA9IGNncm91cF9raWxsX3NiLAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2dyb3VwICpfX2RfY2dycChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIGRlbnRyeS0+ZF9mc2RhdGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmdHlwZSAqX19kX2NmdChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJcmV0dXJuIGRlbnRyeS0+ZF9mc2RhdGE7Cit9CisKKy8qCisgKiBDYWxsZWQgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gIFdyaXRlcyBwYXRoIG9mIGNncm91cCBpbnRvIGJ1Zi4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IuCisgKi8KK2ludCBjZ3JvdXBfcGF0aChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjaGFyICpidWYsIGludCBidWZsZW4pCit7CisJY2hhciAqc3RhcnQ7CisKKwlpZiAoY2dycCA9PSBkdW1teXRvcCkgeworCQkvKgorCQkgKiBJbmFjdGl2ZSBzdWJzeXN0ZW1zIGhhdmUgbm8gZGVudHJ5IGZvciB0aGVpciByb290CisJCSAqIGNncm91cAorCQkgKi8KKwkJc3RyY3B5KGJ1ZiwgIi8iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJc3RhcnQgPSBidWYgKyBidWZsZW47CisKKwkqLS1zdGFydCA9ICdcMCc7CisJZm9yICg7OykgeworCQlpbnQgbGVuID0gY2dycC0+ZGVudHJ5LT5kX25hbWUubGVuOworCQlpZiAoKHN0YXJ0IC09IGxlbikgPCBidWYpCisJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKwkJbWVtY3B5KHN0YXJ0LCBjZ3JwLT5kZW50cnktPmRfbmFtZS5uYW1lLCBsZW4pOworCQljZ3JwID0gY2dycC0+cGFyZW50OworCQlpZiAoIWNncnApCisJCQlicmVhazsKKwkJaWYgKCFjZ3JwLT5wYXJlbnQpCisJCQljb250aW51ZTsKKwkJaWYgKC0tc3RhcnQgPCBidWYpCisJCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKwkJKnN0YXJ0ID0gJy8nOworCX0KKwltZW1tb3ZlKGJ1Ziwgc3RhcnQsIGJ1ZiArIGJ1ZmxlbiAtIHN0YXJ0KTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJldHVybiB0aGUgZmlyc3Qgc3Vic3lzdGVtIGF0dGFjaGVkIHRvIGEgY2dyb3VwJ3MgaGllcmFyY2h5LCBhbmQKKyAqIGl0cyBzdWJzeXN0ZW0gaWQuCisgKi8KKworc3RhdGljIHZvaWQgZ2V0X2ZpcnN0X3N1YnN5cyhjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKipjc3MsIGludCAqc3Vic3lzX2lkKQoreworCWNvbnN0IHN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290ID0gY2dycC0+cm9vdDsKKwljb25zdCBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqdGVzdF9zczsKKwlCVUdfT04obGlzdF9lbXB0eSgmcm9vdC0+c3Vic3lzX2xpc3QpKTsKKwl0ZXN0X3NzID0gbGlzdF9lbnRyeShyb290LT5zdWJzeXNfbGlzdC5uZXh0LAorCQkJICAgICBzdHJ1Y3QgY2dyb3VwX3N1YnN5cywgc2libGluZyk7CisJaWYgKGNzcykgeworCQkqY3NzID0gY2dycC0+c3Vic3lzW3Rlc3Rfc3MtPnN1YnN5c19pZF07CisJCUJVR19PTighKmNzcyk7CisJfQorCWlmIChzdWJzeXNfaWQpCisJCSpzdWJzeXNfaWQgPSB0ZXN0X3NzLT5zdWJzeXNfaWQ7Cit9CisKKy8qCisgKiBBdHRhY2ggdGFzayAndHNrJyB0byBjZ3JvdXAgJ2NncnAnCisgKgorICogQ2FsbCBob2xkaW5nIGNncm91cF9tdXRleC4gIE1heSB0YWtlIHRhc2tfbG9jayBvZgorICogdGhlIHRhc2sgJ3BpZCcgZHVyaW5nIGNhbGwuCisgKi8KK3N0YXRpYyBpbnQgYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCXN0cnVjdCBjZ3JvdXAgKm9sZGNncnA7CisJc3RydWN0IGNzc19zZXQgKmNnID0gdHNrLT5jZ3JvdXBzOworCXN0cnVjdCBjc3Nfc2V0ICpuZXdjZzsKKwlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCA9IGNncnAtPnJvb3Q7CisJaW50IHN1YnN5c19pZDsKKworCWdldF9maXJzdF9zdWJzeXMoY2dycCwgTlVMTCwgJnN1YnN5c19pZCk7CisKKwkvKiBOb3RoaW5nIHRvIGRvIGlmIHRoZSB0YXNrIGlzIGFscmVhZHkgaW4gdGhhdCBjZ3JvdXAgKi8KKwlvbGRjZ3JwID0gdGFza19jZ3JvdXAodHNrLCBzdWJzeXNfaWQpOworCWlmIChjZ3JwID09IG9sZGNncnApCisJCXJldHVybiAwOworCisJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKSB7CisJCWlmIChzcy0+Y2FuX2F0dGFjaCkgeworCQkJcmV0dmFsID0gc3MtPmNhbl9hdHRhY2goc3MsIGNncnAsIHRzayk7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJcmV0dXJuIHJldHZhbDsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogTG9jYXRlIG9yIGFsbG9jYXRlIGEgbmV3IGNzc19zZXQgZm9yIHRoaXMgdGFzaywKKwkgKiBiYXNlZCBvbiBpdHMgZmluYWwgc2V0IG9mIGNncm91cHMKKwkgKi8KKwluZXdjZyA9IGZpbmRfY3NzX3NldChjZywgY2dycCk7CisJaWYgKCFuZXdjZykgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl0YXNrX2xvY2sodHNrKTsKKwlpZiAodHNrLT5mbGFncyAmIFBGX0VYSVRJTkcpIHsKKwkJdGFza191bmxvY2sodHNrKTsKKwkJcHV0X2Nzc19zZXQobmV3Y2cpOworCQlyZXR1cm4gLUVTUkNIOworCX0KKwlyY3VfYXNzaWduX3BvaW50ZXIodHNrLT5jZ3JvdXBzLCBuZXdjZyk7CisJdGFza191bmxvY2sodHNrKTsKKworCS8qIFVwZGF0ZSB0aGUgY3NzX3NldCBsaW5rZWQgbGlzdHMgaWYgd2UncmUgdXNpbmcgdGhlbSAqLworCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZ0c2stPmNnX2xpc3QpKSB7CisJCWxpc3RfZGVsKCZ0c2stPmNnX2xpc3QpOworCQlsaXN0X2FkZCgmdHNrLT5jZ19saXN0LCAmbmV3Y2ctPnRhc2tzKTsKKwl9CisJd3JpdGVfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOworCisJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKSB7CisJCWlmIChzcy0+YXR0YWNoKSB7CisJCQlzcy0+YXR0YWNoKHNzLCBjZ3JwLCBvbGRjZ3JwLCB0c2spOworCQl9CisJfQorCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmb2xkY2dycC0+ZmxhZ3MpOworCXN5bmNocm9uaXplX3JjdSgpOworCXB1dF9jc3Nfc2V0KGNnKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEF0dGFjaCB0YXNrIHdpdGggcGlkICdwaWQnIHRvIGNncm91cCAnY2dycCcuIENhbGwgd2l0aAorICogY2dyb3VwX211dGV4LCBtYXkgdGFrZSB0YXNrX2xvY2sgb2YgdGFzaworICovCitzdGF0aWMgaW50IGF0dGFjaF90YXNrX2J5X3BpZChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBjaGFyICpwaWRidWYpCit7CisJcGlkX3QgcGlkOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCWludCByZXQ7CisKKwlpZiAoc3NjYW5mKHBpZGJ1ZiwgIiVkIiwgJnBpZCkgIT0gMSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAocGlkKSB7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJdHNrID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCQlpZiAoIXRzayB8fCB0c2stPmZsYWdzICYgUEZfRVhJVElORykgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gLUVTUkNIOworCQl9CisJCWdldF90YXNrX3N0cnVjdCh0c2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKKworCQlpZiAoKGN1cnJlbnQtPmV1aWQpICYmIChjdXJyZW50LT5ldWlkICE9IHRzay0+dWlkKQorCQkgICAgJiYgKGN1cnJlbnQtPmV1aWQgIT0gdHNrLT5zdWlkKSkgeworCQkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CisJCQlyZXR1cm4gLUVBQ0NFUzsKKwkJfQorCX0gZWxzZSB7CisJCXRzayA9IGN1cnJlbnQ7CisJCWdldF90YXNrX3N0cnVjdCh0c2spOworCX0KKworCXJldCA9IGF0dGFjaF90YXNrKGNncnAsIHRzayk7CisJcHV0X3Rhc2tfc3RydWN0KHRzayk7CisJcmV0dXJuIHJldDsKK30KKworLyogVGhlIHZhcmlvdXMgdHlwZXMgb2YgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluIGEgY2dyb3VwIGZpbGUgc3lzdGVtICovCisKK2VudW0gY2dyb3VwX2ZpbGV0eXBlIHsKKwlGSUxFX1JPT1QsCisJRklMRV9ESVIsCisJRklMRV9UQVNLTElTVCwKKwlGSUxFX05PVElGWV9PTl9SRUxFQVNFLAorCUZJTEVfUkVMRUFTQUJMRSwKKwlGSUxFX1JFTEVBU0VfQUdFTlQsCit9OworCitzdGF0aWMgc3NpemVfdCBjZ3JvdXBfd3JpdGVfdWludChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQkJIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQkgc2l6ZV90IG5ieXRlcywgbG9mZl90ICp1bnVzZWRfcHBvcykKK3sKKwljaGFyIGJ1ZmZlcls2NF07CisJaW50IHJldHZhbCA9IDA7CisJdTY0IHZhbDsKKwljaGFyICplbmQ7CisKKwlpZiAoIW5ieXRlcykKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG5ieXRlcyA+PSBzaXplb2YoYnVmZmVyKSkKKwkJcmV0dXJuIC1FMkJJRzsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCB1c2VyYnVmLCBuYnl0ZXMpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWJ1ZmZlcltuYnl0ZXNdID0gMDsgICAgIC8qIG51bC10ZXJtaW5hdGUgKi8KKworCS8qIHN0cmlwIG5ld2xpbmUgaWYgbmVjZXNzYXJ5ICovCisJaWYgKG5ieXRlcyAmJiAoYnVmZmVyW25ieXRlcy0xXSA9PSAnXG4nKSkKKwkJYnVmZmVyW25ieXRlcy0xXSA9IDA7CisJdmFsID0gc2ltcGxlX3N0cnRvdWxsKGJ1ZmZlciwgJmVuZCwgMCk7CisJaWYgKCplbmQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogUGFzcyB0byBzdWJzeXN0ZW0gKi8KKwlyZXR2YWwgPSBjZnQtPndyaXRlX3VpbnQoY2dycCwgY2Z0LCB2YWwpOworCWlmICghcmV0dmFsKQorCQlyZXR2YWwgPSBuYnl0ZXM7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgY2dyb3VwX2NvbW1vbl9maWxlX3dyaXRlKHN0cnVjdCBjZ3JvdXAgKmNncnAsCisJCQkJCSAgIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwkJCQkJICAgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAorCQkJCQkgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnVudXNlZF9wcG9zKQoreworCWVudW0gY2dyb3VwX2ZpbGV0eXBlIHR5cGUgPSBjZnQtPnByaXZhdGU7CisJY2hhciAqYnVmZmVyOworCWludCByZXR2YWwgPSAwOworCisJaWYgKG5ieXRlcyA+PSBQQVRIX01BWCkKKwkJcmV0dXJuIC1FMkJJRzsKKworCS8qICsxIGZvciBudWwtdGVybWluYXRvciAqLworCWJ1ZmZlciA9IGttYWxsb2MobmJ5dGVzICsgMSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChjb3B5X2Zyb21fdXNlcihidWZmZXIsIHVzZXJidWYsIG5ieXRlcykpIHsKKwkJcmV0dmFsID0gLUVGQVVMVDsKKwkJZ290byBvdXQxOworCX0KKwlidWZmZXJbbmJ5dGVzXSA9IDA7CS8qIG51bC10ZXJtaW5hdGUgKi8KKworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisKKwlpZiAoY2dyb3VwX2lzX3JlbW92ZWQoY2dycCkpIHsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBvdXQyOworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRklMRV9UQVNLTElTVDoKKwkJcmV0dmFsID0gYXR0YWNoX3Rhc2tfYnlfcGlkKGNncnAsIGJ1ZmZlcik7CisJCWJyZWFrOworCWNhc2UgRklMRV9OT1RJRllfT05fUkVMRUFTRToKKwkJY2xlYXJfYml0KENHUlBfUkVMRUFTQUJMRSwgJmNncnAtPmZsYWdzKTsKKwkJaWYgKHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlciwgTlVMTCwgMTApICE9IDApCisJCQlzZXRfYml0KENHUlBfTk9USUZZX09OX1JFTEVBU0UsICZjZ3JwLT5mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChDR1JQX05PVElGWV9PTl9SRUxFQVNFLCAmY2dycC0+ZmxhZ3MpOworCQlicmVhazsKKwljYXNlIEZJTEVfUkVMRUFTRV9BR0VOVDoKKwl7CisJCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290ID0gY2dycC0+cm9vdDsKKwkJLyogU3RyaXAgdHJhaWxpbmcgbmV3bGluZSAqLworCQlpZiAobmJ5dGVzICYmIChidWZmZXJbbmJ5dGVzLTFdID09ICdcbicpKSB7CisJCQlidWZmZXJbbmJ5dGVzLTFdID0gMDsKKwkJfQorCQlpZiAobmJ5dGVzIDwgc2l6ZW9mKHJvb3QtPnJlbGVhc2VfYWdlbnRfcGF0aCkpIHsKKwkJCS8qIFdlIG5ldmVyIHdyaXRlIGFueXRoaW5nIG90aGVyIHRoYW4gJ1wwJworCQkJICogaW50byB0aGUgbGFzdCBjaGFyIG9mIHJlbGVhc2VfYWdlbnRfcGF0aCwKKwkJCSAqIHNvIGl0IGFsd2F5cyByZW1haW5zIGEgTlVMLXRlcm1pbmF0ZWQKKwkJCSAqIHN0cmluZyAqLworCQkJc3RybmNweShyb290LT5yZWxlYXNlX2FnZW50X3BhdGgsIGJ1ZmZlciwgbmJ5dGVzKTsKKwkJCXJvb3QtPnJlbGVhc2VfYWdlbnRfcGF0aFtuYnl0ZXNdID0gMDsKKwkJfSBlbHNlIHsKKwkJCXJldHZhbCA9IC1FTk9TUEM7CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0MjsKKwl9CisKKwlpZiAocmV0dmFsID09IDApCisJCXJldHZhbCA9IG5ieXRlczsKK291dDI6CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworb3V0MToKKwlrZnJlZShidWZmZXIpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNncm91cF9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9kZW50cnkpOworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBfX2RfY2dycChmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOworCisJaWYgKCFjZnQpCisJCXJldHVybiAtRU5PREVWOworCWlmIChjZnQtPndyaXRlKQorCQlyZXR1cm4gY2Z0LT53cml0ZShjZ3JwLCBjZnQsIGZpbGUsIGJ1ZiwgbmJ5dGVzLCBwcG9zKTsKKwlpZiAoY2Z0LT53cml0ZV91aW50KQorCQlyZXR1cm4gY2dyb3VwX3dyaXRlX3VpbnQoY2dycCwgY2Z0LCBmaWxlLCBidWYsIG5ieXRlcywgcHBvcyk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNncm91cF9yZWFkX3VpbnQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJCSAgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCSAgIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJCQkJICAgbG9mZl90ICpwcG9zKQoreworCWNoYXIgdG1wWzY0XTsKKwl1NjQgdmFsID0gY2Z0LT5yZWFkX3VpbnQoY2dycCwgY2Z0KTsKKwlpbnQgbGVuID0gc3ByaW50Zih0bXAsICIlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCB0bXAsIGxlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNncm91cF9jb21tb25fZmlsZV9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNncnAsCisJCQkJCSAgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJCQkgIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgIGNoYXIgX191c2VyICpidWYsCisJCQkJCSAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCWVudW0gY2dyb3VwX2ZpbGV0eXBlIHR5cGUgPSBjZnQtPnByaXZhdGU7CisJY2hhciAqcGFnZTsKKwlzc2l6ZV90IHJldHZhbCA9IDA7CisJY2hhciAqczsKKworCWlmICghKHBhZ2UgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJcyA9IHBhZ2U7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEZJTEVfUkVMRUFTRV9BR0VOVDoKKwl7CisJCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290OworCQlzaXplX3QgbjsKKwkJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKKwkJcm9vdCA9IGNncnAtPnJvb3Q7CisJCW4gPSBzdHJubGVuKHJvb3QtPnJlbGVhc2VfYWdlbnRfcGF0aCwKKwkJCSAgICBzaXplb2Yocm9vdC0+cmVsZWFzZV9hZ2VudF9wYXRoKSk7CisJCW4gPSBtaW4obiwgKHNpemVfdCkgUEFHRV9TSVpFKTsKKwkJc3RybmNweShzLCByb290LT5yZWxlYXNlX2FnZW50X3BhdGgsIG4pOworCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJCXMgKz0gbjsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwkqcysrID0gJ1xuJzsKKworCXJldHZhbCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKGJ1ZiwgbmJ5dGVzLCBwcG9zLCBwYWdlLCBzIC0gcGFnZSk7CitvdXQ6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNncm91cF9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCisJCQkJICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9kZW50cnkpOworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBfX2RfY2dycChmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQpOworCisJaWYgKCFjZnQpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGNmdC0+cmVhZCkKKwkJcmV0dXJuIGNmdC0+cmVhZChjZ3JwLCBjZnQsIGZpbGUsIGJ1ZiwgbmJ5dGVzLCBwcG9zKTsKKwlpZiAoY2Z0LT5yZWFkX3VpbnQpCisJCXJldHVybiBjZ3JvdXBfcmVhZF91aW50KGNncnAsIGNmdCwgZmlsZSwgYnVmLCBuYnl0ZXMsIHBwb3MpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IGNncm91cF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgY2Z0eXBlICpjZnQ7CisKKwllcnIgPSBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9kZW50cnkpOworCWlmICghY2Z0KQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoY2Z0LT5vcGVuKQorCQllcnIgPSBjZnQtPm9wZW4oaW5vZGUsIGZpbGUpOworCWVsc2UKKwkJZXJyID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgY2dyb3VwX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfZGVudHJ5KTsKKwlpZiAoY2Z0LT5yZWxlYXNlKQorCQlyZXR1cm4gY2Z0LT5yZWxlYXNlKGlub2RlLCBmaWxlKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGNncm91cF9yZW5hbWUgLSBPbmx5IGFsbG93IHNpbXBsZSByZW5hbWUgb2YgZGlyZWN0b3JpZXMgaW4gcGxhY2UuCisgKi8KK3N0YXRpYyBpbnQgY2dyb3VwX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCWlmICghU19JU0RJUihvbGRfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gLUVOT1RESVI7CisJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCisJCXJldHVybiAtRUVYSVNUOworCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCisJCXJldHVybiAtRUlPOworCXJldHVybiBzaW1wbGVfcmVuYW1lKG9sZF9kaXIsIG9sZF9kZW50cnksIG5ld19kaXIsIG5ld19kZW50cnkpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjZ3JvdXBfZmlsZV9vcGVyYXRpb25zID0geworCS5yZWFkID0gY2dyb3VwX2ZpbGVfcmVhZCwKKwkud3JpdGUgPSBjZ3JvdXBfZmlsZV93cml0ZSwKKwkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKKwkub3BlbiA9IGNncm91cF9maWxlX29wZW4sCisJLnJlbGVhc2UgPSBjZ3JvdXBfZmlsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNncm91cF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKwkubG9va3VwID0gc2ltcGxlX2xvb2t1cCwKKwkubWtkaXIgPSBjZ3JvdXBfbWtkaXIsCisJLnJtZGlyID0gY2dyb3VwX3JtZGlyLAorCS5yZW5hbWUgPSBjZ3JvdXBfcmVuYW1lLAorfTsKKworc3RhdGljIGludCBjZ3JvdXBfY3JlYXRlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0YXRpYyBzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgY2dyb3VwX2RvcHMgPSB7CisJCS5kX2lwdXQgPSBjZ3JvdXBfZGlwdXQsCisJfTsKKworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoIWRlbnRyeSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJaWYgKGRlbnRyeS0+ZF9pbm9kZSkKKwkJcmV0dXJuIC1FRVhJU1Q7CisKKwlpbm9kZSA9IGNncm91cF9uZXdfaW5vZGUobW9kZSwgc2IpOworCWlmICghaW5vZGUpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKFNfSVNESVIobW9kZSkpIHsKKwkJaW5vZGUtPmlfb3AgPSAmY2dyb3VwX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOworCisJCS8qIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KKwkJaW5jX25saW5rKGlub2RlKTsKKworCQkvKiBzdGFydCB3aXRoIHRoZSBkaXJlY3RvcnkgaW5vZGUgaGVsZCwgc28gdGhhdCB3ZSBjYW4KKwkJICogcG9wdWxhdGUgaXQgd2l0aG91dCByYWNpbmcgd2l0aCBhbm90aGVyIG1rZGlyICovCisJCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJfSBlbHNlIGlmIChTX0lTUkVHKG1vZGUpKSB7CisJCWlub2RlLT5pX3NpemUgPSAwOworCQlpbm9kZS0+aV9mb3AgPSAmY2dyb3VwX2ZpbGVfb3BlcmF0aW9uczsKKwl9CisJZGVudHJ5LT5kX29wID0gJmNncm91cF9kb3BzOworCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CisJZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqCWNncm91cF9jcmVhdGVfZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5IGZvciBhbiBvYmplY3QuCisgKgljZ3JwOgl0aGUgY2dyb3VwIHdlIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZvci4KKyAqCQlJdCBtdXN0IGhhdmUgYSB2YWxpZCAtPnBhcmVudCBmaWVsZAorICoJCUFuZCB3ZSBhcmUgZ29pbmcgdG8gZmlsbCBpdHMgLT5kZW50cnkgZmllbGQuCisgKglkZW50cnk6IGRlbnRyeSBvZiB0aGUgbmV3IGNncm91cAorICoJbW9kZToJbW9kZSB0byBzZXQgb24gbmV3IGRpcmVjdG9yeS4KKyAqLworc3RhdGljIGludCBjZ3JvdXBfY3JlYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJaW50IG1vZGUpCit7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OworCWludCBlcnJvciA9IDA7CisKKwlwYXJlbnQgPSBjZ3JwLT5wYXJlbnQtPmRlbnRyeTsKKwllcnJvciA9IGNncm91cF9jcmVhdGVfZmlsZShkZW50cnksIFNfSUZESVIgfCBtb2RlLCBjZ3JwLT5yb290LT5zYik7CisJaWYgKCFlcnJvcikgeworCQlkZW50cnktPmRfZnNkYXRhID0gY2dycDsKKwkJaW5jX25saW5rKHBhcmVudC0+ZF9pbm9kZSk7CisJCWNncnAtPmRlbnRyeSA9IGRlbnRyeTsKKwkJZGdldChkZW50cnkpOworCX0KKwlkcHV0KGRlbnRyeSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBjZ3JvdXBfYWRkX2ZpbGUoc3RydWN0IGNncm91cCAqY2dycCwKKwkJICAgICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXMsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyID0gY2dycC0+ZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKwlpbnQgZXJyb3I7CisKKwljaGFyIG5hbWVbTUFYX0NHUk9VUF9UWVBFX05BTUVMRU4gKyBNQVhfQ0ZUWVBFX05BTUUgKyAyXSA9IHsgMCB9OworCWlmIChzdWJzeXMgJiYgIXRlc3RfYml0KFJPT1RfTk9QUkVGSVgsICZjZ3JwLT5yb290LT5mbGFncykpIHsKKwkJc3RyY3B5KG5hbWUsIHN1YnN5cy0+bmFtZSk7CisJCXN0cmNhdChuYW1lLCAiLiIpOworCX0KKwlzdHJjYXQobmFtZSwgY2Z0LT5uYW1lKTsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5kX2lub2RlLT5pX211dGV4KSk7CisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgZGlyLCBzdHJsZW4obmFtZSkpOworCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKKwkJZXJyb3IgPSBjZ3JvdXBfY3JlYXRlX2ZpbGUoZGVudHJ5LCAwNjQ0IHwgU19JRlJFRywKKwkJCQkJCWNncnAtPnJvb3QtPnNiKTsKKwkJaWYgKCFlcnJvcikKKwkJCWRlbnRyeS0+ZF9mc2RhdGEgPSAodm9pZCAqKWNmdDsKKwkJZHB1dChkZW50cnkpOworCX0gZWxzZQorCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK2ludCBjZ3JvdXBfYWRkX2ZpbGVzKHN0cnVjdCBjZ3JvdXAgKmNncnAsCisJCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzLAorCQkJY29uc3Qgc3RydWN0IGNmdHlwZSBjZnRbXSwKKwkJCWludCBjb3VudCkKK3sKKwlpbnQgaSwgZXJyOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWVyciA9IGNncm91cF9hZGRfZmlsZShjZ3JwLCBzdWJzeXMsICZjZnRbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIENvdW50IHRoZSBudW1iZXIgb2YgdGFza3MgaW4gYSBjZ3JvdXAuICovCisKK2ludCBjZ3JvdXBfdGFza19jb3VudChjb25zdCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCWludCBjb3VudCA9IDA7CisJc3RydWN0IGxpc3RfaGVhZCAqbDsKKworCXJlYWRfbG9jaygmY3NzX3NldF9sb2NrKTsKKwlsID0gY2dycC0+Y3NzX3NldHMubmV4dDsKKwl3aGlsZSAobCAhPSAmY2dycC0+Y3NzX3NldHMpIHsKKwkJc3RydWN0IGNnX2Nncm91cF9saW5rICpsaW5rID0KKwkJCWxpc3RfZW50cnkobCwgc3RydWN0IGNnX2Nncm91cF9saW5rLCBjZ3JwX2xpbmtfbGlzdCk7CisJCWNvdW50ICs9IGF0b21pY19yZWFkKCZsaW5rLT5jZy0+cmVmLnJlZmNvdW50KTsKKwkJbCA9IGwtPm5leHQ7CisJfQorCXJlYWRfdW5sb2NrKCZjc3Nfc2V0X2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIEFkdmFuY2UgYSBsaXN0X2hlYWQgaXRlcmF0b3IuICBUaGUgaXRlcmF0b3Igc2hvdWxkIGJlIHBvc2l0aW9uZWQgYXQKKyAqIHRoZSBzdGFydCBvZiBhIGNzc19zZXQKKyAqLworc3RhdGljIHZvaWQgY2dyb3VwX2FkdmFuY2VfaXRlcihzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkJCQkgIHN0cnVjdCBjZ3JvdXBfaXRlciAqaXQpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbCA9IGl0LT5jZ19saW5rOworCXN0cnVjdCBjZ19jZ3JvdXBfbGluayAqbGluazsKKwlzdHJ1Y3QgY3NzX3NldCAqY2c7CisKKwkvKiBBZHZhbmNlIHRvIHRoZSBuZXh0IG5vbi1lbXB0eSBjc3Nfc2V0ICovCisJZG8geworCQlsID0gbC0+bmV4dDsKKwkJaWYgKGwgPT0gJmNncnAtPmNzc19zZXRzKSB7CisJCQlpdC0+Y2dfbGluayA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKwkJbGluayA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNnX2Nncm91cF9saW5rLCBjZ3JwX2xpbmtfbGlzdCk7CisJCWNnID0gbGluay0+Y2c7CisJfSB3aGlsZSAobGlzdF9lbXB0eSgmY2ctPnRhc2tzKSk7CisJaXQtPmNnX2xpbmsgPSBsOworCWl0LT50YXNrID0gY2ctPnRhc2tzLm5leHQ7Cit9CisKK3ZvaWQgY2dyb3VwX2l0ZXJfc3RhcnQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNncm91cF9pdGVyICppdCkKK3sKKwkvKgorCSAqIFRoZSBmaXJzdCB0aW1lIGFueW9uZSB0cmllcyB0byBpdGVyYXRlIGFjcm9zcyBhIGNncm91cCwKKwkgKiB3ZSBuZWVkIHRvIGVuYWJsZSB0aGUgbGlzdCBsaW5raW5nIGVhY2ggY3NzX3NldCB0byBpdHMKKwkgKiB0YXNrcywgYW5kIGZpeCB1cCBhbGwgZXhpc3RpbmcgdGFza3MuCisJICovCisJaWYgKCF1c2VfdGFza19jc3Nfc2V0X2xpbmtzKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKmc7CisJCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJCXVzZV90YXNrX2Nzc19zZXRfbGlua3MgPSAxOworIAkJZG9fZWFjaF90aHJlYWQoZywgcCkgeworCQkJdGFza19sb2NrKHApOworCQkJaWYgKGxpc3RfZW1wdHkoJnAtPmNnX2xpc3QpKQorCQkJCWxpc3RfYWRkKCZwLT5jZ19saXN0LCAmcC0+Y2dyb3Vwcy0+dGFza3MpOworCQkJdGFza191bmxvY2socCk7CisgCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCQl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CisJfQorCXJlYWRfbG9jaygmY3NzX3NldF9sb2NrKTsKKwlpdC0+Y2dfbGluayA9ICZjZ3JwLT5jc3Nfc2V0czsKKwljZ3JvdXBfYWR2YW5jZV9pdGVyKGNncnAsIGl0KTsKK30KKworc3RydWN0IHRhc2tfc3RydWN0ICpjZ3JvdXBfaXRlcl9uZXh0KHN0cnVjdCBjZ3JvdXAgKmNncnAsCisJCQkJCXN0cnVjdCBjZ3JvdXBfaXRlciAqaXQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICpyZXM7CisJc3RydWN0IGxpc3RfaGVhZCAqbCA9IGl0LT50YXNrOworCisJLyogSWYgdGhlIGl0ZXJhdG9yIGNnIGlzIE5VTEwsIHdlIGhhdmUgbm8gdGFza3MgKi8KKwlpZiAoIWl0LT5jZ19saW5rKQorCQlyZXR1cm4gTlVMTDsKKwlyZXMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCB0YXNrX3N0cnVjdCwgY2dfbGlzdCk7CisJLyogQWR2YW5jZSBpdGVyYXRvciB0byBmaW5kIG5leHQgZW50cnkgKi8KKwlsID0gbC0+bmV4dDsKKwlpZiAobCA9PSAmcmVzLT5jZ3JvdXBzLT50YXNrcykgeworCQkvKiBXZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhpcyB0YXNrIGxpc3QgLSBtb3ZlIG9uIHRvCisJCSAqIHRoZSBuZXh0IGNnX2Nncm91cF9saW5rICovCisJCWNncm91cF9hZHZhbmNlX2l0ZXIoY2dycCwgaXQpOworCX0gZWxzZSB7CisJCWl0LT50YXNrID0gbDsKKwl9CisJcmV0dXJuIHJlczsKK30KKwordm9pZCBjZ3JvdXBfaXRlcl9lbmQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNncm91cF9pdGVyICppdCkKK3sKKwlyZWFkX3VubG9jaygmY3NzX3NldF9sb2NrKTsKK30KKworLyoKKyAqIFN0dWZmIGZvciByZWFkaW5nIHRoZSAndGFza3MnIGZpbGUuCisgKgorICogUmVhZGluZyB0aGlzIGZpbGUgY2FuIHJldHVybiBsYXJnZSBhbW91bnRzIG9mIGRhdGEgaWYgYSBjZ3JvdXAgaGFzCisgKiAqbG90cyogb2YgYXR0YWNoZWQgdGFza3MuIFNvIGl0IG1heSBuZWVkIHNldmVyYWwgY2FsbHMgdG8gcmVhZCgpLAorICogYnV0IHdlIGNhbm5vdCBndWFyYW50ZWUgdGhhdCB0aGUgaW5mb3JtYXRpb24gd2UgcHJvZHVjZSBpcyBjb3JyZWN0CisgKiB1bmxlc3Mgd2UgcHJvZHVjZSBpdCBlbnRpcmVseSBhdG9taWNhbGx5LgorICoKKyAqIFVwb24gdGFza3MgZmlsZSBvcGVuKCksIGEgc3RydWN0IGN0cl9zdHJ1Y3QgaXMgYWxsb2NhdGVkLCB0aGF0CisgKiB3aWxsIGhhdmUgYSBwb2ludGVyIHRvIGFuIGFycmF5IChhbHNvIGFsbG9jYXRlZCBoZXJlKS4gIFRoZSBzdHJ1Y3QKKyAqIGN0cl9zdHJ1Y3QgKiBpcyBzdG9yZWQgaW4gZmlsZS0+cHJpdmF0ZV9kYXRhLiAgSXRzIHJlc291cmNlcyB3aWxsCisgKiBiZSBmcmVlZCBieSByZWxlYXNlKCkgd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuICBUaGUgYXJyYXkgaXMgdXNlZAorICogdG8gc3ByaW50ZiB0aGUgUElEcyBhbmQgdGhlbiB1c2VkIGJ5IHJlYWQoKS4KKyAqLworc3RydWN0IGN0cl9zdHJ1Y3QgeworCWNoYXIgKmJ1ZjsKKwlpbnQgYnVmc3o7Cit9OworCisvKgorICogTG9hZCBpbnRvICdwaWRhcnJheScgdXAgdG8gJ25waWRzJyBvZiB0aGUgdGFza3MgdXNpbmcgY2dyb3VwCisgKiAnY2dycCcuICBSZXR1cm4gYWN0dWFsIG51bWJlciBvZiBwaWRzIGxvYWRlZC4gIE5vIG5lZWQgdG8KKyAqIHRhc2tfbG9jayhwKSB3aGVuIHJlYWRpbmcgb3V0IHAtPmNncm91cCwgc2luY2Ugd2UncmUgaW4gYW4gUkNVCisgKiByZWFkIHNlY3Rpb24sIHNvIHRoZSBjc3Nfc2V0IGNhbid0IGdvIGF3YXksIGFuZCBpcworICogaW1tdXRhYmxlIGFmdGVyIGNyZWF0aW9uLgorICovCitzdGF0aWMgaW50IHBpZF9hcnJheV9sb2FkKHBpZF90ICpwaWRhcnJheSwgaW50IG5waWRzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dycCwgJml0KTsKKwl3aGlsZSAoKHRzayA9IGNncm91cF9pdGVyX25leHQoY2dycCwgJml0KSkpIHsKKwkJaWYgKHVubGlrZWx5KG4gPT0gbnBpZHMpKQorCQkJYnJlYWs7CisJCXBpZGFycmF5W24rK10gPSB0YXNrX3BpZF9ucih0c2spOworCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dycCwgJml0KTsKKwlyZXR1cm4gbjsKK30KKworLyoqCisgKiBCdWlsZCBhbmQgZmlsbCBjZ3JvdXBzdGF0cyBzbyB0aGF0IHRhc2tzdGF0cyBjYW4gZXhwb3J0IGl0IHRvIHVzZXIKKyAqIHNwYWNlLgorICoKKyAqIEBzdGF0czogY2dyb3Vwc3RhdHMgdG8gZmlsbCBpbmZvcm1hdGlvbiBpbnRvCisgKiBAZGVudHJ5OiBBIGRlbnRyeSBlbnRyeSBiZWxvbmdpbmcgdG8gdGhlIGNncm91cCBmb3Igd2hpY2ggc3RhdHMgaGF2ZQorICogYmVlbiByZXF1ZXN0ZWQuCisgKi8KK2ludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IHJldCA9IC1FSU5WQUw7CisJc3RydWN0IGNncm91cCAqY2dycDsKKwlzdHJ1Y3QgY2dyb3VwX2l0ZXIgaXQ7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJLyoKKwkgKiBWYWxpZGF0ZSBkZW50cnkgYnkgY2hlY2tpbmcgdGhlIHN1cGVyYmxvY2sgb3BlcmF0aW9ucworCSAqLworCWlmIChkZW50cnktPmRfc2ItPnNfb3AgIT0gJmNncm91cF9vcHMpCisJCSBnb3RvIGVycjsKKworCXJldCA9IDA7CisJY2dycCA9IGRlbnRyeS0+ZF9mc2RhdGE7CisJcmN1X3JlYWRfbG9jaygpOworCisJY2dyb3VwX2l0ZXJfc3RhcnQoY2dycCwgJml0KTsKKwl3aGlsZSAoKHRzayA9IGNncm91cF9pdGVyX25leHQoY2dycCwgJml0KSkpIHsKKwkJc3dpdGNoICh0c2stPnN0YXRlKSB7CisJCWNhc2UgVEFTS19SVU5OSU5HOgorCQkJc3RhdHMtPm5yX3J1bm5pbmcrKzsKKwkJCWJyZWFrOworCQljYXNlIFRBU0tfSU5URVJSVVBUSUJMRToKKwkJCXN0YXRzLT5ucl9zbGVlcGluZysrOworCQkJYnJlYWs7CisJCWNhc2UgVEFTS19VTklOVEVSUlVQVElCTEU6CisJCQlzdGF0cy0+bnJfdW5pbnRlcnJ1cHRpYmxlKys7CisJCQlicmVhazsKKwkJY2FzZSBUQVNLX1NUT1BQRUQ6CisJCQlzdGF0cy0+bnJfc3RvcHBlZCsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoZGVsYXlhY2N0X2lzX3Rhc2tfd2FpdGluZ19vbl9pbyh0c2spKQorCQkJCXN0YXRzLT5ucl9pb193YWl0Kys7CisJCQlicmVhazsKKwkJfQorCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dycCwgJml0KTsKKworCXJjdV9yZWFkX3VubG9jaygpOworZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY21wcGlkKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCit7CisJcmV0dXJuICoocGlkX3QgKilhIC0gKihwaWRfdCAqKWI7Cit9CisKKy8qCisgKiBDb252ZXJ0IGFycmF5ICdhJyBvZiAnbnBpZHMnIHBpZF90J3MgdG8gYSBzdHJpbmcgb2YgbmV3bGluZSBzZXBhcmF0ZWQKKyAqIGRlY2ltYWwgcGlkcyBpbiAnYnVmJy4gIERvbid0IHdyaXRlIG1vcmUgdGhhbiAnc3onIGNoYXJzLCBidXQgcmV0dXJuCisgKiBjb3VudCAnY250JyBvZiBob3cgbWFueSBjaGFycyB3b3VsZCBiZSB3cml0dGVuIGlmIGJ1ZiB3ZXJlIGxhcmdlIGVub3VnaC4KKyAqLworc3RhdGljIGludCBwaWRfYXJyYXlfdG9fYnVmKGNoYXIgKmJ1ZiwgaW50IHN6LCBwaWRfdCAqYSwgaW50IG5waWRzKQoreworCWludCBjbnQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5waWRzOyBpKyspCisJCWNudCArPSBzbnByaW50ZihidWYgKyBjbnQsIG1heChzeiAtIGNudCwgMCksICIlZFxuIiwgYVtpXSk7CisJcmV0dXJuIGNudDsKK30KKworLyoKKyAqIEhhbmRsZSBhbiBvcGVuIG9uICd0YXNrcycgZmlsZS4gIFByZXBhcmUgYSBidWZmZXIgbGlzdGluZyB0aGUKKyAqIHByb2Nlc3MgaWQncyBvZiB0YXNrcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIGNncm91cCBiZWluZyBvcGVuZWQuCisgKgorICogRG9lcyBub3QgcmVxdWlyZSBhbnkgc3BlY2lmaWMgY2dyb3VwIG11dGV4ZXMsIGFuZCBkb2VzIG5vdCB0YWtlIGFueS4KKyAqLworc3RhdGljIGludCBjZ3JvdXBfdGFza3Nfb3BlbihzdHJ1Y3QgaW5vZGUgKnVudXNlZCwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IF9fZF9jZ3JwKGZpbGUtPmZfZGVudHJ5LT5kX3BhcmVudCk7CisJc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKKwlwaWRfdCAqcGlkYXJyYXk7CisJaW50IG5waWRzOworCWNoYXIgYzsKKworCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQorCQlyZXR1cm4gMDsKKworCWN0ciA9IGttYWxsb2Moc2l6ZW9mKCpjdHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWN0cikKKwkJZ290byBlcnIwOworCisJLyoKKwkgKiBJZiBjZ3JvdXAgZ2V0cyBtb3JlIHVzZXJzIGFmdGVyIHdlIHJlYWQgY291bnQsIHdlIHdvbid0IGhhdmUKKwkgKiBlbm91Z2ggc3BhY2UgLSB0b3VnaC4gIFRoaXMgcmFjZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSB0byB0aGUKKwkgKiBjYWxsZXIgZnJvbSB0aGUgY2FzZSB0aGF0IHRoZSBhZGRpdGlvbmFsIGNncm91cCB1c2VycyBkaWRuJ3QKKwkgKiBzaG93IHVwIHVudGlsIHNvbWV0aW1lIGxhdGVyIG9uLgorCSAqLworCW5waWRzID0gY2dyb3VwX3Rhc2tfY291bnQoY2dycCk7CisJaWYgKG5waWRzKSB7CisJCXBpZGFycmF5ID0ga21hbGxvYyhucGlkcyAqIHNpemVvZihwaWRfdCksIEdGUF9LRVJORUwpOworCQlpZiAoIXBpZGFycmF5KQorCQkJZ290byBlcnIxOworCisJCW5waWRzID0gcGlkX2FycmF5X2xvYWQocGlkYXJyYXksIG5waWRzLCBjZ3JwKTsKKwkJc29ydChwaWRhcnJheSwgbnBpZHMsIHNpemVvZihwaWRfdCksIGNtcHBpZCwgTlVMTCk7CisKKwkJLyogQ2FsbCBwaWRfYXJyYXlfdG9fYnVmKCkgdHdpY2UsIGZpcnN0IGp1c3QgdG8gZ2V0IGJ1ZnN6ICovCisJCWN0ci0+YnVmc3ogPSBwaWRfYXJyYXlfdG9fYnVmKCZjLCBzaXplb2YoYyksIHBpZGFycmF5LCBucGlkcykgKyAxOworCQljdHItPmJ1ZiA9IGttYWxsb2MoY3RyLT5idWZzeiwgR0ZQX0tFUk5FTCk7CisJCWlmICghY3RyLT5idWYpCisJCQlnb3RvIGVycjI7CisJCWN0ci0+YnVmc3ogPSBwaWRfYXJyYXlfdG9fYnVmKGN0ci0+YnVmLCBjdHItPmJ1ZnN6LCBwaWRhcnJheSwgbnBpZHMpOworCisJCWtmcmVlKHBpZGFycmF5KTsKKwl9IGVsc2UgeworCQljdHItPmJ1ZiA9IDA7CisJCWN0ci0+YnVmc3ogPSAwOworCX0KKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBjdHI7CisJcmV0dXJuIDA7CisKK2VycjI6CisJa2ZyZWUocGlkYXJyYXkpOworZXJyMToKKwlrZnJlZShjdHIpOworZXJyMDoKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHNzaXplX3QgY2dyb3VwX3Rhc2tzX3JlYWQoc3RydWN0IGNncm91cCAqY2dycCwKKwkJCQkgICAgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBjdHJfc3RydWN0ICpjdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGN0ci0+YnVmLCBjdHItPmJ1ZnN6KTsKK30KKworc3RhdGljIGludCBjZ3JvdXBfdGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZF9pbm9kZSwKKwkJCQkJc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CisJCWN0ciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJa2ZyZWUoY3RyLT5idWYpOworCQlrZnJlZShjdHIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHU2NCBjZ3JvdXBfcmVhZF9ub3RpZnlfb25fcmVsZWFzZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkJCQkgICAgc3RydWN0IGNmdHlwZSAqY2Z0KQoreworCXJldHVybiBub3RpZnlfb25fcmVsZWFzZShjZ3JwKTsKK30KKworc3RhdGljIHU2NCBjZ3JvdXBfcmVhZF9yZWxlYXNhYmxlKHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdCkKK3sKKwlyZXR1cm4gdGVzdF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmY2dycC0+ZmxhZ3MpOworfQorCisvKgorICogZm9yIHRoZSBjb21tb24gZnVuY3Rpb25zLCAncHJpdmF0ZScgZ2l2ZXMgdGhlIHR5cGUgb2YgZmlsZQorICovCitzdGF0aWMgc3RydWN0IGNmdHlwZSBmaWxlc1tdID0geworCXsKKwkJLm5hbWUgPSAidGFza3MiLAorCQkub3BlbiA9IGNncm91cF90YXNrc19vcGVuLAorCQkucmVhZCA9IGNncm91cF90YXNrc19yZWFkLAorCQkud3JpdGUgPSBjZ3JvdXBfY29tbW9uX2ZpbGVfd3JpdGUsCisJCS5yZWxlYXNlID0gY2dyb3VwX3Rhc2tzX3JlbGVhc2UsCisJCS5wcml2YXRlID0gRklMRV9UQVNLTElTVCwKKwl9LAorCisJeworCQkubmFtZSA9ICJub3RpZnlfb25fcmVsZWFzZSIsCisJCS5yZWFkX3VpbnQgPSBjZ3JvdXBfcmVhZF9ub3RpZnlfb25fcmVsZWFzZSwKKwkJLndyaXRlID0gY2dyb3VwX2NvbW1vbl9maWxlX3dyaXRlLAorCQkucHJpdmF0ZSA9IEZJTEVfTk9USUZZX09OX1JFTEVBU0UsCisJfSwKKworCXsKKwkJLm5hbWUgPSAicmVsZWFzYWJsZSIsCisJCS5yZWFkX3VpbnQgPSBjZ3JvdXBfcmVhZF9yZWxlYXNhYmxlLAorCQkucHJpdmF0ZSA9IEZJTEVfUkVMRUFTQUJMRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNmdHlwZSBjZnRfcmVsZWFzZV9hZ2VudCA9IHsKKwkubmFtZSA9ICJyZWxlYXNlX2FnZW50IiwKKwkucmVhZCA9IGNncm91cF9jb21tb25fZmlsZV9yZWFkLAorCS53cml0ZSA9IGNncm91cF9jb21tb25fZmlsZV93cml0ZSwKKwkucHJpdmF0ZSA9IEZJTEVfUkVMRUFTRV9BR0VOVCwKK307CisKK3N0YXRpYyBpbnQgY2dyb3VwX3BvcHVsYXRlX2RpcihzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCWludCBlcnI7CisJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCisJLyogRmlyc3QgY2xlYXIgb3V0IGFueSBleGlzdGluZyBmaWxlcyAqLworCWNncm91cF9jbGVhcl9kaXJlY3RvcnkoY2dycC0+ZGVudHJ5KTsKKworCWVyciA9IGNncm91cF9hZGRfZmlsZXMoY2dycCwgTlVMTCwgZmlsZXMsIEFSUkFZX1NJWkUoZmlsZXMpKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmIChjZ3JwID09IGNncnAtPnRvcF9jZ3JvdXApIHsKKwkJaWYgKChlcnIgPSBjZ3JvdXBfYWRkX2ZpbGUoY2dycCwgTlVMTCwgJmNmdF9yZWxlYXNlX2FnZW50KSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlmb3JfZWFjaF9zdWJzeXMoY2dycC0+cm9vdCwgc3MpIHsKKwkJaWYgKHNzLT5wb3B1bGF0ZSAmJiAoZXJyID0gc3MtPnBvcHVsYXRlKHNzLCBjZ3JwKSkgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW5pdF9jZ3JvdXBfY3NzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsCisJCQkgICAgICAgc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJICAgICAgIHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJY3NzLT5jZ3JvdXAgPSBjZ3JwOworCWF0b21pY19zZXQoJmNzcy0+cmVmY250LCAwKTsKKwljc3MtPmZsYWdzID0gMDsKKwlpZiAoY2dycCA9PSBkdW1teXRvcCkKKwkJc2V0X2JpdChDU1NfUk9PVCwgJmNzcy0+ZmxhZ3MpOworCUJVR19PTihjZ3JwLT5zdWJzeXNbc3MtPnN1YnN5c19pZF0pOworCWNncnAtPnN1YnN5c1tzcy0+c3Vic3lzX2lkXSA9IGNzczsKK30KKworLyoKKyAqCWNncm91cF9jcmVhdGUgLSBjcmVhdGUgYSBjZ3JvdXAKKyAqCXBhcmVudDoJY2dyb3VwIHRoYXQgd2lsbCBiZSBwYXJlbnQgb2YgdGhlIG5ldyBjZ3JvdXAuCisgKgluYW1lOgkJbmFtZSBvZiB0aGUgbmV3IGNncm91cC4gV2lsbCBiZSBzdHJjcHknZWQuCisgKgltb2RlOgkJbW9kZSB0byBzZXQgb24gbmV3IGlub2RlCisgKgorICoJTXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbXV0ZXggb24gdGhlIHBhcmVudCBpbm9kZSBoZWxkCisgKi8KKworc3RhdGljIGxvbmcgY2dyb3VwX2NyZWF0ZShzdHJ1Y3QgY2dyb3VwICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJCSAgICAgaW50IG1vZGUpCit7CisJc3RydWN0IGNncm91cCAqY2dycDsKKwlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCA9IHBhcmVudC0+cm9vdDsKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3M7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHJvb3QtPnNiOworCisJY2dycCA9IGt6YWxsb2Moc2l6ZW9mKCpjZ3JwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjZ3JwKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEdyYWIgYSByZWZlcmVuY2Ugb24gdGhlIHN1cGVyYmxvY2sgc28gdGhlIGhpZXJhcmNoeSBkb2Vzbid0CisJICogZ2V0IGRlbGV0ZWQgb24gdW5tb3VudCBpZiB0aGVyZSBhcmUgY2hpbGQgY2dyb3Vwcy4gIFRoaXMKKwkgKiBjYW4gYmUgZG9uZSBvdXRzaWRlIGNncm91cF9tdXRleCwgc2luY2UgdGhlIHNiIGNhbid0CisJICogZGlzYXBwZWFyIHdoaWxlIHNvbWVvbmUgaGFzIGFuIG9wZW4gY29udHJvbCBmaWxlIG9uIHRoZQorCSAqIGZzICovCisJYXRvbWljX2luYygmc2ItPnNfYWN0aXZlKTsKKworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisKKwljZ3JwLT5mbGFncyA9IDA7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPnNpYmxpbmcpOworCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5jaGlsZHJlbik7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmNzc19zZXRzKTsKKwlJTklUX0xJU1RfSEVBRCgmY2dycC0+cmVsZWFzZV9saXN0KTsKKworCWNncnAtPnBhcmVudCA9IHBhcmVudDsKKwljZ3JwLT5yb290ID0gcGFyZW50LT5yb290OworCWNncnAtPnRvcF9jZ3JvdXAgPSBwYXJlbnQtPnRvcF9jZ3JvdXA7CisKKwlmb3JfZWFjaF9zdWJzeXMocm9vdCwgc3MpIHsKKwkJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyA9IHNzLT5jcmVhdGUoc3MsIGNncnApOworCQlpZiAoSVNfRVJSKGNzcykpIHsKKwkJCWVyciA9IFBUUl9FUlIoY3NzKTsKKwkJCWdvdG8gZXJyX2Rlc3Ryb3k7CisJCX0KKwkJaW5pdF9jZ3JvdXBfY3NzKGNzcywgc3MsIGNncnApOworCX0KKworCWxpc3RfYWRkKCZjZ3JwLT5zaWJsaW5nLCAmY2dycC0+cGFyZW50LT5jaGlsZHJlbik7CisJcm9vdC0+bnVtYmVyX29mX2Nncm91cHMrKzsKKworCWVyciA9IGNncm91cF9jcmVhdGVfZGlyKGNncnAsIGRlbnRyeSwgbW9kZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3JlbW92ZTsKKworCS8qIFRoZSBjZ3JvdXAgZGlyZWN0b3J5IHdhcyBwcmUtbG9ja2VkIGZvciB1cyAqLworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZjZ3JwLT5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpKTsKKworCWVyciA9IGNncm91cF9wb3B1bGF0ZV9kaXIoY2dycCk7CisJLyogSWYgZXJyIDwgMCwgd2UgaGF2ZSBhIGhhbGYtZmlsbGVkIGRpcmVjdG9yeSAtIG9oIHdlbGwgOykgKi8KKworCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwltdXRleF91bmxvY2soJmNncnAtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwlyZXR1cm4gMDsKKworIGVycl9yZW1vdmU6CisKKwlsaXN0X2RlbCgmY2dycC0+c2libGluZyk7CisJcm9vdC0+bnVtYmVyX29mX2Nncm91cHMtLTsKKworIGVycl9kZXN0cm95OgorCisJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKSB7CisJCWlmIChjZ3JwLT5zdWJzeXNbc3MtPnN1YnN5c19pZF0pCisJCQlzcy0+ZGVzdHJveShzcywgY2dycCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCisJLyogUmVsZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IHRoYXQgd2UgdG9vayBvbiB0aGUgc3VwZXJibG9jayAqLworCWRlYWN0aXZhdGVfc3VwZXIoc2IpOworCisJa2ZyZWUoY2dycCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjZ3JvdXBfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJc3RydWN0IGNncm91cCAqY19wYXJlbnQgPSBkZW50cnktPmRfcGFyZW50LT5kX2ZzZGF0YTsKKworCS8qIHRoZSB2ZnMgaG9sZHMgaW5vZGUtPmlfbXV0ZXggYWxyZWFkeSAqLworCXJldHVybiBjZ3JvdXBfY3JlYXRlKGNfcGFyZW50LCBkZW50cnksIG1vZGUgfCBTX0lGRElSKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2dyb3VwX2hhc19jc3NfcmVmcyhzdHJ1Y3QgY2dyb3VwICpjZ3JwKQoreworCS8qIENoZWNrIHRoZSByZWZlcmVuY2UgY291bnQgb24gZWFjaCBzdWJzeXN0ZW0uIFNpbmNlIHdlCisJICogYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0IHRoZXJlIGFyZSBubyB0YXNrcyBpbiB0aGUKKwkgKiBjZ3JvdXAsIGlmIHRoZSBjc3MgcmVmY291bnQgaXMgYWxzbyAwLCB0aGVuIHRoZXJlIHNob3VsZAorCSAqIGJlIG5vIG91dHN0YW5kaW5nIHJlZmVyZW5jZXMsIHNvIHRoZSBzdWJzeXN0ZW0gaXMgc2FmZSB0bworCSAqIGRlc3Ryb3kuIFdlIHNjYW4gYWNyb3NzIGFsbCBzdWJzeXN0ZW1zIHJhdGhlciB0aGFuIHVzaW5nCisJICogdGhlIHBlci1oaWVyYXJjaHkgbGlua2VkIGxpc3Qgb2YgbW91bnRlZCBzdWJzeXN0ZW1zIHNpbmNlCisJICogd2UgY2FuIGJlIGNhbGxlZCB2aWEgY2hlY2tfZm9yX3JlbGVhc2UoKSB3aXRoIG5vCisJICogc3luY2hyb25pemF0aW9uIG90aGVyIHRoYW4gUkNVLCBhbmQgdGhlIHN1YnN5c3RlbSBsaW5rZWQKKwkgKiBsaXN0IGlzbid0IFJDVS1zYWZlICovCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CisJCS8qIFNraXAgc3Vic3lzdGVtcyBub3QgaW4gdGhpcyBoaWVyYXJjaHkgKi8KKwkJaWYgKHNzLT5yb290ICE9IGNncnAtPnJvb3QpCisJCQljb250aW51ZTsKKwkJY3NzID0gY2dycC0+c3Vic3lzW3NzLT5zdWJzeXNfaWRdOworCQkvKiBXaGVuIGNhbGxlZCBmcm9tIGNoZWNrX2Zvcl9yZWxlYXNlKCkgaXQncyBwb3NzaWJsZQorCQkgKiB0aGF0IGJ5IHRoaXMgcG9pbnQgdGhlIGNncm91cCBoYXMgYmVlbiByZW1vdmVkCisJCSAqIGFuZCB0aGUgY3NzIGRlbGV0ZWQuIEJ1dCBhIGZhbHNlLXBvc2l0aXZlIGRvZXNuJ3QKKwkJICogbWF0dGVyLCBzaW5jZSBpdCBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGNncm91cAorCQkgKiBoYXMgYmVlbiBkZWxldGVkIGFuZCBoZW5jZSBubyBsb25nZXIgbmVlZHMgdGhlCisJCSAqIHJlbGVhc2UgYWdlbnQgdG8gYmUgY2FsbGVkIGFueXdheS4gKi8KKwkJaWYgKGNzcyAmJiBhdG9taWNfcmVhZCgmY3NzLT5yZWZjbnQpKSB7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjZ3JvdXBfcm1kaXIoc3RydWN0IGlub2RlICp1bnVzZWRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IGRlbnRyeS0+ZF9mc2RhdGE7CisJc3RydWN0IGRlbnRyeSAqZDsKKwlzdHJ1Y3QgY2dyb3VwICpwYXJlbnQ7CisJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3Q7CisKKwkvKiB0aGUgdmZzIGhvbGRzIGJvdGggaW5vZGUtPmlfbXV0ZXggYWxyZWFkeSAqLworCisJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKKwlpZiAoYXRvbWljX3JlYWQoJmNncnAtPmNvdW50KSAhPSAwKSB7CisJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJaWYgKCFsaXN0X2VtcHR5KCZjZ3JwLT5jaGlsZHJlbikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXBhcmVudCA9IGNncnAtPnBhcmVudDsKKwlyb290ID0gY2dycC0+cm9vdDsKKwlzYiA9IHJvb3QtPnNiOworCisJaWYgKGNncm91cF9oYXNfY3NzX3JlZnMoY2dycCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWZvcl9lYWNoX3N1YnN5cyhyb290LCBzcykgeworCQlpZiAoY2dycC0+c3Vic3lzW3NzLT5zdWJzeXNfaWRdKQorCQkJc3MtPmRlc3Ryb3koc3MsIGNncnApOworCX0KKworCXNwaW5fbG9jaygmcmVsZWFzZV9saXN0X2xvY2spOworCXNldF9iaXQoQ0dSUF9SRU1PVkVELCAmY2dycC0+ZmxhZ3MpOworCWlmICghbGlzdF9lbXB0eSgmY2dycC0+cmVsZWFzZV9saXN0KSkKKwkJbGlzdF9kZWwoJmNncnAtPnJlbGVhc2VfbGlzdCk7CisJc3Bpbl91bmxvY2soJnJlbGVhc2VfbGlzdF9sb2NrKTsKKwkvKiBkZWxldGUgbXkgc2libGluZyBmcm9tIHBhcmVudC0+Y2hpbGRyZW4gKi8KKwlsaXN0X2RlbCgmY2dycC0+c2libGluZyk7CisJc3Bpbl9sb2NrKCZjZ3JwLT5kZW50cnktPmRfbG9jayk7CisJZCA9IGRnZXQoY2dycC0+ZGVudHJ5KTsKKwljZ3JwLT5kZW50cnkgPSBOVUxMOworCXNwaW5fdW5sb2NrKCZkLT5kX2xvY2spOworCisJY2dyb3VwX2RfcmVtb3ZlX2RpcihkKTsKKwlkcHV0KGQpOworCXJvb3QtPm51bWJlcl9vZl9jZ3JvdXBzLS07CisKKwlzZXRfYml0KENHUlBfUkVMRUFTQUJMRSwgJnBhcmVudC0+ZmxhZ3MpOworCWNoZWNrX2Zvcl9yZWxlYXNlKHBhcmVudCk7CisKKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJLyogRHJvcCB0aGUgYWN0aXZlIHN1cGVyYmxvY2sgcmVmZXJlbmNlIHRoYXQgd2UgdG9vayB3aGVuIHdlCisJICogY3JlYXRlZCB0aGUgY2dyb3VwICovCisJZGVhY3RpdmF0ZV9zdXBlcihzYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNncm91cF9pbml0X3N1YnN5cyhzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpCit7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsOworCXByaW50ayhLRVJOX0VSUiAiSW5pdGlhbGl6aW5nIGNncm91cCBzdWJzeXMgJXNcbiIsIHNzLT5uYW1lKTsKKworCS8qIENyZWF0ZSB0aGUgdG9wIGNncm91cCBzdGF0ZSBmb3IgdGhpcyBzdWJzeXN0ZW0gKi8KKwlzcy0+cm9vdCA9ICZyb290bm9kZTsKKwljc3MgPSBzcy0+Y3JlYXRlKHNzLCBkdW1teXRvcCk7CisJLyogV2UgZG9uJ3QgaGFuZGxlIGVhcmx5IGZhaWx1cmVzIGdyYWNlZnVsbHkgKi8KKwlCVUdfT04oSVNfRVJSKGNzcykpOworCWluaXRfY2dyb3VwX2Nzcyhjc3MsIHNzLCBkdW1teXRvcCk7CisKKwkvKiBVcGRhdGUgYWxsIGNncm91cCBncm91cHMgdG8gY29udGFpbiBhIHN1YnN5cworCSAqIHBvaW50ZXIgdG8gdGhpcyBzdGF0ZSAtIHNpbmNlIHRoZSBzdWJzeXN0ZW0gaXMKKwkgKiBuZXdseSByZWdpc3RlcmVkLCBhbGwgdGFza3MgYW5kIGhlbmNlIGFsbCBjZ3JvdXAKKwkgKiBncm91cHMgYXJlIGluIHRoZSBzdWJzeXN0ZW0ncyB0b3AgY2dyb3VwLiAqLworCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJbCA9ICZpbml0X2Nzc19zZXQubGlzdDsKKwlkbyB7CisJCXN0cnVjdCBjc3Nfc2V0ICpjZyA9CisJCQlsaXN0X2VudHJ5KGwsIHN0cnVjdCBjc3Nfc2V0LCBsaXN0KTsKKwkJY2ctPnN1YnN5c1tzcy0+c3Vic3lzX2lkXSA9IGR1bW15dG9wLT5zdWJzeXNbc3MtPnN1YnN5c19pZF07CisJCWwgPSBsLT5uZXh0OworCX0gd2hpbGUgKGwgIT0gJmluaXRfY3NzX3NldC5saXN0KTsKKwl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CisKKyAJLyogSWYgdGhpcyBzdWJzeXN0ZW0gcmVxdWVzdGVkIHRoYXQgaXQgYmUgbm90aWZpZWQgd2l0aCBmb3JrCisgCSAqIGV2ZW50cywgd2Ugc2hvdWxkIHNlbmQgaXQgb25lIG5vdyBmb3IgZXZlcnkgcHJvY2VzcyBpbiB0aGUKKyAJICogc3lzdGVtICovCisJaWYgKHNzLT5mb3JrKSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisKKwkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJZG9fZWFjaF90aHJlYWQoZywgcCkgeworCQkJc3MtPmZvcmsoc3MsIHApOworCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJfQorCisJbmVlZF9mb3JrZXhpdF9jYWxsYmFjayB8PSBzcy0+Zm9yayB8fCBzcy0+ZXhpdDsKKworCXNzLT5hY3RpdmUgPSAxOworfQorCisvKioKKyAqIGNncm91cF9pbml0X2Vhcmx5IC0gaW5pdGlhbGl6ZSBjZ3JvdXBzIGF0IHN5c3RlbSBib290LCBhbmQKKyAqIGluaXRpYWxpemUgYW55IHN1YnN5c3RlbXMgdGhhdCByZXF1ZXN0IGVhcmx5IGluaXQuCisgKi8KK2ludCBfX2luaXQgY2dyb3VwX2luaXRfZWFybHkodm9pZCkKK3sKKwlpbnQgaTsKKwlrcmVmX2luaXQoJmluaXRfY3NzX3NldC5yZWYpOworCWtyZWZfZ2V0KCZpbml0X2Nzc19zZXQucmVmKTsKKwlJTklUX0xJU1RfSEVBRCgmaW5pdF9jc3Nfc2V0Lmxpc3QpOworCUlOSVRfTElTVF9IRUFEKCZpbml0X2Nzc19zZXQuY2dfbGlua3MpOworCUlOSVRfTElTVF9IRUFEKCZpbml0X2Nzc19zZXQudGFza3MpOworCWNzc19zZXRfY291bnQgPSAxOworCWluaXRfY2dyb3VwX3Jvb3QoJnJvb3Rub2RlKTsKKwlsaXN0X2FkZCgmcm9vdG5vZGUucm9vdF9saXN0LCAmcm9vdHMpOworCXJvb3RfY291bnQgPSAxOworCWluaXRfdGFzay5jZ3JvdXBzID0gJmluaXRfY3NzX3NldDsKKworCWluaXRfY3NzX3NldF9saW5rLmNnID0gJmluaXRfY3NzX3NldDsKKwlsaXN0X2FkZCgmaW5pdF9jc3Nfc2V0X2xpbmsuY2dycF9saW5rX2xpc3QsCisJCSAmcm9vdG5vZGUudG9wX2Nncm91cC5jc3Nfc2V0cyk7CisJbGlzdF9hZGQoJmluaXRfY3NzX3NldF9saW5rLmNnX2xpbmtfbGlzdCwKKwkJICZpbml0X2Nzc19zZXQuY2dfbGlua3MpOworCisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisKKwkJQlVHX09OKCFzcy0+bmFtZSk7CisJCUJVR19PTihzdHJsZW4oc3MtPm5hbWUpID4gTUFYX0NHUk9VUF9UWVBFX05BTUVMRU4pOworCQlCVUdfT04oIXNzLT5jcmVhdGUpOworCQlCVUdfT04oIXNzLT5kZXN0cm95KTsKKwkJaWYgKHNzLT5zdWJzeXNfaWQgIT0gaSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJTdWJzeXMgJXMgaWQgPT0gJWRcbiIsCisJCQkgICAgICAgc3MtPm5hbWUsIHNzLT5zdWJzeXNfaWQpOworCQkJQlVHKCk7CisJCX0KKworCQlpZiAoc3MtPmVhcmx5X2luaXQpCisJCQljZ3JvdXBfaW5pdF9zdWJzeXMoc3MpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjZ3JvdXBfaW5pdCAtIHJlZ2lzdGVyIGNncm91cCBmaWxlc3lzdGVtIGFuZCAvcHJvYyBmaWxlLCBhbmQKKyAqIGluaXRpYWxpemUgYW55IHN1YnN5c3RlbXMgdGhhdCBkaWRuJ3QgcmVxdWVzdCBlYXJseSBpbml0LgorICovCitpbnQgX19pbml0IGNncm91cF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKwlpbnQgaTsKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OworCisJZXJyID0gYmRpX2luaXQoJmNncm91cF9iYWNraW5nX2Rldl9pbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisJCWlmICghc3MtPmVhcmx5X2luaXQpCisJCQljZ3JvdXBfaW5pdF9zdWJzeXMoc3MpOworCX0KKworCWVyciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNncm91cF9mc190eXBlKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXQ7CisKKwllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJjZ3JvdXBzIiwgMCwgTlVMTCk7CisJaWYgKGVudHJ5KQorCQllbnRyeS0+cHJvY19mb3BzID0gJnByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9uczsKKworb3V0OgorCWlmIChlcnIpCisJCWJkaV9kZXN0cm95KCZjZ3JvdXBfYmFja2luZ19kZXZfaW5mbyk7CisKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogcHJvY19jZ3JvdXBfc2hvdygpCisgKiAgLSBQcmludCB0YXNrJ3MgY2dyb3VwIHBhdGhzIGludG8gc2VxX2ZpbGUsIG9uZSBsaW5lIGZvciBlYWNoIGhpZXJhcmNoeQorICogIC0gVXNlZCBmb3IgL3Byb2MvPHBpZD4vY2dyb3VwLgorICogIC0gTm8gbmVlZCB0byB0YXNrX2xvY2sodHNrKSBvbiB0aGlzIHRzay0+Y2dyb3VwIHJlZmVyZW5jZSwgYXMgaXQKKyAqICAgIGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiB0c2stPmNncm91cCBjaGFuZ2VzIGFmdGVyIHdlIHJlYWQgaXQsCisgKiAgICBhbmQgd2UgdGFrZSBjZ3JvdXBfbXV0ZXgsIGtlZXBpbmcgYXR0YWNoX3Rhc2soKSBmcm9tIGNoYW5naW5nIGl0CisgKiAgICBhbnl3YXkuICBObyBuZWVkIHRvIGNoZWNrIHRoYXQgdHNrLT5jZ3JvdXAgIT0gTlVMTCwgdGhhbmtzIHRvCisgKiAgICB0aGVfdG9wX2Nncm91cF9oYWNrIGluIGNncm91cF9leGl0KCksIHdoaWNoIHNldHMgYW4gZXhpdGluZyB0YXNrcworICogICAgY2dyb3VwIHRvIHRvcF9jZ3JvdXAuCisgKi8KKworLyogVE9ETzogVXNlIGEgcHJvcGVyIHNlcV9maWxlIGl0ZXJhdG9yICovCitzdGF0aWMgaW50IHByb2NfY2dyb3VwX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCXN0cnVjdCBwaWQgKnBpZDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKKwljaGFyICpidWY7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdDsKKworCXJldHZhbCA9IC1FTk9NRU07CisJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dDsKKworCXJldHZhbCA9IC1FU1JDSDsKKwlwaWQgPSBtLT5wcml2YXRlOworCXRzayA9IGdldF9waWRfdGFzayhwaWQsIFBJRFRZUEVfUElEKTsKKwlpZiAoIXRzaykKKwkJZ290byBvdXRfZnJlZTsKKworCXJldHZhbCA9IDA7CisKKwltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCisJZm9yX2VhY2hfcm9vdChyb290KSB7CisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzczsKKwkJc3RydWN0IGNncm91cCAqY2dycDsKKwkJaW50IHN1YnN5c19pZDsKKwkJaW50IGNvdW50ID0gMDsKKworCQkvKiBTa2lwIHRoaXMgaGllcmFyY2h5IGlmIGl0IGhhcyBubyBhY3RpdmUgc3Vic3lzdGVtcyAqLworCQlpZiAoIXJvb3QtPmFjdHVhbF9zdWJzeXNfYml0cykKKwkJCWNvbnRpbnVlOworCQlmb3JfZWFjaF9zdWJzeXMocm9vdCwgc3MpCisJCQlzZXFfcHJpbnRmKG0sICIlcyVzIiwgY291bnQrKyA/ICIsIiA6ICIiLCBzcy0+bmFtZSk7CisJCXNlcV9wdXRjKG0sICc6Jyk7CisJCWdldF9maXJzdF9zdWJzeXMoJnJvb3QtPnRvcF9jZ3JvdXAsIE5VTEwsICZzdWJzeXNfaWQpOworCQljZ3JwID0gdGFza19jZ3JvdXAodHNrLCBzdWJzeXNfaWQpOworCQlyZXR2YWwgPSBjZ3JvdXBfcGF0aChjZ3JwLCBidWYsIFBBR0VfU0laRSk7CisJCWlmIChyZXR2YWwgPCAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCQlzZXFfcHV0cyhtLCBidWYpOworCQlzZXFfcHV0YyhtLCAnXG4nKTsKKwl9CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCXB1dF90YXNrX3N0cnVjdCh0c2spOworb3V0X2ZyZWU6CisJa2ZyZWUoYnVmKTsKK291dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGNncm91cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBwaWQgKnBpZCA9IFBST0NfSShpbm9kZSktPnBpZDsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY19jZ3JvdXBfc2hvdywgcGlkKTsKK30KKworc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2Nncm91cF9vcGVyYXRpb25zID0geworCS5vcGVuCQk9IGNncm91cF9vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCisvKiBEaXNwbGF5IGluZm9ybWF0aW9uIGFib3V0IGVhY2ggc3Vic3lzdGVtIGFuZCBlYWNoIGhpZXJhcmNoeSAqLworc3RhdGljIGludCBwcm9jX2Nncm91cHN0YXRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCWludCBpOworCXN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290OworCisJc2VxX3B1dHMobSwgIiNzdWJzeXNfbmFtZVx0aGllcmFyY2h5XHRudW1fY2dyb3Vwc1xuIik7CisJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CisJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyA9IHN1YnN5c1tpXTsKKwkJc2VxX3ByaW50ZihtLCAiJXNcdCVsdVx0JWRcbiIsCisJCQkgICBzcy0+bmFtZSwgc3MtPnJvb3QtPnN1YnN5c19iaXRzLAorCQkJICAgc3MtPnJvb3QtPm51bWJlcl9vZl9jZ3JvdXBzKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNncm91cHN0YXRzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfY2dyb3Vwc3RhdHNfc2hvdywgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2dyb3Vwc3RhdHNfb3BlcmF0aW9ucyA9IHsKKwkub3BlbiA9IGNncm91cHN0YXRzX29wZW4sCisJLnJlYWQgPSBzZXFfcmVhZCwKKwkubGxzZWVrID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCit9OworCisvKioKKyAqIGNncm91cF9mb3JrIC0gYXR0YWNoIG5ld2x5IGZvcmtlZCB0YXNrIHRvIGl0cyBwYXJlbnRzIGNncm91cC4KKyAqIEB0c2s6IHBvaW50ZXIgdG8gdGFza19zdHJ1Y3Qgb2YgZm9ya2luZyBwYXJlbnQgcHJvY2Vzcy4KKyAqCisgKiBEZXNjcmlwdGlvbjogQSB0YXNrIGluaGVyaXRzIGl0cyBwYXJlbnQncyBjZ3JvdXAgYXQgZm9yaygpLgorICoKKyAqIEEgcG9pbnRlciB0byB0aGUgc2hhcmVkIGNzc19zZXQgd2FzIGF1dG9tYXRpY2FsbHkgY29waWVkIGluCisgKiBmb3JrLmMgYnkgZHVwX3Rhc2tfc3RydWN0KCkuICBIb3dldmVyLCB3ZSBpZ25vcmUgdGhhdCBjb3B5LCBzaW5jZQorICogaXQgd2FzIG5vdCBtYWRlIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIFJDVSBvciBjZ3JvdXBfbXV0ZXgsIHNvCisgKiBtaWdodCBubyBsb25nZXIgYmUgYSB2YWxpZCBjZ3JvdXAgcG9pbnRlci4gIGF0dGFjaF90YXNrKCkgbWlnaHQKKyAqIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIGN1cnJlbnQtPmNncm91cHMsIGFsbG93aW5nIHRoZSBwcmV2aW91c2x5CisgKiByZWZlcmVuY2VkIGNncm91cCBncm91cCB0byBiZSByZW1vdmVkIGFuZCBmcmVlZC4KKyAqCisgKiBBdCB0aGUgcG9pbnQgdGhhdCBjZ3JvdXBfZm9yaygpIGlzIGNhbGxlZCwgJ2N1cnJlbnQnIGlzIHRoZSBwYXJlbnQKKyAqIHRhc2ssIGFuZCB0aGUgcGFzc2VkIGFyZ3VtZW50ICdjaGlsZCcgcG9pbnRzIHRvIHRoZSBjaGlsZCB0YXNrLgorICovCit2b2lkIGNncm91cF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJdGFza19sb2NrKGN1cnJlbnQpOworCWNoaWxkLT5jZ3JvdXBzID0gY3VycmVudC0+Y2dyb3VwczsKKwlnZXRfY3NzX3NldChjaGlsZC0+Y2dyb3Vwcyk7CisJdGFza191bmxvY2soY3VycmVudCk7CisJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5jZ19saXN0KTsKK30KKworLyoqCisgKiBjZ3JvdXBfZm9ya19jYWxsYmFja3MgLSBjYWxsZWQgb24gYSBuZXcgdGFzayB2ZXJ5IHNvb24gYmVmb3JlCisgKiBhZGRpbmcgaXQgdG8gdGhlIHRhc2tsaXN0LiBObyBuZWVkIHRvIHRha2UgYW55IGxvY2tzIHNpbmNlIG5vLW9uZQorICogY2FuIGJlIG9wZXJhdGluZyBvbiB0aGlzIHRhc2sKKyAqLwordm9pZCBjZ3JvdXBfZm9ya19jYWxsYmFja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlpZiAobmVlZF9mb3JrZXhpdF9jYWxsYmFjaykgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOworCQkJaWYgKHNzLT5mb3JrKQorCQkJCXNzLT5mb3JrKHNzLCBjaGlsZCk7CisJCX0KKwl9Cit9CisKKy8qKgorICogY2dyb3VwX3Bvc3RfZm9yayAtIGNhbGxlZCBvbiBhIG5ldyB0YXNrIGFmdGVyIGFkZGluZyBpdCB0byB0aGUKKyAqIHRhc2sgbGlzdC4gQWRkcyB0aGUgdGFzayB0byB0aGUgbGlzdCBydW5uaW5nIHRocm91Z2ggaXRzIGNzc19zZXQKKyAqIGlmIG5lY2Vzc2FyeS4gSGFzIHRvIGJlIGFmdGVyIHRoZSB0YXNrIGlzIHZpc2libGUgb24gdGhlIHRhc2sgbGlzdAorICogaW4gY2FzZSB3ZSByYWNlIHdpdGggdGhlIGZpcnN0IGNhbGwgdG8gY2dyb3VwX2l0ZXJfc3RhcnQoKSAtIHRvCisgKiBndWFyYW50ZWUgdGhhdCB0aGUgbmV3IHRhc2sgZW5kcyB1cCBvbiBpdHMgbGlzdC4gKi8KK3ZvaWQgY2dyb3VwX3Bvc3RfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCWlmICh1c2VfdGFza19jc3Nfc2V0X2xpbmtzKSB7CisJCXdyaXRlX2xvY2soJmNzc19zZXRfbG9jayk7CisJCWlmIChsaXN0X2VtcHR5KCZjaGlsZC0+Y2dfbGlzdCkpCisJCQlsaXN0X2FkZCgmY2hpbGQtPmNnX2xpc3QsICZjaGlsZC0+Y2dyb3Vwcy0+dGFza3MpOworCQl3cml0ZV91bmxvY2soJmNzc19zZXRfbG9jayk7CisJfQorfQorLyoqCisgKiBjZ3JvdXBfZXhpdCAtIGRldGFjaCBjZ3JvdXAgZnJvbSBleGl0aW5nIHRhc2sKKyAqIEB0c2s6IHBvaW50ZXIgdG8gdGFza19zdHJ1Y3Qgb2YgZXhpdGluZyBwcm9jZXNzCisgKgorICogRGVzY3JpcHRpb246IERldGFjaCBjZ3JvdXAgZnJvbSBAdHNrIGFuZCByZWxlYXNlIGl0LgorICoKKyAqIE5vdGUgdGhhdCBjZ3JvdXBzIG1hcmtlZCBub3RpZnlfb25fcmVsZWFzZSBmb3JjZSBldmVyeSB0YXNrIGluCisgKiB0aGVtIHRvIHRha2UgdGhlIGdsb2JhbCBjZ3JvdXBfbXV0ZXggbXV0ZXggd2hlbiBleGl0aW5nLgorICogVGhpcyBjb3VsZCBpbXBhY3Qgc2NhbGluZyBvbiB2ZXJ5IGxhcmdlIHN5c3RlbXMuICBCZSByZWx1Y3RhbnQgdG8KKyAqIHVzZSBub3RpZnlfb25fcmVsZWFzZSBjZ3JvdXBzIHdoZXJlIHZlcnkgaGlnaCB0YXNrIGV4aXQgc2NhbGluZworICogaXMgcmVxdWlyZWQgb24gbGFyZ2Ugc3lzdGVtcy4KKyAqCisgKiB0aGVfdG9wX2Nncm91cF9oYWNrOgorICoKKyAqICAgIFNldCB0aGUgZXhpdGluZyB0YXNrcyBjZ3JvdXAgdG8gdGhlIHJvb3QgY2dyb3VwICh0b3BfY2dyb3VwKS4KKyAqCisgKiAgICBXZSBjYWxsIGNncm91cF9leGl0KCkgd2hpbGUgdGhlIHRhc2sgaXMgc3RpbGwgY29tcGV0ZW50IHRvCisgKiAgICBoYW5kbGUgbm90aWZ5X29uX3JlbGVhc2UoKSwgdGhlbiBsZWF2ZSB0aGUgdGFzayBhdHRhY2hlZCB0byB0aGUKKyAqICAgIHJvb3QgY2dyb3VwIGluIGVhY2ggaGllcmFyY2h5IGZvciB0aGUgcmVtYWluZGVyIG9mIGl0cyBleGl0LgorICoKKyAqICAgIFRvIGRvIHRoaXMgcHJvcGVybHksIHdlIHdvdWxkIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9uCisgKiAgICB0b3BfY2dyb3VwLCBhbmQgbmVhciB0aGUgdmVyeSBlbmQgb2YgdGhlIGtlcm5lbC9leGl0LmMgZG9fZXhpdCgpCisgKiAgICBjb2RlIHdlIHdvdWxkIGFkZCBhIHNlY29uZCBjZ3JvdXAgZnVuY3Rpb24gY2FsbCwgdG8gZHJvcCB0aGF0CisgKiAgICByZWZlcmVuY2UuICBUaGlzIHdvdWxkIGp1c3QgY3JlYXRlIGFuIHVubmVjZXNzYXJ5IGhvdCBzcG90IG9uCisgKiAgICB0aGUgdG9wX2Nncm91cCByZWZlcmVuY2UgY291bnQsIHRvIG5vIGF2YWlsLgorICoKKyAqICAgIE5vcm1hbGx5LCBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIGEgY2dyb3VwIHdpdGhvdXQgYnVtcGluZyBpdHMKKyAqICAgIGNvdW50IGlzIHVuc2FmZS4gICBUaGUgY2dyb3VwIGNvdWxkIGdvIGF3YXksIG9yIHNvbWVvbmUgY291bGQKKyAqICAgIGF0dGFjaCB1cyB0byBhIGRpZmZlcmVudCBjZ3JvdXAsIGRlY3JlbWVudGluZyB0aGUgY291bnQgb24KKyAqICAgIHRoZSBmaXJzdCBjZ3JvdXAgdGhhdCB3ZSBuZXZlciBpbmNyZW1lbnRlZC4gIEJ1dCBpbiB0aGlzIGNhc2UsCisgKiAgICB0b3BfY2dyb3VwIGlzbid0IGdvaW5nIGF3YXksIGFuZCBlaXRoZXIgdGFzayBoYXMgUEZfRVhJVElORyBzZXQsCisgKiAgICB3aGljaCB3YXJkcyBvZmYgYW55IGF0dGFjaF90YXNrKCkgYXR0ZW1wdHMsIG9yIHRhc2sgaXMgYSBmYWlsZWQKKyAqICAgIGZvcmssIG5ldmVyIHZpc2libGUgdG8gYXR0YWNoX3Rhc2suCisgKgorICovCit2b2lkIGNncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBpbnQgcnVuX2NhbGxiYWNrcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3NzX3NldCAqY2c7CisKKwlpZiAocnVuX2NhbGxiYWNrcyAmJiBuZWVkX2ZvcmtleGl0X2NhbGxiYWNrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKKwkJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyA9IHN1YnN5c1tpXTsKKwkJCWlmIChzcy0+ZXhpdCkKKwkJCQlzcy0+ZXhpdChzcywgdHNrKTsKKwkJfQorCX0KKworCS8qCisJICogVW5saW5rIGZyb20gdGhlIGNzc19zZXQgdGFzayBsaXN0IGlmIG5lY2Vzc2FyeS4KKwkgKiBPcHRpbWlzdGljYWxseSBjaGVjayBjZ19saXN0IGJlZm9yZSB0YWtpbmcKKwkgKiBjc3Nfc2V0X2xvY2sKKwkgKi8KKwlpZiAoIWxpc3RfZW1wdHkoJnRzay0+Y2dfbGlzdCkpIHsKKwkJd3JpdGVfbG9jaygmY3NzX3NldF9sb2NrKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZ0c2stPmNnX2xpc3QpKQorCQkJbGlzdF9kZWwoJnRzay0+Y2dfbGlzdCk7CisJCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKKwl9CisKKwkvKiBSZWFzc2lnbiB0aGUgdGFzayB0byB0aGUgaW5pdF9jc3Nfc2V0LiAqLworCXRhc2tfbG9jayh0c2spOworCWNnID0gdHNrLT5jZ3JvdXBzOworCXRzay0+Y2dyb3VwcyA9ICZpbml0X2Nzc19zZXQ7CisJdGFza191bmxvY2sodHNrKTsKKwlpZiAoY2cpCisJCXB1dF9jc3Nfc2V0X3Rhc2tleGl0KGNnKTsKK30KKworLyoqCisgKiBjZ3JvdXBfY2xvbmUgLSBkdXBsaWNhdGUgdGhlIGN1cnJlbnQgY2dyb3VwIGluIHRoZSBoaWVyYXJjaHkKKyAqIHRoYXQgdGhlIGdpdmVuIHN1YnN5c3RlbSBpcyBhdHRhY2hlZCB0bywgYW5kIG1vdmUgdGhpcyB0YXNrIGludG8KKyAqIHRoZSBuZXcgY2hpbGQKKyAqLworaW50IGNncm91cF9jbG9uZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IGNncm91cF9zdWJzeXMgKnN1YnN5cykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJaW50IHJldCA9IDA7CisJY2hhciBub2RlbmFtZVtNQVhfQ0dST1VQX1RZUEVfTkFNRUxFTl07CisJc3RydWN0IGNncm91cCAqcGFyZW50LCAqY2hpbGQ7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgY3NzX3NldCAqY2c7CisJc3RydWN0IGNncm91cGZzX3Jvb3QgKnJvb3Q7CisJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCisJLyogV2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSBhbiB1bnJlZ2lzdGVyZWQgc3Vic3lzdGVtICovCisJQlVHX09OKCFzdWJzeXMtPmFjdGl2ZSk7CisKKwkvKiBGaXJzdCBmaWd1cmUgb3V0IHdoYXQgaGllcmFyY2h5IGFuZCBjZ3JvdXAgd2UncmUgZGVhbGluZworCSAqIHdpdGgsIGFuZCBwaW4gdGhlbSBzbyB3ZSBjYW4gZHJvcCBjZ3JvdXBfbXV0ZXggKi8KKwltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworIGFnYWluOgorCXJvb3QgPSBzdWJzeXMtPnJvb3Q7CisJaWYgKHJvb3QgPT0gJnJvb3Rub2RlKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJOb3QgY2xvbmluZyBjZ3JvdXAgZm9yIHVudXNlZCBzdWJzeXN0ZW0gJXNcbiIsCisJCSAgICAgICBzdWJzeXMtPm5hbWUpOworCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJCXJldHVybiAwOworCX0KKwljZyA9IHRzay0+Y2dyb3VwczsKKwlwYXJlbnQgPSB0YXNrX2Nncm91cCh0c2ssIHN1YnN5cy0+c3Vic3lzX2lkKTsKKworCXNucHJpbnRmKG5vZGVuYW1lLCBNQVhfQ0dST1VQX1RZUEVfTkFNRUxFTiwgIm5vZGVfJWQiLCB0c2stPnBpZCk7CisKKwkvKiBQaW4gdGhlIGhpZXJhcmNoeSAqLworCWF0b21pY19pbmMoJnBhcmVudC0+cm9vdC0+c2ItPnNfYWN0aXZlKTsKKworCS8qIEtlZXAgdGhlIGNncm91cCBhbGl2ZSAqLworCWdldF9jc3Nfc2V0KGNnKTsKKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisKKwkvKiBOb3cgZG8gdGhlIFZGUyB3b3JrIHRvIGNyZWF0ZSBhIGNncm91cCAqLworCWlub2RlID0gcGFyZW50LT5kZW50cnktPmRfaW5vZGU7CisKKwkvKiBIb2xkIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG11dGV4IGFjcm9zcyB0aGlzIG9wZXJhdGlvbiB0bworCSAqIHN0b3AgYW55b25lIGVsc2UgZGVsZXRpbmcgdGhlIG5ldyBjZ3JvdXAgKi8KKwltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obm9kZW5hbWUsIHBhcmVudC0+ZGVudHJ5LCBzdHJsZW4obm9kZW5hbWUpKTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkNvdWxkbid0IGFsbG9jYXRlIGRlbnRyeSBmb3IgJXM6ICVsZFxuIiwgbm9kZW5hbWUsCisJCSAgICAgICBQVFJfRVJSKGRlbnRyeSkpOworCQlyZXQgPSBQVFJfRVJSKGRlbnRyeSk7CisJCWdvdG8gb3V0X3JlbGVhc2U7CisJfQorCisJLyogQ3JlYXRlIHRoZSBjZ3JvdXAgZGlyZWN0b3J5LCB3aGljaCBhbHNvIGNyZWF0ZXMgdGhlIGNncm91cCAqLworCXJldCA9IHZmc19ta2Rpcihpbm9kZSwgZGVudHJ5LCBTX0lGRElSIHwgMDc1NSk7CisJY2hpbGQgPSBfX2RfY2dycChkZW50cnkpOworCWRwdXQoZGVudHJ5KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIGNncm91cCAlczogJWRcbiIsIG5vZGVuYW1lLAorCQkgICAgICAgcmV0KTsKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKKwlpZiAoIWNoaWxkKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJDb3VsZG4ndCBmaW5kIG5ldyBjZ3JvdXAgJXNcbiIsIG5vZGVuYW1lKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfcmVsZWFzZTsKKwl9CisKKwkvKiBUaGUgY2dyb3VwIG5vdyBleGlzdHMuIFJldGFrZSBjZ3JvdXBfbXV0ZXggYW5kIGNoZWNrCisJICogdGhhdCB3ZSdyZSBzdGlsbCBpbiB0aGUgc2FtZSBzdGF0ZSB0aGF0IHdlIHRob3VnaHQgd2UKKwkgKiB3ZXJlLiAqLworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisJaWYgKChyb290ICE9IHN1YnN5cy0+cm9vdCkgfHwKKwkgICAgKHBhcmVudCAhPSB0YXNrX2Nncm91cCh0c2ssIHN1YnN5cy0+c3Vic3lzX2lkKSkpIHsKKwkJLyogQWFyZ2gsIHdlIHJhY2VkIC4uLiAqLworCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwkJcHV0X2Nzc19zZXQoY2cpOworCisJCWRlYWN0aXZhdGVfc3VwZXIocGFyZW50LT5yb290LT5zYik7CisJCS8qIFRoZSBjZ3JvdXAgaXMgc3RpbGwgYWNjZXNzaWJsZSBpbiB0aGUgVkZTLCBidXQKKwkJICogd2UncmUgbm90IGdvaW5nIHRvIHRyeSB0byBybWRpcigpIGl0IGF0IHRoaXMKKwkJICogcG9pbnQuICovCisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJSYWNlIGluIGNncm91cF9jbG9uZSgpIC0gbGVha2luZyBjZ3JvdXAgJXNcbiIsCisJCSAgICAgICBub2RlbmFtZSk7CisJCWdvdG8gYWdhaW47CisJfQorCisJLyogZG8gYW55IHJlcXVpcmVkIGF1dG8tc2V0dXAgKi8KKwlmb3JfZWFjaF9zdWJzeXMocm9vdCwgc3MpIHsKKwkJaWYgKHNzLT5wb3N0X2Nsb25lKQorCQkJc3MtPnBvc3RfY2xvbmUoc3MsIGNoaWxkKTsKKwl9CisKKwkvKiBBbGwgc2VlbXMgZmluZS4gRmluaXNoIGJ5IG1vdmluZyB0aGUgdGFzayBpbnRvIHRoZSBuZXcgY2dyb3VwICovCisJcmV0ID0gYXR0YWNoX3Rhc2soY2hpbGQsIHRzayk7CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCisgb3V0X3JlbGVhc2U6CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCXB1dF9jc3Nfc2V0KGNnKTsKKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJZGVhY3RpdmF0ZV9zdXBlcihwYXJlbnQtPnJvb3QtPnNiKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogU2VlIGlmICJjZ3JwIiBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIGN1cnJlbnQgdGFzaydzIGNncm91cCBpbgorICogdGhlIGFwcHJvcHJpYXRlIGhpZXJhcmNoeQorICoKKyAqIElmIHdlIGFyZSBzZW5kaW5nIGluIGR1bW15dG9wLCB0aGVuIHByZXN1bWFibHkgd2UgYXJlIGNyZWF0aW5nCisgKiB0aGUgdG9wIGNncm91cCBpbiB0aGUgc3Vic3lzdGVtLgorICoKKyAqIENhbGxlZCBvbmx5IGJ5IHRoZSBucyAobnNwcm94eSkgY2dyb3VwLgorICovCitpbnQgY2dyb3VwX2lzX2Rlc2NlbmRhbnQoY29uc3Qgc3RydWN0IGNncm91cCAqY2dycCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjZ3JvdXAgKnRhcmdldDsKKwlpbnQgc3Vic3lzX2lkOworCisJaWYgKGNncnAgPT0gZHVtbXl0b3ApCisJCXJldHVybiAxOworCisJZ2V0X2ZpcnN0X3N1YnN5cyhjZ3JwLCBOVUxMLCAmc3Vic3lzX2lkKTsKKwl0YXJnZXQgPSB0YXNrX2Nncm91cChjdXJyZW50LCBzdWJzeXNfaWQpOworCXdoaWxlIChjZ3JwICE9IHRhcmdldCAmJiBjZ3JwIT0gY2dycC0+dG9wX2Nncm91cCkKKwkJY2dycCA9IGNncnAtPnBhcmVudDsKKwlyZXQgPSAoY2dycCA9PSB0YXJnZXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2Zvcl9yZWxlYXNlKHN0cnVjdCBjZ3JvdXAgKmNncnApCit7CisJLyogQWxsIG9mIHRoZXNlIGNoZWNrcyByZWx5IG9uIFJDVSB0byBrZWVwIHRoZSBjZ3JvdXAKKwkgKiBzdHJ1Y3R1cmUgYWxpdmUgKi8KKwlpZiAoY2dyb3VwX2lzX3JlbGVhc2FibGUoY2dycCkgJiYgIWF0b21pY19yZWFkKCZjZ3JwLT5jb3VudCkKKwkgICAgJiYgbGlzdF9lbXB0eSgmY2dycC0+Y2hpbGRyZW4pICYmICFjZ3JvdXBfaGFzX2Nzc19yZWZzKGNncnApKSB7CisJCS8qIENvbnRyb2wgR3JvdXAgaXMgY3VycmVudGx5IHJlbW92ZWFibGUuIElmIGl0J3Mgbm90CisJCSAqIGFscmVhZHkgcXVldWVkIGZvciBhIHVzZXJzcGFjZSBub3RpZmljYXRpb24sIHF1ZXVlCisJCSAqIGl0IG5vdyAqLworCQlpbnQgbmVlZF9zY2hlZHVsZV93b3JrID0gMDsKKwkJc3Bpbl9sb2NrKCZyZWxlYXNlX2xpc3RfbG9jayk7CisJCWlmICghY2dyb3VwX2lzX3JlbW92ZWQoY2dycCkgJiYKKwkJICAgIGxpc3RfZW1wdHkoJmNncnAtPnJlbGVhc2VfbGlzdCkpIHsKKwkJCWxpc3RfYWRkKCZjZ3JwLT5yZWxlYXNlX2xpc3QsICZyZWxlYXNlX2xpc3QpOworCQkJbmVlZF9zY2hlZHVsZV93b3JrID0gMTsKKwkJfQorCQlzcGluX3VubG9jaygmcmVsZWFzZV9saXN0X2xvY2spOworCQlpZiAobmVlZF9zY2hlZHVsZV93b3JrKQorCQkJc2NoZWR1bGVfd29yaygmcmVsZWFzZV9hZ2VudF93b3JrKTsKKwl9Cit9CisKK3ZvaWQgX19jc3NfcHV0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCit7CisJc3RydWN0IGNncm91cCAqY2dycCA9IGNzcy0+Y2dyb3VwOworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3NzLT5yZWZjbnQpICYmIG5vdGlmeV9vbl9yZWxlYXNlKGNncnApKSB7CisJCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmY2dycC0+ZmxhZ3MpOworCQljaGVja19mb3JfcmVsZWFzZShjZ3JwKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKKy8qCisgKiBOb3RpZnkgdXNlcnNwYWNlIHdoZW4gYSBjZ3JvdXAgaXMgcmVsZWFzZWQsIGJ5IHJ1bm5pbmcgdGhlCisgKiBjb25maWd1cmVkIHJlbGVhc2UgYWdlbnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY2dyb3VwIChwYXRoCisgKiByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiBjZ3JvdXAgZmlsZSBzeXN0ZW0pIGFzIHRoZSBhcmd1bWVudC4KKyAqCisgKiBNb3N0IGxpa2VseSwgdGhpcyB1c2VyIGNvbW1hbmQgd2lsbCB0cnkgdG8gcm1kaXIgdGhpcyBjZ3JvdXAuCisgKgorICogVGhpcyByYWNlcyB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHNvbWUgb3RoZXIgdGFzayB3aWxsIGJlCisgKiBhdHRhY2hlZCB0byB0aGlzIGNncm91cCBiZWZvcmUgaXQgaXMgcmVtb3ZlZCwgb3IgdGhhdCBzb21lIG90aGVyCisgKiB1c2VyIHRhc2sgd2lsbCAnbWtkaXInIGEgY2hpbGQgY2dyb3VwIG9mIHRoaXMgY2dyb3VwLiAgVGhhdCdzIG9rLgorICogVGhlIHByZXN1bWVkICdybWRpcicgd2lsbCBmYWlsIHF1aWV0bHkgaWYgdGhpcyBjZ3JvdXAgaXMgbm8gbG9uZ2VyCisgKiB1bnVzZWQsIGFuZCB0aGlzIGNncm91cCB3aWxsIGJlIHJlcHJpZXZlZCBmcm9tIGl0cyBkZWF0aCBzZW50ZW5jZSwKKyAqIHRvIGNvbnRpbnVlIHRvIHNlcnZlIGEgdXNlZnVsIGV4aXN0ZW5jZS4gIE5leHQgdGltZSBpdCdzIHJlbGVhc2VkLAorICogd2Ugd2lsbCBnZXQgbm90aWZpZWQgYWdhaW4sIGlmIGl0IHN0aWxsIGhhcyAnbm90aWZ5X29uX3JlbGVhc2UnIHNldC4KKyAqCisgKiBUaGUgZmluYWwgYXJnIHRvIGNhbGxfdXNlcm1vZGVoZWxwZXIoKSBpcyBVTUhfV0FJVF9FWEVDLCB3aGljaAorICogbWVhbnMgb25seSB3YWl0IHVudGlsIHRoZSB0YXNrIGlzIHN1Y2Nlc3NmdWxseSBleGVjdmUoKSdkLiAgVGhlCisgKiBzZXBhcmF0ZSByZWxlYXNlIGFnZW50IHRhc2sgaXMgZm9ya2VkIGJ5IGNhbGxfdXNlcm1vZGVoZWxwZXIoKSwKKyAqIHRoZW4gY29udHJvbCBpbiB0aGlzIHRocmVhZCByZXR1cm5zIGhlcmUsIHdpdGhvdXQgd2FpdGluZyBmb3IgdGhlCisgKiByZWxlYXNlIGFnZW50IHRhc2suICBXZSBkb24ndCBib3RoZXIgdG8gd2FpdCBiZWNhdXNlIHRoZSBjYWxsZXIgb2YKKyAqIHRoaXMgcm91dGluZSBoYXMgbm8gdXNlIGZvciB0aGUgZXhpdCBzdGF0dXMgb2YgdGhlIHJlbGVhc2UgYWdlbnQKKyAqIHRhc2ssIHNvIG5vIHNlbnNlIGhvbGRpbmcgb3VyIGNhbGxlciB1cCBmb3IgdGhhdC4KKyAqCisgKi8KKworc3RhdGljIHZvaWQgY2dyb3VwX3JlbGVhc2VfYWdlbnQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCUJVR19PTih3b3JrICE9ICZyZWxlYXNlX2FnZW50X3dvcmspOworCW11dGV4X2xvY2soJmNncm91cF9tdXRleCk7CisJc3Bpbl9sb2NrKCZyZWxlYXNlX2xpc3RfbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZyZWxlYXNlX2xpc3QpKSB7CisJCWNoYXIgKmFyZ3ZbM10sICplbnZwWzNdOworCQlpbnQgaTsKKwkJY2hhciAqcGF0aGJ1ZjsKKwkJc3RydWN0IGNncm91cCAqY2dycCA9IGxpc3RfZW50cnkocmVsZWFzZV9saXN0Lm5leHQsCisJCQkJCQkgICAgc3RydWN0IGNncm91cCwKKwkJCQkJCSAgICByZWxlYXNlX2xpc3QpOworCQlsaXN0X2RlbF9pbml0KCZjZ3JwLT5yZWxlYXNlX2xpc3QpOworCQlzcGluX3VubG9jaygmcmVsZWFzZV9saXN0X2xvY2spOworCQlwYXRoYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCQlpZiAoIXBhdGhidWYpIHsKKwkJCXNwaW5fbG9jaygmcmVsZWFzZV9saXN0X2xvY2spOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoY2dyb3VwX3BhdGgoY2dycCwgcGF0aGJ1ZiwgUEFHRV9TSVpFKSA8IDApIHsKKwkJCWtmcmVlKHBhdGhidWYpOworCQkJc3Bpbl9sb2NrKCZyZWxlYXNlX2xpc3RfbG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWkgPSAwOworCQlhcmd2W2krK10gPSBjZ3JwLT5yb290LT5yZWxlYXNlX2FnZW50X3BhdGg7CisJCWFyZ3ZbaSsrXSA9IChjaGFyICopcGF0aGJ1ZjsKKwkJYXJndltpXSA9IE5VTEw7CisKKwkJaSA9IDA7CisJCS8qIG1pbmltYWwgY29tbWFuZCBlbnZpcm9ubWVudCAqLworCQllbnZwW2krK10gPSAiSE9NRT0vIjsKKwkJZW52cFtpKytdID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iOworCQllbnZwW2ldID0gTlVMTDsKKworCQkvKiBEcm9wIHRoZSBsb2NrIHdoaWxlIHdlIGludm9rZSB0aGUgdXNlcm1vZGUgaGVscGVyLAorCQkgKiBzaW5jZSB0aGUgZXhlYyBjb3VsZCBpbnZvbHZlIGhpdHRpbmcgZGlzayBhbmQgaGVuY2UKKwkJICogYmUgYSBzbG93IHByb2Nlc3MgKi8KKwkJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCQljYWxsX3VzZXJtb2RlaGVscGVyKGFyZ3ZbMF0sIGFyZ3YsIGVudnAsIFVNSF9XQUlUX0VYRUMpOworCQlrZnJlZShwYXRoYnVmKTsKKwkJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKKwkJc3Bpbl9sb2NrKCZyZWxlYXNlX2xpc3RfbG9jayk7CisJfQorCXNwaW5fdW5sb2NrKCZyZWxlYXNlX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cF9kZWJ1Zy5jIGIva2VybmVsL2Nncm91cF9kZWJ1Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzAxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvY2dyb3VwX2RlYnVnLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIGtlcm5lbC9jY29udGFpbmVyX2RlYnVnLmMgLSBFeGFtcGxlIGNncm91cCBzdWJzeXN0ZW0gdGhhdAorICogZXhwb3NlcyBkZWJ1ZyBpbmZvCisgKgorICogQ29weXJpZ2h0IChDKSBHb29nbGUgSW5jLCAyMDA3CisgKgorICogRGV2ZWxvcGVkIGJ5IFBhdWwgTWVuYWdlIChtZW5hZ2VAZ29vZ2xlLmNvbSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqZGVidWdfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCQkJCSAgIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyA9IGt6YWxsb2Moc2l6ZW9mKCpjc3MpLCBHRlBfS0VSTkVMKTsKKworCWlmICghY3NzKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCXJldHVybiBjc3M7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQoreworCWtmcmVlKGNvbnQtPnN1YnN5c1tkZWJ1Z19zdWJzeXNfaWRdKTsKK30KKworc3RhdGljIHU2NCBjZ3JvdXBfcmVmY291bnRfcmVhZChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjb250LT5jb3VudCk7Cit9CisKK3N0YXRpYyB1NjQgdGFza2NvdW50X3JlYWQoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0KQoreworCXU2NCBjb3VudDsKKworCWNncm91cF9sb2NrKCk7CisJY291bnQgPSBjZ3JvdXBfdGFza19jb3VudChjb250KTsKKwljZ3JvdXBfdW5sb2NrKCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdTY0IGN1cnJlbnRfY3NzX3NldF9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZnR5cGUgKmNmdCkKK3sKKwlyZXR1cm4gKHU2NCkobG9uZyljdXJyZW50LT5jZ3JvdXBzOworfQorCitzdGF0aWMgdTY0IGN1cnJlbnRfY3NzX3NldF9yZWZjb3VudF9yZWFkKHN0cnVjdCBjZ3JvdXAgKmNvbnQsCisJCQkJCSAgIHN0cnVjdCBjZnR5cGUgKmNmdCkKK3sKKwl1NjQgY291bnQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJY291bnQgPSBhdG9taWNfcmVhZCgmY3VycmVudC0+Y2dyb3Vwcy0+cmVmLnJlZmNvdW50KTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGZpbGVzW10gPSAgeworCXsKKwkJLm5hbWUgPSAiY2dyb3VwX3JlZmNvdW50IiwKKwkJLnJlYWRfdWludCA9IGNncm91cF9yZWZjb3VudF9yZWFkLAorCX0sCisJeworCQkubmFtZSA9ICJ0YXNrY291bnQiLAorCQkucmVhZF91aW50ID0gdGFza2NvdW50X3JlYWQsCisJfSwKKworCXsKKwkJLm5hbWUgPSAiY3VycmVudF9jc3Nfc2V0IiwKKwkJLnJlYWRfdWludCA9IGN1cnJlbnRfY3NzX3NldF9yZWFkLAorCX0sCisKKwl7CisJCS5uYW1lID0gImN1cnJlbnRfY3NzX3NldF9yZWZjb3VudCIsCisJCS5yZWFkX3VpbnQgPSBjdXJyZW50X2Nzc19zZXRfcmVmY291bnRfcmVhZCwKKwl9LAorfTsKKworc3RhdGljIGludCBkZWJ1Z19wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit7CisJcmV0dXJuIGNncm91cF9hZGRfZmlsZXMoY29udCwgc3MsIGZpbGVzLCBBUlJBWV9TSVpFKGZpbGVzKSk7Cit9CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGRlYnVnX3N1YnN5cyA9IHsKKwkubmFtZSA9ICJkZWJ1ZyIsCisJLmNyZWF0ZSA9IGRlYnVnX2NyZWF0ZSwKKwkuZGVzdHJveSA9IGRlYnVnX2Rlc3Ryb3ksCisJLnBvcHVsYXRlID0gZGVidWdfcG9wdWxhdGUsCisJLnN1YnN5c19pZCA9IGRlYnVnX3N1YnN5c19pZCwKK307CmRpZmYgLS1naXQgYS9rZXJuZWwvY29tcGF0LmMgYi9rZXJuZWwvY29tcGF0LmMKaW5kZXggM2JhZTM3NC4uNDJhMWVkNCAxMDA2NDQKLS0tIGEva2VybmVsL2NvbXBhdC5jCisrKyBiL2tlcm5lbC9jb21wYXQuYwpAQCAtNDAsNjIgKzQwLDI3IEBACiAJCQlfX3B1dF91c2VyKHRzLT50dl9uc2VjLCAmY3RzLT50dl9uc2VjKSkgPyAtRUZBVUxUIDogMDsKIH0KIAotc3RhdGljIGxvbmcgY29tcGF0X25hbm9zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQotewotCXVuc2lnbmVkIGxvbmcgZXhwaXJlID0gcmVzdGFydC0+YXJnMCwgbm93ID0gamlmZmllczsKLQlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqcm10cDsKLQotCS8qIERpZCBpdCBleHBpcmUgd2hpbGUgd2UgaGFuZGxlZCBzaWduYWxzPyAqLwotCWlmICghdGltZV9hZnRlcihleHBpcmUsIG5vdykpCi0JCXJldHVybiAwOwotCi0JZXhwaXJlID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKGV4cGlyZSAtIG5vdyk7Ci0JaWYgKGV4cGlyZSA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXJtdHAgPSAoc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKilyZXN0YXJ0LT5hcmcxOwotCWlmIChybXRwKSB7Ci0JCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgY3Q7Ci0JCXN0cnVjdCB0aW1lc3BlYyB0OwotCi0JCWppZmZpZXNfdG9fdGltZXNwZWMoZXhwaXJlLCAmdCk7Ci0JCWN0LnR2X3NlYyA9IHQudHZfc2VjOwotCQljdC50dl9uc2VjID0gdC50dl9uc2VjOwotCQlpZiAoY29weV90b191c2VyKHJtdHAsICZjdCwgc2l6ZW9mKGN0KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JLyogVGhlICdyZXN0YXJ0JyBibG9jayBpcyBhbHJlYWR5IGZpbGxlZCBpbiAqLwotCXJldHVybiAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOwotfQotCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19uYW5vc2xlZXAoc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnJxdHAsCi0JCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICpybXRwKQorCQkJCSAgICAgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnJtdHApCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIHQ7Ci0Jc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBleHBpcmU7CisJc3RydWN0IHRpbWVzcGVjIHR1LCBybXQ7CisJbG9uZyByZXQ7CiAKLQlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYygmdCwgcnF0cCkpCisJaWYgKGdldF9jb21wYXRfdGltZXNwZWMoJnR1LCBycXRwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlpZiAoKHQudHZfbnNlYyA+PSAxMDAwMDAwMDAwTCkgfHwgKHQudHZfbnNlYyA8IDApIHx8ICh0LnR2X3NlYyA8IDApKQorCWlmICghdGltZXNwZWNfdmFsaWQoJnR1KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlleHBpcmUgPSB0aW1lc3BlY190b19qaWZmaWVzKCZ0KSArICh0LnR2X3NlYyB8fCB0LnR2X25zZWMpOwotCWV4cGlyZSA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShleHBpcmUpOwotCWlmIChleHBpcmUgPT0gMCkKLQkJcmV0dXJuIDA7CisJcmV0ID0gaHJ0aW1lcl9uYW5vc2xlZXAoJnR1LCBybXRwID8gJnJtdCA6IE5VTEwsIEhSVElNRVJfTU9ERV9SRUwsCisJCQkJQ0xPQ0tfTU9OT1RPTklDKTsKIAotCWlmIChybXRwKSB7Ci0JCWppZmZpZXNfdG9fdGltZXNwZWMoZXhwaXJlLCAmdCk7Ci0JCWlmIChwdXRfY29tcGF0X3RpbWVzcGVjKCZ0LCBybXRwKSkKKwlpZiAocmV0ICYmIHJtdHApIHsKKwkJaWYgKHB1dF9jb21wYXRfdGltZXNwZWMoJnJtdCwgcm10cCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JcmVzdGFydCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2s7Ci0JcmVzdGFydC0+Zm4gPSBjb21wYXRfbmFub3NsZWVwX3Jlc3RhcnQ7Ci0JcmVzdGFydC0+YXJnMCA9IGppZmZpZXMgKyBleHBpcmU7Ci0JcmVzdGFydC0+YXJnMSA9ICh1bnNpZ25lZCBsb25nKSBybXRwOwotCXJldHVybiAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIGdldF9jb21wYXRfaXRpbWVydmFsKHN0cnVjdCBpdGltZXJ2YWwgKm8sCkBAIC0yNDcsOCArMjEyLDggQEAKIAlpbnQgcmV0OwogCW1tX3NlZ21lbnRfdCBvbGRfZnMgPSBnZXRfZnMgKCk7CiAKLQlpZiAocmVzb3VyY2UgPj0gUkxJTV9OTElNSVRTKSAKLQkJcmV0dXJuIC1FSU5WQUw7CQorCWlmIChyZXNvdXJjZSA+PSBSTElNX05MSU1JVFMpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHJsaW0sIHNpemVvZigqcmxpbSkpIHx8CiAJICAgIF9fZ2V0X3VzZXIoci5ybGltX2N1ciwgJnJsaW0tPnJsaW1fY3VyKSB8fApAQCAtNDc3LDIxICs0NDIsMjEgQEAKIAogaW50IGdldF9jb21wYXRfaXRpbWVyc3BlYyhzdHJ1Y3QgaXRpbWVyc3BlYyAqZHN0LAogCQkJICBjb25zdCBzdHJ1Y3QgY29tcGF0X2l0aW1lcnNwZWMgX191c2VyICpzcmMpCi17IAorewogCWlmIChnZXRfY29tcGF0X3RpbWVzcGVjKCZkc3QtPml0X2ludGVydmFsLCAmc3JjLT5pdF9pbnRlcnZhbCkgfHwKIAkgICAgZ2V0X2NvbXBhdF90aW1lc3BlYygmZHN0LT5pdF92YWx1ZSwgJnNyYy0+aXRfdmFsdWUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKLX0gCit9CiAKIGludCBwdXRfY29tcGF0X2l0aW1lcnNwZWMoc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqZHN0LAogCQkJICBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqc3JjKQoteyAKK3sKIAlpZiAocHV0X2NvbXBhdF90aW1lc3BlYygmc3JjLT5pdF9pbnRlcnZhbCwgJmRzdC0+aXRfaW50ZXJ2YWwpIHx8CiAJICAgIHB1dF9jb21wYXRfdGltZXNwZWMoJnNyYy0+aXRfdmFsdWUsICZkc3QtPml0X3ZhbHVlKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7Ci19IAorfQogCiBsb25nIGNvbXBhdF9zeXNfdGltZXJfY3JlYXRlKGNsb2NraWRfdCB3aGljaF9jbG9jaywKIAkJCXN0cnVjdCBjb21wYXRfc2lnZXZlbnQgX191c2VyICp0aW1lcl9ldmVudF9zcGVjLApAQCAtNTEyLDkgKzQ3Nyw5IEBACiB9CiAKIGxvbmcgY29tcGF0X3N5c190aW1lcl9zZXR0aW1lKHRpbWVyX3QgdGltZXJfaWQsIGludCBmbGFncywKLQkJCSAgc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqbmV3LCAKKwkJCSAgc3RydWN0IGNvbXBhdF9pdGltZXJzcGVjIF9fdXNlciAqbmV3LAogCQkJICBzdHJ1Y3QgY29tcGF0X2l0aW1lcnNwZWMgX191c2VyICpvbGQpCi17IAorewogCWxvbmcgZXJyOwogCW1tX3NlZ21lbnRfdCBvbGRmczsKIAlzdHJ1Y3QgaXRpbWVyc3BlYyBuZXd0cywgb2xkdHM7CkBAIC01MjIsNTggKzQ4Nyw1OCBAQAogCWlmICghbmV3KQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZ2V0X2NvbXBhdF9pdGltZXJzcGVjKCZuZXd0cywgbmV3KSkKLQkJcmV0dXJuIC1FRkFVTFQ7CQorCQlyZXR1cm4gLUVGQVVMVDsKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCWVyciA9IHN5c190aW1lcl9zZXR0aW1lKHRpbWVyX2lkLCBmbGFncywKIAkJCQkoc3RydWN0IGl0aW1lcnNwZWMgX191c2VyICopICZuZXd0cywKIAkJCQkoc3RydWN0IGl0aW1lcnNwZWMgX191c2VyICopICZvbGR0cyk7Ci0Jc2V0X2ZzKG9sZGZzKTsgCisJc2V0X2ZzKG9sZGZzKTsKIAlpZiAoIWVyciAmJiBvbGQgJiYgcHV0X2NvbXBhdF9pdGltZXJzcGVjKG9sZCwgJm9sZHRzKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIGVycjsKLX0gCit9CiAKIGxvbmcgY29tcGF0X3N5c190aW1lcl9nZXR0aW1lKHRpbWVyX3QgdGltZXJfaWQsCiAJCXN0cnVjdCBjb21wYXRfaXRpbWVyc3BlYyBfX3VzZXIgKnNldHRpbmcpCi17IAorewogCWxvbmcgZXJyOwogCW1tX3NlZ21lbnRfdCBvbGRmczsKLQlzdHJ1Y3QgaXRpbWVyc3BlYyB0czsgCisJc3RydWN0IGl0aW1lcnNwZWMgdHM7CiAKIAlvbGRmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCWVyciA9IHN5c190aW1lcl9nZXR0aW1lKHRpbWVyX2lkLAotCQkJCShzdHJ1Y3QgaXRpbWVyc3BlYyBfX3VzZXIgKikgJnRzKTsgCi0Jc2V0X2ZzKG9sZGZzKTsgCisJCQkJKHN0cnVjdCBpdGltZXJzcGVjIF9fdXNlciAqKSAmdHMpOworCXNldF9mcyhvbGRmcyk7CiAJaWYgKCFlcnIgJiYgcHV0X2NvbXBhdF9pdGltZXJzcGVjKHNldHRpbmcsICZ0cykpCiAJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBlcnI7Ci19IAorfQogCiBsb25nIGNvbXBhdF9zeXNfY2xvY2tfc2V0dGltZShjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssCiAJCXN0cnVjdCBjb21wYXRfdGltZXNwZWMgX191c2VyICp0cCkKIHsKIAlsb25nIGVycjsKIAltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzOyAKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYygmdHMsIHRwKSkKLQkJcmV0dXJuIC1FRkFVTFQ7IAorCQlyZXR1cm4gLUVGQVVMVDsKIAlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhLRVJORUxfRFMpOwkKKwlzZXRfZnMoS0VSTkVMX0RTKTsKIAllcnIgPSBzeXNfY2xvY2tfc2V0dGltZSh3aGljaF9jbG9jaywKIAkJCQkoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSAmdHMpOwogCXNldF9mcyhvbGRmcyk7CiAJcmV0dXJuIGVycjsKLX0gCit9CiAKIGxvbmcgY29tcGF0X3N5c19jbG9ja19nZXR0aW1lKGNsb2NraWRfdCB3aGljaF9jbG9jaywKIAkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnRwKQogewogCWxvbmcgZXJyOwogCW1tX3NlZ21lbnRfdCBvbGRmczsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7IAorCXN0cnVjdCB0aW1lc3BlYyB0czsKIAogCW9sZGZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CkBAIC01ODEsMTYgKzU0NiwxNiBAQAogCQkJCShzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopICZ0cyk7CiAJc2V0X2ZzKG9sZGZzKTsKIAlpZiAoIWVyciAmJiBwdXRfY29tcGF0X3RpbWVzcGVjKCZ0cywgdHApKQotCQlyZXR1cm4gLUVGQVVMVDsgCisJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiBlcnI7Ci19IAorfQogCiBsb25nIGNvbXBhdF9zeXNfY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCB3aGljaF9jbG9jaywKIAkJc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKnRwKQogewogCWxvbmcgZXJyOwogCW1tX3NlZ21lbnRfdCBvbGRmczsKLQlzdHJ1Y3QgdGltZXNwZWMgdHM7IAorCXN0cnVjdCB0aW1lc3BlYyB0czsKIAogCW9sZGZzID0gZ2V0X2ZzKCk7CiAJc2V0X2ZzKEtFUk5FTF9EUyk7CkBAIC01OTgsOSArNTYzLDkgQEAKIAkJCSAgICAgICAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSAmdHMpOwogCXNldF9mcyhvbGRmcyk7CiAJaWYgKCFlcnIgJiYgdHAgJiYgcHV0X2NvbXBhdF90aW1lc3BlYygmdHMsIHRwKSkKLQkJcmV0dXJuIC1FRkFVTFQ7IAorCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gZXJyOwotfSAKK30KIAogc3RhdGljIGxvbmcgY29tcGF0X2Nsb2NrX25hbm9zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQogewpAQCAtNjMyLDEwICs1OTcsMTAgQEAKIHsKIAlsb25nIGVycjsKIAltbV9zZWdtZW50X3Qgb2xkZnM7Ci0Jc3RydWN0IHRpbWVzcGVjIGluLCBvdXQ7IAorCXN0cnVjdCB0aW1lc3BlYyBpbiwgb3V0OwogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0OwogCi0JaWYgKGdldF9jb21wYXRfdGltZXNwZWMoJmluLCBycXRwKSkgCisJaWYgKGdldF9jb21wYXRfdGltZXNwZWMoJmluLCBycXRwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlvbGRmcyA9IGdldF9mcygpOwpAQCAtNjU0LDggKzYxOSw4IEBACiAJCXJlc3RhcnQtPmZuID0gY29tcGF0X2Nsb2NrX25hbm9zbGVlcF9yZXN0YXJ0OwogCQlyZXN0YXJ0LT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpIHJtdHA7CiAJfQotCXJldHVybiBlcnI7CQotfSAKKwlyZXR1cm4gZXJyOworfQogCiAvKgogICogV2UgY3VycmVudGx5IG9ubHkgbmVlZCB0aGUgZm9sbG93aW5nIGZpZWxkcyBmcm9tIHRoZSBzaWdldmVudApkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDM4MDMzZGIuLjZiM2EwYzEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTk4LDcgKzk4LDggQEAKIAkJICAgICAhY3B1dGltZV9lcShwLT5zdGltZSwgY3B1dGltZV96ZXJvKSkpCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJUYXNrICVzIChwaWQgPSAlZCkgaXMgb24gY3B1ICVkXAogCQkJCShzdGF0ZSA9ICVsZCwgZmxhZ3MgPSAleCkgXG4iLAotCQkJCSBwLT5jb21tLCBwLT5waWQsIGNwdSwgcC0+c3RhdGUsIHAtPmZsYWdzKTsKKwkJCQkgcC0+Y29tbSwgdGFza19waWRfbnIocCksIGNwdSwKKwkJCQkgcC0+c3RhdGUsIHAtPmZsYWdzKTsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiB9CkBAIC0xNTAsNiArMTUxLDcgQEAKIAllcnIgPSBfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9ET1dOX1BSRVBBUkUgfCBtb2QsCiAJCQkJCWhjcHUsIC0xLCAmbnJfY2FsbHMpOwogCWlmIChlcnIgPT0gTk9USUZZX0JBRCkgeworCQlucl9jYWxscy0tOwogCQlfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9ET1dOX0ZBSUxFRCB8IG1vZCwKIAkJCQkJICBoY3B1LCBucl9jYWxscywgTlVMTCk7CiAJCXByaW50aygiJXM6IGF0dGVtcHQgdG8gdGFrZSBkb3duIENQVSAldSBmYWlsZWRcbiIsCkBAIC0yMzMsNiArMjM1LDcgQEAKIAlyZXQgPSBfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKCZjcHVfY2hhaW4sIENQVV9VUF9QUkVQQVJFIHwgbW9kLCBoY3B1LAogCQkJCQkJCS0xLCAmbnJfY2FsbHMpOwogCWlmIChyZXQgPT0gTk9USUZZX0JBRCkgeworCQlucl9jYWxscy0tOwogCQlwcmludGsoIiVzOiBhdHRlbXB0IHRvIGJyaW5nIHVwIENQVSAldSBmYWlsZWRcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBjcHUpOwogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMjYyLDYgKzI2NSwxNSBAQAogaW50IF9fY3B1aW5pdCBjcHVfdXAodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgZXJyID0gMDsKKwlpZiAoIWNwdV9pc3NldChjcHUsIGNwdV9wb3NzaWJsZV9tYXApKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2FuJ3Qgb25saW5lIGNwdSAlZCBiZWNhdXNlIGl0IGlzIG5vdCAiCisJCQkiY29uZmlndXJlZCBhcyBtYXktaG90YWRkIGF0IGJvb3QgdGltZVxuIiwgY3B1KTsKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0KSB8fCBkZWZpbmVkKENPTkZJR19YODZfNjQpIHx8IGRlZmluZWQoQ09ORklHX1MzOTApCisJCXByaW50ayhLRVJOX0VSUiAicGxlYXNlIGNoZWNrIGFkZGl0aW9uYWxfY3B1cz0gYm9vdCAiCisJCQkJInBhcmFtZXRlclxuIik7CisjZW5kaWYKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJbXV0ZXhfbG9jaygmY3B1X2FkZF9yZW1vdmVfbG9jayk7CiAJaWYgKGNwdV9ob3RwbHVnX2Rpc2FibGVkKQpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdV9hY2N0LmMgYi9rZXJuZWwvY3B1X2FjY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFlNDdlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2NwdV9hY2N0LmMKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBrZXJuZWwvY3B1X2FjY3QuYyAtIENQVSBhY2NvdW50aW5nIGNncm91cCBzdWJzeXN0ZW0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIEdvb2dsZSBJbmMsIDIwMDYKKyAqCisgKiBEZXZlbG9wZWQgYnkgUGF1bCBNZW5hZ2UgKG1lbmFnZUBnb29nbGUuY29tKSBhbmQgQmFsYmlyIFNpbmdoCisgKiAoYmFsYmlyQGluLmlibS5jb20pCisgKgorICovCisKKy8qCisgKiBFeGFtcGxlIGNncm91cCBzdWJzeXN0ZW0gZm9yIHJlcG9ydGluZyB0b3RhbCBDUFUgdXNhZ2Ugb2YgdGFza3MgaW4gYQorICogY2dyb3VwLCBhbG9uZyB3aXRoIHBlcmNlbnRhZ2UgbG9hZCBvdmVyIGEgdGltZSBpbnRlcnZhbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisKKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworc3RydWN0IGNwdWFjY3QgeworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKKwlzcGlubG9ja190IGxvY2s7CisJLyogdG90YWwgdGltZSB1c2VkIGJ5IHRoaXMgY2xhc3MgKi8KKwljcHV0aW1lNjRfdCB0aW1lOworCisJLyogdGltZSB3aGVuIG5leHQgbG9hZCBjYWxjdWxhdGlvbiBvY2N1cnMgKi8KKwl1NjQgbmV4dF9pbnRlcnZhbF9jaGVjazsKKworCS8qIHRpbWUgdXNlZCBpbiBjdXJyZW50IHBlcmlvZCAqLworCWNwdXRpbWU2NF90IGN1cnJlbnRfaW50ZXJ2YWxfdGltZTsKKworCS8qIHRpbWUgdXNlZCBpbiBsYXN0IHBlcmlvZCAqLworCWNwdXRpbWU2NF90IGxhc3RfaW50ZXJ2YWxfdGltZTsKK307CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGNwdWFjY3Rfc3Vic3lzOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVhY2N0ICpjZ3JvdXBfY2Eoc3RydWN0IGNncm91cCAqY29udCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY29udCwgY3B1YWNjdF9zdWJzeXNfaWQpLAorCQkJICAgIHN0cnVjdCBjcHVhY2N0LCBjc3MpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVhY2N0ICp0YXNrX2NhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHRhc2tfc3Vic3lzX3N0YXRlKHRhc2ssIGNwdWFjY3Rfc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgY3B1YWNjdCwgY3NzKTsKK30KKworI2RlZmluZSBJTlRFUlZBTCAoSFogKiAxMCkKKworc3RhdGljIGlubGluZSB1NjQgbmV4dF9pbnRlcnZhbF9ib3VuZGFyeSh1NjQgbm93KQoreworCS8qIGNhbGN1bGF0ZSB0aGUgbmV4dCBpbnRlcnZhbCBib3VuZGFyeSBiZXlvbmQgdGhlCisJICogY3VycmVudCB0aW1lICovCisJZG9fZGl2KG5vdywgSU5URVJWQUwpOworCXJldHVybiAobm93ICsgMSkgKiBJTlRFUlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjcHVhY2N0X2NyZWF0ZSgKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit7CisJc3RydWN0IGNwdWFjY3QgKmNhID0ga3phbGxvYyhzaXplb2YoKmNhKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWNhKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlzcGluX2xvY2tfaW5pdCgmY2EtPmxvY2spOworCWNhLT5uZXh0X2ludGVydmFsX2NoZWNrID0gbmV4dF9pbnRlcnZhbF9ib3VuZGFyeShnZXRfamlmZmllc182NCgpKTsKKwlyZXR1cm4gJmNhLT5jc3M7Cit9CisKK3N0YXRpYyB2b2lkIGNwdWFjY3RfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkgICAgc3RydWN0IGNncm91cCAqY29udCkKK3sKKwlrZnJlZShjZ3JvdXBfY2EoY29udCkpOworfQorCisvKiBMYXppbHkgdXBkYXRlIHRoZSBsb2FkIGNhbGN1bGF0aW9uIGlmIG5lY2Vzc2FyeS4gQ2FsbGVkIHdpdGggY2EgbG9ja2VkICovCitzdGF0aWMgdm9pZCBjcHV1c2FnZV91cGRhdGUoc3RydWN0IGNwdWFjY3QgKmNhKQoreworCXU2NCBub3cgPSBnZXRfamlmZmllc182NCgpOworCisJLyogSWYgd2UncmUgbm90IGR1ZSBmb3IgYW4gdXBkYXRlLCByZXR1cm4gKi8KKwlpZiAoY2EtPm5leHRfaW50ZXJ2YWxfY2hlY2sgPiBub3cpCisJCXJldHVybjsKKworCWlmIChjYS0+bmV4dF9pbnRlcnZhbF9jaGVjayA8PSAobm93IC0gSU5URVJWQUwpKSB7CisJCS8qIElmIGl0J3MgYmVlbiBtb3JlIHRoYW4gYW4gaW50ZXJ2YWwgc2luY2UgdGhlIGxhc3QKKwkJICogY2hlY2ssIHRoZW4gY2F0Y2ggdXAgLSB0aGUgbGFzdCBpbnRlcnZhbCBtdXN0IGhhdmUKKwkJICogYmVlbiB6ZXJvIGxvYWQgKi8KKwkJY2EtPmxhc3RfaW50ZXJ2YWxfdGltZSA9IDA7CisJCWNhLT5uZXh0X2ludGVydmFsX2NoZWNrID0gbmV4dF9pbnRlcnZhbF9ib3VuZGFyeShub3cpOworCX0gZWxzZSB7CisJCS8qIElmIGEgc3RlYWwgdGFrZXMgdGhlIGxhc3QgaW50ZXJ2YWwgdGltZSBuZWdhdGl2ZSwKKwkJICogdGhlbiB3ZSBqdXN0IGlnbm9yZSBpdCAqLworCQlpZiAoKHM2NCljYS0+Y3VycmVudF9pbnRlcnZhbF90aW1lID4gMCkKKwkJCWNhLT5sYXN0X2ludGVydmFsX3RpbWUgPSBjYS0+Y3VycmVudF9pbnRlcnZhbF90aW1lOworCQllbHNlCisJCQljYS0+bGFzdF9pbnRlcnZhbF90aW1lID0gMDsKKwkJY2EtPm5leHRfaW50ZXJ2YWxfY2hlY2sgKz0gSU5URVJWQUw7CisJfQorCWNhLT5jdXJyZW50X2ludGVydmFsX3RpbWUgPSAwOworfQorCitzdGF0aWMgdTY0IGNwdXVzYWdlX3JlYWQoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0KQoreworCXN0cnVjdCBjcHVhY2N0ICpjYSA9IGNncm91cF9jYShjb250KTsKKwl1NjQgdGltZTsKKworCXNwaW5fbG9ja19pcnEoJmNhLT5sb2NrKTsKKwljcHV1c2FnZV91cGRhdGUoY2EpOworCXRpbWUgPSBjcHV0aW1lNjRfdG9famlmZmllczY0KGNhLT50aW1lKTsKKwlzcGluX3VubG9ja19pcnEoJmNhLT5sb2NrKTsKKworCS8qIENvbnZlcnQgNjQtYml0IGppZmZpZXMgdG8gc2Vjb25kcyAqLworCXRpbWUgKj0gMTAwMDsKKwlkb19kaXYodGltZSwgSFopOworCXJldHVybiB0aW1lOworfQorCitzdGF0aWMgdTY0IGxvYWRfcmVhZChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJc3RydWN0IGNwdWFjY3QgKmNhID0gY2dyb3VwX2NhKGNvbnQpOworCXU2NCB0aW1lOworCisJLyogRmluZCB0aGUgdGltZSB1c2VkIGluIHRoZSBwcmV2aW91cyBpbnRlcnZhbCAqLworCXNwaW5fbG9ja19pcnEoJmNhLT5sb2NrKTsKKwljcHV1c2FnZV91cGRhdGUoY2EpOworCXRpbWUgPSBjcHV0aW1lNjRfdG9famlmZmllczY0KGNhLT5sYXN0X2ludGVydmFsX3RpbWUpOworCXNwaW5fdW5sb2NrX2lycSgmY2EtPmxvY2spOworCisJLyogQ29udmVydCB0aW1lIHRvIGEgcGVyY2VudGFnZSwgdG8gZ2l2ZSB0aGUgbG9hZCBpbiB0aGUKKwkgKiBwcmV2aW91cyBwZXJpb2QgKi8KKwl0aW1lICo9IDEwMDsKKwlkb19kaXYodGltZSwgSU5URVJWQUwpOworCisJcmV0dXJuIHRpbWU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGZpbGVzW10gPSB7CisJeworCQkubmFtZSA9ICJ1c2FnZSIsCisJCS5yZWFkX3VpbnQgPSBjcHV1c2FnZV9yZWFkLAorCX0sCisJeworCQkubmFtZSA9ICJsb2FkIiwKKwkJLnJlYWRfdWludCA9IGxvYWRfcmVhZCwKKwl9Cit9OworCitzdGF0aWMgaW50IGNwdWFjY3RfcG9wdWxhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQoreworCXJldHVybiBjZ3JvdXBfYWRkX2ZpbGVzKGNvbnQsIHNzLCBmaWxlcywgQVJSQVlfU0laRShmaWxlcykpOworfQorCit2b2lkIGNwdWFjY3RfY2hhcmdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY3B1dGltZV90IGNwdXRpbWUpCit7CisKKwlzdHJ1Y3QgY3B1YWNjdCAqY2E7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghY3B1YWNjdF9zdWJzeXMuYWN0aXZlKQorCQlyZXR1cm47CisJcmN1X3JlYWRfbG9jaygpOworCWNhID0gdGFza19jYSh0YXNrKTsKKwlpZiAoY2EpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNhLT5sb2NrLCBmbGFncyk7CisJCWNwdXVzYWdlX3VwZGF0ZShjYSk7CisJCWNhLT50aW1lID0gY3B1dGltZTY0X2FkZChjYS0+dGltZSwgY3B1dGltZSk7CisJCWNhLT5jdXJyZW50X2ludGVydmFsX3RpbWUgPQorCQkJY3B1dGltZTY0X2FkZChjYS0+Y3VycmVudF9pbnRlcnZhbF90aW1lLCBjcHV0aW1lKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2EtPmxvY2ssIGZsYWdzKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7Cit9CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGNwdWFjY3Rfc3Vic3lzID0geworCS5uYW1lID0gImNwdWFjY3QiLAorCS5jcmVhdGUgPSBjcHVhY2N0X2NyZWF0ZSwKKwkuZGVzdHJveSA9IGNwdWFjY3RfZGVzdHJveSwKKwkucG9wdWxhdGUgPSBjcHVhY2N0X3BvcHVsYXRlLAorCS5zdWJzeXNfaWQgPSBjcHVhY2N0X3N1YnN5c19pZCwKK307CmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggMmViMmU1MC4uNTBmNWRjNCAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtNCw3ICs0LDggQEAKICAqICBQcm9jZXNzb3IgYW5kIE1lbW9yeSBwbGFjZW1lbnQgY29uc3RyYWludHMgZm9yIHNldHMgb2YgdGFza3MuCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMyBCVUxMIFNBLgotICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEdvb2dsZSwgSW5jCiAgKgogICogIFBvcnRpb25zIGRlcml2ZWQgZnJvbSBQYXRyaWNrIE1vY2hlbCdzIHN5c2ZzIGNvZGUuCiAgKiAgc3lzZnMgaXMgQ29weXJpZ2h0IChjKSAyMDAxLTMgUGF0cmljayBNb2NoZWwKQEAgLTEyLDYgKzEzLDcgQEAKICAqICAyMDAzLTEwLTEwIFdyaXR0ZW4gYnkgU2ltb24gRGVyci4KICAqICAyMDAzLTEwLTIyIFVwZGF0ZXMgYnkgU3RlcGhlbiBIZW1taW5nZXIuCiAgKiAgMjAwNCBNYXktSnVseSBSZXdvcmsgYnkgUGF1bCBKYWNrc29uLgorICogIDIwMDYgUmV3b3JrIGJ5IFBhdWwgTWVuYWdlIHRvIHVzZSBnZW5lcmljIGNncm91cHMKICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoZSBMaW51eApAQCAtMzYsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcHJpb19oZWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTUyLDggKzU1LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi0jZGVmaW5lIENQVVNFVF9TVVBFUl9NQUdJQwkJMHgyN2UwZWIKKyNpbmNsdWRlIDxsaW51eC9rZmlmby5oPgogCiAvKgogICogVHJhY2tzIGhvdyBtYW55IGNwdXNldHMgYXJlIGN1cnJlbnRseSBkZWZpbmVkIGluIHN5c3RlbS4KQEAgLTYyLDYgKzY0LDEwIEBACiAgKi8KIGludCBudW1iZXJfb2ZfY3B1c2V0cyBfX3JlYWRfbW9zdGx5OwogCisvKiBSZXRyaWV2ZSB0aGUgY3B1c2V0IGZyb20gYSBjZ3JvdXAgKi8KK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGNwdXNldF9zdWJzeXM7CitzdHJ1Y3QgY3B1c2V0OworCiAvKiBTZWUgIkZyZXF1ZW5jeSBtZXRlciIgY29tbWVudHMsIGJlbG93LiAqLwogCiBzdHJ1Y3QgZm1ldGVyIHsKQEAgLTcyLDI0ICs3OCwxMyBAQAogfTsKIAogc3RydWN0IGNwdXNldCB7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOworCiAJdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qICJ1bnNpZ25lZCBsb25nIiBzbyBiaXRvcHMgd29yayAqLwogCWNwdW1hc2tfdCBjcHVzX2FsbG93ZWQ7CQkvKiBDUFVzIGFsbG93ZWQgdG8gdGFza3MgaW4gY3B1c2V0ICovCiAJbm9kZW1hc2tfdCBtZW1zX2FsbG93ZWQ7CS8qIE1lbW9yeSBOb2RlcyBhbGxvd2VkIHRvIHRhc2tzICovCiAKLQkvKgotCSAqIENvdW50IGlzIGF0b21pYyBzbyBjYW4gaW5jciAoZm9yaykgb3IgZGVjciAoZXhpdCkgd2l0aG91dCBhIGxvY2suCi0JICovCi0JYXRvbWljX3QgY291bnQ7CQkJLyogY291bnQgdGFza3MgdXNpbmcgdGhpcyBjcHVzZXQgKi8KLQotCS8qCi0JICogV2UgbGluayBvdXIgJ3NpYmxpbmcnIHN0cnVjdCBpbnRvIG91ciBwYXJlbnRzICdjaGlsZHJlbicuCi0JICogT3VyIGNoaWxkcmVuIGxpbmsgdGhlaXIgJ3NpYmxpbmcnIGludG8gb3VyICdjaGlsZHJlbicuCi0JICovCi0Jc3RydWN0IGxpc3RfaGVhZCBzaWJsaW5nOwkvKiBteSBwYXJlbnRzIGNoaWxkcmVuICovCi0Jc3RydWN0IGxpc3RfaGVhZCBjaGlsZHJlbjsJLyogbXkgY2hpbGRyZW4gKi8KLQogCXN0cnVjdCBjcHVzZXQgKnBhcmVudDsJCS8qIG15IHBhcmVudCAqLwotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsJCS8qIGNwdXNldCBmcyBlbnRyeSAqLwogCiAJLyoKIAkgKiBDb3B5IG9mIGdsb2JhbCBjcHVzZXRfbWVtc19nZW5lcmF0aW9uIGFzIG9mIHRoZSBtb3N0CkBAIC05OCwxNSArOTMsMzIgQEAKIAlpbnQgbWVtc19nZW5lcmF0aW9uOwogCiAJc3RydWN0IGZtZXRlciBmbWV0ZXI7CQkvKiBtZW1vcnlfcHJlc3N1cmUgZmlsdGVyICovCisKKwkvKiBwYXJ0aXRpb24gbnVtYmVyIGZvciByZWJ1aWxkX3NjaGVkX2RvbWFpbnMoKSAqLworCWludCBwbjsKIH07CiAKKy8qIFJldHJpZXZlIHRoZSBjcHVzZXQgZm9yIGEgY2dyb3VwICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcHVzZXQgKmNncm91cF9jcyhzdHJ1Y3QgY2dyb3VwICpjb250KQoreworCXJldHVybiBjb250YWluZXJfb2YoY2dyb3VwX3N1YnN5c19zdGF0ZShjb250LCBjcHVzZXRfc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgY3B1c2V0LCBjc3MpOworfQorCisvKiBSZXRyaWV2ZSB0aGUgY3B1c2V0IGZvciBhIHRhc2sgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNwdXNldCAqdGFza19jcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZSh0YXNrLCBjcHVzZXRfc3Vic3lzX2lkKSwKKwkJCSAgICBzdHJ1Y3QgY3B1c2V0LCBjc3MpOworfQorCisKIC8qIGJpdHMgaW4gc3RydWN0IGNwdXNldCBmbGFncyBmaWVsZCAqLwogdHlwZWRlZiBlbnVtIHsKIAlDU19DUFVfRVhDTFVTSVZFLAogCUNTX01FTV9FWENMVVNJVkUsCiAJQ1NfTUVNT1JZX01JR1JBVEUsCi0JQ1NfUkVNT1ZFRCwKLQlDU19OT1RJRllfT05fUkVMRUFTRSwKKwlDU19TQ0hFRF9MT0FEX0JBTEFOQ0UsCiAJQ1NfU1BSRUFEX1BBR0UsCiAJQ1NfU1BSRUFEX1NMQUIsCiB9IGNwdXNldF9mbGFnYml0c190OwpAQCAtMTIyLDE0ICsxMzQsOSBAQAogCXJldHVybiB0ZXN0X2JpdChDU19NRU1fRVhDTFVTSVZFLCAmY3MtPmZsYWdzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNfcmVtb3ZlZChjb25zdCBzdHJ1Y3QgY3B1c2V0ICpjcykKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NjaGVkX2xvYWRfYmFsYW5jZShjb25zdCBzdHJ1Y3QgY3B1c2V0ICpjcykKIHsKLQlyZXR1cm4gdGVzdF9iaXQoQ1NfUkVNT1ZFRCwgJmNzLT5mbGFncyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9vbl9yZWxlYXNlKGNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzKQotewotCXJldHVybiB0ZXN0X2JpdChDU19OT1RJRllfT05fUkVMRUFTRSwgJmNzLT5mbGFncyk7CisJcmV0dXJuIHRlc3RfYml0KENTX1NDSEVEX0xPQURfQkFMQU5DRSwgJmNzLT5mbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX21lbW9yeV9taWdyYXRlKGNvbnN0IHN0cnVjdCBjcHVzZXQgKmNzKQpAQCAtMTcyLDE0ICsxNzksOCBAQAogCS5mbGFncyA9ICgoMSA8PCBDU19DUFVfRVhDTFVTSVZFKSB8ICgxIDw8IENTX01FTV9FWENMVVNJVkUpKSwKIAkuY3B1c19hbGxvd2VkID0gQ1BVX01BU0tfQUxMLAogCS5tZW1zX2FsbG93ZWQgPSBOT0RFX01BU0tfQUxMLAotCS5jb3VudCA9IEFUT01JQ19JTklUKDApLAotCS5zaWJsaW5nID0gTElTVF9IRUFEX0lOSVQodG9wX2NwdXNldC5zaWJsaW5nKSwKLQkuY2hpbGRyZW4gPSBMSVNUX0hFQURfSU5JVCh0b3BfY3B1c2V0LmNoaWxkcmVuKSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNwdXNldF9tb3VudDsKLXN0YXRpYyBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmNwdXNldF9zYjsKLQogLyoKICAqIFdlIGhhdmUgdHdvIGdsb2JhbCBjcHVzZXQgbXV0ZXhlcyBiZWxvdy4gIFRoZXkgY2FuIG5lc3QuCiAgKiBJdCBpcyBvayB0byBmaXJzdCB0YWtlIG1hbmFnZV9tdXRleCwgdGhlbiBuZXN0IGNhbGxiYWNrX211dGV4LiAgV2UgYWxzbwpAQCAtMjYzLDI5NyArMjY0LDMzIEBACiAgKiB0aGUgcm91dGluZSBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKCkuCiAgKi8KIAotc3RhdGljIERFRklORV9NVVRFWChtYW5hZ2VfbXV0ZXgpOwogc3RhdGljIERFRklORV9NVVRFWChjYWxsYmFja19tdXRleCk7CiAKLS8qCi0gKiBBIGNvdXBsZSBvZiBmb3J3YXJkIGRlY2xhcmF0aW9ucyByZXF1aXJlZCwgZHVlIHRvIGN5Y2xpYyByZWZlcmVuY2UgbG9vcDoKLSAqICBjcHVzZXRfbWtkaXIgLT4gY3B1c2V0X2NyZWF0ZSAtPiBjcHVzZXRfcG9wdWxhdGVfZGlyIC0+IGNwdXNldF9hZGRfZmlsZQotICogIC0+IGNwdXNldF9jcmVhdGVfZmlsZSAtPiBjcHVzZXRfZGlyX2lub2RlX29wZXJhdGlvbnMgLT4gY3B1c2V0X21rZGlyLgotICovCi0KLXN0YXRpYyBpbnQgY3B1c2V0X21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKTsKLXN0YXRpYyBpbnQgY3B1c2V0X3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKLQotc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGNwdXNldF9iYWNraW5nX2Rldl9pbmZvID0gewotCS5yYV9wYWdlcyA9IDAsCQkvKiBObyByZWFkYWhlYWQgKi8KLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0RJUlRZIHwgQkRJX0NBUF9OT19XUklURUJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGlub2RlICpjcHVzZXRfbmV3X2lub2RlKG1vZGVfdCBtb2RlKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoY3B1c2V0X3NiKTsKLQotCWlmIChpbm9kZSkgewotCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKLQkJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7Ci0JCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOwotCQlpbm9kZS0+aV9ibG9ja3MgPSAwOwotCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmY3B1c2V0X2JhY2tpbmdfZGV2X2luZm87Ci0JfQotCXJldHVybiBpbm9kZTsKLX0KLQotc3RhdGljIHZvaWQgY3B1c2V0X2RpcHV0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQkvKiBpcyBkZW50cnkgYSBkaXJlY3RvcnkgPyBpZiBzbywga2ZyZWUoKSBhc3NvY2lhdGVkIGNwdXNldCAqLwotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7Ci0JCXN0cnVjdCBjcHVzZXQgKmNzID0gZGVudHJ5LT5kX2ZzZGF0YTsKLQkJQlVHX09OKCEoaXNfcmVtb3ZlZChjcykpKTsKLQkJa2ZyZWUoY3MpOwotCX0KLQlpcHV0KGlub2RlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyBjcHVzZXRfZG9wcyA9IHsKLQkuZF9pcHV0ID0gY3B1c2V0X2RpcHV0LAotfTsKLQotc3RhdGljIHN0cnVjdCBkZW50cnkgKmNwdXNldF9nZXRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKnBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkID0gbG9va3VwX29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOwotCWlmICghSVNfRVJSKGQpKQotCQlkLT5kX29wID0gJmNwdXNldF9kb3BzOwotCXJldHVybiBkOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfZGlyKHN0cnVjdCBkZW50cnkgKmQpCi17Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50ID0gZGdldChkLT5kX3BhcmVudCk7Ci0KLQlkX2RlbGV0ZShkKTsKLQlzaW1wbGVfcm1kaXIocGFyZW50LT5kX2lub2RlLCBkKTsKLQlkcHV0KHBhcmVudCk7Ci19Ci0KLS8qCi0gKiBOT1RFIDogdGhlIGRlbnRyeSBtdXN0IGhhdmUgYmVlbiBkZ2V0KCknZWQKLSAqLwotc3RhdGljIHZvaWQgY3B1c2V0X2RfcmVtb3ZlX2RpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbm9kZTsKLQotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCW5vZGUgPSBkZW50cnktPmRfc3ViZGlycy5uZXh0OwotCXdoaWxlIChub2RlICE9ICZkZW50cnktPmRfc3ViZGlycykgewotCQlzdHJ1Y3QgZGVudHJ5ICpkID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7Ci0JCWxpc3RfZGVsX2luaXQobm9kZSk7Ci0JCWlmIChkLT5kX2lub2RlKSB7Ci0JCQlkID0gZGdldF9sb2NrZWQoZCk7Ci0JCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCQkJZF9kZWxldGUoZCk7Ci0JCQlzaW1wbGVfdW5saW5rKGRlbnRyeS0+ZF9pbm9kZSwgZCk7Ci0JCQlkcHV0KGQpOwotCQkJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCX0KLQkJbm9kZSA9IGRlbnRyeS0+ZF9zdWJkaXJzLm5leHQ7Ci0JfQotCWxpc3RfZGVsX2luaXQoJmRlbnRyeS0+ZF91LmRfY2hpbGQpOwotCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JcmVtb3ZlX2RpcihkZW50cnkpOwotfQotCi1zdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgY3B1c2V0X29wcyA9IHsKLQkuc3RhdGZzID0gc2ltcGxlX3N0YXRmcywKLQkuZHJvcF9pbm9kZSA9IGdlbmVyaWNfZGVsZXRlX2lub2RlLAotfTsKLQotc3RhdGljIGludCBjcHVzZXRfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp1bnVzZWRfZGF0YSwKLQkJCQkJCQlpbnQgdW51c2VkX3NpbGVudCkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgKnJvb3Q7Ci0KLQlzYi0+c19ibG9ja3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7Ci0Jc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBQQUdFX0NBQ0hFX1NISUZUOwotCXNiLT5zX21hZ2ljID0gQ1BVU0VUX1NVUEVSX01BR0lDOwotCXNiLT5zX29wID0gJmNwdXNldF9vcHM7Ci0JY3B1c2V0X3NiID0gc2I7Ci0KLQlpbm9kZSA9IGNwdXNldF9uZXdfaW5vZGUoU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPIHwgU19JV1VTUik7Ci0JaWYgKGlub2RlKSB7Ci0JCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKLQkJLyogZGlyZWN0b3JpZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLwotCQlpbmNfbmxpbmsoaW5vZGUpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOwotCWlmICghcm9vdCkgewotCQlpcHV0KGlub2RlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNiLT5zX3Jvb3QgPSByb290OwotCXJldHVybiAwOwotfQotCisvKiBUaGlzIGlzIHVnbHksIGJ1dCBwcmVzZXJ2ZXMgdGhlIHVzZXJzcGFjZSBBUEkgZm9yIGV4aXN0aW5nIGNwdXNldAorICogdXNlcnMuIElmIHNvbWVvbmUgdHJpZXMgdG8gbW91bnQgdGhlICJjcHVzZXQiIGZpbGVzeXN0ZW0sIHdlCisgKiBzaWxlbnRseSBzd2l0Y2ggaXQgdG8gbW91bnQgImNncm91cCIgaW5zdGVhZCAqLwogc3RhdGljIGludCBjcHVzZXRfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAogCQkJIGludCBmbGFncywgY29uc3QgY2hhciAqdW51c2VkX2Rldl9uYW1lLAogCQkJIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQogewotCXJldHVybiBnZXRfc2Jfc2luZ2xlKGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBjcHVzZXRfZmlsbF9zdXBlciwgbW50KTsKKwlzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqY2dyb3VwX2ZzID0gZ2V0X2ZzX3R5cGUoImNncm91cCIpOworCWludCByZXQgPSAtRU5PREVWOworCWlmIChjZ3JvdXBfZnMpIHsKKwkJY2hhciBtb3VudG9wdHNbXSA9CisJCQkiY3B1c2V0LG5vcHJlZml4LCIKKwkJCSJyZWxlYXNlX2FnZW50PS9zYmluL2NwdXNldF9yZWxlYXNlX2FnZW50IjsKKwkJcmV0ID0gY2dyb3VwX2ZzLT5nZXRfc2IoY2dyb3VwX2ZzLCBmbGFncywKKwkJCQkJICAgdW51c2VkX2Rldl9uYW1lLCBtb3VudG9wdHMsIG1udCk7CisJCXB1dF9maWxlc3lzdGVtKGNncm91cF9mcyk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBjcHVzZXRfZnNfdHlwZSA9IHsKIAkubmFtZSA9ICJjcHVzZXQiLAogCS5nZXRfc2IgPSBjcHVzZXRfZ2V0X3NiLAotCS5raWxsX3NiID0ga2lsbF9saXR0ZXJfc3VwZXIsCiB9OwogCi0vKiBzdHJ1Y3QgY2Z0eXBlOgotICoKLSAqIFRoZSBmaWxlcyBpbiB0aGUgY3B1c2V0IGZpbGVzeXN0ZW0gbW9zdGx5IGhhdmUgYSB2ZXJ5IHNpbXBsZSByZWFkL3dyaXRlCi0gKiBoYW5kbGluZywgc29tZSBjb21tb24gZnVuY3Rpb24gd2lsbCB0YWtlIGNhcmUgb2YgaXQuIE5ldmVydGhlbGVzcyBzb21lIGNhc2VzCi0gKiAocmVhZCB0YXNrcykgYXJlIHNwZWNpYWwgYW5kIHRoZXJlZm9yZSBJIGRlZmluZSB0aGlzIHN0cnVjdHVyZSBmb3IgZXZlcnkKLSAqIGtpbmQgb2YgZmlsZS4KLSAqCi0gKgotICogV2hlbiByZWFkaW5nL3dyaXRpbmcgdG8gYSBmaWxlOgotICoJLSB0aGUgY3B1c2V0IHRvIHVzZSBpbiBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ZF9mc2RhdGEKLSAqCS0gdGhlICdjZnR5cGUnIG9mIHRoZSBmaWxlIGlzIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfZnNkYXRhCi0gKi8KLQotc3RydWN0IGNmdHlwZSB7Ci0JY2hhciAqbmFtZTsKLQlpbnQgcHJpdmF0ZTsKLQlpbnQgKCpvcGVuKSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotCXNzaXplX3QgKCpyZWFkKSAoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCi0JCQkJCQkJbG9mZl90ICpwcG9zKTsKLQlpbnQgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbmJ5dGVzLAotCQkJCQkJCWxvZmZfdCAqcHBvcyk7Ci0JaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNwdXNldCAqX19kX2NzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gZGVudHJ5LT5kX2ZzZGF0YTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2Z0eXBlICpfX2RfY2Z0KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQlyZXR1cm4gZGVudHJ5LT5kX2ZzZGF0YTsKLX0KLQotLyoKLSAqIENhbGwgd2l0aCBtYW5hZ2VfbXV0ZXggaGVsZC4gIFdyaXRlcyBwYXRoIG9mIGNwdXNldCBpbnRvIGJ1Zi4KLSAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtZXJybm8gb24gZXJyb3IuCi0gKi8KLQotc3RhdGljIGludCBjcHVzZXRfcGF0aChjb25zdCBzdHJ1Y3QgY3B1c2V0ICpjcywgY2hhciAqYnVmLCBpbnQgYnVmbGVuKQotewotCWNoYXIgKnN0YXJ0OwotCi0Jc3RhcnQgPSBidWYgKyBidWZsZW47Ci0KLQkqLS1zdGFydCA9ICdcMCc7Ci0JZm9yICg7OykgewotCQlpbnQgbGVuID0gY3MtPmRlbnRyeS0+ZF9uYW1lLmxlbjsKLQkJaWYgKChzdGFydCAtPSBsZW4pIDwgYnVmKQotCQkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ci0JCW1lbWNweShzdGFydCwgY3MtPmRlbnRyeS0+ZF9uYW1lLm5hbWUsIGxlbik7Ci0JCWNzID0gY3MtPnBhcmVudDsKLQkJaWYgKCFjcykKLQkJCWJyZWFrOwotCQlpZiAoIWNzLT5wYXJlbnQpCi0JCQljb250aW51ZTsKLQkJaWYgKC0tc3RhcnQgPCBidWYpCi0JCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKLQkJKnN0YXJ0ID0gJy8nOwotCX0KLQltZW1tb3ZlKGJ1Ziwgc3RhcnQsIGJ1ZiArIGJ1ZmxlbiAtIHN0YXJ0KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIE5vdGlmeSB1c2Vyc3BhY2Ugd2hlbiBhIGNwdXNldCBpcyByZWxlYXNlZCwgYnkgcnVubmluZwotICogL3NiaW4vY3B1c2V0X3JlbGVhc2VfYWdlbnQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY3B1c2V0IChwYXRoCi0gKiByZWxhdGl2ZSB0byB0aGUgcm9vdCBvZiBjcHVzZXQgZmlsZSBzeXN0ZW0pIGFzIHRoZSBhcmd1bWVudC4KLSAqCi0gKiBNb3N0IGxpa2VseSwgdGhpcyB1c2VyIGNvbW1hbmQgd2lsbCB0cnkgdG8gcm1kaXIgdGhpcyBjcHVzZXQuCi0gKgotICogVGhpcyByYWNlcyB3aXRoIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHNvbWUgb3RoZXIgdGFzayB3aWxsIGJlCi0gKiBhdHRhY2hlZCB0byB0aGlzIGNwdXNldCBiZWZvcmUgaXQgaXMgcmVtb3ZlZCwgb3IgdGhhdCBzb21lIG90aGVyCi0gKiB1c2VyIHRhc2sgd2lsbCAnbWtkaXInIGEgY2hpbGQgY3B1c2V0IG9mIHRoaXMgY3B1c2V0LiAgVGhhdCdzIG9rLgotICogVGhlIHByZXN1bWVkICdybWRpcicgd2lsbCBmYWlsIHF1aWV0bHkgaWYgdGhpcyBjcHVzZXQgaXMgbm8gbG9uZ2VyCi0gKiB1bnVzZWQsIGFuZCB0aGlzIGNwdXNldCB3aWxsIGJlIHJlcHJpZXZlZCBmcm9tIGl0cyBkZWF0aCBzZW50ZW5jZSwKLSAqIHRvIGNvbnRpbnVlIHRvIHNlcnZlIGEgdXNlZnVsIGV4aXN0ZW5jZS4gIE5leHQgdGltZSBpdCdzIHJlbGVhc2VkLAotICogd2Ugd2lsbCBnZXQgbm90aWZpZWQgYWdhaW4sIGlmIGl0IHN0aWxsIGhhcyAnbm90aWZ5X29uX3JlbGVhc2UnIHNldC4KLSAqCi0gKiBUaGUgZmluYWwgYXJnIHRvIGNhbGxfdXNlcm1vZGVoZWxwZXIoKSBpcyAwLCB3aGljaCBtZWFucyBkb24ndAotICogd2FpdC4gIFRoZSBzZXBhcmF0ZSAvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCB0YXNrIGlzIGZvcmtlZCBieQotICogY2FsbF91c2VybW9kZWhlbHBlcigpLCB0aGVuIGNvbnRyb2wgaW4gdGhpcyB0aHJlYWQgcmV0dXJucyBoZXJlLAotICogd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgcmVsZWFzZSBhZ2VudCB0YXNrLiAgV2UgZG9uJ3QgYm90aGVyIHRvCi0gKiB3YWl0IGJlY2F1c2UgdGhlIGNhbGxlciBvZiB0aGlzIHJvdXRpbmUgaGFzIG5vIHVzZSBmb3IgdGhlIGV4aXQKLSAqIHN0YXR1cyBvZiB0aGUgL3NiaW4vY3B1c2V0X3JlbGVhc2VfYWdlbnQgdGFzaywgc28gbm8gc2Vuc2UgaG9sZGluZwotICogb3VyIGNhbGxlciB1cCBmb3IgdGhhdC4KLSAqCi0gKiBXaGVuIHdlIGhhZCBvbmx5IG9uZSBjcHVzZXQgbXV0ZXgsIHdlIGhhZCB0byBjYWxsIHRoaXMKLSAqIHdpdGhvdXQgaG9sZGluZyBpdCwgdG8gYXZvaWQgZGVhZGxvY2sgd2hlbiBjYWxsX3VzZXJtb2RlaGVscGVyKCkKLSAqIGFsbG9jYXRlZCBtZW1vcnkuICBXaXRoIHR3byBsb2Nrcywgd2UgY291bGQgbm93IGNhbGwgdGhpcyB3aGlsZQotICogaG9sZGluZyBtYW5hZ2VfbXV0ZXgsIGJ1dCB3ZSBzdGlsbCBkb24ndCwgc28gYXMgdG8gbWluaW1pemUKLSAqIHRoZSB0aW1lIG1hbmFnZV9tdXRleCBpcyBoZWxkLgotICovCi0KLXN0YXRpYyB2b2lkIGNwdXNldF9yZWxlYXNlX2FnZW50KGNvbnN0IGNoYXIgKnBhdGhidWYpCi17Ci0JY2hhciAqYXJndlszXSwgKmVudnBbM107Ci0JaW50IGk7Ci0KLQlpZiAoIXBhdGhidWYpCi0JCXJldHVybjsKLQotCWkgPSAwOwotCWFyZ3ZbaSsrXSA9ICIvc2Jpbi9jcHVzZXRfcmVsZWFzZV9hZ2VudCI7Ci0JYXJndltpKytdID0gKGNoYXIgKilwYXRoYnVmOwotCWFyZ3ZbaV0gPSBOVUxMOwotCi0JaSA9IDA7Ci0JLyogbWluaW1hbCBjb21tYW5kIGVudmlyb25tZW50ICovCi0JZW52cFtpKytdID0gIkhPTUU9LyI7Ci0JZW52cFtpKytdID0gIlBBVEg9L3NiaW46L2JpbjovdXNyL3NiaW46L3Vzci9iaW4iOwotCWVudnBbaV0gPSBOVUxMOwotCi0JY2FsbF91c2VybW9kZWhlbHBlcihhcmd2WzBdLCBhcmd2LCBlbnZwLCBVTUhfV0FJVF9FWEVDKTsKLQlrZnJlZShwYXRoYnVmKTsKLX0KLQotLyoKLSAqIEVpdGhlciBjcy0+Y291bnQgb2YgdXNpbmcgdGFza3MgdHJhbnNpdGlvbmVkIHRvIHplcm8sIG9yIHRoZQotICogY3MtPmNoaWxkcmVuIGxpc3Qgb2YgY2hpbGQgY3B1c2V0cyBqdXN0IGJlY2FtZSBlbXB0eS4gIElmIHRoaXMKLSAqIGNzIGlzIG5vdGlmeV9vbl9yZWxlYXNlKCkgYW5kIG5vdyBib3RoIHRoZSB1c2VyIGNvdW50IGlzIHplcm8gYW5kCi0gKiB0aGUgbGlzdCBvZiBjaGlsZHJlbiBpcyBlbXB0eSwgcHJlcGFyZSBjcHVzZXQgcGF0aCBpbiBhIGttYWxsb2MnZAotICogYnVmZmVyLCB0byBiZSByZXR1cm5lZCB2aWEgcHBhdGhidWYsIHNvIHRoYXQgdGhlIGNhbGxlciBjYW4gaW52b2tlCi0gKiBjcHVzZXRfcmVsZWFzZV9hZ2VudCgpIHdpdGggaXQgbGF0ZXIgb24sIG9uY2UgbWFuYWdlX211dGV4IGlzIGRyb3BwZWQuCi0gKiBDYWxsIGhlcmUgd2l0aCBtYW5hZ2VfbXV0ZXggaGVsZC4KLSAqCi0gKiBUaGlzIGNoZWNrX2Zvcl9yZWxlYXNlKCkgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3Iga21hbGxvYydpbmcKLSAqIHBhdGhidWYuICBUaGUgYWJvdmUgY3B1c2V0X3JlbGVhc2VfYWdlbnQoKSBpcyByZXNwb25zaWJsZSBmb3IKLSAqIGtmcmVlJ2luZyBwYXRoYnVmLiAgVGhlIGNhbGxlciBvZiB0aGVzZSByb3V0aW5lcyBpcyByZXNwb25zaWJsZQotICogZm9yIHByb3ZpZGluZyBhIHBhdGhidWYgcG9pbnRlciwgaW5pdGlhbGl6ZWQgdG8gTlVMTCwgdGhlbgotICogY2FsbGluZyBjaGVja19mb3JfcmVsZWFzZSgpIHdpdGggbWFuYWdlX211dGV4IGhlbGQgYW5kIHRoZSBhZGRyZXNzCi0gKiBvZiB0aGUgcGF0aGJ1ZiBwb2ludGVyLCB0aGVuIGRyb3BwaW5nIG1hbmFnZV9tdXRleCwgdGhlbiBjYWxsaW5nCi0gKiBjcHVzZXRfcmVsZWFzZV9hZ2VudCgpIHdpdGggcGF0aGJ1ZiwgYXMgc2V0IGJ5IGNoZWNrX2Zvcl9yZWxlYXNlKCkuCi0gKi8KLQotc3RhdGljIHZvaWQgY2hlY2tfZm9yX3JlbGVhc2Uoc3RydWN0IGNwdXNldCAqY3MsIGNoYXIgKipwcGF0aGJ1ZikKLXsKLQlpZiAobm90aWZ5X29uX3JlbGVhc2UoY3MpICYmIGF0b21pY19yZWFkKCZjcy0+Y291bnQpID09IDAgJiYKLQkgICAgbGlzdF9lbXB0eSgmY3MtPmNoaWxkcmVuKSkgewotCQljaGFyICpidWY7Ci0KLQkJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWJ1ZikKLQkJCXJldHVybjsKLQkJaWYgKGNwdXNldF9wYXRoKGNzLCBidWYsIFBBR0VfU0laRSkgPCAwKQotCQkJa2ZyZWUoYnVmKTsKLQkJZWxzZQotCQkJKnBwYXRoYnVmID0gYnVmOwotCX0KLX0KLQogLyoKICAqIFJldHVybiBpbiAqcG1hc2sgdGhlIHBvcnRpb24gb2YgYSBjcHVzZXRzJ3MgY3B1c19hbGxvd2VkIHRoYXQKICAqIGFyZSBvbmxpbmUuICBJZiBub25lIGFyZSBvbmxpbmUsIHdhbGsgdXAgdGhlIGNwdXNldCBoaWVyYXJjaHkKQEAgLTY1MywyMCArMzkwLDE5IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCXN0cnVjdCBjcHVzZXQgKmNzOwogCi0JaWYgKHRzay0+Y3B1c2V0ID09ICZ0b3BfY3B1c2V0KSB7CisJaWYgKHRhc2tfY3ModHNrKSA9PSAmdG9wX2NwdXNldCkgewogCQkvKiBEb24ndCBuZWVkIHJjdSBmb3IgdG9wX2NwdXNldC4gIEl0J3MgbmV2ZXIgZnJlZWQuICovCiAJCW15X2NwdXNldHNfbWVtX2dlbiA9IHRvcF9jcHVzZXQubWVtc19nZW5lcmF0aW9uOwogCX0gZWxzZSB7CiAJCXJjdV9yZWFkX2xvY2soKTsKLQkJY3MgPSByY3VfZGVyZWZlcmVuY2UodHNrLT5jcHVzZXQpOwotCQlteV9jcHVzZXRzX21lbV9nZW4gPSBjcy0+bWVtc19nZW5lcmF0aW9uOworCQlteV9jcHVzZXRzX21lbV9nZW4gPSB0YXNrX2NzKGN1cnJlbnQpLT5tZW1zX2dlbmVyYXRpb247CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIAogCWlmIChteV9jcHVzZXRzX21lbV9nZW4gIT0gdHNrLT5jcHVzZXRfbWVtc19nZW5lcmF0aW9uKSB7CiAJCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAkJdGFza19sb2NrKHRzayk7Ci0JCWNzID0gdHNrLT5jcHVzZXQ7CS8qIE1heWJlIGNoYW5nZWQgd2hlbiB0YXNrIG5vdCBsb2NrZWQgKi8KKwkJY3MgPSB0YXNrX2NzKHRzayk7IC8qIE1heWJlIGNoYW5nZWQgd2hlbiB0YXNrIG5vdCBsb2NrZWQgKi8KIAkJZ3VhcmFudGVlX29ubGluZV9tZW1zKGNzLCAmdHNrLT5tZW1zX2FsbG93ZWQpOwogCQl0c2stPmNwdXNldF9tZW1zX2dlbmVyYXRpb24gPSBjcy0+bWVtc19nZW5lcmF0aW9uOwogCQlpZiAoaXNfc3ByZWFkX3BhZ2UoY3MpKQpAQCAtNzIxLDExICs0NTcsMTIgQEAKIAogc3RhdGljIGludCB2YWxpZGF0ZV9jaGFuZ2UoY29uc3Qgc3RydWN0IGNwdXNldCAqY3VyLCBjb25zdCBzdHJ1Y3QgY3B1c2V0ICp0cmlhbCkKIHsKKwlzdHJ1Y3QgY2dyb3VwICpjb250OwogCXN0cnVjdCBjcHVzZXQgKmMsICpwYXI7CiAKIAkvKiBFYWNoIG9mIG91ciBjaGlsZCBjcHVzZXRzIG11c3QgYmUgYSBzdWJzZXQgb2YgdXMgKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjdXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7Ci0JCWlmICghaXNfY3B1c2V0X3N1YnNldChjLCB0cmlhbCkpCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjb250LCAmY3VyLT5jc3MuY2dyb3VwLT5jaGlsZHJlbiwgc2libGluZykgeworCQlpZiAoIWlzX2NwdXNldF9zdWJzZXQoY2dyb3VwX2NzKGNvbnQpLCB0cmlhbCkpCiAJCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtNzQwLDcgKzQ3Nyw4IEBACiAJCXJldHVybiAtRUFDQ0VTOwogCiAJLyogSWYgZWl0aGVyIEkgb3Igc29tZSBzaWJsaW5nICghPSBtZSkgaXMgZXhjbHVzaXZlLCB3ZSBjYW4ndCBvdmVybGFwICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjLCAmcGFyLT5jaGlsZHJlbiwgc2libGluZykgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29udCwgJnBhci0+Y3NzLmNncm91cC0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJYyA9IGNncm91cF9jcyhjb250KTsKIAkJaWYgKChpc19jcHVfZXhjbHVzaXZlKHRyaWFsKSB8fCBpc19jcHVfZXhjbHVzaXZlKGMpKSAmJgogCQkgICAgYyAhPSBjdXIgJiYKIAkJICAgIGNwdXNfaW50ZXJzZWN0cyh0cmlhbC0+Y3B1c19hbGxvd2VkLCBjLT5jcHVzX2FsbG93ZWQpKQpAQCAtNzUxLDE3ICs0ODksMjY1IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBDcHVzZXRzIHdpdGggdGFza3MgY2FuJ3QgaGF2ZSBlbXB0eSBjcHVzX2FsbG93ZWQgb3IgbWVtc19hbGxvd2VkICovCisJaWYgKGNncm91cF90YXNrX2NvdW50KGN1ci0+Y3NzLmNncm91cCkpIHsKKwkJaWYgKGNwdXNfZW1wdHkodHJpYWwtPmNwdXNfYWxsb3dlZCkgfHwKKwkJICAgIG5vZGVzX2VtcHR5KHRyaWFsLT5tZW1zX2FsbG93ZWQpKSB7CisJCQlyZXR1cm4gLUVOT1NQQzsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCiAvKgorICogSGVscGVyIHJvdXRpbmUgZm9yIHJlYnVpbGRfc2NoZWRfZG9tYWlucygpLgorICogRG8gY3B1c2V0cyBhLCBiIGhhdmUgb3ZlcmxhcHBpbmcgY3B1c19hbGxvd2VkIG1hc2tzPworICovCisKK3N0YXRpYyBpbnQgY3B1c2V0c19vdmVybGFwKHN0cnVjdCBjcHVzZXQgKmEsIHN0cnVjdCBjcHVzZXQgKmIpCit7CisJcmV0dXJuIGNwdXNfaW50ZXJzZWN0cyhhLT5jcHVzX2FsbG93ZWQsIGItPmNwdXNfYWxsb3dlZCk7Cit9CisKKy8qCisgKiByZWJ1aWxkX3NjaGVkX2RvbWFpbnMoKQorICoKKyAqIElmIHRoZSBmbGFnICdzY2hlZF9sb2FkX2JhbGFuY2UnIG9mIGFueSBjcHVzZXQgd2l0aCBub24tZW1wdHkKKyAqICdjcHVzJyBjaGFuZ2VzLCBvciBpZiB0aGUgJ2NwdXMnIGFsbG93ZWQgY2hhbmdlcyBpbiBhbnkgY3B1c2V0CisgKiB3aGljaCBoYXMgdGhhdCBmbGFnIGVuYWJsZWQsIG9yIGlmIGFueSBjcHVzZXQgd2l0aCBhIG5vbi1lbXB0eQorICogJ2NwdXMnIGlzIHJlbW92ZWQsIHRoZW4gY2FsbCB0aGlzIHJvdXRpbmUgdG8gcmVidWlsZCB0aGUKKyAqIHNjaGVkdWxlcidzIGR5bmFtaWMgc2NoZWQgZG9tYWlucy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgYnVpbGRzIGEgcGFydGlhbCBwYXJ0aXRpb24gb2YgdGhlIHN5c3RlbXMgQ1BVcworICogKHRoZSBzZXQgb2Ygbm9uLW92ZXJsYXBwcGluZyBjcHVtYXNrX3QncyBpbiB0aGUgYXJyYXkgJ3BhcnQnCisgKiBiZWxvdyksIGFuZCBwYXNzZXMgdGhhdCBwYXJ0aWFsIHBhcnRpdGlvbiB0byB0aGUga2VybmVsL3NjaGVkLmMKKyAqIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKCkgcm91dGluZSwgd2hpY2ggd2lsbCByZWJ1aWxkIHRoZQorICogc2NoZWR1bGVycyBsb2FkIGJhbGFuY2luZyBkb21haW5zIChzY2hlZCBkb21haW5zKSBhcyBzcGVjaWZpZWQKKyAqIGJ5IHRoYXQgcGFydGlhbCBwYXJ0aXRpb24uICBBICdwYXJ0aWFsIHBhcnRpdGlvbicgaXMgYSBzZXQgb2YKKyAqIG5vbi1vdmVybGFwcGluZyBzdWJzZXRzIHdob3NlIHVuaW9uIGlzIGEgc3Vic2V0IG9mIHRoYXQgc2V0LgorICoKKyAqIFNlZSAiV2hhdCBpcyBzY2hlZF9sb2FkX2JhbGFuY2UiIGluIERvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKKyAqIGZvciBhIGJhY2tncm91bmQgZXhwbGFuYXRpb24gb2YgdGhpcy4KKyAqCisgKiBEb2VzIG5vdCByZXR1cm4gZXJyb3JzLCBvbiB0aGUgdGhlb3J5IHRoYXQgdGhlIGNhbGxlcnMgb2YgdGhpcworICogcm91dGluZSB3b3VsZCByYXRoZXIgbm90IHdvcnJ5IGFib3V0IGZhaWx1cmVzIHRvIHJlYnVpbGQgc2NoZWQKKyAqIGRvbWFpbnMgd2hlbiBvcGVyYXRpbmcgaW4gdGhlIHNldmVyZSBtZW1vcnkgc2hvcnRhZ2Ugc2l0dWF0aW9ucworICogdGhhdCBjb3VsZCBjYXVzZSBhbGxvY2F0aW9uIGZhaWx1cmVzIGJlbG93LgorICoKKyAqIENhbGwgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gIE1heSB0YWtlIGNhbGxiYWNrX211dGV4IGR1cmluZworICogY2FsbCBkdWUgdG8gdGhlIGtmaWZvX2FsbG9jKCkgYW5kIGttYWxsb2MoKSBjYWxscy4gIE1heSBuZXN0CisgKiBhIGNhbGwgdG8gdGhlIGxvY2tfY3B1X2hvdHBsdWcoKS91bmxvY2tfY3B1X2hvdHBsdWcoKSBwYWlyLgorICogTXVzdCBub3QgYmUgY2FsbGVkIGhvbGRpbmcgY2FsbGJhY2tfbXV0ZXgsIGJlY2F1c2Ugd2UgbXVzdCBub3QKKyAqIGNhbGwgbG9ja19jcHVfaG90cGx1ZygpIHdoaWxlIGhvbGRpbmcgY2FsbGJhY2tfbXV0ZXguICBFbHNld2hlcmUKKyAqIHRoZSBrZXJuZWwgbmVzdHMgY2FsbGJhY2tfbXV0ZXggaW5zaWRlIGxvY2tfY3B1X2hvdHBsdWcoKSBjYWxscy4KKyAqIFNvIHRoZSByZXZlcnNlIG5lc3Rpbmcgd291bGQgcmlzayBhbiBBQkJBIGRlYWRsb2NrLgorICoKKyAqIFRoZSB0aHJlZSBrZXkgbG9jYWwgdmFyaWFibGVzIGJlbG93IGFyZToKKyAqICAgIHEgIC0gYSBrZmlmbyBxdWV1ZSBvZiBjcHVzZXQgcG9pbnRlcnMsIHVzZWQgdG8gaW1wbGVtZW50IGEKKyAqCSAgIHRvcC1kb3duIHNjYW4gb2YgYWxsIGNwdXNldHMuICBUaGlzIHNjYW4gbG9hZHMgYSBwb2ludGVyCisgKgkgICB0byBlYWNoIGNwdXNldCBtYXJrZWQgaXNfc2NoZWRfbG9hZF9iYWxhbmNlIGludG8gdGhlCisgKgkgICBhcnJheSAnY3NhJy4gIEZvciBvdXIgcHVycG9zZXMsIHJlYnVpbGRpbmcgdGhlIHNjaGVkdWxlcnMKKyAqCSAgIHNjaGVkIGRvbWFpbnMsIHdlIGNhbiBpZ25vcmUgIWlzX3NjaGVkX2xvYWRfYmFsYW5jZSBjcHVzZXRzLgorICogIGNzYSAgLSAoZm9yIENwdVNldCBBcnJheSkgQXJyYXkgb2YgcG9pbnRlcnMgdG8gYWxsIHRoZSBjcHVzZXRzCisgKgkgICB0aGF0IG5lZWQgdG8gYmUgbG9hZCBiYWxhbmNlZCwgZm9yIGNvbnZlbmllbnQgaXRlcmF0aXZlCisgKgkgICBhY2Nlc3MgYnkgdGhlIHN1YnNlcXVlbnQgY29kZSB0aGF0IGZpbmRzIHRoZSBiZXN0IHBhcnRpdGlvbiwKKyAqCSAgIGkuZSB0aGUgc2V0IG9mIGRvbWFpbnMgKHN1YnNldHMpIG9mIENQVXMgc3VjaCB0aGF0IHRoZQorICoJICAgY3B1c19hbGxvd2VkIG9mIGV2ZXJ5IGNwdXNldCBtYXJrZWQgaXNfc2NoZWRfbG9hZF9iYWxhbmNlCisgKgkgICBpcyBhIHN1YnNldCBvZiBvbmUgb2YgdGhlc2UgZG9tYWlucywgd2hpbGUgdGhlcmUgYXJlIGFzCisgKgkgICBtYW55IHN1Y2ggZG9tYWlucyBhcyBwb3NzaWJsZSwgZWFjaCBhcyBzbWFsbCBhcyBwb3NzaWJsZS4KKyAqIGRvbXMgIC0gQ29udmVyc2lvbiBvZiAnY3NhJyB0byBhbiBhcnJheSBvZiBjcHVtYXNrcywgZm9yIHBhc3NpbmcgdG8KKyAqCSAgIHRoZSBrZXJuZWwvc2NoZWQuYyByb3V0aW5lIHBhcnRpdGlvbl9zY2hlZF9kb21haW5zKCkgaW4gYQorICoJICAgY29udmVuaWVudCBmb3JtYXQsIHRoYXQgY2FuIGJlIGVhc2lseSBjb21wYXJlZCB0byB0aGUgcHJpb3IKKyAqCSAgIHZhbHVlIHRvIGRldGVybWluZSB3aGF0IHBhcnRpdGlvbiBlbGVtZW50cyAoc2NoZWQgZG9tYWlucykKKyAqCSAgIHdlcmUgY2hhbmdlZCAoYWRkZWQgb3IgcmVtb3ZlZC4pCisgKgorICogRmluZGluZyB0aGUgYmVzdCBwYXJ0aXRpb24gKHNldCBvZiBkb21haW5zKToKKyAqCVRoZSB0cmlwbGUgbmVzdGVkIGxvb3BzIGJlbG93IG92ZXIgaSwgaiwgayBzY2FuIG92ZXIgdGhlCisgKglsb2FkIGJhbGFuY2VkIGNwdXNldHMgKHVzaW5nIHRoZSBhcnJheSBvZiBjcHVzZXQgcG9pbnRlcnMgaW4KKyAqCWNzYVtdKSBsb29raW5nIGZvciBwYWlycyBvZiBjcHVzZXRzIHRoYXQgaGF2ZSBvdmVybGFwcGluZworICoJY3B1c19hbGxvd2VkLCBidXQgd2hpY2ggZG9uJ3QgaGF2ZSB0aGUgc2FtZSAncG4nIHBhcnRpdGlvbgorICoJbnVtYmVyIGFuZCBnaXZlcyB0aGVtIGluIHRoZSBzYW1lIHBhcnRpdGlvbiBudW1iZXIuICBJdCBrZWVwcworICoJbG9vcGluZyBvbiB0aGUgJ3Jlc3RhcnQnIGxhYmVsIHVudGlsIGl0IGNhbiBubyBsb25nZXIgZmluZAorICoJYW55IHN1Y2ggcGFpcnMuCisgKgorICoJVGhlIHVuaW9uIG9mIHRoZSBjcHVzX2FsbG93ZWQgbWFza3MgZnJvbSB0aGUgc2V0IG9mCisgKglhbGwgY3B1c2V0cyBoYXZpbmcgdGhlIHNhbWUgJ3BuJyB2YWx1ZSB0aGVuIGZvcm0gdGhlIG9uZQorICoJZWxlbWVudCBvZiB0aGUgcGFydGl0aW9uIChvbmUgc2NoZWQgZG9tYWluKSB0byBiZSBwYXNzZWQgdG8KKyAqCXBhcnRpdGlvbl9zY2hlZF9kb21haW5zKCkuCisgKi8KKworc3RhdGljIHZvaWQgcmVidWlsZF9zY2hlZF9kb21haW5zKHZvaWQpCit7CisJc3RydWN0IGtmaWZvICpxOwkvKiBxdWV1ZSBvZiBjcHVzZXRzIHRvIGJlIHNjYW5uZWQgKi8KKwlzdHJ1Y3QgY3B1c2V0ICpjcDsJLyogc2NhbnMgcSAqLworCXN0cnVjdCBjcHVzZXQgKipjc2E7CS8qIGFycmF5IG9mIGFsbCBjcHVzZXQgcHRycyAqLworCWludCBjc247CQkvKiBob3cgbWFueSBjcHVzZXQgcHRycyBpbiBjc2Egc28gZmFyICovCisJaW50IGksIGosIGs7CQkvKiBpbmRpY2VzIGZvciBwYXJ0aXRpb24gZmluZGluZyBsb29wcyAqLworCWNwdW1hc2tfdCAqZG9tczsJLyogcmVzdWx0aW5nIHBhcnRpdGlvbjsgaS5lLiBzY2hlZCBkb21haW5zICovCisJaW50IG5kb21zOwkJLyogbnVtYmVyIG9mIHNjaGVkIGRvbWFpbnMgaW4gcmVzdWx0ICovCisJaW50IG5zbG90OwkJLyogbmV4dCBlbXB0eSBkb21zW10gY3B1bWFza190IHNsb3QgKi8KKworCXEgPSBOVUxMOworCWNzYSA9IE5VTEw7CisJZG9tcyA9IE5VTEw7CisKKwkvKiBTcGVjaWFsIGNhc2UgZm9yIHRoZSA5OSUgb2Ygc3lzdGVtcyB3aXRoIG9uZSwgZnVsbCwgc2NoZWQgZG9tYWluICovCisJaWYgKGlzX3NjaGVkX2xvYWRfYmFsYW5jZSgmdG9wX2NwdXNldCkpIHsKKwkJbmRvbXMgPSAxOworCQlkb21zID0ga21hbGxvYyhzaXplb2YoY3B1bWFza190KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghZG9tcykKKwkJCWdvdG8gcmVidWlsZDsKKwkJKmRvbXMgPSB0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZDsKKwkJZ290byByZWJ1aWxkOworCX0KKworCXEgPSBrZmlmb19hbGxvYyhudW1iZXJfb2ZfY3B1c2V0cyAqIHNpemVvZihjcCksIEdGUF9LRVJORUwsIE5VTEwpOworCWlmIChJU19FUlIocSkpCisJCWdvdG8gZG9uZTsKKwljc2EgPSBrbWFsbG9jKG51bWJlcl9vZl9jcHVzZXRzICogc2l6ZW9mKGNwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjc2EpCisJCWdvdG8gZG9uZTsKKwljc24gPSAwOworCisJY3AgPSAmdG9wX2NwdXNldDsKKwlfX2tmaWZvX3B1dChxLCAodm9pZCAqKSZjcCwgc2l6ZW9mKGNwKSk7CisJd2hpbGUgKF9fa2ZpZm9fZ2V0KHEsICh2b2lkICopJmNwLCBzaXplb2YoY3ApKSkgeworCQlzdHJ1Y3QgY2dyb3VwICpjb250OworCQlzdHJ1Y3QgY3B1c2V0ICpjaGlsZDsgICAvKiBzY2FucyBjaGlsZCBjcHVzZXRzIG9mIGNwICovCisJCWlmIChpc19zY2hlZF9sb2FkX2JhbGFuY2UoY3ApKQorCQkJY3NhW2NzbisrXSA9IGNwOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbnQsICZjcC0+Y3NzLmNncm91cC0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwkJCWNoaWxkID0gY2dyb3VwX2NzKGNvbnQpOworCQkJX19rZmlmb19wdXQocSwgKHZvaWQgKikmY2hpbGQsIHNpemVvZihjcCkpOworCQl9CisgIAl9CisKKwlmb3IgKGkgPSAwOyBpIDwgY3NuOyBpKyspCisJCWNzYVtpXS0+cG4gPSBpOworCW5kb21zID0gY3NuOworCityZXN0YXJ0OgorCS8qIEZpbmQgdGhlIGJlc3QgcGFydGl0aW9uIChzZXQgb2Ygc2NoZWQgZG9tYWlucykgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY3NuOyBpKyspIHsKKwkJc3RydWN0IGNwdXNldCAqYSA9IGNzYVtpXTsKKwkJaW50IGFwbiA9IGEtPnBuOworCisJCWZvciAoaiA9IDA7IGogPCBjc247IGorKykgeworCQkJc3RydWN0IGNwdXNldCAqYiA9IGNzYVtqXTsKKwkJCWludCBicG4gPSBiLT5wbjsKKworCQkJaWYgKGFwbiAhPSBicG4gJiYgY3B1c2V0c19vdmVybGFwKGEsIGIpKSB7CisJCQkJZm9yIChrID0gMDsgayA8IGNzbjsgaysrKSB7CisJCQkJCXN0cnVjdCBjcHVzZXQgKmMgPSBjc2Fba107CisKKwkJCQkJaWYgKGMtPnBuID09IGJwbikKKwkJCQkJCWMtPnBuID0gYXBuOworCQkJCX0KKwkJCQluZG9tcy0tOwkvKiBvbmUgbGVzcyBlbGVtZW50ICovCisJCQkJZ290byByZXN0YXJ0OworCQkJfQorCQl9CisJfQorCisJLyogQ29udmVydCA8Y3NuLCBjc2E+IHRvIDxuZG9tcywgZG9tcz4gKi8KKwlkb21zID0ga21hbGxvYyhuZG9tcyAqIHNpemVvZihjcHVtYXNrX3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRvbXMpCisJCWdvdG8gcmVidWlsZDsKKworCWZvciAobnNsb3QgPSAwLCBpID0gMDsgaSA8IGNzbjsgaSsrKSB7CisJCXN0cnVjdCBjcHVzZXQgKmEgPSBjc2FbaV07CisJCWludCBhcG4gPSBhLT5wbjsKKworCQlpZiAoYXBuID49IDApIHsKKwkJCWNwdW1hc2tfdCAqZHAgPSBkb21zICsgbnNsb3Q7CisKKwkJCWlmIChuc2xvdCA9PSBuZG9tcykgeworCQkJCXN0YXRpYyBpbnQgd2FybmluZ3MgPSAxMDsKKwkJCQlpZiAod2FybmluZ3MpIHsKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgInJlYnVpbGRfc2NoZWRfZG9tYWlucyBjb25mdXNlZDoiCisJCQkJCSAgIiBuc2xvdCAlZCwgbmRvbXMgJWQsIGNzbiAlZCwgaSAlZCwiCisJCQkJCSAgIiBhcG4gJWRcbiIsCisJCQkJCSAgbnNsb3QsIG5kb21zLCBjc24sIGksIGFwbik7CisJCQkJCXdhcm5pbmdzLS07CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQljcHVzX2NsZWFyKCpkcCk7CisJCQlmb3IgKGogPSBpOyBqIDwgY3NuOyBqKyspIHsKKwkJCQlzdHJ1Y3QgY3B1c2V0ICpiID0gY3NhW2pdOworCisJCQkJaWYgKGFwbiA9PSBiLT5wbikgeworCQkJCQljcHVzX29yKCpkcCwgKmRwLCBiLT5jcHVzX2FsbG93ZWQpOworCQkJCQliLT5wbiA9IC0xOworCQkJCX0KKwkJCX0KKwkJCW5zbG90Kys7CisJCX0KKwl9CisJQlVHX09OKG5zbG90ICE9IG5kb21zKTsKKworcmVidWlsZDoKKwkvKiBIYXZlIHNjaGVkdWxlciByZWJ1aWxkIHNjaGVkIGRvbWFpbnMgKi8KKwlsb2NrX2NwdV9ob3RwbHVnKCk7CisJcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMobmRvbXMsIGRvbXMpOworCXVubG9ja19jcHVfaG90cGx1ZygpOworCitkb25lOgorCWlmIChxICYmICFJU19FUlIocSkpCisJCWtmaWZvX2ZyZWUocSk7CisJa2ZyZWUoY3NhKTsKKwkvKiBEb24ndCBrZnJlZShkb21zKSAtLSBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucygpIGRvZXMgdGhhdC4gKi8KK30KKworc3RhdGljIGlubGluZSBpbnQgc3RhcnRlZF9hZnRlcl90aW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqdDEsCisJCQkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnRpbWUsCisJCQkJICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQyKQoreworCWludCBzdGFydF9kaWZmID0gdGltZXNwZWNfY29tcGFyZSgmdDEtPnN0YXJ0X3RpbWUsIHRpbWUpOworCWlmIChzdGFydF9kaWZmID4gMCkgeworCQlyZXR1cm4gMTsKKwl9IGVsc2UgaWYgKHN0YXJ0X2RpZmYgPCAwKSB7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIEFyYml0cmFyaWx5LCBpZiB0d28gcHJvY2Vzc2VzIHN0YXJ0ZWQgYXQgdGhlIHNhbWUKKwkJICogdGltZSwgd2UnbGwgc2F5IHRoYXQgdGhlIGxvd2VyIHBvaW50ZXIgdmFsdWUKKwkJICogc3RhcnRlZCBmaXJzdC4gTm90ZSB0aGF0IHQyIG1heSBoYXZlIGV4aXRlZCBieSBub3cKKwkJICogc28gdGhpcyBtYXkgbm90IGJlIGEgdmFsaWQgcG9pbnRlciBhbnkgbG9uZ2VyLCBidXQKKwkJICogdGhhdCdzIGZpbmUgLSBpdCBzdGlsbCBzZXJ2ZXMgdG8gZGlzdGluZ3Vpc2gKKwkJICogYmV0d2VlbiB0d28gdGFza3Mgc3RhcnRlZCAoZWZmZWN0aXZlbHkpCisJCSAqIHNpbXVsdGFuZW91c2x5LgorCQkgKi8KKwkJcmV0dXJuIHQxID4gdDI7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCBzdGFydGVkX2FmdGVyKHZvaWQgKnAxLCB2b2lkICpwMikKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQxID0gcDE7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0MiA9IHAyOworCXJldHVybiBzdGFydGVkX2FmdGVyX3RpbWUodDEsICZ0Mi0+c3RhcnRfdGltZSwgdDIpOworfQorCisvKgogICogQ2FsbCB3aXRoIG1hbmFnZV9tdXRleCBoZWxkLiAgTWF5IHRha2UgY2FsbGJhY2tfbXV0ZXggZHVyaW5nIGNhbGwuCiAgKi8KIAogc3RhdGljIGludCB1cGRhdGVfY3B1bWFzayhzdHJ1Y3QgY3B1c2V0ICpjcywgY2hhciAqYnVmKQogewogCXN0cnVjdCBjcHVzZXQgdHJpYWxjczsKLQlpbnQgcmV0dmFsOworCWludCByZXR2YWwsIGk7CisJaW50IGlzX2xvYWRfYmFsYW5jZWQ7CisJc3RydWN0IGNncm91cF9pdGVyIGl0OworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjcy0+Y3NzLmNncm91cDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsICpkcm9wcGVkOworCS8qIE5ldmVyIGRlcmVmZXJlbmNlIGxhdGVzdF90YXNrLCBzaW5jZSBpdCdzIG5vdCByZWZjb3VudGVkICovCisJc3RydWN0IHRhc2tfc3RydWN0ICpsYXRlc3RfdGFzayA9IE5VTEw7CisJc3RydWN0IHB0cl9oZWFwIGhlYXA7CisJc3RydWN0IHRpbWVzcGVjIGxhdGVzdF90aW1lID0geyAwLCAwIH07CiAKIAkvKiB0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCB0cmFja3MgY3B1X29ubGluZV9tYXA7IGl0J3MgcmVhZC1vbmx5ICovCiAJaWYgKGNzID09ICZ0b3BfY3B1c2V0KQpAQCAtNzcwLDExICs3NTYsMTMgQEAKIAl0cmlhbGNzID0gKmNzOwogCiAJLyoKLQkgKiBXZSBhbGxvdyBhIGNwdXNldCdzIGNwdXNfYWxsb3dlZCB0byBiZSBlbXB0eTsgaWYgaXQgaGFzIGF0dGFjaGVkCi0JICogdGFza3MsIHdlJ2xsIGNhdGNoIGl0IGxhdGVyIHdoZW4gd2UgdmFsaWRhdGUgdGhlIGNoYW5nZSBhbmQgcmV0dXJuCi0JICogLUVOT1NQQy4KKwkgKiBBbiBlbXB0eSBjcHVzX2FsbG93ZWQgaXMgb2sgaWZmIHRoZXJlIGFyZSBubyB0YXNrcyBpbiB0aGUgY3B1c2V0LgorCSAqIFNpbmNlIGNwdWxpc3RfcGFyc2UoKSBmYWlscyBvbiBhbiBlbXB0eSBtYXNrLCB3ZSBzcGVjaWFsIGNhc2UKKwkgKiB0aGF0IHBhcnNpbmcuICBUaGUgdmFsaWRhdGVfY2hhbmdlKCkgY2FsbCBlbnN1cmVzIHRoYXQgY3B1c2V0cworCSAqIHdpdGggdGFza3MgaGF2ZSBjcHVzLgogCSAqLwotCWlmICghYnVmWzBdIHx8IChidWZbMF0gPT0gJ1xuJyAmJiAhYnVmWzFdKSkgeworCWJ1ZiA9IHN0cnN0cmlwKGJ1Zik7CisJaWYgKCEqYnVmKSB7CiAJCWNwdXNfY2xlYXIodHJpYWxjcy5jcHVzX2FsbG93ZWQpOwogCX0gZWxzZSB7CiAJCXJldHZhbCA9IGNwdWxpc3RfcGFyc2UoYnVmLCB0cmlhbGNzLmNwdXNfYWxsb3dlZCk7CkBAIC03ODIsMTUgKzc3MCw3OSBAQAogCQkJcmV0dXJuIHJldHZhbDsKIAl9CiAJY3B1c19hbmQodHJpYWxjcy5jcHVzX2FsbG93ZWQsIHRyaWFsY3MuY3B1c19hbGxvd2VkLCBjcHVfb25saW5lX21hcCk7Ci0JLyogY3B1c19hbGxvd2VkIGNhbm5vdCBiZSBlbXB0eSBmb3IgYSBjcHVzZXQgd2l0aCBhdHRhY2hlZCB0YXNrcy4gKi8KLQlpZiAoYXRvbWljX3JlYWQoJmNzLT5jb3VudCkgJiYgY3B1c19lbXB0eSh0cmlhbGNzLmNwdXNfYWxsb3dlZCkpCi0JCXJldHVybiAtRU5PU1BDOwogCXJldHZhbCA9IHZhbGlkYXRlX2NoYW5nZShjcywgJnRyaWFsY3MpOwogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOworCisJLyogTm90aGluZyB0byBkbyBpZiB0aGUgY3B1cyBkaWRuJ3QgY2hhbmdlICovCisJaWYgKGNwdXNfZXF1YWwoY3MtPmNwdXNfYWxsb3dlZCwgdHJpYWxjcy5jcHVzX2FsbG93ZWQpKQorCQlyZXR1cm4gMDsKKwlyZXR2YWwgPSBoZWFwX2luaXQoJmhlYXAsIFBBR0VfU0laRSwgR0ZQX0tFUk5FTCwgJnN0YXJ0ZWRfYWZ0ZXIpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlpc19sb2FkX2JhbGFuY2VkID0gaXNfc2NoZWRfbG9hZF9iYWxhbmNlKCZ0cmlhbGNzKTsKKwogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAljcy0+Y3B1c19hbGxvd2VkID0gdHJpYWxjcy5jcHVzX2FsbG93ZWQ7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CisKKyBhZ2FpbjoKKwkvKgorCSAqIFNjYW4gdGFza3MgaW4gdGhlIGNwdXNldCwgYW5kIHVwZGF0ZSB0aGUgY3B1bWFza3Mgb2YgYW55CisJICogdGhhdCBuZWVkIGFuIHVwZGF0ZS4gU2luY2Ugd2UgY2FuJ3QgY2FsbCBzZXRfY3B1c19hbGxvd2VkKCkKKwkgKiB3aGlsZSBob2xkaW5nIHRhc2tsaXN0X2xvY2ssIGdhdGhlciB0YXNrcyB0byBiZSBwcm9jZXNzZWQKKwkgKiBpbiBhIGhlYXAgc3RydWN0dXJlLiBJZiB0aGUgc3RhdGljYWxseS1zaXplZCBoZWFwIGZpbGxzIHVwLAorCSAqIG92ZXJmbG93IHRhc2tzIHRoYXQgc3RhcnRlZCBsYXRlciwgYW5kIGluIGZ1dHVyZSBpdGVyYXRpb25zCisJICogb25seSBjb25zaWRlciB0YXNrcyB0aGF0IHN0YXJ0ZWQgYWZ0ZXIgdGhlIGxhdGVzdCB0YXNrIGluCisJICogdGhlIHByZXZpb3VzIHBhc3MuIFRoaXMgZ3VhcmFudGVlcyBmb3J3YXJkIHByb2dyZXNzIGFuZAorCSAqIHRoYXQgd2UgZG9uJ3QgbWlzcyBhbnkgdGFza3MKKwkgKi8KKwloZWFwLnNpemUgPSAwOworCWNncm91cF9pdGVyX3N0YXJ0KGNncnAsICZpdCk7CisJd2hpbGUgKChwID0gY2dyb3VwX2l0ZXJfbmV4dChjZ3JwLCAmaXQpKSkgeworCQkvKiBPbmx5IGFmZmVjdCB0YXNrcyB0aGF0IGRvbid0IGhhdmUgdGhlIHJpZ2h0IGNwdXNfYWxsb3dlZCAqLworCQlpZiAoY3B1c19lcXVhbChwLT5jcHVzX2FsbG93ZWQsIGNzLT5jcHVzX2FsbG93ZWQpKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIE9ubHkgcHJvY2VzcyB0YXNrcyB0aGF0IHN0YXJ0ZWQgYWZ0ZXIgdGhlIGxhc3QgdGFzaworCQkgKiB3ZSBwcm9jZXNzZWQKKwkJICovCisJCWlmICghc3RhcnRlZF9hZnRlcl90aW1lKHAsICZsYXRlc3RfdGltZSwgbGF0ZXN0X3Rhc2spKQorCQkJY29udGludWU7CisJCWRyb3BwZWQgPSBoZWFwX2luc2VydCgmaGVhcCwgcCk7CisJCWlmIChkcm9wcGVkID09IE5VTEwpIHsKKwkJCWdldF90YXNrX3N0cnVjdChwKTsKKwkJfSBlbHNlIGlmIChkcm9wcGVkICE9IHApIHsKKwkJCWdldF90YXNrX3N0cnVjdChwKTsKKwkJCXB1dF90YXNrX3N0cnVjdChkcm9wcGVkKTsKKwkJfQorCX0KKwljZ3JvdXBfaXRlcl9lbmQoY2dycCwgJml0KTsKKwlpZiAoaGVhcC5zaXplKSB7CisJCWZvciAoaSA9IDA7IGkgPCBoZWFwLnNpemU7IGkrKykgeworCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gaGVhcC5wdHJzW2ldOworCQkJaWYgKGkgPT0gMCkgeworCQkJCWxhdGVzdF90aW1lID0gcC0+c3RhcnRfdGltZTsKKwkJCQlsYXRlc3RfdGFzayA9IHA7CisJCQl9CisJCQlzZXRfY3B1c19hbGxvd2VkKHAsIGNzLT5jcHVzX2FsbG93ZWQpOworCQkJcHV0X3Rhc2tfc3RydWN0KHApOworCQl9CisJCS8qCisJCSAqIElmIHdlIGhhZCB0byBwcm9jZXNzIGFueSB0YXNrcyBhdCBhbGwsIHNjYW4gYWdhaW4KKwkJICogaW4gY2FzZSBzb21lIG9mIHRoZW0gd2VyZSBpbiB0aGUgbWlkZGxlIG9mIGZvcmtpbmcKKwkJICogY2hpbGRyZW4gdGhhdCBkaWRuJ3Qgbm90aWNlIHRoZSBuZXcgY3B1bWFzaworCQkgKiByZXN0cmljdGlvbi4gIE5vdCB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIGRvIGl0LAorCQkgKiBidXQgaXQgYXZvaWRzIGhhdmluZyB0byB0YWtlIGNhbGxiYWNrX211dGV4IGluIHRoZQorCQkgKiBmb3JrIHBhdGgKKwkJICovCisJCWdvdG8gYWdhaW47CisJfQorCWhlYXBfZnJlZSgmaGVhcCk7CisJaWYgKGlzX2xvYWRfYmFsYW5jZWQpCisJCXJlYnVpbGRfc2NoZWRfZG9tYWlucygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTgzOSw3ICs4OTEsNyBAQAogCWRvX21pZ3JhdGVfcGFnZXMobW0sIGZyb20sIHRvLCBNUE9MX01GX01PVkVfQUxMKTsKIAogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKLQlndWFyYW50ZWVfb25saW5lX21lbXModHNrLT5jcHVzZXQsICZ0c2stPm1lbXNfYWxsb3dlZCk7CisJZ3VhcmFudGVlX29ubGluZV9tZW1zKHRhc2tfY3ModHNrKSwmdHNrLT5tZW1zX2FsbG93ZWQpOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogfQogCkBAIC04NTcsMTYgKzkwOSwxOSBAQAogICogdGhlaXIgbWVtcG9saWNpZXMgdG8gdGhlIGNwdXNldHMgbmV3IG1lbXNfYWxsb3dlZC4KICAqLwogCitzdGF0aWMgdm9pZCAqY3B1c2V0X2JlaW5nX3JlYm91bmQ7CisKIHN0YXRpYyBpbnQgdXBkYXRlX25vZGVtYXNrKHN0cnVjdCBjcHVzZXQgKmNzLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGNwdXNldCB0cmlhbGNzOwogCW5vZGVtYXNrX3Qgb2xkbWVtOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CisJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKiptbWFycmF5OwogCWludCBpLCBuLCBudGFza3M7CiAJaW50IG1pZ3JhdGU7CiAJaW50IGZ1ZGdlOwogCWludCByZXR2YWw7CisJc3RydWN0IGNncm91cF9pdGVyIGl0OwogCiAJLyoKIAkgKiB0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCB0cmFja3Mgbm9kZV9zdGF0c1tOX0hJR0hfTUVNT1JZXTsKQEAgLTg3OCwyOSArOTMzLDE5IEBACiAJdHJpYWxjcyA9ICpjczsKIAogCS8qCi0JICogV2UgYWxsb3cgYSBjcHVzZXQncyBtZW1zX2FsbG93ZWQgdG8gYmUgZW1wdHk7IGlmIGl0IGhhcyBhdHRhY2hlZAotCSAqIHRhc2tzLCB3ZSdsbCBjYXRjaCBpdCBsYXRlciB3aGVuIHdlIHZhbGlkYXRlIHRoZSBjaGFuZ2UgYW5kIHJldHVybgotCSAqIC1FTk9TUEMuCisJICogQW4gZW1wdHkgbWVtc19hbGxvd2VkIGlzIG9rIGlmZiB0aGVyZSBhcmUgbm8gdGFza3MgaW4gdGhlIGNwdXNldC4KKwkgKiBTaW5jZSBub2RlbGlzdF9wYXJzZSgpIGZhaWxzIG9uIGFuIGVtcHR5IG1hc2ssIHdlIHNwZWNpYWwgY2FzZQorCSAqIHRoYXQgcGFyc2luZy4gIFRoZSB2YWxpZGF0ZV9jaGFuZ2UoKSBjYWxsIGVuc3VyZXMgdGhhdCBjcHVzZXRzCisJICogd2l0aCB0YXNrcyBoYXZlIG1lbW9yeS4KIAkgKi8KLQlpZiAoIWJ1ZlswXSB8fCAoYnVmWzBdID09ICdcbicgJiYgIWJ1ZlsxXSkpIHsKKwlidWYgPSBzdHJzdHJpcChidWYpOworCWlmICghKmJ1ZikgewogCQlub2Rlc19jbGVhcih0cmlhbGNzLm1lbXNfYWxsb3dlZCk7CiAJfSBlbHNlIHsKIAkJcmV0dmFsID0gbm9kZWxpc3RfcGFyc2UoYnVmLCB0cmlhbGNzLm1lbXNfYWxsb3dlZCk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJZ290byBkb25lOwotCQlpZiAoIW5vZGVzX2ludGVyc2VjdHModHJpYWxjcy5tZW1zX2FsbG93ZWQsCi0JCQkJCQlub2RlX3N0YXRlc1tOX0hJR0hfTUVNT1JZXSkpIHsKLQkJCS8qCi0JCQkgKiBlcnJvciBpZiBvbmx5IG1lbW9yeWxlc3Mgbm9kZXMgc3BlY2lmaWVkLgotCQkJICovCi0JCQlyZXR2YWwgPSAtRU5PU1BDOwotCQkJZ290byBkb25lOwotCQl9CiAJfQotCS8qCi0JICogRXhjbHVkZSBtZW1vcnlsZXNzIG5vZGVzLiAgV2Uga25vdyB0aGF0IHRyaWFsY3MubWVtc19hbGxvd2VkCi0JICogY29udGFpbnMgYXQgbGVhc3Qgb25lIG5vZGUgd2l0aCBtZW1vcnkuCi0JICovCiAJbm9kZXNfYW5kKHRyaWFsY3MubWVtc19hbGxvd2VkLCB0cmlhbGNzLm1lbXNfYWxsb3dlZCwKIAkJCQkJCW5vZGVfc3RhdGVzW05fSElHSF9NRU1PUlldKTsKIAlvbGRtZW0gPSBjcy0+bWVtc19hbGxvd2VkOwpAQCAtOTA4LDExICs5NTMsNiBAQAogCQlyZXR2YWwgPSAwOwkJLyogVG9vIGVhc3kgLSBub3RoaW5nIHRvIGRvICovCiAJCWdvdG8gZG9uZTsKIAl9Ci0JLyogbWVtc19hbGxvd2VkIGNhbm5vdCBiZSBlbXB0eSBmb3IgYSBjcHVzZXQgd2l0aCBhdHRhY2hlZCB0YXNrcy4gKi8KLQlpZiAoYXRvbWljX3JlYWQoJmNzLT5jb3VudCkgJiYgbm9kZXNfZW1wdHkodHJpYWxjcy5tZW1zX2FsbG93ZWQpKSB7Ci0JCXJldHZhbCA9IC1FTk9TUEM7Ci0JCWdvdG8gZG9uZTsKLQl9CiAJcmV0dmFsID0gdmFsaWRhdGVfY2hhbmdlKGNzLCAmdHJpYWxjcyk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZG9uZTsKQEAgLTkyMiw3ICs5NjIsNyBAQAogCWNzLT5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CiAJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CiAKLQlzZXRfY3B1c2V0X2JlaW5nX3JlYm91bmQoY3MpOwkJLyogY2F1c2VzIG1wb2xfY29weSgpIHJlYmluZCAqLworCWNwdXNldF9iZWluZ19yZWJvdW5kID0gY3M7CQkvKiBjYXVzZXMgbXBvbF9jb3B5KCkgcmViaW5kICovCiAKIAlmdWRnZSA9IDEwOwkJCQkvKiBzcGFyZSBtbWFycmF5W10gc2xvdHMgKi8KIAlmdWRnZSArPSBjcHVzX3dlaWdodChjcy0+Y3B1c19hbGxvd2VkKTsJLyogaW1hZ2luZSBvbmUgZm9yay1ib21iL2NwdSAqLwpAQCAtOTM2LDEzICs5NzYsMTMgQEAKIAkgKiBlbm91Z2ggbW1hcnJheVtdIHcvbyB1c2luZyBHRlBfQVRPTUlDLgogCSAqLwogCXdoaWxlICgxKSB7Ci0JCW50YXNrcyA9IGF0b21pY19yZWFkKCZjcy0+Y291bnQpOwkvKiBndWVzcyAqLworCQludGFza3MgPSBjZ3JvdXBfdGFza19jb3VudChjcy0+Y3NzLmNncm91cCk7ICAvKiBndWVzcyAqLwogCQludGFza3MgKz0gZnVkZ2U7CiAJCW1tYXJyYXkgPSBrbWFsbG9jKG50YXNrcyAqIHNpemVvZigqbW1hcnJheSksIEdGUF9LRVJORUwpOwogCQlpZiAoIW1tYXJyYXkpCiAJCQlnb3RvIGRvbmU7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CQkvKiBibG9jayBmb3JrICovCi0JCWlmIChhdG9taWNfcmVhZCgmY3MtPmNvdW50KSA8PSBudGFza3MpCisJCWlmIChjZ3JvdXBfdGFza19jb3VudChjcy0+Y3NzLmNncm91cCkgPD0gbnRhc2tzKQogCQkJYnJlYWs7CQkJCS8qIGdvdCBlbm91Z2ggKi8KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwkJLyogdHJ5IGFnYWluICovCiAJCWtmcmVlKG1tYXJyYXkpOwpAQCAtOTUxLDIxICs5OTEsMjEgQEAKIAluID0gMDsKIAogCS8qIExvYWQgdXAgbW1hcnJheVtdIHdpdGggbW0gcmVmZXJlbmNlIGZvciBlYWNoIHRhc2sgaW4gY3B1c2V0LiAqLwotCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKKwljZ3JvdXBfaXRlcl9zdGFydChjcy0+Y3NzLmNncm91cCwgJml0KTsKKwl3aGlsZSAoKHAgPSBjZ3JvdXBfaXRlcl9uZXh0KGNzLT5jc3MuY2dyb3VwLCAmaXQpKSkgewogCQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKIAogCQlpZiAobiA+PSBudGFza3MpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCQkiQ3B1c2V0IG1lbXBvbGljeSByZWJpbmQgaW5jb21wbGV0ZS5cbiIpOwotCQkJY29udGludWU7CisJCQlicmVhazsKIAkJfQotCQlpZiAocC0+Y3B1c2V0ICE9IGNzKQotCQkJY29udGludWU7CiAJCW1tID0gZ2V0X3Rhc2tfbW0ocCk7CiAJCWlmICghbW0pCiAJCQljb250aW51ZTsKIAkJbW1hcnJheVtuKytdID0gbW07Ci0JfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKwl9CisJY2dyb3VwX2l0ZXJfZW5kKGNzLT5jc3MuY2dyb3VwLCAmaXQpOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAogCS8qCkBAIC05OTMsMTIgKzEwMzMsMTcgQEAKIAogCS8qIFdlJ3JlIGRvbmUgcmViaW5kaW5nIHZtYSdzIHRvIHRoaXMgY3B1c2V0cyBuZXcgbWVtc19hbGxvd2VkLiAqLwogCWtmcmVlKG1tYXJyYXkpOwotCXNldF9jcHVzZXRfYmVpbmdfcmVib3VuZChOVUxMKTsKKwljcHVzZXRfYmVpbmdfcmVib3VuZCA9IE5VTEw7CiAJcmV0dmFsID0gMDsKIGRvbmU6CiAJcmV0dXJuIHJldHZhbDsKIH0KIAoraW50IGN1cnJlbnRfY3B1c2V0X2lzX2JlaW5nX3JlYm91bmQodm9pZCkKK3sKKwlyZXR1cm4gdGFza19jcyhjdXJyZW50KSA9PSBjcHVzZXRfYmVpbmdfcmVib3VuZDsKK30KKwogLyoKICAqIENhbGwgd2l0aCBtYW5hZ2VfbXV0ZXggaGVsZC4KICAqLwpAQCAtMTAxNSw2ICsxMDYwLDcgQEAKIC8qCiAgKiB1cGRhdGVfZmxhZyAtIHJlYWQgYSAwIG9yIGEgMSBpbiBhIGZpbGUgYW5kIHVwZGF0ZSBhc3NvY2lhdGVkIGZsYWcKICAqIGJpdDoJdGhlIGJpdCB0byB1cGRhdGUgKENTX0NQVV9FWENMVVNJVkUsIENTX01FTV9FWENMVVNJVkUsCisgKgkJCQlDU19TQ0hFRF9MT0FEX0JBTEFOQ0UsCiAgKgkJCQlDU19OT1RJRllfT05fUkVMRUFTRSwgQ1NfTUVNT1JZX01JR1JBVEUsCiAgKgkJCQlDU19TUFJFQURfUEFHRSwgQ1NfU1BSRUFEX1NMQUIpCiAgKiBjczoJdGhlIGNwdXNldCB0byB1cGRhdGUKQEAgLTEwMjgsNiArMTA3NCw3IEBACiAJaW50IHR1cm5pbmdfb247CiAJc3RydWN0IGNwdXNldCB0cmlhbGNzOwogCWludCBlcnI7CisJaW50IGNwdXNfbm9uZW1wdHksIGJhbGFuY2VfZmxhZ19jaGFuZ2VkOwogCiAJdHVybmluZ19vbiA9IChzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSAhPSAwKTsKIApAQCAtMTA0MCwxMCArMTA4NywxOCBAQAogCWVyciA9IHZhbGlkYXRlX2NoYW5nZShjcywgJnRyaWFsY3MpOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOworCisJY3B1c19ub25lbXB0eSA9ICFjcHVzX2VtcHR5KHRyaWFsY3MuY3B1c19hbGxvd2VkKTsKKwliYWxhbmNlX2ZsYWdfY2hhbmdlZCA9IChpc19zY2hlZF9sb2FkX2JhbGFuY2UoY3MpICE9CisJCSAJCQlpc19zY2hlZF9sb2FkX2JhbGFuY2UoJnRyaWFsY3MpKTsKKwogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAljcy0+ZmxhZ3MgPSB0cmlhbGNzLmZsYWdzOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCisJaWYgKGNwdXNfbm9uZW1wdHkgJiYgYmFsYW5jZV9mbGFnX2NoYW5nZWQpCisJCXJlYnVpbGRfc2NoZWRfZG9tYWlucygpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTExNDUsODUgKzEyMDAsMzQgQEAKIAlyZXR1cm4gdmFsOwogfQogCi0vKgotICogQXR0YWNrIHRhc2sgc3BlY2lmaWVkIGJ5IHBpZCBpbiAncGlkYnVmJyB0byBjcHVzZXQgJ2NzJywgcG9zc2libHkKLSAqIHdyaXRpbmcgdGhlIHBhdGggb2YgdGhlIG9sZCBjcHVzZXQgaW4gJ3BwYXRoYnVmJyBpZiBpdCBuZWVkcyB0byBiZQotICogbm90aWZpZWQgb24gcmVsZWFzZS4KLSAqCi0gKiBDYWxsIGhvbGRpbmcgbWFuYWdlX211dGV4LiAgTWF5IHRha2UgY2FsbGJhY2tfbXV0ZXggYW5kIHRhc2tfbG9jayBvZgotICogdGhlIHRhc2sgJ3BpZCcgZHVyaW5nIGNhbGwuCi0gKi8KLQotc3RhdGljIGludCBhdHRhY2hfdGFzayhzdHJ1Y3QgY3B1c2V0ICpjcywgY2hhciAqcGlkYnVmLCBjaGFyICoqcHBhdGhidWYpCitzdGF0aWMgaW50IGNwdXNldF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCSAgICAgc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JcGlkX3QgcGlkOwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwotCXN0cnVjdCBjcHVzZXQgKm9sZGNzOwotCWNwdW1hc2tfdCBjcHVzOwotCW5vZGVtYXNrX3QgZnJvbSwgdG87Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0JaW50IHJldHZhbDsKKwlzdHJ1Y3QgY3B1c2V0ICpjcyA9IGNncm91cF9jcyhjb250KTsKIAotCWlmIChzc2NhbmYocGlkYnVmLCAiJWQiLCAmcGlkKSAhPSAxKQotCQlyZXR1cm4gLUVJTzsKIAlpZiAoY3B1c19lbXB0eShjcy0+Y3B1c19hbGxvd2VkKSB8fCBub2Rlc19lbXB0eShjcy0+bWVtc19hbGxvd2VkKSkKIAkJcmV0dXJuIC1FTk9TUEM7CiAKLQlpZiAocGlkKSB7Ci0JCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJcmV0dXJuIHNlY3VyaXR5X3Rhc2tfc2V0c2NoZWR1bGVyKHRzaywgMCwgTlVMTCk7Cit9CiAKLQkJdHNrID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwotCQlpZiAoIXRzayB8fCB0c2stPmZsYWdzICYgUEZfRVhJVElORykgewotCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCQkJcmV0dXJuIC1FU1JDSDsKLQkJfQotCi0JCWdldF90YXNrX3N0cnVjdCh0c2spOwotCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0KLQkJaWYgKChjdXJyZW50LT5ldWlkKSAmJiAoY3VycmVudC0+ZXVpZCAhPSB0c2stPnVpZCkKLQkJICAgICYmIChjdXJyZW50LT5ldWlkICE9IHRzay0+c3VpZCkpIHsKLQkJCXB1dF90YXNrX3N0cnVjdCh0c2spOwotCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCX0KLQl9IGVsc2UgewotCQl0c2sgPSBjdXJyZW50OwotCQlnZXRfdGFza19zdHJ1Y3QodHNrKTsKLQl9Ci0KLQlyZXR2YWwgPSBzZWN1cml0eV90YXNrX3NldHNjaGVkdWxlcih0c2ssIDAsIE5VTEwpOwotCWlmIChyZXR2YWwpIHsKLQkJcHV0X3Rhc2tfc3RydWN0KHRzayk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQorc3RhdGljIHZvaWQgY3B1c2V0X2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkgIHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCBjZ3JvdXAgKm9sZGNvbnQsCisJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWNwdW1hc2tfdCBjcHVzOworCW5vZGVtYXNrX3QgZnJvbSwgdG87CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJc3RydWN0IGNwdXNldCAqY3MgPSBjZ3JvdXBfY3MoY29udCk7CisJc3RydWN0IGNwdXNldCAqb2xkY3MgPSBjZ3JvdXBfY3Mob2xkY29udCk7CiAKIAltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0KLQl0YXNrX2xvY2sodHNrKTsKLQlvbGRjcyA9IHRzay0+Y3B1c2V0OwotCS8qCi0JICogQWZ0ZXIgZ2V0dGluZyAnb2xkY3MnIGNwdXNldCBwdHIsIGJlIHN1cmUgc3RpbGwgbm90IGV4aXRpbmcuCi0JICogSWYgJ29sZGNzJyBtaWdodCBiZSB0aGUgdG9wX2NwdXNldCBkdWUgdG8gdGhlX3RvcF9jcHVzZXRfaGFjawotCSAqIHRoZW4gZmFpbCB0aGlzIGF0dGFjaF90YXNrKCksIHRvIGF2b2lkIGJyZWFraW5nIHRvcF9jcHVzZXQuY291bnQuCi0JICovCi0JaWYgKHRzay0+ZmxhZ3MgJiBQRl9FWElUSU5HKSB7Ci0JCXRhc2tfdW5sb2NrKHRzayk7Ci0JCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCQlwdXRfdGFza19zdHJ1Y3QodHNrKTsKLQkJcmV0dXJuIC1FU1JDSDsKLQl9Ci0JYXRvbWljX2luYygmY3MtPmNvdW50KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIodHNrLT5jcHVzZXQsIGNzKTsKLQl0YXNrX3VubG9jayh0c2spOwotCiAJZ3VhcmFudGVlX29ubGluZV9jcHVzKGNzLCAmY3B1cyk7CiAJc2V0X2NwdXNfYWxsb3dlZCh0c2ssIGNwdXMpOworCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCiAJZnJvbSA9IG9sZGNzLT5tZW1zX2FsbG93ZWQ7CiAJdG8gPSBjcy0+bWVtc19hbGxvd2VkOwotCi0JbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0KIAltbSA9IGdldF90YXNrX21tKHRzayk7CiAJaWYgKG1tKSB7CiAJCW1wb2xfcmViaW5kX21tKG1tLCAmdG8pOwpAQCAtMTIzMiw0NCArMTIzNiwzNiBAQAogCQltbXB1dChtbSk7CiAJfQogCi0JcHV0X3Rhc2tfc3RydWN0KHRzayk7Ci0Jc3luY2hyb25pemVfcmN1KCk7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm9sZGNzLT5jb3VudCkpCi0JCWNoZWNrX2Zvcl9yZWxlYXNlKG9sZGNzLCBwcGF0aGJ1Zik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIFRoZSB2YXJpb3VzIHR5cGVzIG9mIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBpbiBhIGNwdXNldCBmaWxlIHN5c3RlbSAqLwogCiB0eXBlZGVmIGVudW0gewotCUZJTEVfUk9PVCwKLQlGSUxFX0RJUiwKIAlGSUxFX01FTU9SWV9NSUdSQVRFLAogCUZJTEVfQ1BVTElTVCwKIAlGSUxFX01FTUxJU1QsCiAJRklMRV9DUFVfRVhDTFVTSVZFLAogCUZJTEVfTUVNX0VYQ0xVU0lWRSwKLQlGSUxFX05PVElGWV9PTl9SRUxFQVNFLAorCUZJTEVfU0NIRURfTE9BRF9CQUxBTkNFLAogCUZJTEVfTUVNT1JZX1BSRVNTVVJFX0VOQUJMRUQsCiAJRklMRV9NRU1PUllfUFJFU1NVUkUsCiAJRklMRV9TUFJFQURfUEFHRSwKIAlGSUxFX1NQUkVBRF9TTEFCLAotCUZJTEVfVEFTS0xJU1QsCiB9IGNwdXNldF9maWxldHlwZV90OwogCi1zdGF0aWMgc3NpemVfdCBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgc3NpemVfdCBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUoc3RydWN0IGNncm91cCAqY29udCwKKwkJCQkJc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJCXNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqdW51c2VkX3Bwb3MpCiB7Ci0Jc3RydWN0IGNwdXNldCAqY3MgPSBfX2RfY3MoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQpOwotCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7CisJc3RydWN0IGNwdXNldCAqY3MgPSBjZ3JvdXBfY3MoY29udCk7CiAJY3B1c2V0X2ZpbGV0eXBlX3QgdHlwZSA9IGNmdC0+cHJpdmF0ZTsKIAljaGFyICpidWZmZXI7Ci0JY2hhciAqcGF0aGJ1ZiA9IE5VTEw7CiAJaW50IHJldHZhbCA9IDA7CiAKIAkvKiBDcnVkZSB1cHBlciBsaW1pdCBvbiBsYXJnZXN0IGxlZ2l0aW1hdGUgY3B1bGlzdCB1c2VyIG1pZ2h0IHdyaXRlLiAqLwotCWlmIChuYnl0ZXMgPiAxMDAgKyA2ICogbWF4KE5SX0NQVVMsIE1BWF9OVU1OT0RFUykpCisJaWYgKG5ieXRlcyA+IDEwMFUgKyA2ICogbWF4KE5SX0NQVVMsIE1BWF9OVU1OT0RFUykpCiAJCXJldHVybiAtRTJCSUc7CiAKIAkvKiArMSBmb3IgbnVsLXRlcm1pbmF0b3IgKi8KQEAgLTEyODIsOSArMTI3OCw5IEBACiAJfQogCWJ1ZmZlcltuYnl0ZXNdID0gMDsJLyogbnVsLXRlcm1pbmF0ZSAqLwogCi0JbXV0ZXhfbG9jaygmbWFuYWdlX211dGV4KTsKKwljZ3JvdXBfbG9jaygpOwogCi0JaWYgKGlzX3JlbW92ZWQoY3MpKSB7CisJaWYgKGNncm91cF9pc19yZW1vdmVkKGNvbnQpKSB7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0MjsKIAl9CkBAIC0xMzAyLDggKzEyOTgsOCBAQAogCWNhc2UgRklMRV9NRU1fRVhDTFVTSVZFOgogCQlyZXR2YWwgPSB1cGRhdGVfZmxhZyhDU19NRU1fRVhDTFVTSVZFLCBjcywgYnVmZmVyKTsKIAkJYnJlYWs7Ci0JY2FzZSBGSUxFX05PVElGWV9PTl9SRUxFQVNFOgotCQlyZXR2YWwgPSB1cGRhdGVfZmxhZyhDU19OT1RJRllfT05fUkVMRUFTRSwgY3MsIGJ1ZmZlcik7CisJY2FzZSBGSUxFX1NDSEVEX0xPQURfQkFMQU5DRToKKwkJcmV0dmFsID0gdXBkYXRlX2ZsYWcoQ1NfU0NIRURfTE9BRF9CQUxBTkNFLCBjcywgYnVmZmVyKTsKIAkJYnJlYWs7CiAJY2FzZSBGSUxFX01FTU9SWV9NSUdSQVRFOgogCQlyZXR2YWwgPSB1cGRhdGVfZmxhZyhDU19NRU1PUllfTUlHUkFURSwgY3MsIGJ1ZmZlcik7CkBAIC0xMzIyLDkgKzEzMTgsNiBAQAogCQlyZXR2YWwgPSB1cGRhdGVfZmxhZyhDU19TUFJFQURfU0xBQiwgY3MsIGJ1ZmZlcik7CiAJCWNzLT5tZW1zX2dlbmVyYXRpb24gPSBjcHVzZXRfbWVtc19nZW5lcmF0aW9uKys7CiAJCWJyZWFrOwotCWNhc2UgRklMRV9UQVNLTElTVDoKLQkJcmV0dmFsID0gYXR0YWNoX3Rhc2soY3MsIGJ1ZmZlciwgJnBhdGhidWYpOwotCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIG91dDI7CkBAIC0xMzMzLDMwICsxMzI2LDEyIEBACiAJaWYgKHJldHZhbCA9PSAwKQogCQlyZXR2YWwgPSBuYnl0ZXM7CiBvdXQyOgotCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKLQljcHVzZXRfcmVsZWFzZV9hZ2VudChwYXRoYnVmKTsKKwljZ3JvdXBfdW5sb2NrKCk7CiBvdXQxOgogCWtmcmVlKGJ1ZmZlcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B1c2V0X2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3NpemVfdCByZXR2YWwgPSAwOwotCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7Ci0JaWYgKCFjZnQpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogc3BlY2lhbCBmdW5jdGlvbiA/ICovCi0JaWYgKGNmdC0+d3JpdGUpCi0JCXJldHZhbCA9IGNmdC0+d3JpdGUoZmlsZSwgYnVmLCBuYnl0ZXMsIHBwb3MpOwotCWVsc2UKLQkJcmV0dmFsID0gY3B1c2V0X2NvbW1vbl9maWxlX3dyaXRlKGZpbGUsIGJ1ZiwgbmJ5dGVzLCBwcG9zKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KIC8qCiAgKiBUaGVzZSBhc2NpaSBsaXN0cyBzaG91bGQgYmUgcmVhZCBpbiBhIHNpbmdsZSBjYWxsLCBieSB1c2luZyBhIHVzZXIKICAqIGJ1ZmZlciBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgZW50aXJlIG1hcC4gIElmIHJlYWQgaW4gc21hbGxlcgpAQCAtMTM5MSwxMSArMTM2NiwxMyBAQAogCXJldHVybiBub2RlbGlzdF9zY25wcmludGYocGFnZSwgUEFHRV9TSVpFLCBtYXNrKTsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B1c2V0X2NvbW1vbl9maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgY3B1c2V0X2NvbW1vbl9maWxlX3JlYWQoc3RydWN0IGNncm91cCAqY29udCwKKwkJCQkgICAgICAgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJCSAgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgICAgICAgc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7Ci0Jc3RydWN0IGNwdXNldCAqY3MgPSBfX2RfY3MoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9wYXJlbnQpOworCXN0cnVjdCBjcHVzZXQgKmNzID0gY2dyb3VwX2NzKGNvbnQpOwogCWNwdXNldF9maWxldHlwZV90IHR5cGUgPSBjZnQtPnByaXZhdGU7CiAJY2hhciAqcGFnZTsKIAlzc2l6ZV90IHJldHZhbCA9IDA7CkBAIC0xNDE5LDggKzEzOTYsOCBAQAogCWNhc2UgRklMRV9NRU1fRVhDTFVTSVZFOgogCQkqcysrID0gaXNfbWVtX2V4Y2x1c2l2ZShjcykgPyAnMScgOiAnMCc7CiAJCWJyZWFrOwotCWNhc2UgRklMRV9OT1RJRllfT05fUkVMRUFTRToKLQkJKnMrKyA9IG5vdGlmeV9vbl9yZWxlYXNlKGNzKSA/ICcxJyA6ICcwJzsKKwljYXNlIEZJTEVfU0NIRURfTE9BRF9CQUxBTkNFOgorCQkqcysrID0gaXNfc2NoZWRfbG9hZF9iYWxhbmNlKGNzKSA/ICcxJyA6ICcwJzsKIAkJYnJlYWs7CiAJY2FzZSBGSUxFX01FTU9SWV9NSUdSQVRFOgogCQkqcysrID0gaXNfbWVtb3J5X21pZ3JhdGUoY3MpID8gJzEnIDogJzAnOwpAQCAtMTQ0OSwzOTAgKzE0MjYsMTUwIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgY3B1c2V0X2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKLQkJCQkJCQkJbG9mZl90ICpwcG9zKQotewotCXNzaXplX3QgcmV0dmFsID0gMDsKLQlzdHJ1Y3QgY2Z0eXBlICpjZnQgPSBfX2RfY2Z0KGZpbGUtPmZfcGF0aC5kZW50cnkpOwotCWlmICghY2Z0KQotCQlyZXR1cm4gLUVOT0RFVjsKIAotCS8qIHNwZWNpYWwgZnVuY3Rpb24gPyAqLwotCWlmIChjZnQtPnJlYWQpCi0JCXJldHZhbCA9IGNmdC0+cmVhZChmaWxlLCBidWYsIG5ieXRlcywgcHBvcyk7Ci0JZWxzZQotCQlyZXR2YWwgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZChmaWxlLCBidWYsIG5ieXRlcywgcHBvcyk7CiAKLQlyZXR1cm4gcmV0dmFsOwotfQogCi1zdGF0aWMgaW50IGNwdXNldF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3QgY2Z0eXBlICpjZnQ7Ci0KLQllcnIgPSBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7Ci0JaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7Ci0JaWYgKCFjZnQpCi0JCXJldHVybiAtRU5PREVWOwotCWlmIChjZnQtPm9wZW4pCi0JCWVyciA9IGNmdC0+b3Blbihpbm9kZSwgZmlsZSk7Ci0JZWxzZQotCQllcnIgPSAwOwotCi0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBjcHVzZXRfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBjZnR5cGUgKmNmdCA9IF9fZF9jZnQoZmlsZS0+Zl9wYXRoLmRlbnRyeSk7Ci0JaWYgKGNmdC0+cmVsZWFzZSkKLQkJcmV0dXJuIGNmdC0+cmVsZWFzZShpbm9kZSwgZmlsZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBjcHVzZXRfcmVuYW1lIC0gT25seSBhbGxvdyBzaW1wbGUgcmVuYW1lIG9mIGRpcmVjdG9yaWVzIGluIHBsYWNlLgotICovCi1zdGF0aWMgaW50IGNwdXNldF9yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAotICAgICAgICAgICAgICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQotewotCWlmICghU19JU0RJUihvbGRfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQotCQlyZXR1cm4gLUVOT1RESVI7Ci0JaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCi0JCXJldHVybiAtRUVYSVNUOwotCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCi0JCXJldHVybiAtRUlPOwotCXJldHVybiBzaW1wbGVfcmVuYW1lKG9sZF9kaXIsIG9sZF9kZW50cnksIG5ld19kaXIsIG5ld19kZW50cnkpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjcHVzZXRfZmlsZV9vcGVyYXRpb25zID0gewotCS5yZWFkID0gY3B1c2V0X2ZpbGVfcmVhZCwKLQkud3JpdGUgPSBjcHVzZXRfZmlsZV93cml0ZSwKLQkubGxzZWVrID0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkub3BlbiA9IGNwdXNldF9maWxlX29wZW4sCi0JLnJlbGVhc2UgPSBjcHVzZXRfZmlsZV9yZWxlYXNlLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGNwdXNldF9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKLQkubG9va3VwID0gc2ltcGxlX2xvb2t1cCwKLQkubWtkaXIgPSBjcHVzZXRfbWtkaXIsCi0JLnJtZGlyID0gY3B1c2V0X3JtZGlyLAotCS5yZW5hbWUgPSBjcHVzZXRfcmVuYW1lLAotfTsKLQotc3RhdGljIGludCBjcHVzZXRfY3JlYXRlX2ZpbGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCi0JaWYgKCFkZW50cnkpCi0JCXJldHVybiAtRU5PRU5UOwotCWlmIChkZW50cnktPmRfaW5vZGUpCi0JCXJldHVybiAtRUVYSVNUOwotCi0JaW5vZGUgPSBjcHVzZXRfbmV3X2lub2RlKG1vZGUpOwotCWlmICghaW5vZGUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKFNfSVNESVIobW9kZSkpIHsKLQkJaW5vZGUtPmlfb3AgPSAmY3B1c2V0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwotCi0JCS8qIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KLQkJaW5jX25saW5rKGlub2RlKTsKLQl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkpIHsKLQkJaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JCWlub2RlLT5pX2ZvcCA9ICZjcHVzZXRfZmlsZV9vcGVyYXRpb25zOwotCX0KLQotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqCWNwdXNldF9jcmVhdGVfZGlyIC0gY3JlYXRlIGEgZGlyZWN0b3J5IGZvciBhbiBvYmplY3QuCi0gKgljczoJdGhlIGNwdXNldCB3ZSBjcmVhdGUgdGhlIGRpcmVjdG9yeSBmb3IuCi0gKgkJSXQgbXVzdCBoYXZlIGEgdmFsaWQgLT5wYXJlbnQgZmllbGQKLSAqCQlBbmQgd2UgYXJlIGdvaW5nIHRvIGZpbGwgaXRzIC0+ZGVudHJ5IGZpZWxkLgotICoJbmFtZToJVGhlIG5hbWUgdG8gZ2l2ZSB0byB0aGUgY3B1c2V0IGRpcmVjdG9yeS4gV2lsbCBiZSBjb3BpZWQuCi0gKgltb2RlOgltb2RlIHRvIHNldCBvbiBuZXcgZGlyZWN0b3J5LgotICovCi0KLXN0YXRpYyBpbnQgY3B1c2V0X2NyZWF0ZV9kaXIoc3RydWN0IGNwdXNldCAqY3MsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBtb2RlKQotewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IE5VTEw7Ci0Jc3RydWN0IGRlbnRyeSAqcGFyZW50OwotCWludCBlcnJvciA9IDA7Ci0KLQlwYXJlbnQgPSBjcy0+cGFyZW50LT5kZW50cnk7Ci0JZGVudHJ5ID0gY3B1c2V0X2dldF9kZW50cnkocGFyZW50LCBuYW1lKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpCi0JCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7Ci0JZXJyb3IgPSBjcHVzZXRfY3JlYXRlX2ZpbGUoZGVudHJ5LCBTX0lGRElSIHwgbW9kZSk7Ci0JaWYgKCFlcnJvcikgewotCQlkZW50cnktPmRfZnNkYXRhID0gY3M7Ci0JCWluY19ubGluayhwYXJlbnQtPmRfaW5vZGUpOwotCQljcy0+ZGVudHJ5ID0gZGVudHJ5OwotCX0KLQlkcHV0KGRlbnRyeSk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0YXRpYyBpbnQgY3B1c2V0X2FkZF9maWxlKHN0cnVjdCBkZW50cnkgKmRpciwgY29uc3Qgc3RydWN0IGNmdHlwZSAqY2Z0KQotewotCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQlpbnQgZXJyb3I7Ci0KLQltdXRleF9sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwotCWRlbnRyeSA9IGNwdXNldF9nZXRfZGVudHJ5KGRpciwgY2Z0LT5uYW1lKTsKLQlpZiAoIUlTX0VSUihkZW50cnkpKSB7Ci0JCWVycm9yID0gY3B1c2V0X2NyZWF0ZV9maWxlKGRlbnRyeSwgMDY0NCB8IFNfSUZSRUcpOwotCQlpZiAoIWVycm9yKQotCQkJZGVudHJ5LT5kX2ZzZGF0YSA9ICh2b2lkICopY2Z0OwotCQlkcHV0KGRlbnRyeSk7Ci0JfSBlbHNlCi0JCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwotCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBTdHVmZiBmb3IgcmVhZGluZyB0aGUgJ3Rhc2tzJyBmaWxlLgotICoKLSAqIFJlYWRpbmcgdGhpcyBmaWxlIGNhbiByZXR1cm4gbGFyZ2UgYW1vdW50cyBvZiBkYXRhIGlmIGEgY3B1c2V0IGhhcwotICogKmxvdHMqIG9mIGF0dGFjaGVkIHRhc2tzLiBTbyBpdCBtYXkgbmVlZCBzZXZlcmFsIGNhbGxzIHRvIHJlYWQoKSwKLSAqIGJ1dCB3ZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgdGhlIGluZm9ybWF0aW9uIHdlIHByb2R1Y2UgaXMgY29ycmVjdAotICogdW5sZXNzIHdlIHByb2R1Y2UgaXQgZW50aXJlbHkgYXRvbWljYWxseS4KLSAqCi0gKiBVcG9uIHRhc2tzIGZpbGUgb3BlbigpLCBhIHN0cnVjdCBjdHJfc3RydWN0IGlzIGFsbG9jYXRlZCwgdGhhdAotICogd2lsbCBoYXZlIGEgcG9pbnRlciB0byBhbiBhcnJheSAoYWxzbyBhbGxvY2F0ZWQgaGVyZSkuICBUaGUgc3RydWN0Ci0gKiBjdHJfc3RydWN0ICogaXMgc3RvcmVkIGluIGZpbGUtPnByaXZhdGVfZGF0YS4gIEl0cyByZXNvdXJjZXMgd2lsbAotICogYmUgZnJlZWQgYnkgcmVsZWFzZSgpIHdoZW4gdGhlIGZpbGUgaXMgY2xvc2VkLiAgVGhlIGFycmF5IGlzIHVzZWQKLSAqIHRvIHNwcmludGYgdGhlIFBJRHMgYW5kIHRoZW4gdXNlZCBieSByZWFkKCkuCi0gKi8KLQotLyogY3B1c2V0c190YXNrc19yZWFkIGFycmF5ICovCi0KLXN0cnVjdCBjdHJfc3RydWN0IHsKLQljaGFyICpidWY7Ci0JaW50IGJ1ZnN6OwotfTsKLQotLyoKLSAqIExvYWQgaW50byAncGlkYXJyYXknIHVwIHRvICducGlkcycgb2YgdGhlIHRhc2tzIHVzaW5nIGNwdXNldCAnY3MnLgotICogUmV0dXJuIGFjdHVhbCBudW1iZXIgb2YgcGlkcyBsb2FkZWQuICBObyBuZWVkIHRvIHRhc2tfbG9jayhwKQotICogd2hlbiByZWFkaW5nIG91dCBwLT5jcHVzZXQsIGFzIHdlIGRvbid0IHJlYWxseSBjYXJlIGlmIGl0IGNoYW5nZXMKLSAqIG9uIHRoZSBuZXh0IGN5Y2xlLCBhbmQgd2UgYXJlIG5vdCBnb2luZyB0byB0cnkgdG8gZGVyZWZlcmVuY2UgaXQuCi0gKi8KLXN0YXRpYyBpbnQgcGlkX2FycmF5X2xvYWQocGlkX3QgKnBpZGFycmF5LCBpbnQgbnBpZHMsIHN0cnVjdCBjcHVzZXQgKmNzKQotewotCWludCBuID0gMDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwotCi0JcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQotCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKLQkJaWYgKHAtPmNwdXNldCA9PSBjcykgewotCQkJaWYgKHVubGlrZWx5KG4gPT0gbnBpZHMpKQotCQkJCWdvdG8gYXJyYXlfZnVsbDsKLQkJCXBpZGFycmF5W24rK10gPSBwLT5waWQ7Ci0JCX0KLQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwotCi1hcnJheV9mdWxsOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQlyZXR1cm4gbjsKLX0KLQotc3RhdGljIGludCBjbXBwaWQoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKLXsKLQlyZXR1cm4gKihwaWRfdCAqKWEgLSAqKHBpZF90ICopYjsKLX0KLQotLyoKLSAqIENvbnZlcnQgYXJyYXkgJ2EnIG9mICducGlkcycgcGlkX3QncyB0byBhIHN0cmluZyBvZiBuZXdsaW5lIHNlcGFyYXRlZAotICogZGVjaW1hbCBwaWRzIGluICdidWYnLiAgRG9uJ3Qgd3JpdGUgbW9yZSB0aGFuICdzeicgY2hhcnMsIGJ1dCByZXR1cm4KLSAqIGNvdW50ICdjbnQnIG9mIGhvdyBtYW55IGNoYXJzIHdvdWxkIGJlIHdyaXR0ZW4gaWYgYnVmIHdlcmUgbGFyZ2UgZW5vdWdoLgotICovCi1zdGF0aWMgaW50IHBpZF9hcnJheV90b19idWYoY2hhciAqYnVmLCBpbnQgc3osIHBpZF90ICphLCBpbnQgbnBpZHMpCi17Ci0JaW50IGNudCA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnBpZHM7IGkrKykKLQkJY250ICs9IHNucHJpbnRmKGJ1ZiArIGNudCwgbWF4KHN6IC0gY250LCAwKSwgIiVkXG4iLCBhW2ldKTsKLQlyZXR1cm4gY250OwotfQotCi0vKgotICogSGFuZGxlIGFuIG9wZW4gb24gJ3Rhc2tzJyBmaWxlLiAgUHJlcGFyZSBhIGJ1ZmZlciBsaXN0aW5nIHRoZQotICogcHJvY2VzcyBpZCdzIG9mIHRhc2tzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0aGUgY3B1c2V0IGJlaW5nIG9wZW5lZC4KLSAqCi0gKiBEb2VzIG5vdCByZXF1aXJlIGFueSBzcGVjaWZpYyBjcHVzZXQgbXV0ZXhlcywgYW5kIGRvZXMgbm90IHRha2UgYW55LgotICovCi1zdGF0aWMgaW50IGNwdXNldF90YXNrc19vcGVuKHN0cnVjdCBpbm9kZSAqdW51c2VkLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgY3B1c2V0ICpjcyA9IF9fZF9jcyhmaWxlLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudCk7Ci0Jc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKLQlwaWRfdCAqcGlkYXJyYXk7Ci0JaW50IG5waWRzOwotCWNoYXIgYzsKLQotCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQlyZXR1cm4gMDsKLQotCWN0ciA9IGttYWxsb2Moc2l6ZW9mKCpjdHIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWN0cikKLQkJZ290byBlcnIwOwotCi0JLyoKLQkgKiBJZiBjcHVzZXQgZ2V0cyBtb3JlIHVzZXJzIGFmdGVyIHdlIHJlYWQgY291bnQsIHdlIHdvbid0IGhhdmUKLQkgKiBlbm91Z2ggc3BhY2UgLSB0b3VnaC4gIFRoaXMgcmFjZSBpcyBpbmRpc3Rpbmd1aXNoYWJsZSB0byB0aGUKLQkgKiBjYWxsZXIgZnJvbSB0aGUgY2FzZSB0aGF0IHRoZSBhZGRpdGlvbmFsIGNwdXNldCB1c2VycyBkaWRuJ3QKLQkgKiBzaG93IHVwIHVudGlsIHNvbWV0aW1lIGxhdGVyIG9uLgotCSAqLwotCW5waWRzID0gYXRvbWljX3JlYWQoJmNzLT5jb3VudCk7Ci0JcGlkYXJyYXkgPSBrbWFsbG9jKG5waWRzICogc2l6ZW9mKHBpZF90KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFwaWRhcnJheSkKLQkJZ290byBlcnIxOwotCi0JbnBpZHMgPSBwaWRfYXJyYXlfbG9hZChwaWRhcnJheSwgbnBpZHMsIGNzKTsKLQlzb3J0KHBpZGFycmF5LCBucGlkcywgc2l6ZW9mKHBpZF90KSwgY21wcGlkLCBOVUxMKTsKLQotCS8qIENhbGwgcGlkX2FycmF5X3RvX2J1ZigpIHR3aWNlLCBmaXJzdCBqdXN0IHRvIGdldCBidWZzeiAqLwotCWN0ci0+YnVmc3ogPSBwaWRfYXJyYXlfdG9fYnVmKCZjLCBzaXplb2YoYyksIHBpZGFycmF5LCBucGlkcykgKyAxOwotCWN0ci0+YnVmID0ga21hbGxvYyhjdHItPmJ1ZnN6LCBHRlBfS0VSTkVMKTsKLQlpZiAoIWN0ci0+YnVmKQotCQlnb3RvIGVycjI7Ci0JY3RyLT5idWZzeiA9IHBpZF9hcnJheV90b19idWYoY3RyLT5idWYsIGN0ci0+YnVmc3osIHBpZGFycmF5LCBucGlkcyk7Ci0KLQlrZnJlZShwaWRhcnJheSk7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gY3RyOwotCXJldHVybiAwOwotCi1lcnIyOgotCWtmcmVlKHBpZGFycmF5KTsKLWVycjE6Ci0Ja2ZyZWUoY3RyKTsKLWVycjA6Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNwdXNldF90YXNrc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCQkJc2l6ZV90IG5ieXRlcywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBjdHJfc3RydWN0ICpjdHIgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBuYnl0ZXMsIHBwb3MsIGN0ci0+YnVmLCBjdHItPmJ1ZnN6KTsKLX0KLQotc3RhdGljIGludCBjcHVzZXRfdGFza3NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKnVudXNlZF9pbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGN0cl9zdHJ1Y3QgKmN0cjsKLQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCWN0ciA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQkJa2ZyZWUoY3RyLT5idWYpOwotCQlrZnJlZShjdHIpOwotCX0KLQlyZXR1cm4gMDsKLX0KIAogLyoKICAqIGZvciB0aGUgY29tbW9uIGZ1bmN0aW9ucywgJ3ByaXZhdGUnIGdpdmVzIHRoZSB0eXBlIG9mIGZpbGUKICAqLwogCi1zdGF0aWMgc3RydWN0IGNmdHlwZSBjZnRfdGFza3MgPSB7Ci0JLm5hbWUgPSAidGFza3MiLAotCS5vcGVuID0gY3B1c2V0X3Rhc2tzX29wZW4sCi0JLnJlYWQgPSBjcHVzZXRfdGFza3NfcmVhZCwKLQkucmVsZWFzZSA9IGNwdXNldF90YXNrc19yZWxlYXNlLAotCS5wcml2YXRlID0gRklMRV9UQVNLTElTVCwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9jcHVzID0gewogCS5uYW1lID0gImNwdXMiLAorCS5yZWFkID0gY3B1c2V0X2NvbW1vbl9maWxlX3JlYWQsCisJLndyaXRlID0gY3B1c2V0X2NvbW1vbl9maWxlX3dyaXRlLAogCS5wcml2YXRlID0gRklMRV9DUFVMSVNULAogfTsKIAogc3RhdGljIHN0cnVjdCBjZnR5cGUgY2Z0X21lbXMgPSB7CiAJLm5hbWUgPSAibWVtcyIsCisJLnJlYWQgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCwKKwkud3JpdGUgPSBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUsCiAJLnByaXZhdGUgPSBGSUxFX01FTUxJU1QsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNmdHlwZSBjZnRfY3B1X2V4Y2x1c2l2ZSA9IHsKIAkubmFtZSA9ICJjcHVfZXhjbHVzaXZlIiwKKwkucmVhZCA9IGNwdXNldF9jb21tb25fZmlsZV9yZWFkLAorCS53cml0ZSA9IGNwdXNldF9jb21tb25fZmlsZV93cml0ZSwKIAkucHJpdmF0ZSA9IEZJTEVfQ1BVX0VYQ0xVU0lWRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9tZW1fZXhjbHVzaXZlID0gewogCS5uYW1lID0gIm1lbV9leGNsdXNpdmUiLAorCS5yZWFkID0gY3B1c2V0X2NvbW1vbl9maWxlX3JlYWQsCisJLndyaXRlID0gY3B1c2V0X2NvbW1vbl9maWxlX3dyaXRlLAogCS5wcml2YXRlID0gRklMRV9NRU1fRVhDTFVTSVZFLAogfTsKIAotc3RhdGljIHN0cnVjdCBjZnR5cGUgY2Z0X25vdGlmeV9vbl9yZWxlYXNlID0gewotCS5uYW1lID0gIm5vdGlmeV9vbl9yZWxlYXNlIiwKLQkucHJpdmF0ZSA9IEZJTEVfTk9USUZZX09OX1JFTEVBU0UsCitzdGF0aWMgc3RydWN0IGNmdHlwZSBjZnRfc2NoZWRfbG9hZF9iYWxhbmNlID0geworCS5uYW1lID0gInNjaGVkX2xvYWRfYmFsYW5jZSIsCisJLnJlYWQgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCwKKwkud3JpdGUgPSBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUsCisJLnByaXZhdGUgPSBGSUxFX1NDSEVEX0xPQURfQkFMQU5DRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9tZW1vcnlfbWlncmF0ZSA9IHsKIAkubmFtZSA9ICJtZW1vcnlfbWlncmF0ZSIsCisJLnJlYWQgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCwKKwkud3JpdGUgPSBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUsCiAJLnByaXZhdGUgPSBGSUxFX01FTU9SWV9NSUdSQVRFLAogfTsKIAogc3RhdGljIHN0cnVjdCBjZnR5cGUgY2Z0X21lbW9yeV9wcmVzc3VyZV9lbmFibGVkID0gewogCS5uYW1lID0gIm1lbW9yeV9wcmVzc3VyZV9lbmFibGVkIiwKKwkucmVhZCA9IGNwdXNldF9jb21tb25fZmlsZV9yZWFkLAorCS53cml0ZSA9IGNwdXNldF9jb21tb25fZmlsZV93cml0ZSwKIAkucHJpdmF0ZSA9IEZJTEVfTUVNT1JZX1BSRVNTVVJFX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNmdHlwZSBjZnRfbWVtb3J5X3ByZXNzdXJlID0gewogCS5uYW1lID0gIm1lbW9yeV9wcmVzc3VyZSIsCisJLnJlYWQgPSBjcHVzZXRfY29tbW9uX2ZpbGVfcmVhZCwKKwkud3JpdGUgPSBjcHVzZXRfY29tbW9uX2ZpbGVfd3JpdGUsCiAJLnByaXZhdGUgPSBGSUxFX01FTU9SWV9QUkVTU1VSRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9zcHJlYWRfcGFnZSA9IHsKIAkubmFtZSA9ICJtZW1vcnlfc3ByZWFkX3BhZ2UiLAorCS5yZWFkID0gY3B1c2V0X2NvbW1vbl9maWxlX3JlYWQsCisJLndyaXRlID0gY3B1c2V0X2NvbW1vbl9maWxlX3dyaXRlLAogCS5wcml2YXRlID0gRklMRV9TUFJFQURfUEFHRSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9zcHJlYWRfc2xhYiA9IHsKIAkubmFtZSA9ICJtZW1vcnlfc3ByZWFkX3NsYWIiLAorCS5yZWFkID0gY3B1c2V0X2NvbW1vbl9maWxlX3JlYWQsCisJLndyaXRlID0gY3B1c2V0X2NvbW1vbl9maWxlX3dyaXRlLAogCS5wcml2YXRlID0gRklMRV9TUFJFQURfU0xBQiwKIH07CiAKLXN0YXRpYyBpbnQgY3B1c2V0X3BvcHVsYXRlX2RpcihzdHJ1Y3QgZGVudHJ5ICpjc19kZW50cnkpCitzdGF0aWMgaW50IGNwdXNldF9wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCiB7CiAJaW50IGVycjsKIAotCWlmICgoZXJyID0gY3B1c2V0X2FkZF9maWxlKGNzX2RlbnRyeSwgJmNmdF9jcHVzKSkgPCAwKQorCWlmICgoZXJyID0gY2dyb3VwX2FkZF9maWxlKGNvbnQsIHNzLCAmY2Z0X2NwdXMpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBjcHVzZXRfYWRkX2ZpbGUoY3NfZGVudHJ5LCAmY2Z0X21lbXMpKSA8IDApCisJaWYgKChlcnIgPSBjZ3JvdXBfYWRkX2ZpbGUoY29udCwgc3MsICZjZnRfbWVtcykpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoKGVyciA9IGNwdXNldF9hZGRfZmlsZShjc19kZW50cnksICZjZnRfY3B1X2V4Y2x1c2l2ZSkpIDwgMCkKKwlpZiAoKGVyciA9IGNncm91cF9hZGRfZmlsZShjb250LCBzcywgJmNmdF9jcHVfZXhjbHVzaXZlKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICgoZXJyID0gY3B1c2V0X2FkZF9maWxlKGNzX2RlbnRyeSwgJmNmdF9tZW1fZXhjbHVzaXZlKSkgPCAwKQorCWlmICgoZXJyID0gY2dyb3VwX2FkZF9maWxlKGNvbnQsIHNzLCAmY2Z0X21lbV9leGNsdXNpdmUpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBjcHVzZXRfYWRkX2ZpbGUoY3NfZGVudHJ5LCAmY2Z0X25vdGlmeV9vbl9yZWxlYXNlKSkgPCAwKQorCWlmICgoZXJyID0gY2dyb3VwX2FkZF9maWxlKGNvbnQsIHNzLCAmY2Z0X21lbW9yeV9taWdyYXRlKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICgoZXJyID0gY3B1c2V0X2FkZF9maWxlKGNzX2RlbnRyeSwgJmNmdF9tZW1vcnlfbWlncmF0ZSkpIDwgMCkKKwlpZiAoKGVyciA9IGNncm91cF9hZGRfZmlsZShjb250LCBzcywgJmNmdF9zY2hlZF9sb2FkX2JhbGFuY2UpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBjcHVzZXRfYWRkX2ZpbGUoY3NfZGVudHJ5LCAmY2Z0X21lbW9yeV9wcmVzc3VyZSkpIDwgMCkKKwlpZiAoKGVyciA9IGNncm91cF9hZGRfZmlsZShjb250LCBzcywgJmNmdF9tZW1vcnlfcHJlc3N1cmUpKSA8IDApCiAJCXJldHVybiBlcnI7Ci0JaWYgKChlcnIgPSBjcHVzZXRfYWRkX2ZpbGUoY3NfZGVudHJ5LCAmY2Z0X3NwcmVhZF9wYWdlKSkgPCAwKQorCWlmICgoZXJyID0gY2dyb3VwX2FkZF9maWxlKGNvbnQsIHNzLCAmY2Z0X3NwcmVhZF9wYWdlKSkgPCAwKQogCQlyZXR1cm4gZXJyOwotCWlmICgoZXJyID0gY3B1c2V0X2FkZF9maWxlKGNzX2RlbnRyeSwgJmNmdF9zcHJlYWRfc2xhYikpIDwgMCkKKwlpZiAoKGVyciA9IGNncm91cF9hZGRfZmlsZShjb250LCBzcywgJmNmdF9zcHJlYWRfc2xhYikpIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlpZiAoKGVyciA9IGNwdXNldF9hZGRfZmlsZShjc19kZW50cnksICZjZnRfdGFza3MpKSA8IDApCi0JCXJldHVybiBlcnI7CisJLyogbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQgaXMgaW4gcm9vdCBjcHVzZXQgb25seSAqLworCWlmIChlcnIgPT0gMCAmJiAhY29udC0+cGFyZW50KQorCQllcnIgPSBjZ3JvdXBfYWRkX2ZpbGUoY29udCwgc3MsCisJCQkJCSAmY2Z0X21lbW9yeV9wcmVzc3VyZV9lbmFibGVkKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoKKyAqIHBvc3RfY2xvbmUoKSBpcyBjYWxsZWQgYXQgdGhlIGVuZCBvZiBjZ3JvdXBfY2xvbmUoKS4KKyAqICdjZ3JvdXAnIHdhcyBqdXN0IGNyZWF0ZWQgYXV0b21hdGljYWxseSBhcyBhIHJlc3VsdCBvZgorICogYSBjZ3JvdXBfY2xvbmUoKSwgYW5kIHRoZSBjdXJyZW50IHRhc2sgaXMgYWJvdXQgdG8KKyAqIGJlIG1vdmVkIGludG8gJ2Nncm91cCcuCisgKgorICogQ3VycmVudGx5IHdlIHJlZnVzZSB0byBzZXQgdXAgdGhlIGNncm91cCAtIHRoZXJlYnkKKyAqIHJlZnVzaW5nIHRoZSB0YXNrIHRvIGJlIGVudGVyZWQsIGFuZCBhcyBhIHJlc3VsdCByZWZ1c2luZworICogdGhlIHN5c191bnNoYXJlKCkgb3IgY2xvbmUoKSB3aGljaCBpbml0aWF0ZWQgaXQgLSBpZiBhbnkKKyAqIHNpYmxpbmcgY3B1c2V0cyBoYXZlIGV4Y2x1c2l2ZSBjcHVzIG9yIG1lbS4KKyAqCisgKiBJZiB0aGlzIGJlY29tZXMgYSBwcm9ibGVtIGZvciBzb21lIHVzZXJzIHdobyB3aXNoIHRvCisgKiBhbGxvdyB0aGF0IHNjZW5hcmlvLCB0aGVuIGNwdXNldF9wb3N0X2Nsb25lKCkgY291bGQgYmUKKyAqIGNoYW5nZWQgdG8gZ3JhbnQgcGFyZW50LT5jcHVzX2FsbG93ZWQtc2libGluZ19jcHVzX2V4Y2x1c2l2ZQorICogKGFuZCBsaWtld2lzZSBmb3IgbWVtcykgdG8gdGhlIG5ldyBjZ3JvdXAuCisgKi8KK3N0YXRpYyB2b2lkIGNwdXNldF9wb3N0X2Nsb25lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCSAgICAgIHN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlzdHJ1Y3QgY2dyb3VwICpwYXJlbnQsICpjaGlsZDsKKwlzdHJ1Y3QgY3B1c2V0ICpjcywgKnBhcmVudF9jczsKKworCXBhcmVudCA9IGNncm91cC0+cGFyZW50OworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2hpbGQsICZwYXJlbnQtPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCWNzID0gY2dyb3VwX2NzKGNoaWxkKTsKKwkJaWYgKGlzX21lbV9leGNsdXNpdmUoY3MpIHx8IGlzX2NwdV9leGNsdXNpdmUoY3MpKQorCQkJcmV0dXJuOworCX0KKwljcyA9IGNncm91cF9jcyhjZ3JvdXApOworCXBhcmVudF9jcyA9IGNncm91cF9jcyhwYXJlbnQpOworCisJY3MtPm1lbXNfYWxsb3dlZCA9IHBhcmVudF9jcy0+bWVtc19hbGxvd2VkOworCWNzLT5jcHVzX2FsbG93ZWQgPSBwYXJlbnRfY3MtPmNwdXNfYWxsb3dlZDsKKwlyZXR1cm47Cit9CisKKy8qCiAgKgljcHVzZXRfY3JlYXRlIC0gY3JlYXRlIGEgY3B1c2V0CiAgKglwYXJlbnQ6CWNwdXNldCB0aGF0IHdpbGwgYmUgcGFyZW50IG9mIHRoZSBuZXcgY3B1c2V0LgogICoJbmFtZToJCW5hbWUgb2YgdGhlIG5ldyBjcHVzZXQuIFdpbGwgYmUgc3RyY3B5J2VkLgpAQCAtMTg0MSwxMDYgKzE1NzgsNzcgQEAKICAqCU11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG11dGV4IG9uIHRoZSBwYXJlbnQgaW5vZGUgaGVsZAogICovCiAKLXN0YXRpYyBsb25nIGNwdXNldF9jcmVhdGUoc3RydWN0IGNwdXNldCAqcGFyZW50LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbW9kZSkKK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3B1c2V0X2NyZWF0ZSgKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlzdHJ1Y3QgY3B1c2V0ICpjczsKLQlpbnQgZXJyOworCXN0cnVjdCBjcHVzZXQgKnBhcmVudDsKIAorCWlmICghY29udC0+cGFyZW50KSB7CisJCS8qIFRoaXMgaXMgZWFybHkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSB0b3AgY2dyb3VwICovCisJCXRvcF9jcHVzZXQubWVtc19nZW5lcmF0aW9uID0gY3B1c2V0X21lbXNfZ2VuZXJhdGlvbisrOworCQlyZXR1cm4gJnRvcF9jcHVzZXQuY3NzOworCX0KKwlwYXJlbnQgPSBjZ3JvdXBfY3MoY29udC0+cGFyZW50KTsKIAljcyA9IGttYWxsb2Moc2l6ZW9mKCpjcyksIEdGUF9LRVJORUwpOwogCWlmICghY3MpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAotCW11dGV4X2xvY2soJm1hbmFnZV9tdXRleCk7CiAJY3B1c2V0X3VwZGF0ZV90YXNrX21lbW9yeV9zdGF0ZSgpOwogCWNzLT5mbGFncyA9IDA7Ci0JaWYgKG5vdGlmeV9vbl9yZWxlYXNlKHBhcmVudCkpCi0JCXNldF9iaXQoQ1NfTk9USUZZX09OX1JFTEVBU0UsICZjcy0+ZmxhZ3MpOwogCWlmIChpc19zcHJlYWRfcGFnZShwYXJlbnQpKQogCQlzZXRfYml0KENTX1NQUkVBRF9QQUdFLCAmY3MtPmZsYWdzKTsKIAlpZiAoaXNfc3ByZWFkX3NsYWIocGFyZW50KSkKIAkJc2V0X2JpdChDU19TUFJFQURfU0xBQiwgJmNzLT5mbGFncyk7CisJc2V0X2JpdChDU19TQ0hFRF9MT0FEX0JBTEFOQ0UsICZjcy0+ZmxhZ3MpOwogCWNzLT5jcHVzX2FsbG93ZWQgPSBDUFVfTUFTS19OT05FOwogCWNzLT5tZW1zX2FsbG93ZWQgPSBOT0RFX01BU0tfTk9ORTsKLQlhdG9taWNfc2V0KCZjcy0+Y291bnQsIDApOwotCUlOSVRfTElTVF9IRUFEKCZjcy0+c2libGluZyk7Ci0JSU5JVF9MSVNUX0hFQUQoJmNzLT5jaGlsZHJlbik7CiAJY3MtPm1lbXNfZ2VuZXJhdGlvbiA9IGNwdXNldF9tZW1zX2dlbmVyYXRpb24rKzsKIAlmbWV0ZXJfaW5pdCgmY3MtPmZtZXRlcik7CiAKIAljcy0+cGFyZW50ID0gcGFyZW50OwotCi0JbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCWxpc3RfYWRkKCZjcy0+c2libGluZywgJmNzLT5wYXJlbnQtPmNoaWxkcmVuKTsKIAludW1iZXJfb2ZfY3B1c2V0cysrOwotCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCi0JZXJyID0gY3B1c2V0X2NyZWF0ZV9kaXIoY3MsIG5hbWUsIG1vZGUpOwotCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycjsKLQotCS8qCi0JICogUmVsZWFzZSBtYW5hZ2VfbXV0ZXggYmVmb3JlIGNwdXNldF9wb3B1bGF0ZV9kaXIoKSBiZWNhdXNlIGl0Ci0JICogd2lsbCBkb3duKCkgdGhpcyBuZXcgZGlyZWN0b3J5J3MgaV9tdXRleCBhbmQgaWYgd2UgcmFjZSB3aXRoCi0JICogYW5vdGhlciBta2Rpciwgd2UgbWlnaHQgZGVhZGxvY2suCi0JICovCi0JbXV0ZXhfdW5sb2NrKCZtYW5hZ2VfbXV0ZXgpOwotCi0JZXJyID0gY3B1c2V0X3BvcHVsYXRlX2Rpcihjcy0+ZGVudHJ5KTsKLQkvKiBJZiBlcnIgPCAwLCB3ZSBoYXZlIGEgaGFsZi1maWxsZWQgZGlyZWN0b3J5IC0gb2ggd2VsbCA7KSAqLwotCXJldHVybiAwOwotZXJyOgotCWxpc3RfZGVsKCZjcy0+c2libGluZyk7Ci0JbXV0ZXhfdW5sb2NrKCZtYW5hZ2VfbXV0ZXgpOwotCWtmcmVlKGNzKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiAmY3MtPmNzcyA7CiB9CiAKLXN0YXRpYyBpbnQgY3B1c2V0X21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQorLyoKKyAqIExvY2tpbmcgbm90ZSBvbiB0aGUgc3RyYW5nZSB1cGRhdGVfZmxhZygpIGNhbGwgYmVsb3c6CisgKgorICogSWYgdGhlIGNwdXNldCBiZWluZyByZW1vdmVkIGhhcyBpdHMgZmxhZyAnc2NoZWRfbG9hZF9iYWxhbmNlJworICogZW5hYmxlZCwgdGhlbiBzaW11bGF0ZSB0dXJuaW5nIHNjaGVkX2xvYWRfYmFsYW5jZSBvZmYsIHdoaWNoCisgKiB3aWxsIGNhbGwgcmVidWlsZF9zY2hlZF9kb21haW5zKCkuICBUaGUgbG9ja19jcHVfaG90cGx1ZygpCisgKiBjYWxsIGluIHJlYnVpbGRfc2NoZWRfZG9tYWlucygpIG11c3Qgbm90IGJlIG1hZGUgd2hpbGUgaG9sZGluZworICogY2FsbGJhY2tfbXV0ZXguICBFbHNld2hlcmUgdGhlIGtlcm5lbCBuZXN0cyBjYWxsYmFja19tdXRleCBpbnNpZGUKKyAqIGxvY2tfY3B1X2hvdHBsdWcoKSBjYWxscy4gIFNvIHRoZSByZXZlcnNlIG5lc3Rpbmcgd291bGQgcmlzayBhbgorICogQUJCQSBkZWFkbG9jay4KKyAqLworCitzdGF0aWMgdm9pZCBjcHVzZXRfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCiB7Ci0Jc3RydWN0IGNwdXNldCAqY19wYXJlbnQgPSBkZW50cnktPmRfcGFyZW50LT5kX2ZzZGF0YTsKKwlzdHJ1Y3QgY3B1c2V0ICpjcyA9IGNncm91cF9jcyhjb250KTsKIAotCS8qIHRoZSB2ZnMgaG9sZHMgaW5vZGUtPmlfbXV0ZXggYWxyZWFkeSAqLwotCXJldHVybiBjcHVzZXRfY3JlYXRlKGNfcGFyZW50LCBkZW50cnktPmRfbmFtZS5uYW1lLCBtb2RlIHwgU19JRkRJUik7Ci19Ci0KLXN0YXRpYyBpbnQgY3B1c2V0X3JtZGlyKHN0cnVjdCBpbm9kZSAqdW51c2VkX2Rpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQotewotCXN0cnVjdCBjcHVzZXQgKmNzID0gZGVudHJ5LT5kX2ZzZGF0YTsKLQlzdHJ1Y3QgZGVudHJ5ICpkOwotCXN0cnVjdCBjcHVzZXQgKnBhcmVudDsKLQljaGFyICpwYXRoYnVmID0gTlVMTDsKLQotCS8qIHRoZSB2ZnMgaG9sZHMgYm90aCBpbm9kZS0+aV9tdXRleCBhbHJlYWR5ICovCi0KLQltdXRleF9sb2NrKCZtYW5hZ2VfbXV0ZXgpOwogCWNwdXNldF91cGRhdGVfdGFza19tZW1vcnlfc3RhdGUoKTsKLQlpZiAoYXRvbWljX3JlYWQoJmNzLT5jb3VudCkgPiAwKSB7Ci0JCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JaWYgKCFsaXN0X2VtcHR5KCZjcy0+Y2hpbGRyZW4pKSB7Ci0JCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JcGFyZW50ID0gY3MtPnBhcmVudDsKLQltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0Jc2V0X2JpdChDU19SRU1PVkVELCAmY3MtPmZsYWdzKTsKLQlsaXN0X2RlbCgmY3MtPnNpYmxpbmcpOwkvKiBkZWxldGUgbXkgc2libGluZyBmcm9tIHBhcmVudC0+Y2hpbGRyZW4gKi8KLQlzcGluX2xvY2soJmNzLT5kZW50cnktPmRfbG9jayk7Ci0JZCA9IGRnZXQoY3MtPmRlbnRyeSk7Ci0JY3MtPmRlbnRyeSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmQtPmRfbG9jayk7Ci0JY3B1c2V0X2RfcmVtb3ZlX2RpcihkKTsKLQlkcHV0KGQpOworCisJaWYgKGlzX3NjaGVkX2xvYWRfYmFsYW5jZShjcykpCisJCXVwZGF0ZV9mbGFnKENTX1NDSEVEX0xPQURfQkFMQU5DRSwgY3MsICIwIik7CisKIAludW1iZXJfb2ZfY3B1c2V0cy0tOwotCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCWlmIChsaXN0X2VtcHR5KCZwYXJlbnQtPmNoaWxkcmVuKSkKLQkJY2hlY2tfZm9yX3JlbGVhc2UocGFyZW50LCAmcGF0aGJ1Zik7Ci0JbXV0ZXhfdW5sb2NrKCZtYW5hZ2VfbXV0ZXgpOwotCWNwdXNldF9yZWxlYXNlX2FnZW50KHBhdGhidWYpOwotCXJldHVybiAwOworCWtmcmVlKGNzKTsKIH0KIAorc3RydWN0IGNncm91cF9zdWJzeXMgY3B1c2V0X3N1YnN5cyA9IHsKKwkubmFtZSA9ICJjcHVzZXQiLAorCS5jcmVhdGUgPSBjcHVzZXRfY3JlYXRlLAorCS5kZXN0cm95ICA9IGNwdXNldF9kZXN0cm95LAorCS5jYW5fYXR0YWNoID0gY3B1c2V0X2Nhbl9hdHRhY2gsCisJLmF0dGFjaCA9IGNwdXNldF9hdHRhY2gsCisJLnBvcHVsYXRlID0gY3B1c2V0X3BvcHVsYXRlLAorCS5wb3N0X2Nsb25lID0gY3B1c2V0X3Bvc3RfY2xvbmUsCisJLnN1YnN5c19pZCA9IGNwdXNldF9zdWJzeXNfaWQsCisJLmVhcmx5X2luaXQgPSAxLAorfTsKKwogLyoKICAqIGNwdXNldF9pbml0X2Vhcmx5IC0ganVzdCBlbm91Z2ggc28gdGhhdCB0aGUgY2FsbHMgdG8KICAqIGNwdXNldF91cGRhdGVfdGFza19tZW1vcnlfc3RhdGUoKSBpbiBlYXJseSBpbml0IGNvZGUKQEAgLTE5NDksMTMgKzE2NTcsMTEgQEAKIAogaW50IF9faW5pdCBjcHVzZXRfaW5pdF9lYXJseSh2b2lkKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQotCXRzay0+Y3B1c2V0ID0gJnRvcF9jcHVzZXQ7Ci0JdHNrLT5jcHVzZXQtPm1lbXNfZ2VuZXJhdGlvbiA9IGNwdXNldF9tZW1zX2dlbmVyYXRpb24rKzsKKwl0b3BfY3B1c2V0Lm1lbXNfZ2VuZXJhdGlvbiA9IGNwdXNldF9tZW1zX2dlbmVyYXRpb24rKzsKIAlyZXR1cm4gMDsKIH0KIAorCiAvKioKICAqIGNwdXNldF9pbml0IC0gaW5pdGlhbGl6ZSBjcHVzZXRzIGF0IHN5c3RlbSBib290CiAgKgpAQCAtMTk2NCwzOSArMTY3MCwyMSBAQAogCiBpbnQgX19pbml0IGNwdXNldF9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdDsKLQlpbnQgZXJyOworCWludCBlcnIgPSAwOwogCiAJdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgPSBDUFVfTUFTS19BTEw7CiAJdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgPSBOT0RFX01BU0tfQUxMOwogCiAJZm1ldGVyX2luaXQoJnRvcF9jcHVzZXQuZm1ldGVyKTsKIAl0b3BfY3B1c2V0Lm1lbXNfZ2VuZXJhdGlvbiA9IGNwdXNldF9tZW1zX2dlbmVyYXRpb24rKzsKLQotCWluaXRfdGFzay5jcHVzZXQgPSAmdG9wX2NwdXNldDsKKwlzZXRfYml0KENTX1NDSEVEX0xPQURfQkFMQU5DRSwgJnRvcF9jcHVzZXQuZmxhZ3MpOwogCiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY3B1c2V0X2ZzX3R5cGUpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIG91dDsKLQljcHVzZXRfbW91bnQgPSBrZXJuX21vdW50KCZjcHVzZXRfZnNfdHlwZSk7Ci0JaWYgKElTX0VSUihjcHVzZXRfbW91bnQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY3B1c2V0OiBjb3VsZCBub3QgbW91bnQhXG4iKTsKLQkJZXJyID0gUFRSX0VSUihjcHVzZXRfbW91bnQpOwotCQljcHVzZXRfbW91bnQgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0Jcm9vdCA9IGNwdXNldF9tb3VudC0+bW50X3NiLT5zX3Jvb3Q7Ci0Jcm9vdC0+ZF9mc2RhdGEgPSAmdG9wX2NwdXNldDsKLQlpbmNfbmxpbmsocm9vdC0+ZF9pbm9kZSk7Ci0JdG9wX2NwdXNldC5kZW50cnkgPSByb290OwotCXJvb3QtPmRfaW5vZGUtPmlfb3AgPSAmY3B1c2V0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOworCQlyZXR1cm4gZXJyOworCiAJbnVtYmVyX29mX2NwdXNldHMgPSAxOwotCWVyciA9IGNwdXNldF9wb3B1bGF0ZV9kaXIocm9vdCk7Ci0JLyogbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQgaXMgaW4gcm9vdCBjcHVzZXQgb25seSAqLwotCWlmIChlcnIgPT0gMCkKLQkJZXJyID0gY3B1c2V0X2FkZF9maWxlKHJvb3QsICZjZnRfbWVtb3J5X3ByZXNzdXJlX2VuYWJsZWQpOwotb3V0OgotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMDIyLDEwICsxNzEwLDEyIEBACiAKIHN0YXRpYyB2b2lkIGd1YXJhbnRlZV9vbmxpbmVfY3B1c19tZW1zX2luX3N1YnRyZWUoY29uc3Qgc3RydWN0IGNwdXNldCAqY3VyKQogeworCXN0cnVjdCBjZ3JvdXAgKmNvbnQ7CiAJc3RydWN0IGNwdXNldCAqYzsKIAogCS8qIEVhY2ggb2Ygb3VyIGNoaWxkIGNwdXNldHMgbWVtcyBtdXN0IGJlIG9ubGluZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmN1ci0+Y2hpbGRyZW4sIHNpYmxpbmcpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvbnQsICZjdXItPmNzcy5jZ3JvdXAtPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCWMgPSBjZ3JvdXBfY3MoY29udCk7CiAJCWd1YXJhbnRlZV9vbmxpbmVfY3B1c19tZW1zX2luX3N1YnRyZWUoYyk7CiAJCWlmICghY3B1c19lbXB0eShjLT5jcHVzX2FsbG93ZWQpKQogCQkJZ3VhcmFudGVlX29ubGluZV9jcHVzKGMsICZjLT5jcHVzX2FsbG93ZWQpOwpAQCAtMjA1Myw3ICsxNzQzLDcgQEAKIAogc3RhdGljIHZvaWQgY29tbW9uX2NwdV9tZW1faG90cGx1Z191bnBsdWcodm9pZCkKIHsKLQltdXRleF9sb2NrKCZtYW5hZ2VfbXV0ZXgpOworCWNncm91cF9sb2NrKCk7CiAJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCiAJZ3VhcmFudGVlX29ubGluZV9jcHVzX21lbXNfaW5fc3VidHJlZSgmdG9wX2NwdXNldCk7CkBAIC0yMDYxLDcgKzE3NTEsNyBAQAogCXRvcF9jcHVzZXQubWVtc19hbGxvd2VkID0gbm9kZV9zdGF0ZXNbTl9ISUdIX01FTU9SWV07CiAKIAltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKLQltdXRleF91bmxvY2soJm1hbmFnZV9tdXRleCk7CisJY2dyb3VwX3VubG9jaygpOwogfQogCiAvKgpAQCAtMjA3NCw4ICsxNzY0LDggQEAKICAqIGNwdV9vbmxpbmVfbWFwIG9uIGVhY2ggQ1BVIGhvdHBsdWcgKGNwdWhwKSBldmVudC4KICAqLwogCi1zdGF0aWMgaW50IGNwdXNldF9oYW5kbGVfY3B1aHAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKLQkJCQl1bnNpZ25lZCBsb25nIHBoYXNlLCB2b2lkICpjcHUpCitzdGF0aWMgaW50IGNwdXNldF9oYW5kbGVfY3B1aHAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp1bnVzZWRfbmIsCisJCQkJdW5zaWduZWQgbG9uZyBwaGFzZSwgdm9pZCAqdW51c2VkX2NwdSkKIHsKIAlpZiAocGhhc2UgPT0gQ1BVX0RZSU5HIHx8IHBoYXNlID09IENQVV9EWUlOR19GUk9aRU4pCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTIxMTMsMTA5ICsxODAzLDcgQEAKIH0KIAogLyoqCi0gKiBjcHVzZXRfZm9yayAtIGF0dGFjaCBuZXdseSBmb3JrZWQgdGFzayB0byBpdHMgcGFyZW50cyBjcHVzZXQuCi0gKiBAdHNrOiBwb2ludGVyIHRvIHRhc2tfc3RydWN0IG9mIGZvcmtpbmcgcGFyZW50IHByb2Nlc3MuCi0gKgotICogRGVzY3JpcHRpb246IEEgdGFzayBpbmhlcml0cyBpdHMgcGFyZW50J3MgY3B1c2V0IGF0IGZvcmsoKS4KLSAqCi0gKiBBIHBvaW50ZXIgdG8gdGhlIHNoYXJlZCBjcHVzZXQgd2FzIGF1dG9tYXRpY2FsbHkgY29waWVkIGluIGZvcmsuYwotICogYnkgZHVwX3Rhc2tfc3RydWN0KCkuICBIb3dldmVyLCB3ZSBpZ25vcmUgdGhhdCBjb3B5LCBzaW5jZSBpdCB3YXMKLSAqIG5vdCBtYWRlIHVuZGVyIHRoZSBwcm90ZWN0aW9uIG9mIHRhc2tfbG9jaygpLCBzbyBtaWdodCBubyBsb25nZXIgYmUKLSAqIGEgdmFsaWQgY3B1c2V0IHBvaW50ZXIuICBhdHRhY2hfdGFzaygpIG1pZ2h0IGhhdmUgYWxyZWFkeSBjaGFuZ2VkCi0gKiBjdXJyZW50LT5jcHVzZXQsIGFsbG93aW5nIHRoZSBwcmV2aW91c2x5IHJlZmVyZW5jZWQgY3B1c2V0IHRvCi0gKiBiZSByZW1vdmVkIGFuZCBmcmVlZC4gIEluc3RlYWQsIHdlIHRhc2tfbG9jayhjdXJyZW50KSBhbmQgY29weQotICogaXRzIHByZXNlbnQgdmFsdWUgb2YgY3VycmVudC0+Y3B1c2V0IGZvciBvdXIgZnJlc2hseSBmb3JrZWQgY2hpbGQuCi0gKgotICogQXQgdGhlIHBvaW50IHRoYXQgY3B1c2V0X2ZvcmsoKSBpcyBjYWxsZWQsICdjdXJyZW50JyBpcyB0aGUgcGFyZW50Ci0gKiB0YXNrLCBhbmQgdGhlIHBhc3NlZCBhcmd1bWVudCAnY2hpbGQnIHBvaW50cyB0byB0aGUgY2hpbGQgdGFzay4KLSAqKi8KIAotdm9pZCBjcHVzZXRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQotewotCXRhc2tfbG9jayhjdXJyZW50KTsKLQljaGlsZC0+Y3B1c2V0ID0gY3VycmVudC0+Y3B1c2V0OwotCWF0b21pY19pbmMoJmNoaWxkLT5jcHVzZXQtPmNvdW50KTsKLQl0YXNrX3VubG9jayhjdXJyZW50KTsKLX0KLQotLyoqCi0gKiBjcHVzZXRfZXhpdCAtIGRldGFjaCBjcHVzZXQgZnJvbSBleGl0aW5nIHRhc2sKLSAqIEB0c2s6IHBvaW50ZXIgdG8gdGFza19zdHJ1Y3Qgb2YgZXhpdGluZyBwcm9jZXNzCi0gKgotICogRGVzY3JpcHRpb246IERldGFjaCBjcHVzZXQgZnJvbSBAdHNrIGFuZCByZWxlYXNlIGl0LgotICoKLSAqIE5vdGUgdGhhdCBjcHVzZXRzIG1hcmtlZCBub3RpZnlfb25fcmVsZWFzZSBmb3JjZSBldmVyeSB0YXNrIGluCi0gKiB0aGVtIHRvIHRha2UgdGhlIGdsb2JhbCBtYW5hZ2VfbXV0ZXggbXV0ZXggd2hlbiBleGl0aW5nLgotICogVGhpcyBjb3VsZCBpbXBhY3Qgc2NhbGluZyBvbiB2ZXJ5IGxhcmdlIHN5c3RlbXMuICBCZSByZWx1Y3RhbnQgdG8KLSAqIHVzZSBub3RpZnlfb25fcmVsZWFzZSBjcHVzZXRzIHdoZXJlIHZlcnkgaGlnaCB0YXNrIGV4aXQgc2NhbGluZwotICogaXMgcmVxdWlyZWQgb24gbGFyZ2Ugc3lzdGVtcy4KLSAqCi0gKiBEb24ndCBldmVuIHRoaW5rIGFib3V0IGRlcmVmZW5jaW5nICdjcycgYWZ0ZXIgdGhlIGNwdXNldCB1c2UgY291bnQKLSAqIGdvZXMgdG8gemVybywgZXhjZXB0IGluc2lkZSBhIGNyaXRpY2FsIHNlY3Rpb24gZ3VhcmRlZCBieSBtYW5hZ2VfbXV0ZXgKLSAqIG9yIGNhbGxiYWNrX211dGV4LiAgIE90aGVyd2lzZSBhIHplcm8gY3B1c2V0IHVzZSBjb3VudCBpcyBhIGxpY2Vuc2UgdG8KLSAqIGFueSBvdGhlciB0YXNrIHRvIG51a2UgdGhlIGNwdXNldCBpbW1lZGlhdGVseSwgdmlhIGNwdXNldF9ybWRpcigpLgotICoKLSAqIFRoaXMgcm91dGluZSBoYXMgdG8gdGFrZSBtYW5hZ2VfbXV0ZXgsIG5vdCBjYWxsYmFja19tdXRleCwgYmVjYXVzZQotICogaXQgaXMgaG9sZGluZyB0aGF0IG11dGV4IHdoaWxlIGNhbGxpbmcgY2hlY2tfZm9yX3JlbGVhc2UoKSwKLSAqIHdoaWNoIGNhbGxzIGttYWxsb2MoKSwgc28gY2FuJ3QgYmUgY2FsbGVkIGhvbGRpbmcgY2FsbGJhY2tfbXV0ZXgoKS4KLSAqCi0gKiB0aGVfdG9wX2NwdXNldF9oYWNrOgotICoKLSAqICAgIFNldCB0aGUgZXhpdGluZyB0YXNrcyBjcHVzZXQgdG8gdGhlIHJvb3QgY3B1c2V0ICh0b3BfY3B1c2V0KS4KLSAqCi0gKiAgICBEb24ndCBsZWF2ZSBhIHRhc2sgdW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgYXMgdGhhdCBpcyBhbgotICogICAgYWNjaWRlbnQgd2FpdGluZyB0byBoYXBwZW4gc2hvdWxkIHNvbWVvbmUgYWRkIGEgY2FsbG91dCBpbgotICogICAgZG9fZXhpdCgpIGFmdGVyIHRoZSBjcHVzZXRfZXhpdCgpIGNhbGwgdGhhdCBtaWdodCBhbGxvY2F0ZS4KLSAqICAgIElmIGEgdGFzayB0cmllcyB0byBhbGxvY2F0ZSBtZW1vcnkgd2l0aCBhbiBpbnZhbGlkIGNwdXNldCwKLSAqICAgIGl0IHdpbGwgb29wcyBpbiBjcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKCkuCi0gKgotICogICAgV2UgY2FsbCBjcHVzZXRfZXhpdCgpIHdoaWxlIHRoZSB0YXNrIGlzIHN0aWxsIGNvbXBldGVudCB0bwotICogICAgaGFuZGxlIG5vdGlmeV9vbl9yZWxlYXNlKCksIHRoZW4gbGVhdmUgdGhlIHRhc2sgYXR0YWNoZWQgdG8KLSAqICAgIHRoZSByb290IGNwdXNldCAodG9wX2NwdXNldCkgZm9yIHRoZSByZW1haW5kZXIgb2YgaXRzIGV4aXQuCi0gKgotICogICAgVG8gZG8gdGhpcyBwcm9wZXJseSwgd2Ugd291bGQgaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgb24KLSAqICAgIHRvcF9jcHVzZXQsIGFuZCBuZWFyIHRoZSB2ZXJ5IGVuZCBvZiB0aGUga2VybmVsL2V4aXQuYyBkb19leGl0KCkKLSAqICAgIGNvZGUgd2Ugd291bGQgYWRkIGEgc2Vjb25kIGNwdXNldCBmdW5jdGlvbiBjYWxsLCB0byBkcm9wIHRoYXQKLSAqICAgIHJlZmVyZW5jZS4gIFRoaXMgd291bGQganVzdCBjcmVhdGUgYW4gdW5uZWNlc3NhcnkgaG90IHNwb3Qgb24KLSAqICAgIHRoZSB0b3BfY3B1c2V0IHJlZmVyZW5jZSBjb3VudCwgdG8gbm8gYXZhaWwuCi0gKgotICogICAgTm9ybWFsbHksIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gYSBjcHVzZXQgd2l0aG91dCBidW1waW5nIGl0cwotICogICAgY291bnQgaXMgdW5zYWZlLiAgIFRoZSBjcHVzZXQgY291bGQgZ28gYXdheSwgb3Igc29tZW9uZSBjb3VsZAotICogICAgYXR0YWNoIHVzIHRvIGEgZGlmZmVyZW50IGNwdXNldCwgZGVjcmVtZW50aW5nIHRoZSBjb3VudCBvbgotICogICAgdGhlIGZpcnN0IGNwdXNldCB0aGF0IHdlIG5ldmVyIGluY3JlbWVudGVkLiAgQnV0IGluIHRoaXMgY2FzZSwKLSAqICAgIHRvcF9jcHVzZXQgaXNuJ3QgZ29pbmcgYXdheSwgYW5kIGVpdGhlciB0YXNrIGhhcyBQRl9FWElUSU5HIHNldCwKLSAqICAgIHdoaWNoIHdhcmRzIG9mZiBhbnkgYXR0YWNoX3Rhc2soKSBhdHRlbXB0cywgb3IgdGFzayBpcyBhIGZhaWxlZAotICogICAgZm9yaywgbmV2ZXIgdmlzaWJsZSB0byBhdHRhY2hfdGFzay4KLSAqCi0gKiAgICBBbm90aGVyIHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIHNldCB0aGUgY3B1c2V0IHBvaW50ZXIKLSAqICAgIHRvIE5VTEwgaGVyZSwgYW5kIGNoZWNrIGluIGNwdXNldF91cGRhdGVfdGFza19tZW1vcnlfc3RhdGUoKQotICogICAgZm9yIGEgTlVMTCBwb2ludGVyLiAgVGhpcyBoYWNrIGF2b2lkcyB0aGF0IE5VTEwgY2hlY2ssIGZvciBubwotICogICAgY29zdCAob3RoZXIgdGhhbiB0aGlzIHdheSB0b28gbG9uZyBjb21tZW50IDspLgotICoqLwotCi12b2lkIGNwdXNldF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXN0cnVjdCBjcHVzZXQgKmNzOwotCi0JdGFza19sb2NrKGN1cnJlbnQpOwotCWNzID0gdHNrLT5jcHVzZXQ7Ci0JdHNrLT5jcHVzZXQgPSAmdG9wX2NwdXNldDsJLyogdGhlX3RvcF9jcHVzZXRfaGFjayAtIHNlZSBhYm92ZSAqLwotCXRhc2tfdW5sb2NrKGN1cnJlbnQpOwotCi0JaWYgKG5vdGlmeV9vbl9yZWxlYXNlKGNzKSkgewotCQljaGFyICpwYXRoYnVmID0gTlVMTDsKLQotCQltdXRleF9sb2NrKCZtYW5hZ2VfbXV0ZXgpOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY3MtPmNvdW50KSkKLQkJCWNoZWNrX2Zvcl9yZWxlYXNlKGNzLCAmcGF0aGJ1Zik7Ci0JCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKLQkJY3B1c2V0X3JlbGVhc2VfYWdlbnQocGF0aGJ1Zik7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX2RlYygmY3MtPmNvdW50KTsKLQl9Ci19Ci0KLS8qKgogICogY3B1c2V0X2NwdXNfYWxsb3dlZCAtIHJldHVybiBjcHVzX2FsbG93ZWQgbWFzayBmcm9tIGEgdGFza3MgY3B1c2V0LgogICogQHRzazogcG9pbnRlciB0byB0YXNrX3N0cnVjdCBmcm9tIHdoaWNoIHRvIG9idGFpbiBjcHVzZXQtPmNwdXNfYWxsb3dlZC4KICAqCkBAIC0yMjMwLDE0ICsxODE4LDI3IEBACiAJY3B1bWFza190IG1hc2s7CiAKIAltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7Ci0JdGFza19sb2NrKHRzayk7Ci0JZ3VhcmFudGVlX29ubGluZV9jcHVzKHRzay0+Y3B1c2V0LCAmbWFzayk7Ci0JdGFza191bmxvY2sodHNrKTsKKwltYXNrID0gY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQodHNrKTsKIAltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAogCXJldHVybiBtYXNrOwogfQogCisvKioKKyAqIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkIC0gcmV0dXJuIGNwdXNfYWxsb3dlZCBtYXNrIGZyb20gYSB0YXNrcyBjcHVzZXQuCisgKiBNdXN0IGJlICBjYWxsZWQgd2l0aCBjYWxsYmFja19tdXRleCBoZWxkLgorICoqLworY3B1bWFza190IGNwdXNldF9jcHVzX2FsbG93ZWRfbG9ja2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWNwdW1hc2tfdCBtYXNrOworCisJdGFza19sb2NrKHRzayk7CisJZ3VhcmFudGVlX29ubGluZV9jcHVzKHRhc2tfY3ModHNrKSwgJm1hc2spOworCXRhc2tfdW5sb2NrKHRzayk7CisKKwlyZXR1cm4gbWFzazsKK30KKwogdm9pZCBjcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCh2b2lkKQogewogCWN1cnJlbnQtPm1lbXNfYWxsb3dlZCA9IE5PREVfTUFTS19BTEw7CkBAIC0yMjU5LDcgKzE4NjAsNyBAQAogCiAJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCXRhc2tfbG9jayh0c2spOwotCWd1YXJhbnRlZV9vbmxpbmVfbWVtcyh0c2stPmNwdXNldCwgJm1hc2spOworCWd1YXJhbnRlZV9vbmxpbmVfbWVtcyh0YXNrX2NzKHRzayksICZtYXNrKTsKIAl0YXNrX3VubG9jayh0c2spOwogCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwogCkBAIC0yMzkwLDcgKzE5OTEsNyBAQAogCW11dGV4X2xvY2soJmNhbGxiYWNrX211dGV4KTsKIAogCXRhc2tfbG9jayhjdXJyZW50KTsKLQljcyA9IG5lYXJlc3RfZXhjbHVzaXZlX2FuY2VzdG9yKGN1cnJlbnQtPmNwdXNldCk7CisJY3MgPSBuZWFyZXN0X2V4Y2x1c2l2ZV9hbmNlc3Rvcih0YXNrX2NzKGN1cnJlbnQpKTsKIAl0YXNrX3VubG9jayhjdXJyZW50KTsKIAogCWFsbG93ZWQgPSBub2RlX2lzc2V0KG5vZGUsIGNzLT5tZW1zX2FsbG93ZWQpOwpAQCAtMjQzMSwxMiArMjAzMiwxMiBAQAogCW5vZGUgPSB6b25lX3RvX25pZCh6KTsKIAlpZiAobm9kZV9pc3NldChub2RlLCBjdXJyZW50LT5tZW1zX2FsbG93ZWQpKQogCQlyZXR1cm4gMTsKLSAgICAgICAgLyoKLSAgICAgICAgICogQWxsb3cgdGFza3MgdGhhdCBoYXZlIGFjY2VzcyB0byBtZW1vcnkgcmVzZXJ2ZXMgYmVjYXVzZSB0aGV5IGhhdmUKLSAgICAgICAgICogYmVlbiBPT00ga2lsbGVkIHRvIGdldCBtZW1vcnkgYW55d2hlcmUuCi0gICAgICAgICAqLwotICAgICAgICBpZiAodW5saWtlbHkodGVzdF90aHJlYWRfZmxhZyhUSUZfTUVNRElFKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7CisJLyoKKwkgKiBBbGxvdyB0YXNrcyB0aGF0IGhhdmUgYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBiZWNhdXNlIHRoZXkgaGF2ZQorCSAqIGJlZW4gT09NIGtpbGxlZCB0byBnZXQgbWVtb3J5IGFueXdoZXJlLgorCSAqLworCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpKSkKKwkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1NTAsMTQgKzIxNTEsMTIgQEAKIAogdm9pZCBfX2NwdXNldF9tZW1vcnlfcHJlc3N1cmVfYnVtcCh2b2lkKQogewotCXN0cnVjdCBjcHVzZXQgKmNzOwotCiAJdGFza19sb2NrKGN1cnJlbnQpOwotCWNzID0gY3VycmVudC0+Y3B1c2V0OwotCWZtZXRlcl9tYXJrZXZlbnQoJmNzLT5mbWV0ZXIpOworCWZtZXRlcl9tYXJrZXZlbnQoJnRhc2tfY3MoY3VycmVudCktPmZtZXRlcik7CiAJdGFza191bmxvY2soY3VycmVudCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfUFJPQ19QSURfQ1BVU0VUCiAvKgogICogcHJvY19jcHVzZXRfc2hvdygpCiAgKiAgLSBQcmludCB0YXNrcyBjcHVzZXQgcGF0aCBpbnRvIHNlcV9maWxlLgpAQCAtMjU2OSwxMSArMjE2OCwxMiBAQAogICogICAgdGhlX3RvcF9jcHVzZXRfaGFjayBpbiBjcHVzZXRfZXhpdCgpLCB3aGljaCBzZXRzIGFuIGV4aXRpbmcgdGFza3MKICAqICAgIGNwdXNldCB0byB0b3BfY3B1c2V0LgogICovCi1zdGF0aWMgaW50IHByb2NfY3B1c2V0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQorc3RhdGljIGludCBwcm9jX2NwdXNldF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkX3YpCiB7CiAJc3RydWN0IHBpZCAqcGlkOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCWNoYXIgKmJ1ZjsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOwogCWludCByZXR2YWw7CiAKIAlyZXR2YWwgPSAtRU5PTUVNOwpAQCAtMjU4OCwxNSArMjE4OCwxNSBAQAogCQlnb3RvIG91dF9mcmVlOwogCiAJcmV0dmFsID0gLUVJTlZBTDsKLQltdXRleF9sb2NrKCZtYW5hZ2VfbXV0ZXgpOwotCi0JcmV0dmFsID0gY3B1c2V0X3BhdGgodHNrLT5jcHVzZXQsIGJ1ZiwgUEFHRV9TSVpFKTsKKwljZ3JvdXBfbG9jaygpOworCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlKHRzaywgY3B1c2V0X3N1YnN5c19pZCk7CisJcmV0dmFsID0gY2dyb3VwX3BhdGgoY3NzLT5jZ3JvdXAsIGJ1ZiwgUEFHRV9TSVpFKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBvdXRfdW5sb2NrOwogCXNlcV9wdXRzKG0sIGJ1Zik7CiAJc2VxX3B1dGMobSwgJ1xuJyk7CiBvdXRfdW5sb2NrOgotCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKKwljZ3JvdXBfdW5sb2NrKCk7CiAJcHV0X3Rhc2tfc3RydWN0KHRzayk7CiBvdXRfZnJlZToKIAlrZnJlZShidWYpOwpAQCAtMjYxNiw2ICsyMjE2LDcgQEAKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKKyNlbmRpZiAvKiBDT05GSUdfUFJPQ19QSURfQ1BVU0VUICovCiAKIC8qIERpc3BsYXkgdGFzayBjcHVzX2FsbG93ZWQsIG1lbXNfYWxsb3dlZCBpbiAvcHJvYy88cGlkPi9zdGF0dXMgZmlsZS4gKi8KIGNoYXIgKmNwdXNldF90YXNrX3N0YXR1c19hbGxvd2VkKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgY2hhciAqYnVmZmVyKQpkaWZmIC0tZ2l0IGEva2VybmVsL2RlbGF5YWNjdC5jIGIva2VybmVsL2RlbGF5YWNjdC5jCmluZGV4IDA5ZTk1NzQuLjEwZTQzZmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWxheWFjY3QuYworKysgYi9rZXJuZWwvZGVsYXlhY2N0LmMKQEAgLTExNSw2ICsxMTUsMTIgQEAKIAl0bXAgKz0gdGltZXNwZWNfdG9fbnMoJnRzKTsKIAlkLT5jcHVfcnVuX3JlYWxfdG90YWwgPSAodG1wIDwgKHM2NClkLT5jcHVfcnVuX3JlYWxfdG90YWwpID8gMCA6IHRtcDsKIAorCXRtcCA9IChzNjQpZC0+Y3B1X3NjYWxlZF9ydW5fcmVhbF90b3RhbDsKKwljcHV0aW1lX3RvX3RpbWVzcGVjKHRzay0+dXRpbWVzY2FsZWQgKyB0c2stPnN0aW1lc2NhbGVkLCAmdHMpOworCXRtcCArPSB0aW1lc3BlY190b19ucygmdHMpOworCWQtPmNwdV9zY2FsZWRfcnVuX3JlYWxfdG90YWwgPQorCQkodG1wIDwgKHM2NClkLT5jcHVfc2NhbGVkX3J1bl9yZWFsX3RvdGFsKSA/IDAgOiB0bXA7CisKIAkvKgogCSAqIE5vIGxvY2tpbmcgYXZhaWxhYmxlIGZvciBzY2hlZF9pbmZvIChhbmQgdG9vIGV4cGVuc2l2ZSB0byBhZGQgb25lKQogCSAqIE1pdGlnYXRlIGJ5IHRha2luZyBzbmFwc2hvdCBvZiB2YWx1ZXMKZGlmZiAtLWdpdCBhL2tlcm5lbC9kaWVfbm90aWZpZXIuYyBiL2tlcm5lbC9kaWVfbm90aWZpZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ5ODgyNy4uMDAwMDAwMAotLS0gYS9rZXJuZWwvZGllX25vdGlmaWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KLQotCi1zdGF0aWMgQVRPTUlDX05PVElGSUVSX0hFQUQoZGllX2NoYWluKTsKLQotaW50IG5vdGlmeV9kaWUoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAotCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgbG9uZyBlcnIsIGludCB0cmFwLCBpbnQgc2lnKQotewotCXN0cnVjdCBkaWVfYXJncyBhcmdzID0gewotCQkucmVncwkJPSByZWdzLAotCQkuc3RyCQk9IHN0ciwKLQkJLmVycgkJPSBlcnIsCi0JCS50cmFwbnIJCT0gdHJhcCwKLQkJLnNpZ25yCQk9IHNpZywKLQotCX07Ci0KLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Ci19Ci0KLWludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQl2bWFsbG9jX3N5bmNfYWxsKCk7Ci0JcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZGllX2NoYWluLCBuYik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCi1pbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmRpZV9jaGFpbiwgbmIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwotCi0KZGlmZiAtLWdpdCBhL2tlcm5lbC9kbWEuYyBiL2tlcm5lbC9kbWEuYwppbmRleCA5MzdiMTNjLi42YTgyYmI3IDEwMDY0NAotLS0gYS9rZXJuZWwvZG1hLmMKKysrIGIva2VybmVsL2RtYS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotIAorCiAKIC8qIEEgbm90ZSBvbiByZXNvdXJjZSBhbGxvY2F0aW9uOgogICoKQEAgLTk1LDcgKzk1LDcgQEAKIAlpZiAoeGNoZygmZG1hX2NoYW5fYnVzeVtkbWFucl0ubG9jaywgMCkgPT0gMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJUcnlpbmcgdG8gZnJlZSBmcmVlIERNQSVkXG4iLCBkbWFucik7CiAJCXJldHVybjsKLQl9CQorCX0KIAogfSAvKiBmcmVlX2RtYSAqLwogCkBAIC0xMjEsOCArMTIxLDggQEAKIAogCWZvciAoaSA9IDAgOyBpIDwgTUFYX0RNQV9DSEFOTkVMUyA7IGkrKykgewogCQlpZiAoZG1hX2NoYW5fYnVzeVtpXS5sb2NrKSB7Ci0JCSAgICBzZXFfcHJpbnRmKG0sICIlMmQ6ICVzXG4iLCBpLAotCQkJICAgICAgIGRtYV9jaGFuX2J1c3lbaV0uZGV2aWNlX2lkKTsKKwkJCXNlcV9wcmludGYobSwgIiUyZDogJXNcbiIsIGksCisJCQkJICAgZG1hX2NoYW5fYnVzeVtpXS5kZXZpY2VfaWQpOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL2V4ZWNfZG9tYWluLmMgYi9rZXJuZWwvZXhlY19kb21haW4uYwppbmRleCAzYzJlYWVhLi5hOWU2YmFkIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhlY19kb21haW4uYworKysgYi9rZXJuZWwvZXhlY19kb21haW4uYwpAQCAtNTcsNyArNTcsNyBAQAogewogCXN0cnVjdCBleGVjX2RvbWFpbiAqCWVwOwogCXVfbG9uZwkJCXBlcnMgPSBwZXJzb25hbGl0eShwZXJzb25hbGl0eSk7Ci0JCQorCiAJcmVhZF9sb2NrKCZleGVjX2RvbWFpbnNfbG9jayk7CiAJZm9yIChlcCA9IGV4ZWNfZG9tYWluczsgZXA7IGVwID0gZXAtPm5leHQpIHsKIAkJaWYgKHBlcnMgPj0gZXAtPnBlcnNfbG93ICYmIHBlcnMgPD0gZXAtPnBlcnNfaGlnaCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IDJjNzA0YzguLmYxYWVjMjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0c19rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdXNldC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CkBAIC0xNDgsNiArMTQ4LDcgQEAKIAlpbnQgemFwX2xlYWRlcjsKIHJlcGVhdDoKIAlhdG9taWNfZGVjKCZwLT51c2VyLT5wcm9jZXNzZXMpOworCXByb2NfZmx1c2hfdGFzayhwKTsKIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJcHRyYWNlX3VubGluayhwKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJnAtPnB0cmFjZV9saXN0KSB8fCAhbGlzdF9lbXB0eSgmcC0+cHRyYWNlX2NoaWxkcmVuKSk7CkBAIC0xNzUsNyArMTc2LDYgQEAKIAl9CiAKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQlwcm9jX2ZsdXNoX3Rhc2socCk7CiAJcmVsZWFzZV90aHJlYWQocCk7CiAJY2FsbF9yY3UoJnAtPnJjdSwgZGVsYXllZF9wdXRfdGFza19zdHJ1Y3QpOwogCkBAIC0yMjEsNyArMjIxLDcgQEAKIAlkb19lYWNoX3BpZF90YXNrKHBncnAsIFBJRFRZUEVfUEdJRCwgcCkgewogCQlpZiAocCA9PSBpZ25vcmVkX3Rhc2sKIAkJCQl8fCBwLT5leGl0X3N0YXRlCi0JCQkJfHwgaXNfaW5pdChwLT5yZWFsX3BhcmVudCkpCisJCQkJfHwgaXNfZ2xvYmFsX2luaXQocC0+cmVhbF9wYXJlbnQpKQogCQkJY29udGludWU7CiAJCWlmICh0YXNrX3BncnAocC0+cmVhbF9wYXJlbnQpICE9IHBncnAgJiYKIAkJICAgIHRhc2tfc2Vzc2lvbihwLT5yZWFsX3BhcmVudCkgPT0gdGFza19zZXNzaW9uKHApKSB7CkBAIC0yOTksMTQgKzI5OSwxNCBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAotCWlmIChwcm9jZXNzX3Nlc3Npb24oY3VycikgIT0gc2Vzc2lvbikgeworCWlmICh0YXNrX3Nlc3Npb25fbnIoY3VycikgIT0gc2Vzc2lvbikgewogCQlkZXRhY2hfcGlkKGN1cnIsIFBJRFRZUEVfU0lEKTsKLQkJc2V0X3NpZ25hbF9zZXNzaW9uKGN1cnItPnNpZ25hbCwgc2Vzc2lvbik7CisJCXNldF90YXNrX3Nlc3Npb24oY3Vyciwgc2Vzc2lvbik7CiAJCWF0dGFjaF9waWQoY3VyciwgUElEVFlQRV9TSUQsIGZpbmRfcGlkKHNlc3Npb24pKTsKIAl9Ci0JaWYgKHByb2Nlc3NfZ3JvdXAoY3VycikgIT0gcGdycCkgeworCWlmICh0YXNrX3BncnBfbnIoY3VycikgIT0gcGdycCkgewogCQlkZXRhY2hfcGlkKGN1cnIsIFBJRFRZUEVfUEdJRCk7Ci0JCWN1cnItPnNpZ25hbC0+cGdycCA9IHBncnA7CisJCXNldF90YXNrX3BncnAoY3VyciwgcGdycCk7CiAJCWF0dGFjaF9waWQoY3VyciwgUElEVFlQRV9QR0lELCBmaW5kX3BpZChwZ3JwKSk7CiAJfQogfQpAQCAtNDAwLDExICs0MDAsMTIgQEAKIAljdXJyZW50LT5mcyA9IGZzOwogCWF0b21pY19pbmMoJmZzLT5jb3VudCk7CiAKLQlleGl0X3Rhc2tfbmFtZXNwYWNlcyhjdXJyZW50KTsKLQljdXJyZW50LT5uc3Byb3h5ID0gaW5pdF90YXNrLm5zcHJveHk7Ci0JZ2V0X3Rhc2tfbmFtZXNwYWNlcyhjdXJyZW50KTsKKwlpZiAoY3VycmVudC0+bnNwcm94eSAhPSBpbml0X3Rhc2subnNwcm94eSkgeworCQlnZXRfbnNwcm94eShpbml0X3Rhc2subnNwcm94eSk7CisJCXN3aXRjaF90YXNrX25hbWVzcGFjZXMoY3VycmVudCwgaW5pdF90YXNrLm5zcHJveHkpOworCX0KIAotIAlleGl0X2ZpbGVzKGN1cnJlbnQpOworCWV4aXRfZmlsZXMoY3VycmVudCk7CiAJY3VycmVudC0+ZmlsZXMgPSBpbml0X3Rhc2suZmlsZXM7CiAJYXRvbWljX2luYygmY3VycmVudC0+ZmlsZXMtPmNvdW50KTsKIApAQCAtNDkyLDcgKzQ5Myw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHJlc2V0X2ZpbGVzX3N0cnVjdCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXRfZmlsZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgdm9pZCBfX2V4aXRfZmlsZXMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IGZpbGVzX3N0cnVjdCAqIGZpbGVzID0gdHNrLT5maWxlczsKIApAQCAtNTA5LDcgKzUxMCw3IEBACiAJX19leGl0X2ZpbGVzKHRzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3B1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpCitzdGF0aWMgdm9pZCBfX3B1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpCiB7CiAJLyogTm8gbmVlZCB0byBob2xkIGZzLT5sb2NrIGlmIHdlIGFyZSBraWxsaW5nIGl0ICovCiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZzLT5jb3VudCkpIHsKQEAgLTUzMCw3ICs1MzEsNyBAQAogCV9fcHV0X2ZzX3N0cnVjdChmcyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2V4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgdm9pZCBfX2V4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IGZzX3N0cnVjdCAqIGZzID0gdHNrLT5mczsKIApAQCAtNjY1LDE5ICs2NjYsMjIgQEAKICAqIHRoZSBjaGlsZCByZWFwZXIgcHJvY2VzcyAoaWUgImluaXQiKSBpbiBvdXIgcGlkCiAgKiBzcGFjZS4KICAqLwotc3RhdGljIHZvaWQKLWZvcmdldF9vcmlnaW5hbF9wYXJlbnQoc3RydWN0IHRhc2tfc3RydWN0ICpmYXRoZXIsIHN0cnVjdCBsaXN0X2hlYWQgKnRvX3JlbGVhc2UpCitzdGF0aWMgdm9pZCBmb3JnZXRfb3JpZ2luYWxfcGFyZW50KHN0cnVjdCB0YXNrX3N0cnVjdCAqZmF0aGVyKQogewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKnJlYXBlciA9IGZhdGhlcjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpfcCwgKl9uOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgKm4sICpyZWFwZXIgPSBmYXRoZXI7CisJc3RydWN0IGxpc3RfaGVhZCBwdHJhY2VfZGVhZDsKKworCUlOSVRfTElTVF9IRUFEKCZwdHJhY2VfZGVhZCk7CisKKwl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKIAlkbyB7CiAJCXJlYXBlciA9IG5leHRfdGhyZWFkKHJlYXBlcik7CiAJCWlmIChyZWFwZXIgPT0gZmF0aGVyKSB7Ci0JCQlyZWFwZXIgPSBjaGlsZF9yZWFwZXIoZmF0aGVyKTsKKwkJCXJlYXBlciA9IHRhc2tfY2hpbGRfcmVhcGVyKGZhdGhlcik7CiAJCQlicmVhazsKIAkJfQotCX0gd2hpbGUgKHJlYXBlci0+ZXhpdF9zdGF0ZSk7CisJfSB3aGlsZSAocmVhcGVyLT5mbGFncyAmIFBGX0VYSVRJTkcpOwogCiAJLyoKIAkgKiBUaGVyZSBhcmUgb25seSB0d28gcGxhY2VzIHdoZXJlIG91ciBjaGlsZHJlbiBjYW4gYmU6CkBAIC02ODcsOSArNjkxLDggQEAKIAkgKgogCSAqIFNlYXJjaCB0aGVtIGFuZCByZXBhcmVudCBjaGlsZHJlbi4KIAkgKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUoX3AsIF9uLCAmZmF0aGVyLT5jaGlsZHJlbikgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmZmF0aGVyLT5jaGlsZHJlbiwgc2libGluZykgewogCQlpbnQgcHRyYWNlOwotCQlwID0gbGlzdF9lbnRyeShfcCwgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKIAogCQlwdHJhY2UgPSBwLT5wdHJhY2U7CiAKQEAgLTcxNSwxMyArNzE4LDIzIEBACiAJCSAqIHdoaWxlIGl0IHdhcyBiZWluZyB0cmFjZWQgYnkgdXMsIHRvIGJlIGFibGUgdG8gc2VlIGl0IGluIHdhaXQ0LgogCQkgKi8KIAkJaWYgKHVubGlrZWx5KHB0cmFjZSAmJiBwLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFICYmIHAtPmV4aXRfc2lnbmFsID09IC0xKSkKLQkJCWxpc3RfYWRkKCZwLT5wdHJhY2VfbGlzdCwgdG9fcmVsZWFzZSk7CisJCQlsaXN0X2FkZCgmcC0+cHRyYWNlX2xpc3QsICZwdHJhY2VfZGVhZCk7CiAJfQotCWxpc3RfZm9yX2VhY2hfc2FmZShfcCwgX24sICZmYXRoZXItPnB0cmFjZV9jaGlsZHJlbikgewotCQlwID0gbGlzdF9lbnRyeShfcCwgc3RydWN0IHRhc2tfc3RydWN0LCBwdHJhY2VfbGlzdCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgbiwgJmZhdGhlci0+cHRyYWNlX2NoaWxkcmVuLCBwdHJhY2VfbGlzdCkgewogCQlwLT5yZWFsX3BhcmVudCA9IHJlYXBlcjsKIAkJcmVwYXJlbnRfdGhyZWFkKHAsIGZhdGhlciwgMSk7CiAJfQorCisJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZmYXRoZXItPmNoaWxkcmVuKSk7CisJQlVHX09OKCFsaXN0X2VtcHR5KCZmYXRoZXItPnB0cmFjZV9jaGlsZHJlbikpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZwdHJhY2VfZGVhZCwgcHRyYWNlX2xpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmcC0+cHRyYWNlX2xpc3QpOworCQlyZWxlYXNlX3Rhc2socCk7CisJfQorCiB9CiAKIC8qCkBAIC03MzIsNyArNzQ1LDYgQEAKIHsKIAlpbnQgc3RhdGU7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0OwotCXN0cnVjdCBsaXN0X2hlYWQgcHRyYWNlX2RlYWQsICpfcCwgKl9uOwogCXN0cnVjdCBwaWQgKnBncnA7CiAKIAlpZiAoc2lnbmFsX3BlbmRpbmcodHNrKSAmJiAhKHRzay0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9HUk9VUF9FWElUKQpAQCAtNzUzLDggKzc2NSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAl9CiAKLQl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7Ci0KIAkvKgogCSAqIFRoaXMgZG9lcyB0d28gdGhpbmdzOgogCSAqCkBAIC03NjMsMTIgKzc3MywxMCBAQAogCSAqCWFzIGEgcmVzdWx0IG9mIG91ciBleGl0aW5nLCBhbmQgaWYgdGhleSBoYXZlIGFueSBzdG9wcGVkCiAJICoJam9icywgc2VuZCB0aGVtIGEgU0lHSFVQIGFuZCB0aGVuIGEgU0lHQ09OVC4gIChQT1NJWCAzLjIuMi4yKQogCSAqLworCWZvcmdldF9vcmlnaW5hbF9wYXJlbnQodHNrKTsKKwlleGl0X3Rhc2tfbmFtZXNwYWNlcyh0c2spOwogCi0JSU5JVF9MSVNUX0hFQUQoJnB0cmFjZV9kZWFkKTsKLQlmb3JnZXRfb3JpZ2luYWxfcGFyZW50KHRzaywgJnB0cmFjZV9kZWFkKTsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnRzay0+Y2hpbGRyZW4pKTsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnRzay0+cHRyYWNlX2NoaWxkcmVuKSk7Ci0KKwl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJLyoKIAkgKiBDaGVjayB0byBzZWUgaWYgYW55IHByb2Nlc3MgZ3JvdXBzIGhhdmUgYmVjb21lIG9ycGhhbmVkCiAJICogYXMgYSByZXN1bHQgb2Ygb3VyIGV4aXRpbmcsIGFuZCBpZiB0aGV5IGhhdmUgYW55IHN0b3BwZWQKQEAgLTc5Miw3ICs4MDAsNyBAQAogCS8qIExldCBmYXRoZXIga25vdyB3ZSBkaWVkCiAJICoKIAkgKiBUaHJlYWQgc2lnbmFscyBhcmUgY29uZmlndXJhYmxlLCBidXQgeW91IGFyZW4ndCBnb2luZyB0byB1c2UKLQkgKiB0aGF0IHRvIHNlbmQgc2lnbmFscyB0byBhcmJpdGFyeSBwcm9jZXNzZXMuIAorCSAqIHRoYXQgdG8gc2VuZCBzaWduYWxzIHRvIGFyYml0YXJ5IHByb2Nlc3Nlcy4KIAkgKiBUaGF0IHN0b3BzIHJpZ2h0IG5vdy4KIAkgKgogCSAqIElmIHRoZSBwYXJlbnQgZXhlYyBpZCBkb2Vzbid0IG1hdGNoIHRoZSBleGVjIGlkIHdlIHNhdmVkCkBAIC04MzMsMTIgKzg0MSw2IEBACiAKIAl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAotCWxpc3RfZm9yX2VhY2hfc2FmZShfcCwgX24sICZwdHJhY2VfZGVhZCkgewotCQlsaXN0X2RlbF9pbml0KF9wKTsKLQkJdCA9IGxpc3RfZW50cnkoX3AsIHN0cnVjdCB0YXNrX3N0cnVjdCwgcHRyYWNlX2xpc3QpOwotCQlyZWxlYXNlX3Rhc2sodCk7Ci0JfQotCiAJLyogSWYgdGhlIHByb2Nlc3MgaXMgZGVhZCwgcmVsZWFzZSBpdCAtIG5vYm9keSB3aWxsIHdhaXQgZm9yIGl0ICovCiAJaWYgKHN0YXRlID09IEVYSVRfREVBRCkKIAkJcmVsZWFzZV90YXNrKHRzayk7CkBAIC04NzQsMTAgKzg3NiwzNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9jaGlsZF9yZWFwZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JaWYgKGxpa2VseSh0c2stPmdyb3VwX2xlYWRlciAhPSBjaGlsZF9yZWFwZXIodHNrKSkpCisJaWYgKGxpa2VseSh0c2stPmdyb3VwX2xlYWRlciAhPSB0YXNrX2NoaWxkX3JlYXBlcih0c2spKSkKIAkJcmV0dXJuOwogCi0JcGFuaWMoIkF0dGVtcHRlZCB0byBraWxsIGluaXQhIik7CisJaWYgKHRzay0+bnNwcm94eS0+cGlkX25zID09ICZpbml0X3BpZF9ucykKKwkJcGFuaWMoIkF0dGVtcHRlZCB0byBraWxsIGluaXQhIik7CisKKwkvKgorCSAqIEB0c2sgaXMgdGhlIGxhc3QgdGhyZWFkIGluIHRoZSAnY2dyb3VwLWluaXQnIGFuZCBpcyBleGl0aW5nLgorCSAqIFRlcm1pbmF0ZSBhbGwgcmVtYWluaW5nIHByb2Nlc3NlcyBpbiB0aGUgbmFtZXNwYWNlIGFuZCByZWFwIHRoZW0KKwkgKiBiZWZvcmUgZXhpdGluZyBAdHNrLgorCSAqCisJICogTm90ZSB0aGF0IEB0c2sgKGxhc3QgdGhyZWFkIG9mIGNncm91cC1pbml0KSBtYXkgbm90IG5lY2Vzc2FyaWx5CisJICogYmUgdGhlIGNoaWxkLXJlYXBlciAoaS5lIG1haW4gdGhyZWFkIG9mIGNncm91cC1pbml0KSBvZiB0aGUKKwkgKiBuYW1lc3BhY2UgaS5lIHRoZSBjaGlsZF9yZWFwZXIgbWF5IGhhdmUgYWxyZWFkeSBleGl0ZWQuCisJICoKKwkgKiBFdmVuIGFmdGVyIGEgY2hpbGRfcmVhcGVyIGV4aXRzLCB3ZSBsZXQgaXQgaW5oZXJpdCBvcnBoYW5lZCBjaGlsZHJlbiwKKwkgKiBiZWNhdXNlLCBwaWRfbnMtPmNoaWxkX3JlYXBlciByZW1haW5zIHZhbGlkIGFzIGxvbmcgYXMgdGhlcmUgaXMKKwkgKiBhdCBsZWFzdCBvbmUgbGl2aW5nIHN1Yi10aHJlYWQgaW4gdGhlIGNncm91cCBpbml0LgorCisJICogVGhpcyBsaXZpbmcgc3ViLXRocmVhZCBvZiB0aGUgY2dyb3VwLWluaXQgd2lsbCBiZSBub3RpZmllZCB3aGVuCisJICogYSBjaGlsZCBpbmhlcml0ZWQgYnkgdGhlICdjaGlsZC1yZWFwZXInIGV4aXRzIChkb19ub3RpZnlfcGFyZW50KCkKKwkgKiB1c2VzIF9fZ3JvdXBfc2VuZF9zaWdfaW5mbygpKS4gRnVydGhlciwgd2hlbiByZWFwaW5nIGNoaWxkIHByb2Nlc3NlcywKKwkgKiBkb193YWl0KCkgaXRlcmF0ZXMgb3ZlciBjaGlsZHJlbiBvZiBhbGwgbGl2aW5nIHN1YiB0aHJlYWRzLgorCisJICogaS5lIGV2ZW4gdGhvdWdoICdjaGlsZF9yZWFwZXInIHRocmVhZCBpcyBsaXN0ZWQgYXMgdGhlIHBhcmVudCBvZiB0aGUKKwkgKiBvcnBoYW5lZCBjaGlsZHJlbiwgYW55IGxpdmluZyBzdWItdGhyZWFkIGluIHRoZSBjZ3JvdXAtaW5pdCBjYW4KKwkgKiBwZXJmb3JtIHRoZSByb2xlIG9mIHRoZSBjaGlsZF9yZWFwZXIuCisJICovCisJemFwX3BpZF9uc19wcm9jZXNzZXModHNrLT5uc3Byb3h5LT5waWRfbnMpOwogfQogCiBmYXN0Y2FsbCBOT1JFVF9UWVBFIHZvaWQgZG9fZXhpdChsb25nIGNvZGUpCkBAIC05MzIsNyArOTU5LDcgQEAKIAogCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSkpCiAJCXByaW50ayhLRVJOX0lORk8gIm5vdGU6ICVzWyVkXSBleGl0ZWQgd2l0aCBwcmVlbXB0X2NvdW50ICVkXG4iLAotCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwKKwkJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJCQlwcmVlbXB0X2NvdW50KCkpOwogCiAJYWNjdF91cGRhdGVfaW50ZWdyYWxzKHRzayk7CkBAIC05NzIsNyArOTk5LDcgQEAKIAlfX2V4aXRfZnModHNrKTsKIAljaGVja19zdGFja191c2FnZSgpOwogCWV4aXRfdGhyZWFkKCk7Ci0JY3B1c2V0X2V4aXQodHNrKTsKKwljZ3JvdXBfZXhpdCh0c2ssIDEpOwogCWV4aXRfa2V5cyh0c2spOwogCiAJaWYgKGdyb3VwX2RlYWQgJiYgdHNrLT5zaWduYWwtPmxlYWRlcikKQEAgLTk4Myw3ICsxMDEwLDYgQEAKIAkJbW9kdWxlX3B1dCh0c2stPmJpbmZtdC0+bW9kdWxlKTsKIAogCXByb2NfZXhpdF9jb25uZWN0b3IodHNrKTsKLQlleGl0X3Rhc2tfbmFtZXNwYWNlcyh0c2spOwogCWV4aXRfbm90aWZ5KHRzayk7CiAjaWZkZWYgQ09ORklHX05VTUEKIAltcG9sX2ZyZWUodHNrLT5tZW1wb2xpY3kpOwpAQCAtMTA4NiwxNSArMTExMiwxNyBAQAogc3RhdGljIGludCBlbGlnaWJsZV9jaGlsZChwaWRfdCBwaWQsIGludCBvcHRpb25zLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJaW50IGVycjsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKKwlucyA9IGN1cnJlbnQtPm5zcHJveHktPnBpZF9uczsKIAlpZiAocGlkID4gMCkgewotCQlpZiAocC0+cGlkICE9IHBpZCkKKwkJaWYgKHRhc2tfcGlkX25yX25zKHAsIG5zKSAhPSBwaWQpCiAJCQlyZXR1cm4gMDsKIAl9IGVsc2UgaWYgKCFwaWQpIHsKLQkJaWYgKHByb2Nlc3NfZ3JvdXAocCkgIT0gcHJvY2Vzc19ncm91cChjdXJyZW50KSkKKwkJaWYgKHRhc2tfcGdycF9ucl9ucyhwLCBucykgIT0gdGFza19wZ3JwX3ZucihjdXJyZW50KSkKIAkJCXJldHVybiAwOwogCX0gZWxzZSBpZiAocGlkICE9IC0xKSB7Ci0JCWlmIChwcm9jZXNzX2dyb3VwKHApICE9IC1waWQpCisJCWlmICh0YXNrX3BncnBfbnJfbnMocCwgbnMpICE9IC1waWQpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTExNjQsOSArMTE5MiwxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgc3RhdGU7CiAJaW50IHJldHZhbCwgc3RhdHVzLCB0cmFjZWQ7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOworCisJbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5waWRfbnM7CiAKIAlpZiAodW5saWtlbHkobm9yZWFwKSkgewotCQlwaWRfdCBwaWQgPSBwLT5waWQ7CisJCXBpZF90IHBpZCA9IHRhc2tfcGlkX25yX25zKHAsIG5zKTsKIAkJdWlkX3QgdWlkID0gcC0+dWlkOwogCQlpbnQgZXhpdF9jb2RlID0gcC0+ZXhpdF9jb2RlOwogCQlpbnQgd2h5LCBzdGF0dXM7CkBAIC0xMjg1LDExICsxMzE2LDExIEBACiAJCQlyZXR2YWwgPSBwdXRfdXNlcihzdGF0dXMsICZpbmZvcC0+c2lfc3RhdHVzKTsKIAl9CiAJaWYgKCFyZXR2YWwgJiYgaW5mb3ApCi0JCXJldHZhbCA9IHB1dF91c2VyKHAtPnBpZCwgJmluZm9wLT5zaV9waWQpOworCQlyZXR2YWwgPSBwdXRfdXNlcih0YXNrX3BpZF9ucl9ucyhwLCBucyksICZpbmZvcC0+c2lfcGlkKTsKIAlpZiAoIXJldHZhbCAmJiBpbmZvcCkKIAkJcmV0dmFsID0gcHV0X3VzZXIocC0+dWlkLCAmaW5mb3AtPnNpX3VpZCk7CiAJaWYgKCFyZXR2YWwpCi0JCXJldHZhbCA9IHAtPnBpZDsKKwkJcmV0dmFsID0gdGFza19waWRfbnJfbnMocCwgbnMpOwogCiAJaWYgKHRyYWNlZCkgewogCQl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CkBAIC0xMzI2LDYgKzEzNTcsNyBAQAogCQkJICAgICBpbnQgX191c2VyICpzdGF0X2FkZHIsIHN0cnVjdCBydXNhZ2UgX191c2VyICpydSkKIHsKIAlpbnQgcmV0dmFsLCBleGl0X2NvZGU7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOwogCiAJaWYgKCFwLT5leGl0X2NvZGUpCiAJCXJldHVybiAwOwpAQCAtMTM0NCwxMSArMTM3NiwxMiBAQAogCSAqIGtlZXAgaG9sZGluZyBvbnRvIHRoZSB0YXNrbGlzdF9sb2NrIHdoaWxlIHdlIGNhbGwgZ2V0cnVzYWdlIGFuZAogCSAqIHBvc3NpYmx5IHRha2UgcGFnZSBmYXVsdHMgZm9yIHVzZXIgbWVtb3J5LgogCSAqLworCW5zID0gY3VycmVudC0+bnNwcm94eS0+cGlkX25zOwogCWdldF90YXNrX3N0cnVjdChwKTsKIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAKIAlpZiAodW5saWtlbHkobm9yZWFwKSkgewotCQlwaWRfdCBwaWQgPSBwLT5waWQ7CisJCXBpZF90IHBpZCA9IHRhc2tfcGlkX25yX25zKHAsIG5zKTsKIAkJdWlkX3QgdWlkID0gcC0+dWlkOwogCQlpbnQgd2h5ID0gKHAtPnB0cmFjZSAmIFBUX1BUUkFDRUQpID8gQ0xEX1RSQVBQRUQgOiBDTERfU1RPUFBFRDsKIApAQCAtMTQxOSwxMSArMTQ1MiwxMSBAQAogCWlmICghcmV0dmFsICYmIGluZm9wKQogCQlyZXR2YWwgPSBwdXRfdXNlcihleGl0X2NvZGUsICZpbmZvcC0+c2lfc3RhdHVzKTsKIAlpZiAoIXJldHZhbCAmJiBpbmZvcCkKLQkJcmV0dmFsID0gcHV0X3VzZXIocC0+cGlkLCAmaW5mb3AtPnNpX3BpZCk7CisJCXJldHZhbCA9IHB1dF91c2VyKHRhc2tfcGlkX25yX25zKHAsIG5zKSwgJmluZm9wLT5zaV9waWQpOwogCWlmICghcmV0dmFsICYmIGluZm9wKQogCQlyZXR2YWwgPSBwdXRfdXNlcihwLT51aWQsICZpbmZvcC0+c2lfdWlkKTsKIAlpZiAoIXJldHZhbCkKLQkJcmV0dmFsID0gcC0+cGlkOworCQlyZXR2YWwgPSB0YXNrX3BpZF9ucl9ucyhwLCBucyk7CiAJcHV0X3Rhc2tfc3RydWN0KHApOwogCiAJQlVHX09OKCFyZXR2YWwpOwpAQCAtMTQ0Myw2ICsxNDc2LDcgQEAKIAlpbnQgcmV0dmFsOwogCXBpZF90IHBpZDsKIAl1aWRfdCB1aWQ7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOwogCiAJaWYgKCEocC0+c2lnbmFsLT5mbGFncyAmIFNJR05BTF9TVE9QX0NPTlRJTlVFRCkpCiAJCXJldHVybiAwOwpAQCAtMTQ1Nyw3ICsxNDkxLDggQEAKIAkJcC0+c2lnbmFsLT5mbGFncyAmPSB+U0lHTkFMX1NUT1BfQ09OVElOVUVEOwogCXNwaW5fdW5sb2NrX2lycSgmcC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlwaWQgPSBwLT5waWQ7CisJbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5waWRfbnM7CisJcGlkID0gdGFza19waWRfbnJfbnMocCwgbnMpOwogCXVpZCA9IHAtPnVpZDsKIAlnZXRfdGFza19zdHJ1Y3QocCk7CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwpAQCAtMTQ2OCw3ICsxNTAzLDcgQEAKIAkJaWYgKCFyZXR2YWwgJiYgc3RhdF9hZGRyKQogCQkJcmV0dmFsID0gcHV0X3VzZXIoMHhmZmZmLCBzdGF0X2FkZHIpOwogCQlpZiAoIXJldHZhbCkKLQkJCXJldHZhbCA9IHAtPnBpZDsKKwkJCXJldHZhbCA9IHRhc2tfcGlkX25yX25zKHAsIG5zKTsKIAl9IGVsc2UgewogCQlyZXR2YWwgPSB3YWl0X25vcmVhcF9jb3B5b3V0KHAsIHBpZCwgdWlkLAogCQkJCQkgICAgIENMRF9DT05USU5VRUQsIFNJR0NPTlQsCkBAIC0xNTE3LDEyICsxNTUyLDkgQEAKIAl0c2sgPSBjdXJyZW50OwogCWRvIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwotCQlzdHJ1Y3QgbGlzdF9oZWFkICpfcDsKIAkJaW50IHJldDsKIAotCQlsaXN0X2Zvcl9lYWNoKF9wLCZ0c2stPmNoaWxkcmVuKSB7Ci0JCQlwID0gbGlzdF9lbnRyeShfcCwgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKLQorCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZ0c2stPmNoaWxkcmVuLCBzaWJsaW5nKSB7CiAJCQlyZXQgPSBlbGlnaWJsZV9jaGlsZChwaWQsIG9wdGlvbnMsIHApOwogCQkJaWYgKCFyZXQpCiAJCQkJY29udGludWU7CkBAIC0xNjA0LDkgKzE2MzYsOCBAQAogCQkJfQogCQl9CiAJCWlmICghZmxhZykgewotCQkJbGlzdF9mb3JfZWFjaChfcCwgJnRzay0+cHRyYWNlX2NoaWxkcmVuKSB7Ci0JCQkJcCA9IGxpc3RfZW50cnkoX3AsIHN0cnVjdCB0YXNrX3N0cnVjdCwKLQkJCQkJCXB0cmFjZV9saXN0KTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJnRzay0+cHRyYWNlX2NoaWxkcmVuLAorCQkJCQkgICAgcHRyYWNlX2xpc3QpIHsKIAkJCQlpZiAoIWVsaWdpYmxlX2NoaWxkKHBpZCwgb3B0aW9ucywgcCkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWZsYWcgPSAxOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggNDkwNDk1YS4uZGRhZmRmYSAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0c19rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtMTE2LDcgKzExNyw3IEBACiAKIHZvaWQgX19wdXRfdGFza19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0JV0FSTl9PTighKHRzay0+ZXhpdF9zdGF0ZSAmIChFWElUX0RFQUQgfCBFWElUX1pPTUJJRSkpKTsKKwlXQVJOX09OKCF0c2stPmV4aXRfc3RhdGUpOwogCVdBUk5fT04oYXRvbWljX3JlYWQoJnRzay0+dXNhZ2UpKTsKIAlXQVJOX09OKHRzayA9PSBjdXJyZW50KTsKIApAQCAtMjA1LDcgKzIwNiw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfTU1VCi1zdGF0aWMgaW5saW5lIGludCBkdXBfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IG1tX3N0cnVjdCAqb2xkbW0pCitzdGF0aWMgaW50IGR1cF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbW1fc3RydWN0ICpvbGRtbSkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm1wbnQsICp0bXAsICoqcHByZXY7CiAJc3RydWN0IHJiX25vZGUgKipyYl9saW5rLCAqcmJfcGFyZW50OwpAQCAtMjY4LDcgKzI2OSw3IEBACiAJCQlnZXRfZmlsZShmaWxlKTsKIAkJCWlmICh0bXAtPnZtX2ZsYWdzICYgVk1fREVOWVdSSVRFKQogCQkJCWF0b21pY19kZWMoJmlub2RlLT5pX3dyaXRlY291bnQpOwotICAgICAgCisKIAkJCS8qIGluc2VydCB0bXAgaW50byB0aGUgc2hhcmUgbGlzdCwganVzdCBhZnRlciBtcG50ICovCiAJCQlzcGluX2xvY2soJmZpbGUtPmZfbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCQkJdG1wLT52bV90cnVuY2F0ZV9jb3VudCA9IG1wbnQtPnZtX3RydW5jYXRlX2NvdW50OwpAQCAtMzMxLDcgKzMzMiw3IEBACiAjZGVmaW5lIG1tX2ZyZWVfcGdkKG1tKQogI2VuZGlmIC8qIENPTkZJR19NTVUgKi8KIAotIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wIERFRklORV9TUElOTE9DSyhtbWxpc3RfbG9jayk7CitfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCBERUZJTkVfU1BJTkxPQ0sobW1saXN0X2xvY2spOwogCiAjZGVmaW5lIGFsbG9jYXRlX21tKCkJKGttZW1fY2FjaGVfYWxsb2MobW1fY2FjaGVwLCBHRlBfS0VSTkVMKSkKICNkZWZpbmUgZnJlZV9tbShtbSkJKGttZW1fY2FjaGVfZnJlZShtbV9jYWNoZXAsIChtbSkpKQpAQCAtNTgzLDcgKzU4NCw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZnNfc3RydWN0ICpfX2NvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCkKK3N0YXRpYyBzdHJ1Y3QgZnNfc3RydWN0ICpfX2NvcHlfZnNfc3RydWN0KHN0cnVjdCBmc19zdHJ1Y3QgKm9sZCkKIHsKIAlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGttZW1fY2FjaGVfYWxsb2MoZnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKIAkvKiBXZSBkb24ndCBuZWVkIHRvIGxvY2sgZnMgLSB0aGluayB3aHkgOy0pICovCkBAIC02MTUsNyArNjE2LDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoY29weV9mc19zdHJ1Y3QpOwogCi1zdGF0aWMgaW5saW5lIGludCBjb3B5X2ZzKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykKK3N0YXRpYyBpbnQgY29weV9mcyh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9GUykgewogCQlhdG9taWNfaW5jKCZjdXJyZW50LT5mcy0+Y291bnQpOwpAQCAtNzM4LDggKzczOSw4IEBACiAJLyogY29tcHV0ZSB0aGUgcmVtYWluZGVyIHRvIGJlIGNsZWFyZWQgKi8KIAlzaXplID0gKG5ld19mZHQtPm1heF9mZHMgLSBvcGVuX2ZpbGVzKSAqIHNpemVvZihzdHJ1Y3QgZmlsZSAqKTsKIAotCS8qIFRoaXMgaXMgbG9uZyB3b3JkIGFsaWduZWQgdGh1cyBjb3VsZCB1c2UgYSBvcHRpbWl6ZWQgdmVyc2lvbiAqLyAKLQltZW1zZXQobmV3X2ZkcywgMCwgc2l6ZSk7IAorCS8qIFRoaXMgaXMgbG9uZyB3b3JkIGFsaWduZWQgdGh1cyBjb3VsZCB1c2UgYSBvcHRpbWl6ZWQgdmVyc2lvbiAqLworCW1lbXNldChuZXdfZmRzLCAwLCBzaXplKTsKIAogCWlmIChuZXdfZmR0LT5tYXhfZmRzID4gb3Blbl9maWxlcykgewogCQlpbnQgbGVmdCA9IChuZXdfZmR0LT5tYXhfZmRzLW9wZW5fZmlsZXMpLzg7CkBAIC04MTgsNyArODE5LDcgQEAKIAogRVhQT1JUX1NZTUJPTCh1bnNoYXJlX2ZpbGVzKTsKIAotc3RhdGljIGlubGluZSBpbnQgY29weV9zaWdoYW5kKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaykKK3N0YXRpYyBpbnQgY29weV9zaWdoYW5kKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBzaWdoYW5kX3N0cnVjdCAqc2lnOwogCkBAIC04NDEsNyArODQyLDcgQEAKIAkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBzaWdoYW5kKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY29weV9zaWduYWwodW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKQorc3RhdGljIGludCBjb3B5X3NpZ25hbCh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnOwogCWludCByZXQ7CkBAIC05MjMsNyArOTI0LDcgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoc2lnbmFsX2NhY2hlcCwgc2lnKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIHZvaWQgY2xlYW51cF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZyA9IHRzay0+c2lnbmFsOwogCkBAIC05MzMsNyArOTM0LDcgQEAKIAkJX19jbGVhbnVwX3NpZ25hbChzaWcpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9mbGFncyh1bnNpZ25lZCBsb25nIGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgdm9pZCBjb3B5X2ZsYWdzKHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncyA9IHAtPmZsYWdzOwogCkBAIC05NDIsMTYgKzk0MywxNyBAQAogCWlmICghKGNsb25lX2ZsYWdzICYgQ0xPTkVfUFRSQUNFKSkKIAkJcC0+cHRyYWNlID0gMDsKIAlwLT5mbGFncyA9IG5ld19mbGFnczsKKwljbGVhcl9mcmVlemVfZmxhZyhwKTsKIH0KIAogYXNtbGlua2FnZSBsb25nIHN5c19zZXRfdGlkX2FkZHJlc3MoaW50IF9fdXNlciAqdGlkcHRyKQogewogCWN1cnJlbnQtPmNsZWFyX2NoaWxkX3RpZCA9IHRpZHB0cjsKIAotCXJldHVybiBjdXJyZW50LT5waWQ7CisJcmV0dXJuIHRhc2tfcGlkX3ZucihjdXJyZW50KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJ0X211dGV4X2luaXRfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCitzdGF0aWMgdm9pZCBydF9tdXRleF9pbml0X3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewogCXNwaW5fbG9ja19pbml0KCZwLT5waV9sb2NrKTsKICNpZmRlZiBDT05GSUdfUlRfTVVURVhFUwpAQCAtOTcyLDEyICs5NzQsMTIgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyBzdGFja19zdGFydCwKIAkJCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCiAJCQkJCXVuc2lnbmVkIGxvbmcgc3RhY2tfc2l6ZSwKLQkJCQkJaW50IF9fdXNlciAqcGFyZW50X3RpZHB0ciwKIAkJCQkJaW50IF9fdXNlciAqY2hpbGRfdGlkcHRyLAogCQkJCQlzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJaW50IHJldHZhbDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAgPSBOVUxMOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKKwlpbnQgY2dyb3VwX2NhbGxiYWNrc19kb25lID0gMDsKIAogCWlmICgoY2xvbmVfZmxhZ3MgJiAoQ0xPTkVfTkVXTlN8Q0xPTkVfRlMpKSA9PSAoQ0xPTkVfTkVXTlN8Q0xPTkVfRlMpKQogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKQEAgLTEwNDEsMTIgKzEwNDMsNiBAQAogCXAtPmRpZF9leGVjID0gMDsKIAlkZWxheWFjY3RfdHNrX2luaXQocCk7CS8qIE11c3QgcmVtYWluIGFmdGVyIGR1cF90YXNrX3N0cnVjdCgpICovCiAJY29weV9mbGFncyhjbG9uZV9mbGFncywgcCk7Ci0JcC0+cGlkID0gcGlkX25yKHBpZCk7Ci0JcmV0dmFsID0gLUVGQVVMVDsKLQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9QQVJFTlRfU0VUVElEKQotCQlpZiAocHV0X3VzZXIocC0+cGlkLCBwYXJlbnRfdGlkcHRyKSkKLQkJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9kZWxheXNfYmluZm10OwotCiAJSU5JVF9MSVNUX0hFQUQoJnAtPmNoaWxkcmVuKTsKIAlJTklUX0xJU1RfSEVBRCgmcC0+c2libGluZyk7CiAJcC0+dmZvcmtfZG9uZSA9IE5VTEw7CkBAIC0xMDU4LDYgKzEwNTQsOCBAQAogCXAtPnV0aW1lID0gY3B1dGltZV96ZXJvOwogCXAtPnN0aW1lID0gY3B1dGltZV96ZXJvOwogCXAtPmd0aW1lID0gY3B1dGltZV96ZXJvOworCXAtPnV0aW1lc2NhbGVkID0gY3B1dGltZV96ZXJvOworCXAtPnN0aW1lc2NhbGVkID0gY3B1dGltZV96ZXJvOwogCiAjaWZkZWYgQ09ORklHX1RBU0tfWEFDQ1QKIAlwLT5yY2hhciA9IDA7CQkvKiBJL08gY291bnRlcjogYnl0ZXMgcmVhZCAqLwpAQCAtMTA2OCwxMiArMTA2NiwxMiBAQAogCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KHApOwogCWFjY3RfY2xlYXJfaW50ZWdyYWxzKHApOwogCi0gCXAtPml0X3ZpcnRfZXhwaXJlcyA9IGNwdXRpbWVfemVybzsKKwlwLT5pdF92aXJ0X2V4cGlyZXMgPSBjcHV0aW1lX3plcm87CiAJcC0+aXRfcHJvZl9leHBpcmVzID0gY3B1dGltZV96ZXJvOwotIAlwLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKLSAJSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMF0pOwotIAlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1sxXSk7Ci0gCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzJdKTsKKwlwLT5pdF9zY2hlZF9leHBpcmVzID0gMDsKKwlJTklUX0xJU1RfSEVBRCgmcC0+Y3B1X3RpbWVyc1swXSk7CisJSU5JVF9MSVNUX0hFQUQoJnAtPmNwdV90aW1lcnNbMV0pOworCUlOSVRfTElTVF9IRUFEKCZwLT5jcHVfdGltZXJzWzJdKTsKIAogCXAtPmxvY2tfZGVwdGggPSAtMTsJCS8qIC0xID0gbm8gbG9jayAqLwogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZwLT5zdGFydF90aW1lKTsKQEAgLTEwODMsMTUgKzEwODEsMTQgQEAKIAlwLT5zZWN1cml0eSA9IE5VTEw7CiAjZW5kaWYKIAlwLT5pb19jb250ZXh0ID0gTlVMTDsKLQlwLT5pb193YWl0ID0gTlVMTDsKIAlwLT5hdWRpdF9jb250ZXh0ID0gTlVMTDsKLQljcHVzZXRfZm9yayhwKTsKKwljZ3JvdXBfZm9yayhwKTsKICNpZmRlZiBDT05GSUdfTlVNQQogIAlwLT5tZW1wb2xpY3kgPSBtcG9sX2NvcHkocC0+bWVtcG9saWN5KTsKICAJaWYgKElTX0VSUihwLT5tZW1wb2xpY3kpKSB7CiAgCQlyZXR2YWwgPSBQVFJfRVJSKHAtPm1lbXBvbGljeSk7CiAgCQlwLT5tZW1wb2xpY3kgPSBOVUxMOwotIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX2NwdXNldDsKKyAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9jZ3JvdXA7CiAgCX0KIAltcG9sX2ZpeF9mb3JrX2NoaWxkX2ZsYWcocCk7CiAjZW5kaWYKQEAgLTExMjQsMTAgKzExMjEsNiBAQAogCXAtPmJsb2NrZWRfb24gPSBOVUxMOyAvKiBub3QgYmxvY2tlZCB5ZXQgKi8KICNlbmRpZgogCi0JcC0+dGdpZCA9IHAtPnBpZDsKLQlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpCi0JCXAtPnRnaWQgPSBjdXJyZW50LT50Z2lkOwotCiAJaWYgKChyZXR2YWwgPSBzZWN1cml0eV90YXNrX2FsbG9jKHApKSkKIAkJZ290byBiYWRfZm9ya19jbGVhbnVwX3BvbGljeTsKIAlpZiAoKHJldHZhbCA9IGF1ZGl0X2FsbG9jKHApKSkKQEAgLTExNTMsNiArMTE0NiwyNCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9uYW1lc3BhY2VzOwogCisJaWYgKHBpZCAhPSAmaW5pdF9zdHJ1Y3RfcGlkKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCXBpZCA9IGFsbG9jX3BpZCh0YXNrX2FjdGl2ZV9waWRfbnMocCkpOworCQlpZiAoIXBpZCkKKwkJCWdvdG8gYmFkX2ZvcmtfY2xlYW51cF9uYW1lc3BhY2VzOworCisJCWlmIChjbG9uZV9mbGFncyAmIENMT05FX05FV1BJRCkgeworCQkJcmV0dmFsID0gcGlkX25zX3ByZXBhcmVfcHJvYyh0YXNrX2FjdGl2ZV9waWRfbnMocCkpOworCQkJaWYgKHJldHZhbCA8IDApCisJCQkJZ290byBiYWRfZm9ya19mcmVlX3BpZDsKKwkJfQorCX0KKworCXAtPnBpZCA9IHBpZF9ucihwaWQpOworCXAtPnRnaWQgPSBwLT5waWQ7CisJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKQorCQlwLT50Z2lkID0gY3VycmVudC0+dGdpZDsKKwogCXAtPnNldF9jaGlsZF90aWQgPSAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9DSElMRF9TRVRUSUQpID8gY2hpbGRfdGlkcHRyIDogTlVMTDsKIAkvKgogCSAqIENsZWFyIFRJRCBvbiBtbV9yZWxlYXNlKCk/CkBAIC0xMjAyLDYgKzEyMTMsMTIgQEAKIAkvKiBQZXJmb3JtIHNjaGVkdWxlciByZWxhdGVkIHNldHVwLiBBc3NpZ24gdGhpcyB0YXNrIHRvIGEgQ1BVLiAqLwogCXNjaGVkX2ZvcmsocCwgY2xvbmVfZmxhZ3MpOwogCisJLyogTm93IHRoYXQgdGhlIHRhc2sgaXMgc2V0IHVwLCBydW4gY2dyb3VwIGNhbGxiYWNrcyBpZgorCSAqIG5lY2Vzc2FyeS4gV2UgbmVlZCB0byBydW4gdGhlbSBiZWZvcmUgdGhlIHRhc2sgaXMgdmlzaWJsZQorCSAqIG9uIHRoZSB0YXNrbGlzdC4gKi8KKwljZ3JvdXBfZm9ya19jYWxsYmFja3MocCk7CisJY2dyb3VwX2NhbGxiYWNrc19kb25lID0gMTsKKwogCS8qIE5lZWQgdGFza2xpc3QgbG9jayBmb3IgcGFyZW50IGV0YyBoYW5kbGluZyEgKi8KIAl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKQEAgLTEyMzksMTIgKzEyNTYsMTIgQEAKIAkgKiBBIGZhdGFsIHNpZ25hbCBwZW5kaW5nIG1lYW5zIHRoYXQgY3VycmVudCB3aWxsIGV4aXQsIHNvIHRoZSBuZXcKIAkgKiB0aHJlYWQgY2FuJ3Qgc2xpcCBvdXQgb2YgYW4gT09NIGtpbGwgKG9yIG5vcm1hbCBTSUdLSUxMKS4KICAJICovCi0gCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKIAlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKIAkJc3Bpbl91bmxvY2soJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCQl3cml0ZV91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAkJcmV0dmFsID0gLUVSRVNUQVJUTk9JTlRSOwotCQlnb3RvIGJhZF9mb3JrX2NsZWFudXBfbmFtZXNwYWNlczsKKwkJZ290byBiYWRfZm9ya19mcmVlX3BpZDsKIAl9CiAKIAlpZiAoY2xvbmVfZmxhZ3MgJiBDTE9ORV9USFJFQUQpIHsKQEAgLTEyNzMsMTEgKzEyOTAsMjIgQEAKIAkJCV9fcHRyYWNlX2xpbmsocCwgY3VycmVudC0+cGFyZW50KTsKIAogCQlpZiAodGhyZWFkX2dyb3VwX2xlYWRlcihwKSkgewotCQkJcC0+c2lnbmFsLT50dHkgPSBjdXJyZW50LT5zaWduYWwtPnR0eTsKLQkJCXAtPnNpZ25hbC0+cGdycCA9IHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7Ci0JCQlzZXRfc2lnbmFsX3Nlc3Npb24ocC0+c2lnbmFsLCBwcm9jZXNzX3Nlc3Npb24oY3VycmVudCkpOwotCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIHRhc2tfcGdycChjdXJyZW50KSk7Ci0JCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfU0lELCB0YXNrX3Nlc3Npb24oY3VycmVudCkpOworCQkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfTkVXUElEKSB7CisJCQkJcC0+bnNwcm94eS0+cGlkX25zLT5jaGlsZF9yZWFwZXIgPSBwOworCQkJCXAtPnNpZ25hbC0+dHR5ID0gTlVMTDsKKwkJCQlzZXRfdGFza19wZ3JwKHAsIHAtPnBpZCk7CisJCQkJc2V0X3Rhc2tfc2Vzc2lvbihwLCBwLT5waWQpOworCQkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9QR0lELCBwaWQpOworCQkJCWF0dGFjaF9waWQocCwgUElEVFlQRV9TSUQsIHBpZCk7CisJCQl9IGVsc2UgeworCQkJCXAtPnNpZ25hbC0+dHR5ID0gY3VycmVudC0+c2lnbmFsLT50dHk7CisJCQkJc2V0X3Rhc2tfcGdycChwLCB0YXNrX3BncnBfbnIoY3VycmVudCkpOworCQkJCXNldF90YXNrX3Nlc3Npb24ocCwgdGFza19zZXNzaW9uX25yKGN1cnJlbnQpKTsKKwkJCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwKKwkJCQkJCXRhc2tfcGdycChjdXJyZW50KSk7CisJCQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1NJRCwKKwkJCQkJCXRhc2tfc2Vzc2lvbihjdXJyZW50KSk7CisJCQl9CiAKIAkJCWxpc3RfYWRkX3RhaWxfcmN1KCZwLT50YXNrcywgJmluaXRfdGFzay50YXNrcyk7CiAJCQlfX2dldF9jcHVfdmFyKHByb2Nlc3NfY291bnRzKSsrOwpAQCAtMTI5MCw4ICsxMzE4LDEyIEBACiAJc3Bpbl91bmxvY2soJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCXdyaXRlX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCXByb2NfZm9ya19jb25uZWN0b3IocCk7CisJY2dyb3VwX3Bvc3RfZm9yayhwKTsKIAlyZXR1cm4gcDsKIAorYmFkX2ZvcmtfZnJlZV9waWQ6CisJaWYgKHBpZCAhPSAmaW5pdF9zdHJ1Y3RfcGlkKQorCQlmcmVlX3BpZChwaWQpOwogYmFkX2ZvcmtfY2xlYW51cF9uYW1lc3BhY2VzOgogCWV4aXRfdGFza19uYW1lc3BhY2VzKHApOwogYmFkX2ZvcmtfY2xlYW51cF9rZXlzOgpAQCAtMTMxNiwxMCArMTM0OCw5IEBACiBiYWRfZm9ya19jbGVhbnVwX3BvbGljeToKICNpZmRlZiBDT05GSUdfTlVNQQogCW1wb2xfZnJlZShwLT5tZW1wb2xpY3kpOwotYmFkX2ZvcmtfY2xlYW51cF9jcHVzZXQ6CitiYWRfZm9ya19jbGVhbnVwX2Nncm91cDoKICNlbmRpZgotCWNwdXNldF9leGl0KHApOwotYmFkX2ZvcmtfY2xlYW51cF9kZWxheXNfYmluZm10OgorCWNncm91cF9leGl0KHAsIGNncm91cF9jYWxsYmFja3NfZG9uZSk7CiAJZGVsYXlhY2N0X3Rza19mcmVlKHApOwogCWlmIChwLT5iaW5mbXQpCiAJCW1vZHVsZV9wdXQocC0+YmluZm10LT5tb2R1bGUpOwpAQCAtMTM0Niw3ICsxMzc3LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAotCXRhc2sgPSBjb3B5X3Byb2Nlc3MoQ0xPTkVfVk0sIDAsIGlkbGVfcmVncygmcmVncyksIDAsIE5VTEwsIE5VTEwsCisJdGFzayA9IGNvcHlfcHJvY2VzcyhDTE9ORV9WTSwgMCwgaWRsZV9yZWdzKCZyZWdzKSwgMCwgTlVMTCwKIAkJCQkmaW5pdF9zdHJ1Y3RfcGlkKTsKIAlpZiAoIUlTX0VSUih0YXNrKSkKIAkJaW5pdF9pZGxlKHRhc2ssIGNwdSk7CkBAIC0xMzU0LDcgKzEzODUsNyBAQAogCXJldHVybiB0YXNrOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmb3JrX3RyYWNlZmxhZyAodW5zaWduZWQgY2xvbmVfZmxhZ3MpCitzdGF0aWMgaW50IGZvcmtfdHJhY2VmbGFnKHVuc2lnbmVkIGNsb25lX2ZsYWdzKQogewogCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1VOVFJBQ0VEKQogCQlyZXR1cm4gMDsKQEAgLTEzODUsMTkgKzE0MTYsMTYgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJaW50IHRyYWNlID0gMDsKLQlzdHJ1Y3QgcGlkICpwaWQgPSBhbGxvY19waWQoKTsKIAlsb25nIG5yOwogCi0JaWYgKCFwaWQpCi0JCXJldHVybiAtRUFHQUlOOwotCW5yID0gcGlkLT5ucjsKIAlpZiAodW5saWtlbHkoY3VycmVudC0+cHRyYWNlKSkgewogCQl0cmFjZSA9IGZvcmtfdHJhY2VmbGFnIChjbG9uZV9mbGFncyk7CiAJCWlmICh0cmFjZSkKIAkJCWNsb25lX2ZsYWdzIHw9IENMT05FX1BUUkFDRTsKIAl9CiAKLQlwID0gY29weV9wcm9jZXNzKGNsb25lX2ZsYWdzLCBzdGFja19zdGFydCwgcmVncywgc3RhY2tfc2l6ZSwgcGFyZW50X3RpZHB0ciwgY2hpbGRfdGlkcHRyLCBwaWQpOworCXAgPSBjb3B5X3Byb2Nlc3MoY2xvbmVfZmxhZ3MsIHN0YWNrX3N0YXJ0LCByZWdzLCBzdGFja19zaXplLAorCQkJY2hpbGRfdGlkcHRyLCBOVUxMKTsKIAkvKgogCSAqIERvIHRoaXMgcHJpb3Igd2FraW5nIHVwIHRoZSBuZXcgdGhyZWFkIC0gdGhlIHRocmVhZCBwb2ludGVyCiAJICogbWlnaHQgZ2V0IGludmFsaWQgYWZ0ZXIgdGhhdCBwb2ludCwgaWYgdGhlIHRocmVhZCBleGl0cyBxdWlja2x5LgpAQCAtMTQwNSw2ICsxNDMzLDE3IEBACiAJaWYgKCFJU19FUlIocCkpIHsKIAkJc3RydWN0IGNvbXBsZXRpb24gdmZvcms7CiAKKwkJLyoKKwkJICogdGhpcyBpcyBlbm91Z2ggdG8gY2FsbCBwaWRfbnJfbnMgaGVyZSwgYnV0IHRoaXMgaWYKKwkJICogaW1wcm92ZXMgb3B0aW1pc2F0aW9uIG9mIHJlZ3VsYXIgZm9yaygpCisJCSAqLworCQluciA9IChjbG9uZV9mbGFncyAmIENMT05FX05FV1BJRCkgPworCQkJdGFza19waWRfbnJfbnMocCwgY3VycmVudC0+bnNwcm94eS0+cGlkX25zKSA6CisJCQkJdGFza19waWRfdm5yKHApOworCisJCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1BBUkVOVF9TRVRUSUQpCisJCQlwdXRfdXNlcihuciwgcGFyZW50X3RpZHB0cik7CisKIAkJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVkZPUkspIHsKIAkJCXAtPnZmb3JrX2RvbmUgPSAmdmZvcms7CiAJCQlpbml0X2NvbXBsZXRpb24oJnZmb3JrKTsKQEAgLTE0MzgsNyArMTQ3Nyw2IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlmcmVlX3BpZChwaWQpOwogCQluciA9IFBUUl9FUlIocCk7CiAJfQogCXJldHVybiBucjsKQEAgLTE0ODMsNyArMTUyMSw3IEBACiAgKiBDaGVjayBjb25zdHJhaW50cyBvbiBmbGFncyBwYXNzZWQgdG8gdGhlIHVuc2hhcmUgc3lzdGVtIGNhbGwgYW5kCiAgKiBmb3JjZSB1bnNoYXJpbmcgb2YgYWRkaXRpb25hbCBwcm9jZXNzIGNvbnRleHQgYXMgYXBwcm9wcmlhdGUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjaGVja191bnNoYXJlX2ZsYWdzKHVuc2lnbmVkIGxvbmcgKmZsYWdzX3B0cikKK3N0YXRpYyB2b2lkIGNoZWNrX3Vuc2hhcmVfZmxhZ3ModW5zaWduZWQgbG9uZyAqZmxhZ3NfcHRyKQogewogCS8qCiAJICogSWYgdW5zaGFyaW5nIGEgdGhyZWFkIGZyb20gYSB0aHJlYWQgZ3JvdXAsIG11c3QgYWxzbwpAQCAtMTYxNSw3ICsxNjUzLDcgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSwgKm5ld19tbSA9IE5VTEwsICphY3RpdmVfbW0gPSBOVUxMOwogCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZkLCAqbmV3X2ZkID0gTlVMTDsKIAlzdHJ1Y3Qgc2VtX3VuZG9fbGlzdCAqbmV3X3VsaXN0ID0gTlVMTDsKLQlzdHJ1Y3QgbnNwcm94eSAqbmV3X25zcHJveHkgPSBOVUxMLCAqb2xkX25zcHJveHkgPSBOVUxMOworCXN0cnVjdCBuc3Byb3h5ICpuZXdfbnNwcm94eSA9IE5VTEw7CiAKIAljaGVja191bnNoYXJlX2ZsYWdzKCZ1bnNoYXJlX2ZsYWdzKTsKIApAQCAtMTY0NSwxNCArMTY4MywxMyBAQAogCiAJaWYgKG5ld19mcyB8fCAgbmV3X21tIHx8IG5ld19mZCB8fCBuZXdfdWxpc3QgfHwgbmV3X25zcHJveHkpIHsKIAotCQl0YXNrX2xvY2soY3VycmVudCk7Ci0KIAkJaWYgKG5ld19uc3Byb3h5KSB7Ci0JCQlvbGRfbnNwcm94eSA9IGN1cnJlbnQtPm5zcHJveHk7Ci0JCQljdXJyZW50LT5uc3Byb3h5ID0gbmV3X25zcHJveHk7Ci0JCQluZXdfbnNwcm94eSA9IG9sZF9uc3Byb3h5OworCQkJc3dpdGNoX3Rhc2tfbmFtZXNwYWNlcyhjdXJyZW50LCBuZXdfbnNwcm94eSk7CisJCQluZXdfbnNwcm94eSA9IE5VTEw7CiAJCX0KIAorCQl0YXNrX2xvY2soY3VycmVudCk7CisKIAkJaWYgKG5ld19mcykgewogCQkJZnMgPSBjdXJyZW50LT5mczsKIAkJCWN1cnJlbnQtPmZzID0gbmV3X2ZzOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCBkNzI1Njc2Li4zMjcxMDQ1IDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXguYworKysgYi9rZXJuZWwvZnV0ZXguYwpAQCAtNTMsNiArNTMsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CisjaW5jbHVkZSA8bGludXgvcGlkLmg+CisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgorCiAjaW5jbHVkZSA8YXNtL2Z1dGV4Lmg+CiAKICNpbmNsdWRlICJydG11dGV4X2NvbW1vbi5oIgpAQCAtMjkzLDcgKzI5Niw3IEBACiAgKi8KIHZvaWQgZHJvcF9mdXRleF9rZXlfcmVmcyh1bmlvbiBmdXRleF9rZXkgKmtleSkKIHsKLQlpZiAoa2V5LT5ib3RoLnB0ciA9PSAwKQorCWlmICgha2V5LT5ib3RoLnB0cikKIAkJcmV0dXJuOwogCXN3aXRjaCAoa2V5LT5ib3RoLm9mZnNldCAmIChGVVRfT0ZGX0lOT0RFfEZVVF9PRkZfTU1TSEFSRUQpKSB7CiAJCWNhc2UgRlVUX09GRl9JTk9ERToKQEAgLTQ0Myw4ICs0NDYsNyBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlwID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwotCisJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CiAJaWYgKCFwIHx8ICgoY3VycmVudC0+ZXVpZCAhPSBwLT5ldWlkKSAmJiAoY3VycmVudC0+ZXVpZCAhPSBwLT51aWQpKSkKIAkJcCA9IEVSUl9QVFIoLUVTUkNIKTsKIAllbHNlCkBAIC02NTMsNyArNjU1LDcgQEAKIAlpZiAoISh1dmFsICYgRlVURVhfT1dORVJfRElFRCkpIHsKIAkJaW50IHJldCA9IDA7CiAKLQkJbmV3dmFsID0gRlVURVhfV0FJVEVSUyB8IG5ld19vd25lci0+cGlkOworCQluZXd2YWwgPSBGVVRFWF9XQUlURVJTIHwgdGFza19waWRfdm5yKG5ld19vd25lcik7CiAKIAkJY3VydmFsID0gY21weGNoZ19mdXRleF92YWx1ZV9sb2NrZWQodWFkZHIsIHV2YWwsIG5ld3ZhbCk7CiAKQEAgLTEwNDYsNyArMTA0OCw3IEBACiAgcmV0cnk6CiAJbG9ja19wdHIgPSBxLT5sb2NrX3B0cjsKIAliYXJyaWVyKCk7Ci0JaWYgKGxvY2tfcHRyICE9IDApIHsKKwlpZiAobG9ja19wdHIgIT0gTlVMTCkgewogCQlzcGluX2xvY2sobG9ja19wdHIpOwogCQkvKgogCQkgKiBxLT5sb2NrX3B0ciBjYW4gY2hhbmdlIGJldHdlZW4gcmVhZGluZyBpdCBhbmQKQEAgLTExMDYsNyArMTEwOCw3IEBACiBzdGF0aWMgaW50IGZpeHVwX3BpX3N0YXRlX293bmVyKHUzMiBfX3VzZXIgKnVhZGRyLCBzdHJ1Y3QgZnV0ZXhfcSAqcSwKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCiB7Ci0JdTMyIG5ld3RpZCA9IGN1cnItPnBpZCB8IEZVVEVYX1dBSVRFUlM7CisJdTMyIG5ld3RpZCA9IHRhc2tfcGlkX3ZucihjdXJyKSB8IEZVVEVYX1dBSVRFUlM7CiAJc3RydWN0IGZ1dGV4X3BpX3N0YXRlICpwaV9zdGF0ZSA9IHEtPnBpX3N0YXRlOwogCXUzMiB1dmFsLCBjdXJ2YWwsIG5ld3ZhbDsKIAlpbnQgcmV0OwpAQCAtMTM2OCw3ICsxMzcwLDcgQEAKIAkgKiAoYnkgZG9pbmcgYSAwIC0+IFRJRCBhdG9taWMgY21weGNoZyksIHdoaWxlIGhvbGRpbmcgYWxsCiAJICogdGhlIGxvY2tzLiBJdCB3aWxsIG1vc3QgbGlrZWx5IG5vdCBzdWNjZWVkLgogCSAqLwotCW5ld3ZhbCA9IGN1cnJlbnQtPnBpZDsKKwluZXd2YWwgPSB0YXNrX3BpZF92bnIoY3VycmVudCk7CiAKIAljdXJ2YWwgPSBjbXB4Y2hnX2Z1dGV4X3ZhbHVlX2xvY2tlZCh1YWRkciwgMCwgbmV3dmFsKTsKIApAQCAtMTM3OSw3ICsxMzgxLDcgQEAKIAkgKiBEZXRlY3QgZGVhZGxvY2tzLiBJbiBjYXNlIG9mIFJFUVVFVUVfUEkgdGhpcyBpcyBhIHZhbGlkCiAJICogc2l0dWF0aW9uIGFuZCB3ZSByZXR1cm4gc3VjY2VzcyB0byB1c2VyIHNwYWNlLgogCSAqLwotCWlmICh1bmxpa2VseSgoY3VydmFsICYgRlVURVhfVElEX01BU0spID09IGN1cnJlbnQtPnBpZCkpIHsKKwlpZiAodW5saWtlbHkoKGN1cnZhbCAmIEZVVEVYX1RJRF9NQVNLKSA9PSB0YXNrX3BpZF92bnIoY3VycmVudCkpKSB7CiAJCXJldCA9IC1FREVBRExLOwogCQlnb3RvIG91dF91bmxvY2tfcmVsZWFzZV9zZW07CiAJfQpAQCAtMTQwOCw3ICsxNDEwLDcgQEAKIAkgKi8KIAlpZiAodW5saWtlbHkob3duZXJkaWVkIHx8ICEoY3VydmFsICYgRlVURVhfVElEX01BU0spKSkgewogCQkvKiBLZWVwIHRoZSBPV05FUl9ESUVEIGJpdCAqLwotCQluZXd2YWwgPSAoY3VydmFsICYgfkZVVEVYX1RJRF9NQVNLKSB8IGN1cnJlbnQtPnBpZDsKKwkJbmV3dmFsID0gKGN1cnZhbCAmIH5GVVRFWF9USURfTUFTSykgfCB0YXNrX3BpZF92bnIoY3VycmVudCk7CiAJCW93bmVyZGllZCA9IDA7CiAJCWxvY2tfdGFrZW4gPSAxOwogCX0KQEAgLTE1ODcsNyArMTU4OSw3IEBACiAJLyoKIAkgKiBXZSByZWxlYXNlIG9ubHkgYSBsb2NrIHdlIGFjdHVhbGx5IG93bjoKIAkgKi8KLQlpZiAoKHV2YWwgJiBGVVRFWF9USURfTUFTSykgIT0gY3VycmVudC0+cGlkKQorCWlmICgodXZhbCAmIEZVVEVYX1RJRF9NQVNLKSAhPSB0YXNrX3BpZF92bnIoY3VycmVudCkpCiAJCXJldHVybiAtRVBFUk07CiAJLyoKIAkgKiBGaXJzdCB0YWtlIGFsbCB0aGUgZnV0ZXggcmVsYXRlZCBsb2NrczoKQEAgLTE2MDgsNyArMTYxMCw3IEBACiAJICogYW55b25lIGVsc2UgdXA6CiAJICovCiAJaWYgKCEodXZhbCAmIEZVVEVYX09XTkVSX0RJRUQpKQotCQl1dmFsID0gY21weGNoZ19mdXRleF92YWx1ZV9sb2NrZWQodWFkZHIsIGN1cnJlbnQtPnBpZCwgMCk7CisJCXV2YWwgPSBjbXB4Y2hnX2Z1dGV4X3ZhbHVlX2xvY2tlZCh1YWRkciwgdGFza19waWRfdm5yKGN1cnJlbnQpLCAwKTsKIAogCiAJaWYgKHVubGlrZWx5KHV2YWwgPT0gLUVGQVVMVCkpCkBAIC0xNjE3LDcgKzE2MTksNyBAQAogCSAqIFJhcmUgY2FzZTogd2UgbWFuYWdlZCB0byByZWxlYXNlIHRoZSBsb2NrIGF0b21pY2FsbHksCiAJICogbm8gbmVlZCB0byB3YWtlIGFueW9uZSBlbHNlIHVwOgogCSAqLwotCWlmICh1bmxpa2VseSh1dmFsID09IGN1cnJlbnQtPnBpZCkpCisJaWYgKHVubGlrZWx5KHV2YWwgPT0gdGFza19waWRfdm5yKGN1cnJlbnQpKSkKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJLyoKQEAgLTE4NTQsNyArMTg1Niw3IEBACiAKIAkJcmV0ID0gLUVTUkNIOwogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CisJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAoIXApCiAJCQlnb3RvIGVycl91bmxvY2s7CiAJCXJldCA9IC1FUEVSTTsKQEAgLTE4ODcsNyArMTg4OSw3IEBACiAJaWYgKGdldF91c2VyKHV2YWwsIHVhZGRyKSkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKCh1dmFsICYgRlVURVhfVElEX01BU0spID09IGN1cnItPnBpZCkgeworCWlmICgodXZhbCAmIEZVVEVYX1RJRF9NQVNLKSA9PSB0YXNrX3BpZF92bnIoY3VycikpIHsKIAkJLyoKIAkJICogT2ssIHRoaXMgZHlpbmcgdGhyZWFkIGlzIHRydWx5IGhvbGRpbmcgYSBmdXRleAogCQkgKiBvZiBpbnRlcmVzdC4gU2V0IHRoZSBPV05FUl9ESUVEIGJpdCBhdG9taWNhbGx5CmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMgYi9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKaW5kZXggMmMyZTI5NS4uMDBiNTcyNiAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4X2NvbXBhdC5jCisrKyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwpAQCAtOCw2ICs4LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvZnV0ZXguaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xMjQsNyArMTI1LDcgQEAKIAogCQlyZXQgPSAtRVNSQ0g7CiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CisJCXAgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCQlpZiAoIXApCiAJCQlnb3RvIGVycl91bmxvY2s7CiAJCXJldCA9IC1FUEVSTTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGRjOGE0NDUuLmI2ZDJmZjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtNDEyLDcgKzQxMiw3IEBACiAJLyoKIAkgKiBXaGVuIHRoZSBjYWxsYmFjayBpcyBydW5uaW5nLCB3ZSBkbyBub3QgcmVwcm9ncmFtIHRoZSBjbG9jayBldmVudAogCSAqIGRldmljZS4gVGhlIHRpbWVyIGNhbGxiYWNrIGlzIGVpdGhlciBydW5uaW5nIG9uIGEgZGlmZmVyZW50IENQVSBvcgotCSAqIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBpbiB0aGUgaHJ0aW1lcl9pbnRlcnVwdCBjb250ZXh0LiBUaGUKKwkgKiB0aGUgY2FsbGJhY2sgaXMgZXhlY3V0ZWQgaW4gdGhlIGhydGltZXJfaW50ZXJydXB0IGNvbnRleHQuIFRoZQogCSAqIHJlcHJvZ3JhbW1pbmcgaXMgaGFuZGxlZCBlaXRoZXIgYnkgdGhlIHNvZnRpcnEsIHdoaWNoIGNhbGxlZCB0aGUKIAkgKiBjYWxsYmFjayBvciBhdCB0aGUgZW5kIG9mIHRoZSBocnRpbWVyX2ludGVycnVwdC4KIAkgKi8KQEAgLTYzOCw3ICs2MzgsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiBDb3VudGVycGFydCB0byBsb2NrX3RpbWVyX2Jhc2UgYWJvdmU6CisgKiBDb3VudGVycGFydCB0byBsb2NrX2hydGltZXJfYmFzZSBhYm92ZToKICAqLwogc3RhdGljIGlubGluZQogdm9pZCB1bmxvY2tfaHJ0aW1lcl9iYXNlKGNvbnN0IHN0cnVjdCBocnRpbWVyICp0aW1lciwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCkBAIC0xMjg2LDggKzEyODYsNyBAQAogbG9uZyBfX3NjaGVkIGhydGltZXJfbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpCiB7CiAJc3RydWN0IGhydGltZXJfc2xlZXBlciB0OwotCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHA7Ci0Jc3RydWN0IHRpbWVzcGVjIHR1OworCXN0cnVjdCB0aW1lc3BlYyAqcm10cDsKIAlrdGltZV90IHRpbWU7CiAKIAlyZXN0YXJ0LT5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKQEAgLTEyOTgsMTQgKzEyOTcsMTIgQEAKIAlpZiAoZG9fbmFub3NsZWVwKCZ0LCBIUlRJTUVSX01PREVfQUJTKSkKIAkJcmV0dXJuIDA7CiAKLQlybXRwID0gKHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKikgcmVzdGFydC0+YXJnMTsKKwlybXRwID0gKHN0cnVjdCB0aW1lc3BlYyAqKXJlc3RhcnQtPmFyZzE7CiAJaWYgKHJtdHApIHsKIAkJdGltZSA9IGt0aW1lX3N1Yih0LnRpbWVyLmV4cGlyZXMsIHQudGltZXIuYmFzZS0+Z2V0X3RpbWUoKSk7CiAJCWlmICh0aW1lLnR2NjQgPD0gMCkKIAkJCXJldHVybiAwOwotCQl0dSA9IGt0aW1lX3RvX3RpbWVzcGVjKHRpbWUpOwotCQlpZiAoY29weV90b191c2VyKHJtdHAsICZ0dSwgc2l6ZW9mKHR1KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJKnJtdHAgPSBrdGltZV90b190aW1lc3BlYyh0aW1lKTsKIAl9CiAKIAlyZXN0YXJ0LT5mbiA9IGhydGltZXJfbmFub3NsZWVwX3Jlc3RhcnQ7CkBAIC0xMzE0LDEyICsxMzExLDExIEBACiAJcmV0dXJuIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CiB9CiAKLWxvbmcgaHJ0aW1lcl9uYW5vc2xlZXAoc3RydWN0IHRpbWVzcGVjICpycXRwLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwLAorbG9uZyBocnRpbWVyX25hbm9zbGVlcChzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVjdCB0aW1lc3BlYyAqcm10cCwKIAkJICAgICAgIGNvbnN0IGVudW0gaHJ0aW1lcl9tb2RlIG1vZGUsIGNvbnN0IGNsb2NraWRfdCBjbG9ja2lkKQogewogCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0OwogCXN0cnVjdCBocnRpbWVyX3NsZWVwZXIgdDsKLQlzdHJ1Y3QgdGltZXNwZWMgdHU7CiAJa3RpbWVfdCByZW07CiAKIAlocnRpbWVyX2luaXQoJnQudGltZXIsIGNsb2NraWQsIG1vZGUpOwpAQCAtMTMzNSw5ICsxMzMxLDcgQEAKIAkJcmVtID0ga3RpbWVfc3ViKHQudGltZXIuZXhwaXJlcywgdC50aW1lci5iYXNlLT5nZXRfdGltZSgpKTsKIAkJaWYgKHJlbS50djY0IDw9IDApCiAJCQlyZXR1cm4gMDsKLQkJdHUgPSBrdGltZV90b190aW1lc3BlYyhyZW0pOwotCQlpZiAoY29weV90b191c2VyKHJtdHAsICZ0dSwgc2l6ZW9mKHR1KSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKKwkJKnJtdHAgPSBrdGltZV90b190aW1lc3BlYyhyZW0pOwogCX0KIAogCXJlc3RhcnQgPSAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrOwpAQCAtMTM1Myw3ICsxMzQ3LDggQEAKIGFzbWxpbmthZ2UgbG9uZwogc3lzX25hbm9zbGVlcChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpycXRwLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwKQogewotCXN0cnVjdCB0aW1lc3BlYyB0dTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHUsIHJtdDsKKwlpbnQgcmV0OwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0dSwgcnF0cCwgc2l6ZW9mKHR1KSkpCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTM2MSw3ICsxMzU2LDE1IEBACiAJaWYgKCF0aW1lc3BlY192YWxpZCgmdHUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBocnRpbWVyX25hbm9zbGVlcCgmdHUsIHJtdHAsIEhSVElNRVJfTU9ERV9SRUwsIENMT0NLX01PTk9UT05JQyk7CisJcmV0ID0gaHJ0aW1lcl9uYW5vc2xlZXAoJnR1LCBybXRwID8gJnJtdCA6IE5VTEwsIEhSVElNRVJfTU9ERV9SRUwsCisJCQkJQ0xPQ0tfTU9OT1RPTklDKTsKKworCWlmIChyZXQgJiYgcm10cCkgeworCQlpZiAoY29weV90b191c2VyKHJtdHAsICZybXQsIHNpemVvZigqcm10cCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9pdGltZXIuYyBiL2tlcm5lbC9pdGltZXIuYwppbmRleCAzMjA1ZThlLi4yZmFiMzQ0IDEwMDY0NAotLS0gYS9rZXJuZWwvaXRpbWVyLmMKKysrIGIva2VybmVsL2l0aW1lci5jCkBAIC0xMzAsNyArMTMwLDcgQEAKIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGl0X3JlYWxfZm4oc3RydWN0IGhydGltZXIgKnRpbWVyKQogewogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpzaWcgPQotCSAgICBjb250YWluZXJfb2YodGltZXIsIHN0cnVjdCBzaWduYWxfc3RydWN0LCByZWFsX3RpbWVyKTsKKwkJY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCwgcmVhbF90aW1lcik7CiAKIAlzZW5kX2dyb3VwX3NpZ19pbmZvKFNJR0FMUk0sIFNFTkRfU0lHX1BSSVYsIHNpZy0+dHNrKTsKIApAQCAtMjkxLDYgKzI5MSw2IEBACiAJCXJldHVybiBlcnJvcjsKIAogCWlmIChjb3B5X3RvX3VzZXIob3ZhbHVlLCAmZ2V0X2J1ZmZlciwgc2l6ZW9mKGdldF9idWZmZXIpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7IAorCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggNzg4NTI2OS4uYWE3NGExZSAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAogaW50IGtleGVjX3Nob3VsZF9jcmFzaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaWYgKGluX2ludGVycnVwdCgpIHx8ICFwLT5waWQgfHwgaXNfaW5pdChwKSB8fCBwYW5pY19vbl9vb3BzKQorCWlmIChpbl9pbnRlcnJ1cHQoKSB8fCAhcC0+cGlkIHx8IGlzX2dsb2JhbF9pbml0KHApIHx8IHBhbmljX29uX29vcHMpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNzg1LDcgKzc4NSw3IEBACiAJCXNpemVfdCB1Y2h1bmssIG1jaHVuazsKIAogCQlwYWdlID0ga2ltYWdlX2FsbG9jX3BhZ2UoaW1hZ2UsIEdGUF9ISUdIVVNFUiwgbWFkZHIpOwotCQlpZiAocGFnZSA9PSAwKSB7CisJCWlmICghcGFnZSkgewogCQkJcmVzdWx0ICA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtODQ0LDcgKzg0NCw3IEBACiAJCXNpemVfdCB1Y2h1bmssIG1jaHVuazsKIAogCQlwYWdlID0gcGZuX3RvX3BhZ2UobWFkZHIgPj4gUEFHRV9TSElGVCk7Ci0JCWlmIChwYWdlID09IDApIHsKKwkJaWYgKCFwYWdlKSB7CiAJCQlyZXN1bHQgID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xMTQ2LDYgKzExNDYsMTcyIEBACiB9CiBtb2R1bGVfaW5pdChjcmFzaF9ub3Rlc19tZW1vcnlfaW5pdCkKIAorCisvKgorICogcGFyc2luZyB0aGUgImNyYXNoa2VybmVsIiBjb21tYW5kbGluZQorICoKKyAqIHRoaXMgY29kZSBpcyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29kZQorICovCisKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcGFyc2VzIGNvbW1hbmQgbGluZXMgaW4gdGhlIGZvcm1hdAorICoKKyAqICAgY3Jhc2hrZXJuZWw9cmFtc2l6ZS1yYW5nZTpzaXplWywuLi5dW0BvZmZzZXRdCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtRUlOVkFMIG9uIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHBhcnNlX2NyYXNoa2VybmVsX21lbShjaGFyIAkJCSpjbWRsaW5lLAorCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcJc3lzdGVtX3JhbSwKKwkJCQkJdW5zaWduZWQgbG9uZyBsb25nCSpjcmFzaF9zaXplLAorCQkJCQl1bnNpZ25lZCBsb25nIGxvbmcJKmNyYXNoX2Jhc2UpCit7CisJY2hhciAqY3VyID0gY21kbGluZSwgKnRtcDsKKworCS8qIGZvciBlYWNoIGVudHJ5IG9mIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdCAqLworCWRvIHsKKwkJdW5zaWduZWQgbG9uZyBsb25nIHN0YXJ0LCBlbmQgPSBVTExPTkdfTUFYLCBzaXplOworCisJCS8qIGdldCB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlICovCisJCXN0YXJ0ID0gbWVtcGFyc2UoY3VyLCAmdG1wKTsKKwkJaWYgKGN1ciA9PSB0bXApIHsKKwkJCXByX3dhcm5pbmcoImNyYXNoa2VybmVsOiBNZW1vcnkgdmFsdWUgZXhwZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY3VyID0gdG1wOworCQlpZiAoKmN1ciAhPSAnLScpIHsKKwkJCXByX3dhcm5pbmcoImNyYXNoa2VybmVsOiAnLScgZXhwZWN0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY3VyKys7CisKKwkJLyogaWYgbm8gJzonIGlzIGhlcmUsIHRoYW4gd2UgcmVhZCB0aGUgZW5kICovCisJCWlmICgqY3VyICE9ICc6JykgeworCQkJZW5kID0gbWVtcGFyc2UoY3VyLCAmdG1wKTsKKwkJCWlmIChjdXIgPT0gdG1wKSB7CisJCQkJcHJfd2FybmluZygiY3Jhc2hrZXJuZWw6IE1lbW9yeSAiCisJCQkJCQkidmFsdWUgZXhwZWN0ZWRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJY3VyID0gdG1wOworCQkJaWYgKGVuZCA8PSBzdGFydCkgeworCQkJCXByX3dhcm5pbmcoImNyYXNoa2VybmVsOiBlbmQgPD0gc3RhcnRcbiIpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJaWYgKCpjdXIgIT0gJzonKSB7CisJCQlwcl93YXJuaW5nKCJjcmFzaGtlcm5lbDogJzonIGV4cGVjdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWN1cisrOworCisJCXNpemUgPSBtZW1wYXJzZShjdXIsICZ0bXApOworCQlpZiAoY3VyID09IHRtcCkgeworCQkJcHJfd2FybmluZygiTWVtb3J5IHZhbHVlIGV4cGVjdGVkXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWN1ciA9IHRtcDsKKwkJaWYgKHNpemUgPj0gc3lzdGVtX3JhbSkgeworCQkJcHJfd2FybmluZygiY3Jhc2hrZXJuZWw6IGludmFsaWQgc2l6ZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCS8qIG1hdGNoID8gKi8KKwkJaWYgKHN5c3RlbV9yYW0gPj0gc3RhcnQgJiYgc3lzdGVtX3JhbSA8PSBlbmQpIHsKKwkJCSpjcmFzaF9zaXplID0gc2l6ZTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoKmN1cisrID09ICcsJyk7CisKKwlpZiAoKmNyYXNoX3NpemUgPiAwKSB7CisJCXdoaWxlICgqY3VyICE9ICcgJyAmJiAqY3VyICE9ICdAJykKKwkJCWN1cisrOworCQlpZiAoKmN1ciA9PSAnQCcpIHsKKwkJCWN1cisrOworCQkJKmNyYXNoX2Jhc2UgPSBtZW1wYXJzZShjdXIsICZ0bXApOworCQkJaWYgKGN1ciA9PSB0bXApIHsKKwkJCQlwcl93YXJuaW5nKCJNZW1vcnkgdmFsdWUgZXhwZWN0ZWQgIgorCQkJCQkJImFmdGVyICdAJ1xuIik7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoYXQgZnVuY3Rpb24gcGFyc2VzICJzaW1wbGUiIChvbGQpIGNyYXNoa2VybmVsIGNvbW1hbmQgbGluZXMgbGlrZQorICoKKyAqIAljcmFzaGtlcm5lbD1zaXplW0BvZmZzZXRdCisgKgorICogSXQgcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC1FSU5WQUwgb24gZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBfX2luaXQgcGFyc2VfY3Jhc2hrZXJuZWxfc2ltcGxlKGNoYXIgCQkqY21kbGluZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIAkqY3Jhc2hfc2l6ZSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBsb25nIAkqY3Jhc2hfYmFzZSkKK3sKKwljaGFyICpjdXIgPSBjbWRsaW5lOworCisJKmNyYXNoX3NpemUgPSBtZW1wYXJzZShjbWRsaW5lLCAmY3VyKTsKKwlpZiAoY21kbGluZSA9PSBjdXIpIHsKKwkJcHJfd2FybmluZygiY3Jhc2hrZXJuZWw6IG1lbW9yeSB2YWx1ZSBleHBlY3RlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgqY3VyID09ICdAJykKKwkJKmNyYXNoX2Jhc2UgPSBtZW1wYXJzZShjdXIrMSwgJmN1cik7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBjb21tYW5kIGxpbmUgcGFyc2luZyBhbmQgc2hvdWxkIGJlCisgKiBjYWxsZWQgZnJvbSB0aGUgYXJjaC1zcGVjaWZpYyBjb2RlLgorICovCitpbnQgX19pbml0IHBhcnNlX2NyYXNoa2VybmVsKGNoYXIgCQkgKmNtZGxpbmUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXN0ZW1fcmFtLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGxvbmcgKmNyYXNoX3NpemUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAqY3Jhc2hfYmFzZSkKK3sKKwljaGFyIAkqcCA9IGNtZGxpbmUsICpja19jbWRsaW5lID0gTlVMTDsKKwljaGFyCSpmaXJzdF9jb2xvbiwgKmZpcnN0X3NwYWNlOworCisJQlVHX09OKCFjcmFzaF9zaXplIHx8ICFjcmFzaF9iYXNlKTsKKwkqY3Jhc2hfc2l6ZSA9IDA7CisJKmNyYXNoX2Jhc2UgPSAwOworCisJLyogZmluZCBjcmFzaGtlcm5lbCBhbmQgdXNlIHRoZSBsYXN0IG9uZSBpZiB0aGVyZSBhcmUgbW9yZSAqLworCXAgPSBzdHJzdHIocCwgImNyYXNoa2VybmVsPSIpOworCXdoaWxlIChwKSB7CisJCWNrX2NtZGxpbmUgPSBwOworCQlwID0gc3Ryc3RyKHArMSwgImNyYXNoa2VybmVsPSIpOworCX0KKworCWlmICghY2tfY21kbGluZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlja19jbWRsaW5lICs9IDEyOyAvKiBzdHJsZW4oImNyYXNoa2VybmVsPSIpICovCisKKwkvKgorCSAqIGlmIHRoZSBjb21tYW5kbGluZSBjb250YWlucyBhICc6JywgdGhlbiB0aGF0J3MgdGhlIGV4dGVuZGVkCisJICogc3ludGF4IC0tIGlmIG5vdCwgaXQgbXVzdCBiZSB0aGUgY2xhc3NpYyBzeW50YXgKKwkgKi8KKwlmaXJzdF9jb2xvbiA9IHN0cmNocihja19jbWRsaW5lLCAnOicpOworCWZpcnN0X3NwYWNlID0gc3RyY2hyKGNrX2NtZGxpbmUsICcgJyk7CisJaWYgKGZpcnN0X2NvbG9uICYmICghZmlyc3Rfc3BhY2UgfHwgZmlyc3RfY29sb24gPCBmaXJzdF9zcGFjZSkpCisJCXJldHVybiBwYXJzZV9jcmFzaGtlcm5lbF9tZW0oY2tfY21kbGluZSwgc3lzdGVtX3JhbSwKKwkJCQljcmFzaF9zaXplLCBjcmFzaF9iYXNlKTsKKwllbHNlCisJCXJldHVybiBwYXJzZV9jcmFzaGtlcm5lbF9zaW1wbGUoY2tfY21kbGluZSwgY3Jhc2hfc2l6ZSwKKwkJCQljcmFzaF9iYXNlKTsKKworCXJldHVybiAwOworfQorCisKKwogdm9pZCBjcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKIHsKIAl1MzIgKmJ1ZjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2RlcC5jCmluZGV4IGE2ZjFlZTkuLjU1ZmUwYzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NrZGVwLmMKKysrIGIva2VybmVsL2xvY2tkZXAuYwpAQCAtNTExLDExICs1MTEsMTEgQEAKIAlpbnQgaSwgZGVwdGggPSBjdXJyLT5sb2NrZGVwX2RlcHRoOwogCiAJaWYgKCFkZXB0aCkgewotCQlwcmludGsoIm5vIGxvY2tzIGhlbGQgYnkgJXMvJWQuXG4iLCBjdXJyLT5jb21tLCBjdXJyLT5waWQpOworCQlwcmludGsoIm5vIGxvY2tzIGhlbGQgYnkgJXMvJWQuXG4iLCBjdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSk7CiAJCXJldHVybjsKIAl9CiAJcHJpbnRrKCIlZCBsb2NrJXMgaGVsZCBieSAlcy8lZDpcbiIsCi0JCWRlcHRoLCBkZXB0aCA+IDEgPyAicyIgOiAiIiwgY3Vyci0+Y29tbSwgY3Vyci0+cGlkKTsKKwkJZGVwdGgsIGRlcHRoID4gMSA/ICJzIiA6ICIiLCBjdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykgewogCQlwcmludGsoIiAjJWQ6ICIsIGkpOwpAQCAtOTA0LDcgKzkwNCw3IEBACiAJcHJpbnRfa2VybmVsX3ZlcnNpb24oKTsKIAlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcHJpbnRrKCIlcy8lZCBpcyB0cnlpbmcgdG8gYWNxdWlyZSBsb2NrOlxuIiwKLQkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkKTsKKwkJY3Vyci0+Y29tbSwgdGFza19waWRfbnIoY3VycikpOwogCXByaW50X2xvY2soY2hlY2tfc291cmNlKTsKIAlwcmludGsoIlxuYnV0IHRhc2sgaXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6XG4iKTsKIAlwcmludF9sb2NrKGNoZWNrX3RhcmdldCk7CkBAIC0xMDg1LDcgKzEwODUsNyBAQAogCXByaW50X2tlcm5lbF92ZXJzaW9uKCk7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcHJpbnRrKCIlcy8lZCBbSEMldVslbHVdOlNDJXVbJWx1XTpIRSV1OlNFJXVdIGlzIHRyeWluZyB0byBhY3F1aXJlOlxuIiwKLQkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkLAorCQljdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSwKIAkJY3Vyci0+aGFyZGlycV9jb250ZXh0LCBoYXJkaXJxX2NvdW50KCkgPj4gSEFSRElSUV9TSElGVCwKIAkJY3Vyci0+c29mdGlycV9jb250ZXh0LCBzb2Z0aXJxX2NvdW50KCkgPj4gU09GVElSUV9TSElGVCwKIAkJY3Vyci0+aGFyZGlycXNfZW5hYmxlZCwKQEAgLTEyMzcsNyArMTIzNyw3IEBACiAJcHJpbnRfa2VybmVsX3ZlcnNpb24oKTsKIAlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoIiVzLyVkIGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6XG4iLAotCQljdXJyLT5jb21tLCBjdXJyLT5waWQpOworCQljdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSk7CiAJcHJpbnRfbG9jayhuZXh0KTsKIAlwcmludGsoIlxuYnV0IHRhc2sgaXMgYWxyZWFkeSBob2xkaW5nIGxvY2s6XG4iKTsKIAlwcmludF9sb2NrKHByZXYpOwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9jaGFpbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKLQkgICAgICAgCXN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLCBpbnQgY2hhaW5faGVhZCwgdTY0IGNoYWluX2tleSkKKwkJc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssIGludCBjaGFpbl9oZWFkLCB1NjQgY2hhaW5fa2V5KQogewogCS8qCiAJICogVHJ5bG9jayBuZWVkcyB0byBtYWludGFpbiB0aGUgc3RhY2sgb2YgaGVsZCBsb2NrcywgYnV0IGl0CkBAIC0xNjQxLDcgKzE2NDEsNyBAQAogCQl1c2FnZV9zdHJbcHJldl9iaXRdLCB1c2FnZV9zdHJbbmV3X2JpdF0pOwogCiAJcHJpbnRrKCIlcy8lZCBbSEMldVslbHVdOlNDJXVbJWx1XTpIRSV1OlNFJXVdIHRha2VzOlxuIiwKLQkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkLAorCQljdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSwKIAkJdHJhY2VfaGFyZGlycV9jb250ZXh0KGN1cnIpLCBoYXJkaXJxX2NvdW50KCkgPj4gSEFSRElSUV9TSElGVCwKIAkJdHJhY2Vfc29mdGlycV9jb250ZXh0KGN1cnIpLCBzb2Z0aXJxX2NvdW50KCkgPj4gU09GVElSUV9TSElGVCwKIAkJdHJhY2VfaGFyZGlycXNfZW5hYmxlZChjdXJyKSwKQEAgLTE2OTQsNyArMTY5NCw3IEBACiAJcHJpbnRfa2VybmVsX3ZlcnNpb24oKTsKIAlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoIiVzLyVkIGp1c3QgY2hhbmdlZCB0aGUgc3RhdGUgb2YgbG9jazpcbiIsCi0JCWN1cnItPmNvbW0sIGN1cnItPnBpZCk7CisJCWN1cnItPmNvbW0sIHRhc2tfcGlkX25yKGN1cnIpKTsKIAlwcmludF9sb2NrKHRoaXMpOwogCWlmIChmb3J3YXJkcykKIAkJcHJpbnRrKCJidXQgdGhpcyBsb2NrIHRvb2sgYW5vdGhlciwgJXMtaXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OlxuIiwgaXJxY2xhc3MpOwpAQCAtMjQ4Nyw3ICsyNDg3LDcgQEAKIAlwcmludGsoICAiWyBCVUc6IGJhZCB1bmxvY2sgYmFsYW5jZSBkZXRlY3RlZCEgXVxuIik7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50aygiJXMvJWQgaXMgdHJ5aW5nIHRvIHJlbGVhc2UgbG9jayAoIiwKLQkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkKTsKKwkJY3Vyci0+Y29tbSwgdGFza19waWRfbnIoY3VycikpOwogCXByaW50X2xvY2tkZXBfY2FjaGUobG9jayk7CiAJcHJpbnRrKCIpIGF0OlxuIik7CiAJcHJpbnRfaXBfc3ltKGlwKTsKQEAgLTI3MzcsNyArMjczNyw3IEBACiAJcHJpbnRrKCAgIlsgQlVHOiBiYWQgY29udGVudGlvbiBkZXRlY3RlZCEgXVxuIik7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcHJpbnRrKCIlcy8lZCBpcyB0cnlpbmcgdG8gY29udGVuZCBsb2NrICgiLAotCQljdXJyLT5jb21tLCBjdXJyLT5waWQpOworCQljdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSk7CiAJcHJpbnRfbG9ja2RlcF9jYWNoZShsb2NrKTsKIAlwcmludGsoIikgYXQ6XG4iKTsKIAlwcmludF9pcF9zeW0oaXApOwpAQCAtMzA3Miw3ICszMDcyLDcgQEAKIAlwcmludGsoICAiWyBCVUc6IGhlbGQgbG9jayBmcmVlZCEgXVxuIik7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50aygiJXMvJWQgaXMgZnJlZWluZyBtZW1vcnkgJXAtJXAsIHdpdGggYSBsb2NrIHN0aWxsIGhlbGQgdGhlcmUhXG4iLAotCQljdXJyLT5jb21tLCBjdXJyLT5waWQsIG1lbV9mcm9tLCBtZW1fdG8tMSk7CisJCWN1cnItPmNvbW0sIHRhc2tfcGlkX25yKGN1cnIpLCBtZW1fZnJvbSwgbWVtX3RvLTEpOwogCXByaW50X2xvY2soaGxvY2spOwogCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKIApAQCAtMzEyNSw3ICszMTI1LDcgQEAKIAlwcmludGsoICAiWyBCVUc6IGxvY2sgaGVsZCBhdCB0YXNrIGV4aXQgdGltZSEgXVxuIik7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50aygiJXMvJWQgaXMgZXhpdGluZyB3aXRoIGxvY2tzIHN0aWxsIGhlbGQhXG4iLAotCQljdXJyLT5jb21tLCBjdXJyLT5waWQpOworCQljdXJyLT5jb21tLCB0YXNrX3BpZF9ucihjdXJyKSk7CiAJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCiAJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL21hcmtlci5jIGIva2VybmVsL21hcmtlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjYjQ4ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbWFya2VyLmMKQEAgLTAsMCArMSw1MjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgTWF0aGlldSBEZXNub3llcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKK2V4dGVybiBzdHJ1Y3QgbWFya2VyIF9fc3RhcnRfX19tYXJrZXJzW107CitleHRlcm4gc3RydWN0IG1hcmtlciBfX3N0b3BfX19tYXJrZXJzW107CisKKy8qCisgKiBtb2R1bGVfbXV0ZXggbmVzdHMgaW5zaWRlIG1hcmtlcnNfbXV0ZXguIE1hcmtlcnMgbXV0ZXggcHJvdGVjdHMgdGhlIGJ1aWx0aW4KKyAqIGFuZCBtb2R1bGUgbWFya2VycywgdGhlIGhhc2ggdGFibGUgYW5kIGRlZmVycmVkX3N5bmMuCisgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgobWFya2Vyc19tdXRleCk7CisKKy8qCisgKiBNYXJrZXIgZGVmZXJyZWQgc3luY2hyb25pemF0aW9uLgorICogVXBvbiBtYXJrZXIgcHJvYmVfdW5yZWdpc3Rlciwgd2UgZGVsYXkgY2FsbCB0byBzeW5jaHJvbml6ZV9zY2hlZCgpIHRvCisgKiBhY2NlbGVyYXRlIG1hc3MgdW5yZWdpc3RyYXRpb24gKG9ubHkgd2hlbiB0aGVyZSBpcyBubyBtb3JlIHJlZmVyZW5jZSB0byBhCisgKiBnaXZlbiBtb2R1bGUgZG8gd2UgY2FsbCBzeW5jaHJvbml6ZV9zY2hlZCgpKS4gSG93ZXZlciwgd2UgbmVlZCB0byBtYWtlIHN1cmUKKyAqIGV2ZXJ5IGNyaXRpY2FsIHJlZ2lvbiBoYXMgZW5kZWQgYmVmb3JlIHdlIHJlLWFybSBhIG1hcmtlciB0aGF0IGhhcyBiZWVuCisgKiB1bnJlZ2lzdGVyZWQgYW5kIHRoZW4gcmVnaXN0ZXJlZCBiYWNrIHdpdGggYSBkaWZmZXJlbnQgcHJvYmUgZGF0YS4KKyAqLworc3RhdGljIGludCBkZWZlcnJlZF9zeW5jOworCisvKgorICogTWFya2VyIGhhc2ggdGFibGUsIGNvbnRhaW5pbmcgdGhlIGFjdGl2ZSBtYXJrZXJzLgorICogUHJvdGVjdGVkIGJ5IG1vZHVsZV9tdXRleC4KKyAqLworI2RlZmluZSBNQVJLRVJfSEFTSF9CSVRTIDYKKyNkZWZpbmUgTUFSS0VSX1RBQkxFX1NJWkUgKDEgPDwgTUFSS0VSX0hBU0hfQklUUykKKworc3RydWN0IG1hcmtlcl9lbnRyeSB7CisJc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7CisJY2hhciAqZm9ybWF0OworCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZTsKKwl2b2lkICpwcml2YXRlOworCWludCByZWZjb3VudDsJLyogTnVtYmVyIG9mIHRpbWVzIGFybWVkLiAwIGlmIGRpc2FybWVkLiAqLworCWNoYXIgbmFtZVswXTsJLyogQ29udGFpbnMgbmFtZSdcMCdmb3JtYXQnXDAnICovCit9OworCitzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgbWFya2VyX3RhYmxlW01BUktFUl9UQUJMRV9TSVpFXTsKKworLyoqCisgKiBfX21hcmtfZW1wdHlfZnVuY3Rpb24gLSBFbXB0eSBwcm9iZSBjYWxsYmFjaworICogQG1kYXRhOiBwb2ludGVyIG9mIHR5cGUgY29uc3Qgc3RydWN0IG1hcmtlcgorICogQGZtdDogZm9ybWF0IHN0cmluZworICogQC4uLjogdmFyaWFibGUgYXJndW1lbnQgbGlzdAorICoKKyAqIEVtcHR5IGNhbGxiYWNrIHByb3ZpZGVkIGFzIGEgcHJvYmUgdG8gdGhlIG1hcmtlcnMuIEJ5IHByb3ZpZGluZyB0aGlzIHRvIGEKKyAqIGRpc2FibGVkIG1hcmtlciwgd2UgbWFrZSBzdXJlIHRoZSAgZXhlY3V0aW9uIGZsb3cgaXMgYWx3YXlzIHZhbGlkIGV2ZW4KKyAqIHRob3VnaCB0aGUgZnVuY3Rpb24gcG9pbnRlciBjaGFuZ2UgYW5kIHRoZSBtYXJrZXIgZW5hYmxpbmcgYXJlIHR3byBkaXN0aW5jdAorICogb3BlcmF0aW9ucyB0aGF0IG1vZGlmaWVzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBwcmVlbXB0aWJsZSBjb2RlLgorICovCit2b2lkIF9fbWFya19lbXB0eV9mdW5jdGlvbihjb25zdCBzdHJ1Y3QgbWFya2VyICptZGF0YSwgdm9pZCAqcHJpdmF0ZSwKKwljb25zdCBjaGFyICpmbXQsIC4uLikKK3sKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fbWFya19lbXB0eV9mdW5jdGlvbik7CisKKy8qCisgKiBHZXQgbWFya2VyIGlmIHRoZSBtYXJrZXIgaXMgcHJlc2VudCBpbiB0aGUgbWFya2VyIGhhc2ggdGFibGUuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG1hcmtlcnNfbXV0ZXggaGVsZC4KKyAqIFJldHVybnMgTlVMTCBpZiBub3QgcHJlc2VudC4KKyAqLworc3RhdGljIHN0cnVjdCBtYXJrZXJfZW50cnkgKmdldF9tYXJrZXIoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplOworCXUzMiBoYXNoID0gamhhc2gobmFtZSwgc3RybGVuKG5hbWUpLCAwKTsKKworCWhlYWQgPSAmbWFya2VyX3RhYmxlW2hhc2ggJiAoKDEgPDwgTUFSS0VSX0hBU0hfQklUUyktMSldOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsIGhlYWQsIGhsaXN0KSB7CisJCWlmICghc3RyY21wKG5hbWUsIGUtPm5hbWUpKQorCQkJcmV0dXJuIGU7CisJfQorCXJldHVybiBOVUxMOworfQorCisvKgorICogQWRkIHRoZSBtYXJrZXIgdG8gdGhlIG1hcmtlciBoYXNoIHRhYmxlLiBNdXN0IGJlIGNhbGxlZCB3aXRoIG1hcmtlcnNfbXV0ZXgKKyAqIGhlbGQuCisgKi8KK3N0YXRpYyBpbnQgYWRkX21hcmtlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsCisJbWFya2VyX3Byb2JlX2Z1bmMgKnByb2JlLCB2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7CisJc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpICsgMTsKKwlzaXplX3QgZm9ybWF0X2xlbiA9IDA7CisJdTMyIGhhc2ggPSBqaGFzaChuYW1lLCBuYW1lX2xlbi0xLCAwKTsKKworCWlmIChmb3JtYXQpCisJCWZvcm1hdF9sZW4gPSBzdHJsZW4oZm9ybWF0KSArIDE7CisJaGVhZCA9ICZtYXJrZXJfdGFibGVbaGFzaCAmICgoMSA8PCBNQVJLRVJfSEFTSF9CSVRTKS0xKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZSwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRQorCQkJCSJNYXJrZXIgJXMgYnVzeSwgcHJvYmUgJXAgYWxyZWFkeSBpbnN0YWxsZWRcbiIsCisJCQkJbmFtZSwgZS0+cHJvYmUpOworCQkJcmV0dXJuIC1FQlVTWTsJLyogQWxyZWFkeSB0aGVyZSAqLworCQl9CisJfQorCS8qCisJICogVXNpbmcga21hbGxvYyBoZXJlIHRvIGFsbG9jYXRlIGEgdmFyaWFibGUgbGVuZ3RoIGVsZW1lbnQuIENvdWxkCisJICogY2F1c2Ugc29tZSBtZW1vcnkgZnJhZ21lbnRhdGlvbiBpZiBvdmVydXNlZC4KKwkgKi8KKwllID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG1hcmtlcl9lbnRyeSkgKyBuYW1lX2xlbiArIGZvcm1hdF9sZW4sCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIWUpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweSgmZS0+bmFtZVswXSwgbmFtZSwgbmFtZV9sZW4pOworCWlmIChmb3JtYXQpIHsKKwkJZS0+Zm9ybWF0ID0gJmUtPm5hbWVbbmFtZV9sZW5dOworCQltZW1jcHkoZS0+Zm9ybWF0LCBmb3JtYXQsIGZvcm1hdF9sZW4pOworCQl0cmFjZV9tYXJrKGNvcmVfbWFya2VyX2Zvcm1hdCwgIm5hbWUgJXMgZm9ybWF0ICVzIiwKKwkJCQllLT5uYW1lLCBlLT5mb3JtYXQpOworCX0gZWxzZQorCQllLT5mb3JtYXQgPSBOVUxMOworCWUtPnByb2JlID0gcHJvYmU7CisJZS0+cHJpdmF0ZSA9IHByaXZhdGU7CisJZS0+cmVmY291bnQgPSAwOworCWhsaXN0X2FkZF9oZWFkKCZlLT5obGlzdCwgaGVhZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZW1vdmUgdGhlIG1hcmtlciBmcm9tIHRoZSBtYXJrZXIgaGFzaCB0YWJsZS4gTXVzdCBiZSBjYWxsZWQgd2l0aCBtdXRleF9sb2NrCisgKiBoZWxkLgorICovCitzdGF0aWMgdm9pZCAqcmVtb3ZlX21hcmtlcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7CisJaW50IGZvdW5kID0gMDsKKwlzaXplX3QgbGVuID0gc3RybGVuKG5hbWUpICsgMTsKKwl2b2lkICpwcml2YXRlID0gTlVMTDsKKwl1MzIgaGFzaCA9IGpoYXNoKG5hbWUsIGxlbi0xLCAwKTsKKworCWhlYWQgPSAmbWFya2VyX3RhYmxlW2hhc2ggJiAoKDEgPDwgTUFSS0VSX0hBU0hfQklUUyktMSldOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsIGhlYWQsIGhsaXN0KSB7CisJCWlmICghc3RyY21wKG5hbWUsIGUtPm5hbWUpKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZm91bmQpIHsKKwkJcHJpdmF0ZSA9IGUtPnByaXZhdGU7CisJCWhsaXN0X2RlbCgmZS0+aGxpc3QpOworCQlrZnJlZShlKTsKKwl9CisJcmV0dXJuIHByaXZhdGU7Cit9CisKKy8qCisgKiBTZXQgdGhlIG1hcmtfZW50cnkgZm9ybWF0IHRvIHRoZSBmb3JtYXQgZm91bmQgaW4gdGhlIGVsZW1lbnQuCisgKi8KK3N0YXRpYyBpbnQgbWFya2VyX3NldF9mb3JtYXQoc3RydWN0IG1hcmtlcl9lbnRyeSAqKmVudHJ5LCBjb25zdCBjaGFyICpmb3JtYXQpCit7CisJc3RydWN0IG1hcmtlcl9lbnRyeSAqZTsKKwlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4oKCplbnRyeSktPm5hbWUpICsgMTsKKwlzaXplX3QgZm9ybWF0X2xlbiA9IHN0cmxlbihmb3JtYXQpICsgMTsKKworCWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFya2VyX2VudHJ5KSArIG5hbWVfbGVuICsgZm9ybWF0X2xlbiwKKwkJCUdGUF9LRVJORUwpOworCWlmICghZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbWVtY3B5KCZlLT5uYW1lWzBdLCAoKmVudHJ5KS0+bmFtZSwgbmFtZV9sZW4pOworCWUtPmZvcm1hdCA9ICZlLT5uYW1lW25hbWVfbGVuXTsKKwltZW1jcHkoZS0+Zm9ybWF0LCBmb3JtYXQsIGZvcm1hdF9sZW4pOworCWUtPnByb2JlID0gKCplbnRyeSktPnByb2JlOworCWUtPnByaXZhdGUgPSAoKmVudHJ5KS0+cHJpdmF0ZTsKKwllLT5yZWZjb3VudCA9ICgqZW50cnkpLT5yZWZjb3VudDsKKwlobGlzdF9hZGRfYmVmb3JlKCZlLT5obGlzdCwgJigqZW50cnkpLT5obGlzdCk7CisJaGxpc3RfZGVsKCYoKmVudHJ5KS0+aGxpc3QpOworCWtmcmVlKCplbnRyeSk7CisJKmVudHJ5ID0gZTsKKwl0cmFjZV9tYXJrKGNvcmVfbWFya2VyX2Zvcm1hdCwgIm5hbWUgJXMgZm9ybWF0ICVzIiwKKwkJCWUtPm5hbWUsIGUtPmZvcm1hdCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXRzIHRoZSBwcm9iZSBjYWxsYmFjayBjb3JyZXNwb25kaW5nIHRvIG9uZSBtYXJrZXIuCisgKi8KK3N0YXRpYyBpbnQgc2V0X21hcmtlcihzdHJ1Y3QgbWFya2VyX2VudHJ5ICoqZW50cnksIHN0cnVjdCBtYXJrZXIgKmVsZW0pCit7CisJaW50IHJldDsKKwlXQVJOX09OKHN0cmNtcCgoKmVudHJ5KS0+bmFtZSwgZWxlbS0+bmFtZSkgIT0gMCk7CisKKwlpZiAoKCplbnRyeSktPmZvcm1hdCkgeworCQlpZiAoc3RyY21wKCgqZW50cnkpLT5mb3JtYXQsIGVsZW0tPmZvcm1hdCkgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFCisJCQkJIkZvcm1hdCBtaXNtYXRjaCBmb3IgcHJvYmUgJXMgIgorCQkJCSIoJXMpLCBtYXJrZXIgKCVzKVxuIiwKKwkJCQkoKmVudHJ5KS0+bmFtZSwKKwkJCQkoKmVudHJ5KS0+Zm9ybWF0LAorCQkJCWVsZW0tPmZvcm1hdCk7CisJCQlyZXR1cm4gLUVQRVJNOworCQl9CisJfSBlbHNlIHsKKwkJcmV0ID0gbWFya2VyX3NldF9mb3JtYXQoZW50cnksIGVsZW0tPmZvcm1hdCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKwllbGVtLT5jYWxsID0gKCplbnRyeSktPnByb2JlOworCWVsZW0tPnByaXZhdGUgPSAoKmVudHJ5KS0+cHJpdmF0ZTsKKwllbGVtLT5zdGF0ZSA9IDE7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEaXNhYmxlIGEgbWFya2VyIGFuZCBpdHMgcHJvYmUgY2FsbGJhY2suCisgKiBOb3RlOiBvbmx5IGFmdGVyIGEgc3luY2hyb25pemVfc2NoZWQoKSBpc3N1ZWQgYWZ0ZXIgc2V0dGluZyBlbGVtLT5jYWxsIHRvIHRoZQorICogZW1wdHkgZnVuY3Rpb24gaW5zdXJlcyB0aGF0IHRoZSBvcmlnaW5hbCBjYWxsYmFjayBpcyBub3QgdXNlZCBhbnltb3JlLiBUaGlzCisgKiBpbnN1cmVkIGJ5IHByZWVtcHRpb24gZGlzYWJsaW5nIGFyb3VuZCB0aGUgY2FsbCBzaXRlLgorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX21hcmtlcihzdHJ1Y3QgbWFya2VyICplbGVtKQoreworCWVsZW0tPnN0YXRlID0gMDsKKwllbGVtLT5jYWxsID0gX19tYXJrX2VtcHR5X2Z1bmN0aW9uOworCS8qCisJICogTGVhdmUgdGhlIHByaXZhdGUgZGF0YSBhbmQgaWQgdGhlcmUsIGJlY2F1c2UgcmVtb3ZhbCBpcyByYWN5IGFuZAorCSAqIHNob3VsZCBiZSBkb25lIG9ubHkgYWZ0ZXIgYSBzeW5jaHJvbml6ZV9zY2hlZCgpLiBUaGVzZSBhcmUgbmV2ZXIgdXNlZAorCSAqIHVudGlsIHRoZSBuZXh0IGluaXRpYWxpemF0aW9uIGFueXdheS4KKwkgKi8KK30KKworLyoqCisgKiBtYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlIC0gVXBkYXRlIGEgcHJvYmUgcmFuZ2UKKyAqIEBiZWdpbjogYmVnaW5uaW5nIG9mIHRoZSByYW5nZQorICogQGVuZDogZW5kIG9mIHRoZSByYW5nZQorICogQHByb2JlX21vZHVsZTogbW9kdWxlIGFkZHJlc3Mgb2YgdGhlIHByb2JlIGJlaW5nIHVwZGF0ZWQKKyAqIEByZWZjb3VudDogbnVtYmVyIG9mIHJlZmVyZW5jZXMgbGVmdCB0byB0aGUgZ2l2ZW4gcHJvYmVfbW9kdWxlIChvdXQpCisgKgorICogVXBkYXRlcyB0aGUgcHJvYmUgY2FsbGJhY2sgY29ycmVzcG9uZGluZyB0byBhIHJhbmdlIG9mIG1hcmtlcnMuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIG1hcmtlcnNfbXV0ZXggaGVsZC4KKyAqLwordm9pZCBtYXJrZXJfdXBkYXRlX3Byb2JlX3JhbmdlKHN0cnVjdCBtYXJrZXIgKmJlZ2luLAorCXN0cnVjdCBtYXJrZXIgKmVuZCwgc3RydWN0IG1vZHVsZSAqcHJvYmVfbW9kdWxlLAorCWludCAqcmVmY291bnQpCit7CisJc3RydWN0IG1hcmtlciAqaXRlcjsKKwlzdHJ1Y3QgbWFya2VyX2VudHJ5ICptYXJrX2VudHJ5OworCisJZm9yIChpdGVyID0gYmVnaW47IGl0ZXIgPCBlbmQ7IGl0ZXIrKykgeworCQltYXJrX2VudHJ5ID0gZ2V0X21hcmtlcihpdGVyLT5uYW1lKTsKKwkJaWYgKG1hcmtfZW50cnkgJiYgbWFya19lbnRyeS0+cmVmY291bnQpIHsKKwkJCXNldF9tYXJrZXIoJm1hcmtfZW50cnksIGl0ZXIpOworCQkJLyoKKwkJCSAqIGlnbm9yZSBlcnJvciwgY29udGludWUKKwkJCSAqLworCQkJaWYgKHByb2JlX21vZHVsZSkKKwkJCQlpZiAocHJvYmVfbW9kdWxlID09CisJCQlfX21vZHVsZV90ZXh0X2FkZHJlc3MoKHVuc2lnbmVkIGxvbmcpbWFya19lbnRyeS0+cHJvYmUpKQorCQkJCQkoKnJlZmNvdW50KSsrOworCQl9IGVsc2UgeworCQkJZGlzYWJsZV9tYXJrZXIoaXRlcik7CisJCX0KKwl9Cit9CisKKy8qCisgKiBVcGRhdGUgcHJvYmVzLCByZW1vdmluZyB0aGUgZmF1bHR5IHByb2Jlcy4KKyAqIElzc3VlcyBhIHN5bmNocm9uaXplX3NjaGVkKCkgd2hlbiBubyByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBwYXNzZWQKKyAqIGFzIHBhcmFtZXRlciBpcyBmb3VuZCBpbiB0aGUgcHJvYmVzIHNvIHRoZSBwcm9iZSBtb2R1bGUgY2FuIGJlCisgKiBzYWZlbHkgdW5sb2FkZWQgZnJvbSBub3cgb24uCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtlcl91cGRhdGVfcHJvYmVzKHN0cnVjdCBtb2R1bGUgKnByb2JlX21vZHVsZSkKK3sKKwlpbnQgcmVmY291bnQgPSAwOworCisJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CisJLyogQ29yZSBrZXJuZWwgbWFya2VycyAqLworCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UoX19zdGFydF9fX21hcmtlcnMsCisJCQlfX3N0b3BfX19tYXJrZXJzLCBwcm9iZV9tb2R1bGUsICZyZWZjb3VudCk7CisJLyogTWFya2VycyBpbiBtb2R1bGVzLiAqLworCW1vZHVsZV91cGRhdGVfbWFya2Vycyhwcm9iZV9tb2R1bGUsICZyZWZjb3VudCk7CisJaWYgKHByb2JlX21vZHVsZSAmJiByZWZjb3VudCA9PSAwKSB7CisJCXN5bmNocm9uaXplX3NjaGVkKCk7CisJCWRlZmVycmVkX3N5bmMgPSAwOworCX0KKwltdXRleF91bmxvY2soJm1hcmtlcnNfbXV0ZXgpOworfQorCisvKioKKyAqIG1hcmtlcl9wcm9iZV9yZWdpc3RlciAtICBDb25uZWN0IGEgcHJvYmUgdG8gYSBtYXJrZXIKKyAqIEBuYW1lOiBtYXJrZXIgbmFtZQorICogQGZvcm1hdDogZm9ybWF0IHN0cmluZworICogQHByb2JlOiBwcm9iZSBoYW5kbGVyCisgKiBAcHJpdmF0ZTogcHJvYmUgcHJpdmF0ZSBkYXRhCisgKgorICogcHJpdmF0ZSBkYXRhIG11c3QgYmUgYSB2YWxpZCBhbGxvY2F0ZWQgbWVtb3J5IGFkZHJlc3MsIG9yIE5VTEwuCisgKiBSZXR1cm5zIDAgaWYgb2ssIGVycm9yIHZhbHVlIG9uIGVycm9yLgorICovCitpbnQgbWFya2VyX3Byb2JlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmZvcm1hdCwKKwkJCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZSwgdm9pZCAqcHJpdmF0ZSkKK3sKKwlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeTsKKwlpbnQgcmV0ID0gMCwgbmVlZF91cGRhdGUgPSAwOworCisJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CisJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOworCWlmIChlbnRyeSAmJiBlbnRyeS0+cmVmY291bnQpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKGRlZmVycmVkX3N5bmMpIHsKKwkJc3luY2hyb25pemVfc2NoZWQoKTsKKwkJZGVmZXJyZWRfc3luYyA9IDA7CisJfQorCXJldCA9IGFkZF9tYXJrZXIobmFtZSwgZm9ybWF0LCBwcm9iZSwgcHJpdmF0ZSk7CisJaWYgKHJldCkKKwkJZ290byBlbmQ7CisJbmVlZF91cGRhdGUgPSAxOworZW5kOgorCW11dGV4X3VubG9jaygmbWFya2Vyc19tdXRleCk7CisJaWYgKG5lZWRfdXBkYXRlKQorCQltYXJrZXJfdXBkYXRlX3Byb2JlcyhOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwobWFya2VyX3Byb2JlX3JlZ2lzdGVyKTsKKworLyoqCisgKiBtYXJrZXJfcHJvYmVfdW5yZWdpc3RlciAtICBEaXNjb25uZWN0IGEgcHJvYmUgZnJvbSBhIG1hcmtlcgorICogQG5hbWU6IG1hcmtlciBuYW1lCisgKgorICogUmV0dXJucyB0aGUgcHJpdmF0ZSBkYXRhIGdpdmVuIHRvIG1hcmtlcl9wcm9iZV9yZWdpc3Rlciwgb3IgYW4gRVJSX1BUUigpLgorICovCit2b2lkICptYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtb2R1bGUgKnByb2JlX21vZHVsZTsKKwlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeTsKKwl2b2lkICpwcml2YXRlOworCWludCBuZWVkX3VwZGF0ZSA9IDA7CisKKwltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKKwllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7CisJaWYgKCFlbnRyeSkgeworCQlwcml2YXRlID0gRVJSX1BUUigtRU5PRU5UKTsKKwkJZ290byBlbmQ7CisJfQorCWVudHJ5LT5yZWZjb3VudCA9IDA7CisJLyogSW4gd2hhdCBtb2R1bGUgaXMgdGhlIHByb2JlIGhhbmRsZXIgPyAqLworCXByb2JlX21vZHVsZSA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZyllbnRyeS0+cHJvYmUpOworCXByaXZhdGUgPSByZW1vdmVfbWFya2VyKG5hbWUpOworCWRlZmVycmVkX3N5bmMgPSAxOworCW5lZWRfdXBkYXRlID0gMTsKK2VuZDoKKwltdXRleF91bmxvY2soJm1hcmtlcnNfbXV0ZXgpOworCWlmIChuZWVkX3VwZGF0ZSkKKwkJbWFya2VyX3VwZGF0ZV9wcm9iZXMocHJvYmVfbW9kdWxlKTsKKwlyZXR1cm4gcHJpdmF0ZTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKTsKKworLyoqCisgKiBtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEgLSAgRGlzY29ubmVjdCBhIHByb2JlIGZyb20gYSBtYXJrZXIKKyAqIEBwcml2YXRlOiBwcm9iZSBwcml2YXRlIGRhdGEKKyAqCisgKiBVbnJlZ2lzdGVyIGEgbWFya2VyIGJ5IHByb3ZpZGluZyB0aGUgcmVnaXN0ZXJlZCBwcml2YXRlIGRhdGEuCisgKiBSZXR1cm5zIHRoZSBwcml2YXRlIGRhdGEgZ2l2ZW4gdG8gbWFya2VyX3Byb2JlX3JlZ2lzdGVyLCBvciBhbiBFUlJfUFRSKCkuCisgKi8KK3ZvaWQgKm1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyX3ByaXZhdGVfZGF0YSh2b2lkICpwcml2YXRlKQoreworCXN0cnVjdCBtb2R1bGUgKnByb2JlX21vZHVsZTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeTsKKwlpbnQgZm91bmQgPSAwOworCXVuc2lnbmVkIGludCBpOworCWludCBuZWVkX3VwZGF0ZSA9IDA7CisKKwltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFSS0VSX1RBQkxFX1NJWkU7IGkrKykgeworCQloZWFkID0gJm1hcmtlcl90YWJsZVtpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsIGhlYWQsIGhsaXN0KSB7CisJCQlpZiAoZW50cnktPnByaXZhdGUgPT0gcHJpdmF0ZSkgeworCQkJCWZvdW5kID0gMTsKKwkJCQlnb3RvIGl0ZXJfZW5kOworCQkJfQorCQl9CisJfQoraXRlcl9lbmQ6CisJaWYgKCFmb3VuZCkgeworCQlwcml2YXRlID0gRVJSX1BUUigtRU5PRU5UKTsKKwkJZ290byBlbmQ7CisJfQorCWVudHJ5LT5yZWZjb3VudCA9IDA7CisJLyogSW4gd2hhdCBtb2R1bGUgaXMgdGhlIHByb2JlIGhhbmRsZXIgPyAqLworCXByb2JlX21vZHVsZSA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZyllbnRyeS0+cHJvYmUpOworCXByaXZhdGUgPSByZW1vdmVfbWFya2VyKGVudHJ5LT5uYW1lKTsKKwlkZWZlcnJlZF9zeW5jID0gMTsKKwluZWVkX3VwZGF0ZSA9IDE7CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKKwlpZiAobmVlZF91cGRhdGUpCisJCW1hcmtlcl91cGRhdGVfcHJvYmVzKHByb2JlX21vZHVsZSk7CisJcmV0dXJuIHByaXZhdGU7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfcHJvYmVfdW5yZWdpc3Rlcl9wcml2YXRlX2RhdGEpOworCisvKioKKyAqIG1hcmtlcl9hcm0gLSBBcm0gYSBtYXJrZXIKKyAqIEBuYW1lOiBtYXJrZXIgbmFtZQorICoKKyAqIEFjdGl2YXRlIGEgbWFya2VyLiBJdCBrZWVwcyBhIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgbnVtYmVyIG9mCisgKiBhcm1pbmcvZGlzYXJtaW5nIGRvbmUuCisgKiBSZXR1cm5zIDAgaWYgb2ssIGVycm9yIHZhbHVlIG9uIGVycm9yLgorICovCitpbnQgbWFya2VyX2FybShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBtYXJrZXJfZW50cnkgKmVudHJ5OworCWludCByZXQgPSAwLCBuZWVkX3VwZGF0ZSA9IDA7CisKKwltdXRleF9sb2NrKCZtYXJrZXJzX211dGV4KTsKKwllbnRyeSA9IGdldF9tYXJrZXIobmFtZSk7CisJaWYgKCFlbnRyeSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVuZDsKKwl9CisJLyoKKwkgKiBPbmx5IG5lZWQgdG8gdXBkYXRlIHByb2JlcyB3aGVuIHJlZmNvdW50IHBhc3NlcyBmcm9tIDAgdG8gMS4KKwkgKi8KKwlpZiAoZW50cnktPnJlZmNvdW50KyspCisJCWdvdG8gZW5kOworCW5lZWRfdXBkYXRlID0gMTsKK2VuZDoKKwltdXRleF91bmxvY2soJm1hcmtlcnNfbXV0ZXgpOworCWlmIChuZWVkX3VwZGF0ZSkKKwkJbWFya2VyX3VwZGF0ZV9wcm9iZXMoTlVMTCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1hcmtlcl9hcm0pOworCisvKioKKyAqIG1hcmtlcl9kaXNhcm0gLSBEaXNhcm0gYSBtYXJrZXIKKyAqIEBuYW1lOiBtYXJrZXIgbmFtZQorICoKKyAqIERpc2FybSBhIG1hcmtlci4gSXQga2VlcHMgYSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG51bWJlciBvZiBhcm1pbmcvZGlzYXJtaW5nCisgKiBkb25lLgorICogUmV0dXJucyAwIGlmIG9rLCBlcnJvciB2YWx1ZSBvbiBlcnJvci4KKyAqLworaW50IG1hcmtlcl9kaXNhcm0oY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgbWFya2VyX2VudHJ5ICplbnRyeTsKKwlpbnQgcmV0ID0gMCwgbmVlZF91cGRhdGUgPSAwOworCisJbXV0ZXhfbG9jaygmbWFya2Vyc19tdXRleCk7CisJZW50cnkgPSBnZXRfbWFya2VyKG5hbWUpOworCWlmICghZW50cnkpIHsKKwkJcmV0ID0gLUVOT0VOVDsKKwkJZ290byBlbmQ7CisJfQorCS8qCisJICogT25seSBwZXJtaXQgZGVjcmVtZW50IHJlZmNvdW50IGlmIGhpZ2hlciB0aGFuIDAuCisJICogRG8gcHJvYmUgdXBkYXRlIG9ubHkgb24gMSAtPiAwIHRyYW5zaXRpb24uCisJICovCisJaWYgKGVudHJ5LT5yZWZjb3VudCkgeworCQlpZiAoLS1lbnRyeS0+cmVmY291bnQpCisJCQlnb3RvIGVuZDsKKwl9IGVsc2UgeworCQlyZXQgPSAtRVBFUk07CisJCWdvdG8gZW5kOworCX0KKwluZWVkX3VwZGF0ZSA9IDE7CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZtYXJrZXJzX211dGV4KTsKKwlpZiAobmVlZF91cGRhdGUpCisJCW1hcmtlcl91cGRhdGVfcHJvYmVzKE5VTEwpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfZGlzYXJtKTsKKworLyoqCisgKiBtYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YSAtIEdldCBhIG1hcmtlcidzIHByb2JlIHByaXZhdGUgZGF0YQorICogQG5hbWU6IG1hcmtlciBuYW1lCisgKgorICogUmV0dXJucyB0aGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIsIG9yIGFuIEVSUl9QVFIuCisgKiBUaGUgcHJpdmF0ZSBkYXRhIHBvaW50ZXIgc2hvdWxkIF9vbmx5XyBiZSBkZXJlZmVyZW5jZWQgaWYgdGhlIGNhbGxlciBpcyB0aGUKKyAqIG93bmVyIG9mIHRoZSBkYXRhLCBvciBpdHMgY29udGVudCBjb3VsZCB2YW5pc2guIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8KKyAqIGNvbmZpcm0gdGhhdCBhIGNhbGxlciBpcyB0aGUgb3duZXIgb2YgYSByZWdpc3RlcmVkIHByb2JlLgorICovCit2b2lkICptYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBtYXJrZXJfZW50cnkgKmU7CisJc2l6ZV90IG5hbWVfbGVuID0gc3RybGVuKG5hbWUpICsgMTsKKwl1MzIgaGFzaCA9IGpoYXNoKG5hbWUsIG5hbWVfbGVuLTEsIDApOworCWludCBmb3VuZCA9IDA7CisKKwloZWFkID0gJm1hcmtlcl90YWJsZVtoYXNoICYgKCgxIDw8IE1BUktFUl9IQVNIX0JJVFMpLTEpXTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShlLCBub2RlLCBoZWFkLCBobGlzdCkgeworCQlpZiAoIXN0cmNtcChuYW1lLCBlLT5uYW1lKSkgeworCQkJZm91bmQgPSAxOworCQkJcmV0dXJuIGUtPnByaXZhdGU7CisJCX0KKwl9CisJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtYXJrZXJfZ2V0X3ByaXZhdGVfZGF0YSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYTM4OWI0Mi4uMzIwMmM5OSAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAJZG9fZXhpdChjb2RlKTsKIH0KIEVYUE9SVF9TWU1CT0woX19tb2R1bGVfcHV0X2FuZF9leGl0KTsKLQkKKwogLyogRmluZCBhIG1vZHVsZSBzZWN0aW9uOiAwIG1lYW5zIG5vdCBmb3VuZC4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9zZWMoRWxmX0VoZHIgKmhkciwKIAkJCSAgICAgRWxmX1NoZHIgKnNlY2hkcnMsCkBAIC0xNzksNyArMTc5LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzOwogCi0JLyogQ29yZSBrZXJuZWwgZmlyc3QuICovIAorCS8qIENvcmUga2VybmVsIGZpcnN0LiAqLwogCSpvd25lciA9IE5VTEw7CiAJa3MgPSBsb29rdXBfc3ltYm9sKG5hbWUsIF9fc3RhcnRfX19rc3ltdGFiLCBfX3N0b3BfX19rc3ltdGFiKTsKIAlpZiAoa3MpIHsKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQlyZXR1cm4ga3MtPnZhbHVlOwogCX0KIAotCS8qIE5vdyB0cnkgbW9kdWxlcy4gKi8gCisJLyogTm93IHRyeSBtb2R1bGVzLiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkobW9kLCAmbW9kdWxlcywgbGlzdCkgewogCQkqb3duZXIgPSBtb2Q7CiAJCWtzID0gbG9va3VwX3N5bWJvbChuYW1lLCBtb2QtPnN5bXMsIG1vZC0+c3ltcyArIG1vZC0+bnVtX3N5bXMpOwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJCX0KIAl9CiAJREVCVUdQKCJGYWlsZWQgdG8gZmluZCBzeW1ib2wgJXNcbiIsIG5hbWUpOwotIAlyZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyogU2VhcmNoIGZvciBtb2R1bGUgYnkgbmFtZTogbXVzdCBob2xkIG1vZHVsZV9tdXRleC4gKi8KQEAgLTQ0MSw3ICs0NDEsNyBAQAogCX0KIAogCXJldHVybiAwOwotfQkKK30KIF9faW5pdGNhbGwocGVyY3B1X21vZGluaXQpOwogI2Vsc2UgLyogLi4uICFDT05GSUdfU01QICovCiBzdGF0aWMgaW5saW5lIHZvaWQgKnBlcmNwdV9tb2RhbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCkBAIC00ODMsOCArNDgzLDggQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiBzdGF0aWMgdm9pZCBmcmVlX21vZGluZm9fIyNmaWVsZChzdHJ1Y3QgbW9kdWxlICptb2QpICAgICAgICAgICAgICAgICAgXAogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAga2ZyZWUobW9kLT5maWVsZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG1vZC0+ZmllbGQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWtmcmVlKG1vZC0+ZmllbGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCW1vZC0+ZmllbGQgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSBtb2RpbmZvXyMjZmllbGQgPSB7ICAgICAgICAgICAgICAgICAgICBcCiAJLmF0dHIgPSB7IC5uYW1lID0gX19zdHJpbmdpZnkoZmllbGQpLCAubW9kZSA9IDA0NDQgfSwgICAgICAgICBcCkBAIC05OTAsNyArOTkwLDcgQEAKIAlzdHJ1Y3QgbW9kdWxlX3NlY3RfYXR0cnMgKnNlY3RfYXR0cnM7CiAJc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIgKnNhdHRyOwogCXN0cnVjdCBhdHRyaWJ1dGUgKipnYXR0cjsKLQkKKwogCS8qIENvdW50IGxvYWRlZCBzZWN0aW9ucyBhbmQgYWxsb2NhdGUgc3RydWN0dXJlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBuc2VjdDsgaSsrKQogCQlpZiAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykKQEAgLTEzNDgsMTQgKzEzNDgsMTQgQEAKIAljb25zdCB1bnNpZ25lZCBsb25nICpjcmM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbW9kLT5udW1fc3ltczsgaSsrKQotCSAgICAgICAgaWYgKF9fZmluZF9zeW1ib2wobW9kLT5zeW1zW2ldLm5hbWUsICZvd25lciwgJmNyYywgMSkpIHsKKwkJaWYgKF9fZmluZF9zeW1ib2wobW9kLT5zeW1zW2ldLm5hbWUsICZvd25lciwgJmNyYywgMSkpIHsKIAkJCW5hbWUgPSBtb2QtPnN5bXNbaV0ubmFtZTsKIAkJCXJldCA9IC1FTk9FWEVDOwogCQkJZ290byBkdXA7CiAJCX0KIAogCWZvciAoaSA9IDA7IGkgPCBtb2QtPm51bV9ncGxfc3ltczsgaSsrKQotCSAgICAgICAgaWYgKF9fZmluZF9zeW1ib2wobW9kLT5ncGxfc3ltc1tpXS5uYW1lLCAmb3duZXIsICZjcmMsIDEpKSB7CisJCWlmIChfX2ZpbmRfc3ltYm9sKG1vZC0+Z3BsX3N5bXNbaV0ubmFtZSwgJm93bmVyLCAmY3JjLCAxKSkgewogCQkJbmFtZSA9IG1vZC0+Z3BsX3N5bXNbaV0ubmFtZTsKIAkJCXJldCA9IC1FTk9FWEVDOwogCQkJZ290byBkdXA7CkBAIC0xNjczLDYgKzE2NzMsOCBAQAogCXVuc2lnbmVkIGludCB1bnVzZWRjcmNpbmRleDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkZ3BsaW5kZXg7CiAJdW5zaWduZWQgaW50IHVudXNlZGdwbGNyY2luZGV4OworCXVuc2lnbmVkIGludCBtYXJrZXJzaW5kZXg7CisJdW5zaWduZWQgaW50IG1hcmtlcnNzdHJpbmdzaW5kZXg7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCWxvbmcgZXJyID0gMDsKIAl2b2lkICpwZXJjcHUgPSBOVUxMLCAqcHRyID0gTlVMTDsgLyogU3RvcHMgc3B1cmlvdXMgZ2NjIHdhcm5pbmcgKi8KQEAgLTE5MjksNyArMTkzMSw3IEBACiAJCW1vZC0+dW51c2VkX2NyY3MgPSAodm9pZCAqKXNlY2hkcnNbdW51c2VkZ3BsY3JjaW5kZXhdLnNoX2FkZHI7CiAKICNpZmRlZiBDT05GSUdfTU9EVkVSU0lPTlMKLQlpZiAoKG1vZC0+bnVtX3N5bXMgJiYgIWNyY2luZGV4KSB8fCAKKwlpZiAoKG1vZC0+bnVtX3N5bXMgJiYgIWNyY2luZGV4KSB8fAogCSAgICAobW9kLT5udW1fZ3BsX3N5bXMgJiYgIWdwbGNyY2luZGV4KSB8fAogCSAgICAobW9kLT5udW1fZ3BsX2Z1dHVyZV9zeW1zICYmICFncGxmdXR1cmVjcmNpbmRleCkgfHwKIAkgICAgKG1vZC0+bnVtX3VudXNlZF9zeW1zICYmICF1bnVzZWRjcmNpbmRleCkgfHwKQEAgLTE5MzksNiArMTk0MSw5IEBACiAJCWFkZF90YWludF9tb2R1bGUobW9kLCBUQUlOVF9GT1JDRURfTU9EVUxFKTsKIAl9CiAjZW5kaWYKKwltYXJrZXJzaW5kZXggPSBmaW5kX3NlYyhoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MsICJfX21hcmtlcnMiKTsKKyAJbWFya2Vyc3N0cmluZ3NpbmRleCA9IGZpbmRfc2VjKGhkciwgc2VjaGRycywgc2Vjc3RyaW5ncywKKwkJCQkJIl9fbWFya2Vyc19zdHJpbmdzIik7CiAKIAkvKiBOb3cgZG8gcmVsb2NhdGlvbnMuICovCiAJZm9yIChpID0gMTsgaSA8IGhkci0+ZV9zaG51bTsgaSsrKSB7CkBAIC0xOTYxLDYgKzE5NjYsMTEgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGNsZWFudXA7CiAJfQorI2lmZGVmIENPTkZJR19NQVJLRVJTCisJbW9kLT5tYXJrZXJzID0gKHZvaWQgKilzZWNoZHJzW21hcmtlcnNpbmRleF0uc2hfYWRkcjsKKwltb2QtPm51bV9tYXJrZXJzID0KKwkJc2VjaGRyc1ttYXJrZXJzaW5kZXhdLnNoX3NpemUgLyBzaXplb2YoKm1vZC0+bWFya2Vycyk7CisjZW5kaWYKIAogICAgICAgICAvKiBGaW5kIGR1cGxpY2F0ZSBzeW1ib2xzICovCiAJZXJyID0gdmVyaWZ5X2V4cG9ydF9zeW1ib2xzKG1vZCk7CkBAIC0xOTc5LDYgKzE5ODksMTEgQEAKIAogCWFkZF9rYWxsc3ltcyhtb2QsIHNlY2hkcnMsIHN5bWluZGV4LCBzdHJpbmRleCwgc2Vjc3RyaW5ncyk7CiAKKyNpZmRlZiBDT05GSUdfTUFSS0VSUworCWlmICghbW9kLT50YWludHMpCisJCW1hcmtlcl91cGRhdGVfcHJvYmVfcmFuZ2UobW9kLT5tYXJrZXJzLAorCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2VycywgTlVMTCwgTlVMTCk7CisjZW5kaWYKIAllcnIgPSBtb2R1bGVfZmluYWxpemUoaGRyLCBzZWNoZHJzLCBtb2QpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGNsZWFudXA7CkBAIC0yMDE2LDcgKzIwMzEsNyBAQAogCWlmIChlcnIgPCAwKQogCQlnb3RvIGFyY2hfY2xlYW51cDsKIAotCWVyciA9IG1vZF9zeXNmc19zZXR1cChtb2QsIAorCWVyciA9IG1vZF9zeXNmc19zZXR1cChtb2QsCiAJCQkgICAgICAoc3RydWN0IGtlcm5lbF9wYXJhbSAqKQogCQkJICAgICAgc2VjaGRyc1tzZXR1cGluZGV4XS5zaF9hZGRyLAogCQkJICAgICAgc2VjaGRyc1tzZXR1cGluZGV4XS5zaF9zaXplCkBAIC0yMDI4LDggKzIwNDMsOCBAQAogCiAJLyogU2l6ZSBvZiBzZWN0aW9uIDAgaXMgMCwgc28gdGhpcyB3b3JrcyB3ZWxsIGlmIG5vIHVud2luZCBpbmZvLiAqLwogCW1vZC0+dW53aW5kX2luZm8gPSB1bndpbmRfYWRkX3RhYmxlKG1vZCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXNlY2hkcnNbdW53aW5kZXhdLnNoX2FkZHIsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjaGRyc1t1bndpbmRleF0uc2hfc2l6ZSk7CisJCQkJCSAgICAodm9pZCAqKXNlY2hkcnNbdW53aW5kZXhdLnNoX2FkZHIsCisJCQkJCSAgICBzZWNoZHJzW3Vud2luZGV4XS5zaF9zaXplKTsKIAogCS8qIEdldCByaWQgb2YgdGVtcG9yYXJ5IGNvcHkgKi8KIAl2ZnJlZShoZHIpOwpAQCAtMjE0Niw3ICsyMTYxLDcgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgaXNfYXJtX21hcHBpbmdfc3ltYm9sKGNvbnN0IGNoYXIgKnN0cikKIHsKLQlyZXR1cm4gc3RyWzBdID09ICckJyAmJiBzdHJjaHIoImF0ZCIsIHN0clsxXSkgCisJcmV0dXJuIHN0clswXSA9PSAnJCcgJiYgc3RyY2hyKCJhdGQiLCBzdHJbMV0pCiAJICAgICAgICYmIChzdHJbMl0gPT0gJ1wwJyB8fCBzdHJbMl0gPT0gJy4nKTsKIH0KIApAQCAtMjE2MSwxMSArMjE3NiwxMSBAQAogCS8qIEF0IHdvcnNlLCBuZXh0IHZhbHVlIGlzIGF0IGVuZCBvZiBtb2R1bGUgKi8KIAlpZiAod2l0aGluKGFkZHIsIG1vZC0+bW9kdWxlX2luaXQsIG1vZC0+aW5pdF9zaXplKSkKIAkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2luaXQrbW9kLT5pbml0X3RleHRfc2l6ZTsKLQllbHNlIAorCWVsc2UKIAkJbmV4dHZhbCA9ICh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2NvcmUrbW9kLT5jb3JlX3RleHRfc2l6ZTsKIAogCS8qIFNjYW4gZm9yIGNsb3Nlc3QgcHJlY2VlZGluZyBzeW1ib2wsIGFuZCBuZXh0IHN5bWJvbC4gKEVMRgotICAgICAgICAgICBzdGFydHMgcmVhbCBzeW1ib2xzIGF0IDEpLiAqLworCSAgIHN0YXJ0cyByZWFsIHN5bWJvbHMgYXQgMSkuICovCiAJZm9yIChpID0gMTsgaSA8IG1vZC0+bnVtX3N5bXRhYjsgaSsrKSB7CiAJCWlmIChtb2QtPnN5bXRhYltpXS5zdF9zaG5keCA9PSBTSE5fVU5ERUYpCiAJCQljb250aW51ZTsKQEAgLTI0MDcsNyArMjQyMiw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KSB7CiAJCWlmIChtb2QtPm51bV9leGVudHJpZXMgPT0gMCkKIAkJCWNvbnRpbnVlOwotCQkJCQorCiAJCWUgPSBzZWFyY2hfZXh0YWJsZShtb2QtPmV4dGFibGUsCiAJCQkJICAgbW9kLT5leHRhYmxlICsgbW9kLT5udW1fZXhlbnRyaWVzIC0gMSwKIAkJCQkgICBhZGRyKTsKQEAgLTI0MTcsNyArMjQzMiw3IEBACiAJcHJlZW1wdF9lbmFibGUoKTsKIAogCS8qIE5vdywgaWYgd2UgZm91bmQgb25lLCB3ZSBhcmUgcnVubmluZyBpbnNpZGUgaXQgbm93LCBoZW5jZQotICAgICAgICAgICB3ZSBjYW5ub3QgdW5sb2FkIHRoZSBtb2R1bGUsIGhlbmNlIG5vIHJlZmNudCBuZWVkZWQuICovCisJICAgd2UgY2Fubm90IHVubG9hZCB0aGUgbW9kdWxlLCBoZW5jZSBubyByZWZjbnQgbmVlZGVkLiAqLwogCXJldHVybiBlOwogfQogCkBAIC0yNTcwLDMgKzI1ODUsMTggQEAKIHZvaWQgc3RydWN0X21vZHVsZShzdHJ1Y3QgbW9kdWxlICptb2QpIHsgcmV0dXJuOyB9CiBFWFBPUlRfU1lNQk9MKHN0cnVjdF9tb2R1bGUpOwogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFSS0VSUwordm9pZCBtb2R1bGVfdXBkYXRlX21hcmtlcnMoc3RydWN0IG1vZHVsZSAqcHJvYmVfbW9kdWxlLCBpbnQgKnJlZmNvdW50KQoreworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKworCW11dGV4X2xvY2soJm1vZHVsZV9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShtb2QsICZtb2R1bGVzLCBsaXN0KQorCQlpZiAoIW1vZC0+dGFpbnRzKQorCQkJbWFya2VyX3VwZGF0ZV9wcm9iZV9yYW5nZShtb2QtPm1hcmtlcnMsCisJCQkJbW9kLT5tYXJrZXJzICsgbW9kLT5udW1fbWFya2VycywKKwkJCQlwcm9iZV9tb2R1bGUsIHJlZmNvdW50KTsKKwltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9ub3RpZmllci5jIGIva2VybmVsL25vdGlmaWVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1M2Y0NwotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9ub3RpZmllci5jCkBAIC0wLDAgKzEsNTM5IEBACisjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKy8qCisgKglOb3RpZmllciBsaXN0IGZvciBrZXJuZWwgY29kZSB3aGljaCB3YW50cyB0byBiZSBjYWxsZWQKKyAqCWF0IHNodXRkb3duLiBUaGlzIGlzIHVzZWQgdG8gc3RvcCBhbnkgaWRsaW5nIERNQSBvcGVyYXRpb25zCisgKglhbmQgdGhlIGxpa2UuCisgKi8KK0JMT0NLSU5HX05PVElGSUVSX0hFQUQocmVib290X25vdGlmaWVyX2xpc3QpOworCisvKgorICoJTm90aWZpZXIgY2hhaW4gY29yZSByb3V0aW5lcy4gIFRoZSBleHBvcnRlZCByb3V0aW5lcyBiZWxvdworICoJYXJlIGxheWVyZWQgb24gdG9wIG9mIHRoZXNlLCB3aXRoIGFwcHJvcHJpYXRlIGxvY2tpbmcgYWRkZWQuCisgKi8KKworc3RhdGljIGludCBub3RpZmllcl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipubCwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQoreworCXdoaWxlICgoKm5sKSAhPSBOVUxMKSB7CisJCWlmIChuLT5wcmlvcml0eSA+ICgqbmwpLT5wcmlvcml0eSkKKwkJCWJyZWFrOworCQlubCA9ICYoKCpubCktPm5leHQpOworCX0KKwluLT5uZXh0ID0gKm5sOworCXJjdV9hc3NpZ25fcG9pbnRlcigqbmwsIG4pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbmwsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKK3sKKwl3aGlsZSAoKCpubCkgIT0gTlVMTCkgeworCQlpZiAoKCpubCkgPT0gbikgeworCQkJcmN1X2Fzc2lnbl9wb2ludGVyKCpubCwgbi0+bmV4dCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlubCA9ICYoKCpubCktPm5leHQpOworCX0KKwlyZXR1cm4gLUVOT0VOVDsKK30KKworLyoqCisgKiBub3RpZmllcl9jYWxsX2NoYWluIC0gSW5mb3JtcyB0aGUgcmVnaXN0ZXJlZCBub3RpZmllcnMgYWJvdXQgYW4gZXZlbnQuCisgKglAbmw6CQlQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCisgKglAdmFsOgkJVmFsdWUgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUB2OgkJUG9pbnRlciBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgorICoJQG5yX3RvX2NhbGw6CU51bWJlciBvZiBub3RpZmllciBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkLiBEb24ndCBjYXJlCisgKgkJCXZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIC0xLgorICoJQG5yX2NhbGxzOglSZWNvcmRzIHRoZSBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyBzZW50LiBEb24ndCBjYXJlCisgKgkJCXZhbHVlIG9mIHRoaXMgZmllbGQgaXMgTlVMTC4KKyAqCUByZXR1cm5zOglub3RpZmllcl9jYWxsX2NoYWluIHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZQorICoJCQlsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KKyAqLworc3RhdGljIGludCBfX2twcm9iZXMgbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipubCwKKwkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsCisJCQkJCWludCBucl90b19jYWxsLAlpbnQgKm5yX2NhbGxzKQoreworCWludCByZXQgPSBOT1RJRllfRE9ORTsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCAqbmV4dF9uYjsKKworCW5iID0gcmN1X2RlcmVmZXJlbmNlKCpubCk7CisKKwl3aGlsZSAobmIgJiYgbnJfdG9fY2FsbCkgeworCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlKG5iLT5uZXh0KTsKKwkJcmV0ID0gbmItPm5vdGlmaWVyX2NhbGwobmIsIHZhbCwgdik7CisKKwkJaWYgKG5yX2NhbGxzKQorCQkJKCpucl9jYWxscykrKzsKKworCQlpZiAoKHJldCAmIE5PVElGWV9TVE9QX01BU0spID09IE5PVElGWV9TVE9QX01BU0spCisJCQlicmVhazsKKwkJbmIgPSBuZXh0X25iOworCQlucl90b19jYWxsLS07CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qCisgKglBdG9taWMgbm90aWZpZXIgY2hhaW4gcm91dGluZXMuICBSZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uCisgKgl1c2UgYSBzcGlubG9jaywgYW5kIGNhbGxfY2hhaW4gaXMgc3luY2hyb25pemVkIGJ5IFJDVSAobm8gbG9ja3MpLgorICovCisKKy8qKgorICoJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyIC0gQWRkIG5vdGlmaWVyIHRvIGFuIGF0b21pYyBub3RpZmllciBjaGFpbgorICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGF0b21pYyBub3RpZmllciBjaGFpbgorICoJQG46IE5ldyBlbnRyeSBpbiBub3RpZmllciBjaGFpbgorICoKKyAqCUFkZHMgYSBub3RpZmllciB0byBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW4uCisgKgorICoJQ3VycmVudGx5IGFsd2F5cyByZXR1cm5zIHplcm8uCisgKi8KK2ludCBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKKwkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuaC0+bG9jaywgZmxhZ3MpOworCXJldCA9IG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuaC0+aGVhZCwgbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmgtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKTsKKworLyoqCisgKglhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlciAtIFJlbW92ZSBub3RpZmllciBmcm9tIGFuIGF0b21pYyBub3RpZmllciBjaGFpbgorICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGF0b21pYyBub3RpZmllciBjaGFpbgorICoJQG46IEVudHJ5IHRvIHJlbW92ZSBmcm9tIG5vdGlmaWVyIGNoYWluCisgKgorICoJUmVtb3ZlcyBhIG5vdGlmaWVyIGZyb20gYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluLgorICoKKyAqCVJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yICUtRU5PRU5UIG9uIGZhaWx1cmUuCisgKi8KK2ludCBhdG9taWNfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5oLT5sb2NrLCBmbGFncyk7CisJcmV0ID0gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmgtPmhlYWQsIG4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5oLT5sb2NrLCBmbGFncyk7CisJc3luY2hyb25pemVfcmN1KCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKKworLyoqCisgKglfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluCisgKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgYXRvbWljIG5vdGlmaWVyIGNoYWluCisgKglAdmFsOiBWYWx1ZSBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgorICoJQHY6IFBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUBucl90b19jYWxsOiBTZWUgdGhlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCisgKglAbnJfY2FsbHM6IFNlZSB0aGUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbi4KKyAqCisgKglDYWxscyBlYWNoIGZ1bmN0aW9uIGluIGEgbm90aWZpZXIgY2hhaW4gaW4gdHVybi4gIFRoZSBmdW5jdGlvbnMKKyAqCXJ1biBpbiBhbiBhdG9taWMgY29udGV4dCwgc28gdGhleSBtdXN0IG5vdCBibG9jay4KKyAqCVRoaXMgcm91dGluZSB1c2VzIFJDVSB0byBzeW5jaHJvbml6ZSB3aXRoIGNoYW5nZXMgdG8gdGhlIGNoYWluLgorICoKKyAqCUlmIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG5vdGlmaWVyIGNhbiBiZSBhbmQnZWQKKyAqCXdpdGggJU5PVElGWV9TVE9QX01BU0sgdGhlbiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigpCisgKgl3aWxsIHJldHVybiBpbW1lZGlhdGVseSwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mCisgKgl0aGUgbm90aWZpZXIgZnVuY3Rpb24gd2hpY2ggaGFsdGVkIGV4ZWN1dGlvbi4KKyAqCU90aGVyd2lzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXR1cm4gdmFsdWUKKyAqCW9mIHRoZSBsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KKyAqLworaW50IF9fa3Byb2JlcyBfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCAqbmgsCisJCQkJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2LAorCQkJCQlpbnQgbnJfdG9fY2FsbCwgaW50ICpucl9jYWxscykKK3sKKwlpbnQgcmV0OworCisJcmN1X3JlYWRfbG9jaygpOworCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYsIG5yX3RvX2NhbGwsIG5yX2NhbGxzKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19hdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbik7CisKK2ludCBfX2twcm9iZXMgYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIF9fYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4obmgsIHZhbCwgdiwgLTEsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4pOworCisvKgorICoJQmxvY2tpbmcgbm90aWZpZXIgY2hhaW4gcm91dGluZXMuICBBbGwgYWNjZXNzIHRvIHRoZSBjaGFpbiBpcworICoJc3luY2hyb25pemVkIGJ5IGFuIHJ3c2VtLgorICovCisKKy8qKgorICoJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIgLSBBZGQgbm90aWZpZXIgdG8gYSBibG9ja2luZyBub3RpZmllciBjaGFpbgorICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCisgKglAbjogTmV3IGVudHJ5IGluIG5vdGlmaWVyIGNoYWluCisgKgorICoJQWRkcyBhIG5vdGlmaWVyIHRvIGEgYmxvY2tpbmcgbm90aWZpZXIgY2hhaW4uCisgKglNdXN0IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuCisgKgorICoJQ3VycmVudGx5IGFsd2F5cyByZXR1cm5zIHplcm8uCisgKi8KK2ludCBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUaGlzIGNvZGUgZ2V0cyB1c2VkIGR1cmluZyBib290LXVwLCB3aGVuIHRhc2sgc3dpdGNoaW5nIGlzCisJICogbm90IHlldCB3b3JraW5nIGFuZCBpbnRlcnJ1cHRzIG11c3QgcmVtYWluIGRpc2FibGVkLiAgQXQKKwkgKiBzdWNoIHRpbWVzIHdlIG11c3Qgbm90IGNhbGwgZG93bl93cml0ZSgpLgorCSAqLworCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpKQorCQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKKworCWRvd25fd3JpdGUoJm5oLT5yd3NlbSk7CisJcmV0ID0gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKKwl1cF93cml0ZSgmbmgtPnJ3c2VtKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIpOworCisvKioKKyAqCWJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIgLSBSZW1vdmUgbm90aWZpZXIgZnJvbSBhIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCisgKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgYmxvY2tpbmcgbm90aWZpZXIgY2hhaW4KKyAqCUBuOiBFbnRyeSB0byByZW1vdmUgZnJvbSBub3RpZmllciBjaGFpbgorICoKKyAqCVJlbW92ZXMgYSBub3RpZmllciBmcm9tIGEgYmxvY2tpbmcgbm90aWZpZXIgY2hhaW4uCisgKglNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KKyAqCisgKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciAlLUVOT0VOVCBvbiBmYWlsdXJlLgorICovCitpbnQgYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUaGlzIGNvZGUgZ2V0cyB1c2VkIGR1cmluZyBib290LXVwLCB3aGVuIHRhc2sgc3dpdGNoaW5nIGlzCisJICogbm90IHlldCB3b3JraW5nIGFuZCBpbnRlcnJ1cHRzIG11c3QgcmVtYWluIGRpc2FibGVkLiAgQXQKKwkgKiBzdWNoIHRpbWVzIHdlIG11c3Qgbm90IGNhbGwgZG93bl93cml0ZSgpLgorCSAqLworCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpKQorCQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmgtPmhlYWQsIG4pOworCisJZG93bl93cml0ZSgmbmgtPnJ3c2VtKTsKKwlyZXQgPSBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuaC0+aGVhZCwgbik7CisJdXBfd3JpdGUoJm5oLT5yd3NlbSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIpOworCisvKioKKyAqCV9fYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbiAtIENhbGwgZnVuY3Rpb25zIGluIGEgYmxvY2tpbmcgbm90aWZpZXIgY2hhaW4KKyAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBibG9ja2luZyBub3RpZmllciBjaGFpbgorICoJQHZhbDogVmFsdWUgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUB2OiBQb2ludGVyIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCisgKglAbnJfdG9fY2FsbDogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCisgKglAbnJfY2FsbHM6IFNlZSBjb21tZW50IGZvciBub3RpZmllcl9jYWxsX2NoYWluLgorICoKKyAqCUNhbGxzIGVhY2ggZnVuY3Rpb24gaW4gYSBub3RpZmllciBjaGFpbiBpbiB0dXJuLiAgVGhlIGZ1bmN0aW9ucworICoJcnVuIGluIGEgcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhbGxvd2VkIHRvIGJsb2NrLgorICoKKyAqCUlmIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG5vdGlmaWVyIGNhbiBiZSBhbmQnZWQKKyAqCXdpdGggJU5PVElGWV9TVE9QX01BU0sgdGhlbiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCkKKyAqCXdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAqCXRoZSBub3RpZmllciBmdW5jdGlvbiB3aGljaCBoYWx0ZWQgZXhlY3V0aW9uLgorICoJT3RoZXJ3aXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZQorICoJb2YgdGhlIGxhc3Qgbm90aWZpZXIgZnVuY3Rpb24gY2FsbGVkLgorICovCitpbnQgX19ibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICpuaCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwKKwkJCQkgICBpbnQgbnJfdG9fY2FsbCwgaW50ICpucl9jYWxscykKK3sKKwlpbnQgcmV0ID0gTk9USUZZX0RPTkU7CisKKwkvKgorCSAqIFdlIGNoZWNrIHRoZSBoZWFkIG91dHNpZGUgdGhlIGxvY2ssIGJ1dCBpZiB0aGlzIGFjY2VzcyBpcworCSAqIHJhY3kgdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hhdCB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0CisJICogaXMsIHdlIHJlLWNoZWNrIHRoZSBsaXN0IGFmdGVyIGhhdmluZyB0YWtlbiB0aGUgbG9jayBhbnl3YXk6CisJICovCisJaWYgKHJjdV9kZXJlZmVyZW5jZShuaC0+aGVhZCkpIHsKKwkJZG93bl9yZWFkKCZuaC0+cndzZW0pOworCQlyZXQgPSBub3RpZmllcl9jYWxsX2NoYWluKCZuaC0+aGVhZCwgdmFsLCB2LCBucl90b19jYWxsLAorCQkJCQlucl9jYWxscyk7CisJCXVwX3JlYWQoJm5oLT5yd3NlbSk7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4pOworCitpbnQgYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCisJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQoreworCXJldHVybiBfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4obmgsIHZhbCwgdiwgLTEsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbik7CisKKy8qCisgKglSYXcgbm90aWZpZXIgY2hhaW4gcm91dGluZXMuICBUaGVyZSBpcyBubyBwcm90ZWN0aW9uOworICoJdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgaXQuICBVc2UgYXQgeW91ciBvd24gcmlzayEKKyAqLworCisvKioKKyAqCXJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlciAtIEFkZCBub3RpZmllciB0byBhIHJhdyBub3RpZmllciBjaGFpbgorICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIHJhdyBub3RpZmllciBjaGFpbgorICoJQG46IE5ldyBlbnRyeSBpbiBub3RpZmllciBjaGFpbgorICoKKyAqCUFkZHMgYSBub3RpZmllciB0byBhIHJhdyBub3RpZmllciBjaGFpbi4KKyAqCUFsbCBsb2NraW5nIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKglDdXJyZW50bHkgYWx3YXlzIHJldHVybnMgemVyby4KKyAqLworaW50IHJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCit7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuaC0+aGVhZCwgbik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyYXdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIpOworCisvKioKKyAqCXJhd19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyIC0gUmVtb3ZlIG5vdGlmaWVyIGZyb20gYSByYXcgbm90aWZpZXIgY2hhaW4KKyAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSByYXcgbm90aWZpZXIgY2hhaW4KKyAqCUBuOiBFbnRyeSB0byByZW1vdmUgZnJvbSBub3RpZmllciBjaGFpbgorICoKKyAqCVJlbW92ZXMgYSBub3RpZmllciBmcm9tIGEgcmF3IG5vdGlmaWVyIGNoYWluLgorICoJQWxsIGxvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqCVJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yICUtRU5PRU5UIG9uIGZhaWx1cmUuCisgKi8KK2ludCByYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcihzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCit7CisJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJhd19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKKworLyoqCisgKglfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYSByYXcgbm90aWZpZXIgY2hhaW4KKyAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSByYXcgbm90aWZpZXIgY2hhaW4KKyAqCUB2YWw6IFZhbHVlIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCisgKglAdjogUG9pbnRlciBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgorICoJQG5yX3RvX2NhbGw6IFNlZSBjb21tZW50IGZvciBub3RpZmllcl9jYWxsX2NoYWluLgorICoJQG5yX2NhbGxzOiBTZWUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbgorICoKKyAqCUNhbGxzIGVhY2ggZnVuY3Rpb24gaW4gYSBub3RpZmllciBjaGFpbiBpbiB0dXJuLiAgVGhlIGZ1bmN0aW9ucworICoJcnVuIGluIGFuIHVuZGVmaW5lZCBjb250ZXh0LgorICoJQWxsIGxvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgorICoKKyAqCUlmIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG5vdGlmaWVyIGNhbiBiZSBhbmQnZWQKKyAqCXdpdGggJU5PVElGWV9TVE9QX01BU0sgdGhlbiByYXdfbm90aWZpZXJfY2FsbF9jaGFpbigpCisgKgl3aWxsIHJldHVybiBpbW1lZGlhdGVseSwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mCisgKgl0aGUgbm90aWZpZXIgZnVuY3Rpb24gd2hpY2ggaGFsdGVkIGV4ZWN1dGlvbi4KKyAqCU90aGVyd2lzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXR1cm4gdmFsdWUKKyAqCW9mIHRoZSBsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KKyAqLworaW50IF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJhd19ub3RpZmllcl9oZWFkICpuaCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2LAorCQkJICAgICAgaW50IG5yX3RvX2NhbGwsIGludCAqbnJfY2FsbHMpCit7CisJcmV0dXJuIG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYsIG5yX3RvX2NhbGwsIG5yX2NhbGxzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4pOworCitpbnQgcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHJhd19ub3RpZmllcl9oZWFkICpuaCwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIF9fcmF3X25vdGlmaWVyX2NhbGxfY2hhaW4obmgsIHZhbCwgdiwgLTEsIE5VTEwpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocmF3X25vdGlmaWVyX2NhbGxfY2hhaW4pOworCisvKgorICoJU1JDVSBub3RpZmllciBjaGFpbiByb3V0aW5lcy4gICAgUmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbgorICoJdXNlIGEgbXV0ZXgsIGFuZCBjYWxsX2NoYWluIGlzIHN5bmNocm9uaXplZCBieSBTUkNVIChubyBsb2NrcykuCisgKi8KKworLyoqCisgKglzcmN1X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyIC0gQWRkIG5vdGlmaWVyIHRvIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4KKyAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBTUkNVIG5vdGlmaWVyIGNoYWluCisgKglAbjogTmV3IGVudHJ5IGluIG5vdGlmaWVyIGNoYWluCisgKgorICoJQWRkcyBhIG5vdGlmaWVyIHRvIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4uCisgKglNdXN0IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuCisgKgorICoJQ3VycmVudGx5IGFsd2F5cyByZXR1cm5zIHplcm8uCisgKi8KK2ludCBzcmN1X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oLAorCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCit7CisJaW50IHJldDsKKworCS8qCisJICogVGhpcyBjb2RlIGdldHMgdXNlZCBkdXJpbmcgYm9vdC11cCwgd2hlbiB0YXNrIHN3aXRjaGluZyBpcworCSAqIG5vdCB5ZXQgd29ya2luZyBhbmQgaW50ZXJydXB0cyBtdXN0IHJlbWFpbiBkaXNhYmxlZC4gIEF0CisJICogc3VjaCB0aW1lcyB3ZSBtdXN0IG5vdCBjYWxsIG11dGV4X2xvY2soKS4KKwkgKi8KKwlpZiAodW5saWtlbHkoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSkKKwkJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuaC0+aGVhZCwgbik7CisKKwltdXRleF9sb2NrKCZuaC0+bXV0ZXgpOworCXJldCA9IG5vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZuaC0+aGVhZCwgbik7CisJbXV0ZXhfdW5sb2NrKCZuaC0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzcmN1X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKTsKKworLyoqCisgKglzcmN1X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIgLSBSZW1vdmUgbm90aWZpZXIgZnJvbSBhbiBTUkNVIG5vdGlmaWVyIGNoYWluCisgKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgU1JDVSBub3RpZmllciBjaGFpbgorICoJQG46IEVudHJ5IHRvIHJlbW92ZSBmcm9tIG5vdGlmaWVyIGNoYWluCisgKgorICoJUmVtb3ZlcyBhIG5vdGlmaWVyIGZyb20gYW4gU1JDVSBub3RpZmllciBjaGFpbi4KKyAqCU11c3QgYmUgY2FsbGVkIGZyb20gcHJvY2VzcyBjb250ZXh0LgorICoKKyAqCVJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yICUtRU5PRU5UIG9uIGZhaWx1cmUuCisgKi8KK2ludCBzcmN1X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCisJCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKK3sKKwlpbnQgcmV0OworCisJLyoKKwkgKiBUaGlzIGNvZGUgZ2V0cyB1c2VkIGR1cmluZyBib290LXVwLCB3aGVuIHRhc2sgc3dpdGNoaW5nIGlzCisJICogbm90IHlldCB3b3JraW5nIGFuZCBpbnRlcnJ1cHRzIG11c3QgcmVtYWluIGRpc2FibGVkLiAgQXQKKwkgKiBzdWNoIHRpbWVzIHdlIG11c3Qgbm90IGNhbGwgbXV0ZXhfbG9jaygpLgorCSAqLworCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpKQorCQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmgtPmhlYWQsIG4pOworCisJbXV0ZXhfbG9jaygmbmgtPm11dGV4KTsKKwlyZXQgPSBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuaC0+aGVhZCwgbik7CisJbXV0ZXhfdW5sb2NrKCZuaC0+bXV0ZXgpOworCXN5bmNocm9uaXplX3NyY3UoJm5oLT5zcmN1KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKKworLyoqCisgKglfX3NyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbiAtIENhbGwgZnVuY3Rpb25zIGluIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4KKyAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBTUkNVIG5vdGlmaWVyIGNoYWluCisgKglAdmFsOiBWYWx1ZSBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgorICoJQHY6IFBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCUBucl90b19jYWxsOiBTZWUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbi4KKyAqCUBucl9jYWxsczogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4KKyAqCisgKglDYWxscyBlYWNoIGZ1bmN0aW9uIGluIGEgbm90aWZpZXIgY2hhaW4gaW4gdHVybi4gIFRoZSBmdW5jdGlvbnMKKyAqCXJ1biBpbiBhIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYWxsb3dlZCB0byBibG9jay4KKyAqCisgKglJZiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBub3RpZmllciBjYW4gYmUgYW5kJ2VkCisgKgl3aXRoICVOT1RJRllfU1RPUF9NQVNLIHRoZW4gc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKCkKKyAqCXdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YKKyAqCXRoZSBub3RpZmllciBmdW5jdGlvbiB3aGljaCBoYWx0ZWQgZXhlY3V0aW9uLgorICoJT3RoZXJ3aXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZQorICoJb2YgdGhlIGxhc3Qgbm90aWZpZXIgZnVuY3Rpb24gY2FsbGVkLgorICovCitpbnQgX19zcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4oc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsCisJCQkgICAgICAgaW50IG5yX3RvX2NhbGwsIGludCAqbnJfY2FsbHMpCit7CisJaW50IHJldDsKKwlpbnQgaWR4OworCisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJm5oLT5zcmN1KTsKKwlyZXQgPSBub3RpZmllcl9jYWxsX2NoYWluKCZuaC0+aGVhZCwgdmFsLCB2LCBucl90b19jYWxsLCBucl9jYWxscyk7CisJc3JjdV9yZWFkX3VubG9jaygmbmgtPnNyY3UsIGlkeCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKTsKKworaW50IHNyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgc3JjdV9ub3RpZmllcl9oZWFkICpuaCwKKwkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIF9fc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKG5oLCB2YWwsIHYsIC0xLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbik7CisKKy8qKgorICoJc3JjdV9pbml0X25vdGlmaWVyX2hlYWQgLSBJbml0aWFsaXplIGFuIFNSQ1Ugbm90aWZpZXIgaGVhZAorICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIHNyY3Ugbm90aWZpZXIgY2hhaW4KKyAqCisgKglVbmxpa2Ugb3RoZXIgc29ydHMgb2Ygbm90aWZpZXIgaGVhZHMsIFNSQ1Ugbm90aWZpZXIgaGVhZHMgcmVxdWlyZQorICoJZHluYW1pYyBpbml0aWFsaXphdGlvbi4gIEJlIHN1cmUgdG8gY2FsbCB0aGlzIHJvdXRpbmUgYmVmb3JlCisgKgljYWxsaW5nIGFueSBvZiB0aGUgb3RoZXIgU1JDVSBub3RpZmllciByb3V0aW5lcyBmb3IgdGhpcyBoZWFkLgorICoKKyAqCUlmIGFuIFNSQ1Ugbm90aWZpZXIgaGVhZCBpcyBkZWFsbG9jYXRlZCwgaXQgbXVzdCBmaXJzdCBiZSBjbGVhbmVkCisgKgl1cCBieSBjYWxsaW5nIHNyY3VfY2xlYW51cF9ub3RpZmllcl9oZWFkKCkuICBPdGhlcndpc2UgdGhlIGhlYWQncworICoJcGVyLWNwdSBkYXRhICh1c2VkIGJ5IHRoZSBTUkNVIG1lY2hhbmlzbSkgd2lsbCBsZWFrLgorICovCit2b2lkIHNyY3VfaW5pdF9ub3RpZmllcl9oZWFkKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oKQoreworCW11dGV4X2luaXQoJm5oLT5tdXRleCk7CisJaWYgKGluaXRfc3JjdV9zdHJ1Y3QoJm5oLT5zcmN1KSA8IDApCisJCUJVRygpOworCW5oLT5oZWFkID0gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNyY3VfaW5pdF9ub3RpZmllcl9oZWFkKTsKKworLyoqCisgKglyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIgLSBSZWdpc3RlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgcmVib290IHRpbWUKKyAqCUBuYjogSW5mbyBhYm91dCBub3RpZmllciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKKyAqCisgKglSZWdpc3RlcnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucworICoJdG8gYmUgY2FsbGVkIGF0IHJlYm9vdCB0aW1lLgorICoKKyAqCUN1cnJlbnRseSBhbHdheXMgcmV0dXJucyB6ZXJvLCBhcyBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigpCisgKglhbHdheXMgcmV0dXJucyB6ZXJvLgorICovCitpbnQgcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKCZyZWJvb3Rfbm90aWZpZXJfbGlzdCwgbmIpOworfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIpOworCisvKioKKyAqCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyIC0gVW5yZWdpc3RlciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcmVib290IG5vdGlmaWVyCisgKglAbmI6IEhvb2sgdG8gYmUgdW5yZWdpc3RlcmVkCisgKgorICoJVW5yZWdpc3RlcnMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcmVib290CisgKglub3RpZmllciBmdW5jdGlvbi4KKyAqCisgKglSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgJS1FTk9FTlQgb24gZmFpbHVyZS4KKyAqLworaW50IHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJnJlYm9vdF9ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKTsKKworc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKGRpZV9jaGFpbik7CisKK2ludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKKwkgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKK3sKKwlzdHJ1Y3QgZGllX2FyZ3MgYXJncyA9IHsKKwkJLnJlZ3MJPSByZWdzLAorCQkuc3RyCT0gc3RyLAorCQkuZXJyCT0gZXJyLAorCQkudHJhcG5yCT0gdHJhcCwKKwkJLnNpZ25yCT0gc2lnLAorCisJfTsKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmRpZV9jaGFpbiwgdmFsLCAmYXJncyk7Cit9CisKK2ludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwl2bWFsbG9jX3N5bmNfYWxsKCk7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmZGllX2NoYWluLCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9kaWVfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmRpZV9jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9kaWVfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL25zX2Nncm91cC5jIGIva2VybmVsL25zX2Nncm91cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWQ0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbnNfY2dyb3VwLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBuc19jZ3JvdXAuYyAtIG5hbWVzcGFjZSBjZ3JvdXAgc3Vic3lzdGVtCisgKgorICogQ29weXJpZ2h0IDIwMDYsIDIwMDcgSUJNIENvcnAKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworc3RydWN0IG5zX2Nncm91cCB7CisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIG5zX3N1YnN5czsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbnNfY2dyb3VwICpjZ3JvdXBfdG9fbnMoCisJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY2dyb3VwLCBuc19zdWJzeXNfaWQpLAorCQkJICAgIHN0cnVjdCBuc19jZ3JvdXAsIGNzcyk7Cit9CisKK2ludCBuc19jZ3JvdXBfY2xvbmUoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiBjZ3JvdXBfY2xvbmUodGFzaywgJm5zX3N1YnN5cyk7Cit9CisKKy8qCisgKiBSdWxlczoKKyAqICAgMS4geW91IGNhbiBvbmx5IGVudGVyIGEgY2dyb3VwIHdoaWNoIGlzIGEgY2hpbGQgb2YgeW91ciBjdXJyZW50CisgKiAgICAgY2dyb3VwCisgKiAgIDIuIHlvdSBjYW4gb25seSBwbGFjZSBhbm90aGVyIHByb2Nlc3MgaW50byBhIGNncm91cCBpZgorICogICAgIGEuIHlvdSBoYXZlIENBUF9TWVNfQURNSU4KKyAqICAgICBiLiB5b3VyIGNncm91cCBpcyBhbiBhbmNlc3RvciBvZiB0YXNrJ3MgZGVzdGluYXRpb24gY2dyb3VwCisgKiAgICAgICAoaGVuY2UgZWl0aGVyIHlvdSBhcmUgaW4gdGhlIHNhbWUgY2dyb3VwIGFzIHRhc2ssIG9yIGluIGFuCisgKiAgICAgICAgYW5jZXN0b3IgY2dyb3VwIHRoZXJlb2YpCisgKi8KK3N0YXRpYyBpbnQgbnNfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCXN0cnVjdCBjZ3JvdXAgKm5ld19jZ3JvdXAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwlzdHJ1Y3QgY2dyb3VwICpvcmlnOworCisJaWYgKGN1cnJlbnQgIT0gdGFzaykgeworCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCisJCWlmICghY2dyb3VwX2lzX2Rlc2NlbmRhbnQobmV3X2Nncm91cCkpCisJCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmIChhdG9taWNfcmVhZCgmbmV3X2Nncm91cC0+Y291bnQpICE9IDApCisJCXJldHVybiAtRVBFUk07CisKKwlvcmlnID0gdGFza19jZ3JvdXAodGFzaywgbnNfc3Vic3lzX2lkKTsKKwlpZiAob3JpZyAmJiBvcmlnICE9IG5ld19jZ3JvdXAtPnBhcmVudCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXJldHVybiAwOworfQorCisvKgorICogUnVsZXM6IHlvdSBjYW4gb25seSBjcmVhdGUgYSBjZ3JvdXAgaWYKKyAqICAgICAxLiB5b3UgYXJlIGNhcGFibGUoQ0FQX1NZU19BRE1JTikKKyAqICAgICAyLiB0aGUgdGFyZ2V0IGNncm91cCBpcyBhIGRlc2NlbmRhbnQgb2YgeW91ciBvd24gY2dyb3VwCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqbnNfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCQkJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlzdHJ1Y3QgbnNfY2dyb3VwICpuc19jZ3JvdXA7CisKKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiBFUlJfUFRSKC1FUEVSTSk7CisJaWYgKCFjZ3JvdXBfaXNfZGVzY2VuZGFudChjZ3JvdXApKQorCQlyZXR1cm4gRVJSX1BUUigtRVBFUk0pOworCisJbnNfY2dyb3VwID0ga3phbGxvYyhzaXplb2YoKm5zX2Nncm91cCksIEdGUF9LRVJORUwpOworCWlmICghbnNfY2dyb3VwKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlzcGluX2xvY2tfaW5pdCgmbnNfY2dyb3VwLT5sb2NrKTsKKwlyZXR1cm4gJm5zX2Nncm91cC0+Y3NzOworfQorCitzdGF0aWMgdm9pZCBuc19kZXN0cm95KHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKK3sKKwlzdHJ1Y3QgbnNfY2dyb3VwICpuc19jZ3JvdXA7CisKKwluc19jZ3JvdXAgPSBjZ3JvdXBfdG9fbnMoY2dyb3VwKTsKKwlrZnJlZShuc19jZ3JvdXApOworfQorCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBuc19zdWJzeXMgPSB7CisJLm5hbWUgPSAibnMiLAorCS5jYW5fYXR0YWNoID0gbnNfY2FuX2F0dGFjaCwKKwkuY3JlYXRlID0gbnNfY3JlYXRlLAorCS5kZXN0cm95ICA9IG5zX2Rlc3Ryb3ksCisJLnN1YnN5c19pZCA9IG5zX3N1YnN5c19pZCwKK307CmRpZmYgLS1naXQgYS9rZXJuZWwvbnNwcm94eS5jIGIva2VybmVsL25zcHJveHkuYwppbmRleCAwNDllN2MwLi43OWY4NzFiIDEwMDY0NAotLS0gYS9rZXJuZWwvbnNwcm94eS5jCisrKyBiL2tlcm5lbC9uc3Byb3h5LmMKQEAgLTI2LDE5ICsyNiw2IEBACiAKIHN0cnVjdCBuc3Byb3h5IGluaXRfbnNwcm94eSA9IElOSVRfTlNQUk9YWShpbml0X25zcHJveHkpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25zcHJveHkoc3RydWN0IG5zcHJveHkgKm5zKQotewotCWF0b21pY19pbmMoJm5zLT5jb3VudCk7Ci19Ci0KLXZvaWQgZ2V0X3Rhc2tfbmFtZXNwYWNlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKLXsKLQlzdHJ1Y3QgbnNwcm94eSAqbnMgPSB0c2stPm5zcHJveHk7Ci0JaWYgKG5zKSB7Ci0JCWdldF9uc3Byb3h5KG5zKTsKLQl9Ci19Ci0KIC8qCiAgKiBjcmVhdGVzIGEgY29weSBvZiAib3JpZyIgd2l0aCByZWZjb3VudCAxLgogICovCkBAIC04Nyw3ICs3NCw3IEBACiAJCWdvdG8gb3V0X2lwYzsKIAl9CiAKLQluZXdfbnNwLT5waWRfbnMgPSBjb3B5X3BpZF9ucyhmbGFncywgdHNrLT5uc3Byb3h5LT5waWRfbnMpOworCW5ld19uc3AtPnBpZF9ucyA9IGNvcHlfcGlkX25zKGZsYWdzLCB0YXNrX2FjdGl2ZV9waWRfbnModHNrKSk7CiAJaWYgKElTX0VSUihuZXdfbnNwLT5waWRfbnMpKSB7CiAJCWVyciA9IFBUUl9FUlIobmV3X25zcC0+cGlkX25zKTsKIAkJZ290byBvdXRfcGlkOwpAQCAtMTQyLDcgKzEyOSw4IEBACiAKIAlnZXRfbnNwcm94eShvbGRfbnMpOwogCi0JaWYgKCEoZmxhZ3MgJiAoQ0xPTkVfTkVXTlMgfCBDTE9ORV9ORVdVVFMgfCBDTE9ORV9ORVdJUEMgfCBDTE9ORV9ORVdVU0VSIHwgQ0xPTkVfTkVXTkVUKSkpCisJaWYgKCEoZmxhZ3MgJiAoQ0xPTkVfTkVXTlMgfCBDTE9ORV9ORVdVVFMgfCBDTE9ORV9ORVdJUEMgfAorCQkJCUNMT05FX05FV1VTRVIgfCBDTE9ORV9ORVdQSUQgfCBDTE9ORV9ORVdORVQpKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpIHsKQEAgLTE1Niw3ICsxNDQsMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJZXJyID0gbnNfY2dyb3VwX2Nsb25lKHRzayk7CisJaWYgKGVycikgeworCQlwdXRfbnNwcm94eShuZXdfbnMpOworCQlnb3RvIG91dDsKKwl9CisKIAl0c2stPm5zcHJveHkgPSBuZXdfbnM7CisKIG91dDoKIAlwdXRfbnNwcm94eShvbGRfbnMpOwogCXJldHVybiBlcnI7CkBAIC0xOTYsMTEgKzE5MSw0NiBAQAogCiAJKm5ld19uc3AgPSBjcmVhdGVfbmV3X25hbWVzcGFjZXModW5zaGFyZV9mbGFncywgY3VycmVudCwKIAkJCQluZXdfZnMgPyBuZXdfZnMgOiBjdXJyZW50LT5mcyk7Ci0JaWYgKElTX0VSUigqbmV3X25zcCkpCisJaWYgKElTX0VSUigqbmV3X25zcCkpIHsKIAkJZXJyID0gUFRSX0VSUigqbmV3X25zcCk7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IG5zX2Nncm91cF9jbG9uZShjdXJyZW50KTsKKwlpZiAoZXJyKQorCQlwdXRfbnNwcm94eSgqbmV3X25zcCk7CisKK291dDoKIAlyZXR1cm4gZXJyOwogfQogCit2b2lkIHN3aXRjaF90YXNrX25hbWVzcGFjZXMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbnNwcm94eSAqbmV3KQoreworCXN0cnVjdCBuc3Byb3h5ICpuczsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlucyA9IHAtPm5zcHJveHk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIocC0+bnNwcm94eSwgbmV3KTsKKworCWlmIChucyAmJiBhdG9taWNfZGVjX2FuZF90ZXN0KCZucy0+Y291bnQpKSB7CisJCS8qCisJCSAqIHdhaXQgZm9yIG90aGVycyB0byBnZXQgd2hhdCB0aGV5IHdhbnQgZnJvbSB0aGlzIG5zcHJveHkuCisJCSAqCisJCSAqIGNhbm5vdCByZWxlYXNlIHRoaXMgbnNwcm94eSB2aWEgdGhlIGNhbGxfcmN1KCkgc2luY2UKKwkJICogcHV0X21udF9ucygpIHdpbGwgd2FudCB0byBzbGVlcAorCQkgKi8KKwkJc3luY2hyb25pemVfcmN1KCk7CisJCWZyZWVfbnNwcm94eShucyk7CisJfQorfQorCit2b2lkIGV4aXRfdGFza19uYW1lc3BhY2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlzd2l0Y2hfdGFza19uYW1lc3BhY2VzKHAsIE5VTEwpOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBuc3Byb3h5X2NhY2hlX2luaXQodm9pZCkKIHsKIAluc3Byb3h5X2NhY2hlcCA9IEtNRU1fQ0FDSEUobnNwcm94eSwgU0xBQl9QQU5JQyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFuaWMuYyBiL2tlcm5lbC9wYW5pYy5jCmluZGV4IGY2NGY0YzEuLjZmNmUwM2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYW5pYy5jCisrKyBiL2tlcm5lbC9wYW5pYy5jCkBAIC01NiwxNCArNTYsMTQgQEAKICAqCiAgKglUaGlzIGZ1bmN0aW9uIG5ldmVyIHJldHVybnMuCiAgKi8KLSAKKwogTk9SRVRfVFlQRSB2b2lkIHBhbmljKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKIHsKIAlsb25nIGk7CiAJc3RhdGljIGNoYXIgYnVmWzEwMjRdOwogCXZhX2xpc3QgYXJnczsKICNpZiBkZWZpbmVkKENPTkZJR19TMzkwKQotICAgICAgICB1bnNpZ25lZCBsb25nIGNhbGxlciA9ICh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJdW5zaWduZWQgbG9uZyBjYWxsZXIgPSAodW5zaWduZWQgbG9uZykgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOwogI2VuZGlmCiAKIAkvKgpAQCAtMTI4LDcgKzEyOCw3IEBACiAJfQogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfUzM5MCkKLSAgICAgICAgZGlzYWJsZWRfd2FpdChjYWxsZXIpOworCWRpc2FibGVkX3dhaXQoY2FsbGVyKTsKICNlbmRpZgogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlmb3IgKGkgPSAwOzspIHsKQEAgLTE0OCwxMyArMTQ4LDEzIEBACiAgKiAgJ0YnIC0gTW9kdWxlIGhhcyBiZWVuIGZvcmNpYmx5IGxvYWRlZC4KICAqICAnUycgLSBTTVAgd2l0aCBDUFVzIG5vdCBkZXNpZ25lZCBmb3IgU01QLgogICogICdSJyAtIFVzZXIgZm9yY2VkIGEgbW9kdWxlIHVubG9hZC4KLSAqICAnTScgLSBNYWNoaW5lIGhhZCBhIG1hY2hpbmUgY2hlY2sgZXhwZXJpZW5jZS4KKyAqICAnTScgLSBTeXN0ZW0gZXhwZXJpZW5jZWQgYSBtYWNoaW5lIGNoZWNrIGV4Y2VwdGlvbi4KICAqICAnQicgLSBTeXN0ZW0gaGFzIGhpdCBiYWRfcGFnZS4KICAqICAnVScgLSBVc2Vyc3BhY2UtZGVmaW5lZCBuYXVnaHRpbmVzcy4KICAqCiAgKglUaGUgc3RyaW5nIGlzIG92ZXJ3cml0dGVuIGJ5IHRoZSBuZXh0IGNhbGwgdG8gcHJpbnRfdGFpbnQoKS4KICAqLwotIAorCiBjb25zdCBjaGFyICpwcmludF90YWludGVkKHZvaWQpCiB7CiAJc3RhdGljIGNoYXIgYnVmWzIwXTsKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJdGFpbnRlZCAmIFRBSU5UX0ZPUkNFRF9NT0RVTEUgPyAnRicgOiAnICcsCiAJCQl0YWludGVkICYgVEFJTlRfVU5TQUZFX1NNUCA/ICdTJyA6ICcgJywKIAkJCXRhaW50ZWQgJiBUQUlOVF9GT1JDRURfUk1NT0QgPyAnUicgOiAnICcsCi0gCQkJdGFpbnRlZCAmIFRBSU5UX01BQ0hJTkVfQ0hFQ0sgPyAnTScgOiAnICcsCisJCQl0YWludGVkICYgVEFJTlRfTUFDSElORV9DSEVDSyA/ICdNJyA6ICcgJywKIAkJCXRhaW50ZWQgJiBUQUlOVF9CQURfUEFHRSA/ICdCJyA6ICcgJywKIAkJCXRhaW50ZWQgJiBUQUlOVF9VU0VSID8gJ1UnIDogJyAnLAogCQkJdGFpbnRlZCAmIFRBSU5UX0RJRSA/ICdEJyA6ICcgJyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggMWQ2YWNhMi4uMTZmMjY5ZSAxMDA2NDQKLS0tIGEva2VybmVsL3BhcmFtcy5jCisrKyBiL2tlcm5lbC9wYXJhbXMuYwpAQCAtNTkyLDExICs1OTIsMTcgQEAKIAogCWZvciAoaT0wOyBpIDwgX19zdG9wX19fcGFyYW0gLSBfX3N0YXJ0X19fcGFyYW07IGkrKykgewogCQljaGFyICpkb3Q7CisJCXNpemVfdCBrcGxlbjsKIAogCQlrcCA9ICZfX3N0YXJ0X19fcGFyYW1baV07CisJCWtwbGVuID0gc3RybGVuKGtwLT5uYW1lKTsKIAogCQkvKiBXZSBkbyBub3QgaGFuZGxlIGFyZ3Mgd2l0aG91dCBwZXJpb2RzLiAqLwotCQlkb3QgPSBtZW1jaHIoa3AtPm5hbWUsICcuJywgTUFYX0tCVUlMRF9NT0ROQU1FKTsKKwkJaWYgKGtwbGVuID4gTUFYX0tCVUlMRF9NT0ROQU1FKSB7CisJCQlERUJVR1AoImtlcm5lbCBwYXJhbWV0ZXIgbmFtZSBpcyB0b28gbG9uZzogJXNcbiIsIGtwLT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWRvdCA9IG1lbWNocihrcC0+bmFtZSwgJy4nLCBrcGxlbik7CiAJCWlmICghZG90KSB7CiAJCQlERUJVR1AoImNvdWxkbid0IGZpbmQgcGVyaW9kIGluICVzXG4iLCBrcC0+bmFtZSk7CiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9waWQuYyBiL2tlcm5lbC9waWQuYwppbmRleCBjNmUzZjlmLi5kMWRiMzZiIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkLmMKKysrIGIva2VybmVsL3BpZC5jCkBAIC0xOCw2ICsxOCwxMiBAQAogICogYWxsb2NhdGlvbiBzY2VuYXJpbyB3aGVuIGFsbCBidXQgb25lIG91dCBvZiAxIG1pbGxpb24gUElEcyBwb3NzaWJsZSBhcmUKICAqIGFsbG9jYXRlZCBhbHJlYWR5OiB0aGUgc2Nhbm5pbmcgb2YgMzIgbGlzdCBlbnRyaWVzIGFuZCBhdCBtb3N0IFBBR0VfU0laRQogICogYnl0ZXMuIFRoZSB0eXBpY2FsIGZhc3RwYXRoIGlzIGEgc2luZ2xlIHN1Y2Nlc3NmdWwgc2V0Yml0LiBGcmVlaW5nIGlzIE8oMSkuCisgKgorICogUGlkIG5hbWVzcGFjZXM6CisgKiAgICAoQykgMjAwNyBQYXZlbCBFbWVseWFub3YgPHhlbXVsQG9wZW52ei5vcmc+LCBPcGVuVlosIFNXc29mdCBJbmMuCisgKiAgICAoQykgMjAwNyBTdWthZGV2IEJoYXR0aXByb2x1IDxzdWthZGV2QHVzLmlibS5jb20+LCBJQk0KKyAqICAgICBNYW55IHRoYW5rcyB0byBPbGVnIE5lc3Rlcm92IGZvciBjb21tZW50cyBhbmQgaGVscAorICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTI4LDEyICszNCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdF90YXNrLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KIAotI2RlZmluZSBwaWRfaGFzaGZuKG5yKSBoYXNoX2xvbmcoKHVuc2lnbmVkIGxvbmcpbnIsIHBpZGhhc2hfc2hpZnQpCisjZGVmaW5lIHBpZF9oYXNoZm4obnIsIG5zKQlcCisJaGFzaF9sb25nKCh1bnNpZ25lZCBsb25nKW5yICsgKHVuc2lnbmVkIGxvbmcpbnMsIHBpZGhhc2hfc2hpZnQpCiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgKnBpZF9oYXNoOwogc3RhdGljIGludCBwaWRoYXNoX3NoaWZ0Owotc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpwaWRfY2FjaGVwOwogc3RydWN0IHBpZCBpbml0X3N0cnVjdF9waWQgPSBJTklUX1NUUlVDVF9QSUQ7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnBpZF9uc19jYWNoZXA7CiAKIGludCBwaWRfbWF4ID0gUElEX01BWF9ERUZBVUxUOwogCkBAIC02OCw4ICs3NiwyNSBAQAogCQlbIDAgLi4uIFBJRE1BUF9FTlRSSUVTLTFdID0geyBBVE9NSUNfSU5JVChCSVRTX1BFUl9QQUdFKSwgTlVMTCB9CiAJfSwKIAkubGFzdF9waWQgPSAwLAotCS5jaGlsZF9yZWFwZXIgPSAmaW5pdF90YXNrCisJLmxldmVsID0gMCwKKwkuY2hpbGRfcmVhcGVyID0gJmluaXRfdGFzaywKIH07CitFWFBPUlRfU1lNQk9MX0dQTChpbml0X3BpZF9ucyk7CisKK2ludCBpc19jb250YWluZXJfaW5pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcGlkICpwaWQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcGlkID0gdGFza19waWQodHNrKTsKKwlpZiAocGlkICE9IE5VTEwgJiYgcGlkLT5udW1iZXJzW3BpZC0+bGV2ZWxdLm5yID09IDEpCisJCXJldCA9IDE7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpc19jb250YWluZXJfaW5pdCk7CiAKIC8qCiAgKiBOb3RlOiBkaXNhYmxlIGludGVycnVwdHMgd2hpbGUgdGhlIHBpZG1hcF9sb2NrIGlzIGhlbGQgYXMgYW4KQEAgLTE3NiwxMSArMjAxLDE3IEBACiAKIGZhc3RjYWxsIHZvaWQgcHV0X3BpZChzdHJ1Y3QgcGlkICpwaWQpCiB7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zOworCiAJaWYgKCFwaWQpCiAJCXJldHVybjsKKworCW5zID0gcGlkLT5udW1iZXJzW3BpZC0+bGV2ZWxdLm5zOwogCWlmICgoYXRvbWljX3JlYWQoJnBpZC0+Y291bnQpID09IDEpIHx8Ci0JICAgICBhdG9taWNfZGVjX2FuZF90ZXN0KCZwaWQtPmNvdW50KSkKLQkJa21lbV9jYWNoZV9mcmVlKHBpZF9jYWNoZXAsIHBpZCk7CisJICAgICBhdG9taWNfZGVjX2FuZF90ZXN0KCZwaWQtPmNvdW50KSkgeworCQlrbWVtX2NhY2hlX2ZyZWUobnMtPnBpZF9jYWNoZXAsIHBpZCk7CisJCXB1dF9waWRfbnMobnMpOworCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHB1dF9waWQpOwogCkBAIC0xOTMsNjAgKzIyNCw5NCBAQAogZmFzdGNhbGwgdm9pZCBmcmVlX3BpZChzdHJ1Y3QgcGlkICpwaWQpCiB7CiAJLyogV2UgY2FuIGJlIGNhbGxlZCB3aXRoIHdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKSBoZWxkICovCisJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwaWRtYXBfbG9jaywgZmxhZ3MpOwotCWhsaXN0X2RlbF9yY3UoJnBpZC0+cGlkX2NoYWluKTsKKwlmb3IgKGkgPSAwOyBpIDw9IHBpZC0+bGV2ZWw7IGkrKykKKwkJaGxpc3RfZGVsX3JjdSgmcGlkLT5udW1iZXJzW2ldLnBpZF9jaGFpbik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGlkbWFwX2xvY2ssIGZsYWdzKTsKIAotCWZyZWVfcGlkbWFwKCZpbml0X3BpZF9ucywgcGlkLT5ucik7CisJZm9yIChpID0gMDsgaSA8PSBwaWQtPmxldmVsOyBpKyspCisJCWZyZWVfcGlkbWFwKHBpZC0+bnVtYmVyc1tpXS5ucywgcGlkLT5udW1iZXJzW2ldLm5yKTsKKwogCWNhbGxfcmN1KCZwaWQtPnJjdSwgZGVsYXllZF9wdXRfcGlkKTsKIH0KIAotc3RydWN0IHBpZCAqYWxsb2NfcGlkKHZvaWQpCitzdHJ1Y3QgcGlkICphbGxvY19waWQoc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQogewogCXN0cnVjdCBwaWQgKnBpZDsKIAllbnVtIHBpZF90eXBlIHR5cGU7Ci0JaW50IG5yID0gLTE7CisJaW50IGksIG5yOworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICp0bXA7CisJc3RydWN0IHVwaWQgKnVwaWQ7CiAKLQlwaWQgPSBrbWVtX2NhY2hlX2FsbG9jKHBpZF9jYWNoZXAsIEdGUF9LRVJORUwpOworCXBpZCA9IGttZW1fY2FjaGVfYWxsb2MobnMtPnBpZF9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghcGlkKQogCQlnb3RvIG91dDsKIAotCW5yID0gYWxsb2NfcGlkbWFwKGN1cnJlbnQtPm5zcHJveHktPnBpZF9ucyk7Ci0JaWYgKG5yIDwgMCkKLQkJZ290byBvdXRfZnJlZTsKKwl0bXAgPSBuczsKKwlmb3IgKGkgPSBucy0+bGV2ZWw7IGkgPj0gMDsgaS0tKSB7CisJCW5yID0gYWxsb2NfcGlkbWFwKHRtcCk7CisJCWlmIChuciA8IDApCisJCQlnb3RvIG91dF9mcmVlOwogCisJCXBpZC0+bnVtYmVyc1tpXS5uciA9IG5yOworCQlwaWQtPm51bWJlcnNbaV0ubnMgPSB0bXA7CisJCXRtcCA9IHRtcC0+cGFyZW50OworCX0KKworCWdldF9waWRfbnMobnMpOworCXBpZC0+bGV2ZWwgPSBucy0+bGV2ZWw7CiAJYXRvbWljX3NldCgmcGlkLT5jb3VudCwgMSk7Ci0JcGlkLT5uciA9IG5yOwogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBQSURUWVBFX01BWDsgKyt0eXBlKQogCQlJTklUX0hMSVNUX0hFQUQoJnBpZC0+dGFza3NbdHlwZV0pOwogCiAJc3Bpbl9sb2NrX2lycSgmcGlkbWFwX2xvY2spOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmcGlkLT5waWRfY2hhaW4sICZwaWRfaGFzaFtwaWRfaGFzaGZuKHBpZC0+bnIpXSk7CisJZm9yIChpID0gbnMtPmxldmVsOyBpID49IDA7IGktLSkgeworCQl1cGlkID0gJnBpZC0+bnVtYmVyc1tpXTsKKwkJaGxpc3RfYWRkX2hlYWRfcmN1KCZ1cGlkLT5waWRfY2hhaW4sCisJCQkJJnBpZF9oYXNoW3BpZF9oYXNoZm4odXBpZC0+bnIsIHVwaWQtPm5zKV0pOworCX0KIAlzcGluX3VubG9ja19pcnEoJnBpZG1hcF9sb2NrKTsKIAogb3V0OgogCXJldHVybiBwaWQ7CiAKIG91dF9mcmVlOgotCWttZW1fY2FjaGVfZnJlZShwaWRfY2FjaGVwLCBwaWQpOworCWZvciAoaSsrOyBpIDw9IG5zLT5sZXZlbDsgaSsrKQorCQlmcmVlX3BpZG1hcChwaWQtPm51bWJlcnNbaV0ubnMsIHBpZC0+bnVtYmVyc1tpXS5ucik7CisKKwlrbWVtX2NhY2hlX2ZyZWUobnMtPnBpZF9jYWNoZXAsIHBpZCk7CiAJcGlkID0gTlVMTDsKIAlnb3RvIG91dDsKIH0KIAotc3RydWN0IHBpZCAqIGZhc3RjYWxsIGZpbmRfcGlkKGludCBucikKK3N0cnVjdCBwaWQgKiBmYXN0Y2FsbCBmaW5kX3BpZF9ucyhpbnQgbnIsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZWxlbTsKLQlzdHJ1Y3QgcGlkICpwaWQ7CisJc3RydWN0IHVwaWQgKnBucjsKIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwaWQsIGVsZW0sCi0JCQkmcGlkX2hhc2hbcGlkX2hhc2hmbihucildLCBwaWRfY2hhaW4pIHsKLQkJaWYgKHBpZC0+bnIgPT0gbnIpCi0JCQlyZXR1cm4gcGlkOwotCX0KKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocG5yLCBlbGVtLAorCQkJJnBpZF9oYXNoW3BpZF9oYXNoZm4obnIsIG5zKV0sIHBpZF9jaGFpbikKKwkJaWYgKHBuci0+bnIgPT0gbnIgJiYgcG5yLT5ucyA9PSBucykKKwkJCXJldHVybiBjb250YWluZXJfb2YocG5yLCBzdHJ1Y3QgcGlkLAorCQkJCQludW1iZXJzW25zLT5sZXZlbF0pOworCiAJcmV0dXJuIE5VTEw7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmaW5kX3BpZF9ucyk7CisKK3N0cnVjdCBwaWQgKmZpbmRfdnBpZChpbnQgbnIpCit7CisJcmV0dXJuIGZpbmRfcGlkX25zKG5yLCBjdXJyZW50LT5uc3Byb3h5LT5waWRfbnMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZmluZF92cGlkKTsKKworc3RydWN0IHBpZCAqZmluZF9waWQoaW50IG5yKQoreworCXJldHVybiBmaW5kX3BpZF9ucyhuciwgJmluaXRfcGlkX25zKTsKK30KIEVYUE9SVF9TWU1CT0xfR1BMKGZpbmRfcGlkKTsKIAogLyoKQEAgLTMwNywxMiArMzcyLDMyIEBACiAvKgogICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgcmN1X3JlYWRfbG9jaygpIG9yIHdpdGggdGFza2xpc3RfbG9jayByZWFkLWhlbGQuCiAgKi8KLXN0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZF90eXBlKGludCB0eXBlLCBpbnQgbnIpCitzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZpbmRfdGFza19ieV9waWRfdHlwZV9ucyhpbnQgdHlwZSwgaW50IG5yLAorCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7Ci0JcmV0dXJuIHBpZF90YXNrKGZpbmRfcGlkKG5yKSwgdHlwZSk7CisJcmV0dXJuIHBpZF90YXNrKGZpbmRfcGlkX25zKG5yLCBucyksIHR5cGUpOwogfQogCi1FWFBPUlRfU1lNQk9MKGZpbmRfdGFza19ieV9waWRfdHlwZSk7CitFWFBPUlRfU1lNQk9MKGZpbmRfdGFza19ieV9waWRfdHlwZV9ucyk7CisKK3N0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZChwaWRfdCBucikKK3sKKwlyZXR1cm4gZmluZF90YXNrX2J5X3BpZF90eXBlX25zKFBJRFRZUEVfUElELCBuciwgJmluaXRfcGlkX25zKTsKK30KK0VYUE9SVF9TWU1CT0woZmluZF90YXNrX2J5X3BpZCk7CisKK3N0cnVjdCB0YXNrX3N0cnVjdCAqZmluZF90YXNrX2J5X3ZwaWQocGlkX3Qgdm5yKQoreworCXJldHVybiBmaW5kX3Rhc2tfYnlfcGlkX3R5cGVfbnMoUElEVFlQRV9QSUQsIHZuciwKKwkJCWN1cnJlbnQtPm5zcHJveHktPnBpZF9ucyk7Cit9CitFWFBPUlRfU1lNQk9MKGZpbmRfdGFza19ieV92cGlkKTsKKworc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZF90IG5yLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCit7CisJcmV0dXJuIGZpbmRfdGFza19ieV9waWRfdHlwZV9ucyhQSURUWVBFX1BJRCwgbnIsIG5zKTsKK30KK0VYUE9SVF9TWU1CT0woZmluZF90YXNrX2J5X3BpZF9ucyk7CiAKIHN0cnVjdCBwaWQgKmdldF90YXNrX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUgdHlwZSkKIHsKQEAgLTMzOSw0NSArNDI0LDIzOSBAQAogCXN0cnVjdCBwaWQgKnBpZDsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlwaWQgPSBnZXRfcGlkKGZpbmRfcGlkKG5yKSk7CisJcGlkID0gZ2V0X3BpZChmaW5kX3ZwaWQobnIpKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBwaWQ7CiB9CiAKK3BpZF90IHBpZF9ucl9ucyhzdHJ1Y3QgcGlkICpwaWQsIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlzdHJ1Y3QgdXBpZCAqdXBpZDsKKwlwaWRfdCBuciA9IDA7CisKKwlpZiAocGlkICYmIG5zLT5sZXZlbCA8PSBwaWQtPmxldmVsKSB7CisJCXVwaWQgPSAmcGlkLT5udW1iZXJzW25zLT5sZXZlbF07CisJCWlmICh1cGlkLT5ucyA9PSBucykKKwkJCW5yID0gdXBpZC0+bnI7CisJfQorCXJldHVybiBucjsKK30KKworcGlkX3QgdGFza19waWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlyZXR1cm4gcGlkX25yX25zKHRhc2tfcGlkKHRzayksIG5zKTsKK30KK0VYUE9SVF9TWU1CT0wodGFza19waWRfbnJfbnMpOworCitwaWRfdCB0YXNrX3RnaWRfbnJfbnMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucykKK3sKKwlyZXR1cm4gcGlkX25yX25zKHRhc2tfdGdpZCh0c2spLCBucyk7Cit9CitFWFBPUlRfU1lNQk9MKHRhc2tfdGdpZF9ucl9ucyk7CisKK3BpZF90IHRhc2tfcGdycF9ucl9ucyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQoreworCXJldHVybiBwaWRfbnJfbnModGFza19wZ3JwKHRzayksIG5zKTsKK30KK0VYUE9SVF9TWU1CT0wodGFza19wZ3JwX25yX25zKTsKKworcGlkX3QgdGFza19zZXNzaW9uX25yX25zKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCit7CisJcmV0dXJuIHBpZF9ucl9ucyh0YXNrX3Nlc3Npb24odHNrKSwgbnMpOworfQorRVhQT1JUX1NZTUJPTCh0YXNrX3Nlc3Npb25fbnJfbnMpOworCiAvKgogICogVXNlZCBieSBwcm9jIHRvIGZpbmQgdGhlIGZpcnN0IHBpZCB0aGF0IGlzIGdyZWF0ZXIgdGhlbiBvciBlcXVhbCB0byBuci4KICAqCiAgKiBJZiB0aGVyZSBpcyBhIHBpZCBhdCBuciB0aGlzIGZ1bmN0aW9uIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgZmluZF9waWQuCiAgKi8KLXN0cnVjdCBwaWQgKmZpbmRfZ2VfcGlkKGludCBucikKK3N0cnVjdCBwaWQgKmZpbmRfZ2VfcGlkKGludCBuciwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zKQogewogCXN0cnVjdCBwaWQgKnBpZDsKIAogCWRvIHsKLQkJcGlkID0gZmluZF9waWQobnIpOworCQlwaWQgPSBmaW5kX3BpZF9ucyhuciwgbnMpOwogCQlpZiAocGlkKQogCQkJYnJlYWs7Ci0JCW5yID0gbmV4dF9waWRtYXAoY3VycmVudC0+bnNwcm94eS0+cGlkX25zLCBucik7CisJCW5yID0gbmV4dF9waWRtYXAobnMsIG5yKTsKIAl9IHdoaWxlIChuciA+IDApOwogCiAJcmV0dXJuIHBpZDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGZpbmRfZ2V0X3BpZCk7CiAKK3N0cnVjdCBwaWRfY2FjaGUgeworCWludCBucl9pZHM7CisJY2hhciBuYW1lWzE2XTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQocGlkX2NhY2hlc19saCk7CitzdGF0aWMgREVGSU5FX01VVEVYKHBpZF9jYWNoZXNfbXV0ZXgpOworCisvKgorICogY3JlYXRlcyB0aGUga21lbSBjYWNoZSB0byBhbGxvY2F0ZSBwaWRzIGZyb20uCisgKiBAbnJfaWRzOiB0aGUgbnVtYmVyIG9mIG51bWVyaWNhbCBpZHMgdGhpcyBwaWQgd2lsbCBoYXZlIHRvIGNhcnJ5CisgKi8KKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpjcmVhdGVfcGlkX2NhY2hlcChpbnQgbnJfaWRzKQoreworCXN0cnVjdCBwaWRfY2FjaGUgKnBjYWNoZTsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwOworCisJbXV0ZXhfbG9jaygmcGlkX2NhY2hlc19tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSAocGNhY2hlLCAmcGlkX2NhY2hlc19saCwgbGlzdCkKKwkJaWYgKHBjYWNoZS0+bnJfaWRzID09IG5yX2lkcykKKwkJCWdvdG8gb3V0OworCisJcGNhY2hlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBpZF9jYWNoZSksIEdGUF9LRVJORUwpOworCWlmIChwY2FjaGUgPT0gTlVMTCkKKwkJZ290byBlcnJfYWxsb2M7CisKKwlzbnByaW50ZihwY2FjaGUtPm5hbWUsIHNpemVvZihwY2FjaGUtPm5hbWUpLCAicGlkXyVkIiwgbnJfaWRzKTsKKwljYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZShwY2FjaGUtPm5hbWUsCisJCQlzaXplb2Yoc3RydWN0IHBpZCkgKyAobnJfaWRzIC0gMSkgKiBzaXplb2Yoc3RydWN0IHVwaWQpLAorCQkJMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsKKwlpZiAoY2FjaGVwID09IE5VTEwpCisJCWdvdG8gZXJyX2NhY2hlcDsKKworCXBjYWNoZS0+bnJfaWRzID0gbnJfaWRzOworCXBjYWNoZS0+Y2FjaGVwID0gY2FjaGVwOworCWxpc3RfYWRkKCZwY2FjaGUtPmxpc3QsICZwaWRfY2FjaGVzX2xoKTsKK291dDoKKwltdXRleF91bmxvY2soJnBpZF9jYWNoZXNfbXV0ZXgpOworCXJldHVybiBwY2FjaGUtPmNhY2hlcDsKKworZXJyX2NhY2hlcDoKKwlrZnJlZShwY2FjaGUpOworZXJyX2FsbG9jOgorCW11dGV4X3VubG9jaygmcGlkX2NhY2hlc19tdXRleCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY3JlYXRlX3BpZF9uYW1lc3BhY2UoaW50IGxldmVsKQoreworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKKwlpbnQgaTsKKworCW5zID0ga21lbV9jYWNoZV9hbGxvYyhwaWRfbnNfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlpZiAobnMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlucy0+cGlkbWFwWzBdLnBhZ2UgPSBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFucy0+cGlkbWFwWzBdLnBhZ2UpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlucy0+cGlkX2NhY2hlcCA9IGNyZWF0ZV9waWRfY2FjaGVwKGxldmVsICsgMSk7CisJaWYgKG5zLT5waWRfY2FjaGVwID09IE5VTEwpCisJCWdvdG8gb3V0X2ZyZWVfbWFwOworCisJa3JlZl9pbml0KCZucy0+a3JlZik7CisJbnMtPmxhc3RfcGlkID0gMDsKKwlucy0+Y2hpbGRfcmVhcGVyID0gTlVMTDsKKwlucy0+bGV2ZWwgPSBsZXZlbDsKKworCXNldF9iaXQoMCwgbnMtPnBpZG1hcFswXS5wYWdlKTsKKwlhdG9taWNfc2V0KCZucy0+cGlkbWFwWzBdLm5yX2ZyZWUsIEJJVFNfUEVSX1BBR0UgLSAxKTsKKworCWZvciAoaSA9IDE7IGkgPCBQSURNQVBfRU5UUklFUzsgaSsrKSB7CisJCW5zLT5waWRtYXBbaV0ucGFnZSA9IDA7CisJCWF0b21pY19zZXQoJm5zLT5waWRtYXBbaV0ubnJfZnJlZSwgQklUU19QRVJfUEFHRSk7CisJfQorCisJcmV0dXJuIG5zOworCitvdXRfZnJlZV9tYXA6CisJa2ZyZWUobnMtPnBpZG1hcFswXS5wYWdlKTsKK291dF9mcmVlOgorCWttZW1fY2FjaGVfZnJlZShwaWRfbnNfY2FjaGVwLCBucyk7CitvdXQ6CisJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cit9CisKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfcGlkX25hbWVzcGFjZShzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUElETUFQX0VOVFJJRVM7IGkrKykKKwkJa2ZyZWUobnMtPnBpZG1hcFtpXS5wYWdlKTsKKwlrbWVtX2NhY2hlX2ZyZWUocGlkX25zX2NhY2hlcCwgbnMpOworfQorCiBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqY29weV9waWRfbnModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm9sZF9ucykKIHsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbmV3X25zOworCiAJQlVHX09OKCFvbGRfbnMpOwotCWdldF9waWRfbnMob2xkX25zKTsKLQlyZXR1cm4gb2xkX25zOworCW5ld19ucyA9IGdldF9waWRfbnMob2xkX25zKTsKKwlpZiAoIShmbGFncyAmIENMT05FX05FV1BJRCkpCisJCWdvdG8gb3V0OworCisJbmV3X25zID0gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAoZmxhZ3MgJiBDTE9ORV9USFJFQUQpCisJCWdvdG8gb3V0X3B1dDsKKworCW5ld19ucyA9IGNyZWF0ZV9waWRfbmFtZXNwYWNlKG9sZF9ucy0+bGV2ZWwgKyAxKTsKKwlpZiAoIUlTX0VSUihuZXdfbnMpKQorCQluZXdfbnMtPnBhcmVudCA9IGdldF9waWRfbnMob2xkX25zKTsKKworb3V0X3B1dDoKKwlwdXRfcGlkX25zKG9sZF9ucyk7CitvdXQ6CisJcmV0dXJuIG5ld19uczsKIH0KIAogdm9pZCBmcmVlX3BpZF9ucyhzdHJ1Y3Qga3JlZiAqa3JlZikKIHsKLQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CisJc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLCAqcGFyZW50OwogCiAJbnMgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBpZF9uYW1lc3BhY2UsIGtyZWYpOwotCWtmcmVlKG5zKTsKKworCXBhcmVudCA9IG5zLT5wYXJlbnQ7CisJZGVzdHJveV9waWRfbmFtZXNwYWNlKG5zKTsKKworCWlmIChwYXJlbnQgIT0gTlVMTCkKKwkJcHV0X3BpZF9ucyhwYXJlbnQpOworfQorCit2b2lkIHphcF9waWRfbnNfcHJvY2Vzc2VzKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpwaWRfbnMpCit7CisJaW50IG5yOworCWludCByYzsKKworCS8qCisJICogVGhlIGxhc3QgdGhyZWFkIGluIHRoZSBjZ3JvdXAtaW5pdCB0aHJlYWQgZ3JvdXAgaXMgdGVybWluYXRpbmcuCisJICogRmluZCByZW1haW5pbmcgcGlkX3RzIGluIHRoZSBuYW1lc3BhY2UsIHNpZ25hbCBhbmQgd2FpdCBmb3IgdGhlbQorCSAqIHRvIGV4aXQuCisJICoKKwkgKiBOb3RlOiAgVGhpcyBzaWduYWxzIGVhY2ggdGhyZWFkcyBpbiB0aGUgbmFtZXNwYWNlIC0gZXZlbiB0aG9zZSB0aGF0CisJICogCSAgYmVsb25nIHRvIHRoZSBzYW1lIHRocmVhZCBncm91cCwgVG8gYXZvaWQgdGhpcywgd2Ugd291bGQgaGF2ZQorCSAqIAkgIHRvIHdhbGsgdGhlIGVudGlyZSB0YXNrbGlzdCBsb29raW5nIGEgcHJvY2Vzc2VzIGluIHRoaXMKKwkgKiAJICBuYW1lc3BhY2UsIGJ1dCB0aGF0IGNvdWxkIGJlIHVubmVjZXNzYXJpbHkgZXhwZW5zaXZlIGlmIHRoZQorCSAqIAkgIHBpZCBuYW1lc3BhY2UgaGFzIGp1c3QgYSBmZXcgcHJvY2Vzc2VzLiBPciB3ZSBuZWVkIHRvCisJICogCSAgbWFpbnRhaW4gYSB0YXNrbGlzdCBmb3IgZWFjaCBwaWQgbmFtZXNwYWNlLgorCSAqCisJICovCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwluciA9IG5leHRfcGlkbWFwKHBpZF9ucywgMSk7CisJd2hpbGUgKG5yID4gMCkgeworCQlraWxsX3Byb2NfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19QUklWLCBucik7CisJCW5yID0gbmV4dF9waWRtYXAocGlkX25zLCBucik7CisJfQorCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKworCWRvIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1NJR1BFTkRJTkcpOworCQlyYyA9IHN5c193YWl0NCgtMSwgTlVMTCwgX19XQUxMLCBOVUxMKTsKKwl9IHdoaWxlIChyYyAhPSAtRUNISUxEKTsKKworCisJLyogQ2hpbGQgcmVhcGVyIGZvciB0aGUgcGlkIG5hbWVzcGFjZSBpcyBnb2luZyBhd2F5ICovCisJcGlkX25zLT5jaGlsZF9yZWFwZXIgPSBOVUxMOworCXJldHVybjsKIH0KIAogLyoKQEAgLTQxMiw1ICs2OTEsOSBAQAogCXNldF9iaXQoMCwgaW5pdF9waWRfbnMucGlkbWFwWzBdLnBhZ2UpOwogCWF0b21pY19kZWMoJmluaXRfcGlkX25zLnBpZG1hcFswXS5ucl9mcmVlKTsKIAotCXBpZF9jYWNoZXAgPSBLTUVNX0NBQ0hFKHBpZCwgU0xBQl9QQU5JQyk7CisJaW5pdF9waWRfbnMucGlkX2NhY2hlcCA9IGNyZWF0ZV9waWRfY2FjaGVwKDEpOworCWlmIChpbml0X3BpZF9ucy5waWRfY2FjaGVwID09IE5VTEwpCisJCXBhbmljKCJDYW4ndCBjcmVhdGUgcGlkXzEgY2FjaGVwXG4iKTsKKworCXBpZF9uc19jYWNoZXAgPSBLTUVNX0NBQ0hFKHBpZF9uYW1lc3BhY2UsIFNMQUJfUEFOSUMpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKaW5kZXggYjUzYzhmYy4uNjhjOTYzNyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCkBAIC0yMSw4ICsyMSw4IEBACiAKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0JaWYgKCFwIHx8IChDUFVDTE9DS19QRVJUSFJFQUQod2hpY2hfY2xvY2spID8KLQkJICAgcC0+dGdpZCAhPSBjdXJyZW50LT50Z2lkIDogcC0+dGdpZCAhPSBwaWQpKSB7CisJaWYgKCFwIHx8ICEoQ1BVQ0xPQ0tfUEVSVEhSRUFEKHdoaWNoX2Nsb2NrKSA/CisJCSAgIHNhbWVfdGhyZWFkX2dyb3VwKHAsIGN1cnJlbnQpIDogdGhyZWFkX2dyb3VwX2xlYWRlcihwKSkpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCX0KIAlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CkBAIC0zMDgsMTMgKzMwOCwxMyBAQAogCQlwID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwogCQlpZiAocCkgewogCQkJaWYgKENQVUNMT0NLX1BFUlRIUkVBRCh3aGljaF9jbG9jaykpIHsKLQkJCQlpZiAocC0+dGdpZCA9PSBjdXJyZW50LT50Z2lkKSB7CisJCQkJaWYgKHNhbWVfdGhyZWFkX2dyb3VwKHAsIGN1cnJlbnQpKSB7CiAJCQkJCWVycm9yID0gY3B1X2Nsb2NrX3NhbXBsZSh3aGljaF9jbG9jaywKIAkJCQkJCQkJIHAsICZydG4pOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJCQlpZiAocC0+dGdpZCA9PSBwaWQgJiYgcC0+c2lnbmFsKSB7CisJCQkJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIocCkgJiYgcC0+c2lnbmFsKSB7CiAJCQkJCWVycm9yID0KIAkJCQkJICAgIGNwdV9jbG9ja19zYW1wbGVfZ3JvdXAod2hpY2hfY2xvY2ssCiAJCQkJCQkJICAgICAgICAgICBwLCAmcnRuKTsKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJcCA9IGN1cnJlbnQ7CiAJCX0gZWxzZSB7CiAJCQlwID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwotCQkJaWYgKHAgJiYgcC0+dGdpZCAhPSBjdXJyZW50LT50Z2lkKQorCQkJaWYgKHAgJiYgIXNhbWVfdGhyZWFkX2dyb3VwKHAsIGN1cnJlbnQpKQogCQkJCXAgPSBOVUxMOwogCQl9CiAJfSBlbHNlIHsKQEAgLTM2Myw3ICszNjMsNyBAQAogCQkJcCA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKIAkJfSBlbHNlIHsKIAkJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0JCQlpZiAocCAmJiBwLT50Z2lkICE9IHBpZCkKKwkJCWlmIChwICYmICF0aHJlYWRfZ3JvdXBfbGVhZGVyKHApKQogCQkJCXAgPSBOVUxMOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvc2l4LXRpbWVycy5jIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCmluZGV4IGQ3MWVkMDkuLjM1YjRiYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYworKysgYi9rZXJuZWwvcG9zaXgtdGltZXJzLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogCiAJaWYgKChldmVudC0+c2lnZXZfbm90aWZ5ICYgU0lHRVZfVEhSRUFEX0lEICkgJiYKIAkJKCEocnRuID0gZmluZF90YXNrX2J5X3BpZChldmVudC0+c2lnZXZfbm90aWZ5X3RocmVhZF9pZCkpIHx8Ci0JCSBydG4tPnRnaWQgIT0gY3VycmVudC0+dGdpZCB8fAorCQkgIXNhbWVfdGhyZWFkX2dyb3VwKHJ0biwgY3VycmVudCkgfHwKIAkJIChldmVudC0+c2lnZXZfbm90aWZ5ICYgflNJR0VWX1RIUkVBRF9JRCkgIT0gU0lHRVZfU0lHTkFMKSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTYwOCw3ICs2MDgsNyBAQAogCQlzcGluX2xvY2soJnRpbXItPml0X2xvY2spOwogCiAJCWlmICgodGltci0+aXRfaWQgIT0gdGltZXJfaWQpIHx8ICEodGltci0+aXRfcHJvY2VzcykgfHwKLQkJCQl0aW1yLT5pdF9wcm9jZXNzLT50Z2lkICE9IGN1cnJlbnQtPnRnaWQpIHsKKwkJCQkhc2FtZV90aHJlYWRfZ3JvdXAodGltci0+aXRfcHJvY2VzcywgY3VycmVudCkpIHsKIAkJCXNwaW5fdW5sb2NrKCZ0aW1yLT5pdF9sb2NrKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkcl9sb2NrLCAqZmxhZ3MpOwogCQkJdGltciA9IE5VTEw7CkBAIC05ODEsOSArOTgxLDIwIEBACiBzdGF0aWMgaW50IGNvbW1vbl9uc2xlZXAoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBpbnQgZmxhZ3MsCiAJCQkgc3RydWN0IHRpbWVzcGVjICp0c2F2ZSwgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcm10cCkKIHsKLQlyZXR1cm4gaHJ0aW1lcl9uYW5vc2xlZXAodHNhdmUsIHJtdHAsIGZsYWdzICYgVElNRVJfQUJTVElNRSA/Ci0JCQkJIEhSVElNRVJfTU9ERV9BQlMgOiBIUlRJTUVSX01PREVfUkVMLAotCQkJCSB3aGljaF9jbG9jayk7CisJc3RydWN0IHRpbWVzcGVjIHJtdDsKKwlpbnQgcmV0OworCisJcmV0ID0gaHJ0aW1lcl9uYW5vc2xlZXAodHNhdmUsIHJtdHAgPyAmcm10IDogTlVMTCwKKwkJCQlmbGFncyAmIFRJTUVSX0FCU1RJTUUgPworCQkJCUhSVElNRVJfTU9ERV9BQlMgOiBIUlRJTUVSX01PREVfUkVMLAorCQkJCXdoaWNoX2Nsb2NrKTsKKworCWlmIChyZXQgJiYgcm10cCkgeworCQlpZiAoY29weV90b191c2VyKHJtdHAsICZybXQsIHNpemVvZigqcm10cCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogYXNtbGlua2FnZSBsb25nCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IDE0YjBlMTAuLjhlMTg2YzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC00NCwxNyArNDQsNiBAQAogCS0tLWhlbHAtLS0KIAlUaGlzIG9wdGlvbiBlbmFibGVzIHZlcmJvc2UgbWVzc2FnZXMgZnJvbSB0aGUgUG93ZXIgTWFuYWdlbWVudCBjb2RlLgogCi1jb25maWcgRElTQUJMRV9DT05TT0xFX1NVU1BFTkQKLQlib29sICJLZWVwIGNvbnNvbGUocykgZW5hYmxlZCBkdXJpbmcgc3VzcGVuZC9yZXN1bWUgKERBTkdFUk9VUykiCi0JZGVwZW5kcyBvbiBQTV9ERUJVRyAmJiBQTV9TTEVFUAotCWRlZmF1bHQgbgotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiB0dXJucyBvZmYgdGhlIGNvbnNvbGUgc3VzcGVuZCBtZWNoYW5pc20gdGhhdCBwcmV2ZW50cwotCWRlYnVnIG1lc3NhZ2VzIGZyb20gcmVhY2hpbmcgdGhlIGNvbnNvbGUgZHVyaW5nIHRoZSBzdXNwZW5kL3Jlc3VtZQotCW9wZXJhdGlvbnMuICBUaGlzIG1heSBiZSBoZWxwZnVsIHdoZW4gZGVidWdnaW5nIGRldmljZSBkcml2ZXJzJwotCXN1c3BlbmQvcmVzdW1lIHJvdXRpbmVzLCBidXQgbWF5IGl0c2VsZiBsZWFkIHRvIHByb2JsZW1zLCBmb3IgZXhhbXBsZQotCWlmIG5ldGNvbnNvbGUgaXMgdXNlZC4KLQogY29uZmlnIFBNX1RSQUNFCiAJYm9vbCAiU3VzcGVuZC9yZXN1bWUgZXZlbnQgdHJhY2luZyIKIAlkZXBlbmRzIG9uIFBNX0RFQlVHICYmIFg4NiAmJiBQTV9TTEVFUCAmJiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9kaXNrLmMgYi9rZXJuZWwvcG93ZXIvZGlzay5jCmluZGV4IGViNzIyNTUuLjhiMTVmNzcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9kaXNrLmMKKysrIGIva2VybmVsL3Bvd2VyL2Rpc2suYwpAQCAtNDUsMTcgKzQ1LDE4IEBACiAKIHN0YXRpYyBpbnQgaGliZXJuYXRpb25fbW9kZSA9IEhJQkVSTkFUSU9OX1NIVVRET1dOOwogCi1zdGF0aWMgc3RydWN0IGhpYmVybmF0aW9uX29wcyAqaGliZXJuYXRpb25fb3BzOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9oaWJlcm5hdGlvbl9vcHMgKmhpYmVybmF0aW9uX29wczsKIAogLyoqCiAgKiBoaWJlcm5hdGlvbl9zZXRfb3BzIC0gc2V0IHRoZSBnbG9iYWwgaGliZXJuYXRlIG9wZXJhdGlvbnMKICAqIEBvcHM6IHRoZSBoaWJlcm5hdGlvbiBvcGVyYXRpb25zIHRvIHVzZSBpbiBzdWJzZXF1ZW50IGhpYmVybmF0aW9uIHRyYW5zaXRpb25zCiAgKi8KIAotdm9pZCBoaWJlcm5hdGlvbl9zZXRfb3BzKHN0cnVjdCBoaWJlcm5hdGlvbl9vcHMgKm9wcykKK3ZvaWQgaGliZXJuYXRpb25fc2V0X29wcyhzdHJ1Y3QgcGxhdGZvcm1faGliZXJuYXRpb25fb3BzICpvcHMpCiB7Ci0JaWYgKG9wcyAmJiAhKG9wcy0+cHJlcGFyZSAmJiBvcHMtPmVudGVyICYmIG9wcy0+ZmluaXNoCi0JICAgICYmIG9wcy0+cHJlX3Jlc3RvcmUgJiYgb3BzLT5yZXN0b3JlX2NsZWFudXApKSB7CisJaWYgKG9wcyAmJiAhKG9wcy0+c3RhcnQgJiYgb3BzLT5wcmVfc25hcHNob3QgJiYgb3BzLT5maW5pc2gKKwkgICAgJiYgb3BzLT5wcmVwYXJlICYmIG9wcy0+ZW50ZXIgJiYgb3BzLT5wcmVfcmVzdG9yZQorCSAgICAmJiBvcHMtPnJlc3RvcmVfY2xlYW51cCkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuOwogCX0KQEAgLTY5LDE2ICs3MCwzNyBAQAogCW11dGV4X3VubG9jaygmcG1fbXV0ZXgpOwogfQogCisvKioKKyAqCXBsYXRmb3JtX3N0YXJ0IC0gdGVsbCB0aGUgcGxhdGZvcm0gZHJpdmVyIHRoYXQgd2UncmUgc3RhcnRpbmcKKyAqCWhpYmVybmF0aW9uCisgKi8KKworc3RhdGljIGludCBwbGF0Zm9ybV9zdGFydChpbnQgcGxhdGZvcm1fbW9kZSkKK3sKKwlyZXR1cm4gKHBsYXRmb3JtX21vZGUgJiYgaGliZXJuYXRpb25fb3BzKSA/CisJCWhpYmVybmF0aW9uX29wcy0+c3RhcnQoKSA6IDA7Cit9CiAKIC8qKgotICoJcGxhdGZvcm1fcHJlcGFyZSAtIHByZXBhcmUgdGhlIG1hY2hpbmUgZm9yIGhpYmVybmF0aW9uIHVzaW5nIHRoZQorICoJcGxhdGZvcm1fcHJlX3NuYXBzaG90IC0gcHJlcGFyZSB0aGUgbWFjaGluZSBmb3IgaGliZXJuYXRpb24gdXNpbmcgdGhlCiAgKglwbGF0Zm9ybSBkcml2ZXIgaWYgc28gY29uZmlndXJlZCBhbmQgcmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgaXQgZmFpbHMKICAqLwogCi1zdGF0aWMgaW50IHBsYXRmb3JtX3ByZXBhcmUoaW50IHBsYXRmb3JtX21vZGUpCitzdGF0aWMgaW50IHBsYXRmb3JtX3ByZV9zbmFwc2hvdChpbnQgcGxhdGZvcm1fbW9kZSkKIHsKIAlyZXR1cm4gKHBsYXRmb3JtX21vZGUgJiYgaGliZXJuYXRpb25fb3BzKSA/Ci0JCWhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpIDogMDsKKwkJaGliZXJuYXRpb25fb3BzLT5wcmVfc25hcHNob3QoKSA6IDA7Cit9CisKKy8qKgorICoJcGxhdGZvcm1fbGVhdmUgLSBwcmVwYXJlIHRoZSBtYWNoaW5lIGZvciBzd2l0Y2hpbmcgdG8gdGhlIG5vcm1hbCBtb2RlCisgKglvZiBvcGVyYXRpb24gdXNpbmcgdGhlIHBsYXRmb3JtIGRyaXZlciAoY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCkKKyAqLworCitzdGF0aWMgdm9pZCBwbGF0Zm9ybV9sZWF2ZShpbnQgcGxhdGZvcm1fbW9kZSkKK3sKKwlpZiAocGxhdGZvcm1fbW9kZSAmJiBoaWJlcm5hdGlvbl9vcHMpCisJCWhpYmVybmF0aW9uX29wcy0+bGVhdmUoKTsKIH0KIAogLyoqCkBAIC0xMTgsNiArMTQwLDUxIEBACiB9CiAKIC8qKgorICoJY3JlYXRlX2ltYWdlIC0gZnJlZXplIGRldmljZXMgdGhhdCBuZWVkIHRvIGJlIGZyb3plbiB3aXRoIGludGVycnVwdHMKKyAqCW9mZiwgY3JlYXRlIHRoZSBoaWJlcm5hdGlvbiBpbWFnZSBhbmQgdGhhdyB0aG9zZSBkZXZpY2VzLiAgQ29udHJvbAorICoJcmVhcHBlYXJzIGluIHRoaXMgcm91dGluZSBhZnRlciBhIHJlc3RvcmUuCisgKi8KKworaW50IGNyZWF0ZV9pbWFnZShpbnQgcGxhdGZvcm1fbW9kZSkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGFyY2hfcHJlcGFyZV9zdXNwZW5kKCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCS8qIEF0IHRoaXMgcG9pbnQsIGRldmljZV9zdXNwZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBidXQgKm5vdCoKKwkgKiBkZXZpY2VfcG93ZXJfZG93bigpLiBXZSAqbXVzdCogY2FsbCBkZXZpY2VfcG93ZXJfZG93bigpIG5vdy4KKwkgKiBPdGhlcndpc2UsIGRyaXZlcnMgZm9yIHNvbWUgZGV2aWNlcyAoZS5nLiBpbnRlcnJ1cHQgY29udHJvbGxlcnMpCisJICogYmVjb21lIGRlc3luY2hyb25pemVkIHdpdGggdGhlIGFjdHVhbCBzdGF0ZSBvZiB0aGUgaGFyZHdhcmUKKwkgKiBhdCByZXN1bWUgdGltZSwgYW5kIGV2aWwgd2VpcmRuZXNzIGVuc3Vlcy4KKwkgKi8KKwllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfRlJFRVpFKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd24sICIKKwkJCUtFUk5fRVJSICJhYm9ydGluZyBzdXNwZW5kXG4iKTsKKwkJZ290byBFbmFibGVfaXJxczsKKwl9CisKKwlzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSgpOworCWVycm9yID0gc3dzdXNwX2FyY2hfc3VzcGVuZCgpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciAlZCB3aGlsZSBjcmVhdGluZyB0aGUgaW1hZ2VcbiIsIGVycm9yKTsKKwkvKiBSZXN0b3JlIGNvbnRyb2wgZmxvdyBtYWdpY2FsbHkgYXBwZWFycyBoZXJlICovCisJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKKwlpZiAoIWluX3N1c3BlbmQpCisJCXBsYXRmb3JtX2xlYXZlKHBsYXRmb3JtX21vZGUpOworCS8qIE5PVEU6ICBkZXZpY2VfcG93ZXJfdXAoKSBpcyBqdXN0IGEgcmVzdW1lKCkgZm9yIGRldmljZXMKKwkgKiB0aGF0IHN1c3BlbmRlZCB3aXRoIGlycXMgb2ZmIC4uLiBubyBvdmVyYWxsIHBvd2VydXAuCisJICovCisJZGV2aWNlX3Bvd2VyX3VwKCk7CisgRW5hYmxlX2lycXM6CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCiAgKgloaWJlcm5hdGlvbl9zbmFwc2hvdCAtIHF1aWVzY2UgZGV2aWNlcyBhbmQgY3JlYXRlIHRoZSBoaWJlcm5hdGlvbgogICoJc25hcHNob3QgaW1hZ2UuCiAgKglAcGxhdGZvcm1fbW9kZSAtIGlmIHNldCwgdXNlIHRoZSBwbGF0Zm9ybSBkcml2ZXIsIGlmIGF2YWlsYWJsZSwgdG8KQEAgLTEzNSwxMiArMjAyLDE2IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwllcnJvciA9IHBsYXRmb3JtX3N0YXJ0KHBsYXRmb3JtX21vZGUpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCiAJc3VzcGVuZF9jb25zb2xlKCk7CiAJZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIFJlc3VtZV9jb25zb2xlOwogCi0JZXJyb3IgPSBwbGF0Zm9ybV9wcmVwYXJlKHBsYXRmb3JtX21vZGUpOworCWVycm9yID0gcGxhdGZvcm1fcHJlX3NuYXBzaG90KHBsYXRmb3JtX21vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBSZXN1bWVfZGV2aWNlczsKIApAQCAtMTQ4LDcgKzIxOSw3IEBACiAJaWYgKCFlcnJvcikgewogCQlpZiAoaGliZXJuYXRpb25fbW9kZSAhPSBISUJFUk5BVElPTl9URVNUKSB7CiAJCQlpbl9zdXNwZW5kID0gMTsKLQkJCWVycm9yID0gc3dzdXNwX3N1c3BlbmQoKTsKKwkJCWVycm9yID0gY3JlYXRlX2ltYWdlKHBsYXRmb3JtX21vZGUpOwogCQkJLyogQ29udHJvbCByZXR1cm5zIGhlcmUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXN0b3JlICovCiAJCX0gZWxzZSB7CiAJCQlwcmludGsoInN3c3VzcCBkZWJ1ZzogV2FpdGluZyBmb3IgNSBzZWNvbmRzLlxuIik7CkBAIC0yMDcsMjEgKzI3OCw1MCBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChoaWJlcm5hdGlvbl9vcHMpIHsKLQkJa2VybmVsX3NodXRkb3duX3ByZXBhcmUoU1lTVEVNX1NVU1BFTkRfRElTSyk7Ci0JCS8qCi0JCSAqIFdlIGhhdmUgY2FuY2VsbGVkIHRoZSBwb3dlciB0cmFuc2l0aW9uIGJ5IHJ1bm5pbmcKLQkJICogaGliZXJuYXRpb25fb3BzLT5maW5pc2goKSBiZWZvcmUgc2F2aW5nIHRoZSBpbWFnZSwgc28gd2UKLQkJICogc2hvdWxkIGxldCB0aGUgZmlybXdhcmUga25vdyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGVudGVyIHRoZQotCQkgKiBzbGVlcCBzdGF0ZSBhZnRlciBhbGwKLQkJICovCi0JCWVycm9yID0gaGliZXJuYXRpb25fb3BzLT5wcmVwYXJlKCk7Ci0JCXN5c2Rldl9zaHV0ZG93bigpOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSBoaWJlcm5hdGlvbl9vcHMtPmVudGVyKCk7Ci0JfSBlbHNlIHsKLQkJZXJyb3IgPSAtRU5PU1lTOworCWlmICghaGliZXJuYXRpb25fb3BzKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCS8qCisJICogV2UgaGF2ZSBjYW5jZWxsZWQgdGhlIHBvd2VyIHRyYW5zaXRpb24gYnkgcnVubmluZworCSAqIGhpYmVybmF0aW9uX29wcy0+ZmluaXNoKCkgYmVmb3JlIHNhdmluZyB0aGUgaW1hZ2UsIHNvIHdlIHNob3VsZCBsZXQKKwkgKiB0aGUgZmlybXdhcmUga25vdyB0aGF0IHdlJ3JlIGdvaW5nIHRvIGVudGVyIHRoZSBzbGVlcCBzdGF0ZSBhZnRlciBhbGwKKwkgKi8KKwllcnJvciA9IGhpYmVybmF0aW9uX29wcy0+c3RhcnQoKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKworCXN1c3BlbmRfY29uc29sZSgpOworCWVycm9yID0gZGV2aWNlX3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gUmVzdW1lX2NvbnNvbGU7CisKKwllcnJvciA9IGhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpOworCWlmIChlcnJvcikKKwkJZ290byBSZXN1bWVfZGV2aWNlczsKKworCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gRmluaXNoOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisJaWYgKCFlcnJvcikgeworCQloaWJlcm5hdGlvbl9vcHMtPmVudGVyKCk7CisJCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCQl3aGlsZSAoMSk7CiAJfQorCWxvY2FsX2lycV9lbmFibGUoKTsKKworCS8qCisJICogV2UgZG9uJ3QgbmVlZCB0byByZWVuYWJsZSB0aGUgbm9uYm9vdCBDUFVzIG9yIHJlc3VtZSBjb25zb2xlcywgc2luY2UKKwkgKiB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIGJlIGhhbHRlZCBhbnl3YXkuCisJICovCisgRmluaXNoOgorCWhpYmVybmF0aW9uX29wcy0+ZmluaXNoKCk7CisgUmVzdW1lX2RldmljZXM6CisJZGV2aWNlX3Jlc3VtZSgpOworIFJlc3VtZV9jb25zb2xlOgorCXJlc3VtZV9jb25zb2xlKCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yMzgsMTQgKzMzOCwxNCBAQAogCWNhc2UgSElCRVJOQVRJT05fVEVTVDoKIAljYXNlIEhJQkVSTkFUSU9OX1RFU1RQUk9DOgogCQlicmVhazsKLQljYXNlIEhJQkVSTkFUSU9OX1NIVVRET1dOOgotCQlrZXJuZWxfcG93ZXJfb2ZmKCk7Ci0JCWJyZWFrOwogCWNhc2UgSElCRVJOQVRJT05fUkVCT09UOgogCQlrZXJuZWxfcmVzdGFydChOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBISUJFUk5BVElPTl9QTEFURk9STToKIAkJaGliZXJuYXRpb25fcGxhdGZvcm1fZW50ZXIoKTsKKwljYXNlIEhJQkVSTkFUSU9OX1NIVVRET1dOOgorCQlrZXJuZWxfcG93ZXJfb2ZmKCk7CisJCWJyZWFrOwogCX0KIAlrZXJuZWxfaGFsdCgpOwogCS8qCkBAIC0yOTgsNiArMzk4LDEwIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIEV4aXQ7CiAKKwlwcmludGsoIlN5bmNpbmcgZmlsZXN5c3RlbXMgLi4uICIpOworCXN5c19zeW5jKCk7CisJcHJpbnRrKCJkb25lLlxuIik7CisKIAllcnJvciA9IHByZXBhcmVfcHJvY2Vzc2VzKCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIEZpbmlzaDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IDM1MGI0ODUuLjNjZGY5NWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Jlc3VtZS10cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC92bXN0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogCiAjaW5jbHVkZSAicG93ZXIuaCIKIApAQCAtMzIsMzkgKzMzLDMyIEBACiAvKiBUaGlzIGlzIGp1c3QgYW4gYXJiaXRyYXJ5IG51bWJlciAqLwogI2RlZmluZSBGUkVFX1BBR0VfTlVNQkVSICgxMDApCiAKLXN0cnVjdCBwbV9vcHMgKnBtX29wczsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgKnN1c3BlbmRfb3BzOwogCiAvKioKLSAqCXBtX3NldF9vcHMgLSBTZXQgdGhlIGdsb2JhbCBwb3dlciBtZXRob2QgdGFibGUuIAorICoJc3VzcGVuZF9zZXRfb3BzIC0gU2V0IHRoZSBnbG9iYWwgc3VzcGVuZCBtZXRob2QgdGFibGUuCiAgKglAb3BzOglQb2ludGVyIHRvIG9wcyBzdHJ1Y3R1cmUuCiAgKi8KIAotdm9pZCBwbV9zZXRfb3BzKHN0cnVjdCBwbV9vcHMgKiBvcHMpCit2b2lkIHN1c3BlbmRfc2V0X29wcyhzdHJ1Y3QgcGxhdGZvcm1fc3VzcGVuZF9vcHMgKm9wcykKIHsKIAltdXRleF9sb2NrKCZwbV9tdXRleCk7Ci0JcG1fb3BzID0gb3BzOworCXN1c3BlbmRfb3BzID0gb3BzOwogCW11dGV4X3VubG9jaygmcG1fbXV0ZXgpOwogfQogCiAvKioKLSAqIHBtX3ZhbGlkX29ubHlfbWVtIC0gZ2VuZXJpYyBtZW1vcnktb25seSB2YWxpZCBjYWxsYmFjaworICogc3VzcGVuZF92YWxpZF9vbmx5X21lbSAtIGdlbmVyaWMgbWVtb3J5LW9ubHkgdmFsaWQgY2FsbGJhY2sKICAqCi0gKiBwbV9vcHMgZHJpdmVycyB0aGF0IGltcGxlbWVudCBtZW0gc3VzcGVuZCBvbmx5IGFuZCBvbmx5IG5lZWQKKyAqIFBsYXRmb3JtIGRyaXZlcnMgdGhhdCBpbXBsZW1lbnQgbWVtIHN1c3BlbmQgb25seSBhbmQgb25seSBuZWVkCiAgKiB0byBjaGVjayBmb3IgdGhhdCBpbiB0aGVpciAudmFsaWQgY2FsbGJhY2sgY2FuIHVzZSB0aGlzIGluc3RlYWQKICAqIG9mIHJvbGxpbmcgdGhlaXIgb3duIC52YWxpZCBjYWxsYmFjay4KICAqLwotaW50IHBtX3ZhbGlkX29ubHlfbWVtKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK2ludCBzdXNwZW5kX3ZhbGlkX29ubHlfbWVtKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlyZXR1cm4gc3RhdGUgPT0gUE1fU1VTUEVORF9NRU07CiB9CiAKLQotc3RhdGljIGlubGluZSB2b2lkIHBtX2ZpbmlzaChzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0JaWYgKHBtX29wcy0+ZmluaXNoKQotCQlwbV9vcHMtPmZpbmlzaChzdGF0ZSk7Ci19Ci0KIC8qKgogICoJc3VzcGVuZF9wcmVwYXJlIC0gRG8gcHJlcCB3b3JrIGJlZm9yZSBlbnRlcmluZyBsb3ctcG93ZXIgc3RhdGUuCiAgKgpAQCAtNzYsNyArNzAsNyBAQAogCWludCBlcnJvcjsKIAl1bnNpZ25lZCBpbnQgZnJlZV9wYWdlczsKIAotCWlmICghcG1fb3BzIHx8ICFwbV9vcHMtPmVudGVyKQorCWlmICghc3VzcGVuZF9vcHMgfHwgIXN1c3BlbmRfb3BzLT5lbnRlcikKIAkJcmV0dXJuIC1FUEVSTTsKIAogCWVycm9yID0gcG1fbm90aWZpZXJfY2FsbF9jaGFpbihQTV9TVVNQRU5EX1BSRVBBUkUpOwpAQCAtMTI4LDcgKzEyMiw3IEBACiAgKgogICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGRldmljZXMgaGF2ZSBiZWVuIHN1c3BlbmRlZC4KICAqLwotaW50IHN1c3BlbmRfZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQorc3RhdGljIGludCBzdXNwZW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3IgPSAwOwogCkBAIC0xMzksNyArMTMzLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd25cbiIpOwogCQlnb3RvIERvbmU7CiAJfQotCWVycm9yID0gcG1fb3BzLT5lbnRlcihzdGF0ZSk7CisJZXJyb3IgPSBzdXNwZW5kX29wcy0+ZW50ZXIoc3RhdGUpOwogCWRldmljZV9wb3dlcl91cCgpOwogIERvbmU6CiAJYXJjaF9zdXNwZW5kX2VuYWJsZV9pcnFzKCk7CkBAIC0xNTYsMTEgKzE1MCwxMSBAQAogewogCWludCBlcnJvcjsKIAotCWlmICghcG1fb3BzKQorCWlmICghc3VzcGVuZF9vcHMpCiAJCXJldHVybiAtRU5PU1lTOwogCi0JaWYgKHBtX29wcy0+c2V0X3RhcmdldCkgewotCQllcnJvciA9IHBtX29wcy0+c2V0X3RhcmdldChzdGF0ZSk7CisJaWYgKHN1c3BlbmRfb3BzLT5zZXRfdGFyZ2V0KSB7CisJCWVycm9yID0gc3VzcGVuZF9vcHMtPnNldF90YXJnZXQoc3RhdGUpOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMTcwLDggKzE2NCw4IEBACiAJCXByaW50ayhLRVJOX0VSUiAiU29tZSBkZXZpY2VzIGZhaWxlZCB0byBzdXNwZW5kXG4iKTsKIAkJZ290byBSZXN1bWVfY29uc29sZTsKIAl9Ci0JaWYgKHBtX29wcy0+cHJlcGFyZSkgewotCQllcnJvciA9IHBtX29wcy0+cHJlcGFyZShzdGF0ZSk7CisJaWYgKHN1c3BlbmRfb3BzLT5wcmVwYXJlKSB7CisJCWVycm9yID0gc3VzcGVuZF9vcHMtPnByZXBhcmUoKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBSZXN1bWVfZGV2aWNlczsKIAl9CkBAIC0xODAsNyArMTc0LDggQEAKIAkJc3VzcGVuZF9lbnRlcihzdGF0ZSk7CiAKIAllbmFibGVfbm9uYm9vdF9jcHVzKCk7Ci0JcG1fZmluaXNoKHN0YXRlKTsKKwlpZiAoc3VzcGVuZF9vcHMtPmZpbmlzaCkKKwkJc3VzcGVuZF9vcHMtPmZpbmlzaCgpOwogIFJlc3VtZV9kZXZpY2VzOgogCWRldmljZV9yZXN1bWUoKTsKICBSZXN1bWVfY29uc29sZToKQEAgLTIxNCw3ICsyMDksNyBAQAogCS8qIEFsbCBzdGF0ZXMgbmVlZCBsb3dsZXZlbCBzdXBwb3J0IGFuZCBuZWVkIHRvIGJlIHZhbGlkCiAJICogdG8gdGhlIGxvd2xldmVsIGltcGxlbWVudGF0aW9uLCBubyB2YWxpZCBjYWxsYmFjawogCSAqIGltcGxpZXMgdGhhdCBub25lIGFyZSB2YWxpZC4gKi8KLQlpZiAoIXBtX29wcyB8fCAhcG1fb3BzLT52YWxpZCB8fCAhcG1fb3BzLT52YWxpZChzdGF0ZSkpCisJaWYgKCFzdXNwZW5kX29wcyB8fCAhc3VzcGVuZF9vcHMtPnZhbGlkIHx8ICFzdXNwZW5kX29wcy0+dmFsaWQoc3RhdGUpKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KQEAgLTIzNiw5ICsyMzEsMTQgQEAKIAogCWlmICghdmFsaWRfc3RhdGUoc3RhdGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmICghbXV0ZXhfdHJ5bG9jaygmcG1fbXV0ZXgpKQogCQlyZXR1cm4gLUVCVVNZOwogCisJcHJpbnRrKCJTeW5jaW5nIGZpbGVzeXN0ZW1zIC4uLiAiKTsKKwlzeXNfc3luYygpOworCXByaW50aygiZG9uZS5cbiIpOworCiAJcHJfZGVidWcoIlBNOiBQcmVwYXJpbmcgc3lzdGVtIGZvciAlcyBzbGVlcFxuIiwgcG1fc3RhdGVzW3N0YXRlXSk7CiAJaWYgKChlcnJvciA9IHN1c3BlbmRfcHJlcGFyZSgpKSkKIAkJZ290byBVbmxvY2s7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcG93ZXIuaCBiL2tlcm5lbC9wb3dlci9wb3dlci5oCmluZGV4IDk1ZmJmMmQuLjE5NWRjNDYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wb3dlci5oCisrKyBiL2tlcm5lbC9wb3dlci9wb3dlci5oCkBAIC0xMSwxNCArMTEsMzIgQEAKIAl1bnNpZ25lZCBsb25nCQlzaXplOwogfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKFBBR0VfU0laRSkpKTsKIAotCi0KICNpZmRlZiBDT05GSUdfSElCRVJOQVRJT04KKyNpZmRlZiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9IRUFERVIKKy8qIE1heGltdW0gc2l6ZSBvZiBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZGF0YSBpbiBhIGhpYmVybmF0aW9uIGhlYWRlciAqLworI2RlZmluZSBNQVhfQVJDSF9IRUFERVJfU0laRQkoc2l6ZW9mKHN0cnVjdCBuZXdfdXRzbmFtZSkgKyA0KQorCitleHRlcm4gaW50IGFyY2hfaGliZXJuYXRpb25faGVhZGVyX3NhdmUodm9pZCAqYWRkciwgdW5zaWduZWQgaW50IG1heF9zaXplKTsKK2V4dGVybiBpbnQgYXJjaF9oaWJlcm5hdGlvbl9oZWFkZXJfcmVzdG9yZSh2b2lkICphZGRyKTsKKworc3RhdGljIGlubGluZSBpbnQgaW5pdF9oZWFkZXJfY29tcGxldGUoc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQoreworCXJldHVybiBhcmNoX2hpYmVybmF0aW9uX2hlYWRlcl9zYXZlKGluZm8sIE1BWF9BUkNIX0hFQURFUl9TSVpFKTsKK30KKworc3RhdGljIGlubGluZSBjaGFyICpjaGVja19pbWFnZV9rZXJuZWwoc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQoreworCXJldHVybiBhcmNoX2hpYmVybmF0aW9uX2hlYWRlcl9yZXN0b3JlKGluZm8pID8KKwkJCSJhcmNoaXRlY3R1cmUgc3BlY2lmaWMgZGF0YSIgOiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX0hFQURFUiAqLworCiAvKgogICogS2VlcCBzb21lIG1lbW9yeSBmcmVlIHNvIHRoYXQgSS9PIG9wZXJhdGlvbnMgY2FuIHN1Y2NlZWQgd2l0aG91dCBwYWdpbmcKICAqIFtNaWdodCB0aGlzIGJlIG1vcmUgdGhhbiA0IE1CP10KICAqLwogI2RlZmluZSBQQUdFU19GT1JfSU8JKCg0MDk2ICogMTAyNCkgPj4gUEFHRV9TSElGVCkKKwogLyoKICAqIEtlZXAgMSBNQiBvZiBtZW1vcnkgZnJlZSBzbyB0aGF0IGRldmljZSBkcml2ZXJzIGNhbiBhbGxvY2F0ZSBzb21lIHBhZ2VzIGluCiAgKiB0aGVpciAuc3VzcGVuZCgpIHJvdXRpbmVzIHdpdGhvdXQgYnJlYWtpbmcgdGhlIHN1c3BlbmQgdG8gZGlzay4KQEAgLTE2NSw3ICsxODMsNiBAQAogZXh0ZXJuIGludCBzd3N1c3BfY2hlY2sodm9pZCk7CiBleHRlcm4gaW50IHN3c3VzcF9zaHJpbmtfbWVtb3J5KHZvaWQpOwogZXh0ZXJuIHZvaWQgc3dzdXNwX2ZyZWUodm9pZCk7Ci1leHRlcm4gaW50IHN3c3VzcF9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIGludCBzd3N1c3BfcmVzdW1lKHZvaWQpOwogZXh0ZXJuIGludCBzd3N1c3BfcmVhZCh1bnNpZ25lZCBpbnQgKmZsYWdzX3ApOwogZXh0ZXJuIGludCBzd3N1c3Bfd3JpdGUodW5zaWduZWQgaW50IGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMgYi9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCmluZGV4IDM0MzQ5NDAuLjY1MzM5MjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKKysrIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwpAQCAtNzUsMjEgKzc1LDc5IEBACiAJX19zZXRfY3VycmVudF9zdGF0ZShzYXZlKTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZXplX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgZmFrZV9zaWduYWxfd2FrZV91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCByZXN1bWUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghZnJlZXppbmcocCkpIHsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCXNpZ25hbF93YWtlX3VwKHAsIHJlc3VtZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzZW5kX2Zha2Vfc2lnbmFsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwlpZiAocC0+c3RhdGUgPT0gVEFTS19TVE9QUEVEKQorCQlmb3JjZV9zaWdfc3BlY2lmaWMoU0lHU1RPUCwgcCk7CisJZmFrZV9zaWduYWxfd2FrZV91cChwLCBwLT5zdGF0ZSA9PSBUQVNLX1NUT1BQRUQpOworfQorCitzdGF0aWMgaW50IGhhc19tbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7CisJcmV0dXJuIChwLT5tbSAmJiAhKHAtPmZsYWdzICYgUEZfQk9SUk9XRURfTU0pKTsKK30KKworLyoqCisgKglmcmVlemVfdGFzayAtIHNlbmQgYSBmcmVlemUgcmVxdWVzdCB0byBnaXZlbiB0YXNrCisgKglAcDogdGFzayB0byBzZW5kIHRoZSByZXF1ZXN0IHRvCisgKglAd2l0aF9tbV9vbmx5OiBpZiBzZXQsIHRoZSByZXF1ZXN0IHdpbGwgb25seSBiZSBzZW50IGlmIHRoZSB0YXNrIGhhcyBpdHMKKyAqCQlvd24gbW0KKyAqCVJldHVybiB2YWx1ZTogMCwgaWYgQHdpdGhfbW1fb25seSBpcyBzZXQgYW5kIHRoZSB0YXNrIGhhcyBubyBtbSBvZiBpdHMKKyAqCQlvd24gb3IgdGhlIHRhc2sgaXMgZnJvemVuLCAxLCBvdGhlcndpc2UKKyAqCisgKglUaGUgZnJlZXplIHJlcXVlc3QgaXMgc2VudCBieSBzZXRpbmcgdGhlIHRhc2tzJ3MgVElGX0ZSRUVaRSBmbGFnIGFuZAorICoJZWl0aGVyIHNlbmRpbmcgYSBmYWtlIHNpZ25hbCB0byBpdCBvciB3YWtpbmcgaXQgdXAsIGRlcGVuZGluZyBvbiB3aGV0aGVyCisgKglvciBub3QgaXQgaGFzIGl0cyBvd24gbW0gKGllLiBpdCBpcyBhIHVzZXIgbGFuZCB0YXNrKS4gIElmIEB3aXRoX21tX29ubHkKKyAqCWlzIHNldCBhbmQgdGhlIHRhc2sgaGFzIG5vIG1tIG9mIGl0cyBvd24gKGllLiBpdCBpcyBhIGtlcm5lbCB0aHJlYWQpLAorICoJaXRzIFRJRl9GUkVFWkUgZmxhZyBzaG91bGQgbm90IGJlIHNldC4KKyAqCisgKglUaGUgdGFza19sb2NrKCkgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgcmFjZXMgd2l0aCBleGl0X21tKCkgb3IKKyAqCXVzZV9tbSgpL3VudXNlX21tKCkgZnJvbSBvY2N1cmluZy4KKyAqLworc3RhdGljIGludCBmcmVlemVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3aXRoX21tX29ubHkpCit7CisJaW50IHJldCA9IDE7CisKKwl0YXNrX2xvY2socCk7CisJaWYgKGZyZWV6aW5nKHApKSB7CisJCWlmIChoYXNfbW0ocCkpIHsKKwkJCWlmICghc2lnbmFsX3BlbmRpbmcocCkpCisJCQkJZmFrZV9zaWduYWxfd2FrZV91cChwLCAwKTsKKwkJfSBlbHNlIHsKKwkJCWlmICh3aXRoX21tX29ubHkpCisJCQkJcmV0ID0gMDsKKwkJCWVsc2UKKwkJCQl3YWtlX3VwX3N0YXRlKHAsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCX0KKwl9IGVsc2UgewogCQlybWIoKTsKLQkJaWYgKCFmcm96ZW4ocCkpIHsKLQkJCXNldF9mcmVlemVfZmxhZyhwKTsKLQkJCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1NUT1BQRUQpCi0JCQkJZm9yY2Vfc2lnX3NwZWNpZmljKFNJR1NUT1AsIHApOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnNpZ2hhbmQtPnNpZ2xvY2ssIGZsYWdzKTsKLQkJCXNpZ25hbF93YWtlX3VwKHAsIHAtPnN0YXRlID09IFRBU0tfU1RPUFBFRCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCWlmIChmcm96ZW4ocCkpIHsKKwkJCXJldCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAoaGFzX21tKHApKSB7CisJCQkJc2V0X2ZyZWV6ZV9mbGFnKHApOworCQkJCXNlbmRfZmFrZV9zaWduYWwocCk7CisJCQl9IGVsc2UgeworCQkJCWlmICh3aXRoX21tX29ubHkpIHsKKwkJCQkJcmV0ID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlzZXRfZnJlZXplX2ZsYWcocCk7CisJCQkJCXdha2VfdXBfc3RhdGUocCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCQl9CisJCQl9CiAJCX0KIAl9CisJdGFza191bmxvY2socCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKQEAgLTExMCw2ICsxNjgsMTEgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICpwOwogCXVuc2lnbmVkIGxvbmcgZW5kX3RpbWU7CiAJdW5zaWduZWQgaW50IHRvZG87CisJc3RydWN0IHRpbWV2YWwgc3RhcnQsIGVuZDsKKwlzNjQgZWxhcHNlZF9jc2VjczY0OworCXVuc2lnbmVkIGludCBlbGFwc2VkX2NzZWNzOworCisJZG9fZ2V0dGltZW9mZGF5KCZzdGFydCk7CiAKIAllbmRfdGltZSA9IGppZmZpZXMgKyBUSU1FT1VUOwogCWRvIHsKQEAgLTExOSwzMSArMTgyLDE0IEBACiAJCQlpZiAoZnJvemVuKHApIHx8ICFmcmVlemVhYmxlKHApKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoZnJlZXplX3VzZXJfc3BhY2UpIHsKLQkJCQlpZiAocC0+c3RhdGUgPT0gVEFTS19UUkFDRUQgJiYKLQkJCQkgICAgZnJvemVuKHAtPnBhcmVudCkpIHsKLQkJCQkJY2FuY2VsX2ZyZWV6aW5nKHApOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBLZXJuZWwgdGhyZWFkcyBzaG91bGQgbm90IGhhdmUgVElGX0ZSRUVaRSBzZXQKLQkJCQkgKiBhdCB0aGlzIHBvaW50LCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGVpdGhlcgotCQkJCSAqIHAtPm1tIGlzIG5vdCBOVUxMICphbmQqIFBGX0JPUlJPV0VEX01NIGlzCi0JCQkJICogdW5zZXQsIG9yIFRJRl9GUlJFWkUgaXMgbGVmdCB1bnNldC4KLQkJCQkgKiBUaGUgdGFza19sb2NrKCkgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgcmFjZXMKLQkJCQkgKiB3aXRoIGV4aXRfbW0oKSBvciB1c2VfbW0oKS91bnVzZV9tbSgpIGZyb20KLQkJCQkgKiBvY2N1cmluZy4KLQkJCQkgKi8KLQkJCQl0YXNrX2xvY2socCk7Ci0JCQkJaWYgKCFwLT5tbSB8fCAocC0+ZmxhZ3MgJiBQRl9CT1JST1dFRF9NTSkpIHsKLQkJCQkJdGFza191bmxvY2socCk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlmcmVlemVfdGFzayhwKTsKLQkJCQl0YXNrX3VubG9jayhwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZnJlZXplX3Rhc2socCk7CisJCQlpZiAocC0+c3RhdGUgPT0gVEFTS19UUkFDRUQgJiYgZnJvemVuKHAtPnBhcmVudCkpIHsKKwkJCQljYW5jZWxfZnJlZXppbmcocCk7CisJCQkJY29udGludWU7CiAJCQl9CisKKwkJCWlmICghZnJlZXplX3Rhc2socCwgZnJlZXplX3VzZXJfc3BhY2UpKQorCQkJCWNvbnRpbnVlOworCiAJCQlpZiAoIWZyZWV6ZXJfc2hvdWxkX3NraXAocCkpCiAJCQkJdG9kbysrOwogCQl9IHdoaWxlX2VhY2hfdGhyZWFkKGcsIHApOwpAQCAtMTUzLDYgKzE5OSwxMSBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAodG9kbyk7CiAKKwlkb19nZXR0aW1lb2ZkYXkoJmVuZCk7CisJZWxhcHNlZF9jc2VjczY0ID0gdGltZXZhbF90b19ucygmZW5kKSAtIHRpbWV2YWxfdG9fbnMoJnN0YXJ0KTsKKwlkb19kaXYoZWxhcHNlZF9jc2VjczY0LCBOU0VDX1BFUl9TRUMgLyAxMDApOworCWVsYXBzZWRfY3NlY3MgPSBlbGFwc2VkX2NzZWNzNjQ7CisKIAlpZiAodG9kbykgewogCQkvKiBUaGlzIGRvZXMgbm90IHVuZnJlZXplIHByb2Nlc3NlcyB0aGF0IGFyZSBhbHJlYWR5IGZyb3plbgogCQkgKiAod2UgaGF2ZSBzbGlnaHRseSB1Z2x5IGNhbGxpbmcgY29udmVudGlvbiBpbiB0aGF0IHJlc3BlY3QsCkBAIC0xNjAsMTAgKzIxMSw5IEBACiAJCSAqIGJ1dCBpdCBjbGVhbnMgdXAgbGVmdG92ZXIgUEZfRlJFRVpFIHJlcXVlc3RzLgogCQkgKi8KIAkJcHJpbnRrKCJcbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIkZyZWV6aW5nIG9mICVzIHRpbWVkIG91dCBhZnRlciAlZCBzZWNvbmRzICIKKwkJcHJpbnRrKEtFUk5fRVJSICJGcmVlemluZyBvZiB0YXNrcyBmYWlsZWQgYWZ0ZXIgJWQuJTAyZCBzZWNvbmRzICIKIAkJCQkiKCVkIHRhc2tzIHJlZnVzaW5nIHRvIGZyZWV6ZSk6XG4iLAotCQkJCWZyZWV6ZV91c2VyX3NwYWNlID8gInVzZXIgc3BhY2UgIiA6ICJ0YXNrcyAiLAotCQkJCVRJTUVPVVQgLyBIWiwgdG9kbyk7CisJCQkJZWxhcHNlZF9jc2VjcyAvIDEwMCwgZWxhcHNlZF9jc2VjcyAlIDEwMCwgdG9kbyk7CiAJCXNob3dfc3RhdGUoKTsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJZG9fZWFjaF90aHJlYWQoZywgcCkgewpAQCAtMTc0LDYgKzIyNCw5IEBACiAJCQl0YXNrX3VubG9jayhwKTsKIAkJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCX0gZWxzZSB7CisJCXByaW50aygiKGVsYXBzZWQgJWQuJTAyZCBzZWNvbmRzKSAiLCBlbGFwc2VkX2NzZWNzIC8gMTAwLAorCQkJZWxhcHNlZF9jc2VjcyAlIDEwMCk7CiAJfQogCiAJcmV0dXJuIHRvZG8gPyAtRUJVU1kgOiAwOwpAQCAtMTg2LDE5ICsyMzksMjEgQEAKIHsKIAlpbnQgZXJyb3I7CiAKLQlwcmludGsoIlN0b3BwaW5nIHRhc2tzIC4uLiAiKTsKKwlwcmludGsoIkZyZWV6aW5nIHVzZXIgc3BhY2UgcHJvY2Vzc2VzIC4uLiAiKTsKIAllcnJvciA9IHRyeV90b19mcmVlemVfdGFza3MoRlJFRVpFUl9VU0VSX1NQQUNFKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBFeGl0OworCXByaW50aygiZG9uZS5cbiIpOwogCi0Jc3lzX3N5bmMoKTsKKwlwcmludGsoIkZyZWV6aW5nIHJlbWFpbmluZyBmcmVlemFibGUgdGFza3MgLi4uICIpOwogCWVycm9yID0gdHJ5X3RvX2ZyZWV6ZV90YXNrcyhGUkVFWkVSX0tFUk5FTF9USFJFQURTKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXByaW50aygiZG9uZS5cbiIpOworCQlnb3RvIEV4aXQ7CisJcHJpbnRrKCJkb25lLiIpOworIEV4aXQ6CiAJQlVHX09OKGluX2F0b21pYygpKTsKLQlyZXR1cm4gMDsKKwlwcmludGsoIlxuIik7CisJcmV0dXJuIGVycm9yOwogfQogCiBzdGF0aWMgdm9pZCB0aGF3X3Rhc2tzKGludCB0aGF3X3VzZXJfc3BhY2UpCmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IGE2ODY1OTAuLjc4MDM5YjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC0xMDA1LDExICsxMDA1LDEyIEBACiAJfQogCW1lbW9yeV9ibV9wb3NpdGlvbl9yZXNldChvcmlnX2JtKTsKIAltZW1vcnlfYm1fcG9zaXRpb25fcmVzZXQoY29weV9ibSk7Ci0JZG8geworCWZvcig7OykgewogCQlwZm4gPSBtZW1vcnlfYm1fbmV4dF9wZm4ob3JpZ19ibSk7Ci0JCWlmIChsaWtlbHkocGZuICE9IEJNX0VORF9PRl9NQVApKQotCQkJY29weV9kYXRhX3BhZ2UobWVtb3J5X2JtX25leHRfcGZuKGNvcHlfYm0pLCBwZm4pOwotCX0gd2hpbGUgKHBmbiAhPSBCTV9FTkRfT0ZfTUFQKTsKKwkJaWYgKHVubGlrZWx5KHBmbiA9PSBCTV9FTkRfT0ZfTUFQKSkKKwkJCWJyZWFrOworCQljb3B5X2RhdGFfcGFnZShtZW1vcnlfYm1fbmV4dF9wZm4oY29weV9ibSksIHBmbik7CisJfQogfQogCiAvKiBUb3RhbCBudW1iZXIgb2YgaW1hZ2UgcGFnZXMgKi8KQEAgLTEyMzksMTcgKzEyNDAsMzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaW5pdF9oZWFkZXIoc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQorI2lmbmRlZiBDT05GSUdfQVJDSF9ISUJFUk5BVElPTl9IRUFERVIKK3N0YXRpYyBpbnQgaW5pdF9oZWFkZXJfY29tcGxldGUoc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQoreworCW1lbWNweSgmaW5mby0+dXRzLCBpbml0X3V0c25hbWUoKSwgc2l6ZW9mKHN0cnVjdCBuZXdfdXRzbmFtZSkpOworCWluZm8tPnZlcnNpb25fY29kZSA9IExJTlVYX1ZFUlNJT05fQ09ERTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgKmNoZWNrX2ltYWdlX2tlcm5lbChzdHJ1Y3Qgc3dzdXNwX2luZm8gKmluZm8pCit7CisJaWYgKGluZm8tPnZlcnNpb25fY29kZSAhPSBMSU5VWF9WRVJTSU9OX0NPREUpCisJCXJldHVybiAia2VybmVsIHZlcnNpb24iOworCWlmIChzdHJjbXAoaW5mby0+dXRzLnN5c25hbWUsaW5pdF91dHNuYW1lKCktPnN5c25hbWUpKQorCQlyZXR1cm4gInN5c3RlbSB0eXBlIjsKKwlpZiAoc3RyY21wKGluZm8tPnV0cy5yZWxlYXNlLGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlKSkKKwkJcmV0dXJuICJrZXJuZWwgcmVsZWFzZSI7CisJaWYgKHN0cmNtcChpbmZvLT51dHMudmVyc2lvbixpbml0X3V0c25hbWUoKS0+dmVyc2lvbikpCisJCXJldHVybiAidmVyc2lvbiI7CisJaWYgKHN0cmNtcChpbmZvLT51dHMubWFjaGluZSxpbml0X3V0c25hbWUoKS0+bWFjaGluZSkpCisJCXJldHVybiAibWFjaGluZSI7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfSElCRVJOQVRJT05fSEVBREVSICovCisKK3N0YXRpYyBpbnQgaW5pdF9oZWFkZXIoc3RydWN0IHN3c3VzcF9pbmZvICppbmZvKQogewogCW1lbXNldChpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHN3c3VzcF9pbmZvKSk7Ci0JaW5mby0+dmVyc2lvbl9jb2RlID0gTElOVVhfVkVSU0lPTl9DT0RFOwogCWluZm8tPm51bV9waHlzcGFnZXMgPSBudW1fcGh5c3BhZ2VzOwotCW1lbWNweSgmaW5mby0+dXRzLCBpbml0X3V0c25hbWUoKSwgc2l6ZW9mKHN0cnVjdCBuZXdfdXRzbmFtZSkpOwotCWluZm8tPmNwdXMgPSBudW1fb25saW5lX2NwdXMoKTsKIAlpbmZvLT5pbWFnZV9wYWdlcyA9IG5yX2NvcHlfcGFnZXM7CiAJaW5mby0+cGFnZXMgPSBucl9jb3B5X3BhZ2VzICsgbnJfbWV0YV9wYWdlcyArIDE7CiAJaW5mby0+c2l6ZSA9IGluZm8tPnBhZ2VzOwogCWluZm8tPnNpemUgPDw9IFBBR0VfU0hJRlQ7CisJcmV0dXJuIGluaXRfaGVhZGVyX2NvbXBsZXRlKGluZm8pOwogfQogCiAvKioKQEAgLTEzMDMsNyArMTMyNiwxMSBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmICghaGFuZGxlLT5vZmZzZXQpIHsKLQkJaW5pdF9oZWFkZXIoKHN0cnVjdCBzd3N1c3BfaW5mbyAqKWJ1ZmZlcik7CisJCWludCBlcnJvcjsKKworCQllcnJvciA9IGluaXRfaGVhZGVyKChzdHJ1Y3Qgc3dzdXNwX2luZm8gKilidWZmZXIpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJCWhhbmRsZS0+YnVmZmVyID0gYnVmZmVyOwogCQltZW1vcnlfYm1fcG9zaXRpb25fcmVzZXQoJm9yaWdfYm0pOwogCQltZW1vcnlfYm1fcG9zaXRpb25fcmVzZXQoJmNvcHlfYm0pOwpAQCAtMTM5NCwyMiArMTQyMSwxMyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGVhZGVyKHN0cnVjdCBzd3N1c3BfaW5mbyAqaW5mbykKK3N0YXRpYyBpbnQgY2hlY2tfaGVhZGVyKHN0cnVjdCBzd3N1c3BfaW5mbyAqaW5mbykKIHsKLQljaGFyICpyZWFzb24gPSBOVUxMOworCWNoYXIgKnJlYXNvbjsKIAotCWlmIChpbmZvLT52ZXJzaW9uX2NvZGUgIT0gTElOVVhfVkVSU0lPTl9DT0RFKQotCQlyZWFzb24gPSAia2VybmVsIHZlcnNpb24iOwotCWlmIChpbmZvLT5udW1fcGh5c3BhZ2VzICE9IG51bV9waHlzcGFnZXMpCisJcmVhc29uID0gY2hlY2tfaW1hZ2Vfa2VybmVsKGluZm8pOworCWlmICghcmVhc29uICYmIGluZm8tPm51bV9waHlzcGFnZXMgIT0gbnVtX3BoeXNwYWdlcykKIAkJcmVhc29uID0gIm1lbW9yeSBzaXplIjsKLQlpZiAoc3RyY21wKGluZm8tPnV0cy5zeXNuYW1lLGluaXRfdXRzbmFtZSgpLT5zeXNuYW1lKSkKLQkJcmVhc29uID0gInN5c3RlbSB0eXBlIjsKLQlpZiAoc3RyY21wKGluZm8tPnV0cy5yZWxlYXNlLGluaXRfdXRzbmFtZSgpLT5yZWxlYXNlKSkKLQkJcmVhc29uID0gImtlcm5lbCByZWxlYXNlIjsKLQlpZiAoc3RyY21wKGluZm8tPnV0cy52ZXJzaW9uLGluaXRfdXRzbmFtZSgpLT52ZXJzaW9uKSkKLQkJcmVhc29uID0gInZlcnNpb24iOwotCWlmIChzdHJjbXAoaW5mby0+dXRzLm1hY2hpbmUsaW5pdF91dHNuYW1lKCktPm1hY2hpbmUpKQotCQlyZWFzb24gPSAibWFjaGluZSI7CiAJaWYgKHJlYXNvbikgewogCQlwcmludGsoS0VSTl9FUlIgInN3c3VzcDogUmVzdW1lIG1pc21hdGNoOiAlc1xuIiwgcmVhc29uKTsKIAkJcmV0dXJuIC1FUEVSTTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zd3N1c3AuYyBiL2tlcm5lbC9wb3dlci9zd3N1c3AuYwppbmRleCA1ZGEzMDRjLi5lMTcyMmQzIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvc3dzdXNwLmMKKysrIGIva2VybmVsL3Bvd2VyL3N3c3VzcC5jCkBAIC0yNzAsMzkgKzI3MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBzd3N1c3Bfc3VzcGVuZCh2b2lkKQotewotCWludCBlcnJvcjsKLQotCWlmICgoZXJyb3IgPSBhcmNoX3ByZXBhcmVfc3VzcGVuZCgpKSkKLQkJcmV0dXJuIGVycm9yOwotCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkvKiBBdCB0aGlzIHBvaW50LCBkZXZpY2Vfc3VzcGVuZCgpIGhhcyBiZWVuIGNhbGxlZCwgYnV0ICpub3QqCi0JICogZGV2aWNlX3Bvd2VyX2Rvd24oKS4gV2UgKm11c3QqIGRldmljZV9wb3dlcl9kb3duKCkgbm93LgotCSAqIE90aGVyd2lzZSwgZHJpdmVycyBmb3Igc29tZSBkZXZpY2VzIChlLmcuIGludGVycnVwdCBjb250cm9sbGVycykKLQkgKiBiZWNvbWUgZGVzeW5jaHJvbml6ZWQgd2l0aCB0aGUgYWN0dWFsIHN0YXRlIG9mIHRoZSBoYXJkd2FyZQotCSAqIGF0IHJlc3VtZSB0aW1lLCBhbmQgZXZpbCB3ZWlyZG5lc3MgZW5zdWVzLgotCSAqLwotCWlmICgoZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX0ZSRUVaRSkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCBhYm9ydGluZyBzdXNwZW5kXG4iKTsKLQkJZ290byBFbmFibGVfaXJxczsKLQl9Ci0KLQlzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwotCWlmICgoZXJyb3IgPSBzd3N1c3BfYXJjaF9zdXNwZW5kKCkpKQotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yICVkIHN1c3BlbmRpbmdcbiIsIGVycm9yKTsKLQkvKiBSZXN0b3JlIGNvbnRyb2wgZmxvdyBtYWdpY2FsbHkgYXBwZWFycyBoZXJlICovCi0JcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKLQkvKiBOT1RFOiAgZGV2aWNlX3Bvd2VyX3VwKCkgaXMganVzdCBhIHJlc3VtZSgpIGZvciBkZXZpY2VzCi0JICogdGhhdCBzdXNwZW5kZWQgd2l0aCBpcnFzIG9mZiAuLi4gbm8gb3ZlcmFsbCBwb3dlcnVwLgotCSAqLwotCWRldmljZV9wb3dlcl91cCgpOwotIEVuYWJsZV9pcnFzOgotCWxvY2FsX2lycV9lbmFibGUoKTsKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIGludCBzd3N1c3BfcmVzdW1lKHZvaWQpCiB7CiAJaW50IGVycm9yOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3VzZXIuYyBiL2tlcm5lbC9wb3dlci91c2VyLmMKaW5kZXggYmQwNzIzYS4uNWJkMzIxYiAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3VzZXIuYworKysgYi9rZXJuZWwvcG93ZXIvdXNlci5jCkBAIC0xNTMsNiArMTUzLDEwIEBACiAJCW11dGV4X2xvY2soJnBtX211dGV4KTsKIAkJZXJyb3IgPSBwbV9ub3RpZmllcl9jYWxsX2NoYWluKFBNX0hJQkVSTkFUSU9OX1BSRVBBUkUpOwogCQlpZiAoIWVycm9yKSB7CisJCQlwcmludGsoIlN5bmNpbmcgZmlsZXN5c3RlbXMgLi4uICIpOworCQkJc3lzX3N5bmMoKTsKKwkJCXByaW50aygiZG9uZS5cbiIpOworCiAJCQllcnJvciA9IGZyZWV6ZV9wcm9jZXNzZXMoKTsKIAkJCWlmIChlcnJvcikKIAkJCQl0aGF3X3Byb2Nlc3NlcygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3ByaW50ay5jIGIva2VybmVsL3ByaW50ay5jCmluZGV4IDUyNDkzNDcuLmEzMGZlMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wcmludGsuYworKysgYi9rZXJuZWwvcHJpbnRrLmMKQEAgLTg2Miw3ICs4NjIsMTYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLSNpZm5kZWYgQ09ORklHX0RJU0FCTEVfQ09OU09MRV9TVVNQRU5ECitpbnQgY29uc29sZV9zdXNwZW5kX2VuYWJsZWQgPSAxOworRVhQT1JUX1NZTUJPTChjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNvbnNvbGVfc3VzcGVuZF9kaXNhYmxlKGNoYXIgKnN0cikKK3sKKwljb25zb2xlX3N1c3BlbmRfZW5hYmxlZCA9IDA7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub19jb25zb2xlX3N1c3BlbmQiLCBjb25zb2xlX3N1c3BlbmRfZGlzYWJsZSk7CisKIC8qKgogICogc3VzcGVuZF9jb25zb2xlIC0gc3VzcGVuZCB0aGUgY29uc29sZSBzdWJzeXN0ZW0KICAqCkBAIC04NzAsNiArODc5LDggQEAKICAqLwogdm9pZCBzdXNwZW5kX2NvbnNvbGUodm9pZCkKIHsKKwlpZiAoIWNvbnNvbGVfc3VzcGVuZF9lbmFibGVkKQorCQlyZXR1cm47CiAJcHJpbnRrKCJTdXNwZW5kaW5nIGNvbnNvbGUocylcbiIpOwogCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKIAljb25zb2xlX3N1c3BlbmRlZCA9IDE7CkBAIC04NzcsMTAgKzg4OCwxMSBAQAogCiB2b2lkIHJlc3VtZV9jb25zb2xlKHZvaWQpCiB7CisJaWYgKCFjb25zb2xlX3N1c3BlbmRfZW5hYmxlZCkKKwkJcmV0dXJuOwogCWNvbnNvbGVfc3VzcGVuZGVkID0gMDsKIAlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7CiB9Ci0jZW5kaWYgLyogQ09ORklHX0RJU0FCTEVfQ09OU09MRV9TVVNQRU5EICovCiAKIC8qKgogICogYWNxdWlyZV9jb25zb2xlX3NlbSAtIGxvY2sgdGhlIGNvbnNvbGUgc3lzdGVtIGZvciBleGNsdXNpdmUgdXNlLgpkaWZmIC0tZ2l0IGEva2VybmVsL3B0cmFjZS5jIGIva2VybmVsL3B0cmFjZS5jCmluZGV4IGE3M2ViZDMuLjdjNzZmMmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wdHJhY2UuYworKysgYi9rZXJuZWwvcHRyYWNlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvcGlkX25hbWVzcGFjZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTY4LDcgKzE2OSw3IEBACiAJcmV0dmFsID0gLUVQRVJNOwogCWlmICh0YXNrLT5waWQgPD0gMSkKIAkJZ290byBvdXQ7Ci0JaWYgKHRhc2stPnRnaWQgPT0gY3VycmVudC0+dGdpZCkKKwlpZiAoc2FtZV90aHJlYWRfZ3JvdXAodGFzaywgY3VycmVudCkpCiAJCWdvdG8gb3V0OwogCiByZXBlYXQ6CkBAIC00NDMsNyArNDQ0LDcgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKIAogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JY2hpbGQgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CisJY2hpbGQgPSBmaW5kX3Rhc2tfYnlfdnBpZChwaWQpOwogCWlmIChjaGlsZCkKIAkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3JlbGF5LmMgYi9rZXJuZWwvcmVsYXkuYwppbmRleCBhZDg1NTAxLi42MTEzNGViIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVsYXkuYworKysgYi9rZXJuZWwvcmVsYXkuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJaWYgKCFjaGFuKQogCQlyZXR1cm47CiAKLSAJaWYgKGNoYW4tPmlzX2dsb2JhbCAmJiBjaGFuLT5idWZbMF0pIHsKKwlpZiAoY2hhbi0+aXNfZ2xvYmFsICYmIGNoYW4tPmJ1ZlswXSkgewogCQlfX3JlbGF5X3Jlc2V0KGNoYW4tPmJ1ZlswXSwgMCk7CiAJCXJldHVybjsKIAl9CkBAIC04NTAsMTMgKzg1MCwxMyBAQAogCQlidWYtPnN1YmJ1ZnNfY29uc3VtZWQgPSBjb25zdW1lZDsKIAkJYnVmLT5ieXRlc19jb25zdW1lZCA9IDA7CiAJfQotCQorCiAJcHJvZHVjZWQgPSAocHJvZHVjZWQgJSBuX3N1YmJ1ZnMpICogc3ViYnVmX3NpemUgKyBidWYtPm9mZnNldDsKIAljb25zdW1lZCA9IChjb25zdW1lZCAlIG5fc3ViYnVmcykgKiBzdWJidWZfc2l6ZSArIGJ1Zi0+Ynl0ZXNfY29uc3VtZWQ7CiAKIAlpZiAoY29uc3VtZWQgPiBwcm9kdWNlZCkKIAkJcHJvZHVjZWQgKz0gbl9zdWJidWZzICogc3ViYnVmX3NpemU7Ci0JCisKIAlpZiAoY29uc3VtZWQgPT0gcHJvZHVjZWQpCiAJCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC1kZWJ1Zy5jIGIva2VybmVsL3J0bXV0ZXgtZGVidWcuYwppbmRleCA2YjA3MDNkLi41NmQ3M2NiIDEwMDY0NAotLS0gYS9rZXJuZWwvcnRtdXRleC1kZWJ1Zy5jCisrKyBiL2tlcm5lbC9ydG11dGV4LWRlYnVnLmMKQEAgLTg3LDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIHByaW50a190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlpZiAocCkKLQkJcHJpbnRrKCIlMTZzOiU1ZCBbJXAsICUzZF0iLCBwLT5jb21tLCBwLT5waWQsIHAsIHAtPnByaW8pOworCQlwcmludGsoIiUxNnM6JTVkIFslcCwgJTNkXSIsIHAtPmNvbW0sIHRhc2tfcGlkX25yKHApLCBwLCBwLT5wcmlvKTsKIAllbHNlCiAJCXByaW50aygiPG5vbmU+Iik7CiB9CkBAIC0xNTIsMjIgKzE1MiwyNSBAQAogCXByaW50ayggICJbIEJVRzogY2lyY3VsYXIgbG9ja2luZyBkZWFkbG9jayBkZXRlY3RlZCEgXVxuIik7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoIiVzLyVkIGlzIGRlYWRsb2NraW5nIGN1cnJlbnQgdGFzayAlcy8lZFxuXG4iLAotCSAgICAgICB0YXNrLT5jb21tLCB0YXNrLT5waWQsIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJICAgICAgIHRhc2stPmNvbW0sIHRhc2tfcGlkX25yKHRhc2spLAorCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKIAlwcmludGsoIlxuMSkgJXMvJWQgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgdGhpcyBsb2NrOlxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwogCXByaW50a19sb2NrKHdhaXRlci0+bG9jaywgMSk7CiAKLQlwcmludGsoIlxuMikgJXMvJWQgaXMgYmxvY2tlZCBvbiB0aGlzIGxvY2s6XG4iLCB0YXNrLT5jb21tLCB0YXNrLT5waWQpOworCXByaW50aygiXG4yKSAlcy8lZCBpcyBibG9ja2VkIG9uIHRoaXMgbG9jazpcbiIsCisJCXRhc2stPmNvbW0sIHRhc2tfcGlkX25yKHRhc2spKTsKIAlwcmludGtfbG9jayh3YWl0ZXItPmRlYWRsb2NrX2xvY2ssIDEpOwogCiAJZGVidWdfc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQpOwogCWRlYnVnX3Nob3dfaGVsZF9sb2Nrcyh0YXNrKTsKIAotCXByaW50aygiXG4lcy8lZCdzIFtibG9ja2VkXSBzdGFja2R1bXA6XG5cbiIsIHRhc2stPmNvbW0sIHRhc2stPnBpZCk7CisJcHJpbnRrKCJcbiVzLyVkJ3MgW2Jsb2NrZWRdIHN0YWNrZHVtcDpcblxuIiwKKwkJdGFzay0+Y29tbSwgdGFza19waWRfbnIodGFzaykpOwogCXNob3dfc3RhY2sodGFzaywgTlVMTCk7CiAJcHJpbnRrKCJcbiVzLyVkJ3MgW2N1cnJlbnRdIHN0YWNrZHVtcDpcblxuIiwKLQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwkJY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwogCWR1bXBfc3RhY2soKTsKIAlkZWJ1Z19zaG93X2FsbF9sb2NrcygpOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC5jIGIva2VybmVsL3J0bXV0ZXguYwppbmRleCA4Y2Q5YmQyLi4wZGVlZjcxIDEwMDY0NAotLS0gYS9rZXJuZWwvcnRtdXRleC5jCisrKyBiL2tlcm5lbC9ydG11dGV4LmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQkJcHJldl9tYXggPSBtYXhfbG9ja19kZXB0aDsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk1heGltdW0gbG9jayBkZXB0aCAlZCByZWFjaGVkICIKIAkJCSAgICAgICAidGFzazogJXMgKCVkKVxuIiwgbWF4X2xvY2tfZGVwdGgsCi0JCQkgICAgICAgdG9wX3Rhc2stPmNvbW0sIHRvcF90YXNrLT5waWQpOworCQkJICAgICAgIHRvcF90YXNrLT5jb21tLCB0YXNrX3BpZF9ucih0b3BfdGFzaykpOwogCQl9CiAJCXB1dF90YXNrX3N0cnVjdCh0YXNrKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA5MjcyMWQxLi43NTgxZTMzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KQEAgLTUxLDYgKzUyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVfYWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgpAQCAtMTUzLDEwICsxNTUsMTUgQEAKIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECiAKKyNpbmNsdWRlIDxsaW51eC9jZ3JvdXAuaD4KKwogc3RydWN0IGNmc19ycTsKIAogLyogdGFzayBncm91cCByZWxhdGVkIGluZm9ybWF0aW9uICovCiBzdHJ1Y3QgdGFza19ncm91cCB7CisjaWZkZWYgQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVECisJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgY3NzOworI2VuZGlmCiAJLyogc2NoZWR1bGFibGUgZW50aXRpZXMgb2YgdGhpcyBncm91cCBvbiBlYWNoIGNwdSAqLwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKipzZTsKIAkvKiBydW5xdWV1ZSAib3duZWQiIGJ5IHRoaXMgZ3JvdXAgb24gZWFjaCBjcHUgKi8KQEAgLTE5Nyw2ICsyMDQsOSBAQAogCiAjaWZkZWYgQ09ORklHX0ZBSVJfVVNFUl9TQ0hFRAogCXRnID0gcC0+dXNlci0+dGc7CisjZWxpZiBkZWZpbmVkKENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRCkKKwl0ZyA9IGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZShwLCBjcHVfY2dyb3VwX3N1YnN5c19pZCksCisJCQkJc3RydWN0IHRhc2tfZ3JvdXAsIGNzcyk7CiAjZWxzZQogCXRnICA9ICZpbml0X3Rhc2tfZ3JvdXA7CiAjZW5kaWYKQEAgLTI2Niw3ICsyNzYsOCBAQAogICogYWNxdWlyZSBvcGVyYXRpb25zIG11c3QgYmUgb3JkZXJlZCBieSBhc2NlbmRpbmcgJnJ1bnF1ZXVlLgogICovCiBzdHJ1Y3QgcnEgewotCXNwaW5sb2NrX3QgbG9jazsJLyogcnVucXVldWUgbG9jayAqLworCS8qIHJ1bnF1ZXVlIGxvY2s6ICovCisJc3BpbmxvY2tfdCBsb2NrOwogCiAJLyoKIAkgKiBucl9ydW5uaW5nIGFuZCBjcHVfbG9hZCBzaG91bGQgYmUgaW4gdGhlIHNhbWUgY2FjaGVsaW5lIGJlY2F1c2UKQEAgLTI3OSwxMyArMjkwLDE1IEBACiAjaWZkZWYgQ09ORklHX05PX0haCiAJdW5zaWduZWQgY2hhciBpbl9ub2h6X3JlY2VudGx5OwogI2VuZGlmCi0Jc3RydWN0IGxvYWRfd2VpZ2h0IGxvYWQ7CS8qIGNhcHR1cmUgbG9hZCBmcm9tICphbGwqIHRhc2tzIG9uIHRoaXMgY3B1ICovCisJLyogY2FwdHVyZSBsb2FkIGZyb20gKmFsbCogdGFza3Mgb24gdGhpcyBjcHU6ICovCisJc3RydWN0IGxvYWRfd2VpZ2h0IGxvYWQ7CiAJdW5zaWduZWQgbG9uZyBucl9sb2FkX3VwZGF0ZXM7CiAJdTY0IG5yX3N3aXRjaGVzOwogCiAJc3RydWN0IGNmc19ycSBjZnM7CiAjaWZkZWYgQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxlYWZfY2ZzX3JxX2xpc3Q7IC8qIGxpc3Qgb2YgbGVhZiBjZnNfcnEgb24gdGhpcyBjcHUgKi8KKwkvKiBsaXN0IG9mIGxlYWYgY2ZzX3JxIG9uIHRoaXMgY3B1OiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbGVhZl9jZnNfcnFfbGlzdDsKICNlbmRpZgogCXN0cnVjdCBydF9ycSAgcnQ7CiAKQEAgLTMxNyw3ICszMzAsOCBAQAogCS8qIEZvciBhY3RpdmUgYmFsYW5jaW5nICovCiAJaW50IGFjdGl2ZV9iYWxhbmNlOwogCWludCBwdXNoX2NwdTsKLQlpbnQgY3B1OwkJLyogY3B1IG9mIHRoaXMgcnVucXVldWUgKi8KKwkvKiBjcHUgb2YgdGhpcyBydW5xdWV1ZTogKi8KKwlpbnQgY3B1OwogCiAJc3RydWN0IHRhc2tfc3RydWN0ICptaWdyYXRpb25fdGhyZWFkOwogCXN0cnVjdCBsaXN0X2hlYWQgbWlncmF0aW9uX3F1ZXVlOwpAQCAtMzI4LDIyICszNDIsMjIgQEAKIAlzdHJ1Y3Qgc2NoZWRfaW5mbyBycV9zY2hlZF9pbmZvOwogCiAJLyogc3lzX3NjaGVkX3lpZWxkKCkgc3RhdHMgKi8KLQl1bnNpZ25lZCBsb25nIHlsZF9leHBfZW1wdHk7Ci0JdW5zaWduZWQgbG9uZyB5bGRfYWN0X2VtcHR5OwotCXVuc2lnbmVkIGxvbmcgeWxkX2JvdGhfZW1wdHk7Ci0JdW5zaWduZWQgbG9uZyB5bGRfY291bnQ7CisJdW5zaWduZWQgaW50IHlsZF9leHBfZW1wdHk7CisJdW5zaWduZWQgaW50IHlsZF9hY3RfZW1wdHk7CisJdW5zaWduZWQgaW50IHlsZF9ib3RoX2VtcHR5OworCXVuc2lnbmVkIGludCB5bGRfY291bnQ7CiAKIAkvKiBzY2hlZHVsZSgpIHN0YXRzICovCi0JdW5zaWduZWQgbG9uZyBzY2hlZF9zd2l0Y2g7Ci0JdW5zaWduZWQgbG9uZyBzY2hlZF9jb3VudDsKLQl1bnNpZ25lZCBsb25nIHNjaGVkX2dvaWRsZTsKKwl1bnNpZ25lZCBpbnQgc2NoZWRfc3dpdGNoOworCXVuc2lnbmVkIGludCBzY2hlZF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgc2NoZWRfZ29pZGxlOwogCiAJLyogdHJ5X3RvX3dha2VfdXAoKSBzdGF0cyAqLwotCXVuc2lnbmVkIGxvbmcgdHR3dV9jb3VudDsKLQl1bnNpZ25lZCBsb25nIHR0d3VfbG9jYWw7CisJdW5zaWduZWQgaW50IHR0d3VfY291bnQ7CisJdW5zaWduZWQgaW50IHR0d3VfbG9jYWw7CiAKIAkvKiBCS0wgc3RhdHMgKi8KLQl1bnNpZ25lZCBsb25nIGJrbF9jb3VudDsKKwl1bnNpZ25lZCBpbnQgYmtsX2NvdW50OwogI2VuZGlmCiAJc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHJxX2xvY2tfa2V5OwogfTsKQEAgLTQ0OSwxMiArNDYzLDEyIEBACiB9OwogCiBjb25zdF9kZWJ1ZyB1bnNpZ25lZCBpbnQgc3lzY3RsX3NjaGVkX2ZlYXR1cmVzID0KLQkJU0NIRURfRkVBVF9ORVdfRkFJUl9TTEVFUEVSUwkqMSB8Ci0JCVNDSEVEX0ZFQVRfU1RBUlRfREVCSVQJCSoxIHwKLQkJU0NIRURfRkVBVF9UUkVFX0FWRwkJKjAgfAotCQlTQ0hFRF9GRUFUX0FQUFJPWF9BVkcJCSowIHwKLQkJU0NIRURfRkVBVF9XQUtFVVBfUFJFRU1QVAkqMSB8Ci0JCVNDSEVEX0ZFQVRfUFJFRU1QVF9SRVNUUklDVAkqMTsKKwkJU0NIRURfRkVBVF9ORVdfRkFJUl9TTEVFUEVSUwkqIDEgfAorCQlTQ0hFRF9GRUFUX1NUQVJUX0RFQklUCQkqIDEgfAorCQlTQ0hFRF9GRUFUX1RSRUVfQVZHCQkqIDAgfAorCQlTQ0hFRF9GRUFUX0FQUFJPWF9BVkcJCSogMCB8CisJCVNDSEVEX0ZFQVRfV0FLRVVQX1BSRUVNUFQJKiAxIHwKKwkJU0NIRURfRkVBVF9QUkVFTVBUX1JFU1RSSUNUCSogMTsKIAogI2RlZmluZSBzY2hlZF9mZWF0KHgpIChzeXNjdGxfc2NoZWRfZmVhdHVyZXMgJiBTQ0hFRF9GRUFUXyMjeCkKIApAQCAtMTg3MSw3ICsxODg1LDcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogI2VuZGlmCiAJaWYgKGN1cnJlbnQtPnNldF9jaGlsZF90aWQpCi0JCXB1dF91c2VyKGN1cnJlbnQtPnBpZCwgY3VycmVudC0+c2V0X2NoaWxkX3RpZCk7CisJCXB1dF91c2VyKHRhc2tfcGlkX3ZucihjdXJyZW50KSwgY3VycmVudC0+c2V0X2NoaWxkX3RpZCk7CiB9CiAKIC8qCkBAIC0zMjk2LDE2ICszMzEwLDE5IEBACiAvKgogICogQWNjb3VudCB1c2VyIGNwdSB0aW1lIHRvIGEgcHJvY2Vzcy4KICAqIEBwOiB0aGUgcHJvY2VzcyB0aGF0IHRoZSBjcHUgdGltZSBnZXRzIGFjY291bnRlZCB0bwotICogQGhhcmRpcnFfb2Zmc2V0OiB0aGUgb2Zmc2V0IHRvIHN1YnRyYWN0IGZyb20gaGFyZGlycV9jb3VudCgpCiAgKiBAY3B1dGltZTogdGhlIGNwdSB0aW1lIHNwZW50IGluIHVzZXIgc3BhY2Ugc2luY2UgdGhlIGxhc3QgdXBkYXRlCiAgKi8KIHZvaWQgYWNjb3VudF91c2VyX3RpbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBjcHV0aW1lX3QgY3B1dGltZSkKIHsKIAlzdHJ1Y3QgY3B1X3VzYWdlX3N0YXQgKmNwdXN0YXQgPSAma3N0YXRfdGhpc19jcHUuY3B1c3RhdDsKIAljcHV0aW1lNjRfdCB0bXA7CisJc3RydWN0IHJxICpycSA9IHRoaXNfcnEoKTsKIAogCXAtPnV0aW1lID0gY3B1dGltZV9hZGQocC0+dXRpbWUsIGNwdXRpbWUpOwogCisJaWYgKHAgIT0gcnEtPmlkbGUpCisJCWNwdWFjY3RfY2hhcmdlKHAsIGNwdXRpbWUpOworCiAJLyogQWRkIHVzZXIgdGltZSB0byBjcHVzdGF0LiAqLwogCXRtcCA9IGNwdXRpbWVfdG9fY3B1dGltZTY0KGNwdXRpbWUpOwogCWlmIChUQVNLX05JQ0UocCkgPiAwKQpAQCAtMzMzNCw2ICszMzUxLDE2IEBACiB9CiAKIC8qCisgKiBBY2NvdW50IHNjYWxlZCB1c2VyIGNwdSB0aW1lIHRvIGEgcHJvY2Vzcy4KKyAqIEBwOiB0aGUgcHJvY2VzcyB0aGF0IHRoZSBjcHUgdGltZSBnZXRzIGFjY291bnRlZCB0bworICogQGNwdXRpbWU6IHRoZSBjcHUgdGltZSBzcGVudCBpbiB1c2VyIHNwYWNlIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZQorICovCit2b2lkIGFjY291bnRfdXNlcl90aW1lX3NjYWxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNwdXRpbWVfdCBjcHV0aW1lKQoreworCXAtPnV0aW1lc2NhbGVkID0gY3B1dGltZV9hZGQocC0+dXRpbWVzY2FsZWQsIGNwdXRpbWUpOworfQorCisvKgogICogQWNjb3VudCBzeXN0ZW0gY3B1IHRpbWUgdG8gYSBwcm9jZXNzLgogICogQHA6IHRoZSBwcm9jZXNzIHRoYXQgdGhlIGNwdSB0aW1lIGdldHMgYWNjb3VudGVkIHRvCiAgKiBAaGFyZGlycV9vZmZzZXQ6IHRoZSBvZmZzZXQgdG8gc3VidHJhY3QgZnJvbSBoYXJkaXJxX2NvdW50KCkKQEAgLTMzNjAsOSArMzM4NywxMCBAQAogCQljcHVzdGF0LT5pcnEgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPmlycSwgdG1wKTsKIAllbHNlIGlmIChzb2Z0aXJxX2NvdW50KCkpCiAJCWNwdXN0YXQtPnNvZnRpcnEgPSBjcHV0aW1lNjRfYWRkKGNwdXN0YXQtPnNvZnRpcnEsIHRtcCk7Ci0JZWxzZSBpZiAocCAhPSBycS0+aWRsZSkKKwllbHNlIGlmIChwICE9IHJxLT5pZGxlKSB7CiAJCWNwdXN0YXQtPnN5c3RlbSA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+c3lzdGVtLCB0bXApOwotCWVsc2UgaWYgKGF0b21pY19yZWFkKCZycS0+bnJfaW93YWl0KSA+IDApCisJCWNwdWFjY3RfY2hhcmdlKHAsIGNwdXRpbWUpOworCX0gZWxzZSBpZiAoYXRvbWljX3JlYWQoJnJxLT5ucl9pb3dhaXQpID4gMCkKIAkJY3B1c3RhdC0+aW93YWl0ID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pb3dhaXQsIHRtcCk7CiAJZWxzZQogCQljcHVzdGF0LT5pZGxlID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pZGxlLCB0bXApOwpAQCAtMzM3MSw2ICszMzk5LDE3IEBACiB9CiAKIC8qCisgKiBBY2NvdW50IHNjYWxlZCBzeXN0ZW0gY3B1IHRpbWUgdG8gYSBwcm9jZXNzLgorICogQHA6IHRoZSBwcm9jZXNzIHRoYXQgdGhlIGNwdSB0aW1lIGdldHMgYWNjb3VudGVkIHRvCisgKiBAaGFyZGlycV9vZmZzZXQ6IHRoZSBvZmZzZXQgdG8gc3VidHJhY3QgZnJvbSBoYXJkaXJxX2NvdW50KCkKKyAqIEBjcHV0aW1lOiB0aGUgY3B1IHRpbWUgc3BlbnQgaW4ga2VybmVsIHNwYWNlIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZQorICovCit2b2lkIGFjY291bnRfc3lzdGVtX3RpbWVfc2NhbGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgY3B1dGltZV90IGNwdXRpbWUpCit7CisJcC0+c3RpbWVzY2FsZWQgPSBjcHV0aW1lX2FkZChwLT5zdGltZXNjYWxlZCwgY3B1dGltZSk7Cit9CisKKy8qCiAgKiBBY2NvdW50IGZvciBpbnZvbHVudGFyeSB3YWl0IHRpbWUuCiAgKiBAcDogdGhlIHByb2Nlc3MgZnJvbSB3aGljaCB0aGUgY3B1IHRpbWUgaGFzIGJlZW4gc3RvbGVuCiAgKiBAc3RlYWw6IHRoZSBjcHUgdGltZSBzcGVudCBpbiBpbnZvbHVudGFyeSB3YWl0CkBAIC0zMzg3LDggKzM0MjYsMTAgQEAKIAkJCWNwdXN0YXQtPmlvd2FpdCA9IGNwdXRpbWU2NF9hZGQoY3B1c3RhdC0+aW93YWl0LCB0bXApOwogCQllbHNlCiAJCQljcHVzdGF0LT5pZGxlID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5pZGxlLCB0bXApOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWNwdXN0YXQtPnN0ZWFsID0gY3B1dGltZTY0X2FkZChjcHVzdGF0LT5zdGVhbCwgdG1wKTsKKwkJY3B1YWNjdF9jaGFyZ2UocCwgLXRtcCk7CisJfQogfQogCiAvKgpAQCAtMzQ2OCw3ICszNTA5LDcgQEAKIHN0YXRpYyBub2lubGluZSB2b2lkIF9fc2NoZWR1bGVfYnVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKIAlwcmludGsoS0VSTl9FUlIgIkJVRzogc2NoZWR1bGluZyB3aGlsZSBhdG9taWM6ICVzLzB4JTA4eC8lZFxuIiwKLQkJcHJldi0+Y29tbSwgcHJlZW1wdF9jb3VudCgpLCBwcmV2LT5waWQpOworCQlwcmV2LT5jb21tLCBwcmVlbXB0X2NvdW50KCksIHRhc2tfcGlkX25yKHByZXYpKTsKIAlkZWJ1Z19zaG93X2hlbGRfbG9ja3MocHJldik7CiAJaWYgKGlycXNfZGlzYWJsZWQoKSkKIAkJcHJpbnRfaXJxdHJhY2VfZXZlbnRzKHByZXYpOwpAQCAtMzg1OSw3ICszOTAwLDEwIEBACiAKIGludCBfX3NjaGVkIHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZShzdHJ1Y3QgY29tcGxldGlvbiAqeCkKIHsKLQlyZXR1cm4gd2FpdF9mb3JfY29tbW9uKHgsIE1BWF9TQ0hFRFVMRV9USU1FT1VULCBUQVNLX0lOVEVSUlVQVElCTEUpOworCWxvbmcgdCA9IHdhaXRfZm9yX2NvbW1vbih4LCBNQVhfU0NIRURVTEVfVElNRU9VVCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKKwlpZiAodCA9PSAtRVJFU1RBUlRTWVMpCisJCXJldHVybiB0OworCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUpOwogCkBAIC00MTMxLDcgKzQxNzUsNyBAQAogICovCiBzdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Byb2Nlc3NfYnlfcGlkKHBpZF90IHBpZCkKIHsKLQlyZXR1cm4gcGlkID8gZmluZF90YXNrX2J5X3BpZChwaWQpIDogY3VycmVudDsKKwlyZXR1cm4gcGlkID8gZmluZF90YXNrX2J5X3ZwaWQocGlkKSA6IGN1cnJlbnQ7CiB9CiAKIC8qIEFjdHVhbGx5IGRvIHByaW9yaXR5IGNoYW5nZTogbXVzdCBob2xkIHJxIGxvY2suICovCkBAIC00NDM0LDggKzQ0NzgsMjEgQEAKIAogCWNwdXNfYWxsb3dlZCA9IGNwdXNldF9jcHVzX2FsbG93ZWQocCk7CiAJY3B1c19hbmQobmV3X21hc2ssIG5ld19tYXNrLCBjcHVzX2FsbG93ZWQpOworIGFnYWluOgogCXJldHZhbCA9IHNldF9jcHVzX2FsbG93ZWQocCwgbmV3X21hc2spOwogCisJaWYgKCFyZXR2YWwpIHsKKwkJY3B1c19hbGxvd2VkID0gY3B1c2V0X2NwdXNfYWxsb3dlZChwKTsKKwkJaWYgKCFjcHVzX3N1YnNldChuZXdfbWFzaywgY3B1c19hbGxvd2VkKSkgeworCQkJLyoKKwkJCSAqIFdlIG11c3QgaGF2ZSByYWNlZCB3aXRoIGEgY29uY3VycmVudCBjcHVzZXQKKwkJCSAqIHVwZGF0ZS4gSnVzdCByZXNldCB0aGUgY3B1c19hbGxvd2VkIHRvIHRoZQorCQkJICogY3B1c2V0J3MgY3B1c19hbGxvd2VkCisJCQkgKi8KKwkJCW5ld19tYXNrID0gY3B1c19hbGxvd2VkOworCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KIG91dF91bmxvY2s6CiAJcHV0X3Rhc2tfc3RydWN0KHApOwogCW11dGV4X3VubG9jaygmc2NoZWRfaG90Y3B1X211dGV4KTsKQEAgLTQ3OTQsMTggKzQ4NTEsMTggQEAKIAl1bnNpZ25lZCBzdGF0ZTsKIAogCXN0YXRlID0gcC0+c3RhdGUgPyBfX2ZmcyhwLT5zdGF0ZSkgKyAxIDogMDsKLQlwcmludGsoIiUtMTMuMTNzICVjIiwgcC0+Y29tbSwKKwlwcmludGsoS0VSTl9JTkZPICIlLTEzLjEzcyAlYyIsIHAtPmNvbW0sCiAJCXN0YXRlIDwgc2l6ZW9mKHN0YXRfbmFtKSAtIDEgPyBzdGF0X25hbVtzdGF0ZV0gOiAnPycpOwogI2lmIEJJVFNfUEVSX0xPTkcgPT0gMzIKIAlpZiAoc3RhdGUgPT0gVEFTS19SVU5OSU5HKQotCQlwcmludGsoIiBydW5uaW5nICAiKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIHJ1bm5pbmcgICIpOwogCWVsc2UKLQkJcHJpbnRrKCIgJTA4bHggIiwgdGhyZWFkX3NhdmVkX3BjKHApKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiICUwOGx4ICIsIHRocmVhZF9zYXZlZF9wYyhwKSk7CiAjZWxzZQogCWlmIChzdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCi0JCXByaW50aygiICBydW5uaW5nIHRhc2sgICAgIik7CisJCXByaW50ayhLRVJOX0NPTlQgIiAgcnVubmluZyB0YXNrICAgICIpOwogCWVsc2UKLQkJcHJpbnRrKCIgJTAxNmx4ICIsIHRocmVhZF9zYXZlZF9wYyhwKSk7CisJCXByaW50ayhLRVJOX0NPTlQgIiAlMDE2bHggIiwgdGhyZWFkX3NhdmVkX3BjKHApKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQogCXsKQEAgLTQ4MTUsNyArNDg3Miw4IEBACiAJCWZyZWUgPSAodW5zaWduZWQgbG9uZyluIC0gKHVuc2lnbmVkIGxvbmcpZW5kX29mX3N0YWNrKHApOwogCX0KICNlbmRpZgotCXByaW50aygiJTVsdSAlNWQgJTZkXG4iLCBmcmVlLCBwLT5waWQsIHAtPnBhcmVudC0+cGlkKTsKKwlwcmludGsoS0VSTl9DT05UICIlNWx1ICU1ZCAlNmRcbiIsIGZyZWUsCisJCXRhc2tfcGlkX25yKHApLCB0YXNrX3BpZF9ucihwLT5wYXJlbnQpKTsKIAogCWlmIChzdGF0ZSAhPSBUQVNLX1JVTk5JTkcpCiAJCXNob3dfc3RhY2socCwgTlVMTCk7CkBAIC01MDg3LDcgKzUxNDUsNyBAQAogfQogCiAvKgotICogRmlndXJlIG91dCB3aGVyZSB0YXNrIG9uIGRlYWQgQ1BVIHNob3VsZCBnbywgdXNlIGZvcmNlIGlmIG5lY2Nlc3NhcnkuCisgKiBGaWd1cmUgb3V0IHdoZXJlIHRhc2sgb24gZGVhZCBDUFUgc2hvdWxkIGdvLCB1c2UgZm9yY2UgaWYgbmVjZXNzYXJ5LgogICogTk9URTogaW50ZXJydXB0cyBzaG91bGQgYmUgZGlzYWJsZWQgYnkgdGhlIGNhbGxlcgogICovCiBzdGF0aWMgdm9pZCBtb3ZlX3Rhc2tfb2ZmX2RlYWRfY3B1KGludCBkZWFkX2NwdSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQpAQCAtNTEwOSw4ICs1MTY3LDE2IEBACiAKIAkJLyogTm8gbW9yZSBNci4gTmljZSBHdXkuICovCiAJCWlmIChkZXN0X2NwdSA9PSBOUl9DUFVTKSB7CisJCQljcHVtYXNrX3QgY3B1c19hbGxvd2VkID0gY3B1c2V0X2NwdXNfYWxsb3dlZF9sb2NrZWQocCk7CisJCQkvKgorCQkJICogVHJ5IHRvIHN0YXkgb24gdGhlIHNhbWUgY3B1c2V0LCB3aGVyZSB0aGUKKwkJCSAqIGN1cnJlbnQgY3B1c2V0IG1heSBiZSBhIHN1YnNldCBvZiBhbGwgY3B1cy4KKwkJCSAqIFRoZSBjcHVzZXRfY3B1c19hbGxvd2VkX2xvY2tlZCgpIHZhcmlhbnQgb2YKKwkJCSAqIGNwdXNldF9jcHVzX2FsbG93ZWQoKSB3aWxsIG5vdCBibG9jay4gIEl0IG11c3QgYmUKKwkJCSAqIGNhbGxlZCB3aXRoaW4gY2FsbHMgdG8gY3B1c2V0X2xvY2svY3B1c2V0X3VubG9jay4KKwkJCSAqLwogCQkJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQkJCWNwdXNfc2V0YWxsKHAtPmNwdXNfYWxsb3dlZCk7CisJCQlwLT5jcHVzX2FsbG93ZWQgPSBjcHVzX2FsbG93ZWQ7CiAJCQlkZXN0X2NwdSA9IGFueV9vbmxpbmVfY3B1KHAtPmNwdXNfYWxsb3dlZCk7CiAJCQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKIApAQCAtNTEyMiw3ICs1MTg4LDcgQEAKIAkJCWlmIChwLT5tbSAmJiBwcmludGtfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAicHJvY2VzcyAlZCAoJXMpIG5vICIKIAkJCQkgICAgICAgImxvbmdlciBhZmZpbmUgdG8gY3B1JWRcbiIsCi0JCQkJICAgICAgIHAtPnBpZCwgcC0+Y29tbSwgZGVhZF9jcHUpOworCQkJICAgICAgIHRhc2tfcGlkX25yKHApLCBwLT5jb21tLCBkZWFkX2NwdSk7CiAJCX0KIAl9IHdoaWxlICghX19taWdyYXRlX3Rhc2tfaXJxKHAsIGRlYWRfY3B1LCBkZXN0X2NwdSkpOwogfQpAQCAtNTIyOSw3ICs1Mjk1LDcgQEAKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGRlYWRfY3B1KTsKIAogCS8qIE11c3QgYmUgZXhpdGluZywgb3RoZXJ3aXNlIHdvdWxkIGJlIG9uIHRhc2tsaXN0LiAqLwotCUJVR19PTihwLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFICYmIHAtPmV4aXRfc3RhdGUgIT0gRVhJVF9ERUFEKTsKKwlCVUdfT04oIXAtPmV4aXRfc3RhdGUpOwogCiAJLyogQ2Fubm90IGhhdmUgZG9uZSBmaW5hbCBzY2hlZHVsZSB5ZXQ6IHdvdWxkIGhhdmUgdmFuaXNoZWQuICovCiAJQlVHX09OKHAtPnN0YXRlID09IFRBU0tfREVBRCk7CkBAIC01MzY0LDcgKzU0MzAsNyBAQAogCXJldHVybiB0YWJsZTsKIH0KIAotc3RhdGljIGN0bF90YWJsZSAqc2RfYWxsb2NfY3RsX2NwdV90YWJsZShpbnQgY3B1KQorc3RhdGljIGN0bF90YWJsZSAqIHNkX2FsbG9jX2N0bF9jcHVfdGFibGUoaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICplbnRyeSwgKnRhYmxlOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwpAQCAtNTQ1OCw3ICs1NTI0LDcgQEAKIAogCWNhc2UgQ1BVX09OTElORToKIAljYXNlIENQVV9PTkxJTkVfRlJPWkVOOgotCQkvKiBTdHJpY3RseSB1bm5lY2Nlc3NhcnksIGFzIGZpcnN0IHVzZXIgd2lsbCB3YWtlIGl0LiAqLworCQkvKiBTdHJpY3RseSB1bm5lY2Vzc2FyeSwgYXMgZmlyc3QgdXNlciB3aWxsIHdha2UgaXQuICovCiAJCXdha2VfdXBfcHJvY2VzcyhjcHVfcnEoY3B1KS0+bWlncmF0aW9uX3RocmVhZCk7CiAJCWJyZWFrOwogCkBAIC01NDc2LDYgKzU1NDIsNyBAQAogCiAJY2FzZSBDUFVfREVBRDoKIAljYXNlIENQVV9ERUFEX0ZST1pFTjoKKwkJY3B1c2V0X2xvY2soKTsgLyogYXJvdW5kIGNhbGxzIHRvIGNwdXNldF9jcHVzX2FsbG93ZWRfbG9jaygpICovCiAJCW1pZ3JhdGVfbGl2ZV90YXNrcyhjcHUpOwogCQlycSA9IGNwdV9ycShjcHUpOwogCQlrdGhyZWFkX3N0b3AocnEtPm1pZ3JhdGlvbl90aHJlYWQpOwpAQCAtNTQ4OSw2ICs1NTU2LDcgQEAKIAkJcnEtPmlkbGUtPnNjaGVkX2NsYXNzID0gJmlkbGVfc2NoZWRfY2xhc3M7CiAJCW1pZ3JhdGVfZGVhZF90YXNrcyhjcHUpOwogCQlzcGluX3VubG9ja19pcnEoJnJxLT5sb2NrKTsKKwkJY3B1c2V0X3VubG9jaygpOwogCQltaWdyYXRlX25yX3VuaW50ZXJydXB0aWJsZShycSk7CiAJCUJVR19PTihycS0+bnJfcnVubmluZyAhPSAwKTsKIApAQCAtNTU5OCwyMCArNTY2NiwyMCBAQAogCQkJfQogCiAJCQlpZiAoIWdyb3VwLT5fX2NwdV9wb3dlcikgewotCQkJCXByaW50aygiXG4iKTsKKwkJCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCQkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGRvbWFpbi0+Y3B1X3Bvd2VyIG5vdCAiCiAJCQkJCQkic2V0XG4iKTsKIAkJCQlicmVhazsKIAkJCX0KIAogCQkJaWYgKCFjcHVzX3dlaWdodChncm91cC0+Y3B1bWFzaykpIHsKLQkJCQlwcmludGsoIlxuIik7CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiBlbXB0eSBncm91cFxuIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWlmIChjcHVzX2ludGVyc2VjdHMoZ3JvdXBtYXNrLCBncm91cC0+Y3B1bWFzaykpIHsKLQkJCQlwcmludGsoIlxuIik7CisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAkJCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiByZXBlYXRlZCBDUFVzXG4iKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTU2MTksMTEgKzU2ODcsMTEgQEAKIAkJCWNwdXNfb3IoZ3JvdXBtYXNrLCBncm91cG1hc2ssIGdyb3VwLT5jcHVtYXNrKTsKIAogCQkJY3B1bWFza19zY25wcmludGYoc3RyLCBOUl9DUFVTLCBncm91cC0+Y3B1bWFzayk7Ci0JCQlwcmludGsoIiAlcyIsIHN0cik7CisJCQlwcmludGsoS0VSTl9DT05UICIgJXMiLCBzdHIpOwogCiAJCQlncm91cCA9IGdyb3VwLT5uZXh0OwogCQl9IHdoaWxlIChncm91cCAhPSBzZC0+Z3JvdXBzKTsKLQkJcHJpbnRrKCJcbiIpOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCiAJCWlmICghY3B1c19lcXVhbChzZC0+c3BhbiwgZ3JvdXBtYXNrKSkKIAkJCXByaW50ayhLRVJOX0VSUiAiRVJST1I6IGdyb3VwcyBkb24ndCBzcGFuICIKQEAgLTYzMzksMjYgKzY0MDcsMzEgQEAKIAlyZXR1cm4gLUVOT01FTTsKICNlbmRpZgogfQorCitzdGF0aWMgY3B1bWFza190ICpkb21zX2N1cjsJLyogY3VycmVudCBzY2hlZCBkb21haW5zICovCitzdGF0aWMgaW50IG5kb21zX2N1cjsJCS8qIG51bWJlciBvZiBzY2hlZCBkb21haW5zIGluICdkb21zX2N1cicgKi8KKworLyoKKyAqIFNwZWNpYWwgY2FzZTogSWYgYSBrbWFsbG9jIG9mIGEgZG9tc19jdXIgcGFydGl0aW9uIChhcnJheSBvZgorICogY3B1bWFza190KSBmYWlscywgdGhlbiBmYWxsYmFjayB0byBhIHNpbmdsZSBzY2hlZCBkb21haW4sCisgKiBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaW5nbGUgY3B1bWFza190IGZhbGxiYWNrX2RvbXMuCisgKi8KK3N0YXRpYyBjcHVtYXNrX3QgZmFsbGJhY2tfZG9tczsKKwogLyoKICAqIFNldCB1cCBzY2hlZHVsZXIgZG9tYWlucyBhbmQgZ3JvdXBzLiAgQ2FsbGVycyBtdXN0IGhvbGQgdGhlIGhvdHBsdWcgbG9jay4KKyAqIEZvciBub3cgdGhpcyBqdXN0IGV4Y2x1ZGVzIGlzb2xhdGVkIGNwdXMsIGJ1dCBjb3VsZCBiZSB1c2VkIHRvCisgKiBleGNsdWRlIG90aGVyIHNwZWNpYWwgY2FzZXMgaW4gdGhlIGZ1dHVyZS4KICAqLwogc3RhdGljIGludCBhcmNoX2luaXRfc2NoZWRfZG9tYWlucyhjb25zdCBjcHVtYXNrX3QgKmNwdV9tYXApCiB7Ci0JY3B1bWFza190IGNwdV9kZWZhdWx0X21hcDsKLQlpbnQgZXJyOwotCi0JLyoKLQkgKiBTZXR1cCBtYXNrIGZvciBjcHVzIHdpdGhvdXQgc3BlY2lhbCBjYXNlIHNjaGVkdWxpbmcgcmVxdWlyZW1lbnRzLgotCSAqIEZvciBub3cgdGhpcyBqdXN0IGV4Y2x1ZGVzIGlzb2xhdGVkIGNwdXMsIGJ1dCBjb3VsZCBiZSB1c2VkIHRvCi0JICogZXhjbHVkZSBvdGhlciBzcGVjaWFsIGNhc2VzIGluIHRoZSBmdXR1cmUuCi0JICovCi0JY3B1c19hbmRub3QoY3B1X2RlZmF1bHRfbWFwLCAqY3B1X21hcCwgY3B1X2lzb2xhdGVkX21hcCk7Ci0KLQllcnIgPSBidWlsZF9zY2hlZF9kb21haW5zKCZjcHVfZGVmYXVsdF9tYXApOwotCisJbmRvbXNfY3VyID0gMTsKKwlkb21zX2N1ciA9IGttYWxsb2Moc2l6ZW9mKGNwdW1hc2tfdCksIEdGUF9LRVJORUwpOworCWlmICghZG9tc19jdXIpCisJCWRvbXNfY3VyID0gJmZhbGxiYWNrX2RvbXM7CisJY3B1c19hbmRub3QoKmRvbXNfY3VyLCAqY3B1X21hcCwgY3B1X2lzb2xhdGVkX21hcCk7CiAJcmVnaXN0ZXJfc2NoZWRfZG9tYWluX3N5c2N0bCgpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gYnVpbGRfc2NoZWRfZG9tYWlucyhkb21zX2N1cik7CiB9CiAKIHN0YXRpYyB2b2lkIGFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNvbnN0IGNwdW1hc2tfdCAqY3B1X21hcCkKQEAgLTYzODIsNiArNjQ1NSw2OCBAQAogCWFyY2hfZGVzdHJveV9zY2hlZF9kb21haW5zKGNwdV9tYXApOwogfQogCisvKgorICogUGFydGl0aW9uIHNjaGVkIGRvbWFpbnMgYXMgc3BlY2lmaWVkIGJ5IHRoZSAnbmRvbXNfbmV3JworICogY3B1bWFza3MgaW4gdGhlIGFycmF5IGRvbXNfbmV3W10gb2YgY3B1bWFza3MuICBUaGlzIGNvbXBhcmVzCisgKiBkb21zX25ld1tdIHRvIHRoZSBjdXJyZW50IHNjaGVkIGRvbWFpbiBwYXJ0aXRpb25pbmcsIGRvbXNfY3VyW10uCisgKiBJdCBkZXN0cm95cyBlYWNoIGRlbGV0ZWQgZG9tYWluIGFuZCBidWlsZHMgZWFjaCBuZXcgZG9tYWluLgorICoKKyAqICdkb21zX25ldycgaXMgYW4gYXJyYXkgb2YgY3B1bWFza190J3Mgb2YgbGVuZ3RoICduZG9tc19uZXcnLgorICogVGhlIG1hc2tzIGRvbid0IGludGVyc2VjdCAoZG9uJ3Qgb3ZlcmxhcC4pICBXZSBzaG91bGQgc2V0dXAgb25lCisgKiBzY2hlZCBkb21haW4gZm9yIGVhY2ggbWFzay4gIENQVXMgbm90IGluIGFueSBvZiB0aGUgY3B1bWFza3Mgd2lsbAorICogbm90IGJlIGxvYWQgYmFsYW5jZWQuICBJZiB0aGUgc2FtZSBjcHVtYXNrIGFwcGVhcnMgYm90aCBpbiB0aGUKKyAqIGN1cnJlbnQgJ2RvbXNfY3VyJyBkb21haW5zIGFuZCBpbiB0aGUgbmV3ICdkb21zX25ldycsIHdlIGNhbiBsZWF2ZQorICogaXQgYXMgaXQgaXMuCisgKgorICogVGhlIHBhc3NlZCBpbiAnZG9tc19uZXcnIHNob3VsZCBiZSBrbWFsbG9jJ2QuICBUaGlzIHJvdXRpbmUgdGFrZXMKKyAqIG93bmVyc2hpcCBvZiBpdCBhbmQgd2lsbCBrZnJlZSBpdCB3aGVuIGRvbmUgd2l0aCBpdC4gIElmIHRoZSBjYWxsZXIKKyAqIGZhaWxlZCB0aGUga21hbGxvYyBjYWxsLCB0aGVuIGl0IGNhbiBwYXNzIGluIGRvbXNfbmV3ID09IE5VTEwsCisgKiBhbmQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoKSB3aWxsIGZhbGxiYWNrIHRvIHRoZSBzaW5nbGUgcGFydGl0aW9uCisgKiAnZmFsbGJhY2tfZG9tcycuCisgKgorICogQ2FsbCB3aXRoIGhvdHBsdWcgbG9jayBoZWxkCisgKi8KK3ZvaWQgcGFydGl0aW9uX3NjaGVkX2RvbWFpbnMoaW50IG5kb21zX25ldywgY3B1bWFza190ICpkb21zX25ldykKK3sKKwlpbnQgaSwgajsKKworCWlmIChkb21zX25ldyA9PSBOVUxMKSB7CisJCW5kb21zX25ldyA9IDE7CisJCWRvbXNfbmV3ID0gJmZhbGxiYWNrX2RvbXM7CisJCWNwdXNfYW5kbm90KGRvbXNfbmV3WzBdLCBjcHVfb25saW5lX21hcCwgY3B1X2lzb2xhdGVkX21hcCk7CisJfQorCisJLyogRGVzdHJveSBkZWxldGVkIGRvbWFpbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRvbXNfY3VyOyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IG5kb21zX25ldzsgaisrKSB7CisJCQlpZiAoY3B1c19lcXVhbChkb21zX2N1cltpXSwgZG9tc19uZXdbal0pKQorCQkJCWdvdG8gbWF0Y2gxOworCQl9CisJCS8qIG5vIG1hdGNoIC0gYSBjdXJyZW50IHNjaGVkIGRvbWFpbiBub3QgaW4gbmV3IGRvbXNfbmV3W10gKi8KKwkJZGV0YWNoX2Rlc3Ryb3lfZG9tYWlucyhkb21zX2N1ciArIGkpOworbWF0Y2gxOgorCQk7CisJfQorCisJLyogQnVpbGQgbmV3IGRvbWFpbnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmRvbXNfbmV3OyBpKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IG5kb21zX2N1cjsgaisrKSB7CisJCQlpZiAoY3B1c19lcXVhbChkb21zX25ld1tpXSwgZG9tc19jdXJbal0pKQorCQkJCWdvdG8gbWF0Y2gyOworCQl9CisJCS8qIG5vIG1hdGNoIC0gYWRkIGEgbmV3IGRvbXNfbmV3ICovCisJCWJ1aWxkX3NjaGVkX2RvbWFpbnMoZG9tc19uZXcgKyBpKTsKK21hdGNoMjoKKwkJOworCX0KKworCS8qIFJlbWVtYmVyIHRoZSBuZXcgc2NoZWQgZG9tYWlucyAqLworCWlmIChkb21zX2N1ciAhPSAmZmFsbGJhY2tfZG9tcykKKwkJa2ZyZWUoZG9tc19jdXIpOworCWRvbXNfY3VyID0gZG9tc19uZXc7CisJbmRvbXNfY3VyID0gbmRvbXNfbmV3OworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKIHN0YXRpYyBpbnQgYXJjaF9yZWluaXRfc2NoZWRfZG9tYWlucyh2b2lkKQogewpAQCAtNjk2MywzICs3MDk4LDExNiBAQAogfQogCiAjZW5kaWYJLyogQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQgKi8KKworI2lmZGVmIENPTkZJR19GQUlSX0NHUk9VUF9TQ0hFRAorCisvKiByZXR1cm4gY29ycmVzcG9uZGluZyB0YXNrX2dyb3VwIG9iamVjdCBvZiBhIGNncm91cCAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGFza19ncm91cCAqY2dyb3VwX3RnKHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjZ3JvdXBfc3Vic3lzX3N0YXRlKGNvbnQsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkKSwKKwkJCQkJIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOworfQorCitzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKgorY3B1X2Nncm91cF9jcmVhdGUoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjb250KQoreworCXN0cnVjdCB0YXNrX2dyb3VwICp0ZzsKKworCWlmICghY29udC0+cGFyZW50KSB7CisJCS8qIFRoaXMgaXMgZWFybHkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSB0b3AgY2dyb3VwICovCisJCWluaXRfdGFza19ncm91cC5jc3MuY2dyb3VwID0gY29udDsKKwkJcmV0dXJuICZpbml0X3Rhc2tfZ3JvdXAuY3NzOworCX0KKworCS8qIHdlIHN1cHBvcnQgb25seSAxLWxldmVsIGRlZXAgaGllcmFyY2hpY2FsIHNjaGVkdWxlciBhdG0gKi8KKwlpZiAoY29udC0+cGFyZW50LT5wYXJlbnQpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJdGcgPSBzY2hlZF9jcmVhdGVfZ3JvdXAoKTsKKwlpZiAoSVNfRVJSKHRnKSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwkvKiBCaW5kIHRoZSBjZ3JvdXAgdG8gdGFza19ncm91cCBvYmplY3Qgd2UganVzdCBjcmVhdGVkICovCisJdGctPmNzcy5jZ3JvdXAgPSBjb250OworCisJcmV0dXJuICZ0Zy0+Y3NzOworfQorCitzdGF0aWMgdm9pZCBjcHVfY2dyb3VwX2Rlc3Ryb3koc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJCQlzdHJ1Y3QgY2dyb3VwICpjb250KQoreworCXN0cnVjdCB0YXNrX2dyb3VwICp0ZyA9IGNncm91cF90Zyhjb250KTsKKworCXNjaGVkX2Rlc3Ryb3lfZ3JvdXAodGcpOworfQorCitzdGF0aWMgaW50IGNwdV9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkgICAgIHN0cnVjdCBjZ3JvdXAgKmNvbnQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCS8qIFdlIGRvbid0IHN1cHBvcnQgUlQtdGFza3MgYmVpbmcgaW4gc2VwYXJhdGUgZ3JvdXBzICovCisJaWYgKHRzay0+c2NoZWRfY2xhc3MgIT0gJmZhaXJfc2NoZWRfY2xhc3MpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitjcHVfY2dyb3VwX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQsCisJCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY29udCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJc2NoZWRfbW92ZV90YXNrKHRzayk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNwdV9zaGFyZXNfd3JpdGUoc3RydWN0IGNncm91cCAqY29udCwgc3RydWN0IGNmdHlwZSAqY2Z0eXBlLAorCQkJCXN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKKwkJCQlzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCit7CisJdW5zaWduZWQgbG9uZyBzaGFyZXZhbDsKKwlzdHJ1Y3QgdGFza19ncm91cCAqdGcgPSBjZ3JvdXBfdGcoY29udCk7CisJY2hhciBidWZmZXJbMipzaXplb2YodW5zaWduZWQgbG9uZykgKyAxXTsKKwlpbnQgcmM7CisKKwlpZiAobmJ5dGVzID4gMipzaXplb2YodW5zaWduZWQgbG9uZykpCS8qIHNhZmV0eSBjaGVjayAqLworCQlyZXR1cm4gLUUyQklHOworCisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNlcmJ1ZiwgbmJ5dGVzKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlidWZmZXJbbmJ5dGVzXSA9IDA7CS8qIG51bC10ZXJtaW5hdGUgKi8KKwlzaGFyZXZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlciwgTlVMTCwgMTApOworCisJcmMgPSBzY2hlZF9ncm91cF9zZXRfc2hhcmVzKHRnLCBzaGFyZXZhbCk7CisKKwlyZXR1cm4gKHJjIDwgMCA/IHJjIDogbmJ5dGVzKTsKK30KKworc3RhdGljIHU2NCBjcHVfc2hhcmVzX3JlYWRfdWludChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJc3RydWN0IHRhc2tfZ3JvdXAgKnRnID0gY2dyb3VwX3RnKGNvbnQpOworCisJcmV0dXJuICh1NjQpIHRnLT5zaGFyZXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNwdV9zaGFyZXMgPSB7CisJLm5hbWUgPSAic2hhcmVzIiwKKwkucmVhZF91aW50ID0gY3B1X3NoYXJlc19yZWFkX3VpbnQsCisJLndyaXRlID0gY3B1X3NoYXJlc193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgY3B1X2Nncm91cF9wb3B1bGF0ZShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNvbnQpCit7CisJcmV0dXJuIGNncm91cF9hZGRfZmlsZShjb250LCBzcywgJmNwdV9zaGFyZXMpOworfQorCitzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBjcHVfY2dyb3VwX3N1YnN5cyA9IHsKKwkubmFtZSAJICAgIAk9ICJjcHUiLAorCS5jcmVhdGUJICAgIAk9IGNwdV9jZ3JvdXBfY3JlYXRlLAorCS5kZXN0cm95ICAgIAk9IGNwdV9jZ3JvdXBfZGVzdHJveSwKKwkuY2FuX2F0dGFjaCAJPSBjcHVfY2dyb3VwX2Nhbl9hdHRhY2gsCisJLmF0dGFjaCAgICAgCT0gY3B1X2Nncm91cF9hdHRhY2gsCisJLnBvcHVsYXRlICAgCT0gY3B1X2Nncm91cF9wb3B1bGF0ZSwKKwkuc3Vic3lzX2lkICAJPSBjcHVfY2dyb3VwX3N1YnN5c19pZCwKKwkuZWFybHlfaW5pdAk9IDEsCit9OworCisjZW5kaWYJLyogQ09ORklHX0ZBSVJfQ0dST1VQX1NDSEVEICovCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfZGVidWcuYyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCmluZGV4IGE1ZTUxN2UuLmU2ZmIzOTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCisrKyBiL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlTRVFfcHJpbnRmKG0sICIgIC4lLTMwczogJWxkXG4iLCAibnJfcnVubmluZyIsIGNmc19ycS0+bnJfcnVubmluZyk7CiAJU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVsZFxuIiwgImxvYWQiLCBjZnNfcnEtPmxvYWQud2VpZ2h0KTsKICNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbGRcbiIsICJia2xfY291bnQiLAorCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlZFxuIiwgImJrbF9jb3VudCIsCiAJCQlycS0+YmtsX2NvdW50KTsKICNlbmRpZgogCVNFUV9wcmludGYobSwgIiAgLiUtMzBzOiAlbGRcbiIsICJucl9zcHJlYWRfb3ZlciIsCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfc3RhdHMuaCBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCmluZGV4IDFjMDg0ODQuLmVmMWE3ZGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9zdGF0cy5oCisrKyBiL2tlcm5lbC9zY2hlZF9zdGF0cy5oCkBAIC0yMSw3ICsyMSw3IEBACiAKIAkJLyogcnVucXVldWUtc3BlY2lmaWMgc3RhdHMgKi8KIAkJc2VxX3ByaW50ZihzZXEsCi0JCSAgICAiY3B1JWQgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWxsdSAlbGx1ICVsdSIsCisJCSAgICAiY3B1JWQgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJWxsdSAlbGx1ICVsdSIsCiAJCSAgICBjcHUsIHJxLT55bGRfYm90aF9lbXB0eSwKIAkJICAgIHJxLT55bGRfYWN0X2VtcHR5LCBycS0+eWxkX2V4cF9lbXB0eSwgcnEtPnlsZF9jb3VudCwKIAkJICAgIHJxLT5zY2hlZF9zd2l0Y2gsIHJxLT5zY2hlZF9jb3VudCwgcnEtPnNjaGVkX2dvaWRsZSwKQEAgLTQyLDggKzQyLDcgQEAKIAkJCXNlcV9wcmludGYoc2VxLCAiZG9tYWluJWQgJXMiLCBkY291bnQrKywgbWFza19zdHIpOwogCQkJZm9yIChpdHlwZSA9IENQVV9JRExFOyBpdHlwZSA8IENQVV9NQVhfSURMRV9UWVBFUzsKIAkJCQkJaXR5cGUrKykgewotCQkJCXNlcV9wcmludGYoc2VxLCAiICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAiCi0JCQkJCQkiJWx1IiwKKwkJCQlzZXFfcHJpbnRmKHNlcSwgIiAldSAldSAldSAldSAldSAldSAldSAldSIsCiAJCQkJICAgIHNkLT5sYl9jb3VudFtpdHlwZV0sCiAJCQkJICAgIHNkLT5sYl9iYWxhbmNlZFtpdHlwZV0sCiAJCQkJICAgIHNkLT5sYl9mYWlsZWRbaXR5cGVdLApAQCAtNTMsOCArNTIsNyBAQAogCQkJCSAgICBzZC0+bGJfbm9idXN5cVtpdHlwZV0sCiAJCQkJICAgIHNkLT5sYl9ub2J1c3lnW2l0eXBlXSk7CiAJCQl9Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIKLQkJCSAgICAiICVsdSAlbHUgJWx1XG4iLAorCQkJc2VxX3ByaW50ZihzZXEsICIgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXVcbiIsCiAJCQkgICAgc2QtPmFsYl9jb3VudCwgc2QtPmFsYl9mYWlsZWQsIHNkLT5hbGJfcHVzaGVkLAogCQkJICAgIHNkLT5zYmVfY291bnQsIHNkLT5zYmVfYmFsYW5jZWQsIHNkLT5zYmVfcHVzaGVkLAogCQkJICAgIHNkLT5zYmZfY291bnQsIHNkLT5zYmZfYmFsYW5jZWQsIHNkLT5zYmZfcHVzaGVkLApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDIxMjRmZmEuLjEyMDA2MzAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTk5LDcgKzk5LDYgQEAKIHN0YXRpYyBpbnQgcmVjYWxjX3NpZ3BlbmRpbmdfdHNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdCkKIHsKIAlpZiAodC0+c2lnbmFsLT5ncm91cF9zdG9wX2NvdW50ID4gMCB8fAotCSAgICAoZnJlZXppbmcodCkpIHx8CiAJICAgIFBFTkRJTkcoJnQtPnBlbmRpbmcsICZ0LT5ibG9ja2VkKSB8fAogCSAgICBQRU5ESU5HKCZ0LT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLCAmdC0+YmxvY2tlZCkpIHsKIAkJc2V0X3Rza190aHJlYWRfZmxhZyh0LCBUSUZfU0lHUEVORElORyk7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAogaW50IHVuaGFuZGxlZF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzaWcpCiB7Ci0JaWYgKGlzX2luaXQodHNrKSkKKwlpZiAoaXNfZ2xvYmFsX2luaXQodHNrKSkKIAkJcmV0dXJuIDE7CiAJaWYgKHRzay0+cHRyYWNlICYgUFRfUFRSQUNFRCkKIAkJcmV0dXJuIDA7CkBAIC01MzcsNyArNTM2LDcgQEAKIAkJCXJldHVybiBlcnJvcjsKIAkJZXJyb3IgPSAtRVBFUk07CiAJCWlmICgoKHNpZyAhPSBTSUdDT05UKSB8fAotCQkJKHByb2Nlc3Nfc2Vzc2lvbihjdXJyZW50KSAhPSBwcm9jZXNzX3Nlc3Npb24odCkpKQorCQkJKHRhc2tfc2Vzc2lvbl9ucihjdXJyZW50KSAhPSB0YXNrX3Nlc3Npb25fbnIodCkpKQogCQkgICAgJiYgKGN1cnJlbnQtPmV1aWQgXiB0LT5zdWlkKSAmJiAoY3VycmVudC0+ZXVpZCBeIHQtPnVpZCkKIAkJICAgICYmIChjdXJyZW50LT51aWQgXiB0LT5zdWlkKSAmJiAoY3VycmVudC0+dWlkIF4gdC0+dWlkKQogCQkgICAgJiYgIWNhcGFibGUoQ0FQX0tJTEwpKQpAQCAtNjk1LDcgKzY5NCw3IEBACiAJCQlxLT5pbmZvLnNpX3NpZ25vID0gc2lnOwogCQkJcS0+aW5mby5zaV9lcnJubyA9IDA7CiAJCQlxLT5pbmZvLnNpX2NvZGUgPSBTSV9VU0VSOwotCQkJcS0+aW5mby5zaV9waWQgPSBjdXJyZW50LT5waWQ7CisJCQlxLT5pbmZvLnNpX3BpZCA9IHRhc2tfcGlkX3ZucihjdXJyZW50KTsKIAkJCXEtPmluZm8uc2lfdWlkID0gY3VycmVudC0+dWlkOwogCQkJYnJlYWs7CiAJCWNhc2UgKHVuc2lnbmVkIGxvbmcpIFNFTkRfU0lHX1BSSVY6CkBAIC03MzEsNyArNzMwLDcgQEAKIHN0YXRpYyB2b2lkIHByaW50X2ZhdGFsX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHNpZ25yKQogewogCXByaW50aygiJXMvJWQ6IHBvdGVudGlhbGx5IHVuZXhwZWN0ZWQgZmF0YWwgc2lnbmFsICVkLlxuIiwKLQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBzaWducik7CisJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCBzaWducik7CiAKICNpZmRlZiBfX2kzODZfXwogCXByaW50aygiY29kZSBhdCAlMDhseDogIiwgcmVncy0+ZWlwKTsKQEAgLTEwOTAsNyArMTA4OSw3IEBACiB7CiAJaW50IGVycm9yOwogCXJjdV9yZWFkX2xvY2soKTsKLQllcnJvciA9IGtpbGxfcGlkX2luZm8oc2lnLCBpbmZvLCBmaW5kX3BpZChwaWQpKTsKKwllcnJvciA9IGtpbGxfcGlkX2luZm8oc2lnLCBpbmZvLCBmaW5kX3ZwaWQocGlkKSk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTE1MSw3ICsxMTUwLDcgQEAKIAogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCQlmb3JfZWFjaF9wcm9jZXNzKHApIHsKLQkJCWlmIChwLT5waWQgPiAxICYmIHAtPnRnaWQgIT0gY3VycmVudC0+dGdpZCkgeworCQkJaWYgKHAtPnBpZCA+IDEgJiYgIXNhbWVfdGhyZWFkX2dyb3VwKHAsIGN1cnJlbnQpKSB7CiAJCQkJaW50IGVyciA9IGdyb3VwX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCBwKTsKIAkJCQkrK2NvdW50OwogCQkJCWlmIChlcnIgIT0gLUVQRVJNKQpAQCAtMTE2MSw5ICsxMTYwLDkgQEAKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlyZXQgPSBjb3VudCA/IHJldHZhbCA6IC1FU1JDSDsKIAl9IGVsc2UgaWYgKHBpZCA8IDApIHsKLQkJcmV0ID0ga2lsbF9wZ3JwX2luZm8oc2lnLCBpbmZvLCBmaW5kX3BpZCgtcGlkKSk7CisJCXJldCA9IGtpbGxfcGdycF9pbmZvKHNpZywgaW5mbywgZmluZF92cGlkKC1waWQpKTsKIAl9IGVsc2UgewotCQlyZXQgPSBraWxsX3BpZF9pbmZvKHNpZywgaW5mbywgZmluZF9waWQocGlkKSk7CisJCXJldCA9IGtpbGxfcGlkX2luZm8oc2lnLCBpbmZvLCBmaW5kX3ZwaWQocGlkKSk7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByZXQ7CkBAIC0xMjY3LDcgKzEyNjYsMTIgQEAKIGludAoga2lsbF9wcm9jKHBpZF90IHBpZCwgaW50IHNpZywgaW50IHByaXYpCiB7Ci0JcmV0dXJuIGtpbGxfcHJvY19pbmZvKHNpZywgX19zaV9zcGVjaWFsKHByaXYpLCBwaWQpOworCWludCByZXQ7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0ID0ga2lsbF9waWRfaW5mbyhzaWcsIF9fc2lfc3BlY2lhbChwcml2KSwgZmluZF9waWQocGlkKSk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTE0NDQsNyArMTQ0OCwyMiBAQAogCiAJaW5mby5zaV9zaWdubyA9IHNpZzsKIAlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX3BpZCA9IHRzay0+cGlkOworCS8qCisJICogd2UgYXJlIHVuZGVyIHRhc2tsaXN0X2xvY2sgaGVyZSBzbyBvdXIgcGFyZW50IGlzIHRpZWQgdG8KKwkgKiB1cyBhbmQgY2Fubm90IGV4aXQgYW5kIHJlbGVhc2UgaXRzIG5hbWVzcGFjZS4KKwkgKgorCSAqIHRoZSBvbmx5IGl0IGNhbiBpcyB0byBzd2l0Y2ggaXRzIG5zcHJveHkgd2l0aCBzeXNfdW5zaGFyZSwKKwkgKiBidSB1bmNoYXJpbmcgcGlkIG5hbWVzcGFjZXMgaXMgbm90IGFsbG93ZWQsIHNvIHdlJ2xsIGFsd2F5cworCSAqIHNlZSByZWxldmFudCBuYW1lc3BhY2UKKwkgKgorCSAqIHdyaXRlX2xvY2soKSBjdXJyZW50bHkgY2FsbHMgcHJlZW1wdF9kaXNhYmxlKCkgd2hpY2ggaXMgdGhlCisJICogc2FtZSBhcyByY3VfcmVhZF9sb2NrKCksIGJ1dCBhY2NvcmRpbmcgdG8gT2xlZywgdGhpcyBpcyBub3QKKwkgKiBjb3JyZWN0IHRvIHJlbHkgb24gdGhpcworCSAqLworCXJjdV9yZWFkX2xvY2soKTsKKwlpbmZvLnNpX3BpZCA9IHRhc2tfcGlkX25yX25zKHRzaywgdHNrLT5wYXJlbnQtPm5zcHJveHktPnBpZF9ucyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CisKIAlpbmZvLnNpX3VpZCA9IHRzay0+dWlkOwogCiAJLyogRklYTUU6IGZpbmQgb3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgc3VwcG9zZWQgdG8gYmUgYyp0aW1lLiAqLwpAQCAtMTUwOSw3ICsxNTI4LDEzIEBACiAKIAlpbmZvLnNpX3NpZ25vID0gU0lHQ0hMRDsKIAlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX3BpZCA9IHRzay0+cGlkOworCS8qCisJICogc2VlIGNvbW1lbnQgaW4gZG9fbm90aWZ5X3BhcmVudCgpIGFib3QgdGhlIGZvbGxvd2luZyAzIGxpbmVzCisJICovCisJcmN1X3JlYWRfbG9jaygpOworCWluZm8uc2lfcGlkID0gdGFza19waWRfbnJfbnModHNrLCB0c2stPnBhcmVudC0+bnNwcm94eS0+cGlkX25zKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKKwogCWluZm8uc2lfdWlkID0gdHNrLT51aWQ7CiAKIAkvKiBGSVhNRTogZmluZCBvdXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBzdXBwb3NlZCB0byBiZSBjKnRpbWUuICovCkBAIC0xNjM1LDcgKzE2NjAsNyBAQAogCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mIGluZm8pOwogCWluZm8uc2lfc2lnbm8gPSBTSUdUUkFQOwogCWluZm8uc2lfY29kZSA9IGV4aXRfY29kZTsKLQlpbmZvLnNpX3BpZCA9IGN1cnJlbnQtPnBpZDsKKwlpbmZvLnNpX3BpZCA9IHRhc2tfcGlkX3ZucihjdXJyZW50KTsKIAlpbmZvLnNpX3VpZCA9IGN1cnJlbnQtPnVpZDsKIAogCS8qIExldCB0aGUgZGVidWdnZXIgcnVuLiAgKi8KQEAgLTE4MDUsNyArMTgzMCw3IEBACiAJCQkJaW5mby0+c2lfc2lnbm8gPSBzaWducjsKIAkJCQlpbmZvLT5zaV9lcnJubyA9IDA7CiAJCQkJaW5mby0+c2lfY29kZSA9IFNJX1VTRVI7Ci0JCQkJaW5mby0+c2lfcGlkID0gY3VycmVudC0+cGFyZW50LT5waWQ7CisJCQkJaW5mby0+c2lfcGlkID0gdGFza19waWRfdm5yKGN1cnJlbnQtPnBhcmVudCk7CiAJCQkJaW5mby0+c2lfdWlkID0gY3VycmVudC0+cGFyZW50LT51aWQ7CiAJCQl9CiAKQEAgLTE4MzYsMTEgKzE4NjEsOSBAQAogCQkJY29udGludWU7CiAKIAkJLyoKLQkJICogSW5pdCBvZiBhIHBpZCBzcGFjZSBnZXRzIG5vIHNpZ25hbHMgaXQgZG9lc24ndCB3YW50IGZyb20KLQkJICogd2l0aGluIHRoYXQgcGlkIHNwYWNlLiBJdCBjYW4gb2YgY291cnNlIGdldCBzaWduYWxzIGZyb20KLQkJICogaXRzIHBhcmVudCBwaWQgc3BhY2UuCisJCSAqIEdsb2JhbCBpbml0IGdldHMgbm8gc2lnbmFscyBpdCBkb2Vzbid0IHdhbnQuCiAJCSAqLwotCQlpZiAoY3VycmVudCA9PSBjaGlsZF9yZWFwZXIoY3VycmVudCkpCisJCWlmIChpc19nbG9iYWxfaW5pdChjdXJyZW50KSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzaWdfa2VybmVsX3N0b3Aoc2lnbnIpKSB7CkBAIC0yMTk0LDcgKzIyMTcsNyBAQAogCWluZm8uc2lfc2lnbm8gPSBzaWc7CiAJaW5mby5zaV9lcnJubyA9IDA7CiAJaW5mby5zaV9jb2RlID0gU0lfVVNFUjsKLQlpbmZvLnNpX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CisJaW5mby5zaV9waWQgPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpOwogCWluZm8uc2lfdWlkID0gY3VycmVudC0+dWlkOwogCiAJcmV0dXJuIGtpbGxfc29tZXRoaW5nX2luZm8oc2lnLCAmaW5mbywgcGlkKTsKQEAgLTIyMTAsMTIgKzIyMzMsMTIgQEAKIAlpbmZvLnNpX3NpZ25vID0gc2lnOwogCWluZm8uc2lfZXJybm8gPSAwOwogCWluZm8uc2lfY29kZSA9IFNJX1RLSUxMOwotCWluZm8uc2lfcGlkID0gY3VycmVudC0+dGdpZDsKKwlpbmZvLnNpX3BpZCA9IHRhc2tfdGdpZF92bnIoY3VycmVudCk7CiAJaW5mby5zaV91aWQgPSBjdXJyZW50LT51aWQ7CiAKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7Ci0JaWYgKHAgJiYgKHRnaWQgPD0gMCB8fCBwLT50Z2lkID09IHRnaWQpKSB7CisJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CisJaWYgKHAgJiYgKHRnaWQgPD0gMCB8fCB0YXNrX3RnaWRfdm5yKHApID09IHRnaWQpKSB7CiAJCWVycm9yID0gY2hlY2tfa2lsbF9wZXJtaXNzaW9uKHNpZywgJmluZm8sIHApOwogCQkvKgogCQkgKiBUaGUgbnVsbCBzaWduYWwgaXMgYSBwZXJtaXNzaW9ucyBhbmQgcHJvY2VzcyBleGlzdGVuY2UKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IGVkZWVlZjMuLjExZGY4MTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIGIva2VybmVsL3NvZnRsb2NrdXAuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJc3Bpbl9sb2NrKCZwcmludF9sb2NrKTsKIAlwcmludGsoS0VSTl9FUlIgIkJVRzogc29mdCBsb2NrdXAgLSBDUFUjJWQgc3R1Y2sgZm9yICVsdXMhIFslczolZF1cbiIsCiAJCQl0aGlzX2NwdSwgbm93IC0gdG91Y2hfdGltZXN0YW1wLAotCQkJCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJaWYgKHJlZ3MpCiAJCXNob3dfcmVncyhyZWdzKTsKIAllbHNlCmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmMKaW5kZXggOGFlMmU2My4uMzA0YjU0MSAxMDA2NDQKLS0tIGEva2VybmVsL3N5cy5jCisrKyBiL2tlcm5lbC9zeXMuYwpAQCAtMTA1LDUzOCArMTA1LDYgQEAKICAqLwogCiB2b2lkICgqcG1fcG93ZXJfb2ZmX3ByZXBhcmUpKHZvaWQpOwotRVhQT1JUX1NZTUJPTChwbV9wb3dlcl9vZmZfcHJlcGFyZSk7Ci0KLS8qCi0gKglOb3RpZmllciBsaXN0IGZvciBrZXJuZWwgY29kZSB3aGljaCB3YW50cyB0byBiZSBjYWxsZWQKLSAqCWF0IHNodXRkb3duLiBUaGlzIGlzIHVzZWQgdG8gc3RvcCBhbnkgaWRsaW5nIERNQSBvcGVyYXRpb25zCi0gKglhbmQgdGhlIGxpa2UuIAotICovCi0KLXN0YXRpYyBCTE9DS0lOR19OT1RJRklFUl9IRUFEKHJlYm9vdF9ub3RpZmllcl9saXN0KTsKLQotLyoKLSAqCU5vdGlmaWVyIGNoYWluIGNvcmUgcm91dGluZXMuICBUaGUgZXhwb3J0ZWQgcm91dGluZXMgYmVsb3cKLSAqCWFyZSBsYXllcmVkIG9uIHRvcCBvZiB0aGVzZSwgd2l0aCBhcHByb3ByaWF0ZSBsb2NraW5nIGFkZGVkLgotICovCi0KLXN0YXRpYyBpbnQgbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbmwsCi0JCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKLXsKLQl3aGlsZSAoKCpubCkgIT0gTlVMTCkgewotCQlpZiAobi0+cHJpb3JpdHkgPiAoKm5sKS0+cHJpb3JpdHkpCi0JCQlicmVhazsKLQkJbmwgPSAmKCgqbmwpLT5uZXh0KTsKLQl9Ci0Jbi0+bmV4dCA9ICpubDsKLQlyY3VfYXNzaWduX3BvaW50ZXIoKm5sLCBuKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm5sLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCi17Ci0Jd2hpbGUgKCgqbmwpICE9IE5VTEwpIHsKLQkJaWYgKCgqbmwpID09IG4pIHsKLQkJCXJjdV9hc3NpZ25fcG9pbnRlcigqbmwsIG4tPm5leHQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJbmwgPSAmKCgqbmwpLT5uZXh0KTsKLQl9Ci0JcmV0dXJuIC1FTk9FTlQ7Ci19Ci0KLS8qKgotICogbm90aWZpZXJfY2FsbF9jaGFpbiAtIEluZm9ybXMgdGhlIHJlZ2lzdGVyZWQgbm90aWZpZXJzIGFib3V0IGFuIGV2ZW50LgotICoJQG5sOgkJUG9pbnRlciB0byBoZWFkIG9mIHRoZSBibG9ja2luZyBub3RpZmllciBjaGFpbgotICoJQHZhbDoJCVZhbHVlIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCi0gKglAdjoJCVBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KLSAqCUBucl90b19jYWxsOglOdW1iZXIgb2Ygbm90aWZpZXIgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZC4gRG9uJ3QgY2FyZQotICoJCSAgICAgCXZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGlzIC0xLgotICoJQG5yX2NhbGxzOglSZWNvcmRzIHRoZSBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyBzZW50LiBEb24ndCBjYXJlCi0gKgkJICAgCXZhbHVlIG9mIHRoaXMgZmllbGQgaXMgTlVMTC4KLSAqIAlAcmV0dXJuczoJbm90aWZpZXJfY2FsbF9jaGFpbiByZXR1cm5zIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUKLSAqCQkJbGFzdCBub3RpZmllciBmdW5jdGlvbiBjYWxsZWQuCi0gKi8KLQotc3RhdGljIGludCBfX2twcm9iZXMgbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKipubCwKLQkJCQkJdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsCi0JCQkJCWludCBucl90b19jYWxsLAlpbnQgKm5yX2NhbGxzKQotewotCWludCByZXQgPSBOT1RJRllfRE9ORTsKLQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCAqbmV4dF9uYjsKLQotCW5iID0gcmN1X2RlcmVmZXJlbmNlKCpubCk7Ci0KLQl3aGlsZSAobmIgJiYgbnJfdG9fY2FsbCkgewotCQluZXh0X25iID0gcmN1X2RlcmVmZXJlbmNlKG5iLT5uZXh0KTsKLQkJcmV0ID0gbmItPm5vdGlmaWVyX2NhbGwobmIsIHZhbCwgdik7Ci0KLQkJaWYgKG5yX2NhbGxzKQotCQkJKCpucl9jYWxscykrKzsKLQotCQlpZiAoKHJldCAmIE5PVElGWV9TVE9QX01BU0spID09IE5PVElGWV9TVE9QX01BU0spCi0JCQlicmVhazsKLQkJbmIgPSBuZXh0X25iOwotCQlucl90b19jYWxsLS07Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKglBdG9taWMgbm90aWZpZXIgY2hhaW4gcm91dGluZXMuICBSZWdpc3RyYXRpb24gYW5kIHVucmVnaXN0cmF0aW9uCi0gKgl1c2UgYSBzcGlubG9jaywgYW5kIGNhbGxfY2hhaW4gaXMgc3luY2hyb25pemVkIGJ5IFJDVSAobm8gbG9ja3MpLgotICovCi0KLS8qKgotICoJYXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyIC0gQWRkIG5vdGlmaWVyIHRvIGFuIGF0b21pYyBub3RpZmllciBjaGFpbgotICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGF0b21pYyBub3RpZmllciBjaGFpbgotICoJQG46IE5ldyBlbnRyeSBpbiBub3RpZmllciBjaGFpbgotICoKLSAqCUFkZHMgYSBub3RpZmllciB0byBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW4uCi0gKgotICoJQ3VycmVudGx5IGFsd2F5cyByZXR1cm5zIHplcm8uCi0gKi8KLQotaW50IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKm5oLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm5oLT5sb2NrLCBmbGFncyk7Ci0JcmV0ID0gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuaC0+bG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcik7Ci0KLS8qKgotICoJYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIgLSBSZW1vdmUgbm90aWZpZXIgZnJvbSBhbiBhdG9taWMgbm90aWZpZXIgY2hhaW4KLSAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBhdG9taWMgbm90aWZpZXIgY2hhaW4KLSAqCUBuOiBFbnRyeSB0byByZW1vdmUgZnJvbSBub3RpZmllciBjaGFpbgotICoKLSAqCVJlbW92ZXMgYSBub3RpZmllciBmcm9tIGFuIGF0b21pYyBub3RpZmllciBjaGFpbi4KLSAqCi0gKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciAlLUVOT0VOVCBvbiBmYWlsdXJlLgotICovCi1pbnQgYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkICpuaCwKLQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZuaC0+bG9jaywgZmxhZ3MpOwotCXJldCA9IG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuaC0+bG9jaywgZmxhZ3MpOwotCXN5bmNocm9uaXplX3JjdSgpOwotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKLQotLyoqCi0gKglfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYW4gYXRvbWljIG5vdGlmaWVyIGNoYWluCi0gKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgYXRvbWljIG5vdGlmaWVyIGNoYWluCi0gKglAdmFsOiBWYWx1ZSBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgotICoJQHY6IFBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KLSAqCUBucl90b19jYWxsOiBTZWUgdGhlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCi0gKglAbnJfY2FsbHM6IFNlZSB0aGUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbi4KLSAqCi0gKglDYWxscyBlYWNoIGZ1bmN0aW9uIGluIGEgbm90aWZpZXIgY2hhaW4gaW4gdHVybi4gIFRoZSBmdW5jdGlvbnMKLSAqCXJ1biBpbiBhbiBhdG9taWMgY29udGV4dCwgc28gdGhleSBtdXN0IG5vdCBibG9jay4KLSAqCVRoaXMgcm91dGluZSB1c2VzIFJDVSB0byBzeW5jaHJvbml6ZSB3aXRoIGNoYW5nZXMgdG8gdGhlIGNoYWluLgotICoKLSAqCUlmIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG5vdGlmaWVyIGNhbiBiZSBhbmQnZWQKLSAqCXdpdGggJU5PVElGWV9TVE9QX01BU0sgdGhlbiBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigpCi0gKgl3aWxsIHJldHVybiBpbW1lZGlhdGVseSwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mCi0gKgl0aGUgbm90aWZpZXIgZnVuY3Rpb24gd2hpY2ggaGFsdGVkIGV4ZWN1dGlvbi4KLSAqCU90aGVyd2lzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXR1cm4gdmFsdWUKLSAqCW9mIHRoZSBsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KLSAqLwotIAotaW50IF9fa3Byb2JlcyBfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCAqbmgsCi0JCQkJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2LAotCQkJCQlpbnQgbnJfdG9fY2FsbCwgaW50ICpucl9jYWxscykKLXsKLQlpbnQgcmV0OwotCi0JcmN1X3JlYWRfbG9jaygpOwotCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYsIG5yX3RvX2NhbGwsIG5yX2NhbGxzKTsKLQlyY3VfcmVhZF91bmxvY2soKTsKLQlyZXR1cm4gcmV0OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChfX2F0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKTsKLQotaW50IF9fa3Byb2JlcyBhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgKm5oLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKLXsKLQlyZXR1cm4gX19hdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbihuaCwgdmFsLCB2LCAtMSwgTlVMTCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKTsKLS8qCi0gKglCbG9ja2luZyBub3RpZmllciBjaGFpbiByb3V0aW5lcy4gIEFsbCBhY2Nlc3MgdG8gdGhlIGNoYWluIGlzCi0gKglzeW5jaHJvbml6ZWQgYnkgYW4gcndzZW0uCi0gKi8KLQotLyoqCi0gKglibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlciAtIEFkZCBub3RpZmllciB0byBhIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCi0gKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgYmxvY2tpbmcgbm90aWZpZXIgY2hhaW4KLSAqCUBuOiBOZXcgZW50cnkgaW4gbm90aWZpZXIgY2hhaW4KLSAqCi0gKglBZGRzIGEgbm90aWZpZXIgdG8gYSBibG9ja2luZyBub3RpZmllciBjaGFpbi4KLSAqCU11c3QgYmUgY2FsbGVkIGluIHByb2Nlc3MgY29udGV4dC4KLSAqCi0gKglDdXJyZW50bHkgYWx3YXlzIHJldHVybnMgemVyby4KLSAqLwotIAotaW50IGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICpuaCwKLQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQotewotCWludCByZXQ7Ci0KLQkvKgotCSAqIFRoaXMgY29kZSBnZXRzIHVzZWQgZHVyaW5nIGJvb3QtdXAsIHdoZW4gdGFzayBzd2l0Y2hpbmcgaXMKLQkgKiBub3QgeWV0IHdvcmtpbmcgYW5kIGludGVycnVwdHMgbXVzdCByZW1haW4gZGlzYWJsZWQuICBBdAotCSAqIHN1Y2ggdGltZXMgd2UgbXVzdCBub3QgY2FsbCBkb3duX3dyaXRlKCkuCi0JICovCi0JaWYgKHVubGlrZWx5KHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykpCi0JCXJldHVybiBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmgtPmhlYWQsIG4pOwotCi0JZG93bl93cml0ZSgmbmgtPnJ3c2VtKTsKLQlyZXQgPSBub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmgtPmhlYWQsIG4pOwotCXVwX3dyaXRlKCZuaC0+cndzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKTsKLQotLyoqCi0gKglibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyIC0gUmVtb3ZlIG5vdGlmaWVyIGZyb20gYSBibG9ja2luZyBub3RpZmllciBjaGFpbgotICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluCi0gKglAbjogRW50cnkgdG8gcmVtb3ZlIGZyb20gbm90aWZpZXIgY2hhaW4KLSAqCi0gKglSZW1vdmVzIGEgbm90aWZpZXIgZnJvbSBhIGJsb2NraW5nIG5vdGlmaWVyIGNoYWluLgotICoJTXVzdCBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuCi0gKgotICoJUmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgJS1FTk9FTlQgb24gZmFpbHVyZS4KLSAqLwotaW50IGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgKm5oLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCi17Ci0JaW50IHJldDsKLQotCS8qCi0JICogVGhpcyBjb2RlIGdldHMgdXNlZCBkdXJpbmcgYm9vdC11cCwgd2hlbiB0YXNrIHN3aXRjaGluZyBpcwotCSAqIG5vdCB5ZXQgd29ya2luZyBhbmQgaW50ZXJydXB0cyBtdXN0IHJlbWFpbiBkaXNhYmxlZC4gIEF0Ci0JICogc3VjaCB0aW1lcyB3ZSBtdXN0IG5vdCBjYWxsIGRvd25fd3JpdGUoKS4KLQkgKi8KLQlpZiAodW5saWtlbHkoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSkKLQkJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLQotCWRvd25fd3JpdGUoJm5oLT5yd3NlbSk7Ci0JcmV0ID0gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmgtPmhlYWQsIG4pOwotCXVwX3dyaXRlKCZuaC0+cndzZW0pOwotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIpOwotCi0vKioKLSAqCV9fYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbiAtIENhbGwgZnVuY3Rpb25zIGluIGEgYmxvY2tpbmcgbm90aWZpZXIgY2hhaW4KLSAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBibG9ja2luZyBub3RpZmllciBjaGFpbgotICoJQHZhbDogVmFsdWUgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KLSAqCUB2OiBQb2ludGVyIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCi0gKglAbnJfdG9fY2FsbDogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4uCi0gKglAbnJfY2FsbHM6IFNlZSBjb21tZW50IGZvciBub3RpZmllcl9jYWxsX2NoYWluLgotICoKLSAqCUNhbGxzIGVhY2ggZnVuY3Rpb24gaW4gYSBub3RpZmllciBjaGFpbiBpbiB0dXJuLiAgVGhlIGZ1bmN0aW9ucwotICoJcnVuIGluIGEgcHJvY2VzcyBjb250ZXh0LCBzbyB0aGV5IGFyZSBhbGxvd2VkIHRvIGJsb2NrLgotICoKLSAqCUlmIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG5vdGlmaWVyIGNhbiBiZSBhbmQnZWQKLSAqCXdpdGggJU5PVElGWV9TVE9QX01BU0sgdGhlbiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCkKLSAqCXdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YKLSAqCXRoZSBub3RpZmllciBmdW5jdGlvbiB3aGljaCBoYWx0ZWQgZXhlY3V0aW9uLgotICoJT3RoZXJ3aXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZQotICoJb2YgdGhlIGxhc3Qgbm90aWZpZXIgZnVuY3Rpb24gY2FsbGVkLgotICovCi0gCi1pbnQgX19ibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkICpuaCwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwKLQkJCQkgICBpbnQgbnJfdG9fY2FsbCwgaW50ICpucl9jYWxscykKLXsKLQlpbnQgcmV0ID0gTk9USUZZX0RPTkU7Ci0KLQkvKgotCSAqIFdlIGNoZWNrIHRoZSBoZWFkIG91dHNpZGUgdGhlIGxvY2ssIGJ1dCBpZiB0aGlzIGFjY2VzcyBpcwotCSAqIHJhY3kgdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hhdCB0aGUgcmVzdWx0IG9mIHRoZSB0ZXN0Ci0JICogaXMsIHdlIHJlLWNoZWNrIHRoZSBsaXN0IGFmdGVyIGhhdmluZyB0YWtlbiB0aGUgbG9jayBhbnl3YXk6Ci0JICovCi0JaWYgKHJjdV9kZXJlZmVyZW5jZShuaC0+aGVhZCkpIHsKLQkJZG93bl9yZWFkKCZuaC0+cndzZW0pOwotCQlyZXQgPSBub3RpZmllcl9jYWxsX2NoYWluKCZuaC0+aGVhZCwgdmFsLCB2LCBucl90b19jYWxsLAotCQkJCQlucl9jYWxscyk7Ci0JCXVwX3JlYWQoJm5oLT5yd3NlbSk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4pOwotCi1pbnQgYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgYmxvY2tpbmdfbm90aWZpZXJfaGVhZCAqbmgsCi0JCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQotewotCXJldHVybiBfX2Jsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4obmgsIHZhbCwgdiwgLTEsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbik7Ci0KLS8qCi0gKglSYXcgbm90aWZpZXIgY2hhaW4gcm91dGluZXMuICBUaGVyZSBpcyBubyBwcm90ZWN0aW9uOwotICoJdGhlIGNhbGxlciBtdXN0IHByb3ZpZGUgaXQuICBVc2UgYXQgeW91ciBvd24gcmlzayEKLSAqLwotCi0vKioKLSAqCXJhd19ub3RpZmllcl9jaGFpbl9yZWdpc3RlciAtIEFkZCBub3RpZmllciB0byBhIHJhdyBub3RpZmllciBjaGFpbgotICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIHJhdyBub3RpZmllciBjaGFpbgotICoJQG46IE5ldyBlbnRyeSBpbiBub3RpZmllciBjaGFpbgotICoKLSAqCUFkZHMgYSBub3RpZmllciB0byBhIHJhdyBub3RpZmllciBjaGFpbi4KLSAqCUFsbCBsb2NraW5nIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KLSAqCi0gKglDdXJyZW50bHkgYWx3YXlzIHJldHVybnMgemVyby4KLSAqLwotCi1pbnQgcmF3X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCAqbmgsCi0JCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKLXsKLQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwocmF3X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKTsKLQotLyoqCi0gKglyYXdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlciAtIFJlbW92ZSBub3RpZmllciBmcm9tIGEgcmF3IG5vdGlmaWVyIGNoYWluCi0gKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgcmF3IG5vdGlmaWVyIGNoYWluCi0gKglAbjogRW50cnkgdG8gcmVtb3ZlIGZyb20gbm90aWZpZXIgY2hhaW4KLSAqCi0gKglSZW1vdmVzIGEgbm90aWZpZXIgZnJvbSBhIHJhdyBub3RpZmllciBjaGFpbi4KLSAqCUFsbCBsb2NraW5nIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KLSAqCi0gKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciAlLUVOT0VOVCBvbiBmYWlsdXJlLgotICovCi1pbnQgcmF3X25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoc3RydWN0IHJhd19ub3RpZmllcl9oZWFkICpuaCwKLQkJc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKQotewotCXJldHVybiBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuaC0+aGVhZCwgbik7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHJhd19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKLQotLyoqCi0gKglfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluIC0gQ2FsbCBmdW5jdGlvbnMgaW4gYSByYXcgbm90aWZpZXIgY2hhaW4KLSAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSByYXcgbm90aWZpZXIgY2hhaW4KLSAqCUB2YWw6IFZhbHVlIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCi0gKglAdjogUG9pbnRlciBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgotICoJQG5yX3RvX2NhbGw6IFNlZSBjb21tZW50IGZvciBub3RpZmllcl9jYWxsX2NoYWluLgotICoJQG5yX2NhbGxzOiBTZWUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbgotICoKLSAqCUNhbGxzIGVhY2ggZnVuY3Rpb24gaW4gYSBub3RpZmllciBjaGFpbiBpbiB0dXJuLiAgVGhlIGZ1bmN0aW9ucwotICoJcnVuIGluIGFuIHVuZGVmaW5lZCBjb250ZXh0LgotICoJQWxsIGxvY2tpbmcgbXVzdCBiZSBwcm92aWRlZCBieSB0aGUgY2FsbGVyLgotICoKLSAqCUlmIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG5vdGlmaWVyIGNhbiBiZSBhbmQnZWQKLSAqCXdpdGggJU5PVElGWV9TVE9QX01BU0sgdGhlbiByYXdfbm90aWZpZXJfY2FsbF9jaGFpbigpCi0gKgl3aWxsIHJldHVybiBpbW1lZGlhdGVseSwgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mCi0gKgl0aGUgbm90aWZpZXIgZnVuY3Rpb24gd2hpY2ggaGFsdGVkIGV4ZWN1dGlvbi4KLSAqCU90aGVyd2lzZSB0aGUgcmV0dXJuIHZhbHVlIGlzIHRoZSByZXR1cm4gdmFsdWUKLSAqCW9mIHRoZSBsYXN0IG5vdGlmaWVyIGZ1bmN0aW9uIGNhbGxlZC4KLSAqLwotCi1pbnQgX19yYXdfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3QgcmF3X25vdGlmaWVyX2hlYWQgKm5oLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYsCi0JCQkgICAgICBpbnQgbnJfdG9fY2FsbCwgaW50ICpucl9jYWxscykKLXsKLQlyZXR1cm4gbm90aWZpZXJfY2FsbF9jaGFpbigmbmgtPmhlYWQsIHZhbCwgdiwgbnJfdG9fY2FsbCwgbnJfY2FsbHMpOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKTsKLQotaW50IHJhd19ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCAqbmgsCi0JCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICp2KQotewotCXJldHVybiBfX3Jhd19ub3RpZmllcl9jYWxsX2NoYWluKG5oLCB2YWwsIHYsIC0xLCBOVUxMKTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwocmF3X25vdGlmaWVyX2NhbGxfY2hhaW4pOwotCi0vKgotICoJU1JDVSBub3RpZmllciBjaGFpbiByb3V0aW5lcy4gICAgUmVnaXN0cmF0aW9uIGFuZCB1bnJlZ2lzdHJhdGlvbgotICoJdXNlIGEgbXV0ZXgsIGFuZCBjYWxsX2NoYWluIGlzIHN5bmNocm9uaXplZCBieSBTUkNVIChubyBsb2NrcykuCi0gKi8KLQotLyoqCi0gKglzcmN1X25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyIC0gQWRkIG5vdGlmaWVyIHRvIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4KLSAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBTUkNVIG5vdGlmaWVyIGNoYWluCi0gKglAbjogTmV3IGVudHJ5IGluIG5vdGlmaWVyIGNoYWluCi0gKgotICoJQWRkcyBhIG5vdGlmaWVyIHRvIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4uCi0gKglNdXN0IGJlIGNhbGxlZCBpbiBwcm9jZXNzIGNvbnRleHQuCi0gKgotICoJQ3VycmVudGx5IGFsd2F5cyByZXR1cm5zIHplcm8uCi0gKi8KLQotaW50IHNyY3Vfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0IHNyY3Vfbm90aWZpZXJfaGVhZCAqbmgsCi0JCXN0cnVjdCBub3RpZmllcl9ibG9jayAqbikKLXsKLQlpbnQgcmV0OwotCi0JLyoKLQkgKiBUaGlzIGNvZGUgZ2V0cyB1c2VkIGR1cmluZyBib290LXVwLCB3aGVuIHRhc2sgc3dpdGNoaW5nIGlzCi0JICogbm90IHlldCB3b3JraW5nIGFuZCBpbnRlcnJ1cHRzIG11c3QgcmVtYWluIGRpc2FibGVkLiAgQXQKLQkgKiBzdWNoIHRpbWVzIHdlIG11c3Qgbm90IGNhbGwgbXV0ZXhfbG9jaygpLgotCSAqLwotCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpKQotCQlyZXR1cm4gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLQotCW11dGV4X2xvY2soJm5oLT5tdXRleCk7Ci0JcmV0ID0gbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLQltdXRleF91bmxvY2soJm5oLT5tdXRleCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9ub3RpZmllcl9jaGFpbl9yZWdpc3Rlcik7Ci0KLS8qKgotICoJc3JjdV9ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyIC0gUmVtb3ZlIG5vdGlmaWVyIGZyb20gYW4gU1JDVSBub3RpZmllciBjaGFpbgotICoJQG5oOiBQb2ludGVyIHRvIGhlYWQgb2YgdGhlIFNSQ1Ugbm90aWZpZXIgY2hhaW4KLSAqCUBuOiBFbnRyeSB0byByZW1vdmUgZnJvbSBub3RpZmllciBjaGFpbgotICoKLSAqCVJlbW92ZXMgYSBub3RpZmllciBmcm9tIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4uCi0gKglNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KLSAqCi0gKglSZXR1cm5zIHplcm8gb24gc3VjY2VzcyBvciAlLUVOT0VOVCBvbiBmYWlsdXJlLgotICovCi1pbnQgc3JjdV9ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oLAotCQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pCi17Ci0JaW50IHJldDsKLQotCS8qCi0JICogVGhpcyBjb2RlIGdldHMgdXNlZCBkdXJpbmcgYm9vdC11cCwgd2hlbiB0YXNrIHN3aXRjaGluZyBpcwotCSAqIG5vdCB5ZXQgd29ya2luZyBhbmQgaW50ZXJydXB0cyBtdXN0IHJlbWFpbiBkaXNhYmxlZC4gIEF0Ci0JICogc3VjaCB0aW1lcyB3ZSBtdXN0IG5vdCBjYWxsIG11dGV4X2xvY2soKS4KLQkgKi8KLQlpZiAodW5saWtlbHkoc3lzdGVtX3N0YXRlID09IFNZU1RFTV9CT09USU5HKSkKLQkJcmV0dXJuIG5vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5oLT5oZWFkLCBuKTsKLQotCW11dGV4X2xvY2soJm5oLT5tdXRleCk7Ci0JcmV0ID0gbm90aWZpZXJfY2hhaW5fdW5yZWdpc3RlcigmbmgtPmhlYWQsIG4pOwotCW11dGV4X3VubG9jaygmbmgtPm11dGV4KTsKLQlzeW5jaHJvbml6ZV9zcmN1KCZuaC0+c3JjdSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKTsKLQotLyoqCi0gKglfX3NyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbiAtIENhbGwgZnVuY3Rpb25zIGluIGFuIFNSQ1Ugbm90aWZpZXIgY2hhaW4KLSAqCUBuaDogUG9pbnRlciB0byBoZWFkIG9mIHRoZSBTUkNVIG5vdGlmaWVyIGNoYWluCi0gKglAdmFsOiBWYWx1ZSBwYXNzZWQgdW5tb2RpZmllZCB0byBub3RpZmllciBmdW5jdGlvbgotICoJQHY6IFBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KLSAqCUBucl90b19jYWxsOiBTZWUgY29tbWVudCBmb3Igbm90aWZpZXJfY2FsbF9jaGFpbi4KLSAqCUBucl9jYWxsczogU2VlIGNvbW1lbnQgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4KLSAqCi0gKglDYWxscyBlYWNoIGZ1bmN0aW9uIGluIGEgbm90aWZpZXIgY2hhaW4gaW4gdHVybi4gIFRoZSBmdW5jdGlvbnMKLSAqCXJ1biBpbiBhIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYWxsb3dlZCB0byBibG9jay4KLSAqCi0gKglJZiB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBub3RpZmllciBjYW4gYmUgYW5kJ2VkCi0gKgl3aXRoICVOT1RJRllfU1RPUF9NQVNLIHRoZW4gc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKCkKLSAqCXdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5LCB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YKLSAqCXRoZSBub3RpZmllciBmdW5jdGlvbiB3aGljaCBoYWx0ZWQgZXhlY3V0aW9uLgotICoJT3RoZXJ3aXNlIHRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZQotICoJb2YgdGhlIGxhc3Qgbm90aWZpZXIgZnVuY3Rpb24gY2FsbGVkLgotICovCi0KLWludCBfX3NyY3Vfbm90aWZpZXJfY2FsbF9jaGFpbihzdHJ1Y3Qgc3JjdV9ub3RpZmllcl9oZWFkICpuaCwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdiwKLQkJCSAgICAgICBpbnQgbnJfdG9fY2FsbCwgaW50ICpucl9jYWxscykKLXsKLQlpbnQgcmV0OwotCWludCBpZHg7Ci0KLQlpZHggPSBzcmN1X3JlYWRfbG9jaygmbmgtPnNyY3UpOwotCXJldCA9IG5vdGlmaWVyX2NhbGxfY2hhaW4oJm5oLT5oZWFkLCB2YWwsIHYsIG5yX3RvX2NhbGwsIG5yX2NhbGxzKTsKLQlzcmN1X3JlYWRfdW5sb2NrKCZuaC0+c3JjdSwgaWR4KTsKLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoX19zcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4pOwotCi1pbnQgc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKHN0cnVjdCBzcmN1X25vdGlmaWVyX2hlYWQgKm5oLAotCQl1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKLXsKLQlyZXR1cm4gX19zcmN1X25vdGlmaWVyX2NhbGxfY2hhaW4obmgsIHZhbCwgdiwgLTEsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc3JjdV9ub3RpZmllcl9jYWxsX2NoYWluKTsKLQotLyoqCi0gKglzcmN1X2luaXRfbm90aWZpZXJfaGVhZCAtIEluaXRpYWxpemUgYW4gU1JDVSBub3RpZmllciBoZWFkCi0gKglAbmg6IFBvaW50ZXIgdG8gaGVhZCBvZiB0aGUgc3JjdSBub3RpZmllciBjaGFpbgotICoKLSAqCVVubGlrZSBvdGhlciBzb3J0cyBvZiBub3RpZmllciBoZWFkcywgU1JDVSBub3RpZmllciBoZWFkcyByZXF1aXJlCi0gKglkeW5hbWljIGluaXRpYWxpemF0aW9uLiAgQmUgc3VyZSB0byBjYWxsIHRoaXMgcm91dGluZSBiZWZvcmUKLSAqCWNhbGxpbmcgYW55IG9mIHRoZSBvdGhlciBTUkNVIG5vdGlmaWVyIHJvdXRpbmVzIGZvciB0aGlzIGhlYWQuCi0gKgotICoJSWYgYW4gU1JDVSBub3RpZmllciBoZWFkIGlzIGRlYWxsb2NhdGVkLCBpdCBtdXN0IGZpcnN0IGJlIGNsZWFuZWQKLSAqCXVwIGJ5IGNhbGxpbmcgc3JjdV9jbGVhbnVwX25vdGlmaWVyX2hlYWQoKS4gIE90aGVyd2lzZSB0aGUgaGVhZCdzCi0gKglwZXItY3B1IGRhdGEgKHVzZWQgYnkgdGhlIFNSQ1UgbWVjaGFuaXNtKSB3aWxsIGxlYWsuCi0gKi8KLQotdm9pZCBzcmN1X2luaXRfbm90aWZpZXJfaGVhZChzdHJ1Y3Qgc3JjdV9ub3RpZmllcl9oZWFkICpuaCkKLXsKLQltdXRleF9pbml0KCZuaC0+bXV0ZXgpOwotCWlmIChpbml0X3NyY3Vfc3RydWN0KCZuaC0+c3JjdSkgPCAwKQotCQlCVUcoKTsKLQluaC0+aGVhZCA9IE5VTEw7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKHNyY3VfaW5pdF9ub3RpZmllcl9oZWFkKTsKLQotLyoqCi0gKglyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIgLSBSZWdpc3RlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgcmVib290IHRpbWUKLSAqCUBuYjogSW5mbyBhYm91dCBub3RpZmllciBmdW5jdGlvbiB0byBiZSBjYWxsZWQKLSAqCi0gKglSZWdpc3RlcnMgYSBmdW5jdGlvbiB3aXRoIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucwotICoJdG8gYmUgY2FsbGVkIGF0IHJlYm9vdCB0aW1lLgotICoKLSAqCUN1cnJlbnRseSBhbHdheXMgcmV0dXJucyB6ZXJvLCBhcyBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigpCi0gKglhbHdheXMgcmV0dXJucyB6ZXJvLgotICovCi0gCi1pbnQgcmVnaXN0ZXJfcmVib290X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQotewotCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmcmVib290X25vdGlmaWVyX2xpc3QsIG5iKTsKLX0KLQotRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIpOwotCi0vKioKLSAqCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyIC0gVW5yZWdpc3RlciBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcmVib290IG5vdGlmaWVyCi0gKglAbmI6IEhvb2sgdG8gYmUgdW5yZWdpc3RlcmVkCi0gKgotICoJVW5yZWdpc3RlcnMgYSBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgcmVib290Ci0gKglub3RpZmllciBmdW5jdGlvbi4KLSAqCi0gKglSZXR1cm5zIHplcm8gb24gc3VjY2Vzcywgb3IgJS1FTk9FTlQgb24gZmFpbHVyZS4KLSAqLwotIAotaW50IHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQotewotCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZyZWJvb3Rfbm90aWZpZXJfbGlzdCwgbmIpOwotfQotCi1FWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKTsKIAogc3RhdGljIGludCBzZXRfb25lX3ByaW8oc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmljZXZhbCwgaW50IGVycm9yKQogewpAQCAtNjg0LDcgKzE1Miw3IEBACiAJc3dpdGNoICh3aGljaCkgewogCQljYXNlIFBSSU9fUFJPQ0VTUzoKIAkJCWlmICh3aG8pCi0JCQkJcCA9IGZpbmRfdGFza19ieV9waWQod2hvKTsKKwkJCQlwID0gZmluZF90YXNrX2J5X3ZwaWQod2hvKTsKIAkJCWVsc2UKIAkJCQlwID0gY3VycmVudDsKIAkJCWlmIChwKQpAQCAtNjkyLDcgKzE2MCw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBQUklPX1BHUlA6CiAJCQlpZiAod2hvKQotCQkJCXBncnAgPSBmaW5kX3BpZCh3aG8pOworCQkJCXBncnAgPSBmaW5kX3ZwaWQod2hvKTsKIAkJCWVsc2UKIAkJCQlwZ3JwID0gdGFza19wZ3JwKGN1cnJlbnQpOwogCQkJZG9fZWFjaF9waWRfdGFzayhwZ3JwLCBQSURUWVBFX1BHSUQsIHApIHsKQEAgLTc0MSw3ICsyMDksNyBAQAogCXN3aXRjaCAod2hpY2gpIHsKIAkJY2FzZSBQUklPX1BST0NFU1M6CiAJCQlpZiAod2hvKQotCQkJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHdobyk7CisJCQkJcCA9IGZpbmRfdGFza19ieV92cGlkKHdobyk7CiAJCQllbHNlCiAJCQkJcCA9IGN1cnJlbnQ7CiAJCQlpZiAocCkgewpAQCAtNzUyLDcgKzIyMCw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBQUklPX1BHUlA6CiAJCQlpZiAod2hvKQotCQkJCXBncnAgPSBmaW5kX3BpZCh3aG8pOworCQkJCXBncnAgPSBmaW5kX3ZwaWQod2hvKTsKIAkJCWVsc2UKIAkJCQlwZ3JwID0gdGFza19wZ3JwKGN1cnJlbnQpOwogCQkJZG9fZWFjaF9waWRfdGFzayhwZ3JwLCBQSURUWVBFX1BHSUQsIHApIHsKQEAgLTE0NDksOSArOTE3LDEwIEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZ3JvdXBfbGVhZGVyID0gY3VycmVudC0+Z3JvdXBfbGVhZGVyOwogCWludCBlcnIgPSAtRUlOVkFMOworCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKIAogCWlmICghcGlkKQotCQlwaWQgPSBncm91cF9sZWFkZXItPnBpZDsKKwkJcGlkID0gdGFza19waWRfdm5yKGdyb3VwX2xlYWRlcik7CiAJaWYgKCFwZ2lkKQogCQlwZ2lkID0gcGlkOwogCWlmIChwZ2lkIDwgMCkKQEAgLTE0NjAsMTAgKzkyOSwxMiBAQAogCS8qIEZyb20gdGhpcyBwb2ludCBmb3J3YXJkIHdlIGtlZXAgaG9sZGluZyBvbnRvIHRoZSB0YXNrbGlzdCBsb2NrCiAJICogc28gdGhhdCBvdXIgcGFyZW50IGRvZXMgbm90IGNoYW5nZSBmcm9tIHVuZGVyIHVzLiAtRGF2ZU0KIAkgKi8KKwlucyA9IGN1cnJlbnQtPm5zcHJveHktPnBpZF9uczsKKwogCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAogCWVyciA9IC1FU1JDSDsKLQlwID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCXAgPSBmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZCwgbnMpOwogCWlmICghcCkKIAkJZ290byBvdXQ7CiAKQEAgLTE0ODksOSArOTYwLDkgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAocGdpZCAhPSBwaWQpIHsKLQkJc3RydWN0IHRhc2tfc3RydWN0ICpnID0KLQkJCWZpbmRfdGFza19ieV9waWRfdHlwZShQSURUWVBFX1BHSUQsIHBnaWQpOworCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmc7CiAKKwkJZyA9IGZpbmRfdGFza19ieV9waWRfdHlwZV9ucyhQSURUWVBFX1BHSUQsIHBnaWQsIG5zKTsKIAkJaWYgKCFnIHx8IHRhc2tfc2Vzc2lvbihnKSAhPSB0YXNrX3Nlc3Npb24oZ3JvdXBfbGVhZGVyKSkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTE1MDAsMTAgKzk3MSwxMyBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHByb2Nlc3NfZ3JvdXAocCkgIT0gcGdpZCkgeworCWlmICh0YXNrX3BncnBfbnJfbnMocCwgbnMpICE9IHBnaWQpIHsKKwkJc3RydWN0IHBpZCAqcGlkOworCiAJCWRldGFjaF9waWQocCwgUElEVFlQRV9QR0lEKTsKLQkJcC0+c2lnbmFsLT5wZ3JwID0gcGdpZDsKLQkJYXR0YWNoX3BpZChwLCBQSURUWVBFX1BHSUQsIGZpbmRfcGlkKHBnaWQpKTsKKwkJcGlkID0gZmluZF92cGlkKHBnaWQpOworCQlhdHRhY2hfcGlkKHAsIFBJRFRZUEVfUEdJRCwgcGlkKTsKKwkJc2V0X3Rhc2tfcGdycChwLCBwaWRfbnIocGlkKSk7CiAJfQogCiAJZXJyID0gMDsKQEAgLTE1MTYsMTkgKzk5MCwyMSBAQAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRwZ2lkKHBpZF90IHBpZCkKIHsKIAlpZiAoIXBpZCkKLQkJcmV0dXJuIHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisJCXJldHVybiB0YXNrX3BncnBfdm5yKGN1cnJlbnQpOwogCWVsc2UgewogCQlpbnQgcmV0dmFsOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpuczsKKworCQlucyA9IGN1cnJlbnQtPm5zcHJveHktPnBpZF9uczsKIAogCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCQlwID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwotCisJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZCwgbnMpOwogCQlyZXR2YWwgPSAtRVNSQ0g7CiAJCWlmIChwKSB7CiAJCQlyZXR2YWwgPSBzZWN1cml0eV90YXNrX2dldHBnaWQocCk7CiAJCQlpZiAoIXJldHZhbCkKLQkJCQlyZXR2YWwgPSBwcm9jZXNzX2dyb3VwKHApOworCQkJCXJldHZhbCA9IHRhc2tfcGdycF9ucl9ucyhwLCBucyk7CiAJCX0KIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwogCQlyZXR1cm4gcmV0dmFsOwpAQCAtMTU0MCw3ICsxMDE2LDcgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cGdycCh2b2lkKQogewogCS8qIFNNUCAtIGFzc3VtaW5nIHdyaXRlcyBhcmUgd29yZCBhdG9taWMgdGhpcyBpcyBmaW5lICovCi0JcmV0dXJuIHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CisJcmV0dXJuIHRhc2tfcGdycF92bnIoY3VycmVudCk7CiB9CiAKICNlbmRpZgpAQCAtMTU0OCwxOSArMTAyNCwyMSBAQAogYXNtbGlua2FnZSBsb25nIHN5c19nZXRzaWQocGlkX3QgcGlkKQogewogCWlmICghcGlkKQotCQlyZXR1cm4gcHJvY2Vzc19zZXNzaW9uKGN1cnJlbnQpOworCQlyZXR1cm4gdGFza19zZXNzaW9uX3ZucihjdXJyZW50KTsKIAllbHNlIHsKIAkJaW50IHJldHZhbDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOworCQlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CisKKwkJbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5waWRfbnM7CiAKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJcCA9IGZpbmRfdGFza19ieV9waWQocGlkKTsKLQorCQlwID0gZmluZF90YXNrX2J5X3BpZF9ucyhwaWQsIG5zKTsKIAkJcmV0dmFsID0gLUVTUkNIOwogCQlpZiAocCkgewogCQkJcmV0dmFsID0gc2VjdXJpdHlfdGFza19nZXRzaWQocCk7CiAJCQlpZiAoIXJldHZhbCkKLQkJCQlyZXR2YWwgPSBwcm9jZXNzX3Nlc3Npb24ocCk7CisJCQkJcmV0dmFsID0gdGFza19zZXNzaW9uX25yX25zKHAsIG5zKTsKIAkJfQogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXJldHVybiByZXR2YWw7CkBAIC0xNTg3LDcgKzEwNjUsOCBAQAogCSAqIHNlc3Npb24gaWQgYW5kIHNvIHRoZSBjaGVjayB3aWxsIGFsd2F5cyBmYWlsIGFuZCBtYWtlIGl0IHNvCiAJICogaW5pdCBjYW5ub3Qgc3VjY2Vzc2Z1bGx5IGNhbGwgc2V0c2lkLgogCSAqLwotCWlmIChzZXNzaW9uID4gMSAmJiBmaW5kX3Rhc2tfYnlfcGlkX3R5cGUoUElEVFlQRV9QR0lELCBzZXNzaW9uKSkKKwlpZiAoc2Vzc2lvbiA+IDEgJiYgZmluZF90YXNrX2J5X3BpZF90eXBlX25zKFBJRFRZUEVfUEdJRCwKKwkJCQlzZXNzaW9uLCAmaW5pdF9waWRfbnMpKQogCQlnb3RvIG91dDsKIAogCWdyb3VwX2xlYWRlci0+c2lnbmFsLT5sZWFkZXIgPSAxOwpAQCAtMTU5Nyw3ICsxMDc2LDcgQEAKIAlncm91cF9sZWFkZXItPnNpZ25hbC0+dHR5ID0gTlVMTDsKIAlzcGluX3VubG9jaygmZ3JvdXBfbGVhZGVyLT5zaWdoYW5kLT5zaWdsb2NrKTsKIAotCWVyciA9IHByb2Nlc3NfZ3JvdXAoZ3JvdXBfbGVhZGVyKTsKKwllcnIgPSB0YXNrX3BncnBfdm5yKGdyb3VwX2xlYWRlcik7CiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGwuYyBiL2tlcm5lbC9zeXNjdGwuYwppbmRleCBkZGUzZDUzLi4zYjRlZmJlIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzY3RsLmMKKysrIGIva2VybmVsL3N5c2N0bC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpAQCAtNTUsNiArNTUsOCBAQAogI2luY2x1ZGUgPGFzbS9zdGFja3RyYWNlLmg+CiAjZW5kaWYKIAorc3RhdGljIGludCBkZXByZWNhdGVkX3N5c2N0bF93YXJuaW5nKHN0cnVjdCBfX3N5c2N0bF9hcmdzICphcmdzKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIAogLyogRXh0ZXJuYWwgdmFyaWFibGVzIG5vdCBpbiBhIGhlYWRlciBmaWxlLiAqLwpAQCAtMTQyLDMyICsxNDQsMjkgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogc3RhdGljIGludCBwYXJzZV90YWJsZShpbnQgX191c2VyICosIGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90IF9fdXNlciAqLAotCQl2b2lkIF9fdXNlciAqLCBzaXplX3QsIGN0bF90YWJsZSAqKTsKKwkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90LCBzdHJ1Y3QgY3RsX3RhYmxlICopOwogI2VuZGlmCiAKIAogI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAotc3RhdGljIGludCBwcm9jX2RvX2NhZF9waWQoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY19kb19jYWRfcGlkKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKLXN0YXRpYyBpbnQgcHJvY19kb2ludHZlY190YWludChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBwcm9jX2RvaW50dmVjX3RhaW50KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKICNlbmRpZgogCi1zdGF0aWMgY3RsX3RhYmxlIHJvb3RfdGFibGVbXTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHJvb3RfdGFibGVbXTsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciByb290X3RhYmxlX2hlYWRlciA9CiAJeyByb290X3RhYmxlLCBMSVNUX0hFQURfSU5JVChyb290X3RhYmxlX2hlYWRlci5jdGxfZW50cnkpIH07CiAKLXN0YXRpYyBjdGxfdGFibGUga2Vybl90YWJsZVtdOwotc3RhdGljIGN0bF90YWJsZSB2bV90YWJsZVtdOwotc3RhdGljIGN0bF90YWJsZSBmc190YWJsZVtdOwotc3RhdGljIGN0bF90YWJsZSBkZWJ1Z190YWJsZVtdOwotc3RhdGljIGN0bF90YWJsZSBkZXZfdGFibGVbXTsKLWV4dGVybiBjdGxfdGFibGUgcmFuZG9tX3RhYmxlW107Ci0jaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCi1leHRlcm4gY3RsX3RhYmxlIHB0eV90YWJsZVtdOwotI2VuZGlmCitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBrZXJuX3RhYmxlW107CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB2bV90YWJsZVtdOworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZnNfdGFibGVbXTsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRlYnVnX3RhYmxlW107CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBkZXZfdGFibGVbXTsKK2V4dGVybiBzdHJ1Y3QgY3RsX3RhYmxlIHJhbmRvbV90YWJsZVtdOwogI2lmZGVmIENPTkZJR19JTk9USUZZX1VTRVIKLWV4dGVybiBjdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdOworZXh0ZXJuIHN0cnVjdCBjdGxfdGFibGUgaW5vdGlmeV90YWJsZVtdOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0FSQ0hfUElDS19NTUFQX0xBWU9VVApAQCAtMTc5LDcgKzE3OCw3IEBACiAKIC8qIFRoZSBkZWZhdWx0IHN5c2N0bCB0YWJsZXM6ICovCiAKLXN0YXRpYyBjdGxfdGFibGUgcm9vdF90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgcm9vdF90YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gQ1RMX0tFUk4sCiAJCS5wcm9jbmFtZQk9ICJrZXJuZWwiLApAQCAtMjMyLDcgKzIzMSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfd2FrZXVwX2dyYW51bGFyaXR5X25zID0gMTAwMDAwMDAwMDsJLyogMSBzZWNvbmQgKi8KICNlbmRpZgogCi1zdGF0aWMgY3RsX3RhYmxlIGtlcm5fdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGtlcm5fdGFibGVbXSA9IHsKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELApAQCAtMzY1LDcgKzM2NCw2IEBACiAJfSwKICNpZmRlZiBDT05GSUdfUFJPQ19TWVNDVEwKIAl7Ci0JCS5jdGxfbmFtZQk9IEtFUk5fVEFJTlRFRCwKIAkJLnByb2NuYW1lCT0gInRhaW50ZWQiLAogCQkuZGF0YQkJPSAmdGFpbnRlZCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTM3MywxNCArMzcxLDE1IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY190YWludCwKIAl9LAogI2VuZGlmCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUwogCXsKLQkJLmN0bF9uYW1lCT0gS0VSTl9DQVBfQlNFVCwKIAkJLnByb2NuYW1lCT0gImNhcC1ib3VuZCIsCiAJCS5kYXRhCQk9ICZjYXBfYnNldCwKIAkJLm1heGxlbgkJPSBzaXplb2Yoa2VybmVsX2NhcF90KSwKIAkJLm1vZGUJCT0gMDYwMCwKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2JzZXQsCiAJfSwKKyNlbmRpZiAvKiBkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyAqLwogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCXsKIAkJLmN0bF9uYW1lCT0gS0VSTl9SRUFMUk9PVERFViwKQEAgLTUxNCw3ICs1MTMsNiBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiAJewotCQkuY3RsX25hbWUJPSBLRVJOX0NBRFBJRCwKIAkJLnByb2NuYW1lCT0gImNhZF9waWQiLAogCQkuZGF0YQkJPSBOVUxMLAogCQkubWF4bGVuCQk9IHNpemVvZiAoaW50KSwKQEAgLTUzNiwxNCArNTM0LDYgQEAKIAkJLm1vZGUJCT0gMDU1NSwKIAkJLmNoaWxkCQk9IHJhbmRvbV90YWJsZSwKIAl9LAotI2lmZGVmIENPTkZJR19VTklYOThfUFRZUwotCXsKLQkJLmN0bF9uYW1lCT0gS0VSTl9QVFksCi0JCS5wcm9jbmFtZQk9ICJwdHkiLAotCQkubW9kZQkJPSAwNTU1LAotCQkuY2hpbGQJCT0gcHR5X3RhYmxlLAotCX0sCi0jZW5kaWYKIAl7CiAJCS5jdGxfbmFtZQk9IEtFUk5fT1ZFUkZMT1dVSUQsCiAJCS5wcm9jbmFtZQk9ICJvdmVyZmxvd3VpZCIsCkBAIC02NTAsNyArNjQwLDYgQEAKIAkJLnByb2NfaGFuZGxlciAgID0gJnByb2NfZG9pbnR2ZWMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZSAgICAgICA9IEtFUk5fTk1JX1dBVENIRE9HLAogCQkucHJvY25hbWUgICAgICAgPSAibm1pX3dhdGNoZG9nIiwKIAkJLmRhdGEgICAgICAgICAgID0gJm5taV93YXRjaGRvZ19lbmFibGVkLAogCQkubWF4bGVuICAgICAgICAgPSBzaXplb2YgKGludCksCkBAIC03MDYsNyArNjk1LDYgQEAKICNlbmRpZgogI2lmCWRlZmluZWQoQ09ORklHX0FDUElfU0xFRVApICYmIGRlZmluZWQoQ09ORklHX1g4NikKIAl7Ci0JCS5jdGxfbmFtZQk9IEtFUk5fQUNQSV9WSURFT19GTEFHUywKIAkJLnByb2NuYW1lCT0gImFjcGlfdmlkZW9fZmxhZ3MiLAogCQkuZGF0YQkJPSAmYWNwaV9yZWFsbW9kZV9mbGFncywKIAkJLm1heGxlbgkJPSBzaXplb2YgKHVuc2lnbmVkIGxvbmcpLApAQCAtNzgzLDcgKzc3MSw3IEBACiAJeyAuY3RsX25hbWUgPSAwIH0KIH07CiAKLXN0YXRpYyBjdGxfdGFibGUgdm1fdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHZtX3RhYmxlW10gPSB7CiAJewogCQkuY3RsX25hbWUJPSBWTV9PVkVSQ09NTUlUX01FTU9SWSwKIAkJLnByb2NuYW1lCT0gIm92ZXJjb21taXRfbWVtb3J5IiwKQEAgLTg0Nyw3ICs4MzUsNiBAQAogCQkuZXh0cmEyCQk9ICZvbmVfaHVuZHJlZCwKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gVk1fRElSVFlfV0JfQ1MsCiAJCS5wcm9jbmFtZQk9ICJkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzIiwKIAkJLmRhdGEJCT0gJmRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCwKIAkJLm1heGxlbgkJPSBzaXplb2YoZGlydHlfd3JpdGViYWNrX2ludGVydmFsKSwKQEAgLTg1NSw3ICs4NDIsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJmRpcnR5X3dyaXRlYmFja19jZW50aXNlY3NfaGFuZGxlciwKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gVk1fRElSVFlfRVhQSVJFX0NTLAogCQkucHJvY25hbWUJPSAiZGlydHlfZXhwaXJlX2NlbnRpc2VjcyIsCiAJCS5kYXRhCQk9ICZkaXJ0eV9leHBpcmVfaW50ZXJ2YWwsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGRpcnR5X2V4cGlyZV9pbnRlcnZhbCksCkBAIC04ODMsNyArODY5LDYgQEAKIAl9LAogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0UKIAkgewotCQkuY3RsX25hbWUJPSBWTV9IVUdFVExCX1BBR0VTLAogCQkucHJvY25hbWUJPSAibnJfaHVnZXBhZ2VzIiwKIAkJLmRhdGEJCT0gJm1heF9odWdlX3BhZ2VzLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBsb25nKSwKQEAgLTEwOTMsMTIgKzEwNzgsMTIgQEAKIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19CSU5GTVRfTUlTQykgfHwgZGVmaW5lZChDT05GSUdfQklORk1UX01JU0NfTU9EVUxFKQotc3RhdGljIGN0bF90YWJsZSBiaW5mbXRfbWlzY190YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgYmluZm10X21pc2NfdGFibGVbXSA9IHsKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKICNlbmRpZgogCi1zdGF0aWMgY3RsX3RhYmxlIGZzX3RhYmxlW10gPSB7CitzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBmc190YWJsZVtdID0gewogCXsKIAkJLmN0bF9uYW1lCT0gRlNfTlJJTk9ERSwKIAkJLnByb2NuYW1lCT0gImlub2RlLW5yIiwKQEAgLTExMTYsNyArMTEwMSw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gRlNfTlJGSUxFLAogCQkucHJvY25hbWUJPSAiZmlsZS1uciIsCiAJCS5kYXRhCQk9ICZmaWxlc19zdGF0LAogCQkubWF4bGVuCQk9IDMqc2l6ZW9mKGludCksCkBAIC0xMTkyLDcgKzExNzYsNiBAQAogCQkuZXh0cmEyCQk9ICZ0d28sCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IEZTX0FJT19OUiwKIAkJLnByb2NuYW1lCT0gImFpby1uciIsCiAJCS5kYXRhCQk9ICZhaW9fbnIsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGFpb19uciksCkBAIC0xMjAwLDcgKzExODMsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG91bG9uZ3ZlY19taW5tYXgsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IEZTX0FJT19NQVhfTlIsCiAJCS5wcm9jbmFtZQk9ICJhaW8tbWF4LW5yIiwKIAkJLmRhdGEJCT0gJmFpb19tYXhfbnIsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGFpb19tYXhfbnIpLApAQCAtMTIzOSw3ICsxMjIxLDcgQEAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIAotc3RhdGljIGN0bF90YWJsZSBkZWJ1Z190YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGVidWdfdGFibGVbXSA9IHsKICNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykKIAl7CiAJCS5jdGxfbmFtZQk9IENUTF9VTk5VTUJFUkVELApAQCAtMTI1Myw3ICsxMjM1LDcgQEAKIAl7IC5jdGxfbmFtZSA9IDAgfQogfTsKIAotc3RhdGljIGN0bF90YWJsZSBkZXZfdGFibGVbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRldl90YWJsZVtdID0gewogCXsgLmN0bF9uYW1lID0gMCB9CiB9OwogCkBAIC0xMzY5LDEwICsxMzUxLDE1IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIGFyZ3MsIHNpemVvZih0bXApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKKwllcnJvciA9IGRlcHJlY2F0ZWRfc3lzY3RsX3dhcm5pbmcoJnRtcCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwogCWxvY2tfa2VybmVsKCk7CiAJZXJyb3IgPSBkb19zeXNjdGwodG1wLm5hbWUsIHRtcC5ubGVuLCB0bXAub2xkdmFsLCB0bXAub2xkbGVucCwKIAkJCSAgdG1wLm5ld3ZhbCwgdG1wLm5ld2xlbik7CiAJdW5sb2NrX2tlcm5lbCgpOworb3V0OgogCXJldHVybiBlcnJvcjsKIH0KICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgKi8KQEAgLTEzOTMsNyArMTM4MCw3IEBACiAJcmV0dXJuIC1FQUNDRVM7CiB9CiAKLWludCBzeXNjdGxfcGVybShjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApCitpbnQgc3lzY3RsX3Blcm0oc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBvcCkKIHsKIAlpbnQgZXJyb3I7CiAJZXJyb3IgPSBzZWN1cml0eV9zeXNjdGwodGFibGUsIG9wKTsKQEAgLTE0MDYsNyArMTM5Myw3IEBACiBzdGF0aWMgaW50IHBhcnNlX3RhYmxlKGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkgICAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sCi0JCSAgICAgICBjdGxfdGFibGUgKnRhYmxlKQorCQkgICAgICAgc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCiB7CiAJaW50IG47CiByZXBlYXQ6CkBAIC0xNDM3LDEzICsxNDI0LDEyIEBACiB9CiAKIC8qIFBlcmZvcm0gdGhlIGFjdHVhbCByZWFkL3dyaXRlIG9mIGEgc3lzY3RsIHRhYmxlIGVudHJ5LiAqLwotaW50IGRvX3N5c2N0bF9zdHJhdGVneSAoY3RsX3RhYmxlICp0YWJsZSwgCitpbnQgZG9fc3lzY3RsX3N0cmF0ZWd5IChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJCWludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkJdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJaW50IG9wID0gMCwgcmM7Ci0Jc2l6ZV90IGxlbjsKIAogCWlmIChvbGR2YWwpCiAJCW9wIHw9IDAwNDsKQEAgLTE0NjQsMjUgKzE0NTAsMTAgQEAKIAkvKiBJZiB0aGVyZSBpcyBubyBzdHJhdGVneSByb3V0aW5lLCBvciBpZiB0aGUgc3RyYXRlZ3kgcmV0dXJucwogCSAqIHplcm8sIHByb2NlZWQgd2l0aCBhdXRvbWF0aWMgci93ICovCiAJaWYgKHRhYmxlLT5kYXRhICYmIHRhYmxlLT5tYXhsZW4pIHsKLQkJaWYgKG9sZHZhbCAmJiBvbGRsZW5wKSB7Ci0JCQlpZiAoZ2V0X3VzZXIobGVuLCBvbGRsZW5wKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChsZW4pIHsKLQkJCQlpZiAobGVuID4gdGFibGUtPm1heGxlbikKLQkJCQkJbGVuID0gdGFibGUtPm1heGxlbjsKLQkJCQlpZihjb3B5X3RvX3VzZXIob2xkdmFsLCB0YWJsZS0+ZGF0YSwgbGVuKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJaWYocHV0X3VzZXIobGVuLCBvbGRsZW5wKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKG5ld3ZhbCAmJiBuZXdsZW4pIHsKLQkJCWxlbiA9IG5ld2xlbjsKLQkJCWlmIChsZW4gPiB0YWJsZS0+bWF4bGVuKQotCQkJCWxlbiA9IHRhYmxlLT5tYXhsZW47Ci0JCQlpZihjb3B5X2Zyb21fdXNlcih0YWJsZS0+ZGF0YSwgbmV3dmFsLCBsZW4pKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9CisJCXJjID0gc3lzY3RsX2RhdGEodGFibGUsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwKKwkJCQkgbmV3dmFsLCBuZXdsZW4pOworCQlpZiAocmMgPCAwKQorCQkJcmV0dXJuIHJjOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTE0OTksNyArMTQ3MCw5IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IHN5c2N0bF9pbml0KHZvaWQpCiB7CisJaW50IGVycjsKIAlzeXNjdGxfc2V0X3BhcmVudChOVUxMLCByb290X3RhYmxlKTsKKwllcnIgPSBzeXNjdGxfY2hlY2tfdGFibGUocm9vdF90YWJsZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1MTIsNyArMTQ4NSw3IEBACiAgKiBSZWdpc3RlciBhIHN5c2N0bCB0YWJsZSBoaWVyYXJjaHkuIEB0YWJsZSBzaG91bGQgYmUgYSBmaWxsZWQgaW4gY3RsX3RhYmxlCiAgKiBhcnJheS4gQW4gZW50cnkgd2l0aCBhIGN0bF9uYW1lIG9mIDAgdGVybWluYXRlcyB0aGUgdGFibGUuIAogICoKLSAqIFRoZSBtZW1iZXJzIG9mIHRoZSAmY3RsX3RhYmxlIHN0cnVjdHVyZSBhcmUgdXNlZCBhcyBmb2xsb3dzOgorICogVGhlIG1lbWJlcnMgb2YgdGhlICZzdHJ1Y3QgY3RsX3RhYmxlIHN0cnVjdHVyZSBhcmUgdXNlZCBhcyBmb2xsb3dzOgogICoKICAqIGN0bF9uYW1lIC0gVGhpcyBpcyB0aGUgbnVtZXJpYyBzeXNjdGwgdmFsdWUgdXNlZCBieSBzeXNjdGwoMikuIFRoZSBudW1iZXIKICAqICAgICAgICAgICAgbXVzdCBiZSB1bmlxdWUgd2l0aGluIHRoYXQgbGV2ZWwgb2Ygc3lzY3RsCkBAIC0xNTczLDcgKzE1NDYsNyBAQAogICogVGhpcyByb3V0aW5lIHJldHVybnMgJU5VTEwgb24gYSBmYWlsdXJlIHRvIHJlZ2lzdGVyLCBhbmQgYSBwb2ludGVyCiAgKiB0byB0aGUgdGFibGUgaGVhZGVyIG9uIHN1Y2Nlc3MuCiAgKi8KLXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpyZWdpc3Rlcl9zeXNjdGxfdGFibGUoY3RsX3RhYmxlICogdGFibGUpCitzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKiB0YWJsZSkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqdG1wOwogCXRtcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNTg0LDYgKzE1NTcsMTAgQEAKIAl0bXAtPnVzZWQgPSAwOwogCXRtcC0+dW5yZWdpc3RlcmluZyA9IE5VTEw7CiAJc3lzY3RsX3NldF9wYXJlbnQoTlVMTCwgdGFibGUpOworCWlmIChzeXNjdGxfY2hlY2tfdGFibGUodG1wLT5jdGxfdGFibGUpKSB7CisJCWtmcmVlKHRtcCk7CisJCXJldHVybiBOVUxMOworCX0KIAlzcGluX2xvY2soJnN5c2N0bF9sb2NrKTsKIAlsaXN0X2FkZF90YWlsKCZ0bXAtPmN0bF9lbnRyeSwgJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeSk7CiAJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKQEAgLTE2MDcsNyArMTU4NCw3IEBACiB9CiAKICNlbHNlIC8qICFDT05GSUdfU1lTQ1RMICovCi1zdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGN0bF90YWJsZSAqIHRhYmxlKQorc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlICogdGFibGUpCiB7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNzAwLDcgKzE2NzcsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1pbnQgcHJvY19kb3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIF9wcm9jX2RvX3N0cmluZyh0YWJsZS0+ZGF0YSwgdGFibGUtPm1heGxlbiwgd3JpdGUsIGZpbHAsCkBAIC0xNzI3LDcgKzE3MDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9fZG9fcHJvY19kb2ludHZlYyh2b2lkICp0YmxfZGF0YSwgY3RsX3RhYmxlICp0YWJsZSwKK3N0YXRpYyBpbnQgX19kb19wcm9jX2RvaW50dmVjKHZvaWQgKnRibF9kYXRhLCBzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwKIAkJICBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkIF9fdXNlciAqYnVmZmVyLAogCQkgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLAogCQkgIGludCAoKmNvbnYpKGludCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsIGludCAqdmFscCwKQEAgLTE4MzcsNyArMTgxNCw3IEBACiAjdW5kZWYgVE1QQlVGTEVOCiB9CiAKLXN0YXRpYyBpbnQgZG9fcHJvY19kb2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBkb19wcm9jX2RvaW50dmVjKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLAogCQkgIGludCAoKmNvbnYpKGludCAqbmVncCwgdW5zaWduZWQgbG9uZyAqbHZhbHAsIGludCAqdmFscCwKIAkJCSAgICAgIGludCB3cml0ZSwgdm9pZCAqZGF0YSksCkBAIC0xODYxLDcgKzE4MzgsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1pbnQgcHJvY19kb2ludHZlYyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG9pbnR2ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAgICAgcmV0dXJuIGRvX3Byb2NfZG9pbnR2ZWModGFibGUsd3JpdGUsZmlscCxidWZmZXIsbGVucCxwcG9zLApAQCAtMTg5NywxMSArMTg3NCwxMiBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUwogLyoKICAqCWluaXQgbWF5IHJhaXNlIHRoZSBzZXQuCiAgKi8KLSAKLWludCBwcm9jX2RvaW50dmVjX2JzZXQoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKworaW50IHByb2NfZG9pbnR2ZWNfYnNldChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCXZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCWludCBvcDsKQEAgLTE5MTAsMTUgKzE4ODgsMTYgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQlvcCA9IGlzX2luaXQoY3VycmVudCkgPyBPUF9TRVQgOiBPUF9BTkQ7CisJb3AgPSBpc19nbG9iYWxfaW5pdChjdXJyZW50KSA/IE9QX1NFVCA6IE9QX0FORDsKIAlyZXR1cm4gZG9fcHJvY19kb2ludHZlYyh0YWJsZSx3cml0ZSxmaWxwLGJ1ZmZlcixsZW5wLHBwb3MsCiAJCQkJZG9fcHJvY19kb2ludHZlY19ic2V0X2NvbnYsJm9wKTsKIH0KKyNlbmRpZiAvKiBkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyAqLwogCiAvKgogICoJVGFpbnQgdmFsdWVzIGNhbiBvbmx5IGJlIGluY3JlYXNlZAogICovCi1zdGF0aWMgaW50IHByb2NfZG9pbnR2ZWNfdGFpbnQoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK3N0YXRpYyBpbnQgcHJvY19kb2ludHZlY190YWludChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlpbnQgb3A7CkBAIC0xOTc3LDcgKzE5NTYsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1pbnQgcHJvY19kb2ludHZlY19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2ludCBwcm9jX2RvaW50dmVjX21pbm1heChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZG9fcHJvY19kb2ludHZlY19taW5tYXhfY29udl9wYXJhbSBwYXJhbSA9IHsKQEAgLTE5ODgsNyArMTk2Nyw3IEBACiAJCQkJZG9fcHJvY19kb2ludHZlY19taW5tYXhfY29udiwgJnBhcmFtKTsKIH0KIAotc3RhdGljIGludCBfX2RvX3Byb2NfZG91bG9uZ3ZlY19taW5tYXgodm9pZCAqZGF0YSwgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorc3RhdGljIGludCBfX2RvX3Byb2NfZG91bG9uZ3ZlY19taW5tYXgodm9pZCAqZGF0YSwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKIAkJCQkgICAgIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKIAkJCQkgICAgIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zLApAQCAtMjA5Myw3ICsyMDcyLDcgQEAKICN1bmRlZiBUTVBCVUZMRU4KIH0KIAotc3RhdGljIGludCBkb19wcm9jX2RvdWxvbmd2ZWNfbWlubWF4KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwKK3N0YXRpYyBpbnQgZG9fcHJvY19kb3Vsb25ndmVjX21pbm1heChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQkJCSAgICAgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgICB2b2lkIF9fdXNlciAqYnVmZmVyLAogCQkJCSAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MsCkBAIC0yMTIxLDcgKzIxMDAsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1pbnQgcHJvY19kb3Vsb25ndmVjX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKICAgICByZXR1cm4gZG9fcHJvY19kb3Vsb25ndmVjX21pbm1heCh0YWJsZSwgd3JpdGUsIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcywgMWwsIDFsKTsKQEAgLTIxNDUsNyArMjEyNCw3IEBACiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiAgKi8KLWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAoraW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCSAgICAgIHZvaWQgX191c2VyICpidWZmZXIsCiAJCQkJICAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCkBAIC0yMjM4LDcgKzIyMTcsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1pbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitpbnQgcHJvY19kb2ludHZlY19qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKICAgICByZXR1cm4gZG9fcHJvY19kb2ludHZlYyh0YWJsZSx3cml0ZSxmaWxwLGJ1ZmZlcixsZW5wLHBwb3MsCkBAIC0yMjYxLDcgKzIyNDAsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCi1pbnQgcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogICAgIHJldHVybiBkb19wcm9jX2RvaW50dmVjKHRhYmxlLHdyaXRlLGZpbHAsYnVmZmVyLGxlbnAscHBvcywKQEAgLTIyODUsMjEgKzIyNjQsMjEgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqLwotaW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIGRvX3Byb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MsCiAJCQkJZG9fcHJvY19kb2ludHZlY19tc19qaWZmaWVzX2NvbnYsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHByb2NfZG9fY2FkX3BpZChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAorc3RhdGljIGludCBwcm9jX2RvX2NhZF9waWQoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgcGlkICpuZXdfcGlkOwogCXBpZF90IHRtcDsKIAlpbnQgcjsKIAotCXRtcCA9IHBpZF9ucihjYWRfcGlkKTsKKwl0bXAgPSBwaWRfbnJfbnMoY2FkX3BpZCwgY3VycmVudC0+bnNwcm94eS0+cGlkX25zKTsKIAogCXIgPSBfX2RvX3Byb2NfZG9pbnR2ZWMoJnRtcCwgdGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsCiAJCQkgICAgICAgbGVucCwgcHBvcywgTlVMTCwgTlVMTCk7CkBAIC0yMzE2LDU1ICsyMjk1LDU1IEBACiAKICNlbHNlIC8qIENPTkZJR19QUk9DX0ZTICovCiAKLWludCBwcm9jX2Rvc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitpbnQgcHJvY19kb3N0cmluZyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHByb2NfZG9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2ludCBwcm9jX2RvaW50dmVjKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgcHJvY19kb2ludHZlY19ic2V0KGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCitpbnQgcHJvY19kb2ludHZlY19ic2V0KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBwcm9jX2RvaW50dmVjX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG9pbnR2ZWNfbWlubWF4KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2ludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2ludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKK2ludCBwcm9jX2RvaW50dmVjX21zX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgcHJvY19kb3Vsb25ndmVjX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoraW50IHByb2NfZG91bG9uZ3ZlY19taW5tYXgoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCiAJCSAgICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCitpbnQgcHJvY19kb3Vsb25ndmVjX21zX2ppZmZpZXNfbWlubWF4KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbHAsCiAJCQkJICAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwKIAkJCQkgICAgICBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKQEAgLTIzODEsOCArMjM2MCw0MiBAQAogICogR2VuZXJhbCBzeXNjdGwgc3VwcG9ydCByb3V0aW5lcyAKICAqLwogCisvKiBUaGUgZ2VuZXJpYyBzeXNjdGwgZGF0YSByb3V0aW5lICh1c2VkIGlmIG5vIHN0cmF0ZWd5IHJvdXRpbmUgc3VwcGxpZWQpICovCitpbnQgc3lzY3RsX2RhdGEoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAorCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQoreworCXNpemVfdCBsZW47CisKKwkvKiBHZXQgb3V0IG9mIEkgZG9uJ3QgaGF2ZSBhIHZhcmlhYmxlICovCisJaWYgKCF0YWJsZS0+ZGF0YSB8fCAhdGFibGUtPm1heGxlbikKKwkJcmV0dXJuIC1FTk9URElSOworCisJaWYgKG9sZHZhbCAmJiBvbGRsZW5wKSB7CisJCWlmIChnZXRfdXNlcihsZW4sIG9sZGxlbnApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChsZW4pIHsKKwkJCWlmIChsZW4gPiB0YWJsZS0+bWF4bGVuKQorCQkJCWxlbiA9IHRhYmxlLT5tYXhsZW47CisJCQlpZiAoY29weV90b191c2VyKG9sZHZhbCwgdGFibGUtPmRhdGEsIGxlbikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAocHV0X3VzZXIobGVuLCBvbGRsZW5wKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCX0KKworCWlmIChuZXd2YWwgJiYgbmV3bGVuKSB7CisJCWlmIChuZXdsZW4gPiB0YWJsZS0+bWF4bGVuKQorCQkJbmV3bGVuID0gdGFibGUtPm1heGxlbjsKKworCQlpZiAoY29weV9mcm9tX3VzZXIodGFibGUtPmRhdGEsIG5ld3ZhbCwgbmV3bGVuKSkKKwkJCXJldHVybiAtRUZBVUxUOworCX0KKwlyZXR1cm4gMTsKK30KKwogLyogVGhlIGdlbmVyaWMgc3RyaW5nIHN0cmF0ZWd5IHJvdXRpbmU6ICovCi1pbnQgc3lzY3RsX3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfc3RyaW5nKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yNDI4LDcgKzI0NDEsNyBAQAogICogYXJlIGJldHdlZW4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIGdpdmVuIGluIHRoZSBhcnJheXMKICAqIHRhYmxlLT5leHRyYTEgYW5kIHRhYmxlLT5leHRyYTIsIHJlc3BlY3RpdmVseS4KICAqLwotaW50IHN5c2N0bF9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2ludHZlYyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yNDY0LDcgKzI0NzcsNyBAQAogfQogCiAvKiBTdHJhdGVneSBmdW5jdGlvbiB0byBjb252ZXJ0IGppZmZpZXMgdG8gc2Vjb25kcyAqLyAKLWludCBzeXNjdGxfamlmZmllcyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yNDk4LDcgKzI1MTEsNyBAQAogfQogCiAvKiBTdHJhdGVneSBmdW5jdGlvbiB0byBjb252ZXJ0IGppZmZpZXMgdG8gc2Vjb25kcyAqLyAKLWludCBzeXNjdGxfbXNfamlmZmllcyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKK2ludCBzeXNjdGxfbXNfamlmZmllcyhzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCiAJCXZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCiAJCXZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CkBAIC0yNTM4LDU5ICsyNTUxLDUwIEBACiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3lzY3RsKHN0cnVjdCBfX3N5c2N0bF9hcmdzIF9fdXNlciAqYXJncykKIHsKLQlzdGF0aWMgaW50IG1zZ19jb3VudDsKIAlzdHJ1Y3QgX19zeXNjdGxfYXJncyB0bXA7Ci0JaW50IG5hbWVbQ1RMX01BWE5BTUVdOwotCWludCBpOworCWludCBlcnJvcjsKIAotCS8qIFJlYWQgaW4gdGhlIHN5c2N0bCBuYW1lIGZvciBiZXR0ZXIgZGVidWcgbWVzc2FnZSBsb2dnaW5nICovCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIGFyZ3MsIHNpemVvZih0bXApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKHRtcC5ubGVuIDw9IDAgfHwgdG1wLm5sZW4gPj0gQ1RMX01BWE5BTUUpCi0JCXJldHVybiAtRU5PVERJUjsKLQlmb3IgKGkgPSAwOyBpIDwgdG1wLm5sZW47IGkrKykKLQkJaWYgKGdldF91c2VyKG5hbWVbaV0sIHRtcC5uYW1lICsgaSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKIAotCS8qIElnbm9yZSBhY2Nlc3NlcyB0byBrZXJuZWwudmVyc2lvbiAqLwotCWlmICgodG1wLm5sZW4gPT0gMikgJiYgKG5hbWVbMF0gPT0gQ1RMX0tFUk4pICYmIChuYW1lWzFdID09IEtFUk5fVkVSU0lPTikpCi0JCWdvdG8gb3V0OworCWVycm9yID0gZGVwcmVjYXRlZF9zeXNjdGxfd2FybmluZygmdG1wKTsKIAotCWlmIChtc2dfY291bnQgPCA1KSB7Ci0JCW1zZ19jb3VudCsrOwotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkid2FybmluZzogcHJvY2VzcyBgJXMnIHVzZWQgdGhlIHJlbW92ZWQgc3lzY3RsICIKLQkJCSJzeXN0ZW0gY2FsbCB3aXRoICIsIGN1cnJlbnQtPmNvbW0pOwotCQlmb3IgKGkgPSAwOyBpIDwgdG1wLm5sZW47IGkrKykKLQkJCXByaW50aygiJWQuIiwgbmFtZVtpXSk7Ci0JCXByaW50aygiXG4iKTsKLQl9Ci1vdXQ6Ci0JcmV0dXJuIC1FTk9TWVM7CisJLyogSWYgbm8gZXJyb3IgcmVhZGluZyB0aGUgcGFyYW1ldGVycyB0aGVuIGp1c3QgLUVOT1NZUyAuLi4gKi8KKwlpZiAoIWVycm9yKQorCQllcnJvciA9IC1FTk9TWVM7CisKKwlyZXR1cm4gZXJyb3I7CiB9CiAKLWludCBzeXNjdGxfc3RyaW5nKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9kYXRhKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgX191c2VyICpuYW1lLCBpbnQgbmxlbiwKIAkJICB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQkgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4pCiB7CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLWludCBzeXNjdGxfaW50dmVjKGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAoraW50IHN5c2N0bF9zdHJpbmcoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAorCQkgIHZvaWQgX191c2VyICpvbGR2YWwsIHNpemVfdCBfX3VzZXIgKm9sZGxlbnAsCisJCSAgdm9pZCBfX3VzZXIgKm5ld3ZhbCwgc2l6ZV90IG5ld2xlbikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworaW50IHN5c2N0bF9pbnR2ZWMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgc3lzY3RsX2ppZmZpZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewogCXJldHVybiAtRU5PU1lTOwogfQogCi1pbnQgc3lzY3RsX21zX2ppZmZpZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IF9fdXNlciAqbmFtZSwgaW50IG5sZW4sCitpbnQgc3lzY3RsX21zX2ppZmZpZXMoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQl2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCQl2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMjU5OSw2ICsyNjAzLDMzIEBACiAKICNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgKi8KIAorc3RhdGljIGludCBkZXByZWNhdGVkX3N5c2N0bF93YXJuaW5nKHN0cnVjdCBfX3N5c2N0bF9hcmdzICphcmdzKQoreworCXN0YXRpYyBpbnQgbXNnX2NvdW50OworCWludCBuYW1lW0NUTF9NQVhOQU1FXTsKKwlpbnQgaTsKKworCS8qIFJlYWQgaW4gdGhlIHN5c2N0bCBuYW1lIGZvciBiZXR0ZXIgZGVidWcgbWVzc2FnZSBsb2dnaW5nICovCisJZm9yIChpID0gMDsgaSA8IGFyZ3MtPm5sZW47IGkrKykKKwkJaWYgKGdldF91c2VyKG5hbWVbaV0sIGFyZ3MtPm5hbWUgKyBpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJLyogSWdub3JlIGFjY2Vzc2VzIHRvIGtlcm5lbC52ZXJzaW9uICovCisJaWYgKChhcmdzLT5ubGVuID09IDIpICYmIChuYW1lWzBdID09IENUTF9LRVJOKSAmJiAobmFtZVsxXSA9PSBLRVJOX1ZFUlNJT04pKQorCQlyZXR1cm4gMDsKKworCWlmIChtc2dfY291bnQgPCA1KSB7CisJCW1zZ19jb3VudCsrOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkid2FybmluZzogcHJvY2VzcyBgJXMnIHVzZWQgdGhlIGRlcHJlY2F0ZWQgc3lzY3RsICIKKwkJCSJzeXN0ZW0gY2FsbCB3aXRoICIsIGN1cnJlbnQtPmNvbW0pOworCQlmb3IgKGkgPSAwOyBpIDwgYXJncy0+bmxlbjsgaSsrKQorCQkJcHJpbnRrKCIlZC4iLCBuYW1lW2ldKTsKKwkJcHJpbnRrKCJcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIE5vIHNlbnNlIHB1dHRpbmcgdGhpcyBhZnRlciBlYWNoIHN5bWJvbCBkZWZpbml0aW9uLCB0d2ljZSwKICAqIGV4Y2VwdGlvbiBncmFudGVkIDotKQpAQCAtMjYxNiw0ICsyNjQ3LDUgQEAKIEVYUE9SVF9TWU1CT0woc3lzY3RsX2ppZmZpZXMpOwogRVhQT1JUX1NZTUJPTChzeXNjdGxfbXNfamlmZmllcyk7CiBFWFBPUlRfU1lNQk9MKHN5c2N0bF9zdHJpbmcpOworRVhQT1JUX1NZTUJPTChzeXNjdGxfZGF0YSk7CiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfY2hlY2suYyBiL2tlcm5lbC9zeXNjdGxfY2hlY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzllZjVhCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3N5c2N0bF9jaGVjay5jCkBAIC0wLDAgKzEsMTU4OCBAQAorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KKyNpbmNsdWRlICIuLi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaCIKKyNpbmNsdWRlICIuLi9mcy94ZnMvbGludXgtMi42L3hmc19zeXNjdGwuaCIKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvZGVidWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KKworc3RydWN0IHRyYW5zX2N0bF90YWJsZSB7CisJaW50CQkJY3RsX25hbWU7CisJY29uc3QgY2hhcgkJKnByb2NuYW1lOworCXN0cnVjdCB0cmFuc19jdGxfdGFibGUJKmNoaWxkOworfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfcmFuZG9tX3RhYmxlW10gPSB7CisJeyBSQU5ET01fUE9PTFNJWkUsCSJwb29sc2l6ZSIgfSwKKwl7IFJBTkRPTV9FTlRST1BZX0NPVU5ULAkiZW50cm9weV9hdmFpbCIgfSwKKwl7IFJBTkRPTV9SRUFEX1RIUkVTSCwJInJlYWRfd2FrZXVwX3RocmVzaG9sZCIgfSwKKwl7IFJBTkRPTV9XUklURV9USFJFU0gsCSJ3cml0ZV93YWtldXBfdGhyZXNob2xkIiB9LAorCXsgUkFORE9NX0JPT1RfSUQsCSJib290X2lkIiB9LAorCXsgUkFORE9NX1VVSUQsCQkidXVpZCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfcHR5X3RhYmxlW10gPSB7CisJeyBQVFlfTUFYLAkJIm1heCIgfSwKKwl7IFBUWV9OUiwJCSJuciIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfa2Vybl90YWJsZVtdID0geworCXsgS0VSTl9PU1RZUEUsCQkJIm9zdHlwZSIgfSwKKwl7IEtFUk5fT1NSRUxFQVNFLAkJIm9zcmVsZWFzZSIgfSwKKwkvKiBLRVJOX09TUkVWIG5vdCB1c2VkICovCisJeyBLRVJOX1ZFUlNJT04sCQkJInZlcnNpb24iIH0sCisJLyogS0VSTl9TRUNVUkVNQVNLIG5vdCB1c2VkICovCisJLyogS0VSTl9QUk9GIG5vdCB1c2VkICovCisJeyBLRVJOX05PREVOQU1FLAkJImhvc3RuYW1lIiB9LAorCXsgS0VSTl9ET01BSU5OQU1FLAkJImRvbWFpbm5hbWUiIH0sCisKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfQ0FQQUJJTElUSUVTCisJeyBLRVJOX0NBUF9CU0VULAkJImNhcC1ib3VuZCIgfSwKKyNlbmRpZiAvKiBkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyAqLworCisJeyBLRVJOX1BBTklDLAkJCSJwYW5pYyIgfSwKKwl7IEtFUk5fUkVBTFJPT1RERVYsCQkicmVhbC1yb290LWRldiIgfSwKKworCXsgS0VSTl9TUEFSQ19SRUJPT1QsCQkicmVib290LWNtZCIgfSwKKwl7IEtFUk5fQ1RMQUxUREVMLAkJImN0cmwtYWx0LWRlbCIgfSwKKwl7IEtFUk5fUFJJTlRLLAkJCSJwcmludGsiIH0sCisKKwkvKiBLRVJOX05BTUVUUkFOUyBub3QgdXNlZCAqLworCS8qIEtFUk5fUFBDX0hUQUJSRUNMQUlNIG5vdCB1c2VkICovCisJLyogS0VSTl9QUENfWkVST1BBR0VEIG5vdCB1c2VkICovCisJeyBLRVJOX1BQQ19QT1dFUlNBVkVfTkFQLAkicG93ZXJzYXZlLW5hcCIgfSwKKworCXsgS0VSTl9NT0RQUk9CRSwJCSJtb2Rwcm9iZSIgfSwKKwl7IEtFUk5fU0dfQklHX0JVRkYsCQkic2ctYmlnLWJ1ZmYiIH0sCisJeyBLRVJOX0FDQ1QsCQkJImFjY3QiIH0sCisJeyBLRVJOX1BQQ19MMkNSLAkJImwyY3IiIH0sCisKKwkvKiBLRVJOX1JUU0lHTlIgbm90IHVzZWQgKi8KKwkvKiBLRVJOX1JUU0lHTUFYIG5vdCB1c2VkICovCisKKwl7IEtFUk5fU0hNTUFYLAkJCSJzaG1tYXgiIH0sCisJeyBLRVJOX01TR01BWCwJCQkibXNnbWF4IiB9LAorCXsgS0VSTl9NU0dNTkIsCQkJIm1zZ21uYiIgfSwKKwkvKiBLRVJOX01TR1BPT0wgbm90IHVzZWQqLworCXsgS0VSTl9TWVNSUSwJCQkic3lzcnEiIH0sCisJeyBLRVJOX01BWF9USFJFQURTLAkJInRocmVhZHMtbWF4IiB9LAorCXsgS0VSTl9SQU5ET00sCQkJInJhbmRvbSIsCXRyYW5zX3JhbmRvbV90YWJsZSB9LAorCXsgS0VSTl9TSE1BTEwsCQkJInNobWFsbCIgfSwKKwl7IEtFUk5fTVNHTU5JLAkJCSJtc2dtbmkiIH0sCisJeyBLRVJOX1NFTSwJCQkic2VtIiB9LAorCXsgS0VSTl9TUEFSQ19TVE9QX0EsCQkic3RvcC1hIiB9LAorCXsgS0VSTl9TSE1NTkksCQkJInNobW1uaSIgfSwKKworCXsgS0VSTl9PVkVSRkxPV1VJRCwJCSJvdmVyZmxvd3VpZCIgfSwKKwl7IEtFUk5fT1ZFUkZMT1dHSUQsCQkib3ZlcmZsb3dnaWQiIH0sCisKKwl7IEtFUk5fSE9UUExVRywJCQkiaG90cGx1ZyIsIH0sCisJeyBLRVJOX0lFRUVfRU1VTEFUSU9OX1dBUk5JTkdTLAkiaWVlZV9lbXVsYXRpb25fd2FybmluZ3MiIH0sCisKKwl7IEtFUk5fUzM5MF9VU0VSX0RFQlVHX0xPR0dJTkcsCSJ1c2VycHJvY2Vzc19kZWJ1ZyIgfSwKKwl7IEtFUk5fQ09SRV9VU0VTX1BJRCwJCSJjb3JlX3VzZXNfcGlkIiB9LAorCXsgS0VSTl9UQUlOVEVELAkJCSJ0YWludGVkIiB9LAorCXsgS0VSTl9DQURQSUQsCQkJImNhZF9waWQiIH0sCisJeyBLRVJOX1BJRE1BWCwJCQkicGlkX21heCIgfSwKKwl7IEtFUk5fQ09SRV9QQVRURVJOLAkJImNvcmVfcGF0dGVybiIgfSwKKwl7IEtFUk5fUEFOSUNfT05fT09QUywJCSJwYW5pY19vbl9vb3BzIiB9LAorCXsgS0VSTl9IUFBBX1BXUlNXLAkJInNvZnQtcG93ZXIiIH0sCisJeyBLRVJOX0hQUEFfVU5BTElHTkVELAkJInVuYWxpZ25lZC10cmFwIiB9LAorCisJeyBLRVJOX1BSSU5US19SQVRFTElNSVQsCSJwcmludGtfcmF0ZWxpbWl0IiB9LAorCXsgS0VSTl9QUklOVEtfUkFURUxJTUlUX0JVUlNULAkicHJpbnRrX3JhdGVsaW1pdF9idXJzdCIgfSwKKworCXsgS0VSTl9QVFksCQkJInB0eSIsCQl0cmFuc19wdHlfdGFibGUgfSwKKwl7IEtFUk5fTkdST1VQU19NQVgsCQkibmdyb3Vwc19tYXgiIH0sCisJeyBLRVJOX1NQQVJDX1NDT05TX1BXUk9GRiwJInNjb25zX3Bvd2Vyb2ZmIiB9LAorCXsgS0VSTl9IWl9USU1FUiwJCSJoel90aW1lciIgfSwKKwl7IEtFUk5fVU5LTk9XTl9OTUlfUEFOSUMsCSJ1bmtub3duX25taV9wYW5pYyIgfSwKKwl7IEtFUk5fQk9PVExPQURFUl9UWVBFLAkJImJvb3Rsb2FkZXJfdHlwZSIgfSwKKwl7IEtFUk5fUkFORE9NSVpFLAkJInJhbmRvbWl6ZV92YV9zcGFjZSIgfSwKKworCXsgS0VSTl9TUElOX1JFVFJZLAkJInNwaW5fcmV0cnkiIH0sCisJeyBLRVJOX0FDUElfVklERU9fRkxBR1MsCSJhY3BpX3ZpZGVvX2ZsYWdzIiB9LAorCXsgS0VSTl9JQTY0X1VOQUxJR05FRCwJCSJpZ25vcmUtdW5hbGlnbmVkLXVzZXJ0cmFwIiB9LAorCXsgS0VSTl9DT01QQVRfTE9HLAkJImNvbXBhdC1sb2ciIH0sCisJeyBLRVJOX01BWF9MT0NLX0RFUFRILAkJIm1heF9sb2NrX2RlcHRoIiB9LAorCXsgS0VSTl9OTUlfV0FUQ0hET0csCQkibm1pX3dhdGNoZG9nIiB9LAorCXsgS0VSTl9QQU5JQ19PTl9OTUksCQkicGFuaWNfb25fdW5yZWNvdmVyZWRfbm1pIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc192bV90YWJsZVtdID0geworCXsgVk1fT1ZFUkNPTU1JVF9NRU1PUlksCQkib3ZlcmNvbW1pdF9tZW1vcnkiIH0sCisJeyBWTV9QQUdFX0NMVVNURVIsCQkicGFnZS1jbHVzdGVyIiB9LAorCXsgVk1fRElSVFlfQkFDS0dST1VORCwJCSJkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvIiB9LAorCXsgVk1fRElSVFlfUkFUSU8sCQkiZGlydHlfcmF0aW8iIH0sCisJeyBWTV9ESVJUWV9XQl9DUywJCSJkaXJ0eV93cml0ZWJhY2tfY2VudGlzZWNzIiB9LAorCXsgVk1fRElSVFlfRVhQSVJFX0NTLAkJImRpcnR5X2V4cGlyZV9jZW50aXNlY3MiIH0sCisJeyBWTV9OUl9QREZMVVNIX1RIUkVBRFMsCSJucl9wZGZsdXNoX3RocmVhZHMiIH0sCisJeyBWTV9PVkVSQ09NTUlUX1JBVElPLAkJIm92ZXJjb21taXRfcmF0aW8iIH0sCisJLyogVk1fUEFHRUJVRiB1bnVzZWQgKi8KKwl7IFZNX0hVR0VUTEJfUEFHRVMsCQkibnJfaHVnZXBhZ2VzIiB9LAorCXsgVk1fU1dBUFBJTkVTUywJCSJzd2FwcGluZXNzIiB9LAorCXsgVk1fTE9XTUVNX1JFU0VSVkVfUkFUSU8sCSJsb3dtZW1fcmVzZXJ2ZV9yYXRpbyIgfSwKKwl7IFZNX01JTl9GUkVFX0tCWVRFUywJCSJtaW5fZnJlZV9rYnl0ZXMiIH0sCisJeyBWTV9NQVhfTUFQX0NPVU5ULAkJIm1heF9tYXBfY291bnQiIH0sCisJeyBWTV9MQVBUT1BfTU9ERSwJCSJsYXB0b3BfbW9kZSIgfSwKKwl7IFZNX0JMT0NLX0RVTVAsCQkiYmxvY2tfZHVtcCIgfSwKKwl7IFZNX0hVR0VUTEJfR1JPVVAsCQkiaHVnZXRsYl9zaG1fZ3JvdXAiIH0sCisJeyBWTV9WRlNfQ0FDSEVfUFJFU1NVUkUsCSJ2ZnNfY2FjaGVfcHJlc3N1cmUiIH0sCisJeyBWTV9MRUdBQ1lfVkFfTEFZT1VULAkJImxlZ2FjeV92YV9sYXlvdXQiIH0sCisJLyogVk1fU1dBUF9UT0tFTl9USU1FT1VUIHVudXNlZCAqLworCXsgVk1fRFJPUF9QQUdFQ0FDSEUsCQkiZHJvcF9jYWNoZXMiIH0sCisJeyBWTV9QRVJDUFVfUEFHRUxJU1RfRlJBQ1RJT04sCSJwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24iIH0sCisJeyBWTV9aT05FX1JFQ0xBSU1fTU9ERSwJCSJ6b25lX3JlY2xhaW1fbW9kZSIgfSwKKwl7IFZNX01JTl9VTk1BUFBFRCwJCSJtaW5fdW5tYXBwZWRfcmF0aW8iIH0sCisJeyBWTV9QQU5JQ19PTl9PT00sCQkicGFuaWNfb25fb29tIiB9LAorCXsgVk1fVkRTT19FTkFCTEVELAkJInZkc29fZW5hYmxlZCIgfSwKKwl7IFZNX01JTl9TTEFCLAkJCSJtaW5fc2xhYl9yYXRpbyIgfSwKKwl7IFZNX0NNTV9QQUdFUywJCQkiY21tX3BhZ2VzIiB9LAorCXsgVk1fQ01NX1RJTUVEX1BBR0VTLAkJImNtbV90aW1lZF9wYWdlcyIgfSwKKwl7IFZNX0NNTV9USU1FT1VULAkJImNtbV90aW1lb3V0IiB9LAorCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9jb3JlX3RhYmxlW10gPSB7CisJeyBORVRfQ09SRV9XTUVNX01BWCwJCSJ3bWVtX21heCIgfSwKKwl7IE5FVF9DT1JFX1JNRU1fTUFYLAkJInJtZW1fbWF4IiB9LAorCXsgTkVUX0NPUkVfV01FTV9ERUZBVUxULAkid21lbV9kZWZhdWx0IiB9LAorCXsgTkVUX0NPUkVfUk1FTV9ERUZBVUxULAkicm1lbV9kZWZhdWx0IiB9LAorCS8qIE5FVF9DT1JFX0RFU1RST1lfREVMQVkgdW51c2VkICovCisJeyBORVRfQ09SRV9NQVhfQkFDS0xPRywJCSJuZXRkZXZfbWF4X2JhY2tsb2ciIH0sCisJLyogTkVUX0NPUkVfRkFTVFJPVVRFIHVudXNlZCAqLworCXsgTkVUX0NPUkVfTVNHX0NPU1QsCQkibWVzc2FnZV9jb3N0IiB9LAorCXsgTkVUX0NPUkVfTVNHX0JVUlNULAkJIm1lc3NhZ2VfYnVyc3QiIH0sCisJeyBORVRfQ09SRV9PUFRNRU1fTUFYLAkJIm9wdG1lbV9tYXgiIH0sCisJLyogTkVUX0NPUkVfSE9UX0xJU1RfTEVOR1RIIHVudXNlZCAqLworCS8qIE5FVF9DT1JFX0RJVkVSVF9WRVJTSU9OIHVudXNlZCAqLworCS8qIE5FVF9DT1JFX05PX0NPTkdfVEhSRVNIIHVudXNlZCAqLworCS8qIE5FVF9DT1JFX05PX0NPTkcgdW51c2VkICovCisJLyogTkVUX0NPUkVfTE9fQ09ORyB1bnVzZWQgKi8KKwkvKiBORVRfQ09SRV9NT0RfQ09ORyB1bnVzZWQgKi8KKwl7IE5FVF9DT1JFX0RFVl9XRUlHSFQsCQkiZGV2X3dlaWdodCIgfSwKKwl7IE5FVF9DT1JFX1NPTUFYQ09OTiwJCSJzb21heGNvbm4iIH0sCisJeyBORVRfQ09SRV9CVURHRVQsCQkibmV0ZGV2X2J1ZGdldCIgfSwKKwl7IE5FVF9DT1JFX0FFVkVOVF9FVElNRSwJInhmcm1fYWV2ZW50X2V0aW1lIiB9LAorCXsgTkVUX0NPUkVfQUVWRU5UX1JTRVFUSCwJInhmcm1fYWV2ZW50X3JzZXF0aCIgfSwKKwl7IE5FVF9DT1JFX1dBUk5JTkdTLAkJIndhcm5pbmdzIiB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X3VuaXhfdGFibGVbXSA9IHsKKwkvKiBORVRfVU5JWF9ERVNUUk9ZX0RFTEFZIHVudXNlZCAqLworCS8qIE5FVF9VTklYX0RFTEVURV9ERUxBWSB1bnVzZWQgKi8KKwl7IE5FVF9VTklYX01BWF9ER1JBTV9RTEVOLAkibWF4X2RncmFtX3FsZW4iIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9pcHY0X3JvdXRlX3RhYmxlW10gPSB7CisJeyBORVRfSVBWNF9ST1VURV9GTFVTSCwJCQkiZmx1c2giIH0sCisJeyBORVRfSVBWNF9ST1VURV9NSU5fREVMQVksCQkibWluX2RlbGF5IiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfTUFYX0RFTEFZLAkJIm1heF9kZWxheSIgfSwKKwl7IE5FVF9JUFY0X1JPVVRFX0dDX1RIUkVTSCwJCSJnY190aHJlc2giIH0sCisJeyBORVRfSVBWNF9ST1VURV9NQVhfU0laRSwJCSJtYXhfc2l6ZSIgfSwKKwl7IE5FVF9JUFY0X1JPVVRFX0dDX01JTl9JTlRFUlZBTCwJImdjX21pbl9pbnRlcnZhbCIgfSwKKwl7IE5FVF9JUFY0X1JPVVRFX0dDX1RJTUVPVVQsCQkiZ2NfdGltZW91dCIgfSwKKwl7IE5FVF9JUFY0X1JPVVRFX0dDX0lOVEVSVkFMLAkJImdjX2ludGVydmFsIiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTE9BRCwJCSJyZWRpcmVjdF9sb2FkIiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTlVNQkVSLAkicmVkaXJlY3RfbnVtYmVyIiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfU0lMRU5DRSwJInJlZGlyZWN0X3NpbGVuY2UiIH0sCisJeyBORVRfSVBWNF9ST1VURV9FUlJPUl9DT1NULAkJImVycm9yX2Nvc3QiIH0sCisJeyBORVRfSVBWNF9ST1VURV9FUlJPUl9CVVJTVCwJCSJlcnJvcl9idXJzdCIgfSwKKwl7IE5FVF9JUFY0X1JPVVRFX0dDX0VMQVNUSUNJVFksCQkiZ2NfZWxhc3RpY2l0eSIgfSwKKwl7IE5FVF9JUFY0X1JPVVRFX01UVV9FWFBJUkVTLAkJIm10dV9leHBpcmVzIiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfTUlOX1BNVFUsCQkibWluX3BtdHUiIH0sCisJeyBORVRfSVBWNF9ST1VURV9NSU5fQURWTVNTLAkJIm1pbl9hZHZfbXNzIiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfU0VDUkVUX0lOVEVSVkFMLAkic2VjcmV0X2ludGVydmFsIiB9LAorCXsgTkVUX0lQVjRfUk9VVEVfR0NfTUlOX0lOVEVSVkFMX01TLAkiZ2NfbWluX2ludGVydmFsX21zIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB2NF9jb25mX3ZhcnNfdGFibGVbXSA9IHsKKwl7IE5FVF9JUFY0X0NPTkZfRk9SV0FSRElORywJCSJmb3J3YXJkaW5nIiB9LAorCXsgTkVUX0lQVjRfQ09ORl9NQ19GT1JXQVJESU5HLAkJIm1jX2ZvcndhcmRpbmciIH0sCisKKwl7IE5FVF9JUFY0X0NPTkZfUFJPWFlfQVJQLAkJInByb3h5X2FycCIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElSRUNUUywJImFjY2VwdF9yZWRpcmVjdHMiIH0sCisJeyBORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFMsCSJzZWN1cmVfcmVkaXJlY3RzIiB9LAorCXsgTkVUX0lQVjRfQ09ORl9TRU5EX1JFRElSRUNUUywJCSJzZW5kX3JlZGlyZWN0cyIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfU0hBUkVEX01FRElBLAkJInNoYXJlZF9tZWRpYSIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfUlBfRklMVEVSLAkJInJwX2ZpbHRlciIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSwJImFjY2VwdF9zb3VyY2Vfcm91dGUiIH0sCisJeyBORVRfSVBWNF9DT05GX0JPT1RQX1JFTEFZLAkJImJvb3RwX3JlbGF5IiB9LAorCXsgTkVUX0lQVjRfQ09ORl9MT0dfTUFSVElBTlMsCQkibG9nX21hcnRpYW5zIiB9LAorCXsgTkVUX0lQVjRfQ09ORl9UQUcsCQkJInRhZyIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfQVJQRklMVEVSLAkJImFycF9maWx0ZXIiIH0sCisJeyBORVRfSVBWNF9DT05GX01FRElVTV9JRCwJCSJtZWRpdW1faWQiIH0sCisJeyBORVRfSVBWNF9DT05GX05PWEZSTSwJCQkiZGlzYWJsZV94ZnJtIiB9LAorCXsgTkVUX0lQVjRfQ09ORl9OT1BPTElDWSwJCSJkaXNhYmxlX3BvbGljeSIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfRk9SQ0VfSUdNUF9WRVJTSU9OLAkiZm9yY2VfaWdtcF92ZXJzaW9uIiB9LAorCisJeyBORVRfSVBWNF9DT05GX0FSUF9BTk5PVU5DRSwJCSJhcnBfYW5ub3VuY2UiIH0sCisJeyBORVRfSVBWNF9DT05GX0FSUF9JR05PUkUsCQkiYXJwX2lnbm9yZSIgfSwKKwl7IE5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUywJInByb21vdGVfc2Vjb25kYXJpZXMiIH0sCisJeyBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQsCQkiYXJwX2FjY2VwdCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X2lwdjRfY29uZl90YWJsZVtdID0geworCXsgTkVUX1BST1RPX0NPTkZfQUxMLAkJImFsbCIsCQl0cmFuc19uZXRfaXB2NF9jb25mX3ZhcnNfdGFibGUgfSwKKwl7IE5FVF9QUk9UT19DT05GX0RFRkFVTFQsCSJkZWZhdWx0IiwJdHJhbnNfbmV0X2lwdjRfY29uZl92YXJzX3RhYmxlIH0sCisJeyAwLCBOVUxMLCB0cmFuc19uZXRfaXB2NF9jb25mX3ZhcnNfdGFibGUgfSwKKwl7fQorfTsKKworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB2NF92c190YWJsZVtdID0geworCXsgTkVUX0lQVjRfVlNfQU1FTVRIUkVTSCwJImFtZW10aHJlc2giIH0sCisJeyBORVRfSVBWNF9WU19ERUJVR19MRVZFTCwJImRlYnVnX2xldmVsIiB9LAorCXsgTkVUX0lQVjRfVlNfQU1EUk9QUkFURSwJImFtX2Ryb3ByYXRlIiB9LAorCXsgTkVUX0lQVjRfVlNfRFJPUF9FTlRSWSwJImRyb3BfZW50cnkiIH0sCisJeyBORVRfSVBWNF9WU19EUk9QX1BBQ0tFVCwJImRyb3BfcGFja2V0IiB9LAorCXsgTkVUX0lQVjRfVlNfU0VDVVJFX1RDUCwJInNlY3VyZV90Y3AiIH0sCisJeyBORVRfSVBWNF9WU19UT19FUywJCSJ0aW1lb3V0X2VzdGFibGlzaGVkIiB9LAorCXsgTkVUX0lQVjRfVlNfVE9fU1MsCQkidGltZW91dF9zeW5zZW50IiB9LAorCXsgTkVUX0lQVjRfVlNfVE9fU1IsCQkidGltZW91dF9zeW5yZWN2IiB9LAorCXsgTkVUX0lQVjRfVlNfVE9fRlcsCQkidGltZW91dF9maW53YWl0IiB9LAorCXsgTkVUX0lQVjRfVlNfVE9fVFcsCQkidGltZW91dF90aW1ld2FpdCIgfSwKKwl7IE5FVF9JUFY0X1ZTX1RPX0NMLAkJInRpbWVvdXRfY2xvc2UiIH0sCisJeyBORVRfSVBWNF9WU19UT19DVywJCSJ0aW1lb3V0X2Nsb3Nld2FpdCIgfSwKKwl7IE5FVF9JUFY0X1ZTX1RPX0xBLAkJInRpbWVvdXRfbGFzdGFjayIgfSwKKwl7IE5FVF9JUFY0X1ZTX1RPX0xJLAkJInRpbWVvdXRfbGlzdGVuIiB9LAorCXsgTkVUX0lQVjRfVlNfVE9fU0EsCQkidGltZW91dF9zeW5hY2siIH0sCisJeyBORVRfSVBWNF9WU19UT19VRFAsCQkidGltZW91dF91ZHAiIH0sCisJeyBORVRfSVBWNF9WU19UT19JQ01QLAkJInRpbWVvdXRfaWNtcCIgfSwKKwl7IE5FVF9JUFY0X1ZTX0NBQ0hFX0JZUEFTUywJImNhY2hlX2J5cGFzcyIgfSwKKwl7IE5FVF9JUFY0X1ZTX0VYUElSRV9OT0RFU1RfQ09OTiwJImV4cGlyZV9ub2Rlc3RfY29ubiIgfSwKKwl7IE5FVF9JUFY0X1ZTX0VYUElSRV9RVUlFU0NFTlRfVEVNUExBVEUsCSJleHBpcmVfcXVpZXNjZW50X3RlbXBsYXRlIiB9LAorCXsgTkVUX0lQVjRfVlNfU1lOQ19USFJFU0hPTEQsCQkic3luY190aHJlc2hvbGQiIH0sCisJeyBORVRfSVBWNF9WU19OQVRfSUNNUF9TRU5ELAkibmF0X2ljbXBfc2VuZCIgfSwKKwl7IE5FVF9JUFY0X1ZTX0xCTENfRVhQSVJFLAkJImxibGNfZXhwaXJhdGlvbiIgfSwKKwl7IE5FVF9JUFY0X1ZTX0xCTENSX0VYUElSRSwJCSJsYmxjcl9leHBpcmF0aW9uIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbmVpZ2hfdmFyc190YWJsZVtdID0geworCXsgTkVUX05FSUdIX01DQVNUX1NPTElDSVQsCSJtY2FzdF9zb2xpY2l0IiB9LAorCXsgTkVUX05FSUdIX1VDQVNUX1NPTElDSVQsCSJ1Y2FzdF9zb2xpY2l0IiB9LAorCXsgTkVUX05FSUdIX0FQUF9TT0xJQ0lULAkiYXBwX3NvbGljaXQiIH0sCisJeyBORVRfTkVJR0hfUkVUUkFOU19USU1FLAkicmV0cmFuc190aW1lIiB9LAorCXsgTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FLAkiYmFzZV9yZWFjaGFibGVfdGltZSIgfSwKKwl7IE5FVF9ORUlHSF9ERUxBWV9QUk9CRV9USU1FLAkiZGVsYXlfZmlyc3RfcHJvYmVfdGltZSIgfSwKKwl7IE5FVF9ORUlHSF9HQ19TVEFMRV9USU1FLAkiZ2Nfc3RhbGVfdGltZSIgfSwKKwl7IE5FVF9ORUlHSF9VTlJFU19RTEVOLAkJInVucmVzX3FsZW4iIH0sCisJeyBORVRfTkVJR0hfUFJPWFlfUUxFTiwJCSJwcm94eV9xbGVuIiB9LAorCXsgTkVUX05FSUdIX0FOWUNBU1RfREVMQVksCSJhbnljYXN0X2RlbGF5IiB9LAorCXsgTkVUX05FSUdIX1BST1hZX0RFTEFZLAkicHJveHlfZGVsYXkiIH0sCisJeyBORVRfTkVJR0hfTE9DS1RJTUUsCQkibG9ja3RpbWUiIH0sCisJeyBORVRfTkVJR0hfR0NfSU5URVJWQUwsCSJnY19pbnRlcnZhbCIgfSwKKwl7IE5FVF9ORUlHSF9HQ19USFJFU0gxLAkJImdjX3RocmVzaDEiIH0sCisJeyBORVRfTkVJR0hfR0NfVEhSRVNIMiwJCSJnY190aHJlc2gyIiB9LAorCXsgTkVUX05FSUdIX0dDX1RIUkVTSDMsCQkiZ2NfdGhyZXNoMyIgfSwKKwl7IE5FVF9ORUlHSF9SRVRSQU5TX1RJTUVfTVMsCSJyZXRyYW5zX3RpbWVfbXMiIH0sCisJeyBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUVfTVMsCSJiYXNlX3JlYWNoYWJsZV90aW1lX21zIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbmVpZ2hfdGFibGVbXSA9IHsKKwl7IE5FVF9QUk9UT19DT05GX0RFRkFVTFQsICJkZWZhdWx0IiwgdHJhbnNfbmV0X25laWdoX3ZhcnNfdGFibGUgfSwKKwl7IDAsIE5VTEwsIHRyYW5zX25ldF9uZWlnaF92YXJzX3RhYmxlIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9pcHY0X25ldGZpbHRlcl90YWJsZVtdID0geworCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX01BWCwJCQkJImlwX2Nvbm50cmFja19tYXgiIH0sCisKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVCwJCSJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfc3luX3NlbnQiIH0sCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1YsCQkiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9yZWN2IiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVELAkiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2VzdGFibGlzaGVkIiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlULAkJImlwX2Nvbm50cmFja190Y3BfdGltZW91dF9maW5fd2FpdCIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlULAkJImlwX2Nvbm50cmFja190Y3BfdGltZW91dF9jbG9zZV93YWl0IiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLLAkJImlwX2Nvbm50cmFja190Y3BfdGltZW91dF9sYXN0X2FjayIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQsCQkiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X3RpbWVfd2FpdCIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRSwJCSJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfY2xvc2UiIH0sCisKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19VRFBfVElNRU9VVCwJCQkiaXBfY29ubnRyYWNrX3VkcF90aW1lb3V0IiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTSwJCSJpcF9jb25udHJhY2tfdWRwX3RpbWVvdXRfc3RyZWFtIiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0lDTVBfVElNRU9VVCwJCQkiaXBfY29ubnRyYWNrX2ljbXBfdGltZW91dCIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQsCQkiaXBfY29ubnRyYWNrX2dlbmVyaWNfdGltZW91dCIgfSwKKworCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0JVQ0tFVFMsCQkJImlwX2Nvbm50cmFja19idWNrZXRzIiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElELAkJCSJpcF9jb25udHJhY2tfbG9nX2ludmFsaWQiIH0sCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlMsCSJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMiIH0sCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX0xPT1NFLAkJCSJpcF9jb25udHJhY2tfdGNwX2xvb3NlIiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9CRV9MSUJFUkFMLAkJCSJpcF9jb25udHJhY2tfdGNwX2JlX2xpYmVyYWwiIH0sCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TLAkJImlwX2Nvbm50cmFja190Y3BfbWF4X3JldHJhbnMiIH0sCisKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ0xPU0VELAkJImlwX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfY2xvc2VkIiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVCwJImlwX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfY29va2llX3dhaXQiIH0sCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9FQ0hPRUQsCSJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQiIH0sCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVELAkiaXBfY29ubnRyYWNrX3NjdHBfdGltZW91dF9lc3RhYmxpc2hlZCIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fU0VOVCwJImlwX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfc2h1dGRvd25fc2VudCIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fUkVDRCwJImlwX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfc2h1dGRvd25fcmVjZCIgfSwKKwl7IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQsCSJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX2Fja19zZW50IiB9LAorCisJeyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfQ09VTlQsCQkiaXBfY29ubnRyYWNrX2NvdW50IiB9LAorCXsgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0NIRUNLU1VNLAkiaXBfY29ubnRyYWNrX2NoZWNrc3VtIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB2NF90YWJsZVtdID0geworCXsgTkVUX0lQVjRfRk9SV0FSRCwJCQkiaXBfZm9yd2FyZCIgfSwKKwl7IE5FVF9JUFY0X0RZTkFERFIsCQkJImlwX2R5bmFkZHIiIH0sCisKKwl7IE5FVF9JUFY0X0NPTkYsCQkiY29uZiIsCQl0cmFuc19uZXRfaXB2NF9jb25mX3RhYmxlIH0sCisJeyBORVRfSVBWNF9ORUlHSCwJCSJuZWlnaCIsCXRyYW5zX25ldF9uZWlnaF90YWJsZSB9LAorCXsgTkVUX0lQVjRfUk9VVEUsCQkicm91dGUiLAl0cmFuc19uZXRfaXB2NF9yb3V0ZV90YWJsZSB9LAorCS8qIE5FVF9JUFY0X0ZJQl9IQVNIIHVudXNlZCAqLworCXsgTkVUX0lQVjRfTkVURklMVEVSLAkJIm5ldGZpbHRlciIsCXRyYW5zX25ldF9pcHY0X25ldGZpbHRlcl90YWJsZSB9LAorCXsgTkVUX0lQVjRfVlMsCQkJInZzIiwJCXRyYW5zX25ldF9pcHY0X3ZzX3RhYmxlIH0sCisKKwl7IE5FVF9JUFY0X1RDUF9USU1FU1RBTVBTLAkJInRjcF90aW1lc3RhbXBzIiB9LAorCXsgTkVUX0lQVjRfVENQX1dJTkRPV19TQ0FMSU5HLAkJInRjcF93aW5kb3dfc2NhbGluZyIgfSwKKwl7IE5FVF9JUFY0X1RDUF9TQUNLLAkJCSJ0Y3Bfc2FjayIgfSwKKwl7IE5FVF9JUFY0X1RDUF9SRVRSQU5TX0NPTExBUFNFLAkidGNwX3JldHJhbnNfY29sbGFwc2UiIH0sCisJeyBORVRfSVBWNF9ERUZBVUxUX1RUTCwJCQkiaXBfZGVmYXVsdF90dGwiIH0sCisJLyogTkVUX0lQVjRfQVVUT0NPTkZJRyB1bnVzZWQgKi8KKwl7IE5FVF9JUFY0X05PX1BNVFVfRElTQywJCSJpcF9ub19wbXR1X2Rpc2MiIH0sCisJeyBORVRfSVBWNF9UQ1BfU1lOX1JFVFJJRVMsCQkidGNwX3N5bl9yZXRyaWVzIiB9LAorCXsgTkVUX0lQVjRfSVBGUkFHX0hJR0hfVEhSRVNILAkJImlwZnJhZ19oaWdoX3RocmVzaCIgfSwKKwl7IE5FVF9JUFY0X0lQRlJBR19MT1dfVEhSRVNILAkJImlwZnJhZ19sb3dfdGhyZXNoIiB9LAorCXsgTkVUX0lQVjRfSVBGUkFHX1RJTUUsCQkJImlwZnJhZ190aW1lIiB9LAorCS8qIE5FVF9JUFY0X1RDUF9NQVhfS0FfUFJPQkVTIHVudXNlZCAqLworCXsgTkVUX0lQVjRfVENQX0tFRVBBTElWRV9USU1FLAkJInRjcF9rZWVwYWxpdmVfdGltZSIgfSwKKwl7IE5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfUFJPQkVTLAkidGNwX2tlZXBhbGl2ZV9wcm9iZXMiIH0sCisJeyBORVRfSVBWNF9UQ1BfUkVUUklFUzEsCQkidGNwX3JldHJpZXMxIiB9LAorCXsgTkVUX0lQVjRfVENQX1JFVFJJRVMyLAkJInRjcF9yZXRyaWVzMiIgfSwKKwl7IE5FVF9JUFY0X1RDUF9GSU5fVElNRU9VVCwJCSJ0Y3BfZmluX3RpbWVvdXQiIH0sCisJLyogTkVUX0lQVjRfSVBfTUFTUV9ERUJVRyB1bnVzZWQgKi8KKwl7IE5FVF9UQ1BfU1lOQ09PS0lFUywJCQkidGNwX3N5bmNvb2tpZXMiIH0sCisJeyBORVRfVENQX1NURFVSRywJCQkidGNwX3N0ZHVyZyIgfSwKKwl7IE5FVF9UQ1BfUkZDMTMzNywJCQkidGNwX3JmYzEzMzciIH0sCisJLyogTkVUX1RDUF9TWU5fVEFJTERST1AgdW51c2VkICovCisJeyBORVRfVENQX01BWF9TWU5fQkFDS0xPRywJCSJ0Y3BfbWF4X3N5bl9iYWNrbG9nIiB9LAorCXsgTkVUX0lQVjRfTE9DQUxfUE9SVF9SQU5HRSwJCSJpcF9sb2NhbF9wb3J0X3JhbmdlIiB9LAorCXsgTkVUX0lQVjRfSUNNUF9FQ0hPX0lHTk9SRV9BTEwsCSJpY21wX2VjaG9faWdub3JlX2FsbCIgfSwKKwl7IE5FVF9JUFY0X0lDTVBfRUNIT19JR05PUkVfQlJPQURDQVNUUywJImljbXBfZWNob19pZ25vcmVfYnJvYWRjYXN0cyIgfSwKKwkvKiBORVRfSVBWNF9JQ01QX1NPVVJDRVFVRU5DSF9SQVRFIHVudXNlZCAqLworCS8qIE5FVF9JUFY0X0lDTVBfREVTVFVOUkVBQ0hfUkFURSB1bnVzZWQgKi8KKwkvKiBORVRfSVBWNF9JQ01QX1RJTUVFWENFRURfUkFURSB1bnVzZWQgKi8KKwkvKiBORVRfSVBWNF9JQ01QX1BBUkFNUFJPQl9SQVRFIHVudXNlZCAqLworCS8qIE5FVF9JUFY0X0lDTVBfRUNIT1JFUExZX1JBVEUgdW51c2VkICovCisJeyBORVRfSVBWNF9JQ01QX0lHTk9SRV9CT0dVU19FUlJPUl9SRVNQT05TRVMsCSJpY21wX2lnbm9yZV9ib2d1c19lcnJvcl9yZXNwb25zZXMiIH0sCisJeyBORVRfSVBWNF9JR01QX01BWF9NRU1CRVJTSElQUywJImlnbXBfbWF4X21lbWJlcnNoaXBzIiB9LAorCXsgTkVUX1RDUF9UV19SRUNZQ0xFLAkJCSJ0Y3BfdHdfcmVjeWNsZSIgfSwKKwkvKiBORVRfSVBWNF9BTFdBWVNfREVGUkFHIHVudXNlZCAqLworCXsgTkVUX0lQVjRfVENQX0tFRVBBTElWRV9JTlRWTCwJCSJ0Y3Bfa2VlcGFsaXZlX2ludHZsIiB9LAorCXsgTkVUX0lQVjRfSU5FVF9QRUVSX1RIUkVTSE9MRCwJCSJpbmV0X3BlZXJfdGhyZXNob2xkIiB9LAorCXsgTkVUX0lQVjRfSU5FVF9QRUVSX01JTlRUTCwJCSJpbmV0X3BlZXJfbWludHRsIiB9LAorCXsgTkVUX0lQVjRfSU5FVF9QRUVSX01BWFRUTCwJCSJpbmV0X3BlZXJfbWF4dHRsIiB9LAorCXsgTkVUX0lQVjRfSU5FVF9QRUVSX0dDX01JTlRJTUUsCSJpbmV0X3BlZXJfZ2NfbWludGltZSIgfSwKKwl7IE5FVF9JUFY0X0lORVRfUEVFUl9HQ19NQVhUSU1FLAkiaW5ldF9wZWVyX2djX21heHRpbWUiIH0sCisJeyBORVRfVENQX09SUEhBTl9SRVRSSUVTLAkJInRjcF9vcnBoYW5fcmV0cmllcyIgfSwKKwl7IE5FVF9UQ1BfQUJPUlRfT05fT1ZFUkZMT1csCQkidGNwX2Fib3J0X29uX292ZXJmbG93IiB9LAorCXsgTkVUX1RDUF9TWU5BQ0tfUkVUUklFUywJCSJ0Y3Bfc3luYWNrX3JldHJpZXMiIH0sCisJeyBORVRfVENQX01BWF9PUlBIQU5TLAkJCSJ0Y3BfbWF4X29ycGhhbnMiIH0sCisJeyBORVRfVENQX01BWF9UV19CVUNLRVRTLAkJInRjcF9tYXhfdHdfYnVja2V0cyIgfSwKKwl7IE5FVF9UQ1BfRkFDSywJCQkJInRjcF9mYWNrIiB9LAorCXsgTkVUX1RDUF9SRU9SREVSSU5HLAkJCSJ0Y3BfcmVvcmRlcmluZyIgfSwKKwl7IE5FVF9UQ1BfRUNOLAkJCQkidGNwX2VjbiIgfSwKKwl7IE5FVF9UQ1BfRFNBQ0ssCQkJInRjcF9kc2FjayIgfSwKKwl7IE5FVF9UQ1BfTUVNLAkJCQkidGNwX21lbSIgfSwKKwl7IE5FVF9UQ1BfV01FTSwJCQkJInRjcF93bWVtIiB9LAorCXsgTkVUX1RDUF9STUVNLAkJCQkidGNwX3JtZW0iIH0sCisJeyBORVRfVENQX0FQUF9XSU4sCQkJInRjcF9hcHBfd2luIiB9LAorCXsgTkVUX1RDUF9BRFZfV0lOX1NDQUxFLAkJInRjcF9hZHZfd2luX3NjYWxlIiB9LAorCXsgTkVUX0lQVjRfTk9OTE9DQUxfQklORCwJCSJpcF9ub25sb2NhbF9iaW5kIiB9LAorCXsgTkVUX0lQVjRfSUNNUF9SQVRFTElNSVQsCQkiaWNtcF9yYXRlbGltaXQiIH0sCisJeyBORVRfSVBWNF9JQ01QX1JBVEVNQVNLLAkJImljbXBfcmF0ZW1hc2siIH0sCisJeyBORVRfVENQX1RXX1JFVVNFLAkJCSJ0Y3BfdHdfcmV1c2UiIH0sCisJeyBORVRfVENQX0ZSVE8sCQkJCSJ0Y3BfZnJ0byIgfSwKKwl7IE5FVF9UQ1BfTE9XX0xBVEVOQ1ksCQkJInRjcF9sb3dfbGF0ZW5jeSIgfSwKKwl7IE5FVF9JUFY0X0lQRlJBR19TRUNSRVRfSU5URVJWQUwsCSJpcGZyYWdfc2VjcmV0X2ludGVydmFsIiB9LAorCXsgTkVUX0lQVjRfSUdNUF9NQVhfTVNGLAkJImlnbXBfbWF4X21zZiIgfSwKKwl7IE5FVF9UQ1BfTk9fTUVUUklDU19TQVZFLAkJInRjcF9ub19tZXRyaWNzX3NhdmUiIH0sCisJLyogTkVUX1RDUF9ERUZBVUxUX1dJTl9TQ0FMRSB1bnVzZWQgKi8KKwl7IE5FVF9UQ1BfTU9ERVJBVEVfUkNWQlVGLAkJInRjcF9tb2RlcmF0ZV9yY3ZidWYiIH0sCisJeyBORVRfVENQX1RTT19XSU5fRElWSVNPUiwJCSJ0Y3BfdHNvX3dpbl9kaXZpc29yIiB9LAorCS8qIE5FVF9UQ1BfQklDX0JFVEEgdW51c2VkICovCisJeyBORVRfSVBWNF9JQ01QX0VSUk9SU19VU0VfSU5CT1VORF9JRkFERFIsCSJpY21wX2Vycm9yc191c2VfaW5ib3VuZF9pZmFkZHIiIH0sCisJeyBORVRfVENQX0NPTkdfQ09OVFJPTCwJCQkidGNwX2Nvbmdlc3Rpb25fY29udHJvbCIgfSwKKwl7IE5FVF9UQ1BfQUJDLAkJCQkidGNwX2FiYyIgfSwKKwl7IE5FVF9JUFY0X0lQRlJBR19NQVhfRElTVCwJCSJpcGZyYWdfbWF4X2Rpc3QiIH0sCisJeyBORVRfVENQX01UVV9QUk9CSU5HLAkJCSJ0Y3BfbXR1X3Byb2JpbmciIH0sCisJeyBORVRfVENQX0JBU0VfTVNTLAkJCSJ0Y3BfYmFzZV9tc3MiIH0sCisJeyBORVRfSVBWNF9UQ1BfV09SS0FST1VORF9TSUdORURfV0lORE9XUywJInRjcF93b3JrYXJvdW5kX3NpZ25lZF93aW5kb3dzIiB9LAorCXsgTkVUX1RDUF9ETUFfQ09QWUJSRUFLLAkJInRjcF9kbWFfY29weWJyZWFrIiB9LAorCXsgTkVUX1RDUF9TTE9XX1NUQVJUX0FGVEVSX0lETEUsCSJ0Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlIiB9LAorCXsgTkVUX0NJUFNPVjRfQ0FDSEVfRU5BQkxFLAkJImNpcHNvX2NhY2hlX2VuYWJsZSIgfSwKKwl7IE5FVF9DSVBTT1Y0X0NBQ0hFX0JVQ0tFVF9TSVpFLAkiY2lwc29fY2FjaGVfYnVja2V0X3NpemUiIH0sCisJeyBORVRfQ0lQU09WNF9SQk1fT1BURk1ULAkJImNpcHNvX3JibV9vcHRmbXQiIH0sCisJeyBORVRfQ0lQU09WNF9SQk1fU1RSSUNUVkFMSUQsCQkiY2lwc29fcmJtX3N0cmljdHZhbGlkIiB9LAorCXsgTkVUX1RDUF9BVkFJTF9DT05HX0NPTlRST0wsCQkidGNwX2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2wiIH0sCisJeyBORVRfVENQX0FMTE9XRURfQ09OR19DT05UUk9MLAkJInRjcF9hbGxvd2VkX2Nvbmdlc3Rpb25fY29udHJvbCIgfSwKKwl7IE5FVF9UQ1BfTUFYX1NTVEhSRVNILAkJCSJ0Y3BfbWF4X3NzdGhyZXNoIiB9LAorCXsgTkVUX1RDUF9GUlRPX1JFU1BPTlNFLAkJInRjcF9mcnRvX3Jlc3BvbnNlIiB9LAorCXsgMjA4OCAvKiBORVRfSVBRX1FNQVggKi8sCQkiaXBfcXVldWVfbWF4bGVuIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB4X3RhYmxlW10gPSB7CisJeyBORVRfSVBYX1BQUk9QX0JST0FEQ0FTVElORywJImlweF9wcHJvcF9icm9hZGNhc3RpbmciIH0sCisJLyogTkVUX0lQWF9GT1JXQVJESU5HIHVudXNlZCAqLworCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfYXRhbGtfdGFibGVbXSA9IHsKKwl7IE5FVF9BVEFMS19BQVJQX0VYUElSWV9USU1FLAkJImFhcnAtZXhwaXJ5LXRpbWUiIH0sCisJeyBORVRfQVRBTEtfQUFSUF9USUNLX1RJTUUsCQkiYWFycC10aWNrLXRpbWUiIH0sCisJeyBORVRfQVRBTEtfQUFSUF9SRVRSQU5TTUlUX0xJTUlULAkiYWFycC1yZXRyYW5zbWl0LWxpbWl0IiB9LAorCXsgTkVUX0FUQUxLX0FBUlBfUkVTT0xWRV9USU1FLAkJImFhcnAtcmVzb2x2ZS10aW1lIiB9LAorCXt9LAorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X25ldHJvbV90YWJsZVtdID0geworCXsgTkVUX05FVFJPTV9ERUZBVUxUX1BBVEhfUVVBTElUWSwJCSJkZWZhdWx0X3BhdGhfcXVhbGl0eSIgfSwKKwl7IE5FVF9ORVRST01fT0JTT0xFU0NFTkNFX0NPVU5UX0lOSVRJQUxJU0VSLAkib2Jzb2xlc2NlbmNlX2NvdW50X2luaXRpYWxpc2VyIiB9LAorCXsgTkVUX05FVFJPTV9ORVRXT1JLX1RUTF9JTklUSUFMSVNFUiwJCSJuZXR3b3JrX3R0bF9pbml0aWFsaXNlciIgfSwKKwl7IE5FVF9ORVRST01fVFJBTlNQT1JUX1RJTUVPVVQsCQkJInRyYW5zcG9ydF90aW1lb3V0IiB9LAorCXsgTkVUX05FVFJPTV9UUkFOU1BPUlRfTUFYSU1VTV9UUklFUywJCSJ0cmFuc3BvcnRfbWF4aW11bV90cmllcyIgfSwKKwl7IE5FVF9ORVRST01fVFJBTlNQT1JUX0FDS05PV0xFREdFX0RFTEFZLAkidHJhbnNwb3J0X2Fja25vd2xlZGdlX2RlbGF5IiB9LAorCXsgTkVUX05FVFJPTV9UUkFOU1BPUlRfQlVTWV9ERUxBWSwJCSJ0cmFuc3BvcnRfYnVzeV9kZWxheSIgfSwKKwl7IE5FVF9ORVRST01fVFJBTlNQT1JUX1JFUVVFU1RFRF9XSU5ET1dfU0laRSwJInRyYW5zcG9ydF9yZXF1ZXN0ZWRfd2luZG93X3NpemUiIH0sCisJeyBORVRfTkVUUk9NX1RSQU5TUE9SVF9OT19BQ1RJVklUWV9USU1FT1VULAkidHJhbnNwb3J0X25vX2FjdGl2aXR5X3RpbWVvdXQiIH0sCisJeyBORVRfTkVUUk9NX1JPVVRJTkdfQ09OVFJPTCwJCQkicm91dGluZ19jb250cm9sIiB9LAorCXsgTkVUX05FVFJPTV9MSU5LX0ZBSUxTX0NPVU5ULAkJCSJsaW5rX2ZhaWxzX2NvdW50IiB9LAorCXsgTkVUX05FVFJPTV9SRVNFVCwJCQkJInJlc2V0IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfYXgyNV90YWJsZVtdID0geworCXsgTkVUX0FYMjVfSVBfREVGQVVMVF9NT0RFLAkiaXBfZGVmYXVsdF9tb2RlIiB9LAorCXsgTkVUX0FYMjVfREVGQVVMVF9NT0RFLAkiYXgyNV9kZWZhdWx0X21vZGUiIH0sCisJeyBORVRfQVgyNV9CQUNLT0ZGX1RZUEUsCSJiYWNrb2ZmX3R5cGUiIH0sCisJeyBORVRfQVgyNV9DT05ORUNUX01PREUsCSJjb25uZWN0X21vZGUiIH0sCisJeyBORVRfQVgyNV9TVEFOREFSRF9XSU5ET1csCSJzdGFuZGFyZF93aW5kb3dfc2l6ZSIgfSwKKwl7IE5FVF9BWDI1X0VYVEVOREVEX1dJTkRPVywJImV4dGVuZGVkX3dpbmRvd19zaXplIiB9LAorCXsgTkVUX0FYMjVfVDFfVElNRU9VVCwJCSJ0MV90aW1lb3V0IiB9LAorCXsgTkVUX0FYMjVfVDJfVElNRU9VVCwJCSJ0Ml90aW1lb3V0IiB9LAorCXsgTkVUX0FYMjVfVDNfVElNRU9VVCwJCSJ0M190aW1lb3V0IiB9LAorCXsgTkVUX0FYMjVfSURMRV9USU1FT1VULAkiaWRsZV90aW1lb3V0IiB9LAorCXsgTkVUX0FYMjVfTjIsCQkJIm1heGltdW1fcmV0cnlfY291bnQiIH0sCisJeyBORVRfQVgyNV9QQUNMRU4sCQkibWF4aW11bV9wYWNrZXRfbGVuZ3RoIiB9LAorCXsgTkVUX0FYMjVfUFJPVE9DT0wsCQkicHJvdG9jb2wiIH0sCisJeyBORVRfQVgyNV9EQU1BX1NMQVZFX1RJTUVPVVQsCSJkYW1hX3NsYXZlX3RpbWVvdXQiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9icmlkZ2VfdGFibGVbXSA9IHsKKwl7IE5FVF9CUklER0VfTkZfQ0FMTF9BUlBUQUJMRVMsCQkiYnJpZGdlLW5mLWNhbGwtYXJwdGFibGVzIiB9LAorCXsgTkVUX0JSSURHRV9ORl9DQUxMX0lQVEFCTEVTLAkJImJyaWRnZS1uZi1jYWxsLWlwdGFibGVzIiB9LAorCXsgTkVUX0JSSURHRV9ORl9DQUxMX0lQNlRBQkxFUywJCSJicmlkZ2UtbmYtY2FsbC1pcDZ0YWJsZXMiIH0sCisJeyBORVRfQlJJREdFX05GX0ZJTFRFUl9WTEFOX1RBR0dFRCwJImJyaWRnZS1uZi1maWx0ZXItdmxhbi10YWdnZWQiIH0sCisJeyBORVRfQlJJREdFX05GX0ZJTFRFUl9QUFBPRV9UQUdHRUQsCSJicmlkZ2UtbmYtZmlsdGVyLXBwcG9lLXRhZ2dlZCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X3Jvc2VfdGFibGVbXSA9IHsKKwl7IE5FVF9ST1NFX1JFU1RBUlRfUkVRVUVTVF9USU1FT1VULAkicmVzdGFydF9yZXF1ZXN0X3RpbWVvdXQiIH0sCisJeyBORVRfUk9TRV9DQUxMX1JFUVVFU1RfVElNRU9VVCwJImNhbGxfcmVxdWVzdF90aW1lb3V0IiB9LAorCXsgTkVUX1JPU0VfUkVTRVRfUkVRVUVTVF9USU1FT1VULAkicmVzZXRfcmVxdWVzdF90aW1lb3V0IiB9LAorCXsgTkVUX1JPU0VfQ0xFQVJfUkVRVUVTVF9USU1FT1VULAkiY2xlYXJfcmVxdWVzdF90aW1lb3V0IiB9LAorCXsgTkVUX1JPU0VfQUNLX0hPTERfQkFDS19USU1FT1VULAkiYWNrbm93bGVkZ2VfaG9sZF9iYWNrX3RpbWVvdXQiIH0sCisJeyBORVRfUk9TRV9ST1VUSU5HX0NPTlRST0wsCQkicm91dGluZ19jb250cm9sIiB9LAorCXsgTkVUX1JPU0VfTElOS19GQUlMX1RJTUVPVVQsCQkibGlua19mYWlsX3RpbWVvdXQiIH0sCisJeyBORVRfUk9TRV9NQVhfVkNTLAkJCSJtYXhpbXVtX3ZpcnR1YWxfY2lyY3VpdHMiIH0sCisJeyBORVRfUk9TRV9XSU5ET1dfU0laRSwJCQkid2luZG93X3NpemUiIH0sCisJeyBORVRfUk9TRV9OT19BQ1RJVklUWV9USU1FT1VULAkJIm5vX2FjdGl2aXR5X3RpbWVvdXQiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9pcHY2X2NvbmZfdmFyX3RhYmxlW10gPSB7CisJeyBORVRfSVBWNl9GT1JXQVJESU5HLAkJCSJmb3J3YXJkaW5nIiB9LAorCXsgTkVUX0lQVjZfSE9QX0xJTUlULAkJCSJob3BfbGltaXQiIH0sCisJeyBORVRfSVBWNl9NVFUsCQkJCSJtdHUiIH0sCisJeyBORVRfSVBWNl9BQ0NFUFRfUkEsCQkJImFjY2VwdF9yYSIgfSwKKwl7IE5FVF9JUFY2X0FDQ0VQVF9SRURJUkVDVFMsCQkiYWNjZXB0X3JlZGlyZWN0cyIgfSwKKwl7IE5FVF9JUFY2X0FVVE9DT05GLAkJCSJhdXRvY29uZiIgfSwKKwl7IE5FVF9JUFY2X0RBRF9UUkFOU01JVFMsCQkiZGFkX3RyYW5zbWl0cyIgfSwKKwl7IE5FVF9JUFY2X1JUUl9TT0xJQ0lUUywJCSJyb3V0ZXJfc29saWNpdGF0aW9ucyIgfSwKKwl7IE5FVF9JUFY2X1JUUl9TT0xJQ0lUX0lOVEVSVkFMLAkicm91dGVyX3NvbGljaXRhdGlvbl9pbnRlcnZhbCIgfSwKKwl7IE5FVF9JUFY2X1JUUl9TT0xJQ0lUX0RFTEFZLAkJInJvdXRlcl9zb2xpY2l0YXRpb25fZGVsYXkiIH0sCisJeyBORVRfSVBWNl9VU0VfVEVNUEFERFIsCQkidXNlX3RlbXBhZGRyIiB9LAorCXsgTkVUX0lQVjZfVEVNUF9WQUxJRF9MRlQsCQkidGVtcF92YWxpZF9sZnQiIH0sCisJeyBORVRfSVBWNl9URU1QX1BSRUZFUkVEX0xGVCwJCSJ0ZW1wX3ByZWZlcmVkX2xmdCIgfSwKKwl7IE5FVF9JUFY2X1JFR0VOX01BWF9SRVRSWSwJCSJyZWdlbl9tYXhfcmV0cnkiIH0sCisJeyBORVRfSVBWNl9NQVhfREVTWU5DX0ZBQ1RPUiwJCSJtYXhfZGVzeW5jX2ZhY3RvciIgfSwKKwl7IE5FVF9JUFY2X01BWF9BRERSRVNTRVMsCQkibWF4X2FkZHJlc3NlcyIgfSwKKwl7IE5FVF9JUFY2X0ZPUkNFX01MRF9WRVJTSU9OLAkJImZvcmNlX21sZF92ZXJzaW9uIiB9LAorCXsgTkVUX0lQVjZfQUNDRVBUX1JBX0RFRlJUUiwJCSJhY2NlcHRfcmFfZGVmcnRyIiB9LAorCXsgTkVUX0lQVjZfQUNDRVBUX1JBX1BJTkZPLAkJImFjY2VwdF9yYV9waW5mbyIgfSwKKwl7IE5FVF9JUFY2X0FDQ0VQVF9SQV9SVFJfUFJFRiwJCSJhY2NlcHRfcmFfcnRyX3ByZWYiIH0sCisJeyBORVRfSVBWNl9SVFJfUFJPQkVfSU5URVJWQUwsCQkicm91dGVyX3Byb2JlX2ludGVydmFsIiB9LAorCXsgTkVUX0lQVjZfQUNDRVBUX1JBX1JUX0lORk9fTUFYX1BMRU4sCSJhY2NlcHRfcmFfcnRfaW5mb19tYXhfcGxlbiIgfSwKKwl7IE5FVF9JUFY2X1BST1hZX05EUCwJCQkicHJveHlfbmRwIiB9LAorCXsgTkVUX0lQVjZfQUNDRVBUX1NPVVJDRV9ST1VURSwJCSJhY2NlcHRfc291cmNlX3JvdXRlIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB2Nl9jb25mX3RhYmxlW10gPSB7CisJeyBORVRfUFJPVE9fQ09ORl9BTEwsCQkiYWxsIiwJdHJhbnNfbmV0X2lwdjZfY29uZl92YXJfdGFibGUgfSwKKwl7IE5FVF9QUk9UT19DT05GX0RFRkFVTFQsIAkiZGVmYXVsdCIsIHRyYW5zX25ldF9pcHY2X2NvbmZfdmFyX3RhYmxlIH0sCisJeyAwLCBOVUxMLCB0cmFuc19uZXRfaXB2Nl9jb25mX3Zhcl90YWJsZSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB2Nl9yb3V0ZV90YWJsZVtdID0geworCXsgTkVUX0lQVjZfUk9VVEVfRkxVU0gsCQkJImZsdXNoIiB9LAorCXsgTkVUX0lQVjZfUk9VVEVfR0NfVEhSRVNILAkJImdjX3RocmVzaCIgfSwKKwl7IE5FVF9JUFY2X1JPVVRFX01BWF9TSVpFLAkJIm1heF9zaXplIiB9LAorCXsgTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMLAkiZ2NfbWluX2ludGVydmFsIiB9LAorCXsgTkVUX0lQVjZfUk9VVEVfR0NfVElNRU9VVCwJCSJnY190aW1lb3V0IiB9LAorCXsgTkVUX0lQVjZfUk9VVEVfR0NfSU5URVJWQUwsCQkiZ2NfaW50ZXJ2YWwiIH0sCisJeyBORVRfSVBWNl9ST1VURV9HQ19FTEFTVElDSVRZLAkJImdjX2VsYXN0aWNpdHkiIH0sCisJeyBORVRfSVBWNl9ST1VURV9NVFVfRVhQSVJFUywJCSJtdHVfZXhwaXJlcyIgfSwKKwl7IE5FVF9JUFY2X1JPVVRFX01JTl9BRFZNU1MsCQkibWluX2Fkdl9tc3MiIH0sCisJeyBORVRfSVBWNl9ST1VURV9HQ19NSU5fSU5URVJWQUxfTVMsCSJnY19taW5faW50ZXJ2YWxfbXMiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9pcHY2X2ljbXBfdGFibGVbXSA9IHsKKwl7IE5FVF9JUFY2X0lDTVBfUkFURUxJTUlULAkicmF0ZWxpbWl0IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXB2Nl90YWJsZVtdID0geworCXsgTkVUX0lQVjZfQ09ORiwJCSJjb25mIiwJCXRyYW5zX25ldF9pcHY2X2NvbmZfdGFibGUgfSwKKwl7IE5FVF9JUFY2X05FSUdILAkJIm5laWdoIiwJdHJhbnNfbmV0X25laWdoX3RhYmxlIH0sCisJeyBORVRfSVBWNl9ST1VURSwJCSJyb3V0ZSIsCXRyYW5zX25ldF9pcHY2X3JvdXRlX3RhYmxlIH0sCisJeyBORVRfSVBWNl9JQ01QLAkJImljbXAiLAkJdHJhbnNfbmV0X2lwdjZfaWNtcF90YWJsZSB9LAorCXsgTkVUX0lQVjZfQklORFY2T05MWSwJCSJiaW5kdjZvbmx5IiB9LAorCXsgTkVUX0lQVjZfSVA2RlJBR19ISUdIX1RIUkVTSCwJImlwNmZyYWdfaGlnaF90aHJlc2giIH0sCisJeyBORVRfSVBWNl9JUDZGUkFHX0xPV19USFJFU0gsCSJpcDZmcmFnX2xvd190aHJlc2giIH0sCisJeyBORVRfSVBWNl9JUDZGUkFHX1RJTUUsCSJpcDZmcmFnX3RpbWUiIH0sCisJeyBORVRfSVBWNl9JUDZGUkFHX1NFQ1JFVF9JTlRFUlZBTCwJImlwNmZyYWdfc2VjcmV0X2ludGVydmFsIiB9LAorCXsgTkVUX0lQVjZfTUxEX01BWF9NU0YsCQkibWxkX21heF9tc2YiIH0sCisJeyAyMDg4IC8qIElQUV9RTUFYICovLAkJImlwNl9xdWV1ZV9tYXhsZW4iIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF94MjVfdGFibGVbXSA9IHsKKwl7IE5FVF9YMjVfUkVTVEFSVF9SRVFVRVNUX1RJTUVPVVQsCSJyZXN0YXJ0X3JlcXVlc3RfdGltZW91dCIgfSwKKwl7IE5FVF9YMjVfQ0FMTF9SRVFVRVNUX1RJTUVPVVQsCQkiY2FsbF9yZXF1ZXN0X3RpbWVvdXQiIH0sCisJeyBORVRfWDI1X1JFU0VUX1JFUVVFU1RfVElNRU9VVCwJInJlc2V0X3JlcXVlc3RfdGltZW91dCIgfSwKKwl7IE5FVF9YMjVfQ0xFQVJfUkVRVUVTVF9USU1FT1VULAkiY2xlYXJfcmVxdWVzdF90aW1lb3V0IiB9LAorCXsgTkVUX1gyNV9BQ0tfSE9MRF9CQUNLX1RJTUVPVVQsCSJhY2tub3dsZWRnZW1lbnRfaG9sZF9iYWNrX3RpbWVvdXQiIH0sCisJeyBORVRfWDI1X0ZPUldBUkQsCQkJIngyNV9mb3J3YXJkIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfdHJfdGFibGVbXSA9IHsKKwl7IE5FVF9UUl9SSUZfVElNRU9VVCwJInJpZl90aW1lb3V0IiB9LAorCXt9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9kZWNuZXRfY29uZl92YXJzW10gPSB7CisJeyBORVRfREVDTkVUX0NPTkZfREVWX0ZPUldBUkRJTkcsCSJmb3J3YXJkaW5nIiB9LAorCXsgTkVUX0RFQ05FVF9DT05GX0RFVl9QUklPUklUWSwJCSJwcmlvcml0eSIgfSwKKwl7IE5FVF9ERUNORVRfQ09ORl9ERVZfVDIsCQkidDIiIH0sCisJeyBORVRfREVDTkVUX0NPTkZfREVWX1QzLAkJInQzIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfZGVjbmV0X2NvbmZbXSA9IHsKKwl7IDAsIE5VTEwsIHRyYW5zX25ldF9kZWNuZXRfY29uZl92YXJzIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX25ldF9kZWNuZXRfdGFibGVbXSA9IHsKKwl7IE5FVF9ERUNORVRfQ09ORiwJCSJjb25mIiwJdHJhbnNfbmV0X2RlY25ldF9jb25mIH0sCisJeyBORVRfREVDTkVUX05PREVfQUREUkVTUywJIm5vZGVfYWRkcmVzcyIgfSwKKwl7IE5FVF9ERUNORVRfTk9ERV9OQU1FLAkJIm5vZGVfbmFtZSIgfSwKKwl7IE5FVF9ERUNORVRfREVGQVVMVF9ERVZJQ0UsCSJkZWZhdWx0X2RldmljZSIgfSwKKwl7IE5FVF9ERUNORVRfVElNRV9XQUlULAkJInRpbWVfd2FpdCIgfSwKKwl7IE5FVF9ERUNORVRfRE5fQ09VTlQsCQkiZG5fY291bnQiIH0sCisJeyBORVRfREVDTkVUX0RJX0NPVU5ULAkJImRpX2NvdW50IiB9LAorCXsgTkVUX0RFQ05FVF9EUl9DT1VOVCwJCSJkcl9jb3VudCIgfSwKKwl7IE5FVF9ERUNORVRfRFNUX0dDX0lOVEVSVkFMLAkiZHN0X2djX2ludGVydmFsIiB9LAorCXsgTkVUX0RFQ05FVF9OT19GQ19NQVhfQ1dORCwJIm5vX2ZjX21heF9jd25kIiB9LAorCXsgTkVUX0RFQ05FVF9NRU0sCQkiZGVjbmV0X21lbSIgfSwKKwl7IE5FVF9ERUNORVRfUk1FTSwJCSJkZWNuZXRfcm1lbSIgfSwKKwl7IE5FVF9ERUNORVRfV01FTSwJCSJkZWNuZXRfd21lbSIgfSwKKwl7IE5FVF9ERUNORVRfREVCVUdfTEVWRUwsCSJkZWJ1ZyIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X3NjdHBfdGFibGVbXSA9IHsKKwl7IE5FVF9TQ1RQX1JUT19JTklUSUFMLAkJInJ0b19pbml0aWFsIiB9LAorCXsgTkVUX1NDVFBfUlRPX01JTiwJCSJydG9fbWluIiB9LAorCXsgTkVUX1NDVFBfUlRPX01BWCwJCSJydG9fbWF4IiB9LAorCXsgTkVUX1NDVFBfUlRPX0FMUEhBLAkJInJ0b19hbHBoYV9leHBfZGl2aXNvciIgfSwKKwl7IE5FVF9TQ1RQX1JUT19CRVRBLAkJInJ0b19iZXRhX2V4cF9kaXZpc29yIiB9LAorCXsgTkVUX1NDVFBfVkFMSURfQ09PS0lFX0xJRkUsCSJ2YWxpZF9jb29raWVfbGlmZSIgfSwKKwl7IE5FVF9TQ1RQX0FTU09DSUFUSU9OX01BWF9SRVRSQU5TLAkiYXNzb2NpYXRpb25fbWF4X3JldHJhbnMiIH0sCisJeyBORVRfU0NUUF9QQVRIX01BWF9SRVRSQU5TLAkicGF0aF9tYXhfcmV0cmFucyIgfSwKKwl7IE5FVF9TQ1RQX01BWF9JTklUX1JFVFJBTlNNSVRTLAkibWF4X2luaXRfcmV0cmFuc21pdHMiIH0sCisJeyBORVRfU0NUUF9IQl9JTlRFUlZBTCwJCSJoYl9pbnRlcnZhbCIgfSwKKwl7IE5FVF9TQ1RQX1BSRVNFUlZFX0VOQUJMRSwJImNvb2tpZV9wcmVzZXJ2ZV9lbmFibGUiIH0sCisJeyBORVRfU0NUUF9NQVhfQlVSU1QsCQkibWF4X2J1cnN0IiB9LAorCXsgTkVUX1NDVFBfQURESVBfRU5BQkxFLAkiYWRkaXBfZW5hYmxlIiB9LAorCXsgTkVUX1NDVFBfUFJTQ1RQX0VOQUJMRSwJInByc2N0cF9lbmFibGUiIH0sCisJeyBORVRfU0NUUF9TTkRCVUZfUE9MSUNZLAkic25kYnVmX3BvbGljeSIgfSwKKwl7IE5FVF9TQ1RQX1NBQ0tfVElNRU9VVCwJInNhY2tfdGltZW91dCIgfSwKKwl7IE5FVF9TQ1RQX1JDVkJVRl9QT0xJQ1ksCSJyY3ZidWZfcG9saWN5IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbGxjX2xsYzJfdGltZW91dF90YWJsZVtdID0geworCXsgTkVUX0xMQzJfQUNLX1RJTUVPVVQsCQkiYWNrIiB9LAorCXsgTkVUX0xMQzJfUF9USU1FT1VULAkJInAiIH0sCisJeyBORVRfTExDMl9SRUpfVElNRU9VVCwJCSJyZWoiIH0sCisJeyBORVRfTExDMl9CVVNZX1RJTUVPVVQsCSJidXN5IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbGxjX3N0YXRpb25fdGFibGVbXSA9IHsKKwl7IE5FVF9MTENfU1RBVElPTl9BQ0tfVElNRU9VVCwJImFja190aW1lb3V0IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbGxjX2xsYzJfdGFibGVbXSA9IHsKKwl7IE5FVF9MTEMyLAkJInRpbWVvdXQiLAl0cmFuc19uZXRfbGxjX2xsYzJfdGltZW91dF90YWJsZSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbGxjX3RhYmxlW10gPSB7CisJeyBORVRfTExDMiwJCSJsbGMyIiwJCXRyYW5zX25ldF9sbGNfbGxjMl90YWJsZSB9LAorCXsgTkVUX0xMQ19TVEFUSU9OLAkic3RhdGlvbiIsCXRyYW5zX25ldF9sbGNfc3RhdGlvbl90YWJsZSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfbmV0ZmlsdGVyX3RhYmxlW10gPSB7CisJeyBORVRfTkZfQ09OTlRSQUNLX01BWCwJCQkJIm5mX2Nvbm50cmFja19tYXgiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5ULAkibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9zZW50IiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDViwJIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9zeW5fcmVjdiIgfSwKKwl7IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRVNUQUJMSVNIRUQsCSJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfZXN0YWJsaXNoZWQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlULAkibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Zpbl93YWl0IiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlULAkibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLLAkibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2xhc3RfYWNrIiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQsCSJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfdGltZV93YWl0IiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRSwJCSJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfY2xvc2UiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VULAkJCSJuZl9jb25udHJhY2tfdWRwX3RpbWVvdXQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTSwJCSJuZl9jb25udHJhY2tfdWRwX3RpbWVvdXRfc3RyZWFtIiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19JQ01QX1RJTUVPVVQsCSJuZl9jb25udHJhY2tfaWNtcF90aW1lb3V0IiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQsCQkibmZfY29ubnRyYWNrX2dlbmVyaWNfdGltZW91dCIgfSwKKwl7IE5FVF9ORl9DT05OVFJBQ0tfQlVDS0VUUywJCQkibmZfY29ubnRyYWNrX2J1Y2tldHMiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElELAkJCSJuZl9jb25udHJhY2tfbG9nX2ludmFsaWQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TLAkibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X21heF9yZXRyYW5zIiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19UQ1BfTE9PU0UsCQkJIm5mX2Nvbm50cmFja190Y3BfbG9vc2UiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1RDUF9CRV9MSUJFUkFMLAkJIm5mX2Nvbm50cmFja190Y3BfYmVfbGliZXJhbCIgfSwKKwl7IE5FVF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TLAkJIm5mX2Nvbm50cmFja190Y3BfbWF4X3JldHJhbnMiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DTE9TRUQsCQkibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jbG9zZWQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVCwJIm5mX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfY29va2llX3dhaXQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VELAkibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jb29raWVfZWNob2VkIiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfRVNUQUJMSVNIRUQsCSJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fU0VOVCwJIm5mX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfc2h1dGRvd25fc2VudCIgfSwKKwl7IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0QsCSJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9BQ0tfU0VOVCwJIm5mX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfc2h1dGRvd25fYWNrX3NlbnQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX0NPVU5ULAkJCSJuZl9jb25udHJhY2tfY291bnQiIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX0lDTVBWNl9USU1FT1VULAkibmZfY29ubnRyYWNrX2ljbXB2Nl90aW1lb3V0IiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19GUkFHNl9USU1FT1VULAkJIm5mX2Nvbm50cmFja19mcmFnNl90aW1lb3V0IiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19GUkFHNl9MT1dfVEhSRVNILAkJIm5mX2Nvbm50cmFja19mcmFnNl9sb3dfdGhyZXNoIiB9LAorCXsgTkVUX05GX0NPTk5UUkFDS19GUkFHNl9ISUdIX1RIUkVTSCwJCSJuZl9jb25udHJhY2tfZnJhZzZfaGlnaF90aHJlc2giIH0sCisJeyBORVRfTkZfQ09OTlRSQUNLX0NIRUNLU1VNLAkJCSJuZl9jb25udHJhY2tfY2hlY2tzdW0iIH0sCisKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X2RjY3BfdGFibGVbXSA9IHsKKwl7IE5FVF9EQ0NQX0RFRkFVTFQsCSJkZWZhdWx0IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19uZXRfaXJkYV90YWJsZVtdID0geworCXsgTkVUX0lSREFfRElTQ09WRVJZLAkJImRpc2NvdmVyeSIgfSwKKwl7IE5FVF9JUkRBX0RFVk5BTUUsCQkiZGV2bmFtZSIgfSwKKwl7IE5FVF9JUkRBX0RFQlVHLAkJImRlYnVnIiB9LAorCXsgTkVUX0lSREFfRkFTVF9QT0xMLAkJImZhc3RfcG9sbF9pbmNyZWFzZSIgfSwKKwl7IE5FVF9JUkRBX0RJU0NPVkVSWV9TTE9UUywJImRpc2NvdmVyeV9zbG90cyIgfSwKKwl7IE5FVF9JUkRBX0RJU0NPVkVSWV9USU1FT1VULAkiZGlzY292ZXJ5X3RpbWVvdXQiIH0sCisJeyBORVRfSVJEQV9TTE9UX1RJTUVPVVQsCSJzbG90X3RpbWVvdXQiIH0sCisJeyBORVRfSVJEQV9NQVhfQkFVRF9SQVRFLAkibWF4X2JhdWRfcmF0ZSIgfSwKKwl7IE5FVF9JUkRBX01JTl9UWF9UVVJOX1RJTUUsCSJtaW5fdHhfdHVybl90aW1lIiB9LAorCXsgTkVUX0lSREFfTUFYX1RYX0RBVEFfU0laRSwJIm1heF90eF9kYXRhX3NpemUiIH0sCisJeyBORVRfSVJEQV9NQVhfVFhfV0lORE9XLAkibWF4X3R4X3dpbmRvdyIgfSwKKwl7IE5FVF9JUkRBX01BWF9OT1JFUExZX1RJTUUsCSJtYXhfbm9yZXBseV90aW1lIiB9LAorCXsgTkVUX0lSREFfV0FSTl9OT1JFUExZX1RJTUUsCSJ3YXJuX25vcmVwbHlfdGltZSIgfSwKKwl7IE5FVF9JUkRBX0xBUF9LRUVQQUxJVkVfVElNRSwJImxhcF9rZWVwYWxpdmVfdGltZSIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfbmV0X3RhYmxlW10gPSB7CisJeyBORVRfQ09SRSwJCSJjb3JlIiwJCXRyYW5zX25ldF9jb3JlX3RhYmxlIH0sCisJLyogTkVUX0VUSEVSIG5vdCB1c2VkICovCisJLyogTkVUXzgwMiBub3QgdXNlZCAqLworCXsgTkVUX1VOSVgsCQkidW5peCIsCQl0cmFuc19uZXRfdW5peF90YWJsZSB9LAorCXsgTkVUX0lQVjQsCQkiaXB2NCIsCQl0cmFuc19uZXRfaXB2NF90YWJsZSB9LAorCXsgTkVUX0lQWCwJCSJpcHgiLAkJdHJhbnNfbmV0X2lweF90YWJsZSB9LAorCXsgTkVUX0FUQUxLLAkJImF0YWxrIiwJdHJhbnNfbmV0X2F0YWxrX3RhYmxlIH0sCisJeyBORVRfTkVUUk9NLAkJIm5ldHJvbSIsCXRyYW5zX25ldF9uZXRyb21fdGFibGUgfSwKKwl7IE5FVF9BWDI1LAkJImF4MjUiLAkJdHJhbnNfbmV0X2F4MjVfdGFibGUgfSwKKwl7IE5FVF9CUklER0UsCQkiYnJpZGdlIiwJdHJhbnNfbmV0X2JyaWRnZV90YWJsZSB9LAorCXsgTkVUX1JPU0UsCQkicm9zZSIsCQl0cmFuc19uZXRfcm9zZV90YWJsZSB9LAorCXsgTkVUX0lQVjYsCQkiaXB2NiIsCQl0cmFuc19uZXRfaXB2Nl90YWJsZSB9LAorCXsgTkVUX1gyNSwJCSJ4MjUiLAkJdHJhbnNfbmV0X3gyNV90YWJsZSB9LAorCXsgTkVUX1RSLAkJInRyIiwJCXRyYW5zX25ldF90cl90YWJsZSB9LAorCXsgTkVUX0RFQ05FVCwJCSJkZWNuZXQiLAl0cmFuc19uZXRfZGVjbmV0X3RhYmxlIH0sCisJLyogIE5FVF9FQ09ORVQgbm90IHVzZWQgKi8KKwl7IE5FVF9TQ1RQLAkJInNjdHAiLAkJdHJhbnNfbmV0X3NjdHBfdGFibGUgfSwKKwl7IE5FVF9MTEMsCQkibGxjIiwJCXRyYW5zX25ldF9sbGNfdGFibGUgfSwKKwl7IE5FVF9ORVRGSUxURVIsCSJuZXRmaWx0ZXIiLAl0cmFuc19uZXRfbmV0ZmlsdGVyX3RhYmxlIH0sCisJeyBORVRfRENDUCwJCSJkY2NwIiwJCXRyYW5zX25ldF9kY2NwX3RhYmxlIH0sCisJeyBORVRfSVJEQSwJCSJpcmRhIiwJCXRyYW5zX25ldF9pcmRhX3RhYmxlIH0sCisJeyAyMDg5LAkJCSJuZl9jb25udHJhY2tfbWF4IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19mc19xdW90YV90YWJsZVtdID0geworCXsgRlNfRFFfTE9PS1VQUywJImxvb2t1cHMiIH0sCisJeyBGU19EUV9EUk9QUywJCSJkcm9wcyIgfSwKKwl7IEZTX0RRX1JFQURTLAkJInJlYWRzIiB9LAorCXsgRlNfRFFfV1JJVEVTLAkJIndyaXRlcyIgfSwKKwl7IEZTX0RRX0NBQ0hFX0hJVFMsCSJjYWNoZV9oaXRzIiB9LAorCXsgRlNfRFFfQUxMT0NBVEVELAkiYWxsb2NhdGVkX2RxdW90cyIgfSwKKwl7IEZTX0RRX0ZSRUUsCQkiZnJlZV9kcXVvdHMiIH0sCisJeyBGU19EUV9TWU5DUywJCSJzeW5jcyIgfSwKKwl7IEZTX0RRX1dBUk5JTkdTLAkid2FybmluZ3MiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2ZzX3hmc190YWJsZVtdID0geworCXsgWEZTX1JFU1RSSUNUX0NIT1dOLAkicmVzdHJpY3RfY2hvd24iIH0sCisJeyBYRlNfU0dJRF9JTkhFUklULAkiaXJpeF9zZ2lkX2luaGVyaXQiIH0sCisJeyBYRlNfU1lNTElOS19NT0RFLAkiaXJpeF9zeW1saW5rX21vZGUiIH0sCisJeyBYRlNfUEFOSUNfTUFTSywJInBhbmljX21hc2siIH0sCisKKwl7IFhGU19FUlJMRVZFTCwJCSJlcnJvcl9sZXZlbCIgfSwKKwl7IFhGU19TWU5DRF9USU1FUiwJInhmc3N5bmNkX2NlbnRpc2VjcyIgfSwKKwl7IFhGU19JTkhFUklUX1NZTkMsCSJpbmhlcml0X3N5bmMiIH0sCisJeyBYRlNfSU5IRVJJVF9OT0RVTVAsCSJpbmhlcml0X25vZHVtcCIgfSwKKwl7IFhGU19JTkhFUklUX05PQVRJTUUsCSJpbmhlcml0X25vYXRpbWUiIH0sCisJeyBYRlNfQlVGX1RJTUVSLAkieGZzYnVmZF9jZW50aXNlY3MiIH0sCisJeyBYRlNfQlVGX0FHRSwJCSJhZ2VfYnVmZmVyX2NlbnRpc2VjcyIgfSwKKwl7IFhGU19JTkhFUklUX05PU1lNLAkiaW5oZXJpdF9ub3N5bWxpbmtzIiB9LAorCXsgWEZTX1JPVE9SU1RFUCwJInJvdG9yc3RlcCIgfSwKKwl7IFhGU19JTkhFUklUX05PREZSRywJImluaGVyaXRfbm9kZWZyYWciIH0sCisJeyBYRlNfRklMRVNUUkVBTV9USU1FUiwJImZpbGVzdHJlYW1fY2VudGlzZWNzIiB9LAorCXsgWEZTX1NUQVRTX0NMRUFSLAkic3RhdHNfY2xlYXIiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2ZzX29jZnMyX25tX3RhYmxlW10gPSB7CisJeyAxLCAiaGJfY3RsX3BhdGgiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2ZzX29jZnMyX3RhYmxlW10gPSB7CisJeyAxLAkibm0iLAl0cmFuc19mc19vY2ZzMl9ubV90YWJsZSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19pbm90aWZ5X3RhYmxlW10gPSB7CisJeyBJTk9USUZZX01BWF9VU0VSX0lOU1RBTkNFUywJIm1heF91c2VyX2luc3RhbmNlcyIgfSwKKwl7IElOT1RJRllfTUFYX1VTRVJfV0FUQ0hFUywJIm1heF91c2VyX3dhdGNoZXMiIH0sCisJeyBJTk9USUZZX01BWF9RVUVVRURfRVZFTlRTLAkibWF4X3F1ZXVlZF9ldmVudHMiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2ZzX3RhYmxlW10gPSB7CisJeyBGU19OUklOT0RFLAkJImlub2RlLW5yIiB9LAorCXsgRlNfU1RBVElOT0RFLAkJImlub2RlLXN0YXRlIiB9LAorCS8qIEZTX01BWElOT0RFIHVudXNlZCAqLworCS8qIEZTX05SRFFVT1QgdW51c2VkICovCisJLyogRlNfTUFYRFFVT1QgdW51c2VkICovCisJeyBGU19OUkZJTEUsCQkiZmlsZS1uciIgfSwKKwl7IEZTX01BWEZJTEUsCQkiZmlsZS1tYXgiIH0sCisJeyBGU19ERU5UUlksCQkiZGVudHJ5LXN0YXRlIiB9LAorCS8qIEZTX05SU1VQRVIgdW51c2VkICovCisJLyogRlNfTUFYVVBTRVIgdW51c2VkICovCisJeyBGU19PVkVSRkxPV1VJRCwJIm92ZXJmbG93dWlkIiB9LAorCXsgRlNfT1ZFUkZMT1dHSUQsCSJvdmVyZmxvd2dpZCIgfSwKKwl7IEZTX0xFQVNFUywJCSJsZWFzZXMtZW5hYmxlIiB9LAorCXsgRlNfRElSX05PVElGWSwJImRpci1ub3RpZnktZW5hYmxlIiB9LAorCXsgRlNfTEVBU0VfVElNRSwJImxlYXNlLWJyZWFrLXRpbWUiIH0sCisJeyBGU19EUVNUQVRTLAkJInF1b3RhIiwJCXRyYW5zX2ZzX3F1b3RhX3RhYmxlIH0sCisJeyBGU19YRlMsCQkieGZzIiwJCQl0cmFuc19mc194ZnNfdGFibGUgfSwKKwl7IEZTX0FJT19OUiwJCSJhaW8tbnIiIH0sCisJeyBGU19BSU9fTUFYX05SLAkiYWlvLW1heC1uciIgfSwKKwl7IEZTX0lOT1RJRlksCQkiaW5vdGlmeSIsCQl0cmFuc19pbm90aWZ5X3RhYmxlIH0sCisJeyBGU19PQ0ZTMiwJCSJvY2ZzMiIsCQl0cmFuc19mc19vY2ZzMl90YWJsZSB9LAorCXsgS0VSTl9TRVRVSURfRFVNUEFCTEUsCSJzdWlkX2R1bXBhYmxlIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19kZWJ1Z190YWJsZVtdID0geworCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19jZHJvbV90YWJsZVtdID0geworCXsgREVWX0NEUk9NX0lORk8sCQkiaW5mbyIgfSwKKwl7IERFVl9DRFJPTV9BVVRPQ0xPU0UsCQkiYXV0b2Nsb3NlIiB9LAorCXsgREVWX0NEUk9NX0FVVE9FSkVDVCwJCSJhdXRvZWplY3QiIH0sCisJeyBERVZfQ0RST01fREVCVUcsCQkiZGVidWciIH0sCisJeyBERVZfQ0RST01fTE9DSywJCSJsb2NrIiB9LAorCXsgREVWX0NEUk9NX0NIRUNLX01FRElBLAkiY2hlY2tfbWVkaWEiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2lwbWlfdGFibGVbXSA9IHsKKwl7IERFVl9JUE1JX1BPV0VST0ZGX1BPV0VSQ1lDTEUsCSJwb3dlcm9mZl9wb3dlcmN5Y2xlIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19tYWNfaGlkX2ZpbGVzW10gPSB7CisJLyogREVWX01BQ19ISURfS0VZQk9BUkRfU0VORFNfTElOVVhfS0VZQ09ERVMgdW51c2VkICovCisJLyogREVWX01BQ19ISURfS0VZQk9BUkRfTE9DS19LRVlDT0RFUyB1bnVzZWQgKi8KKwl7IERFVl9NQUNfSElEX01PVVNFX0JVVFRPTl9FTVVMQVRJT04sCSJtb3VzZV9idXR0b25fZW11bGF0aW9uIiB9LAorCXsgREVWX01BQ19ISURfTU9VU0VfQlVUVE9OMl9LRVlDT0RFLAkibW91c2VfYnV0dG9uMl9rZXljb2RlIiB9LAorCXsgREVWX01BQ19ISURfTU9VU0VfQlVUVE9OM19LRVlDT0RFLAkibW91c2VfYnV0dG9uM19rZXljb2RlIiB9LAorCS8qIERFVl9NQUNfSElEX0FEQl9NT1VTRV9TRU5EU19LRVlDT0RFUyB1bnVzZWQgKi8KKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfcmFpZF90YWJsZVtdID0geworCXsgREVWX1JBSURfU1BFRURfTElNSVRfTUlOLAkic3BlZWRfbGltaXRfbWluIiB9LAorCXsgREVWX1JBSURfU1BFRURfTElNSVRfTUFYLAkic3BlZWRfbGltaXRfbWF4IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19zY3NpX3RhYmxlW10gPSB7CisJeyBERVZfU0NTSV9MT0dHSU5HX0xFVkVMLCAibG9nZ2luZ19sZXZlbCIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfcGFycG9ydF9kZWZhdWx0X3RhYmxlW10gPSB7CisJeyBERVZfUEFSUE9SVF9ERUZBVUxUX1RJTUVTTElDRSwJInRpbWVzbGljZSIgfSwKKwl7IERFVl9QQVJQT1JUX0RFRkFVTFRfU1BJTlRJTUUsCQkic3BpbnRpbWUiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX3BhcnBvcnRfZGV2aWNlX3RhYmxlW10gPSB7CisJeyBERVZfUEFSUE9SVF9ERVZJQ0VfVElNRVNMSUNFLAkJInRpbWVzbGljZSIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfcGFycG9ydF9kZXZpY2VzX3RhYmxlW10gPSB7CisJeyBERVZfUEFSUE9SVF9ERVZJQ0VTX0FDVElWRSwJCSJhY3RpdmUiIH0sCisJeyAwLCBOVUxMLCB0cmFuc19wYXJwb3J0X2RldmljZV90YWJsZSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19wYXJwb3J0X3BhcnBvcnRfdGFibGVbXSA9IHsKKwl7IERFVl9QQVJQT1JUX1NQSU5USU1FLAkJInNwaW50aW1lIiB9LAorCXsgREVWX1BBUlBPUlRfQkFTRV9BRERSLAkiYmFzZS1hZGRyIiB9LAorCXsgREVWX1BBUlBPUlRfSVJRLAkJImlycSIgfSwKKwl7IERFVl9QQVJQT1JUX0RNQSwJCSJkbWEiIH0sCisJeyBERVZfUEFSUE9SVF9NT0RFUywJCSJtb2RlcyIgfSwKKwl7IERFVl9QQVJQT1JUX0RFVklDRVMsCQkiZGV2aWNlcyIsCXRyYW5zX3BhcnBvcnRfZGV2aWNlc190YWJsZSB9LAorCXsgREVWX1BBUlBPUlRfQVVUT1BST0JFLAkiYXV0b3Byb2JlIiB9LAorCXsgREVWX1BBUlBPUlRfQVVUT1BST0JFICsgMSwJImF1dG9wcm9iZTAiIH0sCisJeyBERVZfUEFSUE9SVF9BVVRPUFJPQkUgKyAyLAkiYXV0b3Byb2JlMSIgfSwKKwl7IERFVl9QQVJQT1JUX0FVVE9QUk9CRSArIDMsCSJhdXRvcHJvYmUyIiB9LAorCXsgREVWX1BBUlBPUlRfQVVUT1BST0JFICsgNCwJImF1dG9wcm9iZTMiIH0sCisJe30KK307CitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19wYXJwb3J0X3RhYmxlW10gPSB7CisJeyBERVZfUEFSUE9SVF9ERUZBVUxULAkiZGVmYXVsdCIsCXRyYW5zX3BhcnBvcnRfZGVmYXVsdF90YWJsZSB9LAorCXsgMCwgTlVMTCwgdHJhbnNfcGFycG9ydF9wYXJwb3J0X3RhYmxlIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2Rldl90YWJsZVtdID0geworCXsgREVWX0NEUk9NLAkiY2Ryb20iLAl0cmFuc19jZHJvbV90YWJsZSB9LAorCS8qIERFVl9IV01PTiB1bnVzZWQgKi8KKwl7IERFVl9QQVJQT1JULAkicGFycG9ydCIsCXRyYW5zX3BhcnBvcnRfdGFibGUgfSwKKwl7IERFVl9SQUlELAkicmFpZCIsCQl0cmFuc19yYWlkX3RhYmxlIH0sCisJeyBERVZfTUFDX0hJRCwJIm1hY19oaWQiLAl0cmFuc19tYWNfaGlkX2ZpbGVzIH0sCisJeyBERVZfU0NTSSwJInNjc2kiLAkJdHJhbnNfc2NzaV90YWJsZSB9LAorCXsgREVWX0lQTUksCSJpcG1pIiwJCXRyYW5zX2lwbWlfdGFibGUgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfYnVzX2lzYV90YWJsZVtdID0geworCXsgQlVTX0lTQV9NRU1fQkFTRSwJIm1lbWJhc2UiIH0sCisJeyBCVVNfSVNBX1BPUlRfQkFTRSwJInBvcnRiYXNlIiB9LAorCXsgQlVTX0lTQV9QT1JUX1NISUZULAkicG9ydHNoaWZ0IiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19idXNfdGFibGVbXSA9IHsKKwl7IENUTF9CVVNfSVNBLAkiaXNhIiwJdHJhbnNfYnVzX2lzYV90YWJsZSB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19hcmxhbl9jb25mX3RhYmxlMFtdID0geworCXsgMSwJInNwcmVhZGluZ0NvZGUiIH0sCisJeyAyLAkiY2hhbm5lbE51bWJlciIgfSwKKwl7IDMsCSJzY3JhbWJsaW5nRGlzYWJsZSIgfSwKKwl7IDQsCSJ0eEF0dGVudWF0aW9uIiB9LAorCXsgNSwJInN5c3RlbUlkIiB9LAorCXsgNiwJIm1heERhdGFncmFtU2l6ZSIgfSwKKwl7IDcsCSJtYXhGcmFtZVNpemUiIH0sCisJeyA4LAkibWF4UmV0cmllcyIgfSwKKwl7IDksCSJyZWNlaXZlTW9kZSIgfSwKKwl7IDEwLAkicHJpb3JpdHkiIH0sCisJeyAxMSwJInJvb3RPclJlcGVhdGVyIiB9LAorCXsgMTIsCSJTSUQiIH0sCisJeyAxMywJInJlZ2lzdHJhdGlvbk1vZGUiIH0sCisJeyAxNCwJInJlZ2lzdHJhdGlvbkZpbGwiIH0sCisJeyAxNSwJImxvY2FsVGFsa0FkZHJlc3MiIH0sCisJeyAxNiwJImNvZGVGb3JtYXQiIH0sCisJeyAxNywJIm51bUNoYW5uZWxzIiB9LAorCXsgMTgsCSJjaGFubmVsMSIgfSwKKwl7IDE5LAkiY2hhbm5lbDIiIH0sCisJeyAyMCwJImNoYW5uZWwzIiB9LAorCXsgMjEsCSJjaGFubmVsNCIgfSwKKwl7IDIyLAkidHhDbGVhciIgfSwKKwl7IDIzLAkidHhSZXRyaWVzIiB9LAorCXsgMjQsCSJ0eFJvdXRpbmciIH0sCisJeyAyNSwJInR4U2NyYW1ibGVkIiB9LAorCXsgMjYsCSJyeFBhcmFtZXRlciIgfSwKKwl7IDI3LAkidHhUaW1lb3V0TXMiIH0sCisJeyAyOCwJIndhaXRDYXJkVGltZW91dCIgfSwKKwl7IDI5LAkiY2hhbm5lbFNldCIgfSwKKwl7IDMwLAkibmFtZSIgfSwKKwl7IDMxLAkid2FpdFRpbWUiIH0sCisJeyAzMiwJImxQYXJhbWV0ZXIiIH0sCisJeyAzMywJIl8xNSIgfSwKKwl7IDM0LAkiaGVhZGVyU2l6ZSIgfSwKKwl7IDM2LAkidHhfZGVsYXlfbXMiIH0sCisJeyAzNywJInJldHJpZXMiIH0sCisJeyAzOCwJIlJlVHJhbnNtaXRQYWNrZXRNYXhTaXplIiB9LAorCXsgMzksCSJ3YWl0UmVUcmFuc21pdFBhY2tldE1heFNpemUiIH0sCisJeyA0MCwJImZhc3RSZVRyYW5zQ291bnQiIH0sCisJeyA0MSwJImRyaXZlclJldHJhbnNtaXNzaW9ucyIgfSwKKwl7IDQyLAkidHhBY2tUaW1lb3V0TXMiIH0sCisJeyA0MywJInJlZ2lzdHJhdGlvbkludGVycnVwdHMiIH0sCisJeyA0NCwJImhhcmR3YXJlVHlwZSIgfSwKKwl7IDQ1LAkicmFkaW9UeXBlIiB9LAorCXsgNDYsCSJ3cml0ZUVFUFJPTSIgfSwKKwl7IDQ3LAkid3JpdGVSYWRpb1R5cGUiIH0sCisJeyA0OCwJImVudHJ5X2V4aXRfZGVidWciIH0sCisJeyA0OSwJImRlYnVnIiB9LAorCXsgNTAsCSJpbl9zcGVlZCIgfSwKKwl7IDUxLAkib3V0X3NwZWVkIiB9LAorCXsgNTIsCSJpbl9zcGVlZDEwIiB9LAorCXsgNTMsCSJvdXRfc3BlZWQxMCIgfSwKKwl7IDU0LAkiaW5fc3BlZWRfbWF4IiB9LAorCXsgNTUsCSJvdXRfc3BlZWRfbWF4IiB9LAorCXsgNTYsCSJtZWFzdXJlX3JhdGUiIH0sCisJeyA1NywJInByZV9Db21tYW5kX1dhaXQiIH0sCisJeyA1OCwJInJ4X3R3ZWFrMSIgfSwKKwl7IDU5LAkicnhfdHdlYWsyIiB9LAorCXsgNjAsCSJ0eF9xdWV1ZV9sZW4iIH0sCisKKwl7IDE1MCwJImFybGFuMC10eFJpbmciIH0sCisJeyAxNTEsCSJhcmxhbjAtcnhSaW5nIiB9LAorCXsgMTUyLAkiYXJsYW4wLTE4IiB9LAorCXsgMTUzLAkiYXJsYW4wLXJpbmciIH0sCisJeyAxNTQsCSJhcmxhbjAtc2htLWNweSIgfSwKKwl7IDE1NSwJImNvbmZpZzAiIH0sCisJeyAxNTYsCSJyZXNldDAiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2FybGFuX2NvbmZfdGFibGUxW10gPSB7CisJeyAxLAkic3ByZWFkaW5nQ29kZSIgfSwKKwl7IDIsCSJjaGFubmVsTnVtYmVyIiB9LAorCXsgMywJInNjcmFtYmxpbmdEaXNhYmxlIiB9LAorCXsgNCwJInR4QXR0ZW51YXRpb24iIH0sCisJeyA1LAkic3lzdGVtSWQiIH0sCisJeyA2LAkibWF4RGF0YWdyYW1TaXplIiB9LAorCXsgNywJIm1heEZyYW1lU2l6ZSIgfSwKKwl7IDgsCSJtYXhSZXRyaWVzIiB9LAorCXsgOSwJInJlY2VpdmVNb2RlIiB9LAorCXsgMTAsCSJwcmlvcml0eSIgfSwKKwl7IDExLAkicm9vdE9yUmVwZWF0ZXIiIH0sCisJeyAxMiwJIlNJRCIgfSwKKwl7IDEzLAkicmVnaXN0cmF0aW9uTW9kZSIgfSwKKwl7IDE0LAkicmVnaXN0cmF0aW9uRmlsbCIgfSwKKwl7IDE1LAkibG9jYWxUYWxrQWRkcmVzcyIgfSwKKwl7IDE2LAkiY29kZUZvcm1hdCIgfSwKKwl7IDE3LAkibnVtQ2hhbm5lbHMiIH0sCisJeyAxOCwJImNoYW5uZWwxIiB9LAorCXsgMTksCSJjaGFubmVsMiIgfSwKKwl7IDIwLAkiY2hhbm5lbDMiIH0sCisJeyAyMSwJImNoYW5uZWw0IiB9LAorCXsgMjIsCSJ0eENsZWFyIiB9LAorCXsgMjMsCSJ0eFJldHJpZXMiIH0sCisJeyAyNCwJInR4Um91dGluZyIgfSwKKwl7IDI1LAkidHhTY3JhbWJsZWQiIH0sCisJeyAyNiwJInJ4UGFyYW1ldGVyIiB9LAorCXsgMjcsCSJ0eFRpbWVvdXRNcyIgfSwKKwl7IDI4LAkid2FpdENhcmRUaW1lb3V0IiB9LAorCXsgMjksCSJjaGFubmVsU2V0IiB9LAorCXsgMzAsCSJuYW1lIiB9LAorCXsgMzEsCSJ3YWl0VGltZSIgfSwKKwl7IDMyLAkibFBhcmFtZXRlciIgfSwKKwl7IDMzLAkiXzE1IiB9LAorCXsgMzQsCSJoZWFkZXJTaXplIiB9LAorCXsgMzYsCSJ0eF9kZWxheV9tcyIgfSwKKwl7IDM3LAkicmV0cmllcyIgfSwKKwl7IDM4LAkiUmVUcmFuc21pdFBhY2tldE1heFNpemUiIH0sCisJeyAzOSwJIndhaXRSZVRyYW5zbWl0UGFja2V0TWF4U2l6ZSIgfSwKKwl7IDQwLAkiZmFzdFJlVHJhbnNDb3VudCIgfSwKKwl7IDQxLAkiZHJpdmVyUmV0cmFuc21pc3Npb25zIiB9LAorCXsgNDIsCSJ0eEFja1RpbWVvdXRNcyIgfSwKKwl7IDQzLAkicmVnaXN0cmF0aW9uSW50ZXJydXB0cyIgfSwKKwl7IDQ0LAkiaGFyZHdhcmVUeXBlIiB9LAorCXsgNDUsCSJyYWRpb1R5cGUiIH0sCisJeyA0NiwJIndyaXRlRUVQUk9NIiB9LAorCXsgNDcsCSJ3cml0ZVJhZGlvVHlwZSIgfSwKKwl7IDQ4LAkiZW50cnlfZXhpdF9kZWJ1ZyIgfSwKKwl7IDQ5LAkiZGVidWciIH0sCisJeyA1MCwJImluX3NwZWVkIiB9LAorCXsgNTEsCSJvdXRfc3BlZWQiIH0sCisJeyA1MiwJImluX3NwZWVkMTAiIH0sCisJeyA1MywJIm91dF9zcGVlZDEwIiB9LAorCXsgNTQsCSJpbl9zcGVlZF9tYXgiIH0sCisJeyA1NSwJIm91dF9zcGVlZF9tYXgiIH0sCisJeyA1NiwJIm1lYXN1cmVfcmF0ZSIgfSwKKwl7IDU3LAkicHJlX0NvbW1hbmRfV2FpdCIgfSwKKwl7IDU4LAkicnhfdHdlYWsxIiB9LAorCXsgNTksCSJyeF90d2VhazIiIH0sCisJeyA2MCwJInR4X3F1ZXVlX2xlbiIgfSwKKworCXsgMTUwLAkiYXJsYW4xLXR4UmluZyIgfSwKKwl7IDE1MSwJImFybGFuMS1yeFJpbmciIH0sCisJeyAxNTIsCSJhcmxhbjEtMTgiIH0sCisJeyAxNTMsCSJhcmxhbjEtcmluZyIgfSwKKwl7IDE1NCwJImFybGFuMS1zaG0tY3B5IiB9LAorCXsgMTU1LAkiY29uZmlnMSIgfSwKKwl7IDE1NiwJInJlc2V0MSIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfYXJsYW5fY29uZl90YWJsZTJbXSA9IHsKKwl7IDEsCSJzcHJlYWRpbmdDb2RlIiB9LAorCXsgMiwJImNoYW5uZWxOdW1iZXIiIH0sCisJeyAzLAkic2NyYW1ibGluZ0Rpc2FibGUiIH0sCisJeyA0LAkidHhBdHRlbnVhdGlvbiIgfSwKKwl7IDUsCSJzeXN0ZW1JZCIgfSwKKwl7IDYsCSJtYXhEYXRhZ3JhbVNpemUiIH0sCisJeyA3LAkibWF4RnJhbWVTaXplIiB9LAorCXsgOCwJIm1heFJldHJpZXMiIH0sCisJeyA5LAkicmVjZWl2ZU1vZGUiIH0sCisJeyAxMCwJInByaW9yaXR5IiB9LAorCXsgMTEsCSJyb290T3JSZXBlYXRlciIgfSwKKwl7IDEyLAkiU0lEIiB9LAorCXsgMTMsCSJyZWdpc3RyYXRpb25Nb2RlIiB9LAorCXsgMTQsCSJyZWdpc3RyYXRpb25GaWxsIiB9LAorCXsgMTUsCSJsb2NhbFRhbGtBZGRyZXNzIiB9LAorCXsgMTYsCSJjb2RlRm9ybWF0IiB9LAorCXsgMTcsCSJudW1DaGFubmVscyIgfSwKKwl7IDE4LAkiY2hhbm5lbDEiIH0sCisJeyAxOSwJImNoYW5uZWwyIiB9LAorCXsgMjAsCSJjaGFubmVsMyIgfSwKKwl7IDIxLAkiY2hhbm5lbDQiIH0sCisJeyAyMiwJInR4Q2xlYXIiIH0sCisJeyAyMywJInR4UmV0cmllcyIgfSwKKwl7IDI0LAkidHhSb3V0aW5nIiB9LAorCXsgMjUsCSJ0eFNjcmFtYmxlZCIgfSwKKwl7IDI2LAkicnhQYXJhbWV0ZXIiIH0sCisJeyAyNywJInR4VGltZW91dE1zIiB9LAorCXsgMjgsCSJ3YWl0Q2FyZFRpbWVvdXQiIH0sCisJeyAyOSwJImNoYW5uZWxTZXQiIH0sCisJeyAzMCwJIm5hbWUiIH0sCisJeyAzMSwJIndhaXRUaW1lIiB9LAorCXsgMzIsCSJsUGFyYW1ldGVyIiB9LAorCXsgMzMsCSJfMTUiIH0sCisJeyAzNCwJImhlYWRlclNpemUiIH0sCisJeyAzNiwJInR4X2RlbGF5X21zIiB9LAorCXsgMzcsCSJyZXRyaWVzIiB9LAorCXsgMzgsCSJSZVRyYW5zbWl0UGFja2V0TWF4U2l6ZSIgfSwKKwl7IDM5LAkid2FpdFJlVHJhbnNtaXRQYWNrZXRNYXhTaXplIiB9LAorCXsgNDAsCSJmYXN0UmVUcmFuc0NvdW50IiB9LAorCXsgNDEsCSJkcml2ZXJSZXRyYW5zbWlzc2lvbnMiIH0sCisJeyA0MiwJInR4QWNrVGltZW91dE1zIiB9LAorCXsgNDMsCSJyZWdpc3RyYXRpb25JbnRlcnJ1cHRzIiB9LAorCXsgNDQsCSJoYXJkd2FyZVR5cGUiIH0sCisJeyA0NSwJInJhZGlvVHlwZSIgfSwKKwl7IDQ2LAkid3JpdGVFRVBST00iIH0sCisJeyA0NywJIndyaXRlUmFkaW9UeXBlIiB9LAorCXsgNDgsCSJlbnRyeV9leGl0X2RlYnVnIiB9LAorCXsgNDksCSJkZWJ1ZyIgfSwKKwl7IDUwLAkiaW5fc3BlZWQiIH0sCisJeyA1MSwJIm91dF9zcGVlZCIgfSwKKwl7IDUyLAkiaW5fc3BlZWQxMCIgfSwKKwl7IDUzLAkib3V0X3NwZWVkMTAiIH0sCisJeyA1NCwJImluX3NwZWVkX21heCIgfSwKKwl7IDU1LAkib3V0X3NwZWVkX21heCIgfSwKKwl7IDU2LAkibWVhc3VyZV9yYXRlIiB9LAorCXsgNTcsCSJwcmVfQ29tbWFuZF9XYWl0IiB9LAorCXsgNTgsCSJyeF90d2VhazEiIH0sCisJeyA1OSwJInJ4X3R3ZWFrMiIgfSwKKwl7IDYwLAkidHhfcXVldWVfbGVuIiB9LAorCisJeyAxNTAsCSJhcmxhbjItdHhSaW5nIiB9LAorCXsgMTUxLAkiYXJsYW4yLXJ4UmluZyIgfSwKKwl7IDE1MiwJImFybGFuMi0xOCIgfSwKKwl7IDE1MywJImFybGFuMi1yaW5nIiB9LAorCXsgMTU0LAkiYXJsYW4yLXNobS1jcHkiIH0sCisJeyAxNTUsCSJjb25maWcyIiB9LAorCXsgMTU2LAkicmVzZXQyIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19hcmxhbl9jb25mX3RhYmxlM1tdID0geworCXsgMSwJInNwcmVhZGluZ0NvZGUiIH0sCisJeyAyLAkiY2hhbm5lbE51bWJlciIgfSwKKwl7IDMsCSJzY3JhbWJsaW5nRGlzYWJsZSIgfSwKKwl7IDQsCSJ0eEF0dGVudWF0aW9uIiB9LAorCXsgNSwJInN5c3RlbUlkIiB9LAorCXsgNiwJIm1heERhdGFncmFtU2l6ZSIgfSwKKwl7IDcsCSJtYXhGcmFtZVNpemUiIH0sCisJeyA4LAkibWF4UmV0cmllcyIgfSwKKwl7IDksCSJyZWNlaXZlTW9kZSIgfSwKKwl7IDEwLAkicHJpb3JpdHkiIH0sCisJeyAxMSwJInJvb3RPclJlcGVhdGVyIiB9LAorCXsgMTIsCSJTSUQiIH0sCisJeyAxMywJInJlZ2lzdHJhdGlvbk1vZGUiIH0sCisJeyAxNCwJInJlZ2lzdHJhdGlvbkZpbGwiIH0sCisJeyAxNSwJImxvY2FsVGFsa0FkZHJlc3MiIH0sCisJeyAxNiwJImNvZGVGb3JtYXQiIH0sCisJeyAxNywJIm51bUNoYW5uZWxzIiB9LAorCXsgMTgsCSJjaGFubmVsMSIgfSwKKwl7IDE5LAkiY2hhbm5lbDIiIH0sCisJeyAyMCwJImNoYW5uZWwzIiB9LAorCXsgMjEsCSJjaGFubmVsNCIgfSwKKwl7IDIyLAkidHhDbGVhciIgfSwKKwl7IDIzLAkidHhSZXRyaWVzIiB9LAorCXsgMjQsCSJ0eFJvdXRpbmciIH0sCisJeyAyNSwJInR4U2NyYW1ibGVkIiB9LAorCXsgMjYsCSJyeFBhcmFtZXRlciIgfSwKKwl7IDI3LAkidHhUaW1lb3V0TXMiIH0sCisJeyAyOCwJIndhaXRDYXJkVGltZW91dCIgfSwKKwl7IDI5LAkiY2hhbm5lbFNldCIgfSwKKwl7IDMwLAkibmFtZSIgfSwKKwl7IDMxLAkid2FpdFRpbWUiIH0sCisJeyAzMiwJImxQYXJhbWV0ZXIiIH0sCisJeyAzMywJIl8xNSIgfSwKKwl7IDM0LAkiaGVhZGVyU2l6ZSIgfSwKKwl7IDM2LAkidHhfZGVsYXlfbXMiIH0sCisJeyAzNywJInJldHJpZXMiIH0sCisJeyAzOCwJIlJlVHJhbnNtaXRQYWNrZXRNYXhTaXplIiB9LAorCXsgMzksCSJ3YWl0UmVUcmFuc21pdFBhY2tldE1heFNpemUiIH0sCisJeyA0MCwJImZhc3RSZVRyYW5zQ291bnQiIH0sCisJeyA0MSwJImRyaXZlclJldHJhbnNtaXNzaW9ucyIgfSwKKwl7IDQyLAkidHhBY2tUaW1lb3V0TXMiIH0sCisJeyA0MywJInJlZ2lzdHJhdGlvbkludGVycnVwdHMiIH0sCisJeyA0NCwJImhhcmR3YXJlVHlwZSIgfSwKKwl7IDQ1LAkicmFkaW9UeXBlIiB9LAorCXsgNDYsCSJ3cml0ZUVFUFJPTSIgfSwKKwl7IDQ3LAkid3JpdGVSYWRpb1R5cGUiIH0sCisJeyA0OCwJImVudHJ5X2V4aXRfZGVidWciIH0sCisJeyA0OSwJImRlYnVnIiB9LAorCXsgNTAsCSJpbl9zcGVlZCIgfSwKKwl7IDUxLAkib3V0X3NwZWVkIiB9LAorCXsgNTIsCSJpbl9zcGVlZDEwIiB9LAorCXsgNTMsCSJvdXRfc3BlZWQxMCIgfSwKKwl7IDU0LAkiaW5fc3BlZWRfbWF4IiB9LAorCXsgNTUsCSJvdXRfc3BlZWRfbWF4IiB9LAorCXsgNTYsCSJtZWFzdXJlX3JhdGUiIH0sCisJeyA1NywJInByZV9Db21tYW5kX1dhaXQiIH0sCisJeyA1OCwJInJ4X3R3ZWFrMSIgfSwKKwl7IDU5LAkicnhfdHdlYWsyIiB9LAorCXsgNjAsCSJ0eF9xdWV1ZV9sZW4iIH0sCisKKwl7IDE1MCwJImFybGFuMy10eFJpbmciIH0sCisJeyAxNTEsCSJhcmxhbjMtcnhSaW5nIiB9LAorCXsgMTUyLAkiYXJsYW4zLTE4IiB9LAorCXsgMTUzLAkiYXJsYW4zLXJpbmciIH0sCisJeyAxNTQsCSJhcmxhbjMtc2htLWNweSIgfSwKKwl7IDE1NSwJImNvbmZpZzMiIH0sCisJeyAxNTYsCSJyZXNldDMiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2FybGFuX3RhYmxlW10gPSB7CisJeyAxLAkJImFybGFuMCIsCXRyYW5zX2FybGFuX2NvbmZfdGFibGUwIH0sCisJeyAyLAkJImFybGFuMSIsCXRyYW5zX2FybGFuX2NvbmZfdGFibGUxIH0sCisJeyAzLAkJImFybGFuMiIsCXRyYW5zX2FybGFuX2NvbmZfdGFibGUyIH0sCisJeyA0LAkJImFybGFuMyIsCXRyYW5zX2FybGFuX2NvbmZfdGFibGUzIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX2FwcGxkYXRhX3RhYmxlW10gPSB7CisJeyBDVExfQVBQTERBVEFfVElNRVIsCQkidGltZXIiIH0sCisJeyBDVExfQVBQTERBVEFfSU5URVJWQUwsCSJpbnRlcnZhbCIgfSwKKwl7IENUTF9BUFBMREFUQV9PUywJCSJvcyIgfSwKKwl7IENUTF9BUFBMREFUQV9ORVRfU1VNLAkJIm5ldF9zdW0iIH0sCisJeyBDVExfQVBQTERBVEFfTUVNLAkJIm1lbSIgfSwKKwl7fQorCit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19zMzkwZGJmX3RhYmxlW10gPSB7CisJeyA1Njc4IC8qIENUTF9TMzkwREJGX1NUT1BQQUJMRSAqLywJImRlYnVnX3N0b3BwYWJsZSIgfSwKKwl7IDU2NzkgLyogQ1RMX1MzOTBEQkZfQUNUSVZFICovLAkiZGVidWdfYWN0aXZlIiB9LAorCXt9Cit9OworCitzdGF0aWMgc3RydWN0IHRyYW5zX2N0bF90YWJsZSB0cmFuc19zdW5ycGNfdGFibGVbXSA9IHsKKwl7IENUTF9SUENERUJVRywJCSJycGNfZGVidWciIH0sCisJeyBDVExfTkZTREVCVUcsCQkibmZzX2RlYnVnIiB9LAorCXsgQ1RMX05GU0RERUJVRywJIm5mc2RfZGVidWciIH0sCisJeyBDVExfTkxNREVCVUcsCQkibmxtX2RlYnVnIiB9LAorCXsgQ1RMX1NMT1RUQUJMRV9VRFAsCSJ1ZHBfc2xvdF90YWJsZV9lbnRyaWVzIiB9LAorCXsgQ1RMX1NMT1RUQUJMRV9UQ1AsCSJ0Y3Bfc2xvdF90YWJsZV9lbnRyaWVzIiB9LAorCXsgQ1RMX01JTl9SRVNWUE9SVCwJIm1pbl9yZXN2cG9ydCIgfSwKKwl7IENUTF9NQVhfUkVTVlBPUlQsCSJtYXhfcmVzdnBvcnQiIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlIHRyYW5zX3BtX3RhYmxlW10gPSB7CisJeyAxIC8qIENUTF9QTV9TVVNQRU5EICovLAkic3VzcGVuZCIgfSwKKwl7IDIgLyogQ1RMX1BNX0NNT0RFICovLAkJImNtb2RlIiB9LAorCXsgMyAvKiBDVExfUE1fUDAgKi8sCQkicDAiIH0sCisJeyA0IC8qIENUTF9QTV9DTSAqLywJCSJjbSIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfZnJ2X3RhYmxlW10gPSB7CisJeyAxLAkiY2FjaGUtbW9kZSIgfSwKKwl7IDIsCSJwaW4tY3huciIgfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgdHJhbnNfcm9vdF90YWJsZVtdID0geworCXsgQ1RMX0tFUk4sCSJrZXJuZWwiLAl0cmFuc19rZXJuX3RhYmxlIH0sCisJeyBDVExfVk0sCSJ2bSIsCQl0cmFuc192bV90YWJsZSB9LAorCXsgQ1RMX05FVCwJIm5ldCIsCQl0cmFuc19uZXRfdGFibGUgfSwKKwkvKiBDVExfUFJPQyBub3QgdXNlZCAqLworCXsgQ1RMX0ZTLAkiZnMiLAkJdHJhbnNfZnNfdGFibGUgfSwKKwl7IENUTF9ERUJVRywJImRlYnVnIiwJdHJhbnNfZGVidWdfdGFibGUgfSwKKwl7IENUTF9ERVYsCSJkZXYiLAkJdHJhbnNfZGV2X3RhYmxlIH0sCisJeyBDVExfQlVTLAkiYnVzIiwJCXRyYW5zX2J1c190YWJsZSB9LAorCXsgQ1RMX0FCSSwJImFiaSIgfSwKKwkvKiBDVExfQ1BVIG5vdCB1c2VkICovCisJeyBDVExfQVJMQU4sCSJhcmxhbiIsCXRyYW5zX2FybGFuX3RhYmxlIH0sCisJeyBDVExfQVBQTERBVEEsCSJhcHBsZGF0YSIsCXRyYW5zX2FwcGxkYXRhX3RhYmxlIH0sCisJeyBDVExfUzM5MERCRiwJInMzOTBkYmYiLAl0cmFuc19zMzkwZGJmX3RhYmxlIH0sCisJeyBDVExfU1VOUlBDLAkic3VucnBjIiwJdHJhbnNfc3VucnBjX3RhYmxlIH0sCisJeyBDVExfUE0sCSJwbSIsCQl0cmFuc19wbV90YWJsZSB9LAorCXsgQ1RMX0ZSViwJImZydiIsCQl0cmFuc19mcnZfdGFibGUgfSwKKwl7fQorfTsKKworCisKKworc3RhdGljIGludCBzeXNjdGxfZGVwdGgoc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJc3RydWN0IGN0bF90YWJsZSAqdG1wOworCWludCBkZXB0aDsKKworCWRlcHRoID0gMDsKKwlmb3IgKHRtcCA9IHRhYmxlOyB0bXAtPnBhcmVudDsgdG1wID0gdG1wLT5wYXJlbnQpCisJCWRlcHRoKys7CisKKwlyZXR1cm4gZGVwdGg7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlICpzeXNjdGxfcGFyZW50KHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgbikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IHRhYmxlICYmIGkgPCBuOyBpKyspCisJCXRhYmxlID0gdGFibGUtPnBhcmVudDsKKworCXJldHVybiB0YWJsZTsKK30KKworc3RhdGljIHN0cnVjdCB0cmFuc19jdGxfdGFibGUgKnN5c2N0bF9iaW5hcnlfbG9va3VwKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBjdGxfdGFibGUgKnRlc3Q7CisJc3RydWN0IHRyYW5zX2N0bF90YWJsZSAqcmVmOworCWludCBkZXB0aCwgY3VyX2RlcHRoOworCisJZGVwdGggPSBzeXNjdGxfZGVwdGgodGFibGUpOworCisJY3VyX2RlcHRoID0gZGVwdGg7CisJcmVmID0gdHJhbnNfcm9vdF90YWJsZTsKK3JlcGVhdDoKKwl0ZXN0ID0gc3lzY3RsX3BhcmVudCh0YWJsZSwgY3VyX2RlcHRoKTsKKwlmb3IgKDsgcmVmLT5jdGxfbmFtZSB8fCByZWYtPnByb2NuYW1lIHx8IHJlZi0+Y2hpbGQ7IHJlZisrKSB7CisJCWludCBtYXRjaCA9IDA7CisKKwkJaWYgKGN1cl9kZXB0aCAmJiAhcmVmLT5jaGlsZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0ZXN0LT5wcm9jbmFtZSAmJiByZWYtPnByb2NuYW1lICYmCisJCQkoc3RyY21wKHRlc3QtPnByb2NuYW1lLCByZWYtPnByb2NuYW1lKSA9PSAwKSkKKwkJCW1hdGNoKys7CisKKwkJaWYgKHRlc3QtPmN0bF9uYW1lICYmIHJlZi0+Y3RsX25hbWUgJiYKKwkJCSh0ZXN0LT5jdGxfbmFtZSA9PSByZWYtPmN0bF9uYW1lKSkKKwkJCW1hdGNoKys7CisKKwkJaWYgKCFyZWYtPmN0bF9uYW1lICYmICFyZWYtPnByb2NuYW1lKQorCQkJbWF0Y2grKzsKKworCQlpZiAobWF0Y2gpIHsKKwkJCWlmIChjdXJfZGVwdGggIT0gMCkgeworCQkJCWN1cl9kZXB0aC0tOworCQkJCXJlZiA9IHJlZi0+Y2hpbGQ7CisJCQkJZ290byByZXBlYXQ7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlyZWYgPSBOVUxMOworb3V0OgorCXJldHVybiByZWY7Cit9CisKK3N0YXRpYyB2b2lkIHN5c2N0bF9wcmludF9wYXRoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBjdGxfdGFibGUgKnRtcDsKKwlpbnQgZGVwdGgsIGk7CisJZGVwdGggPSBzeXNjdGxfZGVwdGgodGFibGUpOworCWlmICh0YWJsZS0+cHJvY25hbWUpIHsKKwkJZm9yIChpID0gZGVwdGg7IGkgPj0gMDsgaS0tKSB7CisJCQl0bXAgPSBzeXNjdGxfcGFyZW50KHRhYmxlLCBpKTsKKwkJCXByaW50aygiLyVzIiwgdG1wLT5wcm9jbmFtZT90bXAtPnByb2NuYW1lOiIiKTsKKwkJfQorCX0KKwlwcmludGsoIiAiKTsKKwlpZiAodGFibGUtPmN0bF9uYW1lKSB7CisJCWZvciAoaSA9IGRlcHRoOyBpID49IDA7IGktLSkgeworCQkJdG1wID0gc3lzY3RsX3BhcmVudCh0YWJsZSwgaSk7CisJCQlwcmludGsoIi4lZCIsIHRtcC0+Y3RsX25hbWUpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzeXNjdGxfcmVwYWlyX3RhYmxlKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCS8qIERvbid0IGNvbXBsYWluIGFib3V0IHRoZSBjbGFzc2ljIGRlZmF1bHQKKwkgKiBzeXNjdGwgc3RyYXRlZ3kgcm91dGluZS4gIE1heWJlIGxhdGVyIHdlCisJICogY2FuIGdldCB0aGUgdGFibGVzIGZpeGVkIGFuZCBjb21wbGFpbiBhYm91dAorCSAqIHRoaXMuCisJICovCisJaWYgKHRhYmxlLT5jdGxfbmFtZSAmJiB0YWJsZS0+cHJvY25hbWUgJiYKKwkJKHRhYmxlLT5wcm9jX2hhbmRsZXIgPT0gcHJvY19kb2ludHZlYykgJiYKKwkJKCF0YWJsZS0+c3RyYXRlZ3kpKSB7CisJCXRhYmxlLT5zdHJhdGVneSA9IHN5c2N0bF9kYXRhOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgKnN5c2N0bF9jaGVja19sb29rdXAoc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmhlYWQ7CisJc3RydWN0IGN0bF90YWJsZSAqcmVmLCAqdGVzdDsKKwlpbnQgZGVwdGgsIGN1cl9kZXB0aDsKKworCWRlcHRoID0gc3lzY3RsX2RlcHRoKHRhYmxlKTsKKworCWZvciAoaGVhZCA9IHN5c2N0bF9oZWFkX25leHQoTlVMTCk7IGhlYWQ7CisJICAgICBoZWFkID0gc3lzY3RsX2hlYWRfbmV4dChoZWFkKSkgeworCQljdXJfZGVwdGggPSBkZXB0aDsKKwkJcmVmID0gaGVhZC0+Y3RsX3RhYmxlOworcmVwZWF0OgorCQl0ZXN0ID0gc3lzY3RsX3BhcmVudCh0YWJsZSwgY3VyX2RlcHRoKTsKKwkJZm9yICg7IHJlZi0+Y3RsX25hbWUgfHwgcmVmLT5wcm9jbmFtZTsgcmVmKyspIHsKKwkJCWludCBtYXRjaCA9IDA7CisJCQlpZiAoY3VyX2RlcHRoICYmICFyZWYtPmNoaWxkKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAodGVzdC0+cHJvY25hbWUgJiYgcmVmLT5wcm9jbmFtZSAmJgorCQkJICAgIChzdHJjbXAodGVzdC0+cHJvY25hbWUsIHJlZi0+cHJvY25hbWUpID09IDApKQorCQkJCQltYXRjaCsrOworCisJCQlpZiAodGVzdC0+Y3RsX25hbWUgJiYgcmVmLT5jdGxfbmFtZSAmJgorCQkJICAgICh0ZXN0LT5jdGxfbmFtZSA9PSByZWYtPmN0bF9uYW1lKSkKKwkJCQltYXRjaCsrOworCisJCQlpZiAobWF0Y2gpIHsKKwkJCQlpZiAoY3VyX2RlcHRoICE9IDApIHsKKwkJCQkJY3VyX2RlcHRoLS07CisJCQkJCXJlZiA9IHJlZi0+Y2hpbGQ7CisJCQkJCWdvdG8gcmVwZWF0OworCQkJCX0KKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KKwlyZWYgPSBOVUxMOworb3V0OgorCXN5c2N0bF9oZWFkX2ZpbmlzaChoZWFkKTsKKwlyZXR1cm4gcmVmOworfQorCitzdGF0aWMgdm9pZCBzZXRfZmFpbChjb25zdCBjaGFyICoqZmFpbCwgc3RydWN0IGN0bF90YWJsZSAqdGFibGUsIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlpZiAoKmZhaWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzeXNjdGwgdGFibGUgY2hlY2sgZmFpbGVkOiAiKTsKKwkJc3lzY3RsX3ByaW50X3BhdGgodGFibGUpOworCQlwcmludGsoIiAlc1xuIiwgKmZhaWwpOworCX0KKwkqZmFpbCA9IHN0cjsKK30KKworc3RhdGljIGludCBzeXNjdGxfY2hlY2tfZGlyKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlKQoreworCXN0cnVjdCBjdGxfdGFibGUgKnJlZjsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IDA7CisJcmVmID0gc3lzY3RsX2NoZWNrX2xvb2t1cCh0YWJsZSk7CisJaWYgKHJlZikgeworCQlpbnQgbWF0Y2ggPSAwOworCQlpZiAoKCF0YWJsZS0+cHJvY25hbWUgJiYgIXJlZi0+cHJvY25hbWUpIHx8CisJCSAgICAodGFibGUtPnByb2NuYW1lICYmIHJlZi0+cHJvY25hbWUgJiYKKwkJICAgICAoc3RyY21wKHRhYmxlLT5wcm9jbmFtZSwgcmVmLT5wcm9jbmFtZSkgPT0gMCkpKQorCQkJbWF0Y2grKzsKKworCQlpZiAoKCF0YWJsZS0+Y3RsX25hbWUgJiYgIXJlZi0+Y3RsX25hbWUpIHx8CisJCSAgICAodGFibGUtPmN0bF9uYW1lICYmIHJlZi0+Y3RsX25hbWUgJiYKKwkJICAgICAodGFibGUtPmN0bF9uYW1lID09IHJlZi0+Y3RsX25hbWUpKSkKKwkJCW1hdGNoKys7CisKKwkJaWYgKG1hdGNoICE9IDIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZDogIiwgX19mdW5jX18pOworCQkJc3lzY3RsX3ByaW50X3BhdGgodGFibGUpOworCQkJcHJpbnRrKCIgcmVmOiAiKTsKKwkJCXN5c2N0bF9wcmludF9wYXRoKHJlZik7CisJCQlwcmludGsoIlxuIik7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCX0KKwl9CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgdm9pZCBzeXNjdGxfY2hlY2tfbGVhZihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgY29uc3QgY2hhciAqKmZhaWwpCit7CisJc3RydWN0IGN0bF90YWJsZSAqcmVmOworCisJcmVmID0gc3lzY3RsX2NoZWNrX2xvb2t1cCh0YWJsZSk7CisJaWYgKHJlZiAmJiAocmVmICE9IHRhYmxlKSkKKwkJc2V0X2ZhaWwoZmFpbCwgdGFibGUsICJTeXNjdGwgYWxyZWFkeSBleGlzdHMiKTsKK30KKworc3RhdGljIHZvaWQgc3lzY3RsX2NoZWNrX2Jpbl9wYXRoKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBjb25zdCBjaGFyICoqZmFpbCkKK3sKKwlzdHJ1Y3QgdHJhbnNfY3RsX3RhYmxlICpyZWY7CisKKwlyZWYgPSBzeXNjdGxfYmluYXJ5X2xvb2t1cCh0YWJsZSk7CisJaWYgKHRhYmxlLT5jdGxfbmFtZSAmJiAhcmVmKQorCQlzZXRfZmFpbChmYWlsLCB0YWJsZSwgIlVua25vd24gc3lzY3RsIGJpbmFyeSBwYXRoIik7CisJaWYgKHJlZikgeworCQlpZiAocmVmLT5wcm9jbmFtZSAmJgorCQkgICAgKCF0YWJsZS0+cHJvY25hbWUgfHwKKwkJICAgICAoc3RyY21wKHRhYmxlLT5wcm9jbmFtZSwgcmVmLT5wcm9jbmFtZSkgIT0gMCkpKQorCQkJc2V0X2ZhaWwoZmFpbCwgdGFibGUsICJwcm9jbmFtZSBkb2VzIG5vdCBtYXRjaCBiaW5hcnkgcGF0aCBwcm9jbmFtZSIpOworCisJCWlmIChyZWYtPmN0bF9uYW1lICYmIHRhYmxlLT5jdGxfbmFtZSAmJgorCQkgICAgKHRhYmxlLT5jdGxfbmFtZSAhPSByZWYtPmN0bF9uYW1lKSkKKwkJCXNldF9mYWlsKGZhaWwsIHRhYmxlLCAiY3RsX25hbWUgZG9lcyBub3QgbWF0Y2ggYmluYXJ5IHBhdGggY3RsX25hbWUiKTsKKwl9Cit9CisKK2ludCBzeXNjdGxfY2hlY2tfdGFibGUoc3RydWN0IGN0bF90YWJsZSAqdGFibGUpCit7CisJaW50IGVycm9yID0gMDsKKwlmb3IgKDsgdGFibGUtPmN0bF9uYW1lIHx8IHRhYmxlLT5wcm9jbmFtZTsgdGFibGUrKykgeworCQljb25zdCBjaGFyICpmYWlsID0gTlVMTDsKKworCQlzeXNjdGxfcmVwYWlyX3RhYmxlKHRhYmxlKTsKKwkJaWYgKHRhYmxlLT5wYXJlbnQpIHsKKwkJCWlmICh0YWJsZS0+cHJvY25hbWUgJiYgIXRhYmxlLT5wYXJlbnQtPnByb2NuYW1lKQorCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIlBhcmVudCB3aXRob3V0IHByb2NuYW1lIik7CisJCQlpZiAodGFibGUtPmN0bF9uYW1lICYmICF0YWJsZS0+cGFyZW50LT5jdGxfbmFtZSkKKwkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJQYXJlbnQgd2l0aG91dCBjdGxfbmFtZSIpOworCQl9CisJCWlmICghdGFibGUtPnByb2NuYW1lKQorCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gcHJvY25hbWUiKTsKKwkJaWYgKHRhYmxlLT5jaGlsZCkgeworCQkJaWYgKHRhYmxlLT5kYXRhKQorCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIkRpcmVjdG9yeSB3aXRoIGRhdGE/Iik7CisJCQlpZiAodGFibGUtPm1heGxlbikKKwkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJEaXJlY3Rvcnkgd2l0aCBtYXhsZW4/Iik7CisJCQlpZiAoKHRhYmxlLT5tb2RlICYgKFNfSVJVR098U19JWFVHTykpICE9IHRhYmxlLT5tb2RlKQorCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIldyaXRhYmxlIHN5c2N0bCBkaXJlY3RvcnkiKTsKKwkJCWlmICh0YWJsZS0+cHJvY19oYW5kbGVyKQorCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIkRpcmVjdG9yeSB3aXRoIHByb2NfaGFuZGxlciIpOworCQkJaWYgKHRhYmxlLT5zdHJhdGVneSkKKwkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJEaXJlY3Rvcnkgd2l0aCBzdHJhdGVneSIpOworCQkJaWYgKHRhYmxlLT5leHRyYTEpCisJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiRGlyZWN0b3J5IHdpdGggZXh0cmExIik7CisJCQlpZiAodGFibGUtPmV4dHJhMikKKwkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJEaXJlY3Rvcnkgd2l0aCBleHRyYTIiKTsKKwkJCWlmIChzeXNjdGxfY2hlY2tfZGlyKHRhYmxlKSkKKwkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJJbmNvbnNpc3RlbnQgZGlyZWN0b3J5IG5hbWVzIik7CisJCX0gZWxzZSB7CisJCQlpZiAoKHRhYmxlLT5zdHJhdGVneSA9PSBzeXNjdGxfZGF0YSkgfHwKKwkJCSAgICAodGFibGUtPnN0cmF0ZWd5ID09IHN5c2N0bF9zdHJpbmcpIHx8CisJCQkgICAgKHRhYmxlLT5zdHJhdGVneSA9PSBzeXNjdGxfaW50dmVjKSB8fAorCQkJICAgICh0YWJsZS0+c3RyYXRlZ3kgPT0gc3lzY3RsX2ppZmZpZXMpIHx8CisJCQkgICAgKHRhYmxlLT5zdHJhdGVneSA9PSBzeXNjdGxfbXNfamlmZmllcykgfHwKKwkJCSAgICAodGFibGUtPnByb2NfaGFuZGxlciA9PSBwcm9jX2Rvc3RyaW5nKSB8fAorCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG9pbnR2ZWMpIHx8CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUworCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG9pbnR2ZWNfYnNldCkgfHwKKyNlbmRpZiAvKiBkZWYgQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUyAqLworCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG9pbnR2ZWNfbWlubWF4KSB8fAorCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG9pbnR2ZWNfamlmZmllcykgfHwKKwkJCSAgICAodGFibGUtPnByb2NfaGFuZGxlciA9PSBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKSB8fAorCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG9pbnR2ZWNfbXNfamlmZmllcykgfHwKKwkJCSAgICAodGFibGUtPnByb2NfaGFuZGxlciA9PSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KSB8fAorCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkpIHsKKwkJCQlpZiAoIXRhYmxlLT5kYXRhKQorCQkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBkYXRhIik7CisJCQkJaWYgKCF0YWJsZS0+bWF4bGVuKQorCQkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJObyBtYXhsZW4iKTsKKwkJCX0KKwkJCWlmICgodGFibGUtPnByb2NfaGFuZGxlciA9PSBwcm9jX2RvdWxvbmd2ZWNfbWlubWF4KSB8fAorCQkJICAgICh0YWJsZS0+cHJvY19oYW5kbGVyID09IHByb2NfZG91bG9uZ3ZlY19tc19qaWZmaWVzX21pbm1heCkpIHsKKwkJCQlpZiAodGFibGUtPm1heGxlbiA+IHNpemVvZiAodW5zaWduZWQgbG9uZykpIHsKKwkJCQkJaWYgKCF0YWJsZS0+ZXh0cmExKQorCQkJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gbWluIik7CisJCQkJCWlmICghdGFibGUtPmV4dHJhMikKKwkJCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgIk5vIG1heCIpOworCQkJCX0KKwkJCX0KKyNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKKwkJCWlmICh0YWJsZS0+Y3RsX25hbWUgJiYgIXRhYmxlLT5zdHJhdGVneSkKKwkJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsICJNaXNzaW5nIHN0cmF0ZWd5Iik7CisjZW5kaWYKKyNpZiAwCisJCQlpZiAoIXRhYmxlLT5jdGxfbmFtZSAmJiB0YWJsZS0+c3RyYXRlZ3kpCisJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiU3RyYXRlZ3kgd2l0aG91dCBjdGxfbmFtZSIpOworI2VuZGlmCisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwkJCWlmICh0YWJsZS0+cHJvY25hbWUgJiYgIXRhYmxlLT5wcm9jX2hhbmRsZXIpCisJCQkJc2V0X2ZhaWwoJmZhaWwsIHRhYmxlLCAiTm8gcHJvY19oYW5kbGVyIik7CisjZW5kaWYKKyNpZiAwCisJCQlpZiAoIXRhYmxlLT5wcm9jbmFtZSAmJiB0YWJsZS0+cHJvY19oYW5kbGVyKQorCQkJCXNldF9mYWlsKCZmYWlsLCB0YWJsZSwgInByb2NfaGFuZGxlciB3aXRob3V0IHByb2NuYW1lIik7CisjZW5kaWYKKwkJCXN5c2N0bF9jaGVja19sZWFmKHRhYmxlLCAmZmFpbCk7CisJCX0KKwkJc3lzY3RsX2NoZWNrX2Jpbl9wYXRoKHRhYmxlLCAmZmFpbCk7CisJCWlmIChmYWlsKSB7CisJCQlzZXRfZmFpbCgmZmFpbCwgdGFibGUsIE5VTEwpOworCQkJZXJyb3IgPSAtRUlOVkFMOworCQl9CisJCWlmICh0YWJsZS0+Y2hpbGQpCisJCQllcnJvciB8PSBzeXNjdGxfY2hlY2tfdGFibGUodGFibGUtPmNoaWxkKTsKKwl9CisJcmV0dXJuIGVycm9yOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3Rhc2tzdGF0cy5jIGIva2VybmVsL3Rhc2tzdGF0cy5jCmluZGV4IDdkNGQ3ZjkuLjM1NGU3NGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90YXNrc3RhdHMuYworKysgYi9rZXJuZWwvdGFza3N0YXRzLmMKQEAgLTIyLDYgKzIyLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nncm91cHN0YXRzLmg+CisjaW5jbHVkZSA8bGludXgvY2dyb3VwLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApAQCAtNDksNiArNTMsMTEgQEAKIAlbVEFTS1NUQVRTX0NNRF9BVFRSX1JFR0lTVEVSX0NQVU1BU0tdID0geyAudHlwZSA9IE5MQV9TVFJJTkcgfSwKIAlbVEFTS1NUQVRTX0NNRF9BVFRSX0RFUkVHSVNURVJfQ1BVTUFTS10gPSB7IC50eXBlID0gTkxBX1NUUklORyB9LH07CiAKK3N0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeQorY2dyb3Vwc3RhdHNfY21kX2dldF9wb2xpY3lbQ0dST1VQU1RBVFNfQ01EX0FUVFJfTUFYKzFdIF9fcmVhZF9tb3N0bHkgPSB7CisJW0NHUk9VUFNUQVRTX0NNRF9BVFRSX0ZEXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCit9OworCiBzdHJ1Y3QgbGlzdGVuZXIgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlwaWRfdCBwaWQ7CkBAIC0yNTQsNyArMjYzLDcgQEAKIAogCXN0YXRzLT52ZXJzaW9uID0gVEFTS1NUQVRTX1ZFUlNJT047CiAJLyoKLQkgKiBBY2NvdW50aW5nIHN1YnN5dGVtcyBjYW4gYWxzbyBhZGQgY2FsbHMgaGVyZSB0byBtb2RpZnkKKwkgKiBBY2NvdW50aW5nIHN1YnN5c3RlbXMgY2FuIGFsc28gYWRkIGNhbGxzIGhlcmUgdG8gbW9kaWZ5CiAJICogZmllbGRzIG9mIHRhc2tzdGF0cy4KIAkgKi8KIAlyZXR1cm4gcmM7CkBAIC0zNzIsNiArMzgxLDUxIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgY2dyb3Vwc3RhdHNfdXNlcl9jbWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlpbnQgcmMgPSAwOworCXN0cnVjdCBza19idWZmICpyZXBfc2tiOworCXN0cnVjdCBjZ3JvdXBzdGF0cyAqc3RhdHM7CisJc3RydWN0IG5sYXR0ciAqbmE7CisJc2l6ZV90IHNpemU7CisJdTMyIGZkOworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBmcHV0X25lZWRlZDsKKworCW5hID0gaW5mby0+YXR0cnNbQ0dST1VQU1RBVFNfQ01EX0FUVFJfRkRdOworCWlmICghbmEpCisJCXJldHVybiAtRUlOVkFMOworCisJZmQgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tDR1JPVVBTVEFUU19DTURfQVRUUl9GRF0pOworCWZpbGUgPSBmZ2V0X2xpZ2h0KGZkLCAmZnB1dF9uZWVkZWQpOworCWlmIChmaWxlKSB7CisJCXNpemUgPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGNncm91cHN0YXRzKSk7CisKKwkJcmMgPSBwcmVwYXJlX3JlcGx5KGluZm8sIENHUk9VUFNUQVRTX0NNRF9ORVcsICZyZXBfc2tiLAorCQkJCQlzaXplKTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCW5hID0gbmxhX3Jlc2VydmUocmVwX3NrYiwgQ0dST1VQU1RBVFNfVFlQRV9DR1JPVVBfU1RBVFMsCisJCQkJCXNpemVvZihzdHJ1Y3QgY2dyb3Vwc3RhdHMpKTsKKwkJc3RhdHMgPSBubGFfZGF0YShuYSk7CisJCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOworCisJCXJjID0gY2dyb3Vwc3RhdHNfYnVpbGQoc3RhdHMsIGZpbGUtPmZfZGVudHJ5KTsKKwkJaWYgKHJjIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCWZwdXRfbGlnaHQoZmlsZSwgZnB1dF9uZWVkZWQpOworCQlyZXR1cm4gc2VuZF9yZXBseShyZXBfc2tiLCBpbmZvLT5zbmRfcGlkKTsKKwl9CisKK2VycjoKKwlpZiAoZmlsZSkKKwkJZnB1dF9saWdodChmaWxlLCBmcHV0X25lZWRlZCk7CisJbmxtc2dfZnJlZShyZXBfc2tiKTsKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgdGFza3N0YXRzX3VzZXJfY21kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7CiAJaW50IHJjID0gMDsKQEAgLTUyMiw2ICs1NzYsMTIgQEAKIAkucG9saWN5CQk9IHRhc2tzdGF0c19jbWRfZ2V0X3BvbGljeSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZ2VubF9vcHMgY2dyb3Vwc3RhdHNfb3BzID0geworCS5jbWQJCT0gQ0dST1VQU1RBVFNfQ01EX0dFVCwKKwkuZG9pdAkJPSBjZ3JvdXBzdGF0c191c2VyX2NtZCwKKwkucG9saWN5CQk9IGNncm91cHN0YXRzX2NtZF9nZXRfcG9saWN5LAorfTsKKwogLyogTmVlZGVkIGVhcmx5IGluIGluaXRpYWxpemF0aW9uICovCiB2b2lkIF9faW5pdCB0YXNrc3RhdHNfaW5pdF9lYXJseSh2b2lkKQogewpAQCAtNTQ2LDggKzYwNiwxNSBAQAogCWlmIChyYyA8IDApCiAJCWdvdG8gZXJyOwogCisJcmMgPSBnZW5sX3JlZ2lzdGVyX29wcygmZmFtaWx5LCAmY2dyb3Vwc3RhdHNfb3BzKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycl9jZ3JvdXBfb3BzOworCiAJZmFtaWx5X3JlZ2lzdGVyZWQgPSAxOworCXByaW50aygicmVnaXN0ZXJlZCB0YXNrc3RhdHMgdmVyc2lvbiAlZFxuIiwgVEFTS1NUQVRTX0dFTkxfVkVSU0lPTik7CiAJcmV0dXJuIDA7CitlcnJfY2dyb3VwX29wczoKKwlnZW5sX3VucmVnaXN0ZXJfb3BzKCZmYW1pbHksICZ0YXNrc3RhdHNfb3BzKTsKIGVycjoKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZmYW1pbHkpOwogCXJldHVybiByYzsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IDJkNWI2YTYuLjA5ZDNjNDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lLmMKKysrIGIva2VybmVsL3RpbWUuYwpAQCAtOSw5ICs5LDkgQEAKICAqLwogLyoKICAqIE1vZGlmaWNhdGlvbiBoaXN0b3J5IGtlcm5lbC90aW1lLmMKLSAqIAorICoKICAqIDE5OTMtMDktMDIgICAgUGhpbGlwIEdsYWRzdG9uZQotICogICAgICBDcmVhdGVkIGZpbGUgd2l0aCB0aW1lIHJlbGF0ZWQgZnVuY3Rpb25zIGZyb20gc2NoZWQuYyBhbmQgYWRqdGltZXgoKSAKKyAqICAgICAgQ3JlYXRlZCBmaWxlIHdpdGggdGltZSByZWxhdGVkIGZ1bmN0aW9ucyBmcm9tIHNjaGVkLmMgYW5kIGFkanRpbWV4KCkKICAqIDE5OTMtMTAtMDggICAgVG9yc3RlbiBEdXdlCiAgKiAgICAgIGFkanRpbWUgaW50ZXJmYWNlIHVwZGF0ZSBhbmQgQ01PUyBjbG9jayB3cml0ZSBjb2RlCiAgKiAxOTk1LTA4LTEzICAgIFRvcnN0ZW4gRHV3ZQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC0zOCw3ICszOSw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLS8qIAorLyoKICAqIFRoZSB0aW1lem9uZSB3aGVyZSB0aGUgbG9jYWwgc3lzdGVtIGlzIGxvY2F0ZWQuICBVc2VkIGFzIGEgZGVmYXVsdCBieSBzb21lCiAgKiBwcm9ncmFtcyB3aG8gb2J0YWluIHRoaXMgdmFsdWUgYnkgdXNpbmcgZ2V0dGltZW9mZGF5LgogICovCkBAIC03MSw3ICs3Miw3IEBACiAgKiB3aHkgbm90IG1vdmUgaXQgaW50byB0aGUgYXBwcm9wcmlhdGUgYXJjaCBkaXJlY3RvcnkgKGZvciB0aG9zZQogICogYXJjaGl0ZWN0dXJlcyB0aGF0IG5lZWQgaXQpLgogICovCi0gCisKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3RpbWUodGltZV90IF9fdXNlciAqdHB0cikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHY7CkBAIC0xMTAsMTAgKzExMSwxMCBAQAogLyoKICAqIEFkanVzdCB0aGUgdGltZSBvYnRhaW5lZCBmcm9tIHRoZSBDTU9TIHRvIGJlIFVUQyB0aW1lIGluc3RlYWQgb2YKICAqIGxvY2FsIHRpbWUuCi0gKiAKKyAqCiAgKiBUaGlzIGlzIHVnbHksIGJ1dCBwcmVmZXJhYmxlIHRvIHRoZSBhbHRlcm5hdGl2ZXMuICBPdGhlcndpc2Ugd2UKICAqIHdvdWxkIGVpdGhlciBuZWVkIHRvIHdyaXRlIGEgcHJvZ3JhbSB0byBkbyBpdCBpbiAvZXRjL3JjIChhbmQgcmlzawotICogY29uZnVzaW9uIGlmIHRoZSBwcm9ncmFtIGdldHMgcnVuIG1vcmUgdGhhbiBvbmNlOyBpdCB3b3VsZCBhbHNvIGJlIAorICogY29uZnVzaW9uIGlmIHRoZSBwcm9ncmFtIGdldHMgcnVuIG1vcmUgdGhhbiBvbmNlOyBpdCB3b3VsZCBhbHNvIGJlCiAgKiBoYXJkIHRvIG1ha2UgdGhlIHByb2dyYW0gd2FycCB0aGUgY2xvY2sgcHJlY2lzZWx5IG4gaG91cnMpICBvcgogICogY29tcGlsZSBpbiB0aGUgdGltZXpvbmUgaW5mb3JtYXRpb24gaW50byB0aGUga2VybmVsLiAgQmFkLCBiYWQuLi4uCiAgKgpAQCAtMTU4LDYgKzE1OSw3IEBACiAJaWYgKHR6KSB7CiAJCS8qIFNNUCBzYWZlLCBnbG9iYWwgaXJxIGxvY2tpbmcgbWFrZXMgaXQgd29yay4gKi8KIAkJc3lzX3R6ID0gKnR6OworCQl1cGRhdGVfdnN5c2NhbGxfdHooKTsKIAkJaWYgKGZpcnN0dGltZSkgewogCQkJZmlyc3R0aW1lID0gMDsKIAkJCWlmICghdHYpCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jIGIva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYwppbmRleCA1MWI2YTZhLi5jOGE5ZDEzIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKQEAgLTIwNywxNSArMjA3LDEyIEBACiAgKi8KIHZvaWQgY2xvY2tzb3VyY2VfcmVzdW1lKHZvaWQpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbG9ja3NvdXJjZV9sb2NrLCBmbGFncyk7CiAKLQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmNsb2Nrc291cmNlX2xpc3QpIHsKLQkJc3RydWN0IGNsb2Nrc291cmNlICpjczsKLQotCQljcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2xvY2tzb3VyY2UsIGxpc3QpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3MsICZjbG9ja3NvdXJjZV9saXN0LCBsaXN0KSB7CiAJCWlmIChjcy0+cmVzdW1lKQogCQkJY3MtPnJlc3VtZSgpOwogCX0KQEAgLTM2OSw3ICszNjYsNiBAQAogCQkJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBjbG9ja3NvdXJjZSAqb3ZyID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAJc2l6ZV90IHJldCA9IGNvdW50OwogCWludCBsZW47CiAKQEAgLTM4OSwxMiArMzg1LDExIEBACiAKIAlsZW4gPSBzdHJsZW4ob3ZlcnJpZGVfbmFtZSk7CiAJaWYgKGxlbikgeworCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzOworCiAJCW92ciA9IGNsb2Nrc291cmNlX292ZXJyaWRlOwogCQkvKiB0cnkgdG8gc2VsZWN0IGl0OiAqLwotCQlsaXN0X2Zvcl9lYWNoKHRtcCwgJmNsb2Nrc291cmNlX2xpc3QpIHsKLQkJCXN0cnVjdCBjbG9ja3NvdXJjZSAqY3M7Ci0KLQkJCWNzID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBjbG9ja3NvdXJjZSwgbGlzdCk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3MsICZjbG9ja3NvdXJjZV9saXN0LCBsaXN0KSB7CiAJCQlpZiAoc3RybGVuKGNzLT5uYW1lKSA9PSBsZW4gJiYKIAkJCSAgICAhc3RyY21wKGNzLT5uYW1lLCBvdmVycmlkZV9uYW1lKSkKIAkJCQlvdnIgPSBjczsKQEAgLTQyMiwxNCArNDE3LDExIEBACiBzdGF0aWMgc3NpemVfdAogc3lzZnNfc2hvd19hdmFpbGFibGVfY2xvY2tzb3VyY2VzKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CisJc3RydWN0IGNsb2Nrc291cmNlICpzcmM7CiAJY2hhciAqY3VyciA9IGJ1ZjsKIAogCXNwaW5fbG9ja19pcnEoJmNsb2Nrc291cmNlX2xvY2spOwotCWxpc3RfZm9yX2VhY2godG1wLCAmY2xvY2tzb3VyY2VfbGlzdCkgewotCQlzdHJ1Y3QgY2xvY2tzb3VyY2UgKnNyYzsKLQotCQlzcmMgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGNsb2Nrc291cmNlLCBsaXN0KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNyYywgJmNsb2Nrc291cmNlX2xpc3QsIGxpc3QpIHsKIAkJY3VyciArPSBzcHJpbnRmKGN1cnIsICIlcyAiLCBzcmMtPm5hbWUpOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmNsb2Nrc291cmNlX2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1zY2hlZC5jIGIva2VybmVsL3RpbWUvdGljay1zY2hlZC5jCmluZGV4IGNlODlmZmIuLjEwYTEzNDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYworKysgYi9rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMKQEAgLTE1Myw2ICsxNTMsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VxLCBsYXN0X2ppZmZpZXMsIG5leHRfamlmZmllcywgZGVsdGFfamlmZmllcywgZmxhZ3M7CiAJc3RydWN0IHRpY2tfc2NoZWQgKnRzOwogCWt0aW1lX3QgbGFzdF91cGRhdGUsIGV4cGlyZXMsIG5vdywgZGVsdGE7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2ID0gX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9kZXZpY2UpLmV2dGRldjsKIAlpbnQgY3B1OwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMzAyLDExICszMDMsMjYgQEAKIG91dDoKIAl0cy0+bmV4dF9qaWZmaWVzID0gbmV4dF9qaWZmaWVzOwogCXRzLT5sYXN0X2ppZmZpZXMgPSBsYXN0X2ppZmZpZXM7CisJdHMtPnNsZWVwX2xlbmd0aCA9IGt0aW1lX3N1YihkZXYtPm5leHRfZXZlbnQsIG5vdyk7CiBlbmQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKioKKyAqIHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoIC0gcmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgc2xlZXAKKyAqCisgKiBDYWxsZWQgZnJvbSBwb3dlciBzdGF0ZSBjb250cm9sIGNvZGUgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkCisgKi8KK2t0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgodm9pZCkKK3sKKwlzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSAmX19nZXRfY3B1X3Zhcih0aWNrX2NwdV9zY2hlZCk7CisKKwlyZXR1cm4gdHMtPnNsZWVwX2xlbmd0aDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgpOworCisvKioKICAqIG5vaHpfcmVzdGFydF9zY2hlZF90aWNrIC0gcmVzdGFydCB0aGUgaWRsZSB0aWNrIGZyb20gdGhlIGlkbGUgdGFzawogICoKICAqIFJlc3RhcnQgdGhlIGlkbGUgdGljayB3aGVuIHRoZSBDUFUgaXMgd29rZW4gdXAgZnJvbSBpZGxlCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDZjZTE5NTIuLmZiNGU2N2QgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BpZF9uYW1lc3BhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpAQCAtODE3LDcgKzgxOCw3IEBACiAjZW5kaWYKIAogLyoKLSAqIENhbGxlZCBmcm9tIHRoZSB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlciB0byBjaGFyZ2Ugb25lIHRpY2sgdG8gdGhlIGN1cnJlbnQgCisgKiBDYWxsZWQgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIgdG8gY2hhcmdlIG9uZSB0aWNrIHRvIHRoZSBjdXJyZW50CiAgKiBwcm9jZXNzLiAgdXNlcl90aWNrIGlzIDEgaWYgdGhlIHRpY2sgaXMgdXNlciB0aW1lLCAwIGZvciBzeXN0ZW0uCiAgKi8KIHZvaWQgdXBkYXRlX3Byb2Nlc3NfdGltZXMoaW50IHVzZXJfdGljaykKQEAgLTgyNiwxMCArODI3LDEzIEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCS8qIE5vdGU6IHRoaXMgdGltZXIgaXJxIGNvbnRleHQgbXVzdCBiZSBhY2NvdW50ZWQgZm9yIGFzIHdlbGwuICovCi0JaWYgKHVzZXJfdGljaykKKwlpZiAodXNlcl90aWNrKSB7CiAJCWFjY291bnRfdXNlcl90aW1lKHAsIGppZmZpZXNfdG9fY3B1dGltZSgxKSk7Ci0JZWxzZQorCQlhY2NvdW50X3VzZXJfdGltZV9zY2FsZWQocCwgamlmZmllc190b19jcHV0aW1lKDEpKTsKKwl9IGVsc2UgewogCQlhY2NvdW50X3N5c3RlbV90aW1lKHAsIEhBUkRJUlFfT0ZGU0VULCBqaWZmaWVzX3RvX2NwdXRpbWUoMSkpOworCQlhY2NvdW50X3N5c3RlbV90aW1lX3NjYWxlZChwLCBqaWZmaWVzX3RvX2NwdXRpbWUoMSkpOworCX0KIAlydW5fbG9jYWxfdGltZXJzKCk7CiAJaWYgKHJjdV9wZW5kaW5nKGNwdSkpCiAJCXJjdV9jaGVja19jYWxsYmFja3MoY3B1LCB1c2VyX3RpY2spOwpAQCAtOTUzLDcgKzk1Nyw3IEBACiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cGlkKHZvaWQpCiB7Ci0JcmV0dXJuIGN1cnJlbnQtPnRnaWQ7CisJcmV0dXJuIHRhc2tfdGdpZF92bnIoY3VycmVudCk7CiB9CiAKIC8qCkBAIC05NjcsNyArOTcxLDcgQEAKIAlpbnQgcGlkOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXBpZCA9IHJjdV9kZXJlZmVyZW5jZShjdXJyZW50LT5yZWFsX3BhcmVudCktPnRnaWQ7CisJcGlkID0gdGFza19wcGlkX25yX25zKGN1cnJlbnQsIGN1cnJlbnQtPm5zcHJveHktPnBpZF9ucyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gcGlkOwpAQCAtMTA5OSw3ICsxMTAzLDcgQEAKIC8qIFRocmVhZCBJRCAtIHRoZSBpbnRlcm5hbCBrZXJuZWwgInBpZCIgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0dGlkKHZvaWQpCiB7Ci0JcmV0dXJuIGN1cnJlbnQtPnBpZDsKKwlyZXR1cm4gdGFza19waWRfdm5yKGN1cnJlbnQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2tlcm5lbC90c2FjY3QuYyBiL2tlcm5lbC90c2FjY3QuYwppbmRleCBjMTIyMTMxLi40YWIxYjU4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHNhY2N0LmMKKysrIGIva2VybmVsL3RzYWNjdC5jCkBAIC02Miw2ICs2MiwxMCBAQAogCXJjdV9yZWFkX3VubG9jaygpOwogCXN0YXRzLT5hY191dGltZQkgPSBjcHV0aW1lX3RvX21zZWNzKHRzay0+dXRpbWUpICogVVNFQ19QRVJfTVNFQzsKIAlzdGF0cy0+YWNfc3RpbWUJID0gY3B1dGltZV90b19tc2Vjcyh0c2stPnN0aW1lKSAqIFVTRUNfUEVSX01TRUM7CisJc3RhdHMtPmFjX3V0aW1lc2NhbGVkID0KKwkJY3B1dGltZV90b19tc2Vjcyh0c2stPnV0aW1lc2NhbGVkKSAqIFVTRUNfUEVSX01TRUM7CisJc3RhdHMtPmFjX3N0aW1lc2NhbGVkID0KKwkJY3B1dGltZV90b19tc2Vjcyh0c2stPnN0aW1lc2NhbGVkKSAqIFVTRUNfUEVSX01TRUM7CiAJc3RhdHMtPmFjX21pbmZsdCA9IHRzay0+bWluX2ZsdDsKIAlzdGF0cy0+YWNfbWFqZmx0ID0gdHNrLT5tYWpfZmx0OwogCmRpZmYgLS1naXQgYS9rZXJuZWwvd29ya3F1ZXVlLmMgYi9rZXJuZWwvd29ya3F1ZXVlLmMKaW5kZXggZTA4MGQxZC4uNTJkNWU3YyAxMDA2NDQKLS0tIGEva2VybmVsL3dvcmtxdWV1ZS5jCisrKyBiL2tlcm5lbC93b3JrcXVldWUuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogCiAvKgogICogVGhlIHBlci1DUFUgd29ya3F1ZXVlIChpZiBzaW5nbGUgdGhyZWFkLCB3ZSBhbHdheXMgdXNlIHRoZSBmaXJzdApAQCAtNjEsNiArNjIsOSBAQAogCWNvbnN0IGNoYXIgKm5hbWU7CiAJaW50IHNpbmdsZXRocmVhZDsKIAlpbnQgZnJlZXplYWJsZTsJCS8qIEZyZWV6ZSB0aHJlYWRzIGR1cmluZyBzdXNwZW5kICovCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwlzdHJ1Y3QgbG9ja2RlcF9tYXAgbG9ja2RlcF9tYXA7CisjZW5kaWYKIH07CiAKIC8qIEFsbCB0aGUgcGVyLWNwdSB3b3JrcXVldWVzIG9uIHRoZSBzeXN0ZW0sIGZvciBob3RwbHVnIGNwdSB0byBhZGQvcmVtb3ZlCkBAIC0yNTAsNiArMjU0LDE3IEBACiAJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9IGxpc3RfZW50cnkoY3dxLT53b3JrbGlzdC5uZXh0LAogCQkJCQkJc3RydWN0IHdvcmtfc3RydWN0LCBlbnRyeSk7CiAJCXdvcmtfZnVuY190IGYgPSB3b3JrLT5mdW5jOworI2lmZGVmIENPTkZJR19MT0NLREVQCisJCS8qCisJCSAqIEl0IGlzIHBlcm1pc3NpYmxlIHRvIGZyZWUgdGhlIHN0cnVjdCB3b3JrX3N0cnVjdAorCQkgKiBmcm9tIGluc2lkZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgZnJvbSBpdCwKKwkJICogdGhpcyB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvciBsb2NrZGVwIHRvby4KKwkJICogVG8gYXZvaWQgYm9ndXMgImhlbGQgbG9jayBmcmVlZCIgd2FybmluZ3MgYXMgd2VsbAorCQkgKiBhcyBwcm9ibGVtcyB3aGVuIGxvb2tpbmcgaW50byB3b3JrLT5sb2NrZGVwX21hcCwKKwkJICogbWFrZSBhIGNvcHkgYW5kIHVzZSB0aGF0IGhlcmUuCisJCSAqLworCQlzdHJ1Y3QgbG9ja2RlcF9tYXAgbG9ja2RlcF9tYXAgPSB3b3JrLT5sb2NrZGVwX21hcDsKKyNlbmRpZgogCiAJCWN3cS0+Y3VycmVudF93b3JrID0gd29yazsKIAkJbGlzdF9kZWxfaW5pdChjd3EtPndvcmtsaXN0Lm5leHQpOwpAQCAtMjU3LDEzICsyNzIsMTcgQEAKIAogCQlCVUdfT04oZ2V0X3dxX2RhdGEod29yaykgIT0gY3dxKTsKIAkJd29ya19jbGVhcl9wZW5kaW5nKHdvcmspOworCQlsb2NrX2FjcXVpcmUoJmN3cS0+d3EtPmxvY2tkZXBfbWFwLCAwLCAwLCAwLCAyLCBfVEhJU19JUF8pOworCQlsb2NrX2FjcXVpcmUoJmxvY2tkZXBfbWFwLCAwLCAwLCAwLCAyLCBfVEhJU19JUF8pOwogCQlmKHdvcmspOworCQlsb2NrX3JlbGVhc2UoJmxvY2tkZXBfbWFwLCAxLCBfVEhJU19JUF8pOworCQlsb2NrX3JlbGVhc2UoJmN3cS0+d3EtPmxvY2tkZXBfbWFwLCAxLCBfVEhJU19JUF8pOwogCiAJCWlmICh1bmxpa2VseShpbl9hdG9taWMoKSB8fCBsb2NrZGVwX2RlcHRoKGN1cnJlbnQpID4gMCkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiQlVHOiB3b3JrcXVldWUgbGVha2VkIGxvY2sgb3IgYXRvbWljOiAiCiAJCQkJCSIlcy8weCUwOHgvJWRcbiIsCiAJCQkJCWN1cnJlbnQtPmNvbW0sIHByZWVtcHRfY291bnQoKSwKLQkJCQkgICAgICAgCWN1cnJlbnQtPnBpZCk7CisJCQkJICAgICAgIAl0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCQlwcmludGsoS0VSTl9FUlIgIiAgICBsYXN0IGZ1bmN0aW9uOiAiKTsKIAkJCXByaW50X3N5bWJvbCgiJXNcbiIsICh1bnNpZ25lZCBsb25nKWYpOwogCQkJZGVidWdfc2hvd19oZWxkX2xvY2tzKGN1cnJlbnQpOwpAQCAtMzc2LDYgKzM5NSw4IEBACiAJaW50IGNwdTsKIAogCW1pZ2h0X3NsZWVwKCk7CisJbG9ja19hY3F1aXJlKCZ3cS0+bG9ja2RlcF9tYXAsIDAsIDAsIDAsIDIsIF9USElTX0lQXyk7CisJbG9ja19yZWxlYXNlKCZ3cS0+bG9ja2RlcF9tYXAsIDEsIF9USElTX0lQXyk7CiAJZm9yX2VhY2hfY3B1X21hc2soY3B1LCAqY3B1X21hcCkKIAkJZmx1c2hfY3B1X3dvcmtxdWV1ZShwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpKTsKIH0KQEAgLTQ0Niw2ICs0NjcsOSBAQAogCiAJbWlnaHRfc2xlZXAoKTsKIAorCWxvY2tfYWNxdWlyZSgmd29yay0+bG9ja2RlcF9tYXAsIDAsIDAsIDAsIDIsIF9USElTX0lQXyk7CisJbG9ja19yZWxlYXNlKCZ3b3JrLT5sb2NrZGVwX21hcCwgMSwgX1RISVNfSVBfKTsKKwogCWN3cSA9IGdldF93cV9kYXRhKHdvcmspOwogCWlmICghY3dxKQogCQlyZXR1cm47CkBAIC02OTUsOCArNzE5LDEwIEBACiAJfQogfQogCi1zdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqX19jcmVhdGVfd29ya3F1ZXVlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJCSAgICBpbnQgc2luZ2xldGhyZWFkLCBpbnQgZnJlZXplYWJsZSkKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpfX2NyZWF0ZV93b3JrcXVldWVfa2V5KGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJCQlpbnQgc2luZ2xldGhyZWFkLAorCQkJCQkJaW50IGZyZWV6ZWFibGUsCisJCQkJCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3E7CkBAIC03MTMsNiArNzM5LDcgQEAKIAl9CiAKIAl3cS0+bmFtZSA9IG5hbWU7CisJbG9ja2RlcF9pbml0X21hcCgmd3EtPmxvY2tkZXBfbWFwLCBuYW1lLCBrZXksIDApOwogCXdxLT5zaW5nbGV0aHJlYWQgPSBzaW5nbGV0aHJlYWQ7CiAJd3EtPmZyZWV6ZWFibGUgPSBmcmVlemVhYmxlOwogCUlOSVRfTElTVF9IRUFEKCZ3cS0+bGlzdCk7CkBAIC03NDEsNyArNzY4LDcgQEAKIAl9CiAJcmV0dXJuIHdxOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoX19jcmVhdGVfd29ya3F1ZXVlKTsKK0VYUE9SVF9TWU1CT0xfR1BMKF9fY3JlYXRlX3dvcmtxdWV1ZV9rZXkpOwogCiBzdGF0aWMgdm9pZCBjbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQoc3RydWN0IGNwdV93b3JrcXVldWVfc3RydWN0ICpjd3EsIGludCBjcHUpCiB7CkBAIC03NTIsNiArNzc5LDkgQEAKIAlpZiAoY3dxLT50aHJlYWQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCisJbG9ja19hY3F1aXJlKCZjd3EtPndxLT5sb2NrZGVwX21hcCwgMCwgMCwgMCwgMiwgX1RISVNfSVBfKTsKKwlsb2NrX3JlbGVhc2UoJmN3cS0+d3EtPmxvY2tkZXBfbWFwLCAxLCBfVEhJU19JUF8pOworCiAJZmx1c2hfY3B1X3dvcmtxdWV1ZShjd3EpOwogCS8qCiAJICogSWYgdGhlIGNhbGxlciBpcyBDUFVfREVBRCBhbmQgY3dxLT53b3JrbGlzdCB3YXMgbm90IGVtcHR5LApkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA3ZDE2ZTY0Li5jNTY3ZjIxIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtNDk4LDMgKzQ5OCw1IEBACiAJc2VsZWN0IEZSQU1FX1BPSU5URVIKIAloZWxwCiAJICBQcm92aWRlIHN0YWNrdHJhY2UgZmlsdGVyIGZvciBmYXVsdC1pbmplY3Rpb24gY2FwYWJpbGl0aWVzCisKK3NvdXJjZSAic2FtcGxlcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IGM1ZjIxNWQuLjNhMDk4M2IgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQorKysgYi9saWIvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAJIHJidHJlZS5vIHJhZGl4LXRyZWUubyBkdW1wX3N0YWNrLm8gXAogCSBpZHIubyBpbnRfc3FydC5vIGJpdG1hcC5vIGV4dGFibGUubyBwcmlvX3RyZWUubyBcCiAJIHNoYTEubyBpcnFfcmVncy5vIHJlY2lwcm9jYWxfZGl2Lm8gYXJndl9zcGxpdC5vIFwKLQkgcHJvcG9ydGlvbnMubworCSBwcm9wb3J0aW9ucy5vIHByaW9faGVhcC5vCiAKIGxpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCmRpZmYgLS1naXQgYS9saWIvYXJndl9zcGxpdC5jIGIvbGliL2FyZ3Zfc3BsaXQuYwppbmRleCBmYWQ2Y2U0Li41MjA1YThkIDEwMDY0NAotLS0gYS9saWIvYXJndl9zcGxpdC5jCisrKyBiL2xpYi9hcmd2X3NwbGl0LmMKQEAgLTQsNyArNCw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogc3RhdGljIGNvbnN0IGNoYXIgKnNraXBfc2VwKGNvbnN0IGNoYXIgKmNwKQogewpkaWZmIC0tZ2l0IGEvbGliL2NyYzMyLmMgYi9saWIvY3JjMzIuYwppbmRleCBiZmMzMzMxLi5kMmMyZjI1IDEwMDY0NAotLS0gYS9saWIvY3JjMzIuYworKysgYi9saWIvY3JjMzIuYwpAQCAtNDksNyArNDksNyBAQAogICogQHA6IHBvaW50ZXIgdG8gYnVmZmVyIG92ZXIgd2hpY2ggQ1JDIGlzIHJ1bgogICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlciBAcAogICovCi11MzIgX19hdHRyaWJ1dGVfcHVyZV9fIGNyYzMyX2xlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOwordTMyIF9fcHVyZSBjcmMzMl9sZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKIAogI2lmIENSQ19MRV9CSVRTID09IDEKIC8qCkBAIC01Nyw3ICs1Nyw3IEBACiAgKiBzaW1wbGlmaWVkIGJ5IGlubGluaW5nIHRoZSB0YWJsZSBpbiA/OiBmb3JtLgogICovCiAKLXUzMiBfX2F0dHJpYnV0ZV9wdXJlX18gY3JjMzJfbGUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3UzMiBfX3B1cmUgY3JjMzJfbGUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKIAl3aGlsZSAobGVuLS0pIHsKQEAgLTY5LDcgKzY5LDcgQEAKIH0KICNlbHNlCQkJCS8qIFRhYmxlLWJhc2VkIGFwcHJvYWNoICovCiAKLXUzMiBfX2F0dHJpYnV0ZV9wdXJlX18gY3JjMzJfbGUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKK3UzMiBfX3B1cmUgY3JjMzJfbGUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKIHsKICMgaWYgQ1JDX0xFX0JJVFMgPT0gOAogCWNvbnN0IHUzMiAgICAgICpiID0odTMyICopcDsKQEAgLTE0NSw3ICsxNDUsNyBAQAogICogQHA6IHBvaW50ZXIgdG8gYnVmZmVyIG92ZXIgd2hpY2ggQ1JDIGlzIHJ1bgogICogQGxlbjogbGVuZ3RoIG9mIGJ1ZmZlciBAcAogICovCi11MzIgX19hdHRyaWJ1dGVfcHVyZV9fIGNyYzMyX2JlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pOwordTMyIF9fcHVyZSBjcmMzMl9iZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKTsKIAogI2lmIENSQ19CRV9CSVRTID09IDEKIC8qCkBAIC0xNTMsNyArMTUzLDcgQEAKICAqIHNpbXBsaWZpZWQgYnkgaW5saW5pbmcgdGhlIHRhYmxlIGluID86IGZvcm0uCiAgKi8KIAotdTMyIF9fYXR0cmlidXRlX3B1cmVfXyBjcmMzMl9iZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKQordTMyIF9fcHVyZSBjcmMzMl9iZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKQogewogCWludCBpOwogCXdoaWxlIChsZW4tLSkgewpAQCAtMTY3LDcgKzE2Nyw3IEBACiB9CiAKICNlbHNlCQkJCS8qIFRhYmxlLWJhc2VkIGFwcHJvYWNoICovCi11MzIgX19hdHRyaWJ1dGVfcHVyZV9fIGNyYzMyX2JlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pCit1MzIgX19wdXJlIGNyYzMyX2JlKHUzMiBjcmMsIHVuc2lnbmVkIGNoYXIgY29uc3QgKnAsIHNpemVfdCBsZW4pCiB7CiAjIGlmIENSQ19CRV9CSVRTID09IDgKIAljb25zdCB1MzIgICAgICAqYiA9KHUzMiAqKXA7CmRpZmYgLS1naXQgYS9saWIvaHdlaWdodC5jIGIvbGliL2h3ZWlnaHQuYwppbmRleCAzNjA1NTZhLi4zODk0MjRlIDEwMDY0NAotLS0gYS9saWIvaHdlaWdodC5jCisrKyBiL2xpYi9od2VpZ2h0LmMKQEAgLTEsNiArMSw2IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCiAvKioKICAqIGh3ZWlnaHROIC0gcmV0dXJucyB0aGUgaGFtbWluZyB3ZWlnaHQgb2YgYSBOLWJpdCB3b3JkCmRpZmYgLS1naXQgYS9saWIva2VybmVsX2xvY2suYyBiL2xpYi9rZXJuZWxfbG9jay5jCmluZGV4IGUwZmRmZGQuLmY3M2UyZjggMTAwNjQ0Ci0tLSBhL2xpYi9rZXJuZWxfbG9jay5jCisrKyBiL2xpYi9rZXJuZWxfbG9jay5jCkBAIC0yLDcgKzIsNyBAQAogICogbGliL2tlcm5lbF9sb2NrLmMKICAqCiAgKiBUaGlzIGlzIHRoZSB0cmFkaXRpb25hbCBCS0wgLSBiaWcga2VybmVsIGxvY2suIExhcmdlbHkKLSAqIHJlbGVnYXRlZCB0byBvYnNvbGVzY2Vuc2UsIGJ1dCB1c2VkIGJ5IHZhcmlvdXMgbGVzcworICogcmVsZWdhdGVkIHRvIG9ic29sZXNjZW5jZSwgYnV0IHVzZWQgYnkgdmFyaW91cyBsZXNzCiAgKiBpbXBvcnRhbnQgKG9yIGxhenkpIHN1YnN5c3RlbXMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpkaWZmIC0tZ2l0IGEvbGliL2tvYmplY3RfdWV2ZW50LmMgYi9saWIva29iamVjdF91ZXZlbnQuYwppbmRleCAyZTRlYWU1Li41ODg2MTQ3IDEwMDY0NAotLS0gYS9saWIva29iamVjdF91ZXZlbnQuYworKysgYi9saWIva29iamVjdF91ZXZlbnQuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJZWxzZQogCQlzdWJzeXN0ZW0gPSBrb2JqZWN0X25hbWUoJmtzZXQtPmtvYmopOwogCWlmICghc3Vic3lzdGVtKSB7Ci0JCXByX2RlYnVnKCJ1bnNldCBzdWJzeXRlbSBjYXVzZWQgdGhlIGV2ZW50IHRvIGRyb3AhXG4iKTsKKwkJcHJfZGVidWcoInVuc2V0IHN1YnN5c3RlbSBjYXVzZWQgdGhlIGV2ZW50IHRvIGRyb3AhXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9saWIvbGliY3JjMzJjLmMgYi9saWIvbGliY3JjMzJjLmMKaW5kZXggNjBmNDY4MC4uODAyZjExZiAxMDA2NDQKLS0tIGEvbGliL2xpYmNyYzMyYy5jCisrKyBiL2xpYi9saWJjcmMzMmMuYwpAQCAtNjYsNyArNjYsNyBAQAogICogbG9vcCBiZWxvdyB3aXRoIGNyYzMyIGFuZCB2YXJ5IHRoZSBQT0xZIGlmIHdlIGRvbid0IGZpbmQgdmFsdWUgaW4gdGVybXMKICAqIG9mIHNwYWNlIGFuZCBtYWludGFpbmFiaWxpdHkgaW4ga2VlcGluZyB0aGUgdHdvIG1vZHVsZXMgc2VwYXJhdGUuCiAgKi8KLXUzMiBfX2F0dHJpYnV0ZV9wdXJlX18KK3UzMiBfX3B1cmUKIGNyYzMyY19sZSh1MzIgY3JjLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpwLCBzaXplX3QgbGVuKQogewogCWludCBpOwpAQCAtMTYwLDcgKzE2MCw3IEBACiAgKiBjcmMgdXNpbmcgdGFibGUuCiAgKi8KIAotdTMyIF9fYXR0cmlidXRlX3B1cmVfXwordTMyIF9fcHVyZQogY3JjMzJjX2xlKHUzMiBzZWVkLCB1bnNpZ25lZCBjaGFyIGNvbnN0ICpkYXRhLCBzaXplX3QgbGVuZ3RoKQogewogCXUzMiBjcmMgPSBfX2NwdV90b19sZTMyKHNlZWQpOwpAQCAtMTc3LDcgKzE3Nyw3IEBACiBFWFBPUlRfU1lNQk9MKGNyYzMyY19iZSk7CiAKICNpZiBDUkNfQkVfQklUUyA9PSAxCi11MzIgX19hdHRyaWJ1dGVfcHVyZV9fCit1MzIgX19wdXJlCiBjcmMzMmNfYmUodTMyIGNyYywgdW5zaWduZWQgY2hhciBjb25zdCAqcCwgc2l6ZV90IGxlbikKIHsKIAlpbnQgaTsKZGlmZiAtLWdpdCBhL2xpYi9wZXJjcHVfY291bnRlci5jIGIvbGliL3BlcmNwdV9jb3VudGVyLmMKaW5kZXggOTY1OWVhYi4uMzkzYTBlOSAxMDA2NDQKLS0tIGEvbGliL3BlcmNwdV9jb3VudGVyLmMKKysrIGIvbGliL3BlcmNwdV9jb3VudGVyLmMKQEAgLTEyNCwxMiArMTI0LDEzIEBACiAJbXV0ZXhfbG9jaygmcGVyY3B1X2NvdW50ZXJzX2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZmJjLCAmcGVyY3B1X2NvdW50ZXJzLCBsaXN0KSB7CiAJCXMzMiAqcGNvdW50OworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9jaygmZmJjLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmZiYy0+bG9jaywgZmxhZ3MpOwogCQlwY291bnQgPSBwZXJfY3B1X3B0cihmYmMtPmNvdW50ZXJzLCBjcHUpOwogCQlmYmMtPmNvdW50ICs9ICpwY291bnQ7CiAJCSpwY291bnQgPSAwOwotCQlzcGluX3VubG9jaygmZmJjLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmJjLT5sb2NrLCBmbGFncyk7CiAJfQogCW11dGV4X3VubG9jaygmcGVyY3B1X2NvdW50ZXJzX2xvY2spOwogCXJldHVybiBOT1RJRllfT0s7CmRpZmYgLS1naXQgYS9saWIvcHJpb19oZWFwLmMgYi9saWIvcHJpb19oZWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxOTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9wcmlvX2hlYXAuYwpAQCAtMCwwICsxLDcwIEBACisvKgorICogU2ltcGxlIGluc2VydGlvbi1vbmx5IHN0YXRpYy1zaXplZCBwcmlvcml0eSBoZWFwIGNvbnRhaW5pbmcKKyAqIHBvaW50ZXJzLCBiYXNlZCBvbiBDTFIsIGNoYXB0ZXIgNworICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcHJpb19oZWFwLmg+CisKK2ludCBoZWFwX2luaXQoc3RydWN0IHB0cl9oZWFwICpoZWFwLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2ssCisJICAgICAgaW50ICgqZ3QpKHZvaWQgKiwgdm9pZCAqKSkKK3sKKwloZWFwLT5wdHJzID0ga21hbGxvYyhzaXplLCBnZnBfbWFzayk7CisJaWYgKCFoZWFwLT5wdHJzKQorCQlyZXR1cm4gLUVOT01FTTsKKwloZWFwLT5zaXplID0gMDsKKwloZWFwLT5tYXggPSBzaXplIC8gc2l6ZW9mKHZvaWQgKik7CisJaGVhcC0+Z3QgPSBndDsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBoZWFwX2ZyZWUoc3RydWN0IHB0cl9oZWFwICpoZWFwKQoreworCWtmcmVlKGhlYXAtPnB0cnMpOworfQorCit2b2lkICpoZWFwX2luc2VydChzdHJ1Y3QgcHRyX2hlYXAgKmhlYXAsIHZvaWQgKnApCit7CisJdm9pZCAqcmVzOworCXZvaWQgKipwdHJzID0gaGVhcC0+cHRyczsKKwlpbnQgcG9zOworCisJaWYgKGhlYXAtPnNpemUgPCBoZWFwLT5tYXgpIHsKKwkJLyogSGVhcCBpbnNlcnRpb24gKi8KKwkJaW50IHBvcyA9IGhlYXAtPnNpemUrKzsKKwkJd2hpbGUgKHBvcyA+IDAgJiYgaGVhcC0+Z3QocCwgcHRyc1socG9zLTEpLzJdKSkgeworCQkJcHRyc1twb3NdID0gcHRyc1socG9zLTEpLzJdOworCQkJcG9zID0gKHBvcy0xKS8yOworCQl9CisJCXB0cnNbcG9zXSA9IHA7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIFRoZSBoZWFwIGlzIGZ1bGwsIHNvIHNvbWV0aGluZyB3aWxsIGhhdmUgdG8gYmUgZHJvcHBlZCAqLworCisJLyogSWYgdGhlIG5ldyBwb2ludGVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBtYXgsIGRyb3AgaXQgKi8KKwlpZiAoaGVhcC0+Z3QocCwgcHRyc1swXSkpCisJCXJldHVybiBwOworCisJLyogUmVwbGFjZSB0aGUgY3VycmVudCBtYXggYW5kIGhlYXBpZnkgKi8KKwlyZXMgPSBwdHJzWzBdOworCXB0cnNbMF0gPSBwOworCXBvcyA9IDA7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgbGVmdCA9IDIgKiBwb3MgKyAxOworCQlpbnQgcmlnaHQgPSAyICogcG9zICsgMjsKKwkJaW50IGxhcmdlc3QgPSBwb3M7CisJCWlmIChsZWZ0IDwgaGVhcC0+c2l6ZSAmJiBoZWFwLT5ndChwdHJzW2xlZnRdLCBwKSkKKwkJCWxhcmdlc3QgPSBsZWZ0OworCQlpZiAocmlnaHQgPCBoZWFwLT5zaXplICYmIGhlYXAtPmd0KHB0cnNbcmlnaHRdLCBwdHJzW2xhcmdlc3RdKSkKKwkJCWxhcmdlc3QgPSByaWdodDsKKwkJaWYgKGxhcmdlc3QgPT0gcG9zKQorCQkJYnJlYWs7CisJCS8qIFB1c2ggcCBkb3duIHRoZSBoZWFwIG9uZSBsZXZlbCBhbmQgYnVtcCBvbmUgdXAgKi8KKwkJcHRyc1twb3NdID0gcHRyc1tsYXJnZXN0XTsKKwkJcHRyc1tsYXJnZXN0XSA9IHA7CisJCXBvcyA9IGxhcmdlc3Q7CisJfQorCXJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9saWIvc3BpbmxvY2tfZGVidWcuYyBiL2xpYi9zcGlubG9ja19kZWJ1Zy5jCmluZGV4IDQ3OWZkNDYuLjljNGIwMjUgMTAwNjQ0Ci0tLSBhL2xpYi9zcGlubG9ja19kZWJ1Zy5jCisrKyBiL2xpYi9zcGlubG9ja19kZWJ1Zy5jCkBAIC02MCwxMiArNjAsMTIgQEAKIAkJb3duZXIgPSBsb2NrLT5vd25lcjsKIAlwcmludGsoS0VSTl9FTUVSRyAiQlVHOiBzcGlubG9jayAlcyBvbiBDUFUjJWQsICVzLyVkXG4iLAogCQltc2csIHJhd19zbXBfcHJvY2Vzc29yX2lkKCksCi0JCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiIGxvY2s6ICVwLCAubWFnaWM6ICUwOHgsIC5vd25lcjogJXMvJWQsICIKIAkJCSIub3duZXJfY3B1OiAlZFxuIiwKIAkJbG9jaywgbG9jay0+bWFnaWMsCiAJCW93bmVyID8gb3duZXItPmNvbW0gOiAiPG5vbmU+IiwKLQkJb3duZXIgPyBvd25lci0+cGlkIDogLTEsCisJCW93bmVyID8gdGFza19waWRfbnIob3duZXIpIDogLTEsCiAJCWxvY2stPm93bmVyX2NwdSk7CiAJZHVtcF9zdGFjaygpOwogfQpAQCAtMTE2LDcgKzExNiw3IEBACiAJCQlwcmludGsoS0VSTl9FTUVSRyAiQlVHOiBzcGlubG9jayBsb2NrdXAgb24gQ1BVIyVkLCAiCiAJCQkJCSIlcy8lZCwgJXBcbiIsCiAJCQkJcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY3VycmVudC0+Y29tbSwKLQkJCQljdXJyZW50LT5waWQsIGxvY2spOworCQkJCXRhc2tfcGlkX25yKGN1cnJlbnQpLCBsb2NrKTsKIAkJCWR1bXBfc3RhY2soKTsKICNpZmRlZiBDT05GSUdfU01QCiAJCQl0cmlnZ2VyX2FsbF9jcHVfYmFja3RyYWNlKCk7CkBAIC0xNjEsNyArMTYxLDcgQEAKIAogCXByaW50ayhLRVJOX0VNRVJHICJCVUc6IHJ3bG9jayAlcyBvbiBDUFUjJWQsICVzLyVkLCAlcFxuIiwKIAkJbXNnLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpLCBjdXJyZW50LT5jb21tLAotCQljdXJyZW50LT5waWQsIGxvY2spOworCQl0YXNrX3BpZF9ucihjdXJyZW50KSwgbG9jayk7CiAJZHVtcF9zdGFjaygpOwogfQogCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBiMWYwM2IwLi5jMDcwZWMwIDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTM3LDcgKzM3LDcgQEAKIAkgIGluIHRoZWlyIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VzLCBhbmQgdGhpcyBvcHRpb24gcHJvdmlkZXMKIAkgIG1vcmUgZWZmaWNpZW50IGhhbmRsaW5nIG9mIHRoZXNlIGhvbGVzLiAgSG93ZXZlciwgdGhlIHZhc3QKIAkgIG1ham9yaXR5IG9mIGhhcmR3YXJlIGhhcyBxdWl0ZSBmbGF0IGFkZHJlc3Mgc3BhY2VzLCBhbmQKLQkgIGNhbiBoYXZlIGRlZ3JhZGVkIHBlcmZvcm1hbmNlIGZyb20gZXh0cmEgb3ZlcmhlYWQgdGhhdAorCSAgY2FuIGhhdmUgZGVncmFkZWQgcGVyZm9ybWFuY2UgZnJvbSB0aGUgZXh0cmEgb3ZlcmhlYWQgdGhhdAogCSAgdGhpcyBvcHRpb24gaW1wb3Nlcy4KIAogCSAgTWFueSBOVU1BIGNvbmZpZ3VyYXRpb25zIHdpbGwgaGF2ZSB0aGlzIGFzIHRoZSBvbmx5IG9wdGlvbi4KZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA3OWYyNGE5Li41MjA5ZTQ3IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CkBAIC04NDAsNyArODQxLDcgQEAKIC8qKgogICogZG9fZ2VuZXJpY19tYXBwaW5nX3JlYWQgLSBnZW5lcmljIGZpbGUgcmVhZCByb3V0aW5lCiAgKiBAbWFwcGluZzoJYWRkcmVzc19zcGFjZSB0byBiZSByZWFkCi0gKiBAX3JhOglmaWxlJ3MgcmVhZGFoZWFkIHN0YXRlCisgKiBAcmE6CQlmaWxlJ3MgcmVhZGFoZWFkIHN0YXRlCiAgKiBAZmlscDoJdGhlIGZpbGUgdG8gcmVhZAogICogQHBwb3M6CWN1cnJlbnQgZmlsZSBwb3NpdGlvbgogICogQGRlc2M6CXJlYWRfZGVzY3JpcHRvcgpkaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jCmluZGV4IGFlMjk1OWIuLjhiODA5ZWMgMTAwNjQ0Ci0tLSBhL21tL2h1Z2V0bGIuYworKysgYi9tbS9odWdldGxiLmMKQEAgLTEwMTcsMTAgKzEwMTcsMTAgQEAKIAogCS8qIElmIHdlIGFyZSBiZWxvdyB0aGUgY3VycmVudCByZWdpb24gdGhlbiBhIG5ldyByZWdpb24gaXMgcmVxdWlyZWQuCiAJICogU3VidGxlLCBhbGxvY2F0ZSBhIG5ldyByZWdpb24gYXQgdGhlIHBvc2l0aW9uIGJ1dCBtYWtlIGl0IHplcm8KLQkgKiBzaXplIHN1Y2ggdGhhdCB3ZSBjYW4gZ3VhcmVudGVlIHRvIHJlY29yZCB0aGUgcmVzZXJ2YXRpb24uICovCisJICogc2l6ZSBzdWNoIHRoYXQgd2UgY2FuIGd1YXJhbnRlZSB0byByZWNvcmQgdGhlIHJlc2VydmF0aW9uLiAqLwogCWlmICgmcmctPmxpbmsgPT0gaGVhZCB8fCB0IDwgcmctPmZyb20pIHsKIAkJbnJnID0ga21hbGxvYyhzaXplb2YoKm5yZyksIEdGUF9LRVJORUwpOwotCQlpZiAobnJnID09IDApCisJCWlmICghbnJnKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW5yZy0+ZnJvbSA9IGY7CiAJCW5yZy0+dG8gICA9IGY7CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGJkMTZkY2EuLmVlZmQ1YjYgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0yNTksOSArMjU5LDYgQEAKIAkJCWNvbnRpbnVlOwogCQlmcmVlX3B1ZF9yYW5nZSgqdGxiLCBwZ2QsIGFkZHIsIG5leHQsIGZsb29yLCBjZWlsaW5nKTsKIAl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKLQotCWlmICghKCp0bGIpLT5mdWxsbW0pCi0JCWZsdXNoX3RsYl9wZ3RhYmxlcygoKnRsYiktPm1tLCBzdGFydCwgZW5kKTsKIH0KIAogdm9pZCBmcmVlX3BndGFibGVzKHN0cnVjdCBtbXVfZ2F0aGVyICoqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKQEAgLTI3MTYsNyArMjcxMyw3IEBACiAJCXJldHVybiAwOwogCiAJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCS8qIGlnbm9yZSBlcnJvcnMsIGp1c3QgY2hlY2sgaG93IG11Y2ggd2FzIHN1Y2Vzc2Z1bGx5IHRyYW5zZmVyZWQgKi8KKwkvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNjZXNzZnVsbHkgdHJhbnNmZXJyZWQgKi8KIAl3aGlsZSAobGVuKSB7CiAJCWludCBieXRlcywgcmV0LCBvZmZzZXQ7CiAJCXZvaWQgKm1hZGRyOwpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggMDkxYjljNi4uMTgzMzg3OSAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAkJZXJyID0gX19hZGRfc2VjdGlvbih6b25lLCBpIDw8IFBGTl9TRUNUSU9OX1NISUZUKTsKIAogCQkvKgotCQkgKiBFRVhJU1QgaXMgZmluYWxseSBkZWFsZWQgd2l0aCBieSBpb3Jlc291cmNlIGNvbGxpc2lvbgorCQkgKiBFRVhJU1QgaXMgZmluYWxseSBkZWFsdCB3aXRoIGJ5IGlvcmVzb3VyY2UgY29sbGlzaW9uCiAJCSAqIGNoZWNrLiBzZWUgYWRkX21lbW9yeSgpID0+IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZSgpCiAJCSAqIFdhcm5pbmcgd2lsbCBiZSBwcmludGVkIGlmIHRoZXJlIGlzIGNvbGxpc2lvbi4KIAkJICovCmRpZmYgLS1naXQgYS9tbS9tZW1wb2xpY3kuYyBiL21tL21lbXBvbGljeS5jCmluZGV4IDU2ODE1MmEuLmMxNTkyYTkgMTAwNjQ0Ci0tLSBhL21tL21lbXBvbGljeS5jCisrKyBiL21tL21lbXBvbGljeS5jCkBAIC03OCw2ICs3OCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CkBAIC05NDAsNyArOTQxLDcgQEAKIAogCS8qIEZpbmQgdGhlIG1tX3N0cnVjdCAqLwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7Ci0JdGFzayA9IHBpZCA/IGZpbmRfdGFza19ieV9waWQocGlkKSA6IGN1cnJlbnQ7CisJdGFzayA9IHBpZCA/IGZpbmRfdGFza19ieV92cGlkKHBpZCkgOiBjdXJyZW50OwogCWlmICghdGFzaykgewogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJCXJldHVybiAtRVNSQ0g7CkBAIC0xMzg4LDcgKzEzODksNiBAQAogICoga2VlcHMgbWVtcG9saWNpZXMgY3B1c2V0IHJlbGF0aXZlIGFmdGVyIGl0cyBjcHVzZXQgbW92ZXMuICBTZWUKICAqIGZ1cnRoZXIga2VybmVsL2NwdXNldC5jIHVwZGF0ZV9ub2RlbWFzaygpLgogICovCi12b2lkICpjcHVzZXRfYmVpbmdfcmVib3VuZDsKIAogLyogU2xvdyBwYXRoIG9mIGEgbWVtcG9saWN5IGNvcHkgKi8KIHN0cnVjdCBtZW1wb2xpY3kgKl9fbXBvbF9jb3B5KHN0cnVjdCBtZW1wb2xpY3kgKm9sZCkKQEAgLTIwMTksNCArMjAxOSwzIEBACiAJCW0tPnZlcnNpb24gPSAodm1hICE9IHByaXYtPnRhaWxfdm1hKSA/IHZtYS0+dm1fc3RhcnQgOiAwOwogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmMKaW5kZXggMDJkNWVjMy4uYTQ2ZWIxYiAxMDA2NDQKLS0tIGEvbW0vbWVtcG9vbC5jCisrKyBiL21tL21lbXBvb2wuYwpAQCAtMjk5LDcgKzI5OSw3IEBACiAKIC8qCiAgKiBBIGNvbW1vbmx5IHVzZWQgYWxsb2MgYW5kIGZyZWUgZm4gdGhhdCBrbWFsbG9jL2tmcmVlcyB0aGUgYW1vdW50IG9mIG1lbW9yeQotICogc3BlY2ZpZWQgYnkgcG9vbF9kYXRhCisgKiBzcGVjaWZpZWQgYnkgcG9vbF9kYXRhCiAgKi8KIHZvaWQgKm1lbXBvb2xfa21hbGxvYyhnZnBfdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKQogewpkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IDA2ZDA4NzcuLjZhMjA3ZTggMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbV9pbmxpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9uc3Byb3h5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgpAQCAtNzA1LDcgKzcwNiw3IEBACiAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhZnRlciAxMCBhdHRlbXB0cyBvciBpZiBubyBwYWdlcwogICogYXJlIG1vdmFibGUgYW55bW9yZSBiZWNhdXNlIHRvIGhhcyBiZWNvbWUgZW1wdHkKICAqIG9yIG5vIHJldHJ5YWJsZSBwYWdlcyBleGlzdCBhbnltb3JlLiBBbGwgcGFnZXMgd2lsbCBiZQotICogcmV0cnVuZWQgdG8gdGhlIExSVSBvciBmcmVlZC4KKyAqIHJldHVybmVkIHRvIHRoZSBMUlUgb3IgZnJlZWQuCiAgKgogICogUmV0dXJuOiBOdW1iZXIgb2YgcGFnZXMgbm90IG1pZ3JhdGVkIG9yIGVycm9yIGNvZGUuCiAgKi8KQEAgLTkyNCw3ICs5MjUsNyBAQAogCiAJLyogRmluZCB0aGUgbW1fc3RydWN0ICovCiAJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQl0YXNrID0gcGlkID8gZmluZF90YXNrX2J5X3BpZChwaWQpIDogY3VycmVudDsKKwl0YXNrID0gcGlkID8gZmluZF90YXNrX2J5X3ZwaWQocGlkKSA6IGN1cnJlbnQ7CiAJaWYgKCF0YXNrKSB7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJcmV0dXJuIC1FU1JDSDsKZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCA0Mjc1ZTgxLi43YTMwYzQ5IDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0xMDQ4LDggKzEwNDgsNyBAQAogCiAJLyogVGhlIG9wZW4gcm91dGluZSBkaWQgc29tZXRoaW5nIHRvIHRoZSBwcm90ZWN0aW9ucyBhbHJlYWR5PyAqLwogCWlmIChwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAhPQotCSAgICBwZ3Byb3RfdmFsKHByb3RlY3Rpb25fbWFwW3ZtX2ZsYWdzICYKLQkJICAgIChWTV9SRUFEfFZNX1dSSVRFfFZNX0VYRUN8Vk1fU0hBUkVEKV0pKQorCSAgICBwZ3Byb3RfdmFsKHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpKSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBTcGVjaWFsdHkgbWFwcGluZz8gKi8KQEAgLTExMzAsOCArMTEyOSw3IEBACiAJdm1hLT52bV9zdGFydCA9IGFkZHI7CiAJdm1hLT52bV9lbmQgPSBhZGRyICsgbGVuOwogCXZtYS0+dm1fZmxhZ3MgPSB2bV9mbGFnczsKLQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW3ZtX2ZsYWdzICYKLQkJCQkoVk1fUkVBRHxWTV9XUklURXxWTV9FWEVDfFZNX1NIQVJFRCldOworCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFncyk7CiAJdm1hLT52bV9wZ29mZiA9IHBnb2ZmOwogCiAJaWYgKGZpbGUpIHsKQEAgLTIwMDIsOCArMjAwMCw3IEBACiAJdm1hLT52bV9lbmQgPSBhZGRyICsgbGVuOwogCXZtYS0+dm1fcGdvZmYgPSBwZ29mZjsKIAl2bWEtPnZtX2ZsYWdzID0gZmxhZ3M7Ci0Jdm1hLT52bV9wYWdlX3Byb3QgPSBwcm90ZWN0aW9uX21hcFtmbGFncyAmCi0JCQkJKFZNX1JFQUR8Vk1fV1JJVEV8Vk1fRVhFQ3xWTV9TSEFSRUQpXTsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3QoZmxhZ3MpOwogCXZtYV9saW5rKG1tLCB2bWEsIHByZXYsIHJiX2xpbmssIHJiX3BhcmVudCk7CiBvdXQ6CiAJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOwpAQCAtMjIwOSw3ICsyMjA2LDcgQEAKIAl2bWEtPnZtX2VuZCA9IGFkZHIgKyBsZW47CiAKIAl2bWEtPnZtX2ZsYWdzID0gdm1fZmxhZ3MgfCBtbS0+ZGVmX2ZsYWdzOwotCXZtYS0+dm1fcGFnZV9wcm90ID0gcHJvdGVjdGlvbl9tYXBbdm1hLT52bV9mbGFncyAmIDddOworCXZtYS0+dm1fcGFnZV9wcm90ID0gdm1fZ2V0X3BhZ2VfcHJvdCh2bWEtPnZtX2ZsYWdzKTsKIAogCXZtYS0+dm1fb3BzID0gJnNwZWNpYWxfbWFwcGluZ192bW9wczsKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IHBhZ2VzOwpkaWZmIC0tZ2l0IGEvbW0vbXByb3RlY3QuYyBiL21tL21wcm90ZWN0LmMKaW5kZXggMWQ0ZDY5Ny4uNTUyMjc4NCAxMDA2NDQKLS0tIGEvbW0vbXByb3RlY3QuYworKysgYi9tbS9tcHJvdGVjdC5jCkBAIC0xOTIsMTEgKzE5Miw5IEBACiAJICogaGVsZCBpbiB3cml0ZSBtb2RlLgogCSAqLwogCXZtYS0+dm1fZmxhZ3MgPSBuZXdmbGFnczsKLQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW25ld2ZsYWdzICYKLQkJKFZNX1JFQUR8Vk1fV1JJVEV8Vk1fRVhFQ3xWTV9TSEFSRUQpXTsKKwl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3QobmV3ZmxhZ3MpOwogCWlmICh2bWFfd2FudHNfd3JpdGVub3RpZnkodm1hKSkgewotCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHByb3RlY3Rpb25fbWFwW25ld2ZsYWdzICYKLQkJCShWTV9SRUFEfFZNX1dSSVRFfFZNX0VYRUMpXTsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KG5ld2ZsYWdzKTsKIAkJZGlydHlfYWNjb3VudGFibGUgPSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vbXJlbWFwLmMgYi9tbS9tcmVtYXAuYwppbmRleCA4ZWE1YzI0Li4wOGUzYzdmIDEwMDY0NAotLS0gYS9tbS9tcmVtYXAuYworKysgYi9tbS9tcmVtYXAuYwpAQCAtMjkxLDcgKzI5MSw3IEBACiAJCWlmICgoYWRkciA8PSBuZXdfYWRkcikgJiYgKGFkZHIrb2xkX2xlbikgPiBuZXdfYWRkcikKIAkJCWdvdG8gb3V0OwogCi0JCXJldCA9IHNlY3VyaXR5X2ZpbGVfbW1hcCgwLCAwLCAwLCAwLCBuZXdfYWRkciwgMSk7CisJCXJldCA9IHNlY3VyaXR5X2ZpbGVfbW1hcChOVUxMLCAwLCAwLCAwLCBuZXdfYWRkciwgMSk7CiAJCWlmIChyZXQpCiAJCQlnb3RvIG91dDsKIApAQCAtMzk5LDcgKzM5OSw3IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKLQkJCXJldCA9IHNlY3VyaXR5X2ZpbGVfbW1hcCgwLCAwLCAwLCAwLCBuZXdfYWRkciwgMSk7CisJCQlyZXQgPSBzZWN1cml0eV9maWxlX21tYXAoTlVMTCwgMCwgMCwgMCwgbmV3X2FkZHIsIDEpOwogCQkJaWYgKHJldCkKIAkJCQlnb3RvIG91dDsKIAkJfQpkaWZmIC0tZ2l0IGEvbW0vbm9tbXUuYyBiL21tL25vbW11LmMKaW5kZXggNDJmYjg0ZS4uOGYwOTMzMyAxMDA2NDQKLS0tIGEvbW0vbm9tbXUuYworKysgYi9tbS9ub21tdS5jCkBAIC0xNzUsNyArMTc1LDggQEAKIHZvaWQgKl9fdm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUsIGdmcF90IGdmcF9tYXNrLCBwZ3Byb3RfdCBwcm90KQogewogCS8qCi0JICoga21hbGxvYyBkb2Vzbid0IGxpa2UgX19HRlBfSElHSE1FTSBmb3Igc29tZSByZWFzb24KKwkgKiAgWW91IGNhbid0IHNwZWNpZnkgX19HRlBfSElHSE1FTSB3aXRoIGttYWxsb2MoKSBzaW5jZSBrbWFsbG9jKCkKKwkgKiByZXR1cm5zIG9ubHkgYSBsb2dpY2FsIGFkZHJlc3MuCiAJICovCiAJcmV0dXJuIGttYWxsb2Moc2l6ZSwgKGdmcF9tYXNrIHwgX19HRlBfQ09NUCkgJiB+X19HRlBfSElHSE1FTSk7CiB9CmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCBhNjRkZWNiLi45MWEwODFhIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTIxMiw3ICsyMTIsNyBAQAogCQlpZiAoIXAtPm1tKQogCQkJY29udGludWU7CiAJCS8qIHNraXAgdGhlIGluaXQgdGFzayAqLwotCQlpZiAoaXNfaW5pdChwKSkKKwkJaWYgKGlzX2dsb2JhbF9pbml0KHApKQogCQkJY29udGludWU7CiAKIAkJLyoKQEAgLTI2NSw3ICsyNjUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBfX29vbV9raWxsX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgdmVyYm9zZSkKIHsKLQlpZiAoaXNfaW5pdChwKSkgeworCWlmIChpc19nbG9iYWxfaW5pdChwKSkgewogCQlXQVJOX09OKDEpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0cmllZCB0byBraWxsIGluaXQhXG4iKTsKIAkJcmV0dXJuOwpAQCAtMjc4LDcgKzI3OCw4IEBACiAJfQogCiAJaWYgKHZlcmJvc2UpCi0JCXByaW50ayhLRVJOX0VSUiAiS2lsbGVkIHByb2Nlc3MgJWQgKCVzKVxuIiwgcC0+cGlkLCBwLT5jb21tKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJLaWxsZWQgcHJvY2VzcyAlZCAoJXMpXG4iLAorCQkJCXRhc2tfcGlkX25yKHApLCBwLT5jb21tKTsKIAogCS8qCiAJICogV2UgZ2l2ZSBvdXIgc2FjcmlmaWNpYWwgbGFtYiBoaWdoIHByaW9yaXR5IGFuZCBhY2Nlc3MgdG8KQEAgLTMyNiw3ICszMjcsNyBAQAogCSAqIHRvIG1lbW9yeSByZXNlcnZlcyB0aG91Z2gsIG90aGVyd2lzZSB3ZSBtaWdodCBkZXBsZXRlIGFsbCBtZW1vcnkuCiAJICovCiAJZG9fZWFjaF90aHJlYWQoZywgcSkgewotCQlpZiAocS0+bW0gPT0gbW0gJiYgcS0+dGdpZCAhPSBwLT50Z2lkKQorCQlpZiAocS0+bW0gPT0gbW0gJiYgIXNhbWVfdGhyZWFkX2dyb3VwKHEsIHApKQogCQkJZm9yY2Vfc2lnKFNJR0tJTEwsIHEpOwogCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcSk7CiAKQEAgLTMzNyw3ICszMzgsNiBAQAogCQkJICAgIHVuc2lnbmVkIGxvbmcgcG9pbnRzLCBjb25zdCBjaGFyICptZXNzYWdlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqYzsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0c2s7CiAKIAlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGludm9rZWQgb29tLWtpbGxlcjogIgpAQCAtMzU3LDExICszNTcsMTAgQEAKIAl9CiAKIAlwcmludGsoS0VSTl9FUlIgIiVzOiBraWxsIHByb2Nlc3MgJWQgKCVzKSBzY29yZSAlbGkgb3IgYSBjaGlsZFxuIiwKLQkJCQkJbWVzc2FnZSwgcC0+cGlkLCBwLT5jb21tLCBwb2ludHMpOworCQkJCQltZXNzYWdlLCB0YXNrX3BpZF9ucihwKSwgcC0+Y29tbSwgcG9pbnRzKTsKIAogCS8qIFRyeSB0byBraWxsIGEgY2hpbGQgZmlyc3QgKi8KLQlsaXN0X2Zvcl9lYWNoKHRzaywgJnAtPmNoaWxkcmVuKSB7Ci0JCWMgPSBsaXN0X2VudHJ5KHRzaywgc3RydWN0IHRhc2tfc3RydWN0LCBzaWJsaW5nKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZwLT5jaGlsZHJlbiwgc2libGluZykgewogCQlpZiAoYy0+bW0gPT0gcC0+bW0pCiAJCQljb250aW51ZTsKIAkJaWYgKCFvb21fa2lsbF90YXNrKGMpKQpAQCAtNDk3LDcgKzQ5Niw3IEBACiAJCQlwYW5pYygiT3V0IG9mIG1lbW9yeSBhbmQgbm8ga2lsbGFibGUgcHJvY2Vzc2VzLi4uXG4iKTsKIAkJfQogCi0JCWlmIChvb21fa2lsbF9wcm9jZXNzKHAsIHBvaW50cywgZ2ZwX21hc2ssIG9yZGVyLAorCQlpZiAob29tX2tpbGxfcHJvY2VzcyhwLCBnZnBfbWFzaywgb3JkZXIsIHBvaW50cywKIAkJCQkgICAgICJPdXQgb2YgbWVtb3J5IikpCiAJCQlnb3RvIHJldHJ5OwogCmRpZmYgLS1naXQgYS9tbS9wYWdlLXdyaXRlYmFjay5jIGIvbW0vcGFnZS13cml0ZWJhY2suYwppbmRleCA3ODQ1NDYyLi44MzhhNWUzIDEwMDY0NAotLS0gYS9tbS9wYWdlLXdyaXRlYmFjay5jCisrKyBiL21tL3BhZ2Utd3JpdGViYWNrLmMKQEAgLTk4OSw3ICs5ODksNyBAQAogICogbWFwcGluZyBpcyBwaW5uZWQgYnkgdGhlIHZtYSdzIC0+dm1fZmlsZSByZWZlcmVuY2UuCiAgKgogICogV2UgdGFrZSBjYXJlIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgcGFnZSB3YXMgdHJ1bmNhdGVkIGZyb20gdGhlCi0gKiBtYXBwaW5nIGJ5IHJlLWNoZWNraW5nIHBhZ2VfbWFwcGluZygpIGluc29kZSB0cmVlX2xvY2suCisgKiBtYXBwaW5nIGJ5IHJlLWNoZWNraW5nIHBhZ2VfbWFwcGluZygpIGluc2lkZSB0cmVlX2xvY2suCiAgKi8KIGludCBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKZGlmZiAtLWdpdCBhL21tL3BhZ2VfYWxsb2MuYyBiL21tL3BhZ2VfYWxsb2MuYwppbmRleCA0M2Y3NTdmLi5kYTY5ZDgzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2FsbG9jLmMKKysrIGIvbW0vcGFnZV9hbGxvYy5jCkBAIC0xMjMsNyArMTIzLDcgQEAKIAogI2lmZGVmIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUAogICAvKgotICAgKiBNQVhfQUNUSVZFX1JFR0lPTlMgZGV0ZXJtaW5lcyB0aGUgbWF4bWltdW0gbnVtYmVyIG9mIGRpc3RpbmN0CisgICAqIE1BWF9BQ1RJVkVfUkVHSU9OUyBkZXRlcm1pbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkaXN0aW5jdAogICAgKiByYW5nZXMgb2YgbWVtb3J5IChSQU0pIHRoYXQgbWF5IGJlIHJlZ2lzdGVyZWQgd2l0aCBhZGRfYWN0aXZlX3JhbmdlKCkuCiAgICAqIFJhbmdlcyBwYXNzZWQgdG8gYWRkX2FjdGl2ZV9yYW5nZSgpIHdpbGwgYmUgbWVyZ2VkIGlmIHBvc3NpYmxlCiAgICAqIHNvIHRoZSBudW1iZXIgb2YgdGltZXMgYWRkX2FjdGl2ZV9yYW5nZSgpIGNhbiBiZSBjYWxsZWQgaXMKQEAgLTEyNjAsNyArMTI2MCw3IEBACiAgKiBza2lwIG92ZXIgem9uZXMgdGhhdCBhcmUgbm90IGFsbG93ZWQgYnkgdGhlIGNwdXNldCwgb3IgdGhhdCBoYXZlCiAgKiBiZWVuIHJlY2VudGx5IChpbiBsYXN0IHNlY29uZCkgZm91bmQgdG8gYmUgbmVhcmx5IGZ1bGwuICBTZWUgZnVydGhlcgogICogY29tbWVudHMgaW4gbW16b25lLmguICBSZWR1Y2VzIGNhY2hlIGZvb3RwcmludCBvZiB6b25lbGlzdCBzY2FucwotICogdGhhdCBoYXZlIHRvIHNraXAgb3ZlciBhbG90IG9mIGZ1bGwgb3IgdW5hbGxvd2VkIHpvbmVzLgorICogdGhhdCBoYXZlIHRvIHNraXAgb3ZlciBhIGxvdCBvZiBmdWxsIG9yIHVuYWxsb3dlZCB6b25lcy4KICAqCiAgKiBJZiB0aGUgem9uZWxpc3QgY2FjaGUgaXMgcHJlc2VudCBpbiB0aGUgcGFzc2VkIGluIHpvbmVsaXN0LCB0aGVuCiAgKiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYWxsb3dlZCBub2RlIG1hc2sgKGVpdGhlciB0aGUgY3VycmVudApAQCAtMjM1OCw3ICsyMzU4LDcgQEAKIAkJX19idWlsZF9hbGxfem9uZWxpc3RzKE5VTEwpOwogCQljcHVzZXRfaW5pdF9jdXJyZW50X21lbXNfYWxsb3dlZCgpOwogCX0gZWxzZSB7Ci0JCS8qIHdlIGhhdmUgdG8gc3RvcCBhbGwgY3B1cyB0byBndWFyYW5udGVlIHRoZXJlIGlzIG5vIHVzZXIKKwkJLyogd2UgaGF2ZSB0byBzdG9wIGFsbCBjcHVzIHRvIGd1YXJhbnRlZSB0aGVyZSBpcyBubyB1c2VyCiAJCSAgIG9mIHpvbmVsaXN0ICovCiAJCXN0b3BfbWFjaGluZV9ydW4oX19idWlsZF9hbGxfem9uZWxpc3RzLCBOVUxMLCBOUl9DUFVTKTsKIAkJLyogY3B1c2V0IHJlZnJlc2ggcm91dGluZSBzaG91bGQgYmUgaGVyZSAqLwpAQCAtMjg2NCw3ICsyODY0LDcgQEAKIAogLyoKICAqIEJhc2ljIGl0ZXJhdG9yIHN1cHBvcnQuIFJldHVybiB0aGUgbmV4dCBhY3RpdmUgcmFuZ2Ugb2YgUEZOcyBmb3IgYSBub2RlCi0gKiBOb3RlOiBuaWQgPT0gTUFYX05VTU5PREVTIHJldHVybnMgbmV4dCByZWdpb24gcmVnYXJkbGVzIG9mIG5vZGUKKyAqIE5vdGU6IG5pZCA9PSBNQVhfTlVNTk9ERVMgcmV0dXJucyBuZXh0IHJlZ2lvbiByZWdhcmRsZXNzIG9mIG5vZGUKICAqLwogc3RhdGljIGludCBfX21lbWluaXQgbmV4dF9hY3RpdmVfcmVnaW9uX2luZGV4X2luX25pZChpbnQgaW5kZXgsIGludCBuaWQpCiB7CmRpZmYgLS1naXQgYS9tbS9wcmlvX3RyZWUuYyBiL21tL3ByaW9fdHJlZS5jCmluZGV4IGI0ZTc2YzIuLjYwM2FlOTggMTAwNjQ0Ci0tLSBhL21tL3ByaW9fdHJlZS5jCisrKyBiL21tL3ByaW9fdHJlZS5jCkBAIC0zNCw3ICszNCw3IEBACiAgKiBSYWRpeCBwcmlvcml0eSBzZWFyY2ggdHJlZSBmb3IgYWRkcmVzc19zcGFjZS0+aV9tbWFwCiAgKgogICogRm9yIGVhY2ggdm1hIHRoYXQgbWFwIGEgdW5pcXVlIHNldCBvZiBmaWxlIHBhZ2VzIGkuZS4sIHVuaXF1ZSBbcmFkaXhfaW5kZXgsCi0gKiBoZWFwX2luZGV4XSB2YWx1ZSwgd2UgaGF2ZSBhIGNvcnJlc3BvbmluZyBwcmlvcml0eSBzZWFyY2ggdHJlZSBub2RlLiBJZgorICogaGVhcF9pbmRleF0gdmFsdWUsIHdlIGhhdmUgYSBjb3JyZXNwb25kaW5nIHByaW9yaXR5IHNlYXJjaCB0cmVlIG5vZGUuIElmCiAgKiBtdWx0aXBsZSB2bWFzIGhhdmUgaWRlbnRpY2FsIFtyYWRpeF9pbmRleCwgaGVhcF9pbmRleF0gdmFsdWUsIHRoZW4gb25lIG9mCiAgKiB0aGVtIGlzIHVzZWQgYXMgYSB0cmVlIG5vZGUgYW5kIG90aGVycyBhcmUgc3RvcmVkIGluIGEgdm1fc2V0IGxpc3QuIFRoZSB0cmVlCiAgKiBub2RlIHBvaW50cyB0byB0aGUgZmlyc3Qgdm1hIChoZWFkKSBvZiB0aGUgbGlzdCB1c2luZyB2bV9zZXQuaGVhZC4KZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAzY2U5YmMwLi5jZmE2YmU0IDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0yNiw3ICsyNiw3IEBACiAgKiBpbml0aWFsaXplZCBvYmplY3RzLgogICoKICAqIFRoaXMgbWVhbnMsIHRoYXQgeW91ciBjb25zdHJ1Y3RvciBpcyB1c2VkIG9ubHkgZm9yIG5ld2x5IGFsbG9jYXRlZAotICogc2xhYnMgYW5kIHlvdSBtdXN0IHBhc3Mgb2JqZWN0cyB3aXRoIHRoZSBzYW1lIGludGlhbGl6YXRpb25zIHRvCisgKiBzbGFicyBhbmQgeW91IG11c3QgcGFzcyBvYmplY3RzIHdpdGggdGhlIHNhbWUgaW5pdGlhbGl6YXRpb25zIHRvCiAgKiBrbWVtX2NhY2hlX2ZyZWUuCiAgKgogICogRWFjaCBjYWNoZSBjYW4gb25seSBzdXBwb3J0IG9uZSBtZW1vcnkgdHlwZSAoR0ZQX0RNQSwgR0ZQX0hJR0hNRU0sCkBAIC0xMTU2LDEwNSArMTE1NiwxODcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9fY3B1aW5pdCBjcHV1cF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgY3B1dXBfY2FuY2VsZWQobG9uZyBjcHUpCiB7Ci0JbG9uZyBjcHUgPSAobG9uZyloY3B1OworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CisJc3RydWN0IGttZW1fbGlzdDMgKmwzID0gTlVMTDsKKwlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7CisJCXN0cnVjdCBhcnJheV9jYWNoZSAqbmM7CisJCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkOworCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKiphbGllbjsKKwkJY3B1bWFza190IG1hc2s7CisKKwkJbWFzayA9IG5vZGVfdG9fY3B1bWFzayhub2RlKTsKKwkJLyogY3B1IGlzIGRlYWQ7IG5vIG9uZSBjYW4gYWxsb2MgZnJvbSBpdC4gKi8KKwkJbmMgPSBjYWNoZXAtPmFycmF5W2NwdV07CisJCWNhY2hlcC0+YXJyYXlbY3B1XSA9IE5VTEw7CisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CisKKwkJaWYgKCFsMykKKwkJCWdvdG8gZnJlZV9hcnJheV9jYWNoZTsKKworCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKworCQkvKiBGcmVlIGxpbWl0IGZvciB0aGlzIGttZW1fbGlzdDMgKi8KKwkJbDMtPmZyZWVfbGltaXQgLT0gY2FjaGVwLT5iYXRjaGNvdW50OworCQlpZiAobmMpCisJCQlmcmVlX2Jsb2NrKGNhY2hlcCwgbmMtPmVudHJ5LCBuYy0+YXZhaWwsIG5vZGUpOworCisJCWlmICghY3B1c19lbXB0eShtYXNrKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKKwkJCWdvdG8gZnJlZV9hcnJheV9jYWNoZTsKKwkJfQorCisJCXNoYXJlZCA9IGwzLT5zaGFyZWQ7CisJCWlmIChzaGFyZWQpIHsKKwkJCWZyZWVfYmxvY2soY2FjaGVwLCBzaGFyZWQtPmVudHJ5LAorCQkJCSAgIHNoYXJlZC0+YXZhaWwsIG5vZGUpOworCQkJbDMtPnNoYXJlZCA9IE5VTEw7CisJCX0KKworCQlhbGllbiA9IGwzLT5hbGllbjsKKwkJbDMtPmFsaWVuID0gTlVMTDsKKworCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOworCisJCWtmcmVlKHNoYXJlZCk7CisJCWlmIChhbGllbikgeworCQkJZHJhaW5fYWxpZW5fY2FjaGUoY2FjaGVwLCBhbGllbik7CisJCQlmcmVlX2FsaWVuX2NhY2hlKGFsaWVuKTsKKwkJfQorZnJlZV9hcnJheV9jYWNoZToKKwkJa2ZyZWUobmMpOworCX0KKwkvKgorCSAqIEluIHRoZSBwcmV2aW91cyBsb29wLCBhbGwgdGhlIG9iamVjdHMgd2VyZSBmcmVlZCB0bworCSAqIHRoZSByZXNwZWN0aXZlIGNhY2hlJ3Mgc2xhYnMsICBub3cgd2UgY2FuIGdvIGFoZWFkIGFuZAorCSAqIHNocmluayBlYWNoIG5vZGVsaXN0IHRvIGl0cyBsaW1pdC4KKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7CisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CisJCWlmICghbDMpCisJCQljb250aW51ZTsKKwkJZHJhaW5fZnJlZWxpc3QoY2FjaGVwLCBsMywgbDMtPmZyZWVfb2JqZWN0cyk7CisJfQorfQorCitzdGF0aWMgaW50IF9fY3B1aW5pdCBjcHV1cF9wcmVwYXJlKGxvbmcgY3B1KQorewogCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXA7CiAJc3RydWN0IGttZW1fbGlzdDMgKmwzID0gTlVMTDsKIAlpbnQgbm9kZSA9IGNwdV90b19ub2RlKGNwdSk7CiAJY29uc3QgaW50IG1lbXNpemUgPSBzaXplb2Yoc3RydWN0IGttZW1fbGlzdDMpOwogCisJLyoKKwkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgcmlnaHQgaW4gdGhlIGJlZ2lubmluZyBzaW5jZQorCSAqIGFsbG9jX2FycmF5Y2FjaGUncyBhcmUgZ29pbmcgdG8gdXNlIHRoaXMgbGlzdC4KKwkgKiBrbWFsbG9jX25vZGUgYWxsb3dzIHVzIHRvIGFkZCB0aGUgc2xhYiB0byB0aGUgcmlnaHQKKwkgKiBrbWVtX2xpc3QzIGFuZCBub3QgdGhpcyBjcHUncyBrbWVtX2xpc3QzCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7CisJCS8qCisJCSAqIFNldCB1cCB0aGUgc2l6ZTY0IGttZW1saXN0IGZvciBjcHUgYmVmb3JlIHdlIGNhbgorCQkgKiBiZWdpbiBhbnl0aGluZy4gTWFrZSBzdXJlIHNvbWUgb3RoZXIgY3B1IG9uIHRoaXMKKwkJICogbm9kZSBoYXMgbm90IGFscmVhZHkgYWxsb2NhdGVkIHRoaXMKKwkJICovCisJCWlmICghY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0pIHsKKwkJCWwzID0ga21hbGxvY19ub2RlKG1lbXNpemUsIEdGUF9LRVJORUwsIG5vZGUpOworCQkJaWYgKCFsMykKKwkJCQlnb3RvIGJhZDsKKwkJCWttZW1fbGlzdDNfaW5pdChsMyk7CisJCQlsMy0+bmV4dF9yZWFwID0gamlmZmllcyArIFJFQVBUSU1FT1VUX0xJU1QzICsKKwkJCSAgICAoKHVuc2lnbmVkIGxvbmcpY2FjaGVwKSAlIFJFQVBUSU1FT1VUX0xJU1QzOworCisJCQkvKgorCQkJICogVGhlIGwzcyBkb24ndCBjb21lIGFuZCBnbyBhcyBDUFVzIGNvbWUgYW5kCisJCQkgKiBnby4gIGNhY2hlX2NoYWluX211dGV4IGlzIHN1ZmZpY2llbnQKKwkJCSAqIHByb3RlY3Rpb24gaGVyZS4KKwkJCSAqLworCQkJY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0gPSBsMzsKKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJmNhY2hlcC0+bm9kZWxpc3RzW25vZGVdLT5saXN0X2xvY2spOworCQljYWNoZXAtPm5vZGVsaXN0c1tub2RlXS0+ZnJlZV9saW1pdCA9CisJCQkoMSArIG5yX2NwdXNfbm9kZShub2RlKSkgKgorCQkJY2FjaGVwLT5iYXRjaGNvdW50ICsgY2FjaGVwLT5udW07CisJCXNwaW5fdW5sb2NrX2lycSgmY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0tPmxpc3RfbG9jayk7CisJfQorCisJLyoKKwkgKiBOb3cgd2UgY2FuIGdvIGFoZWFkIHdpdGggYWxsb2NhdGluZyB0aGUgc2hhcmVkIGFycmF5cyBhbmQKKwkgKiBhcnJheSBjYWNoZXMKKwkgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7CisJCXN0cnVjdCBhcnJheV9jYWNoZSAqbmM7CisJCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkID0gTlVMTDsKKwkJc3RydWN0IGFycmF5X2NhY2hlICoqYWxpZW4gPSBOVUxMOworCisJCW5jID0gYWxsb2NfYXJyYXljYWNoZShub2RlLCBjYWNoZXAtPmxpbWl0LAorCQkJCQljYWNoZXAtPmJhdGNoY291bnQpOworCQlpZiAoIW5jKQorCQkJZ290byBiYWQ7CisJCWlmIChjYWNoZXAtPnNoYXJlZCkgeworCQkJc2hhcmVkID0gYWxsb2NfYXJyYXljYWNoZShub2RlLAorCQkJCWNhY2hlcC0+c2hhcmVkICogY2FjaGVwLT5iYXRjaGNvdW50LAorCQkJCTB4YmFhZGYwMGQpOworCQkJaWYgKCFzaGFyZWQpIHsKKwkJCQlrZnJlZShuYyk7CisJCQkJZ290byBiYWQ7CisJCQl9CisJCX0KKwkJaWYgKHVzZV9hbGllbl9jYWNoZXMpIHsKKwkJCWFsaWVuID0gYWxsb2NfYWxpZW5fY2FjaGUobm9kZSwgY2FjaGVwLT5saW1pdCk7CisJCQlpZiAoIWFsaWVuKSB7CisJCQkJa2ZyZWUoc2hhcmVkKTsKKwkJCQlrZnJlZShuYyk7CisJCQkJZ290byBiYWQ7CisJCQl9CisJCX0KKwkJY2FjaGVwLT5hcnJheVtjcHVdID0gbmM7CisJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07CisJCUJVR19PTighbDMpOworCisJCXNwaW5fbG9ja19pcnEoJmwzLT5saXN0X2xvY2spOworCQlpZiAoIWwzLT5zaGFyZWQpIHsKKwkJCS8qCisJCQkgKiBXZSBhcmUgc2VyaWFsaXNlZCBmcm9tIENQVV9ERUFEIG9yCisJCQkgKiBDUFVfVVBfQ0FOQ0VMTEVEIGJ5IHRoZSBjcHVjb250cm9sIGxvY2sKKwkJCSAqLworCQkJbDMtPnNoYXJlZCA9IHNoYXJlZDsKKwkJCXNoYXJlZCA9IE5VTEw7CisJCX0KKyNpZmRlZiBDT05GSUdfTlVNQQorCQlpZiAoIWwzLT5hbGllbikgeworCQkJbDMtPmFsaWVuID0gYWxpZW47CisJCQlhbGllbiA9IE5VTEw7CisJCX0KKyNlbmRpZgorCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOworCQlrZnJlZShzaGFyZWQpOworCQlmcmVlX2FsaWVuX2NhY2hlKGFsaWVuKTsKKwl9CisJcmV0dXJuIDA7CitiYWQ6CisJY3B1dXBfY2FuY2VsZWQoY3B1KTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBfX2NwdWluaXQgY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKKwlpbnQgZXJyID0gMDsKKwogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfTE9DS19BQ1FVSVJFOgogCQltdXRleF9sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CiAJY2FzZSBDUFVfVVBfUFJFUEFSRV9GUk9aRU46Ci0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyByaWdodCBpbiB0aGUgYmVnaW5uaW5nIHNpbmNlCi0JCSAqIGFsbG9jX2FycmF5Y2FjaGUncyBhcmUgZ29pbmcgdG8gdXNlIHRoaXMgbGlzdC4KLQkJICoga21hbGxvY19ub2RlIGFsbG93cyB1cyB0byBhZGQgdGhlIHNsYWIgdG8gdGhlIHJpZ2h0Ci0JCSAqIGttZW1fbGlzdDMgYW5kIG5vdCB0aGlzIGNwdSdzIGttZW1fbGlzdDMKLQkJICovCi0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZXAsICZjYWNoZV9jaGFpbiwgbmV4dCkgewotCQkJLyoKLQkJCSAqIFNldCB1cCB0aGUgc2l6ZTY0IGttZW1saXN0IGZvciBjcHUgYmVmb3JlIHdlIGNhbgotCQkJICogYmVnaW4gYW55dGhpbmcuIE1ha2Ugc3VyZSBzb21lIG90aGVyIGNwdSBvbiB0aGlzCi0JCQkgKiBub2RlIGhhcyBub3QgYWxyZWFkeSBhbGxvY2F0ZWQgdGhpcwotCQkJICovCi0JCQlpZiAoIWNhY2hlcC0+bm9kZWxpc3RzW25vZGVdKSB7Ci0JCQkJbDMgPSBrbWFsbG9jX25vZGUobWVtc2l6ZSwgR0ZQX0tFUk5FTCwgbm9kZSk7Ci0JCQkJaWYgKCFsMykKLQkJCQkJZ290byBiYWQ7Ci0JCQkJa21lbV9saXN0M19pbml0KGwzKTsKLQkJCQlsMy0+bmV4dF9yZWFwID0gamlmZmllcyArIFJFQVBUSU1FT1VUX0xJU1QzICsKLQkJCQkgICAgKCh1bnNpZ25lZCBsb25nKWNhY2hlcCkgJSBSRUFQVElNRU9VVF9MSVNUMzsKLQotCQkJCS8qCi0JCQkJICogVGhlIGwzcyBkb24ndCBjb21lIGFuZCBnbyBhcyBDUFVzIGNvbWUgYW5kCi0JCQkJICogZ28uICBjYWNoZV9jaGFpbl9tdXRleCBpcyBzdWZmaWNpZW50Ci0JCQkJICogcHJvdGVjdGlvbiBoZXJlLgotCQkJCSAqLwotCQkJCWNhY2hlcC0+bm9kZWxpc3RzW25vZGVdID0gbDM7Ci0JCQl9Ci0KLQkJCXNwaW5fbG9ja19pcnEoJmNhY2hlcC0+bm9kZWxpc3RzW25vZGVdLT5saXN0X2xvY2spOwotCQkJY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV0tPmZyZWVfbGltaXQgPQotCQkJCSgxICsgbnJfY3B1c19ub2RlKG5vZGUpKSAqCi0JCQkJY2FjaGVwLT5iYXRjaGNvdW50ICsgY2FjaGVwLT5udW07Ci0JCQlzcGluX3VubG9ja19pcnEoJmNhY2hlcC0+bm9kZWxpc3RzW25vZGVdLT5saXN0X2xvY2spOwotCQl9Ci0KLQkJLyoKLQkJICogTm93IHdlIGNhbiBnbyBhaGVhZCB3aXRoIGFsbG9jYXRpbmcgdGhlIHNoYXJlZCBhcnJheXMgYW5kCi0JCSAqIGFycmF5IGNhY2hlcwotCQkgKi8KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShjYWNoZXAsICZjYWNoZV9jaGFpbiwgbmV4dCkgewotCQkJc3RydWN0IGFycmF5X2NhY2hlICpuYzsKLQkJCXN0cnVjdCBhcnJheV9jYWNoZSAqc2hhcmVkID0gTlVMTDsKLQkJCXN0cnVjdCBhcnJheV9jYWNoZSAqKmFsaWVuID0gTlVMTDsKLQotCQkJbmMgPSBhbGxvY19hcnJheWNhY2hlKG5vZGUsIGNhY2hlcC0+bGltaXQsCi0JCQkJCQljYWNoZXAtPmJhdGNoY291bnQpOwotCQkJaWYgKCFuYykKLQkJCQlnb3RvIGJhZDsKLQkJCWlmIChjYWNoZXAtPnNoYXJlZCkgewotCQkJCXNoYXJlZCA9IGFsbG9jX2FycmF5Y2FjaGUobm9kZSwKLQkJCQkJY2FjaGVwLT5zaGFyZWQgKiBjYWNoZXAtPmJhdGNoY291bnQsCi0JCQkJCTB4YmFhZGYwMGQpOwotCQkJCWlmICghc2hhcmVkKQotCQkJCQlnb3RvIGJhZDsKLQkJCX0KLQkJCWlmICh1c2VfYWxpZW5fY2FjaGVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWVuID0gYWxsb2NfYWxpZW5fY2FjaGUobm9kZSwgY2FjaGVwLT5saW1pdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWxpZW4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQljYWNoZXAtPmFycmF5W2NwdV0gPSBuYzsKLQkJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07Ci0JCQlCVUdfT04oIWwzKTsKLQotCQkJc3Bpbl9sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7Ci0JCQlpZiAoIWwzLT5zaGFyZWQpIHsKLQkJCQkvKgotCQkJCSAqIFdlIGFyZSBzZXJpYWxpc2VkIGZyb20gQ1BVX0RFQUQgb3IKLQkJCQkgKiBDUFVfVVBfQ0FOQ0VMTEVEIGJ5IHRoZSBjcHVjb250cm9sIGxvY2sKLQkJCQkgKi8KLQkJCQlsMy0+c2hhcmVkID0gc2hhcmVkOwotCQkJCXNoYXJlZCA9IE5VTEw7Ci0JCQl9Ci0jaWZkZWYgQ09ORklHX05VTUEKLQkJCWlmICghbDMtPmFsaWVuKSB7Ci0JCQkJbDMtPmFsaWVuID0gYWxpZW47Ci0JCQkJYWxpZW4gPSBOVUxMOwotCQkJfQotI2VuZGlmCi0JCQlzcGluX3VubG9ja19pcnEoJmwzLT5saXN0X2xvY2spOwotCQkJa2ZyZWUoc2hhcmVkKTsKLQkJCWZyZWVfYWxpZW5fY2FjaGUoYWxpZW4pOwotCQl9CisJCWVyciA9IGNwdXVwX3ByZXBhcmUoY3B1KTsKIAkJYnJlYWs7CiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CkBAIC0xMjg3LDc2ICsxMzY5LDE3IEBACiAJCSAqIHN0cnVjdHVyZSBpcyB1c3VhbGx5IGFsbG9jYXRlZCBmcm9tIGttZW1fY2FjaGVfY3JlYXRlKCkgYW5kCiAJCSAqIGdldHMgZGVzdHJveWVkIGF0IGttZW1fY2FjaGVfZGVzdHJveSgpLgogCQkgKi8KLQkJLyogZmFsbCB0aHJ1ICovCisJCS8qIGZhbGwgdGhyb3VnaCAqLwogI2VuZGlmCiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRUQ6CiAJY2FzZSBDUFVfVVBfQ0FOQ0VMRURfRlJPWkVOOgotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7Ci0JCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKm5jOwotCQkJc3RydWN0IGFycmF5X2NhY2hlICpzaGFyZWQ7Ci0JCQlzdHJ1Y3QgYXJyYXlfY2FjaGUgKiphbGllbjsKLQkJCWNwdW1hc2tfdCBtYXNrOwotCi0JCQltYXNrID0gbm9kZV90b19jcHVtYXNrKG5vZGUpOwotCQkJLyogY3B1IGlzIGRlYWQ7IG5vIG9uZSBjYW4gYWxsb2MgZnJvbSBpdC4gKi8KLQkJCW5jID0gY2FjaGVwLT5hcnJheVtjcHVdOwotCQkJY2FjaGVwLT5hcnJheVtjcHVdID0gTlVMTDsKLQkJCWwzID0gY2FjaGVwLT5ub2RlbGlzdHNbbm9kZV07Ci0KLQkJCWlmICghbDMpCi0JCQkJZ290byBmcmVlX2FycmF5X2NhY2hlOwotCi0JCQlzcGluX2xvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQotCQkJLyogRnJlZSBsaW1pdCBmb3IgdGhpcyBrbWVtX2xpc3QzICovCi0JCQlsMy0+ZnJlZV9saW1pdCAtPSBjYWNoZXAtPmJhdGNoY291bnQ7Ci0JCQlpZiAobmMpCi0JCQkJZnJlZV9ibG9jayhjYWNoZXAsIG5jLT5lbnRyeSwgbmMtPmF2YWlsLCBub2RlKTsKLQotCQkJaWYgKCFjcHVzX2VtcHR5KG1hc2spKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxKCZsMy0+bGlzdF9sb2NrKTsKLQkJCQlnb3RvIGZyZWVfYXJyYXlfY2FjaGU7Ci0JCQl9Ci0KLQkJCXNoYXJlZCA9IGwzLT5zaGFyZWQ7Ci0JCQlpZiAoc2hhcmVkKSB7Ci0JCQkJZnJlZV9ibG9jayhjYWNoZXAsIHNoYXJlZC0+ZW50cnksCi0JCQkJCSAgIHNoYXJlZC0+YXZhaWwsIG5vZGUpOwotCQkJCWwzLT5zaGFyZWQgPSBOVUxMOwotCQkJfQotCi0JCQlhbGllbiA9IGwzLT5hbGllbjsKLQkJCWwzLT5hbGllbiA9IE5VTEw7Ci0KLQkJCXNwaW5fdW5sb2NrX2lycSgmbDMtPmxpc3RfbG9jayk7Ci0KLQkJCWtmcmVlKHNoYXJlZCk7Ci0JCQlpZiAoYWxpZW4pIHsKLQkJCQlkcmFpbl9hbGllbl9jYWNoZShjYWNoZXAsIGFsaWVuKTsKLQkJCQlmcmVlX2FsaWVuX2NhY2hlKGFsaWVuKTsKLQkJCX0KLWZyZWVfYXJyYXlfY2FjaGU6Ci0JCQlrZnJlZShuYyk7Ci0JCX0KLQkJLyoKLQkJICogSW4gdGhlIHByZXZpb3VzIGxvb3AsIGFsbCB0aGUgb2JqZWN0cyB3ZXJlIGZyZWVkIHRvCi0JCSAqIHRoZSByZXNwZWN0aXZlIGNhY2hlJ3Mgc2xhYnMsICBub3cgd2UgY2FuIGdvIGFoZWFkIGFuZAotCQkgKiBzaHJpbmsgZWFjaCBub2RlbGlzdCB0byBpdHMgbGltaXQuCi0JCSAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhY2hlcCwgJmNhY2hlX2NoYWluLCBuZXh0KSB7Ci0JCQlsMyA9IGNhY2hlcC0+bm9kZWxpc3RzW25vZGVdOwotCQkJaWYgKCFsMykKLQkJCQljb250aW51ZTsKLQkJCWRyYWluX2ZyZWVsaXN0KGNhY2hlcCwgbDMsIGwzLT5mcmVlX29iamVjdHMpOwotCQl9CisJCWNwdXVwX2NhbmNlbGVkKGNwdSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0xPQ0tfUkVMRUFTRToKIAkJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJCWJyZWFrOwogCX0KLQlyZXR1cm4gTk9USUZZX09LOwotYmFkOgotCXJldHVybiBOT1RJRllfQkFEOworCXJldHVybiBlcnIgPyBOT1RJRllfQkFEIDogTk9USUZZX09LOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgY3B1Y2FjaGVfbm90aWZpZXIgPSB7CkBAIC0zNzgzLDcgKzM4MDYsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoa21lbV9jYWNoZV9uYW1lKTsKIAogLyoKLSAqIFRoaXMgaW5pdGlhbGl6ZXMga21lbV9saXN0MyBvciByZXNpemVzIHZhcmlvaXVzIGNhY2hlcyBmb3IgYWxsIG5vZGVzLgorICogVGhpcyBpbml0aWFsaXplcyBrbWVtX2xpc3QzIG9yIHJlc2l6ZXMgdmFyaW91cyBjYWNoZXMgZm9yIGFsbCBub2Rlcy4KICAqLwogc3RhdGljIGludCBhbGxvY19rbWVtbGlzdChzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQogewpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IGE2NWVmZjguLjlhYzg4MzIgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTUsNyArNSw3IEBACiAgKi8KIAogLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBvcGVyZWF0aW9uIG9mIHRoZQorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIG9wZXJhdGlvbiBvZiB0aGUKICAqIExpbnV4IFZNIHN1YnN5c3RlbS4gRmluZS10dW5pbmcgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4KICAqIERvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dC4KICAqIFN0YXJ0ZWQgMTguMTIuOTEKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCAyZTAxYWYzLi5hZjc3ZTE3IDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0yNDcsNyArMjQ3LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKF9fZ2V0X3ZtX2FyZWEpOwogCiAvKioKLSAqCWdldF92bV9hcmVhICAtICByZXNlcnZlIGEgY29udGluZ291cyBrZXJuZWwgdmlydHVhbCBhcmVhCisgKglnZXRfdm1fYXJlYSAgLSAgcmVzZXJ2ZSBhIGNvbnRpZ3VvdXMga2VybmVsIHZpcnR1YWwgYXJlYQogICoJQHNpemU6CQlzaXplIG9mIHRoZSBhcmVhCiAgKglAZmxhZ3M6CQklVk1fSU9SRU1BUCBmb3IgSS9PIG1hcHBpbmdzIG9yIFZNX0FMTE9DCiAgKgpAQCAtMzAzLDcgKzMwMyw3IEBACiB9CiAKIC8qKgotICoJcmVtb3ZlX3ZtX2FyZWEgIC0gIGZpbmQgYW5kIHJlbW92ZSBhIGNvbnRpbmdvdXMga2VybmVsIHZpcnR1YWwgYXJlYQorICoJcmVtb3ZlX3ZtX2FyZWEgIC0gIGZpbmQgYW5kIHJlbW92ZSBhIGNvbnRpbnVvdXMga2VybmVsIHZpcnR1YWwgYXJlYQogICoJQGFkZHI6CQliYXNlIGFkZHJlc3MKICAqCiAgKglTZWFyY2ggZm9yIHRoZSBrZXJuZWwgVk0gYXJlYSBzdGFydGluZyBhdCBAYWRkciwgYW5kIHJlbW92ZSBpdC4KQEAgLTM2NCw3ICszNjQsNyBAQAogICoJdmZyZWUgIC0gIHJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBieSB2bWFsbG9jKCkKICAqCUBhZGRyOgkJbWVtb3J5IGJhc2UgYWRkcmVzcwogICoKLSAqCUZyZWUgdGhlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeSBhcmVhIHN0YXJ0aW5nIGF0IEBhZGRyLCBhcworICoJRnJlZSB0aGUgdmlydHVhbGx5IGNvbnRpbnVvdXMgbWVtb3J5IGFyZWEgc3RhcnRpbmcgYXQgQGFkZHIsIGFzCiAgKglvYnRhaW5lZCBmcm9tIHZtYWxsb2MoKSwgdm1hbGxvY18zMigpIG9yIF9fdm1hbGxvYygpLiBJZiBAYWRkciBpcwogICoJTlVMTCwgbm8gb3BlcmF0aW9uIGlzIHBlcmZvcm1lZC4KICAqCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGUxNDcxMzguLmU1YTk1OTcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xNDEsNyArMTQxLDcgQEAKICAqIHBlcmNlbnRhZ2VzIG9mIHRoZSBscnUgYW5kIGFnZWFibGUgY2FjaGVzLiAgVGhpcyBzaG91bGQgYmFsYW5jZSB0aGUgc2Vla3MKICAqIGdlbmVyYXRlZCBieSB0aGVzZSBzdHJ1Y3R1cmVzLgogICoKLSAqIElmIHRoZSB2bSBlbmNvdW50ZWQgbWFwcGVkIHBhZ2VzIG9uIHRoZSBMUlUgaXQgaW5jcmVhc2UgdGhlIHByZXNzdXJlIG9uCisgKiBJZiB0aGUgdm0gZW5jb3VudGVyZWQgbWFwcGVkIHBhZ2VzIG9uIHRoZSBMUlUgaXQgaW5jcmVhc2UgdGhlIHByZXNzdXJlIG9uCiAgKiBzbGFiIHRvIGF2b2lkIHN3YXBwaW5nLgogICoKICAqIFdlIGRvIHdlaXJkIHRoaW5ncyB0byBhdm9pZCAoc2Nhbm5lZCpzZWVrcyplbnRyaWVzKSBvdmVyZmxvd2luZyAzMiBiaXRzLgpAQCAtMTI4Miw3ICsxMjgyLDcgQEAKIAkgKi8KIAlpZiAocHJpb3JpdHkgPCAwKQogCQlwcmlvcml0eSA9IDA7Ci0JZm9yIChpID0gMDsgem9uZXNbaV0gIT0gMDsgaSsrKSB7CisJZm9yIChpID0gMDsgem9uZXNbaV0gIT0gTlVMTDsgaSsrKSB7CiAJCXN0cnVjdCB6b25lICp6b25lID0gem9uZXNbaV07CiAKIAkJaWYgKCFjcHVzZXRfem9uZV9hbGxvd2VkX2hhcmR3YWxsKHpvbmUsIEdGUF9LRVJORUwpKQpkaWZmIC0tZ2l0IGEvbmV0LzlwL0tjb25maWcgYi9uZXQvOXAvS2NvbmZpZwppbmRleCBlZWNiZjEyLi43MWJjMTEwIDEwMDY0NAotLS0gYS9uZXQvOXAvS2NvbmZpZworKysgYi9uZXQvOXAvS2NvbmZpZwpAQCAtMjcsNSArMjcsNSBAQAogCWJvb2wgIkRlYnVnIGluZm9ybWF0aW9uIgogCWRlcGVuZHMgb24gTkVUXzlQCiAJaGVscAotCSAgU2F5IFkgaWYgeW91IHdhbnQgdGhlIDlQIHN1YnNpc3RlbSB0byBsb2cgZGVidWcgaW5mb3JtYXRpb24uCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0aGUgOVAgc3Vic3lzdGVtIHRvIGxvZyBkZWJ1ZyBpbmZvcm1hdGlvbi4KIApkaWZmIC0tZ2l0IGEvbmV0L2F0bS9icjI2ODQuYyBiL25ldC9hdG0vYnIyNjg0LmMKaW5kZXggYzc0MmQzNy4uYmE2NDI4ZiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9icjI2ODQuYworKysgYi9uZXQvYXRtL2JyMjY4NC5jCkBAIC0yNCwxNiArMjQsNiBAQAogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLS8qCi0gKiBEZWZpbmUgdGhpcyB0byB1c2UgYSB2ZXJzaW9uIG9mIHRoZSBjb2RlIHdoaWNoIGludGVyYWN0cyB3aXRoIHRoZSBoaWdoZXIKLSAqIGxheWVycyBpbiBhIG1vcmUgaW50ZWxsZWdlbnQgd2F5LCBieSBhbHdheXMgcmVzZXJ2aW5nIGVub3VnaCBzcGFjZSBmb3IKLSAqIG91ciBoZWFkZXIgYXQgdGhlIGJlZ2luaW5nIG9mIHRoZSBwYWNrZXQuICBIb3dldmVyLCB0aGVyZSBtYXkgc3RpbGwgYmUKLSAqIHNvbWUgcHJvYmxlbXMgd2l0aCBwcm9ncmFtcyBsaWtlIHRjcGR1bXAuICBJbiAyLjUgd2UnbGwgc29ydCBvdXQgd2hhdAotICogd2UgbmVlZCB0byBkbyB0byBnZXQgdGhpcyBwZXJmZWN0LiAgRm9yIG5vdyB3ZSBqdXN0IHdpbGwgY29weSB0aGUgcGFja2V0Ci0gKiBpZiB3ZSBuZWVkIHNwYWNlIGZvciB0aGUgaGVhZGVyCi0gKi8KLS8qICNkZWZpbmUgRkFTVEVSX1ZFUlNJT04gKi8KLQogI2lmZGVmIFNLQl9ERUJVRwogc3RhdGljIHZvaWQgc2tiX2RlYnVnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC02OSw5ICs1OSw3IEBACiAjaWZkZWYgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIKIAlzdHJ1Y3QgYnIyNjg0X2ZpbHRlciBmaWx0ZXI7CiAjZW5kaWYgLyogQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIgKi8KLSNpZm5kZWYgRkFTVEVSX1ZFUlNJT04KIAl1bnNpZ25lZCBjb3BpZXNfbmVlZGVkLCBjb3BpZXNfZmFpbGVkOwotI2VuZGlmIC8qIEZBU1RFUl9WRVJTSU9OICovCiB9OwogCiBzdHJ1Y3QgYnIyNjg0X2RldiB7CkBAIC0xNDcsMTMgKzEzNSw2IEBACiAJc3RydWN0IGJyMjY4NF92Y2MgKmJydmNjKQogewogCXN0cnVjdCBhdG1fdmNjICphdG12Y2M7Ci0jaWZkZWYgRkFTVEVSX1ZFUlNJT04KLQlpZiAoYnJ2Y2MtPmVuY2FwcyA9PSBlX2xsYykKLQkJbWVtY3B5KHNrYl9wdXNoKHNrYiwgOCksIGxsY19vdWlfcGlkX3BhZCwgOCk7Ci0JLyogbGFzdCAyIGJ5dGVzIG9mIGxsY19vdWlfcGlkX3BhZCBhcmUgbWFuYWdlZCBieSBoZWFkZXIgcm91dGluZXM7Ci0JICAgeWVzLCB5b3UgZ290IGl0OiA4ICsgMiA9IHNpemVvZihsbGNfb3VpX3BpZF9wYWQpCi0JICovCi0jZWxzZQogCWludCBtaW5oZWFkcm9vbSA9IChicnZjYy0+ZW5jYXBzID09IGVfbGxjKSA/IDEwIDogMjsKIAlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBtaW5oZWFkcm9vbSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgbWluaGVhZHJvb20pOwpAQCAtMTcwLDcgKzE1MSw2IEBACiAJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYiwgbGxjX291aV9waWRfcGFkLCAxMCk7CiAJZWxzZQogCQltZW1zZXQoc2tiLT5kYXRhLCAwLCAyKTsKLSNlbmRpZiAvKiBGQVNURVJfVkVSU0lPTiAqLwogCXNrYl9kZWJ1Zyhza2IpOwogCiAJQVRNX1NLQihza2IpLT52Y2MgPSBhdG12Y2MgPSBicnZjYy0+YXRtdmNjOwpAQCAtMjM3LDg3ICsyMTcsNiBAQAogCXJldHVybiAmQlJQUklWKGRldiktPnN0YXRzOwogfQogCi0jaWZkZWYgRkFTVEVSX1ZFUlNJT04KLS8qCi0gKiBUaGVzZSBtaXJyb3IgZXRoX2hlYWRlciBhbmQgZXRoX2hlYWRlcl9jYWNoZS4gIFRoZXkgYXJlIG5vdCB1c3VhbGx5Ci0gKiBleHBvcnRlZCBmb3IgdXNlIGluIG1vZHVsZXMsIHNvIHdlIGdyYWIgdGhlbSBmcm9tIG5ldF9kZXZpY2UKLSAqIGFmdGVyIGV0aGVyX3NldHVwKCkgaXMgZG9uZSB3aXRoIGl0LiAgQml0IG9mIGEgaGFjay4KLSAqLwotc3RhdGljIGludCAoKm15X2V0aF9oZWFkZXIpKHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRfZGV2aWNlICosCi0JdW5zaWduZWQgc2hvcnQsIHZvaWQgKiwgdm9pZCAqLCB1bnNpZ25lZCk7Ci1zdGF0aWMgaW50ICgqbXlfZXRoX2hlYWRlcl9jYWNoZSkoc3RydWN0IG5laWdoYm91ciAqLCBzdHJ1Y3QgaGhfY2FjaGUgKik7Ci0KLXN0YXRpYyBpbnQKLWJyMjY4NF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLCB2b2lkICpkYWRkciwgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbikKLXsKLQl1MTYgKnBhZF9iZWZvcmVfZXRoOwotCWludCB0ID0gbXlfZXRoX2hlYWRlcihza2IsIGRldiwgdHlwZSwgZGFkZHIsIHNhZGRyLCBsZW4pOwotCWlmICh0ID4gMCkgewotCQlwYWRfYmVmb3JlX2V0aCA9ICh1MTYgKikgc2tiX3B1c2goc2tiLCAyKTsKLQkJKnBhZF9iZWZvcmVfZXRoID0gMDsKLQkJcmV0dXJuIGRldi0+aGFyZF9oZWFkZXJfbGVuOwkvKiBvciByZXR1cm4gMTY7ID8gKi8KLQl9IGVsc2UKLQkJcmV0dXJuIHQ7Ci19Ci0KLXN0YXRpYyBpbnQKLWJyMjY4NF9oZWFkZXJfY2FjaGUoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBoaF9jYWNoZSAqaGgpCi17Ci0vKiBoaF9kYXRhIGlzIDE2IGJ5dGVzIGxvbmcuIGlmIGVuY2FwcyBpcyBldGhlci1sbGMgd2UgbmVlZCAyNCwgc28KLXhtaXQgd2lsbCBhZGQgdGhlIGFkZGl0aW9uYWwgaGVhZGVyIHBhcnQgaW4gdGhhdCBjYXNlICovCi0JdTE2ICpwYWRfYmVmb3JlX2V0aCA9ICh1MTYgKikoaGgtPmhoX2RhdGEpOwotCWludCB0ID0gbXlfZXRoX2hlYWRlcl9jYWNoZShuZWlnaCwgaGgpOwotCURQUklOVEsoImJyMjY4NF9oZWFkZXJfY2FjaGUsIG5laWdoPSVwLCBoaF9jYWNoZT0lcFxuIiwgbmVpZ2gsIGhoKTsKLQlpZiAodCA8IDApCi0JCXJldHVybiB0OwotCWVsc2UgewotCQkqcGFkX2JlZm9yZV9ldGggPSAwOwotCQloaC0+aGhfbGVuID0gUEFETEVOICsgRVRIX0hMRU47Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogVGhpcyBpcyBzaW1pbGFyIHRvIGV0aF90eXBlX3RyYW5zLCB3aGljaCBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIG9mCi0gKiBvdXIgZGV2LT5oYXJkX2hlYWRlcl9sZW4KLSAqLwotc3RhdGljIGlubGluZSBfX2JlMTYgYnJfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBldGhoZHIgKmV0aDsKLQl1bnNpZ25lZCBjaGFyICpyYXdwOwotCWV0aCA9IGV0aF9oZHIoc2tiKTsKLQotCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihldGgtPmhfZGVzdCkpIHsKLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QsIGRldi0+YnJvYWRjYXN0KSkKLQkJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfQlJPQURDQVNUOwotCQllbHNlCi0JCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX01VTFRJQ0FTVDsKLQl9Ci0KLQllbHNlIGlmIChjb21wYXJlX2V0aGVyX2FkZHIoZXRoLT5oX2Rlc3QsIGRldi0+ZGV2X2FkZHIpKQotCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKLQotCWlmIChudG9ocyhldGgtPmhfcHJvdG8pID49IDE1MzYpCi0JCXJldHVybiBldGgtPmhfcHJvdG87Ci0KLQlyYXdwID0gc2tiLT5kYXRhOwotCi0JLyoKLQkgKiBUaGlzIGlzIGEgbWFnaWMgaGFjayB0byBzcG90IElQWCBwYWNrZXRzLiBPbGRlciBOb3ZlbGwgYnJlYWtzCi0JICogdGhlIHByb3RvY29sIGRlc2lnbiBhbmQgcnVucyBJUFggb3ZlciA4MDIuMyB3aXRob3V0IGFuIDgwMi4yIExMQwotCSAqIGxheWVyLiBXZSBsb29rIGZvciBGRkZGIHdoaWNoIGlzbid0IGEgdXNlZCA4MDIuMiBTU0FQL0RTQVAuIFRoaXMKLQkgKiB3b24ndCB3b3JrIGZvciBmYXVsdCB0b2xlcmFudCBuZXR3YXJlIGJ1dCBkb2VzIGZvciB0aGUgcmVzdC4KLQkgKi8KLQlpZiAoKih1bnNpZ25lZCBzaG9ydCAqKSByYXdwID09IDB4RkZGRikKLQkJcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8zKTsKLQotCS8qCi0JICogUmVhbCA4MDIuMiBMTEMKLQkgKi8KLQlyZXR1cm4gaHRvbnMoRVRIX1BfODAyXzIpOwotfQotI2VuZGlmIC8qIEZBU1RFUl9WRVJTSU9OICovCiAKIC8qCiAgKiBXZSByZW1lbWJlciB3aGVuIHRoZSBNQUMgZ2V0cyBzZXQsIHNvIHdlIGRvbid0IG92ZXJyaWRlIGl0IGxhdGVyIHdpdGgKQEAgLTQ0OCwxNyArMzQ3LDggQEAKIAkJcmV0dXJuOwogCX0KIAotI2lmZGVmIEZBU1RFUl9WRVJTSU9OCi0JLyogRklYTUU6IHRjcGR1bXAgc2hvd3MgdGhhdCBwb2ludGVyIHRvIG1hYyBoZWFkZXIgaXMgMiBieXRlcyBlYXJsaWVyLAotCSAgIHRoYW4gc2hvdWxkIGJlLiBXaGF0IGVsc2Ugc2hvdWxkIEkgc2V0PyAqLwotCXNrYl9wdWxsKHNrYiwgcGxlbik7Ci0Jc2tiX3NldF9tYWNfaGVhZGVyKHNrYiwgLUVUSF9ITEVOKTsKLQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7Ci0Jc2tiLT5wcm90b2NvbCA9IGJyX3R5cGVfdHJhbnMoc2tiLCBuZXRfZGV2KTsKLSNlbHNlCiAJc2tiX3B1bGwoc2tiLCBwbGVuIC0gRVRIX0hMRU4pOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldF9kZXYpOwotI2VuZGlmIC8qIEZBU1RFUl9WRVJTSU9OICovCiAjaWZkZWYgQ09ORklHX0FUTV9CUjI2ODRfSVBGSUxURVIKIAlpZiAodW5saWtlbHkocGFja2V0X2ZhaWxzX2ZpbHRlcihza2ItPnByb3RvY29sLCBicnZjYywgc2tiKSkpIHsKIAkJYnJkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKQEAgLTU4NCwxMyArNDc0LDYgQEAKIAlldGhlcl9zZXR1cChuZXRkZXYpOwogCWJyZGV2LT5uZXRfZGV2ID0gbmV0ZGV2OwogCi0jaWZkZWYgRkFTVEVSX1ZFUlNJT04KLQlteV9ldGhfaGVhZGVyID0gbmV0ZGV2LT5oYXJkX2hlYWRlcjsKLQluZXRkZXYtPmhhcmRfaGVhZGVyID0gYnIyNjg0X2hlYWRlcjsKLQlteV9ldGhfaGVhZGVyX2NhY2hlID0gbmV0ZGV2LT5oYXJkX2hlYWRlcl9jYWNoZTsKLQluZXRkZXYtPmhhcmRfaGVhZGVyX2NhY2hlID0gYnIyNjg0X2hlYWRlcl9jYWNoZTsKLQluZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IHNpemVvZihsbGNfb3VpX3BpZF9wYWQpICsgRVRIX0hMRU47CS8qIDEwICsgMTQgKi8KLSNlbmRpZgogCW15X2V0aF9tYWNfYWRkciA9IG5ldGRldi0+c2V0X21hY19hZGRyZXNzOwogCW5ldGRldi0+c2V0X21hY19hZGRyZXNzID0gYnIyNjg0X21hY19hZGRyOwogCW5ldGRldi0+aGFyZF9zdGFydF94bWl0ID0gYnIyNjg0X3N0YXJ0X3htaXQ7CkBAIC03MTksMTYgKzYwMiwxMiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShicnZjYywgJmJyZGV2LT5icnZjY3MsIGJydmNjcykgewogCQlzZXFfcHJpbnRmKHNlcSwgIiAgdmNjICVkLiVkLiVkOiBlbmNhcHM9JXMiCi0jaWZuZGVmIEZBU1RFUl9WRVJTSU9OCiAJCQkJICAgICIsIGZhaWxlZCBjb3BpZXMgJXUvJXUiCi0jZW5kaWYgLyogRkFTVEVSX1ZFUlNJT04gKi8KIAkJCQkgICAgIlxuIiwgYnJ2Y2MtPmF0bXZjYy0+ZGV2LT5udW1iZXIsCiAJCQkJICAgIGJydmNjLT5hdG12Y2MtPnZwaSwgYnJ2Y2MtPmF0bXZjYy0+dmNpLAogCQkJCSAgICAoYnJ2Y2MtPmVuY2FwcyA9PSBlX2xsYykgPyAiTExDIiA6ICJWQyIKLSNpZm5kZWYgRkFTVEVSX1ZFUlNJT04KIAkJCQkgICAgLCBicnZjYy0+Y29waWVzX2ZhaWxlZAogCQkJCSAgICAsIGJydmNjLT5jb3BpZXNfbmVlZGVkCi0jZW5kaWYgLyogRkFTVEVSX1ZFUlNJT04gKi8KIAkJCQkgICAgKTsKICNpZmRlZiBDT05GSUdfQVRNX0JSMjY4NF9JUEZJTFRFUgogI2RlZmluZSBiMSh2YXIsIGJ5dGUpCSgodTggKikgJmJydmNjLT5maWx0ZXIudmFyKVtieXRlXQpkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYXgyNV9kc19pbi5jIGIvbmV0L2F4MjUvYXgyNV9kc19pbi5jCmluZGV4IGUzN2QyMTcuLjgyNzNiMTIgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfZHNfaW4uYworKysgYi9uZXQvYXgyNS9heDI1X2RzX2luLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJfQogCQlheDI1X2RhbWFfb24oYXgyNSk7CiAKLQkJLyogYWNjb3JkaW5nIHRvIERLNEVHtHMgc3BlYyB3ZSBhcmUgcmVxdWlyZWQgdG8KKwkJLyogYWNjb3JkaW5nIHRvIERLNEVHJ3Mgc3BlYyB3ZSBhcmUgcmVxdWlyZWQgdG8KIAkJICogc2VuZCBhIFJSIFJFU1BPTlNFIEZJTkFMIE5SPTAuCiAJCSAqLwogCmRpZmYgLS1naXQgYS9uZXQvYXgyNS9heDI1X2RzX3N1YnIuYyBiL25ldC9heDI1L2F4MjVfZHNfc3Vici5jCmluZGV4IGE0OTc3M2YuLmI1ZTU5NzggMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfZHNfc3Vici5jCisrKyBiL25ldC9heDI1L2F4MjVfZHNfc3Vici5jCkBAIC00MSw3ICs0MSw3IEBACiAJYXgyNV9jYiAqYXgyNW87CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKLQkvKiBQbGVhc2Ugbm90ZSB0aGF0IG5laXRoZXIgREs0RUe0cyBub3IgREcyRkVGtHMKKwkvKiBQbGVhc2Ugbm90ZSB0aGF0IG5laXRoZXIgREs0RUcncyBub3IgREcyRkVGJ3MKIAkgKiBEQU1BIHNwZWMgbWVudGlvbiB0aGUgZm9sbG93aW5nIGJlaGF2aW91ciBhcyBzZWVuCiAJICogd2l0aCBUaGVGaXJtd2FyZToKIAkgKgpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKaW5kZXggMWY3OGMzZS4uMzQ3ZTkzNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYworKysgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCkBAIC0yLDcgKzIsNyBAQAogICAgQk5FUCBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXggQmx1ZXRvb3RoIHN0YWNrIChCbHVlWikuCiAgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBJbnZlbnRlbCBTeXN0ZW1lcwogICAgV3JpdHRlbiAyMDAxLTIwMDIgYnkKLQlDbOltZW50IE1vcmVhdSA8Y2xlbWVudC5tb3JlYXVAaW52ZW50ZWwuZnI+CisJQ2zDqW1lbnQgTW9yZWF1IDxjbGVtZW50Lm1vcmVhdUBpbnZlbnRlbC5mcj4KIAlEYXZpZCBMaWJhdWx0ICA8ZGF2aWQubGliYXVsdEBpbnZlbnRlbC5mcj4KIAogICAgQ29weXJpZ2h0IChDKSAyMDAyIE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwppbmRleCA5MDkyODE2Li45NWUzODM3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCkBAIC0yLDcgKzIsNyBAQAogICAgQk5FUCBpbXBsZW1lbnRhdGlvbiBmb3IgTGludXggQmx1ZXRvb3RoIHN0YWNrIChCbHVlWikuCiAgICBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBJbnZlbnRlbCBTeXN0ZW1lcwogICAgV3JpdHRlbiAyMDAxLTIwMDIgYnkKLQlDbOltZW50IE1vcmVhdSA8Y2xlbWVudC5tb3JlYXVAaW52ZW50ZWwuZnI+CisJQ2zDqW1lbnQgTW9yZWF1IDxjbGVtZW50Lm1vcmVhdUBpbnZlbnRlbC5mcj4KIAlEYXZpZCBMaWJhdWx0ICA8ZGF2aWQubGliYXVsdEBpbnZlbnRlbC5mcj4KIAogICAgQ29weXJpZ2h0IChDKSAyMDAyIE1heGltIEtyYXNueWFuc2t5IDxtYXhrQHF1YWxjb21tLmNvbT4KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCmluZGV4IGZmNTc4NGIuLjY2YzczNjkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwpAQCAtNjU2LDExICs2NTYsMTMgQEAKIAl9CiAKIAlpZiAocmVxLT5zdWJjbGFzcyAmIDB4ODApIHsKLQkJaW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfUkVMKTsKLQkJaW5wdXQtPmtleWJpdFtMT05HKEJUTl9NT1VTRSldID0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpOwotCQlpbnB1dC0+cmVsYml0WzBdID0gQklUKFJFTF9YKSB8IEJJVChSRUxfWSk7Ci0JCWlucHV0LT5rZXliaXRbTE9ORyhCVE5fTU9VU0UpXSB8PSBCSVQoQlROX1NJREUpIHwgQklUKEJUTl9FWFRSQSk7Ci0JCWlucHV0LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CisJCWlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRUwpOworCQlpbnB1dC0+a2V5Yml0W0JJVF9XT1JEKEJUTl9NT1VTRSldID0gQklUX01BU0soQlROX0xFRlQpIHwKKwkJCUJJVF9NQVNLKEJUTl9SSUdIVCkgfCBCSVRfTUFTSyhCVE5fTUlERExFKTsKKwkJaW5wdXQtPnJlbGJpdFswXSA9IEJJVF9NQVNLKFJFTF9YKSB8IEJJVF9NQVNLKFJFTF9ZKTsKKwkJaW5wdXQtPmtleWJpdFtCSVRfV09SRChCVE5fTU9VU0UpXSB8PSBCSVRfTUFTSyhCVE5fU0lERSkgfAorCQkJQklUX01BU0soQlROX0VYVFJBKTsKKwkJaW5wdXQtPnJlbGJpdFswXSB8PSBCSVRfTUFTSyhSRUxfV0hFRUwpOwogCX0KIAogCWlucHV0LT5kZXYucGFyZW50ID0gaGlkcF9nZXRfZGV2aWNlKHNlc3Npb24pOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggZDVhMDllYS4uODE3MTY5ZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC04NzEsNyArODcxLDcgQEAKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KIAotCS8qIHdlIG5vdyBrbm93IHRoZSBmb2xsb3dpbmcgKGFsb25nIHdpdGggRT1tY7IpOgorCS8qIHdlIG5vdyBrbm93IHRoZSBmb2xsb3dpbmcgKGFsb25nIHdpdGggRT1tY8KyKToKIAkgICAtIHRoZSBuciBvZiBlbnRyaWVzIGluIGVhY2ggY2hhaW4gaXMgcmlnaHQKIAkgICAtIHRoZSBzaXplIG9mIHRoZSBhbGxvY2F0ZWQgc3BhY2UgaXMgcmlnaHQKIAkgICAtIGFsbCB2YWxpZCBob29rcyBoYXZlIGEgY29ycmVzcG9uZGluZyBjaGFpbgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZmlsdGVyLmMgYi9uZXQvY29yZS9maWx0ZXIuYwppbmRleCBiZDkwM2FhLi5lMGEwNjk0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9maWx0ZXIuYworKysgYi9uZXQvY29yZS9maWx0ZXIuYwpAQCAtMzg3LDYgKzM4NywyNSBAQAogfQogCiAvKioKKyAqIAlza19maWx0ZXJfcmN1X3JlbGVhc2U6IFJlbGVhc2UgYSBzb2NrZXQgZmlsdGVyIGJ5IHJjdV9oZWFkCisgKglAcmN1OiByY3VfaGVhZCB0aGF0IGNvbnRhaW5zIHRoZSBza19maWx0ZXIgdG8gZnJlZQorICovCitzdGF0aWMgdm9pZCBza19maWx0ZXJfcmN1X3JlbGVhc2Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IHNrX2ZpbHRlciAqZnAgPSBjb250YWluZXJfb2YocmN1LCBzdHJ1Y3Qgc2tfZmlsdGVyLCByY3UpOworCisJc2tfZmlsdGVyX3JlbGVhc2UoZnApOworfQorCitzdGF0aWMgdm9pZCBza19maWx0ZXJfZGVsYXllZF91bmNoYXJnZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19maWx0ZXIgKmZwKQoreworCXVuc2lnbmVkIGludCBzaXplID0gc2tfZmlsdGVyX2xlbihmcCk7CisKKwlhdG9taWNfc3ViKHNpemUsICZzay0+c2tfb21lbV9hbGxvYyk7CisJY2FsbF9yY3VfYmgoJmZwLT5yY3UsIHNrX2ZpbHRlcl9yY3VfcmVsZWFzZSk7Cit9CisKKy8qKgogICoJc2tfYXR0YWNoX2ZpbHRlciAtIGF0dGFjaCBhIHNvY2tldCBmaWx0ZXIKICAqCUBmcHJvZzogdGhlIGZpbHRlciBwcm9ncmFtCiAgKglAc2s6IHRoZSBzb2NrZXQgdG8gdXNlCkBAIC0zOTgsNyArNDE3LDcgQEAKICAqLwogaW50IHNrX2F0dGFjaF9maWx0ZXIoc3RydWN0IHNvY2tfZnByb2cgKmZwcm9nLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jc3RydWN0IHNrX2ZpbHRlciAqZnA7CisJc3RydWN0IHNrX2ZpbHRlciAqZnAsICpvbGRfZnA7CiAJdW5zaWduZWQgaW50IGZzaXplID0gc2l6ZW9mKHN0cnVjdCBzb2NrX2ZpbHRlcikgKiBmcHJvZy0+bGVuOwogCWludCBlcnI7CiAKQEAgLTQxOCwxOSArNDM3LDM1IEBACiAJZnAtPmxlbiA9IGZwcm9nLT5sZW47CiAKIAllcnIgPSBza19jaGtfZmlsdGVyKGZwLT5pbnNucywgZnAtPmxlbik7Ci0JaWYgKCFlcnIpIHsKLQkJc3RydWN0IHNrX2ZpbHRlciAqb2xkX2ZwOwotCi0JCXJjdV9yZWFkX2xvY2tfYmgoKTsKLQkJb2xkX2ZwID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOwotCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgZnApOwotCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKLQkJZnAgPSBvbGRfZnA7CisJaWYgKGVycikgeworCQlza19maWx0ZXJfdW5jaGFyZ2Uoc2ssIGZwKTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoZnApCi0JCXNrX2ZpbHRlcl9yZWxlYXNlKHNrLCBmcCk7Ci0JcmV0dXJuIGVycjsKKwlyY3VfcmVhZF9sb2NrX2JoKCk7CisJb2xkX2ZwID0gcmN1X2RlcmVmZXJlbmNlKHNrLT5za19maWx0ZXIpOworCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfZmlsdGVyLCBmcCk7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisKKwlpZiAob2xkX2ZwKQorCQlza19maWx0ZXJfZGVsYXllZF91bmNoYXJnZShzaywgb2xkX2ZwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHNrX2RldGFjaF9maWx0ZXIoc3RydWN0IHNvY2sgKnNrKQoreworCWludCByZXQgPSAtRU5PRU5UOworCXN0cnVjdCBza19maWx0ZXIgKmZpbHRlcjsKKworCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwlmaWx0ZXIgPSByY3VfZGVyZWZlcmVuY2Uoc2stPnNrX2ZpbHRlcik7CisJaWYgKGZpbHRlcikgeworCQlyY3VfYXNzaWduX3BvaW50ZXIoc2stPnNrX2ZpbHRlciwgTlVMTCk7CisJCXNrX2ZpbHRlcl9kZWxheWVkX3VuY2hhcmdlKHNrLCBmaWx0ZXIpOworCQlyZXQgPSAwOworCX0KKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKHNrX2Noa19maWx0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jIGIvbmV0L2NvcmUvZ2VuX2VzdGltYXRvci5jCmluZGV4IDU5MGE3NjcuLmRhYWRiY2MgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2dlbl9lc3RpbWF0b3IuYworKysgYi9uZXQvY29yZS9nZW5fZXN0aW1hdG9yLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCBjZDNhZjU5Li42N2JhOTkxIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjQ5Niw3ICsyNDk2LDYgQEAKIAkJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAkJfSwKIAkJewotCQkJLmN0bF9uYW1lCT0gTkVUX05FSUdIX1JFVFJBTlNfVElNRSwKIAkJCS5wcm9jbmFtZQk9ICJyZXRyYW5zX3RpbWUiLAogCQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJCS5tb2RlCQk9IDA2NDQsCkBAIC0yNTQxLDI3ICsyNTQwLDQwIEBACiAJCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCiAJCX0sCiAJCXsKLQkJCS5jdGxfbmFtZQk9IE5FVF9ORUlHSF9BTllDQVNUX0RFTEFZLAogCQkJLnByb2NuYW1lCT0gImFueWNhc3RfZGVsYXkiLAogCQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJCS5tb2RlCQk9IDA2NDQsCiAJCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfdXNlcmh6X2ppZmZpZXMsCiAJCX0sCiAJCXsKLQkJCS5jdGxfbmFtZQk9IE5FVF9ORUlHSF9QUk9YWV9ERUxBWSwKIAkJCS5wcm9jbmFtZQk9ICJwcm94eV9kZWxheSIsCiAJCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAogCQkJLm1vZGUJCT0gMDY0NCwKIAkJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY191c2VyaHpfamlmZmllcywKIAkJfSwKIAkJewotCQkJLmN0bF9uYW1lCT0gTkVUX05FSUdIX0xPQ0tUSU1FLAogCQkJLnByb2NuYW1lCT0gImxvY2t0aW1lIiwKIAkJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCiAJCQkubW9kZQkJPSAwNjQ0LAogCQkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzLAogCQl9LAogCQl7CisJCQkuY3RsX25hbWUJPSBORVRfTkVJR0hfUkVUUkFOU19USU1FX01TLAorCQkJLnByb2NuYW1lCT0gInJldHJhbnNfdGltZV9tcyIsCisJCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0gMDY0NCwKKwkJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19tc19qaWZmaWVzLAorCQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9tc19qaWZmaWVzLAorCQl9LAorCQl7CisJCQkuY3RsX25hbWUJPSBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUVfTVMsCisJCQkucHJvY25hbWUJPSAiYmFzZV9yZWFjaGFibGVfdGltZV9tcyIsCisJCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAorCQkJLm1vZGUJCT0gMDY0NCwKKwkJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19tc19qaWZmaWVzLAorCQkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9tc19qaWZmaWVzLAorCQl9LAorCQl7CiAJCQkuY3RsX25hbWUJPSBORVRfTkVJR0hfR0NfSU5URVJWQUwsCiAJCQkucHJvY25hbWUJPSAiZ2NfaW50ZXJ2YWwiLAogCQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTI1OTAsMjIgKzI2MDIsNyBAQAogCQkJLm1vZGUJCT0gMDY0NCwKIAkJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKIAkJfSwKLQkJewotCQkJLmN0bF9uYW1lCT0gTkVUX05FSUdIX1JFVFJBTlNfVElNRV9NUywKLQkJCS5wcm9jbmFtZQk9ICJyZXRyYW5zX3RpbWVfbXMiLAotCQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJCS5tb2RlCQk9IDA2NDQsCi0JCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbXNfamlmZmllcywKLQkJCS5zdHJhdGVneQk9ICZzeXNjdGxfbXNfamlmZmllcywKLQkJfSwKLQkJewotCQkJLmN0bF9uYW1lCT0gTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FX01TLAotCQkJLnByb2NuYW1lCT0gImJhc2VfcmVhY2hhYmxlX3RpbWVfbXMiLAotCQkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKLQkJCS5tb2RlCQk9IDA2NDQsCi0JCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbXNfamlmZmllcywKLQkJCS5zdHJhdGVneQk9ICZzeXNjdGxfbXNfamlmZmllcywKLQkJfSwKKwkJe30KIAl9LAogCS5uZWlnaF9kZXYgPSB7CiAJCXsKQEAgLTI2NTgsNDIgKzI2NTUsNDggQEAKIAl0LT5uZWlnaF92YXJzWzldLmRhdGEgID0gJnAtPmFueWNhc3RfZGVsYXk7CiAJdC0+bmVpZ2hfdmFyc1sxMF0uZGF0YSA9ICZwLT5wcm94eV9kZWxheTsKIAl0LT5uZWlnaF92YXJzWzExXS5kYXRhID0gJnAtPmxvY2t0aW1lOworCXQtPm5laWdoX3ZhcnNbMTJdLmRhdGEgID0gJnAtPnJldHJhbnNfdGltZTsKKwl0LT5uZWlnaF92YXJzWzEzXS5kYXRhICA9ICZwLT5iYXNlX3JlYWNoYWJsZV90aW1lOwogCiAJaWYgKGRldikgewogCQlkZXZfbmFtZV9zb3VyY2UgPSBkZXYtPm5hbWU7CiAJCXQtPm5laWdoX2RldlswXS5jdGxfbmFtZSA9IGRldi0+aWZpbmRleDsKLQkJdC0+bmVpZ2hfdmFyc1sxMl0ucHJvY25hbWUgPSBOVUxMOwotCQl0LT5uZWlnaF92YXJzWzEzXS5wcm9jbmFtZSA9IE5VTEw7Ci0JCXQtPm5laWdoX3ZhcnNbMTRdLnByb2NuYW1lID0gTlVMTDsKLQkJdC0+bmVpZ2hfdmFyc1sxNV0ucHJvY25hbWUgPSBOVUxMOworCQkvKiBUZXJtaW5hdGUgdGhlIHRhYmxlIGVhcmx5ICovCisJCW1lbXNldCgmdC0+bmVpZ2hfdmFyc1sxNF0sIDAsIHNpemVvZih0LT5uZWlnaF92YXJzWzE0XSkpOwogCX0gZWxzZSB7CiAJCWRldl9uYW1lX3NvdXJjZSA9IHQtPm5laWdoX2RldlswXS5wcm9jbmFtZTsKLQkJdC0+bmVpZ2hfdmFyc1sxMl0uZGF0YSA9IChpbnQgKikocCArIDEpOwotCQl0LT5uZWlnaF92YXJzWzEzXS5kYXRhID0gKGludCAqKShwICsgMSkgKyAxOwotCQl0LT5uZWlnaF92YXJzWzE0XS5kYXRhID0gKGludCAqKShwICsgMSkgKyAyOwotCQl0LT5uZWlnaF92YXJzWzE1XS5kYXRhID0gKGludCAqKShwICsgMSkgKyAzOworCQl0LT5uZWlnaF92YXJzWzE0XS5kYXRhID0gKGludCAqKShwICsgMSk7CisJCXQtPm5laWdoX3ZhcnNbMTVdLmRhdGEgPSAoaW50ICopKHAgKyAxKSArIDE7CisJCXQtPm5laWdoX3ZhcnNbMTZdLmRhdGEgPSAoaW50ICopKHAgKyAxKSArIDI7CisJCXQtPm5laWdoX3ZhcnNbMTddLmRhdGEgPSAoaW50ICopKHAgKyAxKSArIDM7CiAJfQogCi0JdC0+bmVpZ2hfdmFyc1sxNl0uZGF0YSAgPSAmcC0+cmV0cmFuc190aW1lOwotCXQtPm5laWdoX3ZhcnNbMTddLmRhdGEgID0gJnAtPmJhc2VfcmVhY2hhYmxlX3RpbWU7CiAKIAlpZiAoaGFuZGxlciB8fCBzdHJhdGVneSkgewogCQkvKiBSZXRyYW5zVGltZSAqLwogCQl0LT5uZWlnaF92YXJzWzNdLnByb2NfaGFuZGxlciA9IGhhbmRsZXI7CiAJCXQtPm5laWdoX3ZhcnNbM10uc3RyYXRlZ3kgPSBzdHJhdGVneTsKIAkJdC0+bmVpZ2hfdmFyc1szXS5leHRyYTEgPSBkZXY7CisJCWlmICghc3RyYXRlZ3kpCisJCQl0LT5uZWlnaF92YXJzWzNdLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQ7CiAJCS8qIFJlYWNoYWJsZVRpbWUgKi8KIAkJdC0+bmVpZ2hfdmFyc1s0XS5wcm9jX2hhbmRsZXIgPSBoYW5kbGVyOwogCQl0LT5uZWlnaF92YXJzWzRdLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CiAJCXQtPm5laWdoX3ZhcnNbNF0uZXh0cmExID0gZGV2OworCQlpZiAoIXN0cmF0ZWd5KQorCQkJdC0+bmVpZ2hfdmFyc1s0XS5jdGxfbmFtZSA9IENUTF9VTk5VTUJFUkVEOwogCQkvKiBSZXRyYW5zVGltZSAoaW4gbWlsbGlzZWNvbmRzKSovCi0JCXQtPm5laWdoX3ZhcnNbMTZdLnByb2NfaGFuZGxlciA9IGhhbmRsZXI7Ci0JCXQtPm5laWdoX3ZhcnNbMTZdLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7Ci0JCXQtPm5laWdoX3ZhcnNbMTZdLmV4dHJhMSA9IGRldjsKKwkJdC0+bmVpZ2hfdmFyc1sxMl0ucHJvY19oYW5kbGVyID0gaGFuZGxlcjsKKwkJdC0+bmVpZ2hfdmFyc1sxMl0uc3RyYXRlZ3kgPSBzdHJhdGVneTsKKwkJdC0+bmVpZ2hfdmFyc1sxMl0uZXh0cmExID0gZGV2OworCQlpZiAoIXN0cmF0ZWd5KQorCQkJdC0+bmVpZ2hfdmFyc1sxMl0uY3RsX25hbWUgPSBDVExfVU5OVU1CRVJFRDsKIAkJLyogUmVhY2hhYmxlVGltZSAoaW4gbWlsbGlzZWNvbmRzKSAqLwotCQl0LT5uZWlnaF92YXJzWzE3XS5wcm9jX2hhbmRsZXIgPSBoYW5kbGVyOwotCQl0LT5uZWlnaF92YXJzWzE3XS5zdHJhdGVneSA9IHN0cmF0ZWd5OwotCQl0LT5uZWlnaF92YXJzWzE3XS5leHRyYTEgPSBkZXY7CisJCXQtPm5laWdoX3ZhcnNbMTNdLnByb2NfaGFuZGxlciA9IGhhbmRsZXI7CisJCXQtPm5laWdoX3ZhcnNbMTNdLnN0cmF0ZWd5ID0gc3RyYXRlZ3k7CisJCXQtPm5laWdoX3ZhcnNbMTNdLmV4dHJhMSA9IGRldjsKKwkJaWYgKCFzdHJhdGVneSkKKwkJCXQtPm5laWdoX3ZhcnNbMTNdLmN0bF9uYW1lID0gQ1RMX1VOTlVNQkVSRUQ7CiAJfQogCiAJZGV2X25hbWUgPSBrc3RyZHVwKGRldl9uYW1lX3NvdXJjZSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDIxMDBjNzMuLmM0NzE5ZWQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC02LDcgKzYsNyBAQAogICoKICAqIEFsZXhleSBLdXpuZXRzb3YgIDxrdXpuZXRAbXMyLmluci5hYy5ydT4KICAqIEJlbiBHcmVlYXIgPGdyZWVhcmJAY2FuZGVsYXRlY2guY29tPgotICogSmVucyBM5eVzIDxqZW5zLmxhYXNAZGF0YS5zbHUuc2U+CisgKiBKZW5zIEzDpcOlcyA8amVucy5sYWFzQGRhdGEuc2x1LnNlPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNjEsNyArMTYxLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTI0NTQsNyArMjQ1NCw3IEBACiAJc3Bpbl9sb2NrKCZ4LT5sb2NrKTsKIAlpcGggPSBpcF9oZHIoc2tiKTsKIAotCWVyciA9IHgtPm1vZGUtPm91dHB1dCh4LCBza2IpOworCWVyciA9IHgtPm91dGVyX21vZGUtPm91dHB1dCh4LCBza2IpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAJZXJyID0geC0+dHlwZS0+b3V0cHV0KHgsIHNrYik7CkBAIC0zNTE0LDcgKzM1MTQsNyBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdC0+cXVldWUpOwogCi0JcHJfZGVidWcoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLCBjcHUsIGN1cnJlbnQtPnBpZCk7CisJcHJfZGVidWcoInBrdGdlbjogc3RhcnRpbmcgcGt0Z2VuLyVkOiAgcGlkPSVkXG4iLCBjcHUsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggMTA3MmQxNi4uNGEyNjQwZCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTc0NCwxMCArNzQ0LDEwIEBACiAJcmN1X3JlYWRfbG9jaygpOwogCXRzayA9IGZpbmRfdGFza19ieV9waWQocGlkKTsKIAlpZiAodHNrKSB7Ci0JCXRhc2tfbG9jayh0c2spOwotCQlpZiAodHNrLT5uc3Byb3h5KQotCQkJbmV0ID0gZ2V0X25ldCh0c2stPm5zcHJveHktPm5ldF9ucyk7Ci0JCXRhc2tfdW5sb2NrKHRzayk7CisJCXN0cnVjdCBuc3Byb3h5ICpuc3Byb3h5OworCQluc3Byb3h5ID0gdGFza19uc3Byb3h5KHRzayk7CisJCWlmIChuc3Byb3h5KQorCQkJbmV0ID0gZ2V0X25ldChuc3Byb3h5LT5uZXRfbnMpOwogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAlyZXR1cm4gbmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc2NtLmMgYi9uZXQvY29yZS9zY20uYwppbmRleCA1MzBiZWU4Li4xMDBiYTZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9zY20uYworKysgYi9uZXQvY29yZS9zY20uYwpAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvcGlkLmg+CisjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00Miw3ICs0NCw3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBzY21fY2hlY2tfY3JlZHMoc3RydWN0IHVjcmVkICpjcmVkcykKIHsKLQlpZiAoKGNyZWRzLT5waWQgPT0gY3VycmVudC0+dGdpZCB8fCBjYXBhYmxlKENBUF9TWVNfQURNSU4pKSAmJgorCWlmICgoY3JlZHMtPnBpZCA9PSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpIHx8IGNhcGFibGUoQ0FQX1NZU19BRE1JTikpICYmCiAJICAgICgoY3JlZHMtPnVpZCA9PSBjdXJyZW50LT51aWQgfHwgY3JlZHMtPnVpZCA9PSBjdXJyZW50LT5ldWlkIHx8CiAJICAgICAgY3JlZHMtPnVpZCA9PSBjdXJyZW50LT5zdWlkKSB8fCBjYXBhYmxlKENBUF9TRVRVSUQpKSAmJgogCSAgICAoKGNyZWRzLT5naWQgPT0gY3VycmVudC0+Z2lkIHx8IGNyZWRzLT5naWQgPT0gY3VycmVudC0+ZWdpZCB8fApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IGQ0NWVjZGMuLmZlYmJjYmMgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCQkJd2FybmVkKys7CiAJCQlwcmludGsoS0VSTl9JTkZPICJzb2NrX3NldF90aW1lb3V0OiBgJXMnIChwaWQgJWQpICIKIAkJCSAgICAgICAidHJpZXMgdG8gc2V0IG5lZ2F0aXZlIHRpbWVvdXRcbiIsCi0JCQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwkJCQljdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAJCXJldHVybiAwOwogCX0KIAkqdGltZW9fcCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwpAQCAtNDI4LDcgKzQyOCw2IEBACiAJCSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzaz1zb2NrLT5zazsKLQlzdHJ1Y3Qgc2tfZmlsdGVyICpmaWx0ZXI7CiAJaW50IHZhbDsKIAlpbnQgdmFsYm9vbDsKIAlzdHJ1Y3QgbGluZ2VyIGxpbmc7CkBAIC02NTIsMTYgKzY1MSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTT19ERVRBQ0hfRklMVEVSOgotCQlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKLQkJaWYgKGZpbHRlcikgewotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHNrLT5za19maWx0ZXIsIE5VTEwpOwotCQkJc2tfZmlsdGVyX3JlbGVhc2Uoc2ssIGZpbHRlcik7Ci0JCQlyY3VfcmVhZF91bmxvY2tfYmgoKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9ja19iaCgpOwotCQlyZXQgPSAtRU5PTkVUOworCQlyZXQgPSBza19kZXRhY2hfZmlsdGVyKHNrKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNPX1BBU1NTRUM6CkBAIC05MjUsNyArOTE1LDcgQEAKIAogCWZpbHRlciA9IHJjdV9kZXJlZmVyZW5jZShzay0+c2tfZmlsdGVyKTsKIAlpZiAoZmlsdGVyKSB7Ci0JCXNrX2ZpbHRlcl9yZWxlYXNlKHNrLCBmaWx0ZXIpOworCQlza19maWx0ZXJfdW5jaGFyZ2Uoc2ssIGZpbHRlcik7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihzay0+c2tfZmlsdGVyLCBOVUxMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lucHV0LmMgYi9uZXQvZGNjcC9pbnB1dC5jCmluZGV4IDE5ZDdlMWQuLjM1NjBhMmEgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2lucHV0LmMKKysrIGIvbmV0L2RjY3AvaW5wdXQuYwpAQCAtMTksNiArMTksOSBAQAogI2luY2x1ZGUgImNjaWQuaCIKICNpbmNsdWRlICJkY2NwLmgiCiAKKy8qIHJhdGUtbGltaXQgZm9yIHN5bmNzIGluIHJlcGx5IHRvIHNlcXVlbmNlLWludmFsaWQgcGFja2V0czsgUkZDIDQzNDAsIDcuNS40ICovCitpbnQgc3lzY3RsX2RjY3Bfc3luY19yYXRlbGltaXQJX19yZWFkX21vc3RseSA9IEhaIC8gODsKKwogc3RhdGljIHZvaWQgZGNjcF9maW4oc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrLT5za19zaHV0ZG93biB8PSBSQ1ZfU0hVVERPV047CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9zeXNjdGwuYyBiL25ldC9kY2NwL3N5c2N0bC5jCmluZGV4IDkzNjRiMmYuLmM2MmMwNTAgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL3N5c2N0bC5jCisrKyBiL25ldC9kY2NwL3N5c2N0bC5jCkBAIC0xOCw5ICsxOCw2IEBACiAjZXJyb3IgVGhpcyBmaWxlIHNob3VsZCBub3QgYmUgY29tcGlsZWQgd2l0aG91dCBDT05GSUdfU1lTQ1RMIGRlZmluZWQKICNlbmRpZgogCi0vKiByYXRlLWxpbWl0IGZvciBzeW5jcyBpbiByZXBseSB0byBzZXF1ZW5jZS1pbnZhbGlkIHBhY2tldHM7IFJGQyA0MzQwLCA3LjUuNCAqLwotaW50IHN5c2N0bF9kY2NwX3N5bmNfcmF0ZWxpbWl0CV9fcmVhZF9tb3N0bHkgPSBIWiAvIDg7Ci0KIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRjY3BfZGVmYXVsdF90YWJsZVtdID0gewogCXsKIAkJLnByb2NuYW1lCT0gInNlcV93aW5kb3ciLApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDZjYzU0ZWUuLjcyZTZhYjYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTU4Niw3ICs1ODYsNyBAQAogCWlmIChzdHlwZSAmIElFRUU4MDIxMV9TVFlQRV9RT1NfREFUQSkgewogCQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqcW9zaGRyID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcnFvcyAqKXNrYi0+ZGF0YTsKLQkJaGRyWzEyXSA9IHFvc2hkci0+cW9zX2N0bCAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9RQ1RMX1RJRCk7CisJCWhkclsxMl0gPSBsZTE2X3RvX2NwdShxb3NoZHItPnFvc19jdGwpICYgSUVFRTgwMjExX1FDVExfVElEOwogCX0gZWxzZQogCQloZHJbMTJdID0gMDsJCS8qIHByaW9yaXR5ICovCiAKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDliNThkZDYuLmQzMDllOGYgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtNDA5LDcgKzQwOSw3IEBACiAJCQkJCSAgICAgICAoKmNyeXB0KS0+cHJpdik7CiAJCXNlYy5mbGFncyB8PSAoMSA8PCBrZXkpOwogCQkvKiBUaGlzIGVuc3VyZXMgYSBrZXkgd2lsbCBiZSBhY3RpdmF0ZWQgaWYgbm8ga2V5IGlzCi0JCSAqIGV4cGxpY2l0ZWx5IHNldCAqLworCQkgKiBleHBsaWNpdGx5IHNldCAqLwogCQlpZiAoa2V5ID09IHNlYy5hY3RpdmVfa2V5KQogCQkJc2VjLmZsYWdzIHw9IFNFQ19BQ1RJVkVfS0VZOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCBkODk0ZjYxLi45ZjlmZDJjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTU2MCw3ICs1NjAsNyBAQAogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQotCVRDUC1JbGxpbm9pcyBpcyBhIHNlbmRlci1zaWRlIG1vZGlmaWNhdGlvIG9mIFRDUCBSZW5vIGZvcgorCVRDUC1JbGxpbm9pcyBpcyBhIHNlbmRlci1zaWRlIG1vZGlmaWNhdGlvbiBvZiBUQ1AgUmVubyBmb3IKIAloaWdoIHNwZWVkIGxvbmcgZGVsYXkgbGlua3MuIEl0IHVzZXMgcm91bmQtdHJpcC10aW1lIHRvCiAJYWRqdXN0IHRoZSBhbHBoYSBhbmQgYmV0YSBwYXJhbWV0ZXJzIHRvIGFjaGlldmUgYSBoaWdoZXIgYXZlcmFnZQogCXRocm91Z2hwdXQgYW5kIG1haW50YWluIGZhaXJuZXNzLgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3RyaWUuYyBiL25ldC9pcHY0L2ZpYl90cmllLmMKaW5kZXggODFhODI4NS4uOGQ4YzI5MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3RyaWUuYworKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCkBAIC01NCw3ICs1NCw3IEBACiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggM2NlZjEyOC4uOGZiNmNhMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC05Myw3ICs5Myw3IEBACiAJCWludCByZW1haW5pbmcsIHJvdmVyLCBsb3csIGhpZ2g7CiAKIAkJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZSgmbG93LCAmaGlnaCk7Ci0JCXJlbWFpbmluZyA9IGhpZ2ggLSBsb3c7CisJCXJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7CiAJCXJvdmVyID0gbmV0X3JhbmRvbSgpICUgcmVtYWluaW5nICsgbG93OwogCiAJCWRvIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYyBiL25ldC9pcHY0L2luZXRfZnJhZ21lbnQuYwppbmRleCA0ODRjZjUxLi5lMTVlMDRmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaW5ldF9mcmFnbWVudC5jCkBAIC0xMzYsNyArMTM2LDkgQEAKIAkJKndvcmsgLT0gZi0+cXNpemU7CiAJYXRvbWljX3N1YihmLT5xc2l6ZSwgJmYtPm1lbSk7CiAKLQlmLT5kZXN0cnVjdG9yKHEpOworCWlmIChmLT5kZXN0cnVjdG9yKQorCQlmLT5kZXN0cnVjdG9yKHEpOworCWtmcmVlKHEpOwogCiB9CiBFWFBPUlRfU1lNQk9MKGluZXRfZnJhZ19kZXN0cm95KTsKQEAgLTE3MiwzICsxNzQsODggQEAKIAlyZXR1cm4gZXZpY3RlZDsKIH0KIEVYUE9SVF9TWU1CT0woaW5ldF9mcmFnX2V2aWN0b3IpOworCitzdGF0aWMgc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqaW5ldF9mcmFnX2ludGVybihzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxcF9pbiwKKwkJc3RydWN0IGluZXRfZnJhZ3MgKmYsIHVuc2lnbmVkIGludCBoYXNoLCB2b2lkICphcmcpCit7CisJc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcXA7CisjaWZkZWYgQ09ORklHX1NNUAorCXN0cnVjdCBobGlzdF9ub2RlICpuOworI2VuZGlmCisKKwl3cml0ZV9sb2NrKCZmLT5sb2NrKTsKKyNpZmRlZiBDT05GSUdfU01QCisJLyogV2l0aCBTTVAgcmFjZSB3ZSBoYXZlIHRvIHJlY2hlY2sgaGFzaCB0YWJsZSwgYmVjYXVzZQorCSAqIHN1Y2ggZW50cnkgY291bGQgYmUgY3JlYXRlZCBvbiBvdGhlciBjcHUsIHdoaWxlIHdlCisJICogcHJvbW90ZWQgcmVhZCBsb2NrIHRvIHdyaXRlIGxvY2suCisJICovCisJaGxpc3RfZm9yX2VhY2hfZW50cnkocXAsIG4sICZmLT5oYXNoW2hhc2hdLCBsaXN0KSB7CisJCWlmIChmLT5tYXRjaChxcCwgYXJnKSkgeworCQkJYXRvbWljX2luYygmcXAtPnJlZmNudCk7CisJCQl3cml0ZV91bmxvY2soJmYtPmxvY2spOworCQkJcXBfaW4tPmxhc3RfaW4gfD0gQ09NUExFVEU7CisJCQlpbmV0X2ZyYWdfcHV0KHFwX2luLCBmKTsKKwkJCXJldHVybiBxcDsKKwkJfQorCX0KKyNlbmRpZgorCXFwID0gcXBfaW47CisJaWYgKCFtb2RfdGltZXIoJnFwLT50aW1lciwgamlmZmllcyArIGYtPmN0bC0+dGltZW91dCkpCisJCWF0b21pY19pbmMoJnFwLT5yZWZjbnQpOworCisJYXRvbWljX2luYygmcXAtPnJlZmNudCk7CisJaGxpc3RfYWRkX2hlYWQoJnFwLT5saXN0LCAmZi0+aGFzaFtoYXNoXSk7CisJbGlzdF9hZGRfdGFpbCgmcXAtPmxydV9saXN0LCAmZi0+bHJ1X2xpc3QpOworCWYtPm5xdWV1ZXMrKzsKKwl3cml0ZV91bmxvY2soJmYtPmxvY2spOworCXJldHVybiBxcDsKK30KKworc3RhdGljIHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKmluZXRfZnJhZ19hbGxvYyhzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CisKKwlxID0ga3phbGxvYyhmLT5xc2l6ZSwgR0ZQX0FUT01JQyk7CisJaWYgKHEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmLT5jb25zdHJ1Y3RvcihxLCBhcmcpOworCWF0b21pY19hZGQoZi0+cXNpemUsICZmLT5tZW0pOworCXNldHVwX3RpbWVyKCZxLT50aW1lciwgZi0+ZnJhZ19leHBpcmUsICh1bnNpZ25lZCBsb25nKXEpOworCXNwaW5fbG9ja19pbml0KCZxLT5sb2NrKTsKKwlhdG9taWNfc2V0KCZxLT5yZWZjbnQsIDEpOworCisJcmV0dXJuIHE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfY3JlYXRlKHN0cnVjdCBpbmV0X2ZyYWdzICpmLAorCQl2b2lkICphcmcsIHVuc2lnbmVkIGludCBoYXNoKQoreworCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CisKKwlxID0gaW5ldF9mcmFnX2FsbG9jKGYsIGFyZyk7CisJaWYgKHEgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gaW5ldF9mcmFnX2ludGVybihxLCBmLCBoYXNoLCBhcmcpOworfQorCitzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICppbmV0X2ZyYWdfZmluZChzdHJ1Y3QgaW5ldF9mcmFncyAqZiwgdm9pZCAqa2V5LAorCQl1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKwlzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxOworCXN0cnVjdCBobGlzdF9ub2RlICpuOworCisJcmVhZF9sb2NrKCZmLT5sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShxLCBuLCAmZi0+aGFzaFtoYXNoXSwgbGlzdCkgeworCQlpZiAoZi0+bWF0Y2gocSwga2V5KSkgeworCQkJYXRvbWljX2luYygmcS0+cmVmY250KTsKKwkJCXJlYWRfdW5sb2NrKCZmLT5sb2NrKTsKKwkJCXJldHVybiBxOworCQl9CisJfQorCXJlYWRfdW5sb2NrKCZmLT5sb2NrKTsKKworCXJldHVybiBpbmV0X2ZyYWdfY3JlYXRlKGYsIGtleSwgaGFzaCk7Cit9CitFWFBPUlRfU1lNQk9MKGluZXRfZnJhZ19maW5kKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKaW5kZXggZmFjNjM5OC4uMTZlZWNjNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMKQEAgLTI4Niw3ICsyODYsNyBAQAogCQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7CiAKIAkJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZSgmbG93LCAmaGlnaCk7Ci0JCXJlbWFpbmluZyA9IGhpZ2ggLSBsb3c7CisJCXJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7CiAKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQlmb3IgKGkgPSAxOyBpIDw9IHJlbWFpbmluZzsgaSsrKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCA0NDNiM2Y4Li4yMTQzYmYzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKQEAgLTEwOCw2ICsxMDgsMTEgQEAKIHN0YXRpYyBpbnQgaXBfZnJhZ19yZWFzbShzdHJ1Y3QgaXBxICpxcCwgc3RydWN0IHNrX2J1ZmYgKnByZXYsCiAJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKK3N0cnVjdCBpcDRfY3JlYXRlX2FyZyB7CisJc3RydWN0IGlwaGRyICppcGg7CisJdTMyIHVzZXI7Cit9OworCiBzdGF0aWMgdW5zaWduZWQgaW50IGlwcWhhc2hmbihfX2JlMTYgaWQsIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyLCB1OCBwcm90KQogewogCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWlkIDw8IDE2IHwgcHJvdCwKQEAgLTEyMyw2ICsxMjgsMTkgQEAKIAlyZXR1cm4gaXBxaGFzaGZuKGlwcS0+aWQsIGlwcS0+c2FkZHIsIGlwcS0+ZGFkZHIsIGlwcS0+cHJvdG9jb2wpOwogfQogCitzdGF0aWMgaW50IGlwNF9mcmFnX21hdGNoKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsIHZvaWQgKmEpCit7CisJc3RydWN0IGlwcSAqcXA7CisJc3RydWN0IGlwNF9jcmVhdGVfYXJnICphcmcgPSBhOworCisJcXAgPSBjb250YWluZXJfb2YocSwgc3RydWN0IGlwcSwgcSk7CisJcmV0dXJuIChxcC0+aWQgPT0gYXJnLT5pcGgtPmlkICYmCisJCQlxcC0+c2FkZHIgPT0gYXJnLT5pcGgtPnNhZGRyICYmCisJCQlxcC0+ZGFkZHIgPT0gYXJnLT5pcGgtPmRhZGRyICYmCisJCQlxcC0+cHJvdG9jb2wgPT0gYXJnLT5pcGgtPnByb3RvY29sICYmCisJCQlxcC0+dXNlciA9PSBhcmctPnVzZXIpOworfQorCiAvKiBNZW1vcnkgVHJhY2tpbmcgRnVuY3Rpb25zLiAqLwogc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmFnX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKndvcmspCiB7CkBAIC0xMzIsNiArMTUwLDIwIEBACiAJa2ZyZWVfc2tiKHNrYik7CiB9CiAKK3N0YXRpYyB2b2lkIGlwNF9mcmFnX2luaXQoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSwgdm9pZCAqYSkKK3sKKwlzdHJ1Y3QgaXBxICpxcCA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgaXBxLCBxKTsKKwlzdHJ1Y3QgaXA0X2NyZWF0ZV9hcmcgKmFyZyA9IGE7CisKKwlxcC0+cHJvdG9jb2wgPSBhcmctPmlwaC0+cHJvdG9jb2w7CisJcXAtPmlkID0gYXJnLT5pcGgtPmlkOworCXFwLT5zYWRkciA9IGFyZy0+aXBoLT5zYWRkcjsKKwlxcC0+ZGFkZHIgPSBhcmctPmlwaC0+ZGFkZHI7CisJcXAtPnVzZXIgPSBhcmctPnVzZXI7CisJcXAtPnBlZXIgPSBzeXNjdGxfaXBmcmFnX21heF9kaXN0ID8KKwkJaW5ldF9nZXRwZWVyKGFyZy0+aXBoLT5zYWRkciwgMSkgOiBOVUxMOworfQorCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGlwNF9mcmFnX2ZyZWUoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3QgaXBxICpxcDsKQEAgLTEzOSwxNyArMTcxLDYgQEAKIAlxcCA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgaXBxLCBxKTsKIAlpZiAocXAtPnBlZXIpCiAJCWluZXRfcHV0cGVlcihxcC0+cGVlcik7Ci0Ja2ZyZWUocXApOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaXBxICpmcmFnX2FsbG9jX3F1ZXVlKHZvaWQpCi17Ci0Jc3RydWN0IGlwcSAqcXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXBxKSwgR0ZQX0FUT01JQyk7Ci0KLQlpZiAoIXFwKQotCQlyZXR1cm4gTlVMTDsKLQlhdG9taWNfYWRkKHNpemVvZihzdHJ1Y3QgaXBxKSwgJmlwNF9mcmFncy5tZW0pOwotCXJldHVybiBxcDsKIH0KIAogCkBAIC0xODUsNyArMjA2LDkgQEAKICAqLwogc3RhdGljIHZvaWQgaXBfZXhwaXJlKHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBpcHEgKnFwID0gKHN0cnVjdCBpcHEgKikgYXJnOworCXN0cnVjdCBpcHEgKnFwOworCisJcXAgPSBjb250YWluZXJfb2YoKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKikgYXJnLCBzdHJ1Y3QgaXBxLCBxKTsKIAogCXNwaW5fbG9jaygmcXAtPnEubG9jayk7CiAKQEAgLTIxMCwxMTAgKzIzMywyOCBAQAogCWlwcV9wdXQocXApOwogfQogCi0vKiBDcmVhdGlvbiBwcmltaXRpdmVzLiAqLwotCi1zdGF0aWMgc3RydWN0IGlwcSAqaXBfZnJhZ19pbnRlcm4oc3RydWN0IGlwcSAqcXBfaW4pCi17Ci0Jc3RydWN0IGlwcSAqcXA7Ci0jaWZkZWYgQ09ORklHX1NNUAotCXN0cnVjdCBobGlzdF9ub2RlICpuOwotI2VuZGlmCi0JdW5zaWduZWQgaW50IGhhc2g7Ci0KLQl3cml0ZV9sb2NrKCZpcDRfZnJhZ3MubG9jayk7Ci0JaGFzaCA9IGlwcWhhc2hmbihxcF9pbi0+aWQsIHFwX2luLT5zYWRkciwgcXBfaW4tPmRhZGRyLAotCQkJIHFwX2luLT5wcm90b2NvbCk7Ci0jaWZkZWYgQ09ORklHX1NNUAotCS8qIFdpdGggU01QIHJhY2Ugd2UgaGF2ZSB0byByZWNoZWNrIGhhc2ggdGFibGUsIGJlY2F1c2UKLQkgKiBzdWNoIGVudHJ5IGNvdWxkIGJlIGNyZWF0ZWQgb24gb3RoZXIgY3B1LCB3aGlsZSB3ZQotCSAqIHByb21vdGVkIHJlYWQgbG9jayB0byB3cml0ZSBsb2NrLgotCSAqLwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHFwLCBuLCAmaXA0X2ZyYWdzLmhhc2hbaGFzaF0sIHEubGlzdCkgewotCQlpZiAocXAtPmlkID09IHFwX2luLT5pZAkJJiYKLQkJICAgIHFwLT5zYWRkciA9PSBxcF9pbi0+c2FkZHIJJiYKLQkJICAgIHFwLT5kYWRkciA9PSBxcF9pbi0+ZGFkZHIJJiYKLQkJICAgIHFwLT5wcm90b2NvbCA9PSBxcF9pbi0+cHJvdG9jb2wgJiYKLQkJICAgIHFwLT51c2VyID09IHFwX2luLT51c2VyKSB7Ci0JCQlhdG9taWNfaW5jKCZxcC0+cS5yZWZjbnQpOwotCQkJd3JpdGVfdW5sb2NrKCZpcDRfZnJhZ3MubG9jayk7Ci0JCQlxcF9pbi0+cS5sYXN0X2luIHw9IENPTVBMRVRFOwotCQkJaXBxX3B1dChxcF9pbik7Ci0JCQlyZXR1cm4gcXA7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlxcCA9IHFwX2luOwotCi0JaWYgKCFtb2RfdGltZXIoJnFwLT5xLnRpbWVyLCBqaWZmaWVzICsgaXA0X2ZyYWdzX2N0bC50aW1lb3V0KSkKLQkJYXRvbWljX2luYygmcXAtPnEucmVmY250KTsKLQotCWF0b21pY19pbmMoJnFwLT5xLnJlZmNudCk7Ci0JaGxpc3RfYWRkX2hlYWQoJnFwLT5xLmxpc3QsICZpcDRfZnJhZ3MuaGFzaFtoYXNoXSk7Ci0JSU5JVF9MSVNUX0hFQUQoJnFwLT5xLmxydV9saXN0KTsKLQlsaXN0X2FkZF90YWlsKCZxcC0+cS5scnVfbGlzdCwgJmlwNF9mcmFncy5scnVfbGlzdCk7Ci0JaXA0X2ZyYWdzLm5xdWV1ZXMrKzsKLQl3cml0ZV91bmxvY2soJmlwNF9mcmFncy5sb2NrKTsKLQlyZXR1cm4gcXA7Ci19Ci0KLS8qIEFkZCBhbiBlbnRyeSB0byB0aGUgJ2lwcScgcXVldWUgZm9yIGEgbmV3bHkgcmVjZWl2ZWQgSVAgZGF0YWdyYW0uICovCi1zdGF0aWMgc3RydWN0IGlwcSAqaXBfZnJhZ19jcmVhdGUoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQotewotCXN0cnVjdCBpcHEgKnFwOwotCi0JaWYgKChxcCA9IGZyYWdfYWxsb2NfcXVldWUoKSkgPT0gTlVMTCkKLQkJZ290byBvdXRfbm9tZW07Ci0KLQlxcC0+cHJvdG9jb2wgPSBpcGgtPnByb3RvY29sOwotCXFwLT5pZCA9IGlwaC0+aWQ7Ci0JcXAtPnNhZGRyID0gaXBoLT5zYWRkcjsKLQlxcC0+ZGFkZHIgPSBpcGgtPmRhZGRyOwotCXFwLT51c2VyID0gdXNlcjsKLQlxcC0+cGVlciA9IHN5c2N0bF9pcGZyYWdfbWF4X2Rpc3QgPyBpbmV0X2dldHBlZXIoaXBoLT5zYWRkciwgMSkgOiBOVUxMOwotCi0JLyogSW5pdGlhbGl6ZSBhIHRpbWVyIGZvciB0aGlzIGVudHJ5LiAqLwotCWluaXRfdGltZXIoJnFwLT5xLnRpbWVyKTsKLQlxcC0+cS50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHFwOwkvKiBwb2ludGVyIHRvIHF1ZXVlCSovCi0JcXAtPnEudGltZXIuZnVuY3Rpb24gPSBpcF9leHBpcmU7CQkvKiBleHBpcmUgZnVuY3Rpb24JKi8KLQlzcGluX2xvY2tfaW5pdCgmcXAtPnEubG9jayk7Ci0JYXRvbWljX3NldCgmcXAtPnEucmVmY250LCAxKTsKLQotCXJldHVybiBpcF9mcmFnX2ludGVybihxcCk7Ci0KLW91dF9ub21lbToKLQlMSU1JVF9ORVRERUJVRyhLRVJOX0VSUiAiaXBfZnJhZ19jcmVhdGU6IG5vIG1lbW9yeSBsZWZ0ICFcbiIpOwotCXJldHVybiBOVUxMOwotfQotCiAvKiBGaW5kIHRoZSBjb3JyZWN0IGVudHJ5IGluIHRoZSAiaW5jb21wbGV0ZSBkYXRhZ3JhbXMiIHF1ZXVlIGZvcgogICogdGhpcyBJUCBkYXRhZ3JhbSwgYW5kIGNyZWF0ZSBuZXcgb25lLCBpZiBub3RoaW5nIGlzIGZvdW5kLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcHEgKmlwX2ZpbmQoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQogewotCV9fYmUxNiBpZCA9IGlwaC0+aWQ7Ci0JX19iZTMyIHNhZGRyID0gaXBoLT5zYWRkcjsKLQlfX2JlMzIgZGFkZHIgPSBpcGgtPmRhZGRyOwotCV9fdTggcHJvdG9jb2wgPSBpcGgtPnByb3RvY29sOworCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CisJc3RydWN0IGlwNF9jcmVhdGVfYXJnIGFyZzsKIAl1bnNpZ25lZCBpbnQgaGFzaDsKLQlzdHJ1Y3QgaXBxICpxcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKIAotCXJlYWRfbG9jaygmaXA0X2ZyYWdzLmxvY2spOwotCWhhc2ggPSBpcHFoYXNoZm4oaWQsIHNhZGRyLCBkYWRkciwgcHJvdG9jb2wpOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHFwLCBuLCAmaXA0X2ZyYWdzLmhhc2hbaGFzaF0sIHEubGlzdCkgewotCQlpZiAocXAtPmlkID09IGlkCQkmJgotCQkgICAgcXAtPnNhZGRyID09IHNhZGRyCSYmCi0JCSAgICBxcC0+ZGFkZHIgPT0gZGFkZHIJJiYKLQkJICAgIHFwLT5wcm90b2NvbCA9PSBwcm90b2NvbCAmJgotCQkgICAgcXAtPnVzZXIgPT0gdXNlcikgewotCQkJYXRvbWljX2luYygmcXAtPnEucmVmY250KTsKLQkJCXJlYWRfdW5sb2NrKCZpcDRfZnJhZ3MubG9jayk7Ci0JCQlyZXR1cm4gcXA7Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2soJmlwNF9mcmFncy5sb2NrKTsKKwlhcmcuaXBoID0gaXBoOworCWFyZy51c2VyID0gdXNlcjsKKwloYXNoID0gaXBxaGFzaGZuKGlwaC0+aWQsIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIsIGlwaC0+cHJvdG9jb2wpOwogCi0JcmV0dXJuIGlwX2ZyYWdfY3JlYXRlKGlwaCwgdXNlcik7CisJcSA9IGluZXRfZnJhZ19maW5kKCZpcDRfZnJhZ3MsICZhcmcsIGhhc2gpOworCWlmIChxID09IE5VTEwpCisJCWdvdG8gb3V0X25vbWVtOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgaXBxLCBxKTsKKworb3V0X25vbWVtOgorCUxJTUlUX05FVERFQlVHKEtFUk5fRVJSICJpcF9mcmFnX2NyZWF0ZTogbm8gbWVtb3J5IGxlZnQgIVxuIik7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIElzIHRoZSBmcmFnbWVudCB0b28gZmFyIGFoZWFkIHRvIGJlIHBhcnQgb2YgaXBxPyAqLwpAQCAtNTQ1LDcgKzQ4Niw2IEBACiAJaWYgKHByZXYpIHsKIAkJaGVhZCA9IHByZXYtPm5leHQ7CiAJCWZwID0gc2tiX2Nsb25lKGhlYWQsIEdGUF9BVE9NSUMpOwotCiAJCWlmICghZnApCiAJCQlnb3RvIG91dF9ub21lbTsKIApAQCAtNTcxLDcgKzUxMSw2IEBACiAJCWdvdG8gb3V0X292ZXJzaXplOwogCiAJLyogSGVhZCBvZiBsaXN0IG11c3Qgbm90IGJlIGNsb25lZC4gKi8KLQllcnIgPSAtRU5PTUVNOwogCWlmIChza2JfY2xvbmVkKGhlYWQpICYmIHBza2JfZXhwYW5kX2hlYWQoaGVhZCwgMCwgMCwgR0ZQX0FUT01JQykpCiAJCWdvdG8gb3V0X25vbWVtOwogCkBAIC02MjcsNiArNTY2LDcgQEAKIG91dF9ub21lbToKIAlMSU1JVF9ORVRERUJVRyhLRVJOX0VSUiAiSVA6IHF1ZXVlX2dsdWU6IG5vIG1lbW9yeSBmb3IgZ2x1aW5nICIKIAkJCSAgICAgICJxdWV1ZSAlcFxuIiwgcXApOworCWVyciA9IC1FTk9NRU07CiAJZ290byBvdXRfZmFpbDsKIG91dF9vdmVyc2l6ZToKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQpAQCAtNjcxLDkgKzYxMSwxMiBAQAogewogCWlwNF9mcmFncy5jdGwgPSAmaXA0X2ZyYWdzX2N0bDsKIAlpcDRfZnJhZ3MuaGFzaGZuID0gaXA0X2hhc2hmbjsKKwlpcDRfZnJhZ3MuY29uc3RydWN0b3IgPSBpcDRfZnJhZ19pbml0OwogCWlwNF9mcmFncy5kZXN0cnVjdG9yID0gaXA0X2ZyYWdfZnJlZTsKIAlpcDRfZnJhZ3Muc2tiX2ZyZWUgPSBOVUxMOwogCWlwNF9mcmFncy5xc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXBxKTsKKwlpcDRfZnJhZ3MubWF0Y2ggPSBpcDRfZnJhZ19tYXRjaDsKKwlpcDRfZnJhZ3MuZnJhZ19leHBpcmUgPSBpcF9leHBpcmU7CiAJaW5ldF9mcmFnc19pbml0KCZpcDRfZnJhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDE5NjA3NDcuLmM5OWYyYTMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jCkBAIC03OTQsNyArNzk0LDcgQEAKIAogCWFkZF93YWl0X3F1ZXVlKCZzeW5jX3dhaXQsICZ3YWl0KTsKIAotCXNldF9zeW5jX3BpZChzdGF0ZSwgY3VycmVudC0+cGlkKTsKKwlzZXRfc3luY19waWQoc3RhdGUsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAljb21wbGV0ZSh0aW5mby0+c3RhcnR1cCk7CiAKIAkvKgpAQCAtODc3LDcgKzg3Nyw3IEBACiAJaWYgKCF0aW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlJUF9WU19EQkcoNywgIiVzOiBwaWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgY3VycmVudC0+cGlkKTsKKwlJUF9WU19EQkcoNywgIiVzOiBwaWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgdGFza19waWRfbnIoY3VycmVudCkpOwogCUlQX1ZTX0RCRyg3LCAiRWFjaCBpcF92c19zeW5jX2Nvbm4gZW50cnkgbmVlZCAlWmQgYnl0ZXNcbiIsCiAJCSAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm4pKTsKIApAQCAtOTE3LDcgKzkxNyw3IEBACiAJICAgIChzdGF0ZSA9PSBJUF9WU19TVEFURV9CQUNLVVAgJiYgIXN5bmNfYmFja3VwX3BpZCkpCiAJCXJldHVybiAtRVNSQ0g7CiAKLQlJUF9WU19EQkcoNywgIiVzOiBwaWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgY3VycmVudC0+cGlkKTsKKwlJUF9WU19EQkcoNywgIiVzOiBwaWQgJWRcbiIsIF9fRlVOQ1RJT05fXywgdGFza19waWRfbnIoY3VycmVudCkpOwogCUlQX1ZTX0lORk8oInN0b3BwaW5nIHN5bmMgdGhyZWFkICVkIC4uLlxuIiwKIAkJICAgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikgPwogCQkgICBzeW5jX21hc3Rlcl9waWQgOiBzeW5jX2JhY2t1cF9waWQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCAxMWZlZGM3Li5hZGNiYWY2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMjgxLDcgKzI4MSw2IEBACiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKmljbXBfc3lzY3RsX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGljbXBfc3lzY3RsX3RhYmxlW10gPSB7CiAJewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX0lDTVBfVElNRU9VVCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19pY21wX3RpbWVvdXQiLAogCQkuZGF0YQkJPSAmbmZfY3RfaWNtcF90aW1lb3V0LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMjk1LDcgKzI5NCw2IEBACiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgaWNtcF9jb21wYXRfc3lzY3RsX3RhYmxlW10gPSB7CiAJewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VULAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX2ljbXBfdGltZW91dCIsCiAJCS5kYXRhCQk9ICZuZl9jdF9pY21wX3RpbWVvdXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCmluZGV4IGM5OGVmMTYuLmZmZGRkMmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCisrKyBiL25ldC9pcHY0L3N5c2N0bF9uZXRfaXB2NC5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAlyZXQgPSBwcm9jX2RvaW50dmVjX21pbm1heCgmdG1wLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKIAogCWlmICh3cml0ZSAmJiByZXQgPT0gMCkgewotCQlpZiAocmFuZ2VbMV0gPD0gcmFuZ2VbMF0pCisJCWlmIChyYW5nZVsxXSA8IHJhbmdlWzBdKQogCQkJcmV0ID0gLUVJTlZBTDsKIAkJZWxzZQogCQkJc2V0X2xvY2FsX3BvcnRfcmFuZ2UocmFuZ2UpOwpAQCAtMTUwLDcgKzE1MCw3IEBACiAKIAlyZXQgPSBzeXNjdGxfaW50dmVjKCZ0bXAsIG5hbWUsIG5sZW4sIG9sZHZhbCwgb2xkbGVucCwgbmV3dmFsLCBuZXdsZW4pOwogCWlmIChyZXQgPT0gMCAmJiBuZXd2YWwgJiYgbmV3bGVuKSB7Ci0JCWlmIChyYW5nZVsxXSA8PSByYW5nZVswXSkKKwkJaWYgKHJhbmdlWzFdIDwgcmFuZ2VbMF0pCiAJCQlyZXQgPSAtRUlOVkFMOwogCQllbHNlCiAJCQlzZXRfbG9jYWxfcG9ydF9yYW5nZShyYW5nZSk7CkBAIC03NDAsNyArNzQwLDYgQEAKIAkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9qaWZmaWVzCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X0lQRlJBR19NQVhfRElTVCwKIAkJLnByb2NuYW1lCT0gImlwZnJhZ19tYXhfZGlzdCIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfaXBmcmFnX21heF9kaXN0LAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtODY1LDcgKzg2NCw2IEBACiAJfSwKICNlbmRpZiAvKiBDT05GSUdfTkVUTEFCRUwgKi8KIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9UQ1BfQVZBSUxfQ09OR19DT05UUk9MLAogCQkucHJvY25hbWUJPSAidGNwX2F2YWlsYWJsZV9jb25nZXN0aW9uX2NvbnRyb2wiLAogCQkubWF4bGVuCQk9IFRDUF9DQV9CVUZfTUFYLAogCQkubW9kZQkJPSAwNDQ0LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwLmMgYi9uZXQvaXB2NC90Y3AuYwppbmRleCA0ZjMyMjAwLi4yZTZhZDZkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3AuYworKysgYi9uZXQvaXB2NC90Y3AuYwpAQCAtMTMzNCw3ICsxMzM0LDcgQEAKIAkJaWYgKChmbGFncyAmIE1TR19QRUVLKSAmJiBwZWVrX3NlcSAhPSB0cC0+Y29waWVkX3NlcSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiVENQKCVzOiVkKTogQXBwbGljYXRpb24gYnVnLCByYWNlIGluIE1TR19QRUVLLlxuIiwKLQkJCQkgICAgICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkKTsKKwkJCQkgICAgICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOwogCQkJcGVla19zZXEgPSB0cC0+Y29waWVkX3NlcTsKIAkJfQogCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pbnB1dC5jIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKaW5kZXggMGYwMDk2Ni4uOTI4ODIyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2lucHV0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lucHV0LmMKQEAgLTExMjEsNyArMTEyMSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgZmxhZyA9IDA7CiAJaW50IGNudCA9IDA7Ci0JdTMyIG5ld19sb3dfc2VxID0gMDsKKwl1MzIgbmV3X2xvd19zZXEgPSB0cC0+c25kX254dDsKIAogCXRjcF9mb3Jfd3JpdGVfcXVldWUoc2tiLCBzaykgewogCQl1MzIgYWNrX3NlcSA9IFRDUF9TS0JfQ0Ioc2tiKS0+YWNrX3NlcTsKQEAgLTExNTMsNyArMTE1Myw3IEBACiAJCQkJTkVUX0lOQ19TVEFUU19CSChMSU5VWF9NSUJfVENQTE9TVFJFVFJBTlNNSVQpOwogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKCFuZXdfbG93X3NlcSB8fCBiZWZvcmUoYWNrX3NlcSwgbmV3X2xvd19zZXEpKQorCQkJaWYgKGJlZm9yZShhY2tfc2VxLCBuZXdfbG93X3NlcSkpCiAJCQkJbmV3X2xvd19zZXEgPSBhY2tfc2VxOwogCQkJY250ICs9IHRjcF9za2JfcGNvdW50KHNrYik7CiAJCX0KQEAgLTEyNDIsNyArMTI0Miw3IEBACiAJaW50IG51bV9zYWNrcyA9IChwdHJbMV0gLSBUQ1BPTEVOX1NBQ0tfQkFTRSk+PjM7CiAJaW50IHJlb3JkID0gdHAtPnBhY2tldHNfb3V0OwogCWludCBwcmlvcl9mYWNrZXRzOwotCXUzMiBoaWdoZXN0X3NhY2tfZW5kX3NlcSA9IDA7CisJdTMyIGhpZ2hlc3Rfc2Fja19lbmRfc2VxID0gdHAtPmxvc3RfcmV0cmFuc19sb3c7CiAJaW50IGZsYWcgPSAwOwogCWludCBmb3VuZF9kdXBfc2FjayA9IDA7CiAJaW50IGNhY2hlZF9mYWNrX2NvdW50OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdWRwLmMgYi9uZXQvaXB2NC91ZHAuYwppbmRleCBjYjlmYzU4Li4zNWQyYjBlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHAuYworKysgYi9uZXQvaXB2NC91ZHAuYwpAQCAtMTQ3LDEzICsxNDcsMTQgQEAKIAl3cml0ZV9sb2NrX2JoKCZ1ZHBfaGFzaF9sb2NrKTsKIAogCWlmICghc251bSkgewotCQlpbnQgaSwgbG93LCBoaWdoOworCQlpbnQgaSwgbG93LCBoaWdoLCByZW1haW5pbmc7CiAJCXVuc2lnbmVkIHJvdmVyLCBiZXN0LCBiZXN0X3NpemVfc29fZmFyOwogCiAJCWluZXRfZ2V0X2xvY2FsX3BvcnRfcmFuZ2UoJmxvdywgJmhpZ2gpOworCQlyZW1haW5pbmcgPSAoaGlnaCAtIGxvdykgKyAxOwogCiAJCWJlc3Rfc2l6ZV9zb19mYXIgPSBVSU5UX01BWDsKLQkJYmVzdCA9IHJvdmVyID0gbmV0X3JhbmRvbSgpICUgKGhpZ2ggLSBsb3cpICsgbG93OworCQliZXN0ID0gcm92ZXIgPSBuZXRfcmFuZG9tKCkgJSByZW1haW5pbmcgKyBsb3c7CiAKIAkJLyogMXN0IHBhc3M6IGxvb2sgZm9yIGVtcHR5IChvciBzaG9ydGVzdCkgaGFzaCBjaGFpbiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgVURQX0hUQUJMRV9TSVpFOyBpKyspIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCmluZGV4IGU5YmJmZGUuLjVlOTVjOGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X2lucHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfaW5wdXQuYwpAQCAtMTYsMTkgKzE2LDYgQEAKICNpbmNsdWRlIDxuZXQvaXAuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCi1zdGF0aWMgaW50IHhmcm00X3BhcnNlX3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBuZXh0aGRyLCBfX2JlMzIgKnNwaSwgX19iZTMyICpzZXEpCi17Ci0Jc3dpdGNoIChuZXh0aGRyKSB7Ci0JY2FzZSBJUFBST1RPX0lQSVA6Ci0JY2FzZSBJUFBST1RPX0lQVjY6Ci0JCSpzcGkgPSBpcF9oZHIoc2tiKS0+c2FkZHI7Ci0JCSpzZXEgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4geGZybV9wYXJzZV9zcGkoc2tiLCBuZXh0aGRyLCBzcGksIHNlcSk7Ci19Ci0KICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiBzdGF0aWMgaW5saW5lIGludCB4ZnJtNF9yY3ZfZW5jYXBfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC00NiwyOCArMzMsMjkgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IHhmcm00X3Jjdl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBlbmNhcF90eXBlKQoraW50IHhmcm00X3Jjdl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSwKKwkJICAgIGludCBlbmNhcF90eXBlKQogewotCV9fYmUzMiBzcGksIHNlcTsKKwlpbnQgZXJyOworCV9fYmUzMiBzZXE7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdmVjW1hGUk1fTUFYX0RFUFRIXTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlpbnQgeGZybV9uciA9IDA7CiAJaW50IGRlY2FwcyA9IDA7Ci0JaW50IGVyciA9IHhmcm00X3BhcnNlX3NwaShza2IsIGlwX2hkcihza2IpLT5wcm90b2NvbCwgJnNwaSwgJnNlcSk7CiAJdW5zaWduZWQgaW50IG5ob2ZmID0gb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7CiAKLQlpZiAoZXJyICE9IDApCisJc2VxID0gMDsKKwlpZiAoIXNwaSAmJiAoZXJyID0geGZybV9wYXJzZV9zcGkoc2tiLCBuZXh0aGRyLCAmc3BpLCAmc2VxKSkgIT0gMCkKIAkJZ290byBkcm9wOwogCiAJZG8gewogCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOwotCQlpbnQgbmV4dGhkcjsKIAogCQlpZiAoeGZybV9uciA9PSBYRlJNX01BWF9ERVBUSCkKIAkJCWdvdG8gZHJvcDsKIAogCQl4ID0geGZybV9zdGF0ZV9sb29rdXAoKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsIHNwaSwKLQkJCQlpcGgtPnByb3RvY29sICE9IElQUFJPVE9fSVBWNiA/IGlwaC0+cHJvdG9jb2wgOiBJUFBST1RPX0lQSVAsIEFGX0lORVQpOworCQkJCSAgICAgIG5leHRoZHIsIEFGX0lORVQpOwogCQlpZiAoeCA9PSBOVUxMKQogCQkJZ290byBkcm9wOwogCkBAIC0xMDMsMTUgKzkxLDE1IEBACiAKIAkJeGZybV92ZWNbeGZybV9ucisrXSA9IHg7CiAKLQkJaWYgKHgtPm1vZGUtPmlucHV0KHgsIHNrYikpCisJCWlmICh4LT5vdXRlcl9tb2RlLT5pbnB1dCh4LCBza2IpKQogCQkJZ290byBkcm9wOwogCi0JCWlmICh4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpIHsKKwkJaWYgKHgtPm91dGVyX21vZGUtPmZsYWdzICYgWEZSTV9NT0RFX0ZMQUdfVFVOTkVMKSB7CiAJCQlkZWNhcHMgPSAxOwogCQkJYnJlYWs7CiAJCX0KIAotCQllcnIgPSB4ZnJtX3BhcnNlX3NwaShza2IsIGlwX2hkcihza2IpLT5wcm90b2NvbCwgJnNwaSwgJnNlcSk7CisJCWVyciA9IHhmcm1fcGFyc2Vfc3BpKHNrYiwgbmV4dGhkciwgJnNwaSwgJnNlcSk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBkcm9wOwogCX0gd2hpbGUgKCFlcnIpOwpAQCAtMTY1LDYgKzE1Myw3IEBACiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKHhmcm00X3Jjdl9lbmNhcCk7CiAKIC8qIElmIGl0J3MgYSBrZWVwYWxpdmUgcGFja2V0LCB0aGVuIGp1c3QgZWF0IGl0LgogICogSWYgaXQncyBhbiBlbmNhcHN1bGF0ZWQgcGFja2V0LCB0aGVuIHBhc3MgaXQgdG8gdGhlCkBAIC0yNTIsMTEgKzI0MSw4IEBACiAJX19za2JfcHVsbChza2IsIGxlbik7CiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAotCS8qIG1vZGlmeSB0aGUgcHJvdG9jb2wgKGl0J3MgRVNQISkgKi8KLQlpcGgtPnByb3RvY29sID0gSVBQUk9UT19FU1A7Ci0KIAkvKiBwcm9jZXNzIEVTUCAqLwotCXJldCA9IHhmcm00X3Jjdl9lbmNhcChza2IsIGVuY2FwX3R5cGUpOworCXJldCA9IHhmcm00X3Jjdl9lbmNhcChza2IsIElQUFJPVE9fRVNQLCAwLCBlbmNhcF90eXBlKTsKIAlyZXR1cm4gcmV0OwogCiBkcm9wOgpAQCAtMjY2LDcgKzI1Miw3IEBACiAKIGludCB4ZnJtNF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4geGZybTRfcmN2X2VuY2FwKHNrYiwgMCk7CisJcmV0dXJuIHhmcm00X3Jjdl9zcGkoc2tiLCBpcF9oZHIoc2tiKS0+cHJvdG9jb2wsIDApOwogfQogCiBFWFBPUlRfU1lNQk9MKHhmcm00X3Jjdik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9tb2RlX2JlZXQuYyBiL25ldC9pcHY0L3hmcm00X21vZGVfYmVldC5jCmluZGV4IDczZDIzMzguLmU0MmUxMjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X21vZGVfYmVldC5jCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfYmVldC5jCkBAIC0xMTQsNiArMTE0LDcgQEAKIAkub3V0cHV0ID0geGZybTRfYmVldF9vdXRwdXQsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmVuY2FwID0gWEZSTV9NT0RFX0JFRVQsCisJLmZsYWdzID0gWEZSTV9NT0RFX0ZMQUdfVFVOTkVMLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeGZybTRfYmVldF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9tb2RlX3R1bm5lbC5jIGIvbmV0L2lwdjQveGZybTRfbW9kZV90dW5uZWwuYwppbmRleCAxYWU5ZDMyLi5lNGRlZWNiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9tb2RlX3R1bm5lbC5jCisrKyBiL25ldC9pcHY0L3hmcm00X21vZGVfdHVubmVsLmMKQEAgLTEzOSw2ICsxMzksNyBAQAogCS5vdXRwdXQgPSB4ZnJtNF90dW5uZWxfb3V0cHV0LAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5lbmNhcCA9IFhGUk1fTU9ERV9UVU5ORUwsCisJLmZsYWdzID0gWEZSTV9NT0RFX0ZMQUdfVFVOTkVMLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeGZybTRfdHVubmVsX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X291dHB1dC5jIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKaW5kZXggYTRlZGQ2Ni4uYzRhNzE1NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgZXJyOwogCi0JaWYgKHgtPnByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCkgeworCWlmICh4LT5vdXRlcl9tb2RlLT5mbGFncyAmIFhGUk1fTU9ERV9GTEFHX1RVTk5FTCkgewogCQllcnIgPSB4ZnJtNF90dW5uZWxfY2hlY2tfc2l6ZShza2IpOwogCQlpZiAoZXJyKQogCQkJZ290byBlcnJvcl9ub2xvY2s7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9wb2xpY3kuYyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCmluZGV4IDMyOTgyNWMuLmNjODZmYjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3BvbGljeS5jCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJaGVhZGVyX2xlbiArPSB4ZnJtW2ldLT5wcm9wcy5oZWFkZXJfbGVuOwogCQl0cmFpbGVyX2xlbiArPSB4ZnJtW2ldLT5wcm9wcy50cmFpbGVyX2xlbjsKIAotCQlpZiAoeGZybVtpXS0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CisJCWlmICh4ZnJtW2ldLT5wcm9wcy5tb2RlICE9IFhGUk1fTU9ERV9UUkFOU1BPUlQpIHsKIAkJCXVuc2lnbmVkIHNob3J0IGVuY2FwX2ZhbWlseSA9IHhmcm1baV0tPnByb3BzLmZhbWlseTsKIAkJCXN3aXRjaCAoZW5jYXBfZmFtaWx5KSB7CiAJCQljYXNlIEFGX0lORVQ6CkBAIC0xNTEsNyArMTUxLDYgQEAKIAlpID0gMDsKIAlmb3IgKDsgZHN0X3ByZXYgIT0gJnJ0LT51LmRzdDsgZHN0X3ByZXYgPSBkc3RfcHJldi0+Y2hpbGQpIHsKIAkJc3RydWN0IHhmcm1fZHN0ICp4ID0gKHN0cnVjdCB4ZnJtX2RzdCopZHN0X3ByZXY7Ci0JCXN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvOwogCQl4LT51LnJ0LmZsID0gKmZsOwogCiAJCWRzdF9wcmV2LT54ZnJtID0geGZybVtpKytdOwpAQCAtMTY5LDI3ICsxNjgsMTcgQEAKIAkJLyogQ29weSBuZWlnaGJvdXQgZm9yIHJlYWNoYWJpbGl0eSBjb25maXJtYXRpb24gKi8KIAkJZHN0X3ByZXYtPm5laWdoYm91cgk9IG5laWdoX2Nsb25lKHJ0LT51LmRzdC5uZWlnaGJvdXIpOwogCQlkc3RfcHJldi0+aW5wdXQJCT0gcnQtPnUuZHN0LmlucHV0OwotCQkvKiBYWFg6IFdoZW4gSVB2NiBtb2R1bGUgY2FuIGJlIHVubG9hZGVkLCB3ZSBzaG91bGQgbWFuYWdlIHJlZmVyZW5jZQotCQkgKiB0byB4ZnJtNl9vdXRwdXQgaW4gYWZpbmZvLT5vdXRwdXQuIE1peWF6YXdhCi0JCSAqICovCi0JCWFmaW5mbyA9IHhmcm1fc3RhdGVfZ2V0X2FmaW5mbyhkc3RfcHJldi0+eGZybS0+cHJvcHMuZmFtaWx5KTsKLQkJaWYgKCFhZmluZm8pIHsKLQkJCWRzdCA9ICpkc3RfcDsKLQkJCWVyciA9IC1FQUZOT1NVUFBPUlQ7Ci0JCQlnb3RvIGVycm9yOwotCQl9Ci0JCWRzdF9wcmV2LT5vdXRwdXQgPSBhZmluZm8tPm91dHB1dDsKLQkJeGZybV9zdGF0ZV9wdXRfYWZpbmZvKGFmaW5mbyk7Ci0JCWlmIChkc3RfcHJldi0+eGZybS0+cHJvcHMuZmFtaWx5ID09IEFGX0lORVQgJiYgcnQtPnBlZXIpCi0JCQlhdG9taWNfaW5jKCZydC0+cGVlci0+cmVmY250KTsKLQkJeC0+dS5ydC5wZWVyID0gcnQtPnBlZXI7CisJCWRzdF9wcmV2LT5vdXRwdXQgPSBkc3RfcHJldi0+eGZybS0+b3V0ZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXQ7CisJCWlmIChydDAtPnBlZXIpCisJCQlhdG9taWNfaW5jKCZydDAtPnBlZXItPnJlZmNudCk7CisJCXgtPnUucnQucGVlciA9IHJ0MC0+cGVlcjsKIAkJLyogU2hlaXQuLi4gSSByZW1lbWJlciBJIGRpZCB0aGlzIHJpZ2h0LiBBcHBhcmVudGx5LAogCQkgKiBpdCB3YXMgbWFnaWNhbGx5IGxvc3QsIHNvIHRoaXMgY29kZSBuZWVkcyBhdWRpdCAqLwogCQl4LT51LnJ0LnJ0X2ZsYWdzID0gcnQwLT5ydF9mbGFncyYoUlRDRl9CUk9BRENBU1R8UlRDRl9NVUxUSUNBU1R8UlRDRl9MT0NBTCk7Ci0JCXgtPnUucnQucnRfdHlwZSA9IHJ0LT5ydF90eXBlOworCQl4LT51LnJ0LnJ0X3R5cGUgPSBydDAtPnJ0X3R5cGU7CiAJCXgtPnUucnQucnRfc3JjID0gcnQwLT5ydF9zcmM7CiAJCXgtPnUucnQucnRfZHN0ID0gcnQwLT5ydF9kc3Q7Ci0JCXgtPnUucnQucnRfZ2F0ZXdheSA9IHJ0LT5ydF9nYXRld2F5OworCQl4LT51LnJ0LnJ0X2dhdGV3YXkgPSBydDAtPnJ0X2dhdGV3YXk7CiAJCXgtPnUucnQucnRfc3BlY19kc3QgPSBydDAtPnJ0X3NwZWNfZHN0OwogCQl4LT51LnJ0LmlkZXYgPSBydDAtPmlkZXY7CiAJCWluX2Rldl9ob2xkKHJ0MC0+aWRldik7CkBAIC0yOTEsNyArMjgwLDcgQEAKIAogCWlmIChsaWtlbHkoeGRzdC0+dS5ydC5pZGV2KSkKIAkJaW5fZGV2X3B1dCh4ZHN0LT51LnJ0LmlkZXYpOwotCWlmIChkc3QtPnhmcm0gJiYgZHN0LT54ZnJtLT5wcm9wcy5mYW1pbHkgPT0gQUZfSU5FVCAmJiBsaWtlbHkoeGRzdC0+dS5ydC5wZWVyKSkKKwlpZiAobGlrZWx5KHhkc3QtPnUucnQucGVlcikpCiAJCWluZXRfcHV0cGVlcih4ZHN0LT51LnJ0LnBlZXIpOwogCXhmcm1fZHN0X2Rlc3Ryb3koeGRzdCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jIGIvbmV0L2lwdjQveGZybTRfc3RhdGUuYwppbmRleCA5M2UyYzA2Li4xM2Q1NGExIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCisrKyBiL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyB4ZnJtNF9zdGF0ZV9hZmluZm8gPSB7CiAJLmZhbWlseQkJCT0gQUZfSU5FVCwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAogCS5pbml0X2ZsYWdzCQk9IHhmcm00X2luaXRfZmxhZ3MsCiAJLmluaXRfdGVtcHNlbAkJPSBfX3hmcm00X2luaXRfdGVtcHNlbCwKIAkub3V0cHV0CQkJPSB4ZnJtNF9vdXRwdXQsCmRpZmYgLS1naXQgYS9uZXQvaXB2NC94ZnJtNF90dW5uZWwuYyBiL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCmluZGV4IDEzMTI0MTcuLjMyNjg0NTEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCisrKyBiL25ldC9pcHY0L3hmcm00X3R1bm5lbC5jCkBAIC0xOCw3ICsxOCw3IEBACiAKIHN0YXRpYyBpbnQgaXBpcF94ZnJtX3JjdihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gSVBQUk9UT19JUDsKKwlyZXR1cm4gaXBfaGRyKHNrYiktPnByb3RvY29sOwogfQogCiBzdGF0aWMgaW50IGlwaXBfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKQEAgLTQ4LDIwICs0OCwyNSBAQAogCS5vdXRwdXQJCT0gaXBpcF9vdXRwdXQKIH07CiAKK3N0YXRpYyBpbnQgeGZybV90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIHhmcm00X3Jjdl9zcGkoc2tiLCBJUFBST1RPX0lQLCBpcF9oZHIoc2tiKS0+c2FkZHIpOworfQorCiBzdGF0aWMgaW50IHhmcm1fdHVubmVsX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKIHsKIAlyZXR1cm4gLUVOT0VOVDsKIH0KIAogc3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCB4ZnJtX3R1bm5lbF9oYW5kbGVyID0gewotCS5oYW5kbGVyCT0JeGZybTRfcmN2LAorCS5oYW5kbGVyCT0JeGZybV90dW5uZWxfcmN2LAogCS5lcnJfaGFuZGxlcgk9CXhmcm1fdHVubmVsX2VyciwKIAkucHJpb3JpdHkJPQkyLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogc3RhdGljIHN0cnVjdCB4ZnJtX3R1bm5lbCB4ZnJtNjRfdHVubmVsX2hhbmRsZXIgPSB7Ci0JLmhhbmRsZXIJPQl4ZnJtNF9yY3YsCisJLmhhbmRsZXIJPQl4ZnJtX3R1bm5lbF9yY3YsCiAJLmVycl9oYW5kbGVyCT0JeGZybV90dW5uZWxfZXJyLAogCS5wcmlvcml0eQk9CTIsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggNTJkMTBkMi4uMzQ4YmQ4ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yNTUsMTEgKzI1NSw2IEBACiAKIHN0YXRpYyBpbnQgc25tcDZfYWxsb2NfZGV2KHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCiB7Ci0JaW50IGVyciA9IC1FTk9NRU07Ci0KLQlpZiAoIWlkZXYgfHwgIWlkZXYtPmRldikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2LAogCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSwKIAkJCSAgX19hbGlnbm9mX18oc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQpAQCAtMjgwLDE1ICsyNzUsMTQgQEAKIGVycl9pY21wOgogCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopaWRldi0+c3RhdHMuaXB2Nik7CiBlcnJfaXA6Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBzbm1wNl9mcmVlX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQorc3RhdGljIHZvaWQgc25tcDZfZnJlZV9kZXYoc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKIAlzbm1wX21pYl9mcmVlKCh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CiAJc25tcF9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjYpOwogCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopaWRldi0+c3RhdHMuaXB2Nik7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIE5vYm9keSByZWZlcnMgdG8gdGhpcyBkZXZpY2UsIHdlIG1heSBkZXN0cm95IGl0LiAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggYmM5MjkzOC4uMWIxY2FmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC03NDcsNiArNzQ3LDcgQEAKIHsKIAlzbm1wX21pYl9mcmVlKCh2b2lkICoqKWlwdjZfc3RhdGlzdGljcyk7CiAJc25tcF9taWJfZnJlZSgodm9pZCAqKilpY21wdjZfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCAqKilpY21wdjZtc2dfc3RhdGlzdGljcyk7CiAJc25tcF9taWJfZnJlZSgodm9pZCAqKil1ZHBfc3RhdHNfaW42KTsKIAlzbm1wX21pYl9mcmVlKCh2b2lkICoqKXVkcGxpdGVfc3RhdHNfaW42KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FoNi5jIGIvbmV0L2lwdjYvYWg2LmMKaW5kZXggZjlmNjg5MS4uNjdjZDA2NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWg2LmMKKysrIGIvbmV0L2lwdjYvYWg2LmMKQEAgLTM0NCw2ICszNDQsOCBAQAogCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpCiAJCWdvdG8gb3V0OwogCisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCiAJaGRyX2xlbiA9IHNrYi0+ZGF0YSAtIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpOwogCWFoID0gKHN0cnVjdCBpcF9hdXRoX2hkciAqKXNrYi0+ZGF0YTsKIAlhaHAgPSB4LT5kYXRhOwpAQCAtNDc1LDggKzQ3NywxNSBAQAogCiAJeC0+cHJvcHMuaGVhZGVyX2xlbiA9IFhGUk1fQUxJR044KHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpICsKIAkJCQkJICBhaHAtPmljdl90cnVuY19sZW4pOwotCWlmICh4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpCisJc3dpdGNoICh4LT5wcm9wcy5tb2RlKSB7CisJY2FzZSBYRlJNX01PREVfQkVFVDoKKwljYXNlIFhGUk1fTU9ERV9UUkFOU1BPUlQ6CisJCWJyZWFrOworCWNhc2UgWEZSTV9NT0RFX1RVTk5FTDoKIAkJeC0+cHJvcHMuaGVhZGVyX2xlbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyb3I7CisJfQogCXgtPmRhdGEgPSBhaHA7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2VzcDYuYyBiL25ldC9pcHY2L2VzcDYuYwppbmRleCA5ZWI5Mjg1Li5iMDcxNTQzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9lc3A2LmMKKysrIGIvbmV0L2lwdjYvZXNwNi5jCkBAIC0zNTQsOCArMzU0LDE1IEBACiAJCQkJICAgICh4LT5lYWxnLT5hbGdfa2V5X2xlbiArIDcpIC8gOCkpCiAJCWdvdG8gZXJyb3I7CiAJeC0+cHJvcHMuaGVhZGVyX2xlbiA9IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW47Ci0JaWYgKHgtPnByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCkKKwlzd2l0Y2ggKHgtPnByb3BzLm1vZGUpIHsKKwljYXNlIFhGUk1fTU9ERV9CRUVUOgorCWNhc2UgWEZSTV9NT0RFX1RSQU5TUE9SVDoKKwkJYnJlYWs7CisJY2FzZSBYRlJNX01PREVfVFVOTkVMOgogCQl4LT5wcm9wcy5oZWFkZXJfbGVuICs9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CisJZGVmYXVsdDoKKwkJZ290byBlcnJvcjsKKwl9CiAJeC0+ZGF0YSA9IGVzcDsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCmluZGV4IDFjMmMyNzYuLmQ2ZjEwMjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKQEAgLTI2MSw3ICsyNjEsNyBAQAogCQlzdHJ1Y3QgaW5ldF90aW1ld2FpdF9zb2NrICp0dyA9IE5VTEw7CiAKIAkJaW5ldF9nZXRfbG9jYWxfcG9ydF9yYW5nZSgmbG93LCAmaGlnaCk7Ci0JCXJlbWFpbmluZyA9IGhpZ2ggLSBsb3c7CisJCXJlbWFpbmluZyA9IChoaWdoIC0gbG93KSArIDE7CiAKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQlmb3IgKGkgPSAxOyBpIDw9IHJlbWFpbmluZzsgaSsrKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMgYi9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKaW5kZXggMjE3ZDYwZi4uYjEyY2MyMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCisrKyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwpAQCAtMTU0LDggKzE1NCwxMCBAQAogCXdyaXRlX3VubG9jaygmaXA2X2ZsX2xvY2spOwogfQogCi1zdGF0aWMgaW50IGZsX2ludGVybihzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwsIF9fYmUzMiBsYWJlbCkKK3N0YXRpYyBzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmxfaW50ZXJuKHN0cnVjdCBpcDZfZmxvd2xhYmVsICpmbCwgX19iZTMyIGxhYmVsKQogeworCXN0cnVjdCBpcDZfZmxvd2xhYmVsICpsZmw7CisKIAlmbC0+bGFiZWwgPSBsYWJlbCAmIElQVjZfRkxPV0xBQkVMX01BU0s7CiAKIAl3cml0ZV9sb2NrX2JoKCZpcDZfZmxfbG9jayk7CkBAIC0xNjMsMTIgKzE2NSwyNiBAQAogCQlmb3IgKDs7KSB7CiAJCQlmbC0+bGFiZWwgPSBodG9ubChuZXRfcmFuZG9tKCkpJklQVjZfRkxPV0xBQkVMX01BU0s7CiAJCQlpZiAoZmwtPmxhYmVsKSB7Ci0JCQkJc3RydWN0IGlwNl9mbG93bGFiZWwgKmxmbDsKIAkJCQlsZmwgPSBfX2ZsX2xvb2t1cChmbC0+bGFiZWwpOwogCQkJCWlmIChsZmwgPT0gTlVMTCkKIAkJCQkJYnJlYWs7CiAJCQl9CiAJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiB3ZSBkcm9wcGVyIHRoZSBpcDZfZmxfbG9jaywgc28gdGhpcyBlbnRyeSBjb3VsZCByZWFwcGVhcgorCQkgKiBhbmQgd2UgbmVlZCB0byByZWNoZWNrIHdpdGggaXQuCisJCSAqCisJCSAqIE9UT0ggbm8gbmVlZCB0byBzZWFyY2ggdGhlIGFjdGl2ZSBzb2NrZXQgZmlyc3QsIGxpa2UgaXQgaXMKKwkJICogZG9uZSBpbiBpcHY2X2Zsb3dsYWJlbF9vcHQgLSBzb2NrIGlzIGxvY2tlZCwgc28gbmV3IGVudHJ5CisJCSAqIHdpdGggdGhlIHNhbWUgbGFiZWwgY2FuIG9ubHkgYXBwZWFyIG9uIGFub3RoZXIgc29jaworCQkgKi8KKwkJbGZsID0gX19mbF9sb29rdXAoZmwtPmxhYmVsKTsKKwkJaWYgKGxmbCAhPSBOVUxMKSB7CisJCQlhdG9taWNfaW5jKCZsZmwtPnVzZXJzKTsKKwkJCXdyaXRlX3VubG9ja19iaCgmaXA2X2ZsX2xvY2spOworCQkJcmV0dXJuIGxmbDsKKwkJfQogCX0KIAogCWZsLT5sYXN0dXNlID0gamlmZmllczsKQEAgLTE3Niw3ICsxOTIsNyBAQAogCWZsX2h0W0ZMX0hBU0goZmwtPmxhYmVsKV0gPSBmbDsKIAlhdG9taWNfaW5jKCZmbF9zaXplKTsKIAl3cml0ZV91bmxvY2tfYmgoJmlwNl9mbF9sb2NrKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogCkBAIC0xOTAsMTQgKzIwNiwxNyBAQAogCiAJbGFiZWwgJj0gSVBWNl9GTE9XTEFCRUxfTUFTSzsKIAorCXJlYWRfbG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOwogCWZvciAoc2ZsPW5wLT5pcHY2X2ZsX2xpc3Q7IHNmbDsgc2ZsID0gc2ZsLT5uZXh0KSB7CiAJCXN0cnVjdCBpcDZfZmxvd2xhYmVsICpmbCA9IHNmbC0+Zmw7CiAJCWlmIChmbC0+bGFiZWwgPT0gbGFiZWwpIHsKIAkJCWZsLT5sYXN0dXNlID0gamlmZmllczsKIAkJCWF0b21pY19pbmMoJmZsLT51c2Vycyk7CisJCQlyZWFkX3VubG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOwogCQkJcmV0dXJuIGZsOwogCQl9CiAJfQorCXJlYWRfdW5sb2NrX2JoKCZpcDZfc2tfZmxfbG9jayk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTQwOSw2ICs0MjgsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGZsX2xpbmsoc3RydWN0IGlwdjZfcGluZm8gKm5wLCBzdHJ1Y3QgaXB2Nl9mbF9zb2NrbGlzdCAqc2ZsLAorCQlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwpCit7CisJd3JpdGVfbG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOworCXNmbC0+ZmwgPSBmbDsKKwlzZmwtPm5leHQgPSBucC0+aXB2Nl9mbF9saXN0OworCW5wLT5pcHY2X2ZsX2xpc3QgPSBzZmw7CisJd3JpdGVfdW5sb2NrX2JoKCZpcDZfc2tfZmxfbG9jayk7Cit9CisKIGludCBpcHY2X2Zsb3dsYWJlbF9vcHQoc3RydWN0IHNvY2sgKnNrLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgb3B0bGVuKQogewogCWludCBlcnI7CkBAIC00MTYsNyArNDQ1LDggQEAKIAlzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEgZnJlcTsKIAlzdHJ1Y3QgaXB2Nl9mbF9zb2NrbGlzdCAqc2ZsMT1OVUxMOwogCXN0cnVjdCBpcHY2X2ZsX3NvY2tsaXN0ICpzZmwsICoqc2ZscDsKLQlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmw7CisJc3RydWN0IGlwNl9mbG93bGFiZWwgKmZsLCAqZmwxID0gTlVMTDsKKwogCiAJaWYgKG9wdGxlbiA8IHNpemVvZihmcmVxKSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00NzIsOCArNTAyLDYgQEAKIAkJc2ZsMSA9IGttYWxsb2Moc2l6ZW9mKCpzZmwxKSwgR0ZQX0tFUk5FTCk7CiAKIAkJaWYgKGZyZXEuZmxyX2xhYmVsKSB7Ci0JCQlzdHJ1Y3QgaXA2X2Zsb3dsYWJlbCAqZmwxID0gTlVMTDsKLQogCQkJZXJyID0gLUVFWElTVDsKIAkJCXJlYWRfbG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOwogCQkJZm9yIChzZmwgPSBucC0+aXB2Nl9mbF9saXN0OyBzZmw7IHNmbCA9IHNmbC0+bmV4dCkgewpAQCAtNDkyLDYgKzUyMCw3IEBACiAJCQlpZiAoZmwxID09IE5VTEwpCiAJCQkJZmwxID0gZmxfbG9va3VwKGZyZXEuZmxyX2xhYmVsKTsKIAkJCWlmIChmbDEpIHsKK3JlY2hlY2s6CiAJCQkJZXJyID0gLUVFWElTVDsKIAkJCQlpZiAoZnJlcS5mbHJfZmxhZ3MmSVBWNl9GTF9GX0VYQ0wpCiAJCQkJCWdvdG8gcmVsZWFzZTsKQEAgLTUxMywxMSArNTQyLDcgQEAKIAkJCQkJZmwxLT5saW5nZXIgPSBmbC0+bGluZ2VyOwogCQkJCWlmICgobG9uZykoZmwtPmV4cGlyZXMgLSBmbDEtPmV4cGlyZXMpID4gMCkKIAkJCQkJZmwxLT5leHBpcmVzID0gZmwtPmV4cGlyZXM7Ci0JCQkJd3JpdGVfbG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOwotCQkJCXNmbDEtPmZsID0gZmwxOwotCQkJCXNmbDEtPm5leHQgPSBucC0+aXB2Nl9mbF9saXN0OwotCQkJCW5wLT5pcHY2X2ZsX2xpc3QgPSBzZmwxOwotCQkJCXdyaXRlX3VubG9ja19iaCgmaXA2X3NrX2ZsX2xvY2spOworCQkJCWZsX2xpbmsobnAsIHNmbDEsIGZsMSk7CiAJCQkJZmxfZnJlZShmbCk7CiAJCQkJcmV0dXJuIDA7CiAKQEAgLTUzNCw5ICs1NTksOSBAQAogCQlpZiAoc2ZsMSA9PSBOVUxMIHx8IChlcnIgPSBtZW1fY2hlY2soc2spKSAhPSAwKQogCQkJZ290byBkb25lOwogCi0JCWVyciA9IGZsX2ludGVybihmbCwgZnJlcS5mbHJfbGFiZWwpOwotCQlpZiAoZXJyKQotCQkJZ290byBkb25lOworCQlmbDEgPSBmbF9pbnRlcm4oZmwsIGZyZXEuZmxyX2xhYmVsKTsKKwkJaWYgKGZsMSAhPSBOVUxMKQorCQkJZ290byByZWNoZWNrOwogCiAJCWlmICghZnJlcS5mbHJfbGFiZWwpIHsKIAkJCWlmIChjb3B5X3RvX3VzZXIoJigoc3RydWN0IGluNl9mbG93bGFiZWxfcmVxIF9fdXNlciAqKSBvcHR2YWwpLT5mbHJfbGFiZWwsCkBAIC01NDUsOSArNTcwLDcgQEAKIAkJCX0KIAkJfQogCi0JCXNmbDEtPmZsID0gZmw7Ci0JCXNmbDEtPm5leHQgPSBucC0+aXB2Nl9mbF9saXN0OwotCQlucC0+aXB2Nl9mbF9saXN0ID0gc2ZsMTsKKwkJZmxfbGluayhucCwgc2ZsMSwgZmwpOwogCQlyZXR1cm4gMDsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggMjhmYzhlZC4uODBlZjJhMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtNDExLDggKzQxMSwxNSBAQAogCQlnb3RvIG91dDsKIAogCXgtPnByb3BzLmhlYWRlcl9sZW4gPSAwOwotCWlmICh4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpCisJc3dpdGNoICh4LT5wcm9wcy5tb2RlKSB7CisJY2FzZSBYRlJNX01PREVfQkVFVDoKKwljYXNlIFhGUk1fTU9ERV9UUkFOU1BPUlQ6CisJCWJyZWFrOworCWNhc2UgWEZSTV9NT0RFX1RVTk5FTDoKIAkJeC0+cHJvcHMuaGVhZGVyX2xlbiArPSBzaXplb2Yoc3RydWN0IGlwdjZoZHIpOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyb3I7CisJfQogCiAJbXV0ZXhfbG9jaygmaXBjb21wNl9yZXNvdXJjZV9tdXRleCk7CiAJaWYgKCFpcGNvbXA2X2FsbG9jX3NjcmF0Y2hlcygpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmRpc2MuYyBiL25ldC9pcHY2L25kaXNjLmMKaW5kZXggNmNjMzNkYy4uMjBjZmM5MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xNjU4LDMwICsxNjU4LDI2IEBACiAJc3RydWN0IGluZXQ2X2RldiAqaWRldjsKIAlpbnQgcmV0OwogCi0JaWYgKGN0bC0+Y3RsX25hbWUgPT0gTkVUX05FSUdIX1JFVFJBTlNfVElNRSB8fAotCSAgICBjdGwtPmN0bF9uYW1lID09IE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRSkKKwlpZiAoKHN0cmNtcChjdGwtPnByb2NuYW1lLCAicmV0cmFuc190aW1lIikgPT0gMCkgfHwKKwkgICAgKHN0cmNtcChjdGwtPnByb2NuYW1lLCAiYmFzZV9yZWFjaGFibGVfdGltZSIpID09IDApKQogCQluZGlzY193YXJuX2RlcHJlY2F0ZWRfc3lzY3RsKGN0bCwgInN5c2NhbGwiLCBkZXYgPyBkZXYtPm5hbWUgOiAiZGVmYXVsdCIpOwogCi0Jc3dpdGNoIChjdGwtPmN0bF9uYW1lKSB7Ci0JY2FzZSBORVRfTkVJR0hfUkVUUkFOU19USU1FOgorCWlmIChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgInJldHJhbnNfdGltZSIpID09IDApCiAJCXJldCA9IHByb2NfZG9pbnR2ZWMoY3RsLCB3cml0ZSwgZmlscCwgYnVmZmVyLCBsZW5wLCBwcG9zKTsKLQkJYnJlYWs7Ci0JY2FzZSBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUU6CisKKwllbHNlIGlmIChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgImJhc2VfcmVhY2hhYmxlX3RpbWUiKSA9PSAwKQogCQlyZXQgPSBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY3RsLCB3cml0ZSwKIAkJCQkJICAgIGZpbHAsIGJ1ZmZlciwgbGVucCwgcHBvcyk7Ci0JCWJyZWFrOwotCWNhc2UgTkVUX05FSUdIX1JFVFJBTlNfVElNRV9NUzoKLQljYXNlIE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUzoKKworCWVsc2UgaWYgKChzdHJjbXAoY3RsLT5wcm9jbmFtZSwgInJldHJhbnNfdGltZV9tcyIpID09IDApIHx8CisJCSAoc3RyY21wKGN0bC0+cHJvY25hbWUsICJiYXNlX3JlYWNhYmxlX3RpbWVfbXMiKSA9PSAwKSkKIAkJcmV0ID0gcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGN0bCwgd3JpdGUsCiAJCQkJCSAgICAgICBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOwotCQlicmVhazsKLQlkZWZhdWx0OgorCWVsc2UKIAkJcmV0ID0gLTE7Ci0JfQogCiAJaWYgKHdyaXRlICYmIHJldCA9PSAwICYmIGRldiAmJiAoaWRldiA9IGluNl9kZXZfZ2V0KGRldikpICE9IE5VTEwpIHsKLQkJaWYgKGN0bC0+Y3RsX25hbWUgPT0gTkVUX05FSUdIX1JFQUNIQUJMRV9USU1FIHx8Ci0JCSAgICBjdGwtPmN0bF9uYW1lID09IE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUykKKwkJaWYgKGN0bC0+ZGF0YSA9PSAmaWRldi0+bmRfcGFybXMtPmJhc2VfcmVhY2hhYmxlX3RpbWUpCiAJCQlpZGV2LT5uZF9wYXJtcy0+cmVhY2hhYmxlX3RpbWUgPSBuZWlnaF9yYW5kX3JlYWNoX3RpbWUoaWRldi0+bmRfcGFybXMtPmJhc2VfcmVhY2hhYmxlX3RpbWUpOwogCQlpZGV2LT50c3RhbXAgPSBqaWZmaWVzOwogCQlpbmV0Nl9pZmluZm9fbm90aWZ5KFJUTV9ORVdMSU5LLCBpZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDBlNDA5NDguLmFkNzRiYWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMzA2LDcgKzMwNiw2IEBACiAjaWZkZWYgQ09ORklHX1NZU0NUTAogc3RhdGljIGN0bF90YWJsZSBuZl9jdF9pcHY2X3N5c2N0bF90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19GUkFHNl9USU1FT1VULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX2ZyYWc2X3RpbWVvdXQiLAogCQkuZGF0YQkJPSAmbmZfZnJhZ3NfY3RsLnRpbWVvdXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYwppbmRleCBmYmRjNjY5Li5mZDkxMjNmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKQEAgLTI2MCw3ICsyNjAsNiBAQAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICppY21wdjZfc3lzY3RsX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGljbXB2Nl9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfSUNNUFY2X1RJTUVPVVQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfaWNtcHY2X3RpbWVvdXQiLAogCQkuZGF0YQkJPSAmbmZfY3RfaWNtcHY2X3RpbWVvdXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKaW5kZXggNzI2ZmFmZC4uZTE3MGM2NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtMTMwLDIyICsxMzAsNiBAQAogCWtmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgdm9pZCBuZl9mcmFnX2ZyZWUoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcSkKLXsKLQlrZnJlZShjb250YWluZXJfb2YocSwgc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlLCBxKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcmFnX2FsbG9jX3F1ZXVlKHZvaWQpCi17Ci0Jc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcTsKLQotCWZxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKGZxID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWF0b21pY19hZGQoc2l6ZW9mKHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSksICZuZl9mcmFncy5tZW0pOwotCXJldHVybiBmcTsKLX0KLQogLyogRGVzdHJ1Y3Rpb24gcHJpbWl0aXZlcy4gKi8KIAogc3RhdGljIF9faW5saW5lX18gdm9pZCBmcV9wdXQoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcSkKQEAgLTE2OCw3ICsxNTIsMTAgQEAKIAogc3RhdGljIHZvaWQgbmZfY3RfZnJhZzZfZXhwaXJlKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxID0gKHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqKSBkYXRhOworCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqZnE7CisKKwlmcSA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqKWRhdGEsCisJCQlzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUsIHEpOwogCiAJc3Bpbl9sb2NrKCZmcS0+cS5sb2NrKTsKIApAQCAtMTg0LDg3ICsxNzEsMjcgQEAKIAogLyogQ3JlYXRpb24gcHJpbWl0aXZlcy4gKi8KIAotc3RhdGljIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqbmZfY3RfZnJhZzZfaW50ZXJuKHVuc2lnbmVkIGludCBoYXNoLAotCQkJCQkgIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqZnFfaW4pCi17Ci0Jc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlICpmcTsKLSNpZmRlZiBDT05GSUdfU01QCi0Jc3RydWN0IGhsaXN0X25vZGUgKm47Ci0jZW5kaWYKLQotCXdyaXRlX2xvY2soJm5mX2ZyYWdzLmxvY2spOwotI2lmZGVmIENPTkZJR19TTVAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShmcSwgbiwgJm5mX2ZyYWdzLmhhc2hbaGFzaF0sIHEubGlzdCkgewotCQlpZiAoZnEtPmlkID09IGZxX2luLT5pZCAmJgotCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZmcV9pbi0+c2FkZHIsICZmcS0+c2FkZHIpICYmCi0JCSAgICBpcHY2X2FkZHJfZXF1YWwoJmZxX2luLT5kYWRkciwgJmZxLT5kYWRkcikpIHsKLQkJCWF0b21pY19pbmMoJmZxLT5xLnJlZmNudCk7Ci0JCQl3cml0ZV91bmxvY2soJm5mX2ZyYWdzLmxvY2spOwotCQkJZnFfaW4tPnEubGFzdF9pbiB8PSBDT01QTEVURTsKLQkJCWZxX3B1dChmcV9pbik7Ci0JCQlyZXR1cm4gZnE7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlmcSA9IGZxX2luOwotCi0JaWYgKCFtb2RfdGltZXIoJmZxLT5xLnRpbWVyLCBqaWZmaWVzICsgbmZfZnJhZ3NfY3RsLnRpbWVvdXQpKQotCQlhdG9taWNfaW5jKCZmcS0+cS5yZWZjbnQpOwotCi0JYXRvbWljX2luYygmZnEtPnEucmVmY250KTsKLQlobGlzdF9hZGRfaGVhZCgmZnEtPnEubGlzdCwgJm5mX2ZyYWdzLmhhc2hbaGFzaF0pOwotCUlOSVRfTElTVF9IRUFEKCZmcS0+cS5scnVfbGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmZnEtPnEubHJ1X2xpc3QsICZuZl9mcmFncy5scnVfbGlzdCk7Ci0JbmZfZnJhZ3MubnF1ZXVlcysrOwotCXdyaXRlX3VubG9jaygmbmZfZnJhZ3MubG9jayk7Ci0JcmV0dXJuIGZxOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKgotbmZfY3RfZnJhZzZfY3JlYXRlKHVuc2lnbmVkIGludCBoYXNoLCBfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLAkJCQkgICBzdHJ1Y3QgaW42X2FkZHIgKmRzdCkKLXsKLQlzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUgKmZxOwotCi0JaWYgKChmcSA9IGZyYWdfYWxsb2NfcXVldWUoKSkgPT0gTlVMTCkgewotCQlwcl9kZWJ1ZygiQ2FuJ3QgYWxsb2MgbmV3IHF1ZXVlXG4iKTsKLQkJZ290byBvb207Ci0JfQotCi0JZnEtPmlkID0gaWQ7Ci0JaXB2Nl9hZGRyX2NvcHkoJmZxLT5zYWRkciwgc3JjKTsKLQlpcHY2X2FkZHJfY29weSgmZnEtPmRhZGRyLCBkc3QpOwotCi0Jc2V0dXBfdGltZXIoJmZxLT5xLnRpbWVyLCBuZl9jdF9mcmFnNl9leHBpcmUsICh1bnNpZ25lZCBsb25nKWZxKTsKLQlzcGluX2xvY2tfaW5pdCgmZnEtPnEubG9jayk7Ci0JYXRvbWljX3NldCgmZnEtPnEucmVmY250LCAxKTsKLQotCXJldHVybiBuZl9jdF9mcmFnNl9pbnRlcm4oaGFzaCwgZnEpOwotCi1vb206Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqCiBmcV9maW5kKF9fYmUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsIHN0cnVjdCBpbjZfYWRkciAqZHN0KQogewotCXN0cnVjdCBuZl9jdF9mcmFnNl9xdWV1ZSAqZnE7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47Ci0JdW5zaWduZWQgaW50IGhhc2ggPSBpcDZxaGFzaGZuKGlkLCBzcmMsIGRzdCk7CisJc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXA2X2NyZWF0ZV9hcmcgYXJnOworCXVuc2lnbmVkIGludCBoYXNoOwogCi0JcmVhZF9sb2NrKCZuZl9mcmFncy5sb2NrKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeShmcSwgbiwgJm5mX2ZyYWdzLmhhc2hbaGFzaF0sIHEubGlzdCkgewotCQlpZiAoZnEtPmlkID09IGlkICYmCi0JCSAgICBpcHY2X2FkZHJfZXF1YWwoc3JjLCAmZnEtPnNhZGRyKSAmJgotCQkgICAgaXB2Nl9hZGRyX2VxdWFsKGRzdCwgJmZxLT5kYWRkcikpIHsKLQkJCWF0b21pY19pbmMoJmZxLT5xLnJlZmNudCk7Ci0JCQlyZWFkX3VubG9jaygmbmZfZnJhZ3MubG9jayk7Ci0JCQlyZXR1cm4gZnE7Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2soJm5mX2ZyYWdzLmxvY2spOworCWFyZy5pZCA9IGlkOworCWFyZy5zcmMgPSBzcmM7CisJYXJnLmRzdCA9IGRzdDsKKwloYXNoID0gaXA2cWhhc2hmbihpZCwgc3JjLCBkc3QpOwogCi0JcmV0dXJuIG5mX2N0X2ZyYWc2X2NyZWF0ZShoYXNoLCBpZCwgc3JjLCBkc3QpOworCXEgPSBpbmV0X2ZyYWdfZmluZCgmbmZfZnJhZ3MsICZhcmcsIGhhc2gpOworCWlmIChxID09IE5VTEwpCisJCWdvdG8gb29tOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgbmZfY3RfZnJhZzZfcXVldWUsIHEpOworCitvb206CisJcHJfZGVidWcoIkNhbid0IGFsbG9jIG5ldyBxdWV1ZVxuIik7CisJcmV0dXJuIE5VTEw7CiB9CiAKIApAQCAtNzQ5LDkgKzY3NiwxMiBAQAogewogCW5mX2ZyYWdzLmN0bCA9ICZuZl9mcmFnc19jdGw7CiAJbmZfZnJhZ3MuaGFzaGZuID0gbmZfaGFzaGZuOwotCW5mX2ZyYWdzLmRlc3RydWN0b3IgPSBuZl9mcmFnX2ZyZWU7CisJbmZfZnJhZ3MuY29uc3RydWN0b3IgPSBpcDZfZnJhZ19pbml0OworCW5mX2ZyYWdzLmRlc3RydWN0b3IgPSBOVUxMOwogCW5mX2ZyYWdzLnNrYl9mcmVlID0gbmZfc2tiX2ZyZWU7CiAJbmZfZnJhZ3MucXNpemUgPSBzaXplb2Yoc3RydWN0IG5mX2N0X2ZyYWc2X3F1ZXVlKTsKKwluZl9mcmFncy5tYXRjaCA9IGlwNl9mcmFnX21hdGNoOworCW5mX2ZyYWdzLmZyYWdfZXhwaXJlID0gbmZfY3RfZnJhZzZfZXhwaXJlOwogCWluZXRfZnJhZ3NfaW5pdCgmbmZfZnJhZ3MpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKaW5kZXggNmFkMTljZi4uNzZjODhhOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jCisrKyBiL25ldC9pcHY2L3JlYXNzZW1ibHkuYwpAQCAtMTQzLDYgKzE0MywxOCBAQAogCXJldHVybiBpcDZxaGFzaGZuKGZxLT5pZCwgJmZxLT5zYWRkciwgJmZxLT5kYWRkcik7CiB9CiAKK2ludCBpcDZfZnJhZ19tYXRjaChzdHJ1Y3QgaW5ldF9mcmFnX3F1ZXVlICpxLCB2b2lkICphKQoreworCXN0cnVjdCBmcmFnX3F1ZXVlICpmcTsKKwlzdHJ1Y3QgaXA2X2NyZWF0ZV9hcmcgKmFyZyA9IGE7CisKKwlmcSA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgZnJhZ19xdWV1ZSwgcSk7CisJcmV0dXJuIChmcS0+aWQgPT0gYXJnLT5pZCAmJgorCQkJaXB2Nl9hZGRyX2VxdWFsKCZmcS0+c2FkZHIsIGFyZy0+c3JjKSAmJgorCQkJaXB2Nl9hZGRyX2VxdWFsKCZmcS0+ZGFkZHIsIGFyZy0+ZHN0KSk7Cit9CitFWFBPUlRfU1lNQk9MKGlwNl9mcmFnX21hdGNoKTsKKwogLyogTWVtb3J5IFRyYWNraW5nIEZ1bmN0aW9ucy4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmFnX2tmcmVlX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgKndvcmspCiB7CkBAIC0xNTIsMjAgKzE2NCwxNiBAQAogCWtmcmVlX3NrYihza2IpOwogfQogCi1zdGF0aWMgdm9pZCBpcDZfZnJhZ19mcmVlKHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKmZxKQordm9pZCBpcDZfZnJhZ19pbml0KHN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnEsIHZvaWQgKmEpCiB7Ci0Ja2ZyZWUoY29udGFpbmVyX29mKGZxLCBzdHJ1Y3QgZnJhZ19xdWV1ZSwgcSkpOwotfQorCXN0cnVjdCBmcmFnX3F1ZXVlICpmcSA9IGNvbnRhaW5lcl9vZihxLCBzdHJ1Y3QgZnJhZ19xdWV1ZSwgcSk7CisJc3RydWN0IGlwNl9jcmVhdGVfYXJnICphcmcgPSBhOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBmcmFnX3F1ZXVlICpmcmFnX2FsbG9jX3F1ZXVlKHZvaWQpCi17Ci0Jc3RydWN0IGZyYWdfcXVldWUgKmZxID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZyYWdfcXVldWUpLCBHRlBfQVRPTUlDKTsKLQotCWlmKCFmcSkKLQkJcmV0dXJuIE5VTEw7Ci0JYXRvbWljX2FkZChzaXplb2Yoc3RydWN0IGZyYWdfcXVldWUpLCAmaXA2X2ZyYWdzLm1lbSk7Ci0JcmV0dXJuIGZxOworCWZxLT5pZCA9IGFyZy0+aWQ7CisJaXB2Nl9hZGRyX2NvcHkoJmZxLT5zYWRkciwgYXJnLT5zcmMpOworCWlwdjZfYWRkcl9jb3B5KCZmcS0+ZGFkZHIsIGFyZy0+ZHN0KTsKIH0KK0VYUE9SVF9TWU1CT0woaXA2X2ZyYWdfaW5pdCk7CiAKIC8qIERlc3RydWN0aW9uIHByaW1pdGl2ZXMuICovCiAKQEAgLTE5Myw5ICsyMDEsMTEgQEAKIAogc3RhdGljIHZvaWQgaXA2X2ZyYWdfZXhwaXJlKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnEgPSAoc3RydWN0IGZyYWdfcXVldWUgKikgZGF0YTsKKwlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CiAKKwlmcSA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqKWRhdGEsIHN0cnVjdCBmcmFnX3F1ZXVlLCBxKTsKKwogCXNwaW5fbG9jaygmZnEtPnEubG9jayk7CiAKIAlpZiAoZnEtPnEubGFzdF9pbiAmIENPTVBMRVRFKQpAQCAtMjMwLDk4ICsyNDAsMzAgQEAKIAlmcV9wdXQoZnEpOwogfQogCi0vKiBDcmVhdGlvbiBwcmltaXRpdmVzLiAqLwotCi0KLXN0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqaXA2X2ZyYWdfaW50ZXJuKHN0cnVjdCBmcmFnX3F1ZXVlICpmcV9pbikKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBmcmFnX3F1ZXVlICoKK2ZxX2ZpbmQoX19iZTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QsCisJc3RydWN0IGluZXQ2X2RldiAqaWRldikKIHsKLQlzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnE7CisJc3RydWN0IGluZXRfZnJhZ19xdWV1ZSAqcTsKKwlzdHJ1Y3QgaXA2X2NyZWF0ZV9hcmcgYXJnOwogCXVuc2lnbmVkIGludCBoYXNoOwotI2lmZGVmIENPTkZJR19TTVAKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKLSNlbmRpZgogCi0Jd3JpdGVfbG9jaygmaXA2X2ZyYWdzLmxvY2spOwotCWhhc2ggPSBpcDZxaGFzaGZuKGZxX2luLT5pZCwgJmZxX2luLT5zYWRkciwgJmZxX2luLT5kYWRkcik7Ci0jaWZkZWYgQ09ORklHX1NNUAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGZxLCBuLCAmaXA2X2ZyYWdzLmhhc2hbaGFzaF0sIHEubGlzdCkgewotCQlpZiAoZnEtPmlkID09IGZxX2luLT5pZCAmJgotCQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZmcV9pbi0+c2FkZHIsICZmcS0+c2FkZHIpICYmCi0JCSAgICBpcHY2X2FkZHJfZXF1YWwoJmZxX2luLT5kYWRkciwgJmZxLT5kYWRkcikpIHsKLQkJCWF0b21pY19pbmMoJmZxLT5xLnJlZmNudCk7Ci0JCQl3cml0ZV91bmxvY2soJmlwNl9mcmFncy5sb2NrKTsKLQkJCWZxX2luLT5xLmxhc3RfaW4gfD0gQ09NUExFVEU7Ci0JCQlmcV9wdXQoZnFfaW4pOwotCQkJcmV0dXJuIGZxOwotCQl9Ci0JfQotI2VuZGlmCi0JZnEgPSBmcV9pbjsKKwlhcmcuaWQgPSBpZDsKKwlhcmcuc3JjID0gc3JjOworCWFyZy5kc3QgPSBkc3Q7CisJaGFzaCA9IGlwNnFoYXNoZm4oaWQsIHNyYywgZHN0KTsKIAotCWlmICghbW9kX3RpbWVyKCZmcS0+cS50aW1lciwgamlmZmllcyArIGlwNl9mcmFnc19jdGwudGltZW91dCkpCi0JCWF0b21pY19pbmMoJmZxLT5xLnJlZmNudCk7Ci0KLQlhdG9taWNfaW5jKCZmcS0+cS5yZWZjbnQpOwotCWhsaXN0X2FkZF9oZWFkKCZmcS0+cS5saXN0LCAmaXA2X2ZyYWdzLmhhc2hbaGFzaF0pOwotCUlOSVRfTElTVF9IRUFEKCZmcS0+cS5scnVfbGlzdCk7Ci0JbGlzdF9hZGRfdGFpbCgmZnEtPnEubHJ1X2xpc3QsICZpcDZfZnJhZ3MubHJ1X2xpc3QpOwotCWlwNl9mcmFncy5ucXVldWVzKys7Ci0Jd3JpdGVfdW5sb2NrKCZpcDZfZnJhZ3MubG9jayk7Ci0JcmV0dXJuIGZxOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgZnJhZ19xdWV1ZSAqCi1pcDZfZnJhZ19jcmVhdGUoX19iZTMyIGlkLCBzdHJ1Y3QgaW42X2FkZHIgKnNyYywgc3RydWN0IGluNl9hZGRyICpkc3QsCi0JCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYpCi17Ci0Jc3RydWN0IGZyYWdfcXVldWUgKmZxOwotCi0JaWYgKChmcSA9IGZyYWdfYWxsb2NfcXVldWUoKSkgPT0gTlVMTCkKKwlxID0gaW5ldF9mcmFnX2ZpbmQoJmlwNl9mcmFncywgJmFyZywgaGFzaCk7CisJaWYgKHEgPT0gTlVMTCkKIAkJZ290byBvb207CiAKLQlmcS0+aWQgPSBpZDsKLQlpcHY2X2FkZHJfY29weSgmZnEtPnNhZGRyLCBzcmMpOwotCWlwdjZfYWRkcl9jb3B5KCZmcS0+ZGFkZHIsIGRzdCk7Ci0KLQlpbml0X3RpbWVyKCZmcS0+cS50aW1lcik7Ci0JZnEtPnEudGltZXIuZnVuY3Rpb24gPSBpcDZfZnJhZ19leHBpcmU7Ci0JZnEtPnEudGltZXIuZGF0YSA9IChsb25nKSBmcTsKLQlzcGluX2xvY2tfaW5pdCgmZnEtPnEubG9jayk7Ci0JYXRvbWljX3NldCgmZnEtPnEucmVmY250LCAxKTsKLQotCXJldHVybiBpcDZfZnJhZ19pbnRlcm4oZnEpOworCXJldHVybiBjb250YWluZXJfb2YocSwgc3RydWN0IGZyYWdfcXVldWUsIHEpOwogCiBvb206CiAJSVA2X0lOQ19TVEFUU19CSChpZGV2LCBJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IGZyYWdfcXVldWUgKgotZnFfZmluZChfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwKLQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQotewotCXN0cnVjdCBmcmFnX3F1ZXVlICpmcTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKLQl1bnNpZ25lZCBpbnQgaGFzaDsKLQotCXJlYWRfbG9jaygmaXA2X2ZyYWdzLmxvY2spOwotCWhhc2ggPSBpcDZxaGFzaGZuKGlkLCBzcmMsIGRzdCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnkoZnEsIG4sICZpcDZfZnJhZ3MuaGFzaFtoYXNoXSwgcS5saXN0KSB7Ci0JCWlmIChmcS0+aWQgPT0gaWQgJiYKLQkJICAgIGlwdjZfYWRkcl9lcXVhbChzcmMsICZmcS0+c2FkZHIpICYmCi0JCSAgICBpcHY2X2FkZHJfZXF1YWwoZHN0LCAmZnEtPmRhZGRyKSkgewotCQkJYXRvbWljX2luYygmZnEtPnEucmVmY250KTsKLQkJCXJlYWRfdW5sb2NrKCZpcDZfZnJhZ3MubG9jayk7Ci0JCQlyZXR1cm4gZnE7Ci0JCX0KLQl9Ci0JcmVhZF91bmxvY2soJmlwNl9mcmFncy5sb2NrKTsKLQotCXJldHVybiBpcDZfZnJhZ19jcmVhdGUoaWQsIHNyYywgZHN0LCBpZGV2KTsKLX0KLQotCiBzdGF0aWMgaW50IGlwNl9mcmFnX3F1ZXVlKHN0cnVjdCBmcmFnX3F1ZXVlICpmcSwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSAgIHN0cnVjdCBmcmFnX2hkciAqZmhkciwgaW50IG5ob2ZmKQogewpAQCAtNjk3LDggKzYzOSwxMSBAQAogCiAJaXA2X2ZyYWdzLmN0bCA9ICZpcDZfZnJhZ3NfY3RsOwogCWlwNl9mcmFncy5oYXNoZm4gPSBpcDZfaGFzaGZuOwotCWlwNl9mcmFncy5kZXN0cnVjdG9yID0gaXA2X2ZyYWdfZnJlZTsKKwlpcDZfZnJhZ3MuY29uc3RydWN0b3IgPSBpcDZfZnJhZ19pbml0OworCWlwNl9mcmFncy5kZXN0cnVjdG9yID0gTlVMTDsKIAlpcDZfZnJhZ3Muc2tiX2ZyZWUgPSBOVUxMOwogCWlwNl9mcmFncy5xc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZnJhZ19xdWV1ZSk7CisJaXA2X2ZyYWdzLm1hdGNoID0gaXA2X2ZyYWdfbWF0Y2g7CisJaXA2X2ZyYWdzLmZyYWdfZXhwaXJlID0gaXA2X2ZyYWdfZXhwaXJlOwogCWluZXRfZnJhZ3NfaW5pdCgmaXA2X2ZyYWdzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IGNjZTk5NDEuLjk1ZjhlNGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMjM5Nyw3ICsyMzk3LDYgQEAKIAogY3RsX3RhYmxlIGlwdjZfcm91dGVfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9CU5FVF9JUFY2X1JPVVRFX0ZMVVNILAogCQkucHJvY25hbWUJPQkiZmx1c2giLAogCQkuZGF0YQkJPQkmZmx1c2hfZGVsYXksCiAJCS5tYXhsZW4JCT0Jc2l6ZW9mKGludCksCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwppbmRleCAwMmY2OWU1Li41MTU3ODM3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxuZXQvaXB2Ni5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKLWludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcGkpCitpbnQgeGZybTZfcmN2X3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmV4dGhkciwgX19iZTMyIHNwaSkKIHsKIAlpbnQgZXJyOwogCV9fYmUzMiBzZXE7CkBAIC0yNCwxMSArMjQsOSBAQAogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCWludCB4ZnJtX25yID0gMDsKIAlpbnQgZGVjYXBzID0gMDsKLQlpbnQgbmV4dGhkcjsKIAl1bnNpZ25lZCBpbnQgbmhvZmY7CiAKIAluaG9mZiA9IElQNkNCKHNrYiktPm5ob2ZmOwotCW5leHRoZHIgPSBza2JfbmV0d29ya19oZWFkZXIoc2tiKVtuaG9mZl07CiAKIAlzZXEgPSAwOwogCWlmICghc3BpICYmIChlcnIgPSB4ZnJtX3BhcnNlX3NwaShza2IsIG5leHRoZHIsICZzcGksICZzZXEpKSAhPSAwKQpAQCAtNDEsNyArMzksNyBAQAogCQkJZ290byBkcm9wOwogCiAJCXggPSB4ZnJtX3N0YXRlX2xvb2t1cCgoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgc3BpLAotCQkJCW5leHRoZHIgIT0gSVBQUk9UT19JUElQID8gbmV4dGhkciA6IElQUFJPVE9fSVBWNiwgQUZfSU5FVDYpOworCQkJCSAgICAgIG5leHRoZHIsIEFGX0lORVQ2KTsKIAkJaWYgKHggPT0gTlVMTCkKIAkJCWdvdG8gZHJvcDsKIAkJc3Bpbl9sb2NrKCZ4LT5sb2NrKTsKQEAgLTcwLDEwICs2OCwxMCBAQAogCiAJCXhmcm1fdmVjW3hmcm1fbnIrK10gPSB4OwogCi0JCWlmICh4LT5tb2RlLT5pbnB1dCh4LCBza2IpKQorCQlpZiAoeC0+b3V0ZXJfbW9kZS0+aW5wdXQoeCwgc2tiKSkKIAkJCWdvdG8gZHJvcDsKIAotCQlpZiAoeC0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7IC8qIFhYWCAqLworCQlpZiAoeC0+b3V0ZXJfbW9kZS0+ZmxhZ3MgJiBYRlJNX01PREVfRkxBR19UVU5ORUwpIHsKIAkJCWRlY2FwcyA9IDE7CiAJCQlicmVhazsKIAkJfQpAQCAtOTksNyArOTcsNiBAQAogCW1lbWNweShza2ItPnNwLT54dmVjICsgc2tiLT5zcC0+bGVuLCB4ZnJtX3ZlYywKIAkgICAgICAgeGZybV9uciAqIHNpemVvZih4ZnJtX3ZlY1swXSkpOwogCXNrYi0+c3AtPmxlbiArPSB4ZnJtX25yOwotCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCW5mX3Jlc2V0KHNrYik7CiAKQEAgLTEzNSw3ICsxMzIsOCBAQAogCiBpbnQgeGZybTZfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JcmV0dXJuIHhmcm02X3Jjdl9zcGkoc2tiLCAwKTsKKwlyZXR1cm4geGZybTZfcmN2X3NwaShza2IsIHNrYl9uZXR3b3JrX2hlYWRlcihza2IpW0lQNkNCKHNrYiktPm5ob2ZmXSwKKwkJCSAgICAgMCk7CiB9CiAKIEVYUE9SVF9TWU1CT0woeGZybTZfcmN2KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X21vZGVfYmVldC5jIGIvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMKaW5kZXggMTNiYjFlOC4uMmJmYjRmMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfbW9kZV9iZWV0LmMKQEAgLTc5LDYgKzc5LDcgQEAKIAkub3V0cHV0ID0geGZybTZfYmVldF9vdXRwdXQsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmVuY2FwID0gWEZSTV9NT0RFX0JFRVQsCisJLmZsYWdzID0gWEZSTV9NT0RFX0ZMQUdfVFVOTkVMLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgeGZybTZfYmVldF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9tb2RlX3JvLmMgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3JvLmMKaW5kZXggOTU3YWUzNi4uYTdiYzhjNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfbW9kZV9yby5jCisrKyBiL25ldC9pcHY2L3hmcm02X21vZGVfcm8uYwpAQCAtNTgsMTYgKzU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIERvIG5vdGhpbmcgYWJvdXQgcm91dGluZyBvcHRpbWl6YXRpb24gaGVhZGVyIHVubGlrZSBJUHNlYy4KLSAqLwotc3RhdGljIGludCB4ZnJtNl9yb19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCB4ZnJtX21vZGUgeGZybTZfcm9fbW9kZSA9IHsKLQkuaW5wdXQgPSB4ZnJtNl9yb19pbnB1dCwKIAkub3V0cHV0ID0geGZybTZfcm9fb3V0cHV0LAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5lbmNhcCA9IFhGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMgYi9uZXQvaXB2Ni94ZnJtNl9tb2RlX3R1bm5lbC5jCmluZGV4IGVhMjI4MzguLmZkODRlMjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X21vZGVfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfbW9kZV90dW5uZWwuYwpAQCAtMTE4LDYgKzExOCw3IEBACiAJLm91dHB1dCA9IHhmcm02X3R1bm5lbF9vdXRwdXQsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLmVuY2FwID0gWEZSTV9NT0RFX1RVTk5FTCwKKwkuZmxhZ3MgPSBYRlJNX01PREVfRkxBR19UVU5ORUwsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCB4ZnJtNl90dW5uZWxfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYwppbmRleCBhNWEzMmMxLi42NTY5NzY3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYwpAQCAtNTAsNyArNTAsNyBAQAogCXN0cnVjdCBpcHY2aGRyICppcGg7CiAJaW50IGVycjsKIAotCWlmICh4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpIHsKKwlpZiAoeC0+b3V0ZXJfbW9kZS0+ZmxhZ3MgJiBYRlJNX01PREVfRkxBR19UVU5ORUwpIHsKIAkJZXJyID0geGZybTZfdHVubmVsX2NoZWNrX3NpemUoc2tiKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3Jfbm9sb2NrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfcG9saWN5LmMgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwppbmRleCAxNWFhNGM1Li44MmUyN2I4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYworKysgYi9uZXQvaXB2Ni94ZnJtNl9wb2xpY3kuYwpAQCAtMTc4LDggKzE3OCw3IEBACiAJCV9feGZybTZfYnVuZGxlX2xlbl9pbmMoJmhlYWRlcl9sZW4sICZuZmhlYWRlcl9sZW4sIHhmcm1baV0pOwogCQl0cmFpbGVyX2xlbiArPSB4ZnJtW2ldLT5wcm9wcy50cmFpbGVyX2xlbjsKIAotCQlpZiAoeGZybVtpXS0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMIHx8Ci0JCSAgICB4ZnJtW2ldLT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9ST1VURU9QVElNSVpBVElPTikgeworCQlpZiAoeGZybVtpXS0+cHJvcHMubW9kZSAhPSBYRlJNX01PREVfVFJBTlNQT1JUKSB7CiAJCQl1bnNpZ25lZCBzaG9ydCBlbmNhcF9mYW1pbHkgPSB4ZnJtW2ldLT5wcm9wcy5mYW1pbHk7CiAJCQlzd2l0Y2goZW5jYXBfZmFtaWx5KSB7CiAJCQljYXNlIEFGX0lORVQ6CkBAIC0yMTUsNyArMjE0LDYgQEAKIAlpID0gMDsKIAlmb3IgKDsgZHN0X3ByZXYgIT0gJnJ0LT51LmRzdDsgZHN0X3ByZXYgPSBkc3RfcHJldi0+Y2hpbGQpIHsKIAkJc3RydWN0IHhmcm1fZHN0ICp4ID0gKHN0cnVjdCB4ZnJtX2RzdCopZHN0X3ByZXY7Ci0JCXN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvOwogCiAJCWRzdF9wcmV2LT54ZnJtID0geGZybVtpKytdOwogCQlkc3RfcHJldi0+ZGV2ID0gcnQtPnUuZHN0LmRldjsKQEAgLTIzMiwxOCArMjMwLDcgQEAKIAkJLyogQ29weSBuZWlnaGJvdXIgZm9yIHJlYWNoYWJpbGl0eSBjb25maXJtYXRpb24gKi8KIAkJZHN0X3ByZXYtPm5laWdoYm91cgk9IG5laWdoX2Nsb25lKHJ0LT51LmRzdC5uZWlnaGJvdXIpOwogCQlkc3RfcHJldi0+aW5wdXQJCT0gcnQtPnUuZHN0LmlucHV0OwotCQkvKiBYWFg6IFdoZW4gSVB2NCBpcyBpbXBsZW1lbnRlZCBhcyBtb2R1bGUgYW5kIGNhbiBiZSB1bmxvYWRlZCwKLQkJICogd2Ugc2hvdWxkIG1hbmFnZSByZWZlcmVuY2UgdG8geGZybTRfb3V0cHV0IGluIGFmaW5mby0+b3V0cHV0LgotCQkgKiBNaXlhemF3YQotCQkgKi8KLQkJYWZpbmZvID0geGZybV9zdGF0ZV9nZXRfYWZpbmZvKGRzdF9wcmV2LT54ZnJtLT5wcm9wcy5mYW1pbHkpOwotCQlpZiAoIWFmaW5mbykgewotCQkJZHN0ID0gKmRzdF9wOwotCQkJZ290byBlcnJvcjsKLQkJfQotCi0JCWRzdF9wcmV2LT5vdXRwdXQgPSBhZmluZm8tPm91dHB1dDsKLQkJeGZybV9zdGF0ZV9wdXRfYWZpbmZvKGFmaW5mbyk7CisJCWRzdF9wcmV2LT5vdXRwdXQgPSBkc3RfcHJldi0+eGZybS0+b3V0ZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXQ7CiAJCS8qIFNoZWl0Li4uIEkgcmVtZW1iZXIgSSBkaWQgdGhpcyByaWdodC4gQXBwYXJlbnRseSwKIAkJICogaXQgd2FzIG1hZ2ljYWxseSBsb3N0LCBzbyB0aGlzIGNvZGUgbmVlZHMgYXVkaXQgKi8KIAkJeC0+dS5ydDYucnQ2aV9mbGFncyAgICA9IHJ0MC0+cnQ2aV9mbGFncyYoUlRDRl9CUk9BRENBU1R8UlRDRl9NVUxUSUNBU1R8UlRDRl9MT0NBTCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCBjZGFkYjQ4Li5iMzkyYmVlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTkzLDcgKzkzLDggQEAKIAkvKiBSdWxlIDQ6IHNlbGVjdCBJUHNlYyB0dW5uZWwgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAJCWlmIChzcmNbaV0gJiYKLQkJICAgIHNyY1tpXS0+cHJvcHMubW9kZSA9PSBYRlJNX01PREVfVFVOTkVMKSB7CisJCSAgICAoc3JjW2ldLT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwgfHwKKwkJICAgICBzcmNbaV0tPnByb3BzLm1vZGUgPT0gWEZSTV9NT0RFX0JFRVQpKSB7CiAJCQlkc3RbaisrXSA9IHNyY1tpXTsKIAkJCXNyY1tpXSA9IE5VTEw7CiAJCX0KQEAgLTE0Niw3ICsxNDcsOCBAQAogCS8qIFJ1bGUgMzogc2VsZWN0IElQc2VjIHR1bm5lbCAqLwogCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKIAkJaWYgKHNyY1tpXSAmJgotCQkgICAgc3JjW2ldLT5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpIHsKKwkJICAgIChzcmNbaV0tPm1vZGUgPT0gWEZSTV9NT0RFX1RVTk5FTCB8fAorCQkgICAgIHNyY1tpXS0+bW9kZSA9PSBYRlJNX01PREVfQkVFVCkpIHsKIAkJCWRzdFtqKytdID0gc3JjW2ldOwogCQkJc3JjW2ldID0gTlVMTDsKIAkJfQpAQCAtMTY4LDYgKzE3MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8geGZybTZfc3RhdGVfYWZpbmZvID0gewogCS5mYW1pbHkJCQk9IEFGX0lORVQ2LAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCiAJLmluaXRfdGVtcHNlbAkJPSBfX3hmcm02X2luaXRfdGVtcHNlbCwKIAkudG1wbF9zb3J0CQk9IF9feGZybTZfdG1wbF9zb3J0LAogCS5zdGF0ZV9zb3J0CQk9IF9feGZybTZfc3RhdGVfc29ydCwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKaW5kZXggM2Y4YTNhYi4uZmFlOTBmZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2tiX25ldHdvcmtfaGVhZGVyKHNrYilbSVA2Q0Ioc2tiKS0+bmhvZmZdOwogfQogCiBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCV9fYmUzMiBzcGk7CiAKIAlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCgoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5zYWRkcik7Ci0JcmV0dXJuIHhmcm02X3Jjdl9zcGkoc2tiLCBzcGkpID4gMCA/IDogMDsKKwlyZXR1cm4geGZybTZfcmN2X3NwaShza2IsIElQUFJPVE9fSVBWNiwgc3BpKSA+IDAgPyA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgeGZybTZfdHVubmVsX2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2Rpc2NvdmVyeS5jIGIvbmV0L2lyZGEvZGlzY292ZXJ5LmMKaW5kZXggYWYwY2VhNy4uODBjMzNmNCAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvZGlzY292ZXJ5LmMKKysrIGIvbmV0L2lyZGEvZGlzY292ZXJ5LmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCS8qIERyb3AgdGhlIHNwaW5sb2NrIGJlZm9yZSBjYWxsaW5nIHRoZSBoaWdoZXIgbGF5ZXJzLCBhcwogCSAqIHdlIGNhbid0IGd1YXJhbnRlZSB0aGV5IHdvbid0IGNhbGwgdXMgYmFjayBhbmQgY3JlYXRlIGEKIAkgKiBkZWFkbG9jay4gV2Ugd2lsbCB3b3JrIG9uIG91ciBvd24gcHJpdmF0ZSBkYXRhLCBzbyB3ZQotCSAqIGRvbid0IGNhcmUgdG8gYmUgaW50ZXJ1cHRlZC4gLSBKZWFuIElJICovCisJICogZG9uJ3QgY2FyZSB0byBiZSBpbnRlcnJ1cHRlZC4gLSBKZWFuIElJICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nLT5oYl9zcGlubG9jaywgZmxhZ3MpOwogCiAJaWYoYnVmZmVyID09IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eV9hdHRhY2guYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCmluZGV4IDgyNDMwOWQuLmI1YTEzODggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5X2F0dGFjaC5jCkBAIC0zODEsMTggKzM4MSw5IEBACiAJaW5mby5kYWRkciA9IGRpc2NvdmVyeS0+ZGFkZHI7CiAJaW5mby5zYWRkciA9IGRpc2NvdmVyeS0+c2FkZHI7CiAKLQkvKiBGSVhNRS4gV2UgaGF2ZSBhIGxvY2tpbmcgcHJvYmxlbSBvbiB0aGUgaGFzaGJpbiBoZXJlLgotCSAqIFdlIHByb2JhYmx5IG5lZWQgdG8gdXNlIGhhc2hiaW5fZmluZF9uZXh0KCksIGJ1dCB3ZSBmaXJzdAotCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgImxpbmUiIGlzIHVuaXF1ZS4gLSBKZWFuIElJICovCi0Jc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBoYXNoYmluX2dldF9maXJzdChpcmNvbW1fdHR5KTsKLQl3aGlsZSAoc2VsZiAhPSBOVUxMKSB7Ci0JCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybjspOwotCi0JCWlyY29tbV90dHlfZG9fZXZlbnQoc2VsZiwgSVJDT01NX1RUWV9ESVNDT1ZFUllfSU5ESUNBVElPTiwKLQkJCQkgICAgTlVMTCwgJmluZm8pOwotCi0JCXNlbGYgPSAoc3RydWN0IGlyY29tbV90dHlfY2IgKikgaGFzaGJpbl9nZXRfbmV4dChpcmNvbW1fdHR5KTsKLQl9CisJc2VsZiA9IChzdHJ1Y3QgaXJjb21tX3R0eV9jYiAqKSBwcml2OworCWlyY29tbV90dHlfZG9fZXZlbnQoc2VsZiwgSVJDT01NX1RUWV9ESVNDT1ZFUllfSU5ESUNBVElPTiwKKwkJCSAgICBOVUxMLCAmaW5mbyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhcC5jIGIvbmV0L2lyZGEvaXJpYXAuYwppbmRleCBlZTM4ODlmLi5kYzVlMzRhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhcC5jCisrKyBiL25ldC9pcmRhL2lyaWFwLmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJpYXBfZXZlbnQuYwppbmRleCA5OWIxOGRjLi44ZmI5ZDcyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhcF9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lyaWFwX2V2ZW50LmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhc19vYmplY3QuYyBiL25ldC9pcmRhL2lyaWFzX29iamVjdC5jCmluZGV4IGNmMzAyNDUuLmNiY2YwNDMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lyaWFzX29iamVjdC5jCisrKyBiL25ldC9pcmRhL2lyaWFzX29iamVjdC5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50LmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYwppbmRleCA4NzAzOWMyLi5mZmY1MmQ1IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jbGllbnQuYwpAQCAtMjAsNyArMjAsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NsaWVudF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMKaW5kZXggODQzYWI2Zi4uNmFmY2VlNSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY2xpZW50X2V2ZW50LmMKQEAgLTE3LDcgKzE3LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCmluZGV4IGY1Nzc4ZWYuLmE0YjU2ZTIgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCkBAIC0xNyw3ICsxNyw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYwppbmRleCAzNDBmMDRhLi43ZjljODU0IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYwpAQCAtMTksNyArMTksNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V2ZW50LmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldmVudC5jCmluZGV4IDYyM2UwZmQuLmE5NzUwYTggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2V2ZW50LmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXZlbnQuYwpAQCAtMTYsNyArMTYsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2ZpbHRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKaW5kZXggZTYzNDZiOC4uNDM4NGJlOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZmlsdGVyLmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYwppbmRleCBhYWM2NjQzLi4xM2RiOTQyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMKQEAgLTIwLDcgKzIwLDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlcl9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXJfZXZlbnQuYwppbmRleCBlZjQwMWJkLi4xMGVjZTVhIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlcl9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyX2V2ZW50LmMKQEAgLTE2LDcgKzE2LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsYXBfZXZlbnQuYwppbmRleCBhOGI4ODczLi40YzMzYmY1IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcF9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lybGFwX2V2ZW50LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jIGIvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYwppbmRleCA3N2FjMjdlLi40ZjM3NjQ1IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCisrKyBiL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcC5jIGIvbmV0L2lyZGEvaXJsbXAuYwppbmRleCA3ZGI5MmNlLi5jZWRmZjgwIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxtcC5jCisrKyBiL25ldC9pcmRhL2lybG1wLmMKQEAgLTE4LDcgKzE4LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYwppbmRleCA2NWZmYTk4Li4xYmJhODdlNyAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXBfZXZlbnQuYworKysgYi9uZXQvaXJkYS9pcmxtcF9ldmVudC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYyBiL25ldC9pcmRhL2lybG1wX2ZyYW1lLmMKaW5kZXggNTU5MzAyZC4uMGE3OWQ5YSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsbXBfZnJhbWUuYworKysgYi9uZXQvaXJkYS9pcmxtcF9mcmFtZS5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJtb2QuYyBiL25ldC9pcmRhL2lybW9kLmMKaW5kZXggOGJhNzAzZC4uMDE1NTRiOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJtb2QuYworKysgYi9uZXQvaXJkYS9pcm1vZC5jCkBAIC0xNyw3ICsxNyw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJxdWV1ZS5jIGIvbmV0L2lyZGEvaXJxdWV1ZS5jCmluZGV4IGQwNThiNDYuLjQwYzI4ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lycXVldWUuYworKysgYi9uZXQvaXJkYS9pcnF1ZXVlLmMKQEAgLTI4LDcgKzI4LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnN5c2N0bC5jIGIvbmV0L2lyZGEvaXJzeXNjdGwuYwppbmRleCA5NTdlMDRmLi41NjVjYmYwIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnN5c2N0bC5jCisrKyBiL25ldC9pcmRhL2lyc3lzY3RsLmMKQEAgLTE3LDcgKzE3LDcgQEAKICAqICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogICAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICoKLSAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21z+CBhZG1pdCBsaWFiaWxpdHkgbm9yCisgKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc8O4IGFkbWl0IGxpYWJpbGl0eSBub3IKICAqICAgICBwcm92aWRlIHdhcnJhbnR5IGZvciBhbnkgb2YgdGhpcyBzb2Z0d2FyZS4gVGhpcyBtYXRlcmlhbCBpcwogICogICAgIHByb3ZpZGVkICJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KICAqCkBAIC0zMSwxMiArMzEsNiBAQAogI2luY2x1ZGUgPG5ldC9pcmRhL2lyZGEuaD4JCS8qIGlyZGFfZGVidWcgKi8KICNpbmNsdWRlIDxuZXQvaXJkYS9pcmlhc19vYmplY3QuaD4KIAotI2RlZmluZSBORVRfSVJEQSA0MTIgLyogUmFuZG9tIG51bWJlciAqLwotZW51bSB7IERJU0NPVkVSWT0xLCBERVZOQU1FLCBERUJVRywgRkFTVF9QT0xMLCBESVNDT1ZFUllfU0xPVFMsCi0gICAgICAgRElTQ09WRVJZX1RJTUVPVVQsIFNMT1RfVElNRU9VVCwgTUFYX0JBVURfUkFURSwgTUlOX1RYX1RVUk5fVElNRSwKLSAgICAgICBNQVhfVFhfREFUQV9TSVpFLCBNQVhfVFhfV0lORE9XLCBNQVhfTk9SRVBMWV9USU1FLCBXQVJOX05PUkVQTFlfVElNRSwKLSAgICAgICBMQVBfS0VFUEFMSVZFX1RJTUUgfTsKLQogZXh0ZXJuIGludCAgc3lzY3RsX2Rpc2NvdmVyeTsKIGV4dGVybiBpbnQgIHN5c2N0bF9kaXNjb3Zlcnlfc2xvdHM7CiBleHRlcm4gaW50ICBzeXNjdGxfZGlzY292ZXJ5X3RpbWVvdXQ7CkBAIC05NCw3ICs4OCw3IEBACiAvKiBPbmUgZmlsZSAqLwogc3RhdGljIGN0bF90YWJsZSBpcmRhX3RhYmxlW10gPSB7CiAJewotCQkuY3RsX25hbWUJPSBESVNDT1ZFUlksCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX0RJU0NPVkVSWSwKIAkJLnByb2NuYW1lCT0gImRpc2NvdmVyeSIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZGlzY292ZXJ5LAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTAyLDcgKzk2LDcgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IERFVk5BTUUsCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX0RFVk5BTUUsCiAJCS5wcm9jbmFtZQk9ICJkZXZuYW1lIiwKIAkJLmRhdGEJCT0gc3lzY3RsX2Rldm5hbWUsCiAJCS5tYXhsZW4JCT0gNjUsCkBAIC0xMTIsNyArMTA2LDcgQEAKIAl9LAogI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCiAJewotCQkuY3RsX25hbWUJPSBERUJVRywKKwkJLmN0bF9uYW1lCT0gTkVUX0lSREFfREVCVUcsCiAJCS5wcm9jbmFtZQk9ICJkZWJ1ZyIsCiAJCS5kYXRhCQk9ICZpcmRhX2RlYnVnLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTIyLDcgKzExNiw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfSVJEQV9GQVNUX1JSCiAJewotCQkuY3RsX25hbWUJPSBGQVNUX1BPTEwsCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX0ZBU1RfUE9MTCwKIAkJLnByb2NuYW1lCT0gImZhc3RfcG9sbF9pbmNyZWFzZSIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfZmFzdF9wb2xsX2luY3JlYXNlLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTMxLDcgKzEyNSw3IEBACiAJfSwKICNlbmRpZgogCXsKLQkJLmN0bF9uYW1lCT0gRElTQ09WRVJZX1NMT1RTLAorCQkuY3RsX25hbWUJPSBORVRfSVJEQV9ESVNDT1ZFUllfU0xPVFMsCiAJCS5wcm9jbmFtZQk9ICJkaXNjb3Zlcnlfc2xvdHMiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2Rpc2NvdmVyeV9zbG90cywKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTE0Miw3ICsxMzYsNyBAQAogCQkuZXh0cmEyCQk9ICZtYXhfZGlzY292ZXJ5X3Nsb3RzCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IERJU0NPVkVSWV9USU1FT1VULAorCQkuY3RsX25hbWUJPSBORVRfSVJEQV9ESVNDT1ZFUllfVElNRU9VVCwKIAkJLnByb2NuYW1lCT0gImRpc2NvdmVyeV90aW1lb3V0IiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9kaXNjb3ZlcnlfdGltZW91dCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTE1MCw3ICsxNDQsNyBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gU0xPVF9USU1FT1VULAorCQkuY3RsX25hbWUJPSBORVRfSVJEQV9TTE9UX1RJTUVPVVQsCiAJCS5wcm9jbmFtZQk9ICJzbG90X3RpbWVvdXQiLAogCQkuZGF0YQkJPSAmc3lzY3RsX3Nsb3RfdGltZW91dCwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTE2MSw3ICsxNTUsNyBAQAogCQkuZXh0cmEyCQk9ICZtYXhfc2xvdF90aW1lb3V0CiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE1BWF9CQVVEX1JBVEUsCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX01BWF9CQVVEX1JBVEUsCiAJCS5wcm9jbmFtZQk9ICJtYXhfYmF1ZF9yYXRlIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfYmF1ZF9yYXRlLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTcyLDcgKzE2Niw3IEBACiAJCS5leHRyYTIJCT0gJm1heF9tYXhfYmF1ZF9yYXRlCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE1JTl9UWF9UVVJOX1RJTUUsCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX01JTl9UWF9UVVJOX1RJTUUsCiAJCS5wcm9jbmFtZQk9ICJtaW5fdHhfdHVybl90aW1lIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9taW5fdHhfdHVybl90aW1lLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTgzLDcgKzE3Nyw3IEBACiAJCS5leHRyYTIJCT0gJm1heF9taW5fdHhfdHVybl90aW1lCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE1BWF9UWF9EQVRBX1NJWkUsCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX01BWF9UWF9EQVRBX1NJWkUsCiAJCS5wcm9jbmFtZQk9ICJtYXhfdHhfZGF0YV9zaXplIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfdHhfZGF0YV9zaXplLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTk0LDcgKzE4OCw3IEBACiAJCS5leHRyYTIJCT0gJm1heF9tYXhfdHhfZGF0YV9zaXplCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE1BWF9UWF9XSU5ET1csCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX01BWF9UWF9XSU5ET1csCiAJCS5wcm9jbmFtZQk9ICJtYXhfdHhfd2luZG93IiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfdHhfd2luZG93LAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMjA1LDcgKzE5OSw3IEBACiAJCS5leHRyYTIJCT0gJm1heF9tYXhfdHhfd2luZG93CiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE1BWF9OT1JFUExZX1RJTUUsCisJCS5jdGxfbmFtZQk9IE5FVF9JUkRBX01BWF9OT1JFUExZX1RJTUUsCiAJCS5wcm9jbmFtZQk9ICJtYXhfbm9yZXBseV90aW1lIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfbm9yZXBseV90aW1lLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMjE2LDcgKzIxMCw3IEBACiAJCS5leHRyYTIJCT0gJm1heF9tYXhfbm9yZXBseV90aW1lCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IFdBUk5fTk9SRVBMWV9USU1FLAorCQkuY3RsX25hbWUJPSBORVRfSVJEQV9XQVJOX05PUkVQTFlfVElNRSwKIAkJLnByb2NuYW1lCT0gIndhcm5fbm9yZXBseV90aW1lIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF93YXJuX25vcmVwbHlfdGltZSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTIyNyw3ICsyMjEsNyBAQAogCQkuZXh0cmEyCQk9ICZtYXhfd2Fybl9ub3JlcGx5X3RpbWUKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTEFQX0tFRVBBTElWRV9USU1FLAorCQkuY3RsX25hbWUJPSBORVRfSVJEQV9MQVBfS0VFUEFMSVZFX1RJTUUsCiAJCS5wcm9jbmFtZQk9ICJsYXBfa2VlcGFsaXZlX3RpbWUiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2xhcF9rZWVwYWxpdmVfdGltZSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lydHRwLmMgYi9uZXQvaXJkYS9pcnR0cC5jCmluZGV4IDEzMTE5NzYuLjk3ZGIxNTggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lydHRwLmMKKysrIGIvbmV0L2lyZGEvaXJ0dHAuYwpAQCAtMTgsNyArMTgsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL3RpbWVyLmMgYi9uZXQvaXJkYS90aW1lci5jCmluZGV4IGQzYTZlZTguLmQ3MzAwOTkgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL3RpbWVyLmMKKysrIGIvbmV0L2lyZGEvdGltZXIuYwpAQCAtMTgsNyArMTgsNyBAQAogICogICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAgKiAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgotICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXP4IGFkbWl0IGxpYWJpbGl0eSBub3IKKyAqICAgICBOZWl0aGVyIERhZyBCcmF0dGxpIG5vciBVbml2ZXJzaXR5IG9mIFRyb21zw7ggYWRtaXQgbGlhYmlsaXR5IG5vcgogICogICAgIHByb3ZpZGUgd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzCiAgKiAgICAgcHJvdmlkZWQgIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgogICoKZGlmZiAtLWdpdCBhL25ldC9pcmRhL3dyYXBwZXIuYyBiL25ldC9pcmRhL3dyYXBwZXIuYwppbmRleCBhN2E3ZjE5Li5lNzEyODY3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS93cmFwcGVyLmMKKysrIGIvbmV0L2lyZGEvd3JhcHBlci5jCkBAIC0yMCw3ICsyMCw3IEBACiAgKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCi0gKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgorICogICAgIE5laXRoZXIgRGFnIEJyYXR0bGkgbm9yIFVuaXZlcnNpdHkgb2YgVHJvbXPDuCBhZG1pdCBsaWFiaWxpdHkgbm9yCiAgKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMKICAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAgKgpkaWZmIC0tZ2l0IGEvbmV0L2l1Y3YvaXVjdi5jIGIvbmV0L2l1Y3YvaXVjdi5jCmluZGV4IDk4MzA1OGQuLmEyZjVhNmUgMTAwNjQ0Ci0tLSBhL25ldC9pdWN2L2l1Y3YuYworKysgYi9uZXQvaXVjdi9pdWN2LmMKQEAgLTM4OSw3ICszODksNyBAQAogICogaXVjdl9kZWNsYXJlX2NwdQogICogQGRhdGE6IHVudXNlZAogICoKLSAqIERlY2xhcmUgYSBpbnRlcnVwdCBidWZmZXIgb24gdGhpcyBjcHUuCisgKiBEZWNsYXJlIGEgaW50ZXJydXB0IGJ1ZmZlciBvbiB0aGlzIGNwdS4KICAqLwogc3RhdGljIHZvaWQgaXVjdl9kZWNsYXJlX2NwdSh2b2lkICpkYXRhKQogewpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggNDllYWNiYS4uNDZjZjk2MiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC03NjIsNyArNzYyLDcgQEAKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkxMQyglczolZCk6IEFwcGxpY2F0aW9uICIKIAkJCQkJCSAgImJ1ZywgcmFjZSBpbiBNU0dfUEVFSy5cbiIsCi0JCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCk7CisJCQkJICAgICAgIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKIAkJCXBlZWtfc2VxID0gbGxjLT5jb3BpZWRfc2VxOwogCQl9CiAJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAppbmRleCBkMzRhOWRlLi40YjRlZDJhIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaAorKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2kuaApAQCAtMzcsOCArMzcsNiBAQAogCiBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsOwogCi0jZGVmaW5lIEJJVCh4KSAoMSA8PCAoeCkpCi0KICNkZWZpbmUgSUVFRTgwMjExX0FMSUdOMzJfUEFEKGEpICgoNCAtICgoYSkgJiAzKSkgJiAzKQogCiAvKiBNYXhpbXVtIG51bWJlciBvZiBicm9hZGNhc3QvbXVsdGljYXN0IGZyYW1lcyB0byBidWZmZXIgd2hlbiBzb21lIG9mIHRoZQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pb2N0bC5jIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pb2N0bC5jCmluZGV4IGYwMjI0YzIuLjZjYWEzZWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaW9jdGwuYworKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2lvY3RsLmMKQEAgLTMwNiw5ICszMDYsMTIgQEAKIAkJCSAgICAoKGNoYW4tPmNoYW4gPT0gY2hhbm5lbCkgfHwgKGNoYW4tPmZyZXEgPT0gZnJlcSkpKSB7CiAJCQkJbG9jYWwtPm9wZXJfY2hhbm5lbCA9IGNoYW47CiAJCQkJbG9jYWwtPm9wZXJfaHdfbW9kZSA9IG1vZGU7Ci0JCQkJc2V0Kys7CisJCQkJc2V0ID0gMTsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQorCQlpZiAoc2V0KQorCQkJYnJlYWs7CiAJfQogCiAJaWYgKHNldCkgewpAQCAtNTA4LDEwICs1MTEsMTEgQEAKIAogc3RhdGljIGludCBpZWVlODAyMTFfaW9jdGxfc2l3c2NhbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKKwkJCQkgICB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LCBjaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKwlzdHJ1Y3QgaXdfc2Nhbl9yZXEgKnJlcSA9IE5VTEw7CiAJdTggKnNzaWQgPSBOVUxMOwogCXNpemVfdCBzc2lkX2xlbiA9IDA7CiAKQEAgLTUzNiw2ICs1NDAsMTQgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAorCS8qIGlmIFNTSUQgd2FzIHNwZWNpZmllZCBleHBsaWNpdGx5IHRoZW4gdXNlIHRoYXQgKi8KKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkgJiYKKwkgICAgd3JxdS0+ZGF0YS5mbGFncyAmIElXX1NDQU5fVEhJU19FU1NJRCkgeworCQlyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisJCXNzaWQgPSByZXEtPmVzc2lkOworCQlzc2lkX2xlbiA9IHJlcS0+ZXNzaWRfbGVuOworCX0KKwogCXJldHVybiBpZWVlODAyMTFfc3RhX3JlcV9zY2FuKGRldiwgc3NpZCwgc3NpZF9sZW4pOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3N0YS5jIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9zdGEuYwppbmRleCAxNjQxZThmLi5mN2ZmZWVjIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvaWVlZTgwMjExX3N0YS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfc3RhLmMKQEAgLTEyLDcgKzEyLDYgQEAKICAqLwogCiAvKiBUT0RPOgotICogQlNTIHRhYmxlOiB1c2UgPEJTU0lELFNTSUQ+IGFzIHRoZSBrZXkgdG8gc3VwcG9ydCBtdWx0aS1TU0lEIEFQcwogICogb3JkZXIgQlNTIGxpc3QgYnkgUlNTSSg/KSAoInF1YWxpdHkgb2YgQVAiKQogICogc2NhbiByZXN1bHQgdGFibGUgZmlsdGVyaW5nIChieSBjYXBhYmlsaXR5IChwcml2YWN5LCBJQlNTL0JTUywgV1BBL1JTTiBJRSwKICAqICAgIFNTSUQpCkBAIC02MSw3ICs2MCw4IEBACiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRzdCwKIAkJCQkgICAgIHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4pOwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqCi1pZWVlODAyMTFfcnhfYnNzX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYnNzaWQpOworaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmJzc2lkLCBpbnQgY2hhbm5lbCwKKwkJICAgICB1OCAqc3NpZCwgdTggc3NpZF9sZW4pOwogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MpOwogc3RhdGljIGludCBpZWVlODAyMTFfc3RhX2ZpbmRfaWJzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTA4LDE0ICsxMDgsMTEgQEAKIAl1OCB3bW1fcGFyYW1fbGVuOwogfTsKIAotZW51bSBQYXJzZVJlcyB7IFBhcnNlT0sgPSAwLCBQYXJzZVVua25vd24gPSAxLCBQYXJzZUZhaWxlZCA9IC0xIH07Ci0KLXN0YXRpYyBlbnVtIFBhcnNlUmVzIGllZWU4MDJfMTFfcGFyc2VfZWxlbXModTggKnN0YXJ0LCBzaXplX3QgbGVuLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zKQorc3RhdGljIHZvaWQgaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyh1OCAqc3RhcnQsIHNpemVfdCBsZW4sCisJCQkJICAgc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgKmVsZW1zKQogewogCXNpemVfdCBsZWZ0ID0gbGVuOwogCXU4ICpwb3MgPSBzdGFydDsKLQlpbnQgdW5rbm93biA9IDA7CiAKIAltZW1zZXQoZWxlbXMsIDAsIHNpemVvZigqZWxlbXMpKTsKIApAQCAtMTI2LDE1ICsxMjMsOCBAQAogCQllbGVuID0gKnBvcysrOwogCQlsZWZ0IC09IDI7CiAKLQkJaWYgKGVsZW4gPiBsZWZ0KSB7Ci0jaWYgMAotCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiSUVFRSA4MDIuMTEgZWxlbWVudCBwYXJzZSAiCi0JCQkJICAgICAgICJmYWlsZWQgKGlkPSVkIGVsZW49JWQgbGVmdD0lZClcbiIsCi0JCQkJICAgICAgIGlkLCBlbGVuLCBsZWZ0KTsKLSNlbmRpZgotCQkJcmV0dXJuIFBhcnNlRmFpbGVkOwotCQl9CisJCWlmIChlbGVuID4gbGVmdCkKKwkJCXJldHVybjsKIAogCQlzd2l0Y2ggKGlkKSB7CiAJCWNhc2UgV0xBTl9FSURfU1NJRDoKQEAgLTIwMSwyOCArMTkxLDE1IEBACiAJCQllbGVtcy0+ZXh0X3N1cHBfcmF0ZXNfbGVuID0gZWxlbjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotI2lmIDAKLQkJCXByaW50ayhLRVJOX0RFQlVHICJJRUVFIDgwMi4xMSBlbGVtZW50IHBhcnNlIGlnbm9yZWQgIgotCQkJCSAgICAgICJ1bmtub3duIGVsZW1lbnQgKGlkPSVkIGVsZW49JWQpXG4iLAotCQkJCSAgICAgIGlkLCBlbGVuKTsKLSNlbmRpZgotCQkJdW5rbm93bisrOwogCQkJYnJlYWs7CiAJCX0KIAogCQlsZWZ0IC09IGVsZW47CiAJCXBvcyArPSBlbGVuOwogCX0KLQotCS8qIERvIG5vdCB0cmlnZ2VyIGVycm9yIGlmIGxlZnQgPT0gMSBhcyBBcHBsZSBBaXJwb3J0IGJhc2Ugc3RhdGlvbnMKLQkgKiBzZW5kIEFzc29jUmVzcHMgdGhhdCBhcmUgb25lIHNwdXJpb3VzIGJ5dGUgdG9vIGxvbmcuICovCi0KLQlyZXR1cm4gdW5rbm93biA/IFBhcnNlVW5rbm93biA6IFBhcnNlT0s7CiB9CiAKIAotCi0KIHN0YXRpYyBpbnQgZWN3MmN3KGludCBlY3cpCiB7CiAJaW50IGN3ID0gMTsKQEAgLTQyNyw3ICs0MDQsOSBAQAogCQlpZiAoc2RhdGEtPnR5cGUgIT0gSUVFRTgwMjExX0lGX1RZUEVfU1RBKQogCQkJcmV0dXJuOwogCi0JCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGRldiwgaWZzdGEtPmJzc2lkKTsKKwkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQsCisJCQkJCSAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwsCisJCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwogCQlpZiAoYnNzKSB7CiAJCQlpZiAoYnNzLT5oYXNfZXJwX3ZhbHVlKQogCQkJCWllZWU4MDIxMV9oYW5kbGVfZXJwX2llKGRldiwgYnNzLT5lcnBfdmFsdWUpOwpAQCAtNTc0LDcgKzU1Myw4IEBACiAJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9TTE9UX1RJTUUgfAogCQkJV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwogCX0KLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCk7CisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQsIGxvY2FsLT5ody5jb25mLmNoYW5uZWwsCisJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CiAJaWYgKGJzcykgewogCQlpZiAoYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpCiAJCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKQEAgLTcyMiw2ICs3MDIsNyBAQAogc3RhdGljIGludCBpZWVlODAyMTFfcHJpdmFjeV9taXNtYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfc3RhICppZnN0YSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhX2JzcyAqYnNzOwogCWludCByZXMgPSAwOwogCkBAIC03MjksNyArNzEwLDggQEAKIAkgICAgaWZzdGEtPmtleV9tYW5hZ2VtZW50X2VuYWJsZWQpCiAJCXJldHVybiAwOwogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQpOworCWJzcyA9IGllZWU4MDIxMV9yeF9ic3NfZ2V0KGRldiwgaWZzdGEtPmJzc2lkLCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAorCQkJCSAgIGlmc3RhLT5zc2lkLCBpZnN0YS0+c3NpZF9sZW4pOwogCWlmICghYnNzKQogCQlyZXR1cm4gMDsKIApAQCAtOTI2LDEyICs5MDgsNyBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZXBseWluZyB0byBhdXRoIGNoYWxsZW5nZVxuIiwgZGV2LT5uYW1lKTsKIAlwb3MgPSBtZ210LT51LmF1dGgudmFyaWFibGU7Ci0JaWYgKGllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpCi0JICAgID09IFBhcnNlRmFpbGVkKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHBhcnNlIEF1dGgoY2hhbGxlbmdlKVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAJaWYgKCFlbGVtcy5jaGFsbGVuZ2UpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBjaGFsbGVuZ2UgSUUgaW4gc2hhcmVkIGtleSBhdXRoICIKIAkJICAgICAgICJmcmFtZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTEyMDMsMTUgKzExODAsMTEgQEAKIAljYXBhYl9pbmZvID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmNhcGFiX2luZm8pOwogCXN0YXR1c19jb2RlID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLnN0YXR1c19jb2RlKTsKIAlhaWQgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3AuYWlkKTsKLQlpZiAoKGFpZCAmIChCSVQoMTUpIHwgQklUKDE0KSkpICE9IChCSVQoMTUpIHwgQklUKDE0KSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogaW52YWxpZCBhaWQgdmFsdWUgJWQ7IGJpdHMgMTU6MTQgbm90ICIKLQkJICAgICAgICJzZXRcbiIsIGRldi0+bmFtZSwgYWlkKTsKLQlhaWQgJj0gfihCSVQoMTUpIHwgQklUKDE0KSk7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYICVzc3NvY1Jlc3AgZnJvbSAlcyAoY2FwYWI9MHgleCAiCiAJICAgICAgICJzdGF0dXM9JWQgYWlkPSVkKVxuIiwKIAkgICAgICAgZGV2LT5uYW1lLCByZWFzc29jID8gIlJlYSIgOiAiQSIsIHByaW50X21hYyhtYWMsIG1nbXQtPnNhKSwKLQkgICAgICAgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsIGFpZCk7CisJICAgICAgIGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCBhaWQgJiB+KEJJVCgxNSkgfCBCSVQoMTQpKSk7CiAKIAlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFQIGRlbmllZCBhc3NvY2lhdGlvbiAoY29kZT0lZClcbiIsCkBAIC0xMjIzLDEzICsxMTk2LDEzIEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoKGFpZCAmIChCSVQoMTUpIHwgQklUKDE0KSkpICE9IChCSVQoMTUpIHwgQklUKDE0KSkpCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW52YWxpZCBhaWQgdmFsdWUgJWQ7IGJpdHMgMTU6MTQgbm90ICIKKwkJICAgICAgICJzZXRcbiIsIGRldi0+bmFtZSwgYWlkKTsKKwlhaWQgJj0gfihCSVQoMTUpIHwgQklUKDE0KSk7CisKIAlwb3MgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7Ci0JaWYgKGllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpCi0JICAgID09IFBhcnNlRmFpbGVkKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIHBhcnNlIEFzc29jUmVzcFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAKIAlpZiAoIWVsZW1zLnN1cHBfcmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBTdXBwUmF0ZXMgZWxlbWVudCBpbiBBc3NvY1Jlc3BcbiIsCkBAIC0xMjQxLDcgKzEyMTQsOSBAQAogCSAqIHVwZGF0ZSBvdXIgc3RvcmVkIGNvcHkgKi8KIAlpZiAoZWxlbXMuZXJwX2luZm8gJiYgZWxlbXMuZXJwX2luZm9fbGVuID49IDEpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3MKLQkJCT0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQpOworCQkJPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwKKwkJCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwsCisJCQkJCSAgICAgICBpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKTsKIAkJaWYgKGJzcykgewogCQkJYnNzLT5lcnBfdmFsdWUgPSBlbGVtcy5lcnBfaW5mb1swXTsKIAkJCWJzcy0+aGFzX2VycF92YWx1ZSA9IDE7CkBAIC0xMjcxLDcgKzEyNDYsOSBAQAogCQkJICAgICAgICIgQVBcbiIsIGRldi0+bmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBpZnN0YS0+YnNzaWQpOworCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGlmc3RhLT5ic3NpZCwKKwkJCQkJICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwKKwkJCQkJICAgaWZzdGEtPnNzaWQsIGlmc3RhLT5zc2lkX2xlbik7CiAJCWlmIChic3MpIHsKIAkJCXN0YS0+bGFzdF9yc3NpID0gYnNzLT5yc3NpOwogCQkJc3RhLT5sYXN0X3NpZ25hbCA9IGJzcy0+c2lnbmFsOwpAQCAtMTM0Nyw3ICsxMzI0LDggQEAKIAogCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCkKK2llZWU4MDIxMV9yeF9ic3NfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCwgaW50IGNoYW5uZWwsCisJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CkBAIC0xMzU4LDYgKzEzMzYsMTEgQEAKIAlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKIAlhdG9taWNfaW5jKCZic3MtPnVzZXJzKTsKIAltZW1jcHkoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKKwlic3MtPmNoYW5uZWwgPSBjaGFubmVsOworCWlmIChzc2lkICYmIHNzaWRfbGVuIDw9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU4pIHsKKwkJbWVtY3B5KGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pOworCQlic3MtPnNzaWRfbGVuID0gc3NpZF9sZW47CisJfQogCiAJc3Bpbl9sb2NrX2JoKCZsb2NhbC0+c3RhX2Jzc19sb2NrKTsKIAkvKiBUT0RPOiBvcmRlciBieSBSU1NJPyAqLwpAQCAtMTM2OSw3ICsxMzUyLDggQEAKIAogCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICoKLWllZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCkKK2llZWU4MDIxMV9yeF9ic3NfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpic3NpZCwgaW50IGNoYW5uZWwsCisJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7CkBAIC0xMzc3LDcgKzEzNjEsMTAgQEAKIAlzcGluX2xvY2tfYmgoJmxvY2FsLT5zdGFfYnNzX2xvY2spOwogCWJzcyA9IGxvY2FsLT5zdGFfYnNzX2hhc2hbU1RBX0hBU0goYnNzaWQpXTsKIAl3aGlsZSAoYnNzKSB7Ci0JCWlmIChtZW1jbXAoYnNzLT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKSA9PSAwKSB7CisJCWlmICghbWVtY21wKGJzcy0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgJiYKKwkJICAgIGJzcy0+Y2hhbm5lbCA9PSBjaGFubmVsICYmCisJCSAgICBic3MtPnNzaWRfbGVuID09IHNzaWRfbGVuICYmCisJCSAgICAoc3NpZF9sZW4gPT0gMCB8fCAhbWVtY21wKGJzcy0+c3NpZCwgc3NpZCwgc3NpZF9sZW4pKSkgewogCQkJYXRvbWljX2luYygmYnNzLT51c2Vycyk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTQzOSw3ICsxNDI2LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHdkZXZfcHJpdihkZXYtPmllZWU4MDIxMV9wdHIpOwogCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwogCXNpemVfdCBiYXNlbGVuOwotCWludCBjaGFubmVsLCBpbnZhbGlkID0gMCwgY2xlbjsKKwlpbnQgY2hhbm5lbCwgY2xlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9ic3MgKmJzczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CkBAIC0xNDg1LDkgKzE0NzIsNyBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAJfQogCi0JaWYgKGllZWU4MDJfMTFfcGFyc2VfZWxlbXMobWdtdC0+dS5iZWFjb24udmFyaWFibGUsIGxlbiAtIGJhc2VsZW4sCi0JCQkJICAgJmVsZW1zKSA9PSBQYXJzZUZhaWxlZCkKLQkJaW52YWxpZCA9IDE7CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKIAogCWlmIChzZGF0YS0+dHlwZSA9PSBJRUVFODAyMTFfSUZfVFlQRV9JQlNTICYmIGVsZW1zLnN1cHBfcmF0ZXMgJiYKIAkgICAgbWVtY21wKG1nbXQtPmJzc2lkLCBzZGF0YS0+dS5zdGEuYnNzaWQsIEVUSF9BTEVOKSA9PSAwICYmCkBAIC0xNTQ1LDkgKzE1MzAsMTEgQEAKIAllbHNlCiAJCWNoYW5uZWwgPSByeF9zdGF0dXMtPmNoYW5uZWw7CiAKLQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIG1nbXQtPmJzc2lkKTsKKwlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIG1nbXQtPmJzc2lkLCBjaGFubmVsLAorCQkJCSAgIGVsZW1zLnNzaWQsIGVsZW1zLnNzaWRfbGVuKTsKIAlpZiAoIWJzcykgewotCQlic3MgPSBpZWVlODAyMTFfcnhfYnNzX2FkZChkZXYsIG1nbXQtPmJzc2lkKTsKKwkJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQoZGV2LCBtZ210LT5ic3NpZCwgY2hhbm5lbCwKKwkJCQkJICAgZWxlbXMuc3NpZCwgZWxlbXMuc3NpZF9sZW4pOwogCQlpZiAoIWJzcykKIAkJCXJldHVybjsKIAl9IGVsc2UgewpAQCAtMTU3MywxMCArMTU2MCw2IEBACiAKIAlic3MtPmJlYWNvbl9pbnQgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5iZWFjb25faW50KTsKIAlic3MtPmNhcGFiaWxpdHkgPSBsZTE2X3RvX2NwdShtZ210LT51LmJlYWNvbi5jYXBhYl9pbmZvKTsKLQlpZiAoZWxlbXMuc3NpZCAmJiBlbGVtcy5zc2lkX2xlbiA8PSBJRUVFODAyMTFfTUFYX1NTSURfTEVOKSB7Ci0JCW1lbWNweShic3MtPnNzaWQsIGVsZW1zLnNzaWQsIGVsZW1zLnNzaWRfbGVuKTsKLQkJYnNzLT5zc2lkX2xlbiA9IGVsZW1zLnNzaWRfbGVuOwotCX0KIAogCWJzcy0+c3VwcF9yYXRlc19sZW4gPSAwOwogCWlmIChlbGVtcy5zdXBwX3JhdGVzKSB7CkBAIC0xNjQ3LDcgKzE2MzAsNiBAQAogCiAKIAlic3MtPmh3X21vZGUgPSByeF9zdGF0dXMtPnBoeW1vZGU7Ci0JYnNzLT5jaGFubmVsID0gY2hhbm5lbDsKIAlic3MtPmZyZXEgPSByeF9zdGF0dXMtPmZyZXE7CiAJaWYgKGNoYW5uZWwgIT0gcnhfc3RhdHVzLT5jaGFubmVsICYmCiAJICAgIChic3MtPmh3X21vZGUgPT0gTU9ERV9JRUVFODAyMTFHIHx8CkBAIC0xNzA3LDkgKzE2ODksNyBAQAogCWlmIChiYXNlbGVuID4gbGVuKQogCQlyZXR1cm47CiAKLQlpZiAoaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwKLQkJCQkgICAmZWxlbXMpID09IFBhcnNlRmFpbGVkKQotCQlyZXR1cm47CisJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgbGVuIC0gYmFzZWxlbiwgJmVsZW1zKTsKIAogCWlmIChlbGVtcy5lcnBfaW5mbyAmJiBlbGVtcy5lcnBfaW5mb19sZW4gPj0gMSkKIAkJaWVlZTgwMjExX2hhbmRsZV9lcnBfaWUoZGV2LCBlbGVtcy5lcnBfaW5mb1swXSk7CkBAIC0yMzc1LDcgKzIzNTUsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfYnNzICpic3M7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfaHdfbW9kZSAqbW9kZTsKIAl1OCBic3NpZFtFVEhfQUxFTl0sICpwb3M7CiAJaW50IGk7CkBAIC0yMzk4LDE4ICsyMzc4LDE3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDcmVhdGluZyBuZXcgSUJTUyBuZXR3b3JrLCBCU1NJRCAlc1xuIiwKIAkgICAgICAgZGV2LT5uYW1lLCBwcmludF9tYWMobWFjLCBic3NpZCkpOwogCi0JYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQoZGV2LCBic3NpZCk7CisJYnNzID0gaWVlZTgwMjExX3J4X2Jzc19hZGQoZGV2LCBic3NpZCwgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbCwKKwkJCQkgICBzZGF0YS0+dS5zdGEuc3NpZCwgc2RhdGEtPnUuc3RhLnNzaWRfbGVuKTsKIAlpZiAoIWJzcykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJbW9kZSA9IGxvY2FsLT5vcGVyX2h3X21vZGU7CiAKIAlpZiAobG9jYWwtPmh3LmNvbmYuYmVhY29uX2ludCA9PSAwKQogCQlsb2NhbC0+aHcuY29uZi5iZWFjb25faW50ID0gMTAwOwogCWJzcy0+YmVhY29uX2ludCA9IGxvY2FsLT5ody5jb25mLmJlYWNvbl9pbnQ7CiAJYnNzLT5od19tb2RlID0gbG9jYWwtPmh3LmNvbmYucGh5bW9kZTsKLQlic3MtPmNoYW5uZWwgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsOwogCWJzcy0+ZnJlcSA9IGxvY2FsLT5ody5jb25mLmZyZXE7CiAJYnNzLT5sYXN0X3VwZGF0ZSA9IGppZmZpZXM7CiAJYnNzLT5jYXBhYmlsaXR5ID0gV0xBTl9DQVBBQklMSVRZX0lCU1M7CkBAIC0yNDY5LDcgKzI0NDgsOCBAQAogCSAgICAgICAiJXNcbiIsIHByaW50X21hYyhtYWMsIGJzc2lkKSwgcHJpbnRfbWFjKG1hYzIsIGlmc3RhLT5ic3NpZCkpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAJaWYgKGZvdW5kICYmIG1lbWNtcChpZnN0YS0+YnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgIT0gMCAmJgotCSAgICAoYnNzID0gaWVlZTgwMjExX3J4X2Jzc19nZXQoZGV2LCBic3NpZCkpKSB7CisJICAgIChic3MgPSBpZWVlODAyMTFfcnhfYnNzX2dldChkZXYsIGJzc2lkLCBsb2NhbC0+aHcuY29uZi5jaGFubmVsLAorCQkJCQlpZnN0YS0+c3NpZCwgaWZzdGEtPnNzaWRfbGVuKSkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZWxlY3RlZCBJQlNTIEJTU0lEICVzIgogCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHByaW50X21hYyhtYWMsIGJzc2lkKSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19nZW5lcmljLmMKaW5kZXggZDhiNTAxOC4uMTNmODE5MSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ2VuZXJpYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dlbmVyaWMuYwpAQCAtNzAsNyArNzAsNiBAQAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpnZW5lcmljX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBnZW5lcmljX3N5c2N0bF90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfZ2VuZXJpY190aW1lb3V0IiwKIAkJLmRhdGEJCT0gJm5mX2N0X2dlbmVyaWNfdGltZW91dCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTg0LDcgKzgzLDYgQEAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBnZW5lcmljX2NvbXBhdF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfZ2VuZXJpY190aW1lb3V0IiwKIAkJLmRhdGEJCT0gJm5mX2N0X2dlbmVyaWNfdGltZW91dCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCAwNDE5MmFjLi5jYjA0Njc1IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCkBAIC00NzYsNyArNDc2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc2N0cF9zeXNjdGxfaGVhZGVyOwogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgc2N0cF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NMT1NFRCwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfY2xvc2VkIiwKIAkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9jbG9zZWQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC00ODQsNyArNDgzLDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9XQUlULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jb29raWVfd2FpdCIsCiAJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfY29va2llX3dhaXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC00OTIsNyArNDkwLDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9FQ0hPRUQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01MDAsNyArNDk3LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0VTVEFCTElTSEVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9lc3RhYmxpc2hlZCIsCiAJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfZXN0YWJsaXNoZWQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01MDgsNyArNTA0LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1NFTlQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3NlbnQiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX3NlbnQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01MTYsNyArNTExLDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0QsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01MjQsNyArNTE4LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX0FDS19TRU5ULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3NjdHBfdGltZW91dF9zaHV0ZG93bl9hY2tfc2VudCIsCiAJCS5kYXRhCQk9ICZuZl9jdF9zY3RwX3RpbWVvdXRfc2h1dGRvd25fYWNrX3NlbnQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01MzksNyArNTMyLDYgQEAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSBzY3RwX2NvbXBhdF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ0xPU0VELAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3NjdHBfdGltZW91dF9jbG9zZWQiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X2Nsb3NlZCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTU0Nyw3ICs1MzksNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfV0FJVCwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja19zY3RwX3RpbWVvdXRfY29va2llX3dhaXQiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X2Nvb2tpZV93YWl0LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtNTU1LDcgKzU0Niw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX0NPT0tJRV9FQ0hPRUQsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X2Nvb2tpZV9lY2hvZWQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01NjMsNyArNTUzLDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfRVNUQUJMSVNIRUQsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X2VzdGFibGlzaGVkIiwKIAkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9lc3RhYmxpc2hlZCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTU3MSw3ICs1NjAsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9TRU5ULAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3NjdHBfdGltZW91dF9zaHV0ZG93bl9zZW50IiwKIAkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9zaHV0ZG93bl9zZW50LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtNTc5LDcgKzU2Nyw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0QsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QiLAogCQkuZGF0YQkJPSAmbmZfY3Rfc2N0cF90aW1lb3V0X3NodXRkb3duX3JlY2QsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC01ODcsNyArNTc0LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfc2N0cF90aW1lb3V0X3NodXRkb3duX2Fja19zZW50IiwKIAkJLmRhdGEJCT0gJm5mX2N0X3NjdHBfdGltZW91dF9zaHV0ZG93bl9hY2tfc2VudCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggYzcwNzUzNC4uN2EzZjY0YyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTgzNCwxMCArODM0LDEyIEBACiAJY2FzZSBUQ1BfQ09OTlRSQUNLX1NZTl9TRU5UOgogCQlpZiAob2xkX3N0YXRlIDwgVENQX0NPTk5UUkFDS19USU1FX1dBSVQpCiAJCQlicmVhazsKLQkJaWYgKGNvbm50cmFjay0+cHJvdG8udGNwLnNlZW5bIWRpcl0uZmxhZ3MgJgotCQkJSVBfQ1RfVENQX0ZMQUdfQ0xPU0VfSU5JVCkgewotCQkJLyogQXR0ZW1wdCB0byByZW9wZW4gYSBjbG9zZWQgY29ubmVjdGlvbi4KLQkJCSogRGVsZXRlIHRoaXMgY29ubmVjdGlvbiBhbmQgbG9vayB1cCBhZ2Fpbi4gKi8KKwkJaWYgKChjb25udHJhY2stPnByb3RvLnRjcC5zZWVuWyFkaXJdLmZsYWdzICYKKwkJCUlQX0NUX1RDUF9GTEFHX0NMT1NFX0lOSVQpCisJCSAgICB8fCAoY29ubnRyYWNrLT5wcm90by50Y3AubGFzdF9kaXIgPT0gZGlyCisJCSAgICAgICAgJiYgY29ubnRyYWNrLT5wcm90by50Y3AubGFzdF9pbmRleCA9PSBUQ1BfUlNUX1NFVCkpIHsKKwkJCS8qIEF0dGVtcHQgdG8gcmVvcGVuIGEgY2xvc2VkL2Fib3J0ZWQgY29ubmVjdGlvbi4KKwkJCSAqIERlbGV0ZSB0aGlzIGNvbm5lY3Rpb24gYW5kIGxvb2sgdXAgYWdhaW4uICovCiAJCQl3cml0ZV91bmxvY2tfYmgoJnRjcF9sb2NrKTsKIAkJCWlmIChkZWxfdGltZXIoJmNvbm50cmFjay0+dGltZW91dCkpCiAJCQkJY29ubnRyYWNrLT50aW1lb3V0LmZ1bmN0aW9uKCh1bnNpZ25lZCBsb25nKQpAQCAtOTI1LDYgKzkyNyw3IEBACiAgICAgIGluX3dpbmRvdzoKIAkvKiBGcm9tIG5vdyBvbiB3ZSBoYXZlIGdvdCBpbi13aW5kb3cgcGFja2V0cyAqLwogCWNvbm50cmFjay0+cHJvdG8udGNwLmxhc3RfaW5kZXggPSBpbmRleDsKKwljb25udHJhY2stPnByb3RvLnRjcC5sYXN0X2RpciA9IGRpcjsKIAogCXByX2RlYnVnKCJ0Y3BfY29ubnRyYWNrczogIik7CiAJTkZfQ1RfRFVNUF9UVVBMRSh0dXBsZSk7CkBAIC0xMTYyLDcgKzExNjUsNiBAQAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICp0Y3Bfc3lzY3RsX2hlYWRlcjsKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIHRjcF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1NFTlQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfc3luX3NlbnQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfc3luX3NlbnQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0xMTcwLDcgKzExNzIsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDViwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9zeW5fcmVjdiIsCiAJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9zeW5fcmVjdiwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTExNzgsNyArMTE3OSw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVELAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2VzdGFibGlzaGVkIiwKIAkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2VzdGFibGlzaGVkLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTE4Niw3ICsxMTg2LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRklOX1dBSVQsCiAJCS5wcm9jbmFtZQk9ICJuZl9jb25udHJhY2tfdGNwX3RpbWVvdXRfZmluX3dhaXQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfZmluX3dhaXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0xMTk0LDcgKzExOTMsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfY2xvc2Vfd2FpdCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTEyMDIsNyArMTIwMCw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0xBU1RfQUNLLAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X2xhc3RfYWNrIiwKIAkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2xhc3RfYWNrLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTIxMCw3ICsxMjA3LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfVElNRV9XQUlULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X3RpbWVfd2FpdCIsCiAJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF90aW1lX3dhaXQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0xMjE4LDcgKzEyMTQsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRSwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja190Y3BfdGltZW91dF9jbG9zZSIsCiAJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9jbG9zZSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTEyMjYsNyArMTIyMSw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX01BWF9SRVRSQU5TLAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3RjcF90aW1lb3V0X21heF9yZXRyYW5zIiwKIAkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X21heF9yZXRyYW5zLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTI2NSw3ICsxMjU5LDYgQEAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB0Y3BfY29tcGF0X3N5c2N0bF90YWJsZVtdID0gewogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1NZTl9TRU5ULAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X3N5bl9zZW50IiwKIAkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X3N5bl9zZW50LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTI3Myw3ICsxMjY2LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fUkVDViwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfdGltZW91dF9zeW5fcmVjdiIsCiAJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9zeW5fcmVjdiwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTEyODEsNyArMTI3Myw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRVNUQUJMSVNIRUQsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfZXN0YWJsaXNoZWQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfZXN0YWJsaXNoZWQsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0xMjg5LDcgKzEyODAsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0ZJTl9XQUlULAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Zpbl93YWl0IiwKIAkJLmRhdGEJCT0gJm5mX2N0X3RjcF90aW1lb3V0X2Zpbl93YWl0LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTI5Nyw3ICsxMjg3LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRV9XQUlULAogCQkucHJvY25hbWUJPSAiaXBfY29ubnRyYWNrX3RjcF90aW1lb3V0X2Nsb3NlX3dhaXQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfY2xvc2Vfd2FpdCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTEzMDUsNyArMTI5NCw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTEFTVF9BQ0ssCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfbGFzdF9hY2siLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfbGFzdF9hY2ssCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCkBAIC0xMzEzLDcgKzEzMDEsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1RJTUVfV0FJVCwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfdGltZW91dF90aW1lX3dhaXQiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfdGltZV93YWl0LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTMyMSw3ICsxMzA4LDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX2ppZmZpZXMsCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9DTE9TRSwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja190Y3BfdGltZW91dF9jbG9zZSIsCiAJCS5kYXRhCQk9ICZuZl9jdF90Y3BfdGltZW91dF9jbG9zZSwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTEzMjksNyArMTMxNSw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlMsCiAJCS5wcm9jbmFtZQk9ICJpcF9jb25udHJhY2tfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMiLAogCQkuZGF0YQkJPSAmbmZfY3RfdGNwX3RpbWVvdXRfbWF4X3JldHJhbnMsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKHVuc2lnbmVkIGludCksCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IGJhODBlMWEuLmIzZTdlY2IgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC0xNDYsNyArMTQ2LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqdWRwX3N5c2N0bF9oZWFkZXI7CiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSB1ZHBfc3lzY3RsX3RhYmxlW10gPSB7CiAJewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VULAogCQkucHJvY25hbWUJPSAibmZfY29ubnRyYWNrX3VkcF90aW1lb3V0IiwKIAkJLmRhdGEJCT0gJm5mX2N0X3VkcF90aW1lb3V0LAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTU0LDcgKzE1Myw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19qaWZmaWVzLAogCX0sCiAJewotCQkuY3RsX25hbWUJPSBORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTSwKIAkJLnByb2NuYW1lCT0gIm5mX2Nvbm50cmFja191ZHBfdGltZW91dF9zdHJlYW0iLAogCQkuZGF0YQkJPSAmbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApAQCAtMTY4LDcgKzE2Niw2IEBACiAjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19QUk9DX0NPTVBBVAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgdWRwX2NvbXBhdF9zeXNjdGxfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IE5FVF9JUFY0X05GX0NPTk5UUkFDS19VRFBfVElNRU9VVCwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja191ZHBfdGltZW91dCIsCiAJCS5kYXRhCQk9ICZuZl9jdF91ZHBfdGltZW91dCwKIAkJLm1heGxlbgkJPSBzaXplb2YodW5zaWduZWQgaW50KSwKQEAgLTE3Niw3ICsxNzMsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfamlmZmllcywKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTSwKIAkJLnByb2NuYW1lCT0gImlwX2Nvbm50cmFja191ZHBfdGltZW91dF9zdHJlYW0iLAogCQkuZGF0YQkJPSAmbmZfY3RfdWRwX3RpbWVvdXRfc3RyZWFtLAogCQkubWF4bGVuCQk9IHNpemVvZih1bnNpZ25lZCBpbnQpLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9DT05OTUFSSy5jCmluZGV4IDhjYzMyNGIuLjg1Njc5M2UgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPG5ldC9jaGVja3N1bS5oPgogCi1NT0RVTEVfQVVUSE9SKCJIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5dGVtcy5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJIZW5yaWsgTm9yZHN0cm9tIDxobm9AbWFyYXN5c3RlbXMuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJUCB0YWJsZXMgQ09OTk1BUksgbWF0Y2hpbmcgbW9kdWxlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQUxJQVMoImlwdF9DT05OTUFSSyIpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmMKaW5kZXggYWY3OTQyMy4uOWVjNTAxMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25uYnl0ZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5jCkBAIC0yLDEzICsyLDEzIEBACiAgKiBHUEwgKEMpIDIwMDIgTWFydGluIERldmVyYSAoZGV2aWtAY2RpLmN6KS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgogCiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4iKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuYwppbmRleCAxMDcxZmM1Li45ZjY3OTIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb25ubWFyay5jCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5tYXJrLmg+CiAKLU1PRFVMRV9BVVRIT1IoIkhlbnJpayBOb3Jkc3Ryb20gPGhub0BtYXJhc3l0ZW1zLmNvbT4iKTsKK01PRFVMRV9BVVRIT1IoIkhlbnJpayBOb3Jkc3Ryb20gPGhub0BtYXJhc3lzdGVtcy5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIklQIHRhYmxlcyBjb25ubWFyayBtYXRjaCBtb2R1bGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygiaXB0X2Nvbm5tYXJrIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKaW5kZXggNGZjY2E3OS4uZjI2M2E3NyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwpAQCAtMSw1ICsxLDUgQEAKLS8qIChDKSAxOTk5IErpcvRtZSBkZSBWaXZpZSA8ZGV2aXZpZUBpbmZvLmVuc2VyYi51LWJvcmRlYXV4LmZyPgotICogKEMpIDE5OTkgSGVydukgRXljaGVubmUgPGV5Y2hlbm5lQGluZm8uZW5zZXJiLnUtYm9yZGVhdXguZnI+CisvKiAoQykgMTk5OSBKw6lyw7RtZSBkZSBWaXZpZSA8ZGV2aXZpZUBpbmZvLmVuc2VyYi51LWJvcmRlYXV4LmZyPgorICogKEMpIDE5OTkgSGVydsOpIEV5Y2hlbm5lIDxleWNoZW5uZUBpbmZvLmVuc2VyYi51LWJvcmRlYXV4LmZyPgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwppbmRleCBmOTA3NzcwLi4zMzU4MjczIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NjdHAuYwpAQCAtNDIsMjEgKzQyLDIxIEBACiBzdGF0aWMgaW5saW5lIGJvb2wKIG1hdGNoX3BhY2tldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCSAgICAgdW5zaWduZWQgaW50IG9mZnNldCwKLQkgICAgIGNvbnN0IHVfaW50MzJfdCAqY2h1bmttYXAsCi0JICAgICBpbnQgY2h1bmtfbWF0Y2hfdHlwZSwKLQkgICAgIGNvbnN0IHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyAqZmxhZ19pbmZvLAotCSAgICAgY29uc3QgaW50IGZsYWdfY291bnQsCisJICAgICBjb25zdCBzdHJ1Y3QgeHRfc2N0cF9pbmZvICppbmZvLAogCSAgICAgYm9vbCAqaG90ZHJvcCkKIHsKIAl1X2ludDMyX3QgY2h1bmttYXBjb3B5WzI1NiAvIHNpemVvZiAodV9pbnQzMl90KV07CiAJc2N0cF9jaHVua2hkcl90IF9zY2gsICpzY2g7CisJaW50IGNodW5rX21hdGNoX3R5cGUgPSBpbmZvLT5jaHVua19tYXRjaF90eXBlOworCWNvbnN0IHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyAqZmxhZ19pbmZvID0gaW5mby0+ZmxhZ19pbmZvOworCWludCBmbGFnX2NvdW50ID0gaW5mby0+ZmxhZ19jb3VudDsKIAogI2lmZGVmIERFQlVHX1NDVFAKIAlpbnQgaSA9IDA7CiAjZW5kaWYKIAogCWlmIChjaHVua19tYXRjaF90eXBlID09IFNDVFBfQ0hVTktfTUFUQ0hfQUxMKQotCQlTQ1RQX0NIVU5LTUFQX0NPUFkoY2h1bmttYXBjb3B5LCBjaHVua21hcCk7CisJCVNDVFBfQ0hVTktNQVBfQ09QWShjaHVua21hcGNvcHksIGluZm8tPmNodW5rbWFwKTsKIAogCWRvIHsKIAkJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgb2Zmc2V0LCBzaXplb2YoX3NjaCksICZfc2NoKTsKQEAgLTczLDcgKzczLDcgQEAKIAogCQlkdXByaW50Zigic2tiLT5sZW46ICVkXHRvZmZzZXQ6ICVkXG4iLCBza2ItPmxlbiwgb2Zmc2V0KTsKIAotCQlpZiAoU0NUUF9DSFVOS01BUF9JU19TRVQoY2h1bmttYXAsIHNjaC0+dHlwZSkpIHsKKwkJaWYgKFNDVFBfQ0hVTktNQVBfSVNfU0VUKGluZm8tPmNodW5rbWFwLCBzY2gtPnR5cGUpKSB7CiAJCQlzd2l0Y2ggKGNodW5rX21hdGNoX3R5cGUpIHsKIAkJCWNhc2UgU0NUUF9DSFVOS19NQVRDSF9BTlk6CiAJCQkJaWYgKG1hdGNoX2ZsYWdzKGZsYWdfaW5mbywgZmxhZ19jb3VudCwKQEAgLTEwNCw3ICsxMDQsNyBAQAogCiAJc3dpdGNoIChjaHVua19tYXRjaF90eXBlKSB7CiAJY2FzZSBTQ1RQX0NIVU5LX01BVENIX0FMTDoKLQkJcmV0dXJuIFNDVFBfQ0hVTktNQVBfSVNfQ0xFQVIoY2h1bmttYXApOworCQlyZXR1cm4gU0NUUF9DSFVOS01BUF9JU19DTEVBUihpbmZvLT5jaHVua21hcCk7CiAJY2FzZSBTQ1RQX0NIVU5LX01BVENIX0FOWToKIAkJcmV0dXJuIGZhbHNlOwogCWNhc2UgU0NUUF9DSFVOS19NQVRDSF9PTkxZOgpAQCAtMTQ4LDkgKzE0OCw3IEBACiAJCQkmJiBudG9ocyhzaC0+ZGVzdCkgPD0gaW5mby0+ZHB0c1sxXSwKIAkJCVhUX1NDVFBfREVTVF9QT1JUUywgaW5mby0+ZmxhZ3MsIGluZm8tPmludmZsYWdzKQogCQkmJiBTQ0NIRUNLKG1hdGNoX3BhY2tldChza2IsIHByb3RvZmYgKyBzaXplb2YgKHNjdHBfc2N0cGhkcl90KSwKLQkJCQkJaW5mby0+Y2h1bmttYXAsIGluZm8tPmNodW5rX21hdGNoX3R5cGUsCi0JCQkJCWluZm8tPmZsYWdfaW5mbywgaW5mby0+ZmxhZ19jb3VudCwKLQkJCQkJaG90ZHJvcCksCisJCQkJCWluZm8sIGhvdGRyb3ApLAogCQkJICAgWFRfU0NUUF9DSFVOS19UWVBFUywgaW5mby0+ZmxhZ3MsIGluZm8tPmludmZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZTExMDAwYS4uZDA5MzY1MCAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC0xNjIzLDExICsxNjIzLDYgQEAKIAkuY2xvc2UgPXBhY2tldF9tbV9jbG9zZSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKnBnX3ZlY19lbmRwYWdlKGNoYXIgKm9uZV9wZ192ZWMsIHVuc2lnbmVkIGludCBvcmRlcikKLXsKLQlyZXR1cm4gdmlydF90b19wYWdlKG9uZV9wZ192ZWMgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKSAtIDEpOwotfQotCiBzdGF0aWMgdm9pZCBmcmVlX3BnX3ZlYyhjaGFyICoqcGdfdmVjLCB1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5jIGIvbmV0L3Jma2lsbC9yZmtpbGwtaW5wdXQuYwppbmRleCBlYWFiZjA4Li5kMWU5ZDY4IDEwMDY0NAotLS0gYS9uZXQvcmZraWxsL3Jma2lsbC1pbnB1dC5jCisrKyBiL25ldC9yZmtpbGwvcmZraWxsLWlucHV0LmMKQEAgLTE0NiwxOCArMTQ2LDE4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlucHV0X2RldmljZV9pZCByZmtpbGxfaWRzW10gPSB7CiAJewogCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfCBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklULAotCQkuZXZiaXQgPSB7IEJJVChFVl9LRVkpIH0sCi0JCS5rZXliaXQgPSB7IFtMT05HKEtFWV9XTEFOKV0gPSBCSVQoS0VZX1dMQU4pIH0sCisJCS5ldmJpdCA9IHsgQklUX01BU0soRVZfS0VZKSB9LAorCQkua2V5Yml0ID0geyBbQklUX1dPUkQoS0VZX1dMQU4pXSA9IEJJVF9NQVNLKEtFWV9XTEFOKSB9LAogCX0sCiAJewogCQkuZmxhZ3MgPSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgfCBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfS0VZQklULAotCQkuZXZiaXQgPSB7IEJJVChFVl9LRVkpIH0sCi0JCS5rZXliaXQgPSB7IFtMT05HKEtFWV9CTFVFVE9PVEgpXSA9IEJJVChLRVlfQkxVRVRPT1RIKSB9LAorCQkuZXZiaXQgPSB7IEJJVF9NQVNLKEVWX0tFWSkgfSwKKwkJLmtleWJpdCA9IHsgW0JJVF9XT1JEKEtFWV9CTFVFVE9PVEgpXSA9IEJJVF9NQVNLKEtFWV9CTFVFVE9PVEgpIH0sCiAJfSwKIAl7CiAJCS5mbGFncyA9IElOUFVUX0RFVklDRV9JRF9NQVRDSF9FVkJJVCB8IElOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQsCi0JCS5ldmJpdCA9IHsgQklUKEVWX0tFWSkgfSwKLQkJLmtleWJpdCA9IHsgW0xPTkcoS0VZX1VXQildID0gQklUKEtFWV9VV0IpIH0sCisJCS5ldmJpdCA9IHsgQklUX01BU0soRVZfS0VZKSB9LAorCQkua2V5Yml0ID0geyBbQklUX1dPUkQoS0VZX1VXQildID0gQklUX01BU0soS0VZX1VXQikgfSwKIAl9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9LY29uZmlnIGIvbmV0L3NjaGVkL0tjb25maWcKaW5kZXggOTI0MzVhOC4uOWMxNWM0ODggMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9LY29uZmlnCisrKyBiL25ldC9zY2hlZC9LY29uZmlnCkBAIC0yLDkgKzIsNyBAQAogIyBUcmFmZmljIGNvbnRyb2wgY29uZmlndXJhdGlvbi4KICMgCiAKLW1lbnUgIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZyIKLQotY29uZmlnIE5FVF9TQ0hFRAorbWVudWNvbmZpZyBORVRfU0NIRUQKIAlib29sICJRb1MgYW5kL29yIGZhaXIgcXVldWVpbmciCiAJc2VsZWN0IE5FVF9TQ0hfRklGTwogCS0tLWhlbHAtLS0KQEAgLTQxLDkgKzM5LDYgQEAKIAkgIFRoZSBhdmFpbGFibGUgc2NoZWR1bGVycyBhcmUgbGlzdGVkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zOyB5b3UKIAkgIGNhbiBzYXkgWSB0byBhcyBtYW55IGFzIHlvdSBsaWtlLiBJZiB1bnN1cmUsIHNheSBOIG5vdy4KIAotY29uZmlnIE5FVF9TQ0hfRklGTwotCWJvb2wKLQogaWYgTkVUX1NDSEVECiAKIGNvbW1lbnQgIlF1ZXVlaW5nL1NjaGVkdWxpbmciCkBAIC01MDAsNCArNDk1LDUgQEAKIAogZW5kaWYgIyBORVRfU0NIRUQKIAotZW5kbWVudQorY29uZmlnIE5FVF9TQ0hfRklGTworCWJvb2wKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9lbV9tZXRhLmMgYi9uZXQvc2NoZWQvZW1fbWV0YS5jCmluZGV4IGU5OTg5NjEuLmNlZGE4ODkgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9lbV9tZXRhLmMKKysrIGIvbmV0L3NjaGVkL2VtX21ldGEuYwpAQCAtNTUsNyArNTUsNyBAQAogICogCXBwcDAuLjkuCiAgKgogICogCU5PVEU6IENlcnRhaW4gbWV0YSB2YWx1ZXMgZGVwZW5kIG9uIG90aGVyIHN1YnN5c3RlbXMgYW5kIGFyZQotICogCSAgICAgIG9ubHkgYXZhaWxhYmxlIGlmIHRoYXQgc3Vic3l0ZW0gaXMgZW5hYmxlZCBpbiB0aGUga2VybmVsLgorICogCSAgICAgIG9ubHkgYXZhaWxhYmxlIGlmIHRoYXQgc3Vic3lzdGVtIGlzIGVuYWJsZWQgaW4gdGhlIGtlcm5lbC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCmluZGV4IDk1YWUxMTkuLmZhMWE2ZjQgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCisrKyBiL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jCkBAIC0yNDksMTAgKzI0OSwxMSBAQAogICovCiB2b2lkIG5ldGlmX2NhcnJpZXJfb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIsICZkZXYtPnN0YXRlKSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fTElOS19TVEFURV9OT0NBUlJJRVIsICZkZXYtPnN0YXRlKSkgewogCQlsaW5rd2F0Y2hfZmlyZV9ldmVudChkZXYpOwotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCi0JCV9fbmV0ZGV2X3dhdGNoZG9nX3VwKGRldik7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCQlfX25ldGRldl93YXRjaGRvZ191cChkZXYpOworCX0KIH0KIAogLyoqCkBAIC01NTUsNiArNTU2LDcgQEAKIHsKIAlzdHJ1Y3QgUWRpc2MgKnFkaXNjOwogCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJ1bm5pbmc7CiAKIAlzcGluX2xvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CiAJcWRpc2MgPSBkZXYtPnFkaXNjOwpAQCAtNTcwLDEyICs1NzIsMzEgQEAKIAogCWRldl93YXRjaGRvZ19kb3duKGRldik7CiAKLQkvKiBXYWl0IGZvciBvdXRzdGFuZGluZyBkZXZfcXVldWVfeG1pdCBjYWxscy4gKi8KKwkvKiBXYWl0IGZvciBvdXRzdGFuZGluZyBxZGlzYy1sZXNzIGRldl9xdWV1ZV94bWl0IGNhbGxzLiAqLwogCXN5bmNocm9uaXplX3JjdSgpOwogCiAJLyogV2FpdCBmb3Igb3V0c3RhbmRpbmcgcWRpc2NfcnVuIGNhbGxzLiAqLwotCXdoaWxlICh0ZXN0X2JpdChfX0xJTktfU1RBVEVfUURJU0NfUlVOTklORywgJmRldi0+c3RhdGUpKQotCQl5aWVsZCgpOworCWRvIHsKKwkJd2hpbGUgKHRlc3RfYml0KF9fTElOS19TVEFURV9RRElTQ19SVU5OSU5HLCAmZGV2LT5zdGF0ZSkpCisJCQl5aWVsZCgpOworCisJCS8qCisJCSAqIERvdWJsZS1jaGVjayBpbnNpZGUgcXVldWUgbG9jayB0byBlbnN1cmUgdGhhdCBhbGwgZWZmZWN0cworCQkgKiBvZiB0aGUgcXVldWUgcnVuIGFyZSB2aXNpYmxlIHdoZW4gd2UgcmV0dXJuLgorCQkgKi8KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOworCQlydW5uaW5nID0gdGVzdF9iaXQoX19MSU5LX1NUQVRFX1FESVNDX1JVTk5JTkcsICZkZXYtPnN0YXRlKTsKKwkJc3Bpbl91bmxvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7CisKKwkJLyoKKwkJICogVGhlIHJ1bm5pbmcgZmxhZyBzaG91bGQgbmV2ZXIgYmUgc2V0IGF0IHRoaXMgcG9pbnQgYmVjYXVzZQorCQkgKiB3ZSd2ZSBhbHJlYWR5IHNldCBkZXYtPnFkaXNjIHRvIG5vb3BfcWRpc2MgKmluc2lkZSogdGhlIHNhbWUKKwkJICogcGFpciBvZiBzcGluIGxvY2tzLiAgVGhhdCBpcywgaWYgYW55IHFkaXNjX3J1biBzdGFydHMgYWZ0ZXIKKwkJICogb3VyIGluaXRpYWwgdGVzdCBpdCBzaG91bGQgc2VlIHRoZSBub29wX3FkaXNjIGFuZCB0aGVuCisJCSAqIGNsZWFyIHRoZSBSVU5OSU5HIGJpdCBiZWZvcmUgZHJvcHBpbmcgdGhlIHF1ZXVlIGxvY2suICBTbworCQkgKiBpZiBpdCBpcyBzZXQgaGVyZSB0aGVuIHdlJ3ZlIGZvdW5kIGEgYnVnLgorCQkgKi8KKwl9IHdoaWxlIChXQVJOX09OX09OQ0UocnVubmluZykpOwogfQogCiB2b2lkIGRldl9pbml0X3NjaGVkdWxlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zY2hlZC5jIGIvbmV0L3N1bnJwYy9zY2hlZC5jCmluZGV4IDNjNzczYzUuLmM5ODg3M2YgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc2NoZWQuYworKysgYi9uZXQvc3VucnBjL3NjaGVkLmMKQEAgLTg0Nyw3ICs4NDcsNyBAQAogCXRhc2stPnRrX3N0YXJ0ID0gamlmZmllczsKIAogCWRwcmludGsoIlJQQzogICAgICAgbmV3IHRhc2sgaW5pdGlhbGl6ZWQsIHByb2NwaWQgJXVcbiIsCi0JCQkJY3VycmVudC0+cGlkKTsKKwkJCQl0YXNrX3BpZF9ucihjdXJyZW50KSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcnBjX3Rhc2sgKgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zeXNjdGwuYyBiL25ldC9zdW5ycGMvc3lzY3RsLmMKaW5kZXggNzM4ZGIzMi4uODY0YjU0MWIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3lzY3RsLmMKKysrIGIvbmV0L3N1bnJwYy9zeXNjdGwuYwpAQCAtMTE0LDcgKzExNCw2IEBACiAKIHN0YXRpYyBjdGxfdGFibGUgZGVidWdfdGFibGVbXSA9IHsKIAl7Ci0JCS5jdGxfbmFtZQk9IENUTF9SUENERUJVRywKIAkJLnByb2NuYW1lCT0gInJwY19kZWJ1ZyIsCiAJCS5kYXRhCQk9ICZycGNfZGVidWcsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCkBAIC0xMjIsNyArMTIxLDYgQEAKIAkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvZGVidWcKIAl9LAogCXsKLQkJLmN0bF9uYW1lCT0gQ1RMX05GU0RFQlVHLAogCQkucHJvY25hbWUJPSAibmZzX2RlYnVnIiwKIAkJLmRhdGEJCT0gJm5mc19kZWJ1ZywKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKQEAgLTEzMCw3ICsxMjgsNiBAQAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9kZWJ1ZwogCX0sCiAJewotCQkuY3RsX25hbWUJPSBDVExfTkZTRERFQlVHLAogCQkucHJvY25hbWUJPSAibmZzZF9kZWJ1ZyIsCiAJCS5kYXRhCQk9ICZuZnNkX2RlYnVnLAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLApAQCAtMTM4LDcgKzEzNSw2IEBACiAJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2RlYnVnCiAJfSwKIAl7Ci0JCS5jdGxfbmFtZQk9IENUTF9OTE1ERUJVRywKIAkJLnByb2NuYW1lCT0gIm5sbV9kZWJ1ZyIsCiAJCS5kYXRhCQk9ICZubG1fZGVidWcsCiAJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCmRpZmYgLS1naXQgYS9uZXQvdW5peC9hZl91bml4LmMgYi9uZXQvdW5peC9hZl91bml4LmMKaW5kZXggNjk5NmNiYS4uOTE2M2VjNSAxMDA2NDQKLS0tIGEvbmV0L3VuaXgvYWZfdW5peC5jCisrKyBiL25ldC91bml4L2FmX3VuaXguYwpAQCAtNDgzLDcgKzQ4Myw3IEBACiAJc2stPnNrX21heF9hY2tfYmFja2xvZwk9IGJhY2tsb2c7CiAJc2stPnNrX3N0YXRlCQk9IFRDUF9MSVNURU47CiAJLyogc2V0IGNyZWRlbnRpYWxzIHNvIGNvbm5lY3QgY2FuIGNvcHkgdGhlbSAqLwotCXNrLT5za19wZWVyY3JlZC5waWQJPSBjdXJyZW50LT50Z2lkOworCXNrLT5za19wZWVyY3JlZC5waWQJPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpOwogCXNrLT5za19wZWVyY3JlZC51aWQJPSBjdXJyZW50LT5ldWlkOwogCXNrLT5za19wZWVyY3JlZC5naWQJPSBjdXJyZW50LT5lZ2lkOwogCWVyciA9IDA7CkBAIC0xMTMzLDcgKzExMzMsNyBAQAogCXVuaXhfcGVlcihuZXdzaykJPSBzazsKIAluZXdzay0+c2tfc3RhdGUJCT0gVENQX0VTVEFCTElTSEVEOwogCW5ld3NrLT5za190eXBlCQk9IHNrLT5za190eXBlOwotCW5ld3NrLT5za19wZWVyY3JlZC5waWQJPSBjdXJyZW50LT50Z2lkOworCW5ld3NrLT5za19wZWVyY3JlZC5waWQJPSB0YXNrX3RnaWRfdm5yKGN1cnJlbnQpOwogCW5ld3NrLT5za19wZWVyY3JlZC51aWQJPSBjdXJyZW50LT5ldWlkOwogCW5ld3NrLT5za19wZWVyY3JlZC5naWQJPSBjdXJyZW50LT5lZ2lkOwogCW5ld3UgPSB1bml4X3NrKG5ld3NrKTsKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJc29ja19ob2xkKHNrYik7CiAJdW5peF9wZWVyKHNrYSk9c2tiOwogCXVuaXhfcGVlcihza2IpPXNrYTsKLQlza2EtPnNrX3BlZXJjcmVkLnBpZCA9IHNrYi0+c2tfcGVlcmNyZWQucGlkID0gY3VycmVudC0+dGdpZDsKKwlza2EtPnNrX3BlZXJjcmVkLnBpZCA9IHNrYi0+c2tfcGVlcmNyZWQucGlkID0gdGFza190Z2lkX3ZucihjdXJyZW50KTsKIAlza2EtPnNrX3BlZXJjcmVkLnVpZCA9IHNrYi0+c2tfcGVlcmNyZWQudWlkID0gY3VycmVudC0+ZXVpZDsKIAlza2EtPnNrX3BlZXJjcmVkLmdpZCA9IHNrYi0+c2tfcGVlcmNyZWQuZ2lkID0gY3VycmVudC0+ZWdpZDsKIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IDExM2Y0NDQuLmNiOTdmZGEgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYworKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTQ5LDEzICs0OSwxNiBAQAogaW50IHhmcm1fcGFyc2Vfc3BpKHN0cnVjdCBza19idWZmICpza2IsIHU4IG5leHRoZHIsIF9fYmUzMiAqc3BpLCBfX2JlMzIgKnNlcSkKIHsKIAlpbnQgb2Zmc2V0LCBvZmZzZXRfc2VxOworCWludCBobGVuOwogCiAJc3dpdGNoIChuZXh0aGRyKSB7CiAJY2FzZSBJUFBST1RPX0FIOgorCQlobGVuID0gc2l6ZW9mKHN0cnVjdCBpcF9hdXRoX2hkcik7CiAJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpcF9hdXRoX2hkciwgc3BpKTsKIAkJb2Zmc2V0X3NlcSA9IG9mZnNldG9mKHN0cnVjdCBpcF9hdXRoX2hkciwgc2VxX25vKTsKIAkJYnJlYWs7CiAJY2FzZSBJUFBST1RPX0VTUDoKKwkJaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfZXNwX2hkcik7CiAJCW9mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBpcF9lc3BfaGRyLCBzcGkpOwogCQlvZmZzZXRfc2VxID0gb2Zmc2V0b2Yoc3RydWN0IGlwX2VzcF9oZHIsIHNlcV9ubyk7CiAJCWJyZWFrOwpAQCAtNjksNyArNzIsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCAxNikpCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaGxlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJKnNwaSA9ICooX19iZTMyKikoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIG9mZnNldCk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX291dHB1dC5jIGIvbmV0L3hmcm0veGZybV9vdXRwdXQuYwppbmRleCAwZWIzMzc3Li5mNGJmZDZjIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX291dHB1dC5jCisrKyBiL25ldC94ZnJtL3hmcm1fb3V0cHV0LmMKQEAgLTYzLDcgKzYzLDcgQEAKIAkJCQl4ZnJtX3JlcGxheV9ub3RpZnkoeCwgWEZSTV9SRVBMQVlfVVBEQVRFKTsKIAkJfQogCi0JCWVyciA9IHgtPm1vZGUtPm91dHB1dCh4LCBza2IpOworCQllcnIgPSB4LT5vdXRlcl9tb2RlLT5vdXRwdXQoeCwgc2tiKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiAKQEAgLTgyLDcgKzgyLDcgQEAKIAkJfQogCQlkc3QgPSBza2ItPmRzdDsKIAkJeCA9IGRzdC0+eGZybTsKLQl9IHdoaWxlICh4ICYmICh4LT5wcm9wcy5tb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwpKTsKKwl9IHdoaWxlICh4ICYmICEoeC0+b3V0ZXJfbW9kZS0+ZmxhZ3MgJiBYRlJNX01PREVfRkxBR19UVU5ORUwpKTsKIAogCWVyciA9IDA7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGFmMjdjMTkuLmI3MDJiZDggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKKysrIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwpAQCAtNDksOCArNDksNiBAQAogCiBzdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqeGZybV9wb2xpY3lfZ2V0X2FmaW5mbyh1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogc3RhdGljIHZvaWQgeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pOwotc3RhdGljIHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKnhmcm1fcG9saWN5X2xvY2tfYWZpbmZvKHVuc2lnbmVkIGludCBmYW1pbHkpOwotc3RhdGljIHZvaWQgeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8pOwogCiBzdGF0aWMgaW5saW5lIGludAogX194ZnJtNF9zZWxlY3Rvcl9tYXRjaChzdHJ1Y3QgeGZybV9zZWxlY3RvciAqc2VsLCBzdHJ1Y3QgZmxvd2kgKmZsKQpAQCAtODYsNzIgKzg0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHhmcm1fcmVnaXN0ZXJfdHlwZShzdHJ1Y3QgeGZybV90eXBlICp0eXBlLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCi17Ci0Jc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvID0geGZybV9wb2xpY3lfbG9ja19hZmluZm8oZmFtaWx5KTsKLQlzdHJ1Y3QgeGZybV90eXBlICoqdHlwZW1hcDsKLQlpbnQgZXJyID0gMDsKLQotCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCi0JCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCXR5cGVtYXAgPSBhZmluZm8tPnR5cGVfbWFwOwotCi0JaWYgKGxpa2VseSh0eXBlbWFwW3R5cGUtPnByb3RvXSA9PSBOVUxMKSkKLQkJdHlwZW1hcFt0eXBlLT5wcm90b10gPSB0eXBlOwotCWVsc2UKLQkJZXJyID0gLUVFWElTVDsKLQl4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7Ci0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0woeGZybV9yZWdpc3Rlcl90eXBlKTsKLQotaW50IHhmcm1fdW5yZWdpc3Rlcl90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKLXsKLQlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm8gPSB4ZnJtX3BvbGljeV9sb2NrX2FmaW5mbyhmYW1pbHkpOwotCXN0cnVjdCB4ZnJtX3R5cGUgKip0eXBlbWFwOwotCWludCBlcnIgPSAwOwotCi0JaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKLQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7Ci0JdHlwZW1hcCA9IGFmaW5mby0+dHlwZV9tYXA7Ci0KLQlpZiAodW5saWtlbHkodHlwZW1hcFt0eXBlLT5wcm90b10gIT0gdHlwZSkpCi0JCWVyciA9IC1FTk9FTlQ7Ci0JZWxzZQotCQl0eXBlbWFwW3R5cGUtPnByb3RvXSA9IE5VTEw7Ci0JeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhhZmluZm8pOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHhmcm1fdW5yZWdpc3Rlcl90eXBlKTsKLQotc3RydWN0IHhmcm1fdHlwZSAqeGZybV9nZXRfdHlwZSh1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQotewotCXN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbzsKLQlzdHJ1Y3QgeGZybV90eXBlICoqdHlwZW1hcDsKLQlzdHJ1Y3QgeGZybV90eXBlICp0eXBlOwotCWludCBtb2Rsb2FkX2F0dGVtcHRlZCA9IDA7Ci0KLXJldHJ5OgotCWFmaW5mbyA9IHhmcm1fcG9saWN5X2dldF9hZmluZm8oZmFtaWx5KTsKLQlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQotCQlyZXR1cm4gTlVMTDsKLQl0eXBlbWFwID0gYWZpbmZvLT50eXBlX21hcDsKLQotCXR5cGUgPSB0eXBlbWFwW3Byb3RvXTsKLQlpZiAodW5saWtlbHkodHlwZSAmJiAhdHJ5X21vZHVsZV9nZXQodHlwZS0+b3duZXIpKSkKLQkJdHlwZSA9IE5VTEw7Ci0JaWYgKCF0eXBlICYmICFtb2Rsb2FkX2F0dGVtcHRlZCkgewotCQl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7Ci0JCXJlcXVlc3RfbW9kdWxlKCJ4ZnJtLXR5cGUtJWQtJWQiLAotCQkJICAgICAgIChpbnQpIGZhbWlseSwgKGludCkgcHJvdG8pOwotCQltb2Rsb2FkX2F0dGVtcHRlZCA9IDE7Ci0JCWdvdG8gcmV0cnk7Ci0JfQotCi0JeGZybV9wb2xpY3lfcHV0X2FmaW5mbyhhZmluZm8pOwotCXJldHVybiB0eXBlOwotfQotCiBpbnQgeGZybV9kc3RfbG9va3VwKHN0cnVjdCB4ZnJtX2RzdCAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCwKIAkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKQEAgLTE3MCw5NCArMTAyLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9kc3RfbG9va3VwKTsKIAotdm9pZCB4ZnJtX3B1dF90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUpCi17Ci0JbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7Ci19Ci0KLWludCB4ZnJtX3JlZ2lzdGVyX21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSwgaW50IGZhbWlseSkKLXsKLQlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87Ci0Jc3RydWN0IHhmcm1fbW9kZSAqKm1vZGVtYXA7Ci0JaW50IGVycjsKLQotCWlmICh1bmxpa2VseShtb2RlLT5lbmNhcCA+PSBYRlJNX01PREVfTUFYKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlhZmluZm8gPSB4ZnJtX3BvbGljeV9sb2NrX2FmaW5mbyhmYW1pbHkpOwotCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCi0JCXJldHVybiAtRUFGTk9TVVBQT1JUOwotCi0JZXJyID0gLUVFWElTVDsKLQltb2RlbWFwID0gYWZpbmZvLT5tb2RlX21hcDsKLQlpZiAobGlrZWx5KG1vZGVtYXBbbW9kZS0+ZW5jYXBdID09IE5VTEwpKSB7Ci0JCW1vZGVtYXBbbW9kZS0+ZW5jYXBdID0gbW9kZTsKLQkJZXJyID0gMDsKLQl9Ci0KLQl4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7Ci0JcmV0dXJuIGVycjsKLX0KLUVYUE9SVF9TWU1CT0woeGZybV9yZWdpc3Rlcl9tb2RlKTsKLQotaW50IHhmcm1fdW5yZWdpc3Rlcl9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUsIGludCBmYW1pbHkpCi17Ci0Jc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvOwotCXN0cnVjdCB4ZnJtX21vZGUgKiptb2RlbWFwOwotCWludCBlcnI7Ci0KLQlpZiAodW5saWtlbHkobW9kZS0+ZW5jYXAgPj0gWEZSTV9NT0RFX01BWCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JYWZpbmZvID0geGZybV9wb2xpY3lfbG9ja19hZmluZm8oZmFtaWx5KTsKLQlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQotCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKLQotCWVyciA9IC1FTk9FTlQ7Ci0JbW9kZW1hcCA9IGFmaW5mby0+bW9kZV9tYXA7Ci0JaWYgKGxpa2VseShtb2RlbWFwW21vZGUtPmVuY2FwXSA9PSBtb2RlKSkgewotCQltb2RlbWFwW21vZGUtPmVuY2FwXSA9IE5VTEw7Ci0JCWVyciA9IDA7Ci0JfQotCi0JeGZybV9wb2xpY3lfdW5sb2NrX2FmaW5mbyhhZmluZm8pOwotCXJldHVybiBlcnI7Ci19Ci1FWFBPUlRfU1lNQk9MKHhmcm1fdW5yZWdpc3Rlcl9tb2RlKTsKLQotc3RydWN0IHhmcm1fbW9kZSAqeGZybV9nZXRfbW9kZSh1bnNpZ25lZCBpbnQgZW5jYXAsIGludCBmYW1pbHkpCi17Ci0Jc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqYWZpbmZvOwotCXN0cnVjdCB4ZnJtX21vZGUgKm1vZGU7Ci0JaW50IG1vZGxvYWRfYXR0ZW1wdGVkID0gMDsKLQotCWlmICh1bmxpa2VseShlbmNhcCA+PSBYRlJNX01PREVfTUFYKSkKLQkJcmV0dXJuIE5VTEw7Ci0KLXJldHJ5OgotCWFmaW5mbyA9IHhmcm1fcG9saWN5X2dldF9hZmluZm8oZmFtaWx5KTsKLQlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQotCQlyZXR1cm4gTlVMTDsKLQotCW1vZGUgPSBhZmluZm8tPm1vZGVfbWFwW2VuY2FwXTsKLQlpZiAodW5saWtlbHkobW9kZSAmJiAhdHJ5X21vZHVsZV9nZXQobW9kZS0+b3duZXIpKSkKLQkJbW9kZSA9IE5VTEw7Ci0JaWYgKCFtb2RlICYmICFtb2Rsb2FkX2F0dGVtcHRlZCkgewotCQl4ZnJtX3BvbGljeV9wdXRfYWZpbmZvKGFmaW5mbyk7Ci0JCXJlcXVlc3RfbW9kdWxlKCJ4ZnJtLW1vZGUtJWQtJWQiLCBmYW1pbHksIGVuY2FwKTsKLQkJbW9kbG9hZF9hdHRlbXB0ZWQgPSAxOwotCQlnb3RvIHJldHJ5OwotCX0KLQotCXhmcm1fcG9saWN5X3B1dF9hZmluZm8oYWZpbmZvKTsKLQlyZXR1cm4gbW9kZTsKLX0KLQotdm9pZCB4ZnJtX3B1dF9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUpCi17Ci0JbW9kdWxlX3B1dChtb2RlLT5vd25lcik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBtYWtlX2ppZmZpZXMobG9uZyBzZWNzKQogewogCWlmIChzZWNzID49IChNQVhfU0NIRURVTEVfVElNRU9VVC0xKS9IWikKQEAgLTIwOTYsNyArMTk0MCw4IEBACiAJCWlmICh4ZHN0LT5nZW5pZCAhPSBkc3QtPnhmcm0tPmdlbmlkKQogCQkJcmV0dXJuIDA7CiAKLQkJaWYgKHN0cmljdCAmJiBmbCAmJiBkc3QtPnhmcm0tPnByb3BzLm1vZGUgIT0gWEZSTV9NT0RFX1RVTk5FTCAmJgorCQlpZiAoc3RyaWN0ICYmIGZsICYmCisJCSAgICAhKGRzdC0+eGZybS0+b3V0ZXJfbW9kZS0+ZmxhZ3MgJiBYRlJNX01PREVfRkxBR19UVU5ORUwpICYmCiAJCSAgICAheGZybV9zdGF0ZV9hZGRyX2Zsb3dfY2hlY2soZHN0LT54ZnJtLCBmbCwgZmFtaWx5KSkKIAkJCXJldHVybiAwOwogCkBAIC0yMjEzLDIzICsyMDU4LDYgQEAKIAlyZWFkX3VubG9jaygmeGZybV9wb2xpY3lfYWZpbmZvX2xvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IHhmcm1fcG9saWN5X2FmaW5mbyAqeGZybV9wb2xpY3lfbG9ja19hZmluZm8odW5zaWduZWQgaW50IGZhbWlseSkKLXsKLQlzdHJ1Y3QgeGZybV9wb2xpY3lfYWZpbmZvICphZmluZm87Ci0JaWYgKHVubGlrZWx5KGZhbWlseSA+PSBOUFJPVE8pKQotCQlyZXR1cm4gTlVMTDsKLQl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9hZmluZm9fbG9jayk7Ci0JYWZpbmZvID0geGZybV9wb2xpY3lfYWZpbmZvW2ZhbWlseV07Ci0JaWYgKHVubGlrZWx5KCFhZmluZm8pKQotCQl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKLQlyZXR1cm4gYWZpbmZvOwotfQotCi1zdGF0aWMgdm9pZCB4ZnJtX3BvbGljeV91bmxvY2tfYWZpbmZvKHN0cnVjdCB4ZnJtX3BvbGljeV9hZmluZm8gKmFmaW5mbykKLXsKLQl3cml0ZV91bmxvY2tfYmgoJnhmcm1fcG9saWN5X2FmaW5mb19sb2NrKTsKLX0KLQogc3RhdGljIGludCB4ZnJtX2Rldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHRyOwpAQCAtMjQ2NCw3ICsyMjkyLDggQEAKIAkJCWlmICghbWlncmF0ZV90bXBsX21hdGNoKG1wLCAmcG9sLT54ZnJtX3ZlY1tpXSkpCiAJCQkJY29udGludWU7CiAJCQluKys7Ci0JCQlpZiAocG9sLT54ZnJtX3ZlY1tpXS5tb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwpCisJCQlpZiAocG9sLT54ZnJtX3ZlY1tpXS5tb2RlICE9IFhGUk1fTU9ERV9UVU5ORUwgJiYKKwkJCSAgICBwb2wtPnhmcm1fdmVjW2ldLm1vZGUgIT0gWEZSTV9NT0RFX0JFRVQpCiAJCQkJY29udGludWU7CiAJCQkvKiB1cGRhdGUgZW5kcG9pbnRzICovCiAJCQltZW1jcHkoJnBvbC0+eGZybV92ZWNbaV0uaWQuZGFkZHIsICZtcC0+bmV3X2RhZGRyLApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IDM0NGYwYTYuLjIyNGI0NGUgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTU3LDYgKzU3LDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgeGZybV9zdGF0ZV9udW07CiBzdGF0aWMgdW5zaWduZWQgaW50IHhmcm1fc3RhdGVfZ2VuaWQ7CiAKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKnhmcm1fc3RhdGVfZ2V0X2FmaW5mbyh1bnNpZ25lZCBpbnQgZmFtaWx5KTsKK3N0YXRpYyB2b2lkIHhmcm1fc3RhdGVfcHV0X2FmaW5mbyhzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbyk7CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHhmcm1fZHN0X2hhc2goeGZybV9hZGRyZXNzX3QgKmRhZGRyLAogCQkJCQkgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAogCQkJCQkgdTMyIHJlcWlkLApAQCAtMTg3LDYgKzE5MCwxODQgQEAKIGludCBrbV9xdWVyeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1fdG1wbCAqdCwgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wpOwogdm9pZCBrbV9zdGF0ZV9leHBpcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgaGFyZCwgdTMyIHBpZCk7CiAKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKnhmcm1fc3RhdGVfbG9ja19hZmluZm8odW5zaWduZWQgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbzsKKwlpZiAodW5saWtlbHkoZmFtaWx5ID49IE5QUk9UTykpCisJCXJldHVybiBOVUxMOworCXdyaXRlX2xvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOworCWFmaW5mbyA9IHhmcm1fc3RhdGVfYWZpbmZvW2ZhbWlseV07CisJaWYgKHVubGlrZWx5KCFhZmluZm8pKQorCQl3cml0ZV91bmxvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOworCXJldHVybiBhZmluZm87Cit9CisKK3N0YXRpYyB2b2lkIHhmcm1fc3RhdGVfdW5sb2NrX2FmaW5mbyhzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbykKK3sKKwl3cml0ZV91bmxvY2tfYmgoJnhmcm1fc3RhdGVfYWZpbmZvX2xvY2spOworfQorCitpbnQgeGZybV9yZWdpc3Rlcl90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbyA9IHhmcm1fc3RhdGVfbG9ja19hZmluZm8oZmFtaWx5KTsKKwlzdHJ1Y3QgeGZybV90eXBlICoqdHlwZW1hcDsKKwlpbnQgZXJyID0gMDsKKworCWlmICh1bmxpa2VseShhZmluZm8gPT0gTlVMTCkpCisJCXJldHVybiAtRUFGTk9TVVBQT1JUOworCXR5cGVtYXAgPSBhZmluZm8tPnR5cGVfbWFwOworCisJaWYgKGxpa2VseSh0eXBlbWFwW3R5cGUtPnByb3RvXSA9PSBOVUxMKSkKKwkJdHlwZW1hcFt0eXBlLT5wcm90b10gPSB0eXBlOworCWVsc2UKKwkJZXJyID0gLUVFWElTVDsKKwl4ZnJtX3N0YXRlX3VubG9ja19hZmluZm8oYWZpbmZvKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh4ZnJtX3JlZ2lzdGVyX3R5cGUpOworCitpbnQgeGZybV91bnJlZ2lzdGVyX3R5cGUoc3RydWN0IHhmcm1fdHlwZSAqdHlwZSwgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvID0geGZybV9zdGF0ZV9sb2NrX2FmaW5mbyhmYW1pbHkpOworCXN0cnVjdCB4ZnJtX3R5cGUgKip0eXBlbWFwOworCWludCBlcnIgPSAwOworCisJaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJdHlwZW1hcCA9IGFmaW5mby0+dHlwZV9tYXA7CisKKwlpZiAodW5saWtlbHkodHlwZW1hcFt0eXBlLT5wcm90b10gIT0gdHlwZSkpCisJCWVyciA9IC1FTk9FTlQ7CisJZWxzZQorCQl0eXBlbWFwW3R5cGUtPnByb3RvXSA9IE5VTEw7CisJeGZybV9zdGF0ZV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woeGZybV91bnJlZ2lzdGVyX3R5cGUpOworCitzdGF0aWMgc3RydWN0IHhmcm1fdHlwZSAqeGZybV9nZXRfdHlwZSh1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KQoreworCXN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvOworCXN0cnVjdCB4ZnJtX3R5cGUgKip0eXBlbWFwOworCXN0cnVjdCB4ZnJtX3R5cGUgKnR5cGU7CisJaW50IG1vZGxvYWRfYXR0ZW1wdGVkID0gMDsKKworcmV0cnk6CisJYWZpbmZvID0geGZybV9zdGF0ZV9nZXRfYWZpbmZvKGZhbWlseSk7CisJaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisJdHlwZW1hcCA9IGFmaW5mby0+dHlwZV9tYXA7CisKKwl0eXBlID0gdHlwZW1hcFtwcm90b107CisJaWYgKHVubGlrZWx5KHR5cGUgJiYgIXRyeV9tb2R1bGVfZ2V0KHR5cGUtPm93bmVyKSkpCisJCXR5cGUgPSBOVUxMOworCWlmICghdHlwZSAmJiAhbW9kbG9hZF9hdHRlbXB0ZWQpIHsKKwkJeGZybV9zdGF0ZV9wdXRfYWZpbmZvKGFmaW5mbyk7CisJCXJlcXVlc3RfbW9kdWxlKCJ4ZnJtLXR5cGUtJWQtJWQiLCBmYW1pbHksIHByb3RvKTsKKwkJbW9kbG9hZF9hdHRlbXB0ZWQgPSAxOworCQlnb3RvIHJldHJ5OworCX0KKworCXhmcm1fc3RhdGVfcHV0X2FmaW5mbyhhZmluZm8pOworCXJldHVybiB0eXBlOworfQorCitzdGF0aWMgdm9pZCB4ZnJtX3B1dF90eXBlKHN0cnVjdCB4ZnJtX3R5cGUgKnR5cGUpCit7CisJbW9kdWxlX3B1dCh0eXBlLT5vd25lcik7Cit9CisKK2ludCB4ZnJtX3JlZ2lzdGVyX21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSwgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbzsKKwlzdHJ1Y3QgeGZybV9tb2RlICoqbW9kZW1hcDsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KG1vZGUtPmVuY2FwID49IFhGUk1fTU9ERV9NQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFmaW5mbyA9IHhmcm1fc3RhdGVfbG9ja19hZmluZm8oZmFtaWx5KTsKKwlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKworCWVyciA9IC1FRVhJU1Q7CisJbW9kZW1hcCA9IGFmaW5mby0+bW9kZV9tYXA7CisJaWYgKG1vZGVtYXBbbW9kZS0+ZW5jYXBdKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FTk9FTlQ7CisJaWYgKCF0cnlfbW9kdWxlX2dldChhZmluZm8tPm93bmVyKSkKKwkJZ290byBvdXQ7CisKKwltb2RlLT5hZmluZm8gPSBhZmluZm87CisJbW9kZW1hcFttb2RlLT5lbmNhcF0gPSBtb2RlOworCWVyciA9IDA7CisKK291dDoKKwl4ZnJtX3N0YXRlX3VubG9ja19hZmluZm8oYWZpbmZvKTsKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTCh4ZnJtX3JlZ2lzdGVyX21vZGUpOworCitpbnQgeGZybV91bnJlZ2lzdGVyX21vZGUoc3RydWN0IHhmcm1fbW9kZSAqbW9kZSwgaW50IGZhbWlseSkKK3sKKwlzdHJ1Y3QgeGZybV9zdGF0ZV9hZmluZm8gKmFmaW5mbzsKKwlzdHJ1Y3QgeGZybV9tb2RlICoqbW9kZW1hcDsKKwlpbnQgZXJyOworCisJaWYgKHVubGlrZWx5KG1vZGUtPmVuY2FwID49IFhGUk1fTU9ERV9NQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWFmaW5mbyA9IHhmcm1fc3RhdGVfbG9ja19hZmluZm8oZmFtaWx5KTsKKwlpZiAodW5saWtlbHkoYWZpbmZvID09IE5VTEwpKQorCQlyZXR1cm4gLUVBRk5PU1VQUE9SVDsKKworCWVyciA9IC1FTk9FTlQ7CisJbW9kZW1hcCA9IGFmaW5mby0+bW9kZV9tYXA7CisJaWYgKGxpa2VseShtb2RlbWFwW21vZGUtPmVuY2FwXSA9PSBtb2RlKSkgeworCQltb2RlbWFwW21vZGUtPmVuY2FwXSA9IE5VTEw7CisJCW1vZHVsZV9wdXQobW9kZS0+YWZpbmZvLT5vd25lcik7CisJCWVyciA9IDA7CisJfQorCisJeGZybV9zdGF0ZV91bmxvY2tfYWZpbmZvKGFmaW5mbyk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0woeGZybV91bnJlZ2lzdGVyX21vZGUpOworCitzdGF0aWMgc3RydWN0IHhmcm1fbW9kZSAqeGZybV9nZXRfbW9kZSh1bnNpZ25lZCBpbnQgZW5jYXAsIGludCBmYW1pbHkpCit7CisJc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87CisJc3RydWN0IHhmcm1fbW9kZSAqbW9kZTsKKwlpbnQgbW9kbG9hZF9hdHRlbXB0ZWQgPSAwOworCisJaWYgKHVubGlrZWx5KGVuY2FwID49IFhGUk1fTU9ERV9NQVgpKQorCQlyZXR1cm4gTlVMTDsKKworcmV0cnk6CisJYWZpbmZvID0geGZybV9zdGF0ZV9nZXRfYWZpbmZvKGZhbWlseSk7CisJaWYgKHVubGlrZWx5KGFmaW5mbyA9PSBOVUxMKSkKKwkJcmV0dXJuIE5VTEw7CisKKwltb2RlID0gYWZpbmZvLT5tb2RlX21hcFtlbmNhcF07CisJaWYgKHVubGlrZWx5KG1vZGUgJiYgIXRyeV9tb2R1bGVfZ2V0KG1vZGUtPm93bmVyKSkpCisJCW1vZGUgPSBOVUxMOworCWlmICghbW9kZSAmJiAhbW9kbG9hZF9hdHRlbXB0ZWQpIHsKKwkJeGZybV9zdGF0ZV9wdXRfYWZpbmZvKGFmaW5mbyk7CisJCXJlcXVlc3RfbW9kdWxlKCJ4ZnJtLW1vZGUtJWQtJWQiLCBmYW1pbHksIGVuY2FwKTsKKwkJbW9kbG9hZF9hdHRlbXB0ZWQgPSAxOworCQlnb3RvIHJldHJ5OworCX0KKworCXhmcm1fc3RhdGVfcHV0X2FmaW5mbyhhZmluZm8pOworCXJldHVybiBtb2RlOworfQorCitzdGF0aWMgdm9pZCB4ZnJtX3B1dF9tb2RlKHN0cnVjdCB4ZnJtX21vZGUgKm1vZGUpCit7CisJbW9kdWxlX3B1dChtb2RlLT5vd25lcik7Cit9CisKIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGVfZ2NfZGVzdHJveShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKIAlkZWxfdGltZXJfc3luYygmeC0+dGltZXIpOwpAQCAtMTk2LDggKzM3NywxMCBAQAogCWtmcmVlKHgtPmNhbGcpOwogCWtmcmVlKHgtPmVuY2FwKTsKIAlrZnJlZSh4LT5jb2FkZHIpOwotCWlmICh4LT5tb2RlKQotCQl4ZnJtX3B1dF9tb2RlKHgtPm1vZGUpOworCWlmICh4LT5pbm5lcl9tb2RlKQorCQl4ZnJtX3B1dF9tb2RlKHgtPmlubmVyX21vZGUpOworCWlmICh4LT5vdXRlcl9tb2RlKQorCQl4ZnJtX3B1dF9tb2RlKHgtPm91dGVyX21vZGUpOwogCWlmICh4LT50eXBlKSB7CiAJCXgtPnR5cGUtPmRlc3RydWN0b3IoeCk7CiAJCXhmcm1fcHV0X3R5cGUoeC0+dHlwZSk7CkBAIC0xNjk5LDcgKzE4ODIsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3VucmVnaXN0ZXJfYWZpbmZvKTsKIAotc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICp4ZnJtX3N0YXRlX2dldF9hZmluZm8odW5zaWduZWQgc2hvcnQgZmFtaWx5KQorc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqeGZybV9zdGF0ZV9nZXRfYWZpbmZvKHVuc2lnbmVkIGludCBmYW1pbHkpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGVfYWZpbmZvICphZmluZm87CiAJaWYgKHVubGlrZWx5KGZhbWlseSA+PSBOUFJPVE8pKQpAQCAtMTcxMSwxNCArMTg5NCwxMSBAQAogCXJldHVybiBhZmluZm87CiB9CiAKLXZvaWQgeGZybV9zdGF0ZV9wdXRfYWZpbmZvKHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvKQorc3RhdGljIHZvaWQgeGZybV9zdGF0ZV9wdXRfYWZpbmZvKHN0cnVjdCB4ZnJtX3N0YXRlX2FmaW5mbyAqYWZpbmZvKQogewogCXJlYWRfdW5sb2NrKCZ4ZnJtX3N0YXRlX2FmaW5mb19sb2NrKTsKIH0KIAotRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2dldF9hZmluZm8pOwotRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX3B1dF9hZmluZm8pOwotCiAvKiBUZW1wb3JhcmlseSBsb2NhdGVkIGhlcmUgdW50aWwgbmV0L3hmcm0veGZybV90dW5uZWwuYyBpcyBjcmVhdGVkICovCiB2b2lkIHhmcm1fc3RhdGVfZGVsZXRlX3R1bm5lbChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKQEAgLTE3NjksNiArMTk0OSwxNCBAQAogCQlnb3RvIGVycm9yOwogCiAJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKKwl4LT5pbm5lcl9tb2RlID0geGZybV9nZXRfbW9kZSh4LT5wcm9wcy5tb2RlLCB4LT5zZWwuZmFtaWx5KTsKKwlpZiAoeC0+aW5uZXJfbW9kZSA9PSBOVUxMKQorCQlnb3RvIGVycm9yOworCisJaWYgKCEoeC0+aW5uZXJfbW9kZS0+ZmxhZ3MgJiBYRlJNX01PREVfRkxBR19UVU5ORUwpICYmCisJICAgIGZhbWlseSAhPSB4LT5zZWwuZmFtaWx5KQorCQlnb3RvIGVycm9yOworCiAJeC0+dHlwZSA9IHhmcm1fZ2V0X3R5cGUoeC0+aWQucHJvdG8sIGZhbWlseSk7CiAJaWYgKHgtPnR5cGUgPT0gTlVMTCkKIAkJZ290byBlcnJvcjsKQEAgLTE3NzcsOCArMTk2NSw4IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAotCXgtPm1vZGUgPSB4ZnJtX2dldF9tb2RlKHgtPnByb3BzLm1vZGUsIGZhbWlseSk7Ci0JaWYgKHgtPm1vZGUgPT0gTlVMTCkKKwl4LT5vdXRlcl9tb2RlID0geGZybV9nZXRfbW9kZSh4LT5wcm9wcy5tb2RlLCBmYW1pbHkpOworCWlmICh4LT5vdXRlcl9tb2RlID09IE5VTEwpCiAJCWdvdG8gZXJyb3I7CiAKIAl4LT5rbS5zdGF0ZSA9IFhGUk1fU1RBVEVfVkFMSUQ7CmRpZmYgLS1naXQgYS9zYW1wbGVzL0tjb25maWcgYi9zYW1wbGVzL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiYjIyMwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvS2NvbmZpZwpAQCAtMCwwICsxLDE2IEBACisjIHNhbXBsZXMvS2NvbmZpZworCittZW51Y29uZmlnIFNBTVBMRVMKKwlib29sICJTYW1wbGUga2VybmVsIGNvZGUiCisJaGVscAorCSAgWW91IGNhbiBidWlsZCBhbmQgdGVzdCBzYW1wbGUga2VybmVsIGNvZGUgaGVyZS4KKworaWYgU0FNUExFUworCitjb25maWcgU0FNUExFX01BUktFUlMKKwl0cmlzdGF0ZSAiQnVpbGQgbWFya2VycyBleGFtcGxlcyAtLSBsb2FkYWJsZSBtb2R1bGVzIG9ubHkiCisJZGVwZW5kcyBvbiBNQVJLRVJTICYmIG0KKwloZWxwCisJICBUaGlzIGJ1aWxkIG1hcmtlcnMgZXhhbXBsZSBtb2R1bGVzLgorCitlbmRpZiAjIFNBTVBMRVMKZGlmZiAtLWdpdCBhL3NhbXBsZXMvTWFrZWZpbGUgYi9zYW1wbGVzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGYwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL01ha2VmaWxlCkBAIC0wLDAgKzEsMyBAQAorIyBNYWtlZmlsZSBmb3IgTGludXggc2FtcGxlcyBjb2RlCisKK29iai0kKENPTkZJR19TQU1QTEVTKQkrPSBtYXJrZXJzLwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9tYXJrZXJzL01ha2VmaWxlIGIvc2FtcGxlcy9tYXJrZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNzIzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL21hcmtlcnMvTWFrZWZpbGUKQEAgLTAsMCArMSw0IEBACisjIGJ1aWxkcyB0aGUga3Byb2JlcyBleGFtcGxlIGtlcm5lbCBtb2R1bGVzOworIyB0aGVuIHRvIHVzZSBvbmUgKGFzIHJvb3QpOiAgaW5zbW9kIDxtb2R1bGVfbmFtZS5rbz4KKworb2JqLSQoQ09ORklHX1NBTVBMRV9NQVJLRVJTKSArPSBwcm9iZS1leGFtcGxlLm8gbWFya2VyLWV4YW1wbGUubwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9tYXJrZXJzL21hcmtlci1leGFtcGxlLmMgYi9zYW1wbGVzL21hcmtlcnMvbWFya2VyLWV4YW1wbGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzg3YzZkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9tYXJrZXJzL21hcmtlci1leGFtcGxlLmMKQEAgLTAsMCArMSw1NCBAQAorLyogbWFya2VyLWV4YW1wbGUuYworICoKKyAqIEV4ZWN1dGVzIGEgbWFya2VyIHdoZW4gL3Byb2MvbWFya2VyLWV4YW1wbGUgaXMgb3BlbmVkLgorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwNyBNYXRoaWV1IERlc25veWVycyA8bWF0aGlldS5kZXNub3llcnNAcG9seW10bC5jYT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbWFya2VyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKK3N0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGVudHJ5X2V4YW1wbGU7CisKK3N0YXRpYyBpbnQgbXlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgaTsKKworCXRyYWNlX21hcmsoc3Vic3lzdGVtX2V2ZW50LCAiJWQgJXMiLCAxMjMsICJleGFtcGxlIHN0cmluZyIpOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKQorCQl0cmFjZV9tYXJrKHN1YnN5c3RlbV9ldmVudGIsIE1BUktfTk9BUkdTKTsKKwlyZXR1cm4gLUVQRVJNOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXJrX29wcyA9IHsKKwkub3BlbiA9IG15X29wZW4sCit9OworCitzdGF0aWMgaW50IGV4YW1wbGVfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0FMRVJUICJleGFtcGxlIGluaXRcbiIpOworCXBlbnRyeV9leGFtcGxlID0gY3JlYXRlX3Byb2NfZW50cnkoIm1hcmtlci1leGFtcGxlIiwgMDQ0NCwgTlVMTCk7CisJaWYgKHBlbnRyeV9leGFtcGxlKQorCQlwZW50cnlfZXhhbXBsZS0+cHJvY19mb3BzID0gJm1hcmtfb3BzOworCWVsc2UKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXhhbXBsZV9leGl0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fQUxFUlQgImV4YW1wbGUgZXhpdFxuIik7CisJcmVtb3ZlX3Byb2NfZW50cnkoIm1hcmtlci1leGFtcGxlIiwgTlVMTCk7Cit9CisKK21vZHVsZV9pbml0KGV4YW1wbGVfaW5pdCkKK21vZHVsZV9leGl0KGV4YW1wbGVfZXhpdCkKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWF0aGlldSBEZXNub3llcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWFya2VyIGV4YW1wbGUiKTsKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbWFya2Vycy9wcm9iZS1leGFtcGxlLmMgYi9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzOGIyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL21hcmtlcnMvcHJvYmUtZXhhbXBsZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qIHByb2JlLWV4YW1wbGUuYworICoKKyAqIENvbm5lY3RzIHR3byBmdW5jdGlvbnMgdG8gbWFya2VyIGNhbGwgc2l0ZXMuCisgKgorICogKEMpIENvcHlyaWdodCAyMDA3IE1hdGhpZXUgRGVzbm95ZXJzIDxtYXRoaWV1LmRlc25veWVyc0Bwb2x5bXRsLmNhPgorICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCisgKiBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21hcmtlci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IHByb2JlX2RhdGEgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqZm9ybWF0OworCW1hcmtlcl9wcm9iZV9mdW5jICpwcm9iZV9mdW5jOworfTsKKwordm9pZCBwcm9iZV9zdWJzeXN0ZW1fZXZlbnQoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsIHZvaWQgKnByaXZhdGUsCisJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwkvKiBEZWNsYXJlIGFyZ3MgKi8KKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJY29uc3QgY2hhciAqbXlzdHI7CisKKwkvKiBBc3NpZ24gYXJncyAqLworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZhbHVlID0gdmFfYXJnKGFwLCB0eXBlb2YodmFsdWUpKTsKKwlteXN0ciA9IHZhX2FyZyhhcCwgdHlwZW9mKG15c3RyKSk7CisKKwkvKiBDYWxsIHByaW50ayAqLworCXByaW50ayhLRVJOX0RFQlVHICJWYWx1ZSAldSwgc3RyaW5nICVzXG4iLCB2YWx1ZSwgbXlzdHIpOworCisJLyogb3IgY291bnQsIGNoZWNrIHJpZ2h0cywgc2VyaWFsaXplIGRhdGEgaW4gYSBidWZmZXIgKi8KKworCXZhX2VuZChhcCk7Cit9CisKK2F0b21pY190IGV2ZW50Yl9jb3VudCA9IEFUT01JQ19JTklUKDApOworCit2b2lkIHByb2JlX3N1YnN5c3RlbV9ldmVudGIoY29uc3Qgc3RydWN0IG1hcmtlciAqbWRhdGEsIHZvaWQgKnByaXZhdGUsCisJY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJLyogSW5jcmVtZW50IGNvdW50ZXIgKi8KKwlhdG9taWNfaW5jKCZldmVudGJfY291bnQpOworfQorCitzdGF0aWMgc3RydWN0IHByb2JlX2RhdGEgcHJvYmVfYXJyYXlbXSA9Cit7CisJewkubmFtZSA9ICJzdWJzeXN0ZW1fZXZlbnQiLAorCQkuZm9ybWF0ID0gIiVkICVzIiwKKwkJLnByb2JlX2Z1bmMgPSBwcm9iZV9zdWJzeXN0ZW1fZXZlbnQgfSwKKwl7CS5uYW1lID0gInN1YnN5c3RlbV9ldmVudGIiLAorCQkuZm9ybWF0ID0gTUFSS19OT0FSR1MsCisJCS5wcm9iZV9mdW5jID0gcHJvYmVfc3Vic3lzdGVtX2V2ZW50YiB9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgcHJvYmVfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwcm9iZV9hcnJheSk7IGkrKykgeworCQlyZXN1bHQgPSBtYXJrZXJfcHJvYmVfcmVnaXN0ZXIocHJvYmVfYXJyYXlbaV0ubmFtZSwKKwkJCQlwcm9iZV9hcnJheVtpXS5mb3JtYXQsCisJCQkJcHJvYmVfYXJyYXlbaV0ucHJvYmVfZnVuYywgJnByb2JlX2FycmF5W2ldKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXByaW50ayhLRVJOX0lORk8gIlVuYWJsZSB0byByZWdpc3RlciBwcm9iZSAlc1xuIiwKKwkJCQlwcm9iZV9hcnJheVtpXS5uYW1lKTsKKwkJcmVzdWx0ID0gbWFya2VyX2FybShwcm9iZV9hcnJheVtpXS5uYW1lKTsKKwkJaWYgKHJlc3VsdCkKKwkJCXByaW50ayhLRVJOX0lORk8gIlVuYWJsZSB0byBhcm0gcHJvYmUgJXNcbiIsCisJCQkJcHJvYmVfYXJyYXlbaV0ubmFtZSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHJvYmVfZmluaSh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHJvYmVfYXJyYXkpOyBpKyspCisJCW1hcmtlcl9wcm9iZV91bnJlZ2lzdGVyKHByb2JlX2FycmF5W2ldLm5hbWUpOworCXByaW50ayhLRVJOX0lORk8gIk51bWJlciBvZiBldmVudCBiIDogJXVcbiIsCisJCQlhdG9taWNfcmVhZCgmZXZlbnRiX2NvdW50KSk7Cit9CisKK21vZHVsZV9pbml0KHByb2JlX2luaXQpOworbW9kdWxlX2V4aXQocHJvYmVfZmluaSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1hdGhpZXUgRGVzbm95ZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNVQlNZU1RFTSBQcm9iZSIpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZSBiL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKaW5kZXggZGU3YmIyOC4uYjk2ZWE4ZCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQorKysgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCkBAIC01Niw2ICs1NiwxNyBAQAogIyBnY2Mgc3VwcG9ydCBmdW5jdGlvbnMKICMgU2VlIGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAogCisjIGNjLWNyb3NzLXByZWZpeAorIyBVc2FnZTogQ1JPU1NfQ09NUElMRSA6PSAkKGNhbGwgY2MtY3Jvc3MtcHJlZml4LCBtNjhrLWxpbnV4LWdudS0gbTY4ay1saW51eC0pCisjIFJldHVybiBmaXJzdCBwcmVmaXggd2hlcmUgYSBwcmVmaXgkKENDKSBpcyBmb3VuZCBpbiBQQVRILgorIyBJZiBubyAkKENDKSBmb3VuZCBpbiBQQVRIIHdpdGggbGlzdGVkIHByZWZpeGVzIHJldHVybiBub3RoaW5nCitjYy1jcm9zcy1wcmVmaXggPSAgXAorCSQod29yZCAxLCAkKGZvcmVhY2ggYywkKDEpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkkKHNoZWxsIHNldCAtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmICh3aGljaCAkKHN0cmlwICQoYykpJChDQykpID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuIFwKKwkJCWVjaG8gJChjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWZpKSkpCisKICMgb3V0cHV0IGRpcmVjdG9yeSBmb3IgdGVzdHMgYmVsb3cKIFRNUE9VVCA6PSAkKGlmICQoS0JVSUxEX0VYVE1PRCksJChmaXJzdHdvcmQgJChLQlVJTERfRVhUTU9EKSkvKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2RvY3Byb2MuYyBiL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCmluZGV4IGU1YzZhYzcuLjBlNGJkNTQgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCkBAIC02NiwxMiArNjYsMTUgQEAKICNkZWZpbmUgRlVOQ1RJT04gICAgICAiLWZ1bmN0aW9uIgogI2RlZmluZSBOT0ZVTkNUSU9OICAgICItbm9mdW5jdGlvbiIKIAorY2hhciAqc3JjdHJlZTsKKwogdm9pZCB1c2FnZSAodm9pZCkKIHsKIAlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBkb2Nwcm9jIHtkb2N8ZGVwZW5kfSBmaWxlXG4iKTsKIAlmcHJpbnRmKHN0ZGVyciwgIklucHV0IGlzIHJlYWQgZnJvbSBmaWxlLnRtcGwuIE91dHB1dCBpcyBzZW50IHRvIHN0ZG91dFxuIik7CiAJZnByaW50ZihzdGRlcnIsICJkb2M6IGZyb250ZW5kIHdoZW4gZ2VuZXJhdGluZyBrZXJuZWwgZG9jdW1lbnRhdGlvblxuIik7CiAJZnByaW50ZihzdGRlcnIsICJkZXBlbmQ6IGdlbmVyYXRlIGxpc3Qgb2YgZmlsZXMgcmVmZXJlbmNlZCB3aXRoaW4gZmlsZVxuIik7CisJZnByaW50ZihzdGRlcnIsICJFbnZpcm9ubWVudCB2YXJpYWJsZSBTUkNUUkVFOiBhYnNvbHV0ZSBwYXRoIHRvIGtlcm5lbCBzb3VyY2UgdHJlZS5cbiIpOwogfQogCiAvKgpAQCAtOTAsNyArOTMsNyBAQAogCQkJZXhpdCgxKTsKIAkJY2FzZSAgMDoKIAkJCW1lbXNldChyZWFsX2ZpbGVuYW1lLCAwLCBzaXplb2YocmVhbF9maWxlbmFtZSkpOwotCQkJc3RybmNhdChyZWFsX2ZpbGVuYW1lLCBnZXRlbnYoIlNSQ1RSRUUiKSwgUEFUSF9NQVgpOworCQkJc3RybmNhdChyZWFsX2ZpbGVuYW1lLCBzcmN0cmVlLCBQQVRIX01BWCk7CiAJCQlzdHJuY2F0KHJlYWxfZmlsZW5hbWUsIEtFUk5FTERPQ1BBVEggS0VSTkVMRE9DLAogCQkJCQlQQVRIX01BWCAtIHN0cmxlbihyZWFsX2ZpbGVuYW1lKSk7CiAJCQlleGVjdnAocmVhbF9maWxlbmFtZSwgc3ZlYyk7CkBAIC0xNzEsNyArMTc0LDcgQEAKIAlpZiAoZmlsZW5hbWVfZXhpc3QoZmlsZW5hbWUpID09IE5VTEwpIHsKIAkJY2hhciByZWFsX2ZpbGVuYW1lW1BBVEhfTUFYICsgMV07CiAJCW1lbXNldChyZWFsX2ZpbGVuYW1lLCAwLCBzaXplb2YocmVhbF9maWxlbmFtZSkpOwotCQlzdHJuY2F0KHJlYWxfZmlsZW5hbWUsIGdldGVudigiU1JDVFJFRSIpLCBQQVRIX01BWCk7CisJCXN0cm5jYXQocmVhbF9maWxlbmFtZSwgc3JjdHJlZSwgUEFUSF9NQVgpOwogCQlzdHJuY2F0KHJlYWxfZmlsZW5hbWUsIGZpbGVuYW1lLAogCQkJCVBBVEhfTUFYIC0gc3RybGVuKHJlYWxfZmlsZW5hbWUpKTsKIAkJc3ltID0gYWRkX25ld19maWxlKGZpbGVuYW1lKTsKQEAgLTMzOCw2ICszNDEsMTAgQEAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJRklMRSAqIGluZmlsZTsKKworCXNyY3RyZWUgPSBnZXRlbnYoIlNSQ1RSRUUiKTsKKwlpZiAoIXNyY3RyZWUpCisJCXNyY3RyZWUgPSBnZXRjd2QoTlVMTCwgMCk7CiAJaWYgKGFyZ2MgIT0gMykgewogCQl1c2FnZSgpOwogCQlleGl0KDEpOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsIGIvc2NyaXB0cy9jaGVja3BhdGNoLnBsCmluZGV4IDU5YWQ4M2MuLmNiYjQyNTggMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2twYXRjaC5wbAorKysgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKQEAgLTksNyArOSw3IEBACiBteSAkUCA9ICQwOwogJFAgPX4gc0AuKi9AQGc7CiAKLW15ICRWID0gJzAuMTAnOworbXkgJFYgPSAnMC4xMSc7CiAKIHVzZSBHZXRvcHQ6OkxvbmcgcXcoOmNvbmZpZyBub19hdXRvX2FiYnJldik7CiAKQEAgLTE4LDEyICsxOCwyMSBAQAogbXkgJGNoa19zaWdub2ZmID0gMTsKIG15ICRjaGtfcGF0Y2ggPSAxOwogbXkgJHRzdF90eXBlID0gMDsKK215ICRlbWFjcyA9IDA7CitteSAkZmlsZSA9IDA7CitteSAkY2hlY2sgPSAwOworbXkgJHJvb3Q7CiBHZXRPcHRpb25zKAotCSdxfHF1aWV0Jwk9PiBcJHF1aWV0LAorCSdxfHF1aWV0KycJPT4gXCRxdWlldCwKIAkndHJlZSEnCQk9PiBcJHRyZWUsCiAJJ3NpZ25vZmYhJwk9PiBcJGNoa19zaWdub2ZmLAogCSdwYXRjaCEnCT0+IFwkY2hrX3BhdGNoLAogCSd0ZXN0LXR5cGUhJwk9PiBcJHRzdF90eXBlLAorCSdlbWFjcyEnCT0+IFwkZW1hY3MsCisJJ2ZpbGUhJwkJPT4gXCRmaWxlLAorCSdzdWJqZWN0aXZlIScJPT4gXCRjaGVjaywKKwknc3RyaWN0IScJPT4gXCRjaGVjaywKKwkncm9vdD1zJwk9PiBcJHJvb3QsCiApIG9yIGV4aXQ7CiAKIG15ICRleGl0ID0gMDsKQEAgLTMzLDE5ICs0MiwxMTAgQEAKIAlwcmludCAidmVyc2lvbjogJFZcbiI7CiAJcHJpbnQgIm9wdGlvbnM6IC1xICAgICAgICAgICA9PiBxdWlldFxuIjsKIAlwcmludCAiICAgICAgICAgLS1uby10cmVlICAgID0+IHJ1biB3aXRob3V0IGEga2VybmVsIHRyZWVcbiI7CisJcHJpbnQgIiAgICAgICAgIC0tZW1hY3MgICAgICA9PiBlbWFjcyBjb21waWxlIHdpbmRvdyBmb3JtYXRcbiI7CisJcHJpbnQgIiAgICAgICAgIC0tZmlsZSAgICAgICA9PiBjaGVjayBhIHNvdXJjZSBmaWxlXG4iOworCXByaW50ICIgICAgICAgICAtLXN0cmljdCAgICAgPT4gZW5hYmxlIG1vcmUgc3ViamVjdGl2ZSB0ZXN0c1xuIjsKKwlwcmludCAiICAgICAgICAgLS1yb290ICAgICAgID0+IHBhdGggdG8gdGhlIGtlcm5lbCB0cmVlIHJvb3RcbiI7CiAJZXhpdCgxKTsKIH0KIAotaWYgKCR0cmVlICYmICF0b3Bfb2Zfa2VybmVsX3RyZWUoKSkgewotCXByaW50ICJNdXN0IGJlIHJ1biBmcm9tIHRoZSB0b3AtbGV2ZWwgZGlyLiBvZiBhIGtlcm5lbCB0cmVlXG4iOwotCWV4aXQoMik7CitpZiAoJHRyZWUpIHsKKwlpZiAoZGVmaW5lZCAkcm9vdCkgeworCQlpZiAoIXRvcF9vZl9rZXJuZWxfdHJlZSgkcm9vdCkpIHsKKwkJCWRpZSAiJFA6ICRyb290OiAtLXJvb3QgZG9lcyBub3QgcG9pbnQgYXQgYSB2YWxpZCB0cmVlXG4iOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHRvcF9vZl9rZXJuZWxfdHJlZSgnLicpKSB7CisJCQkkcm9vdCA9ICcuJzsKKwkJfSBlbHNpZiAoJDAgPX4gbUAoLiopL3NjcmlwdHMvW14vXSokQCAmJgorCQkJCQkJdG9wX29mX2tlcm5lbF90cmVlKCQxKSkgeworCQkJJHJvb3QgPSAkMTsKKwkJfQorCX0KKworCWlmICghZGVmaW5lZCAkcm9vdCkgeworCQlwcmludCAiTXVzdCBiZSBydW4gZnJvbSB0aGUgdG9wLWxldmVsIGRpci4gb2YgYSBrZXJuZWwgdHJlZVxuIjsKKwkJZXhpdCgyKTsKKwl9CiB9CiAKK215ICRlbWl0dGVkX2NvcnJ1cHQgPSAwOworCitvdXIgJElkZW50ICAgICAgID0gcXJ7W0EtWmEtel9dW0EtWmEtelxkX10qfTsKK291ciAkU3RvcmFnZQk9IHFye2V4dGVybnxzdGF0aWN8YXNtbGlua2FnZX07CitvdXIgJFNwYXJzZQk9IHFyeworCQkJX191c2VyfAorCQkJX19rZXJuZWx8CisJCQlfX2ZvcmNlfAorCQkJX19pb21lbXwKKwkJCV9fbXVzdF9jaGVja3wKKwkJCV9faW5pdF9yZWZva3wKKwkJCV9fa3Byb2Jlc3wKKwkJCWZhc3RjYWxsCisJCX14Oworb3VyICRBdHRyaWJ1dGUJPSBxcnsKKwkJCWNvbnN0fAorCQkJX19yZWFkX21vc3RseXwKKwkJCV9fa3Byb2Jlc3wKKwkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXQpCisJCSAgfXg7CitvdXIgJElubGluZQk9IHFye2lubGluZXxfX2Fsd2F5c19pbmxpbmV8bm9pbmxpbmV9Oworb3VyICROb25wdHJUeXBlCT0gcXJ7CisJCQlcYgorCQkJKD86Y29uc3RccyspPworCQkJKD86dW5zaWduZWRccyspPworCQkJKD86CisJCQkJdm9pZHwKKwkJCQljaGFyfAorCQkJCXNob3J0fAorCQkJCWludHwKKwkJCQlsb25nfAorCQkJCXVuc2lnbmVkfAorCQkJCWZsb2F0fAorCQkJCWRvdWJsZXwKKwkJCQlib29sfAorCQkJCWxvbmdccytpbnR8CisJCQkJbG9uZ1xzK2xvbmd8CisJCQkJbG9uZ1xzK2xvbmdccytpbnR8CisJCQkJKD86X18pPyg/OnV8c3xiZXxsZSkoPzo4fDE2fDMyfDY0KXwKKwkJCQlzdHJ1Y3RccyskSWRlbnR8CisJCQkJdW5pb25ccyskSWRlbnR8CisJCQkJZW51bVxzKyRJZGVudHwKKwkJCQkke0lkZW50fV90fAorCQkJCSR7SWRlbnR9X2hhbmRsZXJ8CisJCQkJJHtJZGVudH1faGFuZGxlcl9mbgorCQkJKQorCQkJKD86XHMrJFNwYXJzZSkqCisJCQlcYgorCQkgIH14OworCitvdXIgJFR5cGUJPSBxcnsKKwkJCVxiJE5vbnB0clR5cGVcYgorCQkJKD86XHMqXCorXHMqY29uc3R8XHMqXCorfCg/OlxzKlxbXHMqXF0pKyk/CisJCQkoPzpccyskU3BhcnNlfFxzKyRBdHRyaWJ1dGUpKgorCQkgIH14Oworb3VyICREZWNsYXJlCT0gcXJ7KD86JFN0b3JhZ2VccyspPyRUeXBlfTsKK291ciAkTWVtYmVyCT0gcXJ7LT4kSWRlbnR8XC4kSWRlbnR8XFtbXl1dKlxdfTsKK291ciAkTHZhbAk9IHFyeyRJZGVudCg/OiRNZW1iZXIpKn07CisKK291ciAkQ29uc3RhbnQJPSBxcnsoPzpbMC05XSt8MHhbMC05YS1mQS1GXSspW1VMXSp9Oworb3VyICRBc3NpZ25tZW50CT0gcXJ7KD86XCpcPXwvPXwlPXxcKz18LT18PDw9fD4+PXwmPXxcXj18XHw9fD0pfTsKK291ciAkT3BlcmF0b3JzCT0gcXJ7CisJCQk8PXw+PXw9PXwhPXwKKwkJCT0+fC0+fDw8fD4+fDx8PnwhfH58CisJCQkmJnxcfFx8fCx8XF58XCtcK3wtLXwmfFx8fFwrfC18XCp8XC8KKwkJICB9eDsKKworb3VyICRCYXJlID0gJyc7CisKKyRjaGtfc2lnbm9mZiA9IDAgaWYgKCRmaWxlKTsKKwogbXkgQGRlcF9pbmNsdWRlcyA9ICgpOwogbXkgQGRlcF9mdW5jdGlvbnMgPSAoKTsKLW15ICRyZW1vdmFsID0gJ0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCc7Ci1pZiAoJHRyZWUgJiYgLWYgJHJlbW92YWwpIHsKLQlvcGVuKFJFTU9WRSwgIjwkcmVtb3ZhbCIpIHx8IGRpZSAiJFA6ICRyZW1vdmFsOiBvcGVuIGZhaWxlZCAtICQhXG4iOworbXkgJHJlbW92YWwgPSAiRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IjsKK2lmICgkdHJlZSAmJiAtZiAiJHJvb3QvJHJlbW92YWwiKSB7CisJb3BlbihSRU1PVkUsICI8JHJvb3QvJHJlbW92YWwiKSB8fAorCQkJCWRpZSAiJFA6ICRyZW1vdmFsOiBvcGVuIGZhaWxlZCAtICQhXG4iOwogCXdoaWxlICg8UkVNT1ZFPikgewogCQlpZiAoL15DaGVjazpccysoLipcUykvKSB7CiAJCQlmb3IgbXkgJGVudHJ5IChzcGxpdCgvWywgXSsvLCAkMSkpIHsKQEAgLTYxLDI4ICsxNjEsNDIgQEAKIH0KIAogbXkgQHJhd2xpbmVzID0gKCk7Ci13aGlsZSAoPD4pIHsKLQljaG9tcDsKLQlwdXNoKEByYXdsaW5lcywgJF8pOwotCWlmIChlb2YoQVJHVikpIHsKLQkJaWYgKCFwcm9jZXNzKCRBUkdWLCBAcmF3bGluZXMpKSB7Ci0JCQkkZXhpdCA9IDE7Ci0JCX0KLQkJQHJhd2xpbmVzID0gKCk7Citmb3IgbXkgJGZpbGVuYW1lIChAQVJHVikgeworCWlmICgkZmlsZSkgeworCQlvcGVuKEZJTEUsICJkaWZmIC11IC9kZXYvbnVsbCAkZmlsZW5hbWV8IikgfHwKKwkJCWRpZSAiJFA6ICRmaWxlbmFtZTogZGlmZiBmYWlsZWQgLSAkIVxuIjsKKwl9IGVsc2UgeworCQlvcGVuKEZJTEUsICI8JGZpbGVuYW1lIikgfHwKKwkJCWRpZSAiJFA6ICRmaWxlbmFtZTogb3BlbiBmYWlsZWQgLSAkIVxuIjsKIAl9CisJd2hpbGUgKDxGSUxFPikgeworCQljaG9tcDsKKwkJcHVzaChAcmF3bGluZXMsICRfKTsKKwl9CisJY2xvc2UoRklMRSk7CisJaWYgKCFwcm9jZXNzKCRmaWxlbmFtZSwgQHJhd2xpbmVzKSkgeworCQkkZXhpdCA9IDE7CisJfQorCUByYXdsaW5lcyA9ICgpOwogfQogCiBleGl0KCRleGl0KTsKIAogc3ViIHRvcF9vZl9rZXJuZWxfdHJlZSB7Ci0JaWYgKCgtZiAiQ09QWUlORyIpICYmICgtZiAiQ1JFRElUUyIpICYmICgtZiAiS2J1aWxkIikgJiYKLQkgICAgKC1mICJNQUlOVEFJTkVSUyIpICYmICgtZiAiTWFrZWZpbGUiKSAmJiAoLWYgIlJFQURNRSIpICYmCi0JICAgICgtZCAiRG9jdW1lbnRhdGlvbiIpICYmICgtZCAiYXJjaCIpICYmICgtZCAiaW5jbHVkZSIpICYmCi0JICAgICgtZCAiZHJpdmVycyIpICYmICgtZCAiZnMiKSAmJiAoLWQgImluaXQiKSAmJiAoLWQgImlwYyIpICYmCi0JICAgICgtZCAia2VybmVsIikgJiYgKC1kICJsaWIiKSAmJiAoLWQgInNjcmlwdHMiKSkgewotCQlyZXR1cm4gMTsKKwlteSAoJHJvb3QpID0gQF87CisKKwlteSBAdHJlZV9jaGVjayA9ICgKKwkJIkNPUFlJTkciLCAiQ1JFRElUUyIsICJLYnVpbGQiLCAiTUFJTlRBSU5FUlMiLCAiTWFrZWZpbGUiLAorCQkiUkVBRE1FIiwgIkRvY3VtZW50YXRpb24iLCAiYXJjaCIsICJpbmNsdWRlIiwgImRyaXZlcnMiLAorCQkiZnMiLCAiaW5pdCIsICJpcGMiLCAia2VybmVsIiwgImxpYiIsICJzY3JpcHRzIiwKKwkpOworCisJZm9yZWFjaCBteSAkY2hlY2sgKEB0cmVlX2NoZWNrKSB7CisJCWlmICghIC1lICRyb290IC4gJy8nIC4gJGNoZWNrKSB7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKIH0KIAogc3ViIGV4cGFuZF90YWJzIHsKQEAgLTEwNSw2ICsyMTksMjAgQEAKIAogCXJldHVybiAkcmVzOwogfQorc3ViIGNvcHlfc3BhY2luZyB7CisJbXkgKCRzdHIpID0gQF87CisKKwlteSAkcmVzID0gJyc7CisJZm9yIG15ICRjIChzcGxpdCgvLywgJHN0cikpIHsKKwkJaWYgKCRjIGVxICJcdCIpIHsKKwkJCSRyZXMgLj0gJGM7CisJCX0gZWxzZSB7CisJCQkkcmVzIC49ICcgJzsKKwkJfQorCX0KKworCXJldHVybiAkcmVzOworfQogCiBzdWIgbGluZV9zdGF0cyB7CiAJbXkgKCRsaW5lKSA9IEBfOwpAQCAtMjYwLDQ3ICszODgsMTM4IEBACiAJcmV0dXJuICgkY210IG5lICcnKTsKIH0KIAotc3ViIGN0eF9leHByX2JlZm9yZSB7Ci0JbXkgKCRsaW5lKSA9IEBfOwotCi0JIyNwcmludCAiQ0hFQ0s8JGxpbmU+XG4iOwotCi0JbXkgJHBvcyA9IGxlbmd0aCgkbGluZSkgLSAxOwotCW15ICRjb3VudCA9IDA7Ci0JbXkgJGM7Ci0KLQlmb3IgKDsgJHBvcyA+PSAwOyAkcG9zLS0pIHsKLQkJJGMgPSBzdWJzdHIoJGxpbmUsICRwb3MsIDEpOwotCQkjI3ByaW50ICJDSEVDSzogYzwkYz4gY291bnQ8JGNvdW50PlxuIjsKLQkJaWYgKCRjIGVxICcpJykgewotCQkJJGNvdW50Kys7Ci0JCX0gZWxzaWYgKCRjIGVxICcoJykgewotCQkJbGFzdCBpZiAoLS0kY291bnQgPT0gMCk7Ci0JCX0KLQl9Ci0KLQkjI3ByaW50ICJDSEVDSzogcmVzdWx0PCIgLiBzdWJzdHIoJGxpbmUsIDAsICRwb3MpIC4gIj5cbiI7Ci0KLQlyZXR1cm4gc3Vic3RyKCRsaW5lLCAwLCAkcG9zKTsKLX0KLQogc3ViIGNhdF92ZXQgewogCW15ICgkdmV0KSA9IEBfOwogCW15ICgkcmVzLCAkY29kZWQpOwogCiAJJHJlcyA9ICcnOwotCXdoaWxlICgkdmV0ID1+IC8oW15bOmNudHJsOl1dKikoW1s6Y250cmw6XV0pL2cpIHsKLQkJJGNvZGVkID0gc3ByaW50ZigiXiVjIiwgdW5wYWNrKCdDJywgJDIpICsgNjQpOwotCQkkcmVzIC49ICQxIC4gJGNvZGVkOworCXdoaWxlICgkdmV0ID1+IC8oW15bOmNudHJsOl1dKikoW1s6Y250cmw6XV18JCkvZykgeworCQkkcmVzIC49ICQxOworCQlpZiAoJDIgbmUgJycpIHsKKwkJCSRjb2RlZCA9IHNwcmludGYoIl4lYyIsIHVucGFjaygnQycsICQyKSArIDY0KTsKKwkJCSRyZXMgLj0gJGNvZGVkOworCQl9CiAJfQogCSRyZXMgPX4gcy8kL1wkLzsKIAogCXJldHVybiAkcmVzOwogfQogCitzdWIgYW5ub3RhdGVfdmFsdWVzIHsKKwlteSAoJHN0cmVhbSwgJHR5cGUpID0gQF87CisKKwlteSAkcmVzOworCW15ICRjdXIgPSAkc3RyZWFtOworCisJbXkgJGRlYnVnID0gMDsKKworCXByaW50ICIkc3RyZWFtXG4iIGlmICgkZGVidWcpOworCisJIyNteSAkdHlwZSA9ICdOJzsKKwlteSAkcG9zID0gMDsKKwlteSAkcHJlcHJvY2Vzc29yID0gMDsKKwlteSAkcGFyZW4gPSAwOworCW15IEBwYXJlbl90eXBlOworCisJIyBJbmNsdWRlIGFueSB1c2VyIGRlZmluZWQgdHlwZXMgd2UgbWF5IGhhdmUgZm91bmQgYXMgd2Ugd2VudC4KKwlteSAkdHlwZV9tYXRjaCA9ICIoPzokVHlwZSRCYXJlKSI7CisKKwl3aGlsZSAobGVuZ3RoKCRjdXIpKSB7CisJCXByaW50ICIgPCR0eXBlPiAiIGlmICgkZGVidWcpOworCQlpZiAoJGN1ciA9fiAvXihccyspL28pIHsKKwkJCXByaW50ICJXUygkMSlcbiIgaWYgKCRkZWJ1Zyk7CisJCQlpZiAoJDEgPX4gL1xuLyAmJiAkcHJlcHJvY2Vzc29yKSB7CisJCQkJJHByZXByb2Nlc3NvciA9IDA7CisJCQkJJHR5cGUgPSAnTic7CisJCQl9CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkdHlwZV9tYXRjaCkvKSB7CisJCQlwcmludCAiREVDTEFSRSgkMSlcbiIgaWYgKCRkZWJ1Zyk7CisJCQkkdHlwZSA9ICdUJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKCNccypkZWZpbmVccyokSWRlbnQpKFwoPykvbykgeworCQkJcHJpbnQgIkRFRklORSgkMSlcbiIgaWYgKCRkZWJ1Zyk7CisJCQkkcHJlcHJvY2Vzc29yID0gMTsKKwkJCSRwYXJlbl90eXBlWyRwYXJlbl0gPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigjXHMqKD86aWZkZWZ8aWZuZGVmfGlmfGVsc2V8ZW5kaWYpKS9vKSB7CisJCQlwcmludCAiUFJFKCQxKVxuIiBpZiAoJGRlYnVnKTsKKwkJCSRwcmVwcm9jZXNzb3IgPSAxOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcXFxuKS9vKSB7CisJCQlwcmludCAiUFJFQ09OVCgkMSlcbiIgaWYgKCRkZWJ1Zyk7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihzaXplb2YpXHMqKFwoKT8vbykgeworCQkJcHJpbnQgIlNJWkVPRigkMSlcbiIgaWYgKCRkZWJ1Zyk7CisJCQlpZiAoZGVmaW5lZCAkMikgeworCQkJCSRwYXJlbl90eXBlWyRwYXJlbl0gPSAnVic7CisJCQl9CisJCQkkdHlwZSA9ICdOJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKGlmfHdoaWxlfHR5cGVvZilcYi9vKSB7CisJCQlwcmludCAiQ09ORCgkMSlcbiIgaWYgKCRkZWJ1Zyk7CisJCQkkcGFyZW5fdHlwZVskcGFyZW5dID0gJ04nOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fi9eKHJldHVybnxjYXNlfGVsc2UpL28pIHsKKwkJCXByaW50ICJLRVlXT1JEKCQxKVxuIiBpZiAoJGRlYnVnKTsKKwkJCSR0eXBlID0gJ04nOworCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oXCgpL28pIHsKKwkJCXByaW50ICJQQVJFTignJDEnKVxuIiBpZiAoJGRlYnVnKTsKKwkJCSRwYXJlbisrOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXihcKSkvbykgeworCQkJJHBhcmVuLS0gaWYgKCRwYXJlbiA+IDApOworCQkJaWYgKGRlZmluZWQgJHBhcmVuX3R5cGVbJHBhcmVuXSkgeworCQkJCSR0eXBlID0gJHBhcmVuX3R5cGVbJHBhcmVuXTsKKwkJCQl1bmRlZiAkcGFyZW5fdHlwZVskcGFyZW5dOworCQkJCXByaW50ICJQQVJFTignJDEnKSAtPiAkdHlwZVxuIiBpZiAoJGRlYnVnKTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnQgIlBBUkVOKCckMScpXG4iIGlmICgkZGVidWcpOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gL14oJElkZW50KVwoL28pIHsKKwkJCXByaW50ICJGVU5DKCQxKVxuIiBpZiAoJGRlYnVnKTsKKwkJCSRwYXJlbl90eXBlWyRwYXJlbl0gPSAnVic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkSWRlbnR8JENvbnN0YW50KS9vKSB7CisJCQlwcmludCAiSURFTlQoJDEpXG4iIGlmICgkZGVidWcpOworCQkJJHR5cGUgPSAnVic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkQXNzaWdubWVudCkvbykgeworCQkJcHJpbnQgIkFTU0lHTigkMSlcbiIgaWYgKCRkZWJ1Zyk7CisJCQkkdHlwZSA9ICdOJzsKKworCQl9IGVsc2lmICgkY3VyID1+IC9eKDt8e3x9fFw/fDp8XFspL28pIHsKKwkJCXByaW50ICJFTkQoJDEpXG4iIGlmICgkZGVidWcpOworCQkJJHR5cGUgPSAnTic7CisKKwkJfSBlbHNpZiAoJGN1ciA9fiAvXigkT3BlcmF0b3JzKS9vKSB7CisJCQlwcmludCAiT1AoJDEpXG4iIGlmICgkZGVidWcpOworCQkJaWYgKCQxIG5lICcrKycgJiYgJDEgbmUgJy0tJykgeworCQkJCSR0eXBlID0gJ04nOworCQkJfQorCisJCX0gZWxzaWYgKCRjdXIgPX4gLyheLikvbykgeworCQkJcHJpbnQgIkMoJDEpXG4iIGlmICgkZGVidWcpOworCQl9CisJCWlmIChkZWZpbmVkICQxKSB7CisJCQkkY3VyID0gc3Vic3RyKCRjdXIsIGxlbmd0aCgkMSkpOworCQkJJHJlcyAuPSAkdHlwZSB4IGxlbmd0aCgkMSk7CisJCX0KKwl9CisKKwlyZXR1cm4gJHJlczsKK30KKworbXkgJHByZWZpeCA9ICcnOworCiBteSBAcmVwb3J0ID0gKCk7CiBzdWIgcmVwb3J0IHsKLQlwdXNoKEByZXBvcnQsICRfWzBdKTsKKwlwdXNoKEByZXBvcnQsICRwcmVmaXggLiAkX1swXSk7CiB9CiBzdWIgcmVwb3J0X2R1bXAgewogCUByZXBvcnQ7CkBAIC0zMDgsMTQgKzUyNywxOSBAQAogc3ViIEVSUk9SIHsKIAlyZXBvcnQoIkVSUk9SOiAkX1swXVxuIik7CiAJb3VyICRjbGVhbiA9IDA7CisJb3VyICRjbnRfZXJyb3IrKzsKIH0KIHN1YiBXQVJOIHsKIAlyZXBvcnQoIldBUk5JTkc6ICRfWzBdXG4iKTsKIAlvdXIgJGNsZWFuID0gMDsKKwlvdXIgJGNudF93YXJuKys7CiB9CiBzdWIgQ0hLIHsKLQlyZXBvcnQoIkNIRUNLOiAkX1swXVxuIik7Ci0Jb3VyICRjbGVhbiA9IDA7CisJaWYgKCRjaGVjaykgeworCQlyZXBvcnQoIkNIRUNLOiAkX1swXVxuIik7CisJCW91ciAkY2xlYW4gPSAwOworCQlvdXIgJGNudF9jaGsrKzsKKwl9CiB9CiAKIHN1YiBwcm9jZXNzIHsKQEAgLTMzNSw2ICs1NTksMTEgQEAKIAlteSAkc2lnbm9mZiA9IDA7CiAJbXkgJGlzX3BhdGNoID0gMDsKIAorCW91ciAkY250X2xpbmVzID0gMDsKKwlvdXIgJGNudF9lcnJvciA9IDA7CisJb3VyICRjbnRfd2FybiA9IDA7CisJb3VyICRjbnRfY2hrID0gMDsKKwogCSMgVHJhY2UgdGhlIHJlYWwgZmlsZS9saW5lIGFzIHdlIGdvLgogCW15ICRyZWFsZmlsZSA9ICcnOwogCW15ICRyZWFsbGluZSA9IDA7CkBAIC0zNDMsNjIgKzU3MiwxMCBAQAogCW15ICRpbl9jb21tZW50ID0gMDsKIAlteSAkZmlyc3RfbGluZSA9IDA7CiAKLQlteSAkSWRlbnQJPSBxcntbQS1aYS16XGRfXSt9OwotCW15ICRTdG9yYWdlCT0gcXJ7ZXh0ZXJufHN0YXRpY3xhc21saW5rYWdlfTsKLQlteSAkU3BhcnNlCT0gcXJ7Ci0JCQkJX191c2VyfAotCQkJCV9fa2VybmVsfAotCQkJCV9fZm9yY2V8Ci0JCQkJX19pb21lbXwKLQkJCQlfX211c3RfY2hlY2t8Ci0JCQkJX19pbml0X3JlZm9rfAotCQkJCWZhc3RjYWxsCi0JCQl9eDsKLQlteSAkSW5saW5lCT0gcXJ7aW5saW5lfF9fYWx3YXlzX2lubGluZXxub2lubGluZX07Ci0JbXkgJE5vbnB0clR5cGUJPSBxcnsKLQkJCQlcYgotCQkJCSg/OmNvbnN0XHMrKT8KLQkJCQkoPzp1bnNpZ25lZFxzKyk/Ci0JCQkJKD86Ci0JCQkJCXZvaWR8Ci0JCQkJCWNoYXJ8Ci0JCQkJCXNob3J0fAotCQkJCQlpbnR8Ci0JCQkJCWxvbmd8Ci0JCQkJCXVuc2lnbmVkfAotCQkJCQlmbG9hdHwKLQkJCQkJZG91YmxlfAotCQkJCQlib29sfAotCQkJCQlsb25nXHMraW50fAotCQkJCQlsb25nXHMrbG9uZ3wKLQkJCQkJbG9uZ1xzK2xvbmdccytpbnR8Ci0JCQkJCXU4fHUxNnx1MzJ8dTY0fAotCQkJCQlzOHxzMTZ8czMyfHM2NHwKLQkJCQkJc3RydWN0XHMrJElkZW50fAotCQkJCQl1bmlvblxzKyRJZGVudHwKLQkJCQkJZW51bVxzKyRJZGVudHwKLQkJCQkJJHtJZGVudH1fdAotCQkJCSkKLQkJCQkoPzpccyskU3BhcnNlKSoKLQkJCQlcYgotCQkJICB9eDsKLQlteSAkVHlwZQk9IHFyewotCQkJCVxiJE5vbnB0clR5cGVcYgotCQkJCSg/OlxzKlwqK1xzKmNvbnN0fFxzKlwqK3woPzpccypcW1xzKlxdKSspPwotCQkJCSg/OlxzKyRTcGFyc2UpKgotCQkJICB9eDsKLQlteSAkRGVjbGFyZQk9IHFyeyg/OiRTdG9yYWdlXHMrKT8kVHlwZX07Ci0JbXkgJEF0dHJpYnV0ZQk9IHFyewotCQkJCWNvbnN0fAotCQkJCV9fcmVhZF9tb3N0bHl8Ci0JCQkJX18oPzptZW18Y3B1fGRldnwpKD86aW5pdGRhdGF8aW5pdCkKLQkJCSAgfXg7Ci0JbXkgJE1lbWJlcgk9IHFyey0+JElkZW50fFwuJElkZW50fFxbW15dXSpcXX07Ci0JbXkgJEx2YWwJPSBxcnskSWRlbnQoPzokTWVtYmVyKSp9OworCW15ICRwcmV2X3ZhbHVlcyA9ICdOJzsKIAogCSMgUG9zc2libGUgYmFyZSB0eXBlcy4KIAlteSBAYmFyZSA9ICgpOwotCW15ICRCYXJlID0gJE5vbnB0clR5cGU7CiAKIAkjIFByZS1zY2FuIHRoZSBwYXRjaCBsb29raW5nIGZvciBhbnkgX19zZXR1cCBkb2N1bWVudGF0aW9uLgogCW15IEBzZXR1cF9kb2NzID0gKCk7CkBAIC00MTcsMTEgKzU5NCwxNCBAQAogCQl9CiAJfQogCisJJHByZWZpeCA9ICcnOworCiAJZm9yZWFjaCBteSAkbGluZSAoQGxpbmVzKSB7CiAJCSRsaW5lbnIrKzsKIAogCQlteSAkcmF3bGluZSA9ICRsaW5lOwogCisKICNleHRyYWN0IHRoZSBmaWxlbmFtZSBhcyBpdCBwYXNzZXMKIAkJaWYgKCRsaW5lPX4vXlwrXCtcK1xzKyhcUyspLykgewogCQkJJHJlYWxmaWxlPSQxOwpAQCAtNDMwLDcgKzYxMCw3IEBACiAJCQluZXh0OwogCQl9CiAjZXh0cmFjdCB0aGUgbGluZSByYW5nZSBpbiB0aGUgZmlsZSBhZnRlciB0aGUgcGF0Y2ggaXMgYXBwbGllZAotCQlpZiAoJGxpbmU9fi9eXEBcQCAtXGQrLFxkKyBcKyhcZCspKCwoXGQrKSk/IFxAXEAvKSB7CisJCWlmICgkbGluZT1+L15cQFxAIC1cZCsoPzosXGQrKT8gXCsoXGQrKSgsKFxkKykpPyBcQFxALykgewogCQkJJGlzX3BhdGNoID0gMTsKIAkJCSRmaXJzdF9saW5lID0gJGxpbmVuciArIDE7CiAJCQkkaW5fY29tbWVudCA9IDA7CkBAIC00NDAsNiArNjIwLDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJJHJlYWxjbnQ9MSsxOwogCQkJfQorCQkJJHByZXZfdmFsdWVzID0gJ04nOwogCQkJbmV4dDsKIAkJfQogCkBAIC00NzMsMTggKzY1NCwyNCBAQAogCQkJIyBUcmFjayB0aGUgcHJldmlvdXMgbGluZS4KIAkJCSgkcHJldmxpbmUsICRzdGFzaGxpbmUpID0gKCRzdGFzaGxpbmUsICRsaW5lKTsKIAkJCSgkcHJldmluZGVudCwgJHN0YXNoaW5kZW50KSA9ICgkc3Rhc2hpbmRlbnQsICRpbmRlbnQpOworCiAJCX0gZWxzaWYgKCRyZWFsY250ID09IDEpIHsKIAkJCSRyZWFsY250LS07CiAJCX0KIAogI21ha2UgdXAgdGhlIGhhbmRsZSBmb3IgYW55IGVycm9yIHdlIHJlcG9ydCBvbiB0aGlzIGxpbmUKLQkJJGhlcmUgPSAiIyRsaW5lbnI6ICI7CisJCSRoZXJlID0gIiMkbGluZW5yOiAiIGlmICghJGZpbGUpOworCQkkaGVyZSA9ICIjJHJlYWxsaW5lOiAiIGlmICgkZmlsZSk7CiAJCSRoZXJlIC49ICJGSUxFOiAkcmVhbGZpbGU6JHJlYWxsaW5lOiIgaWYgKCRyZWFsY250ICE9IDApOwogCiAJCW15ICRoZXJlbGluZSA9ICIkaGVyZVxuJGxpbmVcbiI7CiAJCW15ICRoZXJlY3VyciA9ICIkaGVyZVxuJGxpbmVcbiI7CiAJCW15ICRoZXJlcHJldiA9ICIkaGVyZVxuJHByZXZsaW5lXG4kbGluZVxuIjsKIAorCQkkcHJlZml4ID0gIiRmaWxlbmFtZTokcmVhbGxpbmU6ICIgaWYgKCRlbWFjcyAmJiAkZmlsZSk7CisJCSRwcmVmaXggPSAiJGZpbGVuYW1lOiRsaW5lbnI6ICIgaWYgKCRlbWFjcyAmJiAhJGZpbGUpOworCQkkY250X2xpbmVzKysgaWYgKCRyZWFsY250ICE9IDApOworCiAjY2hlY2sgdGhlIHBhdGNoIGZvciBhIHNpZ25vZmY6CiAJCWlmICgkbGluZSA9fiAvXlxzKnNpZ25lZC1vZmYtYnk6L2kpIHsKIAkJCSMgVGhpcyBpcyBhIHNpZ25vZmYsIGlmIHVnbHksIHNvIGRvIG5vdCBkb3VibGUgcmVwb3J0LgpAQCAtNTAyLDcgKzY4OSw3IEBACiAjIENoZWNrIGZvciB3cmFwcGFnZSB3aXRoaW4gYSB2YWxpZCBodW5rIG9mIHRoZSBmaWxlCiAJCWlmICgkcmVhbGNudCAhPSAwICYmICRsaW5lICF+IG17Xig/OlwrfC18IHwkKX0pIHsKIAkJCUVSUk9SKCJwYXRjaCBzZWVtcyB0byBiZSBjb3JydXB0IChsaW5lIHdyYXBwZWQ/KVxuIiAuCi0JCQkJJGhlcmVjdXJyKTsKKwkJCQkkaGVyZWN1cnIpIGlmICghJGVtaXR0ZWRfY29ycnVwdCsrKTsKIAkJfQogCiAjIFVURi04IHJlZ2V4IGZvdW5kIGF0IGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvcXVlc3Rpb25zL3FhLWZvcm1zLXV0Zi04LmVuLnBocApAQCAtNTY4LDggKzc1NSwxMiBAQAogCQkgICAgJGxpbmUgIX4gL14uXHMqKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPyRUeXBlXGIvICYmCiAJCSAgICAkbGluZSAhfiAvJElkZW50OlxzKiQvICYmCiAJCSAgICAkbGluZSAhfiAvXi5ccyokSWRlbnRccypcKC8gJiYKKwkJICAgICAjIGRlZmluaXRpb25zIGluIGdsb2JhbCBzY29wZSBjYW4gb25seSBzdGFydCB3aXRoIHR5cGVzCiAJCSAgICAoJGxpbmUgPX4gL14uKD86JFN0b3JhZ2VccyspPyg/OiRJbmxpbmVccyspPygkSWRlbnQpXGIvIHx8Ci0JCSAgICAgJGxpbmUgPX4gL14uXHMqKD86JFN0b3JhZ2VccyspPygkSWRlbnQpXGJccypcKipccyokSWRlbnRccyooPzo7fD0pLykpIHsKKwkJICAgICAjIGRlY2xhcmF0aW9ucyBhbHdheXMgc3RhcnQgd2l0aCB0eXBlcworCQkgICAgICRsaW5lID1+IC9eLlxzKig/OiRTdG9yYWdlXHMrKT8oJElkZW50KVxiXHMqXCoqXHMqJElkZW50XHMqKD86O3w9KS8pIHx8CisJCSAgICAgIyBhbnkgKGZvbyAuLi4gKikgaXMgYSBwb2ludGVyIGNhc3QsIGFuZCBmb28gaXMgYSB0eXBlCisJCSAgICAgJGxpbmUgPX4gL1woKCRJZGVudCkoPzpccyskU3BhcnNlKSpccypcKitccypcKS8pIHsKIAkJCW15ICRwb3NzaWJsZSA9ICQxOwogCQkJaWYgKCRwb3NzaWJsZSAhfiAvXig/OiRTdG9yYWdlfCRUeXBlfERFRklORV9cUyspJC8gJiYKIAkJCSAgICAkcG9zc2libGUgbmUgJ2dvdG8nICYmICRwb3NzaWJsZSBuZSAncmV0dXJuJyAmJgpAQCAtNTc5LDcgKzc3MCw3IEBACiAJCQkJI3ByaW50ICJQT1NTSUJMRTwkcG9zc2libGU+XG4iOwogCQkJCXB1c2goQGJhcmUsICRwb3NzaWJsZSk7CiAJCQkJbXkgJGJhcmUgPSBqb2luKCJ8IiwgQGJhcmUpOwotCQkJCSRCYXJlCT0gcXJ7CisJCQkJJEJhcmUJPSAnfCcgLiBxcnsKIAkJCQkJCVxiKD86JGJhcmUpXGIKIAkJCQkJCSg/OlxzKlwqK1xzKmNvbnN0fFxzKlwqK3woPzpccypcW1xzKlxdKSspPwogCQkJCQkJKD86XHMrJFNwYXJzZSkqCkBAIC02NDEsNiArODMyLDE0IEBACiAJCQl9CiAJCX0KIAorCQkjIFRyYWNrIHRoZSAndmFsdWVzJyBhY3Jvc3MgY29udGV4dCBhbmQgYWRkZWQgbGluZXMuCisJCW15ICRvcGxpbmUgPSAkbGluZTsgJG9wbGluZSA9fiBzL14uLyAvOworCQlteSAkY3Vycl92YWx1ZXMgPSBhbm5vdGF0ZV92YWx1ZXMoJG9wbGluZSAuICJcbiIsICRwcmV2X3ZhbHVlcyk7CisJCSRjdXJyX3ZhbHVlcyA9ICRwcmV2X3ZhbHVlcyAuICRjdXJyX3ZhbHVlczsKKwkJI3dhcm4gIi0tPiAkb3BsaW5lXG4iOworCQkjd2FybiAiLS0+ICRjdXJyX3ZhbHVlcyAoJHByZXZfdmFsdWVzKVxuIjsKKwkJJHByZXZfdmFsdWVzID0gc3Vic3RyKCRjdXJyX3ZhbHVlcywgLTEpOworCiAjaWdub3JlIGxpbmVzIG5vdCBiZWluZyBhZGRlZAogCQlpZiAoJGxpbmU9fi9eW15cK10vKSB7bmV4dDt9CiAKQEAgLTY3OCw2ICs4NzcsNyBAQAogCQl9CiAJCSMgUmVtb3ZlIEM5OSBjb21tZW50cy4KIAkJJGxpbmUgPX4gc0AvLy4qQEA7CisJCSRvcGxpbmUgPX4gc0AvLy4qQEA7CiAKICNFWFBPUlRfU1lNQk9MIHNob3VsZCBpbW1lZGlhdGVseSBmb2xsb3cgaXRzIGZ1bmN0aW9uIGNsb3NpbmcgfS4KIAkJaWYgKCgkbGluZSA9fiAvRVhQT1JUX1NZTUJPTC4qXCgoLiopXCkvKSB8fApAQCAtNzY2LDE4ICs5NjYsMTMgQEAKIAkJfQogCiAjIGNoZWNrIGZvciBzcGFjZXMgYmV0d2VlbiBmdW5jdGlvbnMgYW5kIHRoZWlyIHBhcmVudGhlc2VzLgotCQlpZiAoJGxpbmUgPX4gLygkSWRlbnQpXHMrXCgvICYmCi0JCSAgICAkMSAhfiAvXig/OmlmfGZvcnx3aGlsZXxzd2l0Y2h8cmV0dXJufHZvbGF0aWxlfF9fdm9sYXRpbGVfX3xfX2F0dHJpYnV0ZV9ffGZvcm1hdHxfX2V4dGVuc2lvbl9ffENvcHlyaWdodCkkLyAmJgotCQkgICAgJGxpbmUgIX4gLyRUeXBlXHMrXCgvICYmICRsaW5lICF+IC9eLlwjXHMqZGVmaW5lXGIvKSB7Ci0JCQlXQVJOKCJubyBzcGFjZSBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIG9wZW4gcGFyZW50aGVzaXMgJygnXG4iIC4gJGhlcmVjdXJyKTsKKwkJd2hpbGUgKCRsaW5lID1+IC8oJElkZW50KVxzK1woL2cpIHsKKwkJCWlmICgkMSAhfiAvXig/OmlmfGZvcnx3aGlsZXxzd2l0Y2h8cmV0dXJufHZvbGF0aWxlfF9fdm9sYXRpbGVfX3xfX2F0dHJpYnV0ZV9ffGZvcm1hdHxfX2V4dGVuc2lvbl9ffENvcHlyaWdodHxjYXNlKSQvICYmCisJCSAgICAgICAgICAgICRsaW5lICF+IC8kVHlwZVxzK1woLyAmJiAkbGluZSAhfiAvXi5cI1xzKmRlZmluZVxiLykgeworCQkJCVdBUk4oIm5vIHNwYWNlIGJldHdlZW4gZnVuY3Rpb24gbmFtZSBhbmQgb3BlbiBwYXJlbnRoZXNpcyAnKCdcbiIgLiAkaGVyZWN1cnIpOworCQkJfQogCQl9CiAjIENoZWNrIG9wZXJhdG9yIHNwYWNpbmcuCi0JCSMgTm90ZSB3ZSBleHBhbmQgdGhlIGxpbmUgd2l0aCB0aGUgbGVhZGluZyArIGFzIHRoZSByZWFsCi0JCSMgbGluZSB3aWxsIGJlIGRpc3BsYXllZCB3aXRoIHRoZSBsZWFkaW5nICsgYW5kIHRoZSB0YWJzCi0JCSMgd2lsbCB0aGVyZWZvcmUgYWxzbyBleHBhbmQgdGhhdCB3YXkuCi0JCW15ICRvcGxpbmUgPSAkbGluZTsKLQkJJG9wbGluZSA9IGV4cGFuZF90YWJzKCRvcGxpbmUpOwotCQkkb3BsaW5lID1+IHMvXi4vIC87CiAJCWlmICghKCRsaW5lPX4vXCNccyppbmNsdWRlLykpIHsKIAkJCW15ICRvcHMgPSBxcnsKIAkJCQk8PD18Pj49fDw9fD49fD09fCE9fApAQCAtNzg3LDYgKzk4Miw5IEBACiAJCQl9eDsKIAkJCW15IEBlbGVtZW50cyA9IHNwbGl0KC8oJG9wc3w7KS8sICRvcGxpbmUpOwogCQkJbXkgJG9mZiA9IDA7CisKKwkJCW15ICRibGFuayA9IGNvcHlfc3BhY2luZygkb3BsaW5lKTsKKwogCQkJZm9yIChteSAkbiA9IDA7ICRuIDwgJCNlbGVtZW50czsgJG4gKz0gMikgewogCQkJCSRvZmYgKz0gbGVuZ3RoKCRlbGVtZW50c1skbl0pOwogCkBAIC04MjIsNjIgKzEwMjAsMjQgQEAKIAogCQkJCW15ICRhdCA9ICIoY3R4OiRjdHgpIjsKIAotCQkJCW15ICRwdHIgPSAoIiAiIHggJG9mZikgLiAiXiI7CisJCQkJbXkgJHB0ciA9IHN1YnN0cigkYmxhbmssIDAsICRvZmYpIC4gIl4iOwogCQkJCW15ICRoZXJlcHRyID0gIiRoZXJlbGluZSRwdHJcbiI7CiAKIAkJCQkjIENsYXNzaWZ5IG9wZXJhdG9ycyBpbnRvIGJpbmFyeSwgdW5hcnksIG9yCiAJCQkJIyBkZWZpbml0aW9ucyAoKiBvbmx5KSB3aGVyZSB0aGV5IGhhdmUgbW9yZQogCQkJCSMgdGhhbiBvbmUgbW9kZS4KLQkJCQlteSAkdW5hcnlfY3R4ID0gJHByZXZsaW5lIC4gJGNhOwotCQkJCSR1bmFyeV9jdHggPX4gcy9eLi8gLzsKLQkJCQlteSAkaXNfdW5hcnkgPSAwOwotCQkJCW15ICRVbmFyeSA9IHFyewotCQkJCQkoPzoKLQkJCQkJCV58O3wsfCRvcHN8XCh8XD98OnwKLQkJCQkJCVwoXHMqJFR5cGVccypcKXwKLQkJCQkJCSRUeXBlfAotCQkJCQkJcmV0dXJufGNhc2V8ZWxzZXwKLQkJCQkJCVx7fFx9fAotCQkJCQkJXFt8Ci0JCQkJCQleLlwjXHMqZGVmaW5lXHMrJElkZW50XHMqKD86XChbXlwpXSpcKSk/fAotCQkJCQkJXi5cI1xzKmVsc2V8Ci0JCQkJCQleLlwjXHMqZW5kaWZ8Ci0JCQkJCQleLlwjXHMqKD86aWZ8aWZuZGVmfGlmZGVmKVxiLioKLQkJCQkJKVxzKig/OnxcXClccyokCi0JCQkJfXg7Ci0JCQkJbXkgJFVuYXJ5RmFsc2UgPSBxcnsKLQkJCQkJc2l6ZW9mXHMqXChccyokVHlwZVxzKlwpXHMqJAotCQkJCX14OwotCQkJCW15ICRVbmFyeURlZmluZSA9IHFyewotCQkJCQkgKD86JFR5cGV8JEJhcmUpXHMqfAotCQkJCQkgKD86JFR5cGV8JEJhcmUpLiosXHMqXCoqCi0JCQkJfXg7Ci0JCQkJaWYgKCRvcCBlcSAnLScgfHwgJG9wIGVxICcmJyB8fCAkb3AgZXEgJyonKSB7Ci0JCQkJCSMgQW4gb3BlcmF0b3IgaXMgYmluYXJ5IGlmIHRoZSBsZWZ0IGhhbmQKLQkJCQkJIyBzaWRlIGlzIGEgdmFsdWUuICBQaWNrIG91dCB0aGUga25vd24KLQkJCQkJIyBub24tdmFsdWVzLgotCQkJCQlpZiAoJHVuYXJ5X2N0eCA9fiAvJFVuYXJ5JC9zICYmCi0JCQkJCSAgICAkdW5hcnlfY3R4ICF+IC8kVW5hcnlGYWxzZSQvcykgewotCQkJCQkJJGlzX3VuYXJ5ID0gMTsKLQotCQkJCQkjIFNwZWNpYWwgaGFuZGxpbmcgZm9yICcpJyBjaGVjayBpZiB0aGlzCi0JCQkJCSMgYnJhY2UgcmVwcmVzZW50cyBhIGNvbmRpdGlvbmFsLCBpZiBzbwotCQkJCQkjIHdlIGFyZSB1bmFyeS4KLQkJCQkJfSBlbHNpZiAoJHVuYXJ5X2N0eCA9fiAvXClccyokLykgewotCQkJCQkJbXkgJGJlZm9yZSA9IGN0eF9leHByX2JlZm9yZSgkdW5hcnlfY3R4KTsKLQkJCQkJCWlmICgkYmVmb3JlID1+IC8oPzpmb3J8aWZ8d2hpbGUpXHMqJC8pIHsKLQkJCQkJCQkkaXNfdW5hcnkgPSAxOwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJIyBDaGVjayBmb3IgdHlwZSBkZWZpbml0aW9uIGZvciBvZiAnKicuCi0JCQkJCWlmICgkb3AgZXEgJyonICYmICR1bmFyeV9jdHggPX4gLyRVbmFyeURlZmluZSQvKSB7Ci0JCQkJCQkkaXNfdW5hcnkgPSAyOwotCQkJCQl9CisJCQkJbXkgJG9wX3R5cGUgPSBzdWJzdHIoJGN1cnJfdmFsdWVzLCAkb2ZmICsgMSwgMSk7CisJCQkJbXkgJG9wX2xlZnQgPSBzdWJzdHIoJGN1cnJfdmFsdWVzLCAkb2ZmLCAxKTsKKwkJCQlteSAkaXNfdW5hcnk7CisJCQkJaWYgKCRvcF90eXBlIGVxICdUJykgeworCQkJCQkkaXNfdW5hcnkgPSAyOworCQkJCX0gZWxzaWYgKCRvcF9sZWZ0IGVxICdWJykgeworCQkJCQkkaXNfdW5hcnkgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCSRpc191bmFyeSA9IDE7CiAJCQkJfQotCiAJCQkJI2lmICgkb3AgZXEgJy0nIHx8ICRvcCBlcSAnJicgfHwgJG9wIGVxICcqJykgewotCQkJCSMJcHJpbnQgIlVOQVJZOiA8JGlzX3VuYXJ5ICRhOiRvcDokYz4gPCRjYTokb3A6JGNjPiA8JHVuYXJ5X2N0eD5cbiI7CisJCQkJIwlwcmludCAiVU5BUlk6IDwkb3BfbGVmdCRvcF90eXBlICRpc191bmFyeSAkYTokb3A6JGM+IDwkY2E6JG9wOiRjYz4gPCR1bmFyeV9jdHg+XG4iOwogCQkJCSN9CiAKIAkJCQkjIDsgc2hvdWxkIGhhdmUgZWl0aGVyIHRoZSBlbmQgb2YgbGluZSBvciBhIHNwYWNlIG9yIFwgYWZ0ZXIgaXQKQEAgLTk1Miw3ICsxMTEyLDcgQEAKIAogIyBjaGVjayBmb3IgbXVsdGlwbGUgYXNzaWdubWVudHMKIAkJaWYgKCRsaW5lID1+IC9eLlxzKiRMdmFsXHMqPVxzKiRMdmFsXHMqPSg/IT0pLykgewotCQkJV0FSTigibXVsdGlwbGUgYXNzaWdubWVudHMgc2hvdWxkIGJlIGF2b2lkZWRcbiIgLiAkaGVyZWN1cnIpOworCQkJQ0hLKCJtdWx0aXBsZSBhc3NpZ25tZW50cyBzaG91bGQgYmUgYXZvaWRlZFxuIiAuICRoZXJlY3Vycik7CiAJCX0KIAogIyMgIyBjaGVjayBmb3IgbXVsdGlwbGUgZGVjbGFyYXRpb25zLCBhbGxvd2luZyBmb3IgYSBmdW5jdGlvbiBkZWNsYXJhdGlvbgpAQCAtMTAxMiw3ICsxMTcyLDcgQEAKIAkJfQogCiAjIENoZWNrIGZvciBpbGxlZ2FsIGFzc2lnbm1lbnQgaW4gaWYgY29uZGl0aW9uYWwuCi0JCWlmICgkbGluZT1+L1xiaWZccypcKC4qW148PiE9XT1bXj1dLipcKS8pIHsKKwkJaWYgKCRsaW5lPX4vXGJpZlxzKlwoLipbXjw+IT1dPVtePV0vKSB7CiAJCQkjbmV4dCBpZiAoJGxpbmU9fi9cIi4qXFEkb3BcRS4qXCIvIG9yICRsaW5lPX4vXCdcUSRvcFxFXCcvKTsKIAkJCUVSUk9SKCJkbyBub3QgdXNlIGFzc2lnbm1lbnQgaW4gaWYgY29uZGl0aW9uXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQpAQCAtMTAzOCw4ICsxMTk4LDggQEAKIAogI3dhcm4gaWYgPGFzbS9mb28uaD4gaXMgI2luY2x1ZGVkIGFuZCA8bGludXgvZm9vLmg+IGlzIGF2YWlsYWJsZSAodXNlcyBSQVcgbGluZSkKIAkJaWYgKCR0cmVlICYmICRyYXdsaW5lID1+IG17Xi5cI1xzKmluY2x1ZGVccypcPGFzbVwvKC4qKVwuaFw+fSkgewotCQkJbXkgJGNoZWNrZmlsZSA9ICJpbmNsdWRlL2xpbnV4LyQxLmgiOwotCQkJaWYgKC1mICRjaGVja2ZpbGUpIHsKKwkJCW15ICRjaGVja2ZpbGUgPSAiJHJvb3QvaW5jbHVkZS9saW51eC8kMS5oIjsKKwkJCWlmICgtZiAkY2hlY2tmaWxlICYmICQxIG5lICdpcnEuaCcpIHsKIAkJCQlDSEsoIlVzZSAjaW5jbHVkZSA8bGludXgvJDEuaD4gaW5zdGVhZCBvZiA8YXNtLyQxLmg+XG4iIC4KIAkJCQkJJGhlcmVjdXJyKTsKIAkJCX0KQEAgLTExNTEsNyArMTMxMSw4IEBACiAJCX0KIAogIyBubyB2b2xhdGlsZXMgcGxlYXNlCi0JCWlmICgkbGluZSA9fiAvXGJ2b2xhdGlsZVxiLyAmJiAkbGluZSAhfiAvXGJhc21ccyt2b2xhdGlsZVxiLykgeworCQlteSAkYXNtX3ZvbGF0aWxlID0gcXJ7XGIoX19hc21fX3xhc20pXHMrKF9fdm9sYXRpbGVfX3x2b2xhdGlsZSlcYn07CisJCWlmICgkbGluZSA9fiAvXGJ2b2xhdGlsZVxiLyAmJiAkbGluZSAhfiAvJGFzbV92b2xhdGlsZS8pIHsKIAkJCVdBUk4oIlVzZSBvZiB2b2xhdGlsZSBpcyB1c3VhbGx5IHdyb25nOiBzZWUgRG9jdW1lbnRhdGlvbi92b2xhdGlsZS1jb25zaWRlcmVkLWhhcm1mdWwudHh0XG4iIC4gJGhlcmVjdXJyKTsKIAkJfQogCkBAIC0xMjQwLDYgKzE0MDEsMTEgQEAKIAogCWlmICgkY2xlYW4gPT0gMCAmJiAoJGNoa19wYXRjaCB8fCAkaXNfcGF0Y2gpKSB7CiAJCXByaW50IHJlcG9ydF9kdW1wKCk7CisJCWlmICgkcXVpZXQgPCAyKSB7CisJCQlwcmludCAidG90YWw6ICRjbnRfZXJyb3IgZXJyb3JzLCAkY250X3dhcm4gd2FybmluZ3MsICIgLgorCQkJCSgoJGNoZWNrKT8gIiRjbnRfY2hrIGNoZWNrcywgIiA6ICIiKSAuCisJCQkJIiRjbnRfbGluZXMgbGluZXMgY2hlY2tlZFxuIjsKKwkJfQogCX0KIAlpZiAoJGNsZWFuID09IDEgJiYgJHF1aWV0ID09IDApIHsKIAkJcHJpbnQgIllvdXIgcGF0Y2ggaGFzIG5vIG9idmlvdXMgc3R5bGUgcHJvYmxlbXMgYW5kIGlzIHJlYWR5IGZvciBzdWJtaXNzaW9uLlxuIgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9jaGVja3N0YWNrLnBsIGIvc2NyaXB0cy9jaGVja3N0YWNrLnBsCmluZGV4IGMzYjQyZjkuLmQ3MTZiNzYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvY2hlY2tzdGFjay5wbAorKysgYi9zY3JpcHRzL2NoZWNrc3RhY2sucGwKQEAgLTE2LDcgKzE2LDcgQEAKICMJUEFSSVNDIHBvcnQgYnkgS3lsZSBNY01hcnRpbiA8a3lsZUBwYXJpc2MtbGludXgub3JnPgogIwogIwlVc2FnZToKLSMJb2JqZHVtcCAtZCB2bWxpbnV4IHwgc3RhY2tjaGVjay5wbCBbYXJjaF0KKyMJb2JqZHVtcCAtZCB2bWxpbnV4IHwgc2NyaXB0cy9jaGVja3N0YWNrLnBsIFthcmNoXQogIwogIwlUT0RPIDoJUG9ydCB0byBhbGwgYXJjaGl0ZWN0dXJlcyAob25lIHJlZ2V4IHBlciBhcmNoKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUgYi9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUKaW5kZXggYmIwODA2OS4uODNjNWU3NiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlCisrKyBiL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQpAQCAtODQsNyArODQsNyBAQAogIyBseGRpYWxvZyBzdHVmZgogY2hlY2stbHhkaWFsb2cgIDo9ICQoc3JjdHJlZSkvJChzcmMpL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoCiAKLSMgVXNlIHJldXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGVzIHNvIHdlIGRvIG5vdCBjYWxsIGdjYyB1bmxlc3MKKyMgVXNlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlcyBzbyB3ZSBkbyBub3QgY2FsbCBnY2MgdW5sZXNzCiAjIHdlIHJlYWxseSBuZWVkIHRvIGRvIHNvLiAoRG8gbm90IGNhbGwgZ2NjIGFzIHBhcnQgb2YgbWFrZSBtcnByb3BlcikKIEhPU1RfRVhUUkFDRkxBR1MgPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNoZWNrLWx4ZGlhbG9nKSAtY2NmbGFncykKIEhPU1RfTE9BRExJQkVTICAgPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKGNoZWNrLWx4ZGlhbG9nKSAtbGRmbGFncyAkKEhPU1RDQykpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvbWVudS5jIGIvc2NyaXB0cy9rY29uZmlnL21lbnUuYwppbmRleCA3YmZhMTgxLi5mOWQwZDkxIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvbWVudS5jCisrKyBiL3NjcmlwdHMva2NvbmZpZy9tZW51LmMKQEAgLTIzNSwyMyArMjM1LDE2IEBACiAJc3ltID0gcGFyZW50LT5zeW07CiAJaWYgKHBhcmVudC0+bGlzdCkgewogCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSkgewotCQkJLyogZmluZCBvdXQgY2hvaWNlIHR5cGUgKi8KLQkJCWVudW0gc3ltYm9sX3R5cGUgdHlwZSA9IFNfVU5LTk9XTjsKLQorCQkJLyogZmluZCB0aGUgZmlyc3QgY2hvaWNlIHZhbHVlIGFuZCBmaW5kIG91dCBjaG9pY2UgdHlwZSAqLwogCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgewotCQkJCWlmIChtZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVU5LTk9XTikgewotCQkJCQlpZiAodHlwZSA9PSBTX1VOS05PV04pCi0JCQkJCQl0eXBlID0gbWVudS0+c3ltLT50eXBlOwotCQkJCQlpZiAodHlwZSAhPSBTX0JPT0xFQU4pCi0JCQkJCQlicmVhazsKLQkJCQkJaWYgKG1lbnUtPnN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7Ci0JCQkJCQl0eXBlID0gU19UUklTVEFURTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9CisJCQkJaWYgKG1lbnUtPnN5bSkgeworCQkJCQljdXJyZW50X2VudHJ5ID0gcGFyZW50OworCQkJCQltZW51X3NldF90eXBlKG1lbnUtPnN5bS0+dHlwZSk7CisJCQkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJCQltZW51X3NldF90eXBlKHN5bS0+dHlwZSk7CisJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KLQkJCWN1cnJlbnRfZW50cnkgPSBwYXJlbnQ7Ci0JCQltZW51X3NldF90eXBlKHR5cGUpOwogCQkJcGFyZW50ZGVwID0gZXhwcl9hbGxvY19zeW1ib2woc3ltKTsKIAkJfSBlbHNlIGlmIChwYXJlbnQtPnByb21wdCkKIAkJCXBhcmVudGRlcCA9IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHI7CkBAIC0yNjAsMTYgKzI1Myw3IEBACiAKIAkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgewogCQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNmb3JtKG1lbnUtPmRlcCk7Ci0JCQlkZXAgPSBwYXJlbnRkZXA7Ci0JCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtZW51LT5zeW0pIHsKLQkJCQllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBtZW51LT5zeW0tPnR5cGU7Ci0KLQkJCQlpZiAodHlwZSA9PSBTX1VOS05PV04pCi0JCQkJCXR5cGUgPSBzeW0tPnR5cGU7Ci0JCQkgICAgIGlmICh0eXBlICE9IFNfVFJJU1RBVEUpCi0JCQkJCWRlcCA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0sICZzeW1ib2xfeWVzKTsKLQkJCX0KLQkJCWJhc2VkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoZGVwKSwgYmFzZWRlcCk7CisJCQliYXNlZGVwID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KHBhcmVudGRlcCksIGJhc2VkZXApOwogCQkJYmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoYmFzZWRlcCk7CiAJCQltZW51LT5kZXAgPSBiYXNlZGVwOwogCQkJaWYgKG1lbnUtPnN5bSkKQEAgLTM0Miw4ICszMjYsNyBAQAogCQkJCQkgICAgInZhbHVlcyBub3Qgc3VwcG9ydGVkIik7CiAJCQl9CiAJCQljdXJyZW50X2VudHJ5ID0gbWVudTsKLQkJCWlmIChtZW51LT5zeW0tPnR5cGUgPT0gU19VTktOT1dOKQotCQkJCW1lbnVfc2V0X3R5cGUoc3ltLT50eXBlKTsKKwkJCW1lbnVfc2V0X3R5cGUoc3ltLT50eXBlKTsKIAkJCW1lbnVfYWRkX3N5bWJvbChQX0NIT0lDRSwgc3ltLCBOVUxMKTsKIAkJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CiAJCQlmb3IgKGVwID0gJnByb3AtPmV4cHI7ICplcDsgZXAgPSAmKCplcCktPmxlZnQuZXhwcikKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYyBiL3NjcmlwdHMva2NvbmZpZy9xY29uZi5jYwppbmRleCBlNGVlYjU5Li5iOWJiMzJkIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvcWNvbmYuY2MKKysrIGIvc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjCkBAIC0xMjc0LDggKzEyNzQsMTIgQEAKIAlRTWVudUJhciogbWVudTsKIAlib29sIG9rOwogCWludCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworCWNoYXIgdGl0bGVbMjU2XTsKIAogCVFXaWRnZXQgKmQgPSBjb25maWdBcHAtPmRlc2t0b3AoKTsKKwlzbnByaW50Zih0aXRsZSwgc2l6ZW9mKHRpdGxlKSwgXygiTGludXggS2VybmVsIHYlcyBDb25maWd1cmF0aW9uIiksCisJCWdldGVudigiS0VSTkVMVkVSU0lPTiIpKTsKKwlzZXRDYXB0aW9uKHRpdGxlKTsKIAogCXdpZHRoID0gY29uZmlnU2V0dGluZ3MtPnJlYWROdW1FbnRyeSgiL3dpbmRvdyB3aWR0aCIsIGQtPndpZHRoKCkgLSA2NCk7CiAJaGVpZ2h0ID0gY29uZmlnU2V0dGluZ3MtPnJlYWROdW1FbnRyeSgiL3dpbmRvdyBoZWlnaHQiLCBkLT5oZWlnaHQoKSAtIDY0KTsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCAyZWY5YTE5Li45M2FjNTJhIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC0yNjgsNiArMjY4LDkgQEAKIAkJCSAgICAgIndhcyBpbiAlcyVzXG4iLCBtb2QtPm5hbWUsIG5hbWUsCiAJCQkgICAgIHMtPm1vZHVsZS0+bmFtZSwKIAkJCSAgICAgaXNfdm1saW51eChzLT5tb2R1bGUtPm5hbWUpID8iIjoiLmtvIik7CisJCX0gZWxzZSB7CisJCQkvKiBJbiBjYXNlIE1vZHVsZXMuc3ltdmVycyB3YXMgb3V0IG9mIGRhdGUgKi8KKwkJCXMtPm1vZHVsZSA9IG1vZDsKIAkJfQogCX0KIAlzLT5wcmVsb2FkZWQgPSAwOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViIGIvc2NyaXB0cy9wYWNrYWdlL2J1aWxkZGViCmluZGV4IDZlZGIyOWYuLjBmNjU3YjUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcGFja2FnZS9idWlsZGRlYgorKysgYi9zY3JpcHRzL3BhY2thZ2UvYnVpbGRkZWIKQEAgLTgzLDYgKzgzLDcgQEAKIFN0YW5kYXJkcy1WZXJzaW9uOiAzLjYuMQogCiBQYWNrYWdlOiAkcGFja2FnZW5hbWUKK1Byb3ZpZGVzOiBrZXJuZWwtaW1hZ2UtJHZlcnNpb24sIGxpbnV4LWltYWdlLSR2ZXJzaW9uCiBBcmNoaXRlY3R1cmU6IGFueQogRGVzY3JpcHRpb246IFVzZXIgTW9kZSBMaW51eCBrZXJuZWwsIHZlcnNpb24gJHZlcnNpb24KICBVc2VyLW1vZGUgTGludXggaXMgYSBwb3J0IG9mIHRoZSBMaW51eCBrZXJuZWwgdG8gaXRzIG93biBzeXN0ZW0gY2FsbApAQCAtMTA0LDYgKzEwNSw3IEBACiBTdGFuZGFyZHMtVmVyc2lvbjogMy42LjEKIAogUGFja2FnZTogJHBhY2thZ2VuYW1lCitQcm92aWRlczoga2VybmVsLWltYWdlLSR2ZXJzaW9uLCBsaW51eC1pbWFnZS0kdmVyc2lvbgogQXJjaGl0ZWN0dXJlOiBhbnkKIERlc2NyaXB0aW9uOiBMaW51eCBrZXJuZWwsIHZlcnNpb24gJHZlcnNpb24KICBUaGlzIHBhY2thZ2UgY29udGFpbnMgdGhlIExpbnV4IGtlcm5lbCwgbW9kdWxlcyBhbmQgY29ycmVzcG9uZGluZyBvdGhlcgpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY29tbW9uY2FwLmMgYi9zZWN1cml0eS9jb21tb25jYXAuYwppbmRleCA3NzhjYjBjLi40M2Y5MDI3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9jb21tb25jYXAuYworKysgYi9zZWN1cml0eS9jb21tb25jYXAuYwpAQCAtMjMsNiArMjMsMjYgQEAKICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMKKy8qCisgKiBCZWNhdXNlIG9mIHRoZSByZWR1Y2VkIHNjb3BlIG9mIENBUF9TRVRQQ0FQIHdoZW4gZmlsZXN5c3RlbQorICogY2FwYWJpbGl0aWVzIGFyZSBpbiBlZmZlY3QsIGl0IGlzIHNhZmUgdG8gYWxsb3cgdGhpcyBjYXBhYmlsaXR5IHRvCisgKiBiZSBhdmFpbGFibGUgaW4gdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4KKyAqLworIyBkZWZpbmUgQ0FQX0lOSVRfQlNFVCAgQ0FQX0ZVTExfU0VUCisjZWxzZSAvKiBpZS4gbmRlZiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgKi8KKyMgZGVmaW5lIENBUF9JTklUX0JTRVQgIENBUF9JTklUX0VGRl9TRVQKKyNlbmRpZiAvKiBkZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTICovCisKK2tlcm5lbF9jYXBfdCBjYXBfYnNldCA9IENBUF9JTklUX0JTRVQ7ICAgIC8qIHN5c3RlbXdpZGUgY2FwYWJpbGl0eSBib3VuZCAqLworRVhQT1JUX1NZTUJPTChjYXBfYnNldCk7CisKKy8qIEdsb2JhbCBzZWN1cml0eSBzdGF0ZSAqLworCit1bnNpZ25lZCBzZWN1cmViaXRzID0gU0VDVVJFQklUU19ERUZBVUxUOyAvKiBzeXN0ZW13aWRlIHNlY3VyaXR5IHNldHRpbmdzICovCitFWFBPUlRfU1lNQk9MKHNlY3VyZWJpdHMpOwogCiBpbnQgY2FwX25ldGxpbmtfc2VuZChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC03MywxNCArOTMsNDQgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUworCitzdGF0aWMgaW5saW5lIGludCBjYXBfYmxvY2tfc2V0cGNhcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldCkKK3sKKwkvKgorCSAqIE5vIHN1cHBvcnQgZm9yIHJlbW90ZSBwcm9jZXNzIGNhcGFiaWxpdHkgbWFuaXB1bGF0aW9uIHdpdGgKKwkgKiBmaWxlc3lzdGVtIGNhcGFiaWxpdHkgc3VwcG9ydC4KKwkgKi8KKwlyZXR1cm4gKHRhcmdldCAhPSBjdXJyZW50KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2FwX2luaF9pc19jYXBwZWQodm9pZCkKK3sKKwkvKgorCSAqIHJldHVybiAxIGlmIGNoYW5nZXMgdG8gdGhlIGluaGVyaXRhYmxlIHNldCBhcmUgbGltaXRlZAorCSAqIHRvIHRoZSBvbGQgcGVybWl0dGVkIHNldC4KKwkgKi8KKwlyZXR1cm4gIWNhcF9jYXBhYmxlKGN1cnJlbnQsIENBUF9TRVRQQ0FQKTsKK30KKworI2Vsc2UgLyogaWUuLCBuZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyAqLworCitzdGF0aWMgaW5saW5lIGludCBjYXBfYmxvY2tfc2V0cGNhcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IGNhcF9pbmhfaXNfY2FwcGVkKHZvaWQpIHsgcmV0dXJuIDE7IH0KKworI2VuZGlmIC8qIGRlZiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgKi8KKwogaW50IGNhcF9jYXBzZXRfY2hlY2sgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFyZ2V0LCBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKIAkJICAgICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwga2VybmVsX2NhcF90ICpwZXJtaXR0ZWQpCiB7Ci0JLyogRGVyaXZlZCBmcm9tIGtlcm5lbC9jYXBhYmlsaXR5LmM6c3lzX2NhcHNldC4gKi8KLQkvKiB2ZXJpZnkgcmVzdHJpY3Rpb25zIG9uIHRhcmdldCdzIG5ldyBJbmhlcml0YWJsZSBzZXQgKi8KLQlpZiAoIWNhcF9pc3N1YnNldCAoKmluaGVyaXRhYmxlLAotCQkJICAgY2FwX2NvbWJpbmUgKHRhcmdldC0+Y2FwX2luaGVyaXRhYmxlLAotCQkJCQljdXJyZW50LT5jYXBfcGVybWl0dGVkKSkpIHsKKwlpZiAoY2FwX2Jsb2NrX3NldHBjYXAodGFyZ2V0KSkgeworCQlyZXR1cm4gLUVQRVJNOworCX0KKwlpZiAoY2FwX2luaF9pc19jYXBwZWQoKQorCSAgICAmJiAhY2FwX2lzc3Vic2V0KCppbmhlcml0YWJsZSwKKwkJCSAgICAgY2FwX2NvbWJpbmUodGFyZ2V0LT5jYXBfaW5oZXJpdGFibGUsCisJCQkJCSBjdXJyZW50LT5jYXBfcGVybWl0dGVkKSkpIHsKKwkJLyogaW5jYXBhYmxlIG9mIHVzaW5nIHRoaXMgaW5oZXJpdGFibGUgc2V0ICovCiAJCXJldHVybiAtRVBFUk07CiAJfQogCkBAIC0yODUsNyArMzM1LDcgQEAKIAkvKiBGb3IgaW5pdCwgd2Ugd2FudCB0byByZXRhaW4gdGhlIGNhcGFiaWxpdGllcyBzZXQKIAkgKiBpbiB0aGUgaW5pdF90YXNrIHN0cnVjdC4gVGh1cyB3ZSBza2lwIHRoZSB1c3VhbAogCSAqIGNhcGFiaWxpdHkgcnVsZXMgKi8KLQlpZiAoIWlzX2luaXQoY3VycmVudCkpIHsKKwlpZiAoIWlzX2dsb2JhbF9pbml0KGN1cnJlbnQpKSB7CiAJCWN1cnJlbnQtPmNhcF9wZXJtaXR0ZWQgPSBuZXdfcGVybWl0dGVkOwogCQljdXJyZW50LT5jYXBfZWZmZWN0aXZlID0gYnBybS0+Y2FwX2VmZmVjdGl2ZSA/CiAJCQkJbmV3X3Blcm1pdHRlZCA6IDA7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9kdW1teS5jIGIvc2VjdXJpdHkvZHVtbXkuYwppbmRleCBiYzQzZDRjLi42ZDg5NWFkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9kdW1teS5jCisrKyBiL3NlY3VyaXR5L2R1bW15LmMKQEAgLTM3LDE1ICszNywxMyBAQAogCQkJIGtlcm5lbF9jYXBfdCAqIGluaGVyaXRhYmxlLCBrZXJuZWxfY2FwX3QgKiBwZXJtaXR0ZWQpCiB7CiAJKmVmZmVjdGl2ZSA9ICppbmhlcml0YWJsZSA9ICpwZXJtaXR0ZWQgPSAwOwotCWlmICghaXNzZWN1cmUoU0VDVVJFX05PUk9PVCkpIHsKLQkJaWYgKHRhcmdldC0+ZXVpZCA9PSAwKSB7Ci0JCQkqcGVybWl0dGVkIHw9ICh+MCAmIH5DQVBfRlNfTUFTSyk7Ci0JCQkqZWZmZWN0aXZlIHw9ICh+MCAmIH5DQVBfVE9fTUFTSyhDQVBfU0VUUENBUCkgJiB+Q0FQX0ZTX01BU0spOwotCQl9Ci0JCWlmICh0YXJnZXQtPmZzdWlkID09IDApIHsKLQkJCSpwZXJtaXR0ZWQgfD0gQ0FQX0ZTX01BU0s7Ci0JCQkqZWZmZWN0aXZlIHw9IENBUF9GU19NQVNLOwotCQl9CisJaWYgKHRhcmdldC0+ZXVpZCA9PSAwKSB7CisJCSpwZXJtaXR0ZWQgfD0gKH4wICYgfkNBUF9GU19NQVNLKTsKKwkJKmVmZmVjdGl2ZSB8PSAofjAgJiB+Q0FQX1RPX01BU0soQ0FQX1NFVFBDQVApICYgfkNBUF9GU19NQVNLKTsKKwl9CisJaWYgKHRhcmdldC0+ZnN1aWQgPT0gMCkgeworCQkqcGVybWl0dGVkIHw9IENBUF9GU19NQVNLOworCQkqZWZmZWN0aXZlIHw9IENBUF9GU19NQVNLOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgveGZybS5jIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKaW5kZXggY2IwMDhkOS4uMzZhMTkxZSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC94ZnJtLmMKQEAgLTQ0OCw3ICs0NDgsNyBAQAogCWlmIChkc3QpIHsKIAkJc3RydWN0IGRzdF9lbnRyeSAqZHN0X3Rlc3Q7CiAKLQkJZm9yIChkc3RfdGVzdCA9IGRzdDsgZHN0X3Rlc3QgIT0gMDsKKwkJZm9yIChkc3RfdGVzdCA9IGRzdDsgZHN0X3Rlc3QgIT0gTlVMTDsKIAkJICAgICBkc3RfdGVzdCA9IGRzdF90ZXN0LT5jaGlsZCkgewogCQkJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3RfdGVzdC0+eGZybTsKIApkaWZmIC0tZ2l0IGEvc291bmQvYXJtL2FhY2kuYyBiL3NvdW5kL2FybS9hYWNpLmMKaW5kZXggYjllY2E5Zi4uM2I3M2JhNyAxMDA2NDQKLS0tIGEvc291bmQvYXJtL2FhY2kuYworKysgYi9zb3VuZC9hcm0vYWFjaS5jCkBAIC0yMDksNyArMjA5LDcgQEAKIAkJdm9pZCAqcHRyOwogCiAJCWlmICghYWFjaXJ1bi0+c3Vic3RyZWFtIHx8ICFhYWNpcnVuLT5zdGFydCkgewotCQkJZGV2X3dhcm4oJmFhY2ktPmRldi0+ZGV2LCAiUlggaW50ZXJydXB0Pz8/Iik7CisJCQlkZXZfd2FybigmYWFjaS0+ZGV2LT5kZXYsICJSWCBpbnRlcnJ1cHQ/Pz9cbiIpOwogCQkJd3JpdGVsKDAsIGFhY2lydW4tPmJhc2UgKyBBQUNJX0lFKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtMjYzLDcgKzI2Myw3IEBACiAJCXZvaWQgKnB0cjsKIAogCQlpZiAoIWFhY2lydW4tPnN1YnN0cmVhbSB8fCAhYWFjaXJ1bi0+c3RhcnQpIHsKLQkJCWRldl93YXJuKCZhYWNpLT5kZXYtPmRldiwgIlRYIGludGVycnVwdD8/PyIpOworCQkJZGV2X3dhcm4oJmFhY2ktPmRldi0+ZGV2LCAiVFggaW50ZXJydXB0Pz8/XG4iKTsKIAkJCXdyaXRlbCgwLCBhYWNpcnVuLT5iYXNlICsgQUFDSV9JRSk7CiAJCQlyZXR1cm47CiAJCX0KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpX2VtdWwuYyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9taWRpX2VtdWwuYwppbmRleCBkN2M0ZmI4Li4xN2IzZTZmIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3NlcS9zZXFfbWlkaV9lbXVsLmMKKysrIGIvc291bmQvY29yZS9zZXEvc2VxX21pZGlfZW11bC5jCkBAIC03MSw3ICs3MSw3IEBACiAgKiBzdWNoIGFzIEdNLCBHUyBhbmQgWEcuCiAgKiBUaGVyZSBtb2RlcyB0aGF0IHRoaXMgbW9kdWxlIHdpbGwgcnVuIGluIGFyZToKICAqICAgR2VuZXJpYyBNSURJIC0gbm8gaW50ZXJwcmV0YXRpb24gYXQgYWxsLCBpdCB3aWxsIGp1c3Qgc2F2ZSBjdXJyZW50IHZhbHVlcwotICogICAgICAgICAgICAgICAgICBvZiBjb250cm9sZXJzIGV0Yy4KKyAqICAgICAgICAgICAgICAgICAgb2YgY29udHJvbGxlcnMgZXRjLgogICogICBHTSAtIFlvdSBjYW4gdXNlIGFsbCBnbV8gcHJlZml4ZWQgZWxlbWVudHMgb2YgY2hhbi4gIENvbnRyb2xzLCBSUE4sIE5SUE4sCiAgKiAgICAgICAgU3lzRXggd2lsbCBiZSBpbnRlcnByZWRlZCBhcyBkZWZpbmVkIGluIEdlbmVyYWwgTWlkaS4KICAqICAgR1MgLSBZb3UgY2FuIHVzZSBhbGwgZ3NfIHByZWZpeGVkIGVsZW1lbnRzIG9mIGNoYW4uIENvZGVzIGZvciBHUyB3aWxsIGJlCkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJCQkgICBldi0+ZGF0YS5jb250cm9sLnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9TRVFfRVZFTlRfTk9OUkVHUEFSQU06Ci0JCS8qIEJyZWFrIGl0IGJhY2sgaW50byBpdHMgY29udHJvbGVyIHZhbHVlcyAqLworCQkvKiBCcmVhayBpdCBiYWNrIGludG8gaXRzIGNvbnRyb2xsZXIgdmFsdWVzICovCiAJCWNoYW4tPnBhcmFtX3R5cGUgPSBTTkRSVl9NSURJX1BBUkFNX1RZUEVfTk9OUkVHSVNURVJFRDsKIAkJY2hhbi0+Y29udHJvbFtNSURJX0NUTF9NU0JfREFUQV9FTlRSWV0KIAkJCT0gKGV2LT5kYXRhLmNvbnRyb2wudmFsdWUgPj4gNykgJiAweDdmOwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCW5ycG4ob3BzLCBkcnYsIGNoYW4sIGNoYW5zZXQpOwogCQlicmVhazsKIAljYXNlIFNORFJWX1NFUV9FVkVOVF9SRUdQQVJBTToKLQkJLyogQnJlYWsgaXQgYmFjayBpbnRvIGl0cyBjb250cm9sZXIgdmFsdWVzICovCisJCS8qIEJyZWFrIGl0IGJhY2sgaW50byBpdHMgY29udHJvbGxlciB2YWx1ZXMgKi8KIAkJY2hhbi0+cGFyYW1fdHlwZSA9IFNORFJWX01JRElfUEFSQU1fVFlQRV9SRUdJU1RFUkVEOwogCQljaGFuLT5jb250cm9sW01JRElfQ1RMX01TQl9EQVRBX0VOVFJZXQogCQkJPSAoZXYtPmRhdGEuY29udHJvbC52YWx1ZSA+PiA3KSAmIDB4N2Y7CkBAIC0yNjcsNyArMjY3LDcgQEAKIH0KIAogLyoKLSAqIERvIGFsbCBkcml2ZXIgaW5kZXBlbmRlbnQgb3BlcmF0aW9ucyBmb3IgdGhpcyBjb250cm9sZXIgYW5kIHBhc3MKKyAqIERvIGFsbCBkcml2ZXIgaW5kZXBlbmRlbnQgb3BlcmF0aW9ucyBmb3IgdGhpcyBjb250cm9sbGVyIGFuZCBwYXNzCiAgKiBldmVudHMgdGhhdCBuZWVkIHRvIHRha2UgcGxhY2UgaW1tZWRpYXRlbHkgdG8gdGhlIGRyaXZlci4KICAqLwogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYyBiL3NvdW5kL2RyaXZlcnMvb3BsMy9vcGwzX21pZGkuYwppbmRleCAxYjZmMjI3Li4zNTU3YjZlIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL29wbDMvb3BsM19taWRpLmMKKysrIGIvc291bmQvZHJpdmVycy9vcGwzL29wbDNfbWlkaS5jCkBAIC04MDgsNyArODA4LDcgQEAKIH0KIAogLyoKLSAqIERlYWwgd2l0aCBhIGNvbnRyb2xlciB0eXBlIGV2ZW50LiAgVGhpcyBpbmNsdWRlcyBhbGwgdHlwZXMgb2YKKyAqIERlYWwgd2l0aCBhIGNvbnRyb2xsZXIgdHlwZSBldmVudC4gIFRoaXMgaW5jbHVkZXMgYWxsIHR5cGVzIG9mCiAgKiBjb250cm9sIGV2ZW50cywgbm90IGp1c3QgdGhlIG1pZGkgY29udHJvbGxlcnMKICAqLwogdm9pZCBzbmRfb3BsM19jb250cm9sKHZvaWQgKnAsIGludCB0eXBlLCBzdHJ1Y3Qgc25kX21pZGlfY2hhbm5lbCAqY2hhbikKZGlmZiAtLWdpdCBhL3NvdW5kL2lzYS9lczE4eHguYyBiL3NvdW5kL2lzYS9lczE4eHguYwppbmRleCA0YTczNjdhLi5jMWFmMjhmIDEwMDY0NAotLS0gYS9zb3VuZC9pc2EvZXMxOHh4LmMKKysrIGIvc291bmQvaXNhL2VzMTh4eC5jCkBAIC02MjMsNyArNjIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSA9PSAxNiA/IDB4MDQgOiAweDAwKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNuZF9wY21fZm9ybWF0X3Vuc2lnbmVkKHJ1bnRpbWUtPmZvcm1hdCkgPyAweDAwIDogMHgyMCkpOwogCi0gICAgICAgIC8qIFNldCBETUEgY29udHJvbGVyICovCisgICAgICAgIC8qIFNldCBETUEgY29udHJvbGxlciAqLwogICAgICAgICBzbmRfZG1hX3Byb2dyYW0oY2hpcC0+ZG1hMSwgcnVudGltZS0+ZG1hX2FkZHIsIHNpemUsIERNQV9NT0RFX1JFQUQgfCBETUFfQVVUT0lOSVQpOwogCiAJcmV0dXJuIDA7CkBAIC02ODksNyArNjg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoc25kX3BjbV9mb3JtYXRfd2lkdGgocnVudGltZS0+Zm9ybWF0KSA9PSAxNiA/IDB4MDQgOiAweDAwKSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNuZF9wY21fZm9ybWF0X3Vuc2lnbmVkKHJ1bnRpbWUtPmZvcm1hdCkgPyAweDAwIDogMHgyMCkpOwogCi0gICAgICAgIC8qIFNldCBETUEgY29udHJvbGVyICovCisgICAgICAgIC8qIFNldCBETUEgY29udHJvbGxlciAqLwogICAgICAgICBzbmRfZG1hX3Byb2dyYW0oY2hpcC0+ZG1hMSwgcnVudGltZS0+ZG1hX2FkZHIsIHNpemUsIERNQV9NT0RFX1dSSVRFIHwgRE1BX0FVVE9JTklUKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc291bmQvbWlwcy9hdTF4MDAuYyBiL3NvdW5kL21pcHMvYXUxeDAwLmMKaW5kZXggOGE2MWExMS4uMjQ0NjBhNSAxMDA2NDQKLS0tIGEvc291bmQvbWlwcy9hdTF4MDAuYworKysgYi9zb3VuZC9taXBzL2F1MXgwMC5jCkBAIC00OTgsOCArNDk4LDggQEAKIAlpbnQgICAgICAgICAgICAgaTsKIAogCXNwaW5fbG9jaygmYXUxMDAwLT5hYzk3X2xvY2spOwotLyogd291bGQgcmF0aGVyIHVzZSB0aGUgaW50ZXJ1cHQgdGhhbiB0aGlzIHBvbGxpbmcgYnV0IGl0IHdvcmtzIGFuZCBJIGNhbid0Ci1nZXQgdGhlIGludGVydXB0IGRyaXZlbiBjYXNlIHRvIHdvcmsgZWZmaWNpZW50bHkgKi8KKy8qIHdvdWxkIHJhdGhlciB1c2UgdGhlIGludGVycnVwdCB0aGFuIHRoaXMgcG9sbGluZyBidXQgaXQgd29ya3MgYW5kIEkgY2FuJ3QKK2dldCB0aGUgaW50ZXJydXB0IGRyaXZlbiBjYXNlIHRvIHdvcmsgZWZmaWNpZW50bHkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMHg1MDAwOyBpKyspCiAJCWlmICghKGF1MTAwMC0+YWM5N19pb3BvcnQtPnN0YXR1cyAmIEFDOTdDX0NQKSkKIAkJCWJyZWFrOwpAQCAtNTM1LDggKzUzNSw4IEBACiAJaW50IGk7CiAKIAlzcGluX2xvY2soJmF1MTAwMC0+YWM5N19sb2NrKTsKLS8qIHdvdWxkIHJhdGhlciB1c2UgdGhlIGludGVydXB0IHRoYW4gdGhpcyBwb2xsaW5nIGJ1dCBpdCB3b3JrcyBhbmQgSSBjYW4ndAotZ2V0IHRoZSBpbnRlcnVwdCBkcml2ZW4gY2FzZSB0byB3b3JrIGVmZmljaWVudGx5ICovCisvKiB3b3VsZCByYXRoZXIgdXNlIHRoZSBpbnRlcnJ1cHQgdGhhbiB0aGlzIHBvbGxpbmcgYnV0IGl0IHdvcmtzIGFuZCBJIGNhbid0CitnZXQgdGhlIGludGVycnVwdCBkcml2ZW4gY2FzZSB0byB3b3JrIGVmZmljaWVudGx5ICovCiAJZm9yIChpID0gMDsgaSA8IDB4NTAwMDsgaSsrKQogCQlpZiAoIShhdTEwMDAtPmFjOTdfaW9wb3J0LT5zdGF0dXMgJiBBQzk3Q19DUCkpCiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9NYWtlZmlsZSBiL3NvdW5kL29zcy9NYWtlZmlsZQppbmRleCAxMjAwNjcwLi5mODgzYzRiIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvTWFrZWZpbGUKKysrIGIvc291bmQvb3NzL01ha2VmaWxlCkBAIC0zNiw3ICszNiw2IEBACiBvYmotJChDT05GSUdfU09VTkRfTVNORFBJTikJKz0gbXNuZC5vIG1zbmRfcGlubmFjbGUubwogb2JqLSQoQ09ORklHX1NPVU5EX1ZXU05EKQkrPSB2d3NuZC5vCiBvYmotJChDT05GSUdfU09VTkRfSUNIKQkJKz0gaTgxMF9hdWRpby5vIGFjOTdfY29kZWMubwotb2JqLSQoQ09ORklHX1NPVU5EX0VTMTM3MSkJKz0gZXMxMzcxLm8gYWM5N19jb2RlYy5vCiBvYmotJChDT05GSUdfU09VTkRfQVUxNTUwX0FDOTcpCSs9IGF1MTU1MF9hYzk3Lm8gYWM5N19jb2RlYy5vCiBvYmotJChDT05GSUdfU09VTkRfVFJJREVOVCkJKz0gdHJpZGVudC5vIGFjOTdfY29kZWMubwogb2JqLSQoQ09ORklHX1NPVU5EX0JDTV9DUzQyOTdBKQkrPSBzd2FybV9jczQyOTdhLm8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9NYWtlZmlsZSBiL3NvdW5kL29zcy9kbWFzb3VuZC9NYWtlZmlsZQppbmRleCA0NjExNjM2Li4zYzE1MzE2IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvTWFrZWZpbGUKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL01ha2VmaWxlCkBAIC0yLDEyICsyLDYgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBETUEgc291bmQgZHJpdmVyCiAjCiAKLWRtYXNvdW5kX3BtYWMteQkJCSs9IGRtYXNvdW5kX2F3YWNzLm8gXAotCQkJCSAgIHRyYW5zXzE2Lm8gZGFjMzU1MGEubyB0YXNfY29tbW9uLm8gXAotCQkJCSAgIHRhczMwMDFjLm8gdGFzMzAwMWNfdGFibGVzLm8gXAotCQkJCSAgIHRhczMwMDQubyB0YXMzMDA0X3RhYmxlcy5vCi0KIG9iai0kKENPTkZJR19ETUFTT1VORF9BVEFSSSkJKz0gZG1hc291bmRfY29yZS5vIGRtYXNvdW5kX2F0YXJpLm8KLW9iai0kKENPTkZJR19ETUFTT1VORF9QTUFDKQkrPSBkbWFzb3VuZF9jb3JlLm8gZG1hc291bmRfcG1hYy5vCiBvYmotJChDT05GSUdfRE1BU09VTkRfUEFVTEEpCSs9IGRtYXNvdW5kX2NvcmUubyBkbWFzb3VuZF9wYXVsYS5vCiBvYmotJChDT05GSUdfRE1BU09VTkRfUTQwKQkrPSBkbWFzb3VuZF9jb3JlLm8gZG1hc291bmRfcTQwLm8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9hd2Fjc19kZWZzLmggYi9zb3VuZC9vc3MvZG1hc291bmQvYXdhY3NfZGVmcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTk0ZjQ2Li4wMDAwMDAwCi0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9hd2Fjc19kZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFRoaXMgZmlsZSB3YXMgd3JpdHRlbiBieSBzb21lb25lLCBzb21ld2hlcmUsIHNvbWV0aW1lICovCi0vKiBBbmQgaXMgcmVsZWFzZWQgaW50byB0aGUgUHVibGljIERvbWFpbiAgICAgICAgICAgICAgICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmbmRlZiBfQVdBQ1NfREVGU19IXwotI2RlZmluZSBfQVdBQ1NfREVGU19IXwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEFXQUNzIEF1ZGlvIFJlZ2lzdGVyIExheW91dCAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCBhd2Fjc19yZWdzIHsKLSAgICB1bnNpZ25lZAljb250cm9sOwkvKiBBdWRpbyBjb250cm9sIHJlZ2lzdGVyICovCi0gICAgdW5zaWduZWQJcGFkMFszXTsKLSAgICB1bnNpZ25lZAljb2RlY19jdHJsOwkvKiBDb2RlYyBjb250cm9sIHJlZ2lzdGVyICovCi0gICAgdW5zaWduZWQJcGFkMVszXTsKLSAgICB1bnNpZ25lZAljb2RlY19zdGF0OwkvKiBDb2RlYyBzdGF0dXMgcmVnaXN0ZXIgKi8KLSAgICB1bnNpZ25lZAlwYWQyWzNdOwotICAgIHVuc2lnbmVkCWNsaXBfY291bnQ7CS8qIENsaXBwaW5nIGNvdW50IHJlZ2lzdGVyICovCi0gICAgdW5zaWduZWQJcGFkM1szXTsKLSAgICB1bnNpZ25lZAlieXRlc3dhcDsJLyogRGF0YSBpcyBsaXR0bGUtZW5kaWFuIGlmIDEgKi8KLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQXVkaW8gQml0IE1hc2tzICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotLyogQXVkaW8gQ29udHJvbCBSZWcgQml0IE1hc2tzICovCi0vKiAtLS0tLSAtLS0tLS0tIC0tLSAtLS0gLS0tLS0gKi8KLSNkZWZpbmUgTUFTS19JU0ZTRUwJKDB4ZikJCS8qIElucHV0IFN1YkZyYW1lIFNlbGVjdCAqLwotI2RlZmluZSBNQVNLX09TRlNFTAkoMHhmIDw8IDQpCS8qIE91dHB1dCBTdWJGcmFtZSBTZWxlY3QgKi8KLSNkZWZpbmUgTUFTS19SQVRFCSgweDcgPDwgOCkJLyogU291bmQgUmF0ZSAqLwotI2RlZmluZSBNQVNLX0NOVExFUlIJKDB4MSA8PCAxMSkJLyogRXJyb3IgKi8KLSNkZWZpbmUgTUFTS19QT1JUQ0hHCSgweDEgPDwgMTIpCS8qIFBvcnQgQ2hhbmdlICovCi0jZGVmaW5lIE1BU0tfSUVFCSgweDEgPDwgMTMpCS8qIEVuYWJsZSBJbnRlcnJ1cHQgb24gRXJyb3IgKi8KLSNkZWZpbmUgTUFTS19JRVBDCSgweDEgPDwgMTQpCS8qIEVuYWJsZSBJbnRlcnJ1cHQgb24gUG9ydCBDaGFuZ2UgKi8KLSNkZWZpbmUgTUFTS19TU0ZTRUwJKDB4MyA8PCAxNSkJLyogU3RhdHVzIFN1YkZyYW1lIFNlbGVjdCAqLwotCi0vKiBBdWRpbyBDb2RlYyBDb250cm9sIFJlZyBCaXQgTWFza3MgKi8KLS8qIC0tLS0tIC0tLS0tIC0tLS0tLS0gLS0tIC0tLSAtLS0tLSAqLwotI2RlZmluZSBNQVNLX05FV0VDTUQJKDB4MSA8PCAyNCkJLyogTG9jazogZG9uJ3Qgd3JpdGUgdG8gcmVnIHdoZW4gMSAqLwotI2RlZmluZSBNQVNLX0VNT0RFU0VMCSgweDMgPDwgMjIpCS8qIFNlbmQgaW5mbyBvdXQgb24gd2hpY2ggZnJhbWU/ICovCi0jZGVmaW5lIE1BU0tfRVhNT0RFQUREUgkoMHgzZmYgPDwgMTIpCS8qIEV4dGVuZGVkIE1vZGUgQWRkcmVzcyAtLSAxMCBiaXRzICovCi0jZGVmaW5lIE1BU0tfRVhNT0RFREFUQQkoMHhmZmYpCQkvKiBFeHRlbmRlZCBNb2RlIERhdGEgLS0gMTIgYml0cyAqLwotCi0vKiBBdWRpbyBDb2RlYyBDb250cm9sIEFkZHJlc3MgVmFsdWVzIC8gTWFza3MgKi8KLS8qIC0tLS0tIC0tLS0tIC0tLS0tLS0gLS0tLS0tLSAtLS0tLS0gLSAtLS0tLSAqLwotI2RlZmluZSBNQVNLX0FERFIwCSgweDAgPDwgMTIpCS8qIEV4cGFuZGVkIERhdGEgTW9kZSBBZGRyZXNzIDAgKi8KLSNkZWZpbmUgTUFTS19BRERSX01VWAlNQVNLX0FERFIwCS8qIE11eCBDb250cm9sICovCi0jZGVmaW5lIE1BU0tfQUREUl9HQUlOCU1BU0tfQUREUjAKLQotI2RlZmluZSBNQVNLX0FERFIxCSgweDEgPDwgMTIpCS8qIEV4cGFuZGVkIERhdGEgTW9kZSBBZGRyZXNzIDEgKi8KLSNkZWZpbmUgTUFTS19BRERSX01VVEUJTUFTS19BRERSMQotI2RlZmluZSBNQVNLX0FERFJfUkFURQlNQVNLX0FERFIxCi0KLSNkZWZpbmUgTUFTS19BRERSMgkoMHgyIDw8IDEyKQkvKiBFeHBhbmRlZCBEYXRhIE1vZGUgQWRkcmVzcyAyICovCi0jZGVmaW5lIE1BU0tfQUREUl9WT0xBCU1BU0tfQUREUjIJLyogVm9sdW1lIENvbnRyb2wgQSAtLSBIZWFkcGhvbmVzICovCi0jZGVmaW5lIE1BU0tfQUREUl9WT0xIRCBNQVNLX0FERFIyCi0KLSNkZWZpbmUgTUFTS19BRERSNAkoMHg0IDw8IDEyKQkvKiBFeHBhbmRlZCBEYXRhIE1vZGUgQWRkcmVzcyA0ICovCi0jZGVmaW5lIE1BU0tfQUREUl9WT0xDCU1BU0tfQUREUjQJLyogVm9sdW1lIENvbnRyb2wgQyAtLSBTcGVha2VyICovCi0jZGVmaW5lIE1BU0tfQUREUl9WT0xTUEsgTUFTS19BRERSNAotCi0vKiBhZGRpdGlvbmFsIHJlZ2lzdGVycyBvZiBzY3JlYW1lciAqLwotI2RlZmluZSBNQVNLX0FERFI1CSgweDUgPDwgMTIpCS8qIEV4cGFuZGVkIERhdGEgTW9kZSBBZGRyZXNzIDUgKi8KLSNkZWZpbmUgTUFTS19BRERSNgkoMHg2IDw8IDEyKQkvKiBFeHBhbmRlZCBEYXRhIE1vZGUgQWRkcmVzcyA2ICovCi0jZGVmaW5lIE1BU0tfQUREUjcJKDB4NyA8PCAxMikJLyogRXhwYW5kZWQgRGF0YSBNb2RlIEFkZHJlc3MgNyAqLwotCi0vKiBBZGRyZXNzIDAgQml0IE1hc2tzICYgTWFjcm9zICovCi0vKiAtLS0tLS0tIC0gLS0tIC0tLS0tIC0gLS0tLS0tICovCi0jZGVmaW5lIE1BU0tfR0FJTlJJR0hUCSgweGYpCQkvKiBHYWluIFJpZ2h0IE1hc2sgKi8KLSNkZWZpbmUgTUFTS19HQUlOTEVGVAkoMHhmIDw8IDQpCS8qIEdhaW4gTGVmdCBNYXNrICovCi0jZGVmaW5lIE1BU0tfR0FJTkxJTkUJKDB4MSA8PCA4KQkvKiBEaXNhYmxlIE1pYyBwcmVhbXAgKi8KLSNkZWZpbmUgTUFTS19HQUlOTUlDCSgweDAgPDwgOCkJLyogRW5hYmxlIE1pYyBwcmVhbXAgKi8KLQotI2RlZmluZSBNQVNLX01VWF9DRAkoMHgxIDw8IDkpCS8qIFNlbGVjdCBDRCBpbiBNVVggKi8KLSNkZWZpbmUgTUFTS19NVVhfTUlDCSgweDEgPDwgMTApCS8qIFNlbGVjdCBNaWMgaW4gTVVYICovCi0jZGVmaW5lIE1BU0tfTVVYX0FVRElOCSgweDEgPDwgMTEpCS8qIFNlbGVjdCBBdWRpbyBJbiBpbiBNVVggKi8KLSNkZWZpbmUgTUFTS19NVVhfTElORQlNQVNLX01VWF9BVURJTgotCi0jZGVmaW5lIEdBSU5SSUdIVCh4KQkoKHgpICYgTUFTS19HQUlOUklHSFQpCi0jZGVmaW5lIEdBSU5MRUZUKHgpCSgoKHgpIDw8IDQpICYgTUFTS19HQUlOTEVGVCkKLQotI2RlZmluZSBERUZfQ0RfR0FJTiAweDAwYmIKLSNkZWZpbmUgREVGX01JQ19HQUlOIDB4MDBjYwotCi0vKiBBZGRyZXNzIDEgQml0IE1hc2tzICovCi0vKiAtLS0tLS0tIC0gLS0tIC0tLS0tICovCi0jZGVmaW5lIE1BU0tfQUREUjFSRVMxCSgweDMpCQkvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBNQVNLX1JFQ0FMSUJSQVRFICgweDEgPDwgMikJLyogUmVjYWxpYnJhdGUgKi8KLSNkZWZpbmUgTUFTS19TQU1QTEVSQVRFCSgweDcgPDwgMykJLyogU2FtcGxlIFJhdGU6ICovCi0jZGVmaW5lIE1BU0tfTE9PUFRIUlUJKDB4MSA8PCA2KQkvKiBMb29wdGhyb3VnaCBFbmFibGUgKi8KLSNkZWZpbmUgTUFTS19DTVVURQkoMHgxIDw8IDcpCS8qIE91dHB1dCBDIChTcGVha2VyKSBNdXRlIHdoZW4gMSAqLwotI2RlZmluZSBNQVNLX1NQS01VVEUJTUFTS19DTVVURQotI2RlZmluZSBNQVNLX0FERFIxUkVTMgkoMHgxIDw8IDgpCS8qIFJlc2VydmVkICovCi0jZGVmaW5lIE1BU0tfQU1VVEUJKDB4MSA8PCA5KQkvKiBPdXRwdXQgQSAoSGVhZHBob25lKSBNdXRlIHdoZW4gMSAqLwotI2RlZmluZSBNQVNLX0hETVVURQlNQVNLX0FNVVRFCi0jZGVmaW5lIE1BU0tfUEFST1VUMAkoMHgxIDw8IDEwKQkvKiBQYXJhbGxlbCBPdXRwdXQgMCAqLwotI2RlZmluZSBNQVNLX1BBUk9VVDEJKDB4MiA8PCAxMCkJLyogUGFyYWxsZWwgT3V0cHV0IDEgKi8KLQotI2RlZmluZSBNQVNLX01JQ19CT09TVCAgKDB4NCkgICAgICAgICAgIC8qIHNjcmVhbWVyIG1pYyBib29zdCAqLwotCi0jZGVmaW5lIFNBTVBMRVJBVEVfNDgwMDAJKDB4MCA8PCAzKQkvKiA0OCBvciA0NC4xIGtIeiAqLwotI2RlZmluZSBTQU1QTEVSQVRFXzMyMDAwCSgweDEgPDwgMykJLyogMzIgb3IgMjkuNCBrSHogKi8KLSNkZWZpbmUgU0FNUExFUkFURV8yNDAwMAkoMHgyIDw8IDMpCS8qIDI0IG9yIDIyLjA1IGtIeiAqLwotI2RlZmluZSBTQU1QTEVSQVRFXzE5MjAwCSgweDMgPDwgMykJLyogMTkuMiBvciAxNy42NCBrSHogKi8KLSNkZWZpbmUgU0FNUExFUkFURV8xNjAwMAkoMHg0IDw8IDMpCS8qIDE2IG9yIDE0Ljcga0h6ICovCi0jZGVmaW5lIFNBTVBMRVJBVEVfMTIwMDAJKDB4NSA8PCAzKQkvKiAxMiBvciAxMS4wMjUga0h6ICovCi0jZGVmaW5lIFNBTVBMRVJBVEVfOTYwMAkJKDB4NiA8PCAzKQkvKiA5LjYgb3IgOC44MiBrSHogKi8KLSNkZWZpbmUgU0FNUExFUkFURV84MDAwCQkoMHg3IDw8IDMpCS8qIDggb3IgNy4zNSBrSHogKi8KLQotLyogQWRkcmVzcyAyICYgNCBCaXQgTWFza3MgJiBNYWNyb3MgKi8KLS8qIC0tLS0tLS0gLSAtIC0gLS0tIC0tLS0tIC0gLS0tLS0tICovCi0jZGVmaW5lIE1BU0tfT1VUVk9MUklHSFQgKDB4ZikJCS8qIE91dHB1dCBSaWdodCBWb2x1bWUgKi8KLSNkZWZpbmUgTUFTS19BRERSMlJFUzEJKDB4MiA8PCA0KQkvKiBSZXNlcnZlZCAqLwotI2RlZmluZSBNQVNLX0FERFI0UkVTMQlNQVNLX0FERFIyUkVTMQotI2RlZmluZSBNQVNLX09VVFZPTExFRlQJKDB4ZiA8PCA2KQkvKiBPdXRwdXQgTGVmdCBWb2x1bWUgKi8KLSNkZWZpbmUgTUFTS19BRERSMlJFUzIJKDB4MiA8PCAxMCkJLyogUmVzZXJ2ZWQgKi8KLSNkZWZpbmUgTUFTS19BRERSNFJFUzIJTUFTS19BRERSMlJFUzIKLQotI2RlZmluZSBWT0xSSUdIVCh4KQkoKCh+KHgpKSAmIE1BU0tfT1VUVk9MUklHSFQpKQotI2RlZmluZSBWT0xMRUZUKHgpCSgoKH4oeCkpIDw8IDYpICYgTUFTS19PVVRWT0xMRUZUKQotCi0vKiBBdWRpbyBDb2RlYyBTdGF0dXMgUmVnIEJpdCBNYXNrcyAqLwotLyogLS0tLS0gLS0tLS0gLS0tLS0tIC0tLSAtLS0gLS0tLS0gKi8KLSNkZWZpbmUgTUFTS19FWFRFTkQJKDB4MSA8PCAyMykJLyogRXh0ZW5kICovCi0jZGVmaW5lIE1BU0tfVkFMSUQJKDB4MSA8PCAyMikJLyogVmFsaWQgRGF0YT8gKi8KLSNkZWZpbmUgTUFTS19PRkxFRlQJKDB4MSA8PCAyMSkJLyogT3ZlcmZsb3cgTGVmdCAqLwotI2RlZmluZSBNQVNLX09GUklHSFQJKDB4MSA8PCAyMCkJLyogT3ZlcmZsb3cgUmlnaHQgKi8KLSNkZWZpbmUgTUFTS19FUlJDT0RFCSgweGYgPDwgMTYpCS8qIEVycm9yIENvZGUgKi8KLSNkZWZpbmUgTUFTS19SRVZJU0lPTgkoMHhmIDw8IDEyKQkvKiBSZXZpc2lvbiBOdW1iZXIgKi8KLSNkZWZpbmUgTUFTS19NRkdJRAkoMHhmIDw8IDgpCS8qIE1mZy4gSUQgKi8KLSNkZWZpbmUgTUFTS19DT0RTVEFUUkVTCSgweGYgPDwgNCkJLyogYml0cyA0IC0gNyByZXNlcnZlZCAqLwotI2RlZmluZSBNQVNLX0lOUFBPUlQJKDB4ZikJCS8qIElucHV0IFBvcnQgKi8KLSNkZWZpbmUgTUFTS19IRFBDT05OCTgJCS8qIGhlYWRwaG9uZSBwbHVnZ2VkIGluICovCi0KLS8qIENsaXBwaW5nIENvdW50IFJlZyBCaXQgTWFza3MgKi8KLS8qIC0tLS0tLS0tIC0tLS0tIC0tLSAtLS0gLS0tLS0gKi8KLSNkZWZpbmUgTUFTS19DTElQTEVGVAkoMHhmZiA8PCA3KQkvKiBDbGlwcGluZyBDb3VudCwgTGVmdCBDaGFubmVsICovCi0jZGVmaW5lIE1BU0tfQ0xJUFJJR0hUCSgweGZmKQkJLyogQ2xpcHBpbmcgQ291bnQsIFJpZ2h0IENoYW5uZWwgKi8KLQotLyogREJETUEgQ2hhbm5lbFN0YXR1cyBCaXQgTWFza3MgKi8KLS8qIC0tLS0tIC0tLS0tLS0tLS0tLS0gLS0tIC0tLS0tICovCi0jZGVmaW5lIE1BU0tfQ1NFUlIJKDB4MSA8PCA3KQkvKiBFcnJvciAqLwotI2RlZmluZSBNQVNLX0VPSQkoMHgxIDw8IDYpCS8qIEVuZCBvZiBJbnB1dCAtLSBvbmx5IGZvciBJbnB1dCBDaGFubmVsICovCi0jZGVmaW5lIE1BU0tfQ1NVTlVTRUQJKDB4MWYgPDwgMSkJLyogYml0cyAxLTUgbm90IHVzZWQgKi8KLSNkZWZpbmUgTUFTS19XQUlUCSgweDEpCQkvKiBXYWl0ICovCi0KLS8qIFZhcmlvdXMgUmF0ZXMgKi8KLS8qIC0tLS0tLS0gLS0tLS0gKi8KLSNkZWZpbmUgUkFURV80ODAwMAkoMHgwIDw8IDgpCS8qIDQ4IGtIeiAqLwotI2RlZmluZSBSQVRFXzQ0MTAwCSgweDAgPDwgOCkJLyogNDQuMSBrSHogKi8KLSNkZWZpbmUgUkFURV8zMjAwMAkoMHgxIDw8IDgpCS8qIDMyIGtIeiAqLwotI2RlZmluZSBSQVRFXzI5NDAwCSgweDEgPDwgOCkJLyogMjkuNCBrSHogKi8KLSNkZWZpbmUgUkFURV8yNDAwMAkoMHgyIDw8IDgpCS8qIDI0IGtIeiAqLwotI2RlZmluZSBSQVRFXzIyMDUwCSgweDIgPDwgOCkJLyogMjIuMDUga0h6ICovCi0jZGVmaW5lIFJBVEVfMTkyMDAJKDB4MyA8PCA4KQkvKiAxOS4yIGtIeiAqLwotI2RlZmluZSBSQVRFXzE3NjQwCSgweDMgPDwgOCkJLyogMTcuNjQga0h6ICovCi0jZGVmaW5lIFJBVEVfMTYwMDAJKDB4NCA8PCA4KQkvKiAxNiBrSHogKi8KLSNkZWZpbmUgUkFURV8xNDcwMAkoMHg0IDw8IDgpCS8qIDE0Ljcga0h6ICovCi0jZGVmaW5lIFJBVEVfMTIwMDAJKDB4NSA8PCA4KQkvKiAxMiBrSHogKi8KLSNkZWZpbmUgUkFURV8xMTAyNQkoMHg1IDw8IDgpCS8qIDExLjAyNSBrSHogKi8KLSNkZWZpbmUgUkFURV85NjAwCSgweDYgPDwgOCkJLyogOS42IGtIeiAqLwotI2RlZmluZSBSQVRFXzg4MjAJKDB4NiA8PCA4KQkvKiA4LjgyIGtIeiAqLwotI2RlZmluZSBSQVRFXzgwMDAJKDB4NyA8PCA4KQkvKiA4IGtIeiAqLwotI2RlZmluZSBSQVRFXzczNTAJKDB4NyA8PCA4KQkvKiA3LjM1IGtIeiAqLwotCi0jZGVmaW5lIFJBVEVfTE9XCTEJLyogSElHSCA9IDQ4a0h6LCBldGM7ICBMT1cgPSA0NC4xa0h6LCBldGMuICovCi0KLS8qKioqKioqKioqKioqKioqKioqLwotLyogQnVyZ3VuZHkgdmFsdWVzICovCi0vKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBNQVNLX0FERFJfQlVSR1VORFlfSU5QU0VMMjEgKDB4MTEgPDwgMTIpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9JTlBTRUwzICgweDEyIDw8IDEyKQotCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9HQUlOQ0gxICgweDEzIDw8IDEyKQotI2RlZmluZSBNQVNLX0FERFJfQlVSR1VORFlfR0FJTkNIMiAoMHgxNCA8PCAxMikKLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX0dBSU5DSDMgKDB4MTUgPDwgMTIpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9HQUlOQ0g0ICgweDE2IDw8IDEyKQotCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9WT0xDSDEgKDB4MjAgPDwgMTIpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9WT0xDSDIgKDB4MjEgPDwgMTIpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9WT0xDSDMgKDB4MjIgPDwgMTIpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9WT0xDSDQgKDB4MjMgPDwgMTIpCi0KLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX09VVFBVVFNFTEVDVFMgKDB4MkIgPDwgMTIpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9PVVRQVVRFTkFCTEVTICgweDJGIDw8IDEyKQotCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9NQVNURVJfVk9MVU1FICgweDMwIDw8IDEyKQotCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9NT1JFX09VVFBVVEVOQUJMRVMgKDB4NjAgPDwgMTIpCi0KLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX0FUVEVOU1BFQUtFUiAoMHg2MiA8PCAxMikKLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX0FUVEVOTElORU9VVCAoMHg2MyA8PCAxMikKLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX0FUVEVOSFAgKDB4NjQgPDwgMTIpCi0KLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX1ZPTENEIChNQVNLX0FERFJfQlVSR1VORFlfVk9MQ0gxKQotI2RlZmluZSBNQVNLX0FERFJfQlVSR1VORFlfVk9MTElORSAoTUFTS19BRERSX0JVUkdVTkRZX1ZPTENIMikKLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX1ZPTE1JQyAoTUFTS19BRERSX0JVUkdVTkRZX1ZPTENIMykKLSNkZWZpbmUgTUFTS19BRERSX0JVUkdVTkRZX1ZPTE1PREVNIChNQVNLX0FERFJfQlVSR1VORFlfVk9MQ0g0KQotCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9HQUlOQ0QgKE1BU0tfQUREUl9CVVJHVU5EWV9HQUlOQ0gxKQotI2RlZmluZSBNQVNLX0FERFJfQlVSR1VORFlfR0FJTkxJTkUgKE1BU0tfQUREUl9CVVJHVU5EWV9HQUlOQ0gyKQotI2RlZmluZSBNQVNLX0FERFJfQlVSR1VORFlfR0FJTk1JQyAoTUFTS19BRERSX0JVUkdVTkRZX0dBSU5DSDMpCi0jZGVmaW5lIE1BU0tfQUREUl9CVVJHVU5EWV9HQUlOTU9ERU0gKE1BU0tfQUREUl9CVVJHVU5EWV9WT0xDSDQpCi0KLQotLyogVGhlc2UgYXJlIGFsbCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGJ1cmd1bmR5ICovCi0jZGVmaW5lIERFRl9CVVJHVU5EWV9JTlBTRUwyMSAoMHhBQSkKLSNkZWZpbmUgREVGX0JVUkdVTkRZX0lOUFNFTDMgKDB4MEEpCi0KLSNkZWZpbmUgREVGX0JVUkdVTkRZX0dBSU5DRCAoMHgzMykKLSNkZWZpbmUgREVGX0JVUkdVTkRZX0dBSU5MSU5FICgweDQ0KQotI2RlZmluZSBERUZfQlVSR1VORFlfR0FJTk1JQyAoMHg0NCkKLSNkZWZpbmUgREVGX0JVUkdVTkRZX0dBSU5NT0RFTSAoMHgwNikKLQotLyogUmVtZW1iZXI6IGxvd2VzdCB2b2x1bWUgaGVyZSBpcyAweDliICovCi0jZGVmaW5lIERFRl9CVVJHVU5EWV9WT0xDRCAoMHhDQ0NDQ0NDQykKLSNkZWZpbmUgREVGX0JVUkdVTkRZX1ZPTExJTkUgKDB4MDAwMDAwMDApCi0jZGVmaW5lIERFRl9CVVJHVU5EWV9WT0xNSUMgKDB4MDAwMDAwMDApCi0jZGVmaW5lIERFRl9CVVJHVU5EWV9WT0xNT0RFTSAoMHhDQ0NDQ0NDQykKLQotI2RlZmluZSBERUZfQlVSR1VORFlfT1VUUFVUU0VMRUNUUyAoMHgwMTBmMDEwZikKLSNkZWZpbmUgREVGX0JVUkdVTkRZX09VVFBVVEVOQUJMRVMgKDB4MEEpCi0KLSNkZWZpbmUgREVGX0JVUkdVTkRZX01BU1RFUl9WT0xVTUUgKDB4RkZGRkZGRkYpCi0KLSNkZWZpbmUgREVGX0JVUkdVTkRZX01PUkVfT1VUUFVURU5BQkxFUyAoMHg3RSkKLQotI2RlZmluZSBERUZfQlVSR1VORFlfQVRURU5TUEVBS0VSICgweDQ0KQotI2RlZmluZSBERUZfQlVSR1VORFlfQVRURU5MSU5FT1VUICgweENDKQotI2RlZmluZSBERUZfQlVSR1VORFlfQVRURU5IUCAoMHhDQykKLQotLyoqKioqKioqKioqKioqKioqKioqKi8KLS8qIGkycyBsYXlvdXQgdmFsdWVzICovCi0vKioqKioqKioqKioqKioqKioqKioqLwotCi0jZGVmaW5lIEkyU19SRUdfSU5UX0NUTAkJCTB4MDAKLSNkZWZpbmUgSTJTX1JFR19TRVJJQUxfRk9STUFUCQkweDEwCi0jZGVmaW5lIEkyU19SRUdfQ09ERUNfTVNHX09VVAkJMHgyMAotI2RlZmluZSBJMlNfUkVHX0NPREVDX01TR19JTgkJMHgzMAotI2RlZmluZSBJMlNfUkVHX0ZSQU1FX0NPVU5UCQkweDQwCi0jZGVmaW5lIEkyU19SRUdfRlJBTUVfTUFUQ0gJCTB4NTAKLSNkZWZpbmUgSTJTX1JFR19EQVRBV09SRF9TSVpFUwkJMHg2MAotI2RlZmluZSBJMlNfUkVHX1BFQUtMRVZFTF9TRUwJCTB4NzAKLSNkZWZpbmUgSTJTX1JFR19QRUFLTEVWRUxfSU4wCQkweDgwCi0jZGVmaW5lIEkyU19SRUdfUEVBS0xFVkVMX0lOMQkJMHg5MAotCi0jZW5kaWYgLyogX0FXQUNTX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kYWMzNTUwYS5jIGIvc291bmQvb3NzL2RtYXNvdW5kL2RhYzM1NTBhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmMGQwM2EuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL2RhYzM1NTBhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDkgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgdGhlIGkyYy9pMnMgYmFzZWQgREFDMzU1MGEgc291bmQgY2hpcCB1c2VkCi0gKiBvbiBzb21lIEFwcGxlIGlCb29rcy4gQWxzbyBrbm93biBhcyAiREFDQSIuCi0gKgotICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotI2luY2x1ZGUgImRtYXNvdW5kLmgiCi0KLS8qIEZZSTogVGhpcyBjb2RlIHdhcyBkZXJpdmVkIGZyb20gdGhlIHRhczMwMDFjLmMgVGV4YXMvVHVtYmxlciBtaXhlcgotICogY29udHJvbCBjb2RlLCBhcyB3ZWxsIGFzIGluZm8gZGVyaXZlZCBmcm9tIHRoZSBBcHBsZURBQ0FBdWRpbyBkcml2ZXIKLSAqIGZyb20gRGFyd2luIENWUyAobWFpbiB0aGluZyBJIGRlcml2ZWQgYmVpbmcgcmVnaXN0ZXIgbnVtYmVycyBhbmQgCi0gKiB2YWx1ZXMsIGFzIHdlbGwgYXMgd2hlbiB0byBtYWtlIHRoZSBjYWxscykuICovCi0KLSNkZWZpbmUgSTJDX0RSSVZFUklEX0RBQ0EgKDB4RkRDQikKLQotI2RlZmluZSBEQUNBX1ZFUlNJT04JIjAuMSIKLSNkZWZpbmUgREFDQV9EQVRFICIyMDAxMDkzMCIKLQotc3RhdGljIGludCBjdXJfbGVmdF92b2w7Ci1zdGF0aWMgaW50IGN1cl9yaWdodF92b2w7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgKmRhY2FfY2xpZW50OwotCi1zdGF0aWMgaW50IGRhY2FfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLXN0YXRpYyBpbnQgZGFjYV9kZXRlY3RfY2xpZW50KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MpOwotc3RhdGljIGludCBkYWNhX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KLXN0cnVjdCBpMmNfZHJpdmVyIGRhY2FfZHJpdmVyID0geyAgCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJCT0gIkRBQzM1NTBBIGRyaXZlciAgViAiIERBQ0FfVkVSU0lPTiwKLQl9LAotCS5pZAkJCT0gSTJDX0RSSVZFUklEX0RBQ0EsCi0JLmF0dGFjaF9hZGFwdGVyCQk9IGRhY2FfYXR0YWNoX2FkYXB0ZXIsCi0JLmRldGFjaF9jbGllbnQJCT0gZGFjYV9kZXRhY2hfY2xpZW50LAotfTsKLQotI2RlZmluZSBWT0xfTUFYICgoMTw8MjApIC0gMSkKLQotdm9pZCBkYWNhX2dldF92b2x1bWUodWludCAqIGxlZnRfdm9sLCB1aW50ICAqcmlnaHRfdm9sKQotewotCSpsZWZ0X3ZvbCA9IGN1cl9sZWZ0X3ZvbCA+PiA1OwotCSpyaWdodF92b2wgPSBjdXJfcmlnaHRfdm9sID4+IDU7Ci19Ci0KLWludCBkYWNhX3NldF92b2x1bWUodWludCBsZWZ0X3ZvbCwgdWludCByaWdodF92b2wpCi17Ci0JdW5zaWduZWQgc2hvcnQgdm9sZGF0YTsKLSAgCi0JaWYgKCFkYWNhX2NsaWVudCkKLQkJcmV0dXJuIC0xOwotCi0JLyogRGVyaXZlZCBmcm9tIGV4cGVyaWVuY2UsIG5vdCBmcm9tIGFueSBzcGVjaWZpYyB2YWx1ZXMgKi8KLQlsZWZ0X3ZvbCA8PD0gNTsKLQlyaWdodF92b2wgPDw9IDU7Ci0KLQlpZiAobGVmdF92b2wgPiBWT0xfTUFYKQotCQlsZWZ0X3ZvbCA9IFZPTF9NQVg7Ci0JaWYgKHJpZ2h0X3ZvbCA+IFZPTF9NQVgpCi0JCXJpZ2h0X3ZvbCA9IFZPTF9NQVg7Ci0KLQl2b2xkYXRhID0gKChsZWZ0X3ZvbCA+PiAxNCkgICYgMHgzZikgPDwgODsKLQl2b2xkYXRhIHw9IChyaWdodF92b2wgPj4gMTQpICAmIDB4M2Y7Ci0gIAotCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGRhY2FfY2xpZW50LCAyLCB2b2xkYXRhKSA8IDApIHsKLQkJcHJpbnRrKCJkYWNhOiBmYWlsZWQgdG8gc2V0IHZvbHVtZSBcbiIpOwotCQlyZXR1cm4gLTE7IAotCX0KLQotCWN1cl9sZWZ0X3ZvbCA9IGxlZnRfdm9sOwotCWN1cl9yaWdodF92b2wgPSByaWdodF92b2w7Ci0gIAotCXJldHVybiAwOwotfQotCi1pbnQgZGFjYV9sZWF2ZV9zbGVlcCh2b2lkKQotewotCWlmICghZGFjYV9jbGllbnQpCi0JCXJldHVybiAtMTsKLSAgCi0JLyogRG8gYSBzaG9ydCBzbGVlcCwganVzdCB0byBtYWtlIHN1cmUgSTJDIGJ1cyBpcyBhd2FrZSBhbmQgcGF5aW5nCi0JICogYXR0ZW50aW9uIHRvIHVzCi0JICovCi0JbXNsZWVwKDIwKTsKLQkvKiBXcml0ZSB0aGUgc2FtcGxlIHJhdGUgcmVnIHRoZSB2YWx1ZSBpdCBuZWVkcyAqLwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGFjYV9jbGllbnQsIDEsIDgpOwotCWRhY2Ffc2V0X3ZvbHVtZShjdXJfbGVmdF92b2wgPj4gNSwgY3VyX3JpZ2h0X3ZvbCA+PiA1KTsKLQkvKiBBbm90aGVyIHNob3J0IGRlbGF5LCBqdXN0IHRvIG1ha2Ugc3VyZSB0aGUgb3RoZXIgSTJDIGJ1cyB3cml0ZXMKLQkgKiBoYXZlIHRha2VuLi4uCi0JICovCi0JbXNsZWVwKDIwKTsKLQkvKiBXcml0ZSB0aGUgZ2xvYmFsIGNvbmZpZyByZWcgLSBpbnZlcnQgcmlnaHQgcG93ZXIgYW1wLAotCSAqIERBQyBvbiwgdXNlIDUtdm9sdCBtb2RlICovCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYWNhX2NsaWVudCwgMywgMHg0NSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGRhY2FfZW50ZXJfc2xlZXAodm9pZCkKLXsKLQlpZiAoIWRhY2FfY2xpZW50KQotCQlyZXR1cm4gLTE7Ci0KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhY2FfY2xpZW50LCAxLCA4KTsKLQlkYWNhX3NldF92b2x1bWUoY3VyX2xlZnRfdm9sID4+IDUsIGN1cl9yaWdodF92b2wgPj4gNSk7Ci0KLQkvKiBXcml0ZSB0aGUgZ2xvYmFsIGNvbmZpZyByZWcgLSBpbnZlcnQgcmlnaHQgcG93ZXIgYW1wLAotCSAqIERBQyBvbiwgZW50ZXIgbG93LXBvd2VyIG1vZGUsIHVzZSA1LXZvbHQgbW9kZQotCSAqLwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGFjYV9jbGllbnQsIDMsIDB4NjUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGFjYV9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaWYgKCFzdHJuY21wKGFkYXB0ZXItPm5hbWUsICJtYWMtaW8iLCA2KSkKLQkJZGFjYV9kZXRlY3RfY2xpZW50KGFkYXB0ZXIsIDB4NGQpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRhY2FfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKiBuZXdfY2xpZW50KQotewotCS8qIAotCSAqIFByb2JlIGlzIG5vdCB3b3JraW5nIHdpdGggdGhlIGN1cnJlbnQgaTJjLWtleXdlc3QKLQkgKiBkcml2ZXIuIFdlIHRyeSB0byB1c2UgYWRkciAweDRkIG9uIGVhY2ggYWRhcHRlcnMKLQkgKiBpbnN0ZWFkLCBieSBzZXR0aW5nIHRoZSBmb3JtYXQgcmVnaXN0ZXIuCi0JICogCi0JICogRklYTUU6IEknbSBzdXJlIHRoYXQgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlCi0JICogZGV2aWNlLXRyZWUuIC0tQmVuSC4KLQkgKi8KLSAgCi0JLyogV3JpdGUgdGhlIGdsb2JhbCBjb25maWcgcmVnIC0gaW52ZXJ0IHJpZ2h0IHBvd2VyIGFtcCwKLQkgKiBEQUMgb24sIHVzZSA1LXZvbHQgbW9kZQotCSAqLwotCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDMsIDB4NDUpKQotCQlyZXR1cm4gLTE7Ci0KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKG5ld19jbGllbnQsIDEsIDgpOwotCWRhY2FfY2xpZW50ID0gbmV3X2NsaWVudDsKLQlkYWNhX3NldF92b2x1bWUoMTUwMDAsIDE1MDAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRhY2FfZGV0ZWN0X2NsaWVudChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzKQotewotCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIkRBQyAzNTUwQSBEaWdpdGFsIEVxdWFsaXplciI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7Ci0JaW50IHJjID0gLUVOT0RFVjsKLQotCW5ld19jbGllbnQgPSBremFsbG9jKHNpemVvZigqbmV3X2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghbmV3X2NsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQluZXdfY2xpZW50LT5kcml2ZXIgPSAmZGFjYV9kcml2ZXI7Ci0JbmV3X2NsaWVudC0+ZmxhZ3MgPSAwOwotCXN0cmNweShuZXdfY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSk7Ci0KLQlpZiAoZGFjYV9pbml0X2NsaWVudChuZXdfY2xpZW50KSkKLQkJZ290byBiYWlsOwotCi0JLyogVGVsbCB0aGUgaTJjIGxheWVyIGEgbmV3IGNsaWVudCBoYXMgYXJyaXZlZCAqLwotCWlmIChpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkKLQkJZ290byBiYWlsOwotCi0JcmV0dXJuIDA7Ci0gYmFpbDoKLQlrZnJlZShuZXdfY2xpZW50KTsKLQlyZXR1cm4gcmM7Ci19Ci0KLQotc3RhdGljIGludCBkYWNhX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpZiAoY2xpZW50ID09IGRhY2FfY2xpZW50KQotCQlkYWNhX2NsaWVudCA9IE5VTEw7Ci0KLSAgCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBkYWNhX2NsZWFudXAodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmZGFjYV9kcml2ZXIpOwotfQotCi1pbnQgZGFjYV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKCJkYWMzNTUwYSBkcml2ZXIgdmVyc2lvbiAlcyAoJXMpXG4iLERBQ0FfVkVSU0lPTixEQUNBX0RBVEUpOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmZGFjYV9kcml2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kLmggYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaAppbmRleCAyNWRkNWEzLi5kOTc4YjAwIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaAorKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmQuaApAQCAtNTksNyArNTksNiBAQAogICAgICAqLwogCiAjdW5kZWYgSEFTXzhCSVRfVEFCTEVTCi0jdW5kZWYgSEFTX1JFQ09SRAogCiAjaWYgZGVmaW5lZChDT05GSUdfRE1BU09VTkRfQVRBUkkpIHx8IGRlZmluZWQoQ09ORklHX0RNQVNPVU5EX0FUQVJJX01PRFVMRSkgfHxcCiAgICAgZGVmaW5lZChDT05GSUdfRE1BU09VTkRfUEFVTEEpIHx8IGRlZmluZWQoQ09ORklHX0RNQVNPVU5EX1BBVUxBX01PRFVMRSkgfHxcCkBAIC04MywxMCArODIsNiBAQAogI2RlZmluZSBERUZBVUxUX05fQlVGRkVSUyA0CiAjZGVmaW5lIERFRkFVTFRfQlVGRl9TSVpFICgxPDwxNSkKIAotI2lmIGRlZmluZWQoQ09ORklHX0RNQVNPVU5EX1BNQUMpIHx8IGRlZmluZWQoQ09ORklHX0RNQVNPVU5EX1BNQUNfTU9EVUxFKQotI2RlZmluZSBIQVNfUkVDT1JECi0jZW5kaWYKLQogICAgIC8qCiAgICAgICogIEluaXRpYWxpemF0aW9uCiAgICAgICovCkBAIC0xNjgsOSArMTYzLDYgQEAKICAgICBTRVRUSU5HUyBzb2Z0OwkvKiBzb2Z0d2FyZSBzZXR0aW5ncyAqLwogICAgIFNFVFRJTkdTIGRzcDsJLyogL2Rldi9kc3AgZGVmYXVsdCBzZXR0aW5ncyAqLwogICAgIFRSQU5TICp0cmFuc193cml0ZTsJLyogc3VwcG9ydGVkIHRyYW5zbGF0aW9ucyAqLwotI2lmZGVmIEhBU19SRUNPUkQKLSAgICBUUkFOUyAqdHJhbnNfcmVhZDsJLyogc3VwcG9ydGVkIHRyYW5zbGF0aW9ucyAqLwotI2VuZGlmCiAgICAgaW50IHZvbHVtZV9sZWZ0OwkvKiB2b2x1bWUgKHJhbmdlIGlzIG1hY2hpbmUgZGVwZW5kZW50KSAqLwogICAgIGludCB2b2x1bWVfcmlnaHQ7CiAgICAgaW50IGJhc3M7CQkvKiB0b25lIChyYW5nZSBpcyBtYWNoaW5lIGRlcGVuZGVudCkgKi8KQEAgLTI1MywxMSArMjQ1LDYgQEAKIGV4dGVybiBzdHJ1Y3Qgc291bmRfcXVldWUgZG1hc291bmRfd3JpdGVfc3E7CiAjZGVmaW5lIHdyaXRlX3NxCWRtYXNvdW5kX3dyaXRlX3NxCiAKLSNpZmRlZiBIQVNfUkVDT1JECi1leHRlcm4gc3RydWN0IHNvdW5kX3F1ZXVlIGRtYXNvdW5kX3JlYWRfc3E7Ci0jZGVmaW5lIHJlYWRfc3EJCWRtYXNvdW5kX3JlYWRfc3EKLSNlbmRpZgotCiBleHRlcm4gaW50IGRtYXNvdW5kX2NhdGNoUmFkaXVzOwogI2RlZmluZSBjYXRjaFJhZGl1cwlkbWFzb3VuZF9jYXRjaFJhZGl1cwogCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZjYzODgwLi4wMDAwMDAwCi0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIxNSArMCwwIEBACi0vKgotICogIGxpbnV4L3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9hd2Fjcy5jCi0gKgotICogIFBvd2VyTWFjIGBBV0FDUycgYW5kIGBCdXJndW5keScgRE1BIFNvdW5kIERyaXZlcgotICogIHdpdGggc29tZSBsaW1pdGVkIHN1cHBvcnQgZm9yIERBQ0EgJiBUdW1ibGVyCi0gKgotICogIFNlZSBsaW51eC9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jIGZvciBjb3B5cmlnaHQgYW5kCi0gKiAgaGlzdG9yeSBwcmlvciB0byAyMDAxLzAxLzI2LgotICoKLSAqCTI2LzAxLzIwMDEgZWQgMC4xIElhaW4gU2FuZG9lCi0gKgkJLSBhZGRlZCB2ZXJzaW9uIGluZm8uCi0gKgkJLSBtb3ZlZCBkYmRtYSBjb21tYW5kIGJ1ZmZlciBhbGxvY2F0aW9uIHRvIFBNYWNYWFhTcVNldHVwKCkKLSAqCQktIGZpeGVkIHVwIGJlZXAgZGJkbWEgY21kIGJ1ZmZlcnMKLSAqCi0gKgkwOC8wMi8yMDAxIFswLjJdCi0gKgkJLSBtYWtlIFNORENUTF9EU1BfR0VURk1UUyByZXR1cm4gdGhlIGNvcnJlY3QgaW5mbyBmb3IgdGhlIGgvdwotICoJCS0gbW92ZSBzb2Z0IGZvcm1hdCB0cmFuc2xhdGlvbnMgdG8gYSBzZXBhcmF0ZSBmaWxlCi0gKgkJLSBbMC4zXSBtYWtlIFNORENUTF9EU1BfR0VUQ0FQUyByZXR1cm4gY29ycmVjdCBpbmZvLgotICoJCS0gWzAuNF0gbW9yZSBpbmZvcm1hdGl2ZSBtYWNoaW5lIG5hbWUgc3RyaW5ncy4KLSAqCQktIFswLjVdCi0gKgkJLSByZWNvcmQgY2hhbmdlcy4KLSAqCQktIG1hZGUgdGhlIGRlZmF1bHRfaGFyZC9zb2Z0IGVudHJpZXMuCi0gKgkwNC8wNC8yMDAxIFswLjZdCi0gKgkJLSBtaW5vciBjb3JyZWN0aW9uIHRvIGJpdCBhc3NpZ25tZW50cyBpbiBhd2Fjc19kZWZzLmgKLSAqCQktIGluY29ycG9yYXRlIG1peGVyIGNoYW5nZXMgZnJvbSAyLjIueCBiYWNrLXBvcnQuCi0gKgkJLSB0YWtlIG91dCBwYXNzdGhydSBhcyBhIHJlYyBpbnB1dCAoaXQgaXNuJ3QpLgotICogICAgICAgICAgICAgIC0gbWFrZSBJbnB1dCBHYWluIHNsaWRlciB3b3JrIHRoZSAncmlnaHQgd2F5IHVwJy4KLSAqICAgICAgICAgICAgICAtIHRyeSB0byBtYWtlIHRoZSBtaXhlciBzbGlkZXJzIG1vcmUgbG9naWNhbCAtIHNvIG5vdyB0aGUKLSAqICAgICAgICAgICAgICAgIGlucHV0IHNlbGVjdG9ycyBhcmUganVzdCB0d28tc3RhdGUgKD41MCUgPT0gT04pIGFuZCB0aGUKLSAqICAgICAgICAgICAgICAgIElucHV0IEdhaW4gc2xpZGVyIGhhbmRsZXMgdGhlIHJlc3Qgb2YgdGhlIGdhaW4gaXNzdWVzLgotICogICAgICAgICAgICAgIC0gdHJ5IHRvIHBpY2sgc2xpZGVyIHJlcHJlc2VudGF0aW9ucyB0aGF0IG1vc3QgY2xvc2VseSBtYXRjaAotICogICAgICAgICAgICAgICAgdGhlIGFjdHVhbCB1c2UgLSBlLmcuIElHYWluIGZvciBpbnB1dCBnYWluLi4uIAotICogICAgICAgICAgICAgIC0gZmlyc3Qgc3RhYiBhdCBvdmVyL3VuZGVyLXJ1biBkZXRlY3Rpb24uCi0gKgkJLSBtaW5vciBjb3NtZXRpYyBjaGFuZ2VzIHRvIElSUSBpZGVudGlmaWNhdGlvbi4KLSAqCQktIGZpeCBidWcgd2hlcmUgcmF0ZXMgPiBtYXggd291bGQgYmUgcmVwb3J0ZWQgYXMgc3VwcG9ydGVkLgotICogICAgICAgICAgICAgIC0gZmlyc3Qgc3RhYiBhdCBvdmVyL3VuZGVyLXJ1biBkZXRlY3Rpb24uCi0gKiAgICAgICAgICAgICAgLSBtYWtlIHVzZSBvZiBpMmMgZm9yIG1peGVyIHNldHRpbmdzIGNvbmRpdGlvbmFsIG9uIHBlcmNoCi0gKiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBjdWRhIChzb21lIG1hY2hpbmVzIHdpdGhvdXQgcGVyY2ggaGF2ZSBjdWRhKS4KLSAqICAgICAgICAgICAgICAtIGZpeCBidWcgd2hlcmUgVFggc3RvcHMgd2hlbiBkYmRtYSBzdGF0dXMgY29tZXMgdXAgIkRFQUQiCi0gKgkJICBzbyBmYXIgb25seSByZXBvcnRlZCBvbiBQb3dlckNvbXB1dGluZyBjbG9uZXMgLi4uIGJ1dC4KLSAqCQktIHB1dCBpbiBBV0FDUy9TY3JlYW1lciByZWdpc3RlciB3cml0ZSB0aW1lb3V0cy4KLSAqCQktIHBhcnQgd2F5IHRvIHBhcnRpdGlvbmluZyB0aGUgaW5pdCgpIHN0dWZmCi0gKgkJLSBmaXJzdCBwYXNzIGF0ICd0dW1ibGVyJyBzdHVmZiAobm90IHN1cHBvcnQgLSBqdXN0IGFuIGF0dGVtcHQKLSAqCQkgIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gbG9hZCBvbiBuZXcgRzRzKS4KLSAqICAgICAgMDEvMDIvMjAwMiBbMC43XSAtIEJlbkgKLSAqCSAgICAgICAgLSBhbGwgc29ydCBvZiBtaW5vciBiaXRzIHdlbnQgaW4gc2luY2UgdGhlIGxhdGVzdCB1cGRhdGUsIEkKLSAqCSAgICAgICAgICBidW1wZWQgdGhlIHZlcnNpb24gbnVtYmVyIGZvciB0aGF0IHJlYXNvbgotICoKLSAqICAgICAgMDcvMjYvMjAwMiBbMC44XSAtIEJlbkgKLSAqCSAgICAgICAgLSBNb3JlIG1pbm9yIGJpdHMgc2luY2UgbGFzdCBjaGFuZ2Vsb2cgKEkgc2hvdWxkIGJlIG1vcmUgY2FyZWZ1bAotICoJICAgICAgICAgIHdpdGggdGhvc2UpCi0gKgkgICAgICAgIC0gU3VwcG9ydCBmb3Igc25hcHBlciAmIGJldHRlciB0dW1ibGVyIGludGVncmF0aW9uIGJ5IFRvYnkgU2FyZ2VhbnQKLSAqCSAgICAgICAgLSBIZWFkcGhvbmUgZGV0ZWN0IGZvciBzY3JlbWVyIGJ5IEp1bGllbiBCbGFjaGUKLSAqCSAgICAgICAgLSBNb3JlIHR1bWJsZXIgZml4ZWQgYnkgQW5kcmVhcyBTY2h3YWIKLSAqCTExLzI5LzIwMDMgWzAuOC4xXSAtIFJlbnpvIERhdm9saSAoS2luZyBFbnpvKQotICoJCS0gU3VwcG9ydCBmb3IgU25hcHBlciBsaW5lIGluCi0gKgkJLSBzbmFwcGVyIGlucHV0IHJlc2FtcGxpbmcgKGZvciByYXRlcyA8IDQ0MTAwKQotICoJCS0gc29mdHdhcmUgbGluZSBnYWluIGNvbnRyb2wKLSAqLwotCi0vKiBHRU5FUkFMIEZJWE1FL1RPRE86IGNoZWNrIHRoYXQgdGhlIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgaXMgd3JpdHRlbiB0bwotICAgbWFjLWlvIGlzIHZhbGlkIGZvciBEQUNBICYgVHVtYmxlci4KLQotICAgVGhpcyBkcml2ZXIgaXMgaW4gYmFkIG5lZWQgb2YgYSByZXdyaXRlLiBUaGUgZGJkbWEgY29kZSBoYXMgdG8gYmUgc3BsaXQsCi0gICBzb21lIHByb3BlciBkZXZpY2UtdHJlZSBwYXJzaW5nIGNvZGUgaGFzIHRvIGJlIHdyaXR0ZW4sIGV0Yy4uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3NvdW5kY2FyZC5oPgotI2luY2x1ZGUgPGxpbnV4L2FkYi5oPgotI2luY2x1ZGUgPGxpbnV4L252cmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvdHR5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdnRfa2Vybi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgva21vZC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpZmRlZiBDT05GSUdfQURCX0NVREEKLSNpbmNsdWRlIDxsaW51eC9jdWRhLmg+Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQURCX1BNVQotI2luY2x1ZGUgPGxpbnV4L3BtdS5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9wcm9tLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZGJkbWEuaD4KLSNpbmNsdWRlIDxhc20vcG1hY19mZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9udnJhbS5oPgotCi0jaW5jbHVkZSAiYXdhY3NfZGVmcy5oIgotI2luY2x1ZGUgImRtYXNvdW5kLmgiCi0jaW5jbHVkZSAidGFzMzAwMWMuaCIKLSNpbmNsdWRlICJ0YXMzMDA0LmgiCi0jaW5jbHVkZSAidGFzX2NvbW1vbi5oIgotCi0jZGVmaW5lIERNQVNPVU5EX0FXQUNTX1JFVklTSU9OCTAKLSNkZWZpbmUgRE1BU09VTkRfQVdBQ1NfRURJVElPTgk3Ci0KLSNkZWZpbmUgQVdBQ1NfU05BUFBFUiAgIDExMAkvKiBmYWtlIHJldmlzaW9uICMgZm9yIHNuYXBwZXIgKi8KLSNkZWZpbmUgQVdBQ1NfQlVSR1VORFkJMTAwCS8qIGZha2UgcmV2aXNpb24gIyBmb3IgYnVyZ3VuZHkgKi8KLSNkZWZpbmUgQVdBQ1NfVFVNQkxFUiAgICA5MAkvKiBmYWtlIHJldmlzaW9uICMgZm9yIHR1bWJsZXIgKi8KLSNkZWZpbmUgQVdBQ1NfREFDQQkgODAJLyogZmFrZSByZXZpc2lvbiAjIGZvciBkYWNhIChpYm9vaykgKi8KLSNkZWZpbmUgQVdBQ1NfQVdBQ1MgICAgICAgMiAgICAgLyogaG9sZGluZyByZXZpc2lvbiBmb3IgQVdBQ1MgKi8KLSNkZWZpbmUgQVdBQ1NfU0NSRUFNRVIgICAgMyAgICAgLyogaG9sZGluZyByZXZpc2lvbiBmb3IgU2NyZWFtZXIgKi8KLS8qCi0gKiBJbnRlcnJ1cHQgbnVtYmVycyBhbmQgYWRkcmVzc2VzLCAmIGluZm8gb2J0YWluZWQgZnJvbSB0aGUgZGV2aWNlIHRyZWUuCi0gKi8KLXN0YXRpYyBpbnQgYXdhY3NfaXJxLCBhd2Fjc190eF9pcnEsIGF3YWNzX3J4X2lycTsKLXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgYXdhY3NfcmVncyBfX2lvbWVtICphd2FjczsKLXN0YXRpYyB2b2xhdGlsZSB1MzIgX19pb21lbSAqaTJzOwotc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmF3YWNzX3R4ZG1hLCAqYXdhY3NfcnhkbWE7Ci1zdGF0aWMgaW50IGF3YWNzX3JhdGVfaW5kZXg7Ci1zdGF0aWMgaW50IGF3YWNzX3N1YmZyYW1lOwotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSogYXdhY3Nfbm9kZTsKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUqIGkyc19ub2RlOwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhd2Fjc19yc3JjWzNdOwotCi1zdGF0aWMgY2hhciBhd2Fjc19uYW1lWzY0XTsKLXN0YXRpYyBpbnQgYXdhY3NfcmV2aXNpb247Ci1zdGF0aWMgaW50IGF3YWNzX3NsZWVwaW5nOwotc3RhdGljIERFRklORV9NVVRFWChkbWFzb3VuZF9tdXRleCk7Ci0KLXN0YXRpYyBpbnQgc291bmRfZGV2aWNlX2lkOwkJLyogZXhpc3RzIGFmdGVyIGlNYWMgcmV2QSAqLwotc3RhdGljIGludCBod19jYW5fYnl0ZXN3YXAgPSAxIDsJLyogbW9zdCBwbWFjIHNvdW5kIGgvdyBjYW4gKi8KLQotLyogbW9kZWwgaW5mbyAqLwotLyogVG8gYmUgcmVwbGFjZWQgd2l0aCBiZXR0ZXIgaW50ZXJhY3Rpb24gd2l0aCBwbWFjX2ZlYXR1cmUuYyAqLwotc3RhdGljIGludCBpc19wYm9va18zWDAwOwotc3RhdGljIGludCBpc19wYm9va19nMzsKLQotLyogZXhwYW5zaW9uIGluZm8gKi8KLXN0YXRpYyBpbnQgaGFzX3BlcmNoOwotc3RhdGljIGludCBoYXNfeml2YTsKLQotLyogZm9yIGVhcmxpZXIgcG93ZXJib29rcyB3aGljaCBuZWVkIGZpZGRsaW5nIHdpdGggbWFjLWlvIHRvIGVuYWJsZQotICogY2QgZXRjLgotKi8KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmxhdGNoX2Jhc2U7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBfX2lvbWVtICptYWNpb19iYXNlOwotCi0vKgotICogU3BhY2UgZm9yIHRoZSBEQkRNQSBjb21tYW5kIGJsb2Nrcy4KLSAqLwotc3RhdGljIHZvaWQgKmF3YWNzX3R4X2NtZF9zcGFjZTsKLXN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICphd2Fjc190eF9jbWRzOwotc3RhdGljIGludCBudW1iZXJfb2ZfdHhfY21kX2J1ZmZlcnM7Ci0KLXN0YXRpYyB2b2lkICphd2Fjc19yeF9jbWRfc3BhY2U7Ci1zdGF0aWMgdm9sYXRpbGUgc3RydWN0IGRiZG1hX2NtZCAqYXdhY3NfcnhfY21kczsKLXN0YXRpYyBpbnQgbnVtYmVyX29mX3J4X2NtZF9idWZmZXJzOwotCi0vKgotICogQ2FjaGVkIHZhbHVlcyBvZiBBV0FDUyByZWdpc3RlcnMgKHdlIGNhbid0IHJlYWQgdGhlbSkuCi0gKiBFeGNlcHQgb24gdGhlIGJ1cmd1bmR5IChhbmQgc2NyZWFtZXIpLiBYWFgKLSAqLwotCi1pbnQgYXdhY3NfcmVnWzhdOwotaW50IGF3YWNzX3JlZzFfc2F2ZTsKLQotLyogdHJhY2tpbmcgdmFsdWVzIGZvciB0aGUgbWl4ZXIgY29udGVudHMKLSovCi0KLXN0YXRpYyBpbnQgc3BrX3ZvbDsKLXN0YXRpYyBpbnQgbGluZV92b2w7Ci1zdGF0aWMgaW50IHBhc3N0aHJ1X3ZvbDsKLQotc3RhdGljIGludCBpcF9nYWluOyAgICAgICAgICAgLyogbWljIHByZWFtcCBzZXR0aW5ncyAqLwotc3RhdGljIGludCByZWNfbGV2ID0gMHg0NTQ1IDsgLyogZGVmYXVsdCBDRCBnYWluIDY5ICUgKi8KLXN0YXRpYyBpbnQgbWljX2xldjsKLXN0YXRpYyBpbnQgY2RfbGV2ID0gMHg2MzYzIDsgLyogOTkgJSAqLwotc3RhdGljIGludCBsaW5lX2xldjsKLQotc3RhdGljIGludCBoZHBfY29ubmVjdGVkOwotCi0vKgotICogU3R1ZmYgZm9yIG91dHB1dHRpbmcgYSBiZWVwLiAgVGhlIHZhbHVlcyByYW5nZSBmcm9tIC0zMjcgdG8gKzMyNwotICogc28gd2UgY2FuIG11bHRpcGx5IGJ5IGFuIGFtcGxpdHVkZSBpbiB0aGUgcmFuZ2UgMC4uMTAwIHRvIGdldCBhCi0gKiBzaWduZWQgc2hvcnQgdmFsdWUgdG8gcHV0IGluIHRoZSBvdXRwdXQgYnVmZmVyLgotICovCi1zdGF0aWMgc2hvcnQgYmVlcF93Zm9ybVsyNTZdID0gewotCTAsCTQwLAk3OSwJMTE3LAkxNTMsCTE4NywJMjE4LAkyNDUsCi0JMjY5LAkyODgsCTMwNCwJMzE2LAkzMjMsCTMyNywJMzI3LAkzMjQsCi0JMzE4LAkzMTAsCTI5OSwJMjg4LAkyNzUsCTI2MiwJMjQ5LAkyMzYsCi0JMjI0LAkyMTMsCTIwNCwJMTk2LAkxOTAsCTE4NiwJMTgzLAkxODIsCi0JMTgyLAkxODMsCTE4NiwJMTg5LAkxOTIsCTE5NiwJMjAwLAkyMDMsCi0JMjA2LAkyMDgsCTIwOSwJMjA5LAkyMDksCTIwNywJMjA0LAkyMDEsCi0JMTk3LAkxOTMsCTE4OCwJMTgzLAkxNzksCTE3NCwJMTcwLAkxNjYsCi0JMTYzLAkxNjEsCTE2MCwJMTU5LAkxNTksCTE2MCwJMTYxLAkxNjIsCi0JMTY0LAkxNjYsCTE2OCwJMTY5LAkxNzEsCTE3MSwJMTcxLAkxNzAsCi0JMTY5LAkxNjcsCTE2MywJMTU5LAkxNTUsCTE1MCwJMTQ0LAkxMzksCi0JMTMzLAkxMjgsCTEyMiwJMTE3LAkxMTMsCTExMCwJMTA3LAkxMDUsCi0JMTAzLAkxMDMsCTEwMywJMTAzLAkxMDQsCTEwNCwJMTA1LAkxMDUsCi0JMTA1LAkxMDMsCTEwMSwJOTcsCTkyLAk4NiwJNzgsCTY4LAotCTU4LAk0NSwJMzIsCTE4LAkzLAktMTEsCS0yNiwJLTQxLAotCS01NSwJLTY4LAktNzksCS04OCwJLTk1LAktMTAwLAktMTAyLAktMTAyLAotCS05OSwJLTkzLAktODUsCS03NSwJLTYyLAktNDgsCS0zMywJLTE2LAotCTAsCTE2LAkzMywJNDgsCTYyLAk3NSwJODUsCTkzLAotCTk5LAkxMDIsCTEwMiwJMTAwLAk5NSwJODgsCTc5LAk2OCwKLQk1NSwJNDEsCTI2LAkxMSwJLTMsCS0xOCwJLTMyLAktNDUsCi0JLTU4LAktNjgsCS03OCwJLTg2LAktOTIsCS05NywJLTEwMSwJLTEwMywKLQktMTA1LAktMTA1LAktMTA1LAktMTA0LAktMTA0LAktMTAzLAktMTAzLAktMTAzLAotCS0xMDMsCS0xMDUsCS0xMDcsCS0xMTAsCS0xMTMsCS0xMTcsCS0xMjIsCS0xMjgsCi0JLTEzMywJLTEzOSwJLTE0NCwJLTE1MCwJLTE1NSwJLTE1OSwJLTE2MywJLTE2NywKLQktMTY5LAktMTcwLAktMTcxLAktMTcxLAktMTcxLAktMTY5LAktMTY4LAktMTY2LAotCS0xNjQsCS0xNjIsCS0xNjEsCS0xNjAsCS0xNTksCS0xNTksCS0xNjAsCS0xNjEsCi0JLTE2MywJLTE2NiwJLTE3MCwJLTE3NCwJLTE3OSwJLTE4MywJLTE4OCwJLTE5MywKLQktMTk3LAktMjAxLAktMjA0LAktMjA3LAktMjA5LAktMjA5LAktMjA5LAktMjA4LAotCS0yMDYsCS0yMDMsCS0yMDAsCS0xOTYsCS0xOTIsCS0xODksCS0xODYsCS0xODMsCi0JLTE4MiwJLTE4MiwJLTE4MywJLTE4NiwJLTE5MCwJLTE5NiwJLTIwNCwJLTIxMywKLQktMjI0LAktMjM2LAktMjQ5LAktMjYyLAktMjc1LAktMjg4LAktMjk5LAktMzEwLAotCS0zMTgsCS0zMjQsCS0zMjcsCS0zMjcsCS0zMjMsCS0zMTYsCS0zMDQsCS0yODgsCi0JLTI2OSwJLTI0NSwJLTIxOCwJLTE4NywJLTE1MywJLTExNywJLTc5LAktNDAsCi19OwotCi0vKiBiZWVwIHN1cHBvcnQgKi8KLSNkZWZpbmUgQkVFUF9TUkFURQkyMjA1MAkvKiAyMjA1MCBIeiBzYW1wbGUgcmF0ZSAqLwotI2RlZmluZSBCRUVQX0JVRkxFTgk1MTIKLSNkZWZpbmUgQkVFUF9WT0xVTUUJMTUJLyogMCAtIDEwMCAqLwotCi1zdGF0aWMgaW50IGJlZXBfdm9sID0gQkVFUF9WT0xVTUU7Ci1zdGF0aWMgaW50IGJlZXBfcGxheWluZzsKLXN0YXRpYyBpbnQgYXdhY3NfYmVlcF9zdGF0ZTsKLXN0YXRpYyBzaG9ydCAqYmVlcF9idWY7Ci1zdGF0aWMgdm9pZCAqYmVlcF9kYmRtYV9jbWRfc3BhY2U7Ci1zdGF0aWMgdm9sYXRpbGUgc3RydWN0IGRiZG1hX2NtZCAqYmVlcF9kYmRtYV9jbWQ7Ci0KLS8qIEJ1cmd1bmR5IGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgYXdhY3NfYnVyZ3VuZHlfd2N3KHVuc2lnbmVkIGFkZHIsdW5zaWduZWQgbmV3dmFsKTsKLXN0YXRpYyB1bnNpZ25lZCBhd2Fjc19idXJndW5keV9yY3codW5zaWduZWQgYWRkcik7Ci1zdGF0aWMgdm9pZCBhd2Fjc19idXJndW5keV93cml0ZV92b2x1bWUodW5zaWduZWQgYWRkcmVzcywgaW50IHZvbHVtZSk7Ci1zdGF0aWMgaW50IGF3YWNzX2J1cmd1bmR5X3JlYWRfdm9sdW1lKHVuc2lnbmVkIGFkZHJlc3MpOwotc3RhdGljIHZvaWQgYXdhY3NfYnVyZ3VuZHlfd3JpdGVfbXZvbHVtZSh1bnNpZ25lZCBhZGRyZXNzLCBpbnQgdm9sdW1lKTsKLXN0YXRpYyBpbnQgYXdhY3NfYnVyZ3VuZHlfcmVhZF9tdm9sdW1lKHVuc2lnbmVkIGFkZHJlc3MpOwotCi0vKiB3ZSB3aWxsIGFsbG9jYXRlIGEgc2luZ2xlICdlbWVyZ2VuY3knIGRiZG1hIGNtZCBibG9jayB0byB1c2UgaWYgdGhlCi0gICB0eCBzdGF0dXMgY29tZXMgdXAgIkRFQUQiLiAgVGhpcyBoYXBwZW5zIG9uIHNvbWUgUG93ZXJDb21wdXRpbmcgUG1hYwotICAgY2xvbmVzLCBlaXRoZXIgb3dpbmcgdG8gYSBidWcgaW4gZGJkbWEgb3Igc29tZSBpbnRlcmFjdGlvbiBiZXR3ZWVuCi0gICBJREUgYW5kIHNvdW5kLiAgSG93ZXZlciwgdGhpcyBtZWFzdXJlIHdvdWxkIGRlYWwgd2l0aCBERUFEIHN0YXR1cyBpZgotICAgaWYgYXBwZWFyZWQgZWxzZXdoZXJlLgotCi0gICBmb3IgdGhlIHNha2Ugb2YgbWVtb3J5IGVmZmljaWVuY3kgd2UnbGwgYWxsb2NhdGUgdGhpcyBjbWQgYXMgcGFydCBvZgotICAgdGhlIGJlZXAgY21kIHN0dWZmLgotKi8KLQotc3RhdGljIHZvbGF0aWxlIHN0cnVjdCBkYmRtYV9jbWQgKmVtZXJnZW5jeV9kYmRtYV9jbWQ7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLS8qCi0gKiBTdHVmZiBmb3IgcmVzdG9yaW5nIGFmdGVyIGEgc2xlZXAuCi0gKi8KLXN0YXRpYyB2b2lkIGF3YWNzX3NsZWVwX25vdGlmeShzdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyICpzZWxmLCBpbnQgd2hlbik7Ci1zdHJ1Y3QgcG11X3NsZWVwX25vdGlmaWVyIGF3YWNzX3NsZWVwX25vdGlmaWVyID0gewotCWF3YWNzX3NsZWVwX25vdGlmeSwgU0xFRVBfTEVWRUxfU09VTkQsCi19OwotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0vKiBmb3IgKHNvZnQpIHNhbXBsZSByYXRlIHRyYW5zbGF0aW9ucyAqLwotaW50IGV4cGFuZF9iYWw7CQkvKiBCYWxhbmNlIGZhY3RvciBmb3IgZXhwYW5kaW5nIChub3Qgdm9sdW1lISkgKi8KLWludCBleHBhbmRfcmVhZF9iYWw7CS8qIEJhbGFuY2UgZmFjdG9yIGZvciBleHBhbmRpbmcgcmVhZHMgKG5vdCB2b2x1bWUhKSAqLwotCi0vKioqIExvdyBsZXZlbCBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkICpQTWFjQWxsb2ModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGZsYWdzKTsKLXN0YXRpYyB2b2lkIFBNYWNGcmVlKHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IHNpemUpOwotc3RhdGljIGludCBQTWFjSXJxSW5pdCh2b2lkKTsKLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB2b2lkIFBNYWNJcnFDbGVhbnVwKHZvaWQpOwotI2VuZGlmCi1zdGF0aWMgdm9pZCBQTWFjU2lsZW5jZSh2b2lkKTsKLXN0YXRpYyB2b2lkIFBNYWNJbml0KHZvaWQpOwotc3RhdGljIGludCBQTWFjU2V0Rm9ybWF0KGludCBmb3JtYXQpOwotc3RhdGljIGludCBQTWFjU2V0Vm9sdW1lKGludCB2b2x1bWUpOwotc3RhdGljIHZvaWQgUE1hY1BsYXkodm9pZCk7Ci1zdGF0aWMgdm9pZCBQTWFjUmVjb3JkKHZvaWQpOwotc3RhdGljIGlycXJldHVybl90IHBtYWNfYXdhY3NfdHhfaW50cihpbnQgaXJxLCB2b2lkICpkZXZpZCk7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgcG1hY19hd2Fjc19yeF9pbnRyKGludCBpcnEsIHZvaWQgKmRldmlkKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCBwbWFjX2F3YWNzX2ludHIoaW50IGlycSwgdm9pZCAqZGV2aWQpOwotc3RhdGljIHZvaWQgYXdhY3Nfd3JpdGUoaW50IHZhbCk7Ci1zdGF0aWMgaW50IGF3YWNzX2dldF92b2x1bWUoaW50IHJlZywgaW50IGxzaGlmdCk7Ci1zdGF0aWMgaW50IGF3YWNzX3ZvbHVtZV9zZXR0ZXIoaW50IHZvbHVtZSwgaW50IG4sIGludCBtdXRlLCBpbnQgbHNoaWZ0KTsKLQotCi0vKioqIE1pZCBsZXZlbCBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgaW50IFBNYWNNaXhlcklvY3RsKHVfaW50IGNtZCwgdV9sb25nIGFyZyk7Ci1zdGF0aWMgaW50IFBNYWNXcml0ZVNxU2V0dXAodm9pZCk7Ci1zdGF0aWMgaW50IFBNYWNSZWFkU3FTZXR1cCh2b2lkKTsKLXN0YXRpYyB2b2lkIFBNYWNBYm9ydFJlYWQodm9pZCk7Ci0KLWV4dGVybiBUUkFOUyB0cmFuc0F3YWNzTm9ybWFsIDsKLWV4dGVybiBUUkFOUyB0cmFuc0F3YWNzRXhwYW5kIDsKLWV4dGVybiBUUkFOUyB0cmFuc0F3YWNzTm9ybWFsUmVhZCA7Ci1leHRlcm4gVFJBTlMgdHJhbnNBd2Fjc0V4cGFuZFJlYWQgOwotCi1leHRlcm4gaW50IGRhY2FfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIGRhY2FfY2xlYW51cCh2b2lkKTsKLWV4dGVybiBpbnQgZGFjYV9zZXRfdm9sdW1lKHVpbnQgbGVmdF92b2wsIHVpbnQgcmlnaHRfdm9sKTsKLWV4dGVybiB2b2lkIGRhY2FfZ2V0X3ZvbHVtZSh1aW50ICogbGVmdF92b2wsIHVpbnQgICpyaWdodF92b2wpOwotZXh0ZXJuIGludCBkYWNhX2VudGVyX3NsZWVwKHZvaWQpOwotZXh0ZXJuIGludCBkYWNhX2xlYXZlX3NsZWVwKHZvaWQpOwotCi0jZGVmaW5lIFRSWV9MT0NLKCkJXAotCWlmICgocmMgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRtYXNvdW5kX211dGV4KSkgIT0gMCkJXAotCQlyZXR1cm4gcmM7Ci0jZGVmaW5lIExPQ0soKQkJbXV0ZXhfbG9jaygmZG1hc291bmRfbXV0ZXgpOwotCi0jZGVmaW5lIFVOTE9DSygpCW11dGV4X3VubG9jaygmZG1hc291bmRfbXV0ZXgpOwotCi0vKiBXZSB1c2UgZGlmZmVyZW50IHZlcnNpb25zIHRoYXQgdGhlIG9uZXMgcHJvdmlkZWQgaW4gZG1hc291bmQuaAotICogCi0gKiBGSVhNRTogVXNlIGRpZmZlcmVudCBuYW1lcyA7KQotICovCi0jdW5kZWYgSU9DVExfSU4KLSN1bmRlZiBJT0NUTF9PVVQKLQotI2RlZmluZSBJT0NUTF9JTihhcmcsIHJldCkJXAotCXJjID0gZ2V0X3VzZXIocmV0LCAoaW50IF9fdXNlciAqKShhcmcpKTsgXAotCWlmIChyYykgYnJlYWs7Ci0jZGVmaW5lIElPQ1RMX09VVChhcmcsIHJldCkJXAotCWlvY3RsX3JldHVybjIoKGludCBfX3VzZXIgKikoYXJnKSwgcmV0KQotCi1zdGF0aWMgaW5saW5lIGludCBpb2N0bF9yZXR1cm4yKGludCBfX3VzZXIgKmFkZHIsIGludCB2YWx1ZSkKLXsKLQlyZXR1cm4gdmFsdWUgPCAwID8gdmFsdWUgOiBwdXRfdXNlcih2YWx1ZSwgYWRkcik7Ci19Ci0KLQotLyoqKiBBRSAtIFRVTUJMRVIgLyBTTkFQUEVSIFNUQVJUICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1pbnQgZ3Bpb19hdWRpb19yZXNldCwgZ3Bpb19hdWRpb19yZXNldF9wb2w7Ci1pbnQgZ3Bpb19hbXBfbXV0ZSwgZ3Bpb19hbXBfbXV0ZV9wb2w7Ci1pbnQgZ3Bpb19oZWFkcGhvbmVfbXV0ZSwgZ3Bpb19oZWFkcGhvbmVfbXV0ZV9wb2w7Ci1pbnQgZ3Bpb19oZWFkcGhvbmVfZGV0ZWN0LCBncGlvX2hlYWRwaG9uZV9kZXRlY3RfcG9sOwotaW50IGdwaW9faGVhZHBob25lX2lycTsKLQotaW50Ci1zZXR1cF9hdWRpb19ncGlvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIqIGNvbXBhdGlibGUsIGludCAqZ3Bpb19hZGRyLCBpbnQqIGdwaW9fcG9sKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZ3Bpb3A7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpucDsKLQljb25zdCB1MzIqIHBwOwotCWludCByZXQgPSAtRU5PREVWOwotCi0JZ3Bpb3AgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiZ3BpbyIpOwotCWlmICghZ3Bpb3ApCi0JCWdvdG8gZG9uZTsKLQotCW5wID0gb2ZfZ2V0X25leHRfY2hpbGQoZ3Bpb3AsIE5VTEwpOwotCXdoaWxlKG5wICE9IDApIHsKLQkJaWYgKG5hbWUpIHsKLQkJCWNvbnN0IGNoYXIgKnByb3BlcnR5ID0KLQkJCQlvZl9nZXRfcHJvcGVydHkobnAsImF1ZGlvLWdwaW8iLE5VTEwpOwotCQkJaWYgKHByb3BlcnR5ICE9IDAgJiYgc3RyY21wKHByb3BlcnR5LG5hbWUpID09IDApCi0JCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoY29tcGF0aWJsZSAmJiBvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShucCwgY29tcGF0aWJsZSkpCi0JCQlicmVhazsKLQkJbnAgPSBvZl9nZXRfbmV4dF9jaGlsZChncGlvcCwgbnApOwotCX0KLQlpZiAoIW5wKQotCQlnb3RvIGRvbmU7Ci0JcHAgPSBvZl9nZXRfcHJvcGVydHkobnAsICJBQVBMLGFkZHJlc3MiLCBOVUxMKTsKLQlpZiAoIXBwKQotCQlnb3RvIGRvbmU7Ci0JKmdwaW9fYWRkciA9ICgqcHApICYgMHgwMDAwZmZmZjsKLQlwcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImF1ZGlvLWdwaW8tYWN0aXZlLXN0YXRlIiwgTlVMTCk7Ci0JaWYgKHBwKQotCQkqZ3Bpb19wb2wgPSAqcHA7Ci0JZWxzZQotCQkqZ3Bpb19wb2wgPSAxOwotCXJldCA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKLWRvbmU6Ci0Jb2Zfbm9kZV9wdXQobnApOwotCW9mX25vZGVfcHV0KGdwaW9wKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXdyaXRlX2F1ZGlvX2dwaW8oaW50IGdwaW9fYWRkciwgaW50IGRhdGEpCi17Ci0JaWYgKCFncGlvX2FkZHIpCi0JCXJldHVybjsKLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9XUklURV9HUElPLCBOVUxMLCBncGlvX2FkZHIsIGRhdGEgPyAweDA1IDogMHgwNCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yZWFkX2F1ZGlvX2dwaW8oaW50IGdwaW9fYWRkcikKLXsKLQlpZiAoIWdwaW9fYWRkcikKLQkJcmV0dXJuIDA7Ci0JcmV0dXJuICgocG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfUkVBRF9HUElPLCBOVUxMLCBncGlvX2FkZHIsIDApICYgMHgwMikgIT0wKTsKLX0KLQotLyoKLSAqIEhlYWRwaG9uZSBpbnRlcnJ1cHQgdmlhIEdQSU8gKFR1bWJsZXIsIFNuYXBwZXIsIERBQ0EpCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdAotaGVhZHBob25lX2ludHIoaW50IGlycSwgdm9pZCAqZGV2aWQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0JaWYgKHJlYWRfYXVkaW9fZ3BpbyhncGlvX2hlYWRwaG9uZV9kZXRlY3QpID09IGdwaW9faGVhZHBob25lX2RldGVjdF9wb2wpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXVkaW8gamFjayBwbHVnZ2VkLCBtdXRpbmcgc3BlYWtlcnMuXG4iKTsKLQkJd3JpdGVfYXVkaW9fZ3BpbyhncGlvX2hlYWRwaG9uZV9tdXRlLCAhZ3Bpb19oZWFkcGhvbmVfbXV0ZV9wb2wpOwotCQl3cml0ZV9hdWRpb19ncGlvKGdwaW9fYW1wX211dGUsIGdwaW9fYW1wX211dGVfcG9sKTsKLQkJdGFzX291dHB1dF9kZXZpY2VfY2hhbmdlKHNvdW5kX2RldmljZV9pZCxUQVNfT1VUUFVUX0hFQURQSE9ORVMsMCk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQXVkaW8gamFjayB1bnBsdWdnZWQsIGVuYWJsaW5nIHNwZWFrZXJzLlxuIik7Ci0JCXdyaXRlX2F1ZGlvX2dwaW8oZ3Bpb19hbXBfbXV0ZSwgIWdwaW9fYW1wX211dGVfcG9sKTsKLQkJd3JpdGVfYXVkaW9fZ3BpbyhncGlvX2hlYWRwaG9uZV9tdXRlLCBncGlvX2hlYWRwaG9uZV9tdXRlX3BvbCk7Ci0JCXRhc19vdXRwdXRfZGV2aWNlX2NoYW5nZShzb3VuZF9kZXZpY2VfaWQsVEFTX09VVFBVVF9JTlRFUk5BTF9TUEtSLDApOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi0KLS8qIEluaXRpYWxpemUgdHVtYmxlciAqLwotCi1zdGF0aWMgaW50Ci10YXNfZG1hc291bmRfaW5pdCh2b2lkKQotewotCXNldHVwX2F1ZGlvX2dwaW8oCi0JCSJhdWRpby1ody1yZXNldCIsCi0JCU5VTEwsCi0JCSZncGlvX2F1ZGlvX3Jlc2V0LAotCQkmZ3Bpb19hdWRpb19yZXNldF9wb2wpOwotCXNldHVwX2F1ZGlvX2dwaW8oCi0JCSJhbXAtbXV0ZSIsCi0JCU5VTEwsCi0JCSZncGlvX2FtcF9tdXRlLAotCQkmZ3Bpb19hbXBfbXV0ZV9wb2wpOwotCXNldHVwX2F1ZGlvX2dwaW8oImhlYWRwaG9uZS1tdXRlIiwKLQkJTlVMTCwKLQkJJmdwaW9faGVhZHBob25lX211dGUsCi0JCSZncGlvX2hlYWRwaG9uZV9tdXRlX3BvbCk7Ci0JZ3Bpb19oZWFkcGhvbmVfaXJxID0gc2V0dXBfYXVkaW9fZ3BpbygKLQkJImhlYWRwaG9uZS1kZXRlY3QiLAotCQlOVUxMLAotCQkmZ3Bpb19oZWFkcGhvbmVfZGV0ZWN0LAotCQkmZ3Bpb19oZWFkcGhvbmVfZGV0ZWN0X3BvbCk7Ci0JLyogRml4IHNvbWUgYnJva2VuIE9GIGVudHJpZXMgaW4gZGVza3RvcCBtYWNoaW5lcyAqLwotCWlmICghZ3Bpb19oZWFkcGhvbmVfaXJxKQotCQlncGlvX2hlYWRwaG9uZV9pcnEgPSBzZXR1cF9hdWRpb19ncGlvKAotCQkJTlVMTCwKLQkJCSJrZXl3ZXN0LWdwaW8xNSIsCi0JCQkmZ3Bpb19oZWFkcGhvbmVfZGV0ZWN0LAotCQkJJmdwaW9faGVhZHBob25lX2RldGVjdF9wb2wpOwotCi0Jd3JpdGVfYXVkaW9fZ3BpbyhncGlvX2F1ZGlvX3Jlc2V0LCBncGlvX2F1ZGlvX3Jlc2V0X3BvbCk7Ci0JbXNsZWVwKDEwMCk7Ci0Jd3JpdGVfYXVkaW9fZ3BpbyhncGlvX2F1ZGlvX3Jlc2V0LCAhZ3Bpb19hdWRpb19yZXNldF9wb2wpOwotCW1zbGVlcCgxMDApOwotICAJaWYgKGdwaW9faGVhZHBob25lX2lycSkgewotCQlpZiAocmVxdWVzdF9pcnEoZ3Bpb19oZWFkcGhvbmVfaXJxLGhlYWRwaG9uZV9pbnRyLDAsIkhlYWRwaG9uZSBkZXRlY3QiLE5VTEwpIDwgMCkgewotICAgIAkJCXByaW50ayhLRVJOX0VSUiAidHVtYmxlcjogQ2FuJ3QgcmVxdWVzdCBoZWFkcGhvbmUgaW50ZXJydXB0XG4iKTsKLSAgICAJCQlncGlvX2hlYWRwaG9uZV9pcnEgPSAwOwotICAgIAkJfSBlbHNlIHsKLQkJCXU4IHZhbDsKLQkJCS8qIEFjdGl2YXRlIGhlYWRwaG9uZSBzdGF0dXMgaW50ZXJydXB0cyAqLwotCQkJdmFsID0gcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfUkVBRF9HUElPLCBOVUxMLCBncGlvX2hlYWRwaG9uZV9kZXRlY3QsIDApOwotCQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfV1JJVEVfR1BJTywgTlVMTCwgZ3Bpb19oZWFkcGhvbmVfZGV0ZWN0LCB2YWwgfCAweDgwKTsKLQkJCS8qIFRyaWdnZXIgaXQgKi8KLSAgCQkJaGVhZHBob25lX2ludHIoMCwgTlVMTCk7Ci0gIAkJfQotICAJfQotICAJaWYgKCFncGlvX2hlYWRwaG9uZV9pcnEpIHsKLSAgCQkvKiBTb21lIG1hY2hpbmUgZW50ZXIgdGhpcyBjYXNlID8gKi8KLSAgCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0dW1ibGVyOiBIZWFkcGhvbmUgZGV0ZWN0IElSUSBub3QgZm91bmQsIGVuYWJsaW5nIGFsbCBvdXRwdXRzICFcbiIpOwotICAJCXdyaXRlX2F1ZGlvX2dwaW8oZ3Bpb19hbXBfbXV0ZSwgIWdwaW9fYW1wX211dGVfcG9sKTsKLSAgCQl3cml0ZV9hdWRpb19ncGlvKGdwaW9faGVhZHBob25lX211dGUsICFncGlvX2hlYWRwaG9uZV9tdXRlX3BvbCk7Ci0gIAl9Ci0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotdGFzX2RtYXNvdW5kX2NsZWFudXAodm9pZCkKLXsKLQlpZiAoZ3Bpb19oZWFkcGhvbmVfaXJxKQotCQlmcmVlX2lycShncGlvX2hlYWRwaG9uZV9pcnEsIE5VTEwpOwotCXJldHVybiAwOwotfQotCi0vKiBXZSBkb24ndCBzdXBwb3J0IDQ4ayB5ZXQgKi8KLXN0YXRpYyBpbnQgdGFzX2ZyZXFzWzFdID0geyA0NDEwMCB9IDsKLXN0YXRpYyBpbnQgdGFzX2ZyZXFzX29rWzFdID0geyAxIH0gOwotCi0vKiBkb24ndCBrbm93IHdoYXQgdG8gZG8gcmVhbGx5IC0ganVzdCBoYXZlIHRvIGxlYXZlIGl0IHdoZXJlCi0gKiBPRiBsZWZ0IHRoaW5ncwotKi8KLQotc3RhdGljIGludAotdGFzX3NldF9mcmFtZV9yYXRlKHZvaWQpCi17Ci0JaWYgKGkycykgewotCQlvdXRfbGUzMihpMnMgKyAoSTJTX1JFR19TRVJJQUxfRk9STUFUID4+IDIpLCAweDQxMTkwMDAwKTsKLQkJb3V0X2xlMzIoaTJzICsgKEkyU19SRUdfREFUQVdPUkRfU0laRVMgPj4gMiksIDB4MDIwMDAyMDApOwotCX0KLQlkbWFzb3VuZC5oYXJkLnNwZWVkID0gNDQxMDAgOwotCWF3YWNzX3JhdGVfaW5kZXggPSAwIDsKLQlyZXR1cm4gNDQxMDAgOwotfQotCi1zdGF0aWMgaW50Ci10YXNfbWl4ZXJfaW9jdGwodV9pbnQgY21kLCB1X2xvbmcgYXJnKQotewotCWludCBfX3VzZXIgKmFyZ3AgPSAoaW50IF9fdXNlciAqKWFyZzsKLQlpbnQgZGF0YTsKLQlpbnQgcmM7Ci0KLSAgICAgICAgcmM9dGFzX2RldmljZV9pb2N0bChjbWQsIGFyZyk7Ci0gICAgICAgIGlmIChyYyAhPSAtRUlOVkFMKSB7Ci0gICAgICAgIAlyZXR1cm4gcmM7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKGNtZCAmIH4weGZmKSA9PSBNSVhFUl9XUklURSgwKSAmJgotICAgICAgICAgICAgdGFzX3N1cHBvcnRlZF9taXhlcnMoKSAmICgxPDwoY21kICYgMHhmZikpKSB7Ci0JCXJjID0gZ2V0X3VzZXIoZGF0YSwgYXJncCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJjPDApIHJldHVybiByYzsKLQkJdGFzX3NldF9taXhlcl9sZXZlbChjbWQgJiAweGZmLCBkYXRhKTsKLQkJdGFzX2dldF9taXhlcl9sZXZlbChjbWQgJiAweGZmLCAmZGF0YSk7Ci0JCXJldHVybiBpb2N0bF9yZXR1cm4yKGFyZ3AsIGRhdGEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICgoY21kICYgfjB4ZmYpID09IE1JWEVSX1JFQUQoMCkgJiYKLSAgICAgICAgICAgIHRhc19zdXBwb3J0ZWRfbWl4ZXJzKCkgJiAoMTw8KGNtZCAmIDB4ZmYpKSkgewotCQl0YXNfZ2V0X21peGVyX2xldmVsKGNtZCAmIDB4ZmYsICZkYXRhKTsKLQkJcmV0dXJuIGlvY3RsX3JldHVybjIoYXJncCwgZGF0YSk7Ci0gICAgICAgIH0KLQotCXN3aXRjaChjbWQpIHsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfREVWTUFTSzoKLQkJZGF0YSA9IHRhc19zdXBwb3J0ZWRfbWl4ZXJzKCkgfCBTT1VORF9NQVNLX1NQRUFLRVI7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTOgotCQlkYXRhID0gdGFzX3N0ZXJlb19taXhlcnMoKTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX0NBUFM6Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgMCk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLOgotCQkvLyBYWFggRklYTUU6IGZpbmQgYSB3YXkgdG8gY2hlY2sgd2hhdCBpcyByZWFsbHkgYXZhaWxhYmxlICovCi0JCWRhdGEgPSBTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX01JQzsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1JFQ1NSQzoKLQkJaWYgKGF3YWNzX3JlZ1swXSAmIE1BU0tfTVVYX0FVRElOKQotCQkJZGF0YSB8PSBTT1VORF9NQVNLX0xJTkU7Ci0JCWlmIChhd2Fjc19yZWdbMF0gJiBNQVNLX01VWF9NSUMpCi0JCQlkYXRhIHw9IFNPVU5EX01BU0tfTUlDOwotCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1JFQ1NSQzoKLSAJCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCWRhdGEgPTA7Ci0gCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotIAkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSOgkvKiByZWFsbHkgYmVsbCB2b2x1bWUgKi8KLSAJCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0gCQliZWVwX3ZvbCA9IGRhdGEgJiAweGZmOwotIAkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1NQRUFLRVI6Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgKGJlZXBfdm9sPDw4KSB8IGJlZXBfdm9sKTsKLSAJCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfT1VUTUFTSzoKLQljYXNlIFNPVU5EX01JWEVSX09VVFNSQzoKLQlkZWZhdWx0OgotCQlyYyA9IC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXRhc19pbml0X2ZyYW1lX3JhdGVzKGNvbnN0IHVuc2lnbmVkIGludCAqcHJvcCwgdW5zaWduZWQgaW50IGwpCi17Ci0JaW50IGkgOwotCWlmIChwcm9wKSB7Ci0JCWZvciAoaT0wOyBpPDE7IGkrKykKLQkJCXRhc19mcmVxc19va1tpXSA9IDA7Ci0JCWZvciAobCAvPSBzaXplb2YoaW50KTsgbCA+IDA7IC0tbCkgewotCQkJdW5zaWduZWQgaW50IHIgPSAqcHJvcCsrOwotCQkJLyogQXBwbGUgJ0ZpeGVkJyBmb3JtYXQgKi8KLQkJCWlmIChyID49IDB4MTAwMDApCi0JCQkJciA+Pj0gMTY7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMTsgKytpKSB7Ci0JCQkJaWYgKHIgPT0gdGFzX2ZyZXFzW2ldKSB7Ci0JCQkJCXRhc19mcmVxc19va1tpXSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQkvKiBlbHNlIHdlIGFzc3VtZSB0aGF0IGFsbCB0aGUgcmF0ZXMgYXJlIGF2YWlsYWJsZSAqLwotfQotCi0KLS8qKiogQUUgLSBUVU1CTEVSIC8gU05BUFBFUiBFTkQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLQotLyoqKiBMb3cgbGV2ZWwgc3R1ZmYgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKgotICogUENJIFBvd2VyTWFjLCB3aXRoIEFXQUNTLCBTY3JlYW1lciwgQnVyZ3VuZHksIERBQ0Egb3IgVHVtYmxlciBhbmQgREJETUEuCi0gKi8KLXN0YXRpYyB2b2lkICpQTWFjQWxsb2ModW5zaWduZWQgaW50IHNpemUsIGdmcF90IGZsYWdzKQotewotCXJldHVybiBrbWFsbG9jKHNpemUsIGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgUE1hY0ZyZWUodm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlrZnJlZShwdHIpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBQTWFjSXJxSW5pdCh2b2lkKQotewotCWlmIChhd2FjcykKLQkJaWYgKHJlcXVlc3RfaXJxKGF3YWNzX2lycSwgcG1hY19hd2Fjc19pbnRyLCAwLCAiQnVpbHQtaW4gU291bmQgbWlzYyIsIE5VTEwpKQotCQkJcmV0dXJuIDA7Ci0JaWYgKHJlcXVlc3RfaXJxKGF3YWNzX3R4X2lycSwgcG1hY19hd2Fjc190eF9pbnRyLCAwLCAiQnVpbHQtaW4gU291bmQgb3V0IiwgTlVMTCkKLQkgICAgfHwgcmVxdWVzdF9pcnEoYXdhY3NfcnhfaXJxLCBwbWFjX2F3YWNzX3J4X2ludHIsIDAsICJCdWlsdC1pbiBTb3VuZCBpbiIsIE5VTEwpKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotI2lmZGVmIE1PRFVMRQotc3RhdGljIHZvaWQgUE1hY0lycUNsZWFudXAodm9pZCkKLXsKLQkvKiB0dXJuIG9mZiBpbnB1dCAmIG91dHB1dCBkbWEgKi8KLQlEQkRNQV9ET19TVE9QKGF3YWNzX3R4ZG1hKTsKLQlEQkRNQV9ET19TVE9QKGF3YWNzX3J4ZG1hKTsKLQotCWlmIChhd2FjcykKLQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gYXdhY3MgaW50ZXJmYWNlICovCi0JCW91dF9sZTMyKCZhd2Fjcy0+Y29udHJvbCwgaW5fbGUzMigmYXdhY3MtPmNvbnRyb2wpICYgMHhmZmYpOwotCQotCS8qIFN3aXRjaCBvZmYgdGhlIHNvdW5kIGNsb2NrICovCi0JcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfU09VTkRfQ0hJUF9FTkFCTEUsIGF3YWNzX25vZGUsIDAsIDApOwotCS8qIE1ha2Ugc3VyZSBwcm9wZXIgYml0cyBhcmUgc2V0IG9uIHBpc21vICYgdGlwYiAqLwotCWlmICgobWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlckJvb2szLDEiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSAmJiBhd2FjcykgewotCQlhd2Fjc19yZWdbMV0gfD0gTUFTS19QQVJPVVQwIHwgTUFTS19QQVJPVVQxOwotCQlhd2Fjc193cml0ZShNQVNLX0FERFIxIHwgYXdhY3NfcmVnWzFdKTsKLQkJbXNsZWVwKDIwMCk7Ci0JfQotCWlmIChhd2FjcykKLQkJZnJlZV9pcnEoYXdhY3NfaXJxLCBOVUxMKTsKLQlmcmVlX2lycShhd2Fjc190eF9pcnEsIE5VTEwpOwotCWZyZWVfaXJxKGF3YWNzX3J4X2lycSwgTlVMTCk7Ci0JCi0JaWYgKGF3YWNzKQotCQlpb3VubWFwKGF3YWNzKTsKLQlpZiAoaTJzKQotCQlpb3VubWFwKGkycyk7Ci0JaW91bm1hcChhd2Fjc190eGRtYSk7Ci0JaW91bm1hcChhd2Fjc19yeGRtYSk7Ci0KLQlyZWxlYXNlX21lbV9yZWdpb24oYXdhY3NfcnNyY1swXS5zdGFydCwKLQkJCSAgIGF3YWNzX3JzcmNbMF0uZW5kIC0gYXdhY3NfcnNyY1swXS5zdGFydCArIDEpOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihhd2Fjc19yc3JjWzFdLnN0YXJ0LAotCQkJICAgYXdhY3NfcnNyY1sxXS5lbmQgLSBhd2Fjc19yc3JjWzFdLnN0YXJ0ICsgMSk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKGF3YWNzX3JzcmNbMl0uc3RhcnQsCi0JCQkgICBhd2Fjc19yc3JjWzJdLmVuZCAtIGF3YWNzX3JzcmNbMl0uc3RhcnQgKyAxKTsKLQotCWtmcmVlKGF3YWNzX3R4X2NtZF9zcGFjZSk7Ci0Ja2ZyZWUoYXdhY3NfcnhfY21kX3NwYWNlKTsKLQlrZnJlZShiZWVwX2RiZG1hX2NtZF9zcGFjZSk7Ci0Ja2ZyZWUoYmVlcF9idWYpOwotI2lmZGVmIENPTkZJR19QTQotCXBtdV91bnJlZ2lzdGVyX3NsZWVwX25vdGlmaWVyKCZhd2Fjc19zbGVlcF9ub3RpZmllcik7Ci0jZW5kaWYKLX0KLSNlbmRpZiAvKiBNT0RVTEUgKi8KLQotc3RhdGljIHZvaWQgUE1hY1NpbGVuY2Uodm9pZCkKLXsKLQkvKiB0dXJuIG9mZiBvdXRwdXQgZG1hICovCi0JREJETUFfRE9fU1RPUChhd2Fjc190eGRtYSk7Ci19Ci0KLS8qIGRvbid0IGtub3cgd2hhdCB0byBkbyByZWFsbHkgLSBqdXN0IGhhdmUgdG8gbGVhdmUgaXQgd2hlcmUKLSAqIE9GIGxlZnQgdGhpbmdzCi0qLwotCi1zdGF0aWMgaW50IGRhY2Ffc2V0X2ZyYW1lX3JhdGUodm9pZCkKLXsKLQlpZiAoaTJzKSB7Ci0JCW91dF9sZTMyKGkycyArIChJMlNfUkVHX1NFUklBTF9GT1JNQVQgPj4gMiksIDB4NDExOTAwMDApOwotCQlvdXRfbGUzMihpMnMgKyAoSTJTX1JFR19EQVRBV09SRF9TSVpFUyA+PiAyKSwgMHgwMjAwMDIwMCk7Ci0JfQotCWRtYXNvdW5kLmhhcmQuc3BlZWQgPSA0NDEwMCA7Ci0JYXdhY3NfcmF0ZV9pbmRleCA9IDAgOwotCXJldHVybiA0NDEwMCA7Ci19Ci0KLXN0YXRpYyBpbnQgYXdhY3NfZnJlcXNbOF0gPSB7Ci0JNDQxMDAsIDI5NDAwLCAyMjA1MCwgMTc2NDAsIDE0NzAwLCAxMTAyNSwgODgyMCwgNzM1MAotfTsKLXN0YXRpYyBpbnQgYXdhY3NfZnJlcXNfb2tbOF0gPSB7IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfTsKLQotc3RhdGljIGludAotYXdhY3Nfc2V0X2ZyYW1lX3JhdGUoaW50IGRlc2lyZWQsIGludCBjYXRjaF9yKQotewotCWludCB0b2xlcmFuY2UsIGkgPSA4IDsKLQkvKgotCSAqIElmIHdlIGhhdmUgYSBzYW1wbGUgcmF0ZSB3aGljaCBpcyB3aXRoaW4gY2F0Y2hSYWRpdXMgcGVyY2VudAotCSAqIG9mIHRoZSByZXF1ZXN0ZWQgdmFsdWUsIHdlIGRvbid0IGhhdmUgdG8gZXhwYW5kIHRoZSBzYW1wbGVzLgotCSAqIE90aGVyd2lzZSBjaG9vc2UgdGhlIG5leHQgaGlnaGVyIHJhdGUuCi0JICogTi5CLjogYnVyZ3VuZHkgYXdhY3Mgb25seSB3b3JrcyBhdCA0NDEwMCBIei4KLQkgKi8KLQlkbyB7Ci0JCXRvbGVyYW5jZSA9IGNhdGNoX3IgKiBhd2Fjc19mcmVxc1stLWldIC8gMTAwOwotCQlpZiAoYXdhY3NfZnJlcXNfb2tbaV0KLQkJICAgICYmIGRtYXNvdW5kLnNvZnQuc3BlZWQgPD0gYXdhY3NfZnJlcXNbaV0gKyB0b2xlcmFuY2UpCi0JCQlicmVhazsKLQl9IHdoaWxlIChpID4gMCk7Ci0JZG1hc291bmQuaGFyZC5zcGVlZCA9IGF3YWNzX2ZyZXFzW2ldOwotCWF3YWNzX3JhdGVfaW5kZXggPSBpOwotCi0Jb3V0X2xlMzIoJmF3YWNzLT5jb250cm9sLCBNQVNLX0lFUEMgfCAoaSA8PCA4KSB8IDB4MTEgKTsKLQlhd2Fjc19yZWdbMV0gPSAoYXdhY3NfcmVnWzFdICYgfk1BU0tfU0FNUExFUkFURSkgfCAoaSA8PCAzKTsKLQlhd2Fjc193cml0ZShhd2Fjc19yZWdbMV0gfCBNQVNLX0FERFIxKTsKLQlyZXR1cm4gZG1hc291bmQuaGFyZC5zcGVlZDsKLX0KLQotc3RhdGljIGludAotYnVyZ3VuZHlfc2V0X2ZyYW1lX3JhdGUodm9pZCkKLXsKLQlhd2Fjc19yYXRlX2luZGV4ID0gMCA7Ci0JYXdhY3NfcmVnWzFdID0gKGF3YWNzX3JlZ1sxXSAmIH5NQVNLX1NBTVBMRVJBVEUpIDsKLQkvKiBYWFggZGlzYWJsZSBlcnJvciBpbnRlcnJ1cHQgb24gYnVyZ3VuZHkgZm9yIG5vdyAqLwotCW91dF9sZTMyKCZhd2Fjcy0+Y29udHJvbCwgTUFTS19JRVBDIHwgMCB8IDB4MTEgfCBNQVNLX0lFRSk7Ci0JcmV0dXJuIDQ0MTAwIDsKLX0KLQotc3RhdGljIGludAotc2V0X2ZyYW1lX3JhdGUoaW50IGRlc2lyZWQsIGludCBjYXRjaF9yKQotewotCXN3aXRjaCAoYXdhY3NfcmV2aXNpb24pIHsKLQkJY2FzZSBBV0FDU19CVVJHVU5EWToKLQkJCWRtYXNvdW5kLmhhcmQuc3BlZWQgPSBidXJndW5keV9zZXRfZnJhbWVfcmF0ZSgpOwotCQkJYnJlYWsgOwotCQljYXNlIEFXQUNTX1RVTUJMRVI6Ci0JCWNhc2UgQVdBQ1NfU05BUFBFUjoKLQkJCWRtYXNvdW5kLmhhcmQuc3BlZWQgPSB0YXNfc2V0X2ZyYW1lX3JhdGUoKTsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19EQUNBOgotCQkJZG1hc291bmQuaGFyZC5zcGVlZCA9Ci0JCQkgIGRhY2Ffc2V0X2ZyYW1lX3JhdGUoKTsKLQkJCWJyZWFrIDsKLQkJZGVmYXVsdDoKLQkJCWRtYXNvdW5kLmhhcmQuc3BlZWQgPSBhd2Fjc19zZXRfZnJhbWVfcmF0ZShkZXNpcmVkLAotCQkJCQkJY2F0Y2hfcik7Ci0JCQlicmVhayA7Ci0JfQotCXJldHVybiBkbWFzb3VuZC5oYXJkLnNwZWVkIDsKLX0KLQotc3RhdGljIHZvaWQKLWF3YWNzX3JlY2FsaWJyYXRlKHZvaWQpCi17Ci0JLyogU29ycnkgZm9yIHRoZSBob3JyaWJsZSBkZWxheXMuLi4gSSBob3BlIHRvIGdldCB0aGF0IGltcHJvdmVkCi0JICogYnkgbWFraW5nIHRoZSB3aG9sZSBQTSBwcm9jZXNzIGFzeW5jaHJvbm91cyBpbiBhIGZ1dHVyZSB2ZXJzaW9uCi0JICovCi0JbXNsZWVwKDc1MCk7Ci0JYXdhY3NfcmVnWzFdIHw9IE1BU0tfQ01VVEUgfCBNQVNLX0FNVVRFOwotCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1sxXSB8IE1BU0tfUkVDQUxJQlJBVEUgfCBNQVNLX0FERFIxKTsKLQltc2xlZXAoMTAwMCk7Ci0JYXdhY3Nfd3JpdGUoYXdhY3NfcmVnWzFdIHwgTUFTS19BRERSMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIFBNYWNJbml0KHZvaWQpCi17Ci0JaW50IHRvbGVyYW5jZTsKLQotCXN3aXRjaCAoZG1hc291bmQuc29mdC5mb3JtYXQpIHsKLQkgICAgY2FzZSBBRk1UX1MxNl9MRToKLQkgICAgY2FzZSBBRk1UX1UxNl9MRToKLQkJaWYgKGh3X2Nhbl9ieXRlc3dhcCkKLQkJCWRtYXNvdW5kLmhhcmQuZm9ybWF0ID0gQUZNVF9TMTZfTEU7Ci0JCWVsc2UKLQkJCWRtYXNvdW5kLmhhcmQuZm9ybWF0ID0gQUZNVF9TMTZfQkU7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRtYXNvdW5kLmhhcmQuZm9ybWF0ID0gQUZNVF9TMTZfQkU7Ci0JCWJyZWFrOwotCX0KLQlkbWFzb3VuZC5oYXJkLnN0ZXJlbyA9IDE7Ci0JZG1hc291bmQuaGFyZC5zaXplID0gMTY7Ci0KLQkvKiBzZXQgZG1hc291bmQuaGFyZC5zcGVlZCAtIG9uIHRoZSBiYXNpcyBvZiB3aGF0IHdlIHdhbnQgKHNvZnQpCi0JICogYW5kIHRoZSB0b2xlcmFuY2Ugd2UnbGwgYWxsb3cuCi0JKi8KLQlzZXRfZnJhbWVfcmF0ZShkbWFzb3VuZC5zb2Z0LnNwZWVkLCBjYXRjaFJhZGl1cykgOwotCi0JdG9sZXJhbmNlID0gKGNhdGNoUmFkaXVzICogZG1hc291bmQuaGFyZC5zcGVlZCkgLyAxMDA7Ci0JaWYgKGRtYXNvdW5kLnNvZnQuc3BlZWQgPj0gZG1hc291bmQuaGFyZC5zcGVlZCAtIHRvbGVyYW5jZSkgewotCQlkbWFzb3VuZC50cmFuc193cml0ZSA9ICZ0cmFuc0F3YWNzTm9ybWFsOwotCQlkbWFzb3VuZC50cmFuc19yZWFkID0gJnRyYW5zQXdhY3NOb3JtYWxSZWFkOwotCX0gZWxzZSB7Ci0JCWRtYXNvdW5kLnRyYW5zX3dyaXRlID0gJnRyYW5zQXdhY3NFeHBhbmQ7Ci0JCWRtYXNvdW5kLnRyYW5zX3JlYWQgPSAmdHJhbnNBd2Fjc0V4cGFuZFJlYWQ7Ci0JfQotCi0JaWYgKGF3YWNzKSB7Ci0JCWlmIChod19jYW5fYnl0ZXN3YXAgJiYgKGRtYXNvdW5kLmhhcmQuZm9ybWF0ID09IEFGTVRfUzE2X0xFKSkKLQkJCW91dF9sZTMyKCZhd2Fjcy0+Ynl0ZXN3YXAsIEJTX1ZBTCk7Ci0JCWVsc2UKLQkJCW91dF9sZTMyKCZhd2Fjcy0+Ynl0ZXN3YXAsIDApOwotCX0KLQkKLQlleHBhbmRfYmFsID0gLWRtYXNvdW5kLnNvZnQuc3BlZWQ7Ci0JZXhwYW5kX3JlYWRfYmFsID0gLWRtYXNvdW5kLnNvZnQuc3BlZWQ7Ci19Ci0KLXN0YXRpYyBpbnQgUE1hY1NldEZvcm1hdChpbnQgZm9ybWF0KQotewotCWludCBzaXplOwotCWludCByZXFfZm9ybWF0ID0gZm9ybWF0OwotCQkKLQlzd2l0Y2ggKGZvcm1hdCkgewotCWNhc2UgQUZNVF9RVUVSWToKLQkJcmV0dXJuIGRtYXNvdW5kLnNvZnQuZm9ybWF0OwotCWNhc2UgQUZNVF9NVV9MQVc6Ci0JY2FzZSBBRk1UX0FfTEFXOgotCWNhc2UgQUZNVF9VODoKLQljYXNlIEFGTVRfUzg6Ci0JCXNpemUgPSA4OwotCQlicmVhazsKLQljYXNlIEFGTVRfUzE2X0xFOgotCQlpZighaHdfY2FuX2J5dGVzd2FwKQotCQkJZm9ybWF0ID0gQUZNVF9TMTZfQkU7Ci0JY2FzZSBBRk1UX1MxNl9CRToKLQkJc2l6ZSA9IDE2OwotCQlicmVhazsKLQljYXNlIEFGTVRfVTE2X0xFOgotCQlpZighaHdfY2FuX2J5dGVzd2FwKQotCQkJZm9ybWF0ID0gQUZNVF9VMTZfQkU7Ci0JY2FzZSBBRk1UX1UxNl9CRToKLQkJc2l6ZSA9IDE2OwotCQlicmVhazsKLQlkZWZhdWx0OiAvKiA6LSkgKi8KLQkJcHJpbnRrKEtFUk5fRVJSICJkbWFzb3VuZDogdW5rbm93biBmb3JtYXQgMHgleCwgdXNpbmcgQUZNVF9VOFxuIiwKLQkJICAgICAgIGZvcm1hdCk7Ci0JCXNpemUgPSA4OwotCQlmb3JtYXQgPSBBRk1UX1U4OwotCX0KLQkKLQlpZiAocmVxX2Zvcm1hdCA9PSBmb3JtYXQpIHsKLQkJZG1hc291bmQuc29mdC5mb3JtYXQgPSBmb3JtYXQ7Ci0JCWRtYXNvdW5kLnNvZnQuc2l6ZSA9IHNpemU7Ci0JCWlmIChkbWFzb3VuZC5taW5EZXYgPT0gU05EX0RFVl9EU1ApIHsKLQkJCWRtYXNvdW5kLmRzcC5mb3JtYXQgPSBmb3JtYXQ7Ci0JCQlkbWFzb3VuZC5kc3Auc2l6ZSA9IHNpemU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gZm9ybWF0OwotfQotCi0jZGVmaW5lIEFXQUNTX1ZPTFVNRV9UT19NQVNLKHgpCSgxNSAtICgoKCh4KSAtIDEpICogMTUpIC8gOTkpKQotI2RlZmluZSBBV0FDU19NQVNLX1RPX1ZPTFVNRSh5KQkoMTAwIC0gKCh5KSAqIDk5IC8gMTUpKQotCi1zdGF0aWMgaW50IGF3YWNzX2dldF92b2x1bWUoaW50IHJlZywgaW50IGxzaGlmdCkKLXsKLQlpbnQgdm9sdW1lOwotCi0Jdm9sdW1lID0gQVdBQ1NfTUFTS19UT19WT0xVTUUoKHJlZyA+PiBsc2hpZnQpICYgMHhmKTsKLQl2b2x1bWUgfD0gQVdBQ1NfTUFTS19UT19WT0xVTUUocmVnICYgMHhmKSA8PCA4OwotCXJldHVybiB2b2x1bWU7Ci19Ci0KLXN0YXRpYyBpbnQgYXdhY3Nfdm9sdW1lX3NldHRlcihpbnQgdm9sdW1lLCBpbnQgbiwgaW50IG11dGUsIGludCBsc2hpZnQpCi17Ci0JaW50IHIxLCBybjsKLQotCWlmIChtdXRlICYmIHZvbHVtZSA9PSAwKSB7Ci0JCXIxID0gYXdhY3NfcmVnWzFdIHwgbXV0ZTsKLQl9IGVsc2UgewotCQlyMSA9IGF3YWNzX3JlZ1sxXSAmIH5tdXRlOwotCQlybiA9IGF3YWNzX3JlZ1tuXSAmIH4oMHhmIHwgKDB4ZiA8PCBsc2hpZnQpKTsKLQkJcm4gfD0gKChBV0FDU19WT0xVTUVfVE9fTUFTSyh2b2x1bWUgJiAweGZmKSAmIDB4ZikgPDwgbHNoaWZ0KTsKLQkJcm4gfD0gQVdBQ1NfVk9MVU1FX1RPX01BU0soKHZvbHVtZSA+PiA4KSAmIDB4ZmYpICYgMHhmOwotCQlhd2Fjc19yZWdbbl0gPSBybjsKLQkJYXdhY3Nfd3JpdGUoKG4gPDwgMTIpIHwgcm4pOwotCQl2b2x1bWUgPSBhd2Fjc19nZXRfdm9sdW1lKHJuLCBsc2hpZnQpOwotCX0KLQlpZiAocjEgIT0gYXdhY3NfcmVnWzFdKSB7Ci0JCWF3YWNzX3JlZ1sxXSA9IHIxOwotCQlhd2Fjc193cml0ZShyMSB8IE1BU0tfQUREUjEpOwotCX0KLQlyZXR1cm4gdm9sdW1lOwotfQotCi1zdGF0aWMgaW50IFBNYWNTZXRWb2x1bWUoaW50IHZvbHVtZSkKLXsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJCb2d1cyBjYWxsIHRvIFBNYWNTZXRWb2x1bWUgIVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGF3YWNzX3NldHVwX2Zvcl9iZWVwKGludCBzcGVlZCkKLXsKLQlvdXRfbGUzMigmYXdhY3MtPmNvbnRyb2wsCi0JCSAoaW5fbGUzMigmYXdhY3MtPmNvbnRyb2wpICYgfjB4MWYwMCkKLQkJIHwgKChzcGVlZCA+IDAgPyBzcGVlZCA6IGF3YWNzX3JhdGVfaW5kZXgpIDw8IDgpKTsKLQotCWlmIChod19jYW5fYnl0ZXN3YXAgJiYgKGRtYXNvdW5kLmhhcmQuZm9ybWF0ID09IEFGTVRfUzE2X0xFKSAmJiBzcGVlZCA9PSAtMSkKLQkJb3V0X2xlMzIoJmF3YWNzLT5ieXRlc3dhcCwgQlNfVkFMKTsKLQllbHNlCi0JCW91dF9sZTMyKCZhd2Fjcy0+Ynl0ZXN3YXAsIDApOwotfQotCi0vKiBDSEVDSzogaG93IG11Y2ggb2YgdGhpcyAqcmVhbGx5KiBuZWVkcyBJUlFzIG1hc2tlZD8gKi8KLXN0YXRpYyB2b2lkIF9fUE1hY1BsYXkodm9pZCkKLXsKLQl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICpjcDsKLQlpbnQgbmV4dF9mcmcsIGNvdW50OwotCi0JY291bnQgPSAzMDAgOyAvKiA+IHR3byBjeWNsZXMgYXQgdGhlIGxvd2VzdCBzYW1wbGUgcmF0ZSAqLwotCi0JLyogd2hhdCB3ZSB3YW50IHRvIHNlbmQgbmV4dCAqLwotCW5leHRfZnJnID0gKHdyaXRlX3NxLmZyb250ICsgd3JpdGVfc3EuYWN0aXZlKSAlIHdyaXRlX3NxLm1heF9jb3VudDsKLQotCWlmIChhd2Fjc19iZWVwX3N0YXRlKSB7Ci0JCS8qIHNvdW5kIHRha2VzIHByZWNlZGVuY2Ugb3ZlciBiZWVwcyAqLwotCQkvKiBzdG9wIHRoZSBkbWEgY2hhbm5lbCAqLwotCQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNvbnRyb2wsIChSVU58UEFVU0V8RkxVU0h8V0FLRSkgPDwgMTYpOwotCQl3aGlsZSAoIChpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKSAmIFJVTikgJiYgY291bnQtLSkKLQkJCXVkZWxheSgxKTsKLQkJaWYgKGF3YWNzKQotCQkJYXdhY3Nfc2V0dXBfZm9yX2JlZXAoLTEpOwotCQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNtZHB0ciwKLQkJCSB2aXJ0X3RvX2J1cygmKGF3YWNzX3R4X2NtZHNbbmV4dF9mcmddKSkpOwotCi0JCWJlZXBfcGxheWluZyA9IDA7Ci0JCWF3YWNzX2JlZXBfc3RhdGUgPSAwOwotCX0KLQkvKiB0aGlzIHdvbid0IGFsbG93IG1vcmUgdGhhbiB0d28gZnJhZ3MgdG8gYmUgaW4gdGhlIG91dHB1dCBxdWV1ZSBhdAotCSAgIG9uY2UuIChvciBvbmUsIGlmIHRoZSBtYXggZnJhZ3MgaXMgMiAtIGJlY2F1c2UgY291bnQgY2FuJ3QgZXhjZWVkCi0JICAgMiBpbiB0aGF0IGNhc2UpCi0JKi8KLQl3aGlsZSAod3JpdGVfc3EuYWN0aXZlIDwgMiAmJiB3cml0ZV9zcS5hY3RpdmUgPCB3cml0ZV9zcS5jb3VudCkgewotCQljb3VudCA9ICh3cml0ZV9zcS5jb3VudCA9PSB3cml0ZV9zcS5hY3RpdmUgKyAxKSA/Ci0JCQkJd3JpdGVfc3EucmVhcl9zaXplOndyaXRlX3NxLmJsb2NrX3NpemUgOwotCQlpZiAoY291bnQgPCB3cml0ZV9zcS5ibG9ja19zaXplKSB7Ci0JCQlpZiAoIXdyaXRlX3NxLnN5bmNpbmcpIC8qIGxhc3QgYmxvY2sgbm90IHlldCBmaWxsZWQsKi8KLQkJCQlicmVhazsgCS8qIGFuZCB3ZSdyZSBub3Qgc3luY2luZyBvciBQT1NULWVkICovCi0JCQllbHNlIHsKLQkJCQkvKiBwcmV0ZW5kIHRoZSBibG9jayBpcyBmdWxsIHRvIGZvcmNlIGEgbmV3Ci0JCQkJICAgYmxvY2sgdG8gYmUgc3RhcnRlZCBvbiB0aGUgbmV4dCB3cml0ZSAqLwotCQkJCXdyaXRlX3NxLnJlYXJfc2l6ZSA9IHdyaXRlX3NxLmJsb2NrX3NpemUgOwotCQkJCXdyaXRlX3NxLnN5bmNpbmcgJj0gfjIgOyAvKiBjbGVhciBQT1NUICovCi0JCQl9Ci0JCX0KLQkJY3AgPSAmYXdhY3NfdHhfY21kc1tuZXh0X2ZyZ107Ci0JCXN0X2xlMTYoJmNwLT5yZXFfY291bnQsIGNvdW50KTsKLQkJc3RfbGUxNigmY3AtPnhmZXJfc3RhdHVzLCAwKTsKLQkJc3RfbGUxNigmY3AtPmNvbW1hbmQsIE9VVFBVVF9NT1JFICsgSU5UUl9BTFdBWVMpOwotCQkvKiBwdXQgYSBTVE9QIGF0IHRoZSBlbmQgb2YgdGhlIHF1ZXVlIC0gYnV0IG9ubHkgaWYgd2UgaGF2ZQotCQkgICBzcGFjZSBmb3IgaXQuICBUaGlzIG1lYW5zIHRoYXQsIGlmIHdlIHVuZGVyLXJ1biBhbmQgd2Ugb25seQotCQkgICBoYXZlIHR3byBmcmFnbWVudHMsIHdlIG1pZ2h0IHJlLXBsYXkgc291bmQgZnJvbSBhbiBleGlzdGluZwotCQkgICBxdWV1ZWQgZnJhZy4gIEkgZ3Vlc3MgdGhlIHNvbHV0aW9uIHRvIHRoYXQgaXMgbm90IHRvIHNldCB0d28KLQkJICAgZnJhZ3MgaWYgeW91IGFyZSBsaWtlbHkgdG8gdW5kZXItcnVuLi4uCi0JCSovCi0JCWlmICh3cml0ZV9zcS5jb3VudCA8IHdyaXRlX3NxLm1heF9jb3VudCkgewotCQkJaWYgKCsrbmV4dF9mcmcgPj0gd3JpdGVfc3EubWF4X2NvdW50KQotCQkJCW5leHRfZnJnID0gMCA7IC8qIHdyYXAgKi8KLQkJCS8qIGlmIHdlIGdldCBoZXJlIHRoZW4gd2UndmUgdW5kZXJydW4gc28gd2Ugd2lsbCBzdG9wKi8KLQkJCXN0X2xlMTYoJmF3YWNzX3R4X2NtZHNbbmV4dF9mcmddLmNvbW1hbmQsIERCRE1BX1NUT1ApOwotCQl9Ci0JCS8qIHNldCB0aGUgZGJkbWEgY29udHJvbGxlciBnb2luZywgaWYgaXQgaXMgbm90IGFscmVhZHkgKi8KLQkJaWYgKHdyaXRlX3NxLmFjdGl2ZSA9PSAwKQotCQkJb3V0X2xlMzIoJmF3YWNzX3R4ZG1hLT5jbWRwdHIsIHZpcnRfdG9fYnVzKGNwKSk7Ci0JCSh2b2lkKWluX2xlMzIoJmF3YWNzX3R4ZG1hLT5zdGF0dXMpOwotCQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNvbnRyb2wsICgoUlVOfFdBS0UpIDw8IDE2KSArIChSVU58V0FLRSkpOwotCQkrK3dyaXRlX3NxLmFjdGl2ZTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIFBNYWNQbGF5KHZvaWQpCi17Ci0JTE9DSygpOwotCWlmICghYXdhY3Nfc2xlZXBpbmcpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hc291bmQubG9jaywgZmxhZ3MpOwotCQlfX1BNYWNQbGF5KCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXNvdW5kLmxvY2ssIGZsYWdzKTsKLQl9Ci0JVU5MT0NLKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIFBNYWNSZWNvcmQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKHJlYWRfc3EuYWN0aXZlKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hc291bmQubG9jaywgZmxhZ3MpOwotCi0JLyogVGhpcyBpcyBhbGwgd2UgaGF2ZSB0byBkby4uLi4uLkp1c3Qgc3RhcnQgaXQgdXAuCi0JKi8KLQlvdXRfbGUzMigmYXdhY3NfcnhkbWEtPmNvbnRyb2wsICgoUlVOfFdBS0UpIDw8IDE2KSArIChSVU58V0FLRSkpOwotCXJlYWRfc3EuYWN0aXZlID0gMTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXNvdW5kLmxvY2ssIGZsYWdzKTsKLX0KLQotLyogaWYgdGhlIFRYIHN0YXR1cyBjb21lcyB1cCAiREVBRCIgLSByZXBvcnRlZCBvbiBzb21lIFBvd2VyIENvbXB1dGluZyBtYWNoaW5lcwotICAgd2UgbmVlZCB0byByZS1zdGFydCB0aGUgZGJkbWEgLSBidXQgZnJvbSBhIGRpZmZlcmVudCBwaHlzaWNhbCBzdGFydCBhZGRyZXNzCi0gICBhbmQgd2l0aCBhIGRpZmZlcmVudCB0cmFuc2ZlciBsZW5ndGguICBJdCB3b3VsZCBnZXQgdmVyeSBtZXNzeSB0byBkbyB0aGlzCi0gICB3aXRoIHRoZSBub3JtYWwgZGJkbWFfY21kIGJsb2NrcyAtIHdlIHdvdWxkIGhhdmUgdG8gcmUtd3JpdGUgdGhlIGJ1ZmZlciBzdGFydAotICAgYWRkcmVzc2VzIGVhY2ggdGltZS4gIFNvLCB3ZSB3aWxsIGtlZXAgYSBzaW5nbGUgZGJkbWFfY21kIGJsb2NrIHdoaWNoIGNhbiBiZQotICAgZmlkZGxlZCB3aXRoLgotICAgV2hlbiBERUFEIHN0YXR1cyBpcyBmaXJzdCByZXBvcnRlZCB0aGUgY29udGVudCBvZiB0aGUgZmF1bHRlZCBkYmRtYSBibG9jayBpcwotICAgY29waWVkIGludG8gdGhlIGVtZXJnZW5jeSBidWZmZXIgYW5kIHdlIG5vdGUgdGhhdCB0aGUgYnVmZmVyIGlzIGluIHVzZS4KLSAgIHdlIHRoZW4gYnVtcCB0aGUgc3RhcnQgcGh5c2ljYWwgYWRkcmVzcyBieSB0aGUgYW1vdW50IHRoYXQgd2FzIHN1Y2Nlc3NmdWxseQotICAgb3V0cHV0IGJlZm9yZSBpdCBkaWVkLgotICAgT24gYW55IHN1YnNlcXVlbnQgREVBRCByZXN1bHQgd2UganVzdCBkbyB0aGUgYnVtcC11cHMgKHdlIGtub3cgdGhhdCB3ZSBhcmUKLSAgIGFscmVhZHkgdXNpbmcgdGhlIGVtZXJnZW5jeSBkYmRtYV9jbWQpLgotICAgQ0hFQ0s6IHRoaXMganVzdCB0cmllcyB0byAiZG8gaXQiLiAgSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBzaG91bGQgYWJhbmRvbgotICAgeGZlcnMgd2hlbiB0aGUgbnVtYmVyIG9mIHJlc2lkdWFsIGJ5dGVzIGdldHMgYmVsb3cgYSBjZXJ0YWluIHZhbHVlIC0gSSBjYW4KLSAgIHNlZSB0aGF0IHRoaXMgbWlnaHQgY2F1c2UgYSBsb29wLWZvcmV2ZXIgaWYgdG9vIHNtYWxsIGEgdHJhbnNmZXIgY2F1c2VzCi0gICBERUFEIHN0YXR1cy4gIEhvd2V2ZXIgdGhpcyBpcyBhIFRPRE8gZm9yIG5vdyAtIHdlJ2xsIHNlZSB3aGF0IGdldHMgcmVwb3J0ZWQuCi0gICBXaGVuIHdlIGdldCBhIHN1Y2Nlc3NmdWwgdHJhbnNmZXIgcmVzdWx0IHdpdGggdGhlIGVtZXJnZW5jeSBidWZmZXIgd2UganVzdAotICAgcHJldGVuZCB0aGF0IGl0IGNvbXBsZXRlZCB1c2luZyB0aGUgb3JpZ2luYWwgZG1kbWFfY21kIGFuZCBjYXJyeSBvbi4gIFRoZQotICAgJ25leHRfY21kJyBmaWVsZCB3aWxsIGFscmVhZHkgcG9pbnQgYmFjayB0byB0aGUgb3JpZ2luYWwgbG9vcCBvZiBibG9ja3MuCi0qLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QKLXBtYWNfYXdhY3NfdHhfaW50cihpbnQgaXJxLCB2b2lkICpkZXZpZCkKLXsKLQlpbnQgaSA9IHdyaXRlX3NxLmZyb250OwotCWludCBzdGF0OwotCWludCBpX25vd3JhcCA9IHdyaXRlX3NxLmZyb250OwotCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9jbWQgKmNwOwotCS8qICE9IDAgd2hlbiB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgREVBRCB4ZmVyICovCi0Jc3RhdGljIGludCBlbWVyZ2VuY3lfaW5fdXNlOwotCi0Jc3Bpbl9sb2NrKCZkbWFzb3VuZC5sb2NrKTsKLQl3aGlsZSAod3JpdGVfc3EuYWN0aXZlID4gMCkgeyAvKiB3ZSBleHBlY3QgdG8gaGF2ZSBkb25lIHNvbWV0aGluZyovCi0JCWlmIChlbWVyZ2VuY3lfaW5fdXNlKSAvKiB3ZSBhcmUgZGVhbGluZyB3aXRoIERFQUQgeGZlciAqLwotCQkJY3AgPSBlbWVyZ2VuY3lfZGJkbWFfY21kIDsKLQkJZWxzZQotCQkJY3AgPSAmYXdhY3NfdHhfY21kc1tpXTsKLQkJc3RhdCA9IGxkX2xlMTYoJmNwLT54ZmVyX3N0YXR1cyk7Ci0JCWlmIChzdGF0ICYgREVBRCkgewotCQkJdW5zaWduZWQgc2hvcnQgcmVxLCByZXMgOwotCQkJdW5zaWduZWQgaW50IHBoeSA7Ci0jaWZkZWYgREVCVUdfRE1BU09VTkQKLXByaW50aygiZG1hc291bmRfcG1hYzogdHgtaXJxOiB4ZmVyIGRpZWQgLSBwYXRjaGluZyBpdCB1cC4uLlxuIikgOwotI2VuZGlmCi0JCQkvKiB0byBjbGVhciBERUFEIHN0YXR1cyB3ZSBtdXN0IGZpcnN0IGNsZWFyIFJVTgotCQkJICAgc2V0IGl0IHRvIHF1aWVzY2VudCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlICovCi0JCQkodm9pZClpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKTsKLQkJCW91dF9sZTMyKCZhd2Fjc190eGRtYS0+Y29udHJvbCwKLQkJCQkoUlVOfFBBVVNFfEZMVVNIfFdBS0UpIDw8IDE2KTsKLQkJCXdyaXRlX3NxLmRpZWQrKyA7Ci0JCQlpZiAoIWVtZXJnZW5jeV9pbl91c2UpIHsgLyogbmV3IHByb2JsZW0gKi8KLQkJCQltZW1jcHkoKHZvaWQgKillbWVyZ2VuY3lfZGJkbWFfY21kLCAodm9pZCAqKWNwLAotCQkJCQlzaXplb2Yoc3RydWN0IGRiZG1hX2NtZCkpOwotCQkJCWVtZXJnZW5jeV9pbl91c2UgPSAxOwotCQkJCWNwID0gZW1lcmdlbmN5X2RiZG1hX2NtZDsKLQkJCX0KLQkJCS8qIG5vdyBidW1wIHRoZSB2YWx1ZXMgdG8gcmVmbGVjdCB0aGUgYW1vdW50Ci0JCQkgICB3ZSBoYXZlbid0IHlldCBzaGlmdGVkICovCi0JCQlyZXEgPSBsZF9sZTE2KCZjcC0+cmVxX2NvdW50KTsKLQkJCXJlcyA9IGxkX2xlMTYoJmNwLT5yZXNfY291bnQpOwotCQkJcGh5ID0gbGRfbGUzMigmY3AtPnBoeV9hZGRyKTsKLQkJCXBoeSArPSAocmVxIC0gcmVzKTsKLQkJCXN0X2xlMTYoJmNwLT5yZXFfY291bnQsIHJlcyk7Ci0JCQlzdF9sZTE2KCZjcC0+cmVzX2NvdW50LCAwKTsKLQkJCXN0X2xlMTYoJmNwLT54ZmVyX3N0YXR1cywgMCk7Ci0JCQlzdF9sZTMyKCZjcC0+cGh5X2FkZHIsIHBoeSk7Ci0JCQlzdF9sZTMyKCZjcC0+Y21kX2RlcCwgdmlydF90b19idXMoJmF3YWNzX3R4X2NtZHNbKGkrMSkld3JpdGVfc3EubWF4X2NvdW50XSkpOwotCQkJc3RfbGUxNigmY3AtPmNvbW1hbmQsIE9VVFBVVF9NT1JFIHwgQlJfQUxXQVlTIHwgSU5UUl9BTFdBWVMpOwotCQkJCi0JCQkvKiBwb2ludCBhdCBvdXIgcGF0Y2hlZCB1cCBjb21tYW5kIGJsb2NrICovCi0JCQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNtZHB0ciwgdmlydF90b19idXMoY3ApKTsKLQkJCS8qIHdlIG11c3QgcmUtc3RhcnQgdGhlIGNvbnRyb2xsZXIgKi8KLQkJCSh2b2lkKWluX2xlMzIoJmF3YWNzX3R4ZG1hLT5zdGF0dXMpOwotCQkJLyogc2hvdWxkIGNvbXBsZXRlIGNsZWFyaW5nIHRoZSBERUFEIHN0YXR1cyAqLwotCQkJb3V0X2xlMzIoJmF3YWNzX3R4ZG1hLT5jb250cm9sLAotCQkJCSgoUlVOfFdBS0UpIDw8IDE2KSArIChSVU58V0FLRSkpOwotCQkJYnJlYWs7IC8qIHRoaXMgYmxvY2sgaXMgc3RpbGwgZ29pbmcgKi8KLQkJfQotCQlpZiAoKHN0YXQgJiBBQ1RJVkUpID09IDApCi0JCQlicmVhazsJLyogdGhpcyBmcmFtZSBpcyBzdGlsbCBnb2luZyAqLwotCQlpZiAoZW1lcmdlbmN5X2luX3VzZSkKLQkJCWVtZXJnZW5jeV9pbl91c2UgPSAwIDsgLyogZG9uZSB0aGF0ICovCi0JCS0td3JpdGVfc3EuY291bnQ7Ci0JCS0td3JpdGVfc3EuYWN0aXZlOwotCQlpX25vd3JhcCsrOwotCQlpZiAoKytpID49IHdyaXRlX3NxLm1heF9jb3VudCkKLQkJCWkgPSAwOwotCX0KLQotCS8qIGlmIHdlIHN0b3BwZWQgYW5kIHdlIHdlcmUgbm90IHN5bmMtaW5nIC0gdGhlbiB3ZSB1bmRlci1yYW4gKi8KLQlpZiggd3JpdGVfc3Euc3luY2luZyA9PSAwICl7Ci0JCXN0YXQgPSBpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKSA7Ci0JCS8qIHdlIGhpdCB0aGUgZGJkbWFfc3RvcCAqLwotCQlpZiggKHN0YXQgJiBBQ1RJVkUpID09IDAgKSB3cml0ZV9zcS54cnVucysrIDsKLQl9Ci0KLQkvKiBpZiB3ZSB1c2VkIHNvbWUgZGF0YSB1cCB0aGVuIHdha2UgdGhlIHdyaXRlciB0byBzdXBwbHkgc29tZSBtb3JlKi8KLQlpZiAoaV9ub3dyYXAgIT0gd3JpdGVfc3EuZnJvbnQpCi0JCVdBS0VfVVAod3JpdGVfc3EuYWN0aW9uX3F1ZXVlKTsKLQl3cml0ZV9zcS5mcm9udCA9IGk7Ci0KLQkvKiBidXQgbWFrZSBzdXJlIHdlIGZ1bm5lbCB3aGF0IHdlJ3ZlIGFscmVhZHkgZ290ICovXAotCSBpZiAoIWF3YWNzX3NsZWVwaW5nKQotCQlfX1BNYWNQbGF5KCk7Ci0KLQkvKiBtYWtlIHRoZSB3YWtlLW9uLWVtcHR5IGNvbmRpdGlvbmFsIG9uIHN5bmNpbmcgKi8KLQlpZiAoIXdyaXRlX3NxLmFjdGl2ZSAmJiAod3JpdGVfc3Euc3luY2luZyAmIDEpKQotCQlXQUtFX1VQKHdyaXRlX3NxLnN5bmNfcXVldWUpOyAvKiBhbnkgdGltZSB3ZSdyZSBlbXB0eSAqLwotCXNwaW5fdW5sb2NrKCZkbWFzb3VuZC5sb2NrKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLQotc3RhdGljIGlycXJldHVybl90Ci1wbWFjX2F3YWNzX3J4X2ludHIoaW50IGlycSwgdm9pZCAqZGV2aWQpCi17Ci0JaW50IHN0YXQgOwotCS8qIEZvciBzb21lIHJlYXNvbiBvbiBteSBQb3dlckJvb2sgRzMsIEkgZ2V0IG9uZSBpbnRlcnJ1cHQKLQkgKiB3aGVuIHRoZSBpbnRlcnJ1cHQgdmVjdG9yIGlzIGluc3RhbGxlZCAobGlrZSBzb21ldGhpbmcgaXMKLQkgKiBwZW5kaW5nKS4gIFRoaXMgaGFwcGVucyBiZWZvcmUgdGhlIGRiZG1hIGlzIGluaXRpYWxpemVkIGJ5Ci0JICogdXMsIHNvIEkganVzdCBjaGVjayB0aGUgY29tbWFuZCBwb2ludGVyIGFuZCBpZiBpdCBpcyB6ZXJvLAotCSAqIGp1c3QgYmxvdyBpdCBvZmYuCi0JICovCi0JaWYgKGluX2xlMzIoJmF3YWNzX3J4ZG1hLT5jbWRwdHIpID09IDApCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQotCS8qIFdlIGFsc28gd2FudCB0byBibG93ICdlbSBvZmYgd2hlbiBzaHV0dGluZyBkb3duLgotCSovCi0JaWYgKHJlYWRfc3EuYWN0aXZlID09IDApCi0JCXJldHVybiBJUlFfSEFORExFRDsKLQotCXNwaW5fbG9jaygmZG1hc291bmQubG9jayk7Ci0JLyogQ2hlY2sgbXVsdGlwbGUgYnVmZmVycyBpbiBjYXNlIHdlIHdlcmUgaGVsZCBvZmYgZnJvbQotCSAqIGludGVycnVwdCBwcm9jZXNzaW5nIGZvciBhIGxvbmcgdGltZS4gIEdlZXplLCBJIHJlYWxseSBob3BlCi0JICogdGhpcyBkb2Vzbid0IGhhcHBlbi4KLQkgKi8KLQl3aGlsZSAoKHN0YXQ9YXdhY3NfcnhfY21kc1tyZWFkX3NxLnJlYXJdLnhmZXJfc3RhdHVzKSkgewotCi0JCS8qIGlmIHdlIGdvdCBhICJERUFEIiBzdGF0dXMgdGhlbiBqdXN0IGxvZyBpdCBmb3Igbm93LgotCQkgICBhbmQgdHJ5IHRvIHJlc3RhcnQgZG1hLgotCQkgICBUT0RPOiBmaWd1cmUgb3V0IGhvdyBiZXN0IHRvIGZpeCBpdCB1cAotCQkqLwotCQlpZiAoc3RhdCAmIERFQUQpewotI2lmZGVmIERFQlVHX0RNQVNPVU5ECi1wcmludGsoImRtYXNvdW5kX3BtYWM6IHJ4LWlycTogRElFRCAtIGF0dGVtcHRpbmcgcmVzdXJlY3Rpb25cbiIpOwotI2VuZGlmCi0JCQkvKiB0byBjbGVhciBERUFEIHN0YXR1cyB3ZSBtdXN0IGZpcnN0IGNsZWFyIFJVTgotCQkJICAgc2V0IGl0IHRvIHF1aWVzY2VudCB0byBiZSBvbiB0aGUgc2FmZSBzaWRlICovCi0JCQkodm9pZClpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKTsKLQkJCW91dF9sZTMyKCZhd2Fjc190eGRtYS0+Y29udHJvbCwKLQkJCQkoUlVOfFBBVVNFfEZMVVNIfFdBS0UpIDw8IDE2KTsKLQkJCWF3YWNzX3J4X2NtZHNbcmVhZF9zcS5yZWFyXS54ZmVyX3N0YXR1cyA9IDA7Ci0JCQlhd2Fjc19yeF9jbWRzW3JlYWRfc3EucmVhcl0ucmVzX2NvdW50ID0gMDsKLQkJCXJlYWRfc3EuZGllZCsrIDsKLQkJCSh2b2lkKWluX2xlMzIoJmF3YWNzX3R4ZG1hLT5zdGF0dXMpOwotCQkJLyogcmUtc3RhcnQgdGhlIHNhbWUgYmxvY2sgKi8KLQkJCW91dF9sZTMyKCZhd2Fjc19yeGRtYS0+Y21kcHRyLAotCQkJCXZpcnRfdG9fYnVzKCZhd2Fjc19yeF9jbWRzW3JlYWRfc3EucmVhcl0pKTsKLQkJCS8qIHdlIG11c3QgcmUtc3RhcnQgdGhlIGNvbnRyb2xsZXIgKi8KLQkJCSh2b2lkKWluX2xlMzIoJmF3YWNzX3J4ZG1hLT5zdGF0dXMpOwotCQkJLyogc2hvdWxkIGNvbXBsZXRlIGNsZWFyaW5nIHRoZSBERUFEIHN0YXR1cyAqLwotCQkJb3V0X2xlMzIoJmF3YWNzX3J4ZG1hLT5jb250cm9sLAotCQkJCSgoUlVOfFdBS0UpIDw8IDE2KSArIChSVU58V0FLRSkpOwotCQkJc3Bpbl91bmxvY2soJmRtYXNvdW5kLmxvY2spOwotCQkJcmV0dXJuIElSUV9IQU5ETEVEOyAvKiB0cnkgdGhpcyBibG9jayBhZ2FpbiAqLwotCQl9Ci0JCS8qIENsZWFyIHN0YXR1cyBhbmQgbW92ZSBvbiB0byBuZXh0IGJ1ZmZlci4KLQkJKi8KLQkJYXdhY3NfcnhfY21kc1tyZWFkX3NxLnJlYXJdLnhmZXJfc3RhdHVzID0gMDsKLQkJcmVhZF9zcS5yZWFyKys7Ci0KLQkJLyogV3JhcCB0aGUgYnVmZmVyIHJpbmcuCi0JCSovCi0JCWlmIChyZWFkX3NxLnJlYXIgPj0gcmVhZF9zcS5tYXhfYWN0aXZlKQotCQkJcmVhZF9zcS5yZWFyID0gMDsKLQotCQkvKiBJZiB3ZSBoYXZlIGNhdWdodCB1cCB0byB0aGUgZnJvbnQgYnVmZmVyLCBidW1wIGl0LgotCQkgKiBUaGlzIHdpbGwgY2F1c2Ugd2VpcmQgKGJ1dCBub3QgZmF0YWwpIHJlc3VsdHMgaWYgdGhlCi0JCSAqIHJlYWQgbG9vcCBpcyBjdXJyZW50bHkgdXNpbmcgdGhpcyBidWZmZXIuICBUaGUgdXNlciBpcwotCQkgKiBiZWhpbmQgaW4gdGhpcyBjYXNlIGFueXdheSwgc28gd2VpcmQgdGhpbmdzIGFyZSBnb2luZwotCQkgKiB0byBoYXBwZW4uCi0JCSAqLwotCQlpZiAocmVhZF9zcS5yZWFyID09IHJlYWRfc3EuZnJvbnQpIHsKLQkJCXJlYWRfc3EuZnJvbnQrKzsKLQkJCXJlYWRfc3EueHJ1bnMrKyA7IC8qIHdlIG92ZXJhbiAqLwotCQkJaWYgKHJlYWRfc3EuZnJvbnQgPj0gcmVhZF9zcS5tYXhfYWN0aXZlKQotCQkJCXJlYWRfc3EuZnJvbnQgPSAwOwotCQl9Ci0JfQotCi0JV0FLRV9VUChyZWFkX3NxLmFjdGlvbl9xdWV1ZSk7Ci0Jc3Bpbl91bmxvY2soJmRtYXNvdW5kLmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotCi1zdGF0aWMgaXJxcmV0dXJuX3QKLXBtYWNfYXdhY3NfaW50cihpbnQgaXJxLCB2b2lkICpkZXZpZCkKLXsKLQlpbnQgY3RybDsKLQlpbnQgc3RhdHVzOwotCWludCByMTsKLQotCXNwaW5fbG9jaygmZG1hc291bmQubG9jayk7Ci0JY3RybCA9IGluX2xlMzIoJmF3YWNzLT5jb250cm9sKTsKLQlzdGF0dXMgPSBpbl9sZTMyKCZhd2Fjcy0+Y29kZWNfc3RhdCk7Ci0KLQlpZiAoY3RybCAmIE1BU0tfUE9SVENIRykgewotCQkvKiB0ZXN0ZWQgb24gU2NyZWFtZXIsIHNob3VsZCB3b3JrIG9uIG90aGVycyB0b28gKi8KLQkJaWYgKGF3YWNzX3JldmlzaW9uID09IEFXQUNTX1NDUkVBTUVSKSB7Ci0JCQlpZiAoKChzdGF0dXMgJiBNQVNLX0hEUENPTk4pID4+IDMpICYmIChoZHBfY29ubmVjdGVkID09IDApKSB7Ci0JCQkJaGRwX2Nvbm5lY3RlZCA9IDE7Ci0JCQkJCi0JCQkJcjEgPSBhd2Fjc19yZWdbMV0gfCBNQVNLX1NQS01VVEU7Ci0JCQkJYXdhY3NfcmVnWzFdID0gcjE7Ci0JCQkJYXdhY3Nfd3JpdGUocjEgfCBNQVNLX0FERFJfTVVURSk7Ci0JCQl9IGVsc2UgaWYgKCgoc3RhdHVzICYgTUFTS19IRFBDT05OKSA+PiAzID09IDApICYmIChoZHBfY29ubmVjdGVkID09IDEpKSB7Ci0JCQkJaGRwX2Nvbm5lY3RlZCA9IDA7Ci0JCQkJCi0JCQkJcjEgPSBhd2Fjc19yZWdbMV0gJiB+TUFTS19TUEtNVVRFOwotCQkJCWF3YWNzX3JlZ1sxXSA9IHIxOwotCQkJCWF3YWNzX3dyaXRlKHIxIHwgTUFTS19BRERSX01VVEUpOwotCQkJfQotCQl9Ci0JfQotCWlmIChjdHJsICYgTUFTS19DTlRMRVJSKSB7Ci0JCWludCBlcnIgPSAoaW5fbGUzMigmYXdhY3MtPmNvZGVjX3N0YXQpICYgTUFTS19FUlJDT0RFKSA+PiAxNjsKLQkJLyogQ0hFQ0s6IHdlIGp1c3Qgc3dhbGxvdyBidXJndW5keSBlcnJvcnMgYXQgdGhlIG1vbWVudC4uKi8KLQkJaWYgKGVyciAhPSAwICYmIGF3YWNzX3JldmlzaW9uICE9IEFXQUNTX0JVUkdVTkRZKQotCQkJcHJpbnRrKEtFUk5fRVJSICJkbWFzb3VuZF9wbWFjOiBlcnJvciAleFxuIiwgZXJyKTsKLQl9Ci0JLyogV3JpdGluZyAxcyB0byB0aGUgQ05UTEVSUiBhbmQgUE9SVENIRyBiaXRzIGNsZWFycyB0aGVtLi4uICovCi0Jb3V0X2xlMzIoJmF3YWNzLT5jb250cm9sLCBjdHJsKTsKLQlzcGluX3VubG9jaygmZG1hc291bmQubG9jayk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgdm9pZAotYXdhY3Nfd3JpdGUoaW50IHZhbCkKLXsKLQlpbnQgY291bnQgPSAzMDAgOwotCWlmIChhd2Fjc19yZXZpc2lvbiA+PSBBV0FDU19EQUNBIHx8ICFhd2FjcykKLQkJcmV0dXJuIDsKLQotCXdoaWxlICgoaW5fbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwpICYgTUFTS19ORVdFQ01EKSAmJiBjb3VudC0tKQotCQl1ZGVsYXkoMSkgOwkvKiB0aW1lb3V0IGlzID4gMiBzYW1wbGVzIGF0IGxvd2VzdCByYXRlICovCi0Jb3V0X2xlMzIoJmF3YWNzLT5jb2RlY19jdHJsLCB2YWwgfCAoYXdhY3Nfc3ViZnJhbWUgPDwgMjIpKTsKLQkodm9pZClpbl9sZTMyKCZhd2Fjcy0+Ynl0ZXN3YXApOwotfQotCi0vKiB0aGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBiZWVwIHRpbWVyIGV4cGlyZXMuLi4gaXQgd2lsbCBiZSBjYWxsZWQgZXZlbgotICAgaWYgdGhlIGJlZXAgaGFzIGJlZW4gb3ZlcmlkZGVuIGJ5IG90aGVyIHNvdW5kIG91dHB1dC4KLSovCi1zdGF0aWMgdm9pZCBhd2Fjc19ub3NvdW5kKHVuc2lnbmVkIGxvbmcgeHgpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQgPSA2MDAgOyAvKiA+IGZvdXIgc2FtcGxlcyBhdCBsb3dlc3QgcmF0ZSAqLwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRtYXNvdW5kLmxvY2ssIGZsYWdzKTsKLQlpZiAoYmVlcF9wbGF5aW5nKSB7Ci0JCXN0X2xlMTYoJmJlZXBfZGJkbWFfY21kLT5jb21tYW5kLCBEQkRNQV9TVE9QKTsKLQkJb3V0X2xlMzIoJmF3YWNzX3R4ZG1hLT5jb250cm9sLCAoUlVOfFBBVVNFfEZMVVNIfFdBS0UpIDw8IDE2KTsKLQkJd2hpbGUgKChpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKSAmIFJVTikgJiYgY291bnQtLSkKLQkJCXVkZWxheSgxKTsKLQkJaWYgKGF3YWNzKQotCQkJYXdhY3Nfc2V0dXBfZm9yX2JlZXAoLTEpOwotCQliZWVwX3BsYXlpbmcgPSAwOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci19Ci0KLS8qCi0gKiBXZSBnZW5lcmF0ZSB0aGUgYmVlcCB3aXRoIGEgc2luZ2xlIGRiZG1hIGNvbW1hbmQgdGhhdCBsb29wcyBhIGJ1ZmZlcgotICogZm9yZXZlciAtIHdpdGhvdXQgZ2VuZXJhdGluZyBpbnRlcnJ1cHRzLgotICoKLSAqIFNvLCB0byBzdG9wIGl0IHlvdSBoYXZlIHRvIHN0b3AgZG1hIG91dHB1dCBhcyBwZXIgYXdhY3Nfbm9zb3VuZC4KLSAqLwotc3RhdGljIGludCBhd2Fjc19iZWVwX2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsCi0JCXVuc2lnbmVkIGludCBjb2RlLCBpbnQgaHopCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgYmVlcF9zcGVlZCA9IDA7Ci0JaW50IHNyYXRlOwotCWludCBwZXJpb2QsIG5jeWNsZXMsIG5zYW1wbGVzOwotCWludCBpLCBqLCBmOwotCXNob3J0ICpwOwotCXN0YXRpYyBpbnQgYmVlcF9oel9jYWNoZTsKLQlzdGF0aWMgaW50IGJlZXBfbnNhbXBsZXNfY2FjaGU7Ci0Jc3RhdGljIGludCBiZWVwX3ZvbHVtZV9jYWNoZTsKLQotCWlmICh0eXBlICE9IEVWX1NORCkKLQkJcmV0dXJuIC0xOwotCXN3aXRjaCAoY29kZSkgewotCWNhc2UgU05EX0JFTEw6Ci0JCWlmIChoeikKLQkJCWh6ID0gMTAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBTTkRfVE9ORToKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC0xOwotCX0KLQotCWlmIChiZWVwX2J1ZiA9PSBOVUxMKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBxdWljay1oYWNrIGZpeCBmb3IgREFDQSwgQnVyZ3VuZHkgJiBUdW1ibGVyICovCi0KLQlpZiAoYXdhY3NfcmV2aXNpb24gPj0gQVdBQ1NfREFDQSl7Ci0JCXNyYXRlID0gNDQxMDAgOwotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCA4ICYmIGF3YWNzX2ZyZXFzW2ldID49IEJFRVBfU1JBVEU7ICsraSkKLQkJCWlmIChhd2Fjc19mcmVxc19va1tpXSkKLQkJCQliZWVwX3NwZWVkID0gaTsKLQkJc3JhdGUgPSBhd2Fjc19mcmVxc1tiZWVwX3NwZWVkXTsKLQl9Ci0KLQlpZiAoaHogPD0gc3JhdGUgLyBCRUVQX0JVRkxFTiB8fCBoeiA+IHNyYXRlIC8gMikgewotCQkvKiBjYW5jZWwgYmVlcCBjdXJyZW50bHkgcGxheWluZyAqLwotCQlhd2Fjc19ub3NvdW5kKDApOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hc291bmQubG9jaywgZmxhZ3MpOwotCWlmIChiZWVwX3BsYXlpbmcgfHwgd3JpdGVfc3EuYWN0aXZlIHx8IGJlZXBfYnVmID09IE5VTEwpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hc291bmQubG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLTE7CQkvKiB0b28gaGFyZCwgc29ycnkgOi0oICovCi0JfQotCWJlZXBfcGxheWluZyA9IDE7Ci0Jc3RfbGUxNigmYmVlcF9kYmRtYV9jbWQtPmNvbW1hbmQsIE9VVFBVVF9NT1JFICsgQlJfQUxXQVlTKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoaHogPT0gYmVlcF9oel9jYWNoZSAmJiBiZWVwX3ZvbCA9PSBiZWVwX3ZvbHVtZV9jYWNoZSkgewotCQluc2FtcGxlcyA9IGJlZXBfbnNhbXBsZXNfY2FjaGU7Ci0JfSBlbHNlIHsKLQkJcGVyaW9kID0gc3JhdGUgKiAyNTYgLyBoejsJLyogZml4ZWQgcG9pbnQgKi8KLQkJbmN5Y2xlcyA9IEJFRVBfQlVGTEVOICogMjU2IC8gcGVyaW9kOwotCQluc2FtcGxlcyA9IChwZXJpb2QgKiBuY3ljbGVzKSA+PiA4OwotCQlmID0gbmN5Y2xlcyAqIDY1NTM2IC8gbnNhbXBsZXM7Ci0JCWogPSAwOwotCQlwID0gYmVlcF9idWY7Ci0JCWZvciAoaSA9IDA7IGkgPCBuc2FtcGxlczsgKytpLCBwICs9IDIpIHsKLQkJCXBbMF0gPSBwWzFdID0gYmVlcF93Zm9ybVtqID4+IDhdICogYmVlcF92b2w7Ci0JCQlqID0gKGogKyBmKSAmIDB4ZmZmZjsKLQkJfQotCQliZWVwX2h6X2NhY2hlID0gaHo7Ci0JCWJlZXBfdm9sdW1lX2NhY2hlID0gYmVlcF92b2w7Ci0JCWJlZXBfbnNhbXBsZXNfY2FjaGUgPSBuc2FtcGxlczsKLQl9Ci0KLQlzdF9sZTE2KCZiZWVwX2RiZG1hX2NtZC0+cmVxX2NvdW50LCBuc2FtcGxlcyo0KTsKLQlzdF9sZTE2KCZiZWVwX2RiZG1hX2NtZC0+eGZlcl9zdGF0dXMsIDApOwotCXN0X2xlMzIoJmJlZXBfZGJkbWFfY21kLT5jbWRfZGVwLCB2aXJ0X3RvX2J1cyhiZWVwX2RiZG1hX2NtZCkpOwotCXN0X2xlMzIoJmJlZXBfZGJkbWFfY21kLT5waHlfYWRkciwgdmlydF90b19idXMoYmVlcF9idWYpKTsKLQlhd2Fjc19iZWVwX3N0YXRlID0gMTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0JaWYgKGJlZXBfcGxheWluZykgewkvKiBpLmUuIGhhdmVuJ3QgYmVlbiB0ZXJtaW5hdGVkIGFscmVhZHkgKi8KLQkJaW50IGNvdW50ID0gMzAwIDsKLQkJb3V0X2xlMzIoJmF3YWNzX3R4ZG1hLT5jb250cm9sLCAoUlVOfFdBS0V8RkxVU0h8UEFVU0UpIDw8IDE2KTsKLQkJd2hpbGUgKChpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKSAmIFJVTikgJiYgY291bnQtLSkKLQkJCXVkZWxheSgxKTsgLyogdGltZW91dCA+IDIgc2FtcGxlcyBhdCBsb3dlc3QgcmF0ZSovCi0JCWlmIChhd2FjcykKLQkJCWF3YWNzX3NldHVwX2Zvcl9iZWVwKGJlZXBfc3BlZWQpOwotCQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNtZHB0ciwgdmlydF90b19idXMoYmVlcF9kYmRtYV9jbWQpKTsKLQkJKHZvaWQpaW5fbGUzMigmYXdhY3NfdHhkbWEtPnN0YXR1cyk7Ci0JCW91dF9sZTMyKCZhd2Fjc190eGRtYS0+Y29udHJvbCwgUlVOIHwgKFJVTiA8PCAxNikpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogdXNlZCBpbiBpbml0IGFuZCBmb3Igd2FrZS11cCAqLwotCi1zdGF0aWMgdm9pZAotbG9hZF9hd2Fjcyh2b2lkKQotewotCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1swXSArIE1BU0tfQUREUjApOwotCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1sxXSArIE1BU0tfQUREUjEpOwotCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1syXSArIE1BU0tfQUREUjIpOwotCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1s0XSArIE1BU0tfQUREUjQpOwotCi0JaWYgKGF3YWNzX3JldmlzaW9uID09IEFXQUNTX1NDUkVBTUVSKSB7Ci0JCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1s1XSArIE1BU0tfQUREUjUpOwotCQltc2xlZXAoMTAwKTsKLQkJYXdhY3Nfd3JpdGUoYXdhY3NfcmVnWzZdICsgTUFTS19BRERSNik7Ci0JCW1zbGVlcCgyKTsKLQkJYXdhY3Nfd3JpdGUoYXdhY3NfcmVnWzFdICsgTUFTS19BRERSMSk7Ci0JCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1s3XSArIE1BU0tfQUREUjcpOwotCX0KLQlpZiAoYXdhY3MpIHsKLQkJaWYgKGh3X2Nhbl9ieXRlc3dhcCAmJiAoZG1hc291bmQuaGFyZC5mb3JtYXQgPT0gQUZNVF9TMTZfTEUpKQotCQkJb3V0X2xlMzIoJmF3YWNzLT5ieXRlc3dhcCwgQlNfVkFMKTsKLQkJZWxzZQotCQkJb3V0X2xlMzIoJmF3YWNzLT5ieXRlc3dhcCwgMCk7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1BNCi0vKgotICogU2F2ZSBzdGF0ZSB3aGVuIGdvaW5nIHRvIHNsZWVwLCByZXN0b3JlIGl0IGFmdGVyd2FyZHMuCi0gKi8KLS8qIEZJWE1FOiBzb3J0IG91dCBkaXNhYmxpbmcvcmUtZW5hYmxpbmcgb2YgcmVhZCBzdHVmZiBhcyB3ZWxsICovCi1zdGF0aWMgdm9pZCBhd2Fjc19zbGVlcF9ub3RpZnkoc3RydWN0IHBtdV9zbGVlcF9ub3RpZmllciAqc2VsZiwgaW50IHdoZW4pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXN3aXRjaCAod2hlbikgewotCWNhc2UgUEJPT0tfU0xFRVBfTk9XOgkJCi0JCUxPQ0soKTsKLQkJYXdhY3Nfc2xlZXBpbmcgPSAxOwotCQkvKiBUZWxsIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgd2UgYXJlIG5vdyBnb2luZyB0byBzbGVlcCAqLwotCQltYigpOwotCQlpZiAoYXdhY3NfcmV2aXNpb24gPT0gQVdBQ1NfU0NSRUFNRVIgfHwKLQkJICAgIGF3YWNzX3JldmlzaW9uID09IEFXQUNTX0FXQUNTKSB7Ci0JCQlhd2Fjc19yZWcxX3NhdmUgPSBhd2Fjc19yZWdbMV07Ci0JCQlhd2Fjc19yZWdbMV0gfD0gTUFTS19BTVVURSB8IE1BU0tfQ01VVEU7Ci0JCQlhd2Fjc193cml0ZShNQVNLX0FERFIxIHwgYXdhY3NfcmVnWzFdKTsKLQkJfQotCi0JCVBNYWNTaWxlbmNlKCk7Ci0JCS8qIHN0b3AgcnggLSBpZiBnb2luZyAtIGEgYml0IG9mIGEgZGFmdCB1c2VyLi4uIGJ1dCAqLwotCQlvdXRfbGUzMigmYXdhY3NfcnhkbWEtPmNvbnRyb2wsIChSVU58V0FLRXxGTFVTSCA8PCAxNikpOwotCQkvKiBkZW55IGludGVycnVwdHMgKi8KLQkJaWYgKGF3YWNzKQotCQkJZGlzYWJsZV9pcnEoYXdhY3NfaXJxKTsKLQkJZGlzYWJsZV9pcnEoYXdhY3NfdHhfaXJxKTsKLQkJZGlzYWJsZV9pcnEoYXdhY3NfcnhfaXJxKTsKLQkJLyogQ2hpcCBzcGVjaWZpYyBzbGVlcCBjb2RlICovCi0JCXN3aXRjaCAoYXdhY3NfcmV2aXNpb24pIHsKLQkJCWNhc2UgQVdBQ1NfVFVNQkxFUjoKLQkJCWNhc2UgQVdBQ1NfU05BUFBFUjoKLQkJCQl3cml0ZV9hdWRpb19ncGlvKGdwaW9faGVhZHBob25lX211dGUsIGdwaW9faGVhZHBob25lX211dGVfcG9sKTsKLQkJCQl3cml0ZV9hdWRpb19ncGlvKGdwaW9fYW1wX211dGUsIGdwaW9fYW1wX211dGVfcG9sKTsKLQkJCQl0YXNfZW50ZXJfc2xlZXAoKTsKLQkJCQl3cml0ZV9hdWRpb19ncGlvKGdwaW9fYXVkaW9fcmVzZXQsIGdwaW9fYXVkaW9fcmVzZXRfcG9sKTsKLQkJCQlicmVhayA7Ci0JCQljYXNlIEFXQUNTX0RBQ0E6Ci0JCQkJZGFjYV9lbnRlcl9zbGVlcCgpOwotCQkJCWJyZWFrIDsKLQkJCWNhc2UgQVdBQ1NfQlVSR1VORFk6Ci0JCQkJYnJlYWsgOwotCQkJY2FzZSBBV0FDU19TQ1JFQU1FUjoKLQkJCWNhc2UgQVdBQ1NfQVdBQ1M6Ci0JCQlkZWZhdWx0OgotCQkJCW91dF9sZTMyKCZhd2Fjcy0+Y29udHJvbCwgMHgxMSkgOwotCQkJCWJyZWFrIDsKLQkJfQotCQkvKiBEaXNhYmxlIHNvdW5kIGNsb2NrICovCi0JCXBtYWNfY2FsbF9mZWF0dXJlKFBNQUNfRlRSX1NPVU5EX0NISVBfRU5BQkxFLCBhd2Fjc19ub2RlLCAwLCAwKTsKLQkJLyogQWNjb3JkaW5nIHRvIERhcndpbiwgd2UgZG8gdGhhdCBhZnRlciB0dXJuaW5nIG9mZiB0aGUgc291bmQKLQkJICogY2hpcCBjbG9jay4gQWxsIHRoaXMgd2lsbCBoYXZlIHRvIGJlIGNsZWFuZWQgdXAgb25jZSB3ZSBwcm9wZXJseQotCQkgKiBwYXJzZSB0aGUgT0Ygc291bmQtb2JqZWN0cwotCQkgKi8KLQkJaWYgKChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMSIpIHx8Ci0JCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazMsMiIpKSAmJiBhd2FjcykgewotCQkJYXdhY3NfcmVnWzFdIHw9IE1BU0tfUEFST1VUMCB8IE1BU0tfUEFST1VUMTsKLQkJCWF3YWNzX3dyaXRlKE1BU0tfQUREUjEgfCBhd2Fjc19yZWdbMV0pOwotCQkJbXNsZWVwKDIwMCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBQQk9PS19XQUtFOgotCQkvKiBFbmFibGUgc291bmQgY2xvY2sgKi8KLQkJcG1hY19jYWxsX2ZlYXR1cmUoUE1BQ19GVFJfU09VTkRfQ0hJUF9FTkFCTEUsIGF3YWNzX25vZGUsIDAsIDEpOwotCQlpZiAoKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywxIikgfHwKLQkJICAgIG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMywyIikpICYmIGF3YWNzKSB7Ci0JCQltc2xlZXAoMTAwKTsKLQkJCWF3YWNzX3JlZ1sxXSAmPSB+KE1BU0tfUEFST1VUMCB8IE1BU0tfUEFST1VUMSk7Ci0JCQlhd2Fjc193cml0ZShNQVNLX0FERFIxIHwgYXdhY3NfcmVnWzFdKTsKLQkJCW1zbGVlcCgzMDApOwotCQl9IGVsc2UKLQkJCW1zbGVlcCgxMDAwKTsKLSAJCS8qIHJlc3RvcmUgc2V0dGluZ3MgKi8KLQkJc3dpdGNoIChhd2Fjc19yZXZpc2lvbikgewotCQkJY2FzZSBBV0FDU19UVU1CTEVSOgotCQkJY2FzZSBBV0FDU19TTkFQUEVSOgotCQkJCXdyaXRlX2F1ZGlvX2dwaW8oZ3Bpb19oZWFkcGhvbmVfbXV0ZSwgZ3Bpb19oZWFkcGhvbmVfbXV0ZV9wb2wpOwotCQkJCXdyaXRlX2F1ZGlvX2dwaW8oZ3Bpb19hbXBfbXV0ZSwgZ3Bpb19hbXBfbXV0ZV9wb2wpOwotCQkJCXdyaXRlX2F1ZGlvX2dwaW8oZ3Bpb19hdWRpb19yZXNldCwgZ3Bpb19hdWRpb19yZXNldF9wb2wpOwotCQkJCW1zbGVlcCgxMDApOwotCQkJCXdyaXRlX2F1ZGlvX2dwaW8oZ3Bpb19hdWRpb19yZXNldCwgIWdwaW9fYXVkaW9fcmVzZXRfcG9sKTsKLQkJCQltc2xlZXAoMTUwKTsKLQkJCQl0YXNfbGVhdmVfc2xlZXAoKTsgLyogU3R1YiBmb3Igbm93ICovCi0JCQkJaGVhZHBob25lX2ludHIoMCwgTlVMTCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFXQUNTX0RBQ0E6Ci0JCQkJbXNsZWVwKDEwKTsgLyogQ2hlY2sgdGhpcyAhISEgKi8KLQkJCQlkYWNhX2xlYXZlX3NsZWVwKCk7Ci0JCQkJYnJlYWsgOwkJLyogZG9udCBrbm93IGhvdyB5ZXQgKi8KLQkJCWNhc2UgQVdBQ1NfQlVSR1VORFk6Ci0JCQkJYnJlYWsgOwotCQkJY2FzZSBBV0FDU19TQ1JFQU1FUjoKLQkJCWNhc2UgQVdBQ1NfQVdBQ1M6Ci0JCQlkZWZhdWx0OgotCQkgCQlsb2FkX2F3YWNzKCkgOwotCQkJCWJyZWFrIDsKLQkJfQotCQkvKiBSZWNhbGlicmF0ZSBjaGlwICovCi0JCWlmIChhd2Fjc19yZXZpc2lvbiA9PSBBV0FDU19TQ1JFQU1FUiAmJiBhd2FjcykKLQkJCWF3YWNzX3JlY2FsaWJyYXRlKCk7Ci0JCS8qIE1ha2Ugc3VyZSBkbWEgaXMgc3RvcHBlZCAqLwotCQlQTWFjU2lsZW5jZSgpOwotCQlpZiAoYXdhY3MpCi0JCQllbmFibGVfaXJxKGF3YWNzX2lycSk7Ci0JCWVuYWJsZV9pcnEoYXdhY3NfdHhfaXJxKTsKLSAJCWVuYWJsZV9pcnEoYXdhY3NfcnhfaXJxKTsKLSAJCWlmIChhd2FjcykgewotIAkJCS8qIE9LLCBhbGxvdyBpbnRzIGJhY2sgYWdhaW4gKi8KLQkgCQlvdXRfbGUzMigmYXdhY3MtPmNvbnRyb2wsIE1BU0tfSUVQQwotIAkJCSAJfCAoYXdhY3NfcmF0ZV9pbmRleCA8PCA4KSB8IDB4MTEKLSAJCQkJIHwgKGF3YWNzX3JldmlzaW9uIDwgQVdBQ1NfREFDQSA/IE1BU0tfSUVFOiAwKSk7Ci0gCQl9Ci0gCQlpZiAobWFjaW9fYmFzZSAmJiBpc19wYm9va19nMykgewotCQkJLyogRklYTUU6IHNob3VsZCByZXN0b3JlIHRoZSBzZXR1cCB3ZSBoYWQuLi4qLwotCQkJb3V0XzgobWFjaW9fYmFzZSArIDB4MzcsIDMpOwotIAkJfSBlbHNlIGlmIChpc19wYm9va18zWDAwKSB7Ci0JCQlpbl84KGxhdGNoX2Jhc2UgKyAweDE5MCk7Ci0JCX0KLQkJLyogUmVtb3ZlIG11dGUgKi8KLQkJaWYgKGF3YWNzX3JldmlzaW9uID09IEFXQUNTX1NDUkVBTUVSIHx8Ci0JCSAgICBhd2Fjc19yZXZpc2lvbiA9PSBBV0FDU19BV0FDUykgewotCQkJYXdhY3NfcmVnWzFdID0gYXdhY3NfcmVnMV9zYXZlOwotCQkJYXdhY3Nfd3JpdGUoTUFTS19BRERSMSB8IGF3YWNzX3JlZ1sxXSk7Ci0JCX0KLSAJCWF3YWNzX3NsZWVwaW5nID0gMDsKLQkJLyogUmVzdW1lIHBlbmRpbmcgc291bmRzLiAqLwotCQkvKiB3ZSBkb24ndCB0cnkgdG8gcmVzdGFydCBpbnB1dC4uLiAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZG1hc291bmQubG9jaywgZmxhZ3MpOwotCQlfX1BNYWNQbGF5KCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYXNvdW5kLmxvY2ssIGZsYWdzKTsKLQkJVU5MT0NLKCk7Ci0JfQotfQotI2VuZGlmIC8qIENPTkZJR19QTSAqLwotCi0KLS8qIEFsbCB0aGUgYnVyZ3VuZHkgZnVuY3Rpb25zOiAqLwotCi0vKiBXYWl0cyBmb3IgYnVzeSBmbGFnIHRvIGNsZWFyICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWF3YWNzX2J1cmd1bmR5X2J1c3lfd2FpdCh2b2lkKQotewotCWludCBjb3VudCA9IDUwOyAvKiA+IDIgc2FtcGxlcyBhdCA0NGsxICovCi0Jd2hpbGUgKChpbl9sZTMyKCZhd2Fjcy0+Y29kZWNfY3RybCkgJiBNQVNLX05FV0VDTUQpICYmIGNvdW50LS0pCi0JCXVkZWxheSgxKSA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotYXdhY3NfYnVyZ3VuZHlfZXh0ZW5kX3dhaXQodm9pZCkKLXsKLQlpbnQgY291bnQgPSA1MCA7IC8qID4gMiBzYW1wbGVzIGF0IDQ0azEgKi8KLQl3aGlsZSAoKCEoaW5fbGUzMigmYXdhY3MtPmNvZGVjX3N0YXQpICYgTUFTS19FWFRFTkQpKSAmJiBjb3VudC0tKQotCQl1ZGVsYXkoMSkgOwotCWNvdW50ID0gNTA7Ci0Jd2hpbGUgKChpbl9sZTMyKCZhd2Fjcy0+Y29kZWNfc3RhdCkgJiBNQVNLX0VYVEVORCkgJiYgY291bnQtLSkKLQkJdWRlbGF5KDEpOwotfQotCi1zdGF0aWMgdm9pZAotYXdhY3NfYnVyZ3VuZHlfd2N3KHVuc2lnbmVkIGFkZHIsIHVuc2lnbmVkIHZhbCkKLXsKLQlvdXRfbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwsIGFkZHIgKyAweDIwMGMwMCArICh2YWwgJiAweGZmKSk7Ci0JYXdhY3NfYnVyZ3VuZHlfYnVzeV93YWl0KCk7Ci0Jb3V0X2xlMzIoJmF3YWNzLT5jb2RlY19jdHJsLCBhZGRyICsgMHgyMDBkMDAgKygodmFsPj44KSAmIDB4ZmYpKTsKLQlhd2Fjc19idXJndW5keV9idXN5X3dhaXQoKTsKLQlvdXRfbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwsIGFkZHIgKyAweDIwMGUwMCArKCh2YWw+PjE2KSAmIDB4ZmYpKTsKLQlhd2Fjc19idXJndW5keV9idXN5X3dhaXQoKTsKLQlvdXRfbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwsIGFkZHIgKyAweDIwMGYwMCArKCh2YWw+PjI0KSAmIDB4ZmYpKTsKLQlhd2Fjc19idXJndW5keV9idXN5X3dhaXQoKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkCi1hd2Fjc19idXJndW5keV9yY3codW5zaWduZWQgYWRkcikKLXsKLQl1bnNpZ25lZCB2YWwgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkvKiBzaG91bGQgaGF2ZSB0aW1lb3V0cyBoZXJlICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRtYXNvdW5kLmxvY2ssIGZsYWdzKTsKLQotCW91dF9sZTMyKCZhd2Fjcy0+Y29kZWNfY3RybCwgYWRkciArIDB4MTAwMDAwKTsKLQlhd2Fjc19idXJndW5keV9idXN5X3dhaXQoKTsKLQlhd2Fjc19idXJndW5keV9leHRlbmRfd2FpdCgpOwotCXZhbCArPSAoaW5fbGUzMigmYXdhY3MtPmNvZGVjX3N0YXQpID4+IDQpICYgMHhmZjsKLQotCW91dF9sZTMyKCZhd2Fjcy0+Y29kZWNfY3RybCwgYWRkciArIDB4MTAwMTAwKTsKLQlhd2Fjc19idXJndW5keV9idXN5X3dhaXQoKTsKLQlhd2Fjc19idXJndW5keV9leHRlbmRfd2FpdCgpOwotCXZhbCArPSAoKGluX2xlMzIoJmF3YWNzLT5jb2RlY19zdGF0KT4+NCkgJiAweGZmKSA8PDg7Ci0KLQlvdXRfbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwsIGFkZHIgKyAweDEwMDIwMCk7Ci0JYXdhY3NfYnVyZ3VuZHlfYnVzeV93YWl0KCk7Ci0JYXdhY3NfYnVyZ3VuZHlfZXh0ZW5kX3dhaXQoKTsKLQl2YWwgKz0gKChpbl9sZTMyKCZhd2Fjcy0+Y29kZWNfc3RhdCk+PjQpICYgMHhmZikgPDwxNjsKLQotCW91dF9sZTMyKCZhd2Fjcy0+Y29kZWNfY3RybCwgYWRkciArIDB4MTAwMzAwKTsKLQlhd2Fjc19idXJndW5keV9idXN5X3dhaXQoKTsKLQlhd2Fjc19idXJndW5keV9leHRlbmRfd2FpdCgpOwotCXZhbCArPSAoKGluX2xlMzIoJmF3YWNzLT5jb2RlY19zdGF0KT4+NCkgJiAweGZmKSA8PDI0OwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG1hc291bmQubG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotCi1zdGF0aWMgdm9pZAotYXdhY3NfYnVyZ3VuZHlfd2NiKHVuc2lnbmVkIGFkZHIsIHVuc2lnbmVkIHZhbCkKLXsKLQlvdXRfbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwsIGFkZHIgKyAweDMwMDAwMCArICh2YWwgJiAweGZmKSk7Ci0JYXdhY3NfYnVyZ3VuZHlfYnVzeV93YWl0KCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZAotYXdhY3NfYnVyZ3VuZHlfcmNiKHVuc2lnbmVkIGFkZHIpCi17Ci0JdW5zaWduZWQgdmFsID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogc2hvdWxkIGhhdmUgdGltZW91dHMgaGVyZSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0KLQlvdXRfbGUzMigmYXdhY3MtPmNvZGVjX2N0cmwsIGFkZHIgKyAweDEwMDAwMCk7Ci0JYXdhY3NfYnVyZ3VuZHlfYnVzeV93YWl0KCk7Ci0JYXdhY3NfYnVyZ3VuZHlfZXh0ZW5kX3dhaXQoKTsKLQl2YWwgKz0gKGluX2xlMzIoJmF3YWNzLT5jb2RlY19zdGF0KSA+PiA0KSAmIDB4ZmY7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFzb3VuZC5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgaW50Ci1hd2Fjc19idXJndW5keV9jaGVjayh2b2lkKQotewotCS8qIENoZWNrcyB0byBzZWUgdGhlIGNoaXAgaXMgYWxpdmUgYW5kIGtpY2tpbmcgKi8KLQlpbnQgZXJyb3IgPSBpbl9sZTMyKCZhd2Fjcy0+Y29kZWNfY3RybCkgJiBNQVNLX0VSUkNPREU7Ci0KLQlyZXR1cm4gZXJyb3IgPT0gMHhmMDAwMDsKLX0KLQotc3RhdGljIGludAotYXdhY3NfYnVyZ3VuZHlfaW5pdCh2b2lkKQotewotCWlmIChhd2Fjc19idXJndW5keV9jaGVjaygpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImRtYXNvdW5kX3BtYWM6IGJ1cmd1bmR5IG5vdCB3b3JraW5nIDotKFxuIik7Ci0JCXJldHVybiAxOwotCX0KLQotCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfT1VUUFVURU5BQkxFUywKLQkJCSAgIERFRl9CVVJHVU5EWV9PVVRQVVRFTkFCTEVTKTsKLQlhd2Fjc19idXJndW5keV93Y2IoTUFTS19BRERSX0JVUkdVTkRZX01PUkVfT1VUUFVURU5BQkxFUywKLQkJCSAgIERFRl9CVVJHVU5EWV9NT1JFX09VVFBVVEVOQUJMRVMpOwotCWF3YWNzX2J1cmd1bmR5X3djdyhNQVNLX0FERFJfQlVSR1VORFlfT1VUUFVUU0VMRUNUUywKLQkJCSAgIERFRl9CVVJHVU5EWV9PVVRQVVRTRUxFQ1RTKTsKLQotCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfSU5QU0VMMjEsCi0JCQkgICBERUZfQlVSR1VORFlfSU5QU0VMMjEpOwotCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfSU5QU0VMMywKLQkJCSAgIERFRl9CVVJHVU5EWV9JTlBTRUwzKTsKLQlhd2Fjc19idXJndW5keV93Y2IoTUFTS19BRERSX0JVUkdVTkRZX0dBSU5DRCwKLQkJCSAgIERFRl9CVVJHVU5EWV9HQUlOQ0QpOwotCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfR0FJTkxJTkUsCi0JCQkgICBERUZfQlVSR1VORFlfR0FJTkxJTkUpOwotCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfR0FJTk1JQywKLQkJCSAgIERFRl9CVVJHVU5EWV9HQUlOTUlDKTsKLQlhd2Fjc19idXJndW5keV93Y2IoTUFTS19BRERSX0JVUkdVTkRZX0dBSU5NT0RFTSwKLQkJCSAgIERFRl9CVVJHVU5EWV9HQUlOTU9ERU0pOwotCi0JYXdhY3NfYnVyZ3VuZHlfd2NiKE1BU0tfQUREUl9CVVJHVU5EWV9BVFRFTlNQRUFLRVIsCi0JCQkgICBERUZfQlVSR1VORFlfQVRURU5TUEVBS0VSKTsKLQlhd2Fjc19idXJndW5keV93Y2IoTUFTS19BRERSX0JVUkdVTkRZX0FUVEVOTElORU9VVCwKLQkJCSAgIERFRl9CVVJHVU5EWV9BVFRFTkxJTkVPVVQpOwotCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfQVRURU5IUCwKLQkJCSAgIERFRl9CVVJHVU5EWV9BVFRFTkhQKTsKLQotCWF3YWNzX2J1cmd1bmR5X3djdyhNQVNLX0FERFJfQlVSR1VORFlfTUFTVEVSX1ZPTFVNRSwKLQkJCSAgIERFRl9CVVJHVU5EWV9NQVNURVJfVk9MVU1FKTsKLQlhd2Fjc19idXJndW5keV93Y3coTUFTS19BRERSX0JVUkdVTkRZX1ZPTENELAotCQkJICAgREVGX0JVUkdVTkRZX1ZPTENEKTsKLQlhd2Fjc19idXJndW5keV93Y3coTUFTS19BRERSX0JVUkdVTkRZX1ZPTExJTkUsCi0JCQkgICBERUZfQlVSR1VORFlfVk9MTElORSk7Ci0JYXdhY3NfYnVyZ3VuZHlfd2N3KE1BU0tfQUREUl9CVVJHVU5EWV9WT0xNSUMsCi0JCQkgICBERUZfQlVSR1VORFlfVk9MTUlDKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWF3YWNzX2J1cmd1bmR5X3dyaXRlX3ZvbHVtZSh1bnNpZ25lZCBhZGRyZXNzLCBpbnQgdm9sdW1lKQotewotCWludCBoYXJkdm9sdW1lLGx2b2x1bWUscnZvbHVtZTsKLQotCWx2b2x1bWUgPSAodm9sdW1lICYgMHhmZikgPyAodm9sdW1lICYgMHhmZikgKyAxNTUgOiAwOwotCXJ2b2x1bWUgPSAoKHZvbHVtZSA+PjgpJjB4ZmYpID8gKCh2b2x1bWUgPj4gOCkmMHhmZiApICsgMTU1IDogMDsKLQotCWhhcmR2b2x1bWUgPSBsdm9sdW1lICsgKHJ2b2x1bWUgPDwgMTYpOwotCi0JYXdhY3NfYnVyZ3VuZHlfd2N3KGFkZHJlc3MsIGhhcmR2b2x1bWUpOwotfQotCi1zdGF0aWMgaW50Ci1hd2Fjc19idXJndW5keV9yZWFkX3ZvbHVtZSh1bnNpZ25lZCBhZGRyZXNzKQotewotCWludCBzb2Z0dm9sdW1lLHd2b2x1bWU7Ci0KLQl3dm9sdW1lID0gYXdhY3NfYnVyZ3VuZHlfcmN3KGFkZHJlc3MpOwotCi0Jc29mdHZvbHVtZSA9ICh3dm9sdW1lICYgMHhmZikgLSAxNTU7Ci0Jc29mdHZvbHVtZSArPSAoKCh3dm9sdW1lID4+IDE2KSAmIDB4ZmYpIC0gMTU1KTw8ODsKLQotCXJldHVybiBzb2Z0dm9sdW1lID4gMCA/IHNvZnR2b2x1bWUgOiAwOwotfQotCi1zdGF0aWMgaW50Ci1hd2Fjc19idXJndW5keV9yZWFkX212b2x1bWUodW5zaWduZWQgYWRkcmVzcykKLXsKLQlpbnQgbHZvbHVtZSxydm9sdW1lLHd2b2x1bWU7Ci0KLQl3dm9sdW1lID0gYXdhY3NfYnVyZ3VuZHlfcmN3KGFkZHJlc3MpOwotCi0Jd3ZvbHVtZSAmPSAweGZmZmY7Ci0KLQlydm9sdW1lID0gKHd2b2x1bWUgJiAweGZmKSAtIDE1NTsKLQlsdm9sdW1lID0gKCh3dm9sdW1lICYgMHhmZjAwKT4+OCkgLSAxNTU7Ci0KLQlyZXR1cm4gbHZvbHVtZSArIChydm9sdW1lIDw8IDgpOwotfQotCi1zdGF0aWMgdm9pZAotYXdhY3NfYnVyZ3VuZHlfd3JpdGVfbXZvbHVtZSh1bnNpZ25lZCBhZGRyZXNzLCBpbnQgdm9sdW1lKQotewotCWludCBsdm9sdW1lLHJ2b2x1bWUsaGFyZHZvbHVtZTsKLQotCWx2b2x1bWUgPSAodm9sdW1lICYweGZmKSA/ICh2b2x1bWUgJiAweGZmKSArIDE1NSA6MDsKLQlydm9sdW1lID0gKCh2b2x1bWUgPj44KSAmIDB4ZmYpID8gKHZvbHVtZSA+PiA4KSArIDE1NSA6MDsKLQotCWhhcmR2b2x1bWUgPSBsdm9sdW1lICsgKHJ2b2x1bWUgPDwgOCk7Ci0JaGFyZHZvbHVtZSArPSAoaGFyZHZvbHVtZSA8PCAxNik7Ci0KLQlhd2Fjc19idXJndW5keV93Y3coYWRkcmVzcywgaGFyZHZvbHVtZSk7Ci19Ci0KLS8qIEVuZCBidXJndW5keSBmdW5jdGlvbnMgKi8KLQotLyogU2V0IHVwIG91dHB1dCB2b2x1bWVzIG9uIG1hY2hpbmVzIHdpdGggdGhlICdwZXJjaC93aGlzcGVyJyBleHRlbnNpb24gY2FyZC4KLSAqIHRoaXMgaGFzIGFuIFNHUyBpMmMgY2hpcCAoNzQzMykgd2hpY2ggaXMgYWNjZXNzZWQgdXNpbmcgdGhlIGN1ZGEuCi0gKgotICogVE9ETzogc3BsaXQgdGhpcyBvdXQgYW5kIG1ha2UgdXNlIG9mIHRoZSBvdGhlciBwYXJ0cyBvZiB0aGUgU0dTIGNoaXAgdG8KLSAqIGRvIEJhc3MsIFRyZWJsZSBldGMuCi0gKi8KLQotc3RhdGljIHZvaWQKLWF3YWNzX2VuYWJsZV9hbXAoaW50IHNwa3Jfdm9sKQotewotI2lmZGVmIENPTkZJR19BREJfQ1VEQQotCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7Ci0KLQlpZiAoc3lzX2N0cmxlciAhPSBTWVNfQ1RSTEVSX0NVREEpCi0JCXJldHVybjsKLQotCS8qIHR1cm4gb24gaGVhZHBob25lcyAqLwotCWN1ZGFfcmVxdWVzdCgmcmVxLCBOVUxMLCA1LCBDVURBX1BBQ0tFVCwgQ1VEQV9HRVRfU0VUX0lJQywKLQkJICAgICAweDhhLCA0LCAwKTsKLQl3aGlsZSAoIXJlcS5jb21wbGV0ZSkgY3VkYV9wb2xsKCk7Ci0JY3VkYV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDUsIENVREFfUEFDS0VULCBDVURBX0dFVF9TRVRfSUlDLAotCQkgICAgIDB4OGEsIDYsIDApOwotCXdoaWxlICghcmVxLmNvbXBsZXRlKSBjdWRhX3BvbGwoKTsKLQotCS8qIHR1cm4gb24gc3BlYWtlciAqLwotCWN1ZGFfcmVxdWVzdCgmcmVxLCBOVUxMLCA1LCBDVURBX1BBQ0tFVCwgQ1VEQV9HRVRfU0VUX0lJQywKLQkJICAgICAweDhhLCAzLCAoMTAwIC0gKHNwa3Jfdm9sICYgMHhmZikpICogMzIgLyAxMDApOwotCXdoaWxlICghcmVxLmNvbXBsZXRlKSBjdWRhX3BvbGwoKTsKLQljdWRhX3JlcXVlc3QoJnJlcSwgTlVMTCwgNSwgQ1VEQV9QQUNLRVQsIENVREFfR0VUX1NFVF9JSUMsCi0JCSAgICAgMHg4YSwgNSwgKDEwMCAtICgoc3Brcl92b2wgPj4gOCkgJiAweGZmKSkgKiAzMiAvIDEwMCk7Ci0Jd2hpbGUgKCFyZXEuY29tcGxldGUpIGN1ZGFfcG9sbCgpOwotCi0JY3VkYV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDUsIENVREFfUEFDS0VULAotCQkgICAgIENVREFfR0VUX1NFVF9JSUMsIDB4OGEsIDEsIDB4MjkpOwotCXdoaWxlICghcmVxLmNvbXBsZXRlKSBjdWRhX3BvbGwoKTsKLSNlbmRpZiAvKiBDT05GSUdfQURCX0NVREEgKi8KLX0KLQotCi0vKioqIE1pZCBsZXZlbCBzdHVmZiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQotLyoKLSAqIC9kZXYvbWl4ZXIgYWJzdHJhY3Rpb24KLSAqLwotCi1zdGF0aWMgdm9pZCBkb19saW5lX2xldihpbnQgZGF0YSkKLXsKLQkJbGluZV9sZXYgPSBkYXRhIDsKLQkJYXdhY3NfcmVnWzBdICY9IH5NQVNLX01VWF9BVURJTjsKLQkJaWYgKChkYXRhICYgMHhmZikgPj0gNTApCi0JCQlhd2Fjc19yZWdbMF0gfD0gTUFTS19NVVhfQVVESU47Ci0JCWF3YWNzX3dyaXRlKE1BU0tfQUREUjAgfCBhd2Fjc19yZWdbMF0pOwotfQotCi1zdGF0aWMgdm9pZCBkb19pcF9nYWluKGludCBkYXRhKQotewotCWlwX2dhaW4gPSBkYXRhIDsKLQlkYXRhICY9IDB4ZmY7Ci0JYXdhY3NfcmVnWzBdICY9IH5NQVNLX0dBSU5MSU5FOwotCWlmIChhd2Fjc19yZXZpc2lvbiA9PSBBV0FDU19TQ1JFQU1FUikgewotCQlhd2Fjc19yZWdbNl0gJj0gfk1BU0tfTUlDX0JPT1NUIDsKLQkJaWYgKGRhdGEgPj0gMzMpIHsKLQkJCWF3YWNzX3JlZ1swXSB8PSBNQVNLX0dBSU5MSU5FOwotCQkJaWYoIGRhdGEgPj0gNjYpCi0JCQkJYXdhY3NfcmVnWzZdIHw9IE1BU0tfTUlDX0JPT1NUIDsKLQkJfQotCQlhd2Fjc193cml0ZShNQVNLX0FERFI2IHwgYXdhY3NfcmVnWzZdKSA7Ci0JfSBlbHNlIHsKLQkJaWYgKGRhdGEgPj0gNTApCi0JCQlhd2Fjc19yZWdbMF0gfD0gTUFTS19HQUlOTElORTsKLQl9Ci0JYXdhY3Nfd3JpdGUoTUFTS19BRERSMCB8IGF3YWNzX3JlZ1swXSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGRvX21pY19sZXYoaW50IGRhdGEpCi17Ci0JbWljX2xldiA9IGRhdGEgOwotCWRhdGEgJj0gMHhmZjsKLQlhd2Fjc19yZWdbMF0gJj0gfk1BU0tfTVVYX01JQzsKLQlpZiAoZGF0YSA+PSA1MCkKLQkJYXdhY3NfcmVnWzBdIHw9IE1BU0tfTVVYX01JQzsKLQlhd2Fjc193cml0ZShNQVNLX0FERFIwIHwgYXdhY3NfcmVnWzBdKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fY2RfbGV2KGludCBkYXRhKQotewotCWNkX2xldiA9IGRhdGEgOwotCWF3YWNzX3JlZ1swXSAmPSB+TUFTS19NVVhfQ0Q7Ci0JaWYgKChkYXRhICYgMHhmZikgPj0gNTApCi0JCWF3YWNzX3JlZ1swXSB8PSBNQVNLX01VWF9DRDsKLQlhd2Fjc193cml0ZShNQVNLX0FERFIwIHwgYXdhY3NfcmVnWzBdKTsKLX0KLQotc3RhdGljIHZvaWQgZG9fcmVjX2xldihpbnQgZGF0YSkKLXsKLQlpbnQgbGVmdCwgcmlnaHQgOwotCXJlY19sZXYgPSBkYXRhIDsKLQkvKiBuZWVkIHRvIGZ1ZGdlIHRoaXMgdG8gdXNlIHRoZSB2b2x1bWUgc2V0dGVyIHJvdXRpbmUgKi8KLQlsZWZ0ID0gMTAwIC0gKGRhdGEgJiAweGZmKSA7IGlmKCBsZWZ0IDwgMCApIGxlZnQgPSAwIDsKLQlyaWdodCA9IDEwMCAtICgoZGF0YSA+PiA4KSAmIDB4ZmYpIDsgaWYoIHJpZ2h0IDwgMCApIHJpZ2h0ID0gMCA7Ci0JbGVmdCB8PSAocmlnaHQgPDwgOCApOwotCWxlZnQgPSBhd2Fjc192b2x1bWVfc2V0dGVyKGxlZnQsIDAsIDAsIDQpOwotfQotCi1zdGF0aWMgdm9pZCBkb19wYXNzdGhydV92b2woaW50IGRhdGEpCi17Ci0JcGFzc3RocnVfdm9sID0gZGF0YSA7Ci0JYXdhY3NfcmVnWzFdICY9IH5NQVNLX0xPT1BUSFJVOwotCWlmIChhd2Fjc19yZXZpc2lvbiA9PSBBV0FDU19TQ1JFQU1FUikgewotCQlpZiggZGF0YSApIHsgLyogc3dpdGNoIGl0IG9uIGZvciBub24temVybyAqLwotCQkJYXdhY3NfcmVnWzFdIHw9IE1BU0tfTE9PUFRIUlU7Ci0JCQlhd2Fjc193cml0ZShNQVNLX0FERFIxIHwgYXdhY3NfcmVnWzFdKTsKLQkJfQotCQlkYXRhID0gYXdhY3Nfdm9sdW1lX3NldHRlcihkYXRhLCA1LCAwLCA2KSA7Ci0JfSBlbHNlIHsKLQkJaWYgKChkYXRhICYgMHhmZikgPj0gNTApCi0JCQlhd2Fjc19yZWdbMV0gfD0gTUFTS19MT09QVEhSVTsKLQkJYXdhY3Nfd3JpdGUoTUFTS19BRERSMSB8IGF3YWNzX3JlZ1sxXSk7Ci0JCWRhdGEgPSAoYXdhY3NfcmVnWzFdICYgTUFTS19MT09QVEhSVSk/IDEwMDogMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgYXdhY3NfbWl4ZXJfaW9jdGwodV9pbnQgY21kLCB1X2xvbmcgYXJnKQotewotCWludCBkYXRhOwotCWludCByYzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX0NBUFM6Ci0JCS8qIHNheSB3ZSB3aWxsIGFsbG93IG11bHRpcGxlIGlucHV0cz8gIHByb2IuIHdyb25nCi0JCQlzbyBJJ20gc3dpdGNoaW5nIGl0IHRvIHNpbmdsZSAqLwotCQlyZXR1cm4gSU9DVExfT1VUKGFyZywgMSk7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX0RFVk1BU0s6Ci0JCWRhdGEgID0gU09VTkRfTUFTS19WT0xVTUUgfCBTT1VORF9NQVNLX1NQRUFLRVIKLQkJCXwgU09VTkRfTUFTS19MSU5FIHwgU09VTkRfTUFTS19NSUMgfCBTT1VORF9NQVNLX0NECi0JCQl8IFNPVU5EX01BU0tfSUdBSU4gfCBTT1VORF9NQVNLX1JFQ0xFVgotCQkJfCBTT1VORF9NQVNLX0FMVFBDTQotCQkJfCBTT1VORF9NQVNLX01PTklUT1I7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9SRUNNQVNLOgotCQlkYXRhID0gU09VTkRfTUFTS19MSU5FIHwgU09VTkRfTUFTS19NSUMgfCBTT1VORF9NQVNLX0NEOwotCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDOgotCQlkYXRhID0gMDsKLQkJaWYgKGF3YWNzX3JlZ1swXSAmIE1BU0tfTVVYX0FVRElOKQotCQkJZGF0YSB8PSBTT1VORF9NQVNLX0xJTkU7Ci0JCWlmIChhd2Fjc19yZWdbMF0gJiBNQVNLX01VWF9NSUMpCi0JCQlkYXRhIHw9IFNPVU5EX01BU0tfTUlDOwotCQlpZiAoYXdhY3NfcmVnWzBdICYgTUFTS19NVVhfQ0QpCi0JCQlkYXRhIHw9IFNPVU5EX01BU0tfQ0Q7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDOgotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQlkYXRhICY9IChTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX01JQyB8IFNPVU5EX01BU0tfQ0QpOwotCQlhd2Fjc19yZWdbMF0gJj0gfihNQVNLX01VWF9DRCB8IE1BU0tfTVVYX01JQwotCQkJCSAgfCBNQVNLX01VWF9BVURJTik7Ci0JCWlmIChkYXRhICYgU09VTkRfTUFTS19MSU5FKQotCQkJYXdhY3NfcmVnWzBdIHw9IE1BU0tfTVVYX0FVRElOOwotCQlpZiAoZGF0YSAmIFNPVU5EX01BU0tfTUlDKQotCQkJYXdhY3NfcmVnWzBdIHw9IE1BU0tfTVVYX01JQzsKLQkJaWYgKGRhdGEgJiBTT1VORF9NQVNLX0NEKQotCQkJYXdhY3NfcmVnWzBdIHw9IE1BU0tfTVVYX0NEOwotCQlhd2Fjc193cml0ZShhd2Fjc19yZWdbMF0gfCBNQVNLX0FERFIwKTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1NURVJFT0RFVlM6Ci0JCWRhdGEgPSBTT1VORF9NQVNLX1ZPTFVNRSB8IFNPVU5EX01BU0tfU1BFQUtFUnwgU09VTkRfTUFTS19SRUNMRVYgIDsKLQkJaWYgKGF3YWNzX3JldmlzaW9uID09IEFXQUNTX1NDUkVBTUVSKQotCQkJZGF0YSB8PSBTT1VORF9NQVNLX01PTklUT1IgOwotCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRToKLQkJSU9DVExfSU4oYXJnLCBkYXRhKTsKLQkJbGluZV92b2wgPSBkYXRhIDsKLQkJYXdhY3Nfdm9sdW1lX3NldHRlcihkYXRhLCAyLCAwLCA2KTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRToKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBsaW5lX3ZvbCk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfU1BFQUtFUjoKLQkJSU9DVExfSU4oYXJnLCBkYXRhKTsKLQkJc3BrX3ZvbCA9IGRhdGEgOwotCQlpZiAoaGFzX3BlcmNoKQotCQkJYXdhY3NfZW5hYmxlX2FtcChkYXRhKTsKLQkJZWxzZQotCQkJKHZvaWQpYXdhY3Nfdm9sdW1lX3NldHRlcihkYXRhLCA0LCBNQVNLX0NNVVRFLCA2KTsKLQkJLyogZmFsbCB0aG91Z2ggKi8KLQljYXNlIFNPVU5EX01JWEVSX1JFQURfU1BFQUtFUjoKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBzcGtfdm9sKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9BTFRQQ006CS8qIHJlYWxseSBiZWxsIHZvbHVtZSAqLwotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQliZWVwX3ZvbCA9IGRhdGEgJiAweGZmOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFNPVU5EX01JWEVSX1JFQURfQUxUUENNOgotCQlyYyA9IElPQ1RMX09VVChhcmcsIGJlZXBfdm9sKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9MSU5FOgotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQlkb19saW5lX2xldihkYXRhKSA7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9MSU5FOgotCQlyYyA9IElPQ1RMX09VVChhcmcsIGxpbmVfbGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9JR0FJTjoKLQkJSU9DVExfSU4oYXJnLCBkYXRhKTsKLQkJZG9faXBfZ2FpbihkYXRhKSA7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9JR0FJTjoKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBpcF9nYWluKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9NSUM6Ci0JCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCWRvX21pY19sZXYoZGF0YSk7Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9NSUM6Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgbWljX2xldik7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfQ0Q6Ci0JCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCWRvX2NkX2xldihkYXRhKTsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX0NEOgotCQlyYyA9IElPQ1RMX09VVChhcmcsIGNkX2xldik7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfUkVDTEVWOgotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQlkb19yZWNfbGV2KGRhdGEpIDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1JFQ0xFVjoKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCByZWNfbGV2KTsKLQkJYnJlYWs7Ci0JY2FzZSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9NT05JVE9SKToKLQkJSU9DVExfSU4oYXJnLCBkYXRhKTsKLQkJZG9fcGFzc3RocnVfdm9sKGRhdGEpIDsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01PTklUT1IpOgotCQlyYyA9IElPQ1RMX09VVChhcmcsIHBhc3N0aHJ1X3ZvbCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0JCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBhd2Fjc19taXhlcl9pbml0KHZvaWQpCi17Ci0JYXdhY3Nfdm9sdW1lX3NldHRlcihsaW5lX3ZvbCwgMiwgMCwgNik7Ci0JaWYgKGhhc19wZXJjaCkKLQkJYXdhY3NfZW5hYmxlX2FtcChzcGtfdm9sKTsKLQllbHNlCi0JCSh2b2lkKWF3YWNzX3ZvbHVtZV9zZXR0ZXIoc3BrX3ZvbCwgNCwgTUFTS19DTVVURSwgNik7Ci0JZG9fbGluZV9sZXYobGluZV9sZXYpIDsKLQlkb19pcF9nYWluKGlwX2dhaW4pIDsKLQlkb19taWNfbGV2KG1pY19sZXYpIDsKLQlkb19jZF9sZXYoY2RfbGV2KSA7Ci0JZG9fcmVjX2xldihyZWNfbGV2KSA7Ci0JZG9fcGFzc3RocnVfdm9sKHBhc3N0aHJ1X3ZvbCkgOwotfQotCi1zdGF0aWMgaW50IGJ1cmd1bmR5X21peGVyX2lvY3RsKHVfaW50IGNtZCwgdV9sb25nIGFyZykKLXsKLQlpbnQgZGF0YTsKLQlpbnQgcmM7Ci0KLQkvKiBXZSBhcmUsIHdlIGFyZSwgd2UgYXJlLi4uIEJ1cmd1bmR5IG9yIGJldHRlciAqLwotCXN3aXRjaChjbWQpIHsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfREVWTUFTSzoKLQkJZGF0YSA9IFNPVU5EX01BU0tfVk9MVU1FIHwgU09VTkRfTUFTS19DRCB8Ci0JCQlTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX01JQyB8Ci0JCQlTT1VORF9NQVNLX1NQRUFLRVIgfCBTT1VORF9NQVNLX0FMVFBDTTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1JFQ01BU0s6Ci0JCWRhdGEgPSBTT1VORF9NQVNLX0xJTkUgfCBTT1VORF9NQVNLX01JQwotCQkJfCBTT1VORF9NQVNLX0NEOwotCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDOgotCQlkYXRhID0gMDsKLQkJaWYgKGF3YWNzX3JlZ1swXSAmIE1BU0tfTVVYX0FVRElOKQotCQkJZGF0YSB8PSBTT1VORF9NQVNLX0xJTkU7Ci0JCWlmIChhd2Fjc19yZWdbMF0gJiBNQVNLX01VWF9NSUMpCi0JCQlkYXRhIHw9IFNPVU5EX01BU0tfTUlDOwotCQlpZiAoYXdhY3NfcmVnWzBdICYgTUFTS19NVVhfQ0QpCi0JCQlkYXRhIHw9IFNPVU5EX01BU0tfQ0Q7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfUkVDU1JDOgotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQlkYXRhICY9IChTT1VORF9NQVNLX0xJTkUKLQkJCSB8IFNPVU5EX01BU0tfTUlDIHwgU09VTkRfTUFTS19DRCk7Ci0JCWF3YWNzX3JlZ1swXSAmPSB+KE1BU0tfTVVYX0NEIHwgTUFTS19NVVhfTUlDCi0JCQkJICB8IE1BU0tfTVVYX0FVRElOKTsKLQkJaWYgKGRhdGEgJiBTT1VORF9NQVNLX0xJTkUpCi0JCQlhd2Fjc19yZWdbMF0gfD0gTUFTS19NVVhfQVVESU47Ci0JCWlmIChkYXRhICYgU09VTkRfTUFTS19NSUMpCi0JCQlhd2Fjc19yZWdbMF0gfD0gTUFTS19NVVhfTUlDOwotCQlpZiAoZGF0YSAmIFNPVU5EX01BU0tfQ0QpCi0JCQlhd2Fjc19yZWdbMF0gfD0gTUFTS19NVVhfQ0Q7Ci0JCWF3YWNzX3dyaXRlKGF3YWNzX3JlZ1swXSB8IE1BU0tfQUREUjApOwotCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfU1RFUkVPREVWUzoKLQkJZGF0YSA9IFNPVU5EX01BU0tfVk9MVU1FIHwgU09VTkRfTUFTS19TUEVBS0VSCi0JCQl8IFNPVU5EX01BU0tfUkVDTEVWIHwgU09VTkRfTUFTS19DRAotCQkJfCBTT1VORF9NQVNLX0xJTkU7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9DQVBTOgotCQlyYyA9IElPQ1RMX09VVChhcmcsIDApOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRToKLQkJSU9DVExfSU4oYXJnLCBkYXRhKTsKLQkJYXdhY3NfYnVyZ3VuZHlfd3JpdGVfbXZvbHVtZShNQVNLX0FERFJfQlVSR1VORFlfTUFTVEVSX1ZPTFVNRSwgZGF0YSk7Ci0JCQkJLyogRmFsbCB0aHJvdWdoICovCi0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1ZPTFVNRToKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBhd2Fjc19idXJndW5keV9yZWFkX212b2x1bWUoTUFTS19BRERSX0JVUkdVTkRZX01BU1RFUl9WT0xVTUUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSOgotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQlpZiAoIShkYXRhICYgMHhmZikpIHsKLQkJCS8qIE11dGUgdGhlIGxlZnQgc3BlYWtlciAqLwotCQkJYXdhY3NfYnVyZ3VuZHlfd2NiKE1BU0tfQUREUl9CVVJHVU5EWV9NT1JFX09VVFBVVEVOQUJMRVMsCi0JCQkJCSAgIGF3YWNzX2J1cmd1bmR5X3JjYihNQVNLX0FERFJfQlVSR1VORFlfTU9SRV9PVVRQVVRFTkFCTEVTKSAmIH4weDIpOwotCQl9IGVsc2UgewotCQkJLyogVW5tdXRlIHRoZSBsZWZ0IHNwZWFrZXIgKi8KLQkJCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfTU9SRV9PVVRQVVRFTkFCTEVTLAotCQkJCQkgICBhd2Fjc19idXJndW5keV9yY2IoTUFTS19BRERSX0JVUkdVTkRZX01PUkVfT1VUUFVURU5BQkxFUykgfCAweDIpOwotCQl9Ci0JCWlmICghKGRhdGEgJiAweGZmMDApKSB7Ci0JCQkvKiBNdXRlIHRoZSByaWdodCBzcGVha2VyICovCi0JCQlhd2Fjc19idXJndW5keV93Y2IoTUFTS19BRERSX0JVUkdVTkRZX01PUkVfT1VUUFVURU5BQkxFUywKLQkJCQkJICAgYXdhY3NfYnVyZ3VuZHlfcmNiKE1BU0tfQUREUl9CVVJHVU5EWV9NT1JFX09VVFBVVEVOQUJMRVMpICYgfjB4NCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBVbm11dGUgdGhlIHJpZ2h0IHNwZWFrZXIgKi8KLQkJCWF3YWNzX2J1cmd1bmR5X3djYihNQVNLX0FERFJfQlVSR1VORFlfTU9SRV9PVVRQVVRFTkFCTEVTLAotCQkJCQkgICBhd2Fjc19idXJndW5keV9yY2IoTUFTS19BRERSX0JVUkdVTkRZX01PUkVfT1VUUFVURU5BQkxFUykgfCAweDQpOwotCQl9Ci0KLQkJZGF0YSA9ICgoKGRhdGEmMHhmZikqMTYpLzEwMCA+IDB4ZiA/IDB4ZiA6Ci0JCQkoKChkYXRhJjB4ZmYpKjE2KS8xMDApKSArCi0JCQkoKCgoZGF0YT4+OCkqMTYpLzEwMCA+IDB4ZiA/IDB4ZiA6Ci0JCQkgICgoKChkYXRhPj44KSoxNikvMTAwKSkpPDw0KTsKLQotCQlhd2Fjc19idXJndW5keV93Y2IoTUFTS19BRERSX0JVUkdVTkRZX0FUVEVOU1BFQUtFUiwgfmRhdGEpOwotCQkJCS8qIEZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9TUEVBS0VSOgotCQlkYXRhID0gYXdhY3NfYnVyZ3VuZHlfcmNiKE1BU0tfQUREUl9CVVJHVU5EWV9BVFRFTlNQRUFLRVIpOwotCQlkYXRhID0gKCgoZGF0YSAmIDB4ZikqMTAwKS8xNikgKyAoKCgoZGF0YT4+NCkqMTAwKS8xNik8PDgpOwotCQlyYyA9IElPQ1RMX09VVChhcmcsICh+ZGF0YSkgJiAweDAwMDBmZmZmKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9BTFRQQ006CS8qIHJlYWxseSBiZWxsIHZvbHVtZSAqLwotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQliZWVwX3ZvbCA9IGRhdGEgJiAweGZmOwotCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9BTFRQQ006Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgYmVlcF92b2wpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX0xJTkU6Ci0JCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCWF3YWNzX2J1cmd1bmR5X3dyaXRlX3ZvbHVtZShNQVNLX0FERFJfQlVSR1VORFlfVk9MTElORSwgZGF0YSk7Ci0KLQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFNPVU5EX01JWEVSX1JFQURfTElORToKLQkJZGF0YSA9IGF3YWNzX2J1cmd1bmR5X3JlYWRfdm9sdW1lKE1BU0tfQUREUl9CVVJHVU5EWV9WT0xMSU5FKTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9NSUM6Ci0JCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCQkJLyogTWljIGlzIG1vbm8gZGV2aWNlICovCi0JCWRhdGEgPSAoZGF0YSA8PCA4KSArIChkYXRhIDw8IDI0KTsKLQkJYXdhY3NfYnVyZ3VuZHlfd3JpdGVfdm9sdW1lKE1BU0tfQUREUl9CVVJHVU5EWV9WT0xNSUMsIGRhdGEpOwotCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9NSUM6Ci0JCWRhdGEgPSBhd2Fjc19idXJndW5keV9yZWFkX3ZvbHVtZShNQVNLX0FERFJfQlVSR1VORFlfVk9MTUlDKTsKLQkJZGF0YSA8PD0gMjQ7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfQ0Q6Ci0JCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCWF3YWNzX2J1cmd1bmR5X3dyaXRlX3ZvbHVtZShNQVNLX0FERFJfQlVSR1VORFlfVk9MQ0QsIGRhdGEpOwotCQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9DRDoKLQkJZGF0YSA9IGF3YWNzX2J1cmd1bmR5X3JlYWRfdm9sdW1lKE1BU0tfQUREUl9CVVJHVU5EWV9WT0xDRCk7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfV1JJVEVfUkVDTEVWOgotCQlJT0NUTF9JTihhcmcsIGRhdGEpOwotCQlkYXRhID0gYXdhY3Nfdm9sdW1lX3NldHRlcihkYXRhLCAwLCAwLCA0KTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1JFQ0xFVjoKLQkJZGF0YSA9IGF3YWNzX2dldF92b2x1bWUoYXdhY3NfcmVnWzBdLCA0KTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9PVVRNQVNLOgotCWNhc2UgU09VTkRfTUlYRVJfT1VUU1JDOgotCWRlZmF1bHQ6Ci0JCXJjID0gLUVJTlZBTDsKLQl9Ci0JCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGRhY2FfbWl4ZXJfaW9jdGwodV9pbnQgY21kLCB1X2xvbmcgYXJnKQotewotCWludCBkYXRhOwotCWludCByYzsKLQotCS8qIEFuZCB0aGUgREFDQSdzIG5vIGdlbml1cyBlaXRoZXIhICovCi0KLQlzd2l0Y2goY21kKSB7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX0RFVk1BU0s6Ci0JCWRhdGEgPSBTT1VORF9NQVNLX1ZPTFVNRTsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1JFQ01BU0s6Ci0JCWRhdGEgPSAwOwotCQlyYyA9IElPQ1RMX09VVChhcmcsIGRhdGEpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1JFQURfUkVDU1JDOgotCQlkYXRhID0gMDsKLQkJcmMgPSBJT0NUTF9PVVQoYXJnLCBkYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9XUklURV9SRUNTUkM6Ci0JCUlPQ1RMX0lOKGFyZywgZGF0YSk7Ci0JCWRhdGEgPTA7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9TVEVSRU9ERVZTOgotCQlkYXRhID0gU09VTkRfTUFTS19WT0xVTUU7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfUkVBRF9DQVBTOgotCQlyYyA9IElPQ1RMX09VVChhcmcsIDApOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRToKLQkJSU9DVExfSU4oYXJnLCBkYXRhKTsKLQkJZGFjYV9zZXRfdm9sdW1lKGRhdGEsIGRhdGEpOwotCQkvKiBGYWxsIHRocm91Z2ggKi8KLQljYXNlIFNPVU5EX01JWEVSX1JFQURfVk9MVU1FOgotCQlkYWNhX2dldF92b2x1bWUoJiBkYXRhLCAmZGF0YSk7Ci0JCXJjID0gSU9DVExfT1VUKGFyZywgZGF0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfT1VUTUFTSzoKLQljYXNlIFNPVU5EX01JWEVSX09VVFNSQzoKLQlkZWZhdWx0OgotCQlyYyA9IC1FSU5WQUw7Ci0JfQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBQTWFjTWl4ZXJJb2N0bCh1X2ludCBjbWQsIHVfbG9uZyBhcmcpCi17Ci0JaW50IHJjOwotCQotCS8qIERpZmZlcmVudCBJT0NUTFMgZm9yIGJ1cmd1bmR5IGFuZCwgZXZlbnR1YWxseSwgREFDQSAmIFR1bWJsZXIgKi8KLQotCVRSWV9MT0NLKCk7Ci0JCi0Jc3dpdGNoIChhd2Fjc19yZXZpc2lvbil7Ci0JCWNhc2UgQVdBQ1NfQlVSR1VORFk6Ci0JCQlyYyA9IGJ1cmd1bmR5X21peGVyX2lvY3RsKGNtZCwgYXJnKTsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19EQUNBOgotCQkJcmMgPSBkYWNhX21peGVyX2lvY3RsKGNtZCwgYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEFXQUNTX1RVTUJMRVI6Ci0JCWNhc2UgQVdBQ1NfU05BUFBFUjoKLQkJCXJjID0gdGFzX21peGVyX2lvY3RsKGNtZCwgYXJnKTsKLQkJCWJyZWFrIDsKLQkJZGVmYXVsdDogLyogOy0pKSAqLwotCQkJcmMgPSBhd2Fjc19taXhlcl9pb2N0bChjbWQsIGFyZyk7Ci0JfQotCi0JVU5MT0NLKCk7Ci0JCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBQTWFjTWl4ZXJJbml0KHZvaWQpCi17Ci0Jc3dpdGNoIChhd2Fjc19yZXZpc2lvbikgewotCQljYXNlIEFXQUNTX1RVTUJMRVI6Ci0JCSAgcHJpbnRrKCJBRS1Jbml0IHR1bWJsZXIgbWl4ZXJcbiIpOwotCQkgIGJyZWFrIDsKLQkJY2FzZSBBV0FDU19TTkFQUEVSOgotCQkgIHByaW50aygiQUUtSW5pdCBzbmFwcGVyIG1peGVyXG4iKTsKLQkJICBicmVhayA7Ci0JCWNhc2UgQVdBQ1NfREFDQToKLQkJY2FzZSBBV0FDU19CVVJHVU5EWToKLQkJCWJyZWFrIDsJLyogZG9uJ3Qga25vdyB5ZXQgKi8KLQkJY2FzZSBBV0FDU19BV0FDUzoKLQkJY2FzZSBBV0FDU19TQ1JFQU1FUjoKLQkJZGVmYXVsdDoKLQkJCWF3YWNzX21peGVyX2luaXQoKSA7Ci0JCQlicmVhayA7Ci0JfQotfQotCi0vKiBXcml0ZS9SZWFkIHNxIHNldHVwIGZ1bmN0aW9uczoKLSAgIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGVub3VnaCAob3IgYW55KSBkYmRtYSBjbWQgYnVmZmVycyBmb3IgdGhlCi0gICB1c2VyJ3MgZnJhZ21lbnQgc2V0dGluZ3MuICBJZiBub3QsIGFsbG9jYXRlIHNvbWUuIElmIHRoaXMgZmFpbHMgd2Ugd2lsbAotICAgcG9pbnQgYXQgdGhlIGJlZXAgYnVmZmVyIC0gYXMgYW4gZW1lcmdlbmN5IHByb3Zpc2lvbiAtIHRvIHN0b3AgZG1hIHRyb21waW5nCi0gICBvbiBzb21lIHJhbmRvbSBiaXQgb2YgbWVtb3J5IChpZiBzb21lb25lIGxldHMgaXQgZ28gYW55d2F5KS4KLSAgIFRoZSBjb21tYW5kIGJ1ZmZlcnMgYXJlIHRoZW4gc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBmcmFnbWVudCBidWZmZXJzCi0gICAoYWxsb2NhdGVkIGVsc2V3aGVyZSkuICBXZSBuZWVkIG4rMSBjb21tYW5kcyB0aGUgbGFzdCBvZiB3aGljaCBob2xkcwotICAgYSBOT1AgKyBsb29wIHRvIHN0YXJ0LgotKi8KLQotc3RhdGljIGludCBQTWFjV3JpdGVTcVNldHVwKHZvaWQpCi17Ci0JaW50IGksIGNvdW50ID0gNjAwIDsKLQl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICpjcDsKLQotCUxPQ0soKTsKLQkKLQkvKiBzdG9wIHRoZSBjb250cm9sbGVyIGZyb20gZG9pbmcgYW55IG91dHB1dCAtIGlmIGl0IGlzbid0IGFscmVhZHkuCi0JICAgaXQgX3Nob3VsZF8gYmUgYmVmb3JlIHRoaXMgaXMgY2FsbGVkIGFueXdheSAqLwotCi0Jb3V0X2xlMzIoJmF3YWNzX3R4ZG1hLT5jb250cm9sLCAoUlVOfFBBVVNFfEZMVVNIfFdBS0UpIDw8IDE2KTsKLQl3aGlsZSAoKGluX2xlMzIoJmF3YWNzX3R4ZG1hLT5zdGF0dXMpICYgUlVOKSAmJiBjb3VudC0tKQotCQl1ZGVsYXkoMSk7Ci0jaWZkZWYgREVCVUdfRE1BU09VTkQKLWlmIChjb3VudCA8PSAwKQotCXByaW50aygiZG1hc291bmRfcG1hYzogd3JpdGUgc3Egc2V0dXA6IHRpbWVvdXQgd2FpdGluZyBmb3IgZG1hIHRvIHN0b3BcbiIpOwotI2VuZGlmCi0KLQlpZiAoKHdyaXRlX3NxLm1heF9jb3VudCArIDEpID4gbnVtYmVyX29mX3R4X2NtZF9idWZmZXJzKSB7Ci0JCWtmcmVlKGF3YWNzX3R4X2NtZF9zcGFjZSk7Ci0JCW51bWJlcl9vZl90eF9jbWRfYnVmZmVycyA9IDA7Ci0KLQkJLyogd2UgbmVlZCBuYnVmcyArIDEgKGZvciB0aGUgbG9vcCkgYW5kIHdlIHNob3VsZCByZXF1ZXN0ICsgMQotCQkgICBhZ2FpbiBiZWNhdXNlIHRoZSBEQkRNQV9BTElHTiBtaWdodCBwdWxsIHRoZSBzdGFydCB1cCBieSB1cAotCQkgICB0byBzaXplb2Yoc3RydWN0IGRiZG1hX2NtZCkgLSA0LgotCQkqLwotCi0JCWF3YWNzX3R4X2NtZF9zcGFjZSA9IGttYWxsb2MKLQkJCSgod3JpdGVfc3EubWF4X2NvdW50ICsgMSArIDEpICogc2l6ZW9mKHN0cnVjdCBkYmRtYV9jbWQpLAotCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoYXdhY3NfdHhfY21kX3NwYWNlID09IE5VTEwpIHsKLQkJCS8qIGRvbid0IGxlYXZlIGl0IGRhbmdsaW5nIC0gbmFzdHkgYnV0IGJldHRlciB0aGFuIGEKLQkJCSAgIHJhbmRvbSBhZGRyZXNzICovCi0JCQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNtZHB0ciwgdmlydF90b19idXMoYmVlcF9kYmRtYV9jbWQpKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgImRtYXNvdW5kX3BtYWM6IGNhbid0IGFsbG9jYXRlIGRiZG1hIGNtZCBidWZmZXJzIgotCQkJICAgIiwgZHJpdmVyIGRpc2FibGVkXG4iKTsKLQkJCVVOTE9DSygpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJYXdhY3NfdHhfY21kcyA9ICh2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICopCi0JCQlEQkRNQV9BTElHTihhd2Fjc190eF9jbWRfc3BhY2UpOwotCQludW1iZXJfb2ZfdHhfY21kX2J1ZmZlcnMgPSB3cml0ZV9zcS5tYXhfY291bnQgKyAxOwotCX0KLQotCWNwID0gYXdhY3NfdHhfY21kczsKLQltZW1zZXQoKHZvaWQgKiljcCwgMCwgKHdyaXRlX3NxLm1heF9jb3VudCsxKSAqIHNpemVvZihzdHJ1Y3QgZGJkbWFfY21kKSk7Ci0JZm9yIChpID0gMDsgaSA8IHdyaXRlX3NxLm1heF9jb3VudDsgKytpLCArK2NwKSB7Ci0JCXN0X2xlMzIoJmNwLT5waHlfYWRkciwgdmlydF90b19idXMod3JpdGVfc3EuYnVmZmVyc1tpXSkpOwotCX0KLQlzdF9sZTE2KCZjcC0+Y29tbWFuZCwgREJETUFfTk9QICsgQlJfQUxXQVlTKTsKLQlzdF9sZTMyKCZjcC0+Y21kX2RlcCwgdmlydF90b19idXMoYXdhY3NfdHhfY21kcykpOwotCS8qIHBvaW50IHRoZSBjb250cm9sbGVyIGF0IHRoZSBjb21tYW5kIHN0YWNrIC0gcmVhZHkgdG8gZ28gKi8KLQlvdXRfbGUzMigmYXdhY3NfdHhkbWEtPmNtZHB0ciwgdmlydF90b19idXMoYXdhY3NfdHhfY21kcykpOwotCVVOTE9DSygpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IFBNYWNSZWFkU3FTZXR1cCh2b2lkKQotewotCWludCBpLCBjb3VudCA9IDYwMDsKLQl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICpjcDsKLQotCUxPQ0soKTsKLQkKLQkvKiBzdG9wIHRoZSBjb250cm9sbGVyIGZyb20gZG9pbmcgYW55IGlucHV0IC0gaWYgaXQgaXNuJ3QgYWxyZWFkeS4KLQkgICBpdCBfc2hvdWxkXyBiZSBiZWZvcmUgdGhpcyBpcyBjYWxsZWQgYW55d2F5ICovCi0JCi0Jb3V0X2xlMzIoJmF3YWNzX3J4ZG1hLT5jb250cm9sLCAoUlVOfFBBVVNFfEZMVVNIfFdBS0UpIDw8IDE2KTsKLQl3aGlsZSAoKGluX2xlMzIoJmF3YWNzX3J4ZG1hLT5zdGF0dXMpICYgUlVOKSAmJiBjb3VudC0tKQotCQl1ZGVsYXkoMSk7Ci0jaWZkZWYgREVCVUdfRE1BU09VTkQKLWlmIChjb3VudCA8PSAwKQotCXByaW50aygiZG1hc291bmRfcG1hYzogcmVhZCBzcSBzZXR1cDogdGltZW91dCB3YWl0aW5nIGZvciBkbWEgdG8gc3RvcFxuIik7Ci0jZW5kaWYKLQotCWlmICgocmVhZF9zcS5tYXhfY291bnQrMSkgPiBudW1iZXJfb2ZfcnhfY21kX2J1ZmZlcnMgKSB7Ci0JCWtmcmVlKGF3YWNzX3J4X2NtZF9zcGFjZSk7Ci0JCW51bWJlcl9vZl9yeF9jbWRfYnVmZmVycyA9IDA7Ci0KLQkJLyogd2UgbmVlZCBuYnVmcyArIDEgKGZvciB0aGUgbG9vcCkgYW5kIHdlIHNob3VsZCByZXF1ZXN0ICsgMSBhZ2FpbgotCQkgICBiZWNhdXNlIHRoZSBEQkRNQV9BTElHTiBtaWdodCBwdWxsIHRoZSBzdGFydCB1cCBieSB1cCB0bwotCQkgICBzaXplb2Yoc3RydWN0IGRiZG1hX2NtZCkgLSA0IChhc3N1bWluZyBrbWFsbG9jIGFsaWducyAzMiBiaXRzKS4KLQkJKi8KLQotCQlhd2Fjc19yeF9jbWRfc3BhY2UgPSBrbWFsbG9jCi0JCQkoKHJlYWRfc3EubWF4X2NvdW50ICsgMSArIDEpICogc2l6ZW9mKHN0cnVjdCBkYmRtYV9jbWQpLAotCQkJIEdGUF9LRVJORUwpOwotCQlpZiAoYXdhY3NfcnhfY21kX3NwYWNlID09IE5VTEwpIHsKLQkJCS8qIGRvbid0IGxlYXZlIGl0IGRhbmdsaW5nIC0gbmFzdHkgYnV0IGJldHRlciB0aGFuIGEKLQkJCSAgIHJhbmRvbSBhZGRyZXNzICovCi0JCQlvdXRfbGUzMigmYXdhY3NfcnhkbWEtPmNtZHB0ciwgdmlydF90b19idXMoYmVlcF9kYmRtYV9jbWQpKTsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgImRtYXNvdW5kX3BtYWM6IGNhbid0IGFsbG9jYXRlIGRiZG1hIGNtZCBidWZmZXJzIgotCQkJICAgIiwgZHJpdmVyIGRpc2FibGVkXG4iKTsKLQkJCVVOTE9DSygpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KLQkJYXdhY3NfcnhfY21kcyA9ICh2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICopCi0JCQlEQkRNQV9BTElHTihhd2Fjc19yeF9jbWRfc3BhY2UpOwotCQludW1iZXJfb2ZfcnhfY21kX2J1ZmZlcnMgPSByZWFkX3NxLm1heF9jb3VudCArIDEgOwotCX0KLQljcCA9IGF3YWNzX3J4X2NtZHM7Ci0JbWVtc2V0KCh2b2lkICopY3AsIDAsIChyZWFkX3NxLm1heF9jb3VudCsxKSAqIHNpemVvZihzdHJ1Y3QgZGJkbWFfY21kKSk7Ci0KLQkvKiBTZXQgZG1hIGJ1ZmZlcnMgdXAgaW4gYSBsb29wICovCi0JZm9yIChpID0gMDsgaSA8IHJlYWRfc3EubWF4X2NvdW50OyBpKyssY3ArKykgewotCQlzdF9sZTMyKCZjcC0+cGh5X2FkZHIsIHZpcnRfdG9fYnVzKHJlYWRfc3EuYnVmZmVyc1tpXSkpOwotCQlzdF9sZTE2KCZjcC0+Y29tbWFuZCwgSU5QVVRfTU9SRSArIElOVFJfQUxXQVlTKTsKLQkJc3RfbGUxNigmY3AtPnJlcV9jb3VudCwgcmVhZF9zcS5ibG9ja19zaXplKTsKLQkJc3RfbGUxNigmY3AtPnhmZXJfc3RhdHVzLCAwKTsKLQl9Ci0KLQkvKiBUaGUgbmV4dCB0d28gbGluZXMgbWFrZSB0aGUgdGhpbmcgbG9vcCBhcm91bmQuCi0JKi8KLQlzdF9sZTE2KCZjcC0+Y29tbWFuZCwgREJETUFfTk9QICsgQlJfQUxXQVlTKTsKLQlzdF9sZTMyKCZjcC0+Y21kX2RlcCwgdmlydF90b19idXMoYXdhY3NfcnhfY21kcykpOwotCS8qIHBvaW50IHRoZSBjb250cm9sbGVyIGF0IHRoZSBjb21tYW5kIHN0YWNrIC0gcmVhZHkgdG8gZ28gKi8KLQlvdXRfbGUzMigmYXdhY3NfcnhkbWEtPmNtZHB0ciwgdmlydF90b19idXMoYXdhY3NfcnhfY21kcykpOwotCi0JVU5MT0NLKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRPRE86IHRoaXMgbmVlZHMgd29yayB0byBndWFyYW50ZWUgdGhhdCB3aGVuIGl0IHJldHVybnMgRE1BIGhhcyBzdG9wcGVkCi0gICBidXQgaW4gYSBtb3JlIGVsZWdhbnQgd2F5IHRoYW4gaXMgZG9uZSBoZXJlLi4uLgotKi8KLQotc3RhdGljIHZvaWQgUE1hY0Fib3J0UmVhZCh2b2lkKQotewotCWludCBpOwotCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9jbWQgKmNwOwotCi0JTE9DSygpOwotCS8qIGdpdmUgaXQgYSBjaGFuY2UgdG8gdXBkYXRlIHRoZSBvdXRwdXQgYW5kIHByb3ZpZGUgdGhlIElSUQotCSAgIHRoYXQgaXMgZXhwZWN0ZWQuCi0JKi8KLQotCW91dF9sZTMyKCZhd2Fjc19yeGRtYS0+Y29udHJvbCwgKChGTFVTSCkgPDwgMTYpICsgRkxVU0ggKTsKLQotCWNwID0gYXdhY3NfcnhfY21kczsKLQlmb3IgKGkgPSAwOyBpIDwgcmVhZF9zcS5tYXhfY291bnQ7IGkrKyxjcCsrKQotCQlzdF9sZTE2KCZjcC0+Y29tbWFuZCwgREJETUFfU1RPUCk7Ci0JLyoKLQkgKiBXZSBzaG91bGQgcHJvYmFibHkgd2FpdCBmb3IgdGhlIHRoaW5nIHRvIHN0b3AgYmVmb3JlIHdlCi0JICogcmVsZWFzZSB0aGUgbWVtb3J5LgotCSAqLwotCi0JbXNsZWVwKDEwMCkgOyAvKiBnaXZlIGl0IGEgKHNtYWxsKSBjaGFuY2UgdG8gYWN0ICovCi0KLQkvKiBhcHBseSB0aGUgc2xlZGdlaGFtbWVyIGFwcHJvYWNoIC0ganVzdCBzdG9wIGl0IG5vdyAqLwotCi0Jb3V0X2xlMzIoJmF3YWNzX3J4ZG1hLT5jb250cm9sLCAoUlVOfFBBVVNFfEZMVVNIfFdBS0UpIDw8IDE2KTsKLQlVTkxPQ0soKTsKLX0KLQotZXh0ZXJuIGNoYXIgKmdldF9hZm10X3N0cmluZyhpbnQpOwotc3RhdGljIGludCBQTWFjU3RhdGVJbmZvKGNoYXIgKmIsIHNpemVfdCBzcCkKLXsKLQlpbnQgaSwgbGVuID0gMDsKLQlsZW4gPSBzcHJpbnRmKGIsIkhXIHJhdGVzOiAiKTsKLQlzd2l0Y2ggKGF3YWNzX3JldmlzaW9uKXsKLQkJY2FzZSBBV0FDU19EQUNBOgotCQljYXNlIEFXQUNTX0JVUkdVTkRZOgotCQkJbGVuICs9IHNwcmludGYoYiwiNDQxMDAgIikgOwotCQkJYnJlYWsgOwotCQljYXNlIEFXQUNTX1RVTUJMRVI6Ci0JCWNhc2UgQVdBQ1NfU05BUFBFUjoKLQkJCWZvciAoaT0wOyBpPDE7IGkrKyl7Ci0JCQkJaWYgKHRhc19mcmVxc19va1tpXSkKLQkJCQkJbGVuICs9IHNwcmludGYoYitsZW4sIiVkICIsIHRhc19mcmVxc1tpXSkgOwotCQkJfQotCQkJYnJlYWsgOwotCQljYXNlIEFXQUNTX0FXQUNTOgotCQljYXNlIEFXQUNTX1NDUkVBTUVSOgotCQlkZWZhdWx0OgotCQkJZm9yIChpPTA7IGk8ODsgaSsrKXsKLQkJCQlpZiAoYXdhY3NfZnJlcXNfb2tbaV0pCi0JCQkJCWxlbiArPSBzcHJpbnRmKGIrbGVuLCIlZCAiLCBhd2Fjc19mcmVxc1tpXSkgOwotCQkJfQotCQkJYnJlYWsgOwotCX0KLQlsZW4gKz0gc3ByaW50ZihiK2xlbiwicy9zZWNcbiIpIDsKLQlpZiAobGVuIDwgc3ApIHsKLQkJbGVuICs9IHNwcmludGYoYitsZW4sIkhXIEFGTVRTOiAiKTsKLQkJaSA9IEFGTVRfVTE2X0JFIDsKLQkJd2hpbGUgKGkpIHsKLQkJCWlmIChpICYgZG1hc291bmQubWFjaC5oYXJkd2FyZV9hZm10cykKLQkJCQlsZW4gKz0gc3ByaW50ZihiK2xlbiwiJXMgIiwKLQkJCQkJZ2V0X2FmbXRfc3RyaW5nKGkgJiBkbWFzb3VuZC5tYWNoLmhhcmR3YXJlX2FmbXRzKSk7Ci0JCQlpID4+PSAxIDsKLQkJfQotCQlsZW4gKz0gc3ByaW50ZihiK2xlbiwiXG4iKSA7Ci0JfQotCXJldHVybiBsZW4gOwotfQotCi0vKioqIE1hY2hpbmUgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBTRVRUSU5HUyBkZWZfaGFyZCA9IHsKLQkuZm9ybWF0CT0gQUZNVF9TMTZfQkUsCi0JLnN0ZXJlbwk9IDEsCi0JLnNpemUJPSAxNiwKLQkuc3BlZWQJPSA0NDEwMAotfSA7Ci0KLXN0YXRpYyBTRVRUSU5HUyBkZWZfc29mdCA9IHsKLQkuZm9ybWF0CT0gQUZNVF9TMTZfQkUsCi0JLnN0ZXJlbwk9IDEsCi0JLnNpemUJPSAxNiwKLQkuc3BlZWQJPSA0NDEwMAotfSA7Ci0KLXN0YXRpYyBNQUNISU5FIG1hY2hQTWFjID0gewotCS5uYW1lCQk9IGF3YWNzX25hbWUsCi0JLm5hbWUyCQk9ICJQb3dlck1hYyBCdWlsdC1pbiBTb3VuZCIsCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5kbWFfYWxsb2MJPSBQTWFjQWxsb2MsCi0JLmRtYV9mcmVlCT0gUE1hY0ZyZWUsCi0JLmlycWluaXQJPSBQTWFjSXJxSW5pdCwKLSNpZmRlZiBNT0RVTEUKLQkuaXJxY2xlYW51cAk9IFBNYWNJcnFDbGVhbnVwLAotI2VuZGlmIC8qIE1PRFVMRSAqLwotCS5pbml0CQk9IFBNYWNJbml0LAotCS5zaWxlbmNlCT0gUE1hY1NpbGVuY2UsCi0JLnNldEZvcm1hdAk9IFBNYWNTZXRGb3JtYXQsCi0JLnNldFZvbHVtZQk9IFBNYWNTZXRWb2x1bWUsCi0JLnBsYXkJCT0gUE1hY1BsYXksCi0JLnJlY29yZAkJPSBOVUxMLAkJLyogZGVmYXVsdCB0byBubyByZWNvcmQgKi8KLQkubWl4ZXJfaW5pdAk9IFBNYWNNaXhlckluaXQsCi0JLm1peGVyX2lvY3RsCT0gUE1hY01peGVySW9jdGwsCi0JLndyaXRlX3NxX3NldHVwCT0gUE1hY1dyaXRlU3FTZXR1cCwKLQkucmVhZF9zcV9zZXR1cAk9IFBNYWNSZWFkU3FTZXR1cCwKLQkuc3RhdGVfaW5mbwk9IFBNYWNTdGF0ZUluZm8sCi0JLmFib3J0X3JlYWQJPSBQTWFjQWJvcnRSZWFkLAotCS5taW5fZHNwX3NwZWVkCT0gNzM1MCwKLQkubWF4X2RzcF9zcGVlZAk9IDQ0MTAwLAotCS52ZXJzaW9uCT0gKChETUFTT1VORF9BV0FDU19SRVZJU0lPTjw8OCkgKyBETUFTT1VORF9BV0FDU19FRElUSU9OKQotfTsKLQotCi0vKioqIENvbmZpZyAmIFNldHVwICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIENoZWNrIGZvciBwbWFjIG1vZGVscyB0aGF0IHdlIGNhcmUgYWJvdXQgaW4gdGVybXMgb2Ygc3BlY2lhbCBhY3Rpb25zLgotKi8KLQotdm9pZCBfX2luaXQKLXNldF9tb2RlbCh2b2lkKQotewotCS8qIHBvcnRhYmxlcy9sYXAtdG9wcyAqLwotCi0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiQUFQTCwzNDAwLzI0MDAiKSB8fAotCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIkFBUEwsMzUwMCIpKQl7Ci0JCWlzX3Bib29rXzNYMDAgPSAxIDsKLQl9Ci0JaWYgKG1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJCb29rMSwxIikgIHx8IC8qIGxvbWJhcmQgKi8KLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLFBvd2VyQm9vazE5OTgiKSl7IC8qIHdhbGxzdHJlZXQgKi8KLQkJaXNfcGJvb2tfZzMgPSAxIDsKLQkJcmV0dXJuIDsKLQl9Ci19Ci0KLS8qIEdldCB0aGUgT0Ygbm9kZSB0aGF0IHRlbGxzIHVzIGFib3V0IHRoZSByZWdpc3RlcnMsIGludGVycnVwdHMgZXRjLiB0byB1c2UKLSAgIGZvciBzb3VuZCBJTy4KLQotICAgT24gbW9zdCBtYWNoaW5lcyB0aGUgc291bmQgSU8gT0Ygbm9kZSBpcyB0aGUgJ2RhdmJ1cycgbm9kZS4gIE9uIG5ld2VyIHBtYWNzCi0gICB3aXRoIERBQ0EgKCYgVHVtYmxlcikgdGhlIG5vZGUgdG8gdXNlIGlzIGkycy1hLiAgT24gbXVjaCBvbGRlciBtYWNoaW5lcyBpLmUuCi0gICBiZWZvcmUgOTUwMCB0aGVyZSBpcyBubyBkYXZidXMgbm9kZSBhbmQgd2UgaGF2ZSB0byB1c2UgdGhlICdhd2FjcycgcHJvcGVydHkuCi0KLSAgSW4gdGhlIGxhdHRlciBjYXNlIHdlIHNpZ25hbCB0aGlzIGJ5IHNldHRpbmcgdGhlIGNvZGVjIHZhbHVlIC0gc28gdGhhdCB0aGUKLSAgY29kZSB0aGF0IGxvb2tzIGZvciBjaGlwIHByb3BlcnRpZXMga25vd3MgaG93IHRvIGdvIGFib3V0IGl0LgotKi8KLQotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSogX19pbml0Ci1nZXRfc25kX2lvX25vZGUodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCi0JLyogc2V0IHVwIGF3YWNzX25vZGUgZm9yIGVhcmx5IE9GIHdoaWNoIGRvZXNuJ3QgaGF2ZSBhIGZ1bGwgc2V0IG9mCi0JICogcHJvcGVydGllcyBvbiBkYXZidXMKLQkgKi8KLQlhd2Fjc19ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImF3YWNzIik7Ci0JaWYgKGF3YWNzX25vZGUpCi0JCWF3YWNzX3JldmlzaW9uID0gQVdBQ1NfQVdBQ1M7Ci0KLQkvKiBwb3dlcm1hYyBtb2RlbHMgYWZ0ZXIgOTUwMCAob3RoZXIgdGhhbiB0aG9zZSB3aGljaCB1c2UgREFDQSBvcgotCSAqIFR1bWJsZXIpIGhhdmUgYSBub2RlIGNhbGxlZCAiZGF2YnVzIi4KLQkgKi8KLQlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJkYXZidXMiKTsKLQkvKgotCSAqIGlmIHdlIGRpZG4ndCBmaW5kIGEgZGF2YnVzIGRldmljZSwgdHJ5ICdpMnMtYScgc2luY2UKLQkgKiB0aGlzIHNlZW1zIHRvIGJlIHdoYXQgaUJvb2tzICgmIFR1bWJsZXIpIGhhdmUuCi0JICovCi0JaWYgKG5wID09IE5VTEwpIHsKLQkJaTJzX25vZGUgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAiaTJzLWEiKTsKLQkJbnAgPSBvZl9ub2RlX2dldChpMnNfbm9kZSk7Ci0JfQotCi0JLyogaWYgd2UgZGlkbid0IGZpbmQgdGhpcyAtIHBlcmhhcHMgd2UgYXJlIG9uIGFuIGVhcmx5IG1vZGVsCi0JICogd2hpY2ggX29ubHlfIGhhcyBhbiAnYXdhY3MnIG5vZGUKLQkqLwotCWlmIChucCA9PSBOVUxMICYmIGF3YWNzX25vZGUpCi0JCW5wID0gb2Zfbm9kZV9nZXQoYXdhY3Nfbm9kZSk7Ci0KLQkvKiBpZiB3ZSBmYWlsZWQgYWxsIHRoZXNlIHJldHVybiBudWxsIC0gdGhpcyB3aWxsIGNhdXNlIHRoZQotCSAqIGRyaXZlciB0byBnaXZlIHVwLi4uCi0JKi8KLQlyZXR1cm4gbnAgOwotfQotCi0vKiBHZXQgdGhlIE9GIG5vZGUgdGhhdCBjb250YWlucyB0aGUgaW5mbyBhYm91dCB0aGUgc291bmQgY2hpcCwgaW5wdXRzIHMtcmF0ZXMKLSAgIGV0Yy4KLSAgIFRoaXMgbm9kZSBkb2VzIG5vdCBleGlzdCAob3IgY29udGFpbnMgbXVjaCByZWR1Y2VkIGluZm8pIG9uIGVhcmxpZXIgbWFjaGluZXMKLSAgIHdlIGhhdmUgdG8gZGVkdWNlIHRoZSBpbmZvIG90aGVyIHdheXMgZm9yIHRoZXNlLgotKi8KLQotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSogX19pbml0Ci1nZXRfc25kX2luZm9fbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmlvKQotewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaW5mbzsKLQotCWZvcl9lYWNoX25vZGVfYnlfbmFtZShpbmZvLCAic291bmQiKQotCQlpZiAoaW5mby0+cGFyZW50ID09IGlvKQotCQkJYnJlYWs7Ci0JcmV0dXJuIGluZm87Ci19Ci0KLS8qIEZpbmQgb3V0IHdoYXQgdHlwZSBvZiBjb2RlYyB3ZSBoYXZlLgotKi8KLQotc3RhdGljIGludCBfX2luaXQKLWdldF9jb2RlY190eXBlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqaW5mbykKLXsKLQkvKiBhbHJlYWR5IHNldCBpZiBwcmUtZGF2YnVzIG1vZGVsIGFuZCBpbmZvIHdpbGwgYmUgTlVMTCAqLwotCWludCBjb2RlYyA9IGF3YWNzX3JldmlzaW9uIDsKLQotCWlmIChpbmZvKSB7Ci0JCS8qIG11c3QgZG8gYXdhY3MgZmlyc3QgdG8gYWxsb3cgc2NyZWFtZXIgdG8gb3ZlcmlkZSBpdCAqLwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mbywgImF3YWNzIikpCi0JCQljb2RlYyA9IEFXQUNTX0FXQUNTIDsKLQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGluZm8sICJzY3JlYW1lciIpKQotCQkJY29kZWMgPSBBV0FDU19TQ1JFQU1FUjsKLQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGluZm8sICJidXJndW5keSIpKQotCQkJY29kZWMgPSBBV0FDU19CVVJHVU5EWSA7Ci0JCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShpbmZvLCAiZGFjYSIpKQotCQkJY29kZWMgPSBBV0FDU19EQUNBOwotCQlpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUoaW5mbywgInR1bWJsZXIiKSkKLQkJCWNvZGVjID0gQVdBQ1NfVFVNQkxFUjsKLQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGluZm8sICJzbmFwcGVyIikpCi0JCQljb2RlYyA9IEFXQUNTX1NOQVBQRVI7Ci0JfQotCXJldHVybiBjb2RlYyA7Ci19Ci0KLS8qIGZpbmQgb3V0IHdoYXQgdHlwZSwgaWYgYW55LCBvZiBleHBhbnNpb24gY2FyZCB3ZSBoYXZlCi0qLwotc3RhdGljIHZvaWQgX19pbml0Ci1nZXRfZXhwYW5zaW9uX3R5cGUodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCi0JZG4gPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicGVyY2giKTsKLQlpZiAoZG4gIT0gTlVMTCkKLQkJaGFzX3BlcmNoID0gMTsKLQlvZl9ub2RlX3B1dChkbik7Ci0KLQlkbiA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwYi16aXZhLXBjIik7Ci0JaWYgKGRuICE9IE5VTEwpCi0JCWhhc196aXZhID0gMTsKLQlvZl9ub2RlX3B1dChkbik7Ci0JLyogbmVlZCB0byB3b3JrIG91dCBob3cgd2UgZGVhbCB3aXRoIGlNYWMgU1JTIG1vZHVsZSAqLwotfQotCi0vKiBzZXQgdXAgZnJhbWUgcmF0ZXMuCi0gKiBJIHN1c3BlY3QgdGhhdCB0aGVzZSByb3V0aW5lcyBkb24ndCBxdWl0ZSBnbyBhYm91dCBpdCB0aGUgcmlnaHQgd2F5OgotICogLSB3aGVyZSB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJhdGUgLSBJIHRoaW5rIHRoYXQgdGhlIGZpcnN0IHByb3BlcnR5Ci0gKiB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHJhdGVzLgotICogVE9ETzogY2hlY2sgc29tZSBtb3JlIGRldmljZSB0cmVlcyBhbmQgbW9kaWZ5IGFjY29yZGluZ2x5Ci0gKiAgICAgICBTZXQgZG1hc291bmQubWFjaC5tYXhfZHNwX3JhdGUgb24gdGhlIGJhc2lzIG9mIHRoZXNlIHJvdXRpbmVzLgotKi8KLQotc3RhdGljIHZvaWQgX19pbml0Ci1hd2Fjc19pbml0X2ZyYW1lX3JhdGVzKGNvbnN0IHVuc2lnbmVkIGludCAqcHJvcCwgdW5zaWduZWQgaW50IGwpCi17Ci0JaW50IGkgOwotCWlmIChwcm9wKSB7Ci0JCWZvciAoaT0wOyBpPDg7IGkrKykKLQkJCWF3YWNzX2ZyZXFzX29rW2ldID0gMCA7Ci0JCWZvciAobCAvPSBzaXplb2YoaW50KTsgbCA+IDA7IC0tbCkgewotCQkJdW5zaWduZWQgaW50IHIgPSAqcHJvcCsrOwotCQkJLyogQXBwbGUgJ0ZpeGVkJyBmb3JtYXQgKi8KLQkJCWlmIChyID49IDB4MTAwMDApCi0JCQkJciA+Pj0gMTY7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7Ci0JCQkJaWYgKHIgPT0gYXdhY3NfZnJlcXNbaV0pIHsKLQkJCQkJYXdhY3NfZnJlcXNfb2tbaV0gPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogZWxzZSB3ZSBhc3N1bWUgdGhhdCBhbGwgdGhlIHJhdGVzIGFyZSBhdmFpbGFibGUgKi8KLX0KLQotc3RhdGljIHZvaWQgX19pbml0Ci1idXJndW5keV9pbml0X2ZyYW1lX3JhdGVzKGNvbnN0IHVuc2lnbmVkIGludCAqcHJvcCwgdW5zaWduZWQgaW50IGwpCi17Ci0JaW50IHRlbXBbOV0gOwotCWludCBpID0gMCA7Ci0JaWYgKHByb3ApIHsKLQkJZm9yIChsIC89IHNpemVvZihpbnQpOyBsID4gMDsgLS1sKSB7Ci0JCQl1bnNpZ25lZCBpbnQgciA9ICpwcm9wKys7Ci0JCQkvKiBBcHBsZSAnRml4ZWQnIGZvcm1hdCAqLwotCQkJaWYgKHIgPj0gMHgxMDAwMCkKLQkJCQlyID4+PSAxNjsKLQkJCXRlbXBbaV0gPSByIDsKLQkJCWkrKyA7IGlmKGk+PTkpIGk9ODsKLQkJfQotCX0KLSNpZmRlZiBERUJVR19ETUFTT1VORAotaWYgKGkgPiAxKXsKLQlpbnQgajsKLQlwcmludGsoImRtYXNvdW5kX3BtYWM6IGJ1cmd1bmR5IHdpdGggbXVsdGlwbGUgZnJhbWUgcmF0ZXNcbiIpOwotCWZvcihqPTA7IGo8aTsgaisrKQotCQlwcmludGsoIiVkICIsIHRlbXBbal0pIDsKLQlwcmludGsoIlxuIikgOwotfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotZGFjYV9pbml0X2ZyYW1lX3JhdGVzKGNvbnN0IHVuc2lnbmVkIGludCAqcHJvcCwgdW5zaWduZWQgaW50IGwpCi17Ci0JaW50IHRlbXBbOV0gOwotCWludCBpID0gMCA7Ci0JaWYgKHByb3ApIHsKLQkJZm9yIChsIC89IHNpemVvZihpbnQpOyBsID4gMDsgLS1sKSB7Ci0JCQl1bnNpZ25lZCBpbnQgciA9ICpwcm9wKys7Ci0JCQkvKiBBcHBsZSAnRml4ZWQnIGZvcm1hdCAqLwotCQkJaWYgKHIgPj0gMHgxMDAwMCkKLQkJCQlyID4+PSAxNjsKLQkJCXRlbXBbaV0gPSByIDsKLQkJCWkrKyA7IGlmKGk+PTkpIGk9ODsKLQotCQl9Ci0JfQotI2lmZGVmIERFQlVHX0RNQVNPVU5ECi1pZiAoaSA+IDEpewotCWludCBqOwotCXByaW50aygiZG1hc291bmRfcG1hYzogREFDQSB3aXRoIG11bHRpcGxlIGZyYW1lIHJhdGVzXG4iKTsKLQlmb3Ioaj0wOyBqPGk7IGorKykKLQkJcHJpbnRrKCIlZCAiLCB0ZW1wW2pdKSA7Ci0JcHJpbnRrKCJcbiIpIDsKLX0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLWluaXRfZnJhbWVfcmF0ZXMoY29uc3QgdW5zaWduZWQgaW50ICpwcm9wLCB1bnNpZ25lZCBpbnQgbCkKLXsKLQlzd2l0Y2ggKGF3YWNzX3JldmlzaW9uKSB7Ci0JCWNhc2UgQVdBQ1NfVFVNQkxFUjoKLQkJY2FzZSBBV0FDU19TTkFQUEVSOgotCQkJdGFzX2luaXRfZnJhbWVfcmF0ZXMocHJvcCwgbCk7Ci0JCQlicmVhayA7Ci0JCWNhc2UgQVdBQ1NfREFDQToKLQkJCWRhY2FfaW5pdF9mcmFtZV9yYXRlcyhwcm9wLCBsKTsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19CVVJHVU5EWToKLQkJCWJ1cmd1bmR5X2luaXRfZnJhbWVfcmF0ZXMocHJvcCwgbCk7Ci0JCQlicmVhayA7Ci0JCWRlZmF1bHQ6Ci0JCQlhd2Fjc19pbml0X2ZyYW1lX3JhdGVzKHByb3AsIGwpOwotCQkJYnJlYWsgOwotCX0KLX0KLQotLyogZmluZCB0aGluZ3MvbWFjaGluZXMgdGhhdCBjYW4ndCBkbyBtYWMtaW8gYnl0ZXN3YXAKLSovCi0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2V0X2h3X2J5dGVzd2FwKHN0cnVjdCBkZXZpY2Vfbm9kZSAqaW8pCi17Ci0Jc3RydWN0IGRldmljZV9ub2RlICptaW8gOwotCXVuc2lnbmVkIGludCBrbCA9IDAgOwotCi0JLyogaWYgc2VlbXMgdGhhdCBLZXlsYXJnbyBjYW4ndCBieXRlLXN3YXAgICovCi0KLQlmb3IgKG1pbyA9IGlvLT5wYXJlbnQ7IG1pbyA7IG1pbyA9IG1pby0+cGFyZW50KSB7Ci0JCWlmIChzdHJjbXAobWlvLT5uYW1lLCAibWFjLWlvIikgPT0gMCkgewotCQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKG1pbywgIktleWxhcmdvIikpCi0JCQkJa2wgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaHdfY2FuX2J5dGVzd2FwID0gIWtsOwotfQotCi0vKiBBbGxvY2F0ZSB0aGUgcmVzb3VyY2VzIG5lY2Vzc2FyeSBmb3IgYmVlcCBnZW5lcmF0aW9uLiAgVGhpcyBjYW5ub3QgYmUgKHF1aXRlKQotICAgZG9uZSBzdGF0aWNhbGx5ICh5ZXQpIGJlY2F1c2Ugd2UgY2Fubm90IGRvIHZpcnRfdG9fYnVzKCkgb24gc3RhdGljIHZhcnMgd2hlbgotICAgdGhlIGNvZGUgaXMgbG9hZGVkIGFzIGEgbW9kdWxlLgotCi0gICBmb3IgdGhlIHNha2Ugb2Ygc2F2aW5nIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHR3byBhbGxvY2F0aW9ucyB3aWxsIGluY3VyIHRoZQotICAgb3ZlcmhlYWQgb2YgdHdvIHB1bGwtdXBzIGluIERCRE1BX0FMSUdOKCkgd2UgYWxsb2NhdGUgdGhlICdlbWVyZ2VuY3knIGRtZG1hCi0gICBjb21tYW5kIGhlcmUgYXMgd2VsbC4uLiBldmVuIHRobycgaXQgaXMgbm90IHBhcnQgb2YgdGhlIGJlZXAgcHJvY2Vzcy4KLSovCi0KLWludDMyX3QKLV9faW5pdCBzZXR1cF9iZWVwKHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBiZWVwIHN0dWZmICovCi0JLyogd2FudCBvbmUgY21kIGJ1ZmZlciBmb3IgYmVlcHMsIGFuZCBhIHNlY29uZCBvbmUgZm9yIGVtZXJnZW5jaWVzCi0JICAgLSBpLmUuIGRiZG1hIGVycm9yIGNvbmRpdGlvbnMuCi0JICAgYXNrIGZvciB0aHJlZSB0byBhbGxvdyBmb3IgcHVsbCB1cCBpbiBEQkRNQV9BTElHTigpLgotCSovCi0JYmVlcF9kYmRtYV9jbWRfc3BhY2UgPQotCQlrbWFsbG9jKCgyICsgMSkgKiBzaXplb2Yoc3RydWN0IGRiZG1hX2NtZCksIEdGUF9LRVJORUwpOwotCWlmKGJlZXBfZGJkbWFfY21kX3NwYWNlID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWFzb3VuZF9wbWFjOiBubyBiZWVwIGRiZG1hIGNtZCBzcGFjZVxuIikgOwotCQlyZXR1cm4gLUVOT01FTSA7Ci0JfQotCWJlZXBfZGJkbWFfY21kID0gKHZvbGF0aWxlIHN0cnVjdCBkYmRtYV9jbWQgKikKLQkJCURCRE1BX0FMSUdOKGJlZXBfZGJkbWFfY21kX3NwYWNlKTsKLQkvKiBzZXQgdXAgZW1lcmdlbmN5IGRiZG1hIGNtZCAqLwotCWVtZXJnZW5jeV9kYmRtYV9jbWQgPSBiZWVwX2RiZG1hX2NtZCsxIDsKLQliZWVwX2J1ZiA9IGttYWxsb2MoQkVFUF9CVUZMRU4gKiA0LCBHRlBfS0VSTkVMKTsKLQlpZiAoYmVlcF9idWYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgImRtYXNvdW5kX3BtYWM6IG5vIG1lbW9yeSBmb3IgYmVlcCBidWZmZXJcbiIpOwotCQlrZnJlZShiZWVwX2RiZG1hX2NtZF9zcGFjZSkgOwotCQlyZXR1cm4gLUVOT01FTSA7Ci0JfQotCXJldHVybiAwIDsKLX0KLQotc3RhdGljIHN0cnVjdCBpbnB1dF9kZXYgKmF3YWNzX2JlZXBfZGV2OwotCi1pbnQgX19pbml0IGRtYXNvdW5kX2F3YWNzX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlvID0gTlVMTCwgKmluZm8gPSBOVUxMOwotCWludCB2b2wsIHJlczsKLQotCWlmICghbWFjaGluZV9pcyhwb3dlcm1hYykpCi0JCXJldHVybiAtRU5PREVWOwotCi0JYXdhY3Nfc3ViZnJhbWUgPSAwOwotCWF3YWNzX3JldmlzaW9uID0gMDsKLQlod19jYW5fYnl0ZXN3YXAgPSAxIDsgLyogbW9zdCBjYW4gKi8KLQotCS8qIGxvb2sgZm9yIG1vZGVscyB3ZSBuZWVkIHRvIGhhbmRsZSBzcGVjaWFsbHkgKi8KLQlzZXRfbW9kZWwoKSA7Ci0KLQkvKiBmaW5kIHRoZSBPRiBub2RlIHRoYXQgdGVsbHMgdXMgYWJvdXQgdGhlIGRiZG1hIHN0dWZmCi0JKi8KLQlpbyA9IGdldF9zbmRfaW9fbm9kZSgpOwotCWlmIChpbyA9PSBOVUxMKSB7Ci0jaWZkZWYgREVCVUdfRE1BU09VTkQKLXByaW50aygiZG1hc291bmRfcG1hYzogY291bGRuJ3QgZmluZCBzb3VuZCBpbyBPRiBub2RlXG4iKTsKLSNlbmRpZgotCQlnb3RvIG5vX2RldmljZTsKLQl9Ci0KLQkvKiBmaW5kIHRoZSBPRiBub2RlIHRoYXQgdGVsbHMgdXMgYWJvdXQgdGhlIHNvdW5kIHN1Yi1zeXN0ZW0KLQkgKiB0aGlzIGRvZXNuJ3QgZXhpc3Qgb24gcHJlLWRhdmJ1cyBtYWNoaW5lcyAoZWFybGllciB0aGFuIDk1MDApCi0JKi8KLQlpZiAoYXdhY3NfcmV2aXNpb24gIT0gQVdBQ1NfQVdBQ1MpIHsgLyogc2V0IGZvciBwcmUtZGF2YnVzICovCi0JCWluZm8gPSBnZXRfc25kX2luZm9fbm9kZShpbykgOwotCQlpZiAoaW5mbyA9PSBOVUxMKXsKLSNpZmRlZiBERUJVR19ETUFTT1VORAotcHJpbnRrKCJkbWFzb3VuZF9wbWFjOiBjb3VsZG4ndCBmaW5kICdzb3VuZCcgT0Ygbm9kZVxuIik7Ci0jZW5kaWYKLQkJCWdvdG8gbm9fZGV2aWNlOwotCQl9Ci0JfQotCi0JYXdhY3NfcmV2aXNpb24gPSBnZXRfY29kZWNfdHlwZShpbmZvKSA7Ci0JaWYgKGF3YWNzX3JldmlzaW9uID09IDApIHsKLSNpZmRlZiBERUJVR19ETUFTT1VORAotcHJpbnRrKCJkbWFzb3VuZF9wbWFjOiBjb3VsZG4ndCBmaW5kIGEgQ29kZWMgd2UgY2FuIGhhbmRsZVxuIik7Ci0jZW5kaWYKLQkJZ290byBub19kZXZpY2U7IC8qIHdlIGRvbid0IGtub3cgdGhpcyB0eXBlIG9mIGgvdyAqLwotCX0KLQotCS8qIHNldCB1cCBwZXJjaCwgeml2YSwgU1JTIG9yIHdoYXRldmVyIGVsc2Ugd2UgaGF2ZSBhcyBzb3VuZAotCSAqICBleHBhbnNpb24uCi0JKi8KLQlnZXRfZXhwYW5zaW9uX3R5cGUoKTsKLQotCS8qIHdlJ3ZlIG5vdyBnb3QgZW5vdWdoIGluZm9ybWF0aW9uIHRvIG1ha2UgdXAgdGhlIGF1ZGlvIHRvcG9sb2d5LgotCSAqIHdlIHdpbGwgbWFwIHRoZSBzb3VuZCBwYXJ0IG9mIG1hYy1pbyBub3cgc28gdGhhdCB3ZSBjYW4gcHJvYmUgZm9yCi0JICogb3RoZXIgaW5mbyBpZiBuZWNlc3NhcnkgKGVhcmx5IEFXQUNTIHdlIHdhbnQgdG8gcmVhZCBjaGlwIGlkcykKLQkgKi8KLQotCWlmIChvZl9nZXRfYWRkcmVzcyhpbywgMiwgTlVMTCwgTlVMTCkgPT0gTlVMTCkgewotCQkvKiBPSyAtIG1heWJlIHdlIG5lZWQgdG8gdXNlIHRoZSAnYXdhY3MnIG5vZGUgKG9uIGVhcmxpZXIKLQkJICogbWFjaGluZXMpLgotCQkgKi8KLQkJaWYgKGF3YWNzX25vZGUpIHsKLQkJCW9mX25vZGVfcHV0KGlvKTsKLQkJCWlvID0gb2Zfbm9kZV9nZXQoYXdhY3Nfbm9kZSk7Ci0JCQlpZiAob2ZfZ2V0X2FkZHJlc3MoaW8sIDIsIE5VTEwsIE5VTEwpID09IE5VTEwpIHsKLQkJCQlwcmludGsoImRtYXNvdW5kX3BtYWM6IGNhbid0IHVzZSAlc1xuIiwKLQkJCQkgICAgICAgaW8tPmZ1bGxfbmFtZSk7Ci0JCQkJZ290byBub19kZXZpY2U7Ci0JCQl9Ci0JCX0gZWxzZQotCQkJcHJpbnRrKCJkbWFzb3VuZF9wbWFjOiBjYW4ndCB1c2UgJXNcbiIsIGlvLT5mdWxsX25hbWUpOwotCX0KLQotCWlmIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGlvLCAwLCAmYXdhY3NfcnNyY1swXSkgfHwKLQkgICAgcmVxdWVzdF9tZW1fcmVnaW9uKGF3YWNzX3JzcmNbMF0uc3RhcnQsCi0JCQkgICAgICAgYXdhY3NfcnNyY1swXS5lbmQgLSBhd2Fjc19yc3JjWzBdLnN0YXJ0ICsgMSwKLQkJCSAgICAgICAiIChJTykiKSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZG1hc291bmQ6IGNhbid0IHJlcXVlc3QgSU8gcmVzb3VyY2UgIVxuIik7Ci0JCWdvdG8gbm9fZGV2aWNlOwotCX0KLQlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShpbywgMSwgJmF3YWNzX3JzcmNbMV0pIHx8Ci0JICAgIHJlcXVlc3RfbWVtX3JlZ2lvbihhd2Fjc19yc3JjWzFdLnN0YXJ0LAotCQkJICAgICAgIGF3YWNzX3JzcmNbMV0uZW5kIC0gYXdhY3NfcnNyY1sxXS5zdGFydCArIDEsCi0JCQkgICAgICAgIiAodHggZG1hKSIpID09IE5VTEwpIHsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGF3YWNzX3JzcmNbMF0uc3RhcnQsCi0JCQkJICAgYXdhY3NfcnNyY1swXS5lbmQgLSBhd2Fjc19yc3JjWzBdLnN0YXJ0ICsgMSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiZG1hc291bmQ6IGNhbid0IHJlcXVlc3QgVHggRE1BIHJlc291cmNlICFcbiIpOwotCQlnb3RvIG5vX2RldmljZTsKLQl9Ci0JaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoaW8sIDIsICZhd2Fjc19yc3JjWzJdKSB8fAotCSAgICByZXF1ZXN0X21lbV9yZWdpb24oYXdhY3NfcnNyY1syXS5zdGFydCwKLQkJCSAgICAgICBhd2Fjc19yc3JjWzJdLmVuZCAtIGF3YWNzX3JzcmNbMl0uc3RhcnQgKyAxLAotCQkJICAgICAgICIgKHJ4IGRtYSkiKSA9PSBOVUxMKSB7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihhd2Fjc19yc3JjWzBdLnN0YXJ0LAotCQkJCSAgIGF3YWNzX3JzcmNbMF0uZW5kIC0gYXdhY3NfcnNyY1swXS5zdGFydCArIDEpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oYXdhY3NfcnNyY1sxXS5zdGFydCwKLQkJCQkgICBhd2Fjc19yc3JjWzFdLmVuZCAtIGF3YWNzX3JzcmNbMV0uc3RhcnQgKyAxKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWFzb3VuZDogY2FuJ3QgcmVxdWVzdCBSeCBETUEgcmVzb3VyY2UgIVxuIik7Ci0JCWdvdG8gbm9fZGV2aWNlOwotCX0KLQotCWF3YWNzX2JlZXBfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFhd2Fjc19iZWVwX2RldikgewotCQlyZWxlYXNlX21lbV9yZWdpb24oYXdhY3NfcnNyY1swXS5zdGFydCwKLQkJCQkgICBhd2Fjc19yc3JjWzBdLmVuZCAtIGF3YWNzX3JzcmNbMF0uc3RhcnQgKyAxKTsKLQkJcmVsZWFzZV9tZW1fcmVnaW9uKGF3YWNzX3JzcmNbMV0uc3RhcnQsCi0JCQkJICAgYXdhY3NfcnNyY1sxXS5lbmQgLSBhd2Fjc19yc3JjWzFdLnN0YXJ0ICsgMSk7Ci0JCXJlbGVhc2VfbWVtX3JlZ2lvbihhd2Fjc19yc3JjWzJdLnN0YXJ0LAotCQkJCSAgIGF3YWNzX3JzcmNbMl0uZW5kIC0gYXdhY3NfcnNyY1syXS5zdGFydCArIDEpOwotCQlwcmludGsoS0VSTl9FUlIgImRtYXNvdW5kOiBjYW4ndCBhbGxvY2F0ZSBpbnB1dCBkZXZpY2UgIVxuIik7Ci0JCWdvdG8gbm9fZGV2aWNlOwotCX0KLQotCWF3YWNzX2JlZXBfZGV2LT5uYW1lID0gImRtYXNvdW5kIGJlZXBlciI7Ci0JYXdhY3NfYmVlcF9kZXYtPnBoeXMgPSAibWFjaW8vaW5wdXQwIjsKLQlhd2Fjc19iZWVwX2Rldi0+aWQuYnVzdHlwZSA9IEJVU19IT1NUOwotCWF3YWNzX2JlZXBfZGV2LT5ldmVudCA9IGF3YWNzX2JlZXBfZXZlbnQ7Ci0JYXdhY3NfYmVlcF9kZXYtPnNuZGJpdFswXSA9IEJJVChTTkRfQkVMTCkgfCBCSVQoU05EX1RPTkUpOwotCWF3YWNzX2JlZXBfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9TTkQpOwotCi0JLyogYWxsIE9GIHZlcnNpb25zIEkndmUgc2VlbiB1c2UgdGhpcyB2YWx1ZSAqLwotCWlmIChpMnNfbm9kZSkKLQkJaTJzID0gaW9yZW1hcChhd2Fjc19yc3JjWzBdLnN0YXJ0LCAweDEwMDApOwotCWVsc2UKLQkJYXdhY3MgPSBpb3JlbWFwKGF3YWNzX3JzcmNbMF0uc3RhcnQsIDB4MTAwMCk7Ci0JYXdhY3NfdHhkbWEgPSBpb3JlbWFwKGF3YWNzX3JzcmNbMV0uc3RhcnQsIDB4MTAwKTsKLQlhd2Fjc19yeGRtYSA9IGlvcmVtYXAoYXdhY3NfcnNyY1syXS5zdGFydCwgMHgxMDApOwotCi0JLyogZmlyc3Qgb2YgYWxsIG1ha2Ugc3VyZSB0aGF0IHRoZSBjaGlwIGlzIHBvd2VyZWQgdXAuLi4uKi8KLQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl9TT1VORF9DSElQX0VOQUJMRSwgaW8sIDAsIDEpOwotCWlmIChhd2Fjc19yZXZpc2lvbiA9PSBBV0FDU19TQ1JFQU1FUiAmJiBhd2FjcykKLQkJYXdhY3NfcmVjYWxpYnJhdGUoKTsKLQotCWF3YWNzX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGlvLCAwKTsKLQlhd2Fjc190eF9pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChpbywgMSk7Ci0JYXdhY3NfcnhfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoaW8sIDIpOwotCi0JLyogSGFjayBmb3IgbGVnYWN5IGNyYXAgdGhhdCB3aWxsIGJlIGtpbGxlZCBzb21lZGF5ICovCi0Jb2Zfbm9kZV9wdXQoYXdhY3Nfbm9kZSk7Ci0JYXdhY3Nfbm9kZSA9IG9mX25vZGVfZ2V0KGlvKTsKLQotCS8qIGlmIHdlIGhhdmUgYW4gYXdhY3Mgb3Igc2NyZWFtZXIgLSBwcm9iZSB0aGUgY2hpcCB0byBtYWtlCi0JICogc3VyZSB3ZSBoYXZlIHRoZSByaWdodCByZXZpc2lvbi4KLQkqLwotCi0JaWYgKGF3YWNzX3JldmlzaW9uIDw9IEFXQUNTX1NDUkVBTUVSKXsKLQkJdWludDMyX3QgdGVtcCwgcmV2LCBtZmcgOwotCQkvKiBmaW5kIG91dCB0aGUgYXdhY3MgcmV2aXNpb24gZnJvbSB0aGUgY2hpcCAqLwotCQl0ZW1wID0gaW5fbGUzMigmYXdhY3MtPmNvZGVjX3N0YXQpOwotCQlyZXYgPSAodGVtcCA+PiAxMikgJiAweGY7Ci0JCW1mZyA9ICh0ZW1wID4+ICA4KSAmIDB4ZjsKLSNpZmRlZiBERUJVR19ETUFTT1VORAotcHJpbnRrKCJkbWFzb3VuZF9wbWFjOiBBd2Fjcy9TY3JlYW1lciBDb2RlYyBNZmN0OiAlZCBSZXYgJWRcbiIsIG1mZywgcmV2KTsKLSNlbmRpZgotCQlpZiAocmV2ID49IEFXQUNTX1NDUkVBTUVSKQotCQkJYXdhY3NfcmV2aXNpb24gPSBBV0FDU19TQ1JFQU1FUiA7Ci0JCWVsc2UKLQkJCWF3YWNzX3JldmlzaW9uID0gcmV2IDsKLQl9Ci0KLQlkbWFzb3VuZC5tYWNoID0gbWFjaFBNYWM7Ci0KLQkvKiBmaW5kIG91dCBvdGhlciBiaXRzICYgcGllY2VzIGZyb20gT0YsIHRoZXNlIG1heSBiZSBwcmVzZW50Ci0JICAgb25seSBvbiBzb21lIG1vZGVscyAuLi4gc28gYmUgY2FyZWZ1bC4KLQkqLwotCi0JLyogaW4gdGhlIGFic2VuY2Ugb2YgYSBmcmFtZSByYXRlcyBwcm9wZXJ0eSB3ZSB3aWxsIHVzZSB0aGUgZGVmYXVsdHMKLQkqLwotCi0JaWYgKGluZm8pIHsKLQkJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOwotCQl1bnNpZ25lZCBpbnQgbDsKLQotCQlzb3VuZF9kZXZpY2VfaWQgPSAwOwotCQkvKiBkZXZpY2UgSUQgYXBwZWFycyBwb3N0IGczIGImdyAqLwotCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGluZm8sICJkZXZpY2UtaWQiLCBOVUxMKTsKLQkJaWYgKHByb3AgIT0gMCkKLQkJCXNvdW5kX2RldmljZV9pZCA9ICpwcm9wOwotCi0JCS8qIGxvb2sgZm9yIGEgcHJvcGVydHkgc2F5aW5nIHdoYXQgc2FtcGxlIHJhdGVzCi0JCSAgIGFyZSBhdmFpbGFibGUgKi8KLQotCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGluZm8sICJzYW1wbGUtcmF0ZXMiLCAmbCk7Ci0JCWlmIChwcm9wID09IDApCi0JCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KGluZm8sICJvdXRwdXQtZnJhbWUtcmF0ZXMiLCAmbCk7Ci0KLQkJLyogaWYgaXQncyB0aGVyZSB1c2UgaXQgdG8gc2V0IHVwIGZyYW1lIHJhdGVzICovCi0JCWluaXRfZnJhbWVfcmF0ZXMocHJvcCwgbCkgOwotCQlvZl9ub2RlX3B1dChpbmZvKTsKLQkJaW5mbyA9IE5VTEw7Ci0JfQotCi0JaWYgKGF3YWNzKQotCQlvdXRfbGUzMigmYXdhY3MtPmNvbnRyb2wsIDB4MTEpOyAvKiBzZXQgZXZlcnl0aGluZyBxdWllc2VudCAqLwotCi0Jc2V0X2h3X2J5dGVzd2FwKGlvKSA7IC8qIGZpZ3VyZSBvdXQgaWYgdGhlIGgvdyBjYW4gZG8gaXQgKi8KLQotI2lmZGVmIENPTkZJR19OVlJBTQotCS8qIGdldCBkZWZhdWx0IHZvbHVtZSBmcm9tIG52cmFtICovCi0Jdm9sID0gKChwbWFjX3hwcmFtX3JlYWQoIDggKSAmIDcgKSA8PCAxICk7Ci0jZWxzZQotCXZvbCA9IDA7Ci0jZW5kaWYKLQotCS8qIHNldCB1cCB0cmFja2luZyB2YWx1ZXMgKi8KLQlzcGtfdm9sID0gdm9sICogMTAwIDsKLQlzcGtfdm9sIC89IDcgOyAvKiBnZXQgc2V0IHZhbHVlIHRvIGEgcGVyY2VudGFnZSAqLwotCXNwa192b2wgfD0gKHNwa192b2wgPDwgOCkgOyAvKiBlcXVhbCBsZWZ0ICYgcmlnaHQgKi8KLSAJbGluZV92b2wgPSBwYXNzdGhydV92b2wgPSBzcGtfdm9sIDsKLQotCS8qIGZpbGwgcmVncyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBBV0FDUyAmIEJ1cmd1bmR5ICovCi0KLQlhd2Fjc19yZWdbMl0gPSB2b2wgKyAodm9sIDw8IDYpOwotCWF3YWNzX3JlZ1s0XSA9IHZvbCArICh2b2wgPDwgNik7Ci0JYXdhY3NfcmVnWzVdID0gdm9sICsgKHZvbCA8PCA2KTsgLyogc2NyZWFtZXIgaGFzIGxvb3B0aHJ1IHZvbCBjb250cm9sICovCi0JYXdhY3NfcmVnWzZdID0gMDsgLyogbWF5YmUgc2hvdWxkIGJlIHZvbCA8PCAzIGZvciBQQ01DSUEgc3BlYWtlciAqLwotCWF3YWNzX3JlZ1s3XSA9IDA7Ci0KLQlhd2Fjc19yZWdbMF0gPSBNQVNLX01VWF9DRDsKLQlhd2Fjc19yZWdbMV0gPSBNQVNLX0xPT1BUSFJVOwotCi0JLyogRklYTUU6IE9ubHkgbWFjaGluZXMgd2l0aCBleHRlcm5hbCBTUlMgbW9kdWxlIG5lZWQgTUFTS19QQVJPVVQgKi8KLQlpZiAoaGFzX3BlcmNoIHx8IHNvdW5kX2RldmljZV9pZCA9PSAweDUKLQkgICAgfHwgLypzb3VuZF9kZXZpY2VfaWQgPT0gMHg4IHx8Ki8gc291bmRfZGV2aWNlX2lkID09IDB4YikKLQkJYXdhY3NfcmVnWzFdIHw9IE1BU0tfUEFST1VUMCB8IE1BU0tfUEFST1VUMTsKLQotCXN3aXRjaCAoYXdhY3NfcmV2aXNpb24pIHsKLQkJY2FzZSBBV0FDU19UVU1CTEVSOgotICAgICAgICAgICAgICAgICAgICAgICAgdGFzX3JlZ2lzdGVyX2RyaXZlcigmdGFzMzAwMWNfaG9va3MpOwotCQkJdGFzX2luaXQoSTJDX0RSSVZFUklEX1RBUzMwMDFDLCBJMkNfRFJJVkVSTkFNRV9UQVMzMDAxQyk7Ci0JCQl0YXNfZG1hc291bmRfaW5pdCgpOwotCQkJdGFzX3Bvc3RfaW5pdCgpOwotCQkJYnJlYWsgOwotCQljYXNlIEFXQUNTX1NOQVBQRVI6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0YXNfcmVnaXN0ZXJfZHJpdmVyKCZ0YXMzMDA0X2hvb2tzKTsKLQkJCXRhc19pbml0KEkyQ19EUklWRVJJRF9UQVMzMDA0LEkyQ19EUklWRVJOQU1FX1RBUzMwMDQpOwotCQkJdGFzX2RtYXNvdW5kX2luaXQoKTsKLQkJCXRhc19wb3N0X2luaXQoKTsKLQkJCWJyZWFrOwotCQljYXNlIEFXQUNTX0RBQ0E6Ci0JCQlkYWNhX2luaXQoKTsKLQkJCWJyZWFrOwkKLQkJY2FzZSBBV0FDU19CVVJHVU5EWToKLQkJCWF3YWNzX2J1cmd1bmR5X2luaXQoKTsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19TQ1JFQU1FUjoKLQkJY2FzZSBBV0FDU19BV0FDUzoKLQkJZGVmYXVsdDoKLQkJCWxvYWRfYXdhY3MoKTsKLQkJCWJyZWFrIDsKLQl9Ci0KLQkvKiBlbmFibGUvc2V0LXVwIGV4dGVybmFsIG1vZHVsZXMgLSB3aGVuIHdlIGtub3cgaG93ICovCi0KLQlpZiAoaGFzX3BlcmNoKQotCQlhd2Fjc19lbmFibGVfYW1wKDEwMCAqIDB4MTAxKTsKLQotCS8qIFJlc2V0IGRiZG1hIGNoYW5uZWxzICovCi0Jb3V0X2xlMzIoJmF3YWNzX3R4ZG1hLT5jb250cm9sLCAoUlVOfFBBVVNFfEZMVVNIfFdBS0V8REVBRCkgPDwgMTYpOwotCXdoaWxlIChpbl9sZTMyKCZhd2Fjc190eGRtYS0+c3RhdHVzKSAmIFJVTikKLQkJdWRlbGF5KDEpOwotCW91dF9sZTMyKCZhd2Fjc19yeGRtYS0+Y29udHJvbCwgKFJVTnxQQVVTRXxGTFVTSHxXQUtFfERFQUQpIDw8IDE2KTsKLQl3aGlsZSAoaW5fbGUzMigmYXdhY3NfcnhkbWEtPnN0YXR1cykgJiBSVU4pCi0JCXVkZWxheSgxKTsKLQotCS8qIEluaXRpYWxpemUgYmVlcCBzdHVmZiAqLwotCWlmICgocmVzPXNldHVwX2JlZXAoKSkpCi0JCXJldHVybiByZXMgOwotCi0jaWZkZWYgQ09ORklHX1BNCi0JcG11X3JlZ2lzdGVyX3NsZWVwX25vdGlmaWVyKCZhd2Fjc19zbGVlcF9ub3RpZmllcik7Ci0jZW5kaWYgLyogQ09ORklHX1BNICovCi0KLQkvKiBQb3dlcmJvb2tzIGhhdmUgb2RkIHdheXMgb2YgZW5hYmxpbmcgaW5wdXRzIHN1Y2ggYXMKLQkgICBhbiBleHBhbnNpb24tYmF5IENEIG9yIHNvdW5kIGZyb20gYW4gaW50ZXJuYWwgbW9kZW0KLQkgICBvciBhIFBDLWNhcmQgbW9kZW0uICovCi0JaWYgKGlzX3Bib29rXzNYMDApIHsKLQkJLyoKLQkJICogRW5hYmxlIENEIGFuZCBQQy1jYXJkIHNvdW5kIGlucHV0cy4KLQkJICogVGhpcyBpcyBkb25lIGJ5IHJlYWRpbmcgZnJvbSBhZGRyZXNzCi0JCSAqIGYzMDFhMDAwLCArIDB4MTAgdG8gZW5hYmxlIHRoZSBleHBhbnNpb24tYmF5Ci0JCSAqIENEIHNvdW5kIGlucHV0LCArIDB4ODAgdG8gZW5hYmxlIHRoZSBQQy1jYXJkCi0JCSAqIHNvdW5kIGlucHV0LiAgVGhlIDB4MTAwIGVuYWJsZXMgdGhlIFNDU0kgYnVzCi0JCSAqIHRlcm1pbmF0b3IgcG93ZXIuCi0JCSAqLwotCQlsYXRjaF9iYXNlID0gaW9yZW1hcCAoMHhmMzAxYTAwMCwgMHgxMDAwKTsKLQkJaW5fOChsYXRjaF9iYXNlICsgMHgxOTApOwotCi0JfSBlbHNlIGlmIChpc19wYm9va19nMykgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUqIG1pbzsKLQkJbWFjaW9fYmFzZSA9IE5VTEw7Ci0JCWZvciAobWlvID0gaW8tPnBhcmVudDsgbWlvOyBtaW8gPSBtaW8tPnBhcmVudCkgewotCQkJaWYgKHN0cmNtcChtaW8tPm5hbWUsICJtYWMtaW8iKSA9PSAwKSB7Ci0JCQkJc3RydWN0IHJlc291cmNlIHI7Ci0JCQkJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobWlvLCAwLCAmcikgPT0gMCkKLQkJCQkJbWFjaW9fYmFzZSA9IGlvcmVtYXAoci5zdGFydCwgMHg0MCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJLyoKLQkJICogRW5hYmxlIENEIHNvdW5kIGlucHV0LgotCQkgKiBUaGUgcmVsZXZhbnQgYml0cyBmb3Igd3JpdGluZyB0byB0aGlzIGJ5dGUgYXJlIDB4OGYuCi0JCSAqIEkgaGF2ZW4ndCBmb3VuZCBvdXQgd2hhdCB0aGUgMHg4MCBiaXQgZG9lcy4KLQkJICogRm9yIHRoZSAweGYgYml0cywgd3JpdGluZyAzIG9yIDcgZW5hYmxlcyB0aGUgQ0QKLQkJICogaW5wdXQsIGFueSBvdGhlciB2YWx1ZSBkaXNhYmxlcyBpdC4gIFZhbHVlcwotCQkgKiAxLCAzLCA1LCA3IGVuYWJsZSB0aGUgbWljcm9waG9uZS4gIFZhbHVlcyAwLCAyLAotCQkgKiA0LCA2LCA4IC0gZiBlbmFibGUgdGhlIGlucHV0IGZyb20gdGhlIG1vZGVtLgotCQkgKiAgLS0gcGF1bHVzLgotCQkgKi8KLQkJaWYgKG1hY2lvX2Jhc2UpCi0JCQlvdXRfOChtYWNpb19iYXNlICsgMHgzNywgMyk7Ci0JfQotCi0JaWYgKGh3X2Nhbl9ieXRlc3dhcCkKLSAJCWRtYXNvdW5kLm1hY2guaGFyZHdhcmVfYWZtdHMgPSAoQUZNVF9TMTZfQkUgfCBBRk1UX1MxNl9MRSkgOwotIAllbHNlCi0JCWRtYXNvdW5kLm1hY2guaGFyZHdhcmVfYWZtdHMgPSBBRk1UX1MxNl9CRSA7Ci0KLQkvKiBzaHV0IG91dCBjaGlwcyB0aGF0IGRvIG91dHB1dCBvbmx5LgotCSAqIG1heSBuZWVkIHRvIGV4dGVuZCB0aGlzIHRvIG1hY2hpbmVzIHdoaWNoIGhhdmUgbm8gaW5wdXRzIC0gZXZlbiB0aG8nCi0JICogdGhleSB1c2Ugc2NyZWFtZXIgLSBJSVJDIG9uZSBvZiB0aGUgcG93ZXJib29rcyBpcyBsaWtlIHRoaXMuCi0JICovCi0KLQlpZiAoYXdhY3NfcmV2aXNpb24gIT0gQVdBQ1NfREFDQSkgewotCQlkbWFzb3VuZC5tYWNoLmNhcGFiaWxpdGllcyA9IERTUF9DQVBfRFVQTEVYIDsKLQkJZG1hc291bmQubWFjaC5yZWNvcmQgPSBQTWFjUmVjb3JkIDsKLQl9Ci0KLQlkbWFzb3VuZC5tYWNoLmRlZmF1bHRfaGFyZCA9IGRlZl9oYXJkIDsKLQlkbWFzb3VuZC5tYWNoLmRlZmF1bHRfc29mdCA9IGRlZl9zb2Z0IDsKLQotCXN3aXRjaCAoYXdhY3NfcmV2aXNpb24pIHsKLQkJY2FzZSBBV0FDU19CVVJHVU5EWToKLQkJCXNwcmludGYoYXdhY3NfbmFtZSwgIlBvd2VyTWFjIEJ1cmd1bmR5ICIpIDsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19EQUNBOgotCQkJc3ByaW50Zihhd2Fjc19uYW1lLCAiUG93ZXJNYWMgREFDQSAiKSA7Ci0JCQlicmVhayA7Ci0JCWNhc2UgQVdBQ1NfVFVNQkxFUjoKLQkJCXNwcmludGYoYXdhY3NfbmFtZSwgIlBvd2VyTWFjIFR1bWJsZXIgIikgOwotCQkJYnJlYWsgOwotCQljYXNlIEFXQUNTX1NOQVBQRVI6Ci0JCQlzcHJpbnRmKGF3YWNzX25hbWUsICJQb3dlck1hYyBTbmFwcGVyICIpIDsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19TQ1JFQU1FUjoKLQkJCXNwcmludGYoYXdhY3NfbmFtZSwgIlBvd2VyTWFjIFNjcmVhbWVyICIpIDsKLQkJCWJyZWFrIDsKLQkJY2FzZSBBV0FDU19BV0FDUzoKLQkJZGVmYXVsdDoKLQkJCXNwcmludGYoYXdhY3NfbmFtZSwgIlBvd2VyTWFjIEFXQUNTIHJldiAlZCAiLCBhd2Fjc19yZXZpc2lvbikgOwotCQkJYnJlYWsgOwotCX0KLQotCS8qCi0JICogWFhYOiB3ZSBzaG91bGQgaGFuZGxlIGVycm9ycyBoZXJlLCBidXQgdGhhdCB3b3VsZCBtZWFuCi0JICogcmV3cml0aW5nIHRoZSB3aG9sZSBpbml0IGNvZGUuICBsYXRlci4uCi0JICovCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGF3YWNzX2JlZXBfZGV2KTsKLQotCW9mX25vZGVfcHV0KGlvKTsKLQotCXJldHVybiBkbWFzb3VuZF9pbml0KCk7Ci0KLW5vX2RldmljZToKLQlvZl9ub2RlX3B1dChpbmZvKTsKLQlvZl9ub2RlX3B1dChhd2Fjc19ub2RlKTsKLQlvZl9ub2RlX3B1dChpMnNfbm9kZSk7Ci0Jb2Zfbm9kZV9wdXQoaW8pOwotCXJldHVybiAtRU5PREVWIDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGRtYXNvdW5kX2F3YWNzX2NsZWFudXAodm9pZCkKLXsKLQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShhd2Fjc19iZWVwX2Rldik7Ci0KLQlzd2l0Y2ggKGF3YWNzX3JldmlzaW9uKSB7Ci0JCWNhc2UgQVdBQ1NfVFVNQkxFUjoKLQkJY2FzZSBBV0FDU19TTkFQUEVSOgotCQkJdGFzX2RtYXNvdW5kX2NsZWFudXAoKTsKLQkJCXRhc19jbGVhbnVwKCk7Ci0JCQlicmVhayA7Ci0JCWNhc2UgQVdBQ1NfREFDQToKLQkJCWRhY2FfY2xlYW51cCgpOwotCQkJYnJlYWs7Ci0JfQotCWRtYXNvdW5kX2RlaW5pdCgpOwotCi0Jb2Zfbm9kZV9wdXQoYXdhY3Nfbm9kZSk7Ci0Jb2Zfbm9kZV9wdXQoaTJzX25vZGUpOwotfQotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyTWFjIGJ1aWx0LWluIGF1ZGlvIGRyaXZlci4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQoZG1hc291bmRfYXdhY3NfaW5pdCk7Ci1tb2R1bGVfZXhpdChkbWFzb3VuZF9hd2Fjc19jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfY29yZS5jCmluZGV4IGY0MDU2YTkuLmEwMDNjMGUgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMKKysrIGIvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2NvcmUuYwpAQCAtMjAyLDEzICsyMDIsNiBAQAogc3RhdGljIHVuc2lnbmVkIGludCB3cml0ZUJ1ZlNpemUgPSBERUZBVUxUX0JVRkZfU0laRSA7CS8qIGluIGJ5dGVzICovCiBtb2R1bGVfcGFyYW0od3JpdGVCdWZTaXplLCBpbnQsIDApOwogCi0jaWZkZWYgSEFTX1JFQ09SRAotc3RhdGljIHVuc2lnbmVkIGludCBudW1SZWFkQnVmcyA9IERFRkFVTFRfTl9CVUZGRVJTOwotbW9kdWxlX3BhcmFtKG51bVJlYWRCdWZzLCBpbnQsIDApOwotc3RhdGljIHVuc2lnbmVkIGludCByZWFkQnVmU2l6ZSA9IERFRkFVTFRfQlVGRl9TSVpFOwkvKiBpbiBieXRlcyAqLwotbW9kdWxlX3BhcmFtKHJlYWRCdWZTaXplLCBpbnQsIDApOwotI2VuZGlmCi0KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmZGVmIE1PRFVMRQpAQCAtNDAzLDEwICszOTYsNiBAQAogCiBzdHJ1Y3Qgc291bmRfcXVldWUgZG1hc291bmRfd3JpdGVfc3E7CiBzdGF0aWMgdm9pZCBzcV9yZXNldF9vdXRwdXQodm9pZCkgOwotI2lmZGVmIEhBU19SRUNPUkQKLXN0cnVjdCBzb3VuZF9xdWV1ZSBkbWFzb3VuZF9yZWFkX3NxOwotc3RhdGljIHZvaWQgc3FfcmVzZXRfaW5wdXQodm9pZCkgOwotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc3FfYWxsb2NhdGVfYnVmZmVycyhzdHJ1Y3Qgc291bmRfcXVldWUgKnNxLCBpbnQgbnVtLCBpbnQgc2l6ZSkKIHsKQEAgLTUzMCwxMiArNTE5LDYgQEAKIAkgICAgc3EtPnJlYXIgPSAtMTsKIAkgICAgc2V0dXBfZnVuYyA9IGRtYXNvdW5kLm1hY2gud3JpdGVfc3Ffc2V0dXA7CiAJfQotI2lmZGVmIEhBU19SRUNPUkQKLQllbHNlIHsKLQkgICAgc3EtPnJlYXIgPSAwOwotCSAgICBzZXR1cF9mdW5jID0gZG1hc291bmQubWFjaC5yZWFkX3NxX3NldHVwOwotCX0KLSNlbmRpZgogCWlmIChzZXR1cF9mdW5jKQogCSAgICByZXR1cm4gc2V0dXBfZnVuYygpOwogCXJldHVybiAwIDsKQEAgLTY3MiwxMyArNjU1LDYgQEAKIAl9CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFICkKIAkJcG9sbF93YWl0KGZpbGUsICZ3cml0ZV9zcS5hY3Rpb25fcXVldWUsIHdhaXQpOwotI2lmZGVmIEhBU19SRUNPUkQKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJcG9sbF93YWl0KGZpbGUsICZyZWFkX3NxLmFjdGlvbl9xdWV1ZSwgd2FpdCk7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCWlmIChyZWFkX3NxLmJsb2NrX3NpemUgLSByZWFkX3NxLnJlYXJfc2l6ZSA+IDApCi0JCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0jZW5kaWYKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCiAJCWlmICh3cml0ZV9zcS5jb3VudCA8IHdyaXRlX3NxLm1heF9hY3RpdmUgfHwgd3JpdGVfc3EuYmxvY2tfc2l6ZSAtIHdyaXRlX3NxLnJlYXJfc2l6ZSA+IDApCiAJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwpAQCAtNjg2LDEwMSArNjYyLDYgQEAKIAogfQogCi0jaWZkZWYgSEFTX1JFQ09SRAotICAgIC8qCi0gICAgICogIEhlcmUgaXMgaG93IHRoZSB2YWx1ZXMgYXJlIHVzZWQgZm9yIHJlYWRpbmcuCi0gICAgICogIFRoZSB2YWx1ZSAnYWN0aXZlJyBzaW1wbHkgaW5kaWNhdGVzIHRoZSBETUEgaXMgcnVubmluZy4gIFRoaXMgaXMgZG9uZQotICAgICAqICBzbyB0aGUgZHJpdmVyIHNlbWFudGljcyBhcmUgRE1BIHN0YXJ0cyB3aGVuIHRoZSBmaXJzdCByZWFkIGlzIHBvc3RlZC4KLSAgICAgKiAgVGhlIHZhbHVlICdmcm9udCcgaW5kaWNhdGVzIHRoZSBidWZmZXIgd2Ugc2hvdWxkIG5leHQgc2VuZCB0byB0aGUgdXNlci4KLSAgICAgKiAgVGhlIHZhbHVlICdyZWFyJyBpbmRpY2F0ZXMgdGhlIGJ1ZmZlciB0aGUgRE1BIGlzIGN1cnJlbnRseSBmaWxsaW5nLgotICAgICAqICBXaGVuICdmcm9udCcgPT0gJ3JlYXInIHRoZSBidWZmZXIgInJpbmciIGlzIGVtcHR5ICh3ZSBhbHdheXMgaGF2ZSBhbgotICAgICAqICBlbXB0eSBhdmFpbGFibGUpLiAgVGhlICdyZWFyX3NpemUnIGlzIHVzZWQgdG8gdHJhY2sgcGFydGlhbCBvZmZzZXRzCi0gICAgICogIGludG8gdGhlIGJ1ZmZlciB3ZSBhcmUgY3VycmVudGx5IHJldHVybmluZyB0byB0aGUgdXNlci4KLQotICAgICAqICBUaGlzIGxldmVsICg+IFsxLjVdKSBkb2Vzbid0IGNhcmUgd2hhdCBzdHJhdGVneSB0aGUgTEwgZHJpdmVyIHVzZXMgd2l0aAotICAgICAqICBETUEgb24gb3Zlci1ydW4uICBJdCBjYW4gbGVhdmUgaXQgcnVubmluZyAoYW5kIGtlZXAgYWN0aXZlID09IDEpIG9yIGl0Ci0gICAgICogIGNhbiBraWxsIGl0IGFuZCBzZXQgYWN0aXZlID09IDAgaW4gd2hpY2ggY2FzZSB0aGlzIHJvdXRpbmUgd2lsbCBzcG90Ci0gICAgICogIGl0IGFuZCByZXN0YXJ0IHRoZSBETUEuCi0gICAgICovCi0KLXN0YXRpYyBzc2l6ZV90IHNxX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkc3QsIHNpemVfdCB1TGVmdCwKLQkJICAgICAgIGxvZmZfdCAqcHBvcykKLXsKLQotCXNzaXplX3QJdVJlYWQsIGJMZWZ0LCBiVXNlZCwgdVVzZWQ7Ci0KLQlpZiAodUxlZnQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjYXRlciBmb3IgdGhlIGNvbXBhdGliaWxpdHkgbW9kZSAtIHJlY29yZCBjb21waWxlZCBpbiBidXQgbm8gTEwgKi8KLQlpZiAoZG1hc291bmQubWFjaC5yZWNvcmQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUwgOwotCi0JLyogc2VlIGNvbW1lbnQgaW4gc3Ffd3JpdGUoKQotCSovCi0KLQlpZiggc2hhcmVkX3Jlc291cmNlc19pbml0aWFsaXNlZCA9PSAwKSB7Ci0JCWRtYXNvdW5kLm1hY2guaW5pdCgpIDsKLQkJc2hhcmVkX3Jlc291cmNlc19pbml0aWFsaXNlZCA9IDEgOwotCX0KLQotCS8qIHNldCB1cCB0aGUgc3EgaWYgaXQgaXMgbm90IGFscmVhZHkgZG9uZS4gc2VlIGNvbW1lbnRzIGluIHNxX3dyaXRlKCkuCi0JKi8KLQotCWlmIChyZWFkX3NxLmxvY2tlZCA9PSAwKSB7Ci0JCWlmICgodVJlYWQgPSBzcV9zZXR1cCgmcmVhZF9zcSkpIDwgMCkKLQkJCXJldHVybiB1UmVhZCA7Ci0JfQotCi0JdVJlYWQgPSAwOwotCi0JLyogTW92ZSB3aGF0IHRoZSB1c2VyIHJlcXVlc3RzLCBkZXBlbmRpbmcgdXBvbiBvdGhlciBvcHRpb25zLgotCSovCi0Jd2hpbGUgKHVMZWZ0ID4gMCkgewotCi0JCS8qIHdlIGhhcHBlbmVkIHRvIGdldCBiZWhpbmQgYW5kIHRoZSBMTCBkcml2ZXIga2lsbGVkIERNQQotCQkgICB0aGVuIHdlIHNob3VsZCBzZXQgaXQgZ29pbmcgYWdhaW4uICBUaGlzIGFsc28gc2V0cyBpdAotCQkgICBnb2luZyB0aGUgZmlyc3QgdGltZSB0aHJvdWdoLgotCQkqLwotCQlpZiAoICFyZWFkX3NxLmFjdGl2ZSApCi0JCQlkbWFzb3VuZC5tYWNoLnJlY29yZCgpOwotCi0JCS8qIFdoZW4gZnJvbnQgPT0gcmVhciwgdGhlIERNQSBpcyBub3QgZG9uZSB5ZXQuCi0JCSovCi0JCXdoaWxlIChyZWFkX3NxLmZyb250ID09IHJlYWRfc3EucmVhcikgewotCQkJaWYgKHJlYWRfc3Eub3Blbl9tb2RlICYgT19OT05CTE9DSykgewotCQkJICAgICAgIHJldHVybiB1UmVhZCA+IDAgPyB1UmVhZCA6IC1FQUdBSU47Ci0JCQl9Ci0JCQlTTEVFUChyZWFkX3NxLmFjdGlvbl9xdWV1ZSk7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJcmV0dXJuIHVSZWFkID4gMCA/IHVSZWFkIDogLUVJTlRSOwotCQl9Ci0KLQkJLyogVGhlIGFtb3VudCB3ZSBtb3ZlIGlzIGVpdGhlciB3aGF0IGlzIGxlZnQgaW4gdGhlCi0JCSAqIGN1cnJlbnQgYnVmZmVyIG9yIHdoYXQgdGhlIHVzZXIgd2FudHMuCi0JCSAqLwotCQliTGVmdCA9IHJlYWRfc3EuYmxvY2tfc2l6ZSAtIHJlYWRfc3EucmVhcl9zaXplOwotCQliVXNlZCA9IHJlYWRfc3EucmVhcl9zaXplOwotCQl1VXNlZCA9IHNvdW5kX2NvcHlfdHJhbnNsYXRlKGRtYXNvdW5kLnRyYW5zX3JlYWQsIGRzdCwgdUxlZnQsCi0JCQkJCSAgICAgcmVhZF9zcS5idWZmZXJzW3JlYWRfc3EuZnJvbnRdLAotCQkJCQkgICAgICZiVXNlZCwgYkxlZnQpOwotCQlpZiAodVVzZWQgPD0gMCkKLQkJCXJldHVybiB1VXNlZDsKLQkJZHN0ICs9IHVVc2VkOwotCQl1UmVhZCArPSB1VXNlZDsKLQkJdUxlZnQgLT0gdVVzZWQ7Ci0JCXJlYWRfc3EucmVhcl9zaXplICs9IGJVc2VkOwotCQlpZiAocmVhZF9zcS5yZWFyX3NpemUgPj0gcmVhZF9zcS5ibG9ja19zaXplKSB7Ci0JCQlyZWFkX3NxLnJlYXJfc2l6ZSA9IDA7Ci0JCQlyZWFkX3NxLmZyb250Kys7Ci0JCQlpZiAocmVhZF9zcS5mcm9udCA+PSByZWFkX3NxLm1heF9hY3RpdmUpCi0JCQkJcmVhZF9zcS5mcm9udCA9IDA7Ci0JCX0KLQl9Ci0JcmV0dXJuIHVSZWFkOwotfQotI2VuZGlmIC8qIEhBU19SRUNPUkQgKi8KLQogc3RhdGljIGlubGluZSB2b2lkIHNxX2luaXRfd2FpdHF1ZXVlKHN0cnVjdCBzb3VuZF9xdWV1ZSAqc3EpCiB7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmc3EtPmFjdGlvbl9xdWV1ZSk7CkBAIC04NTQsMjMgKzczNSw2IEBACiAjZGVmaW5lIHdyaXRlX3NxX29wZW4oZmlsZSkJXAogCXNxX29wZW4yKCZ3cml0ZV9zcSwgZmlsZSwgRk1PREVfV1JJVEUsIG51bVdyaXRlQnVmcywgd3JpdGVCdWZTaXplICkKIAotI2lmZGVmIEhBU19SRUNPUkQKLSNkZWZpbmUgcmVhZF9zcV9pbml0X3dhaXRxdWV1ZSgpCXNxX2luaXRfd2FpdHF1ZXVlKCZyZWFkX3NxKQotI2lmIDAgLyogYmxvY2tpbmcgb3BlbigpICovCi0jZGVmaW5lIHJlYWRfc3Ffd2FrZV91cChmaWxlKQkJc3Ffd2FrZV91cCgmcmVhZF9zcSwgZmlsZSwgRk1PREVfUkVBRCkKLSNlbmRpZgotI2RlZmluZSByZWFkX3NxX3JlbGVhc2VfYnVmZmVycygpCXNxX3JlbGVhc2VfYnVmZmVycygmcmVhZF9zcSkKLSNkZWZpbmUgcmVhZF9zcV9vcGVuKGZpbGUpCVwKLQlzcV9vcGVuMigmcmVhZF9zcSwgZmlsZSwgRk1PREVfUkVBRCwgbnVtUmVhZEJ1ZnMsIHJlYWRCdWZTaXplICkKLSNlbHNlCi0jZGVmaW5lIHJlYWRfc3FfaW5pdF93YWl0cXVldWUoKQlkbyB7fSB3aGlsZSAoMCkKLSNpZiAwIC8qIGJsb2NraW5nIG9wZW4oKSAqLwotI2RlZmluZSByZWFkX3NxX3dha2VfdXAoZmlsZSkJCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0jZGVmaW5lIHJlYWRfc3FfcmVsZWFzZV9idWZmZXJzKCkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHNxX3Jlc2V0X2lucHV0KCkJCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KIHN0YXRpYyBpbnQgc3Ffb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgcmM7CkBAIC04ODEsMjUgKzc0NSwxMSBAQAogCXJjID0gd3JpdGVfc3Ffb3BlbihmaWxlKTsgLyogY2hlY2tzIHRoZSBmX21vZGUgKi8KIAlpZiAocmMpCiAJCWdvdG8gb3V0OwotI2lmZGVmIEhBU19SRUNPUkQKLQlpZiAoZG1hc291bmQubWFjaC5yZWNvcmQpIHsKLQkJcmMgPSByZWFkX3NxX29wZW4oZmlsZSk7IC8qIGNoZWNrcyB0aGUgZl9tb2RlICovCi0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCX0gZWxzZSB7IC8qIG5vIHJlY29yZCBmdW5jdGlvbiBpbnN0YWxsZWQ7IGluIGNvbXBhdCBtb2RlICovCi0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQkvKiBUT0RPOiBpZiBPX1JEV1IsIHJlbGVhc2UgYW55IHJlc291cmNlcyBncmFiYmVkIGJ5IHdyaXRlIHBhcnQgKi8KLQkJCXJjID0gLUVOWElPOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0jZWxzZSAvKiAhSEFTX1JFQ09SRCAqLwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCS8qIFRPRE86IGlmIE9fUkRXUiwgcmVsZWFzZSBhbnkgcmVzb3VyY2VzIGdyYWJiZWQgYnkgd3JpdGUgcGFydCAqLwogCQlyYyA9IC1FTlhJTyA7IC8qIEkgdGhpbmsgdGhpcyBpcyB3aGF0IGlzIHJlcXVpcmVkIGJ5IG9wZW4oMikgKi8KIAkJZ290byBvdXQ7CiAJfQotI2VuZGlmIC8qIEhBU19SRUNPUkQgKi8KIAogCWlmIChkbWFzb3VuZC5tYWNoLnNxX29wZW4pCiAJICAgIGRtYXNvdW5kLm1hY2guc3Ffb3BlbihmaWxlLT5mX21vZGUpOwpAQCAtOTU2LDQzICs4MDYsOSBAQAogCXdyaXRlX3NxLnVzZXJfZnJhZ19zaXplID0gMCA7CiB9CiAKLSNpZmRlZiBIQVNfUkVDT1JECi0KLXN0YXRpYyB2b2lkIHNxX3Jlc2V0X2lucHV0KHZvaWQpCi17Ci0JaWYgKGRtYXNvdW5kLm1hY2gucmVjb3JkICYmIHJlYWRfc3EuYWN0aXZlKSB7Ci0JCWlmIChkbWFzb3VuZC5tYWNoLmFib3J0X3JlYWQpIHsgLyogdGhpcyByb3V0aW5lIG11c3QgcmVhbGx5IGJlIHByZXNlbnQgKi8KLQkJCXJlYWRfc3Euc3luY2luZyA9IDEgOwotCQkJLyogdGhpcyBjYW4gdXNlIHRoZSByZWFkX3NxLnN5bmNfcXVldWUgdG8gc2xlZXAgaWYKLQkJCSAgIG5lY2Vzc2FyeSAtIGl0IHNob3VsZCBub3QgcmV0dXJuIHVudGlsIERNQQotCQkJICAgaXMgcmVhbGx5IHN0b3BwZWQgLSBiZWNhdXNlIHdlIG1pZ2h0IGRlYWxsb2NhdGUKLQkJCSAgIHRoZSBidWZmZXJzIGFzIHRoZSBuZXh0IGFjdGlvbi4uLgotCQkJKi8KLQkJCWRtYXNvdW5kLm1hY2guYWJvcnRfcmVhZCgpIDsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJImRtYXNvdW5kX2NvcmU6ICVzIGhhcyBubyBhYm9ydF9yZWFkKCkhISBhbGwgYmV0cyBhcmUgb2ZmXG4iLAotCQkJCWRtYXNvdW5kLm1hY2gubmFtZSkgOwotCQl9Ci0JfQotCXJlYWRfc3Euc3luY2luZyA9Ci0JcmVhZF9zcS5hY3RpdmUgPQotCXJlYWRfc3EuZnJvbnQgPQotCXJlYWRfc3EuY291bnQgPQotCXJlYWRfc3EucmVhciA9IDAgOwotCi0JLyogT0sgLSB3ZSBjYW4gdW5sb2NrIHRoZSBwYXJhbWV0ZXJzIGFuZCBmcmFnbWVudCBzZXR0aW5ncyAqLwotCXJlYWRfc3EubG9ja2VkID0gMCA7Ci0JcmVhZF9zcS51c2VyX2ZyYWdzID0gMCA7Ci0JcmVhZF9zcS51c2VyX2ZyYWdfc2l6ZSA9IDAgOwotfQotCi0jZW5kaWYKLQogc3RhdGljIHZvaWQgc3FfcmVzZXQodm9pZCkKIHsKIAlzcV9yZXNldF9vdXRwdXQoKSA7Ci0Jc3FfcmVzZXRfaW5wdXQoKSA7CiAJLyogd2UgY291bGQgY29uc2lkZXIgcmVzZXR0aW5nIHRoZSBzaGFyZWRfcmVzb3VyY2VzX293bmVyIGhlcmUuLi4gYnV0IEkKIAkgICB0aGluayBpdCBpcyBwcm9iYWJseSBzdGlsbCByYXRoZXIgbm9uLW9idmlvdXMgdG8gYXBwbGljYXRpb24gd3JpdGVyCiAJKi8KQEAgLTEwMzgsMTcgKzg1NCw2IEBACiAKIAlsb2NrX2tlcm5lbCgpOwogCi0jaWZkZWYgSEFTX1JFQ09SRAotCS8qIHByb2JhYmx5IGJlc3QgdG8gZG8gdGhlIHJlYWQgc2lkZSBmaXJzdCAtIHNvIHRoYXQgdGltZSB0YWtlbiB0byBkbyBpdAotCSAgIG92ZXJsYXBzIHdpdGggcGxheWluZyBhbnkgcmVtYWluaW5nIG91dHB1dCBzYW1wbGVzLgotCSovCi0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJc3FfcmVzZXRfaW5wdXQoKSA7IC8qIG1ha2Ugc3VyZSBkbWEgaXMgc3RvcHBlZCBhbmQgYWxsIGlzIHF1aWV0ICovCi0JCXJlYWRfc3FfcmVsZWFzZV9idWZmZXJzKCk7Ci0JCXJlYWRfc3EuYnVzeSA9IDA7Ci0JfQotI2VuZGlmCi0KIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJaWYgKHdyaXRlX3NxLmJ1c3kpCiAJCQlyYyA9IHNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnkpOwpAQCAtMTEwNSwxMSArOTEwLDYgQEAKIAogc3RhdGljIGludCBxdWV1ZXNfYXJlX3F1aWVzY2VudCh2b2lkKQogewotI2lmZGVmIEhBU19SRUNPUkQKLQlpZiAoZG1hc291bmQubWFjaC5yZWNvcmQpCi0JCWlmIChyZWFkX3NxLmxvY2tlZCkKLQkJCXJldHVybiAwIDsKLSNlbmRpZgogCWlmICh3cml0ZV9zcS5sb2NrZWQpCiAJCXJldHVybiAwIDsKIAlyZXR1cm4gMSA7CkBAIC0xMTg1LDEzICs5ODUsNiBAQAogCQkgICB0aGUgcmVhZF9zcSBvbmVzLgogCQkqLwogCQlzaXplID0gMCA7Ci0jaWZkZWYgSEFTX1JFQ09SRAotCQlpZiAoZG1hc291bmQubWFjaC5yZWNvcmQgJiYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKSB7Ci0JCQlpZiAoICFyZWFkX3NxLmxvY2tlZCApCi0JCQkJc3Ffc2V0dXAoJnJlYWRfc3EpIDsgLyogc2V0IHBhcmFtcyAqLwotCQkJc2l6ZSA9IHJlYWRfc3EudXNlcl9mcmFnX3NpemUgOwotCQl9Ci0jZW5kaWYKIAkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7CiAJCQlpZiAoICF3cml0ZV9zcS5sb2NrZWQgKQogCQkJCXNxX3NldHVwKCZ3cml0ZV9zcSkgOwpAQCAtMTIxNCw4ICsxMDA3LDYgQEAKIAkJICAgZXZlcnl0aGluZyAtIHJlYWQsIGhvd2V2ZXIsIGlzIGtpbGxlZCBpbWVkaWF0ZWx5LgogCQkqLwogCQlyZXN1bHQgPSAwIDsKLQkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBkbWFzb3VuZC5tYWNoLnJlY29yZCkKLQkJCXNxX3Jlc2V0X2lucHV0KCkgOwogCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKIAkJCXJlc3VsdCA9IHNxX2ZzeW5jKGZpbGUsIGZpbGUtPmZfcGF0aC5kZW50cnkpOwogCQkJc3FfcmVzZXRfb3V0cHV0KCkgOwpAQCAtMTI5NCwxMyArMTA4NSw2IEBACiAJCXJlc3VsdCA9IDAgOwogCQluYnVmcyA9IChkYXRhID4+IDE2KSAmIDB4N2ZmZiA7IC8qIDB4N2ZmZiBpcyAndXNlIG1heGltdW0nICovCiAJCXNpemUgPSBkYXRhICYgMHhmZmZmOwotI2lmZGVmIEhBU19SRUNPUkQKLQkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSAmJiBkbWFzb3VuZC5tYWNoLnJlY29yZCkgewotCQkJcmVzdWx0ID0gc2V0X3F1ZXVlX2ZyYWdzKCZyZWFkX3NxLCBuYnVmcywgc2l6ZSkgOwotCQkJaWYgKHJlc3VsdCkKLQkJCQlyZXR1cm4gcmVzdWx0IDsKLQkJfQotI2VuZGlmCiAJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewogCQkJcmVzdWx0ID0gc2V0X3F1ZXVlX2ZyYWdzKCZ3cml0ZV9zcSwgbmJ1ZnMsIHNpemUpIDsKIAkJCWlmIChyZXN1bHQpCkBAIC0xMzQ4LDIwICsxMTMyLDYgQEAKIAkucmVsZWFzZQk9IHNxX3JlbGVhc2UsCiB9OwogCi0jaWZkZWYgSEFTX1JFQ09SRAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3FfZm9wc19yZWNvcmQgPQotewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkud3JpdGUJCT0gc3Ffd3JpdGUsCi0JLnBvbGwJCT0gc3FfcG9sbCwKLQkuaW9jdGwJCT0gc3FfaW9jdGwsCi0JLm9wZW4JCT0gc3Ffb3BlbiwKLQkucmVsZWFzZQk9IHNxX3JlbGVhc2UsCi0JLnJlYWQJCT0gc3FfcmVhZCwKLX07Ci0jZW5kaWYKLQogc3RhdGljIGludCBzcV9pbml0KHZvaWQpCiB7CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcyA9ICZzcV9mb3BzOwpAQCAtMTM2OSwxMCArMTEzOSw2IEBACiAJaW50IHNxX3VuaXQ7CiAjZW5kaWYKIAotI2lmZGVmIEhBU19SRUNPUkQKLQlpZiAoZG1hc291bmQubWFjaC5yZWNvcmQpCi0JCWZvcHMgPSAmc3FfZm9wc19yZWNvcmQ7Ci0jZW5kaWYKIAlzcV91bml0ID0gcmVnaXN0ZXJfc291bmRfZHNwKGZvcHMsIC0xKTsKIAlpZiAoc3FfdW5pdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJkbWFzb3VuZF9jb3JlOiBjb3VsZG4ndCByZWdpc3RlciBmb3BzXG4iKSA7CkBAIC0xMzgwLDcgKzExNDYsNiBAQAogCX0KIAogCXdyaXRlX3NxX2luaXRfd2FpdHF1ZXVlKCk7Ci0JcmVhZF9zcV9pbml0X3dhaXRxdWV1ZSgpOwogCiAJLyogVGhlc2UgcGFyYW1ldGVycyB3aWxsIGJlIHJlc3RvcmVkIGZvciBldmVyeSBjbGVhbiBvcGVuKCkKIAkgKiBpbiB0aGUgY2FzZSBvZiBtdWx0aXBsZSBvcGVuKClzIChlLmcuIGRzcDAgJiBkc3AxKSB0aGV5CkBAIC0xNDA2LDExICsxMTcxLDcgQEAKICAgIGRyaXZlci4KICovCiAKLSNpZmRlZiBIQVNfUkVDT1JECi0jZGVmaW5lIFNUQVRfQlVGRl9MRU4gMTAyNAotI2Vsc2UKICNkZWZpbmUgU1RBVF9CVUZGX0xFTiA3NjgKLSNlbmRpZgogCiAvKiB0aGlzIGlzIGhvdyBtdWNoIHNwYWNlIHdlIHdpbGwgYWxsb3cgdGhlIGxvdy1sZXZlbCBkcml2ZXIgdG8gdXNlCiAgICBpbiB0aGUgc3RhdCBidWZmZXIuICBDdXJyZW50bHksIDIgKiAoODAgY2hhcmFjdGVyIGxpbmUgKyA8Tkw+KS4KQEAgLTE1MTgsMTEgKzEyNzksNiBAQAogCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sIkFsbG9jYXRlZDolOHMlNnNcbiIsIkJ1ZmZlcnMiLCJTaXplIikgOwogCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sIiU5czolOGQlNmRcbiIsCiAJCSJ3cml0ZSIsIHdyaXRlX3NxLm51bUJ1ZnMsIHdyaXRlX3NxLmJ1ZlNpemUpIDsKLSNpZmRlZiBIQVNfUkVDT1JECi0JaWYgKGRtYXNvdW5kLm1hY2gucmVjb3JkKQotCQlsZW4gKz0gc3ByaW50ZihidWZmZXIrbGVuLCIlOXM6JThkJTZkXG4iLAotCQkJInJlYWQiLCByZWFkX3NxLm51bUJ1ZnMsIHJlYWRfc3EuYnVmU2l6ZSkgOwotI2VuZGlmCiAJbGVuICs9IHNwcmludGYoYnVmZmVyK2xlbiwKIAkJIkN1cnJlbnQgIDogTWF4RnJnIEZyYWdTaXogTWF4QWN0IEZybnQgUmVhciAiCiAJCSJDbnQgUnJTaXplIEEgQiBTIEwgIHhydW5zXG4iKSA7CkBAIC0xNTMxLDE0ICsxMjg3LDYgQEAKIAkJd3JpdGVfc3EubWF4X2FjdGl2ZSwgd3JpdGVfc3EuZnJvbnQsIHdyaXRlX3NxLnJlYXIsCiAJCXdyaXRlX3NxLmNvdW50LCB3cml0ZV9zcS5yZWFyX3NpemUsIHdyaXRlX3NxLmFjdGl2ZSwKIAkJd3JpdGVfc3EuYnVzeSwgd3JpdGVfc3Euc3luY2luZywgd3JpdGVfc3EubG9ja2VkLCB3cml0ZV9zcS54cnVucykgOwotI2lmZGVmIEhBU19SRUNPUkQKLQlpZiAoZG1hc291bmQubWFjaC5yZWNvcmQpCi0JCWxlbiArPSBzcHJpbnRmKGJ1ZmZlcitsZW4sIiU5czolN2QlOGQlN2QlNWQlNWQlNGQlN2QlMmQlMmQlMmQlMmQlN2RcbiIsCi0JCQkicmVhZCIsIHJlYWRfc3EubWF4X2NvdW50LCByZWFkX3NxLmJsb2NrX3NpemUsCi0JCQlyZWFkX3NxLm1heF9hY3RpdmUsIHJlYWRfc3EuZnJvbnQsIHJlYWRfc3EucmVhciwKLQkJCXJlYWRfc3EuY291bnQsIHJlYWRfc3EucmVhcl9zaXplLCByZWFkX3NxLmFjdGl2ZSwKLQkJCXJlYWRfc3EuYnVzeSwgcmVhZF9zcS5zeW5jaW5nLCByZWFkX3NxLmxvY2tlZCwgcmVhZF9zcS54cnVucykgOwotI2VuZGlmCiAjaWZkZWYgREVCVUdfRE1BU09VTkQKIHByaW50aygiZG1hc291bmQ6IHN0YXQgYnVmZmVyIHVzZWQgJWQgYnl0ZXNcbiIsIGxlbikgOwogI2VuZGlmCkBAIC0xNjM4LDEzICsxMzg2LDYgQEAKIAkJKGRtYXNvdW5kLm1hY2gudmVyc2lvbiA+PiA4KSwgKGRtYXNvdW5kLm1hY2gudmVyc2lvbiAmIDB4ZmYpKSA7CiAJcHJpbnRrKEtFUk5fSU5GTyAiV3JpdGUgd2lsbCB1c2UgJTRkIGZyYWdtZW50cyBvZiAlN2QgYnl0ZXMgYXMgZGVmYXVsdFxuIiwKIAkJbnVtV3JpdGVCdWZzLCB3cml0ZUJ1ZlNpemUpIDsKLSNpZmRlZiBIQVNfUkVDT1JECi0JaWYgKGRtYXNvdW5kLm1hY2gucmVjb3JkKQotCQlwcmludGsoS0VSTl9JTkZPCi0JCQkiUmVhZCAgd2lsbCB1c2UgJTRkIGZyYWdtZW50cyBvZiAlN2QgYnl0ZXMgYXMgZGVmYXVsdFxuIiwKLQkJCW51bVJlYWRCdWZzLCByZWFkQnVmU2l6ZSkgOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTY1OSw3ICsxNDAwLDYgQEAKIAl9CiAKIAl3cml0ZV9zcV9yZWxlYXNlX2J1ZmZlcnMoKTsKLQlyZWFkX3NxX3JlbGVhc2VfYnVmZmVycygpOwogCiAJaWYgKG1peGVyX3VuaXQgPj0gMCkKIAkJdW5yZWdpc3Rlcl9zb3VuZF9taXhlcihtaXhlcl91bml0KTsKQEAgLTE2ODQsMzYgKzE0MjQsMTIgQEAKIAkgKi8KIAogCXN3aXRjaCAoaW50c1swXSkgewotI2lmZGVmIEhBU19SRUNPUkQKLSAgICAgICAgY2FzZSA1OgotICAgICAgICAgICAgICAgIGlmICgoaW50c1s1XSA8IDApIHx8IChpbnRzWzVdID4gTUFYX0NBVENIX1JBRElVUykpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoImRtYXNvdW5kX3NldHVwOiBpbnZhbGlkIGNhdGNoIHJhZGl1cywgdXNpbmcgZGVmYXVsdCA9ICVkXG4iLCBjYXRjaFJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2hSYWRpdXMgPSBpbnRzWzVdOwotICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICAgICAgaWYgKGludHNbNF0gPCBNSU5fQlVGRkVSUykKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiZG1hc291bmRfc2V0dXA6IGludmFsaWQgbnVtYmVyIG9mIHJlYWQgYnVmZmVycywgdXNpbmcgZGVmYXVsdCA9ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtUmVhZEJ1ZnMpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bVJlYWRCdWZzID0gaW50c1s0XTsKLSAgICAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KLSAgICAgICAgY2FzZSAzOgotCQlpZiAoKHNpemUgPSBpbnRzWzNdKSA8IDI1NikgIC8qIGNoZWNrIGZvciBzbWFsbCBidWZmZXIgc3BlY3MgKi8KLQkJCXNpemUgPDw9IDEwIDsKLSAgICAgICAgICAgICAgICBpZiAoc2l6ZSA8IE1JTl9CVUZTSVpFIHx8IHNpemUgPiBNQVhfQlVGU0laRSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiZG1hc291bmRfc2V0dXA6IGludmFsaWQgcmVhZCBidWZmZXIgc2l6ZSwgdXNpbmcgZGVmYXVsdCA9ICVkXG4iLCByZWFkQnVmU2l6ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJ1ZlNpemUgPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwotI2Vsc2UKIAljYXNlIDM6CiAJCWlmICgoaW50c1szXSA8IDApIHx8IChpbnRzWzNdID4gTUFYX0NBVENIX1JBRElVUykpCiAJCQlwcmludGsoImRtYXNvdW5kX3NldHVwOiBpbnZhbGlkIGNhdGNoIHJhZGl1cywgdXNpbmcgZGVmYXVsdCA9ICVkXG4iLCBjYXRjaFJhZGl1cyk7CiAJCWVsc2UKIAkJCWNhdGNoUmFkaXVzID0gaW50c1szXTsKIAkJLyogZmFsbCB0aHJvdWdoICovCi0jZW5kaWYKIAljYXNlIDI6CiAJCWlmIChpbnRzWzFdIDwgTUlOX0JVRkZFUlMpCiAJCQlwcmludGsoImRtYXNvdW5kX3NldHVwOiBpbnZhbGlkIG51bWJlciBvZiBidWZmZXJzLCB1c2luZyBkZWZhdWx0ID0gJWRcbiIsIG51bVdyaXRlQnVmcyk7CkBAIC0xODMwLDkgKzE1NDYsNiBAQAogRVhQT1JUX1NZTUJPTChkbWFzb3VuZF9kZWluaXQpOwogI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGRtYXNvdW5kX3dyaXRlX3NxKTsKLSNpZmRlZiBIQVNfUkVDT1JECi1FWFBPUlRfU1lNQk9MKGRtYXNvdW5kX3JlYWRfc3EpOwotI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGRtYXNvdW5kX2NhdGNoUmFkaXVzKTsKICNpZmRlZiBIQVNfOEJJVF9UQUJMRVMKIEVYUE9SVF9TWU1CT0woZG1hc291bmRfdWxhdzJkbWE4KTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDAxYy5jIGIvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDFjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiN2RiZGQuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDFjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NDkgKzAsMCBAQAotLyoKLSAqIERyaXZlciBmb3IgdGhlIGkyYy9pMnMgYmFzZWQgVEEzMDA0IHNvdW5kIGNoaXAgdXNlZAotICogb24gc29tZSBBcHBsZSBoYXJkd2FyZS4gQWxzbyBrbm93biBhcyAic25hcHBlciIuCi0gKgotICogVG9iaWFzIFNhcmdlYW50IDx0b2JpYXMuc2FyZ2VhbnRAYmlncG9uZC5jb20+Ci0gKiBCYXNlZCB1cG9uLCB0YXMzMDAxYy5jIGJ5IENocmlzdG9waGVyIEMuIENoaW1lbGlzIDxjaHJpc0BkZWJpYW4ub3JnPjoKLSAqCi0gKiAgIFRPRE86Ci0gKiAgIC0tLS0tCi0gKiAgICogRW5hYmxlIGNvbnRyb2wgb3ZlciBpbnB1dCBsaW5lIDIgKGlzIHRoaXMgY29ubmVjdGVkPykKLSAqICAgKiBJbXBsZW1lbnQgc2xlZXAgc3VwcG9ydCAoYXQgbGVhc3QgbXV0ZSBldmVyeXRoaW5nIGFuZAotICogICAqIHNldCBnYWlucyB0byBtaW5pbXVtIGR1cmluZyBzbGVlcCkKLSAqICAgKiBMb29rIGludG8gc29tZSBvZiBEYXJ3aW4ncyB0d2Vha3MgcmVnYXJkaW5nIHRoZSBtdXRlCi0gKiAgICogbGluZXMgKGRlbGF5cyAmIGRpZmZlcmVudCBiZWhhdmlvdXIgb24gc29tZSBIVykKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotCi0jaW5jbHVkZSAiZG1hc291bmQuaCIKLSNpbmNsdWRlICJ0YXNfY29tbW9uLmgiCi0jaW5jbHVkZSAidGFzMzAwMWMuaCIKLQotI2luY2x1ZGUgInRhc19pb2N0bC5oIgotCi0jZGVmaW5lIFRBUzMwMDFDX0JJUVVBRF9GSUxURVJfQ09VTlQgIDYKLSNkZWZpbmUgVEFTMzAwMUNfQklRVUFEX0NIQU5ORUxfQ09VTlQgMgotCi0jZGVmaW5lIFZPTF9ERUZBVUxUCSgxMDAgKiA0IC8gNSkKLSNkZWZpbmUgSU5QVVRfREVGQVVMVAkoMTAwICogNCAvIDUpCi0jZGVmaW5lIEJBU1NfREVGQVVMVAkoMTAwIC8gMikKLSNkZWZpbmUgVFJFQkxFX0RFRkFVTFQJKDEwMCAvIDIpCi0KLXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgewotCXN0cnVjdCB0YXNfZGF0YV90IHN1cGVyOwotCWludCBkZXZpY2VfaWQ7Ci0JaW50IG91dHB1dF9pZDsKLQlpbnQgc3BlYWtlcl9pZDsKLQlzdHJ1Y3QgdGFzX2RyY2VfdCBkcmNlX3N0YXRlOwotCXN0cnVjdCB3b3JrX3N0cnVjdCBjaGFuZ2U7Ci19OwotCi0KLXN0YXRpYyBjb25zdCB1bmlvbiB0YXNfYmlxdWFkX3QKLXRhczMwMDFjX2VxX3VuaXR5PXsKLQkuYnVmID0geyAweDEwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAgfQotfTsKLQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZGJfdG9fcmVndmFsKHNob3J0IGRiKSB7Ci0JaW50IHI9MDsKLQotCXI9KGRiKzB4NTlhMCkgLyAweDYwOwotCi0JaWYgKHIgPCAweDkxKSByZXR1cm4gMHg5MTsKLQlpZiAociA+IDB4ZWYpIHJldHVybiAweGVmOwotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW5saW5lIHNob3J0IHF1YW50aXplX2RiKHNob3J0IGRiKSB7Ci0JcmV0dXJuIGRiX3RvX3JlZ3ZhbChkYikgKiAweDYwIC0gMHg1OWEwOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yZWdpc3Rlcl93aWR0aChlbnVtIHRhczMwMDFjX3JlZ190IHIpCi17Ci0Jc3dpdGNoKHIpIHsKLQljYXNlIFRBUzMwMDFDX1JFR19NQ1I6Ci0gCWNhc2UgVEFTMzAwMUNfUkVHX1RSRUJMRToKLQljYXNlIFRBUzMwMDFDX1JFR19CQVNTOgotCQlyZXR1cm4gMTsKLQotCWNhc2UgVEFTMzAwMUNfUkVHX0RSQzoKLQkJcmV0dXJuIDI7Ci0KLQljYXNlIFRBUzMwMDFDX1JFR19NSVhFUjE6Ci0JY2FzZSBUQVMzMDAxQ19SRUdfTUlYRVIyOgotCQlyZXR1cm4gMzsKLQotCWNhc2UgVEFTMzAwMUNfUkVHX1ZPTFVNRToKLQkJcmV0dXJuIDY7Ci0KLQljYXNlIFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDA6Ci0JY2FzZSBUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQxOgotCWNhc2UgVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMjoKLQljYXNlIFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDM6Ci0JY2FzZSBUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQ0OgotCWNhc2UgVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFENToKLQljYXNlIFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDY6Ci0KLQljYXNlIFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQwOgotCWNhc2UgVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDE6Ci0JY2FzZSBUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFEMjoKLQljYXNlIFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQzOgotCWNhc2UgVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDQ6Ci0JY2FzZSBUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFENToKLQljYXNlIFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQ2OgotCQlyZXR1cm4gMTU7Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gMDsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX3dyaXRlX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLAotCQkJCWVudW0gdGFzMzAwMWNfcmVnX3QgcmVnX251bSwKLQkJCQljaGFyICpkYXRhLAotCQkJCXVpbnQgd3JpdGVfbW9kZSkKLXsKLQlpZiAocmVnX251bT09VEFTMzAwMUNfUkVHX01DUiB8fAotCSAgICByZWdfbnVtPT1UQVMzMDAxQ19SRUdfQkFTUyB8fAotCSAgICByZWdfbnVtPT1UQVMzMDAxQ19SRUdfVFJFQkxFKSB7Ci0JCXJldHVybiB0YXNfd3JpdGVfYnl0ZV9yZWdpc3Rlcigmc2VsZi0+c3VwZXIsCi0JCQkJCSAgICAgICAodWludClyZWdfbnVtLAotCQkJCQkgICAgICAgKmRhdGEsCi0JCQkJCSAgICAgICB3cml0ZV9tb2RlKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gdGFzX3dyaXRlX3JlZ2lzdGVyKCZzZWxmLT5zdXBlciwKLQkJCQkJICAodWludClyZWdfbnVtLAotCQkJCQkgIHJlZ2lzdGVyX3dpZHRoKHJlZ19udW0pLAotCQkJCQkgIGRhdGEsCi0JCQkJCSAgd3JpdGVfbW9kZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19zeW5jX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLAotCQkJZW51bSB0YXMzMDAxY19yZWdfdCByZWdfbnVtKQotewotCWlmIChyZWdfbnVtPT1UQVMzMDAxQ19SRUdfTUNSIHx8Ci0JICAgIHJlZ19udW09PVRBUzMwMDFDX1JFR19CQVNTIHx8Ci0JICAgIHJlZ19udW09PVRBUzMwMDFDX1JFR19UUkVCTEUpIHsKLQkJcmV0dXJuIHRhc19zeW5jX2J5dGVfcmVnaXN0ZXIoJnNlbGYtPnN1cGVyLAotCQkJCQkgICAgICAodWludClyZWdfbnVtLAotCQkJCQkgICAgICByZWdpc3Rlcl93aWR0aChyZWdfbnVtKSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHRhc19zeW5jX3JlZ2lzdGVyKCZzZWxmLT5zdXBlciwKLQkJCQkJICh1aW50KXJlZ19udW0sCi0JCQkJCSByZWdpc3Rlcl93aWR0aChyZWdfbnVtKSk7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19yZWFkX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLAotCQkJZW51bSB0YXMzMDAxY19yZWdfdCByZWdfbnVtLAotCQkJY2hhciAqZGF0YSwKLQkJCXVpbnQgd3JpdGVfbW9kZSkKLXsKLQlyZXR1cm4gdGFzX3JlYWRfcmVnaXN0ZXIoJnNlbGYtPnN1cGVyLAotCQkJCSAodWludClyZWdfbnVtLAotCQkJCSByZWdpc3Rlcl93aWR0aChyZWdfbnVtKSwKLQkJCQkgZGF0YSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci10YXMzMDAxY19mYXN0X2xvYWQoc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZiwgaW50IGZhc3QpCi17Ci0JaWYgKGZhc3QpCi0JCXNlbGYtPnN1cGVyLnNoYWRvd1tUQVMzMDAxQ19SRUdfTUNSXVswXSB8PSAweDgwOwotCWVsc2UKLQkJc2VsZi0+c3VwZXIuc2hhZG93W1RBUzMwMDFDX1JFR19NQ1JdWzBdICY9IDB4N2Y7Ci0JcmV0dXJuIHRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTUNSKTsKLX0KLQotc3RhdGljIHVpbnQKLXRhczMwMDFjX3N1cHBvcnRlZF9taXhlcnMoc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZikKLXsKLQlyZXR1cm4gU09VTkRfTUFTS19WT0xVTUUgfAotCQlTT1VORF9NQVNLX1BDTSB8Ci0JCVNPVU5EX01BU0tfQUxUUENNIHwKLQkJU09VTkRfTUFTS19UUkVCTEUgfAotCQlTT1VORF9NQVNLX0JBU1M7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX21peGVyX2lzX3N0ZXJlbyhzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLGludCBtaXhlcikKLXsKLQlzd2l0Y2gobWl4ZXIpIHsKLQljYXNlIFNPVU5EX01JWEVSX1ZPTFVNRToKLQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgdWludAotdGFzMzAwMWNfc3RlcmVvX21peGVycyhzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmKQotewotCXVpbnQgcj10YXMzMDAxY19zdXBwb3J0ZWRfbWl4ZXJzKHNlbGYpOwotCXVpbnQgaTsKLQkKLQlmb3IgKGk9MTsgaTxTT1VORF9NSVhFUl9OUkRFVklDRVM7IGkrKykKLQkJaWYgKHImKDE8PGkpICYmICF0YXMzMDAxY19taXhlcl9pc19zdGVyZW8oc2VsZixpKSkKLQkJCXIgJj0gfigxPDxpKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludAotdGFzMzAwMWNfZ2V0X21peGVyX2xldmVsKHN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsaW50IG1peGVyLHVpbnQgKmxldmVsKQotewotCWlmICghc2VsZikKLQkJcmV0dXJuIC0xOwotCQkKLQkqbGV2ZWw9c2VsZi0+c3VwZXIubWl4ZXJbbWl4ZXJdOwotCQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19zZXRfbWl4ZXJfbGV2ZWwoc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZixpbnQgbWl4ZXIsdWludCBsZXZlbCkKLXsKLQlpbnQgcmM7Ci0JdGFzX3NoYWRvd190ICpzaGFkb3c7Ci0KLQl1aW50IHRlbXA7Ci0JdWludCBvZmZzZXQ9MDsKLQotCWlmICghc2VsZikKLQkJcmV0dXJuIC0xOwotCQkKLQlzaGFkb3c9c2VsZi0+c3VwZXIuc2hhZG93OwotCi0JaWYgKCF0YXMzMDAxY19taXhlcl9pc19zdGVyZW8oc2VsZixtaXhlcikpCi0JCWxldmVsID0gdGFzX21vbm9fdG9fc3RlcmVvKGxldmVsKTsKLQotCXN3aXRjaChtaXhlcikgewotCWNhc2UgU09VTkRfTUlYRVJfVk9MVU1FOgotCQl0ZW1wID0gdGFzMzAwMWNfZ2Fpbi5tYXN0ZXJbbGV2ZWwmMHhmZl07Ci0JCXNoYWRvd1tUQVMzMDAxQ19SRUdfVk9MVU1FXVswXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7Ci0JCXNoYWRvd1tUQVMzMDAxQ19SRUdfVk9MVU1FXVsxXSA9ICh0ZW1wID4+IDgpICAmIDB4ZmY7Ci0JCXNoYWRvd1tUQVMzMDAxQ19SRUdfVk9MVU1FXVsyXSA9ICh0ZW1wID4+IDApICAmIDB4ZmY7Ci0JCXRlbXAgPSB0YXMzMDAxY19nYWluLm1hc3RlclsobGV2ZWw+PjgpJjB4ZmZdOwotCQlzaGFkb3dbVEFTMzAwMUNfUkVHX1ZPTFVNRV1bM10gPSAodGVtcCA+PiAxNikgJiAweGZmOwotCQlzaGFkb3dbVEFTMzAwMUNfUkVHX1ZPTFVNRV1bNF0gPSAodGVtcCA+PiA4KSAgJiAweGZmOwotCQlzaGFkb3dbVEFTMzAwMUNfUkVHX1ZPTFVNRV1bNV0gPSAodGVtcCA+PiAwKSAgJiAweGZmOwotCQlyYyA9IHRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfVk9MVU1FKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9BTFRQQ006Ci0JCS8qIHRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAxKTsgKi8KLQkJbGV2ZWwgPSB0YXNfbW9ub190b19zdGVyZW8obGV2ZWwpOwotCQl0ZW1wID0gdGFzMzAwMWNfZ2Fpbi5taXhlcltsZXZlbCYweGZmXTsKLQkJc2hhZG93W1RBUzMwMDFDX1JFR19NSVhFUjJdW29mZnNldCswXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7Ci0JCXNoYWRvd1tUQVMzMDAxQ19SRUdfTUlYRVIyXVtvZmZzZXQrMV0gPSAodGVtcCA+PiA4KSAgJiAweGZmOwotCQlzaGFkb3dbVEFTMzAwMUNfUkVHX01JWEVSMl1bb2Zmc2V0KzJdID0gKHRlbXAgPj4gMCkgICYgMHhmZjsKLQkJcmMgPSB0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX01JWEVSMik7Ci0JCS8qIHRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAwKTsgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9QQ006Ci0JCS8qIHRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAxKTsgKi8KLQkJbGV2ZWwgPSB0YXNfbW9ub190b19zdGVyZW8obGV2ZWwpOwotCQl0ZW1wID0gdGFzMzAwMWNfZ2Fpbi5taXhlcltsZXZlbCYweGZmXTsKLQkJc2hhZG93W1RBUzMwMDFDX1JFR19NSVhFUjFdW29mZnNldCswXSA9ICh0ZW1wID4+IDE2KSAmIDB4ZmY7Ci0JCXNoYWRvd1tUQVMzMDAxQ19SRUdfTUlYRVIxXVtvZmZzZXQrMV0gPSAodGVtcCA+PiA4KSAgJiAweGZmOwotCQlzaGFkb3dbVEFTMzAwMUNfUkVHX01JWEVSMV1bb2Zmc2V0KzJdID0gKHRlbXAgPj4gMCkgICYgMHhmZjsKLQkJcmMgPSB0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX01JWEVSMSk7Ci0JCS8qIHRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAwKTsgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9UUkVCTEU6Ci0JCXRlbXAgPSB0YXMzMDAxY19nYWluLnRyZWJsZVtsZXZlbCYweGZmXTsKLQkJc2hhZG93W1RBUzMwMDFDX1JFR19UUkVCTEVdWzBdPXRlbXAmMHhmZjsKLQkJcmMgPSB0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1RSRUJMRSk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfQkFTUzoKLQkJdGVtcCA9IHRhczMwMDFjX2dhaW4uYmFzc1tsZXZlbCYweGZmXTsKLQkJc2hhZG93W1RBUzMwMDFDX1JFR19CQVNTXVswXT10ZW1wJjB4ZmY7Ci0JCXJjID0gdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19CQVNTKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmMgPSAtMTsKLQkJYnJlYWs7Ci0JfQotCWlmIChyYyA8IDApCi0JCXJldHVybiByYzsKLQlzZWxmLT5zdXBlci5taXhlclttaXhlcl09bGV2ZWw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX2xlYXZlX3NsZWVwKHN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYpCi17Ci0JdW5zaWduZWQgY2hhciBtY3IgPSAoMTw8NikrKDI8PDQpKygyPDwyKTsKLQotCWlmICghc2VsZikKLQkJcmV0dXJuIC0xOwotCi0JLyogTWFrZSBzdXJlIHNvbWV0aGluZyBhbnN3ZXJzIG9uIHRoZSBpMmMgYnVzICovCi0JaWYgKHRhczMwMDFjX3dyaXRlX3JlZ2lzdGVyKHNlbGYsIFRBUzMwMDFDX1JFR19NQ1IsICZtY3IsCi0JICAgIFdSSVRFX05PUk1BTHxGT1JDRV9XUklURSkgPCAwKQotCSAgICAJcmV0dXJuIC0xOwotCi0JdGFzMzAwMWNfZmFzdF9sb2FkKHNlbGYsIDEpOwotCi0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQwKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDEpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFEMik7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQzKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDQpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFENSk7Ci0KLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMCk7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDEpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQyKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMyk7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDQpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQ1KTsKLQotCXRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAwKTsKLQotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfQkFTUyk7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19UUkVCTEUpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTUlYRVIxKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX01JWEVSMik7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19WT0xVTUUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX2VudGVyX3NsZWVwKHN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYpCi17Ci0JLyogU3R1YiBmb3Igbm93LCBidXQgSSBoYXZlIHRoZSBkZXRhaWxzIG9uIGxvdy1wb3dlciBtb2RlICovCi0JaWYgKCFzZWxmKQotCQlyZXR1cm4gLTE7IAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19zeW5jX2JpcXVhZCgJc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZiwKLQkJCXVfaW50IGNoYW5uZWwsCi0JCQl1X2ludCBmaWx0ZXIpCi17Ci0JZW51bSB0YXMzMDAxY19yZWdfdCByZWc7Ci0KLQlpZiAoY2hhbm5lbCA+PSBUQVMzMDAxQ19CSVFVQURfQ0hBTk5FTF9DT1VOVCB8fAotCSAgICBmaWx0ZXIgID49IFRBUzMwMDFDX0JJUVVBRF9GSUxURVJfQ09VTlQpIHJldHVybiAtRUlOVkFMOwotCi0JcmVnPSggY2hhbm5lbCA/IFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQwIDogVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMCApICsgZmlsdGVyOwotCi0JcmV0dXJuIHRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixyZWcpOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY193cml0ZV9iaXF1YWRfc2hhZG93KAlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLAotCQkJCXVfaW50IGNoYW5uZWwsCi0JCQkJdV9pbnQgZmlsdGVyLAotCQkJCWNvbnN0IHVuaW9uIHRhc19iaXF1YWRfdCAqYmlxdWFkKQotewotCXRhc19zaGFkb3dfdCAqc2hhZG93PXNlbGYtPnN1cGVyLnNoYWRvdzsKLQllbnVtIHRhczMwMDFjX3JlZ190IHJlZzsKLQotCWlmIChjaGFubmVsID49IFRBUzMwMDFDX0JJUVVBRF9DSEFOTkVMX0NPVU5UIHx8Ci0JICAgIGZpbHRlciAgPj0gVEFTMzAwMUNfQklRVUFEX0ZJTFRFUl9DT1VOVCkgcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWc9KCBjaGFubmVsID8gVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDAgOiBUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQwICkgKyBmaWx0ZXI7Ci0KLQlTRVRfNF8yMChzaGFkb3dbcmVnXSwgMCxiaXF1YWQtPmNvZWZmLmIwKTsKLQlTRVRfNF8yMChzaGFkb3dbcmVnXSwgMyxiaXF1YWQtPmNvZWZmLmIxKTsKLQlTRVRfNF8yMChzaGFkb3dbcmVnXSwgNixiaXF1YWQtPmNvZWZmLmIyKTsKLQlTRVRfNF8yMChzaGFkb3dbcmVnXSwgOSxiaXF1YWQtPmNvZWZmLmExKTsKLQlTRVRfNF8yMChzaGFkb3dbcmVnXSwxMixiaXF1YWQtPmNvZWZmLmEyKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY193cml0ZV9iaXF1YWQoCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsCi0JCQl1X2ludCBjaGFubmVsLAotCQkJdV9pbnQgZmlsdGVyLAotCQkJY29uc3QgdW5pb24gdGFzX2JpcXVhZF90ICpiaXF1YWQpCi17Ci0JaW50IHJjOwotCi0JcmM9dGFzMzAwMWNfd3JpdGVfYmlxdWFkX3NoYWRvdyhzZWxmLCBjaGFubmVsLCBmaWx0ZXIsIGJpcXVhZCk7Ci0JaWYgKHJjIDwgMCkgcmV0dXJuIHJjOwotCi0JcmV0dXJuIHRhczMwMDFjX3N5bmNfYmlxdWFkKHNlbGYsIGNoYW5uZWwsIGZpbHRlcik7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX3dyaXRlX2JpcXVhZF9saXN0KAlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLAotCQkJCXVfaW50IGZpbHRlcl9jb3VudCwKLQkJCQl1X2ludCBmbGFncywKLQkJCQlzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QgKmJpcXVhZHMpCi17Ci0JaW50IGk7Ci0JaW50IHJjOwotCi0JaWYgKGZsYWdzICYgVEFTX0JJUVVBRF9GQVNUX0xPQUQpIHRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLDEpOwotCi0JZm9yIChpPTA7IGk8ZmlsdGVyX2NvdW50OyBpKyspIHsKLQkJcmM9dGFzMzAwMWNfd3JpdGVfYmlxdWFkKHNlbGYsCi0JCQkJCSBiaXF1YWRzW2ldLmNoYW5uZWwsCi0JCQkJCSBiaXF1YWRzW2ldLmZpbHRlciwKLQkJCQkJICZiaXF1YWRzW2ldLmRhdGEpOwotCQlpZiAocmMgPCAwKSBicmVhazsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBUQVNfQklRVUFEX0ZBU1RfTE9BRCkgewotCQl0YXMzMDAxY19mYXN0X2xvYWQoc2VsZiwwKTsKLQotCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX0JBU1MpOwotCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1RSRUJMRSk7Ci0JCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTUlYRVIxKTsKLQkJKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19NSVhFUjIpOwotCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1ZPTFVNRSk7Ci0JfQotCi0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19yZWFkX2JpcXVhZCgJc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZiwKLQkJCXVfaW50IGNoYW5uZWwsCi0JCQl1X2ludCBmaWx0ZXIsCi0JCQl1bmlvbiB0YXNfYmlxdWFkX3QgKmJpcXVhZCkKLXsKLQl0YXNfc2hhZG93X3QgKnNoYWRvdz1zZWxmLT5zdXBlci5zaGFkb3c7Ci0JZW51bSB0YXMzMDAxY19yZWdfdCByZWc7Ci0KLQlpZiAoY2hhbm5lbCA+PSBUQVMzMDAxQ19CSVFVQURfQ0hBTk5FTF9DT1VOVCB8fAotCSAgICBmaWx0ZXIgID49IFRBUzMwMDFDX0JJUVVBRF9GSUxURVJfQ09VTlQpIHJldHVybiAtRUlOVkFMOwotCi0JcmVnPSggY2hhbm5lbCA/IFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQwIDogVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMCApICsgZmlsdGVyOwotCi0JYmlxdWFkLT5jb2VmZi5iMD1HRVRfNF8yMChzaGFkb3dbcmVnXSwgMCk7Ci0JYmlxdWFkLT5jb2VmZi5iMT1HRVRfNF8yMChzaGFkb3dbcmVnXSwgMyk7Ci0JYmlxdWFkLT5jb2VmZi5iMj1HRVRfNF8yMChzaGFkb3dbcmVnXSwgNik7Ci0JYmlxdWFkLT5jb2VmZi5hMT1HRVRfNF8yMChzaGFkb3dbcmVnXSwgOSk7Ci0JYmlxdWFkLT5jb2VmZi5hMj1HRVRfNF8yMChzaGFkb3dbcmVnXSwxMik7Ci0JCi0JcmV0dXJuIDA7CQotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19lcV9ydygJc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZiwKLQkJdV9pbnQgY21kLAotCQl1X2xvbmcgYXJnKQotewotCWludCByYzsKLQlzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QgYmlxdWFkOwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZiaXF1YWQsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpKSkgewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpZiAoY21kICYgU0lPQ19JTikgewotCQlyYz10YXMzMDAxY193cml0ZV9iaXF1YWQoc2VsZiwgYmlxdWFkLmNoYW5uZWwsIGJpcXVhZC5maWx0ZXIsICZiaXF1YWQuZGF0YSk7Ci0JCWlmIChyYyAhPSAwKSByZXR1cm4gcmM7Ci0JfQotCi0JaWYgKGNtZCAmIFNJT0NfT1VUKSB7Ci0JCXJjPXRhczMwMDFjX3JlYWRfYmlxdWFkKHNlbGYsIGJpcXVhZC5jaGFubmVsLCBiaXF1YWQuZmlsdGVyLCAmYmlxdWFkLmRhdGEpOwotCQlpZiAocmMgIT0gMCkgcmV0dXJuIHJjOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmJpcXVhZCwgc2l6ZW9mKHN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCkpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19lcV9saXN0X3J3KAlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmLAotCQkJdV9pbnQgY21kLAotCQkJdV9sb25nIGFyZykKLXsKLQlpbnQgcmM7Ci0JaW50IGZpbHRlcl9jb3VudDsKLQlpbnQgZmxhZ3M7Ci0JaW50IGksajsKLQljaGFyIHN5bmNfcmVxdWlyZWRbMl1bNl07Ci0Jc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGJpcXVhZDsKLQlzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX2xpc3RfdCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0KLQltZW1zZXQoc3luY19yZXF1aXJlZCwwLHNpemVvZihzeW5jX3JlcXVpcmVkKSk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmZpbHRlcl9jb3VudCwgJmFyZ3AtPmZpbHRlcl9jb3VudCwgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZmxhZ3MsICZhcmdwLT5mbGFncywgc2l6ZW9mKGludCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWlmIChjbWQgJiBTSU9DX0lOKSB7Ci0JfQotCi0JZm9yIChpPTA7IGkgPCBmaWx0ZXJfY291bnQ7IGkrKykgewotCQlpZiAoY29weV9mcm9tX3VzZXIoJmJpcXVhZCwgJmFyZ3AtPmJpcXVhZHNbaV0sCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCkpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCWlmIChjbWQgJiBTSU9DX0lOKSB7Ci0JCQlzeW5jX3JlcXVpcmVkW2JpcXVhZC5jaGFubmVsXVtiaXF1YWQuZmlsdGVyXT0xOwotCQkJcmM9dGFzMzAwMWNfd3JpdGVfYmlxdWFkX3NoYWRvdyhzZWxmLCBiaXF1YWQuY2hhbm5lbCwgYmlxdWFkLmZpbHRlciwgJmJpcXVhZC5kYXRhKTsKLQkJCWlmIChyYyAhPSAwKSByZXR1cm4gcmM7Ci0JCX0KLQotCQlpZiAoY21kICYgU0lPQ19PVVQpIHsKLQkJCXJjPXRhczMwMDFjX3JlYWRfYmlxdWFkKHNlbGYsIGJpcXVhZC5jaGFubmVsLCBiaXF1YWQuZmlsdGVyLCAmYmlxdWFkLmRhdGEpOwotCQkJaWYgKHJjICE9IDApIHJldHVybiByYzsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcigmYXJncC0+YmlxdWFkc1tpXSwgJmJpcXVhZCwKLQkJCQkJIHNpemVvZihzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpKSkgewotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGNtZCAmIFNJT0NfSU4pIHsKLQkJaWYgKGZsYWdzICYgVEFTX0JJUVVBRF9GQVNUX0xPQUQpIHRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLDEpOwotCQlmb3IgKGk9MDsgaTwyOyBpKyspIHsKLQkJCWZvciAoaj0wOyBqPDY7IGorKykgewotCQkJCWlmIChzeW5jX3JlcXVpcmVkW2ldW2pdKSB7Ci0JCQkJCXJjPXRhczMwMDFjX3N5bmNfYmlxdWFkKHNlbGYsIGksIGopOwotCQkJCQlpZiAocmMgPCAwKSByZXR1cm4gcmM7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChmbGFncyAmIFRBU19CSVFVQURfRkFTVF9MT0FEKSB7Ci0JCQl0YXMzMDAxY19mYXN0X2xvYWQoc2VsZiwwKTsKLQkJCS8qIG5vdyB3ZSBuZWVkIHRvIHNldCB1cCB0aGUgbWl4ZXJzIGFnYWluLAotCQkJICAgYmVjYXVzZSBsZWF2aW5nIGZhc3QgbW9kZSByZXNldHMgdGhlbS4gKi8KLQkJCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfQkFTUyk7Ci0JCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1RSRUJMRSk7Ci0JCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX01JWEVSMSk7Ci0JCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX01JWEVSMik7Ci0JCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1ZPTFVNRSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdGFzMzAwMWNfdXBkYXRlX2RyY2UoCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsCi0JCQlpbnQgZmxhZ3MsCi0JCQlzdHJ1Y3QgdGFzX2RyY2VfdCAqZHJjZSkKLXsKLQl0YXNfc2hhZG93X3QgKnNoYWRvdzsKLQlzaGFkb3c9c2VsZi0+c3VwZXIuc2hhZG93OwotCi0Jc2hhZG93W1RBUzMwMDFDX1JFR19EUkNdWzFdID0gMHhjMTsKLQotCWlmIChmbGFncyAmIFRBU19EUkNFX1RIUkVTSE9MRCkgewotCQlzZWxmLT5kcmNlX3N0YXRlLnRocmVzaG9sZD1xdWFudGl6ZV9kYihkcmNlLT50aHJlc2hvbGQpOwotCQlzaGFkb3dbVEFTMzAwMUNfUkVHX0RSQ11bMl0gPSBkYl90b19yZWd2YWwoc2VsZi0+ZHJjZV9zdGF0ZS50aHJlc2hvbGQpOwotCX0KLQotCWlmIChmbGFncyAmIFRBU19EUkNFX0VOQUJMRSkgewotCQlzZWxmLT5kcmNlX3N0YXRlLmVuYWJsZSA9IGRyY2UtPmVuYWJsZTsKLQl9Ci0KLQlpZiAoIXNlbGYtPmRyY2Vfc3RhdGUuZW5hYmxlKSB7Ci0JCXNoYWRvd1tUQVMzMDAxQ19SRUdfRFJDXVswXSA9IDB4ZjA7Ci0JfQotCi0jaWZkZWYgREVCVUdfRFJDRQotCXByaW50aygiRFJDRSBJT0NUTDogc2V0IFsgRU5BQkxFOiV4IFRIUkVTSDoleFxuIiwKLQkgICAgICAgc2VsZi0+ZHJjZV9zdGF0ZS5lbmFibGUsCi0JICAgICAgIHNlbGYtPmRyY2Vfc3RhdGUudGhyZXNob2xkKTsKLQotCXByaW50aygiRFJDRSBJT0NUTDogcmVnIFsgJTAyeCAlMDJ4IF1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBjaGFyKXNoYWRvd1tUQVMzMDAxQ19SRUdfRFJDXVswXSwKLQkgICAgICAgKHVuc2lnbmVkIGNoYXIpc2hhZG93W1RBUzMwMDFDX1JFR19EUkNdWzFdKTsKLSNlbmRpZgotCi0JcmV0dXJuIHRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZiwgVEFTMzAwMUNfUkVHX0RSQyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX2RyY2VfcncoCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsCi0JCQl1X2ludCBjbWQsCi0JCQl1X2xvbmcgYXJnKQotewotCWludCByYzsKLQlzdHJ1Y3QgdGFzX2RyY2VfY3RybF90IGRyY2VfY3RybDsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZHJjZV9jdHJsLCBhcmdwLCBzaXplb2Yoc3RydWN0IHRhc19kcmNlX2N0cmxfdCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotI2lmZGVmIERFQlVHX0RSQ0UKLQlwcmludGsoIkRSQ0UgSU9DVEw6IGlucHV0IFsgRkxBR1M6JXggRU5BQkxFOiV4IFRIUkVTSDoleFxuIiwKLQkgICAgICAgZHJjZV9jdHJsLmZsYWdzLAotCSAgICAgICBkcmNlX2N0cmwuZGF0YS5lbmFibGUsCi0JICAgICAgIGRyY2VfY3RybC5kYXRhLnRocmVzaG9sZCk7Ci0jZW5kaWYKLQotCWlmIChjbWQgJiBTSU9DX0lOKSB7Ci0JCXJjID0gdGFzMzAwMWNfdXBkYXRlX2RyY2Uoc2VsZiwgZHJjZV9jdHJsLmZsYWdzLCAmZHJjZV9jdHJsLmRhdGEpOwotCQlpZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCX0KLQotCWlmIChjbWQgJiBTSU9DX09VVCkgewotCQlpZiAoZHJjZV9jdHJsLmZsYWdzICYgVEFTX0RSQ0VfRU5BQkxFKQotCQkJZHJjZV9jdHJsLmRhdGEuZW5hYmxlID0gc2VsZi0+ZHJjZV9zdGF0ZS5lbmFibGU7Ci0KLQkJaWYgKGRyY2VfY3RybC5mbGFncyAmIFRBU19EUkNFX1RIUkVTSE9MRCkKLQkJCWRyY2VfY3RybC5kYXRhLnRocmVzaG9sZCA9IHNlbGYtPmRyY2Vfc3RhdGUudGhyZXNob2xkOwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmRyY2VfY3RybCwKLQkJCQkgc2l6ZW9mKHN0cnVjdCB0YXNfZHJjZV9jdHJsX3QpKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXRhczMwMDFjX3VwZGF0ZV9kZXZpY2VfcGFyYW1ldGVycyhzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmKQotewotCWludCBpLGo7Ci0KLQlpZiAoIXNlbGYpIHJldHVybjsKLQotCWlmIChzZWxmLT5vdXRwdXRfaWQgPT0gVEFTX09VVFBVVF9IRUFEUEhPTkVTKSB7Ci0JCXRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAxKTsKLQotCQlmb3IgKGk9MDsgaTxUQVMzMDAxQ19CSVFVQURfQ0hBTk5FTF9DT1VOVDsgaSsrKSB7Ci0JCQlmb3IgKGo9MDsgajxUQVMzMDAxQ19CSVFVQURfRklMVEVSX0NPVU5UOyBqKyspIHsKLQkJCQl0YXMzMDAxY193cml0ZV9iaXF1YWQoc2VsZiwgaSwgaiwgJnRhczMwMDFjX2VxX3VuaXR5KTsKLQkJCX0KLQkJfQotCi0JCXRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAwKTsKLQotCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX0JBU1MpOwotCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1RSRUJMRSk7Ci0JCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTUlYRVIxKTsKLQkJKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19NSVhFUjIpOwotCQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1ZPTFVNRSk7Ci0KLQkJcmV0dXJuOwotCX0KLQotCWZvciAoaT0wOyB0YXMzMDAxY19lcV9wcmVmc1tpXTsgaSsrKSB7Ci0JCXN0cnVjdCB0YXNfZXFfcHJlZl90ICplcSA9IHRhczMwMDFjX2VxX3ByZWZzW2ldOwotCi0JCWlmIChlcS0+ZGV2aWNlX2lkID09IHNlbGYtPmRldmljZV9pZCAmJgotCQkgICAgKGVxLT5vdXRwdXRfaWQgPT0gMCB8fCBlcS0+b3V0cHV0X2lkID09IHNlbGYtPm91dHB1dF9pZCkgJiYKLQkJICAgIChlcS0+c3BlYWtlcl9pZCA9PSAwIHx8IGVxLT5zcGVha2VyX2lkID09IHNlbGYtPnNwZWFrZXJfaWQpKSB7Ci0KLQkJCXRhczMwMDFjX3VwZGF0ZV9kcmNlKHNlbGYsIFRBU19EUkNFX0FMTCwgZXEtPmRyY2UpOwotCQkJdGFzMzAwMWNfd3JpdGVfYmlxdWFkX2xpc3Qoc2VsZiwgZXEtPmZpbHRlcl9jb3VudCwgVEFTX0JJUVVBRF9GQVNUX0xPQUQsIGVxLT5iaXF1YWRzKTsKLQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi10YXMzMDAxY19kZXZpY2VfY2hhbmdlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGY7Ci0Jc2VsZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90LCBjaGFuZ2UpOwotCXRhczMwMDFjX3VwZGF0ZV9kZXZpY2VfcGFyYW1ldGVycyhzZWxmKTsKLX0KLQotc3RhdGljIGludAotdGFzMzAwMWNfb3V0cHV0X2RldmljZV9jaGFuZ2UoCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsCi0JCQkJaW50IGRldmljZV9pZCwKLQkJCQlpbnQgb3V0cHV0X2lkLAotCQkJCWludCBzcGVha2VyX2lkKQotewotCXNlbGYtPmRldmljZV9pZD1kZXZpY2VfaWQ7Ci0Jc2VsZi0+b3V0cHV0X2lkPW91dHB1dF9pZDsKLQlzZWxmLT5zcGVha2VyX2lkPXNwZWFrZXJfaWQ7Ci0KLQlzY2hlZHVsZV93b3JrKCZzZWxmLT5jaGFuZ2UpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19kZXZpY2VfaW9jdGwoCXN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYsCi0JCQl1X2ludCBjbWQsCi0JCQl1X2xvbmcgYXJnKQotewotCXVpbnQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBUQVNfUkVBRF9FUToKLQljYXNlIFRBU19XUklURV9FUToKLQkJcmV0dXJuIHRhczMwMDFjX2VxX3J3KHNlbGYsIGNtZCwgYXJnKTsKLQotCWNhc2UgVEFTX1JFQURfRVFfTElTVDoKLQljYXNlIFRBU19XUklURV9FUV9MSVNUOgotCQlyZXR1cm4gdGFzMzAwMWNfZXFfbGlzdF9ydyhzZWxmLCBjbWQsIGFyZyk7Ci0KLQljYXNlIFRBU19SRUFEX0VRX0ZJTFRFUl9DT1VOVDoKLQkJcHV0X3VzZXIoVEFTMzAwMUNfQklRVUFEX0ZJTFRFUl9DT1VOVCwgYXJncCk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQVNfUkVBRF9FUV9DSEFOTkVMX0NPVU5UOgotCQlwdXRfdXNlcihUQVMzMDAxQ19CSVFVQURfQ0hBTk5FTF9DT1VOVCwgYXJncCk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQVNfUkVBRF9EUkNFOgotCWNhc2UgVEFTX1dSSVRFX0RSQ0U6Ci0JCXJldHVybiB0YXMzMDAxY19kcmNlX3J3KHNlbGYsIGNtZCwgYXJnKTsKLQotCWNhc2UgVEFTX1JFQURfRFJDRV9DQVBTOgotCQlwdXRfdXNlcihUQVNfRFJDRV9FTkFCTEUgfCBUQVNfRFJDRV9USFJFU0hPTEQsIGFyZ3ApOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVEFTX1JFQURfRFJDRV9NSU46Ci0JY2FzZSBUQVNfUkVBRF9EUkNFX01BWDogewotCQlzdHJ1Y3QgdGFzX2RyY2VfY3RybF90IGRyY2VfY3RybDsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoJmRyY2VfY3RybCwgYXJncCwKLQkJCQkgICBzaXplb2Yoc3RydWN0IHRhc19kcmNlX2N0cmxfdCkpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCWlmIChkcmNlX2N0cmwuZmxhZ3MgJiBUQVNfRFJDRV9USFJFU0hPTEQpIHsKLQkJCWlmIChjbWQgPT0gVEFTX1JFQURfRFJDRV9NSU4pIHsKLQkJCQlkcmNlX2N0cmwuZGF0YS50aHJlc2hvbGQ9LTM2PDw4OwotCQkJfSBlbHNlIHsKLQkJCQlkcmNlX2N0cmwuZGF0YS50aHJlc2hvbGQ9LTY8PDg7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZkcmNlX2N0cmwsCi0JCQkJIHNpemVvZihzdHJ1Y3QgdGFzX2RyY2VfY3RybF90KSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JfQotCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY19pbml0X21peGVyKHN0cnVjdCB0YXMzMDAxY19kYXRhX3QgKnNlbGYpCi17Ci0JdW5zaWduZWQgY2hhciBtY3IgPSAoMTw8NikrKDI8PDQpKygyPDwyKTsKLQotCS8qIE1ha2Ugc3VyZSBzb21ldGhpbmcgYW5zd2VycyBvbiB0aGUgaTJjIGJ1cyAqLwotCWlmICh0YXMzMDAxY193cml0ZV9yZWdpc3RlcihzZWxmLCBUQVMzMDAxQ19SRUdfTUNSLCAmbWNyLAotCSAgICBXUklURV9OT1JNQUx8Rk9SQ0VfV1JJVEUpIDwgMCkKLQkJcmV0dXJuIC0xOwotCi0JdGFzMzAwMWNfZmFzdF9sb2FkKHNlbGYsIDEpOwotCi0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQwKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDEpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFEMik7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQzKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDQpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFENSk7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQ2KTsKLQotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQwKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMSk7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDIpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQzKTsKLQkodm9pZCl0YXMzMDAxY19zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFENCk7Ci0JKHZvaWQpdGFzMzAwMWNfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDUpOwotCSh2b2lkKXRhczMwMDFjX3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQ2KTsKLQotCXRhczMwMDFjX2Zhc3RfbG9hZChzZWxmLCAwKTsKLQotCXRhczMwMDFjX3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9WT0xVTUUsIFZPTF9ERUZBVUxUPDw4IHwgVk9MX0RFRkFVTFQpOwotCXRhczMwMDFjX3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9QQ00sIElOUFVUX0RFRkFVTFQ8PDggfCBJTlBVVF9ERUZBVUxUKTsKLQl0YXMzMDAxY19zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfQUxUUENNLCAwKTsKLQotCXRhczMwMDFjX3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9CQVNTLCBCQVNTX0RFRkFVTFQpOwotCXRhczMwMDFjX3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9UUkVCTEUsIFRSRUJMRV9ERUZBVUxUKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDAxY191bmluaXRfbWl4ZXIoc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZikKLXsKLQl0YXMzMDAxY19zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfVk9MVU1FLCAwKTsKLQl0YXMzMDAxY19zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfUENNLCAgICAwKTsKLQl0YXMzMDAxY19zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfQUxUUENNLCAwKTsKLQotCXRhczMwMDFjX3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9CQVNTLCAgIDApOwotCXRhczMwMDFjX3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9UUkVCTEUsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDFjX2luaXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgdGFzMzAwMWNfZGF0YV90ICpzZWxmOwotCXNpemVfdCBzeiA9IHNpemVvZigqc2VsZikgKyAoVEFTMzAwMUNfUkVHX01BWCpzaXplb2YodGFzX3NoYWRvd190KSk7Ci0JaW50IGksIGo7Ci0KLQlzZWxmID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZWxmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNlbGYtPnN1cGVyLmNsaWVudCA9IGNsaWVudDsKLQlzZWxmLT5zdXBlci5zaGFkb3cgPSAodGFzX3NoYWRvd190ICopKHNlbGYrMSk7Ci0Jc2VsZi0+b3V0cHV0X2lkID0gVEFTX09VVFBVVF9IRUFEUEhPTkVTOwotCi0JZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgc2VsZik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVEFTMzAwMUNfQklRVUFEX0NIQU5ORUxfQ09VTlQ7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IFRBUzMwMDFDX0JJUVVBRF9GSUxURVJfQ09VTlQ7IGorKykKLQkJCXRhczMwMDFjX3dyaXRlX2JpcXVhZF9zaGFkb3coc2VsZiwgaSwgaiwKLQkJCQkmdGFzMzAwMWNfZXFfdW5pdHkpOwotCi0JSU5JVF9XT1JLKCZzZWxmLT5jaGFuZ2UsIHRhczMwMDFjX2RldmljZV9jaGFuZ2VfaGFuZGxlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkCi10YXMzMDAxY191bmluaXQoc3RydWN0IHRhczMwMDFjX2RhdGFfdCAqc2VsZikKLXsKLQl0YXMzMDAxY191bmluaXRfbWl4ZXIoc2VsZik7Ci0Ja2ZyZWUoc2VsZik7Ci19Ci0KLXN0cnVjdCB0YXNfZHJpdmVyX2hvb2tzX3QgdGFzMzAwMWNfaG9va3MgPSB7Ci0JLmluaXQJCQk9ICh0YXNfaG9va19pbml0X3QpdGFzMzAwMWNfaW5pdCwKLQkucG9zdF9pbml0CQk9ICh0YXNfaG9va19wb3N0X2luaXRfdCl0YXMzMDAxY19pbml0X21peGVyLAotCS51bmluaXQJCQk9ICh0YXNfaG9va191bmluaXRfdCl0YXMzMDAxY191bmluaXQsCi0JLmdldF9taXhlcl9sZXZlbAk9ICh0YXNfaG9va19nZXRfbWl4ZXJfbGV2ZWxfdCl0YXMzMDAxY19nZXRfbWl4ZXJfbGV2ZWwsCi0JLnNldF9taXhlcl9sZXZlbAk9ICh0YXNfaG9va19zZXRfbWl4ZXJfbGV2ZWxfdCl0YXMzMDAxY19zZXRfbWl4ZXJfbGV2ZWwsCi0JLmVudGVyX3NsZWVwCQk9ICh0YXNfaG9va19lbnRlcl9zbGVlcF90KXRhczMwMDFjX2VudGVyX3NsZWVwLAotCS5sZWF2ZV9zbGVlcAkJPSAodGFzX2hvb2tfbGVhdmVfc2xlZXBfdCl0YXMzMDAxY19sZWF2ZV9zbGVlcCwKLQkuc3VwcG9ydGVkX21peGVycwk9ICh0YXNfaG9va19zdXBwb3J0ZWRfbWl4ZXJzX3QpdGFzMzAwMWNfc3VwcG9ydGVkX21peGVycywKLQkubWl4ZXJfaXNfc3RlcmVvCT0gKHRhc19ob29rX21peGVyX2lzX3N0ZXJlb190KXRhczMwMDFjX21peGVyX2lzX3N0ZXJlbywKLQkuc3RlcmVvX21peGVycwkJPSAodGFzX2hvb2tfc3RlcmVvX21peGVyc190KXRhczMwMDFjX3N0ZXJlb19taXhlcnMsCi0JLm91dHB1dF9kZXZpY2VfY2hhbmdlCT0gKHRhc19ob29rX291dHB1dF9kZXZpY2VfY2hhbmdlX3QpdGFzMzAwMWNfb3V0cHV0X2RldmljZV9jaGFuZ2UsCi0JLmRldmljZV9pb2N0bAkJPSAodGFzX2hvb2tfZGV2aWNlX2lvY3RsX3QpdGFzMzAwMWNfZGV2aWNlX2lvY3RsCi19OwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDFjLmggYi9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwMWMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzY2MGRhMy4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwMWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0gKiBIZWFkZXIgZmlsZSBmb3IgdGhlIGkyYy9pMnMgYmFzZWQgVEEzMDAxYyBzb3VuZCBjaGlwIHVzZWQKLSAqIG9uIHNvbWUgQXBwbGUgaGFyZHdhcmUuIEFsc28ga25vd24gYXMgInR1bWJsZXIiLgotICoKLSAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiAgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBXcml0dGVuIGJ5IENocmlzdG9waGVyIEMuIENoaW1lbGlzIDxjaHJpc0BkZWJpYW4ub3JnPgotICovCi0KLSNpZm5kZWYgX1RBUzMwMDFDX0hfCi0jZGVmaW5lIF9UQVMzMDAxQ19IXwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQotI2luY2x1ZGUgInRhc19jb21tb24uaCIKLSNpbmNsdWRlICJ0YXNfZXFfcHJlZnMuaCIKLQotLyoKLSAqIE1hY3JvcyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHJlZ2lzdGVycyB0aGF0IHdlIHdyaXRlIHRvCi0gKiB3aGVuIHNldHRpbmcgdGhlIHZhcmlvdXMgdmFsdWVzLgotICovCi0KLSNkZWZpbmUgVEFTMzAwMUNfVkVSU0lPTgkiMC4zIgotI2RlZmluZSBUQVMzMDAxQ19EQVRFCSAgICAgICAgIjIwMDExMjE0IgotCi0jZGVmaW5lIEkyQ19EUklWRVJOQU1FX1RBUzMwMDFDICJUQVMzMDAxYyBkcml2ZXIgViAiIFRBUzMwMDFDX1ZFUlNJT04KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1RBUzMwMDFDICAgKEkyQ19EUklWRVJJRF9UQVNfQkFTRSswKQotCi1leHRlcm4gIHN0cnVjdCB0YXNfZHJpdmVyX2hvb2tzX3QgdGFzMzAwMWNfaG9va3M7Ci1leHRlcm4gc3RydWN0IHRhc19nYWluX3QgdGFzMzAwMWNfZ2FpbjsKLWV4dGVybiBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCAqdGFzMzAwMWNfZXFfcHJlZnNbXTsKLQotZW51bSB0YXMzMDAxY19yZWdfdCB7Ci0gIFRBUzMwMDFDX1JFR19NQ1IgICAgICAgICAgICAgICAgICAgID0gMHgwMSwKLSAgVEFTMzAwMUNfUkVHX0RSQyAgICAgICAgICAgICAgICAgICAgPSAweDAyLAotCi0gIFRBUzMwMDFDX1JFR19WT0xVTUUgICAgICAgICAgICAgICAgID0gMHgwNCwKLSAgVEFTMzAwMUNfUkVHX1RSRUJMRSAgICAgICAgICAgICAgICAgPSAweDA1LAotICBUQVMzMDAxQ19SRUdfQkFTUyAgICAgICAgICAgICAgICAgICA9IDB4MDYsCi0gIFRBUzMwMDFDX1JFR19NSVhFUjEgICAgICAgICAgICAgICAgID0gMHgwNywKLSAgVEFTMzAwMUNfUkVHX01JWEVSMiAgICAgICAgICAgICAgICAgPSAweDA4LAotCi0gIFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDAgICAgICAgICAgID0gMHgwYSwKLSAgVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFEMSAgICAgICAgICAgPSAweDBiLAotICBUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQyICAgICAgICAgICA9IDB4MGMsCi0gIFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDMgICAgICAgICAgID0gMHgwZCwKLSAgVEFTMzAwMUNfUkVHX0xFRlRfQklRVUFENCAgICAgICAgICAgPSAweDBlLAotICBUQVMzMDAxQ19SRUdfTEVGVF9CSVFVQUQ1ICAgICAgICAgICA9IDB4MGYsCi0gIFRBUzMwMDFDX1JFR19MRUZUX0JJUVVBRDYgICAgICAgICAgID0gMHgxMCwKLSAgCi0gIFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQwICAgICAgICAgID0gMHgxMywKLSAgVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDEgICAgICAgICAgPSAweDE0LAotICBUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFEMiAgICAgICAgICA9IDB4MTUsCi0gIFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQzICAgICAgICAgID0gMHgxNiwKLSAgVEFTMzAwMUNfUkVHX1JJR0hUX0JJUVVBRDQgICAgICAgICAgPSAweDE3LAotICBUQVMzMDAxQ19SRUdfUklHSFRfQklRVUFENSAgICAgICAgICA9IDB4MTgsCi0gIFRBUzMwMDFDX1JFR19SSUdIVF9CSVFVQUQ2ICAgICAgICAgID0gMHgxOSwKLQotICBUQVMzMDAxQ19SRUdfTUFYICAgICAgICAgICAgICAgICAgICA9IDB4MjAKLX07Ci0KLSNlbmRpZiAvKiBfVEFTMzAwMUNfSF8gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDAxY190YWJsZXMuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDAxY190YWJsZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc2OGZhOS4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwMWNfdGFibGVzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzUgKzAsMCBAQAotI2luY2x1ZGUgInRhc19jb21tb24uaCIKLSNpbmNsdWRlICJ0YXNfZXFfcHJlZnMuaCIKLQotc3RhdGljIHN0cnVjdCB0YXNfZHJjZV90IGVxcF8wZV8yXzFfZHJjZSA9IHsKLSAgLmVuYWJsZSAgICAgPSAxLAotICAuYWJvdmUgICAgICA9IHsgLnZhbCA9IDMuMCAqICgxPDw4KSwgLmV4cGFuZCA9IDAgfSwKLSAgLmJlbG93ICAgICAgPSB7IC52YWwgPSAxLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC50aHJlc2hvbGQgID0gLTE1LjMzICAqICgxPDw4KSwKLSAgLmVuZXJneSAgICAgPSAyLjQgICAgICogKDE8PDEyKSwKLSAgLmF0dGFjayAgICAgPSAwLjAxMyAgICogKDE8PDEyKSwKLSAgLmRlY2F5ICAgICAgPSAwLjIxMiAgICogKDE8PDEyKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QgZXFwXzBlXzJfMV9iaXF1YWRzW109ewotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDAsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZDQUQzLCAweEUwNkE1OCwgMHgwRkNBRDMsIDB4RTA2QjA5LCAweDBGOTY1NyB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAxLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDA0MTczMSwgMHgwODJFNjMsIDB4MDQxNzMxLCAweEZEOEQwOCwgMHgwMkNGQkQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMiwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkZEQzcsIDB4RTA1MjRDLCAweDBGQkZBQSwgMHhFMDUyNEMsIDB4MEZCRDcyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDMsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEYzRDM1LCAweEUyMjhDQSwgMHgwRUM3QjIsIDB4RTIyOENBLCAweDBFMDRFOCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA0LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGQ0VCRiwgMHhFMTgxQzIsIDB4MEYyNjU2LCAweEUxODFDMiwgMHgwRUY1MTYgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRUM0MTcsIDB4MDczRTIyLCAweDBCMDYzMywgMHgwNzNFMjIsIDB4MDlDQTRBIH0gfSB9LAotCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkNBRDMsIDB4RTA2QTU4LCAweDBGQ0FEMywgMHhFMDZCMDksIDB4MEY5NjU3IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDEsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MDQxNzMxLCAweDA4MkU2MywgMHgwNDE3MzEsIDB4RkQ4RDA4LCAweDAyQ0ZCRCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAyLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGRkRDNywgMHhFMDUyNEMsIDB4MEZCRkFBLCAweEUwNTI0QywgMHgwRkJENzIgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMywgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRjNEMzUsIDB4RTIyOENBLCAweDBFQzdCMiwgMHhFMjI4Q0EsIDB4MEUwNEU4IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDQsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZDRUJGLCAweEUxODFDMiwgMHgwRjI2NTYsIDB4RTE4MUMyLCAweDBFRjUxNiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA1LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBFQzQxNywgMHgwNzNFMjIsIDB4MEIwNjMzLCAweDA3M0UyMiwgMHgwOUNBNEEgfSB9IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19lcV9wcmVmX3QgZXFwXzBlXzJfMSA9IHsKLSAgLnNhbXBsZV9yYXRlICAgPSA0NDEwMCwKLSAgLmRldmljZV9pZCAgICAgPSAweDBlLAotICAub3V0cHV0X2lkICAgICA9IFRBU19PVVRQVVRfRVhURVJOQUxfU1BLUiwKLSAgLnNwZWFrZXJfaWQgICAgPSAweDAxLAotCi0gIC5kcmNlICAgICAgICAgID0gJmVxcF8wZV8yXzFfZHJjZSwKLQotICAuZmlsdGVyX2NvdW50ICA9IDEyLAotICAuYmlxdWFkcyAgICAgICA9IGVxcF8wZV8yXzFfYmlxdWFkcwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2RyY2VfdCBlcXBfMTBfMV8wX2RyY2U9ewotICAuZW5hYmxlICAgICA9IDEsCi0gIC5hYm92ZSAgICAgID0geyAudmFsID0gMy4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAuYmVsb3cgICAgICA9IHsgLnZhbCA9IDEuMCAqICgxPDw4KSwgLmV4cGFuZCA9IDAgfSwKLSAgLnRocmVzaG9sZCAgPSAtMTIuNDYgICogKDE8PDgpLAotICAuZW5lcmd5ICAgICA9IDIuNCAgICAgKiAoMTw8MTIpLAotICAuYXR0YWNrICAgICA9IDAuMDEzICAgKiAoMTw8MTIpLAotICAuZGVjYXkgICAgICA9IDAuMjEyICAgKiAoMTw8MTIpLAotfTsKLQotc3RhdGljIHN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCBlcXBfMTBfMV8wX2JpcXVhZHNbXT17Ci0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRjRBMTIsIDB4RTE2QkRBLCAweDBGNEExMiwgMHhFMTczRjAsIDB4MEU5QzNBIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDEsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MDJERDU0LCAweDA1QkFBOCwgMHgwMkRENTQsIDB4RjgwMDFELCAweDAzNzUzMiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAyLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBFMkZDNywgMHhFNEQ1REMsIDB4MEQ3NDc3LCAweEU0RDVEQywgMHgwQkE0M0YgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMywgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRTc4OTksIDB4RTY3Q0NBLCAweDBEMEU5MywgMHhFNjdDQ0EsIDB4MEI4NzJEIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDQsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MTAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA1LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDEwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAgfSB9IH0sCi0KLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGNEExMiwgMHhFMTZCREEsIDB4MEY0QTEyLCAweEUxNzNGMCwgMHgwRTlDM0EgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwMkRENTQsIDB4MDVCQUE4LCAweDAyREQ1NCwgMHhGODAwMUQsIDB4MDM3NTMyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEUyRkM3LCAweEU0RDVEQywgMHgwRDc0NzcsIDB4RTRENURDLCAweDBCQTQzRiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBFNzg5OSwgMHhFNjdDQ0EsIDB4MEQwRTkzLCAweEU2N0NDQSwgMHgwQjg3MkQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MTAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCB9IH0gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCBlcXBfMTBfMV8wID0gewotICAuc2FtcGxlX3JhdGUgICA9IDQ0MTAwLAotICAuZGV2aWNlX2lkICAgICA9IDB4MTAsCi0gIC5vdXRwdXRfaWQgICAgID0gVEFTX09VVFBVVF9JTlRFUk5BTF9TUEtSLAotICAuc3BlYWtlcl9pZCAgICA9IDB4MDAsCi0KLSAgLmRyY2UgICAgICAgICAgPSAmZXFwXzEwXzFfMF9kcmNlLAotCi0gIC5maWx0ZXJfY291bnQgID0gMTIsCi0gIC5iaXF1YWRzICAgICAgID0gZXFwXzEwXzFfMF9iaXF1YWRzCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIHN0cnVjdCB0YXNfZHJjZV90IGVxcF8xNV8yXzFfZHJjZT17Ci0gIC5lbmFibGUgICAgID0gMSwKLSAgLmFib3ZlICAgICAgPSB7IC52YWwgPSAzLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC5iZWxvdyAgICAgID0geyAudmFsID0gMS4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAudGhyZXNob2xkICA9IC0xNS4zMyAgKiAoMTw8OCksCi0gIC5lbmVyZ3kgICAgID0gMi40ICAgICAqICgxPDwxMiksCi0gIC5hdHRhY2sgICAgID0gMC4wMTMgICAqICgxPDwxMiksCi0gIC5kZWNheSAgICAgID0gMC4yMTIgICAqICgxPDwxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGVxcF8xNV8yXzFfYmlxdWFkc1tdPXsKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGRTE0MywgMHhFMDUyMDQsIDB4MEZDQ0M1LCAweEUwNTI2NiwgMHgwRkFFNkIgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxMDIzODMsIDB4RTAzQTAzLCAweDBGQTMyNSwgMHhFMDNBMDMsIDB4MEZDNkE4IH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZGMkFCLCAweEUwNjI4NSwgMHgwRkIyMEEsIDB4RTA2Mjg1LCAweDBGQTRCNSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGNTQ0RCwgMHhFMzU5NzEsIDB4MEQ4RjNBLCAweEUzNTk3MSwgMHgwQ0UzODggfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxM0UxRDMsIDB4RjNFQ0I1LCAweDA0MjIyNywgMHhGM0VDQjUsIDB4MDgwM0ZBIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEFDMTE5LCAweDAzNDE4MSwgMHgwNzhBQjEsIDB4MDM0MTgxLCAweDAyNEJDQSB9IH0gfSwKLQotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDAsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZFMTQzLCAweEUwNTIwNCwgMHgwRkNDQzUsIDB4RTA1MjY2LCAweDBGQUU2QiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAxLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDEwMjM4MywgMHhFMDNBMDMsIDB4MEZBMzI1LCAweEUwM0EwMywgMHgwRkM2QTggfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMiwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkYyQUIsIDB4RTA2Mjg1LCAweDBGQjIwQSwgMHhFMDYyODUsIDB4MEZBNEI1IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDMsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEY1NDRELCAweEUzNTk3MSwgMHgwRDhGM0EsIDB4RTM1OTcxLCAweDBDRTM4OCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA0LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDEzRTFEMywgMHhGM0VDQjUsIDB4MDQyMjI3LCAweEYzRUNCNSwgMHgwODAzRkEgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwQUMxMTksIDB4MDM0MTgxLCAweDA3OEFCMSwgMHgwMzQxODEsIDB4MDI0QkNBIH0gfSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCB0YXNfZXFfcHJlZl90IGVxcF8xNV8yXzEgPSB7Ci0gIC5zYW1wbGVfcmF0ZSAgID0gNDQxMDAsCi0gIC5kZXZpY2VfaWQgICAgID0gMHgxNSwKLSAgLm91dHB1dF9pZCAgICAgPSBUQVNfT1VUUFVUX0VYVEVSTkFMX1NQS1IsCi0gIC5zcGVha2VyX2lkICAgID0gMHgwMSwKLQotICAuZHJjZSAgICAgICAgICA9ICZlcXBfMTVfMl8xX2RyY2UsCi0KLSAgLmZpbHRlcl9jb3VudCAgPSAxMiwKLSAgLmJpcXVhZHMgICAgICAgPSBlcXBfMTVfMl8xX2JpcXVhZHMKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1zdGF0aWMgc3RydWN0IHRhc19kcmNlX3QgZXFwXzE1XzFfMF9kcmNlPXsKLSAgLmVuYWJsZSAgICAgPSAxLAotICAuYWJvdmUgICAgICA9IHsgLnZhbCA9IDMuMCAqICgxPDw4KSwgLmV4cGFuZCA9IDAgfSwKLSAgLmJlbG93ICAgICAgPSB7IC52YWwgPSAxLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC50aHJlc2hvbGQgID0gMC4wICAgICAqICgxPDw4KSwKLSAgLmVuZXJneSAgICAgPSAyLjQgICAgICogKDE8PDEyKSwKLSAgLmF0dGFjayAgICAgPSAwLjAxMyAgICogKDE8PDEyKSwKLSAgLmRlY2F5ICAgICAgPSAwLjIxMiAgICogKDE8PDEyKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QgZXFwXzE1XzFfMF9iaXF1YWRzW109ewotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDAsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZBRDA4LCAweEUwQTVFRiwgMHgwRkFEMDgsIDB4RTBBNzlELCAweDBGNUJCRSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAxLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDA0QjM4RCwgMHgwOTY3MUIsIDB4MDRCMzhELCAweDAwMEY3MSwgMHgwMkJFQzUgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMiwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkREMzIsIDB4RTBBNTZGLCAweDBGOEE2OSwgMHhFMEE1NkYsIDB4MEY2NzlDIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDMsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZEMjg0LCAweEUxMzVGQiwgMHgwRjIxNjEsIDB4RTEzNUZCLCAweDBFRjNFNSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA0LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBFODFCMSwgMHhFNjI4M0YsIDB4MENFNDlELCAweEU2MjgzRiwgMHgwQjY2NEYgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRjJENjIsIDB4RTk4Nzk3LCAweDBEMUUxOSwgMHhFOTg3OTcsIDB4MEM0QjdCIH0gfSB9LAotCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkFEMDgsIDB4RTBBNUVGLCAweDBGQUQwOCwgMHhFMEE3OUQsIDB4MEY1QkJFIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDEsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MDRCMzhELCAweDA5NjcxQiwgMHgwNEIzOEQsIDB4MDAwRjcxLCAweDAyQkVDNSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAyLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGREQzMiwgMHhFMEE1NkYsIDB4MEY4QTY5LCAweEUwQTU2RiwgMHgwRjY3OUMgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMywgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkQyODQsIDB4RTEzNUZCLCAweDBGMjE2MSwgMHhFMTM1RkIsIDB4MEVGM0U1IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDQsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEU4MUIxLCAweEU2MjgzRiwgMHgwQ0U0OUQsIDB4RTYyODNGLCAweDBCNjY0RiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA1LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGMkQ2MiwgMHhFOTg3OTcsIDB4MEQxRTE5LCAweEU5ODc5NywgMHgwQzRCN0IgfSB9IH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19lcV9wcmVmX3QgZXFwXzE1XzFfMCA9IHsKLSAgLnNhbXBsZV9yYXRlICAgPSA0NDEwMCwKLSAgLmRldmljZV9pZCAgICAgPSAweDE1LAotICAub3V0cHV0X2lkICAgICA9IFRBU19PVVRQVVRfSU5URVJOQUxfU1BLUiwKLSAgLnNwZWFrZXJfaWQgICAgPSAweDAwLAotCi0gIC5kcmNlICAgICAgICAgID0gJmVxcF8xNV8xXzBfZHJjZSwKLQotICAuZmlsdGVyX2NvdW50ICA9IDEyLAotICAuYmlxdWFkcyAgICAgICA9IGVxcF8xNV8xXzBfYmlxdWFkcwotfTsKLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2RyY2VfdCBlcXBfMGZfMl8xX2RyY2U9ewotICAuZW5hYmxlICAgICA9IDEsCi0gIC5hYm92ZSAgICAgID0geyAudmFsID0gMy4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAuYmVsb3cgICAgICA9IHsgLnZhbCA9IDEuMCAqICgxPDw4KSwgLmV4cGFuZCA9IDAgfSwKLSAgLnRocmVzaG9sZCAgPSAtMTUuMzMgICogKDE8PDgpLAotICAuZW5lcmd5ICAgICA9IDIuNCAgICAgKiAoMTw8MTIpLAotICAuYXR0YWNrICAgICA9IDAuMDEzICAgKiAoMTw8MTIpLAotICAuZGVjYXkgICAgICA9IDAuMjEyICAgKiAoMTw8MTIpLAotfTsKLQotc3RhdGljIHN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCBlcXBfMGZfMl8xX2JpcXVhZHNbXT17Ci0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkUxNDMsIDB4RTA1MjA0LCAweDBGQ0NDNSwgMHhFMDUyNjYsIDB4MEZBRTZCIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDEsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MTAyMzgzLCAweEUwM0EwMywgMHgwRkEzMjUsIDB4RTAzQTAzLCAweDBGQzZBOCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAyLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGRjJBQiwgMHhFMDYyODUsIDB4MEZCMjBBLCAweEUwNjI4NSwgMHgwRkE0QjUgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMywgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRjU0NEQsIDB4RTM1OTcxLCAweDBEOEYzQSwgMHhFMzU5NzEsIDB4MENFMzg4IH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDQsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MTNFMUQzLCAweEYzRUNCNSwgMHgwNDIyMjcsIDB4RjNFQ0I1LCAweDA4MDNGQSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA1LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBBQzExOSwgMHgwMzQxODEsIDB4MDc4QUIxLCAweDAzNDE4MSwgMHgwMjRCQ0EgfSB9IH0sCi0KLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGRTE0MywgMHhFMDUyMDQsIDB4MEZDQ0M1LCAweEUwNTI2NiwgMHgwRkFFNkIgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxMDIzODMsIDB4RTAzQTAzLCAweDBGQTMyNSwgMHhFMDNBMDMsIDB4MEZDNkE4IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZGMkFCLCAweEUwNjI4NSwgMHgwRkIyMEEsIDB4RTA2Mjg1LCAweDBGQTRCNSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGNTQ0RCwgMHhFMzU5NzEsIDB4MEQ4RjNBLCAweEUzNTk3MSwgMHgwQ0UzODggfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxM0UxRDMsIDB4RjNFQ0I1LCAweDA0MjIyNywgMHhGM0VDQjUsIDB4MDgwM0ZBIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEFDMTE5LCAweDAzNDE4MSwgMHgwNzhBQjEsIDB4MDM0MTgxLCAweDAyNEJDQSB9IH0gfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCBlcXBfMGZfMl8xID0gewotICAuc2FtcGxlX3JhdGUgICA9IDQ0MTAwLAotICAuZGV2aWNlX2lkICAgICA9IDB4MGYsCi0gIC5vdXRwdXRfaWQgICAgID0gVEFTX09VVFBVVF9FWFRFUk5BTF9TUEtSLAotICAuc3BlYWtlcl9pZCAgICA9IDB4MDEsCi0KLSAgLmRyY2UgICAgICAgICAgPSAmZXFwXzBmXzJfMV9kcmNlLAotCi0gIC5maWx0ZXJfY291bnQgID0gMTIsCi0gIC5iaXF1YWRzICAgICAgID0gZXFwXzBmXzJfMV9iaXF1YWRzCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIHN0cnVjdCB0YXNfZHJjZV90IGVxcF8wZl8xXzBfZHJjZT17Ci0gIC5lbmFibGUgICAgID0gMSwKLSAgLmFib3ZlICAgICAgPSB7IC52YWwgPSAzLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC5iZWxvdyAgICAgID0geyAudmFsID0gMS4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAudGhyZXNob2xkICA9IC0xNS4zMyAgKiAoMTw8OCksCi0gIC5lbmVyZ3kgICAgID0gMi40ICAgICAqICgxPDwxMiksCi0gIC5hdHRhY2sgICAgID0gMC4wMTMgICAqICgxPDwxMiksCi0gIC5kZWNheSAgICAgID0gMC4yMTIgICAqICgxPDwxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGVxcF8wZl8xXzBfYmlxdWFkc1tdPXsKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGQ0FEMywgMHhFMDZBNTgsIDB4MEZDQUQzLCAweEUwNkIwOSwgMHgwRjk2NTcgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNDE3MzEsIDB4MDgyRTYzLCAweDA0MTczMSwgMHhGRDhEMDgsIDB4MDJDRkJEIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZGREM3LCAweEUwNTI0QywgMHgwRkJGQUEsIDB4RTA1MjRDLCAweDBGQkQ3MiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGM0QzNSwgMHhFMjI4Q0EsIDB4MEVDN0IyLCAweEUyMjhDQSwgMHgwRTA0RTggfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkNFQkYsIDB4RTE4MUMyLCAweDBGMjY1NiwgMHhFMTgxQzIsIDB4MEVGNTE2IH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEVDNDE3LCAweDA3M0UyMiwgMHgwQjA2MzMsIDB4MDczRTIyLCAweDA5Q0E0QSB9IH0gfSwKLQotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDAsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEZDQUQzLCAweEUwNkE1OCwgMHgwRkNBRDMsIDB4RTA2QjA5LCAweDBGOTY1NyB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAxLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDA0MTczMSwgMHgwODJFNjMsIDB4MDQxNzMxLCAweEZEOEQwOCwgMHgwMkNGQkQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMiwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRkZEQzcsIDB4RTA1MjRDLCAweDBGQkZBQSwgMHhFMDUyNEMsIDB4MEZCRDcyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDMsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MEYzRDM1LCAweEUyMjhDQSwgMHgwRUM3QjIsIDB4RTIyOENBLCAweDBFMDRFOCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA0LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBGQ0VCRiwgMHhFMTgxQzIsIDB4MEYyNjU2LCAweEUxODFDMiwgMHgwRUY1MTYgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwRUM0MTcsIDB4MDczRTIyLCAweDBCMDYzMywgMHgwNzNFMjIsIDB4MDlDQTRBIH0gfSB9LAotfTsKLQotc3RhdGljIHN0cnVjdCB0YXNfZXFfcHJlZl90IGVxcF8wZl8xXzAgPSB7Ci0gIC5zYW1wbGVfcmF0ZSAgID0gNDQxMDAsCi0gIC5kZXZpY2VfaWQgICAgID0gMHgwZiwKLSAgLm91dHB1dF9pZCAgICAgPSBUQVNfT1VUUFVUX0lOVEVSTkFMX1NQS1IsCi0gIC5zcGVha2VyX2lkICAgID0gMHgwMCwKLQotICAuZHJjZSAgICAgICAgICA9ICZlcXBfMGZfMV8wX2RyY2UsCi0KLSAgLmZpbHRlcl9jb3VudCAgPSAxMiwKLSAgLmJpcXVhZHMgICAgICAgPSBlcXBfMGZfMV8wX2JpcXVhZHMKLX07Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotCi1zdGF0aWMgdWludCB0YXMzMDAxY19tYXN0ZXJfdGFiW109ewotCSAgICAgICAweDAsICAgICAgIDB4NzUsICAgICAgIDB4OWMsICAgICAgIDB4YmIsCi0JICAgICAgMHhkYiwgICAgICAgMHhmYiwgICAgICAweDExZSwgICAgICAweDE0MywKLQkgICAgIDB4MTZiLCAgICAgIDB4MTk2LCAgICAgIDB4MWMzLCAgICAgIDB4MWY1LAotCSAgICAgMHgyMjksICAgICAgMHgyNjMsICAgICAgMHgyOWYsICAgICAgMHgyZTEsCi0JICAgICAweDMyOCwgICAgICAweDM3MywgICAgICAweDNjNSwgICAgICAweDQxYiwKLQkgICAgIDB4NDc4LCAgICAgIDB4NGRjLCAgICAgIDB4NTQ3LCAgICAgIDB4NWI4LAotCSAgICAgMHg2MzMsICAgICAgMHg2YjUsICAgICAgMHg3NDAsICAgICAgMHg3ZDUsCi0JICAgICAweDg3MywgICAgICAweDkxYywgICAgICAweDlkMiwgICAgICAweGE5MiwKLQkgICAgIDB4YjVlLCAgICAgIDB4YzM5LCAgICAgIDB4ZDIyLCAgICAgIDB4ZTE5LAotCSAgICAgMHhmMjAsICAgICAweDEwMzcsICAgICAweDExNjEsICAgICAweDEyOWUsCi0JICAgIDB4MTNlZCwgICAgIDB4MTU1MSwgICAgIDB4MTZjYSwgICAgIDB4MTg1ZCwKLQkgICAgMHgxYTA4LCAgICAgMHgxYmNjLCAgICAgMHgxZGFjLCAgICAgMHgxZmE3LAotCSAgICAweDIxYzEsICAgICAweDIzZmEsICAgICAweDI2NTUsICAgICAweDI4ZDYsCi0JICAgIDB4MmI3YywgICAgIDB4MmU0YSwgICAgIDB4MzE0MSwgICAgIDB4MzQ2NCwKLQkgICAgMHgzN2I0LCAgICAgMHgzYjM1LCAgICAgMHgzZWU5LCAgICAgMHg0MmQzLAotCSAgICAweDQ2ZjYsICAgICAweDRiNTMsICAgICAweDRmZjAsICAgICAweDU0Y2UsCi0JICAgIDB4NTlmMiwgICAgIDB4NWY1ZiwgICAgIDB4NjUxOSwgICAgIDB4NmIyNCwKLQkgICAgMHg3MTgzLCAgICAgMHg3ODNjLCAgICAgMHg3ZjUzLCAgICAgMHg4NmNjLAotCSAgICAweDhlYWQsICAgICAweDk2ZmEsICAgICAweDlmYmEsICAgICAweGE4ZjIsCi0JICAgIDB4YjJhNywgICAgIDB4YmNlMSwgICAgIDB4YzdhNSwgICAgIDB4ZDJmYSwKLQkgICAgMHhkZWU4LCAgICAgMHhlYjc1LCAgICAgMHhmOGFhLCAgICAweDEwNjhlLAotCSAgIDB4MTE1MmEsICAgIDB4MTI0ODcsICAgIDB4MTM0YWQsICAgIDB4MTQ1YTUsCi0JICAgMHgxNTc3YiwgICAgMHgxNmEzNywgICAgMHgxN2RmNSwgICAgMHgxOTJiZCwKLQkgICAweDFhODkwLCAgICAweDFiZjdiLCAgICAweDFkNzhkLCAgICAweDFmMGQxLAotCSAgIDB4MjBiNTUsICAgIDB4MjI3MjcsICAgIDB4MjQ0NTYsICAgIDB4MjYyZjIsCi0JICAgMHgyODMwYgotfTsKLQotc3RhdGljIHVpbnQgdGFzMzAwMWNfbWl4ZXJfdGFiW109ewotCSAgICAgICAweDAsICAgICAgMHg3NDgsICAgICAgMHg5YmUsICAgICAgMHhiYWYsCi0JICAgICAweGRhNCwgICAgICAweGZiMSwgICAgIDB4MTFkZSwgICAgIDB4MTQzMSwKLQkgICAgMHgxNmFkLCAgICAgMHgxOTU5LCAgICAgMHgxYzM3LCAgICAgMHgxZjRiLAotCSAgICAweDIyOTgsICAgICAweDI2MjgsICAgICAweDI5ZmIsICAgICAweDJlMTIsCi0JICAgIDB4MzI3ZCwgICAgIDB4MzczNCwgICAgIDB4M2M0NywgICAgIDB4NDFiNCwKLQkgICAgMHg0Nzg3LCAgICAgMHg0ZGJlLCAgICAgMHg1NDZkLCAgICAgMHg1Yjg2LAotCSAgICAweDYzMmUsICAgICAweDZiNTIsICAgICAweDc0MDAsICAgICAweDdkNTQsCi0JICAgIDB4ODczYiwgICAgIDB4OTFjNiwgICAgIDB4OWQxYSwgICAgIDB4YTkyMCwKLQkgICAgMHhiNWU1LCAgICAgMHhjMzhjLCAgICAgMHhkMjFiLCAgICAgMHhlMThmLAotCSAgICAweGYxZjUsICAgIDB4MTAzNmEsICAgIDB4MTE2MGYsICAgIDB4MTI5ZDYsCi0JICAgMHgxM2VkMCwgICAgMHgxNTUwYywgICAgMHgxNmNhMCwgICAgMHgxODVjOSwKLQkgICAweDFhMDdiLCAgICAweDFiY2MzLCAgICAweDFkYWI5LCAgICAweDFmYTc1LAotCSAgIDB4MjFjMGYsICAgIDB4MjNmYTMsICAgIDB4MjY1NTIsICAgIDB4MjhkNjQsCi0JICAgMHgyYjdjOSwgICAgMHgyZTRhMiwgICAgMHgzMTQxMSwgICAgMHgzNDYzYiwKLQkgICAweDM3YjQ0LCAgICAweDNiMzUzLCAgICAweDNlZTk0LCAgICAweDQyZDMwLAotCSAgIDB4NDZmNTUsICAgIDB4NGI1MzMsICAgIDB4NGZlZmMsICAgIDB4NTRjZTUsCi0JICAgMHg1OWYyNSwgICAgMHg1ZjVmNiwgICAgMHg2NTE5MywgICAgMHg2YjIzYywKLQkgICAweDcxODM1LCAgICAweDc4M2MzLCAgICAweDdmNTJjLCAgICAweDg2Y2MwLAotCSAgIDB4OGVhY2MsICAgIDB4OTZmYTUsICAgIDB4OWZiYTAsICAgIDB4YThmMWEsCi0JICAgMHhiMmE3MSwgICAgMHhiY2UwYSwgICAgMHhjN2E0YSwgICAgMHhkMmZhMCwKLQkgICAweGRlZTdiLCAgICAweGViNzUyLCAgICAweGY4YTlmLCAgIDB4MTA2OGU0LAotCSAgMHgxMTUyYTMsICAgMHgxMjQ4NmEsICAgMHgxMzRhYzgsICAgMHgxNDVhNTUsCi0JICAweDE1NzdhYywgICAweDE2YTM3MCwgICAweDE3ZGY1MSwgICAweDE5MmJjMiwKLQkgIDB4MWE4OGY4LCAgIDB4MWJmN2I3LCAgIDB4MWQ3OGM5LCAgIDB4MWYwZDA0LAotCSAgMHgyMGI1NDIsICAgMHgyMjcyNjgsICAgMHgyNDQ1NjQsICAgMHgyNjJmMjYsCi0JICAweDI4MzBhZgotfTsKLQotc3RhdGljIHVpbnQgdGFzMzAwMWNfdHJlYmxlX3RhYltdPXsKLQkgICAgICAweDk2LCAgICAgICAweDk1LCAgICAgICAweDk1LCAgICAgICAweDk0LAotCSAgICAgIDB4OTMsICAgICAgIDB4OTIsICAgICAgIDB4OTIsICAgICAgIDB4OTEsCi0JICAgICAgMHg5MCwgICAgICAgMHg5MCwgICAgICAgMHg4ZiwgICAgICAgMHg4ZSwKLQkgICAgICAweDhkLCAgICAgICAweDhkLCAgICAgICAweDhjLCAgICAgICAweDhiLAotCSAgICAgIDB4OGEsICAgICAgIDB4OGEsICAgICAgIDB4ODksICAgICAgIDB4ODgsCi0JICAgICAgMHg4OCwgICAgICAgMHg4NywgICAgICAgMHg4NiwgICAgICAgMHg4NSwKLQkgICAgICAweDg1LCAgICAgICAweDg0LCAgICAgICAweDgzLCAgICAgICAweDgzLAotCSAgICAgIDB4ODIsICAgICAgIDB4ODEsICAgICAgIDB4ODAsICAgICAgIDB4ODAsCi0JICAgICAgMHg3ZiwgICAgICAgMHg3ZSwgICAgICAgMHg3ZSwgICAgICAgMHg3ZCwKLQkgICAgICAweDdjLCAgICAgICAweDdiLCAgICAgICAweDdiLCAgICAgICAweDdhLAotCSAgICAgIDB4NzksICAgICAgIDB4NzgsICAgICAgIDB4NzgsICAgICAgIDB4NzcsCi0JICAgICAgMHg3NiwgICAgICAgMHg3NiwgICAgICAgMHg3NSwgICAgICAgMHg3NCwKLQkgICAgICAweDczLCAgICAgICAweDczLCAgICAgICAweDcyLCAgICAgICAweDcxLAotCSAgICAgIDB4NzEsICAgICAgIDB4NzAsICAgICAgIDB4NmUsICAgICAgIDB4NmQsCi0JICAgICAgMHg2ZCwgICAgICAgMHg2YywgICAgICAgMHg2YiwgICAgICAgMHg2YSwKLQkgICAgICAweDY5LCAgICAgICAweDY4LCAgICAgICAweDY3LCAgICAgICAweDY2LAotCSAgICAgIDB4NjUsICAgICAgIDB4NjMsICAgICAgIDB4NjIsICAgICAgIDB4NjIsCi0JICAgICAgMHg2MCwgICAgICAgMHg1ZiwgICAgICAgMHg1ZCwgICAgICAgMHg1YywKLQkgICAgICAweDVhLCAgICAgICAweDU4LCAgICAgICAweDU2LCAgICAgICAweDU1LAotCSAgICAgIDB4NTMsICAgICAgIDB4NTEsICAgICAgIDB4NGYsICAgICAgIDB4NGMsCi0JICAgICAgMHg0YSwgICAgICAgMHg0OCwgICAgICAgMHg0NSwgICAgICAgMHg0MywKLQkgICAgICAweDQwLCAgICAgICAweDNkLCAgICAgICAweDNhLCAgICAgICAweDM3LAotCSAgICAgIDB4MzUsICAgICAgIDB4MzIsICAgICAgIDB4MmUsICAgICAgIDB4MmEsCi0JICAgICAgMHgyNywgICAgICAgMHgyMiwgICAgICAgMHgxZSwgICAgICAgMHgxYSwKLQkgICAgICAweDE1LCAgICAgICAweDExLCAgICAgICAgMHhjLCAgICAgICAgMHg3LAotCSAgICAgICAweDEKLX07Ci0KLXN0YXRpYyB1aW50IHRhczMwMDFjX2Jhc3NfdGFiW109ewotCSAgICAgIDB4ODYsICAgICAgIDB4ODMsICAgICAgIDB4ODEsICAgICAgIDB4N2YsCi0JICAgICAgMHg3ZCwgICAgICAgMHg3YiwgICAgICAgMHg3OSwgICAgICAgMHg3OCwKLQkgICAgICAweDc2LCAgICAgICAweDc1LCAgICAgICAweDc0LCAgICAgICAweDcyLAotCSAgICAgIDB4NzEsICAgICAgIDB4NmYsICAgICAgIDB4NmUsICAgICAgIDB4NmQsCi0JICAgICAgMHg2YywgICAgICAgMHg2YiwgICAgICAgMHg2OSwgICAgICAgMHg2NywKLQkgICAgICAweDY1LCAgICAgICAweDY0LCAgICAgICAweDYxLCAgICAgICAweDYwLAotCSAgICAgIDB4NWUsICAgICAgIDB4NWQsICAgICAgIDB4NWMsICAgICAgIDB4NWIsCi0JICAgICAgMHg1YSwgICAgICAgMHg1OSwgICAgICAgMHg1OCwgICAgICAgMHg1NywKLQkgICAgICAweDU2LCAgICAgICAweDU1LCAgICAgICAweDU1LCAgICAgICAweDU0LAotCSAgICAgIDB4NTMsICAgICAgIDB4NTIsICAgICAgIDB4NTAsICAgICAgIDB4NGYsCi0JICAgICAgMHg0ZCwgICAgICAgMHg0YywgICAgICAgMHg0YiwgICAgICAgMHg0OSwKLQkgICAgICAweDQ3LCAgICAgICAweDQ1LCAgICAgICAweDQ0LCAgICAgICAweDQyLAotCSAgICAgIDB4NDEsICAgICAgIDB4M2YsICAgICAgIDB4M2UsICAgICAgIDB4M2QsCi0JICAgICAgMHgzYywgICAgICAgMHgzYiwgICAgICAgMHgzOSwgICAgICAgMHgzOCwKLQkgICAgICAweDM3LCAgICAgICAweDM2LCAgICAgICAweDM1LCAgICAgICAweDM0LAotCSAgICAgIDB4MzMsICAgICAgIDB4MzEsICAgICAgIDB4MzAsICAgICAgIDB4MmYsCi0JICAgICAgMHgyZSwgICAgICAgMHgyYywgICAgICAgMHgyYiwgICAgICAgMHgyYiwKLQkgICAgICAweDI5LCAgICAgICAweDI4LCAgICAgICAweDI3LCAgICAgICAweDI2LAotCSAgICAgIDB4MjUsICAgICAgIDB4MjQsICAgICAgIDB4MjIsICAgICAgIDB4MjEsCi0JICAgICAgMHgyMCwgICAgICAgMHgxZSwgICAgICAgMHgxYywgICAgICAgMHgxOSwKLQkgICAgICAweDE4LCAgICAgICAweDE4LCAgICAgICAweDE3LCAgICAgICAweDE2LAotCSAgICAgIDB4MTUsICAgICAgIDB4MTQsICAgICAgIDB4MTMsICAgICAgIDB4MTIsCi0JICAgICAgMHgxMSwgICAgICAgMHgxMCwgICAgICAgIDB4ZiwgICAgICAgIDB4ZSwKLQkgICAgICAgMHhkLCAgICAgICAgMHhiLCAgICAgICAgMHhhLCAgICAgICAgMHg5LAotCSAgICAgICAweDgsICAgICAgICAweDYsICAgICAgICAweDQsICAgICAgICAweDIsCi0JICAgICAgIDB4MQotfTsKLQotc3RydWN0IHRhc19nYWluX3QgdGFzMzAwMWNfZ2FpbiA9IHsKLSAgLm1hc3RlciAgPSB0YXMzMDAxY19tYXN0ZXJfdGFiLAotICAudHJlYmxlICA9IHRhczMwMDFjX3RyZWJsZV90YWIsCi0gIC5iYXNzICAgID0gdGFzMzAwMWNfYmFzc190YWIsCi0gIC5taXhlciAgID0gdGFzMzAwMWNfbWl4ZXJfdGFiCi19OwotCi1zdHJ1Y3QgdGFzX2VxX3ByZWZfdCAqdGFzMzAwMWNfZXFfcHJlZnNbXT17Ci0gICZlcXBfMGVfMl8xLAotICAmZXFwXzEwXzFfMCwKLSAgJmVxcF8xNV8yXzEsCi0gICZlcXBfMTVfMV8wLAotICAmZXFwXzBmXzJfMSwKLSAgJmVxcF8wZl8xXzAsCi0gIE5VTEwKLX07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwNC5jIGIvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjc4YmYwZi4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwNC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTEzOCArMCwwIEBACi0vKgotICogRHJpdmVyIGZvciB0aGUgaTJjL2kycyBiYXNlZCBUQTMwMDQgc291bmQgY2hpcCB1c2VkCi0gKiBvbiBzb21lIEFwcGxlIGhhcmR3YXJlLiBBbHNvIGtub3duIGFzICJzbmFwcGVyIi4KLSAqCi0gKiBUb2JpYXMgU2FyZ2VhbnQgPHRvYmlhcy5zYXJnZWFudEBiaWdwb25kLmNvbT4KLSAqIEJhc2VkIHVwb24gdGFzMzAwMWMuYyBieSBDaHJpc3RvcGhlciBDLiBDaGltZWxpcyA8Y2hyaXNAZGViaWFuLm9yZz46Ci0gKgotICogSW5wdXQgc3VwcG9ydCBieSBSZW56byBEYXZvbGkgPHJlbnpvQGNzLnVuaWJvLml0PgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb20uaD4KLQotI2luY2x1ZGUgImRtYXNvdW5kLmgiCi0jaW5jbHVkZSAidGFzX2NvbW1vbi5oIgotI2luY2x1ZGUgInRhczMwMDQuaCIKLQotI2luY2x1ZGUgInRhc19pb2N0bC5oIgotCi0vKiAjZGVmaW5lIERFQlVHX0RSQ0UgKi8KLQotI2RlZmluZSBUQVMzMDA0X0JJUVVBRF9GSUxURVJfQ09VTlQgIDcKLSNkZWZpbmUgVEFTMzAwNF9CSVFVQURfQ0hBTk5FTF9DT1VOVCAyCi0KLSNkZWZpbmUgVk9MX0RFRkFVTFQJKDEwMCAqIDQgLyA1KQotI2RlZmluZSBJTlBVVF9ERUZBVUxUCSgxMDAgKiA0IC8gNSkKLSNkZWZpbmUgQkFTU19ERUZBVUxUCSgxMDAgLyAyKQotI2RlZmluZSBUUkVCTEVfREVGQVVMVAkoMTAwIC8gMikKLQotc3RydWN0IHRhczMwMDRfZGF0YV90IHsKLQlzdHJ1Y3QgdGFzX2RhdGFfdCBzdXBlcjsKLQlpbnQgZGV2aWNlX2lkOwotCWludCBvdXRwdXRfaWQ7Ci0JaW50IHNwZWFrZXJfaWQ7Ci0Jc3RydWN0IHRhc19kcmNlX3QgZHJjZV9zdGF0ZTsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2hhbmdlOwotfTsKLQotI2RlZmluZSBNQUtFX1RJTUUoc2VjLHVzZWMpICgoKHNlYyk8PDEyKSArICg1MDAwMCsodXNlYy8xMCkqKDE8PDEyKSkvMTAwMDAwKQotCi0jZGVmaW5lIE1BS0VfUkFUSU8oaSxmKSAoKChpKTw8OCkgKyAoKDUwMCsoZikqKDE8PDgpKS8xMDAwKSkKLQotCi1zdGF0aWMgY29uc3QgdW5pb24gdGFzX2JpcXVhZF90IHRhczMwMDRfZXFfdW5pdHkgPSB7Ci0JLmJ1ZgkJID0geyAweDEwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAgfSwKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0YXNfZHJjZV90IHRhczMwMDRfZHJjZV9taW4gPSB7Ci0JLmVuYWJsZQkJPSAxLAotCS5hYm92ZQkJPSB7IC52YWwgPSBNQUtFX1JBVElPKDE2LDApLCAuZXhwYW5kID0gMCB9LAotCS5iZWxvdwkJPSB7IC52YWwgPSBNQUtFX1JBVElPKDIsMCksIC5leHBhbmQgPSAwIH0sCi0JLnRocmVzaG9sZAk9IC0weDU5YTAsCi0JLmVuZXJneQkJPSBNQUtFX1RJTUUoMCwgIDE3MDApLAotCS5hdHRhY2sJCT0gTUFLRV9USU1FKDAsICAxNzAwKSwKLQkuZGVjYXkJCT0gTUFLRV9USU1FKDAsICAxNzAwKSwKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCB0YXNfZHJjZV90IHRhczMwMDRfZHJjZV9tYXggPSB7Ci0JLmVuYWJsZQkJPSAxLAotCS5hYm92ZQkJPSB7IC52YWwgPSBNQUtFX1JBVElPKDEsNTAwKSwgLmV4cGFuZCA9IDEgfSwKLQkuYmVsb3cJCT0geyAudmFsID0gTUFLRV9SQVRJTygyLDApLCAuZXhwYW5kID0gMSB9LAotCS50aHJlc2hvbGQJPSAtMHgwLAotCS5lbmVyZ3kJCT0gTUFLRV9USU1FKDIsNDAwMDAwKSwKLQkuYXR0YWNrCQk9IE1BS0VfVElNRSgyLDQwMDAwMCksCi0JLmRlY2F5CQk9IE1BS0VfVElNRSgyLDQwMDAwMCksCi19OwotCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0aW1lX2NvbnN0YW50c1tdPXsKLQlNQUtFX1RJTUUoMCwgIDE3MDApLAotCU1BS0VfVElNRSgwLCAgMzUwMCksCi0JTUFLRV9USU1FKDAsICA2NzAwKSwKLQlNQUtFX1RJTUUoMCwgMTMwMDApLAotCU1BS0VfVElNRSgwLCAyNjAwMCksCi0JTUFLRV9USU1FKDAsIDUzMDAwKSwKLQlNQUtFX1RJTUUoMCwxMDYwMDApLAotCU1BS0VfVElNRSgwLDIxMjAwMCksCi0JTUFLRV9USU1FKDAsNDI1MDAwKSwKLQlNQUtFX1RJTUUoMCw4NTAwMDApLAotCU1BS0VfVElNRSgxLDcwMDAwMCksCi0JTUFLRV9USU1FKDIsNDAwMDAwKSwKLX07Ci0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhYm92ZV90aHJlc2hvbGRfY29tcHJlc3Npb25fcmF0aW9bXT17Ci0JTUFLRV9SQVRJTyggMSwgNzApLAotCU1BS0VfUkFUSU8oIDEsMTQwKSwKLQlNQUtFX1JBVElPKCAxLDIzMCksCi0JTUFLRV9SQVRJTyggMSwzMzApLAotCU1BS0VfUkFUSU8oIDEsNDUwKSwKLQlNQUtFX1JBVElPKCAxLDYwMCksCi0JTUFLRV9SQVRJTyggMSw3ODApLAotCU1BS0VfUkFUSU8oIDIsICAwKSwKLQlNQUtFX1JBVElPKCAyLDI5MCksCi0JTUFLRV9SQVRJTyggMiw2NzApLAotCU1BS0VfUkFUSU8oIDMsMjAwKSwKLQlNQUtFX1JBVElPKCA0LCAgMCksCi0JTUFLRV9SQVRJTyggNSwzMzApLAotCU1BS0VfUkFUSU8oIDgsICAwKSwKLQlNQUtFX1JBVElPKDE2LCAgMCksCi19OwotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYWJvdmVfdGhyZXNob2xkX2V4cGFuc2lvbl9yYXRpb1tdPXsKLQlNQUtFX1JBVElPKDEsIDYwKSwKLQlNQUtFX1JBVElPKDEsMTMwKSwKLQlNQUtFX1JBVElPKDEsMTkwKSwKLQlNQUtFX1JBVElPKDEsMjUwKSwKLQlNQUtFX1JBVElPKDEsMzEwKSwKLQlNQUtFX1JBVElPKDEsMzgwKSwKLQlNQUtFX1JBVElPKDEsNDQwKSwKLQlNQUtFX1JBVElPKDEsNTAwKQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJlbG93X3RocmVzaG9sZF9jb21wcmVzc2lvbl9yYXRpb1tdPXsKLQlNQUtFX1JBVElPKDEsIDcwKSwKLQlNQUtFX1JBVElPKDEsMTQwKSwKLQlNQUtFX1JBVElPKDEsMjMwKSwKLQlNQUtFX1JBVElPKDEsMzMwKSwKLQlNQUtFX1JBVElPKDEsNDUwKSwKLQlNQUtFX1JBVElPKDEsNjAwKSwKLQlNQUtFX1JBVElPKDEsNzgwKSwKLQlNQUtFX1JBVElPKDIsICAwKQotfTsKLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJlbG93X3RocmVzaG9sZF9leHBhbnNpb25fcmF0aW9bXT17Ci0JTUFLRV9SQVRJTygxLCA2MCksCi0JTUFLRV9SQVRJTygxLDEzMCksCi0JTUFLRV9SQVRJTygxLDE5MCksCi0JTUFLRV9SQVRJTygxLDI1MCksCi0JTUFLRV9SQVRJTygxLDMxMCksCi0JTUFLRV9SQVRJTygxLDM4MCksCi0JTUFLRV9SQVRJTygxLDQ0MCksCi0JTUFLRV9SQVRJTygxLDUwMCksCi0JTUFLRV9SQVRJTygxLDU2MCksCi0JTUFLRV9SQVRJTygxLDYzMCksCi0JTUFLRV9SQVRJTygxLDY5MCksCi0JTUFLRV9SQVRJTygxLDc1MCksCi0JTUFLRV9SQVRJTygxLDgxMCksCi0JTUFLRV9SQVRJTygxLDg4MCksCi0JTUFLRV9SQVRJTygxLDk0MCksCi0JTUFLRV9SQVRJTygyLCAgMCkKLX07Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zZWFyY2goCXVuc2lnbmVkIHNob3J0IHZhbCwKLQljb25zdCB1bnNpZ25lZCBzaG9ydCAqYXJyLAotCWNvbnN0IGludCBhcnJzaXplKSB7Ci0JLyoKLQkgKiBUaGlzIGNvdWxkIGJlIGEgYmluYXJ5IHNlYXJjaCwgYnV0IGZvciBzbWFsbCB0YWJsZXMsCi0JICogYSBsaW5lYXIgc2VhcmNoIGlzIGxpa2VseSB0byBiZSBmYXN0ZXIKLQkgKi8KLQotCWludCBpOwotCi0JZm9yIChpPTA7IGkgPCBhcnJzaXplOyBpKyspCi0JCWlmIChhcnJbaV0gPj0gdmFsKQotCQkJZ290byBfMTsKLQlyZXR1cm4gYXJyc2l6ZS0xOwotIF8xOgotCWlmIChpID09IDApCi0JCXJldHVybiAwOwotCXJldHVybiAoYXJyW2ldLXZhbCA8IHZhbC1hcnJbaS0xXSkgPyBpIDogaS0xOwotfQotCi0jZGVmaW5lIFNFQVJDSChhLCBiKSBzZWFyY2goYSwgYiwgQVJSQVlfU0laRShiKSkKLQotc3RhdGljIGlubGluZSBpbnQKLXRpbWVfaW5kZXgodW5zaWduZWQgc2hvcnQgdGltZSkKLXsKLQlyZXR1cm4gU0VBUkNIKHRpbWUsIHRpbWVfY29uc3RhbnRzKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGludAotYWJvdmVfdGhyZXNob2xkX2NvbXByZXNzaW9uX2luZGV4KHVuc2lnbmVkIHNob3J0IHJhdGlvKQotewotCXJldHVybiBTRUFSQ0gocmF0aW8sIGFib3ZlX3RocmVzaG9sZF9jb21wcmVzc2lvbl9yYXRpbyk7Ci19Ci0KLQotc3RhdGljIGlubGluZSBpbnQKLWFib3ZlX3RocmVzaG9sZF9leHBhbnNpb25faW5kZXgodW5zaWduZWQgc2hvcnQgcmF0aW8pCi17Ci0JcmV0dXJuIFNFQVJDSChyYXRpbywgYWJvdmVfdGhyZXNob2xkX2V4cGFuc2lvbl9yYXRpbyk7Ci19Ci0KLQotc3RhdGljIGlubGluZSBpbnQKLWJlbG93X3RocmVzaG9sZF9jb21wcmVzc2lvbl9pbmRleCh1bnNpZ25lZCBzaG9ydCByYXRpbykKLXsKLQlyZXR1cm4gU0VBUkNIKHJhdGlvLCBiZWxvd190aHJlc2hvbGRfY29tcHJlc3Npb25fcmF0aW8pOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci1iZWxvd190aHJlc2hvbGRfZXhwYW5zaW9uX2luZGV4KHVuc2lnbmVkIHNob3J0IHJhdGlvKQotewotCXJldHVybiBTRUFSQ0gocmF0aW8sIGJlbG93X3RocmVzaG9sZF9leHBhbnNpb25fcmF0aW8pOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgZGJfdG9fcmVndmFsKHNob3J0IGRiKSB7Ci0JaW50IHI9MDsKLQotCXI9KGRiKzB4NTlhMCkgLyAweDYwOwotCi0JaWYgKHIgPCAweDkxKSByZXR1cm4gMHg5MTsKLQlpZiAociA+IDB4ZWYpIHJldHVybiAweGVmOwotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW5saW5lIHNob3J0IHF1YW50aXplX2RiKHNob3J0IGRiKQotewotCXJldHVybiBkYl90b19yZWd2YWwoZGIpICogMHg2MCAtIDB4NTlhMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXJlZ2lzdGVyX3dpZHRoKGVudW0gdGFzMzAwNF9yZWdfdCByKQotewotCXN3aXRjaChyKSB7Ci0JY2FzZSBUQVMzMDA0X1JFR19NQ1I6Ci0gCWNhc2UgVEFTMzAwNF9SRUdfVFJFQkxFOgotCWNhc2UgVEFTMzAwNF9SRUdfQkFTUzoKLQljYXNlIFRBUzMwMDRfUkVHX0FOQUxPR19DVFJMOgotCWNhc2UgVEFTMzAwNF9SRUdfVEVTVDE6Ci0JY2FzZSBUQVMzMDA0X1JFR19URVNUMjoKLQljYXNlIFRBUzMwMDRfUkVHX01DUjI6Ci0JCXJldHVybiAxOwotCi0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0xPVURfQklRVUFEX0dBSU46Ci0JY2FzZSBUQVMzMDA0X1JFR19SSUdIVF9MT1VEX0JJUVVBRF9HQUlOOgotCQlyZXR1cm4gMzsKLQotCWNhc2UgVEFTMzAwNF9SRUdfRFJDOgotCWNhc2UgVEFTMzAwNF9SRUdfVk9MVU1FOgotCQlyZXR1cm4gNjsKLQotCWNhc2UgVEFTMzAwNF9SRUdfTEVGVF9NSVhFUjoKLQljYXNlIFRBUzMwMDRfUkVHX1JJR0hUX01JWEVSOgotCQlyZXR1cm4gOTsKLQotCWNhc2UgVEFTMzAwNF9SRUdfVEVTVDoKLQkJcmV0dXJuIDEwOwotCi0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDA6Ci0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDE6Ci0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDI6Ci0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDM6Ci0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDQ6Ci0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDU6Ci0JY2FzZSBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDY6Ci0KLQljYXNlIFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDA6Ci0JY2FzZSBUQVMzMDA0X1JFR19SSUdIVF9CSVFVQUQxOgotCWNhc2UgVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMjoKLQljYXNlIFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDM6Ci0JY2FzZSBUQVMzMDA0X1JFR19SSUdIVF9CSVFVQUQ0OgotCWNhc2UgVEFTMzAwNF9SRUdfUklHSFRfQklRVUFENToKLQljYXNlIFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDY6Ci0KLQljYXNlIFRBUzMwMDRfUkVHX0xFRlRfTE9VRF9CSVFVQUQ6Ci0JY2FzZSBUQVMzMDA0X1JFR19SSUdIVF9MT1VEX0JJUVVBRDoKLQkJcmV0dXJuIDE1OwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X3dyaXRlX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCQllbnVtIHRhczMwMDRfcmVnX3QgcmVnX251bSwKLQkJCWNoYXIgKmRhdGEsCi0JCQl1aW50IHdyaXRlX21vZGUpCi17Ci0JaWYgKHJlZ19udW09PVRBUzMwMDRfUkVHX01DUiB8fAotCSAgICByZWdfbnVtPT1UQVMzMDA0X1JFR19CQVNTIHx8Ci0JICAgIHJlZ19udW09PVRBUzMwMDRfUkVHX1RSRUJMRSB8fAotCSAgICByZWdfbnVtPT1UQVMzMDA0X1JFR19BTkFMT0dfQ1RSTCkgewotCQlyZXR1cm4gdGFzX3dyaXRlX2J5dGVfcmVnaXN0ZXIoJnNlbGYtPnN1cGVyLAotCQkJCQkgICAgICAgKHVpbnQpcmVnX251bSwKLQkJCQkJICAgICAgICpkYXRhLAotCQkJCQkgICAgICAgd3JpdGVfbW9kZSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIHRhc193cml0ZV9yZWdpc3Rlcigmc2VsZi0+c3VwZXIsCi0JCQkJCSAgKHVpbnQpcmVnX251bSwKLQkJCQkJICByZWdpc3Rlcl93aWR0aChyZWdfbnVtKSwKLQkJCQkJICBkYXRhLAotCQkJCQkgIHdyaXRlX21vZGUpOwotCX0KLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCQllbnVtIHRhczMwMDRfcmVnX3QgcmVnX251bSkKLXsKLQlpZiAocmVnX251bT09VEFTMzAwNF9SRUdfTUNSIHx8Ci0JICAgIHJlZ19udW09PVRBUzMwMDRfUkVHX0JBU1MgfHwKLQkgICAgcmVnX251bT09VEFTMzAwNF9SRUdfVFJFQkxFIHx8Ci0JICAgIHJlZ19udW09PVRBUzMwMDRfUkVHX0FOQUxPR19DVFJMKSB7Ci0JCXJldHVybiB0YXNfc3luY19ieXRlX3JlZ2lzdGVyKCZzZWxmLT5zdXBlciwKLQkJCQkJICAgICAgKHVpbnQpcmVnX251bSwKLQkJCQkJICAgICAgcmVnaXN0ZXJfd2lkdGgocmVnX251bSkpOwotCX0gZWxzZSB7Ci0JCXJldHVybiB0YXNfc3luY19yZWdpc3Rlcigmc2VsZi0+c3VwZXIsCi0JCQkJCSAodWludClyZWdfbnVtLAotCQkJCQkgcmVnaXN0ZXJfd2lkdGgocmVnX251bSkpOwotCX0KLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9yZWFkX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCQllbnVtIHRhczMwMDRfcmVnX3QgcmVnX251bSwKLQkJCWNoYXIgKmRhdGEsCi0JCQl1aW50IHdyaXRlX21vZGUpCi17Ci0JcmV0dXJuIHRhc19yZWFkX3JlZ2lzdGVyKCZzZWxmLT5zdXBlciwKLQkJCQkgKHVpbnQpcmVnX251bSwKLQkJCQkgcmVnaXN0ZXJfd2lkdGgocmVnX251bSksCi0JCQkJIGRhdGEpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotdGFzMzAwNF9mYXN0X2xvYWQoc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmLCBpbnQgZmFzdCkKLXsKLQlpZiAoZmFzdCkKLQkJc2VsZi0+c3VwZXIuc2hhZG93W1RBUzMwMDRfUkVHX01DUl1bMF0gfD0gMHg4MDsKLQllbHNlCi0JCXNlbGYtPnN1cGVyLnNoYWRvd1tUQVMzMDA0X1JFR19NQ1JdWzBdICY9IDB4N2Y7Ci0JcmV0dXJuIHRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX01DUik7Ci19Ci0KLXN0YXRpYyB1aW50Ci10YXMzMDA0X3N1cHBvcnRlZF9taXhlcnMoc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmKQotewotCXJldHVybiBTT1VORF9NQVNLX1ZPTFVNRSB8Ci0JCVNPVU5EX01BU0tfUENNIHwKLQkJU09VTkRfTUFTS19BTFRQQ00gfAotCQlTT1VORF9NQVNLX0lNSVggfAotCQlTT1VORF9NQVNLX1RSRUJMRSB8Ci0JCVNPVU5EX01BU0tfQkFTUyB8Ci0JCVNPVU5EX01BU0tfTUlDIHwKLQkJU09VTkRfTUFTS19MSU5FOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X21peGVyX2lzX3N0ZXJlbyhzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsIGludCBtaXhlcikKLXsKLQlzd2l0Y2gobWl4ZXIpIHsKLQljYXNlIFNPVU5EX01JWEVSX1ZPTFVNRToKLQljYXNlIFNPVU5EX01JWEVSX1BDTToKLQljYXNlIFNPVU5EX01JWEVSX0FMVFBDTToKLQljYXNlIFNPVU5EX01JWEVSX0lNSVg6Ci0JCXJldHVybiAxOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHVpbnQKLXRhczMwMDRfc3RlcmVvX21peGVycyhzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYpCi17Ci0JdWludCByID0gdGFzMzAwNF9zdXBwb3J0ZWRfbWl4ZXJzKHNlbGYpOwotCXVpbnQgaTsKLQkKLQlmb3IgKGk9MTsgaTxTT1VORF9NSVhFUl9OUkRFVklDRVM7IGkrKykKLQkJaWYgKHImKDE8PGkpICYmICF0YXMzMDA0X21peGVyX2lzX3N0ZXJlbyhzZWxmLGkpKQotCQkJciAmPSB+KDE8PGkpOwotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X2dldF9taXhlcl9sZXZlbChzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsIGludCBtaXhlciwgdWludCAqbGV2ZWwpCi17Ci0JaWYgKCFzZWxmKQotCQlyZXR1cm4gLTE7Ci0KLQkqbGV2ZWwgPSBzZWxmLT5zdXBlci5taXhlclttaXhlcl07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwoc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmLCBpbnQgbWl4ZXIsIHVpbnQgbGV2ZWwpCi17Ci0JaW50IHJjOwotCXRhc19zaGFkb3dfdCAqc2hhZG93OwotCXVpbnQgdGVtcDsKLQl1aW50IG9mZnNldD0wOwotCi0JaWYgKCFzZWxmKQotCQlyZXR1cm4gLTE7Ci0KLQlzaGFkb3cgPSBzZWxmLT5zdXBlci5zaGFkb3c7Ci0KLQlpZiAoIXRhczMwMDRfbWl4ZXJfaXNfc3RlcmVvKHNlbGYsbWl4ZXIpKQotCQlsZXZlbCA9IHRhc19tb25vX3RvX3N0ZXJlbyhsZXZlbCk7Ci0Jc3dpdGNoKG1peGVyKSB7Ci0JY2FzZSBTT1VORF9NSVhFUl9WT0xVTUU6Ci0JCXRlbXAgPSB0YXMzMDA0X2dhaW4ubWFzdGVyW2xldmVsJjB4ZmZdOwotCQlTRVRfNF8yMChzaGFkb3dbVEFTMzAwNF9SRUdfVk9MVU1FXSwgMCwgdGVtcCk7Ci0JCXRlbXAgPSB0YXMzMDA0X2dhaW4ubWFzdGVyWyhsZXZlbD4+OCkmMHhmZl07Ci0JCVNFVF80XzIwKHNoYWRvd1tUQVMzMDA0X1JFR19WT0xVTUVdLCAzLCB0ZW1wKTsKLQkJcmMgPSB0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19WT0xVTUUpOwotCQlicmVhazsKLQljYXNlIFNPVU5EX01JWEVSX0lNSVg6Ci0JCW9mZnNldCArPSAzOwotCWNhc2UgU09VTkRfTUlYRVJfQUxUUENNOgotCQlvZmZzZXQgKz0gMzsKLQljYXNlIFNPVU5EX01JWEVSX1BDTToKLQkJLyoKLQkJICogRG9uJ3QgbG9hZCB0aGVzZSBpbiBmYXN0IG1vZGUuIFRoZSBkb2N1bWVudGF0aW9uCi0JCSAqIHNheXMgaXQgY2FuIGJlIGRvbmUgaW4gZWl0aGVyIG1vZGUsIGJ1dCB0ZXN0aW5nIGl0Ci0JCSAqIHNob3dzIHRoYXQgZmFzdCBtb2RlIHByb2R1Y2VzIHVnbHkgY2xpY2tpbmcuCi0JCSovCi0JCS8qIHRhczMwMDRfZmFzdF9sb2FkKHNlbGYsMSk7ICovCi0JCXRlbXAgPSB0YXMzMDA0X2dhaW4ubWl4ZXJbbGV2ZWwmMHhmZl07Ci0JCVNFVF80XzIwKHNoYWRvd1tUQVMzMDA0X1JFR19MRUZUX01JWEVSXSwgb2Zmc2V0LCB0ZW1wKTsKLQkJdGVtcCA9IHRhczMwMDRfZ2Fpbi5taXhlclsobGV2ZWw+PjgpJjB4ZmZdOwotCQlTRVRfNF8yMChzaGFkb3dbVEFTMzAwNF9SRUdfUklHSFRfTUlYRVJdLCBvZmZzZXQsIHRlbXApOwotCQlyYyA9IHRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0xFRlRfTUlYRVIpOwotCQlpZiAocmMgPT0gMCkKLQkJCXJjPXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX01JWEVSKTsKLQkJLyogdGFzMzAwNF9mYXN0X2xvYWQoc2VsZiwwKTsgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9UUkVCTEU6Ci0JCXRlbXAgPSB0YXMzMDA0X2dhaW4udHJlYmxlW2xldmVsJjB4ZmZdOwotCQlzaGFkb3dbVEFTMzAwNF9SRUdfVFJFQkxFXVswXT10ZW1wJjB4ZmY7Ci0JCXJjID0gdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfVFJFQkxFKTsKLQkJYnJlYWs7Ci0JY2FzZSBTT1VORF9NSVhFUl9CQVNTOgotCQl0ZW1wID0gdGFzMzAwNF9nYWluLmJhc3NbbGV2ZWwmMHhmZl07Ci0JCXNoYWRvd1tUQVMzMDA0X1JFR19CQVNTXVswXT10ZW1wJjB4ZmY7Ci0JCXJjID0gdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfQkFTUyk7Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfTUlDOgotCQlpZiAoKGxldmVsJjB4ZmYpPjApIHsKLQkJCXNvZnR3YXJlX2lucHV0X3ZvbHVtZSA9IFNXX0lOUFVUX1ZPTFVNRV9TQ0FMRSAqIChsZXZlbCYweGZmKTsKLQkJCWlmIChzZWxmLT5zdXBlci5taXhlclttaXhlcl0gPT0gMCkgewotCQkJCXNlbGYtPnN1cGVyLm1peGVyW1NPVU5EX01JWEVSX0xJTkVdID0gMDsKLQkJCQlzaGFkb3dbVEFTMzAwNF9SRUdfQU5BTE9HX0NUUkxdWzBdPTB4YzI7Ci0JCQkJcmMgPSB0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19BTkFMT0dfQ1RSTCk7Ci0JCQl9IGVsc2UgcmM9MDsKLQkJfSBlbHNlIHsKLQkJCXNlbGYtPnN1cGVyLm1peGVyW1NPVU5EX01JWEVSX0xJTkVdID0gU1dfSU5QVVRfVk9MVU1FX0RFRkFVTFQ7Ci0JCQlzb2Z0d2FyZV9pbnB1dF92b2x1bWUgPSBTV19JTlBVVF9WT0xVTUVfU0NBTEUgKgotCQkJCShzZWxmLT5zdXBlci5taXhlcltTT1VORF9NSVhFUl9MSU5FXSYweGZmKTsKLQkJCXNoYWRvd1tUQVMzMDA0X1JFR19BTkFMT0dfQ1RSTF1bMF09MHgwMDsKLQkJCXJjID0gdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfQU5BTE9HX0NUUkwpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU09VTkRfTUlYRVJfTElORToKLQkJaWYgKHNlbGYtPnN1cGVyLm1peGVyW1NPVU5EX01JWEVSX01JQ10gPT0gMCkgewotCQkJc29mdHdhcmVfaW5wdXRfdm9sdW1lID0gU1dfSU5QVVRfVk9MVU1FX1NDQUxFICogKGxldmVsJjB4ZmYpOwotCQkJcmM9MDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyYyA9IC0xOwotCQlicmVhazsKLQl9Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCXNlbGYtPnN1cGVyLm1peGVyW21peGVyXSA9IGxldmVsOwotCQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X2xlYXZlX3NsZWVwKHN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZikKLXsKLQl1bnNpZ25lZCBjaGFyIG1jciA9ICgxPDw2KSsoMjw8NCkrKDI8PDIpOwotCi0JaWYgKCFzZWxmKQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBNYWtlIHN1cmUgc29tZXRoaW5nIGFuc3dlcnMgb24gdGhlIGkyYyBidXMgKi8KLQlpZiAodGFzMzAwNF93cml0ZV9yZWdpc3RlcihzZWxmLCBUQVMzMDA0X1JFR19NQ1IsICZtY3IsCi0JICAgIFdSSVRFX05PUk1BTCB8IEZPUkNFX1dSSVRFKSA8IDApCi0JCXJldHVybiAtMTsKLQotCXRhczMwMDRfZmFzdF9sb2FkKHNlbGYsIDEpOwotCi0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMCk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMSk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMik7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMyk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFENCk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFENSk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfUklHSFRfQklRVUFENik7Ci0KLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDApOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0xFRlRfQklRVUFEMSk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQyKTsKLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDMpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0xFRlRfQklRVUFENCk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQ1KTsKLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDYpOwotCi0JdGFzMzAwNF9mYXN0X2xvYWQoc2VsZiwgMCk7Ci0KLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19WT0xVTUUpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0xFRlRfTUlYRVIpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX01JWEVSKTsKLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19UUkVCTEUpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0JBU1MpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0FOQUxPR19DVFJMKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X2VudGVyX3NsZWVwKHN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZikKLXsKLQlpZiAoIXNlbGYpCi0JCXJldHVybiAtMTsgCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDRfc3luY19iaXF1YWQoCXN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZiwKLQkJCXVfaW50IGNoYW5uZWwsCi0JCQl1X2ludCBmaWx0ZXIpCi17Ci0JZW51bSB0YXMzMDA0X3JlZ190IHJlZzsKLQotCWlmIChjaGFubmVsID49IFRBUzMwMDRfQklRVUFEX0NIQU5ORUxfQ09VTlQgfHwKLQkgICAgZmlsdGVyICA+PSBUQVMzMDA0X0JJUVVBRF9GSUxURVJfQ09VTlQpIHJldHVybiAtRUlOVkFMOwotCi0JcmVnPSggY2hhbm5lbCA/IFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDAgOiBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDAgKSArIGZpbHRlcjsKLQotCXJldHVybiB0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixyZWcpOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X3dyaXRlX2JpcXVhZF9zaGFkb3coCXN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZiwKLQkJCQl1X2ludCBjaGFubmVsLAotCQkJCXVfaW50IGZpbHRlciwKLQkJCQljb25zdCB1bmlvbiB0YXNfYmlxdWFkX3QgKmJpcXVhZCkKLXsKLQl0YXNfc2hhZG93X3QgKnNoYWRvdz1zZWxmLT5zdXBlci5zaGFkb3c7Ci0JZW51bSB0YXMzMDA0X3JlZ190IHJlZzsKLQotCWlmIChjaGFubmVsID49IFRBUzMwMDRfQklRVUFEX0NIQU5ORUxfQ09VTlQgfHwKLQkgICAgZmlsdGVyICA+PSBUQVMzMDA0X0JJUVVBRF9GSUxURVJfQ09VTlQpIHJldHVybiAtRUlOVkFMOwotCi0JcmVnPSggY2hhbm5lbCA/IFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDAgOiBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDAgKSArIGZpbHRlcjsKLQotCVNFVF80XzIwKHNoYWRvd1tyZWddLCAwLGJpcXVhZC0+Y29lZmYuYjApOwotCVNFVF80XzIwKHNoYWRvd1tyZWddLCAzLGJpcXVhZC0+Y29lZmYuYjEpOwotCVNFVF80XzIwKHNoYWRvd1tyZWddLCA2LGJpcXVhZC0+Y29lZmYuYjIpOwotCVNFVF80XzIwKHNoYWRvd1tyZWddLCA5LGJpcXVhZC0+Y29lZmYuYTEpOwotCVNFVF80XzIwKHNoYWRvd1tyZWddLDEyLGJpcXVhZC0+Y29lZmYuYTIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDRfd3JpdGVfYmlxdWFkKAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCQl1X2ludCBjaGFubmVsLAotCQkJdV9pbnQgZmlsdGVyLAotCQkJY29uc3QgdW5pb24gdGFzX2JpcXVhZF90ICpiaXF1YWQpCi17Ci0JaW50IHJjOwotCi0JcmM9dGFzMzAwNF93cml0ZV9iaXF1YWRfc2hhZG93KHNlbGYsIGNoYW5uZWwsIGZpbHRlciwgYmlxdWFkKTsKLQlpZiAocmMgPCAwKSByZXR1cm4gcmM7Ci0KLQlyZXR1cm4gdGFzMzAwNF9zeW5jX2JpcXVhZChzZWxmLCBjaGFubmVsLCBmaWx0ZXIpOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X3dyaXRlX2JpcXVhZF9saXN0KAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCQkJdV9pbnQgZmlsdGVyX2NvdW50LAotCQkJCXVfaW50IGZsYWdzLAotCQkJCXN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCAqYmlxdWFkcykKLXsKLQlpbnQgaTsKLQlpbnQgcmM7Ci0KLQlpZiAoZmxhZ3MgJiBUQVNfQklRVUFEX0ZBU1RfTE9BRCkgdGFzMzAwNF9mYXN0X2xvYWQoc2VsZiwxKTsKLQotCWZvciAoaT0wOyBpPGZpbHRlcl9jb3VudDsgaSsrKSB7Ci0JCXJjPXRhczMwMDRfd3JpdGVfYmlxdWFkKHNlbGYsCi0JCQkJCWJpcXVhZHNbaV0uY2hhbm5lbCwKLQkJCQkJYmlxdWFkc1tpXS5maWx0ZXIsCi0JCQkJCSZiaXF1YWRzW2ldLmRhdGEpOwotCQlpZiAocmMgPCAwKSBicmVhazsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBUQVNfQklRVUFEX0ZBU1RfTE9BRCkgdGFzMzAwNF9mYXN0X2xvYWQoc2VsZiwwKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9yZWFkX2JpcXVhZCgJc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmLAotCQkJdV9pbnQgY2hhbm5lbCwKLQkJCXVfaW50IGZpbHRlciwKLQkJCXVuaW9uIHRhc19iaXF1YWRfdCAqYmlxdWFkKQotewotCXRhc19zaGFkb3dfdCAqc2hhZG93PXNlbGYtPnN1cGVyLnNoYWRvdzsKLQllbnVtIHRhczMwMDRfcmVnX3QgcmVnOwotCi0JaWYgKGNoYW5uZWwgPj0gVEFTMzAwNF9CSVFVQURfQ0hBTk5FTF9DT1VOVCB8fAotCSAgICBmaWx0ZXIgID49IFRBUzMwMDRfQklRVUFEX0ZJTFRFUl9DT1VOVCkgcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZWc9KCBjaGFubmVsID8gVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMCA6IFRBUzMwMDRfUkVHX0xFRlRfQklRVUFEMCApICsgZmlsdGVyOwotCi0JYmlxdWFkLT5jb2VmZi5iMD1HRVRfNF8yMChzaGFkb3dbcmVnXSwgMCk7Ci0JYmlxdWFkLT5jb2VmZi5iMT1HRVRfNF8yMChzaGFkb3dbcmVnXSwgMyk7Ci0JYmlxdWFkLT5jb2VmZi5iMj1HRVRfNF8yMChzaGFkb3dbcmVnXSwgNik7Ci0JYmlxdWFkLT5jb2VmZi5hMT1HRVRfNF8yMChzaGFkb3dbcmVnXSwgOSk7Ci0JYmlxdWFkLT5jb2VmZi5hMj1HRVRfNF8yMChzaGFkb3dbcmVnXSwxMik7Ci0JCi0JcmV0dXJuIDA7CQotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X2VxX3J3KAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCXVfaW50IGNtZCwKLQkJdV9sb25nIGFyZykKLXsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlpbnQgcmM7Ci0Jc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGJpcXVhZDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZiaXF1YWQsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpKSkgewotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlpZiAoY21kICYgU0lPQ19JTikgewotCQlyYz10YXMzMDA0X3dyaXRlX2JpcXVhZChzZWxmLCBiaXF1YWQuY2hhbm5lbCwgYmlxdWFkLmZpbHRlciwgJmJpcXVhZC5kYXRhKTsKLQkJaWYgKHJjICE9IDApIHJldHVybiByYzsKLQl9Ci0KLQlpZiAoY21kICYgU0lPQ19PVVQpIHsKLQkJcmM9dGFzMzAwNF9yZWFkX2JpcXVhZChzZWxmLCBiaXF1YWQuY2hhbm5lbCwgYmlxdWFkLmZpbHRlciwgJmJpcXVhZC5kYXRhKTsKLQkJaWYgKHJjICE9IDApIHJldHVybiByYzsKLQotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZiaXF1YWQsIHNpemVvZihzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9lcV9saXN0X3J3KAlzdHJ1Y3QgdGFzMzAwNF9kYXRhX3QgKnNlbGYsCi0JCQl1X2ludCBjbWQsCi0JCQl1X2xvbmcgYXJnKQotewotCWludCByYyA9IDA7Ci0JaW50IGZpbHRlcl9jb3VudDsKLQlpbnQgZmxhZ3M7Ci0JaW50IGksajsKLQljaGFyIHN5bmNfcmVxdWlyZWRbVEFTMzAwNF9CSVFVQURfQ0hBTk5FTF9DT1VOVF1bVEFTMzAwNF9CSVFVQURfRklMVEVSX0NPVU5UXTsKLQlzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QgYmlxdWFkOwotCXN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfbGlzdF90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQotCW1lbXNldChzeW5jX3JlcXVpcmVkLDAsc2l6ZW9mKHN5bmNfcmVxdWlyZWQpKTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZmlsdGVyX2NvdW50LCAmYXJncC0+ZmlsdGVyX2NvdW50LCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFncywgJmFyZ3AtPmZsYWdzLCBzaXplb2YoaW50KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKGNtZCAmIFNJT0NfSU4pIHsKLQl9Ci0KLQlmb3IgKGk9MDsgaSA8IGZpbHRlcl9jb3VudDsgaSsrKSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcigmYmlxdWFkLCAmYXJncC0+YmlxdWFkc1tpXSwKLQkJCQkgICBzaXplb2Yoc3RydWN0IHRhc19iaXF1YWRfY3RybF90KSkpIHsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0KLQkJaWYgKGNtZCAmIFNJT0NfSU4pIHsKLQkJCXN5bmNfcmVxdWlyZWRbYmlxdWFkLmNoYW5uZWxdW2JpcXVhZC5maWx0ZXJdPTE7Ci0JCQlyYz10YXMzMDA0X3dyaXRlX2JpcXVhZF9zaGFkb3coc2VsZiwgYmlxdWFkLmNoYW5uZWwsIGJpcXVhZC5maWx0ZXIsICZiaXF1YWQuZGF0YSk7Ci0JCQlpZiAocmMgIT0gMCkgcmV0dXJuIHJjOwotCQl9Ci0KLQkJaWYgKGNtZCAmIFNJT0NfT1VUKSB7Ci0JCQlyYz10YXMzMDA0X3JlYWRfYmlxdWFkKHNlbGYsIGJpcXVhZC5jaGFubmVsLCBiaXF1YWQuZmlsdGVyLCAmYmlxdWFkLmRhdGEpOwotCQkJaWYgKHJjICE9IDApIHJldHVybiByYzsKLQotCQkJaWYgKGNvcHlfdG9fdXNlcigmYXJncC0+YmlxdWFkc1tpXSwgJmJpcXVhZCwKLQkJCQkJIHNpemVvZihzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpKSkgewotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKGNtZCAmIFNJT0NfSU4pIHsKLQkJLyoKLQkJICogVGhpcyBpcyBPSyBmb3IgdGhlIHRhczMwMDQuIEZvciB0aGUKLQkJICogdGFzMzAwMWMsIGdvaW5nIGludG8gZmFzdCBsb2FkIG1vZGUgY2F1c2VzCi0JCSAqIHRoZSB0cmVibGUgYW5kIGJhc3MgdG8gYmUgcmVzZXQgdG8gMGRCLCBhbmQKLQkJICogdm9sdW1lIGNvbnRyb2xzIHRvIGJlIG11dGVkLgotCQkgKi8KLQkJaWYgKGZsYWdzICYgVEFTX0JJUVVBRF9GQVNUX0xPQUQpIHRhczMwMDRfZmFzdF9sb2FkKHNlbGYsMSk7Ci0JCWZvciAoaT0wOyBpPFRBUzMwMDRfQklRVUFEX0NIQU5ORUxfQ09VTlQ7IGkrKykgewotCQkJZm9yIChqPTA7IGo8VEFTMzAwNF9CSVFVQURfRklMVEVSX0NPVU5UOyBqKyspIHsKLQkJCQlpZiAoc3luY19yZXF1aXJlZFtpXVtqXSkgewotCQkJCQlyYz10YXMzMDA0X3N5bmNfYmlxdWFkKHNlbGYsIGksIGopOwotCQkJCQlpZiAocmMgPCAwKSBnb3RvIG91dDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQlvdXQ6Ci0JCWlmIChmbGFncyAmIFRBU19CSVFVQURfRkFTVF9MT0FEKQotCQkJdGFzMzAwNF9mYXN0X2xvYWQoc2VsZiwwKTsKLQl9Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDRfdXBkYXRlX2RyY2UoCXN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZiwKLQkJCWludCBmbGFncywKLQkJCXN0cnVjdCB0YXNfZHJjZV90ICpkcmNlKQotewotCXRhc19zaGFkb3dfdCAqc2hhZG93OwotCWludCBpOwotCXNoYWRvdz1zZWxmLT5zdXBlci5zaGFkb3c7Ci0KLQlpZiAoZmxhZ3MgJiBUQVNfRFJDRV9BQk9WRV9SQVRJTykgewotCQlzZWxmLT5kcmNlX3N0YXRlLmFib3ZlLmV4cGFuZCA9IGRyY2UtPmFib3ZlLmV4cGFuZDsKLQkJaWYgKGRyY2UtPmFib3ZlLnZhbCA9PSAoMTw8OCkpIHsKLQkJCXNlbGYtPmRyY2Vfc3RhdGUuYWJvdmUudmFsID0gMTw8ODsKLQkJCXNoYWRvd1tUQVMzMDA0X1JFR19EUkNdWzBdID0gMHgwMjsKLQkJCQkJCi0JCX0gZWxzZSBpZiAoZHJjZS0+YWJvdmUuZXhwYW5kKSB7Ci0JCQlpPWFib3ZlX3RocmVzaG9sZF9leHBhbnNpb25faW5kZXgoZHJjZS0+YWJvdmUudmFsKTsKLQkJCXNlbGYtPmRyY2Vfc3RhdGUuYWJvdmUudmFsPWFib3ZlX3RocmVzaG9sZF9leHBhbnNpb25fcmF0aW9baV07Ci0JCQlzaGFkb3dbVEFTMzAwNF9SRUdfRFJDXVswXSA9IDB4MGEgKyAoaTw8Myk7Ci0JCX0gZWxzZSB7Ci0JCQlpPWFib3ZlX3RocmVzaG9sZF9jb21wcmVzc2lvbl9pbmRleChkcmNlLT5hYm92ZS52YWwpOwotCQkJc2VsZi0+ZHJjZV9zdGF0ZS5hYm92ZS52YWw9YWJvdmVfdGhyZXNob2xkX2NvbXByZXNzaW9uX3JhdGlvW2ldOwotCQkJc2hhZG93W1RBUzMwMDRfUkVHX0RSQ11bMF0gPSAweDA4ICsgKGk8PDMpOwotCQl9Ci0JfQotCi0JaWYgKGZsYWdzICYgVEFTX0RSQ0VfQkVMT1dfUkFUSU8pIHsKLQkJc2VsZi0+ZHJjZV9zdGF0ZS5iZWxvdy5leHBhbmQgPSBkcmNlLT5iZWxvdy5leHBhbmQ7Ci0JCWlmIChkcmNlLT5iZWxvdy52YWwgPT0gKDE8PDgpKSB7Ci0JCQlzZWxmLT5kcmNlX3N0YXRlLmJlbG93LnZhbCA9IDE8PDg7Ci0JCQlzaGFkb3dbVEFTMzAwNF9SRUdfRFJDXVsxXSA9IDB4MDI7Ci0JCQkJCQotCQl9IGVsc2UgaWYgKGRyY2UtPmJlbG93LmV4cGFuZCkgewotCQkJaT1iZWxvd190aHJlc2hvbGRfZXhwYW5zaW9uX2luZGV4KGRyY2UtPmJlbG93LnZhbCk7Ci0JCQlzZWxmLT5kcmNlX3N0YXRlLmJlbG93LnZhbD1iZWxvd190aHJlc2hvbGRfZXhwYW5zaW9uX3JhdGlvW2ldOwotCQkJc2hhZG93W1RBUzMwMDRfUkVHX0RSQ11bMV0gPSAweDA4ICsgKGk8PDMpOwotCQl9IGVsc2UgewotCQkJaT1iZWxvd190aHJlc2hvbGRfY29tcHJlc3Npb25faW5kZXgoZHJjZS0+YmVsb3cudmFsKTsKLQkJCXNlbGYtPmRyY2Vfc3RhdGUuYmVsb3cudmFsPWJlbG93X3RocmVzaG9sZF9jb21wcmVzc2lvbl9yYXRpb1tpXTsKLQkJCXNoYWRvd1tUQVMzMDA0X1JFR19EUkNdWzFdID0gMHgwYSArIChpPDwzKTsKLQkJfQotCX0KLQotCWlmIChmbGFncyAmIFRBU19EUkNFX1RIUkVTSE9MRCkgewotCQlzZWxmLT5kcmNlX3N0YXRlLnRocmVzaG9sZD1xdWFudGl6ZV9kYihkcmNlLT50aHJlc2hvbGQpOwotCQlzaGFkb3dbVEFTMzAwNF9SRUdfRFJDXVsyXSA9IGRiX3RvX3JlZ3ZhbChzZWxmLT5kcmNlX3N0YXRlLnRocmVzaG9sZCk7Ci0JfQotCi0JaWYgKGZsYWdzICYgVEFTX0RSQ0VfRU5FUkdZKSB7Ci0JCWk9dGltZV9pbmRleChkcmNlLT5lbmVyZ3kpOwotCQlzZWxmLT5kcmNlX3N0YXRlLmVuZXJneT10aW1lX2NvbnN0YW50c1tpXTsKLQkJc2hhZG93W1RBUzMwMDRfUkVHX0RSQ11bM10gPSAweDQwICsgKGk8PDQpOwotCX0KLQotCWlmIChmbGFncyAmIFRBU19EUkNFX0FUVEFDSykgewotCQlpPXRpbWVfaW5kZXgoZHJjZS0+YXR0YWNrKTsKLQkJc2VsZi0+ZHJjZV9zdGF0ZS5hdHRhY2s9dGltZV9jb25zdGFudHNbaV07Ci0JCXNoYWRvd1tUQVMzMDA0X1JFR19EUkNdWzRdID0gMHg0MCArIChpPDw0KTsKLQl9Ci0KLQlpZiAoZmxhZ3MgJiBUQVNfRFJDRV9ERUNBWSkgewotCQlpPXRpbWVfaW5kZXgoZHJjZS0+ZGVjYXkpOwotCQlzZWxmLT5kcmNlX3N0YXRlLmRlY2F5PXRpbWVfY29uc3RhbnRzW2ldOwotCQlzaGFkb3dbVEFTMzAwNF9SRUdfRFJDXVs1XSA9IDB4NDAgKyAoaTw8NCk7Ci0JfQotCi0JaWYgKGZsYWdzICYgVEFTX0RSQ0VfRU5BQkxFKSB7Ci0JCXNlbGYtPmRyY2Vfc3RhdGUuZW5hYmxlID0gZHJjZS0+ZW5hYmxlOwotCX0KLQotCWlmICghc2VsZi0+ZHJjZV9zdGF0ZS5lbmFibGUpIHsKLQkJc2hhZG93W1RBUzMwMDRfUkVHX0RSQ11bMF0gfD0gMHgwMTsKLQl9Ci0KLSNpZmRlZiBERUJVR19EUkNFCi0JcHJpbnRrKCJEUkNFOiBzZXQgWyBFTkFCTEU6JXggQUJPVkU6JXgvJXggQkVMT1c6JXgvJXggVEhSRVNIOiV4IEVORVJHWToleCBBVFRBQ0s6JXggREVDQVk6JXhcbiIsCi0JICAgICAgIHNlbGYtPmRyY2Vfc3RhdGUuZW5hYmxlLAotCSAgICAgICBzZWxmLT5kcmNlX3N0YXRlLmFib3ZlLmV4cGFuZCxzZWxmLT5kcmNlX3N0YXRlLmFib3ZlLnZhbCwKLQkgICAgICAgc2VsZi0+ZHJjZV9zdGF0ZS5iZWxvdy5leHBhbmQsc2VsZi0+ZHJjZV9zdGF0ZS5iZWxvdy52YWwsCi0JICAgICAgIHNlbGYtPmRyY2Vfc3RhdGUudGhyZXNob2xkLAotCSAgICAgICBzZWxmLT5kcmNlX3N0YXRlLmVuZXJneSwKLQkgICAgICAgc2VsZi0+ZHJjZV9zdGF0ZS5hdHRhY2ssCi0JICAgICAgIHNlbGYtPmRyY2Vfc3RhdGUuZGVjYXkpOwotCi0JcHJpbnRrKCJEUkNFOiByZWcgWyAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCBdXG4iLAotCSAgICAgICAodW5zaWduZWQgY2hhcilzaGFkb3dbVEFTMzAwNF9SRUdfRFJDXVswXSwKLQkgICAgICAgKHVuc2lnbmVkIGNoYXIpc2hhZG93W1RBUzMwMDRfUkVHX0RSQ11bMV0sCi0JICAgICAgICh1bnNpZ25lZCBjaGFyKXNoYWRvd1tUQVMzMDA0X1JFR19EUkNdWzJdLAotCSAgICAgICAodW5zaWduZWQgY2hhcilzaGFkb3dbVEFTMzAwNF9SRUdfRFJDXVszXSwKLQkgICAgICAgKHVuc2lnbmVkIGNoYXIpc2hhZG93W1RBUzMwMDRfUkVHX0RSQ11bNF0sCi0JICAgICAgICh1bnNpZ25lZCBjaGFyKXNoYWRvd1tUQVMzMDA0X1JFR19EUkNdWzVdKTsKLSNlbmRpZgotCi0JcmV0dXJuIHRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLCBUQVMzMDA0X1JFR19EUkMpOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X2RyY2VfcncoCXN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZiwKLQkJCXVfaW50IGNtZCwKLQkJCXVfbG9uZyBhcmcpCi17Ci0JaW50IHJjOwotCXN0cnVjdCB0YXNfZHJjZV9jdHJsX3QgZHJjZV9jdHJsOwotCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZkcmNlX2N0cmwsIGFyZ3AsIHNpemVvZihzdHJ1Y3QgdGFzX2RyY2VfY3RybF90KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0jaWZkZWYgREVCVUdfRFJDRQotCXByaW50aygiRFJDRTogaW5wdXQgWyBGTEFHUzoleCBFTkFCTEU6JXggQUJPVkU6JXgvJXggQkVMT1c6JXgvJXggVEhSRVNIOiV4IEVORVJHWToleCBBVFRBQ0s6JXggREVDQVk6JXhcbiIsCi0JICAgICAgIGRyY2VfY3RybC5mbGFncywKLQkgICAgICAgZHJjZV9jdHJsLmRhdGEuZW5hYmxlLAotCSAgICAgICBkcmNlX2N0cmwuZGF0YS5hYm92ZS5leHBhbmQsZHJjZV9jdHJsLmRhdGEuYWJvdmUudmFsLAotCSAgICAgICBkcmNlX2N0cmwuZGF0YS5iZWxvdy5leHBhbmQsZHJjZV9jdHJsLmRhdGEuYmVsb3cudmFsLAotCSAgICAgICBkcmNlX2N0cmwuZGF0YS50aHJlc2hvbGQsCi0JICAgICAgIGRyY2VfY3RybC5kYXRhLmVuZXJneSwKLQkgICAgICAgZHJjZV9jdHJsLmRhdGEuYXR0YWNrLAotCSAgICAgICBkcmNlX2N0cmwuZGF0YS5kZWNheSk7Ci0jZW5kaWYKLQotCWlmIChjbWQgJiBTSU9DX0lOKSB7Ci0JCXJjID0gdGFzMzAwNF91cGRhdGVfZHJjZShzZWxmLCBkcmNlX2N0cmwuZmxhZ3MsICZkcmNlX2N0cmwuZGF0YSk7Ci0JCWlmIChyYyA8IDApIHJldHVybiByYzsKLQl9Ci0KLQlpZiAoY21kICYgU0lPQ19PVVQpIHsKLQkJaWYgKGRyY2VfY3RybC5mbGFncyAmIFRBU19EUkNFX0VOQUJMRSkKLQkJCWRyY2VfY3RybC5kYXRhLmVuYWJsZSA9IHNlbGYtPmRyY2Vfc3RhdGUuZW5hYmxlOwotCQlpZiAoZHJjZV9jdHJsLmZsYWdzICYgVEFTX0RSQ0VfQUJPVkVfUkFUSU8pCi0JCQlkcmNlX2N0cmwuZGF0YS5hYm92ZSA9IHNlbGYtPmRyY2Vfc3RhdGUuYWJvdmU7Ci0JCWlmIChkcmNlX2N0cmwuZmxhZ3MgJiBUQVNfRFJDRV9CRUxPV19SQVRJTykKLQkJCWRyY2VfY3RybC5kYXRhLmJlbG93ID0gc2VsZi0+ZHJjZV9zdGF0ZS5iZWxvdzsKLQkJaWYgKGRyY2VfY3RybC5mbGFncyAmIFRBU19EUkNFX1RIUkVTSE9MRCkKLQkJCWRyY2VfY3RybC5kYXRhLnRocmVzaG9sZCA9IHNlbGYtPmRyY2Vfc3RhdGUudGhyZXNob2xkOwotCQlpZiAoZHJjZV9jdHJsLmZsYWdzICYgVEFTX0RSQ0VfRU5FUkdZKQotCQkJZHJjZV9jdHJsLmRhdGEuZW5lcmd5ID0gc2VsZi0+ZHJjZV9zdGF0ZS5lbmVyZ3k7Ci0JCWlmIChkcmNlX2N0cmwuZmxhZ3MgJiBUQVNfRFJDRV9BVFRBQ0spCi0JCQlkcmNlX2N0cmwuZGF0YS5hdHRhY2sgPSBzZWxmLT5kcmNlX3N0YXRlLmF0dGFjazsKLQkJaWYgKGRyY2VfY3RybC5mbGFncyAmIFRBU19EUkNFX0RFQ0FZKQotCQkJZHJjZV9jdHJsLmRhdGEuZGVjYXkgPSBzZWxmLT5kcmNlX3N0YXRlLmRlY2F5OwotCi0JCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmRyY2VfY3RybCwKLQkJCQkgc2l6ZW9mKHN0cnVjdCB0YXNfZHJjZV9jdHJsX3QpKSkgewotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLXRhczMwMDRfdXBkYXRlX2RldmljZV9wYXJhbWV0ZXJzKHN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZikKLXsKLQljaGFyIGRhdGE7Ci0JaW50IGk7Ci0KLQlpZiAoIXNlbGYpIHJldHVybjsKLQotCWlmIChzZWxmLT5vdXRwdXRfaWQgPT0gVEFTX09VVFBVVF9IRUFEUEhPTkVTKSB7Ci0JCS8qIHR1cm4gb24gYWxsUGFzcyB3aGVuIGhlYWRwaG9uZXMgYXJlIHBsdWdnZWQgaW4gKi8KLQkJZGF0YSA9IDB4MDI7Ci0JfSBlbHNlIHsKLQkJZGF0YSA9IDB4MDA7Ci0JfQotCi0JdGFzMzAwNF93cml0ZV9yZWdpc3RlcihzZWxmLCBUQVMzMDA0X1JFR19NQ1IyLCAmZGF0YSwgV1JJVEVfTk9STUFMIHwgRk9SQ0VfV1JJVEUpOwotCi0JZm9yIChpPTA7IHRhczMwMDRfZXFfcHJlZnNbaV07IGkrKykgewotCQlzdHJ1Y3QgdGFzX2VxX3ByZWZfdCAqZXEgPSB0YXMzMDA0X2VxX3ByZWZzW2ldOwotCi0JCWlmIChlcS0+ZGV2aWNlX2lkID09IHNlbGYtPmRldmljZV9pZCAmJgotCQkgICAgKGVxLT5vdXRwdXRfaWQgPT0gMCB8fCBlcS0+b3V0cHV0X2lkID09IHNlbGYtPm91dHB1dF9pZCkgJiYKLQkJICAgIChlcS0+c3BlYWtlcl9pZCA9PSAwIHx8IGVxLT5zcGVha2VyX2lkID09IHNlbGYtPnNwZWFrZXJfaWQpKSB7Ci0KLQkJCXRhczMwMDRfdXBkYXRlX2RyY2Uoc2VsZiwgVEFTX0RSQ0VfQUxMLCBlcS0+ZHJjZSk7Ci0JCQl0YXMzMDA0X3dyaXRlX2JpcXVhZF9saXN0KHNlbGYsIGVxLT5maWx0ZXJfY291bnQsIFRBU19CSVFVQURfRkFTVF9MT0FELCBlcS0+YmlxdWFkcyk7Ci0KLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotdGFzMzAwNF9kZXZpY2VfY2hhbmdlX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZjsKLQlzZWxmID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB0YXMzMDA0X2RhdGFfdCwgY2hhbmdlKTsKLQl0YXMzMDA0X3VwZGF0ZV9kZXZpY2VfcGFyYW1ldGVycyhzZWxmKTsKLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9vdXRwdXRfZGV2aWNlX2NoYW5nZSgJc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmLAotCQkJCWludCBkZXZpY2VfaWQsCi0JCQkJaW50IG91dHB1dF9pZCwKLQkJCQlpbnQgc3BlYWtlcl9pZCkKLXsKLQlzZWxmLT5kZXZpY2VfaWQ9ZGV2aWNlX2lkOwotCXNlbGYtPm91dHB1dF9pZD1vdXRwdXRfaWQ7Ci0Jc2VsZi0+c3BlYWtlcl9pZD1zcGVha2VyX2lkOwotCi0Jc2NoZWR1bGVfd29yaygmc2VsZi0+Y2hhbmdlKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci10YXMzMDA0X2RldmljZV9pb2N0bCgJc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmLAotCQkJdV9pbnQgY21kLAotCQkJdV9sb25nIGFyZykKLXsKLQl1aW50IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVEFTX1JFQURfRVE6Ci0JY2FzZSBUQVNfV1JJVEVfRVE6Ci0JCXJldHVybiB0YXMzMDA0X2VxX3J3KHNlbGYsIGNtZCwgYXJnKTsKLQotCWNhc2UgVEFTX1JFQURfRVFfTElTVDoKLQljYXNlIFRBU19XUklURV9FUV9MSVNUOgotCQlyZXR1cm4gdGFzMzAwNF9lcV9saXN0X3J3KHNlbGYsIGNtZCwgYXJnKTsKLQotCWNhc2UgVEFTX1JFQURfRVFfRklMVEVSX0NPVU5UOgotCQlwdXRfdXNlcihUQVMzMDA0X0JJUVVBRF9GSUxURVJfQ09VTlQsIGFyZ3ApOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVEFTX1JFQURfRVFfQ0hBTk5FTF9DT1VOVDoKLQkJcHV0X3VzZXIoVEFTMzAwNF9CSVFVQURfQ0hBTk5FTF9DT1VOVCwgYXJncCk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBUQVNfUkVBRF9EUkNFOgotCWNhc2UgVEFTX1dSSVRFX0RSQ0U6Ci0JCXJldHVybiB0YXMzMDA0X2RyY2Vfcncoc2VsZiwgY21kLCBhcmcpOwotCi0JY2FzZSBUQVNfUkVBRF9EUkNFX0NBUFM6Ci0JCXB1dF91c2VyKFRBU19EUkNFX0VOQUJMRSAgICAgICAgIHwKLQkJCSBUQVNfRFJDRV9BQk9WRV9SQVRJTyAgICB8Ci0JCQkgVEFTX0RSQ0VfQkVMT1dfUkFUSU8gICAgfAotCQkJIFRBU19EUkNFX1RIUkVTSE9MRCAgICAgIHwKLQkJCSBUQVNfRFJDRV9FTkVSR1kgICAgICAgICB8Ci0JCQkgVEFTX0RSQ0VfQVRUQUNLICAgICAgICAgfAotCQkJIFRBU19EUkNFX0RFQ0FZLAotCQkJIGFyZ3ApOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgVEFTX1JFQURfRFJDRV9NSU46Ci0JY2FzZSBUQVNfUkVBRF9EUkNFX01BWDogewotCQlzdHJ1Y3QgdGFzX2RyY2VfY3RybF90IGRyY2VfY3RybDsKLQkJY29uc3Qgc3RydWN0IHRhc19kcmNlX3QgKmRyY2VfY29weTsKLQotCQlpZiAoY29weV9mcm9tX3VzZXIoJmRyY2VfY3RybCwgYXJncCwKLQkJCQkgICBzaXplb2Yoc3RydWN0IHRhc19kcmNlX2N0cmxfdCkpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCi0JCWlmIChjbWQgPT0gVEFTX1JFQURfRFJDRV9NSU4pIHsKLQkJCWRyY2VfY29weT0mdGFzMzAwNF9kcmNlX21pbjsKLQkJfSBlbHNlIHsKLQkJCWRyY2VfY29weT0mdGFzMzAwNF9kcmNlX21heDsKLQkJfQotCi0JCWlmIChkcmNlX2N0cmwuZmxhZ3MgJiBUQVNfRFJDRV9BQk9WRV9SQVRJTykgewotCQkJZHJjZV9jdHJsLmRhdGEuYWJvdmU9ZHJjZV9jb3B5LT5hYm92ZTsKLQkJfQotCQlpZiAoZHJjZV9jdHJsLmZsYWdzICYgVEFTX0RSQ0VfQkVMT1dfUkFUSU8pIHsKLQkJCWRyY2VfY3RybC5kYXRhLmJlbG93PWRyY2VfY29weS0+YmVsb3c7Ci0JCX0KLQkJaWYgKGRyY2VfY3RybC5mbGFncyAmIFRBU19EUkNFX1RIUkVTSE9MRCkgewotCQkJZHJjZV9jdHJsLmRhdGEudGhyZXNob2xkPWRyY2VfY29weS0+dGhyZXNob2xkOwotCQl9Ci0JCWlmIChkcmNlX2N0cmwuZmxhZ3MgJiBUQVNfRFJDRV9FTkVSR1kpIHsKLQkJCWRyY2VfY3RybC5kYXRhLmVuZXJneT1kcmNlX2NvcHktPmVuZXJneTsKLQkJfQotCQlpZiAoZHJjZV9jdHJsLmZsYWdzICYgVEFTX0RSQ0VfQVRUQUNLKSB7Ci0JCQlkcmNlX2N0cmwuZGF0YS5hdHRhY2s9ZHJjZV9jb3B5LT5hdHRhY2s7Ci0JCX0KLQkJaWYgKGRyY2VfY3RybC5mbGFncyAmIFRBU19EUkNFX0RFQ0FZKSB7Ci0JCQlkcmNlX2N0cmwuZGF0YS5kZWNheT1kcmNlX2NvcHktPmRlY2F5OwotCQl9Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmZHJjZV9jdHJsLAotCQkJCSBzaXplb2Yoc3RydWN0IHRhc19kcmNlX2N0cmxfdCkpKSB7Ci0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCX0KLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludAotdGFzMzAwNF9pbml0X21peGVyKHN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZikKLXsKLQl1bnNpZ25lZCBjaGFyIG1jciA9ICgxPDw2KSsoMjw8NCkrKDI8PDIpOwotCi0JLyogTWFrZSBzdXJlIHNvbWV0aGluZyBhbnN3ZXJzIG9uIHRoZSBpMmMgYnVzICovCi0JaWYgKHRhczMwMDRfd3JpdGVfcmVnaXN0ZXIoc2VsZiwgVEFTMzAwNF9SRUdfTUNSLCAmbWNyLAotCSAgICBXUklURV9OT1JNQUwgfCBGT1JDRV9XUklURSkgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQl0YXMzMDA0X2Zhc3RfbG9hZChzZWxmLCAxKTsKLQotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDApOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDEpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDIpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDMpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDQpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDUpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDYpOwotCi0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQwKTsKLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDEpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0xFRlRfQklRVUFEMik7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQzKTsKLQkodm9pZCl0YXMzMDA0X3N5bmNfcmVnaXN0ZXIoc2VsZixUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDQpOwotCSh2b2lkKXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLFRBUzMwMDRfUkVHX0xFRlRfQklRVUFENSk7Ci0JKHZvaWQpdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQ2KTsKLQotCXRhczMwMDRfc3luY19yZWdpc3RlcihzZWxmLCBUQVMzMDA0X1JFR19EUkMpOwotCi0JdGFzMzAwNF9zeW5jX3JlZ2lzdGVyKHNlbGYsIFRBUzMwMDRfUkVHX01DUjIpOwotCi0JdGFzMzAwNF9mYXN0X2xvYWQoc2VsZiwgMCk7Ci0KLQl0YXMzMDA0X3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9WT0xVTUUsIFZPTF9ERUZBVUxUPDw4IHwgVk9MX0RFRkFVTFQpOwotCXRhczMwMDRfc2V0X21peGVyX2xldmVsKHNlbGYsIFNPVU5EX01JWEVSX1BDTSwgSU5QVVRfREVGQVVMVDw8OCB8IElOUFVUX0RFRkFVTFQpOwotCXRhczMwMDRfc2V0X21peGVyX2xldmVsKHNlbGYsIFNPVU5EX01JWEVSX0FMVFBDTSwgMCk7Ci0JdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfSU1JWCwgMCk7Ci0KLQl0YXMzMDA0X3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9CQVNTLCBCQVNTX0RFRkFVTFQpOwotCXRhczMwMDRfc2V0X21peGVyX2xldmVsKHNlbGYsIFNPVU5EX01JWEVSX1RSRUJMRSwgVFJFQkxFX0RFRkFVTFQpOwotCi0JdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfTElORSxTV19JTlBVVF9WT0xVTUVfREVGQVVMVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdGFzMzAwNF91bmluaXRfbWl4ZXIoc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmKQotewotCXRhczMwMDRfc2V0X21peGVyX2xldmVsKHNlbGYsIFNPVU5EX01JWEVSX1ZPTFVNRSwgMCk7Ci0JdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfUENNLCAwKTsKLQl0YXMzMDA0X3NldF9taXhlcl9sZXZlbChzZWxmLCBTT1VORF9NSVhFUl9BTFRQQ00sIDApOwotCXRhczMwMDRfc2V0X21peGVyX2xldmVsKHNlbGYsIFNPVU5EX01JWEVSX0lNSVgsIDApOwotCi0JdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfQkFTUywgMCk7Ci0JdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwoc2VsZiwgU09VTkRfTUlYRVJfVFJFQkxFLCAwKTsKLQotCXRhczMwMDRfc2V0X21peGVyX2xldmVsKHNlbGYsIFNPVU5EX01JWEVSX0xJTkUsIDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXRhczMwMDRfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB0YXMzMDA0X2RhdGFfdCAqc2VsZjsKLQlzaXplX3Qgc3ogPSBzaXplb2YoKnNlbGYpICsgKFRBUzMwMDRfUkVHX01BWCpzaXplb2YodGFzX3NoYWRvd190KSk7Ci0JY2hhciBkcmNlX2luaXRbXSA9IHsgMHg2OSwgMHgyMiwgMHg5ZiwgMHhiMCwgMHg2MCwgMHhhMCB9OwotCWNoYXIgbWNyMiA9IDA7Ci0JaW50IGksIGo7Ci0KLQlzZWxmID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZWxmKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNlbGYtPnN1cGVyLmNsaWVudCA9IGNsaWVudDsKLQlzZWxmLT5zdXBlci5zaGFkb3cgPSAodGFzX3NoYWRvd190ICopKHNlbGYrMSk7Ci0Jc2VsZi0+b3V0cHV0X2lkID0gVEFTX09VVFBVVF9IRUFEUEhPTkVTOwotCi0JZGV2X3NldF9kcnZkYXRhKCZjbGllbnQtPmRldiwgc2VsZik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgVEFTMzAwNF9CSVFVQURfQ0hBTk5FTF9DT1VOVDsgaSsrKQotCQlmb3IgKGogPSAwOyBqPFRBUzMwMDRfQklRVUFEX0ZJTFRFUl9DT1VOVDsgaisrKQotCQkJdGFzMzAwNF93cml0ZV9iaXF1YWRfc2hhZG93KHNlbGYsIGksIGosCi0JCQkJCSZ0YXMzMDA0X2VxX3VuaXR5KTsKLQotCXRhczMwMDRfd3JpdGVfcmVnaXN0ZXIoc2VsZiwgVEFTMzAwNF9SRUdfTUNSMiwgJm1jcjIsIFdSSVRFX1NIQURPVyk7Ci0JdGFzMzAwNF93cml0ZV9yZWdpc3RlcihzZWxmLCBUQVMzMDA0X1JFR19EUkMsIGRyY2VfaW5pdCwgV1JJVEVfU0hBRE9XKTsKLQotCUlOSVRfV09SSygmc2VsZi0+Y2hhbmdlLCB0YXMzMDA0X2RldmljZV9jaGFuZ2VfaGFuZGxlcik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIAotdGFzMzAwNF91bmluaXQoc3RydWN0IHRhczMwMDRfZGF0YV90ICpzZWxmKQotewotCXRhczMwMDRfdW5pbml0X21peGVyKHNlbGYpOwotCWtmcmVlKHNlbGYpOwotfQotCi0KLXN0cnVjdCB0YXNfZHJpdmVyX2hvb2tzX3QgdGFzMzAwNF9ob29rcyA9IHsKLQkuaW5pdAkJCT0gKHRhc19ob29rX2luaXRfdCl0YXMzMDA0X2luaXQsCi0JLnBvc3RfaW5pdAkJPSAodGFzX2hvb2tfcG9zdF9pbml0X3QpdGFzMzAwNF9pbml0X21peGVyLAotCS51bmluaXQJCQk9ICh0YXNfaG9va191bmluaXRfdCl0YXMzMDA0X3VuaW5pdCwKLQkuZ2V0X21peGVyX2xldmVsCT0gKHRhc19ob29rX2dldF9taXhlcl9sZXZlbF90KXRhczMwMDRfZ2V0X21peGVyX2xldmVsLAotCS5zZXRfbWl4ZXJfbGV2ZWwJPSAodGFzX2hvb2tfc2V0X21peGVyX2xldmVsX3QpdGFzMzAwNF9zZXRfbWl4ZXJfbGV2ZWwsCi0JLmVudGVyX3NsZWVwCQk9ICh0YXNfaG9va19lbnRlcl9zbGVlcF90KXRhczMwMDRfZW50ZXJfc2xlZXAsCi0JLmxlYXZlX3NsZWVwCQk9ICh0YXNfaG9va19sZWF2ZV9zbGVlcF90KXRhczMwMDRfbGVhdmVfc2xlZXAsCi0JLnN1cHBvcnRlZF9taXhlcnMJPSAodGFzX2hvb2tfc3VwcG9ydGVkX21peGVyc190KXRhczMwMDRfc3VwcG9ydGVkX21peGVycywKLQkubWl4ZXJfaXNfc3RlcmVvCT0gKHRhc19ob29rX21peGVyX2lzX3N0ZXJlb190KXRhczMwMDRfbWl4ZXJfaXNfc3RlcmVvLAotCS5zdGVyZW9fbWl4ZXJzCQk9ICh0YXNfaG9va19zdGVyZW9fbWl4ZXJzX3QpdGFzMzAwNF9zdGVyZW9fbWl4ZXJzLAotCS5vdXRwdXRfZGV2aWNlX2NoYW5nZQk9ICh0YXNfaG9va19vdXRwdXRfZGV2aWNlX2NoYW5nZV90KXRhczMwMDRfb3V0cHV0X2RldmljZV9jaGFuZ2UsCi0JLmRldmljZV9pb2N0bAkJPSAodGFzX2hvb2tfZGV2aWNlX2lvY3RsX3QpdGFzMzAwNF9kZXZpY2VfaW9jdGwKLX07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwNC5oIGIvc291bmQvb3NzL2RtYXNvdW5kL3RhczMwMDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZkNTg0Yi4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwNC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotLyoKLSAqIEhlYWRlciBmaWxlIGZvciB0aGUgaTJjL2kycyBiYXNlZCBUQTMwMDQgc291bmQgY2hpcCB1c2VkCi0gKiBvbiBzb21lIEFwcGxlIGhhcmR3YXJlLiBBbHNvIGtub3duIGFzICJ0dW1ibGVyIi4KLSAqCi0gKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogV3JpdHRlbiBieSBDaHJpc3RvcGhlciBDLiBDaGltZWxpcyA8Y2hyaXNAZGViaWFuLm9yZz4KLSAqLwotCi0jaWZuZGVmIF9UQVMzMDA0X0hfCi0jZGVmaW5lIF9UQVMzMDA0X0hfCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSAidGFzX2NvbW1vbi5oIgotI2luY2x1ZGUgInRhc19lcV9wcmVmcy5oIgotCi0vKgotICogTWFjcm9zIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgcmVnaXN0ZXJzIHRoYXQgd2Ugd3JpdGUgdG8KLSAqIHdoZW4gc2V0dGluZyB0aGUgdmFyaW91cyB2YWx1ZXMuCi0gKi8KLQotI2RlZmluZSBUQVMzMDA0X1ZFUlNJT04JICAgICAgICAiMC4zIgotI2RlZmluZSBUQVMzMDA0X0RBVEUJICAgICAgICAiMjAwMTEyMTQiCi0KLSNkZWZpbmUgSTJDX0RSSVZFUk5BTUVfVEFTMzAwNCAiVEFTMzAwNCBkcml2ZXIgViAiIFRBUzMwMDRfVkVSU0lPTgotI2RlZmluZSBJMkNfRFJJVkVSSURfVEFTMzAwNCAgICAoSTJDX0RSSVZFUklEX1RBU19CQVNFKzEpCi0KLWV4dGVybiAgc3RydWN0IHRhc19kcml2ZXJfaG9va3NfdCB0YXMzMDA0X2hvb2tzOwotZXh0ZXJuIHN0cnVjdCB0YXNfZ2Fpbl90IHRhczMwMDRfZ2FpbjsKLWV4dGVybiBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCAqdGFzMzAwNF9lcV9wcmVmc1tdOwotCi1lbnVtIHRhczMwMDRfcmVnX3QgewotICBUQVMzMDA0X1JFR19NQ1IgICAgICAgICAgICAgICAgICAgID0gMHgwMSwKLSAgVEFTMzAwNF9SRUdfRFJDICAgICAgICAgICAgICAgICAgICA9IDB4MDIsCi0KLSAgVEFTMzAwNF9SRUdfVk9MVU1FICAgICAgICAgICAgICAgICA9IDB4MDQsCi0gIFRBUzMwMDRfUkVHX1RSRUJMRSAgICAgICAgICAgICAgICAgPSAweDA1LAotICBUQVMzMDA0X1JFR19CQVNTICAgICAgICAgICAgICAgICAgID0gMHgwNiwKLSAgVEFTMzAwNF9SRUdfTEVGVF9NSVhFUiAgICAgICAgICAgICA9IDB4MDcsCi0gIFRBUzMwMDRfUkVHX1JJR0hUX01JWEVSICAgICAgICAgICAgPSAweDA4LAotCi0gIFRBUzMwMDRfUkVHX0xFRlRfQklRVUFEMCAgICAgICAgICAgPSAweDBhLAotICBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDEgICAgICAgICAgID0gMHgwYiwKLSAgVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQyICAgICAgICAgICA9IDB4MGMsCi0gIFRBUzMwMDRfUkVHX0xFRlRfQklRVUFEMyAgICAgICAgICAgPSAweDBkLAotICBUQVMzMDA0X1JFR19MRUZUX0JJUVVBRDQgICAgICAgICAgID0gMHgwZSwKLSAgVEFTMzAwNF9SRUdfTEVGVF9CSVFVQUQ1ICAgICAgICAgICA9IDB4MGYsCi0gIFRBUzMwMDRfUkVHX0xFRlRfQklRVUFENiAgICAgICAgICAgPSAweDEwLAotICAKLSAgVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMCAgICAgICAgICA9IDB4MTMsCi0gIFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDEgICAgICAgICAgPSAweDE0LAotICBUQVMzMDA0X1JFR19SSUdIVF9CSVFVQUQyICAgICAgICAgID0gMHgxNSwKLSAgVEFTMzAwNF9SRUdfUklHSFRfQklRVUFEMyAgICAgICAgICA9IDB4MTYsCi0gIFRBUzMwMDRfUkVHX1JJR0hUX0JJUVVBRDQgICAgICAgICAgPSAweDE3LAotICBUQVMzMDA0X1JFR19SSUdIVF9CSVFVQUQ1ICAgICAgICAgID0gMHgxOCwKLSAgVEFTMzAwNF9SRUdfUklHSFRfQklRVUFENiAgICAgICAgICA9IDB4MTksCi0KLSAgVEFTMzAwNF9SRUdfTEVGVF9MT1VEX0JJUVVBRCAgICAgICA9IDB4MjEsCi0gIFRBUzMwMDRfUkVHX1JJR0hUX0xPVURfQklRVUFEICAgICAgPSAweDIyLAotCi0gIFRBUzMwMDRfUkVHX0xFRlRfTE9VRF9CSVFVQURfR0FJTiAgPSAweDIzLAotICBUQVMzMDA0X1JFR19SSUdIVF9MT1VEX0JJUVVBRF9HQUlOID0gMHgyNCwKLQotICBUQVMzMDA0X1JFR19URVNUICAgICAgICAgICAgICAgICAgID0gMHgyOSwKLQotICBUQVMzMDA0X1JFR19BTkFMT0dfQ1RSTCAgICAgICAgICAgID0gMHg0MCwKLSAgVEFTMzAwNF9SRUdfVEVTVDEgICAgICAgICAgICAgICAgICA9IDB4NDEsCi0gIFRBUzMwMDRfUkVHX1RFU1QyICAgICAgICAgICAgICAgICAgPSAweDQyLAotICBUQVMzMDA0X1JFR19NQ1IyICAgICAgICAgICAgICAgICAgID0gMHg0MywKLQotICBUQVMzMDA0X1JFR19NQVggICAgICAgICAgICAgICAgICAgID0gMHg0NAotfTsKLQotI2VuZGlmIC8qIF9UQVMzMDA0X0hfICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzMzAwNF90YWJsZXMuYyBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDA0X3RhYmxlcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTEwZTBhLi4wMDAwMDAwCi0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXMzMDA0X3RhYmxlcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAgQEAKLSNpbmNsdWRlICJ0YXMzMDA0LmgiCi0jaW5jbHVkZSAidGFzX2VxX3ByZWZzLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2RyY2VfdCBlcXBfMTdfMV8wX2RyY2U9ewotICAgIC5lbmFibGUgICAgID0gMSwKLSAgICAuYWJvdmUgICAgICA9IHsgLnZhbCA9IDMuMCAqICgxPDw4KSwgLmV4cGFuZCA9IDAgfSwKLSAgICAuYmVsb3cgICAgICA9IHsgLnZhbCA9IDEuMCAqICgxPDw4KSwgLmV4cGFuZCA9IDAgfSwKLSAgICAudGhyZXNob2xkICA9IC0xOS4xMiAgKiAoMTw8OCksCi0gICAgLmVuZXJneSAgICAgPSAyLjQgICAgICogKDE8PDEyKSwKLSAgICAuYXR0YWNrICAgICA9IDAuMDEzICAgKiAoMTw8MTIpLAotICAgIC5kZWNheSAgICAgID0gMC4yMTIgICAqICgxPDwxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGVxcF8xN18xXzBfYmlxdWFkc1tdPXsKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmZDBkNCwgMHhlMDVlNTYsIDB4MGZkMGQ0LCAweGUwNWVlMSwgMHgwZmEyMzQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwOTEwZDcsIDB4MDg4ZTFhLCAweDAzMDY1MSwgMHgwMWRjYjEsIDB4MDJjODkyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGZmODk1LCAweGUwOTcwYiwgMHgwZjdmMDAsIDB4ZTA5NzBiLCAweDBmNzc5NSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmZDFjNCwgMHhlMWFjMjIsIDB4MGVjOGNmLCAweGUxYWMyMiwgMHgwZTlhOTQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwZjdjMWMsIDB4ZTNjYzAzLCAweDBkZjc4NiwgMHhlM2NjMDMsIDB4MGQ3M2EyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MTFmYjkyLCAweGY1YTFhMCwgMHgwNzNjZDIsIDB4ZjVhMWEwLCAweDA5Mzg2NSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBlMTdhOSwgMHgwNjhiNmMsIDB4MDhhMGU1LCAweDA2OGI2YywgMHgwNmI4OGUgfSB9IH0sCi0KLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmZDBkNCwgMHhlMDVlNTYsIDB4MGZkMGQ0LCAweGUwNWVlMSwgMHgwZmEyMzQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwOTEwZDcsIDB4MDg4ZTFhLCAweDAzMDY1MSwgMHgwMWRjYjEsIDB4MDJjODkyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGZmODk1LCAweGUwOTcwYiwgMHgwZjdmMDAsIDB4ZTA5NzBiLCAweDBmNzc5NSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmZDFjNCwgMHhlMWFjMjIsIDB4MGVjOGNmLCAweGUxYWMyMiwgMHgwZTlhOTQgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwZjdjMWMsIDB4ZTNjYzAzLCAweDBkZjc4NiwgMHhlM2NjMDMsIDB4MGQ3M2EyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MTFmYjkyLCAweGY1YTFhMCwgMHgwNzNjZDIsIDB4ZjVhMWEwLCAweDA5Mzg2NSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBlMTdhOSwgMHgwNjhiNmMsIDB4MDhhMGU1LCAweDA2OGI2YywgMHgwNmI4OGUgfSB9IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCBlcXBfMTdfMV8wID0gewotICAuc2FtcGxlX3JhdGUgICA9IDQ0MTAwLAotICAuZGV2aWNlX2lkICAgICA9IDB4MTcsCi0gIC5vdXRwdXRfaWQgICAgID0gVEFTX09VVFBVVF9JTlRFUk5BTF9TUEtSLAotICAuc3BlYWtlcl9pZCAgICA9IDB4MDAsCi0KLSAgLmRyY2UgICAgICAgICAgPSAmZXFwXzE3XzFfMF9kcmNlLAotCi0gIC5maWx0ZXJfY291bnQgID0gMTQsCi0gIC5iaXF1YWRzICAgICAgID0gZXFwXzE3XzFfMF9iaXF1YWRzCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIHN0cnVjdCB0YXNfZHJjZV90IGVxcF8xOF8xXzBfZHJjZT17Ci0gIC5lbmFibGUgICAgID0gMSwKLSAgLmFib3ZlICAgICAgPSB7IC52YWwgPSAzLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC5iZWxvdyAgICAgID0geyAudmFsID0gMS4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAudGhyZXNob2xkICA9IC0xMy4xNCAgKiAoMTw8OCksCi0gIC5lbmVyZ3kgICAgID0gMi40ICAgICAqICgxPDwxMiksCi0gIC5hdHRhY2sgICAgID0gMC4wMTMgICAqICgxPDwxMiksCi0gIC5kZWNheSAgICAgID0gMC4yMTIgICAqICgxPDwxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGVxcF8xOF8xXzBfYmlxdWFkc1tdPXsKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmNTUxNCwgMHhlMTU1ZDcsIDB4MGY1NTE0LCAweGUxNWNmYSwgMHgwZWIxNGIgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNmVjMzMsIDB4MDJhYmUzLCAweDAxNWVlZiwgMHhmNzY0ZDksIDB4MDM5MjJkIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGVmNWYyLCAweGU2N2QxZiwgMHgwYmNmMzcsIDB4ZTY3ZDFmLCAweDBhYzUyOSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBkYjA1MCwgMHhlNWJlNGQsIDB4MGQwYzc4LCAweGU1YmU0ZCwgMHgwYWJjYzggfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwZjEyOTgsIDB4ZTY0ZWM2LCAweDBjYzAzZSwgMHhlNjRlYzYsIDB4MGJkMmQ3IH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGM2NDFhLCAweDA2NTM3YSwgMHgwOGQxNTUsIDB4MDY1MzdhLCAweDA1MzU3MCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDEwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAgfSB9IH0sCi0KLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmNTUxNCwgMHhlMTU1ZDcsIDB4MGY1NTE0LCAweGUxNWNmYSwgMHgwZWIxNGIgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNmVjMzMsIDB4MDJhYmUzLCAweDAxNWVlZiwgMHhmNzY0ZDksIDB4MDM5MjJkIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGVmNWYyLCAweGU2N2QxZiwgMHgwYmNmMzcsIDB4ZTY3ZDFmLCAweDBhYzUyOSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBkYjA1MCwgMHhlNWJlNGQsIDB4MGQwYzc4LCAweGU1YmU0ZCwgMHgwYWJjYzggfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwZjEyOTgsIDB4ZTY0ZWM2LCAweDBjYzAzZSwgMHhlNjRlYzYsIDB4MGJkMmQ3IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGM2NDFhLCAweDA2NTM3YSwgMHgwOGQxNTUsIDB4MDY1MzdhLCAweDA1MzU3MCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDEwMDAwMCwgMHgwMDAwMDAsIDB4MDAwMDAwLCAweDAwMDAwMCwgMHgwMDAwMDAgfSB9IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCBlcXBfMThfMV8wID0gewotICAuc2FtcGxlX3JhdGUgICA9IDQ0MTAwLAotICAuZGV2aWNlX2lkICAgICA9IDB4MTgsCi0gIC5vdXRwdXRfaWQgICAgID0gVEFTX09VVFBVVF9JTlRFUk5BTF9TUEtSLAotICAuc3BlYWtlcl9pZCAgICA9IDB4MDAsCi0KLSAgLmRyY2UgICAgICAgICAgPSAmZXFwXzE4XzFfMF9kcmNlLAotCi0gIC5maWx0ZXJfY291bnQgID0gMTQsCi0gIC5iaXF1YWRzICAgICAgID0gZXFwXzE4XzFfMF9iaXF1YWRzCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIHN0cnVjdCB0YXNfZHJjZV90IGVxcF8xYV8xXzBfZHJjZT17Ci0gIC5lbmFibGUgICAgID0gMSwKLSAgLmFib3ZlICAgICAgPSB7IC52YWwgPSAzLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC5iZWxvdyAgICAgID0geyAudmFsID0gMS4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAudGhyZXNob2xkICA9IC0xMC43NSAgKiAoMTw8OCksCi0gIC5lbmVyZ3kgICAgID0gMi40ICAgICAqICgxPDwxMiksCi0gIC5hdHRhY2sgICAgID0gMC4wMTMgICAqICgxPDwxMiksCi0gIC5kZWNheSAgICAgID0gMC4yMTIgICAqICgxPDwxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGVxcF8xYV8xXzBfYmlxdWFkc1tdPXsKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmYjhmZCwgMHhlMDhlMDQsIDB4MGZiOGZkLCAweGUwOGY0MCwgMHgwZjczMzYgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNjM3MWQsIDB4MGM2ZTNhLCAweDA2MzcxZCwgMHgwNWJmZDMsIDB4MDMxY2EyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGZhMWMwLCAweGUxODY5MiwgMHgwZjAzMGUsIDB4ZTE4NjkyLCAweDBlYTRjZSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmZTQ5NSwgMHhlMTdlZmYsIDB4MGYwNDUyLCAweGUxN2VmZiwgMHgwZWU4ZTcgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxMDA4NTcsIDB4ZTdlNzFjLCAweDBlOTU5OSwgMHhlN2U3MWMsIDB4MGU5ZGYxIH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGZiMjZlLCAweDA2YTgyYywgMHgwZGIyYjQsIDB4MDZhODJjLCAweDBkNjUyMiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDExNDE5ZCwgMHhmMDZjYmYsIDB4MGE0ZjZlLCAweGYwNmNiZiwgMHgwYjkxMGMgfSB9IH0sCi0KLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmYjhmZCwgMHhlMDhlMDQsIDB4MGZiOGZkLCAweGUwOGY0MCwgMHgwZjczMzYgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNjM3MWQsIDB4MGM2ZTNhLCAweDA2MzcxZCwgMHgwNWJmZDMsIDB4MDMxY2EyIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGZhMWMwLCAweGUxODY5MiwgMHgwZjAzMGUsIDB4ZTE4NjkyLCAweDBlYTRjZSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmZTQ5NSwgMHhlMTdlZmYsIDB4MGYwNDUyLCAweGUxN2VmZiwgMHgwZWU4ZTcgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgxMDA4NTcsIDB4ZTdlNzFjLCAweDBlOTU5OSwgMHhlN2U3MWMsIDB4MGU5ZGYxIH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGZiMjZlLCAweDA2YTgyYywgMHgwZGIyYjQsIDB4MDZhODJjLCAweDBkNjUyMiB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDExNDE5ZCwgMHhmMDZjYmYsIDB4MGE0ZjZlLCAweGYwNmNiZiwgMHgwYjkxMGMgfSB9IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCBlcXBfMWFfMV8wID0gewotICAuc2FtcGxlX3JhdGUgICA9IDQ0MTAwLAotICAuZGV2aWNlX2lkICAgICA9IDB4MWEsCi0gIC5vdXRwdXRfaWQgICAgID0gVEFTX09VVFBVVF9JTlRFUk5BTF9TUEtSLAotICAuc3BlYWtlcl9pZCAgICA9IDB4MDAsCi0KLSAgLmRyY2UgICAgICAgICAgPSAmZXFwXzFhXzFfMF9kcmNlLAotCi0gIC5maWx0ZXJfY291bnQgID0gMTQsCi0gIC5iaXF1YWRzICAgICAgID0gZXFwXzFhXzFfMF9iaXF1YWRzCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIHN0cnVjdCB0YXNfZHJjZV90IGVxcF8xY18xXzBfZHJjZT17Ci0gIC5lbmFibGUgICAgID0gMSwKLSAgLmFib3ZlICAgICAgPSB7IC52YWwgPSAzLjAgKiAoMTw8OCksIC5leHBhbmQgPSAwIH0sCi0gIC5iZWxvdyAgICAgID0geyAudmFsID0gMS4wICogKDE8PDgpLCAuZXhwYW5kID0gMCB9LAotICAudGhyZXNob2xkICA9IC0xNC4zNCAgKiAoMTw8OCksCi0gIC5lbmVyZ3kgICAgID0gMi40ICAgICAqICgxPDwxMiksCi0gIC5hdHRhY2sgICAgID0gMC4wMTMgICAqICgxPDwxMiksCi0gIC5kZWNheSAgICAgID0gMC4yMTIgICAqICgxPDwxMiksCi19OwotCi1zdGF0aWMgc3RydWN0IHRhc19iaXF1YWRfY3RybF90IGVxcF8xY18xXzBfYmlxdWFkc1tdPXsKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmNGY5NSwgMHhlMTYwZDQsIDB4MGY0Zjk1LCAweGUxNjg2ZSwgMHgwZWE2YzUgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNjZiOTIsIDB4MDI5MGQ0LCAweDAxNDhhMCwgMHhmNjg1M2YsIDB4MDNiZmM3IH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGY1N2RjLCAweGU1MWM5MSwgMHgwZGQxY2IsIDB4ZTUxYzkxLCAweDBkMjlhOCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBkZjFjYiwgMHhlNGZhODQsIDB4MGQ3Y2RjLCAweGU0ZmE4NCwgMHgwYjZlYTcgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAwLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwZWJhMzYsIDB4ZTZhYTQ4LCAweDBiOWY1MiwgMHhlNmFhNDgsIDB4MGE1OTg5IH0gfSB9LAotICB7IC5jaGFubmVsID0gMCwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGNhZjAyLCAweDA1ZWY5ZCwgMHgwODRiZWIsIDB4MDVlZjlkLCAweDA0ZmFlZSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDAsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmYzY4NiwgMHhlMjI5NDcsIDB4MGU0YjVkLCAweGUyMjk0NywgMHgwZTExZTQgfSB9IH0sCi0KLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAwLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmNGY5NSwgMHhlMTYwZDQsIDB4MGY0Zjk1LCAweGUxNjg2ZSwgMHgwZWE2YzUgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gMSwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwNjZiOTIsIDB4MDI5MGQ0LCAweDAxNDhhMCwgMHhmNjg1M2YsIDB4MDNiZmM3IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDIsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGY1N2RjLCAweGU1MWM5MSwgMHgwZGQxY2IsIDB4ZTUxYzkxLCAweDBkMjlhOCB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSAzLCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBkZjFjYiwgMHhlNGZhODQsIDB4MGQ3Y2RjLCAweGU0ZmE4NCwgMHgwYjZlYTcgfSB9IH0sCi0gIHsgLmNoYW5uZWwgPSAxLCAuZmlsdGVyID0gNCwgLmRhdGEgPSB7IC5jb2VmZiA9IHsgMHgwZWJhMzYsIDB4ZTZhYTQ4LCAweDBiOWY1MiwgMHhlNmFhNDgsIDB4MGE1OTg5IH0gfSB9LAotICB7IC5jaGFubmVsID0gMSwgLmZpbHRlciA9IDUsIC5kYXRhID0geyAuY29lZmYgPSB7IDB4MGNhZjAyLCAweDA1ZWY5ZCwgMHgwODRiZWIsIDB4MDVlZjlkLCAweDA0ZmFlZSB9IH0gfSwKLSAgeyAuY2hhbm5lbCA9IDEsIC5maWx0ZXIgPSA2LCAuZGF0YSA9IHsgLmNvZWZmID0geyAweDBmYzY4NiwgMHhlMjI5NDcsIDB4MGU0YjVkLCAweGUyMjk0NywgMHgwZTExZTQgfSB9IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFzX2VxX3ByZWZfdCBlcXBfMWNfMV8wID0gewotICAuc2FtcGxlX3JhdGUgICA9IDQ0MTAwLAotICAuZGV2aWNlX2lkICAgICA9IDB4MWMsCi0gIC5vdXRwdXRfaWQgICAgID0gVEFTX09VVFBVVF9JTlRFUk5BTF9TUEtSLAotICAuc3BlYWtlcl9pZCAgICA9IDB4MDAsCi0KLSAgLmRyY2UgICAgICAgICAgPSAmZXFwXzFjXzFfMF9kcmNlLAotCi0gIC5maWx0ZXJfY291bnQgID0gMTQsCi0gIC5iaXF1YWRzICAgICAgID0gZXFwXzFjXzFfMF9iaXF1YWRzCi19OwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KLQotc3RhdGljIHVpbnQgdGFzMzAwNF9tYXN0ZXJfdGFiW109ewotCSAgICAgICAweDAsICAgICAgIDB4NzUsICAgICAgIDB4OWMsICAgICAgIDB4YmIsCi0JICAgICAgMHhkYiwgICAgICAgMHhmYiwgICAgICAweDExZSwgICAgICAweDE0MywKLQkgICAgIDB4MTZiLCAgICAgIDB4MTk2LCAgICAgIDB4MWMzLCAgICAgIDB4MWY1LAotCSAgICAgMHgyMjksICAgICAgMHgyNjMsICAgICAgMHgyOWYsICAgICAgMHgyZTEsCi0JICAgICAweDMyOCwgICAgICAweDM3MywgICAgICAweDNjNSwgICAgICAweDQxYiwKLQkgICAgIDB4NDc4LCAgICAgIDB4NGRjLCAgICAgIDB4NTQ3LCAgICAgIDB4NWI4LAotCSAgICAgMHg2MzMsICAgICAgMHg2YjUsICAgICAgMHg3NDAsICAgICAgMHg3ZDUsCi0JICAgICAweDg3MywgICAgICAweDkxYywgICAgICAweDlkMiwgICAgICAweGE5MiwKLQkgICAgIDB4YjVlLCAgICAgIDB4YzM5LCAgICAgIDB4ZDIyLCAgICAgIDB4ZTE5LAotCSAgICAgMHhmMjAsICAgICAweDEwMzcsICAgICAweDExNjEsICAgICAweDEyOWUsCi0JICAgIDB4MTNlZCwgICAgIDB4MTU1MSwgICAgIDB4MTZjYSwgICAgIDB4MTg1ZCwKLQkgICAgMHgxYTA4LCAgICAgMHgxYmNjLCAgICAgMHgxZGFjLCAgICAgMHgxZmE3LAotCSAgICAweDIxYzEsICAgICAweDIzZmEsICAgICAweDI2NTUsICAgICAweDI4ZDYsCi0JICAgIDB4MmI3YywgICAgIDB4MmU0YSwgICAgIDB4MzE0MSwgICAgIDB4MzQ2NCwKLQkgICAgMHgzN2I0LCAgICAgMHgzYjM1LCAgICAgMHgzZWU5LCAgICAgMHg0MmQzLAotCSAgICAweDQ2ZjYsICAgICAweDRiNTMsICAgICAweDRmZjAsICAgICAweDU0Y2UsCi0JICAgIDB4NTlmMiwgICAgIDB4NWY1ZiwgICAgIDB4NjUxOSwgICAgIDB4NmIyNCwKLQkgICAgMHg3MTgzLCAgICAgMHg3ODNjLCAgICAgMHg3ZjUzLCAgICAgMHg4NmNjLAotCSAgICAweDhlYWQsICAgICAweDk2ZmEsICAgICAweDlmYmEsICAgICAweGE4ZjIsCi0JICAgIDB4YjJhNywgICAgIDB4YmNlMSwgICAgIDB4YzdhNSwgICAgIDB4ZDJmYSwKLQkgICAgMHhkZWU4LCAgICAgMHhlYjc1LCAgICAgMHhmOGFhLCAgICAweDEwNjhlLAotCSAgIDB4MTE1MmEsICAgIDB4MTI0ODcsICAgIDB4MTM0YWQsICAgIDB4MTQ1YTUsCi0JICAgMHgxNTc3YiwgICAgMHgxNmEzNywgICAgMHgxN2RmNSwgICAgMHgxOTJiZCwKLQkgICAweDFhODkwLCAgICAweDFiZjdiLCAgICAweDFkNzhkLCAgICAweDFmMGQxLAotCSAgIDB4MjBiNTUsICAgIDB4MjI3MjcsICAgIDB4MjQ0NTYsICAgIDB4MjYyZjIsCi0JICAgMHgyODMwYgotfTsKLQotc3RhdGljIHVpbnQgdGFzMzAwNF9taXhlcl90YWJbXT17Ci0JICAgICAgIDB4MCwgICAgICAweDc0OCwgICAgICAweDliZSwgICAgICAweGJhZiwKLQkgICAgIDB4ZGE0LCAgICAgIDB4ZmIxLCAgICAgMHgxMWRlLCAgICAgMHgxNDMxLAotCSAgICAweDE2YWQsICAgICAweDE5NTksICAgICAweDFjMzcsICAgICAweDFmNGIsCi0JICAgIDB4MjI5OCwgICAgIDB4MjYyOCwgICAgIDB4MjlmYiwgICAgIDB4MmUxMiwKLQkgICAgMHgzMjdkLCAgICAgMHgzNzM0LCAgICAgMHgzYzQ3LCAgICAgMHg0MWI0LAotCSAgICAweDQ3ODcsICAgICAweDRkYmUsICAgICAweDU0NmQsICAgICAweDViODYsCi0JICAgIDB4NjMyZSwgICAgIDB4NmI1MiwgICAgIDB4NzQwMCwgICAgIDB4N2Q1NCwKLQkgICAgMHg4NzNiLCAgICAgMHg5MWM2LCAgICAgMHg5ZDFhLCAgICAgMHhhOTIwLAotCSAgICAweGI1ZTUsICAgICAweGMzOGMsICAgICAweGQyMWIsICAgICAweGUxOGYsCi0JICAgIDB4ZjFmNSwgICAgMHgxMDM2YSwgICAgMHgxMTYwZiwgICAgMHgxMjlkNiwKLQkgICAweDEzZWQwLCAgICAweDE1NTBjLCAgICAweDE2Y2EwLCAgICAweDE4NWM5LAotCSAgIDB4MWEwN2IsICAgIDB4MWJjYzMsICAgIDB4MWRhYjksICAgIDB4MWZhNzUsCi0JICAgMHgyMWMwZiwgICAgMHgyM2ZhMywgICAgMHgyNjU1MiwgICAgMHgyOGQ2NCwKLQkgICAweDJiN2M5LCAgICAweDJlNGEyLCAgICAweDMxNDExLCAgICAweDM0NjNiLAotCSAgIDB4MzdiNDQsICAgIDB4M2IzNTMsICAgIDB4M2VlOTQsICAgIDB4NDJkMzAsCi0JICAgMHg0NmY1NSwgICAgMHg0YjUzMywgICAgMHg0ZmVmYywgICAgMHg1NGNlNSwKLQkgICAweDU5ZjI1LCAgICAweDVmNWY2LCAgICAweDY1MTkzLCAgICAweDZiMjNjLAotCSAgIDB4NzE4MzUsICAgIDB4NzgzYzMsICAgIDB4N2Y1MmMsICAgIDB4ODZjYzAsCi0JICAgMHg4ZWFjYywgICAgMHg5NmZhNSwgICAgMHg5ZmJhMCwgICAgMHhhOGYxYSwKLQkgICAweGIyYTcxLCAgICAweGJjZTBhLCAgICAweGM3YTRhLCAgICAweGQyZmEwLAotCSAgIDB4ZGVlN2IsICAgIDB4ZWI3NTIsICAgIDB4ZjhhOWYsICAgMHgxMDY4ZTQsCi0JICAweDExNTJhMywgICAweDEyNDg2YSwgICAweDEzNGFjOCwgICAweDE0NWE1NSwKLQkgIDB4MTU3N2FjLCAgIDB4MTZhMzcwLCAgIDB4MTdkZjUxLCAgIDB4MTkyYmMyLAotCSAgMHgxYTg4ZjgsICAgMHgxYmY3YjcsICAgMHgxZDc4YzksICAgMHgxZjBkMDQsCi0JICAweDIwYjU0MiwgICAweDIyNzI2OCwgICAweDI0NDU2NCwgICAweDI2MmYyNiwKLQkgIDB4MjgzMGFmCi19OwotCi1zdGF0aWMgdWludCB0YXMzMDA0X3RyZWJsZV90YWJbXT17Ci0JICAgICAgMHg5NiwgICAgICAgMHg5NSwgICAgICAgMHg5NSwgICAgICAgMHg5NCwKLQkgICAgICAweDkzLCAgICAgICAweDkyLCAgICAgICAweDkyLCAgICAgICAweDkxLAotCSAgICAgIDB4OTAsICAgICAgIDB4OTAsICAgICAgIDB4OGYsICAgICAgIDB4OGUsCi0JICAgICAgMHg4ZCwgICAgICAgMHg4ZCwgICAgICAgMHg4YywgICAgICAgMHg4YiwKLQkgICAgICAweDhhLCAgICAgICAweDhhLCAgICAgICAweDg5LCAgICAgICAweDg4LAotCSAgICAgIDB4ODgsICAgICAgIDB4ODcsICAgICAgIDB4ODYsICAgICAgIDB4ODUsCi0JICAgICAgMHg4NSwgICAgICAgMHg4NCwgICAgICAgMHg4MywgICAgICAgMHg4MywKLQkgICAgICAweDgyLCAgICAgICAweDgxLCAgICAgICAweDgwLCAgICAgICAweDgwLAotCSAgICAgIDB4N2YsICAgICAgIDB4N2UsICAgICAgIDB4N2UsICAgICAgIDB4N2QsCi0JICAgICAgMHg3YywgICAgICAgMHg3YiwgICAgICAgMHg3YiwgICAgICAgMHg3YSwKLQkgICAgICAweDc5LCAgICAgICAweDc4LCAgICAgICAweDc4LCAgICAgICAweDc3LAotCSAgICAgIDB4NzYsICAgICAgIDB4NzYsICAgICAgIDB4NzUsICAgICAgIDB4NzQsCi0JICAgICAgMHg3MywgICAgICAgMHg3MywgICAgICAgMHg3MiwgICAgICAgMHg3MSwKLQkgICAgICAweDcxLCAgICAgICAweDY4LCAgICAgICAweDQ1LCAgICAgICAweDViLAotCSAgICAgIDB4NmQsICAgICAgIDB4NmMsICAgICAgIDB4NmIsICAgICAgIDB4NmEsCi0JICAgICAgMHg2OSwgICAgICAgMHg2OCwgICAgICAgMHg2NywgICAgICAgMHg2NiwKLQkgICAgICAweDY1LCAgICAgICAweDYzLCAgICAgICAweDYyLCAgICAgICAweDYyLAotCSAgICAgIDB4NjAsICAgICAgIDB4NWUsICAgICAgIDB4NWMsICAgICAgIDB4NWIsCi0JICAgICAgMHg1OSwgICAgICAgMHg1NywgICAgICAgMHg1NSwgICAgICAgMHg1MywKLQkgICAgICAweDUyLCAgICAgICAweDRmLCAgICAgICAweDRkLCAgICAgICAweDRhLAotCSAgICAgIDB4NDgsICAgICAgIDB4NDYsICAgICAgIDB4NDMsICAgICAgIDB4NDAsCi0JICAgICAgMHgzZCwgICAgICAgMHgzYSwgICAgICAgMHgzNiwgICAgICAgMHgzMywKLQkgICAgICAweDJmLCAgICAgICAweDJjLCAgICAgICAweDI3LCAgICAgICAweDIzLAotCSAgICAgIDB4MWYsICAgICAgIDB4MWEsICAgICAgIDB4MTUsICAgICAgICAweGYsCi0JICAgICAgIDB4OCwgICAgICAgIDB4NSwgICAgICAgIDB4MiwgICAgICAgIDB4MSwKLQkgICAgICAgMHgxCi19OwotCi1zdGF0aWMgdWludCB0YXMzMDA0X2Jhc3NfdGFiW109ewotCSAgICAgIDB4OTYsICAgICAgIDB4OTUsICAgICAgIDB4OTUsICAgICAgIDB4OTQsCi0JICAgICAgMHg5MywgICAgICAgMHg5MiwgICAgICAgMHg5MiwgICAgICAgMHg5MSwKLQkgICAgICAweDkwLCAgICAgICAweDkwLCAgICAgICAweDhmLCAgICAgICAweDhlLAotCSAgICAgIDB4OGQsICAgICAgIDB4OGQsICAgICAgIDB4OGMsICAgICAgIDB4OGIsCi0JICAgICAgMHg4YSwgICAgICAgMHg4YSwgICAgICAgMHg4OSwgICAgICAgMHg4OCwKLQkgICAgICAweDg4LCAgICAgICAweDg3LCAgICAgICAweDg2LCAgICAgICAweDg1LAotCSAgICAgIDB4ODUsICAgICAgIDB4ODQsICAgICAgIDB4ODMsICAgICAgIDB4ODMsCi0JICAgICAgMHg4MiwgICAgICAgMHg4MSwgICAgICAgMHg4MCwgICAgICAgMHg4MCwKLQkgICAgICAweDdmLCAgICAgICAweDdlLCAgICAgICAweDdlLCAgICAgICAweDdkLAotCSAgICAgIDB4N2MsICAgICAgIDB4N2IsICAgICAgIDB4N2IsICAgICAgIDB4N2EsCi0JICAgICAgMHg3OSwgICAgICAgMHg3OCwgICAgICAgMHg3OCwgICAgICAgMHg3NywKLQkgICAgICAweDc2LCAgICAgICAweDc2LCAgICAgICAweDc1LCAgICAgICAweDc0LAotCSAgICAgIDB4NzMsICAgICAgIDB4NzMsICAgICAgIDB4NzIsICAgICAgIDB4NzEsCi0JICAgICAgMHg3MCwgICAgICAgMHg2ZiwgICAgICAgMHg2ZSwgICAgICAgMHg2ZCwKLQkgICAgICAweDZjLCAgICAgICAweDZiLCAgICAgICAweDZhLCAgICAgICAweDZhLAotCSAgICAgIDB4NjksICAgICAgIDB4NjcsICAgICAgIDB4NjYsICAgICAgIDB4NjYsCi0JICAgICAgMHg2NSwgICAgICAgMHg2MywgICAgICAgMHg2MiwgICAgICAgMHg2MiwKLQkgICAgICAweDYxLCAgICAgICAweDYwLCAgICAgICAweDVlLCAgICAgICAweDVkLAotCSAgICAgIDB4NWIsICAgICAgIDB4NTksICAgICAgIDB4NTcsICAgICAgIDB4NTUsCi0JICAgICAgMHg1MywgICAgICAgMHg1MSwgICAgICAgMHg0ZiwgICAgICAgMHg0YywKLQkgICAgICAweDRhLCAgICAgICAweDQ4LCAgICAgICAweDQ2LCAgICAgICAweDQ0LAotCSAgICAgIDB4NDEsICAgICAgIDB4M2UsICAgICAgIDB4M2IsICAgICAgIDB4MzgsCi0JICAgICAgMHgzNiwgICAgICAgMHgzMywgICAgICAgMHgyZiwgICAgICAgMHgyYiwKLQkgICAgICAweDI4LCAgICAgICAweDI0LCAgICAgICAweDIwLCAgICAgICAweDFjLAotCSAgICAgIDB4MTcsICAgICAgIDB4MTIsICAgICAgICAweGQsICAgICAgICAweDcsCi0JICAgICAgIDB4MQotfTsKLQotc3RydWN0IHRhc19nYWluX3QgdGFzMzAwNF9nYWluPXsKLSAgLm1hc3RlciAgPSB0YXMzMDA0X21hc3Rlcl90YWIsCi0gIC50cmVibGUgID0gdGFzMzAwNF90cmVibGVfdGFiLAotICAuYmFzcyAgICA9IHRhczMwMDRfYmFzc190YWIsCi0gIC5taXhlciAgID0gdGFzMzAwNF9taXhlcl90YWIKLX07Ci0KLXN0cnVjdCB0YXNfZXFfcHJlZl90ICp0YXMzMDA0X2VxX3ByZWZzW109ewotICAmZXFwXzE3XzFfMCwKLSAgJmVxcF8xOF8xXzAsCi0gICZlcXBfMWFfMV8wLAotICAmZXFwXzFjXzFfMCwKLSAgTlVMTAotfTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfY29tbW9uLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvdGFzX2NvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjk1ZWY2Li4wMDAwMDAwCi0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfY29tbW9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vcHJvbS5oPgotCi0jaW5jbHVkZSAidGFzX2NvbW1vbi5oIgotCi0jZGVmaW5lIENBTEwwKHByb2MpCQkJCQkJCQlcCi0JZG8gewkJCQkJCQkJCVwKLQkJc3RydWN0IHRhc19kYXRhX3QgKnNlbGY7CQkJCQlcCi0JCWlmICghdGFzX2NsaWVudCB8fCBkcml2ZXJfaG9va3MgPT0gTlVMTCkJCQlcCi0JCQlyZXR1cm4gLTE7CQkJCQkJXAotCQlzZWxmID0gZGV2X2dldF9kcnZkYXRhKCZ0YXNfY2xpZW50LT5kZXYpOwkJCVwKLQkJaWYgKGRyaXZlcl9ob29rcy0+cHJvYykJCQkJCQlcCi0JCQlyZXR1cm4gZHJpdmVyX2hvb2tzLT5wcm9jKHNlbGYpOwkJCVwKLQkJZWxzZQkJCQkJCQkJXAotCQkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgQ0FMTChwcm9jLGFyZy4uLikJCQkJCQkJXAotCWRvIHsJCQkJCQkJCQlcCi0JCXN0cnVjdCB0YXNfZGF0YV90ICpzZWxmOwkJCQkJXAotCQlpZiAoIXRhc19jbGllbnQgfHwgZHJpdmVyX2hvb2tzID09IE5VTEwpCQkJXAotCQkJcmV0dXJuIC0xOwkJCQkJCVwKLQkJc2VsZiA9IGRldl9nZXRfZHJ2ZGF0YSgmdGFzX2NsaWVudC0+ZGV2KTsJCQlcCi0JCWlmIChkcml2ZXJfaG9va3MtPnByb2MpCQkJCQkJXAotCQkJcmV0dXJuIGRyaXZlcl9ob29rcy0+cHJvYyhzZWxmLCAjIyBhcmcpOwkJXAotCQllbHNlCQkJCQkJCQlcCi0JCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotCi1zdGF0aWMgdTggdGFzX2kyY19hZGRyZXNzID0gMHgzNDsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCAqdGFzX2NsaWVudDsKLQotc3RhdGljIGludCB0YXNfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICopOwotc3RhdGljIGludCB0YXNfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqKTsKLQotc3RydWN0IGkyY19kcml2ZXIgdGFzX2RyaXZlciA9IHsKLQkuZHJpdmVyID0gewotCQkubmFtZQk9ICJ0YXMiLAotCX0sCi0JLmF0dGFjaF9hZGFwdGVyCT0gdGFzX2F0dGFjaF9hZGFwdGVyLAotCS5kZXRhY2hfY2xpZW50CT0gdGFzX2RldGFjaF9jbGllbnQsCi19OwotCi1zdHJ1Y3QgdGFzX2RyaXZlcl9ob29rc190ICpkcml2ZXJfaG9va3M7Ci0KLWludAotdGFzX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdGFzX2RyaXZlcl9ob29rc190ICpob29rcykKLXsKLQlkcml2ZXJfaG9va3MgPSBob29rczsKLQlyZXR1cm4gMDsKLX0KLQotaW50Ci10YXNfZ2V0X21peGVyX2xldmVsKGludCBtaXhlciwgdWludCAqbGV2ZWwpCi17Ci0JQ0FMTChnZXRfbWl4ZXJfbGV2ZWwsbWl4ZXIsbGV2ZWwpOwotfQotCi1pbnQKLXRhc19zZXRfbWl4ZXJfbGV2ZWwoaW50IG1peGVyLHVpbnQgbGV2ZWwpCi17Ci0JQ0FMTChzZXRfbWl4ZXJfbGV2ZWwsbWl4ZXIsbGV2ZWwpOwotfQotCi1pbnQKLXRhc19lbnRlcl9zbGVlcCh2b2lkKQotewotCUNBTEwwKGVudGVyX3NsZWVwKTsKLX0KLQotaW50Ci10YXNfbGVhdmVfc2xlZXAodm9pZCkKLXsKLQlDQUxMMChsZWF2ZV9zbGVlcCk7Ci19Ci0KLWludAotdGFzX3N1cHBvcnRlZF9taXhlcnModm9pZCkKLXsKLQlDQUxMMChzdXBwb3J0ZWRfbWl4ZXJzKTsKLX0KLQotaW50Ci10YXNfbWl4ZXJfaXNfc3RlcmVvKGludCBtaXhlcikKLXsKLQlDQUxMKG1peGVyX2lzX3N0ZXJlbyxtaXhlcik7Ci19Ci0KLWludAotdGFzX3N0ZXJlb19taXhlcnModm9pZCkKLXsKLQlDQUxMMChzdGVyZW9fbWl4ZXJzKTsKLX0KLQotaW50Ci10YXNfb3V0cHV0X2RldmljZV9jaGFuZ2UoaW50IGRldmljZV9pZCxpbnQgbGF5b3V0X2lkLGludCBzcGVha2VyX2lkKQotewotCUNBTEwob3V0cHV0X2RldmljZV9jaGFuZ2UsZGV2aWNlX2lkLGxheW91dF9pZCxzcGVha2VyX2lkKTsKLX0KLQotaW50Ci10YXNfZGV2aWNlX2lvY3RsKHVfaW50IGNtZCwgdV9sb25nIGFyZykKLXsKLQlDQUxMKGRldmljZV9pb2N0bCxjbWQsYXJnKTsKLX0KLQotaW50Ci10YXNfcG9zdF9pbml0KHZvaWQpCi17Ci0JQ0FMTDAocG9zdF9pbml0KTsKLX0KLQotc3RhdGljIGludAotdGFzX2RldGVjdF9jbGllbnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcykKLXsKLQlzdGF0aWMgY29uc3QgY2hhciAqY2xpZW50X25hbWUgPSAidGFzIERpZ2l0YWwgRXF1YWxpemVyIjsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqbmV3X2NsaWVudDsKLQlpbnQgcmMgPSAtRU5PREVWOwotCi0JaWYgKCFkcml2ZXJfaG9va3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0YXNfZGV0ZWN0X2NsaWVudCBjYWxsZWQgd2l0aCBubyBob29rcyAhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCQotCW5ld19jbGllbnQgPSBremFsbG9jKHNpemVvZigqbmV3X2NsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghbmV3X2NsaWVudCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKLQluZXdfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKLQluZXdfY2xpZW50LT5kcml2ZXIgPSAmdGFzX2RyaXZlcjsKLQlzdHJsY3B5KG5ld19jbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBERVZJQ0VfTkFNRV9TSVpFKTsKLQotICAgICAgICBpZiAoZHJpdmVyX2hvb2tzLT5pbml0KG5ld19jbGllbnQpKQotCQlnb3RvIGJhaWw7Ci0KLQkvKiBUZWxsIHRoZSBpMmMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JaWYgKGkyY19hdHRhY2hfY2xpZW50KG5ld19jbGllbnQpKSB7Ci0JCWRyaXZlcl9ob29rcy0+dW5pbml0KGRldl9nZXRfZHJ2ZGF0YSgmbmV3X2NsaWVudC0+ZGV2KSk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQl0YXNfY2xpZW50ID0gbmV3X2NsaWVudDsKLQlyZXR1cm4gMDsKLSBiYWlsOgotCXRhc19jbGllbnQgPSBOVUxMOwotCWtmcmVlKG5ld19jbGllbnQpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotdGFzX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlpZiAoIXN0cm5jbXAoYWRhcHRlci0+bmFtZSwgIm1hYy1pbyIsIDYpKQotCQlyZXR1cm4gdGFzX2RldGVjdF9jbGllbnQoYWRhcHRlciwgdGFzX2kyY19hZGRyZXNzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdGFzX2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpZiAoY2xpZW50ID09IHRhc19jbGllbnQpIHsKLQkJZHJpdmVyX2hvb2tzLT51bmluaXQoZGV2X2dldF9kcnZkYXRhKCZjbGllbnQtPmRldikpOwotCi0JCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0JCWtmcmVlKGNsaWVudCk7Ci0JfQotCXJldHVybiAwOwotfQotCi12b2lkCi10YXNfY2xlYW51cCh2b2lkKQotewotCWkyY19kZWxfZHJpdmVyKCZ0YXNfZHJpdmVyKTsKLX0KLQotaW50IF9faW5pdAotdGFzX2luaXQoaW50IGRyaXZlcl9pZCwgY29uc3QgY2hhciAqZHJpdmVyX25hbWUpCi17Ci0JY29uc3QgdTMyKiBwYWRkcjsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRhc19ub2RlOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAidGFzIGRyaXZlciBbJXNdKVxuIiwgZHJpdmVyX25hbWUpOwotCi0jaWZuZGVmIENPTkZJR19JMkNfUE9XRVJNQUMKLQlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7Ci0jZW5kaWYKLQl0YXNfbm9kZSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKCJkZXEiKTsKLQlpZiAodGFzX25vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JcGFkZHIgPSBvZl9nZXRfcHJvcGVydHkodGFzX25vZGUsICJpMmMtYWRkcmVzcyIsIE5VTEwpOwotCWlmIChwYWRkcikgewotCQl0YXNfaTJjX2FkZHJlc3MgPSAoKnBhZGRyKSA+PiAxOwotCQlwcmludGsoS0VSTl9JTkZPICJ1c2luZyBpMmMgYWRkcmVzczogMHgleCBmcm9tIGRldmljZS10cmVlXG4iLAotCQkJCXRhc19pMmNfYWRkcmVzcyk7Ci0JfSBlbHNlICAgIAotCQlwcmludGsoS0VSTl9JTkZPICJ1c2luZyBpMmMgYWRkcmVzczogMHgleCAoZGVmYXVsdClcbiIsCi0JCQkJdGFzX2kyY19hZGRyZXNzKTsKLQlvZl9ub2RlX3B1dCh0YXNfbm9kZSk7Ci0KLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJnRhc19kcml2ZXIpOwotfQpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uaCBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NDFjMjguLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19jb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDI4NCArMCwwIEBACi0jaWZuZGVmIF9UQVNfQ09NTU9OX0hfCi0jZGVmaW5lIF9UQVNfQ09NTU9OX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KLSNpbmNsdWRlIDxhc20vc3RyaW5nLmg+Ci0KLSNkZWZpbmUgSTJDX0RSSVZFUklEX1RBU19CQVNFICAgKDB4RkVCQSkKLQotI2RlZmluZSBTRVRfNF8yMChzaGFkb3csIG9mZnNldCwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJKHNoYWRvdylbKG9mZnNldCkrMF0gPSAoKHZhbCkgPj4gMTYpICYgMHhmZjsgXAotCQkoc2hhZG93KVsob2Zmc2V0KSsxXSA9ICgodmFsKSA+PiA4KSAgJiAweGZmOyBcCi0JCShzaGFkb3cpWyhvZmZzZXQpKzJdID0gKCh2YWwpID4+IDApICAmIDB4ZmY7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIEdFVF80XzIwKHNoYWRvdywgb2Zmc2V0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSgoKHVfaW50KSgoc2hhZG93KVsob2Zmc2V0KSswXSkgPDwgMTYpIHwgICAgICAgICAgICAgXAotCSAoKHVfaW50KSgoc2hhZG93KVsob2Zmc2V0KSsxXSkgPDwgIDgpIHwgICAgICAgICAgICAgXAotCSAoKHVfaW50KSgoc2hhZG93KVsob2Zmc2V0KSsyXSkgPDwgIDApKQotCi0KLSNkZWZpbmUgVEFTX0JJUVVBRF9GQVNUX0xPQUQgMHgwMQotCi0jZGVmaW5lIFRBU19EUkNFX0VOQUJMRSAgICAgICAgICAgMHgwMQotI2RlZmluZSBUQVNfRFJDRV9BQk9WRV9SQVRJTyAgICAgIDB4MDIKLSNkZWZpbmUgVEFTX0RSQ0VfQkVMT1dfUkFUSU8gICAgICAweDA0Ci0jZGVmaW5lIFRBU19EUkNFX1RIUkVTSE9MRCAgICAgICAgMHgwOAotI2RlZmluZSBUQVNfRFJDRV9FTkVSR1kgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgVEFTX0RSQ0VfQVRUQUNLICAgICAgICAgICAweDIwCi0jZGVmaW5lIFRBU19EUkNFX0RFQ0FZICAgICAgICAgICAgMHg0MAotCi0jZGVmaW5lIFRBU19EUkNFX0FMTCAgICAgICAgICAgICAgMHg3ZgotCi0KLSNkZWZpbmUgVEFTX09VVFBVVF9IRUFEUEhPTkVTICAgICAweDAwCi0jZGVmaW5lIFRBU19PVVRQVVRfSU5URVJOQUxfU1BLUiAgMHgwMQotI2RlZmluZSBUQVNfT1VUUFVUX0VYVEVSTkFMX1NQS1IgIDB4MDIKLQotCi11bmlvbiB0YXNfYmlxdWFkX3QgewotCXN0cnVjdCB7Ci0JCWludCBiMCxiMSxiMixhMSxhMjsKLQl9IGNvZWZmOwotCWludCBidWZbNV07Ci19OwotCi1zdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QgewotCXVfaW50IGNoYW5uZWw6NDsKLQl1X2ludCBmaWx0ZXI6NDsKLQotCXVuaW9uIHRhc19iaXF1YWRfdCBkYXRhOwotfTsKLQotc3RydWN0IHRhc19iaXF1YWRfY3RybF9saXN0X3QgewotCWludCBmbGFnczsKLQlpbnQgZmlsdGVyX2NvdW50OwotCXN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCBiaXF1YWRzWzBdOwotfTsKLQotc3RydWN0IHRhc19yYXRpb190IHsKLQl1bnNpZ25lZCBzaG9ydCB2YWw7ICAgIC8qIDguOCAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdW5zaWduZWQgc2hvcnQgZXhwYW5kOyAvKiAwID0gY29tcHJlc3MsICEwID0gZXhwYW5kLiAqLwotfTsKLQotc3RydWN0IHRhc19kcmNlX3QgewotCXVuc2lnbmVkIHNob3J0IGVuYWJsZTsKLQlzdHJ1Y3QgdGFzX3JhdGlvX3QgYWJvdmU7Ci0Jc3RydWN0IHRhc19yYXRpb190IGJlbG93OwotCXNob3J0IHRocmVzaG9sZDsgICAgICAgLyogZEIsICAgICAgIDguOCBzaWduZWQgICAgKi8KLQl1bnNpZ25lZCBzaG9ydCBlbmVyZ3k7IC8qIHNlY29uZHMsICA0LjEyIHVuc2lnbmVkICovCi0JdW5zaWduZWQgc2hvcnQgYXR0YWNrOyAvKiBzZWNvbmRzLCAgNC4xMiB1bnNpZ25lZCAqLwotCXVuc2lnbmVkIHNob3J0IGRlY2F5OyAgLyogc2Vjb25kcywgIDQuMTIgdW5zaWduZWQgKi8KLX07Ci0KLXN0cnVjdCB0YXNfZHJjZV9jdHJsX3QgewotCXVpbnQgZmxhZ3M7Ci0KLQlzdHJ1Y3QgdGFzX2RyY2VfdCBkYXRhOwotfTsKLQotc3RydWN0IHRhc19nYWluX3QKLXsKLSAgdW5zaWduZWQgaW50ICptYXN0ZXI7Ci0gIHVuc2lnbmVkIGludCAqdHJlYmxlOwotICB1bnNpZ25lZCBpbnQgKmJhc3M7Ci0gIHVuc2lnbmVkIGludCAqbWl4ZXI7Ci19OwotCi10eXBlZGVmIGNoYXIgdGFzX3NoYWRvd190WzB4NDVdOwotCi1zdHJ1Y3QgdGFzX2RhdGFfdAotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JdGFzX3NoYWRvd190ICpzaGFkb3c7Ci0JdWludCBtaXhlcltTT1VORF9NSVhFUl9OUkRFVklDRVNdOwotfTsKLQotdHlwZWRlZiBpbnQgKCp0YXNfaG9va19pbml0X3QpKHN0cnVjdCBpMmNfY2xpZW50ICopOwotdHlwZWRlZiBpbnQgKCp0YXNfaG9va19wb3N0X2luaXRfdCkoc3RydWN0IHRhc19kYXRhX3QgKik7Ci10eXBlZGVmIHZvaWQgKCp0YXNfaG9va191bmluaXRfdCkoc3RydWN0IHRhc19kYXRhX3QgKik7Ci0KLXR5cGVkZWYgaW50ICgqdGFzX2hvb2tfZ2V0X21peGVyX2xldmVsX3QpKHN0cnVjdCB0YXNfZGF0YV90ICosaW50LHVpbnQgKik7Ci10eXBlZGVmIGludCAoKnRhc19ob29rX3NldF9taXhlcl9sZXZlbF90KShzdHJ1Y3QgdGFzX2RhdGFfdCAqLGludCx1aW50KTsKLQotdHlwZWRlZiBpbnQgKCp0YXNfaG9va19lbnRlcl9zbGVlcF90KShzdHJ1Y3QgdGFzX2RhdGFfdCAqKTsKLXR5cGVkZWYgaW50ICgqdGFzX2hvb2tfbGVhdmVfc2xlZXBfdCkoc3RydWN0IHRhc19kYXRhX3QgKik7Ci0KLXR5cGVkZWYgaW50ICgqdGFzX2hvb2tfc3VwcG9ydGVkX21peGVyc190KShzdHJ1Y3QgdGFzX2RhdGFfdCAqKTsKLXR5cGVkZWYgaW50ICgqdGFzX2hvb2tfbWl4ZXJfaXNfc3RlcmVvX3QpKHN0cnVjdCB0YXNfZGF0YV90ICosaW50KTsKLXR5cGVkZWYgaW50ICgqdGFzX2hvb2tfc3RlcmVvX21peGVyc190KShzdHJ1Y3QgdGFzX2RhdGFfdCAqKTsKLQotdHlwZWRlZiBpbnQgKCp0YXNfaG9va19vdXRwdXRfZGV2aWNlX2NoYW5nZV90KShzdHJ1Y3QgdGFzX2RhdGFfdCAqLGludCxpbnQsaW50KTsKLXR5cGVkZWYgaW50ICgqdGFzX2hvb2tfZGV2aWNlX2lvY3RsX3QpKHN0cnVjdCB0YXNfZGF0YV90ICosdV9pbnQsdV9sb25nKTsKLQotc3RydWN0IHRhc19kcml2ZXJfaG9va3NfdCB7Ci0JLyoKLQkgKiBBbGwgaGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gbXVzdCBiZSBwZXJmb3JtZWQgaW4KLQkgKiBwb3N0X2luaXQoKSwgYXMgdGFzX2RtYXNvdW5kX2luaXQoKSBkb2VzIGEgaGFyZHdhcmUgcmVzZXQuCi0JICoKLQkgKiBpbml0KCkgaXMgY2FsbGVkIGJlZm9yZSB0YXNfZG1hc291bmRfaW5pdCgpIHNvIHRoYXQKLQkgKiBvdXB1dF9kZXZpY2VfY2hhbmdlKCkgaXMgYWx3YXlzIGNhbGxlZCBhZnRlciBpMmMgZHJpdmVyCi0JICogaW5pdGlhbGlzYXRpb24uIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0Ci0JICogb3V0cHV0X2RldmljZV9jaGFuZ2UoKSBtdXN0IGNvcGUgd2l0aCB0aGUgZmFjdCB0aGF0IGl0Ci0JICogbWF5IGJlIGNhbGxlZCBiZWZvcmUgcG9zdF9pbml0KCkuCi0JICovCi0KLQl0YXNfaG9va19pbml0X3QgICAgICAgICAgICAgICAgICAgaW5pdDsKLQl0YXNfaG9va19wb3N0X2luaXRfdCAgICAgICAgICAgICAgcG9zdF9pbml0OwotCXRhc19ob29rX3VuaW5pdF90ICAgICAgICAgICAgICAgICB1bmluaXQ7Ci0KLQl0YXNfaG9va19nZXRfbWl4ZXJfbGV2ZWxfdCAgICAgICAgZ2V0X21peGVyX2xldmVsOwotCXRhc19ob29rX3NldF9taXhlcl9sZXZlbF90ICAgICAgICBzZXRfbWl4ZXJfbGV2ZWw7Ci0KLQl0YXNfaG9va19lbnRlcl9zbGVlcF90ICAgICAgICAgICAgZW50ZXJfc2xlZXA7Ci0JdGFzX2hvb2tfbGVhdmVfc2xlZXBfdCAgICAgICAgICAgIGxlYXZlX3NsZWVwOwotCi0JdGFzX2hvb2tfc3VwcG9ydGVkX21peGVyc190ICAgICAgIHN1cHBvcnRlZF9taXhlcnM7Ci0JdGFzX2hvb2tfbWl4ZXJfaXNfc3RlcmVvX3QgICAgICAgIG1peGVyX2lzX3N0ZXJlbzsKLQl0YXNfaG9va19zdGVyZW9fbWl4ZXJzX3QgICAgICAgICAgc3RlcmVvX21peGVyczsKLQotCXRhc19ob29rX291dHB1dF9kZXZpY2VfY2hhbmdlX3QgICBvdXRwdXRfZGV2aWNlX2NoYW5nZTsKLQl0YXNfaG9va19kZXZpY2VfaW9jdGxfdCAgICAgICAgICAgZGV2aWNlX2lvY3RsOwotfTsKLQotZW51bSB0YXNfd3JpdGVfbW9kZV90IHsKLQlXUklURV9IVyAgICAgPSAweDAxLAotCVdSSVRFX1NIQURPVyA9IDB4MDIsCi0JV1JJVEVfTk9STUFMID0gMHgwMywKLQlGT1JDRV9XUklURSAgPSAweDA0Ci19OwotCi1zdGF0aWMgaW5saW5lIHVpbnQKLXRhc19tb25vX3RvX3N0ZXJlbyh1aW50IG1vbm8pCi17Ci0JbW9ubyAmPTB4ZmY7Ci0JcmV0dXJuIG1vbm8gfCAobW9ubzw8OCk7Ci19Ci0KLS8qCi0gKiBUb2RvOiBtYWtlIHRoZXNlIGZ1bmN0aW9ucyBhIGJpdCBtb3JlIGVmZmljaWVudCAhCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci10YXNfd3JpdGVfcmVnaXN0ZXIoCXN0cnVjdCB0YXNfZGF0YV90ICpzZWxmLAotCQkJdWludCByZWdfbnVtLAotCQkJdWludCByZWdfd2lkdGgsCi0JCQljaGFyICpkYXRhLAotCQkJdWludCB3cml0ZV9tb2RlKQotewotCWludCByYzsKLQotCWlmIChyZWdfd2lkdGg9PTAgfHwgZGF0YT09TlVMTCB8fCBzZWxmPT1OVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoISh3cml0ZV9tb2RlICYgRk9SQ0VfV1JJVEUpICYmCi0JICAgICFtZW1jbXAoZGF0YSxzZWxmLT5zaGFkb3dbcmVnX251bV0scmVnX3dpZHRoKSkKLQkgICAgCXJldHVybiAwOwotCi0JaWYgKHdyaXRlX21vZGUgJiBXUklURV9TSEFET1cpCi0JCW1lbWNweShzZWxmLT5zaGFkb3dbcmVnX251bV0sZGF0YSxyZWdfd2lkdGgpOwotCWlmICh3cml0ZV9tb2RlICYgV1JJVEVfSFcpIHsKLQkJcmM9aTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKHNlbGYtPmNsaWVudCwKLQkJCQkJCSAgcmVnX251bSwKLQkJCQkJCSAgcmVnX3dpZHRoLAotCQkJCQkJICBkYXRhKTsKLQkJaWYgKHJjIDwgMCkgewotCQkJcHJpbnRrKCJ0YXM6IEkyQyBibG9jayB3cml0ZSBmYWlsZWQgXG4iKTsgIAotCQkJcmV0dXJuIHJjOyAKLQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXRhc19zeW5jX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzX2RhdGFfdCAqc2VsZiwKLQkJCXVpbnQgcmVnX251bSwKLQkJCXVpbnQgcmVnX3dpZHRoKQotewotCWludCByYzsKLQotCWlmIChyZWdfd2lkdGg9PTAgfHwgc2VsZj09TlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmM9aTJjX3NtYnVzX3dyaXRlX2kyY19ibG9ja19kYXRhKHNlbGYtPmNsaWVudCwKLQkJCQkJICByZWdfbnVtLAotCQkJCQkgIHJlZ193aWR0aCwKLQkJCQkJICBzZWxmLT5zaGFkb3dbcmVnX251bV0pOwotCWlmIChyYyA8IDApIHsKLQkJcHJpbnRrKCJ0YXM6IEkyQyBibG9jayB3cml0ZSBmYWlsZWQgXG4iKTsKLQkJcmV0dXJuIHJjOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXRhc193cml0ZV9ieXRlX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzX2RhdGFfdCAqc2VsZiwKLQkJCQl1aW50IHJlZ19udW0sCi0JCQkJY2hhciBkYXRhLAotCQkJCXVpbnQgd3JpdGVfbW9kZSkKLXsKLQlpZiAoc2VsZj09TlVMTCkKLQkJcmV0dXJuIC0xOwotCWlmICghKHdyaXRlX21vZGUgJiBGT1JDRV9XUklURSkgJiYgZGF0YSAhPSBzZWxmLT5zaGFkb3dbcmVnX251bV1bMF0pCi0JCXJldHVybiAwOwotCWlmICh3cml0ZV9tb2RlICYgV1JJVEVfU0hBRE9XKQotCQlzZWxmLT5zaGFkb3dbcmVnX251bV1bMF09ZGF0YTsKLQlpZiAod3JpdGVfbW9kZSAmIFdSSVRFX0hXKSB7Ci0JCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKHNlbGYtPmNsaWVudCwgcmVnX251bSwgZGF0YSkgPCAwKSB7Ci0JCQlwcmludGsoInRhczogSTJDIGJ5dGUgd3JpdGUgZmFpbGVkIFxuIik7ICAKLQkJCXJldHVybiAtMTsgCi0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci10YXNfc3luY19ieXRlX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzX2RhdGFfdCAqc2VsZiwKLQkJCXVpbnQgcmVnX251bSwKLQkJCXVpbnQgcmVnX3dpZHRoKQotewotCWlmIChyZWdfd2lkdGg9PTAgfHwgc2VsZj09TlVMTCkKLQkJcmV0dXJuIC0xOwotCWlmIChpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKAotCSAgICBzZWxmLT5jbGllbnQsIHJlZ19udW0sIHNlbGYtPnNoYWRvd1tyZWdfbnVtXVswXSkgPCAwKSB7Ci0JCXByaW50aygidGFzOiBJMkMgYnl0ZSB3cml0ZSBmYWlsZWQgXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXRhc19yZWFkX3JlZ2lzdGVyKAlzdHJ1Y3QgdGFzX2RhdGFfdCAqc2VsZiwKLQkJCXVpbnQgcmVnX251bSwKLQkJCXVpbnQgcmVnX3dpZHRoLAotCQkJY2hhciAqZGF0YSkKLXsKLQlpZiAocmVnX3dpZHRoPT0wIHx8IGRhdGE9PU5VTEwgfHwgc2VsZj09TlVMTCkKLQkJcmV0dXJuIC0xOwotCW1lbWNweShkYXRhLHNlbGYtPnNoYWRvd1tyZWdfbnVtXSxyZWdfd2lkdGgpOwotCXJldHVybiAwOwotfQotCi1leHRlcm4gaW50IHRhc19yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHRhc19kcml2ZXJfaG9va3NfdCAqaG9va3MpOwotCi1leHRlcm4gaW50IHRhc19nZXRfbWl4ZXJfbGV2ZWwoaW50IG1peGVyLHVpbnQgKmxldmVsKTsKLWV4dGVybiBpbnQgdGFzX3NldF9taXhlcl9sZXZlbChpbnQgbWl4ZXIsdWludCBsZXZlbCk7Ci1leHRlcm4gaW50IHRhc19lbnRlcl9zbGVlcCh2b2lkKTsKLWV4dGVybiBpbnQgdGFzX2xlYXZlX3NsZWVwKHZvaWQpOwotZXh0ZXJuIGludCB0YXNfc3VwcG9ydGVkX21peGVycyh2b2lkKTsKLWV4dGVybiBpbnQgdGFzX21peGVyX2lzX3N0ZXJlbyhpbnQgbWl4ZXIpOwotZXh0ZXJuIGludCB0YXNfc3RlcmVvX21peGVycyh2b2lkKTsKLWV4dGVybiBpbnQgdGFzX291dHB1dF9kZXZpY2VfY2hhbmdlKGludCxpbnQsaW50KTsKLWV4dGVybiBpbnQgdGFzX2RldmljZV9pb2N0bCh1X2ludCwgdV9sb25nKTsKLQotZXh0ZXJuIHZvaWQgdGFzX2NsZWFudXAodm9pZCk7Ci1leHRlcm4gaW50IHRhc19pbml0KGludCBkcml2ZXJfaWQsY29uc3QgY2hhciAqZHJpdmVyX25hbWUpOwotZXh0ZXJuIGludCB0YXNfcG9zdF9pbml0KHZvaWQpOwotCi0jZW5kaWYgLyogX1RBU19DT01NT05fSF8gKi8KLS8qCi0gKiBMb2NhbCBWYXJpYWJsZXM6Ci0gKiB0YWItd2lkdGg6IDgKLSAqIGluZGVudC10YWJzLW1vZGU6IHQKLSAqIGMtYmFzaWMtb2Zmc2V0OiA4Ci0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfZXFfcHJlZnMuaCBiL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfZXFfcHJlZnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2E5OTRlZC4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvdGFzX2VxX3ByZWZzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi0jaWZuZGVmIF9UQVNfRVFfUFJFRlNfSF8KLSNkZWZpbmUgX1RBU19FUV9QUkVGU19IXwotCi1zdHJ1Y3QgdGFzX2VxX3ByZWZfdCB7Ci0JdV9pbnQgc2FtcGxlX3JhdGU7Ci0JdV9pbnQgZGV2aWNlX2lkOwotCXVfaW50IG91dHB1dF9pZDsKLQl1X2ludCBzcGVha2VyX2lkOwotCi0Jc3RydWN0IHRhc19kcmNlX3QgKmRyY2U7Ci0KLQl1X2ludCBmaWx0ZXJfY291bnQ7Ci0Jc3RydWN0IHRhc19iaXF1YWRfY3RybF90ICpiaXF1YWRzOwotfTsKLQotI2VuZGlmIC8qIF9UQVNfRVFfUFJFRlNfSF8gKi8KLQotLyoKLSAqIExvY2FsIFZhcmlhYmxlczoKLSAqIHRhYi13aWR0aDogOAotICogaW5kZW50LXRhYnMtbW9kZTogdAotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19pb2N0bC5oIGIvc291bmQvb3NzL2RtYXNvdW5kL3Rhc19pb2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDEyYjM3Li4wMDAwMDAwCi0tLSBhL3NvdW5kL29zcy9kbWFzb3VuZC90YXNfaW9jdGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSNpZm5kZWYgX1RBU19JT0NUTF9IXwotI2RlZmluZSBfVEFTX0lPQ1RMX0hfCi0KLSNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KLQotCi0jZGVmaW5lIFRBU19SRUFEX0VRICAgICAgICAgICAgICBfU0lPUigndCcsMCxzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpCi0jZGVmaW5lIFRBU19XUklURV9FUSAgICAgICAgICAgICBfU0lPVygndCcsMCxzdHJ1Y3QgdGFzX2JpcXVhZF9jdHJsX3QpCi0KLSNkZWZpbmUgVEFTX1JFQURfRVFfTElTVCAgICAgICAgIF9TSU9SKCd0JywxLHN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCkKLSNkZWZpbmUgVEFTX1dSSVRFX0VRX0xJU1QgICAgICAgIF9TSU9XKCd0JywxLHN0cnVjdCB0YXNfYmlxdWFkX2N0cmxfdCkKLQotI2RlZmluZSBUQVNfUkVBRF9FUV9GSUxURVJfQ09VTlQgIF9TSU9SKCd0JywyLGludCkKLSNkZWZpbmUgVEFTX1JFQURfRVFfQ0hBTk5FTF9DT1VOVCBfU0lPUigndCcsMyxpbnQpCi0KLSNkZWZpbmUgVEFTX1JFQURfRFJDRSAgICAgICAgICAgIF9TSU9SKCd0Jyw0LHN0cnVjdCB0YXNfZHJjZV9jdHJsX3QpCi0jZGVmaW5lIFRBU19XUklURV9EUkNFICAgICAgICAgICBfU0lPVygndCcsNCxzdHJ1Y3QgdGFzX2RyY2VfY3RybF90KQotCi0jZGVmaW5lIFRBU19SRUFEX0RSQ0VfQ0FQUyAgICAgICBfU0lPUigndCcsNSxpbnQpCi0jZGVmaW5lIFRBU19SRUFEX0RSQ0VfTUlOICAgICAgICBfU0lPUigndCcsNixpbnQpCi0jZGVmaW5lIFRBU19SRUFEX0RSQ0VfTUFYICAgICAgICBfU0lPUigndCcsNyxpbnQpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL3RyYW5zXzE2LmMgYi9zb3VuZC9vc3MvZG1hc291bmQvdHJhbnNfMTYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E5NzNhYy4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvdHJhbnNfMTYuYworKysgL2Rldi9udWxsCkBAIC0xLDg5OCArMCwwIEBACi0vKgotICogIGxpbnV4L3NvdW5kL29zcy9kbWFzb3VuZC90cmFuc18xNi5jCi0gKgotICogIDE2IGJpdCB0cmFuc2xhdGlvbiByb3V0aW5lcy4gIE9ubHkgdXNlZCBieSBQb3dlciBtYWMgYXQgcHJlc2VudC4KLSAqCi0gKiAgU2VlIGxpbnV4L3NvdW5kL29zcy9kbWFzb3VuZC9kbWFzb3VuZF9jb3JlLmMgZm9yIGNvcHlyaWdodCBhbmQKLSAqICBoaXN0b3J5IHByaW9yIHRvIDA4LzAyLzIwMDEuCi0gKgotICogIDA4LzAyLzIwMDEgSWFpbiBTYW5kb2UKLSAqCQlzcGxpdCBmcm9tIGRtYXNvdW5kX2F3YWNzLmMKLSAqICAxMS8yOS8yMDAzIFJlbnpvIERhdm9saSAoS2luZyBFbnpvKQotICogIAktIGlucHV0IHJlc2FtcGxpbmcgKGZvciBzb2Z0IHJhdGUgPCBoYXJkIHJhdGUpCi0gKiAgCS0gc29mdHdhcmUgbGluZSBpbiBnYWluIGNvbnRyb2wKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlICJkbWFzb3VuZC5oIgotCi1leHRlcm4gaW50IGV4cGFuZF9iYWw7CS8qIEJhbGFuY2UgZmFjdG9yIGZvciBleHBhbmRpbmcgKG5vdCB2b2x1bWUhKSAqLwotc3RhdGljIHNob3J0IGRtYXNvdW5kX2FsYXcyZG1hMTZbXSA7Ci1zdGF0aWMgc2hvcnQgZG1hc291bmRfdWxhdzJkbWExNltdIDsKLQotc3RhdGljIHNzaXplX3QgcG1hY19jdF9sYXcoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCk7Ci1zdGF0aWMgc3NpemVfdCBwbWFjX2N0X3M4KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgIHNzaXplX3QgZnJhbWVMZWZ0KTsKLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3RfdTgoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgc3NpemVfdCBmcmFtZUxlZnQpOwotc3RhdGljIHNzaXplX3QgcG1hY19jdF9zMTYoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCk7Ci1zdGF0aWMgc3NpemVfdCBwbWFjX2N0X3UxNihjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgIHNzaXplX3QgZnJhbWVMZWZ0KTsKLQotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfbGF3KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgICBzc2l6ZV90IGZyYW1lTGVmdCk7Ci1zdGF0aWMgc3NpemVfdCBwbWFjX2N0eF9zOChjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgIHNzaXplX3QgZnJhbWVMZWZ0KTsKLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3R4X3U4KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgc3NpemVfdCBmcmFtZUxlZnQpOwotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfczE2KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgICBzc2l6ZV90IGZyYW1lTGVmdCk7Ci1zdGF0aWMgc3NpemVfdCBwbWFjX2N0eF91MTYoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgIHNzaXplX3QgZnJhbWVMZWZ0KTsKLQotc3RhdGljIHNzaXplX3QgcG1hY19jdF9zMTZfcmVhZChjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgIHNzaXplX3QgZnJhbWVMZWZ0KTsKLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3RfdTE2X3JlYWQoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCk7Ci0KLS8qKiogVHJhbnNsYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBleHBhbmRfZGF0YTsJLyogRGF0YSBmb3IgZXhwYW5kaW5nICovCi0KLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3RfbGF3KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgc3NpemVfdCBmcmFtZUxlZnQpCi17Ci0Jc2hvcnQgKnRhYmxlID0gZG1hc291bmQuc29mdC5mb3JtYXQgPT0gQUZNVF9NVV9MQVcKLQkJPyBkbWFzb3VuZF91bGF3MmRtYTE2IDogZG1hc291bmRfYWxhdzJkbWExNjsKLQlzc2l6ZV90IGNvdW50LCB1c2VkOwotCXNob3J0ICpwID0gKHNob3J0ICopICZmcmFtZVsqZnJhbWVVc2VkXTsKLQlpbnQgdmFsLCBzdGVyZW8gPSBkbWFzb3VuZC5zb2Z0LnN0ZXJlbzsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQlpZiAoc3RlcmVvKQotCQl1c2VyQ291bnQgPj49IDE7Ci0JdXNlZCA9IGNvdW50ID0gbWluX3QodW5zaWduZWQgbG9uZywgdXNlckNvdW50LCBmcmFtZUxlZnQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJdV9jaGFyIGRhdGE7Ci0JCWlmIChnZXRfdXNlcihkYXRhLCB1c2VyUHRyKyspKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXZhbCA9IHRhYmxlW2RhdGFdOwotCQkqcCsrID0gdmFsOwotCQlpZiAoc3RlcmVvKSB7Ci0JCQlpZiAoZ2V0X3VzZXIoZGF0YSwgdXNlclB0cisrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXZhbCA9IHRhYmxlW2RhdGFdOwotCQl9Ci0JCSpwKysgPSB2YWw7Ci0JCWNvdW50LS07Ci0JfQotCSpmcmFtZVVzZWQgKz0gdXNlZCAqIDQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXNlZCAqIDI6IHVzZWQ7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdF9zOChjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlzc2l6ZV90IGNvdW50LCB1c2VkOwotCXNob3J0ICpwID0gKHNob3J0ICopICZmcmFtZVsqZnJhbWVVc2VkXTsKLQlpbnQgdmFsLCBzdGVyZW8gPSBkbWFzb3VuZC5zb2Z0LnN0ZXJlbzsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQlpZiAoc3RlcmVvKQotCQl1c2VyQ291bnQgPj49IDE7Ci0JdXNlZCA9IGNvdW50ID0gbWluX3QodW5zaWduZWQgbG9uZywgdXNlckNvdW50LCBmcmFtZUxlZnQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJdV9jaGFyIGRhdGE7Ci0JCWlmIChnZXRfdXNlcihkYXRhLCB1c2VyUHRyKyspKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXZhbCA9IGRhdGEgPDwgODsKLQkJKnArKyA9IHZhbDsKLQkJaWYgKHN0ZXJlbykgewotCQkJaWYgKGdldF91c2VyKGRhdGEsIHVzZXJQdHIrKykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl2YWwgPSBkYXRhIDw8IDg7Ci0JCX0KLQkJKnArKyA9IHZhbDsKLQkJY291bnQtLTsKLQl9Ci0JKmZyYW1lVXNlZCArPSB1c2VkICogNDsKLQlyZXR1cm4gc3RlcmVvPyB1c2VkICogMjogdXNlZDsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBwbWFjX2N0X3U4KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgIHNzaXplX3QgZnJhbWVMZWZ0KQotewotCXNzaXplX3QgY291bnQsIHVzZWQ7Ci0Jc2hvcnQgKnAgPSAoc2hvcnQgKikgJmZyYW1lWypmcmFtZVVzZWRdOwotCWludCB2YWwsIHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCi0JZnJhbWVMZWZ0ID4+PSAyOwotCWlmIChzdGVyZW8pCi0JCXVzZXJDb3VudCA+Pj0gMTsKLQl1c2VkID0gY291bnQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB1c2VyQ291bnQsIGZyYW1lTGVmdCk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQl1X2NoYXIgZGF0YTsKLQkJaWYgKGdldF91c2VyKGRhdGEsIHVzZXJQdHIrKykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJdmFsID0gKGRhdGEgXiAweDgwKSA8PCA4OwotCQkqcCsrID0gdmFsOwotCQlpZiAoc3RlcmVvKSB7Ci0JCQlpZiAoZ2V0X3VzZXIoZGF0YSwgdXNlclB0cisrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXZhbCA9IChkYXRhIF4gMHg4MCkgPDwgODsKLQkJfQotCQkqcCsrID0gdmFsOwotCQljb3VudC0tOwotCX0KLQkqZnJhbWVVc2VkICs9IHVzZWQgKiA0OwotCXJldHVybiBzdGVyZW8/IHVzZWQgKiAyOiB1c2VkOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3RfczE2KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgc3NpemVfdCBmcmFtZUxlZnQpCi17Ci0Jc3NpemVfdCBjb3VudCwgdXNlZDsKLQlpbnQgc3RlcmVvID0gZG1hc291bmQuc29mdC5zdGVyZW87Ci0Jc2hvcnQgKmZwID0gKHNob3J0ICopICZmcmFtZVsqZnJhbWVVc2VkXTsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQl1c2VyQ291bnQgPj49IChzdGVyZW8/IDI6IDEpOwotCXVzZWQgPSBjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHVzZXJDb3VudCwgZnJhbWVMZWZ0KTsKLQlpZiAoIXN0ZXJlbykgewotCQlzaG9ydCBfX3VzZXIgKnVwID0gKHNob3J0IF9fdXNlciAqKSB1c2VyUHRyOwotCQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCQlzaG9ydCBkYXRhOwotCQkJaWYgKGdldF91c2VyKGRhdGEsIHVwKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJKmZwKysgPSBkYXRhOwotCQkJKmZwKysgPSBkYXRhOwotCQkJY291bnQtLTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChjb3B5X2Zyb21fdXNlcihmcCwgdXNlclB0ciwgY291bnQgKiA0KSkKLQkJCXJldHVybiAtRUZBVUxUOwotCX0KLQkqZnJhbWVVc2VkICs9IHVzZWQgKiA0OwotCXJldHVybiBzdGVyZW8/IHVzZWQgKiA0OiB1c2VkICogMjsKLX0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdF91MTYoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlzc2l6ZV90IGNvdW50LCB1c2VkOwotCWludCBtYXNrID0gKGRtYXNvdW5kLnNvZnQuZm9ybWF0ID09IEFGTVRfVTE2X0xFPyAweDAwODA6IDB4ODAwMCk7Ci0JaW50IHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCXNob3J0ICpmcCA9IChzaG9ydCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0Jc2hvcnQgX191c2VyICp1cCA9IChzaG9ydCBfX3VzZXIgKikgdXNlclB0cjsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQl1c2VyQ291bnQgPj49IChzdGVyZW8/IDI6IDEpOwotCXVzZWQgPSBjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHVzZXJDb3VudCwgZnJhbWVMZWZ0KTsKLQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCXNob3J0IGRhdGE7Ci0JCWlmIChnZXRfdXNlcihkYXRhLCB1cCsrKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlkYXRhIF49IG1hc2s7Ci0JCSpmcCsrID0gZGF0YTsKLQkJaWYgKHN0ZXJlbykgewotCQkJaWYgKGdldF91c2VyKGRhdGEsIHVwKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJZGF0YSBePSBtYXNrOwotCQl9Ci0JCSpmcCsrID0gZGF0YTsKLQkJY291bnQtLTsKLQl9Ci0JKmZyYW1lVXNlZCArPSB1c2VkICogNDsKLQlyZXR1cm4gc3RlcmVvPyB1c2VkICogNDogdXNlZCAqIDI7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfbGF3KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQl1bnNpZ25lZCBzaG9ydCAqdGFibGUgPSAodW5zaWduZWQgc2hvcnQgKikKLQkJKGRtYXNvdW5kLnNvZnQuZm9ybWF0ID09IEFGTVRfTVVfTEFXCi0JCSA/IGRtYXNvdW5kX3VsYXcyZG1hMTYgOiBkbWFzb3VuZF9hbGF3MmRtYTE2KTsKLQl1bnNpZ25lZCBpbnQgZGF0YSA9IGV4cGFuZF9kYXRhOwotCXVuc2lnbmVkIGludCAqcCA9ICh1bnNpZ25lZCBpbnQgKikgJmZyYW1lWypmcmFtZVVzZWRdOwotCWludCBiYWwgPSBleHBhbmRfYmFsOwotCWludCBoU3BlZWQgPSBkbWFzb3VuZC5oYXJkLnNwZWVkLCBzU3BlZWQgPSBkbWFzb3VuZC5zb2Z0LnNwZWVkOwotCWludCB1dG90YWwsIGZ0b3RhbDsKLQlpbnQgc3RlcmVvID0gZG1hc291bmQuc29mdC5zdGVyZW87Ci0KLQlmcmFtZUxlZnQgPj49IDI7Ci0JaWYgKHN0ZXJlbykKLQkJdXNlckNvdW50ID4+PSAxOwotCWZ0b3RhbCA9IGZyYW1lTGVmdDsKLQl1dG90YWwgPSB1c2VyQ291bnQ7Ci0Jd2hpbGUgKGZyYW1lTGVmdCkgewotCQl1X2NoYXIgYzsKLQkJaWYgKGJhbCA8IDApIHsKLQkJCWlmICh1c2VyQ291bnQgPT0gMCkKLQkJCQlicmVhazsKLQkJCWlmIChnZXRfdXNlcihjLCB1c2VyUHRyKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJZGF0YSA9IHRhYmxlW2NdOwotCQkJaWYgKHN0ZXJlbykgewotCQkJCWlmIChnZXRfdXNlcihjLCB1c2VyUHRyKyspKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlkYXRhID0gKGRhdGEgPDwgMTYpICsgdGFibGVbY107Ci0JCQl9IGVsc2UKLQkJCQlkYXRhID0gKGRhdGEgPDwgMTYpICsgZGF0YTsKLQkJCXVzZXJDb3VudC0tOwotCQkJYmFsICs9IGhTcGVlZDsKLQkJfQotCQkqcCsrID0gZGF0YTsKLQkJZnJhbWVMZWZ0LS07Ci0JCWJhbCAtPSBzU3BlZWQ7Ci0JfQotCWV4cGFuZF9iYWwgPSBiYWw7Ci0JZXhwYW5kX2RhdGEgPSBkYXRhOwotCSpmcmFtZVVzZWQgKz0gKGZ0b3RhbCAtIGZyYW1lTGVmdCkgKiA0OwotCXV0b3RhbCAtPSB1c2VyQ291bnQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXRvdGFsICogMjogdXRvdGFsOwotfQotCi1zdGF0aWMgc3NpemVfdCBwbWFjX2N0eF9zOChjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgIHNzaXplX3QgZnJhbWVMZWZ0KQotewotCXVuc2lnbmVkIGludCAqcCA9ICh1bnNpZ25lZCBpbnQgKikgJmZyYW1lWypmcmFtZVVzZWRdOwotCXVuc2lnbmVkIGludCBkYXRhID0gZXhwYW5kX2RhdGE7Ci0JaW50IGJhbCA9IGV4cGFuZF9iYWw7Ci0JaW50IGhTcGVlZCA9IGRtYXNvdW5kLmhhcmQuc3BlZWQsIHNTcGVlZCA9IGRtYXNvdW5kLnNvZnQuc3BlZWQ7Ci0JaW50IHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCWludCB1dG90YWwsIGZ0b3RhbDsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQlpZiAoc3RlcmVvKQotCQl1c2VyQ291bnQgPj49IDE7Ci0JZnRvdGFsID0gZnJhbWVMZWZ0OwotCXV0b3RhbCA9IHVzZXJDb3VudDsKLQl3aGlsZSAoZnJhbWVMZWZ0KSB7Ci0JCXVfY2hhciBjOwotCQlpZiAoYmFsIDwgMCkgewotCQkJaWYgKHVzZXJDb3VudCA9PSAwKQotCQkJCWJyZWFrOwotCQkJaWYgKGdldF91c2VyKGMsIHVzZXJQdHIrKykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlkYXRhID0gYyA8PCA4OwotCQkJaWYgKHN0ZXJlbykgewotCQkJCWlmIChnZXRfdXNlcihjLCB1c2VyUHRyKyspKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlkYXRhID0gKGRhdGEgPDwgMTYpICsgKGMgPDwgOCk7Ci0JCQl9IGVsc2UKLQkJCQlkYXRhID0gKGRhdGEgPDwgMTYpICsgZGF0YTsKLQkJCXVzZXJDb3VudC0tOwotCQkJYmFsICs9IGhTcGVlZDsKLQkJfQotCQkqcCsrID0gZGF0YTsKLQkJZnJhbWVMZWZ0LS07Ci0JCWJhbCAtPSBzU3BlZWQ7Ci0JfQotCWV4cGFuZF9iYWwgPSBiYWw7Ci0JZXhwYW5kX2RhdGEgPSBkYXRhOwotCSpmcmFtZVVzZWQgKz0gKGZ0b3RhbCAtIGZyYW1lTGVmdCkgKiA0OwotCXV0b3RhbCAtPSB1c2VyQ291bnQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXRvdGFsICogMjogdXRvdGFsOwotfQotCi0KLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3R4X3U4KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgc3NpemVfdCBmcmFtZUxlZnQpCi17Ci0JdW5zaWduZWQgaW50ICpwID0gKHVuc2lnbmVkIGludCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0JdW5zaWduZWQgaW50IGRhdGEgPSBleHBhbmRfZGF0YTsKLQlpbnQgYmFsID0gZXhwYW5kX2JhbDsKLQlpbnQgaFNwZWVkID0gZG1hc291bmQuaGFyZC5zcGVlZCwgc1NwZWVkID0gZG1hc291bmQuc29mdC5zcGVlZDsKLQlpbnQgc3RlcmVvID0gZG1hc291bmQuc29mdC5zdGVyZW87Ci0JaW50IHV0b3RhbCwgZnRvdGFsOwotCi0JZnJhbWVMZWZ0ID4+PSAyOwotCWlmIChzdGVyZW8pCi0JCXVzZXJDb3VudCA+Pj0gMTsKLQlmdG90YWwgPSBmcmFtZUxlZnQ7Ci0JdXRvdGFsID0gdXNlckNvdW50OwotCXdoaWxlIChmcmFtZUxlZnQpIHsKLQkJdV9jaGFyIGM7Ci0JCWlmIChiYWwgPCAwKSB7Ci0JCQlpZiAodXNlckNvdW50ID09IDApCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZ2V0X3VzZXIoYywgdXNlclB0cisrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWRhdGEgPSAoYyBeIDB4ODApIDw8IDg7Ci0JCQlpZiAoc3RlcmVvKSB7Ci0JCQkJaWYgKGdldF91c2VyKGMsIHVzZXJQdHIrKykpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCWRhdGEgPSAoZGF0YSA8PCAxNikgKyAoKGMgXiAweDgwKSA8PCA4KTsKLQkJCX0gZWxzZQotCQkJCWRhdGEgPSAoZGF0YSA8PCAxNikgKyBkYXRhOwotCQkJdXNlckNvdW50LS07Ci0JCQliYWwgKz0gaFNwZWVkOwotCQl9Ci0JCSpwKysgPSBkYXRhOwotCQlmcmFtZUxlZnQtLTsKLQkJYmFsIC09IHNTcGVlZDsKLQl9Ci0JZXhwYW5kX2JhbCA9IGJhbDsKLQlleHBhbmRfZGF0YSA9IGRhdGE7Ci0JKmZyYW1lVXNlZCArPSAoZnRvdGFsIC0gZnJhbWVMZWZ0KSAqIDQ7Ci0JdXRvdGFsIC09IHVzZXJDb3VudDsKLQlyZXR1cm4gc3RlcmVvPyB1dG90YWwgKiAyOiB1dG90YWw7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfczE2KGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICAgdV9jaGFyIGZyYW1lW10sIHNzaXplX3QgKmZyYW1lVXNlZCwKLQkJCSAgICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQl1bnNpZ25lZCBpbnQgKnAgPSAodW5zaWduZWQgaW50ICopICZmcmFtZVsqZnJhbWVVc2VkXTsKLQl1bnNpZ25lZCBpbnQgZGF0YSA9IGV4cGFuZF9kYXRhOwotCXVuc2lnbmVkIHNob3J0IF9fdXNlciAqdXAgPSAodW5zaWduZWQgc2hvcnQgX191c2VyICopIHVzZXJQdHI7Ci0JaW50IGJhbCA9IGV4cGFuZF9iYWw7Ci0JaW50IGhTcGVlZCA9IGRtYXNvdW5kLmhhcmQuc3BlZWQsIHNTcGVlZCA9IGRtYXNvdW5kLnNvZnQuc3BlZWQ7Ci0JaW50IHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCWludCB1dG90YWwsIGZ0b3RhbDsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQl1c2VyQ291bnQgPj49IChzdGVyZW8/IDI6IDEpOwotCWZ0b3RhbCA9IGZyYW1lTGVmdDsKLQl1dG90YWwgPSB1c2VyQ291bnQ7Ci0Jd2hpbGUgKGZyYW1lTGVmdCkgewotCQl1bnNpZ25lZCBzaG9ydCBjOwotCQlpZiAoYmFsIDwgMCkgewotCQkJaWYgKHVzZXJDb3VudCA9PSAwKQotCQkJCWJyZWFrOwotCQkJaWYgKGdldF91c2VyKGRhdGEsIHVwKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHN0ZXJlbykgewotCQkJCWlmIChnZXRfdXNlcihjLCB1cCsrKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJZGF0YSA9IChkYXRhIDw8IDE2KSArIGM7Ci0JCQl9IGVsc2UKLQkJCQlkYXRhID0gKGRhdGEgPDwgMTYpICsgZGF0YTsKLQkJCXVzZXJDb3VudC0tOwotCQkJYmFsICs9IGhTcGVlZDsKLQkJfQotCQkqcCsrID0gZGF0YTsKLQkJZnJhbWVMZWZ0LS07Ci0JCWJhbCAtPSBzU3BlZWQ7Ci0JfQotCWV4cGFuZF9iYWwgPSBiYWw7Ci0JZXhwYW5kX2RhdGEgPSBkYXRhOwotCSpmcmFtZVVzZWQgKz0gKGZ0b3RhbCAtIGZyYW1lTGVmdCkgKiA0OwotCXV0b3RhbCAtPSB1c2VyQ291bnQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXRvdGFsICogNDogdXRvdGFsICogMjsKLX0KLQotCi1zdGF0aWMgc3NpemVfdCBwbWFjX2N0eF91MTYoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgIHNzaXplX3QgZnJhbWVMZWZ0KQotewotCWludCBtYXNrID0gKGRtYXNvdW5kLnNvZnQuZm9ybWF0ID09IEFGTVRfVTE2X0xFPyAweDAwODA6IDB4ODAwMCk7Ci0JdW5zaWduZWQgaW50ICpwID0gKHVuc2lnbmVkIGludCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0JdW5zaWduZWQgaW50IGRhdGEgPSBleHBhbmRfZGF0YTsKLQl1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKnVwID0gKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKSB1c2VyUHRyOwotCWludCBiYWwgPSBleHBhbmRfYmFsOwotCWludCBoU3BlZWQgPSBkbWFzb3VuZC5oYXJkLnNwZWVkLCBzU3BlZWQgPSBkbWFzb3VuZC5zb2Z0LnNwZWVkOwotCWludCBzdGVyZW8gPSBkbWFzb3VuZC5zb2Z0LnN0ZXJlbzsKLQlpbnQgdXRvdGFsLCBmdG90YWw7Ci0KLQlmcmFtZUxlZnQgPj49IDI7Ci0JdXNlckNvdW50ID4+PSAoc3RlcmVvPyAyOiAxKTsKLQlmdG90YWwgPSBmcmFtZUxlZnQ7Ci0JdXRvdGFsID0gdXNlckNvdW50OwotCXdoaWxlIChmcmFtZUxlZnQpIHsKLQkJdW5zaWduZWQgc2hvcnQgYzsKLQkJaWYgKGJhbCA8IDApIHsKLQkJCWlmICh1c2VyQ291bnQgPT0gMCkKLQkJCQlicmVhazsKLQkJCWlmIChnZXRfdXNlcihkYXRhLCB1cCsrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWRhdGEgXj0gbWFzazsKLQkJCWlmIChzdGVyZW8pIHsKLQkJCQlpZiAoZ2V0X3VzZXIoYywgdXArKykpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCWRhdGEgPSAoZGF0YSA8PCAxNikgKyAoYyBeIG1hc2spOwotCQkJfSBlbHNlCi0JCQkJZGF0YSA9IChkYXRhIDw8IDE2KSArIGRhdGE7Ci0JCQl1c2VyQ291bnQtLTsKLQkJCWJhbCArPSBoU3BlZWQ7Ci0JCX0KLQkJKnArKyA9IGRhdGE7Ci0JCWZyYW1lTGVmdC0tOwotCQliYWwgLT0gc1NwZWVkOwotCX0KLQlleHBhbmRfYmFsID0gYmFsOwotCWV4cGFuZF9kYXRhID0gZGF0YTsKLQkqZnJhbWVVc2VkICs9IChmdG90YWwgLSBmcmFtZUxlZnQpICogNDsKLQl1dG90YWwgLT0gdXNlckNvdW50OwotCXJldHVybiBzdGVyZW8/IHV0b3RhbCAqIDQ6IHV0b3RhbCAqIDI7Ci19Ci0KLS8qIGRhdGEgaW4gcm91dGluZXMuLi4gKi8KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdF9zOF9yZWFkKGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgIHNzaXplX3QgZnJhbWVMZWZ0KQotewotCXNzaXplX3QgY291bnQsIHVzZWQ7Ci0Jc2hvcnQgKnAgPSAoc2hvcnQgKikgJmZyYW1lWypmcmFtZVVzZWRdOwotCWludCB2YWwsIHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCi0JZnJhbWVMZWZ0ID4+PSAyOwotCWlmIChzdGVyZW8pCi0JCXVzZXJDb3VudCA+Pj0gMTsKLQl1c2VkID0gY291bnQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB1c2VyQ291bnQsIGZyYW1lTGVmdCk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQl1X2NoYXIgZGF0YTsKLQotCQl2YWwgPSAqcCsrOwotCQl2YWwgPSAodmFsICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQlkYXRhID0gdmFsID4+IDg7Ci0JCWlmIChwdXRfdXNlcihkYXRhLCAodV9jaGFyIF9fdXNlciAqKXVzZXJQdHIrKykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHN0ZXJlbykgewotCQkJdmFsID0gKnA7Ci0JCQl2YWwgPSAodmFsICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQkJZGF0YSA9IHZhbCA+PiA4OwotCQkJaWYgKHB1dF91c2VyKGRhdGEsICh1X2NoYXIgX191c2VyICopdXNlclB0cisrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlwKys7Ci0JCWNvdW50LS07Ci0JfQotCSpmcmFtZVVzZWQgKz0gdXNlZCAqIDQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXNlZCAqIDI6IHVzZWQ7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdF91OF9yZWFkKGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgIHNzaXplX3QgZnJhbWVMZWZ0KQotewotCXNzaXplX3QgY291bnQsIHVzZWQ7Ci0Jc2hvcnQgKnAgPSAoc2hvcnQgKikgJmZyYW1lWypmcmFtZVVzZWRdOwotCWludCB2YWwsIHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCi0JZnJhbWVMZWZ0ID4+PSAyOwotCWlmIChzdGVyZW8pCi0JCXVzZXJDb3VudCA+Pj0gMTsKLQl1c2VkID0gY291bnQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB1c2VyQ291bnQsIGZyYW1lTGVmdCk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQl1X2NoYXIgZGF0YTsKLQotCQl2YWwgPSAqcCsrOwotCQl2YWwgPSAodmFsICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQlkYXRhID0gKHZhbCA+PiA4KSBeIDB4ODA7Ci0JCWlmIChwdXRfdXNlcihkYXRhLCAodV9jaGFyIF9fdXNlciAqKXVzZXJQdHIrKykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHN0ZXJlbykgewotCQkJdmFsID0gKnA7Ci0JCQl2YWwgPSAodmFsICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQkJZGF0YSA9ICh2YWwgPj4gOCkgXiAweDgwOwotCQkJaWYgKHB1dF91c2VyKGRhdGEsICh1X2NoYXIgX191c2VyICopdXNlclB0cisrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlwKys7Ci0JCWNvdW50LS07Ci0JfQotCSpmcmFtZVVzZWQgKz0gdXNlZCAqIDQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXNlZCAqIDI6IHVzZWQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3RfczE2X3JlYWQoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlzc2l6ZV90IGNvdW50LCB1c2VkOwotCWludCBzdGVyZW8gPSBkbWFzb3VuZC5zb2Z0LnN0ZXJlbzsKLQlzaG9ydCAqZnAgPSAoc2hvcnQgKikgJmZyYW1lWypmcmFtZVVzZWRdOwotCXNob3J0IF9fdXNlciAqdXAgPSAoc2hvcnQgX191c2VyICopIHVzZXJQdHI7Ci0KLQlmcmFtZUxlZnQgPj49IDI7Ci0JdXNlckNvdW50ID4+PSAoc3RlcmVvPyAyOiAxKTsKLQl1c2VkID0gY291bnQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLCB1c2VyQ291bnQsIGZyYW1lTGVmdCk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQlzaG9ydCBkYXRhOwotCi0JCWRhdGEgPSAqZnArKzsKLQkJZGF0YSA9IChkYXRhICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQlpZiAocHV0X3VzZXIoZGF0YSwgdXArKykpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHN0ZXJlbykgewotCQkJZGF0YSA9ICpmcDsKLQkJCWRhdGEgPSAoZGF0YSAqIHNvZnR3YXJlX2lucHV0X3ZvbHVtZSkgPj4gNzsKLQkJCWlmIChwdXRfdXNlcihkYXRhLCB1cCsrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJfQotCQlmcCsrOwotCQljb3VudC0tOwotIAl9Ci0JKmZyYW1lVXNlZCArPSB1c2VkICogNDsKLQlyZXR1cm4gc3RlcmVvPyB1c2VkICogNDogdXNlZCAqIDI7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3RfdTE2X3JlYWQoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlzc2l6ZV90IGNvdW50LCB1c2VkOwotCWludCBtYXNrID0gKGRtYXNvdW5kLnNvZnQuZm9ybWF0ID09IEFGTVRfVTE2X0xFPyAweDAwODA6IDB4ODAwMCk7Ci0JaW50IHN0ZXJlbyA9IGRtYXNvdW5kLnNvZnQuc3RlcmVvOwotCXNob3J0ICpmcCA9IChzaG9ydCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0Jc2hvcnQgX191c2VyICp1cCA9IChzaG9ydCBfX3VzZXIgKikgdXNlclB0cjsKLQotCWZyYW1lTGVmdCA+Pj0gMjsKLQl1c2VyQ291bnQgPj49IChzdGVyZW8/IDI6IDEpOwotCXVzZWQgPSBjb3VudCA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHVzZXJDb3VudCwgZnJhbWVMZWZ0KTsKLQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCWludCBkYXRhOwotCi0JCWRhdGEgPSAqZnArKzsKLQkJZGF0YSA9IChkYXRhICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQlkYXRhIF49IG1hc2s7Ci0JCWlmIChwdXRfdXNlcihkYXRhLCB1cCsrKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAoc3RlcmVvKSB7Ci0JCQlkYXRhID0gKmZwOwotCQkJZGF0YSA9IChkYXRhICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQkJZGF0YSBePSBtYXNrOwotCQkJaWYgKHB1dF91c2VyKGRhdGEsIHVwKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCWZwKys7Ci0JCWNvdW50LS07Ci0JfQotCSpmcmFtZVVzZWQgKz0gdXNlZCAqIDQ7Ci0JcmV0dXJuIHN0ZXJlbz8gdXNlZCAqIDQ6IHVzZWQgKiAyOwotfQotCi0vKiBkYXRhIGluIHJvdXRpbmVzIChyZWR1Y2luZyBzcGVlZCkuLi4gKi8KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfczhfcmVhZChjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlzaG9ydCAqcCA9IChzaG9ydCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0JaW50IGJhbCA9IGV4cGFuZF9yZWFkX2JhbDsKLQlpbnQgdmFsbCx2YWxyLCBzdGVyZW8gPSBkbWFzb3VuZC5zb2Z0LnN0ZXJlbzsKLQlpbnQgaFNwZWVkID0gZG1hc291bmQuaGFyZC5zcGVlZCwgc1NwZWVkID0gZG1hc291bmQuc29mdC5zcGVlZDsKLQlpbnQgdXRvdGFsLCBmdG90YWw7Ci0KLQlmcmFtZUxlZnQgPj49IDI7Ci0JaWYgKHN0ZXJlbykKLQkJdXNlckNvdW50ID4+PSAxOwotCWZ0b3RhbCA9IGZyYW1lTGVmdDsKLQl1dG90YWwgPSB1c2VyQ291bnQ7Ci0Jd2hpbGUgKGZyYW1lTGVmdCkgewotCQl1X2NoYXIgZGF0YTsKLQotCQlpZiAoYmFsPDAgJiYgdXNlckNvdW50ID09IDApCi0JCQlicmVhazsKLQkJdmFsbCA9ICpwKys7Ci0JCXZhbGwgPSAodmFsbCAqIHNvZnR3YXJlX2lucHV0X3ZvbHVtZSkgPj4gNzsKLQkJaWYgKHN0ZXJlbykgewotCQkJdmFsciA9ICpwOwotCQkJdmFsciA9ICh2YWxyICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQl9Ci0JCXArKzsKLQkJaWYgKGJhbCA8IDApIHsKLQkJCWRhdGEgPSB2YWxsID4+IDg7Ci0JCQlpZiAocHV0X3VzZXIoZGF0YSwgKHVfY2hhciBfX3VzZXIgKil1c2VyUHRyKyspKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHN0ZXJlbykgewotCQkJCWRhdGEgPSB2YWxyID4+IDg7Ci0JCQkJaWYgKHB1dF91c2VyKGRhdGEsICh1X2NoYXIgX191c2VyICopdXNlclB0cisrKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQl1c2VyQ291bnQtLTsKLQkJCWJhbCArPSBoU3BlZWQ7Ci0JCX0KLQkJZnJhbWVMZWZ0LS07Ci0JCWJhbCAtPSBzU3BlZWQ7Ci0JfQotCWV4cGFuZF9yZWFkX2JhbD1iYWw7Ci0JKmZyYW1lVXNlZCArPSAoZnRvdGFsIC0gZnJhbWVMZWZ0KSAqIDQ7Ci0JdXRvdGFsIC09IHVzZXJDb3VudDsKLQlyZXR1cm4gc3RlcmVvPyB1dG90YWwgKiAyOiB1dG90YWw7Ci19Ci0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfdThfcmVhZChjb25zdCB1X2NoYXIgX191c2VyICp1c2VyUHRyLCBzaXplX3QgdXNlckNvdW50LAotCQkJICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlzaG9ydCAqcCA9IChzaG9ydCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0JaW50IGJhbCA9IGV4cGFuZF9yZWFkX2JhbDsKLQlpbnQgdmFsbCx2YWxyLCBzdGVyZW8gPSBkbWFzb3VuZC5zb2Z0LnN0ZXJlbzsKLQlpbnQgaFNwZWVkID0gZG1hc291bmQuaGFyZC5zcGVlZCwgc1NwZWVkID0gZG1hc291bmQuc29mdC5zcGVlZDsKLQlpbnQgdXRvdGFsLCBmdG90YWw7Ci0KLQlmcmFtZUxlZnQgPj49IDI7Ci0JaWYgKHN0ZXJlbykKLQkJdXNlckNvdW50ID4+PSAxOwotCWZ0b3RhbCA9IGZyYW1lTGVmdDsKLQl1dG90YWwgPSB1c2VyQ291bnQ7Ci0Jd2hpbGUgKGZyYW1lTGVmdCkgewotCQl1X2NoYXIgZGF0YTsKLQotCQlpZiAoYmFsPDAgJiYgdXNlckNvdW50ID09IDApCi0JCQlicmVhazsKLQotCQl2YWxsID0gKnArKzsKLQkJdmFsbCA9ICh2YWxsICogc29mdHdhcmVfaW5wdXRfdm9sdW1lKSA+PiA3OwotCQlpZiAoc3RlcmVvKSB7Ci0JCQl2YWxyID0gKnA7Ci0JCQl2YWxyID0gKHZhbHIgKiBzb2Z0d2FyZV9pbnB1dF92b2x1bWUpID4+IDc7Ci0JCX0KLQkJcCsrOwotCQlpZiAoYmFsIDwgMCkgewotCQkJZGF0YSA9ICh2YWxsID4+IDgpIF4gMHg4MDsKLQkJCWlmIChwdXRfdXNlcihkYXRhLCAodV9jaGFyIF9fdXNlciAqKXVzZXJQdHIrKykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAoc3RlcmVvKSB7Ci0JCQkJZGF0YSA9ICh2YWxyID4+IDgpIF4gMHg4MDsKLQkJCQlpZiAocHV0X3VzZXIoZGF0YSwgKHVfY2hhciBfX3VzZXIgKil1c2VyUHRyKyspKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCXVzZXJDb3VudC0tOwotCQkJYmFsICs9IGhTcGVlZDsKLQkJfQotCQlmcmFtZUxlZnQtLTsKLQkJYmFsIC09IHNTcGVlZDsKLQl9Ci0JZXhwYW5kX3JlYWRfYmFsPWJhbDsKLQkqZnJhbWVVc2VkICs9IChmdG90YWwgLSBmcmFtZUxlZnQpICogNDsKLQl1dG90YWwgLT0gdXNlckNvdW50OwotCXJldHVybiBzdGVyZW8/IHV0b3RhbCAqIDI6IHV0b3RhbDsKLX0KLQotc3RhdGljIHNzaXplX3QgcG1hY19jdHhfczE2X3JlYWQoY29uc3QgdV9jaGFyIF9fdXNlciAqdXNlclB0ciwgc2l6ZV90IHVzZXJDb3VudCwKLQkJCSAgIHVfY2hhciBmcmFtZVtdLCBzc2l6ZV90ICpmcmFtZVVzZWQsCi0JCQkgICBzc2l6ZV90IGZyYW1lTGVmdCkKLXsKLQlpbnQgYmFsID0gZXhwYW5kX3JlYWRfYmFsOwotCXNob3J0ICpmcCA9IChzaG9ydCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0Jc2hvcnQgX191c2VyICp1cCA9IChzaG9ydCBfX3VzZXIgKikgdXNlclB0cjsKLQlpbnQgc3RlcmVvID0gZG1hc291bmQuc29mdC5zdGVyZW87Ci0JaW50IGhTcGVlZCA9IGRtYXNvdW5kLmhhcmQuc3BlZWQsIHNTcGVlZCA9IGRtYXNvdW5kLnNvZnQuc3BlZWQ7Ci0JaW50IHV0b3RhbCwgZnRvdGFsOwotCi0JZnJhbWVMZWZ0ID4+PSAyOwotCXVzZXJDb3VudCA+Pj0gKHN0ZXJlbz8gMjogMSk7Ci0JZnRvdGFsID0gZnJhbWVMZWZ0OwotCXV0b3RhbCA9IHVzZXJDb3VudDsKLQl3aGlsZSAoZnJhbWVMZWZ0KSB7Ci0JCWludCBkYXRhbCxkYXRhcjsKLQotCQlpZiAoYmFsPDAgJiYgdXNlckNvdW50ID09IDApCi0JCQlicmVhazsKLQotCQlkYXRhbCA9ICpmcCsrOwotCQlkYXRhbCA9IChkYXRhbCAqIHNvZnR3YXJlX2lucHV0X3ZvbHVtZSkgPj4gNzsKLQkJaWYgKHN0ZXJlbykgewotCQkJZGF0YXIgPSAqZnA7Ci0JCQlkYXRhciA9IChkYXRhciAqIHNvZnR3YXJlX2lucHV0X3ZvbHVtZSkgPj4gNzsKLQkJfQotCQlmcCsrOwotCQlpZiAoYmFsIDwgMCkgewotCQkJaWYgKHB1dF91c2VyKGRhdGFsLCB1cCsrKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChzdGVyZW8pIHsKLQkJCQlpZiAocHV0X3VzZXIoZGF0YXIsIHVwKyspKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCXVzZXJDb3VudC0tOwotCQkJYmFsICs9IGhTcGVlZDsKLQkJfQotCQlmcmFtZUxlZnQtLTsKLQkJYmFsIC09IHNTcGVlZDsKLQl9Ci0JZXhwYW5kX3JlYWRfYmFsPWJhbDsKLQkqZnJhbWVVc2VkICs9IChmdG90YWwgLSBmcmFtZUxlZnQpICogNDsKLQl1dG90YWwgLT0gdXNlckNvdW50OwotCXJldHVybiBzdGVyZW8/IHV0b3RhbCAqIDQ6IHV0b3RhbCAqIDI7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHBtYWNfY3R4X3UxNl9yZWFkKGNvbnN0IHVfY2hhciBfX3VzZXIgKnVzZXJQdHIsIHNpemVfdCB1c2VyQ291bnQsCi0JCQkgICB1X2NoYXIgZnJhbWVbXSwgc3NpemVfdCAqZnJhbWVVc2VkLAotCQkJICAgc3NpemVfdCBmcmFtZUxlZnQpCi17Ci0JaW50IGJhbCA9IGV4cGFuZF9yZWFkX2JhbDsKLQlpbnQgbWFzayA9IChkbWFzb3VuZC5zb2Z0LmZvcm1hdCA9PSBBRk1UX1UxNl9MRT8gMHgwMDgwOiAweDgwMDApOwotCXNob3J0ICpmcCA9IChzaG9ydCAqKSAmZnJhbWVbKmZyYW1lVXNlZF07Ci0Jc2hvcnQgX191c2VyICp1cCA9IChzaG9ydCBfX3VzZXIgKikgdXNlclB0cjsKLQlpbnQgc3RlcmVvID0gZG1hc291bmQuc29mdC5zdGVyZW87Ci0JaW50IGhTcGVlZCA9IGRtYXNvdW5kLmhhcmQuc3BlZWQsIHNTcGVlZCA9IGRtYXNvdW5kLnNvZnQuc3BlZWQ7Ci0JaW50IHV0b3RhbCwgZnRvdGFsOwotCi0JZnJhbWVMZWZ0ID4+PSAyOwotCXVzZXJDb3VudCA+Pj0gKHN0ZXJlbz8gMjogMSk7Ci0JZnRvdGFsID0gZnJhbWVMZWZ0OwotCXV0b3RhbCA9IHVzZXJDb3VudDsKLQl3aGlsZSAoZnJhbWVMZWZ0KSB7Ci0JCWludCBkYXRhbCxkYXRhcjsKLQotCQlpZiAoYmFsPDAgJiYgdXNlckNvdW50ID09IDApCi0JCQlicmVhazsKLQotCQlkYXRhbCA9ICpmcCsrOwotCQlkYXRhbCA9IChkYXRhbCAqIHNvZnR3YXJlX2lucHV0X3ZvbHVtZSkgPj4gNzsKLQkJZGF0YWwgXj0gbWFzazsKLQkJaWYgKHN0ZXJlbykgewotCQkJZGF0YXIgPSAqZnA7Ci0JCQlkYXRhciA9IChkYXRhciAqIHNvZnR3YXJlX2lucHV0X3ZvbHVtZSkgPj4gNzsKLQkJCWRhdGFyIF49IG1hc2s7Ci0JCX0KLQkJZnArKzsKLQkJaWYgKGJhbCA8IDApIHsKLQkJCWlmIChwdXRfdXNlcihkYXRhbCwgdXArKykpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAoc3RlcmVvKSB7Ci0JCQkJaWYgKHB1dF91c2VyKGRhdGFyLCB1cCsrKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQl1c2VyQ291bnQtLTsKLQkJCWJhbCArPSBoU3BlZWQ7Ci0JCX0KLQkJZnJhbWVMZWZ0LS07Ci0JCWJhbCAtPSBzU3BlZWQ7Ci0JfQotCWV4cGFuZF9yZWFkX2JhbD1iYWw7Ci0JKmZyYW1lVXNlZCArPSAoZnRvdGFsIC0gZnJhbWVMZWZ0KSAqIDQ7Ci0JdXRvdGFsIC09IHVzZXJDb3VudDsKLQlyZXR1cm4gc3RlcmVvPyB1dG90YWwgKiA0OiB1dG90YWwgKiAyOwotfQotCi0KLVRSQU5TIHRyYW5zQXdhY3NOb3JtYWwgPSB7Ci0JLmN0X3VsYXc9CXBtYWNfY3RfbGF3LAotCS5jdF9hbGF3PQlwbWFjX2N0X2xhdywKLQkuY3Rfczg9CQlwbWFjX2N0X3M4LAotCS5jdF91OD0JCXBtYWNfY3RfdTgsCi0JLmN0X3MxNmJlPQlwbWFjX2N0X3MxNiwKLQkuY3RfdTE2YmU9CXBtYWNfY3RfdTE2LAotCS5jdF9zMTZsZT0JcG1hY19jdF9zMTYsCi0JLmN0X3UxNmxlPQlwbWFjX2N0X3UxNiwKLX07Ci0KLVRSQU5TIHRyYW5zQXdhY3NFeHBhbmQgPSB7Ci0JLmN0X3VsYXc9CXBtYWNfY3R4X2xhdywKLQkuY3RfYWxhdz0JcG1hY19jdHhfbGF3LAotCS5jdF9zOD0JCXBtYWNfY3R4X3M4LAotCS5jdF91OD0JCXBtYWNfY3R4X3U4LAotCS5jdF9zMTZiZT0JcG1hY19jdHhfczE2LAotCS5jdF91MTZiZT0JcG1hY19jdHhfdTE2LAotCS5jdF9zMTZsZT0JcG1hY19jdHhfczE2LAotCS5jdF91MTZsZT0JcG1hY19jdHhfdTE2LAotfTsKLQotVFJBTlMgdHJhbnNBd2Fjc05vcm1hbFJlYWQgPSB7Ci0JLmN0X3M4PQkJcG1hY19jdF9zOF9yZWFkLAotCS5jdF91OD0JCXBtYWNfY3RfdThfcmVhZCwKLQkuY3RfczE2YmU9CXBtYWNfY3RfczE2X3JlYWQsCi0JLmN0X3UxNmJlPQlwbWFjX2N0X3UxNl9yZWFkLAotCS5jdF9zMTZsZT0JcG1hY19jdF9zMTZfcmVhZCwKLQkuY3RfdTE2bGU9CXBtYWNfY3RfdTE2X3JlYWQsCi19OwotCi1UUkFOUyB0cmFuc0F3YWNzRXhwYW5kUmVhZCA9IHsKLQkuY3Rfczg9CQlwbWFjX2N0eF9zOF9yZWFkLAotCS5jdF91OD0JCXBtYWNfY3R4X3U4X3JlYWQsCi0JLmN0X3MxNmJlPQlwbWFjX2N0eF9zMTZfcmVhZCwKLQkuY3RfdTE2YmU9CXBtYWNfY3R4X3UxNl9yZWFkLAotCS5jdF9zMTZsZT0JcG1hY19jdHhfczE2X3JlYWQsCi0JLmN0X3UxNmxlPQlwbWFjX2N0eF91MTZfcmVhZCwKLX07Ci0KLS8qIHRyYW5zbGF0aW9uIHRhYmxlcyAqLwotLyogMTYgYml0IG11LWxhdyAqLwotCi1zdGF0aWMgc2hvcnQgZG1hc291bmRfdWxhdzJkbWExNltdID0gewotCS0zMjEyNCwJLTMxMTAwLAktMzAwNzYsCS0yOTA1MiwJLTI4MDI4LAktMjcwMDQsCS0yNTk4MCwJLTI0OTU2LAotCS0yMzkzMiwJLTIyOTA4LAktMjE4ODQsCS0yMDg2MCwJLTE5ODM2LAktMTg4MTIsCS0xNzc4OCwJLTE2NzY0LAotCS0xNTk5NiwJLTE1NDg0LAktMTQ5NzIsCS0xNDQ2MCwJLTEzOTQ4LAktMTM0MzYsCS0xMjkyNCwJLTEyNDEyLAotCS0xMTkwMCwJLTExMzg4LAktMTA4NzYsCS0xMDM2NCwJLTk4NTIsCS05MzQwLAktODgyOCwJLTgzMTYsCi0JLTc5MzIsCS03Njc2LAktNzQyMCwJLTcxNjQsCS02OTA4LAktNjY1MiwJLTYzOTYsCS02MTQwLAotCS01ODg0LAktNTYyOCwJLTUzNzIsCS01MTE2LAktNDg2MCwJLTQ2MDQsCS00MzQ4LAktNDA5MiwKLQktMzkwMCwJLTM3NzIsCS0zNjQ0LAktMzUxNiwJLTMzODgsCS0zMjYwLAktMzEzMiwJLTMwMDQsCi0JLTI4NzYsCS0yNzQ4LAktMjYyMCwJLTI0OTIsCS0yMzY0LAktMjIzNiwJLTIxMDgsCS0xOTgwLAotCS0xODg0LAktMTgyMCwJLTE3NTYsCS0xNjkyLAktMTYyOCwJLTE1NjQsCS0xNTAwLAktMTQzNiwKLQktMTM3MiwJLTEzMDgsCS0xMjQ0LAktMTE4MCwJLTExMTYsCS0xMDUyLAktOTg4LAktOTI0LAotCS04NzYsCS04NDQsCS04MTIsCS03ODAsCS03NDgsCS03MTYsCS02ODQsCS02NTIsCi0JLTYyMCwJLTU4OCwJLTU1NiwJLTUyNCwJLTQ5MiwJLTQ2MCwJLTQyOCwJLTM5NiwKLQktMzcyLAktMzU2LAktMzQwLAktMzI0LAktMzA4LAktMjkyLAktMjc2LAktMjYwLAotCS0yNDQsCS0yMjgsCS0yMTIsCS0xOTYsCS0xODAsCS0xNjQsCS0xNDgsCS0xMzIsCi0JLTEyMCwJLTExMiwJLTEwNCwJLTk2LAktODgsCS04MCwJLTcyLAktNjQsCi0JLTU2LAktNDgsCS00MCwJLTMyLAktMjQsCS0xNiwJLTgsCTAsCi0JMzIxMjQsCTMxMTAwLAkzMDA3NiwJMjkwNTIsCTI4MDI4LAkyNzAwNCwJMjU5ODAsCTI0OTU2LAotCTIzOTMyLAkyMjkwOCwJMjE4ODQsCTIwODYwLAkxOTgzNiwJMTg4MTIsCTE3Nzg4LAkxNjc2NCwKLQkxNTk5NiwJMTU0ODQsCTE0OTcyLAkxNDQ2MCwJMTM5NDgsCTEzNDM2LAkxMjkyNCwJMTI0MTIsCi0JMTE5MDAsCTExMzg4LAkxMDg3NiwJMTAzNjQsCTk4NTIsCTkzNDAsCTg4MjgsCTgzMTYsCi0JNzkzMiwJNzY3NiwJNzQyMCwJNzE2NCwJNjkwOCwJNjY1MiwJNjM5NiwJNjE0MCwKLQk1ODg0LAk1NjI4LAk1MzcyLAk1MTE2LAk0ODYwLAk0NjA0LAk0MzQ4LAk0MDkyLAotCTM5MDAsCTM3NzIsCTM2NDQsCTM1MTYsCTMzODgsCTMyNjAsCTMxMzIsCTMwMDQsCi0JMjg3NiwJMjc0OCwJMjYyMCwJMjQ5MiwJMjM2NCwJMjIzNiwJMjEwOCwJMTk4MCwKLQkxODg0LAkxODIwLAkxNzU2LAkxNjkyLAkxNjI4LAkxNTY0LAkxNTAwLAkxNDM2LAotCTEzNzIsCTEzMDgsCTEyNDQsCTExODAsCTExMTYsCTEwNTIsCTk4OCwJOTI0LAotCTg3NiwJODQ0LAk4MTIsCTc4MCwJNzQ4LAk3MTYsCTY4NCwJNjUyLAotCTYyMCwJNTg4LAk1NTYsCTUyNCwJNDkyLAk0NjAsCTQyOCwJMzk2LAotCTM3MiwJMzU2LAkzNDAsCTMyNCwJMzA4LAkyOTIsCTI3NiwJMjYwLAotCTI0NCwJMjI4LAkyMTIsCTE5NiwJMTgwLAkxNjQsCTE0OCwJMTMyLAotCTEyMCwJMTEyLAkxMDQsCTk2LAk4OCwJODAsCTcyLAk2NCwKLQk1NiwJNDgsCTQwLAkzMiwJMjQsCTE2LAk4LAkwLAotfTsKLQotLyogMTYgYml0IEEtbGF3ICovCi0KLXN0YXRpYyBzaG9ydCBkbWFzb3VuZF9hbGF3MmRtYTE2W10gPSB7Ci0JLTU1MDQsCS01MjQ4LAktNjAxNiwJLTU3NjAsCS00NDgwLAktNDIyNCwJLTQ5OTIsCS00NzM2LAotCS03NTUyLAktNzI5NiwJLTgwNjQsCS03ODA4LAktNjUyOCwJLTYyNzIsCS03MDQwLAktNjc4NCwKLQktMjc1MiwJLTI2MjQsCS0zMDA4LAktMjg4MCwJLTIyNDAsCS0yMTEyLAktMjQ5NiwJLTIzNjgsCi0JLTM3NzYsCS0zNjQ4LAktNDAzMiwJLTM5MDQsCS0zMjY0LAktMzEzNiwJLTM1MjAsCS0zMzkyLAotCS0yMjAxNiwJLTIwOTkyLAktMjQwNjQsCS0yMzA0MCwJLTE3OTIwLAktMTY4OTYsCS0xOTk2OCwJLTE4OTQ0LAotCS0zMDIwOCwJLTI5MTg0LAktMzIyNTYsCS0zMTIzMiwJLTI2MTEyLAktMjUwODgsCS0yODE2MCwJLTI3MTM2LAotCS0xMTAwOCwJLTEwNDk2LAktMTIwMzIsCS0xMTUyMCwJLTg5NjAsCS04NDQ4LAktOTk4NCwJLTk0NzIsCi0JLTE1MTA0LAktMTQ1OTIsCS0xNjEyOCwJLTE1NjE2LAktMTMwNTYsCS0xMjU0NCwJLTE0MDgwLAktMTM1NjgsCi0JLTM0NCwJLTMyOCwJLTM3NiwJLTM2MCwJLTI4MCwJLTI2NCwJLTMxMiwJLTI5NiwKLQktNDcyLAktNDU2LAktNTA0LAktNDg4LAktNDA4LAktMzkyLAktNDQwLAktNDI0LAotCS04OCwJLTcyLAktMTIwLAktMTA0LAktMjQsCS04LAktNTYsCS00MCwKLQktMjE2LAktMjAwLAktMjQ4LAktMjMyLAktMTUyLAktMTM2LAktMTg0LAktMTY4LAotCS0xMzc2LAktMTMxMiwJLTE1MDQsCS0xNDQwLAktMTEyMCwJLTEwNTYsCS0xMjQ4LAktMTE4NCwKLQktMTg4OCwJLTE4MjQsCS0yMDE2LAktMTk1MiwJLTE2MzIsCS0xNTY4LAktMTc2MCwJLTE2OTYsCi0JLTY4OCwJLTY1NiwJLTc1MiwJLTcyMCwJLTU2MCwJLTUyOCwJLTYyNCwJLTU5MiwKLQktOTQ0LAktOTEyLAktMTAwOCwJLTk3NiwJLTgxNiwJLTc4NCwJLTg4MCwJLTg0OCwKLQk1NTA0LAk1MjQ4LAk2MDE2LAk1NzYwLAk0NDgwLAk0MjI0LAk0OTkyLAk0NzM2LAotCTc1NTIsCTcyOTYsCTgwNjQsCTc4MDgsCTY1MjgsCTYyNzIsCTcwNDAsCTY3ODQsCi0JMjc1MiwJMjYyNCwJMzAwOCwJMjg4MCwJMjI0MCwJMjExMiwJMjQ5NiwJMjM2OCwKLQkzNzc2LAkzNjQ4LAk0MDMyLAkzOTA0LAkzMjY0LAkzMTM2LAkzNTIwLAkzMzkyLAotCTIyMDE2LAkyMDk5MiwJMjQwNjQsCTIzMDQwLAkxNzkyMCwJMTY4OTYsCTE5OTY4LAkxODk0NCwKLQkzMDIwOCwJMjkxODQsCTMyMjU2LAkzMTIzMiwJMjYxMTIsCTI1MDg4LAkyODE2MCwJMjcxMzYsCi0JMTEwMDgsCTEwNDk2LAkxMjAzMiwJMTE1MjAsCTg5NjAsCTg0NDgsCTk5ODQsCTk0NzIsCi0JMTUxMDQsCTE0NTkyLAkxNjEyOCwJMTU2MTYsCTEzMDU2LAkxMjU0NCwJMTQwODAsCTEzNTY4LAotCTM0NCwJMzI4LAkzNzYsCTM2MCwJMjgwLAkyNjQsCTMxMiwJMjk2LAotCTQ3MiwJNDU2LAk1MDQsCTQ4OCwJNDA4LAkzOTIsCTQ0MCwJNDI0LAotCTg4LAk3MiwJMTIwLAkxMDQsCTI0LAk4LAk1NiwJNDAsCi0JMjE2LAkyMDAsCTI0OCwJMjMyLAkxNTIsCTEzNiwJMTg0LAkxNjgsCi0JMTM3NiwJMTMxMiwJMTUwNCwJMTQ0MCwJMTEyMCwJMTA1NiwJMTI0OCwJMTE4NCwKLQkxODg4LAkxODI0LAkyMDE2LAkxOTUyLAkxNjMyLAkxNTY4LAkxNzYwLAkxNjk2LAotCTY4OCwJNjU2LAk3NTIsCTcyMCwJNTYwLAk1MjgsCTYyNCwJNTkyLAotCTk0NCwJOTEyLAkxMDA4LAk5NzYsCTgxNiwJNzg0LAk4ODAsCTg0OCwKLX07CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvZXMxMzcxLmMgYi9zb3VuZC9vc3MvZXMxMzcxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNjQ4NTcuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL2VzMTM3MS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzEzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiAgICAgIGVzMTM3MS5jICAtLSAgQ3JlYXRpdmUgRW5zb25pcSBFUzEzNzEuCi0gKgotICogICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSwgMjAwMyAgVGhvbWFzIFNhaWxlciAodC5zYWlsZXJAYWx1bW5pLmV0aHouY2gpCi0gKgotICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICoKLSAqIFNwZWNpYWwgdGhhbmtzIHRvIEVuc29uaXEKLSAqCi0gKiAgU3VwcG9ydGVkIGRldmljZXM6Ci0gKiAgL2Rldi9kc3AgICAgc3RhbmRhcmQgL2Rldi9kc3AgZGV2aWNlLCAobW9zdGx5KSBPU1MgY29tcGF0aWJsZQotICogIC9kZXYvbWl4ZXIgIHN0YW5kYXJkIC9kZXYvbWl4ZXIgZGV2aWNlLCAobW9zdGx5KSBPU1MgY29tcGF0aWJsZQotICogIC9kZXYvZHNwMSAgIGFkZGl0aW9uYWwgREFDLCBsaWtlIC9kZXYvZHNwLCBidXQgb3V0cHV0cyB0byBtaXhlciAiU1lOVEgiIHNldHRpbmcKLSAqICAvZGV2L21pZGkgICBzaW1wbGUgTUlESSBVQVJUIGludGVyZmFjZSwgbm8gaW9jdGwKLSAqCi0gKiAgTk9URTogdGhlIGNhcmQgZG9lcyBub3QgaGF2ZSBhbnkgRk0vV2F2ZXRhYmxlIHN5bnRoZXNpemVyLCBpdCBpcyBzdXBwb3NlZAotICogIHRvIGJlIGRvbmUgaW4gc29mdHdhcmUuIFRoYXQgaXMgd2hhdCAvZGV2L2RhYyBpcyBmb3IuIEJ5IG5vdyAoUTIgMTk5OCkKLSAqICB0aGVyZSBhcmUgc2V2ZXJhbCBNSURJIHRvIFBDTSAoV0FWKSBwYWNrYWdlcywgb25lIG9mIHRoZW0gaXMgdGltaWRpdHkuCi0gKgotICogIFJldmlzaW9uIGhpc3RvcnkKLSAqICAgIDA0LjA2LjE5OTggICAwLjEgICBJbml0aWFsIHJlbGVhc2UKLSAqICAgICAgICAgICAgICAgICAgICAgICBNaXhlciBzdHVmZiBzaG91bGQgYmUgb3ZlcmhhdWxlZDsgZXNwZWNpYWxseSBvcHRpb25hbCBBQzk3IG1peGVyIGJpdHMKLSAqICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgZGV0ZWN0ZWQuIFRoaXMgcmVzdWx0cyBpbiBzdHJhbmdlIGJlaGF2aW91ciBvZiBzb21lIG1peGVyCi0gKiAgICAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MsIGxpa2UgbWFzdGVyIHZvbHVtZSBhbmQgbWljLgotICogICAgMDguMDYuMTk5OCAgIDAuMiAgIEZpcnN0IHJlbGVhc2UgdXNpbmcgQWxhbiBDb3gnIHNvdW5kY29yZSBpbnN0ZWFkIG9mIG1pc2NkZXZpY2UKLSAqICAgIDAzLjA4LjE5OTggICAwLjMgICBEbyBub3QgaW5jbHVkZSBtb2R2ZXJzaW9ucy5oCi0gKiAgICAgICAgICAgICAgICAgICAgICAgTm93IG1peGVyIGJlaGF2aW91ciBjYW4gYmFzaWNhbGx5IGJlIHNlbGVjdGVkIGJldHdlZW4KLSAqICAgICAgICAgICAgICAgICAgICAgICAiT1NTIGRvY3VtZW50ZWQiIGFuZCAiT1NTIGFjdHVhbCIgYmVoYXZpb3VyCi0gKiAgICAzMS4wOC4xOTk4ICAgMC40ICAgRml4IHJlYWxwbGF5ZXIgcHJvYmxlbXMgLSBkYWMuY291bnQgaXNzdWVzCi0gKiAgICAyNy4xMC4xOTk4ICAgMC41ICAgRml4IGpveXN0aWNrIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICAtLSBPbGl2ZXIgTmV1a3VtIChjMTg4QG9yZy5jaGVtaWUudW5pLW11ZW5jaGVuLmRlKQotICogICAgMTAuMTIuMTk5OCAgIDAuNiAgIEZpeCBkcmFpbl9kYWMgdHJ5aW5nIHRvIHdhaXQgb24gbm90IHlldCBpbml0aWFsaXplZCBETUEKLSAqICAgIDIzLjEyLjE5OTggICAwLjcgICBGaXggYSBmZXcgZl9maWxlICYgRk1PREVfIGJ1Z3MKLSAqICAgICAgICAgICAgICAgICAgICAgICBEb24ndCB3YWtlIHVwIGFwcCB1bnRpbCB0aGVyZSBhcmUgZnJhZ3NpemUgYnl0ZXMgdG8gcmVhZC93cml0ZQotICogICAgMDYuMDEuMTk5OSAgIDAuOCAgIHJlbW92ZSB0aGUgc2lsbHkgU0FfSU5URVJSVVBUIGZsYWcuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgaG9wZWZ1bGx5IGtpbGxlZCB0aGUgZWdjcyBzZWN0aW9uIHR5cGUgY29uZmxpY3QKLSAqICAgIDEyLjAzLjE5OTkgICAwLjkgICBjaW5mby5ibG9ja3Mgc2hvdWxkIGJlIHJlc2V0IGFmdGVyIEdFVHhQVFIgaW9jdGwuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYnkgSm9oYW4gTWFlcyA8am9tYUB0ZWxpbmR1cy5iZT4KLSAqICAgIDIyLjAzLjE5OTkgICAwLjEwICByZXR1cm4gRUFHQUlOIGluc3RlYWQgb2YgRUJVU1kgd2hlbiBPX05PTkJMT0NLCi0gKiAgICAgICAgICAgICAgICAgICAgICAgcmVhZC93cml0ZSBjYW5ub3QgYmUgZXhlY3V0ZWQKLSAqICAgIDA3LjA0LjE5OTkgICAwLjExICBpbXBsZW1lbnRlZCB0aGUgZm9sbG93aW5nIGlvY3RsJ3M6IFNPVU5EX1BDTV9SRUFEX1JBVEUsIAotICogICAgICAgICAgICAgICAgICAgICAgIFNPVU5EX1BDTV9SRUFEX0NIQU5ORUxTLCBTT1VORF9QQ01fUkVBRF9CSVRTOyAKLSAqICAgICAgICAgICAgICAgICAgICAgICBBbHBoYSBmaXhlcyByZXBvcnRlZCBieSBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgQW5vdGhlciBBbHBoYSBmaXggKHdhaXRfc3JjX3JlYWR5IGluIGluaXQgcm91dGluZSkKLSAqICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBieSAiSXZhbiBOLiBLb2tzaGF5c2t5IiA8aW5rQGp1cmFzc2ljLnBhcmsubXN1LnJ1PgotICogICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IGpveXN0aWNrIGFkZHJlc3MgaGFuZGxpbmcgbWlnaHQgc3RpbGwgYmUgd3Jvbmcgb24gYXJjaHMKLSAqICAgICAgICAgICAgICAgICAgICAgICBvdGhlciB0aGFuIGkzODYKLSAqICAgIDE1LjA2LjE5OTkgICAwLjEyICBGaXggYmFkIGFsbG9jYXRpb24gYnVnLgotICogICAgICAgICAgICAgICAgICAgICAgIFRoYW5rcyB0byBEZXRpIEZsaWVnbCA8ZmxpZWdsQGluLnR1bS5kZT4KLSAqICAgIDI4LjA2LjE5OTkgICAwLjEzICBBZGQgcGNpX3NldF9tYXN0ZXIKLSAqICAgIDAzLjA4LjE5OTkgICAwLjE0ICBhZGFwdCB0byBMaW51cycgbmV3IF9fc2V0dXAvX19pbml0Y2FsbAotICogICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIGtlcm5lbCBjb21tYW5kIGxpbmUgb3B0aW9uICJlczEzNzE9am95c3RpY2thZGRyIgotICogICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgQ09ORklHX1NPVU5EX0VTMTM3MV9KT1lQT1JUX0JPT1Qga2x1ZGdlCi0gKiAgICAxMC4wOC4xOTk5ICAgMC4xNSAgKFJlKWFkZGVkIFMvUERJRiBtb2R1bGUgb3B0aW9uIGZvciBjYXJkcyByZXZpc2lvbiA+PSA0LgotICogICAgICAgICAgICAgICAgICAgICAgIEluaXRpYWwgdmVyc2lvbiBieSBEYXZlIFBsYXR0IDxkcGxhdHRAc251bGJ1Zy5tdHZpZXcuY2EudXM+LgotICogICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9pbml0L19fc2V0dXAgZml4ZXMKLSAqICAgIDA4LjE2LjE5OTkgICAwLjE2ICBKb2UgQ290ZWxsZXNlIDxqb2VjQGVuc29uaXEuY29tPgotICogICAgICAgICAgICAgICAgICAgICAgIEFkZGVkIGRldGVjdGlvbiBmb3IgRVMxMzcxIHJldmlzaW9uIElEIHNvIHRoYXQgd2UgY2FuCi0gKiAgICAgICAgICAgICAgICAgICAgICAgZGV0ZWN0IHRoZSBFUzEzNzMgYW5kIGxhdGVyIHBhcnRzLgotICogICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIEFDOTcgI2RlZmluZXMgZm9yIHJlYWRhYmlsaXR5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgYSAvcHJvYyBmaWxlIHN5c3RlbSBmb3IgZHVtcGluZyBoYXJkd2FyZSBzdGF0ZQotICogICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgU1JDIGFuZCBDT0RFQyB3L3IgZnVuY3Rpb25zIHRvIGFjY29tbW9kYXRlIGJ1Z3MKLSAqICAgICAgICAgICAgICAgICAgICAgICBpbiBzb21lIHZlcnNpb25zIG9mIHRoZSBFUzEzN3ggY2hpcHMuCi0gKiAgICAzMS4wOC4xOTk5ICAgMC4xNyAgYWRkIHNwaW5fbG9ja19pbml0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZWQgY3VycmVudC0+c3RhdGUgPSB4IHdpdGggc2V0X2N1cnJlbnRfc3RhdGUoeCkKLSAqICAgIDAzLjA5LjE5OTkgICAwLjE4ICBjaGFuZ2UgcmVhZCBzZW1hbnRpY3MgZm9yIE1JREkgdG8gbWF0Y2gKLSAqICAgICAgICAgICAgICAgICAgICAgICBPU1MgbW9yZSBjbG9zZWx5OyByZW1vdmUgcG9zc2libGUgd2FrZXVwIHJhY2UKLSAqICAgIDIxLjEwLjE5OTkgICAwLjE5ICBSb3VuZCBzYW1wbGluZyByYXRlcywgcmVxdWVzdGVkIGJ5Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgS2FzYW1hdHN1IEtlbmljaGkgPHQyOXcwMjY3QGlwLm1lZGlhLmt5b3RvLXUuYWMuanA+Ci0gKiAgICAyNy4xMC4xOTk5ICAgMC4yMCAgQWRkZWQgU2lnbWFUZWwgM0QgZW5oYW5jZW1lbnQgc3RyaW5nCi0gKiAgICAgICAgICAgICAgICAgICAgICAgQ29kZWMgSUQgcHJpbnRpbmcgY2hhbmdlcwotICogICAgMjguMTAuMTk5OSAgIDAuMjEgIE1vcmUgd2FpdHF1ZXVlIHJhY2VzIGZpeGVkCi0gKiAgICAgICAgICAgICAgICAgICAgICAgSm9lIENvdGVsbGVzZSA8am9lY0BlbnNvbmlxLmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgICBDaGFuZ2VkIFBDSSBkZXRlY3Rpb24gcm91dGluZSBzbyB3ZSBjYW4gbW9yZSBlYXNpbHkKLSAqICAgICAgICAgICAgICAgICAgICAgICBkZXRlY3QgRVMxMzd4IGNoaXAgYW5kIGRlcml2YXRpdmVzLgotICogICAgMDUuMDEuMjAwMCAgIDAuMjIgIFNob3VsZCBub3cgd29yayB3aXRoIHJldjcgYm9hcmRzOyBwYXRjaCBieQotICogICAgICAgICAgICAgICAgICAgICAgIEVyaWMgTGVtYXIsIGVsZW1hckBjcy53YXNoaW5ndG9uLmVkdQotICogICAgMDguMDEuMjAwMCAgIDAuMjMgIFByZXZlbnQgc29tZSBpb2N0bCdzIGZyb20gcmV0dXJuaW5nIGJhZCBjb3VudCB2YWx1ZXMgb24gdW5kZXJydW4vb3ZlcnJ1bjsKLSAqICAgICAgICAgICAgICAgICAgICAgICBUaW0gSmFuaWsncyBCU0UgKEJlZGV2aWxsZWQgU291bmQgRW5naW5lKSBmb3VuZCB0aGlzCi0gKiAgICAwNy4wMi4yMDAwICAgMC4yNCAgVXNlIHBjaV9hbGxvY19jb25zaXN0ZW50IGFuZCBwY2lfcmVnaXN0ZXJfZHJpdmVyCi0gKiAgICAwNy4wMi4yMDAwICAgMC4yNSAgVXNlIGFjOTdfY29kZWMKLSAqICAgIDAxLjAzLjIwMDAgICAwLjI2ICBTUERJRiBwYXRjaCBieSBNaWthZWwgQm91aWxsb3QgPG1pa2FlbC5ib3VpbGxvdEBiaWdmb290LmNvbT4KLSAqICAgICAgICAgICAgICAgICAgICAgICBVc2UgcGNpX21vZHVsZV9pbml0Ci0gKiAgICAyMS4xMS4yMDAwICAgMC4yNyAgSW5pdGlhbGl6ZSBkbWEgYnVmZmVycyBpbiBwb2xsLCBvdGhlcndpc2UgcG9sbCBtYXkgcmV0dXJuIGEgYm9ndXMgbWFzawotICogICAgMTIuMTIuMjAwMCAgIDAuMjggIE1vcmUgZG1hIGJ1ZmZlciBpbml0aWFsaXphdGlvbnMsIHBhdGNoIGZyb20KLSAqICAgICAgICAgICAgICAgICAgICAgICBUamVlcmQgTXVsZGVyIDx0amVlcmQubXVsZGVyQGZ1aml0c3Utc2llbWVucy5jb20+Ci0gKiAgICAwNS4wMS4yMDAxICAgMC4yOSAgSG9wZWZ1bGx5IHVwZGF0ZXMgd2lsbCBub3QgYmUgcmVxdWlyZWQgYW55bW9yZSB3aGVuIENyZWF0aXZlIGJ1bXBzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgdGhlIENUNTg4MCByZXZpc2lvbi4KLSAqICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0ZWQgYnkgU3RlcGhhbiBNw7xsbGVyIDxzbXVlbGxlckBjaHJvbm94LmRlPgotICogICAgMzEuMDEuMjAwMSAgIDAuMzAgIFJlZ2lzdGVyL1VucmVnaXN0ZXIgZ2FtZXBvcnQKLSAqICAgICAgICAgICAgICAgICAgICAgICBGaXggU0VUVFJJR0dFUiBub24gT1NTIEFQSSBjb25mb3JtaXR5Ci0gKiAgICAxNC4wNy4yMDAxICAgMC4zMSAgQWRkIGxpc3Qgb2YgbGFwdG9wcyBuZWVkaW5nIGFtcGxpZmllciBjb250cm9sCi0gKiAgICAwMy4wMS4yMDAzICAgMC4zMiAgb3Blbl9tb2RlIGZpeGVzIGZyb20gR2VvcmcgQWNoZXIgPGFjaGVyQGluLnR1bS5kZT4KLSAqLwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0gICAgICAKLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc291bmRjYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2FjOTdfY29kZWMuaD4KLSNpbmNsdWRlIDxsaW51eC9nYW1lcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2lmIGRlZmluZWQoQ09ORklHX0dBTUVQT1JUKSB8fCAoZGVmaW5lZChNT0RVTEUpICYmIGRlZmluZWQoQ09ORklHX0dBTUVQT1JUX01PRFVMRSkpCi0jZGVmaW5lIFNVUFBPUlRfSk9ZU1RJQ0sKLSNlbmRpZgotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotI3VuZGVmIE9TU19ET0NVTUVOVEVEX01JWEVSX1NFTUFOVElDUwotI2RlZmluZSBFUzEzNzFfREVCVUcKLSNkZWZpbmUgREJHKHgpIHt9Ci0vKiNkZWZpbmUgREJHKHgpIHt4fSovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfRU5TT05JUQotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VOU09OSVEgICAgICAgIDB4MTI3NCAgICAKLSNlbmRpZgotCi0jaWZuZGVmIFBDSV9WRU5ET1JfSURfRUNUSVZBCi0jZGVmaW5lIFBDSV9WRU5ET1JfSURfRUNUSVZBICAgICAgICAgMHgxMTAyCi0jZW5kaWYKLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VOU09OSVFfRVMxMzcxCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9FUzEzNzEgMHgxMzcxCi0jZW5kaWYKLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VOU09OSVFfQ1Q1ODgwCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9DVDU4ODAgMHg1ODgwCi0jZW5kaWYKLQotI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0VDVElWQV9FVjE5MzgKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9FQ1RJVkFfRVYxOTM4IDB4ODkzOAotI2VuZGlmCi0KLS8qIEVTMTM3MSBjaGlwIElEICovCi0vKiBUaGlzIGlzIGEgbGl0dGxlIGNvbmZ1c2luZyBiZWNhdXNlIGFsbCBFUzEzNzEgY29tcGF0aWJsZSBjaGlwcyBoYXZlIHRoZQotICAgc2FtZSBERVZJQ0VfSUQsIHRoZSBvbmx5IHRoaW5nIGRpZmZlcmVudGlhdGluZyB0aGVtIGlzIHRoZSBSRVZfSUQgZmllbGQuCi0gICBUaGlzIGlzIG9ubHkgc2lnbmlmaWNhbnQgaWYgeW91IHdhbnQgdG8gZW5hYmxlIGZlYXR1cmVzIG9uIHRoZSBsYXRlciBwYXJ0cy4KLSAgIFllcywgSSBrbm93IGl0J3Mgc3R1cGlkIGFuZCB3aHkgZGlkbid0IHdlIHVzZSB0aGUgc3ViIElEcz8KLSovCi0jZGVmaW5lIEVTMTM3MVJFVl9FUzEzNzNfQSAgMHgwNAotI2RlZmluZSBFUzEzNzFSRVZfRVMxMzczX0IgIDB4MDYKLSNkZWZpbmUgRVMxMzcxUkVWX0NUNTg4MF9BICAweDA3Ci0jZGVmaW5lIENUNTg4MFJFVl9DVDU4ODBfQyAgMHgwMgotI2RlZmluZSBDVDU4ODBSRVZfQ1Q1ODgwX0QgIDB4MDMKLSNkZWZpbmUgRVMxMzcxUkVWX0VTMTM3MV9CICAweDA5Ci0jZGVmaW5lIEVWMTkzOFJFVl9FVjE5MzhfQSAgMHgwMAotI2RlZmluZSBFUzEzNzFSRVZfRVMxMzczXzggIDB4MDgKLQotI2RlZmluZSBFUzEzNzFfTUFHSUMgICgoUENJX1ZFTkRPUl9JRF9FTlNPTklRPDwxNil8UENJX0RFVklDRV9JRF9FTlNPTklRX0VTMTM3MSkKLQotI2RlZmluZSBFUzEzNzFfRVhURU5UICAgICAgICAgICAgIDB4NDAKLSNkZWZpbmUgSk9ZX0VYVEVOVCAgICAgICAgICAgICAgICA4Ci0KLSNkZWZpbmUgRVMxMzcxX1JFR19DT05UUk9MICAgICAgICAweDAwCi0jZGVmaW5lIEVTMTM3MV9SRUdfU1RBVFVTICAgICAgICAgMHgwNCAvKiBvbiB0aGUgNTg4MCBpdCBpcyBjb250cm9sL3N0YXR1cyAqLwotI2RlZmluZSBFUzEzNzFfUkVHX1VBUlRfREFUQSAgICAgIDB4MDgKLSNkZWZpbmUgRVMxMzcxX1JFR19VQVJUX1NUQVRVUyAgICAweDA5Ci0jZGVmaW5lIEVTMTM3MV9SRUdfVUFSVF9DT05UUk9MICAgMHgwOQotI2RlZmluZSBFUzEzNzFfUkVHX1VBUlRfVEVTVCAgICAgIDB4MGEKLSNkZWZpbmUgRVMxMzcxX1JFR19NRU1QQUdFICAgICAgICAweDBjCi0jZGVmaW5lIEVTMTM3MV9SRUdfU1JDT05WICAgICAgICAgMHgxMAotI2RlZmluZSBFUzEzNzFfUkVHX0NPREVDICAgICAgICAgIDB4MTQKLSNkZWZpbmUgRVMxMzcxX1JFR19MRUdBQ1kgICAgICAgICAweDE4Ci0jZGVmaW5lIEVTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wgMHgyMAotI2RlZmluZSBFUzEzNzFfUkVHX0RBQzFfU0NPVU5UICAgIDB4MjQKLSNkZWZpbmUgRVMxMzcxX1JFR19EQUMyX1NDT1VOVCAgICAweDI4Ci0jZGVmaW5lIEVTMTM3MV9SRUdfQURDX1NDT1VOVCAgICAgMHgyYwotCi0jZGVmaW5lIEVTMTM3MV9SRUdfREFDMV9GUkFNRUFEUiAgMHhjMzAKLSNkZWZpbmUgRVMxMzcxX1JFR19EQUMxX0ZSQU1FQ05UICAweGMzNAotI2RlZmluZSBFUzEzNzFfUkVHX0RBQzJfRlJBTUVBRFIgIDB4YzM4Ci0jZGVmaW5lIEVTMTM3MV9SRUdfREFDMl9GUkFNRUNOVCAgMHhjM2MKLSNkZWZpbmUgRVMxMzcxX1JFR19BRENfRlJBTUVBRFIgICAweGQzMAotI2RlZmluZSBFUzEzNzFfUkVHX0FEQ19GUkFNRUNOVCAgIDB4ZDM0Ci0KLSNkZWZpbmUgRVMxMzcxX0ZNVF9VOF9NT05PICAgICAwCi0jZGVmaW5lIEVTMTM3MV9GTVRfVThfU1RFUkVPICAgMQotI2RlZmluZSBFUzEzNzFfRk1UX1MxNl9NT05PICAgIDIKLSNkZWZpbmUgRVMxMzcxX0ZNVF9TMTZfU1RFUkVPICAzCi0jZGVmaW5lIEVTMTM3MV9GTVRfU1RFUkVPICAgICAgMQotI2RlZmluZSBFUzEzNzFfRk1UX1MxNiAgICAgICAgIDIKLSNkZWZpbmUgRVMxMzcxX0ZNVF9NQVNLICAgICAgICAzCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzYW1wbGVfc2l6ZVtdID0geyAxLCAyLCAyLCA0IH07Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2FtcGxlX3NoaWZ0W10gPSB7IDAsIDEsIDEsIDIgfTsKLQotI2RlZmluZSBDVFJMX1JFQ0VOX0IgICAgMHgwODAwMDAwMCAgLyogMSA9IGRvbid0IG1peCBhbmFsb2cgaW4gdG8gZGlnaXRhbCBvdXQgKi8KLSNkZWZpbmUgQ1RSTF9TUERJRkVOX0IgIDB4MDQwMDAwMDAKLSNkZWZpbmUgQ1RSTF9KT1lfU0hJRlQgIDI0Ci0jZGVmaW5lIENUUkxfSk9ZX01BU0sgICAzCi0jZGVmaW5lIENUUkxfSk9ZXzIwMCAgICAweDAwMDAwMDAwICAvKiBqb3lzdGljayBiYXNlIGFkZHJlc3MgKi8KLSNkZWZpbmUgQ1RSTF9KT1lfMjA4ICAgIDB4MDEwMDAwMDAKLSNkZWZpbmUgQ1RSTF9KT1lfMjEwICAgIDB4MDIwMDAwMDAKLSNkZWZpbmUgQ1RSTF9KT1lfMjE4ICAgIDB4MDMwMDAwMDAKLSNkZWZpbmUgQ1RSTF9HUElPX0lOMCAgIDB4MDAxMDAwMDAgIC8qIGdlbmVyYWwgcHVycG9zZSBpbnB1dHMvb3V0cHV0cyAqLwotI2RlZmluZSBDVFJMX0dQSU9fSU4xICAgMHgwMDIwMDAwMAotI2RlZmluZSBDVFJMX0dQSU9fSU4yICAgMHgwMDQwMDAwMAotI2RlZmluZSBDVFJMX0dQSU9fSU4zICAgMHgwMDgwMDAwMAotI2RlZmluZSBDVFJMX0dQSU9fT1VUMCAgMHgwMDAxMDAwMAotI2RlZmluZSBDVFJMX0dQSU9fT1VUMSAgMHgwMDAyMDAwMAotI2RlZmluZSBDVFJMX0dQSU9fT1VUMiAgMHgwMDA0MDAwMAotI2RlZmluZSBDVFJMX0dQSU9fT1VUMyAgMHgwMDA4MDAwMAotI2RlZmluZSBDVFJMX01TRk1UU0VMICAgMHgwMDAwODAwMCAgLyogTVBFRyBzZXJpYWwgZGF0YSBmbXQ6IDAgPSBTb255LCAxID0gSTJTICovCi0jZGVmaW5lIENUUkxfU1lOQ1JFUyAgICAweDAwMDA0MDAwICAvKiBBQzk3IHdhcm0gcmVzZXQgKi8KLSNkZWZpbmUgQ1RSTF9BRENTVE9QICAgIDB4MDAwMDIwMDAgIC8qIHN0b3AgQURDIHRyYW5zZmVycyAqLwotI2RlZmluZSBDVFJMX1BXUl9JTlRSTSAgMHgwMDAwMTAwMCAgLyogMSA9IHBvd2VyIGxldmVsIGludHMgZW5hYmxlZCAqLwotI2RlZmluZSBDVFJMX01fQ0IgICAgICAgMHgwMDAwMDgwMCAgLyogcmVjb3JkaW5nIHNvdXJjZTogMCA9IEFEQywgMSA9IE1QRUcgKi8KLSNkZWZpbmUgQ1RSTF9DQ0JfSU5UUk0gIDB4MDAwMDA0MDAgIC8qIDEgPSBDQ0IgInZvaWNlIiBpbnRzIGVuYWJsZWQgKi8KLSNkZWZpbmUgQ1RSTF9QRExFVjAgICAgIDB4MDAwMDAwMDAgIC8qIHBvd2VyIGRvd24gbGV2ZWwgKi8KLSNkZWZpbmUgQ1RSTF9QRExFVjEgICAgIDB4MDAwMDAxMDAKLSNkZWZpbmUgQ1RSTF9QRExFVjIgICAgIDB4MDAwMDAyMDAKLSNkZWZpbmUgQ1RSTF9QRExFVjMgICAgIDB4MDAwMDAzMDAKLSNkZWZpbmUgQ1RSTF9CUkVRICAgICAgIDB4MDAwMDAwODAgIC8qIDEgPSB0ZXN0IG1vZGUgKGludGVybmFsIG1lbSB0ZXN0KSAqLwotI2RlZmluZSBDVFJMX0RBQzFfRU4gICAgMHgwMDAwMDA0MCAgLyogZW5hYmxlIERBQzEgKi8KLSNkZWZpbmUgQ1RSTF9EQUMyX0VOICAgIDB4MDAwMDAwMjAgIC8qIGVuYWJsZSBEQUMyICovCi0jZGVmaW5lIENUUkxfQURDX0VOICAgICAweDAwMDAwMDEwICAvKiBlbmFibGUgQURDICovCi0jZGVmaW5lIENUUkxfVUFSVF9FTiAgICAweDAwMDAwMDA4ICAvKiBlbmFibGUgTUlESSB1YXJ0ICovCi0jZGVmaW5lIENUUkxfSllTVEtfRU4gICAweDAwMDAwMDA0ICAvKiBlbmFibGUgSm95c3RpY2sgcG9ydCAqLwotI2RlZmluZSBDVFJMX1hUQUxDTEtESVMgMHgwMDAwMDAwMiAgLyogMSA9IGRpc2FibGUgY3J5c3RhbCBjbG9jayBpbnB1dCAqLwotI2RlZmluZSBDVFJMX1BDSUNMS0RJUyAgMHgwMDAwMDAwMSAgLyogMSA9IGRpc2FibGUgUENJIGNsb2NrIGRpc3RyaWJ1dGlvbiAqLwotCi0KLSNkZWZpbmUgU1RBVF9JTlRSICAgICAgIDB4ODAwMDAwMDAgIC8qIHdpcmVkIG9yIG9mIGFsbCBpbnRlcnJ1cHQgYml0cyAqLwotI2RlZmluZSBDU1RBVF81ODgwX0FDOTdfUlNUIDB4MjAwMDAwMDAgLyogQ1Q1ODgwIFJlc2V0IGJpdCAqLwotI2RlZmluZSBTVEFUX0VOX1NQRElGICAgMHgwMDA0MDAwMCAgLyogZW5hYmxlIFMvUERJRiBjaXJjdWl0cnkgKi8KLSNkZWZpbmUgU1RBVF9UU19TUERJRiAgIDB4MDAwMjAwMDAgIC8qIHRlc3QgUy9QRElGIGNpcmN1aXRyeSAqLwotI2RlZmluZSBTVEFUX1RFU1RNT0RFICAgMHgwMDAxMDAwMCAgLyogdGVzdCBBU0lDICovCi0jZGVmaW5lIFNUQVRfU1lOQ19FUlIgICAweDAwMDAwMTAwICAvKiAxID0gY29kZWMgc3luYyBlcnJvciAqLwotI2RlZmluZSBTVEFUX1ZDICAgICAgICAgMHgwMDAwMDBjMCAgLyogQ0NCIGludCBzb3VyY2UsIDA9REFDMSwgMT1EQUMyLCAyPUFEQywgMz11bmRlZiAqLwotI2RlZmluZSBTVEFUX1NIX1ZDICAgICAgNgotI2RlZmluZSBTVEFUX01QV1IgICAgICAgMHgwMDAwMDAyMCAgLyogcG93ZXIgbGV2ZWwgaW50ZXJydXB0ICovCi0jZGVmaW5lIFNUQVRfTUNDQiAgICAgICAweDAwMDAwMDEwICAvKiBDQ0IgaW50IHBlbmRpbmcgKi8KLSNkZWZpbmUgU1RBVF9VQVJUICAgICAgIDB4MDAwMDAwMDggIC8qIFVBUlQgaW50IHBlbmRpbmcgKi8KLSNkZWZpbmUgU1RBVF9EQUMxICAgICAgIDB4MDAwMDAwMDQgIC8qIERBQzEgaW50IHBlbmRpbmcgKi8KLSNkZWZpbmUgU1RBVF9EQUMyICAgICAgIDB4MDAwMDAwMDIgIC8qIERBQzIgaW50IHBlbmRpbmcgKi8KLSNkZWZpbmUgU1RBVF9BREMgICAgICAgIDB4MDAwMDAwMDEgIC8qIEFEQyBpbnQgcGVuZGluZyAqLwotCi0jZGVmaW5lIFVTVEFUX1JYSU5UICAgICAweDgwICAgICAgICAvKiBVQVJUIHJ4IGludCBwZW5kaW5nICovCi0jZGVmaW5lIFVTVEFUX1RYSU5UICAgICAweDA0ICAgICAgICAvKiBVQVJUIHR4IGludCBwZW5kaW5nICovCi0jZGVmaW5lIFVTVEFUX1RYUkRZICAgICAweDAyICAgICAgICAvKiBVQVJUIHR4IHJlYWR5ICovCi0jZGVmaW5lIFVTVEFUX1JYUkRZICAgICAweDAxICAgICAgICAvKiBVQVJUIHJ4IHJlYWR5ICovCi0KLSNkZWZpbmUgVUNUUkxfUlhJTlRFTiAgIDB4ODAgICAgICAgIC8qIDEgPSBlbmFibGUgUlggaW50cyAqLwotI2RlZmluZSBVQ1RSTF9UWElOVEVOICAgMHg2MCAgICAgICAgLyogVFggaW50IGVuYWJsZSBmaWVsZCBtYXNrICovCi0jZGVmaW5lIFVDVFJMX0VOQV9UWElOVCAweDIwICAgICAgICAvKiBlbmFibGUgVFggaW50ICovCi0jZGVmaW5lIFVDVFJMX0NOVFJMICAgICAweDAzICAgICAgICAvKiBjb250cm9sIGZpZWxkICovCi0jZGVmaW5lIFVDVFJMX0NOVFJMX1NXUiAweDAzICAgICAgICAvKiBzb2Z0d2FyZSByZXNldCBjb21tYW5kICovCi0KLS8qIHNhbXBsZSByYXRlIGNvbnZlcnRlciAqLwotI2RlZmluZSBTUkNfT0tTVEFURSAgICAgICAgMQotCi0jZGVmaW5lIFNSQ19SQU1BRERSX01BU0sgICAweGZlMDAwMDAwCi0jZGVmaW5lIFNSQ19SQU1BRERSX1NISUZUICAyNQotI2RlZmluZSBTUkNfREFDMUZSRUVaRSAgICAgKDFVTCA8PCAyMSkKLSNkZWZpbmUgU1JDX0RBQzJGUkVFWkUgICAgICAoMVVMIDw8IDIwKQotI2RlZmluZSBTUkNfQURDRlJFRVpFICAgICAgKDFVTCA8PCAxOSkKLQotCi0jZGVmaW5lIFNSQ19XRSAgICAgICAgICAgICAweDAxMDAwMDAwICAvKiByZWFkL3dyaXRlIGNvbnRyb2wgZm9yIFNSQyBSQU0gKi8KLSNkZWZpbmUgU1JDX0JVU1kgICAgICAgICAgIDB4MDA4MDAwMDAgIC8qIFNSQyBidXN5ICovCi0jZGVmaW5lIFNSQ19ESVMgICAgICAgICAgICAweDAwNDAwMDAwICAvKiAxID0gZGlzYWJsZSBTUkMgKi8KLSNkZWZpbmUgU1JDX0REQUMxICAgICAgICAgIDB4MDAyMDAwMDAgIC8qIDEgPSBkaXNhYmxlIGFjY3VtIHVwZGF0ZSBmb3IgREFDMSAqLwotI2RlZmluZSBTUkNfRERBQzIgICAgICAgICAgMHgwMDEwMDAwMCAgLyogMSA9IGRpc2FibGUgYWNjdW0gdXBkYXRlIGZvciBEQUMyICovCi0jZGVmaW5lIFNSQ19EQURDICAgICAgICAgICAweDAwMDgwMDAwICAvKiAxID0gZGlzYWJsZSBhY2N1bSB1cGRhdGUgZm9yIEFEQzIgKi8KLSNkZWZpbmUgU1JDX0NUTE1BU0sgICAgICAgIDB4MDA3ODAwMDAKLSNkZWZpbmUgU1JDX1JBTURBVEFfTUFTSyAgIDB4MDAwMGZmZmYKLSNkZWZpbmUgU1JDX1JBTURBVEFfU0hJRlQgIDAKLQotI2RlZmluZSBTUkNSRUdfQURDICAgICAgMHg3OAotI2RlZmluZSBTUkNSRUdfREFDMSAgICAgMHg3MAotI2RlZmluZSBTUkNSRUdfREFDMiAgICAgMHg3NAotI2RlZmluZSBTUkNSRUdfVk9MX0FEQyAgMHg2YwotI2RlZmluZSBTUkNSRUdfVk9MX0RBQzEgMHg3YwotI2RlZmluZSBTUkNSRUdfVk9MX0RBQzIgMHg3ZQotCi0jZGVmaW5lIFNSQ1JFR19UUlVOQ19OICAgICAweDAwCi0jZGVmaW5lIFNSQ1JFR19JTlRfUkVHUyAgICAweDAxCi0jZGVmaW5lIFNSQ1JFR19BQ0NVTV9GUkFDICAweDAyCi0jZGVmaW5lIFNSQ1JFR19WRlJFUV9GUkFDICAweDAzCi0KLSNkZWZpbmUgQ09ERUNfUElSRCAgICAgICAgMHgwMDgwMDAwMCAgLyogMCA9IHdyaXRlIEFDOTcgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgQ09ERUNfUElBRERfTUFTSyAgMHgwMDdmMDAwMAotI2RlZmluZSBDT0RFQ19QSUFERF9TSElGVCAxNgotI2RlZmluZSBDT0RFQ19QSURBVF9NQVNLICAweDAwMDBmZmZmCi0jZGVmaW5lIENPREVDX1BJREFUX1NISUZUIDAKLQotI2RlZmluZSBDT0RFQ19SRFkgICAgICAgICAweDgwMDAwMDAwICAvKiBBQzk3IHJlYWQgZGF0YSB2YWxpZCAqLwotI2RlZmluZSBDT0RFQ19XSVAgICAgICAgICAweDQwMDAwMDAwICAvKiBBQzk3IHdyaXRlIGluIHByb2dyZXNzICovCi0jZGVmaW5lIENPREVDX1BPUkQgICAgICAgIDB4MDA4MDAwMDAgIC8qIDAgPSB3cml0ZSBBQzk3IHJlZ2lzdGVyICovCi0jZGVmaW5lIENPREVDX1BPQUREX01BU0sgIDB4MDA3ZjAwMDAKLSNkZWZpbmUgQ09ERUNfUE9BRERfU0hJRlQgMTYKLSNkZWZpbmUgQ09ERUNfUE9EQVRfTUFTSyAgMHgwMDAwZmZmZgotI2RlZmluZSBDT0RFQ19QT0RBVF9TSElGVCAwCi0KLQotI2RlZmluZSBMRUdBQ1lfSkZBU1QgICAgICAweDgwMDAwMDAwICAvKiBmYXN0IGpveXN0aWNrIHRpbWluZyAqLwotI2RlZmluZSBMRUdBQ1lfRklSUSAgICAgICAweDAxMDAwMDAwICAvKiBmb3JjZSBJUlEgKi8KLQotI2RlZmluZSBTQ1RSTF9EQUNURVNUICAgICAweDAwNDAwMDAwICAvKiAxID0gREFDIHRlc3QsIHRlc3QgdmVjdG9yIGdlbmVyYXRpb24gcHVycG9zZXMgKi8KLSNkZWZpbmUgU0NUUkxfUDJFTkRJTkMgICAgMHgwMDM4MDAwMCAgLyogICovCi0jZGVmaW5lIFNDVFJMX1NIX1AyRU5ESU5DIDE5Ci0jZGVmaW5lIFNDVFJMX1AyU1RJTkMgICAgIDB4MDAwNzAwMDAgIC8qICAqLwotI2RlZmluZSBTQ1RSTF9TSF9QMlNUSU5DICAxNgotI2RlZmluZSBTQ1RSTF9SMUxPT1BTRUwgICAweDAwMDA4MDAwICAvKiAwID0gbG9vcCBtb2RlICovCi0jZGVmaW5lIFNDVFJMX1AyTE9PUFNFTCAgIDB4MDAwMDQwMDAgIC8qIDAgPSBsb29wIG1vZGUgKi8KLSNkZWZpbmUgU0NUUkxfUDFMT09QU0VMICAgMHgwMDAwMjAwMCAgLyogMCA9IGxvb3AgbW9kZSAqLwotI2RlZmluZSBTQ1RSTF9QMlBBVVNFICAgICAweDAwMDAxMDAwICAvKiAxID0gcGF1c2UgbW9kZSAqLwotI2RlZmluZSBTQ1RSTF9QMVBBVVNFICAgICAweDAwMDAwODAwICAvKiAxID0gcGF1c2UgbW9kZSAqLwotI2RlZmluZSBTQ1RSTF9SMUlOVEVOICAgICAweDAwMDAwNDAwICAvKiBlbmFibGUgaW50ZXJydXB0ICovCi0jZGVmaW5lIFNDVFJMX1AySU5URU4gICAgIDB4MDAwMDAyMDAgIC8qIGVuYWJsZSBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgU0NUUkxfUDFJTlRFTiAgICAgMHgwMDAwMDEwMCAgLyogZW5hYmxlIGludGVycnVwdCAqLwotI2RlZmluZSBTQ1RSTF9QMVNDVFJMRCAgICAweDAwMDAwMDgwICAvKiByZWxvYWQgc2FtcGxlIGNvdW50IHJlZ2lzdGVyIGZvciBEQUMxICovCi0jZGVmaW5lIFNDVFJMX1AyREFDU0VOICAgIDB4MDAwMDAwNDAgIC8qIDEgPSBEQUMyIHBsYXkgYmFjayBsYXN0IHNhbXBsZSB3aGVuIGRpc2FibGVkICovCi0jZGVmaW5lIFNDVFJMX1IxU0VCICAgICAgIDB4MDAwMDAwMjAgIC8qIDEgPSAxNmJpdCAqLwotI2RlZmluZSBTQ1RSTF9SMVNNQiAgICAgICAweDAwMDAwMDEwICAvKiAxID0gc3RlcmVvICovCi0jZGVmaW5lIFNDVFJMX1IxRk1UICAgICAgIDB4MDAwMDAwMzAgIC8qIGZvcm1hdCBtYXNrICovCi0jZGVmaW5lIFNDVFJMX1NIX1IxRk1UICAgIDQKLSNkZWZpbmUgU0NUUkxfUDJTRUIgICAgICAgMHgwMDAwMDAwOCAgLyogMSA9IDE2Yml0ICovCi0jZGVmaW5lIFNDVFJMX1AyU01CICAgICAgIDB4MDAwMDAwMDQgIC8qIDEgPSBzdGVyZW8gKi8KLSNkZWZpbmUgU0NUUkxfUDJGTVQgICAgICAgMHgwMDAwMDAwYyAgLyogZm9ybWF0IG1hc2sgKi8KLSNkZWZpbmUgU0NUUkxfU0hfUDJGTVQgICAgMgotI2RlZmluZSBTQ1RSTF9QMVNFQiAgICAgICAweDAwMDAwMDAyICAvKiAxID0gMTZiaXQgKi8KLSNkZWZpbmUgU0NUUkxfUDFTTUIgICAgICAgMHgwMDAwMDAwMSAgLyogMSA9IHN0ZXJlbyAqLwotI2RlZmluZSBTQ1RSTF9QMUZNVCAgICAgICAweDAwMDAwMDAzICAvKiBmb3JtYXQgbWFzayAqLwotI2RlZmluZSBTQ1RSTF9TSF9QMUZNVCAgICAwCi0KLQotLyogbWlzYyBzdHVmZiAqLwotI2RlZmluZSBQT0xMX0NPVU5UICAgMHgxMDAwCi0jZGVmaW5lIEZNT0RFX0RBQyAgICAgICAgIDQgICAgICAgICAgIC8qIHNsaWdodCBtaXN1c2Ugb2YgbW9kZV90ICovCi0KLS8qIE1JREkgYnVmZmVyIHNpemVzICovCi0KLSNkZWZpbmUgTUlESUlOQlVGICAyNTYKLSNkZWZpbmUgTUlESU9VVEJVRiAyNTYKLQotI2RlZmluZSBGTU9ERV9NSURJX1NISUZUIDMKLSNkZWZpbmUgRk1PREVfTUlESV9SRUFEICAoRk1PREVfUkVBRCA8PCBGTU9ERV9NSURJX1NISUZUKQotI2RlZmluZSBGTU9ERV9NSURJX1dSSVRFIChGTU9ERV9XUklURSA8PCBGTU9ERV9NSURJX1NISUZUKQotCi0jZGVmaW5lIEVTMTM3MV9NT0RVTEVfTkFNRSAiZXMxMzcxIgotI2RlZmluZSBQRlggRVMxMzcxX01PRFVMRV9OQU1FICI6ICIKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0cnVjdCBlczEzNzFfc3RhdGUgewotCS8qIG1hZ2ljICovCi0JdW5zaWduZWQgaW50IG1hZ2ljOwotCi0JLyogbGlzdCBvZiBlczEzNzEgZGV2aWNlcyAqLwotCXN0cnVjdCBsaXN0X2hlYWQgZGV2czsKLQotCS8qIHRoZSBjb3JyZXNwb25kaW5nIHBjaV9kZXYgc3RydWN0dXJlICovCi0Jc3RydWN0IHBjaV9kZXYgKmRldjsKLQotCS8qIHNvdW5kY29yZSBzdHVmZiAqLwotCWludCBkZXZfYXVkaW87Ci0JaW50IGRldl9kYWM7Ci0JaW50IGRldl9taWRpOwotCQotCS8qIGhhcmR3YXJlIHJlc291cmNlcyAqLwotCXVuc2lnbmVkIGxvbmcgaW87IC8qIGxvbmcgZm9yIFNQQVJDICovCi0JdW5zaWduZWQgaW50IGlycTsKLQotCS8qIFBDSSBJRCdzICovCi0JdTE2IHZlbmRvcjsKLQl1MTYgZGV2aWNlOwotICAgICAgICB1OCByZXY7IC8qIHRoZSBjaGlwIHJldmlzaW9uICovCi0KLQkvKiBvcHRpb25zICovCi0JaW50IHNwZGlmX3ZvbHVtZTsgLyogUy9QRElGIG91dHB1dCBpcyBlbmFibGVkIGlmICE9IC0xICovCi0KLSNpZmRlZiBFUzEzNzFfREVCVUcKLSAgICAgICAgLyogZGVidWcgL3Byb2MgZW50cnkgKi8KLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBzOwotI2VuZGlmIC8qIEVTMTM3MV9ERUJVRyAqLwotCi0Jc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjOwotCi0JLyogd2F2ZSBzdHVmZiAqLwotCXVuc2lnbmVkIGN0cmw7Ci0JdW5zaWduZWQgc2N0cmw7Ci0JdW5zaWduZWQgZGFjMXJhdGUsIGRhYzJyYXRlLCBhZGNyYXRlOwotCi0Jc3BpbmxvY2tfdCBsb2NrOwotCXN0cnVjdCBtdXRleCBvcGVuX211dGV4OwotCW1vZGVfdCBvcGVuX21vZGU7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgb3Blbl93YWl0OwotCi0Jc3RydWN0IGRtYWJ1ZiB7Ci0JCXZvaWQgKnJhd2J1ZjsKLQkJZG1hX2FkZHJfdCBkbWFhZGRyOwotCQl1bnNpZ25lZCBidWZvcmRlcjsKLQkJdW5zaWduZWQgbnVtZnJhZzsKLQkJdW5zaWduZWQgZnJhZ3NoaWZ0OwotCQl1bnNpZ25lZCBod3B0ciwgc3dwdHI7Ci0JCXVuc2lnbmVkIHRvdGFsX2J5dGVzOwotCQlpbnQgY291bnQ7Ci0JCXVuc2lnbmVkIGVycm9yOyAvKiBvdmVyL3VuZGVycnVuICovCi0JCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Ci0JCS8qIHJlZHVuZGFudCwgYnV0IG1ha2VzIGNhbGN1bGF0aW9ucyBlYXNpZXIgKi8KLQkJdW5zaWduZWQgZnJhZ3NpemU7Ci0JCXVuc2lnbmVkIGRtYXNpemU7Ci0JCXVuc2lnbmVkIGZyYWdzYW1wbGVzOwotCQkvKiBPU1Mgc3R1ZmYgKi8KLQkJdW5zaWduZWQgbWFwcGVkOjE7Ci0JCXVuc2lnbmVkIHJlYWR5OjE7Ci0JCXVuc2lnbmVkIGVuZGNsZWFyZWQ6MTsKLQkJdW5zaWduZWQgZW5hYmxlZDoxOwotCQl1bnNpZ25lZCBvc3NmcmFnc2hpZnQ7Ci0JCWludCBvc3NtYXhmcmFnczsKLQkJdW5zaWduZWQgc3ViZGl2aXNpb247Ci0JfSBkbWFfZGFjMSwgZG1hX2RhYzIsIGRtYV9hZGM7Ci0KLQkvKiBtaWRpIHN0dWZmICovCi0Jc3RydWN0IHsKLQkJdW5zaWduZWQgaXJkLCBpd3IsIGljbnQ7Ci0JCXVuc2lnbmVkIG9yZCwgb3dyLCBvY250OwotCQl3YWl0X3F1ZXVlX2hlYWRfdCBpd2FpdDsKLQkJd2FpdF9xdWV1ZV9oZWFkX3Qgb3dhaXQ7Ci0JCXVuc2lnbmVkIGNoYXIgaWJ1ZltNSURJSU5CVUZdOwotCQl1bnNpZ25lZCBjaGFyIG9idWZbTUlESU9VVEJVRl07Ci0JfSBtaWRpOwotCi0jaWZkZWYgU1VQUE9SVF9KT1lTVElDSwotCXN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQ7Ci0jZW5kaWYKLQotCXN0cnVjdCBtdXRleCBzZW07Ci19OwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIExJU1RfSEVBRChkZXZzKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbGQyKHVuc2lnbmVkIGludCB4KQotewotCXVuc2lnbmVkIHIgPSAwOwotCQotCWlmICh4ID49IDB4MTAwMDApIHsKLQkJeCA+Pj0gMTY7Ci0JCXIgKz0gMTY7Ci0JfQotCWlmICh4ID49IDB4MTAwKSB7Ci0JCXggPj49IDg7Ci0JCXIgKz0gODsKLQl9Ci0JaWYgKHggPj0gMHgxMCkgewotCQl4ID4+PSA0OwotCQlyICs9IDQ7Ci0JfQotCWlmICh4ID49IDQpIHsKLQkJeCA+Pj0gMjsKLQkJciArPSAyOwotCX0KLQlpZiAoeCA+PSAyKQotCQlyKys7Ci0JcmV0dXJuIHI7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgd2FpdF9zcmNfcmVhZHkoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcykKLXsKLQl1bnNpZ25lZCBpbnQgdCwgcjsKLQotCWZvciAodCA9IDA7IHQgPCBQT0xMX0NPVU5UOyB0KyspIHsKLQkJaWYgKCEoKHIgPSBpbmwocy0+aW8gKyBFUzEzNzFfUkVHX1NSQ09OVikpICYgU1JDX0JVU1kpKQotCQkJcmV0dXJuIHI7Ci0JCXVkZWxheSgxKTsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgUEZYICJzYW1wbGUgcmF0ZSBjb252ZXJ0ZXIgdGltZW91dCByID0gMHglMDh4XG4iLCByKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIHNyY19yZWFkKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMsIHVuc2lnbmVkIHJlZykKLXsKLSAgICAgICAgdW5zaWduZWQgaW50IHRlbXAsaSxvcmlnOwotCi0gICAgICAgIC8qIHdhaXQgZm9yIHJlYWR5ICovCi0gICAgICAgIHRlbXAgPSB3YWl0X3NyY19yZWFkeSAocyk7Ci0KLSAgICAgICAgLyogd2UgY2FuIG9ubHkgYWNjZXNzIHRoZSBTUkMgYXQgY2VydGFpbiB0aW1lcywgbWFrZSBzdXJlCi0gICAgICAgICAgIHdlJ3JlIGFsbG93ZWQgdG8gYmVmb3JlIHdlIHJlYWQgKi8KLSAgICAgICAgICAgCi0gICAgICAgIG9yaWcgPSB0ZW1wOwotICAgICAgICAvKiBleHBvc2UgdGhlIFNSQyBzdGF0ZSBiaXRzICovCi0gICAgICAgIG91dGwgKCAodGVtcCAmIFNSQ19DVExNQVNLKSB8IChyZWcgPDwgU1JDX1JBTUFERFJfU0hJRlQpIHwgMHgxMDAwMFVMLAotICAgICAgICAgICAgICAgcy0+aW8gKyBFUzEzNzFfUkVHX1NSQ09OVik7Ci0KLSAgICAgICAgLyogbm93LCB3YWl0IGZvciBidXN5IGFuZCB0aGUgY29ycmVjdCB0aW1lIHRvIHJlYWQgKi8KLSAgICAgICAgdGVtcCA9IHdhaXRfc3JjX3JlYWR5IChzKTsKLQotICAgICAgICBpZiAoICh0ZW1wICYgMHgwMDg3MDAwMFVMICkgIT0gKCBTUkNfT0tTVEFURSA8PCAxNiApKXsKLSAgICAgICAgICAgICAgICAvKiB3YWl0IGZvciB0aGUgcmlnaHQgc3RhdGUgKi8KLSAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaTxQT0xMX0NPVU5UOyBpKyspewotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGlubCAocy0+aW8gKyBFUzEzNzFfUkVHX1NSQ09OVik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoICh0ZW1wICYgMHgwMDg3MDAwMFVMICkgPT0gKCBTUkNfT0tTVEFURSA8PCAxNiApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBoaWRlIHRoZSBzdGF0ZSBiaXRzICovCi0gICAgICAgIG91dGwgKChvcmlnICYgU1JDX0NUTE1BU0spIHwgKHJlZyA8PCBTUkNfUkFNQUREUl9TSElGVCksIHMtPmlvICsgRVMxMzcxX1JFR19TUkNPTlYpOwotICAgICAgICByZXR1cm4gdGVtcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIAotfQotCi1zdGF0aWMgdm9pZCBzcmNfd3JpdGUoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcywgdW5zaWduZWQgcmVnLCB1bnNpZ25lZCBkYXRhKQotewotICAgICAgCi0JdW5zaWduZWQgaW50IHI7Ci0KLQlyID0gd2FpdF9zcmNfcmVhZHkocykgJiAoU1JDX0RJUyB8IFNSQ19EREFDMSB8IFNSQ19EREFDMiB8IFNSQ19EQURDKTsKLQlyIHw9IChyZWcgPDwgU1JDX1JBTUFERFJfU0hJRlQpICYgU1JDX1JBTUFERFJfTUFTSzsKLQlyIHw9IChkYXRhIDw8IFNSQ19SQU1EQVRBX1NISUZUKSAmIFNSQ19SQU1EQVRBX01BU0s7Ci0Jb3V0bChyIHwgU1JDX1dFLCBzLT5pbyArIEVTMTM3MV9SRUdfU1JDT05WKTsKLQotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotLyogbW9zdCBvZiB0aGUgZm9sbG93aW5nIGhlcmUgaXMgYmxhY2sgbWFnaWMgKi8KLXN0YXRpYyB2b2lkIHNldF9hZGNfcmF0ZShzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzLCB1bnNpZ25lZCByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG4sIHRydW5jbSwgZnJlcTsKLQotCWlmIChyYXRlID4gNDgwMDApCi0JCXJhdGUgPSA0ODAwMDsKLQlpZiAocmF0ZSA8IDQwMDApCi0JCXJhdGUgPSA0MDAwOwotCW4gPSByYXRlIC8gMzAwMDsKLQlpZiAoKDEgPDwgbikgJiAoKDEgPDwgMTUpIHwgKDEgPDwgMTMpIHwgKDEgPDwgMTEpIHwgKDEgPDwgOSkpKQotCQluLS07Ci0JdHJ1bmNtID0gKDIxICogbiAtIDEpIHwgMTsKLSAgICAgICAgZnJlcSA9ICgoNDgwMDBVTCA8PCAxNSkgLyByYXRlKSAqIG47Ci0Jcy0+YWRjcmF0ZSA9ICg0ODAwMFVMIDw8IDE1KSAvIChmcmVxIC8gbik7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlpZiAocmF0ZSA+PSAyNDAwMCkgewotCQlpZiAodHJ1bmNtID4gMjM5KQotCQkJdHJ1bmNtID0gMjM5OwotCQlzcmNfd3JpdGUocywgU1JDUkVHX0FEQytTUkNSRUdfVFJVTkNfTiwgCi0JCQkgICgoKDIzOSAtIHRydW5jbSkgPj4gMSkgPDwgOSkgfCAobiA8PCA0KSk7Ci0JfSBlbHNlIHsKLQkJaWYgKHRydW5jbSA+IDExOSkKLQkJCXRydW5jbSA9IDExOTsKLQkJc3JjX3dyaXRlKHMsIFNSQ1JFR19BREMrU1JDUkVHX1RSVU5DX04sIAotCQkJICAweDgwMDAgfCAoKCgxMTkgLSB0cnVuY20pID4+IDEpIDw8IDkpIHwgKG4gPDwgNCkpOwotCX0JCQotCXNyY193cml0ZShzLCBTUkNSRUdfQURDK1NSQ1JFR19JTlRfUkVHUywgCi0JCSAgKHNyY19yZWFkKHMsIFNSQ1JFR19BREMrU1JDUkVHX0lOVF9SRUdTKSAmIDB4MDBmZikgfAotCQkgICgoZnJlcSA+PiA1KSAmIDB4ZmMwMCkpOwotCXNyY193cml0ZShzLCBTUkNSRUdfQURDK1NSQ1JFR19WRlJFUV9GUkFDLCBmcmVxICYgMHg3ZmZmKTsKLQlzcmNfd3JpdGUocywgU1JDUkVHX1ZPTF9BREMsIG4gPDwgOCk7Ci0Jc3JjX3dyaXRlKHMsIFNSQ1JFR19WT0xfQURDKzEsIG4gPDwgOCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotfQotCi0KLXN0YXRpYyB2b2lkIHNldF9kYWMxX3JhdGUoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcywgdW5zaWduZWQgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBmcmVxLCByOwotCi0JaWYgKHJhdGUgPiA0ODAwMCkKLQkJcmF0ZSA9IDQ4MDAwOwotCWlmIChyYXRlIDwgNDAwMCkKLQkJcmF0ZSA9IDQwMDA7Ci0gICAgICAgIGZyZXEgPSAoKHJhdGUgPDwgMTUpICsgMTUwMCkgLyAzMDAwOwotCXMtPmRhYzFyYXRlID0gKGZyZXEgKiAzMDAwICsgMTYzODQpID4+IDE1OwotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JciA9ICh3YWl0X3NyY19yZWFkeShzKSAmIChTUkNfRElTIHwgU1JDX0REQUMyIHwgU1JDX0RBREMpKSB8IFNSQ19EREFDMTsKLQlvdXRsKHIsIHMtPmlvICsgRVMxMzcxX1JFR19TUkNPTlYpOwotCXNyY193cml0ZShzLCBTUkNSRUdfREFDMStTUkNSRUdfSU5UX1JFR1MsIAotCQkgIChzcmNfcmVhZChzLCBTUkNSRUdfREFDMStTUkNSRUdfSU5UX1JFR1MpICYgMHgwMGZmKSB8Ci0JCSAgKChmcmVxID4+IDUpICYgMHhmYzAwKSk7Ci0Jc3JjX3dyaXRlKHMsIFNSQ1JFR19EQUMxK1NSQ1JFR19WRlJFUV9GUkFDLCBmcmVxICYgMHg3ZmZmKTsKLQlyID0gKHdhaXRfc3JjX3JlYWR5KHMpICYgKFNSQ19ESVMgfCBTUkNfRERBQzIgfCBTUkNfREFEQykpOwotCW91dGwociwgcy0+aW8gKyBFUzEzNzFfUkVHX1NSQ09OVik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRfZGFjMl9yYXRlKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMsIHVuc2lnbmVkIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgZnJlcSwgcjsKLQotCWlmIChyYXRlID4gNDgwMDApCi0JCXJhdGUgPSA0ODAwMDsKLQlpZiAocmF0ZSA8IDQwMDApCi0JCXJhdGUgPSA0MDAwOwotICAgICAgICBmcmVxID0gKChyYXRlIDw8IDE1KSArIDE1MDApIC8gMzAwMDsKLQlzLT5kYWMycmF0ZSA9IChmcmVxICogMzAwMCArIDE2Mzg0KSA+PiAxNTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXIgPSAod2FpdF9zcmNfcmVhZHkocykgJiAoU1JDX0RJUyB8IFNSQ19EREFDMSB8IFNSQ19EQURDKSkgfCBTUkNfRERBQzI7Ci0Jb3V0bChyLCBzLT5pbyArIEVTMTM3MV9SRUdfU1JDT05WKTsKLQlzcmNfd3JpdGUocywgU1JDUkVHX0RBQzIrU1JDUkVHX0lOVF9SRUdTLCAKLQkJICAoc3JjX3JlYWQocywgU1JDUkVHX0RBQzIrU1JDUkVHX0lOVF9SRUdTKSAmIDB4MDBmZikgfAotCQkgICgoZnJlcSA+PiA1KSAmIDB4ZmMwMCkpOwotCXNyY193cml0ZShzLCBTUkNSRUdfREFDMitTUkNSRUdfVkZSRVFfRlJBQywgZnJlcSAmIDB4N2ZmZik7Ci0JciA9ICh3YWl0X3NyY19yZWFkeShzKSAmIChTUkNfRElTIHwgU1JDX0REQUMxIHwgU1JDX0RBREMpKTsKLQlvdXRsKHIsIHMtPmlvICsgRVMxMzcxX1JFR19TUkNPTlYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBzcmNfaW5pdChzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLQotICAgICAgICAvKiBiZWZvcmUgd2UgZW5hYmxlIG9yIGRpc2FibGUgdGhlIFNSQyB3ZSBuZWVkCi0gICAgICAgICAgIHRvIHdhaXQgZm9yIGl0IHRvIGJlY29tZSByZWFkeSAqLwotICAgICAgICB3YWl0X3NyY19yZWFkeShzKTsKLQotICAgICAgICBvdXRsKFNSQ19ESVMsIHMtPmlvICsgRVMxMzcxX1JFR19TUkNPTlYpOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAweDgwOyBpKyspCi0gICAgICAgICAgICAgICAgc3JjX3dyaXRlKHMsIGksIDApOwotCi0gICAgICAgIHNyY193cml0ZShzLCBTUkNSRUdfREFDMStTUkNSRUdfVFJVTkNfTiwgMTYgPDwgNCk7Ci0gICAgICAgIHNyY193cml0ZShzLCBTUkNSRUdfREFDMStTUkNSRUdfSU5UX1JFR1MsIDE2IDw8IDEwKTsKLSAgICAgICAgc3JjX3dyaXRlKHMsIFNSQ1JFR19EQUMyK1NSQ1JFR19UUlVOQ19OLCAxNiA8PCA0KTsKLSAgICAgICAgc3JjX3dyaXRlKHMsIFNSQ1JFR19EQUMyK1NSQ1JFR19JTlRfUkVHUywgMTYgPDwgMTApOwotICAgICAgICBzcmNfd3JpdGUocywgU1JDUkVHX1ZPTF9BREMsIDEgPDwgMTIpOwotICAgICAgICBzcmNfd3JpdGUocywgU1JDUkVHX1ZPTF9BREMrMSwgMSA8PCAxMik7Ci0gICAgICAgIHNyY193cml0ZShzLCBTUkNSRUdfVk9MX0RBQzEsIDEgPDwgMTIpOwotICAgICAgICBzcmNfd3JpdGUocywgU1JDUkVHX1ZPTF9EQUMxKzEsIDEgPDwgMTIpOwotICAgICAgICBzcmNfd3JpdGUocywgU1JDUkVHX1ZPTF9EQUMyLCAxIDw8IDEyKTsKLSAgICAgICAgc3JjX3dyaXRlKHMsIFNSQ1JFR19WT0xfREFDMisxLCAxIDw8IDEyKTsKLSAgICAgICAgc2V0X2FkY19yYXRlKHMsIDIyMDUwKTsKLSAgICAgICAgc2V0X2RhYzFfcmF0ZShzLCAyMjA1MCk7Ci0gICAgICAgIHNldF9kYWMyX3JhdGUocywgMjIwNTApOwotCi0gICAgICAgIC8qIFdBUk5JTkc6Ci0gICAgICAgICAqIGVuYWJsaW5nIHRoZSBzYW1wbGUgcmF0ZSBjb252ZXJ0ZXIgd2l0aG91dCBwcm9wZXJseSBwcm9ncmFtbWluZwotICAgICAgICAgKiBpdHMgcGFyYW1ldGVycyBjYXVzZXMgdGhlIGNoaXAgdG8gbG9jayB1cCAodGhlIFNSQyBidXN5IGJpdCB3aWxsCi0gICAgICAgICAqIGJlIHN0dWNrIGhpZ2gsIGFuZCBJJ3ZlIGZvdW5kIG5vIHdheSB0byByZWN0aWZ5IHRoaXMgb3RoZXIgdGhhbgotICAgICAgICAgKiBwb3dlciBjeWNsZSkKLSAgICAgICAgICovCi0gICAgICAgIHdhaXRfc3JjX3JlYWR5KHMpOwotICAgICAgICBvdXRsKDAsIHMtPmlvK0VTMTM3MV9SRUdfU1JDT05WKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyB2b2lkIHdyY29kZWMoc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjLCB1OCBhZGRyLCB1MTYgZGF0YSkKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKiljb2RlYy0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgdCwgeDsKLSAgICAgICAgCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKHQgPSAwOyB0IDwgUE9MTF9DT1VOVDsgdCsrKQotCQlpZiAoIShpbmwocy0+aW8rRVMxMzcxX1JFR19DT0RFQykgJiBDT0RFQ19XSVApKQotCQkJYnJlYWs7Ci0KLSAgICAgICAgLyogc2F2ZSB0aGUgY3VycmVudCBzdGF0ZSBmb3IgbGF0ZXIgKi8KLSAgICAgICAgeCA9IHdhaXRfc3JjX3JlYWR5KHMpOwotCi0gICAgICAgIC8qIGVuYWJsZSBTUkMgc3RhdGUgZGF0YSBpbiBTUkMgbXV4ICovCi0Jb3V0bCgoeCAmIChTUkNfRElTIHwgU1JDX0REQUMxIHwgU1JDX0REQUMyIHwgU1JDX0RBREMpKSB8IDB4MDAwMTAwMDAsCi0JICAgICBzLT5pbytFUzEzNzFfUkVHX1NSQ09OVik7Ci0KLSAgICAgICAgLyogd2FpdCBmb3Igbm90IGJ1c3kgKHN0YXRlIDApIGZpcnN0IHRvIGF2b2lkCi0gICAgICAgICAgIHRyYW5zaXRpb24gc3RhdGVzICovCi0gICAgICAgIGZvciAodD0wOyB0PFBPTExfQ09VTlQ7IHQrKyl7Ci0gICAgICAgICAgICAgICAgaWYoKGlubChzLT5pbytFUzEzNzFfUkVHX1NSQ09OVikgJiAweDAwODcwMDAwKSA9PTAgKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB1ZGVsYXkoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qIHdhaXQgZm9yIGEgU0FGRSB0aW1lIHRvIHdyaXRlIGFkZHIvZGF0YSBhbmQgdGhlbiBkbyBpdCwgZGFtbWl0ICovCi0gICAgICAgIGZvciAodD0wOyB0PFBPTExfQ09VTlQ7IHQrKyl7Ci0gICAgICAgICAgICAgICAgaWYoKGlubChzLT5pbytFUzEzNzFfUkVHX1NSQ09OVikgJiAweDAwODcwMDAwKSA9PTB4MDAwMTAwMDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHVkZWxheSgxKTsKLSAgICAgICAgfQotCi0Jb3V0bCgoKGFkZHIgPDwgQ09ERUNfUE9BRERfU0hJRlQpICYgQ09ERUNfUE9BRERfTUFTSykgfAotCSAgICAgKChkYXRhIDw8IENPREVDX1BPREFUX1NISUZUKSAmIENPREVDX1BPREFUX01BU0spLCBzLT5pbytFUzEzNzFfUkVHX0NPREVDKTsKLQotCS8qIHJlc3RvcmUgU1JDIHJlZyAqLwotCXdhaXRfc3JjX3JlYWR5KHMpOwotCW91dGwoeCwgcy0+aW8rRVMxMzcxX1JFR19TUkNPTlYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0KLQotc3RhdGljIHUxNiByZGNvZGVjKHN0cnVjdCBhYzk3X2NvZGVjICpjb2RlYywgdTggYWRkcikKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKiljb2RlYy0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgdCwgeDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCi0gICAgICAgIC8qIHdhaXQgZm9yIFdJUCB0byBnbyBhd2F5ICovCi0JZm9yICh0ID0gMDsgdCA8IDB4MTAwMDsgdCsrKQotCQlpZiAoIShpbmwocy0+aW8rRVMxMzcxX1JFR19DT0RFQykgJiBDT0RFQ19XSVApKQotCQkJYnJlYWs7Ci0KLQkvKiBzYXZlIHRoZSBjdXJyZW50IHN0YXRlIGZvciBsYXRlciAqLwotCXggPSAod2FpdF9zcmNfcmVhZHkocykgJiAoU1JDX0RJUyB8IFNSQ19EREFDMSB8IFNSQ19EREFDMiB8IFNSQ19EQURDKSk7Ci0KLQkvKiBlbmFibGUgU1JDIHN0YXRlIGRhdGEgaW4gU1JDIG11eCAqLwotCW91dGwoIHggfCAweDAwMDEwMDAwLAotICAgICAgICAgICAgICBzLT5pbytFUzEzNzFfUkVHX1NSQ09OVik7Ci0KLSAgICAgICAgLyogd2FpdCBmb3Igbm90IGJ1c3kgKHN0YXRlIDApIGZpcnN0IHRvIGF2b2lkCi0gICAgICAgICAgIHRyYW5zaXRpb24gc3RhdGVzICovCi0gICAgICAgIGZvciAodD0wOyB0PFBPTExfQ09VTlQ7IHQrKyl7Ci0gICAgICAgICAgICAgICAgaWYoKGlubChzLT5pbytFUzEzNzFfUkVHX1NSQ09OVikgJiAweDAwODcwMDAwKSA9PTAgKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB1ZGVsYXkoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qIHdhaXQgZm9yIGEgU0FGRSB0aW1lIHRvIHdyaXRlIGFkZHIvZGF0YSBhbmQgdGhlbiBkbyBpdCwgZGFtbWl0ICovCi0gICAgICAgIGZvciAodD0wOyB0PFBPTExfQ09VTlQ7IHQrKyl7Ci0gICAgICAgICAgICAgICAgaWYoKGlubChzLT5pbytFUzEzNzFfUkVHX1NSQ09OVikgJiAweDAwODcwMDAwKSA9PTB4MDAwMTAwMDApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHVkZWxheSgxKTsKLSAgICAgICAgfQotCi0Jb3V0bCgoKGFkZHIgPDwgQ09ERUNfUE9BRERfU0hJRlQpICYgQ09ERUNfUE9BRERfTUFTSykgfCBDT0RFQ19QT1JELCBzLT5pbytFUzEzNzFfUkVHX0NPREVDKTsKLQkvKiByZXN0b3JlIFNSQyByZWcgKi8KLQl3YWl0X3NyY19yZWFkeShzKTsKLQlvdXRsKHgsIHMtPmlvK0VTMTM3MV9SRUdfU1JDT05WKTsKLQotICAgICAgICAvKiB3YWl0IGZvciBXSVAgYWdhaW4gKi8KLQlmb3IgKHQgPSAwOyB0IDwgMHgxMDAwOyB0KyspCi0JCWlmICghKGlubChzLT5pbytFUzEzNzFfUkVHX0NPREVDKSAmIENPREVDX1dJUCkpCi0JCQlicmVhazsKLSAgICAgICAgCi0JLyogbm93IHdhaXQgZm9yIHRoZSBzdGlua2luJyBkYXRhIChSRFkpICovCi0JZm9yICh0ID0gMDsgdCA8IFBPTExfQ09VTlQ7IHQrKykKLQkJaWYgKCh4ID0gaW5sKHMtPmlvK0VTMTM3MV9SRUdfQ09ERUMpKSAmIENPREVDX1JEWSkKLQkJCWJyZWFrOwotICAgICAgICAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuICgoeCAmIENPREVDX1BJREFUX01BU0spID4+IENPREVDX1BJREFUX1NISUZUKTsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdG9wX2FkYyhzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCXMtPmN0cmwgJj0gfkNUUkxfQURDX0VOOwotCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci19CQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9kYWMxKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jcy0+Y3RybCAmPSB+Q1RSTF9EQUMxX0VOOwotCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci19CQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RvcF9kYWMyKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jcy0+Y3RybCAmPSB+Q1RSTF9EQUMyX0VOOwotCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci19CQotCi1zdGF0aWMgdm9pZCBzdGFydF9kYWMxKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBmcmFncmVtYWluLCBmc2hpZnQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCWlmICghKHMtPmN0cmwgJiBDVFJMX0RBQzFfRU4pICYmIChzLT5kbWFfZGFjMS5tYXBwZWQgfHwgcy0+ZG1hX2RhYzEuY291bnQgPiAwKQotCSAgICAmJiBzLT5kbWFfZGFjMS5yZWFkeSkgewotCQlzLT5jdHJsIHw9IENUUkxfREFDMV9FTjsKLQkJcy0+c2N0cmwgPSAocy0+c2N0cmwgJiB+KFNDVFJMX1AxTE9PUFNFTCB8IFNDVFJMX1AxUEFVU0UgfCBTQ1RSTF9QMVNDVFJMRCkpIHwgU0NUUkxfUDFJTlRFTjsKLQkJb3V0bChzLT5zY3RybCwgcy0+aW8rRVMxMzcxX1JFR19TRVJJQUxfQ09OVFJPTCk7Ci0JCWZyYWdyZW1haW4gPSAoKC0gcy0+ZG1hX2RhYzEuaHdwdHIpICYgKHMtPmRtYV9kYWMxLmZyYWdzaXplLTEpKTsKLQkJZnNoaWZ0ID0gc2FtcGxlX3NoaWZ0WyhzLT5zY3RybCAmIFNDVFJMX1AxRk1UKSA+PiBTQ1RSTF9TSF9QMUZNVF07Ci0JCWlmIChmcmFncmVtYWluIDwgMipmc2hpZnQpCi0JCQlmcmFncmVtYWluID0gcy0+ZG1hX2RhYzEuZnJhZ3NpemU7Ci0JCW91dGwoKGZyYWdyZW1haW4gPj4gZnNoaWZ0KSAtIDEsIHMtPmlvK0VTMTM3MV9SRUdfREFDMV9TQ09VTlQpOwotCQlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MV9SRUdfQ09OVFJPTCk7Ci0JCW91dGwoKHMtPmRtYV9kYWMxLmZyYWdzaXplID4+IGZzaGlmdCkgLSAxLCBzLT5pbytFUzEzNzFfUkVHX0RBQzFfU0NPVU5UKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotfQkKLQotc3RhdGljIHZvaWQgc3RhcnRfZGFjMihzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgZnJhZ3JlbWFpbiwgZnNoaWZ0OwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlpZiAoIShzLT5jdHJsICYgQ1RSTF9EQUMyX0VOKSAmJiAocy0+ZG1hX2RhYzIubWFwcGVkIHx8IHMtPmRtYV9kYWMyLmNvdW50ID4gMCkKLQkgICAgJiYgcy0+ZG1hX2RhYzIucmVhZHkpIHsKLQkJcy0+Y3RybCB8PSBDVFJMX0RBQzJfRU47Ci0JCXMtPnNjdHJsID0gKHMtPnNjdHJsICYgfihTQ1RSTF9QMkxPT1BTRUwgfCBTQ1RSTF9QMlBBVVNFIHwgU0NUUkxfUDJEQUNTRU4gfCAKLQkJCQkJIFNDVFJMX1AyRU5ESU5DIHwgU0NUUkxfUDJTVElOQykpIHwgU0NUUkxfUDJJTlRFTiB8Ci0JCQkoKChzLT5zY3RybCAmIFNDVFJMX1AyRk1UKSA/IDIgOiAxKSA8PCBTQ1RSTF9TSF9QMkVORElOQykgfCAKLQkJCSgwIDw8IFNDVFJMX1NIX1AyU1RJTkMpOwotCQlvdXRsKHMtPnNjdHJsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQkJZnJhZ3JlbWFpbiA9ICgoLSBzLT5kbWFfZGFjMi5od3B0cikgJiAocy0+ZG1hX2RhYzIuZnJhZ3NpemUtMSkpOwotCQlmc2hpZnQgPSBzYW1wbGVfc2hpZnRbKHMtPnNjdHJsICYgU0NUUkxfUDJGTVQpID4+IFNDVFJMX1NIX1AyRk1UXTsKLQkJaWYgKGZyYWdyZW1haW4gPCAyKmZzaGlmdCkKLQkJCWZyYWdyZW1haW4gPSBzLT5kbWFfZGFjMi5mcmFnc2l6ZTsKLQkJb3V0bCgoZnJhZ3JlbWFpbiA+PiBmc2hpZnQpIC0gMSwgcy0+aW8rRVMxMzcxX1JFR19EQUMyX1NDT1VOVCk7Ci0JCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQkJb3V0bCgocy0+ZG1hX2RhYzIuZnJhZ3NpemUgPj4gZnNoaWZ0KSAtIDEsIHMtPmlvK0VTMTM3MV9SRUdfREFDMl9TQ09VTlQpOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci19CQotCi1zdGF0aWMgdm9pZCBzdGFydF9hZGMoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGZyYWdyZW1haW4sIGZzaGlmdDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCEocy0+Y3RybCAmIENUUkxfQURDX0VOKSAmJiAocy0+ZG1hX2FkYy5tYXBwZWQgfHwgcy0+ZG1hX2FkYy5jb3VudCA8IChzaWduZWQpKHMtPmRtYV9hZGMuZG1hc2l6ZSAtIDIqcy0+ZG1hX2FkYy5mcmFnc2l6ZSkpCi0JICAgICYmIHMtPmRtYV9hZGMucmVhZHkpIHsKLQkJcy0+Y3RybCB8PSBDVFJMX0FEQ19FTjsKLQkJcy0+c2N0cmwgPSAocy0+c2N0cmwgJiB+U0NUUkxfUjFMT09QU0VMKSB8IFNDVFJMX1IxSU5URU47Ci0JCW91dGwocy0+c2N0cmwsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOwotCQlmcmFncmVtYWluID0gKCgtIHMtPmRtYV9hZGMuaHdwdHIpICYgKHMtPmRtYV9hZGMuZnJhZ3NpemUtMSkpOwotCQlmc2hpZnQgPSBzYW1wbGVfc2hpZnRbKHMtPnNjdHJsICYgU0NUUkxfUjFGTVQpID4+IFNDVFJMX1NIX1IxRk1UXTsKLQkJaWYgKGZyYWdyZW1haW4gPCAyKmZzaGlmdCkKLQkJCWZyYWdyZW1haW4gPSBzLT5kbWFfYWRjLmZyYWdzaXplOwotCQlvdXRsKChmcmFncmVtYWluID4+IGZzaGlmdCkgLSAxLCBzLT5pbytFUzEzNzFfUkVHX0FEQ19TQ09VTlQpOwotCQlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MV9SRUdfQ09OVFJPTCk7Ci0JCW91dGwoKHMtPmRtYV9hZGMuZnJhZ3NpemUgPj4gZnNoaWZ0KSAtIDEsIHMtPmlvK0VTMTM3MV9SRUdfQURDX1NDT1VOVCk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLX0JCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIERNQUJVRl9ERUZBVUxUT1JERVIgKDE3LVBBR0VfU0hJRlQpCi0jZGVmaW5lIERNQUJVRl9NSU5PUkRFUiAxCi0KLQotc3RhdGljIGlubGluZSB2b2lkIGRlYWxsb2NfZG1hYnVmKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMsIHN0cnVjdCBkbWFidWYgKmRiKQotewotCXN0cnVjdCBwYWdlICpwYWdlLCAqcGVuZDsKLQotCWlmIChkYi0+cmF3YnVmKSB7Ci0JCS8qIHVuZG8gbWFya2luZyB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQgKi8KLQkJcGVuZCA9IHZpcnRfdG9fcGFnZShkYi0+cmF3YnVmICsgKFBBR0VfU0laRSA8PCBkYi0+YnVmb3JkZXIpIC0gMSk7Ci0JCWZvciAocGFnZSA9IHZpcnRfdG9fcGFnZShkYi0+cmF3YnVmKTsgcGFnZSA8PSBwZW5kOyBwYWdlKyspCi0JCQlDbGVhclBhZ2VSZXNlcnZlZChwYWdlKTsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChzLT5kZXYsIFBBR0VfU0laRSA8PCBkYi0+YnVmb3JkZXIsIGRiLT5yYXdidWYsIGRiLT5kbWFhZGRyKTsKLQl9Ci0JZGItPnJhd2J1ZiA9IE5VTEw7Ci0JZGItPm1hcHBlZCA9IGRiLT5yZWFkeSA9IDA7Ci19Ci0KLXN0YXRpYyBpbnQgcHJvZ19kbWFidWYoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcywgc3RydWN0IGRtYWJ1ZiAqZGIsIHVuc2lnbmVkIHJhdGUsIHVuc2lnbmVkIGZtdCwgdW5zaWduZWQgcmVnKQotewotCWludCBvcmRlcjsKLQl1bnNpZ25lZCBieXRlcGVyc2VjOwotCXVuc2lnbmVkIGJ1ZnM7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2UsICpwZW5kOwotCi0JZGItPmh3cHRyID0gZGItPnN3cHRyID0gZGItPnRvdGFsX2J5dGVzID0gZGItPmNvdW50ID0gZGItPmVycm9yID0gZGItPmVuZGNsZWFyZWQgPSAwOwotCWlmICghZGItPnJhd2J1ZikgewotCQlkYi0+cmVhZHkgPSBkYi0+bWFwcGVkID0gMDsKLQkJZm9yIChvcmRlciA9IERNQUJVRl9ERUZBVUxUT1JERVI7IG9yZGVyID49IERNQUJVRl9NSU5PUkRFUjsgb3JkZXItLSkKLQkJCWlmICgoZGItPnJhd2J1ZiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHMtPmRldiwgUEFHRV9TSVpFIDw8IG9yZGVyLCAmZGItPmRtYWFkZHIpKSkKLQkJCQlicmVhazsKLQkJaWYgKCFkYi0+cmF3YnVmKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWRiLT5idWZvcmRlciA9IG9yZGVyOwotCQkvKiBub3cgbWFyayB0aGUgcGFnZXMgYXMgcmVzZXJ2ZWQ7IG90aGVyd2lzZSByZW1hcF9wZm5fcmFuZ2UgZG9lc24ndCBkbyB3aGF0IHdlIHdhbnQgKi8KLQkJcGVuZCA9IHZpcnRfdG9fcGFnZShkYi0+cmF3YnVmICsgKFBBR0VfU0laRSA8PCBkYi0+YnVmb3JkZXIpIC0gMSk7Ci0JCWZvciAocGFnZSA9IHZpcnRfdG9fcGFnZShkYi0+cmF3YnVmKTsgcGFnZSA8PSBwZW5kOyBwYWdlKyspCi0JCQlTZXRQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0JfQotCWZtdCAmPSBFUzEzNzFfRk1UX01BU0s7Ci0JYnl0ZXBlcnNlYyA9IHJhdGUgPDwgc2FtcGxlX3NoaWZ0W2ZtdF07Ci0JYnVmcyA9IFBBR0VfU0laRSA8PCBkYi0+YnVmb3JkZXI7Ci0JaWYgKGRiLT5vc3NmcmFnc2hpZnQpIHsKLQkJaWYgKCgxMDAwIDw8IGRiLT5vc3NmcmFnc2hpZnQpIDwgYnl0ZXBlcnNlYykKLQkJCWRiLT5mcmFnc2hpZnQgPSBsZDIoYnl0ZXBlcnNlYy8xMDAwKTsKLQkJZWxzZQotCQkJZGItPmZyYWdzaGlmdCA9IGRiLT5vc3NmcmFnc2hpZnQ7Ci0JfSBlbHNlIHsKLQkJZGItPmZyYWdzaGlmdCA9IGxkMihieXRlcGVyc2VjLzEwMC8oZGItPnN1YmRpdmlzaW9uID8gZGItPnN1YmRpdmlzaW9uIDogMSkpOwotCQlpZiAoZGItPmZyYWdzaGlmdCA8IDMpCi0JCQlkYi0+ZnJhZ3NoaWZ0ID0gMzsKLQl9Ci0JZGItPm51bWZyYWcgPSBidWZzID4+IGRiLT5mcmFnc2hpZnQ7Ci0Jd2hpbGUgKGRiLT5udW1mcmFnIDwgNCAmJiBkYi0+ZnJhZ3NoaWZ0ID4gMykgewotCQlkYi0+ZnJhZ3NoaWZ0LS07Ci0JCWRiLT5udW1mcmFnID0gYnVmcyA+PiBkYi0+ZnJhZ3NoaWZ0OwotCX0KLQlkYi0+ZnJhZ3NpemUgPSAxIDw8IGRiLT5mcmFnc2hpZnQ7Ci0JaWYgKGRiLT5vc3NtYXhmcmFncyA+PSA0ICYmIGRiLT5vc3NtYXhmcmFncyA8IGRiLT5udW1mcmFnKQotCQlkYi0+bnVtZnJhZyA9IGRiLT5vc3NtYXhmcmFnczsKLQlkYi0+ZnJhZ3NhbXBsZXMgPSBkYi0+ZnJhZ3NpemUgPj4gc2FtcGxlX3NoaWZ0W2ZtdF07Ci0JZGItPmRtYXNpemUgPSBkYi0+bnVtZnJhZyA8PCBkYi0+ZnJhZ3NoaWZ0OwotCW1lbXNldChkYi0+cmF3YnVmLCAoZm10ICYgRVMxMzcxX0ZNVF9TMTYpID8gMCA6IDB4ODAsIGRiLT5kbWFzaXplKTsKLQlvdXRsKChyZWcgPj4gOCkgJiAxNSwgcy0+aW8rRVMxMzcxX1JFR19NRU1QQUdFKTsKLQlvdXRsKGRiLT5kbWFhZGRyLCBzLT5pbysocmVnICYgMHhmZikpOwotCW91dGwoKGRiLT5kbWFzaXplID4+IDIpLTEsIHMtPmlvKygocmVnICsgNCkgJiAweGZmKSk7Ci0JZGItPmVuYWJsZWQgPSAxOwotCWRiLT5yZWFkeSA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHByb2dfZG1hYnVmX2FkYyhzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotCXN0b3BfYWRjKHMpOwotCXJldHVybiBwcm9nX2RtYWJ1ZihzLCAmcy0+ZG1hX2FkYywgcy0+YWRjcmF0ZSwgKHMtPnNjdHJsID4+IFNDVFJMX1NIX1IxRk1UKSAmIEVTMTM3MV9GTVRfTUFTSywgCi0JCQkgICBFUzEzNzFfUkVHX0FEQ19GUkFNRUFEUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHByb2dfZG1hYnVmX2RhYzIoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcykKLXsKLQlzdG9wX2RhYzIocyk7Ci0JcmV0dXJuIHByb2dfZG1hYnVmKHMsICZzLT5kbWFfZGFjMiwgcy0+ZGFjMnJhdGUsIChzLT5zY3RybCA+PiBTQ1RSTF9TSF9QMkZNVCkgJiBFUzEzNzFfRk1UX01BU0ssIAotCQkJICAgRVMxMzcxX1JFR19EQUMyX0ZSQU1FQURSKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcHJvZ19kbWFidWZfZGFjMShzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotCXN0b3BfZGFjMShzKTsKLQlyZXR1cm4gcHJvZ19kbWFidWYocywgJnMtPmRtYV9kYWMxLCBzLT5kYWMxcmF0ZSwgKHMtPnNjdHJsID4+IFNDVFJMX1NIX1AxRk1UKSAmIEVTMTM3MV9GTVRfTUFTSywKLQkJCSAgIEVTMTM3MV9SRUdfREFDMV9GUkFNRUFEUik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZ2V0X2h3cHRyKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMsIHN0cnVjdCBkbWFidWYgKmRiLCB1bnNpZ25lZCByZWcpCi17Ci0JdW5zaWduZWQgaHdwdHIsIGRpZmY7Ci0KLQlvdXRsKChyZWcgPj4gOCkgJiAxNSwgcy0+aW8rRVMxMzcxX1JFR19NRU1QQUdFKTsKLQlod3B0ciA9IChpbmwocy0+aW8rKHJlZyAmIDB4ZmYpKSA+PiAxNCkgJiAweDNmZmZjOwotCWRpZmYgPSAoZGItPmRtYXNpemUgKyBod3B0ciAtIGRiLT5od3B0cikgJSBkYi0+ZG1hc2l6ZTsKLQlkYi0+aHdwdHIgPSBod3B0cjsKLQlyZXR1cm4gZGlmZjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2FkdmFuY2Uodm9pZCAqYnVmLCB1bnNpZ25lZCBic2l6ZSwgdW5zaWduZWQgYnB0ciwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjaGFyIGMpCi17Ci0JaWYgKGJwdHIgKyBsZW4gPiBic2l6ZSkgewotCQl1bnNpZ25lZCB4ID0gYnNpemUgLSBicHRyOwotCQltZW1zZXQoKChjaGFyICopYnVmKSArIGJwdHIsIGMsIHgpOwotCQlicHRyID0gMDsKLQkJbGVuIC09IHg7Ci0JfQotCW1lbXNldCgoKGNoYXIgKilidWYpICsgYnB0ciwgYywgbGVuKTsKLX0KLQotLyogY2FsbCB3aXRoIHNwaW5sb2NrIGhlbGQhICovCi1zdGF0aWMgdm9pZCBlczEzNzFfdXBkYXRlX3B0cihzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotCWludCBkaWZmOwotCi0JLyogdXBkYXRlIEFEQyBwb2ludGVyICovCi0JaWYgKHMtPmN0cmwgJiBDVFJMX0FEQ19FTikgewotCQlkaWZmID0gZ2V0X2h3cHRyKHMsICZzLT5kbWFfYWRjLCBFUzEzNzFfUkVHX0FEQ19GUkFNRUNOVCk7Ci0JCXMtPmRtYV9hZGMudG90YWxfYnl0ZXMgKz0gZGlmZjsKLQkJcy0+ZG1hX2FkYy5jb3VudCArPSBkaWZmOwotCQlpZiAocy0+ZG1hX2FkYy5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9hZGMuZnJhZ3NpemUpIAotCQkJd2FrZV91cCgmcy0+ZG1hX2FkYy53YWl0KTsKLQkJaWYgKCFzLT5kbWFfYWRjLm1hcHBlZCkgewotCQkJaWYgKHMtPmRtYV9hZGMuY291bnQgPiAoc2lnbmVkKShzLT5kbWFfYWRjLmRtYXNpemUgLSAoKDMgKiBzLT5kbWFfYWRjLmZyYWdzaXplKSA+PiAxKSkpIHsKLQkJCQlzLT5jdHJsICY9IH5DVFJMX0FEQ19FTjsKLQkJCQlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MV9SRUdfQ09OVFJPTCk7Ci0JCQkJcy0+ZG1hX2FkYy5lcnJvcisrOwotCQkJfQotCQl9Ci0JfQotCS8qIHVwZGF0ZSBEQUMxIHBvaW50ZXIgKi8KLQlpZiAocy0+Y3RybCAmIENUUkxfREFDMV9FTikgewotCQlkaWZmID0gZ2V0X2h3cHRyKHMsICZzLT5kbWFfZGFjMSwgRVMxMzcxX1JFR19EQUMxX0ZSQU1FQ05UKTsKLQkJcy0+ZG1hX2RhYzEudG90YWxfYnl0ZXMgKz0gZGlmZjsKLQkJaWYgKHMtPmRtYV9kYWMxLm1hcHBlZCkgewotCQkJcy0+ZG1hX2RhYzEuY291bnQgKz0gZGlmZjsKLQkJCWlmIChzLT5kbWFfZGFjMS5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9kYWMxLmZyYWdzaXplKQotCQkJCXdha2VfdXAoJnMtPmRtYV9kYWMxLndhaXQpOwotCQl9IGVsc2UgewotCQkJcy0+ZG1hX2RhYzEuY291bnQgLT0gZGlmZjsKLQkJCWlmIChzLT5kbWFfZGFjMS5jb3VudCA8PSAwKSB7Ci0JCQkJcy0+Y3RybCAmPSB+Q1RSTF9EQUMxX0VOOwotCQkJCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQkJCQlzLT5kbWFfZGFjMS5lcnJvcisrOwotCQkJfSBlbHNlIGlmIChzLT5kbWFfZGFjMS5jb3VudCA8PSAoc2lnbmVkKXMtPmRtYV9kYWMxLmZyYWdzaXplICYmICFzLT5kbWFfZGFjMS5lbmRjbGVhcmVkKSB7Ci0JCQkJY2xlYXJfYWR2YW5jZShzLT5kbWFfZGFjMS5yYXdidWYsIHMtPmRtYV9kYWMxLmRtYXNpemUsIHMtPmRtYV9kYWMxLnN3cHRyLCAKLQkJCQkJICAgICAgcy0+ZG1hX2RhYzEuZnJhZ3NpemUsIChzLT5zY3RybCAmIFNDVFJMX1AxU0VCKSA/IDAgOiAweDgwKTsKLQkJCQlzLT5kbWFfZGFjMS5lbmRjbGVhcmVkID0gMTsKLQkJCX0KLQkJCWlmIChzLT5kbWFfZGFjMS5jb3VudCArIChzaWduZWQpcy0+ZG1hX2RhYzEuZnJhZ3NpemUgPD0gKHNpZ25lZClzLT5kbWFfZGFjMS5kbWFzaXplKQotCQkJCXdha2VfdXAoJnMtPmRtYV9kYWMxLndhaXQpOwotCQl9Ci0JfQotCS8qIHVwZGF0ZSBEQUMyIHBvaW50ZXIgKi8KLQlpZiAocy0+Y3RybCAmIENUUkxfREFDMl9FTikgewotCQlkaWZmID0gZ2V0X2h3cHRyKHMsICZzLT5kbWFfZGFjMiwgRVMxMzcxX1JFR19EQUMyX0ZSQU1FQ05UKTsKLQkJcy0+ZG1hX2RhYzIudG90YWxfYnl0ZXMgKz0gZGlmZjsKLQkJaWYgKHMtPmRtYV9kYWMyLm1hcHBlZCkgewotCQkJcy0+ZG1hX2RhYzIuY291bnQgKz0gZGlmZjsKLQkJCWlmIChzLT5kbWFfZGFjMi5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9kYWMyLmZyYWdzaXplKQotCQkJCXdha2VfdXAoJnMtPmRtYV9kYWMyLndhaXQpOwotCQl9IGVsc2UgewotCQkJcy0+ZG1hX2RhYzIuY291bnQgLT0gZGlmZjsKLQkJCWlmIChzLT5kbWFfZGFjMi5jb3VudCA8PSAwKSB7Ci0JCQkJcy0+Y3RybCAmPSB+Q1RSTF9EQUMyX0VOOwotCQkJCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQkJCQlzLT5kbWFfZGFjMi5lcnJvcisrOwotCQkJfSBlbHNlIGlmIChzLT5kbWFfZGFjMi5jb3VudCA8PSAoc2lnbmVkKXMtPmRtYV9kYWMyLmZyYWdzaXplICYmICFzLT5kbWFfZGFjMi5lbmRjbGVhcmVkKSB7Ci0JCQkJY2xlYXJfYWR2YW5jZShzLT5kbWFfZGFjMi5yYXdidWYsIHMtPmRtYV9kYWMyLmRtYXNpemUsIHMtPmRtYV9kYWMyLnN3cHRyLCAKLQkJCQkJICAgICAgcy0+ZG1hX2RhYzIuZnJhZ3NpemUsIChzLT5zY3RybCAmIFNDVFJMX1AyU0VCKSA/IDAgOiAweDgwKTsKLQkJCQlzLT5kbWFfZGFjMi5lbmRjbGVhcmVkID0gMTsKLQkJCX0KLQkJCWlmIChzLT5kbWFfZGFjMi5jb3VudCArIChzaWduZWQpcy0+ZG1hX2RhYzIuZnJhZ3NpemUgPD0gKHNpZ25lZClzLT5kbWFfZGFjMi5kbWFzaXplKQotCQkJCXdha2VfdXAoJnMtPmRtYV9kYWMyLndhaXQpOwotCQl9Ci0JfQotfQotCi0vKiBob2xkIHNwaW5sb2NrIGZvciB0aGUgZm9sbG93aW5nISAqLwotc3RhdGljIHZvaWQgZXMxMzcxX2hhbmRsZV9taWRpKHN0cnVjdCBlczEzNzFfc3RhdGUgKnMpCi17Ci0JdW5zaWduZWQgY2hhciBjaDsKLQlpbnQgd2FrZTsKLQotCWlmICghKHMtPmN0cmwgJiBDVFJMX1VBUlRfRU4pKQotCQlyZXR1cm47Ci0Jd2FrZSA9IDA7Ci0Jd2hpbGUgKGluYihzLT5pbytFUzEzNzFfUkVHX1VBUlRfU1RBVFVTKSAmIFVTVEFUX1JYUkRZKSB7Ci0JCWNoID0gaW5iKHMtPmlvK0VTMTM3MV9SRUdfVUFSVF9EQVRBKTsKLQkJaWYgKHMtPm1pZGkuaWNudCA8IE1JRElJTkJVRikgewotCQkJcy0+bWlkaS5pYnVmW3MtPm1pZGkuaXdyXSA9IGNoOwotCQkJcy0+bWlkaS5pd3IgPSAocy0+bWlkaS5pd3IgKyAxKSAlIE1JRElJTkJVRjsKLQkJCXMtPm1pZGkuaWNudCsrOwotCQl9Ci0JCXdha2UgPSAxOwotCX0KLQlpZiAod2FrZSkKLQkJd2FrZV91cCgmcy0+bWlkaS5pd2FpdCk7Ci0Jd2FrZSA9IDA7Ci0Jd2hpbGUgKChpbmIocy0+aW8rRVMxMzcxX1JFR19VQVJUX1NUQVRVUykgJiBVU1RBVF9UWFJEWSkgJiYgcy0+bWlkaS5vY250ID4gMCkgewotCQlvdXRiKHMtPm1pZGkub2J1ZltzLT5taWRpLm9yZF0sIHMtPmlvK0VTMTM3MV9SRUdfVUFSVF9EQVRBKTsKLQkJcy0+bWlkaS5vcmQgPSAocy0+bWlkaS5vcmQgKyAxKSAlIE1JRElPVVRCVUY7Ci0JCXMtPm1pZGkub2NudC0tOwotCQlpZiAocy0+bWlkaS5vY250IDwgTUlESU9VVEJVRi0xNikKLQkJCXdha2UgPSAxOwotCX0KLQlpZiAod2FrZSkKLQkJd2FrZV91cCgmcy0+bWlkaS5vd2FpdCk7Ci0Jb3V0Yigocy0+bWlkaS5vY250ID4gMCkgPyBVQ1RSTF9SWElOVEVOIHwgVUNUUkxfRU5BX1RYSU5UIDogVUNUUkxfUlhJTlRFTiwgcy0+aW8rRVMxMzcxX1JFR19VQVJUX0NPTlRST0wpOwotfQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgZXMxMzcxX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0gICAgICAgIHN0cnVjdCBlczEzNzFfc3RhdGUgKnMgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IGludHNyYywgc2N0bDsKLQkKLQkvKiBmYXN0cGF0aCBvdXQsIHRvIGVhc2UgaW50ZXJydXB0IHNoYXJpbmcgKi8KLQlpbnRzcmMgPSBpbmwocy0+aW8rRVMxMzcxX1JFR19TVEFUVVMpOwotCWlmICghKGludHNyYyAmIDB4ODAwMDAwMDApKQotCQlyZXR1cm4gSVJRX05PTkU7Ci0Jc3Bpbl9sb2NrKCZzLT5sb2NrKTsKLQkvKiBjbGVhciBhdWRpbyBpbnRlcnJ1cHRzIGZpcnN0ICovCi0Jc2N0bCA9IHMtPnNjdHJsOwotCWlmIChpbnRzcmMgJiBTVEFUX0FEQykKLQkJc2N0bCAmPSB+U0NUUkxfUjFJTlRFTjsKLQlpZiAoaW50c3JjICYgU1RBVF9EQUMxKQotCQlzY3RsICY9IH5TQ1RSTF9QMUlOVEVOOwotCWlmIChpbnRzcmMgJiBTVEFUX0RBQzIpCi0JCXNjdGwgJj0gflNDVFJMX1AySU5URU47Ci0Jb3V0bChzY3RsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQlvdXRsKHMtPnNjdHJsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQllczEzNzFfdXBkYXRlX3B0cihzKTsKLQllczEzNzFfaGFuZGxlX21pZGkocyk7Ci0Jc3Bpbl91bmxvY2soJnMtPmxvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBjaGFyIGludmFsaWRfbWFnaWNbXSA9IEtFUk5fQ1JJVCBQRlggImludmFsaWQgbWFnaWMgdmFsdWVcbiI7Ci0KLSNkZWZpbmUgVkFMSURBVEVfU1RBVEUocykgICAgICAgICAgICAgICAgICAgICAgICAgXAotKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKCEocykgfHwgKHMpLT5tYWdpYyAhPSBFUzEzNzFfTUFHSUMpIHsgXAotCQlwcmludGsoaW52YWxpZF9tYWdpYyk7ICAgICAgICAgICAgXAotCQlyZXR1cm4gLUVOWElPOyAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBDb252ZXJzaW9uIHRhYmxlIGZvciBTL1BESUYgUENNIHZvbHVtZSBlbXVsYXRpb24gdGhyb3VnaCB0aGUgU1JDICovCi0vKiBkQi1saW5lYXIgdGFibGUgb2YgREFDIHZvbCB2YWx1ZXM7IC0wZEIgdG8gLTQ2LjVkQiB3aXRoIG11dGUgKi8KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBEQUNWb2xUYWJsZVsxMDFdID0KLXsKLQkweDEwMDAsIDB4MGYyYSwgMHgwZTYwLCAweDBkYTAsIDB4MGNlYSwgMHgwYzNlLCAweDBiOWEsIDB4MGFmZiwKLQkweDBhNmQsIDB4MDllMSwgMHgwOTVlLCAweDA4ZTEsIDB4MDg2YSwgMHgwN2ZhLCAweDA3OGYsIDB4MDcyYSwKLQkweDA2Y2IsIDB4MDY3MCwgMHgwNjFhLCAweDA1YzksIDB4MDU3YiwgMHgwNTMyLCAweDA0ZWQsIDB4MDRhYiwKLQkweDA0NmQsIDB4MDQzMiwgMHgwM2ZhLCAweDAzYzUsIDB4MDM5MiwgMHgwMzYzLCAweDAzMzUsIDB4MDMwYiwKLQkweDAyZTIsIDB4MDJiYywgMHgwMjk3LCAweDAyNzUsIDB4MDI1NCwgMHgwMjM1LCAweDAyMTcsIDB4MDFmYiwKLQkweDAxZTEsIDB4MDFjOCwgMHgwMWIwLCAweDAxOTksIDB4MDE4NCwgMHgwMTcwLCAweDAxNWQsIDB4MDE0YiwKLQkweDAxMzksIDB4MDEyOSwgMHgwMTE5LCAweDAxMGIsIDB4MDBmZCwgMHgwMGYwLCAweDAwZTMsIDB4MDBkNywKLQkweDAwY2MsIDB4MDBjMSwgMHgwMGI3LCAweDAwYWUsIDB4MDBhNSwgMHgwMDljLCAweDAwOTQsIDB4MDA4YywKLQkweDAwODUsIDB4MDA3ZSwgMHgwMDc3LCAweDAwNzEsIDB4MDA2YiwgMHgwMDY2LCAweDAwNjAsIDB4MDA1YiwKLQkweDAwNTcsIDB4MDA1MiwgMHgwMDRlLCAweDAwNGEsIDB4MDA0NiwgMHgwMDQyLCAweDAwM2YsIDB4MDAzYywKLQkweDAwMzgsIDB4MDAzNiwgMHgwMDMzLCAweDAwMzAsIDB4MDAyZSwgMHgwMDJiLCAweDAwMjksIDB4MDAyNywKLQkweDAwMjUsIDB4MDAyMywgMHgwMDIxLCAweDAwMWYsIDB4MDAxZSwgMHgwMDFjLCAweDAwMWIsIDB4MDAxOSwKLQkweDAwMTgsIDB4MDAxNywgMHgwMDE2LCAweDAwMTQsIDB4MDAwMAotfTsKLQotLyoKLSAqIHdoZW4gd2UgYXJlIGluIFMvUERJRiBtb2RlLCB3ZSB3YW50IHRvIGRpc2FibGUgYW55IGFuYWxvZyBvdXRwdXQgc28KLSAqIHdlIGZpbHRlciB0aGUgbWl4ZXIgaW9jdGxzIAotICovCi1zdGF0aWMgaW50IG1peGRldl9pb2N0bChzdHJ1Y3QgYWM5N19jb2RlYyAqY29kZWMsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnMgPSAoc3RydWN0IGVzMTM3MV9zdGF0ZSAqKWNvZGVjLT5wcml2YXRlX2RhdGE7Ci0JaW50IHZhbDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBsZWZ0LCByaWdodDsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotCS8qIGZpbHRlciBtaXhlciBpb2N0bHMgdG8gY2F0Y2ggUENNIGFuZCBNQVNURVIgdm9sdW1lIHdoZW4gaW4gUy9QRElGIG1vZGUgKi8KLQlpZiAocy0+c3BkaWZfdm9sdW1lID09IC0xKQotCQlyZXR1cm4gY29kZWMtPm1peGVyX2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRToKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNPVU5EX01JWEVSX1dSSVRFX1BDTTogICAvKiB1c2UgU1JDIGZvciBQQ00gdm9sdW1lICovCi0JCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyaWdodCA9ICgodmFsID4+IDgpICAmIDB4ZmYpOwotCQlsZWZ0ID0gKHZhbCAgJiAweGZmKTsKLQkJaWYgKHJpZ2h0ID4gMTAwKQotCQkJcmlnaHQgPSAxMDA7Ci0JCWlmIChsZWZ0ID4gMTAwKQotCQkJbGVmdCA9IDEwMDsKLQkJcy0+c3BkaWZfdm9sdW1lID0gKHJpZ2h0IDw8IDgpIHwgbGVmdDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJc3JjX3dyaXRlKHMsIFNSQ1JFR19WT0xfREFDMiwgREFDVm9sVGFibGVbMTAwIC0gbGVmdF0pOwotCQlzcmNfd3JpdGUocywgU1JDUkVHX1ZPTF9EQUMyKzEsIERBQ1ZvbFRhYmxlWzEwMCAtIHJpZ2h0XSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIDA7Ci0JCi0JY2FzZSBTT1VORF9NSVhFUl9SRUFEX1BDTToKLQkJcmV0dXJuIHB1dF91c2VyKHMtPnNwZGlmX3ZvbHVtZSwgKGludCBfX3VzZXIgKilhcmcpOwotCX0KLQlyZXR1cm4gY29kZWMtPm1peGVyX2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogQUM5NyBNaXhlciBSZWdpc3RlciB0byBDb25uZWN0aW9ucyBtYXBwaW5nIG9mIHRoZSBDb25jZXJ0IDk3IGJvYXJkCi0gKgotICogQUM5N19NQVNURVJfVk9MX1NURVJFTyAgIExpbmUgT3V0Ci0gKiBBQzk3X01BU1RFUl9WT0xfTU9OTyAgICAgVEFEIE91dHB1dAotICogQUM5N19QQ0JFRVBfVk9MICAgICAgICAgIG5vbmUKLSAqIEFDOTdfUEhPTkVfVk9MICAgICAgICAgICBUQUQgSW5wdXQgKG1vbm8pCi0gKiBBQzk3X01JQ19WT0wgICAgICAgICAgICAgTUlDIElucHV0IChtb25vKQotICogQUM5N19MSU5FSU5fVk9MICAgICAgICAgIExpbmUgSW5wdXQgKHN0ZXJlbykKLSAqIEFDOTdfQ0RfVk9MICAgICAgICAgICAgICBDRCBJbnB1dCAoc3RlcmVvKQotICogQUM5N19WSURFT19WT0wgICAgICAgICAgIG5vbmUKLSAqIEFDOTdfQVVYX1ZPTCAgICAgICAgICAgICBBdXggSW5wdXQgKHN0ZXJlbykKLSAqIEFDOTdfUENNT1VUX1ZPTCAgICAgICAgICBXYXZlIE91dHB1dCAoc3RlcmVvKQotICovCi0KLXN0YXRpYyBpbnQgZXMxMzcxX29wZW5fbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzOwotCi0JZm9yIChsaXN0ID0gZGV2cy5uZXh0OyA7IGxpc3QgPSBsaXN0LT5uZXh0KSB7Ci0JCWlmIChsaXN0ID09ICZkZXZzKQotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCXMgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCBlczEzNzFfc3RhdGUsIGRldnMpOwotCQlpZiAocy0+Y29kZWMtPmRldl9taXhlciA9PSBtaW5vcikKLQkJCWJyZWFrOwotCX0KLSAgICAgICAJVkFMSURBVEVfU1RBVEUocyk7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKLQlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZXMxMzcxX3JlbGVhc2VfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnMgPSAoc3RydWN0IGVzMTM3MV9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQkKLQlWQUxJREFURV9TVEFURShzKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBlczEzNzFfaW9jdGxfbWl4ZGV2KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGFjOTdfY29kZWMgKmNvZGVjID0gcy0+Y29kZWM7Ci0KLQlyZXR1cm4gbWl4ZGV2X2lvY3RsKGNvZGVjLCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyAvKmNvbnN0Ki8gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlczEzNzFfbWl4ZXJfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLmxsc2VlawkJPSBub19sbHNlZWssCi0JLmlvY3RsCQk9IGVzMTM3MV9pb2N0bF9taXhkZXYsCi0JLm9wZW4JCT0gZXMxMzcxX29wZW5fbWl4ZGV2LAotCS5yZWxlYXNlCT0gZXMxMzcxX3JlbGVhc2VfbWl4ZGV2LAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgZHJhaW5fZGFjMShzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzLCBpbnQgbm9uYmxvY2spCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQsIHRtbzsKLQkKLQlpZiAocy0+ZG1hX2RhYzEubWFwcGVkIHx8ICFzLT5kbWFfZGFjMS5yZWFkeSkKLQkJcmV0dXJuIDA7Ci0gICAgICAgIGFkZF93YWl0X3F1ZXVlKCZzLT5kbWFfZGFjMS53YWl0LCAmd2FpdCk7Ci0gICAgICAgIGZvciAoOzspIHsKLQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50ID0gcy0+ZG1hX2RhYzEuY291bnQ7Ci0gICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoY291bnQgPD0gMCkKLQkJCWJyZWFrOwotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAobm9uYmxvY2spIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZV93YWl0X3F1ZXVlKCZzLT5kbWFfZGFjMS53YWl0LCAmd2FpdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgICAgICAgICB9Ci0JCXRtbyA9IDMgKiBIWiAqIChjb3VudCArIHMtPmRtYV9kYWMxLmZyYWdzaXplKSAvIDIgLyBzLT5kYWMxcmF0ZTsKLQkJdG1vID4+PSBzYW1wbGVfc2hpZnRbKHMtPnNjdHJsICYgU0NUUkxfUDFGTVQpID4+IFNDVFJMX1NIX1AxRk1UXTsKLQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KHRtbyArIDEpKQotCQkJREJHKHByaW50ayhLRVJOX0RFQlVHIFBGWCAiZGFjMSBkbWEgdGltZWQgb3V0Pz9cbiIpOykKLSAgICAgICAgfQotICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmcy0+ZG1hX2RhYzEud2FpdCwgJndhaXQpOwotICAgICAgICBzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwotICAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FUkVTVEFSVFNZUzsKLSAgICAgICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHJhaW5fZGFjMihzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzLCBpbnQgbm9uYmxvY2spCi17Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQsIHRtbzsKLQotCWlmIChzLT5kbWFfZGFjMi5tYXBwZWQgfHwgIXMtPmRtYV9kYWMyLnJlYWR5KQotCQlyZXR1cm4gMDsKLSAgICAgICAgYWRkX3dhaXRfcXVldWUoJnMtPmRtYV9kYWMyLndhaXQsICZ3YWl0KTsKLSAgICAgICAgZm9yICg7OykgewotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLSAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQljb3VudCA9IHMtPmRtYV9kYWMyLmNvdW50OwotICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvdW50IDw9IDApCi0JCQlicmVhazsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKG5vbmJsb2NrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfd2FpdF9xdWV1ZSgmcy0+ZG1hX2RhYzIud2FpdCwgJndhaXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgICAgICAgICAgICAgfQotCQl0bW8gPSAzICogSFogKiAoY291bnQgKyBzLT5kbWFfZGFjMi5mcmFnc2l6ZSkgLyAyIC8gcy0+ZGFjMnJhdGU7Ci0JCXRtbyA+Pj0gc2FtcGxlX3NoaWZ0WyhzLT5zY3RybCAmIFNDVFJMX1AyRk1UKSA+PiBTQ1RSTF9TSF9QMkZNVF07Ci0JCWlmICghc2NoZWR1bGVfdGltZW91dCh0bW8gKyAxKSkKLQkJCURCRyhwcmludGsoS0VSTl9ERUJVRyBQRlggImRhYzIgZG1hIHRpbWVkIG91dD8/XG4iKTspCi0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlX3dhaXRfcXVldWUoJnMtPmRtYV9kYWMyLndhaXQsICZ3YWl0KTsKLSAgICAgICAgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLSAgICAgICAgaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRVJFU1RBUlRTWVM7Ci0gICAgICAgIHJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHNzaXplX3QgZXMxMzcxX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnMgPSAoc3RydWN0IGVzMTM3MV9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzc2l6ZV90IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzd3B0cjsKLQlpbnQgY250OwotCi0JVkFMSURBVEVfU1RBVEUocyk7Ci0JaWYgKHMtPmRtYV9hZGMubWFwcGVkKQotCQlyZXR1cm4gLUVOWElPOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCW11dGV4X2xvY2soJnMtPnNlbSk7Ci0JaWYgKCFzLT5kbWFfYWRjLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQlnb3RvIG91dDI7Ci0JCi0JYWRkX3dhaXRfcXVldWUoJnMtPmRtYV9hZGMud2FpdCwgJndhaXQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJc3dwdHIgPSBzLT5kbWFfYWRjLnN3cHRyOwotCQljbnQgPSBzLT5kbWFfYWRjLmRtYXNpemUtc3dwdHI7Ci0JCWlmIChzLT5kbWFfYWRjLmNvdW50IDwgY250KQotCQkJY250ID0gcy0+ZG1hX2FkYy5jb3VudDsKLQkJaWYgKGNudCA8PSAwKQotCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjbnQgPiBjb3VudCkKLQkJCWNudCA9IGNvdW50OwotCQlpZiAoY250IDw9IDApIHsKLQkJCWlmIChzLT5kbWFfYWRjLmVuYWJsZWQpCi0JCQkJc3RhcnRfYWRjKHMpOwotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldCA9IC1FQUdBSU47Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQltdXRleF91bmxvY2soJnMtPnNlbSk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0JCQltdXRleF9sb2NrKCZzLT5zZW0pOwotCQkJaWYgKHMtPmRtYV9hZGMubWFwcGVkKQotCQkJewotCQkJCXJldCA9IC1FTlhJTzsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCBzLT5kbWFfYWRjLnJhd2J1ZiArIHN3cHRyLCBjbnQpKSB7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc3dwdHIgPSAoc3dwdHIgKyBjbnQpICUgcy0+ZG1hX2FkYy5kbWFzaXplOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlzLT5kbWFfYWRjLnN3cHRyID0gc3dwdHI7Ci0JCXMtPmRtYV9hZGMuY291bnQgLT0gY250OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50IC09IGNudDsKLQkJYnVmZmVyICs9IGNudDsKLQkJcmV0ICs9IGNudDsKLQkJaWYgKHMtPmRtYV9hZGMuZW5hYmxlZCkKLQkJCXN0YXJ0X2FkYyhzKTsKLQl9Ci1vdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZzLT5zZW0pOwotb3V0MjoKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+ZG1hX2FkYy53YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBlczEzNzFfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnMgPSAoc3RydWN0IGVzMTM3MV9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzc2l6ZV90IHJldDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHN3cHRyOwotCWludCBjbnQ7Ci0KLQlWQUxJREFURV9TVEFURShzKTsKLQlpZiAocy0+ZG1hX2RhYzIubWFwcGVkKQotCQlyZXR1cm4gLUVOWElPOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JbXV0ZXhfbG9jaygmcy0+c2VtKTsKLQlpZiAoIXMtPmRtYV9kYWMyLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMyKHMpKSkKLQkJZ290byBvdXQzOwotCXJldCA9IDA7Ci0JYWRkX3dhaXRfcXVldWUoJnMtPmRtYV9kYWMyLndhaXQsICZ3YWl0KTsKLQl3aGlsZSAoY291bnQgPiAwKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChzLT5kbWFfZGFjMi5jb3VudCA8IDApIHsKLQkJCXMtPmRtYV9kYWMyLmNvdW50ID0gMDsKLQkJCXMtPmRtYV9kYWMyLnN3cHRyID0gcy0+ZG1hX2RhYzIuaHdwdHI7Ci0JCX0KLQkJc3dwdHIgPSBzLT5kbWFfZGFjMi5zd3B0cjsKLQkJY250ID0gcy0+ZG1hX2RhYzIuZG1hc2l6ZS1zd3B0cjsKLQkJaWYgKHMtPmRtYV9kYWMyLmNvdW50ICsgY250ID4gcy0+ZG1hX2RhYzIuZG1hc2l6ZSkKLQkJCWNudCA9IHMtPmRtYV9kYWMyLmRtYXNpemUgLSBzLT5kbWFfZGFjMi5jb3VudDsKLQkJaWYgKGNudCA8PSAwKQotCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjbnQgPiBjb3VudCkKLQkJCWNudCA9IGNvdW50OwotCQlpZiAoY250IDw9IDApIHsKLQkJCWlmIChzLT5kbWFfZGFjMi5lbmFibGVkKQotCQkJCXN0YXJ0X2RhYzIocyk7Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJCQlpZiAoIXJldCkKLQkJCQkJcmV0ID0gLUVBR0FJTjsKLQkJCQlnb3RvIG91dDsKLQkJCX0JCi0JCQltdXRleF91bmxvY2soJnMtPnNlbSk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJaWYgKCFyZXQpCi0JCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKLQkJCQlnb3RvIG91dDI7Ci0JCQl9Ci0JCQltdXRleF9sb2NrKCZzLT5zZW0pOwotCQkJaWYgKHMtPmRtYV9kYWMyLm1hcHBlZCkKLQkJCXsKLQkJCQlyZXQgPSAtRU5YSU87Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIocy0+ZG1hX2RhYzIucmF3YnVmICsgc3dwdHIsIGJ1ZmZlciwgY250KSkgewotCQkJaWYgKCFyZXQpCi0JCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCXN3cHRyID0gKHN3cHRyICsgY250KSAlIHMtPmRtYV9kYWMyLmRtYXNpemU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXMtPmRtYV9kYWMyLnN3cHRyID0gc3dwdHI7Ci0JCXMtPmRtYV9kYWMyLmNvdW50ICs9IGNudDsKLQkJcy0+ZG1hX2RhYzIuZW5kY2xlYXJlZCA9IDA7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJY291bnQgLT0gY250OwotCQlidWZmZXIgKz0gY250OwotCQlyZXQgKz0gY250OwotCQlpZiAocy0+ZG1hX2RhYzIuZW5hYmxlZCkKLQkJCXN0YXJ0X2RhYzIocyk7Ci0JfQotb3V0OgotCW11dGV4X3VubG9jaygmcy0+c2VtKTsKLW91dDI6Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnMtPmRtYV9kYWMyLndhaXQsICZ3YWl0KTsKLW91dDM6CQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogTm8ga2VybmVsIGxvY2sgLSB3ZSBoYXZlIG91ciBvd24gc3BpbmxvY2sgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXMxMzcxX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlWQUxJREFURV9TVEFURShzKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJaWYgKCFzLT5kbWFfZGFjMi5yZWFkeSAmJiBwcm9nX2RtYWJ1Zl9kYWMyKHMpKQotCQkJcmV0dXJuIDA7Ci0JCXBvbGxfd2FpdChmaWxlLCAmcy0+ZG1hX2RhYzIud2FpdCwgd2FpdCk7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCWlmICghcy0+ZG1hX2FkYy5yZWFkeSAmJiBwcm9nX2RtYWJ1Zl9hZGMocykpCi0JCQlyZXR1cm4gMDsKLQkJcG9sbF93YWl0KGZpbGUsICZzLT5kbWFfYWRjLndhaXQsIHdhaXQpOwotCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCWVzMTM3MV91cGRhdGVfcHRyKHMpOwotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlpZiAocy0+ZG1hX2FkYy5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9hZGMuZnJhZ3NpemUpCi0JCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJaWYgKHMtPmRtYV9kYWMyLm1hcHBlZCkgewotCQkJaWYgKHMtPmRtYV9kYWMyLmNvdW50ID49IChzaWduZWQpcy0+ZG1hX2RhYzIuZnJhZ3NpemUpIAotCQkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHNpZ25lZClzLT5kbWFfZGFjMi5kbWFzaXplID49IHMtPmRtYV9kYWMyLmNvdW50ICsgKHNpZ25lZClzLT5kbWFfZGFjMi5mcmFnc2l6ZSkKLQkJCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbWFzazsKLX0KLQotc3RhdGljIGludCBlczEzNzFfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGVzMTM3MV9zdGF0ZSAqcyA9IChzdHJ1Y3QgZXMxMzcxX3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkbWFidWYgKmRiOwotCWludCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotCWxvY2tfa2VybmVsKCk7Ci0JbXV0ZXhfbG9jaygmcy0+c2VtKTsKLQkKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7Ci0JCWlmICgocmV0ID0gcHJvZ19kbWFidWZfZGFjMihzKSkgIT0gMCkgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZGIgPSAmcy0+ZG1hX2RhYzI7Ci0JfSBlbHNlIGlmICh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkgewotCQlpZiAoKHJldCA9IHByb2dfZG1hYnVmX2FkYyhzKSkgIT0gMCkgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJZGIgPSAmcy0+ZG1hX2FkYzsKLQl9IGVsc2UgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHZtYS0+dm1fcGdvZmYgIT0gMCkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0Jc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQlpZiAoc2l6ZSA+IChQQUdFX1NJWkUgPDwgZGItPmJ1Zm9yZGVyKSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkJdmlydF90b19waHlzKGRiLT5yYXdidWYpID4+IFBBR0VfU0hJRlQsCi0JCQkJc2l6ZSwgdm1hLT52bV9wYWdlX3Byb3QpKSB7Ci0JCXJldCA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OwotCX0KLQlkYi0+bWFwcGVkID0gMTsKLW91dDoKLQltdXRleF91bmxvY2soJnMtPnNlbSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgZXMxMzcxX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgYXVkaW9fYnVmX2luZm8gYWJpbmZvOwotICAgICAgICBjb3VudF9pbmZvIGNpbmZvOwotCWludCBjb3VudDsKLQlpbnQgdmFsLCBtYXBwZWQsIHJldDsKLQl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlpbnQgX191c2VyICpwID0gYXJncDsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotICAgICAgICBtYXBwZWQgPSAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJiBzLT5kbWFfZGFjMi5tYXBwZWQpIHx8Ci0JCSgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgJiYgcy0+ZG1hX2FkYy5tYXBwZWQpOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBPU1NfR0VUVkVSU0lPTjoKLQkJcmV0dXJuIHB1dF91c2VyKFNPVU5EX1ZFUlNJT04sIHApOwotCi0JY2FzZSBTTkRDVExfRFNQX1NZTkM6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKLQkJCXJldHVybiBkcmFpbl9kYWMyKHMsIDAvKmZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKi8pOwotCQlyZXR1cm4gMDsKLQkJCi0JY2FzZSBTTkRDVExfRFNQX1NFVERVUExFWDoKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFNORENUTF9EU1BfR0VUQ0FQUzoKLQkJcmV0dXJuIHB1dF91c2VyKERTUF9DQVBfRFVQTEVYIHwgRFNQX0NBUF9SRUFMVElNRSB8IERTUF9DQVBfVFJJR0dFUiB8IERTUF9DQVBfTU1BUCwgcCk7Ci0JCQotICAgICAgICBjYXNlIFNORENUTF9EU1BfUkVTRVQ6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJc3RvcF9kYWMyKHMpOwotCQkJc3luY2hyb25pemVfaXJxKHMtPmlycSk7Ci0JCQlzLT5kbWFfZGFjMi5zd3B0ciA9IHMtPmRtYV9kYWMyLmh3cHRyID0gcy0+ZG1hX2RhYzIuY291bnQgPSBzLT5kbWFfZGFjMi50b3RhbF9ieXRlcyA9IDA7Ci0JCX0KLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCXN0b3BfYWRjKHMpOwotCQkJc3luY2hyb25pemVfaXJxKHMtPmlycSk7Ci0JCQlzLT5kbWFfYWRjLnN3cHRyID0gcy0+ZG1hX2FkYy5od3B0ciA9IHMtPmRtYV9hZGMuY291bnQgPSBzLT5kbWFfYWRjLnRvdGFsX2J5dGVzID0gMDsKLQkJfQotCQlyZXR1cm4gMDsKLQotICAgICAgICBjYXNlIFNORENUTF9EU1BfU1BFRUQ6Ci0gICAgICAgICAgICAgICAgaWYgKGdldF91c2VyKHZhbCwgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCA+PSAwKSB7Ci0JCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQkJCXN0b3BfYWRjKHMpOwotCQkJCXMtPmRtYV9hZGMucmVhZHkgPSAwOwotCQkJCXNldF9hZGNfcmF0ZShzLCB2YWwpOwotCQkJfQotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQkJc3RvcF9kYWMyKHMpOwotCQkJCXMtPmRtYV9kYWMyLnJlYWR5ID0gMDsKLQkJCQlzZXRfZGFjMl9yYXRlKHMsIHZhbCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IHMtPmFkY3JhdGUgOiBzLT5kYWMycmF0ZSwgcCk7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NURVJFTzoKLQkJaWYgKGdldF91c2VyKHZhbCwgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCXN0b3BfYWRjKHMpOwotCQkJcy0+ZG1hX2FkYy5yZWFkeSA9IDA7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKHZhbCkKLQkJCQlzLT5zY3RybCB8PSBTQ1RSTF9SMVNNQjsKLQkJCWVsc2UKLQkJCQlzLT5zY3RybCAmPSB+U0NUUkxfUjFTTUI7Ci0JCQlvdXRsKHMtPnNjdHJsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXN0b3BfZGFjMihzKTsKLQkJCXMtPmRtYV9kYWMyLnJlYWR5ID0gMDsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAodmFsKQotCQkJCXMtPnNjdHJsIHw9IFNDVFJMX1AyU01COwotCQkJZWxzZQotCQkJCXMtPnNjdHJsICY9IH5TQ1RSTF9QMlNNQjsKLQkJCW91dGwocy0+c2N0cmwsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgIH0KLQkJcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0NIQU5ORUxTOgotICAgICAgICAgICAgICAgIGlmIChnZXRfdXNlcih2YWwsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgIT0gMCkgewotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCQlzdG9wX2FkYyhzKTsKLQkJCQlzLT5kbWFfYWRjLnJlYWR5ID0gMDsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJCWlmICh2YWwgPj0gMikKLQkJCQkJcy0+c2N0cmwgfD0gU0NUUkxfUjFTTUI7Ci0JCQkJZWxzZQotCQkJCQlzLT5zY3RybCAmPSB+U0NUUkxfUjFTTUI7Ci0JCQkJb3V0bChzLT5zY3RybCwgcy0+aW8rRVMxMzcxX1JFR19TRVJJQUxfQ09OVFJPTCk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJfQotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCQkJc3RvcF9kYWMyKHMpOwotCQkJCXMtPmRtYV9kYWMyLnJlYWR5ID0gMDsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJCWlmICh2YWwgPj0gMikKLQkJCQkJcy0+c2N0cmwgfD0gU0NUUkxfUDJTTUI7Ci0JCQkJZWxzZQotCQkJCQlzLT5zY3RybCAmPSB+U0NUUkxfUDJTTUI7Ci0JCQkJb3V0bChzLT5zY3RybCwgcy0+aW8rRVMxMzcxX1JFR19TRVJJQUxfQ09OVFJPTCk7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJfQotCQl9Ci0JCXJldHVybiBwdXRfdXNlcigocy0+c2N0cmwgJiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gU0NUUkxfUjFTTUIgOiBTQ1RSTF9QMlNNQikpID8gMiA6IDEsIHApOwotCQkKLQljYXNlIFNORENUTF9EU1BfR0VURk1UUzogLyogUmV0dXJucyBhIG1hc2sgKi8KLSAgICAgICAgICAgICAgICByZXR1cm4gcHV0X3VzZXIoQUZNVF9TMTZfTEV8QUZNVF9VOCwgcCk7Ci0JCQotCWNhc2UgU05EQ1RMX0RTUF9TRVRGTVQ6IC8qIFNlbGVjdHMgT05FIGZtdCovCi0JCWlmIChnZXRfdXNlcih2YWwsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgIT0gQUZNVF9RVUVSWSkgewotCQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCQlzdG9wX2FkYyhzKTsKLQkJCQlzLT5kbWFfYWRjLnJlYWR5ID0gMDsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJCWlmICh2YWwgPT0gQUZNVF9TMTZfTEUpCi0JCQkJCXMtPnNjdHJsIHw9IFNDVFJMX1IxU0VCOwotCQkJCWVsc2UKLQkJCQkJcy0+c2N0cmwgJj0gflNDVFJMX1IxU0VCOwotCQkJCW91dGwocy0+c2N0cmwsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCX0KLQkJCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJCXN0b3BfZGFjMihzKTsKLQkJCQlzLT5kbWFfZGFjMi5yZWFkeSA9IDA7Ci0JCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCQlpZiAodmFsID09IEFGTVRfUzE2X0xFKQotCQkJCQlzLT5zY3RybCB8PSBTQ1RSTF9QMlNFQjsKLQkJCQllbHNlCi0JCQkJCXMtPnNjdHJsICY9IH5TQ1RSTF9QMlNFQjsKLQkJCQlvdXRsKHMtPnNjdHJsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKChzLT5zY3RybCAmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBTQ1RSTF9SMVNFQiA6IFNDVFJMX1AyU0VCKSkgPyAKLQkJCQlBRk1UX1MxNl9MRSA6IEFGTVRfVTgsIHApOwotCQkKLQljYXNlIFNORENUTF9EU1BfUE9TVDoKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBjYXNlIFNORENUTF9EU1BfR0VUVFJJR0dFUjoKLQkJdmFsID0gMDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQgJiYgcy0+Y3RybCAmIENUUkxfQURDX0VOKSAKLQkJCXZhbCB8PSBQQ01fRU5BQkxFX0lOUFVUOwotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYgcy0+Y3RybCAmIENUUkxfREFDMl9FTikgCi0JCQl2YWwgfD0gUENNX0VOQUJMRV9PVVRQVVQ7Ci0JCXJldHVybiBwdXRfdXNlcih2YWwsIHApOwotCQkKLQljYXNlIFNORENUTF9EU1BfU0VUVFJJR0dFUjoKLQkJaWYgKGdldF91c2VyKHZhbCwgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJCWlmICh2YWwgJiBQQ01fRU5BQkxFX0lOUFVUKSB7Ci0JCQkJaWYgKCFzLT5kbWFfYWRjLnJlYWR5ICYmIChyZXQgPSBwcm9nX2RtYWJ1Zl9hZGMocykpKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJCXMtPmRtYV9hZGMuZW5hYmxlZCA9IDE7Ci0JCQkJc3RhcnRfYWRjKHMpOwotCQkJfSBlbHNlIHsKLQkJCQlzLT5kbWFfYWRjLmVuYWJsZWQgPSAwOwotCQkJCXN0b3BfYWRjKHMpOwotCQkJfQotCQl9Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJaWYgKHZhbCAmIFBDTV9FTkFCTEVfT1VUUFVUKSB7Ci0JCQkJaWYgKCFzLT5kbWFfZGFjMi5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfZGFjMihzKSkpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQkJcy0+ZG1hX2RhYzIuZW5hYmxlZCA9IDE7Ci0JCQkJc3RhcnRfZGFjMihzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcy0+ZG1hX2RhYzIuZW5hYmxlZCA9IDA7Ci0JCQkJc3RvcF9kYWMyKHMpOwotCQkJfQotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVE9TUEFDRToKLQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICghcy0+ZG1hX2RhYzIucmVhZHkgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2RhYzIocykpICE9IDApCi0JCQlyZXR1cm4gdmFsOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQllczEzNzFfdXBkYXRlX3B0cihzKTsKLQkJYWJpbmZvLmZyYWdzaXplID0gcy0+ZG1hX2RhYzIuZnJhZ3NpemU7Ci0JCWNvdW50ID0gcy0+ZG1hX2RhYzIuY291bnQ7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgYWJpbmZvLmJ5dGVzID0gcy0+ZG1hX2RhYzIuZG1hc2l6ZSAtIGNvdW50OwotICAgICAgICAgICAgICAgIGFiaW5mby5mcmFnc3RvdGFsID0gcy0+ZG1hX2RhYzIubnVtZnJhZzsKLSAgICAgICAgICAgICAgICBhYmluZm8uZnJhZ21lbnRzID0gYWJpbmZvLmJ5dGVzID4+IHMtPmRtYV9kYWMyLmZyYWdzaGlmdDsgICAgICAKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZhYmluZm8sIHNpemVvZihhYmluZm8pKSA/IC1FRkFVTFQgOiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVElTUEFDRToKLQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFzLT5kbWFfYWRjLnJlYWR5ICYmICh2YWwgPSBwcm9nX2RtYWJ1Zl9hZGMocykpICE9IDApCi0JCQlyZXR1cm4gdmFsOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQllczEzNzFfdXBkYXRlX3B0cihzKTsKLQkJYWJpbmZvLmZyYWdzaXplID0gcy0+ZG1hX2FkYy5mcmFnc2l6ZTsKLQkJY291bnQgPSBzLT5kbWFfYWRjLmNvdW50OwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwotICAgICAgICAgICAgICAgIGFiaW5mby5ieXRlcyA9IGNvdW50OwotICAgICAgICAgICAgICAgIGFiaW5mby5mcmFnc3RvdGFsID0gcy0+ZG1hX2FkYy5udW1mcmFnOwotICAgICAgICAgICAgICAgIGFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gcy0+ZG1hX2FkYy5mcmFnc2hpZnQ7ICAgICAgCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJcmV0dXJuIGNvcHlfdG9fdXNlcihhcmdwLCAmYWJpbmZvLCBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKLQkJCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9OT05CTE9DSzoKLSAgICAgICAgICAgICAgICBmaWxlLT5mX2ZsYWdzIHw9IE9fTk9OQkxPQ0s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVE9ERUxBWToKLQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICghcy0+ZG1hX2RhYzIucmVhZHkgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2RhYzIocykpICE9IDApCi0JCQlyZXR1cm4gdmFsOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQllczEzNzFfdXBkYXRlX3B0cihzKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IHMtPmRtYV9kYWMyLmNvdW50OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0JCXJldHVybiBwdXRfdXNlcihjb3VudCwgcCk7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVElQVFI6Ci0JCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmICghcy0+ZG1hX2FkYy5yZWFkeSAmJiAodmFsID0gcHJvZ19kbWFidWZfYWRjKHMpKSAhPSAwKQotCQkJcmV0dXJuIHZhbDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJZXMxMzcxX3VwZGF0ZV9wdHIocyk7Ci0gICAgICAgICAgICAgICAgY2luZm8uYnl0ZXMgPSBzLT5kbWFfYWRjLnRvdGFsX2J5dGVzOwotCQljb3VudCA9IHMtPmRtYV9hZGMuY291bnQ7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgY2luZm8uYmxvY2tzID0gY291bnQgPj4gcy0+ZG1hX2FkYy5mcmFnc2hpZnQ7Ci0gICAgICAgICAgICAgICAgY2luZm8ucHRyID0gcy0+ZG1hX2FkYy5od3B0cjsKLQkJaWYgKHMtPmRtYV9hZGMubWFwcGVkKQotCQkJcy0+ZG1hX2FkYy5jb3VudCAmPSBzLT5kbWFfYWRjLmZyYWdzaXplLTE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY2luZm8sIHNpemVvZihjaW5mbykpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9HRVRPUFRSOgotCQlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKCFzLT5kbWFfZGFjMi5yZWFkeSAmJiAodmFsID0gcHJvZ19kbWFidWZfZGFjMihzKSkgIT0gMCkKLQkJCXJldHVybiB2YWw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWVzMTM3MV91cGRhdGVfcHRyKHMpOwotICAgICAgICAgICAgICAgIGNpbmZvLmJ5dGVzID0gcy0+ZG1hX2RhYzIudG90YWxfYnl0ZXM7Ci0JCWNvdW50ID0gcy0+ZG1hX2RhYzIuY291bnQ7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0gICAgICAgICAgICAgICAgY2luZm8uYmxvY2tzID0gY291bnQgPj4gcy0+ZG1hX2RhYzIuZnJhZ3NoaWZ0OwotICAgICAgICAgICAgICAgIGNpbmZvLnB0ciA9IHMtPmRtYV9kYWMyLmh3cHRyOwotCQlpZiAocy0+ZG1hX2RhYzIubWFwcGVkKQotCQkJcy0+ZG1hX2RhYzIuY291bnQgJj0gcy0+ZG1hX2RhYzIuZnJhZ3NpemUtMTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlpZiAoY29weV90b191c2VyKGFyZ3AsICZjaW5mbywgc2l6ZW9mKGNpbmZvKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQkJaWYgKCh2YWwgPSBwcm9nX2RtYWJ1Zl9kYWMyKHMpKSkKLQkJCQlyZXR1cm4gdmFsOwotCQkJcmV0dXJuIHB1dF91c2VyKHMtPmRtYV9kYWMyLmZyYWdzaXplLCBwKTsKLQkJfQotCQlpZiAoKHZhbCA9IHByb2dfZG1hYnVmX2FkYyhzKSkpCi0JCQlyZXR1cm4gdmFsOwotCQlyZXR1cm4gcHV0X3VzZXIocy0+ZG1hX2FkYy5mcmFnc2l6ZSwgcCk7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOgotICAgICAgICAgICAgICAgIGlmIChnZXRfdXNlcih2YWwsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCQlzLT5kbWFfYWRjLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJCXMtPmRtYV9hZGMub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKLQkJCWlmIChzLT5kbWFfYWRjLm9zc2ZyYWdzaGlmdCA8IDQpCi0JCQkJcy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPSA0OwotCQkJaWYgKHMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID4gMTUpCi0JCQkJcy0+ZG1hX2FkYy5vc3NmcmFnc2hpZnQgPSAxNTsKLQkJCWlmIChzLT5kbWFfYWRjLm9zc21heGZyYWdzIDwgNCkKLQkJCQlzLT5kbWFfYWRjLm9zc21heGZyYWdzID0gNDsKLQkJfQotCQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJCXMtPmRtYV9kYWMyLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJCXMtPmRtYV9kYWMyLm9zc21heGZyYWdzID0gKHZhbCA+PiAxNikgJiAweGZmZmY7Ci0JCQlpZiAocy0+ZG1hX2RhYzIub3NzZnJhZ3NoaWZ0IDwgNCkKLQkJCQlzLT5kbWFfZGFjMi5vc3NmcmFnc2hpZnQgPSA0OwotCQkJaWYgKHMtPmRtYV9kYWMyLm9zc2ZyYWdzaGlmdCA+IDE1KQotCQkJCXMtPmRtYV9kYWMyLm9zc2ZyYWdzaGlmdCA9IDE1OwotCQkJaWYgKHMtPmRtYV9kYWMyLm9zc21heGZyYWdzIDwgNCkKLQkJCQlzLT5kbWFfZGFjMi5vc3NtYXhmcmFncyA9IDQ7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NVQkRJVklERToKLQkJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEICYmIHMtPmRtYV9hZGMuc3ViZGl2aXNpb24pIHx8Ci0JCSAgICAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYgcy0+ZG1hX2RhYzIuc3ViZGl2aXNpb24pKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgaWYgKGdldF91c2VyKHZhbCwgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCAhPSAxICYmIHZhbCAhPSAyICYmIHZhbCAhPSA0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQkJcy0+ZG1hX2FkYy5zdWJkaXZpc2lvbiA9IHZhbDsKLQkJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQotCQkJcy0+ZG1hX2RhYzIuc3ViZGl2aXNpb24gPSB2YWw7Ci0JCXJldHVybiAwOwotCi0gICAgICAgIGNhc2UgU09VTkRfUENNX1JFQURfUkFURToKLQkJcmV0dXJuIHB1dF91c2VyKChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSA/IHMtPmFkY3JhdGUgOiBzLT5kYWMycmF0ZSwgcCk7Ci0KLSAgICAgICAgY2FzZSBTT1VORF9QQ01fUkVBRF9DSEFOTkVMUzoKLQkJcmV0dXJuIHB1dF91c2VyKChzLT5zY3RybCAmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPyBTQ1RSTF9SMVNNQiA6IFNDVFJMX1AyU01CKSkgPyAyIDogMSwgcCk7Ci0JCQotICAgICAgICBjYXNlIFNPVU5EX1BDTV9SRUFEX0JJVFM6Ci0JCXJldHVybiBwdXRfdXNlcigocy0+c2N0cmwgJiAoKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpID8gU0NUUkxfUjFTRUIgOiBTQ1RSTF9QMlNFQikpID8gMTYgOiA4LCBwKTsKLQotICAgICAgICBjYXNlIFNPVU5EX1BDTV9XUklURV9GSUxURVI6Ci0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TRVRTWU5DUk86Ci0gICAgICAgIGNhc2UgU09VTkRfUENNX1JFQURfRklMVEVSOgotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotCQkKLQl9Ci0JcmV0dXJuIG1peGRldl9pb2N0bChzLT5jb2RlYywgY21kLCBhcmcpOwotfQotCi1zdGF0aWMgaW50IGVzMTM3MV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnM7Ci0KLQlmb3IgKGxpc3QgPSBkZXZzLm5leHQ7IDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKLQkJaWYgKGxpc3QgPT0gJmRldnMpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJcyA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGVzMTM3MV9zdGF0ZSwgZGV2cyk7Ci0JCWlmICghKChzLT5kZXZfYXVkaW8gXiBtaW5vcikgJiB+MHhmKSkKLQkJCWJyZWFrOwotCX0KLSAgICAgICAJVkFMSURBVEVfU1RBVEUocyk7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKLQkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKLQl3aGlsZSAocy0+b3Blbl9tb2RlICYgZmlsZS0+Zl9tb2RlKSB7Ci0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXMtPmRtYV9hZGMub3NzZnJhZ3NoaWZ0ID0gcy0+ZG1hX2FkYy5vc3NtYXhmcmFncyA9IHMtPmRtYV9hZGMuc3ViZGl2aXNpb24gPSAwOwotCQlzLT5kbWFfYWRjLmVuYWJsZWQgPSAxOwotCQlzZXRfYWRjX3JhdGUocywgODAwMCk7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlzLT5kbWFfZGFjMi5vc3NmcmFnc2hpZnQgPSBzLT5kbWFfZGFjMi5vc3NtYXhmcmFncyA9IHMtPmRtYV9kYWMyLnN1YmRpdmlzaW9uID0gMDsKLQkJcy0+ZG1hX2RhYzIuZW5hYmxlZCA9IDE7Ci0JCXNldF9kYWMyX3JhdGUocywgODAwMCk7Ci0JfQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJcy0+c2N0cmwgJj0gflNDVFJMX1IxRk1UOwotCQlpZiAoKG1pbm9yICYgMHhmKSA9PSBTTkRfREVWX0RTUDE2KQotCQkJcy0+c2N0cmwgfD0gRVMxMzcxX0ZNVF9TMTZfTU9OTyA8PCBTQ1RSTF9TSF9SMUZNVDsKLQkJZWxzZQotCQkJcy0+c2N0cmwgfD0gRVMxMzcxX0ZNVF9VOF9NT05PIDw8IFNDVFJMX1NIX1IxRk1UOwotCX0KLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJcy0+c2N0cmwgJj0gflNDVFJMX1AyRk1UOwotCQlpZiAoKG1pbm9yICYgMHhmKSA9PSBTTkRfREVWX0RTUDE2KQotCQkJcy0+c2N0cmwgfD0gRVMxMzcxX0ZNVF9TMTZfTU9OTyA8PCBTQ1RSTF9TSF9QMkZNVDsKLQkJZWxzZQotCQkJcy0+c2N0cmwgfD0gRVMxMzcxX0ZNVF9VOF9NT05PIDw8IFNDVFJMX1NIX1AyRk1UOwotCX0KLQlvdXRsKHMtPnNjdHJsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jcy0+b3Blbl9tb2RlIHw9IGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUpOwotCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JbXV0ZXhfaW5pdCgmcy0+c2VtKTsKLQlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZXMxMzcxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGVzMTM3MV9zdGF0ZSAqcyA9IChzdHJ1Y3QgZXMxMzcxX3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JVkFMSURBVEVfU1RBVEUocyk7Ci0JbG9ja19rZXJuZWwoKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCWRyYWluX2RhYzIocywgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwotCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlzdG9wX2RhYzIocyk7Ci0JCWRlYWxsb2NfZG1hYnVmKHMsICZzLT5kbWFfZGFjMik7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7Ci0JCXN0b3BfYWRjKHMpOwotCQlkZWFsbG9jX2RtYWJ1ZihzLCAmcy0+ZG1hX2FkYyk7Ci0JfQotCXMtPm9wZW5fbW9kZSAmPSB+KGZpbGUtPmZfbW9kZSAmIChGTU9ERV9SRUFEfEZNT0RFX1dSSVRFKSk7Ci0JbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKLQl3YWtlX3VwKCZzLT5vcGVuX3dhaXQpOwotCXVubG9ja19rZXJuZWwoKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIC8qY29uc3QqLyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVzMTM3MV9hdWRpb19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkucmVhZAkJPSBlczEzNzFfcmVhZCwKLQkud3JpdGUJCT0gZXMxMzcxX3dyaXRlLAotCS5wb2xsCQk9IGVzMTM3MV9wb2xsLAotCS5pb2N0bAkJPSBlczEzNzFfaW9jdGwsCi0JLm1tYXAJCT0gZXMxMzcxX21tYXAsCi0JLm9wZW4JCT0gZXMxMzcxX29wZW4sCi0JLnJlbGVhc2UJPSBlczEzNzFfcmVsZWFzZSwKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3NpemVfdCBlczEzNzFfd3JpdGVfZGFjKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3NpemVfdCByZXQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgc3dwdHI7Ci0JaW50IGNudDsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotCWlmIChzLT5kbWFfZGFjMS5tYXBwZWQpCi0JCXJldHVybiAtRU5YSU87Ci0JaWYgKCFzLT5kbWFfZGFjMS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfZGFjMShzKSkpCi0JCXJldHVybiByZXQ7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZmZlciwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlhZGRfd2FpdF9xdWV1ZSgmcy0+ZG1hX2RhYzEud2FpdCwgJndhaXQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHMtPmRtYV9kYWMxLmNvdW50IDwgMCkgewotCQkJcy0+ZG1hX2RhYzEuY291bnQgPSAwOwotCQkJcy0+ZG1hX2RhYzEuc3dwdHIgPSBzLT5kbWFfZGFjMS5od3B0cjsKLQkJfQotCQlzd3B0ciA9IHMtPmRtYV9kYWMxLnN3cHRyOwotCQljbnQgPSBzLT5kbWFfZGFjMS5kbWFzaXplLXN3cHRyOwotCQlpZiAocy0+ZG1hX2RhYzEuY291bnQgKyBjbnQgPiBzLT5kbWFfZGFjMS5kbWFzaXplKQotCQkJY250ID0gcy0+ZG1hX2RhYzEuZG1hc2l6ZSAtIHMtPmRtYV9kYWMxLmNvdW50OwotCQlpZiAoY250IDw9IDApCi0JCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNudCA+IGNvdW50KQotCQkJY250ID0gY291bnQ7Ci0JCWlmIChjbnQgPD0gMCkgewotCQkJaWYgKHMtPmRtYV9kYWMxLmVuYWJsZWQpCi0JCQkJc3RhcnRfZGFjMShzKTsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc2NoZWR1bGUoKTsKLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIocy0+ZG1hX2RhYzEucmF3YnVmICsgc3dwdHIsIGJ1ZmZlciwgY250KSkgewotCQkJaWYgKCFyZXQpCi0JCQkJcmV0ID0gLUVGQVVMVDsKLQkJCWJyZWFrOwotCQl9Ci0JCXN3cHRyID0gKHN3cHRyICsgY250KSAlIHMtPmRtYV9kYWMxLmRtYXNpemU7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXMtPmRtYV9kYWMxLnN3cHRyID0gc3dwdHI7Ci0JCXMtPmRtYV9kYWMxLmNvdW50ICs9IGNudDsKLQkJcy0+ZG1hX2RhYzEuZW5kY2xlYXJlZCA9IDA7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJY291bnQgLT0gY250OwotCQlidWZmZXIgKz0gY250OwotCQlyZXQgKz0gY250OwotCQlpZiAocy0+ZG1hX2RhYzEuZW5hYmxlZCkKLQkJCXN0YXJ0X2RhYzEocyk7Ci0JfQotCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5kbWFfZGFjMS53YWl0LCAmd2FpdCk7Ci0Jc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBObyBrZXJuZWwgbG9jayAtIHdlIGhhdmUgb3VyIG93biBzcGlubG9jayAqLwotc3RhdGljIHVuc2lnbmVkIGludCBlczEzNzFfcG9sbF9kYWMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlWQUxJREFURV9TVEFURShzKTsKLQlpZiAoIXMtPmRtYV9kYWMxLnJlYWR5ICYmIHByb2dfZG1hYnVmX2RhYzEocykpCi0JCXJldHVybiAwOwotCXBvbGxfd2FpdChmaWxlLCAmcy0+ZG1hX2RhYzEud2FpdCwgd2FpdCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQllczEzNzFfdXBkYXRlX3B0cihzKTsKLQlpZiAocy0+ZG1hX2RhYzEubWFwcGVkKSB7Ci0JCWlmIChzLT5kbWFfZGFjMS5jb3VudCA+PSAoc2lnbmVkKXMtPmRtYV9kYWMxLmZyYWdzaXplKQotCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQl9IGVsc2UgewotCQlpZiAoKHNpZ25lZClzLT5kbWFfZGFjMS5kbWFzaXplID49IHMtPmRtYV9kYWMxLmNvdW50ICsgKHNpZ25lZClzLT5kbWFfZGFjMS5mcmFnc2l6ZSkKLQkJCW1hc2sgfD0gUE9MTE9VVCB8IFBPTExXUk5PUk07Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbWFzazsKLX0KLQotc3RhdGljIGludCBlczEzNzFfbW1hcF9kYWMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnMgPSAoc3RydWN0IGVzMTM3MV9zdGF0ZSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCi0JCXJldHVybiAtRUlOVkFMOwotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKChyZXQgPSBwcm9nX2RtYWJ1Zl9kYWMxKHMpKSAhPSAwKQotCQlnb3RvIG91dDsKLQlyZXQgPSAtRUlOVkFMOwotCWlmICh2bWEtPnZtX3Bnb2ZmICE9IDApCi0JCWdvdG8gb3V0OwotCXNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JaWYgKHNpemUgPiAoUEFHRV9TSVpFIDw8IHMtPmRtYV9kYWMxLmJ1Zm9yZGVyKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gLUVBR0FJTjsKLQlpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKLQkJCXZpcnRfdG9fcGh5cyhzLT5kbWFfZGFjMS5yYXdidWYpID4+IFBBR0VfU0hJRlQsCi0JCQlzaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCkpCi0JCWdvdG8gb3V0OwotCXMtPmRtYV9kYWMxLm1hcHBlZCA9IDE7Ci0JcmV0ID0gMDsKLW91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBlczEzNzFfaW9jdGxfZGFjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgYXVkaW9fYnVmX2luZm8gYWJpbmZvOwotICAgICAgICBjb3VudF9pbmZvIGNpbmZvOwotCWludCBjb3VudDsKLQlpbnQgdmFsLCByZXQ7Ci0JaW50IF9fdXNlciAqcCA9IChpbnQgX191c2VyICopYXJnOwotCi0JVkFMSURBVEVfU1RBVEUocyk7Ci0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIE9TU19HRVRWRVJTSU9OOgotCQlyZXR1cm4gcHV0X3VzZXIoU09VTkRfVkVSU0lPTiwgcCk7Ci0KLQljYXNlIFNORENUTF9EU1BfU1lOQzoKLQkJcmV0dXJuIGRyYWluX2RhYzEocywgMC8qZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sqLyk7Ci0JCQotCWNhc2UgU05EQ1RMX0RTUF9TRVREVVBMRVg6Ci0JCXJldHVybiAtRUlOVkFMOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVENBUFM6Ci0JCXJldHVybiBwdXRfdXNlcihEU1BfQ0FQX1JFQUxUSU1FIHwgRFNQX0NBUF9UUklHR0VSIHwgRFNQX0NBUF9NTUFQLCBwKTsKLQkJCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9SRVNFVDoKLQkJc3RvcF9kYWMxKHMpOwotCQlzeW5jaHJvbml6ZV9pcnEocy0+aXJxKTsKLQkJcy0+ZG1hX2RhYzEuc3dwdHIgPSBzLT5kbWFfZGFjMS5od3B0ciA9IHMtPmRtYV9kYWMxLmNvdW50ID0gcy0+ZG1hX2RhYzEudG90YWxfYnl0ZXMgPSAwOwotCQlyZXR1cm4gMDsKLQotICAgICAgICBjYXNlIFNORENUTF9EU1BfU1BFRUQ6Ci0gICAgICAgICAgICAgICAgaWYgKGdldF91c2VyKHZhbCwgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCA+PSAwKSB7Ci0JCQlzdG9wX2RhYzEocyk7Ci0JCQlzLT5kbWFfZGFjMS5yZWFkeSA9IDA7Ci0JCQlzZXRfZGFjMV9yYXRlKHMsIHZhbCk7Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKHMtPmRhYzFyYXRlLCBwKTsKLQotICAgICAgICBjYXNlIFNORENUTF9EU1BfU1RFUkVPOgotCQlpZiAoZ2V0X3VzZXIodmFsLCBwKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlzdG9wX2RhYzEocyk7Ci0JCXMtPmRtYV9kYWMxLnJlYWR5ID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKHZhbCkKLQkJCXMtPnNjdHJsIHw9IFNDVFJMX1AxU01COwotCQllbHNlCi0JCQlzLT5zY3RybCAmPSB+U0NUUkxfUDFTTUI7Ci0JCW91dGwocy0+c2N0cmwsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAwOwotCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9DSEFOTkVMUzoKLSAgICAgICAgICAgICAgICBpZiAoZ2V0X3VzZXIodmFsLCBwKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlpZiAodmFsICE9IDApIHsKLQkJCXN0b3BfZGFjMShzKTsKLQkJCXMtPmRtYV9kYWMxLnJlYWR5ID0gMDsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCQlpZiAodmFsID49IDIpCi0JCQkJcy0+c2N0cmwgfD0gU0NUUkxfUDFTTUI7Ci0JCQllbHNlCi0JCQkJcy0+c2N0cmwgJj0gflNDVFJMX1AxU01COwotCQkJb3V0bChzLT5zY3RybCwgcy0+aW8rRVMxMzcxX1JFR19TRVJJQUxfQ09OVFJPTCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKChzLT5zY3RybCAmIFNDVFJMX1AxU01CKSA/IDIgOiAxLCBwKTsKLQkJCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9HRVRGTVRTOiAvKiBSZXR1cm5zIGEgbWFzayAqLwotICAgICAgICAgICAgICAgIHJldHVybiBwdXRfdXNlcihBRk1UX1MxNl9MRXxBRk1UX1U4LCBwKTsKLQkJCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9TRVRGTVQ6IC8qIFNlbGVjdHMgT05FIGZtdCovCi0JCWlmIChnZXRfdXNlcih2YWwsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgIT0gQUZNVF9RVUVSWSkgewotCQkJc3RvcF9kYWMxKHMpOwotCQkJcy0+ZG1hX2RhYzEucmVhZHkgPSAwOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCWlmICh2YWwgPT0gQUZNVF9TMTZfTEUpCi0JCQkJcy0+c2N0cmwgfD0gU0NUUkxfUDFTRUI7Ci0JCQllbHNlCi0JCQkJcy0+c2N0cmwgJj0gflNDVFJMX1AxU0VCOwotCQkJb3V0bChzLT5zY3RybCwgcy0+aW8rRVMxMzcxX1JFR19TRVJJQUxfQ09OVFJPTCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCX0KLQkJcmV0dXJuIHB1dF91c2VyKChzLT5zY3RybCAmIFNDVFJMX1AxU0VCKSA/IEFGTVRfUzE2X0xFIDogQUZNVF9VOCwgcCk7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1BPU1Q6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVFRSSUdHRVI6Ci0JCXJldHVybiBwdXRfdXNlcigocy0+Y3RybCAmIENUUkxfREFDMV9FTikgPyBQQ01fRU5BQkxFX09VVFBVVCA6IDAsIHApOwotCQkJCQkJCi0JY2FzZSBTTkRDVExfRFNQX1NFVFRSSUdHRVI6Ci0JCWlmIChnZXRfdXNlcih2YWwsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmICh2YWwgJiBQQ01fRU5BQkxFX09VVFBVVCkgewotCQkJaWYgKCFzLT5kbWFfZGFjMS5yZWFkeSAmJiAocmV0ID0gcHJvZ19kbWFidWZfZGFjMShzKSkpCi0JCQkJcmV0dXJuIHJldDsKLQkJCXMtPmRtYV9kYWMxLmVuYWJsZWQgPSAxOwotCQkJc3RhcnRfZGFjMShzKTsKLQkJfSBlbHNlIHsKLQkJCXMtPmRtYV9kYWMxLmVuYWJsZWQgPSAwOwotCQkJc3RvcF9kYWMxKHMpOwotCQl9Ci0JCXJldHVybiAwOwotCi0JY2FzZSBTTkRDVExfRFNQX0dFVE9TUEFDRToKLQkJaWYgKCFzLT5kbWFfZGFjMS5yZWFkeSAmJiAodmFsID0gcHJvZ19kbWFidWZfZGFjMShzKSkgIT0gMCkKLQkJCXJldHVybiB2YWw7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWVzMTM3MV91cGRhdGVfcHRyKHMpOwotCQlhYmluZm8uZnJhZ3NpemUgPSBzLT5kbWFfZGFjMS5mcmFnc2l6ZTsKLQkJY291bnQgPSBzLT5kbWFfZGFjMS5jb3VudDsKLQkJaWYgKGNvdW50IDwgMCkKLQkJCWNvdW50ID0gMDsKLSAgICAgICAgICAgICAgICBhYmluZm8uYnl0ZXMgPSBzLT5kbWFfZGFjMS5kbWFzaXplIC0gY291bnQ7Ci0gICAgICAgICAgICAgICAgYWJpbmZvLmZyYWdzdG90YWwgPSBzLT5kbWFfZGFjMS5udW1mcmFnOwotICAgICAgICAgICAgICAgIGFiaW5mby5mcmFnbWVudHMgPSBhYmluZm8uYnl0ZXMgPj4gcy0+ZG1hX2RhYzEuZnJhZ3NoaWZ0OyAgICAgIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiBjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJnLCAmYWJpbmZvLCBzaXplb2YoYWJpbmZvKSkgPyAtRUZBVUxUIDogMDsKLQotICAgICAgICBjYXNlIFNORENUTF9EU1BfTk9OQkxPQ0s6Ci0gICAgICAgICAgICAgICAgZmlsZS0+Zl9mbGFncyB8PSBPX05PTkJMT0NLOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotCi0gICAgICAgIGNhc2UgU05EQ1RMX0RTUF9HRVRPREVMQVk6Ci0JCWlmICghcy0+ZG1hX2RhYzEucmVhZHkgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2RhYzEocykpICE9IDApCi0JCQlyZXR1cm4gdmFsOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQllczEzNzFfdXBkYXRlX3B0cihzKTsKLSAgICAgICAgICAgICAgICBjb3VudCA9IHMtPmRtYV9kYWMxLmNvdW50OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjb3VudCA8IDApCi0JCQljb3VudCA9IDA7Ci0JCXJldHVybiBwdXRfdXNlcihjb3VudCwgcCk7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVE9QVFI6Ci0JCWlmICghcy0+ZG1hX2RhYzEucmVhZHkgJiYgKHZhbCA9IHByb2dfZG1hYnVmX2RhYzEocykpICE9IDApCi0JCQlyZXR1cm4gdmFsOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQllczEzNzFfdXBkYXRlX3B0cihzKTsKLSAgICAgICAgICAgICAgICBjaW5mby5ieXRlcyA9IHMtPmRtYV9kYWMxLnRvdGFsX2J5dGVzOwotCQljb3VudCA9IHMtPmRtYV9kYWMxLmNvdW50OwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwotICAgICAgICAgICAgICAgIGNpbmZvLmJsb2NrcyA9IGNvdW50ID4+IHMtPmRtYV9kYWMxLmZyYWdzaGlmdDsKLSAgICAgICAgICAgICAgICBjaW5mby5wdHIgPSBzLT5kbWFfZGFjMS5od3B0cjsKLQkJaWYgKHMtPmRtYV9kYWMxLm1hcHBlZCkKLQkJCXMtPmRtYV9kYWMxLmNvdW50ICY9IHMtPmRtYV9kYWMxLmZyYWdzaXplLTE7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZjaW5mbywgc2l6ZW9mKGNpbmZvKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX0dFVEJMS1NJWkU6Ci0JCWlmICgodmFsID0gcHJvZ19kbWFidWZfZGFjMShzKSkpCi0JCQlyZXR1cm4gdmFsOwotICAgICAgICAgICAgICAgIHJldHVybiBwdXRfdXNlcihzLT5kbWFfZGFjMS5mcmFnc2l6ZSwgcCk7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UOgotICAgICAgICAgICAgICAgIGlmIChnZXRfdXNlcih2YWwsIHApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXMtPmRtYV9kYWMxLm9zc2ZyYWdzaGlmdCA9IHZhbCAmIDB4ZmZmZjsKLQkJcy0+ZG1hX2RhYzEub3NzbWF4ZnJhZ3MgPSAodmFsID4+IDE2KSAmIDB4ZmZmZjsKLQkJaWYgKHMtPmRtYV9kYWMxLm9zc2ZyYWdzaGlmdCA8IDQpCi0JCQlzLT5kbWFfZGFjMS5vc3NmcmFnc2hpZnQgPSA0OwotCQlpZiAocy0+ZG1hX2RhYzEub3NzZnJhZ3NoaWZ0ID4gMTUpCi0JCQlzLT5kbWFfZGFjMS5vc3NmcmFnc2hpZnQgPSAxNTsKLQkJaWYgKHMtPmRtYV9kYWMxLm9zc21heGZyYWdzIDwgNCkKLQkJCXMtPmRtYV9kYWMxLm9zc21heGZyYWdzID0gNDsKLQkJcmV0dXJuIDA7Ci0KLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NVQkRJVklERToKLQkJaWYgKHMtPmRtYV9kYWMxLnN1YmRpdmlzaW9uKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgaWYgKGdldF91c2VyKHZhbCwgcCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJaWYgKHZhbCAhPSAxICYmIHZhbCAhPSAyICYmIHZhbCAhPSA0KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXMtPmRtYV9kYWMxLnN1YmRpdmlzaW9uID0gdmFsOwotCQlyZXR1cm4gMDsKLQotICAgICAgICBjYXNlIFNPVU5EX1BDTV9SRUFEX1JBVEU6Ci0JCXJldHVybiBwdXRfdXNlcihzLT5kYWMxcmF0ZSwgcCk7Ci0KLSAgICAgICAgY2FzZSBTT1VORF9QQ01fUkVBRF9DSEFOTkVMUzoKLQkJcmV0dXJuIHB1dF91c2VyKChzLT5zY3RybCAmIFNDVFJMX1AxU01CKSA/IDIgOiAxLCBwKTsKLQotICAgICAgICBjYXNlIFNPVU5EX1BDTV9SRUFEX0JJVFM6Ci0JCXJldHVybiBwdXRfdXNlcigocy0+c2N0cmwgJiBTQ1RSTF9QMVNFQikgPyAxNiA6IDgsIHApOwotCi0gICAgICAgIGNhc2UgU09VTkRfUENNX1dSSVRFX0ZJTFRFUjoKLSAgICAgICAgY2FzZSBTTkRDVExfRFNQX1NFVFNZTkNSTzoKLSAgICAgICAgY2FzZSBTT1VORF9QQ01fUkVBRF9GSUxURVI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0JCQotCX0KLQlyZXR1cm4gbWl4ZGV2X2lvY3RsKHMtPmNvZGVjLCBjbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgZXMxMzcxX29wZW5fZGFjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnM7Ci0KLQlmb3IgKGxpc3QgPSBkZXZzLm5leHQ7IDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKLQkJaWYgKGxpc3QgPT0gJmRldnMpCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJcyA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGVzMTM3MV9zdGF0ZSwgZGV2cyk7Ci0JCWlmICghKChzLT5kZXZfZGFjIF4gbWlub3IpICYgfjB4ZikpCi0JCQlicmVhazsKLQl9Ci0gICAgICAgCVZBTElEQVRFX1NUQVRFKHMpOwotICAgICAgIAkvKiB3ZSBhbGxvdyBvcGVuaW5nIHdpdGggT19SRFdSLCBtb3N0IHByb2dyYW1zIGRvIGl0IGFsdGhvdWdoIHRoZXkgd2lsbCBvbmx5IHdyaXRlICovCi0jaWYgMAotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKQotCQlyZXR1cm4gLUVQRVJNOwotI2VuZGlmCi0JaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICAgICAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gczsKLQkvKiB3YWl0IGZvciBkZXZpY2UgdG8gYmVjb21lIGZyZWUgKi8KLQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKLQl3aGlsZSAocy0+b3Blbl9tb2RlICYgRk1PREVfREFDKSB7Ci0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JfQotCXMtPmRtYV9kYWMxLm9zc2ZyYWdzaGlmdCA9IHMtPmRtYV9kYWMxLm9zc21heGZyYWdzID0gcy0+ZG1hX2RhYzEuc3ViZGl2aXNpb24gPSAwOwotCXMtPmRtYV9kYWMxLmVuYWJsZWQgPSAxOwotCXNldF9kYWMxX3JhdGUocywgODAwMCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlzLT5zY3RybCAmPSB+U0NUUkxfUDFGTVQ7Ci0JaWYgKChtaW5vciAmIDB4ZikgPT0gU05EX0RFVl9EU1AxNikKLQkJcy0+c2N0cmwgfD0gRVMxMzcxX0ZNVF9TMTZfTU9OTyA8PCBTQ1RSTF9TSF9QMUZNVDsKLQllbHNlCi0JCXMtPnNjdHJsIHw9IEVTMTM3MV9GTVRfVThfTU9OTyA8PCBTQ1RSTF9TSF9QMUZNVDsKLQlvdXRsKHMtPnNjdHJsLCBzLT5pbytFUzEzNzFfUkVHX1NFUklBTF9DT05UUk9MKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jcy0+b3Blbl9tb2RlIHw9IEZNT0RFX0RBQzsKLQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxlKTsKLX0KLQotc3RhdGljIGludCBlczEzNzFfcmVsZWFzZV9kYWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGVzMTM3MV9zdGF0ZSAqcyA9IChzdHJ1Y3QgZXMxMzcxX3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JVkFMSURBVEVfU1RBVEUocyk7Ci0JbG9ja19rZXJuZWwoKTsKLQlkcmFpbl9kYWMxKHMsIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQltdXRleF9sb2NrKCZzLT5vcGVuX211dGV4KTsKLQlzdG9wX2RhYzEocyk7Ci0JZGVhbGxvY19kbWFidWYocywgJnMtPmRtYV9kYWMxKTsKLQlzLT5vcGVuX21vZGUgJj0gfkZNT0RFX0RBQzsKLQltdXRleF91bmxvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXdha2VfdXAoJnMtPm9wZW5fd2FpdCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgLypjb25zdCovIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXMxMzcxX2RhY19mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkud3JpdGUJCT0gZXMxMzcxX3dyaXRlX2RhYywKLQkucG9sbAkJPSBlczEzNzFfcG9sbF9kYWMsCi0JLmlvY3RsCQk9IGVzMTM3MV9pb2N0bF9kYWMsCi0JLm1tYXAJCT0gZXMxMzcxX21tYXBfZGFjLAotCS5vcGVuCQk9IGVzMTM3MV9vcGVuX2RhYywKLQkucmVsZWFzZQk9IGVzMTM3MV9yZWxlYXNlX2RhYywKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgc3NpemVfdCBlczEzNzFfbWlkaV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3NpemVfdCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBwdHI7Ci0JaW50IGNudDsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmZmVyLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKLQlyZXQgPSAwOwotICAgICAgICBhZGRfd2FpdF9xdWV1ZSgmcy0+bWlkaS5pd2FpdCwgJndhaXQpOwotCXdoaWxlIChjb3VudCA+IDApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJcHRyID0gcy0+bWlkaS5pcmQ7Ci0JCWNudCA9IE1JRElJTkJVRiAtIHB0cjsKLQkJaWYgKHMtPm1pZGkuaWNudCA8IGNudCkKLQkJCWNudCA9IHMtPm1pZGkuaWNudDsKLQkJaWYgKGNudCA8PSAwKQotCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjbnQgPiBjb3VudCkKLQkJCWNudCA9IGNvdW50OwotCQlpZiAoY250IDw9IDApIHsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc2NoZWR1bGUoKTsKLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgcy0+bWlkaS5pYnVmICsgcHRyLCBjbnQpKSB7Ci0JCQlpZiAoIXJldCkKLQkJCQlyZXQgPSAtRUZBVUxUOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHRyID0gKHB0ciArIGNudCkgJSBNSURJSU5CVUY7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXMtPm1pZGkuaXJkID0gcHRyOwotCQlzLT5taWRpLmljbnQgLT0gY250OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50IC09IGNudDsKLQkJYnVmZmVyICs9IGNudDsKLQkJcmV0ICs9IGNudDsKLQkJYnJlYWs7Ci0JfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+bWlkaS5pd2FpdCwgJndhaXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGVzMTM3MV9taWRpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0Jc3NpemVfdCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBwdHI7Ci0JaW50IGNudDsKLQotCVZBTElEQVRFX1NUQVRFKHMpOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBidWZmZXIsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAwOwotCXJldCA9IDA7Ci0gICAgICAgIGFkZF93YWl0X3F1ZXVlKCZzLT5taWRpLm93YWl0LCAmd2FpdCk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcy0+bG9jaywgZmxhZ3MpOwotCQlwdHIgPSBzLT5taWRpLm93cjsKLQkJY250ID0gTUlESU9VVEJVRiAtIHB0cjsKLQkJaWYgKHMtPm1pZGkub2NudCArIGNudCA+IE1JRElPVVRCVUYpCi0JCQljbnQgPSBNSURJT1VUQlVGIC0gcy0+bWlkaS5vY250OwotCQlpZiAoY250IDw9IDApIHsKLQkJCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCWVzMTM3MV9oYW5kbGVfbWlkaShzKTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWlmIChjbnQgPiBjb3VudCkKLQkJCWNudCA9IGNvdW50OwotCQlpZiAoY250IDw9IDApIHsKLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRUFHQUlOOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc2NoZWR1bGUoKTsKLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCWlmICghcmV0KQotCQkJCQlyZXQgPSAtRVJFU1RBUlRTWVM7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoY29weV9mcm9tX3VzZXIocy0+bWlkaS5vYnVmICsgcHRyLCBidWZmZXIsIGNudCkpIHsKLQkJCWlmICghcmV0KQotCQkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlicmVhazsKLQkJfQotCQlwdHIgPSAocHRyICsgY250KSAlIE1JRElPVVRCVUY7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCXMtPm1pZGkub3dyID0gcHRyOwotCQlzLT5taWRpLm9jbnQgKz0gY250OwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JCWNvdW50IC09IGNudDsKLQkJYnVmZmVyICs9IGNudDsKLQkJcmV0ICs9IGNudDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJZXMxMzcxX2hhbmRsZV9taWRpKHMpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0JfQotCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmcy0+bWlkaS5vd2FpdCwgJndhaXQpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIE5vIGtlcm5lbCBsb2NrIC0gd2UgaGF2ZSBvdXIgb3duIHNwaW5sb2NrICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGVzMTM3MV9taWRpX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBpbnQgbWFzayA9IDA7Ci0KLQlWQUxJREFURV9TVEFURShzKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpCi0JCXBvbGxfd2FpdChmaWxlLCAmcy0+bWlkaS5vd2FpdCwgd2FpdCk7Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpCi0JCXBvbGxfd2FpdChmaWxlLCAmcy0+bWlkaS5pd2FpdCwgd2FpdCk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkgewotCQlpZiAocy0+bWlkaS5pY250ID4gMCkKLQkJCW1hc2sgfD0gUE9MTElOIHwgUE9MTFJETk9STTsKLQl9Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSB7Ci0JCWlmIChzLT5taWRpLm9jbnQgPCBNSURJT1VUQlVGKQotCQkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCXJldHVybiBtYXNrOwotfQotCi1zdGF0aWMgaW50IGVzMTM3MV9taWRpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JaW50IG1pbm9yID0gaW1pbm9yKGlub2RlKTsKLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7Ci0Jc3RydWN0IGVzMTM3MV9zdGF0ZSAqczsKLQotCWZvciAobGlzdCA9IGRldnMubmV4dDsgOyBsaXN0ID0gbGlzdC0+bmV4dCkgewotCQlpZiAobGlzdCA9PSAmZGV2cykKLQkJCXJldHVybiAtRU5PREVWOwotCQlzID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgZXMxMzcxX3N0YXRlLCBkZXZzKTsKLQkJaWYgKHMtPmRldl9taWRpID09IG1pbm9yKQotCQkJYnJlYWs7Ci0JfQotICAgICAgIAlWQUxJREFURV9TVEFURShzKTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBzOwotCS8qIHdhaXQgZm9yIGRldmljZSB0byBiZWNvbWUgZnJlZSAqLwotCW11dGV4X2xvY2soJnMtPm9wZW5fbXV0ZXgpOwotCXdoaWxlIChzLT5vcGVuX21vZGUgJiAoZmlsZS0+Zl9tb2RlIDw8IEZNT0RFX01JRElfU0hJRlQpKSB7Ci0JCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KLQkJYWRkX3dhaXRfcXVldWUoJnMtPm9wZW5fd2FpdCwgJndhaXQpOwotCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JCXNjaGVkdWxlKCk7Ci0JCXJlbW92ZV93YWl0X3F1ZXVlKCZzLT5vcGVuX3dhaXQsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7Ci0JfQotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKSkgewotCQlzLT5taWRpLmlyZCA9IHMtPm1pZGkuaXdyID0gcy0+bWlkaS5pY250ID0gMDsKLQkJcy0+bWlkaS5vcmQgPSBzLT5taWRpLm93ciA9IHMtPm1pZGkub2NudCA9IDA7Ci0JCW91dGIoVUNUUkxfQ05UUkxfU1dSLCBzLT5pbytFUzEzNzFfUkVHX1VBUlRfQ09OVFJPTCk7Ci0JCW91dGIoMCwgcy0+aW8rRVMxMzcxX1JFR19VQVJUX0NPTlRST0wpOwotCQlvdXRiKDAsIHMtPmlvK0VTMTM3MV9SRUdfVUFSVF9URVNUKTsKLQl9Ci0JaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKLQkJcy0+bWlkaS5pcmQgPSBzLT5taWRpLml3ciA9IHMtPm1pZGkuaWNudCA9IDA7Ci0JfQotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewotCQlzLT5taWRpLm9yZCA9IHMtPm1pZGkub3dyID0gcy0+bWlkaS5vY250ID0gMDsKLQl9Ci0Jcy0+Y3RybCB8PSBDVFJMX1VBUlRfRU47Ci0Jb3V0bChzLT5jdHJsLCBzLT5pbytFUzEzNzFfUkVHX0NPTlRST0wpOwotCWVzMTM3MV9oYW5kbGVfbWlkaShzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzLT5sb2NrLCBmbGFncyk7Ci0Jcy0+b3Blbl9tb2RlIHw9IChmaWxlLT5mX21vZGUgPDwgRk1PREVfTUlESV9TSElGVCkgJiAoRk1PREVfTUlESV9SRUFEIHwgRk1PREVfTUlESV9XUklURSk7Ci0JbXV0ZXhfdW5sb2NrKCZzLT5vcGVuX211dGV4KTsKLQlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgZXMxMzcxX21pZGlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gKHN0cnVjdCBlczEzNzFfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjb3VudCwgdG1vOwotCi0JVkFMSURBVEVfU1RBVEUocyk7Ci0JbG9ja19rZXJuZWwoKTsKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpIHsKLQkJYWRkX3dhaXRfcXVldWUoJnMtPm1pZGkub3dhaXQsICZ3YWl0KTsKLQkJZm9yICg7OykgewotCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCWNvdW50ID0gcy0+bWlkaS5vY250OwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKGNvdW50IDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCi0JCQkJYnJlYWs7Ci0JCQl0bW8gPSAoY291bnQgKiBIWikgLyAzMTAwOwotCQkJaWYgKCFzY2hlZHVsZV90aW1lb3V0KHRtbyA/IDogMSkgJiYgdG1vKQotCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAibWlkaSB0aW1lZCBvdXQ/P1xuIik7Ci0JCX0KLQkJcmVtb3ZlX3dhaXRfcXVldWUoJnMtPm1pZGkub3dhaXQsICZ3YWl0KTsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQl9Ci0JbXV0ZXhfbG9jaygmcy0+b3Blbl9tdXRleCk7Ci0Jcy0+b3Blbl9tb2RlICY9IH4oKGZpbGUtPmZfbW9kZSA8PCBGTU9ERV9NSURJX1NISUZUKSAmIChGTU9ERV9NSURJX1JFQUR8Rk1PREVfTUlESV9XUklURSkpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCEocy0+b3Blbl9tb2RlICYgKEZNT0RFX01JRElfUkVBRCB8IEZNT0RFX01JRElfV1JJVEUpKSkgewotCQlzLT5jdHJsICY9IH5DVFJMX1VBUlRfRU47Ci0JCW91dGwocy0+Y3RybCwgcy0+aW8rRVMxMzcxX1JFR19DT05UUk9MKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcy0+bG9jaywgZmxhZ3MpOwotCW11dGV4X3VubG9jaygmcy0+b3Blbl9tdXRleCk7Ci0Jd2FrZV91cCgmcy0+b3Blbl93YWl0KTsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyAvKmNvbnN0Ki8gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlczEzNzFfbWlkaV9mb3BzID0gewotCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkucmVhZAkJPSBlczEzNzFfbWlkaV9yZWFkLAotCS53cml0ZQkJPSBlczEzNzFfbWlkaV93cml0ZSwKLQkucG9sbAkJPSBlczEzNzFfbWlkaV9wb2xsLAotCS5vcGVuCQk9IGVzMTM3MV9taWRpX29wZW4sCi0JLnJlbGVhc2UJPSBlczEzNzFfbWlkaV9yZWxlYXNlLAotfTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qCi0gKiBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCB3ZSdsbCBjcmVhdGUgYSBwcm9jIGRldmljZSB0aGF0IGR1bXBzIHRoZQotICogQ09ERUMgY2hpcHN0YXRlCi0gKi8KLQotI2lmZGVmIEVTMTM3MV9ERUJVRwotc3RhdGljIGludCBwcm9jX2VzMTM3MV9kdW1wIChjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGVzMTM3MV9zdGF0ZSAqczsKLSAgICAgICAgaW50IGNudCwgbGVuID0gMDsKLQotCWlmIChsaXN0X2VtcHR5KCZkZXZzKSkKLQkJcmV0dXJuIDA7Ci0JcyA9IGxpc3RfZW50cnkoZGV2cy5uZXh0LCBzdHJ1Y3QgZXMxMzcxX3N0YXRlLCBkZXZzKTsKLSAgICAgICAgLyogcHJpbnQgb3V0IGhlYWRlciAqLwotICAgICAgICBsZW4gKz0gc3ByaW50ZihidWYgKyBsZW4sICJcdFx0Q3JlYXRpdmUgRVMxMzd4IERlYnVnIER1bXAtby1tYXRpY1xuIik7Ci0KLSAgICAgICAgLyogcHJpbnQgb3V0IENPREVDIHN0YXRlICovCi0gICAgICAgIGxlbiArPSBzcHJpbnRmIChidWYgKyBsZW4sICJBQzk3IENPREVDIHN0YXRlXG4iKTsKLQlmb3IgKGNudD0wOyBjbnQgPD0gMHg3ZTsgY250ID0gY250ICsyKQotICAgICAgICAgICAgICAgIGxlbis9IHNwcmludGYgKGJ1ZiArIGxlbiwgInJlZzoweCUwMnggIHZhbDoweCUwNHhcbiIsIGNudCwgcmRjb2RlYyhzLT5jb2RlYywgY250KSk7Ci0KLSAgICAgICAgaWYgKGZwb3MgPj1sZW4pewotICAgICAgICAgICAgICAgICpzdGFydCA9IGJ1ZjsKLSAgICAgICAgICAgICAgICAqZW9mID0xOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgICpzdGFydCA9IGJ1ZiArIGZwb3M7Ci0gICAgICAgIGlmICgobGVuIC09IGZwb3MpID4gbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBsZW5ndGg7Ci0gICAgICAgICplb2YgPTE7Ci0gICAgICAgIHJldHVybiBsZW47Ci0KLX0KLSNlbmRpZiAvKiBFUzEzNzFfREVCVUcgKi8KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIG1heGltdW0gbnVtYmVyIG9mIGRldmljZXM7IG9ubHkgdXNlZCBmb3IgY29tbWFuZCBsaW5lIHBhcmFtcyAqLwotI2RlZmluZSBOUl9ERVZJQ0UgNQotCi1zdGF0aWMgaW50IHNwZGlmW05SX0RFVklDRV07Ci1zdGF0aWMgaW50IG5vbWl4W05SX0RFVklDRV07Ci1zdGF0aWMgaW50IGFtcGxpZmllcltOUl9ERVZJQ0VdOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRldmluZGV4OwotCi1tb2R1bGVfcGFyYW1fYXJyYXkoc3BkaWYsIGJvb2wsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhzcGRpZiwgImlmIDEgdGhlIG91dHB1dCBpcyBpbiBTL1BESUYgZGlnaXRhbCBtb2RlIik7Ci1tb2R1bGVfcGFyYW1fYXJyYXkobm9taXgsIGJvb2wsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyhub21peCwgImlmIDEgbm8gYW5hbG9nIGF1ZGlvIGlzIG1peGVkIHRvIHRoZSBkaWdpdGFsIG91dHB1dCIpOwotbW9kdWxlX3BhcmFtX2FycmF5KGFtcGxpZmllciwgYm9vbCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGFtcGxpZmllciwgIlNldCB0byAxIGlmIHRoZSBtYWNoaW5lIG5lZWRzIHRoZSBhbXAgY29udHJvbCBlbmFibGluZyAobWFueSBsYXB0b3BzKSIpOwotCi1NT0RVTEVfQVVUSE9SKCJUaG9tYXMgTS4gU2FpbGVyLCBzYWlsZXJAaWZlLmVlLmV0aHouY2gsIGhiOWpueEBoYjl3LmNoZS5ldSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJFUzEzNzEgQXVkaW9QQ0k5NyBEcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHN0cnVjdCBpbml0dm9sIHsKLQlpbnQgbWl4Y2g7Ci0JaW50IHZvbDsKLX0gaW5pdHZvbFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeyBTT1VORF9NSVhFUl9XUklURV9MSU5FLCAweDQwNDAgfSwKLQl7IFNPVU5EX01JWEVSX1dSSVRFX0NELCAweDQwNDAgfSwKLQl7IE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1ZJREVPKSwgMHg0MDQwIH0sCi0JeyBTT1VORF9NSVhFUl9XUklURV9MSU5FMSwgMHg0MDQwIH0sCi0JeyBTT1VORF9NSVhFUl9XUklURV9QQ00sIDB4NDA0MCB9LAotCXsgU09VTkRfTUlYRVJfV1JJVEVfVk9MVU1FLCAweDQwNDAgfSwKLQl7IE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1BIT05FT1VUKSwgMHg0MDQwIH0sCi0JeyBTT1VORF9NSVhFUl9XUklURV9PR0FJTiwgMHg0MDQwIH0sCi0JeyBNSVhFUl9XUklURShTT1VORF9NSVhFUl9QSE9ORUlOKSwgMHg0MDQwIH0sCi0JeyBTT1VORF9NSVhFUl9XUklURV9TUEVBS0VSLCAweDQwNDAgfSwKLQl7IFNPVU5EX01JWEVSX1dSSVRFX01JQywgMHg0MDQwIH0sCi0JeyBTT1VORF9NSVhFUl9XUklURV9SRUNMRVYsIDB4NDA0MCB9LAotCXsgU09VTkRfTUlYRVJfV1JJVEVfSUdBSU4sIDB4NDA0MCB9Ci19OwotCi1zdGF0aWMgc3RydWN0Ci17Ci0Jc2hvcnQgc3ZpZCwgc2RpZDsKLX0gYW1wbGlmaWVyX25lZWRlZFtdID0gCi17Ci0JeyAweDEwN0IsIDB4MjE1MCB9LAkJLyogR2F0ZXdheSBTb2xvIDIxNTAgKi8KLQl7IDB4MTNCRCwgMHgxMDBDIH0sCQkvKiBNZWJpdXMgUEMtTUoxMDBWICovCi0JeyAweDExMDIsIDB4NTkzOCB9LAkJLyogVGFyZ2EgWHRlbmRlciAzMDAgKi8KLQl7IDB4MTEwMiwgMHg4OTM4IH0sCQkvKiBJUEMgbm90ZWJvb2sgKi8KLQl7IFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfQotfTsKLQotI2lmZGVmIFNVUFBPUlRfSk9ZU1RJQ0sKLQotc3RhdGljIGludCBfX2RldmluaXQgZXMxMzcxX3JlZ2lzdGVyX2dhbWVwb3J0KHN0cnVjdCBlczEzNzFfc3RhdGUgKnMpCi17Ci0Jc3RydWN0IGdhbWVwb3J0ICpncDsKLQlpbnQgZ3BpbzsKLQotCWZvciAoZ3BpbyA9IDB4MjE4OyBncGlvID49IDB4MjAwOyBncGlvIC09IDB4MDgpCi0JCWlmIChyZXF1ZXN0X3JlZ2lvbihncGlvLCBKT1lfRVhURU5ULCAiZXMxMzcxIikpCi0JCQlicmVhazsKLQotCWlmIChncGlvIDwgMHgyMDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibm8gZnJlZSBqb3lzdGljayBhZGRyZXNzIGZvdW5kXG4iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0KLQlzLT5nYW1lcG9ydCA9IGdwID0gZ2FtZXBvcnRfYWxsb2NhdGVfcG9ydCgpOwotCWlmICghZ3ApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGdhbWVwb3J0XG4iKTsKLQkJcmVsZWFzZV9yZWdpb24oZ3BpbywgSk9ZX0VYVEVOVCk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWdhbWVwb3J0X3NldF9uYW1lKGdwLCAiRVNTMTM3MSBHYW1lcG9ydCIpOwotCWdhbWVwb3J0X3NldF9waHlzKGdwLCAiaXNhJTA0eC9nYW1lcG9ydDAiLCBncGlvKTsKLQlncC0+ZGV2LnBhcmVudCA9ICZzLT5kZXYtPmRldjsKLQlncC0+aW8gPSBncGlvOwotCi0Jcy0+Y3RybCB8PSBDVFJMX0pZU1RLX0VOIHwgKCgoZ3BpbyA+PiAzKSAmIENUUkxfSk9ZX01BU0spIDw8IENUUkxfSk9ZX1NISUZUKTsKLQlvdXRsKHMtPmN0cmwsIHMtPmlvICsgRVMxMzcxX1JFR19DT05UUk9MKTsKLQotCWdhbWVwb3J0X3JlZ2lzdGVyX3BvcnQoZ3ApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBlczEzNzFfdW5yZWdpc3Rlcl9nYW1lcG9ydChzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzKQotewotCWlmIChzLT5nYW1lcG9ydCkgewotCQlpbnQgZ3BpbyA9IHMtPmdhbWVwb3J0LT5pbzsKLQkJZ2FtZXBvcnRfdW5yZWdpc3Rlcl9wb3J0KHMtPmdhbWVwb3J0KTsKLQkJcmVsZWFzZV9yZWdpb24oZ3BpbywgSk9ZX0VYVEVOVCk7Ci0KLQl9Ci19Ci0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBlczEzNzFfcmVnaXN0ZXJfZ2FtZXBvcnQoc3RydWN0IGVzMTM3MV9zdGF0ZSAqcykgeyByZXR1cm4gLUVOT1NZUzsgfQotc3RhdGljIGlubGluZSB2b2lkIGVzMTM3MV91bnJlZ2lzdGVyX2dhbWVwb3J0KHN0cnVjdCBlczEzNzFfc3RhdGUgKnMpIHsgfQotI2VuZGlmIC8qIFNVUFBPUlRfSk9ZU1RJQ0sgKi8KLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBlczEzNzFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaWlkKQotewotCXN0cnVjdCBlczEzNzFfc3RhdGUgKnM7Ci0JbW1fc2VnbWVudF90IGZzOwotCWludCBpLCB2YWwsIHJlcyA9IC0xOwotCWludCBpZHg7Ci0JdW5zaWduZWQgbG9uZyB0bW87Ci0Jc2lnbmVkIGxvbmcgdG1vMjsKLQl1bnNpZ25lZCBpbnQgY3NzcjsKLQotCWlmICgocmVzPXBjaV9lbmFibGVfZGV2aWNlKHBjaWRldikpKQotCQlyZXR1cm4gcmVzOwotCi0JaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBjaWRldiwgMCkgJiBJT1JFU09VUkNFX0lPKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHBjaWRldi0+aXJxID09IDApIAotCQlyZXR1cm4gLUVOT0RFVjsKLQlpID0gcGNpX3NldF9kbWFfbWFzayhwY2lkZXYsIERNQV8zMkJJVF9NQVNLKTsKLQlpZiAoaSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJlczEzNzE6IGFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IDMyYml0IFBDSSBidXNtYXN0ZXIgRE1BXG4iKTsKLQkJcmV0dXJuIGk7Ci0JfQotCWlmICghKHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXMxMzcxX3N0YXRlKSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJvdXQgb2YgbWVtb3J5XG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCQotCXMtPmNvZGVjID0gYWM5N19hbGxvY19jb2RlYygpOwotCWlmKHMtPmNvZGVjID09IE5VTEwpCi0JCWdvdG8gZXJyX2NvZGVjOwotCQkKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5kbWFfYWRjLndhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9kYWMxLndhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPmRtYV9kYWMyLndhaXQpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnMtPm9wZW5fd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+bWlkaS5pd2FpdCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+bWlkaS5vd2FpdCk7Ci0JbXV0ZXhfaW5pdCgmcy0+b3Blbl9tdXRleCk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnMtPmxvY2spOwotCXMtPm1hZ2ljID0gRVMxMzcxX01BR0lDOwotCXMtPmRldiA9IHBjaWRldjsKLQlzLT5pbyA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIDApOwotCXMtPmlycSA9IHBjaWRldi0+aXJxOwotCXMtPnZlbmRvciA9IHBjaWRldi0+dmVuZG9yOwotCXMtPmRldmljZSA9IHBjaWRldi0+ZGV2aWNlOwotCXMtPnJldiA9IHBjaWRldi0+cmV2aXNpb247Ci0Jcy0+Y29kZWMtPnByaXZhdGVfZGF0YSA9IHM7Ci0Jcy0+Y29kZWMtPmlkID0gMDsKLQlzLT5jb2RlYy0+Y29kZWNfcmVhZCA9IHJkY29kZWM7Ci0Jcy0+Y29kZWMtPmNvZGVjX3dyaXRlID0gd3Jjb2RlYzsKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiZm91bmQgY2hpcCwgdmVuZG9yIGlkIDB4JTA0eCBkZXZpY2UgaWQgMHglMDR4IHJldmlzaW9uIDB4JTAyeFxuIiwKLQkgICAgICAgcy0+dmVuZG9yLCBzLT5kZXZpY2UsIHMtPnJldik7Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihzLT5pbywgRVMxMzcxX0VYVEVOVCwgImVzMTM3MSIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImlvIHBvcnRzICUjbHgtJSNseCBpbiB1c2VcbiIsIHMtPmlvLCBzLT5pbytFUzEzNzFfRVhURU5ULTEpOwotCQlyZXMgPSAtRUJVU1k7Ci0JCWdvdG8gZXJyX3JlZ2lvbjsKLQl9Ci0JaWYgKChyZXM9cmVxdWVzdF9pcnEocy0+aXJxLCBlczEzNzFfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgImVzMTM3MSIscykpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImlycSAldSBpbiB1c2VcbiIsIHMtPmlycSk7Ci0JCWdvdG8gZXJyX2lycTsKLQl9Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggImZvdW5kIGVzMTM3MSByZXYgJWQgYXQgaW8gJSNseCBpcnEgJXVcbiIsCi0JICAgICAgIHMtPnJldiwgcy0+aW8sIHMtPmlycSk7Ci0JLyogcmVnaXN0ZXIgZGV2aWNlcyAqLwotCWlmICgocmVzPShzLT5kZXZfYXVkaW8gPSByZWdpc3Rlcl9zb3VuZF9kc3AoJmVzMTM3MV9hdWRpb19mb3BzLC0xKSkpPDApCi0JCWdvdG8gZXJyX2RldjE7Ci0JaWYgKChyZXM9KHMtPmNvZGVjLT5kZXZfbWl4ZXIgPSByZWdpc3Rlcl9zb3VuZF9taXhlcigmZXMxMzcxX21peGVyX2ZvcHMsIC0xKSkpIDwgMCkKLQkJZ290byBlcnJfZGV2MjsKLQlpZiAoKHJlcz0ocy0+ZGV2X2RhYyA9IHJlZ2lzdGVyX3NvdW5kX2RzcCgmZXMxMzcxX2RhY19mb3BzLCAtMSkpKSA8IDApCi0JCWdvdG8gZXJyX2RldjM7Ci0JaWYgKChyZXM9KHMtPmRldl9taWRpID0gcmVnaXN0ZXJfc291bmRfbWlkaSgmZXMxMzcxX21pZGlfZm9wcywgLTEpKSk8MCApCi0JCWdvdG8gZXJyX2RldjQ7Ci0jaWZkZWYgRVMxMzcxX0RFQlVHCi0JLyogaW5pdGlhbGl6ZSB0aGUgZGVidWcgcHJvYyBkZXZpY2UgKi8KLQlzLT5wcyA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImVzMTM3MSIsMCxOVUxMLHByb2NfZXMxMzcxX2R1bXAsTlVMTCk7Ci0jZW5kaWYgLyogRVMxMzcxX0RFQlVHICovCi0JCi0JLyogaW5pdGlhbGl6ZSBjb2RlYyByZWdpc3RlcnMgKi8KLQlzLT5jdHJsID0gMDsKLQotCS8qIENoZWNrIGFtcGxpZmllciByZXF1aXJlbWVudHMgKi8KLQkKLQlpZiAoYW1wbGlmaWVyW2RldmluZGV4XSkKLQkJcy0+Y3RybCB8PSBDVFJMX0dQSU9fT1VUMDsKLQllbHNlIGZvcihpZHggPSAwOyBhbXBsaWZpZXJfbmVlZGVkW2lkeF0uc3ZpZCAhPSBQQ0lfQU5ZX0lEOyBpZHgrKykKLQl7Ci0JCWlmKHBjaWRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBhbXBsaWZpZXJfbmVlZGVkW2lkeF0uc3ZpZCAmJgotCQkgICBwY2lkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gYW1wbGlmaWVyX25lZWRlZFtpZHhdLnNkaWQpCi0JCXsKLSAgICAgICAgICAgICAgICAgICAgCXMtPmN0cmwgfD0gQ1RSTF9HUElPX09VVDA7ICAgLyogdHVybiBpbnRlcm5hbCBhbXBsaWZpZXIgb24gKi8KLSAgICAgICAgICAgICAgICAgICAgCXByaW50ayhLRVJOX0lORk8gUEZYICJFbmFibGluZyBpbnRlcm5hbCBhbXBsaWZpZXIuXG4iKTsKLQkJfQotCX0KLQotCXMtPnNjdHJsID0gMDsKLQljc3NyID0gMDsKLQlzLT5zcGRpZl92b2x1bWUgPSAtMTsKLQkvKiBjaGVjayB0byBzZWUgaWYgcy9wZGlmIG1vZGUgaXMgYmVpbmcgcmVxdWVzdGVkICovCi0JaWYgKHNwZGlmW2RldmluZGV4XSkgewotCQlpZiAocy0+cmV2ID49IDQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYICJlbmFibGluZyBTL1BESUYgb3V0cHV0XG4iKTsKLQkJCXMtPnNwZGlmX3ZvbHVtZSA9IDA7Ci0JCQljc3NyIHw9IFNUQVRfRU5fU1BESUY7Ci0JCQlzLT5jdHJsIHw9IENUUkxfU1BESUZFTl9COwotCQkJaWYgKG5vbWl4W2RldmluZGV4XSkgLyogZG9uJ3QgbWl4IGFuYWxvZyBpbnB1dHMgdG8gcy9wZGlmIG91dHB1dCAqLwotCQkJCXMtPmN0cmwgfD0gQ1RSTF9SRUNFTl9COwotCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicmV2aXNpb24gJWQgZG9lcyBub3Qgc3VwcG9ydCBTL1BESUZcbiIsIHMtPnJldik7Ci0JCX0KLQl9Ci0JLyogaW5pdGlhbGl6ZSB0aGUgY2hpcHMgKi8KLQlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MV9SRUdfQ09OVFJPTCk7Ci0Jb3V0bChzLT5zY3RybCwgcy0+aW8rRVMxMzcxX1JFR19TRVJJQUxfQ09OVFJPTCk7Ci0Jb3V0bChMRUdBQ1lfSkZBU1QsIHMtPmlvK0VTMTM3MV9SRUdfTEVHQUNZKTsKLQlwY2lfc2V0X21hc3RlcihwY2lkZXYpOyAgLyogZW5hYmxlIGJ1cyBtYXN0ZXJpbmcgKi8KLQkvKiBpZiB3ZSBhcmUgYSA1ODgwIHR1cm4gb24gdGhlIEFDOTcgKi8KLQlpZiAocy0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfRU5TT05JUSAmJgotCSAgICAoKHMtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfQ1Q1ODgwICYmIHMtPnJldiA+PSBDVDU4ODBSRVZfQ1Q1ODgwX0MpIHx8IAotCSAgICAgKHMtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfRVMxMzcxICYmIHMtPnJldiA9PSBFUzEzNzFSRVZfQ1Q1ODgwX0EpIHx8IAotCSAgICAgKHMtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0VOU09OSVFfRVMxMzcxICYmIHMtPnJldiA9PSBFUzEzNzFSRVZfRVMxMzczXzgpKSkgeyAKLQkJY3NzciB8PSBDU1RBVF81ODgwX0FDOTdfUlNUOwotCQlvdXRsKGNzc3IsIHMtPmlvK0VTMTM3MV9SRUdfU1RBVFVTKTsKLQkJLyogbmVlZCB0byBkZWxheSBhcm91bmQgMjBtcyhibGVlY2gpIHRvIGdpdmUKLQkJICAgc29tZSBDT0RFQ3MgZW5vdWdoIHRpbWUgdG8gd2FrZXVwICovCi0JCXRtbyA9IGppZmZpZXMgKyAoSFogLyA1MCkgKyAxOwotCQlmb3IgKDs7KSB7Ci0JCQl0bW8yID0gdG1vIC0gamlmZmllczsKLQkJCWlmICh0bW8yIDw9IDApCi0JCQkJYnJlYWs7Ci0JCQlzY2hlZHVsZV90aW1lb3V0KHRtbzIpOwotCQl9Ci0JfQotCS8qIEFDOTcgd2FybSByZXNldCB0byBzdGFydCB0aGUgYml0Y2xrICovCi0Jb3V0bChzLT5jdHJsIHwgQ1RSTF9TWU5DUkVTLCBzLT5pbytFUzEzNzFfUkVHX0NPTlRST0wpOwotCXVkZWxheSgyKTsKLQlvdXRsKHMtPmN0cmwsIHMtPmlvK0VTMTM3MV9SRUdfQ09OVFJPTCk7Ci0JLyogaW5pdCB0aGUgc2FtcGxlIHJhdGUgY29udmVydGVyICovCi0Jc3JjX2luaXQocyk7Ci0JLyogY29kZWMgaW5pdCAqLwotCWlmICghYWM5N19wcm9iZV9jb2RlYyhzLT5jb2RlYykpIHsKLQkJcmVzID0gLUVOT0RFVjsKLQkJZ290byBlcnJfZ3A7Ci0JfQotCS8qIHNldCBkZWZhdWx0IHZhbHVlcyAqLwotCi0JZnMgPSBnZXRfZnMoKTsKLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQl2YWwgPSBTT1VORF9NQVNLX0xJTkU7Ci0JbWl4ZGV2X2lvY3RsKHMtPmNvZGVjLCBTT1VORF9NSVhFUl9XUklURV9SRUNTUkMsICh1bnNpZ25lZCBsb25nKSZ2YWwpOwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXR2b2wpOyBpKyspIHsKLQkJdmFsID0gaW5pdHZvbFtpXS52b2w7Ci0JCW1peGRldl9pb2N0bChzLT5jb2RlYywgaW5pdHZvbFtpXS5taXhjaCwgKHVuc2lnbmVkIGxvbmcpJnZhbCk7Ci0JfQotCS8qIG11dGUgbWFzdGVyIGFuZCBQQ00gd2hlbiBpbiBTL1BESUYgbW9kZSAqLwotCWlmIChzLT5zcGRpZl92b2x1bWUgIT0gLTEpIHsKLQkJdmFsID0gMHgwMDAwOwotCQlzLT5jb2RlYy0+bWl4ZXJfaW9jdGwocy0+Y29kZWMsIFNPVU5EX01JWEVSX1dSSVRFX1ZPTFVNRSwgKHVuc2lnbmVkIGxvbmcpJnZhbCk7Ci0JCXMtPmNvZGVjLT5taXhlcl9pb2N0bChzLT5jb2RlYywgU09VTkRfTUlYRVJfV1JJVEVfUENNLCAodW5zaWduZWQgbG9uZykmdmFsKTsKLQl9Ci0Jc2V0X2ZzKGZzKTsKLQkvKiB0dXJuIG9uIFMvUERJRiBvdXRwdXQgZHJpdmVyIGlmIHJlcXVlc3RlZCAqLwotCW91dGwoY3Nzciwgcy0+aW8rRVMxMzcxX1JFR19TVEFUVVMpOwotCi0JZXMxMzcxX3JlZ2lzdGVyX2dhbWVwb3J0KHMpOwotCi0JLyogc3RvcmUgaXQgaW4gdGhlIGRyaXZlciBmaWVsZCAqLwotCXBjaV9zZXRfZHJ2ZGF0YShwY2lkZXYsIHMpOwotCS8qIHB1dCBpdCBpbnRvIGRyaXZlciBsaXN0ICovCi0JbGlzdF9hZGRfdGFpbCgmcy0+ZGV2cywgJmRldnMpOwotCS8qIGluY3JlbWVudCBkZXZpbmRleCAqLwotCWlmIChkZXZpbmRleCA8IE5SX0RFVklDRS0xKQotCQlkZXZpbmRleCsrOwotCXJldHVybiAwOwotCi0gZXJyX2dwOgotI2lmZGVmIEVTMTM3MV9ERUJVRwotCWlmIChzLT5wcykKLQkJcmVtb3ZlX3Byb2NfZW50cnkoImVzMTM3MSIsIE5VTEwpOwotI2VuZGlmCi0JdW5yZWdpc3Rlcl9zb3VuZF9taWRpKHMtPmRldl9taWRpKTsKLSBlcnJfZGV2NDoKLQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChzLT5kZXZfZGFjKTsKLSBlcnJfZGV2MzoKLQl1bnJlZ2lzdGVyX3NvdW5kX21peGVyKHMtPmNvZGVjLT5kZXZfbWl4ZXIpOwotIGVycl9kZXYyOgotCXVucmVnaXN0ZXJfc291bmRfZHNwKHMtPmRldl9hdWRpbyk7Ci0gZXJyX2RldjE6Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiY2Fubm90IHJlZ2lzdGVyIG1pc2MgZGV2aWNlXG4iKTsKLQlmcmVlX2lycShzLT5pcnEsIHMpOwotIGVycl9pcnE6Ci0JcmVsZWFzZV9yZWdpb24ocy0+aW8sIEVTMTM3MV9FWFRFTlQpOwotIGVycl9yZWdpb246Ci0gZXJyX2NvZGVjOgotCWFjOTdfcmVsZWFzZV9jb2RlYyhzLT5jb2RlYyk7Ci0Ja2ZyZWUocyk7Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQgX19kZXZleGl0IGVzMTM3MV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgZXMxMzcxX3N0YXRlICpzID0gcGNpX2dldF9kcnZkYXRhKGRldik7Ci0KLQlpZiAoIXMpCi0JCXJldHVybjsKLQlsaXN0X2RlbCgmcy0+ZGV2cyk7Ci0jaWZkZWYgRVMxMzcxX0RFQlVHCi0JaWYgKHMtPnBzKQotCQlyZW1vdmVfcHJvY19lbnRyeSgiZXMxMzcxIiwgTlVMTCk7Ci0jZW5kaWYgLyogRVMxMzcxX0RFQlVHICovCi0Jb3V0bCgwLCBzLT5pbytFUzEzNzFfUkVHX0NPTlRST0wpOyAvKiBzd2l0Y2ggZXZlcnl0aGluZyBvZmYgKi8KLQlvdXRsKDAsIHMtPmlvK0VTMTM3MV9SRUdfU0VSSUFMX0NPTlRST0wpOyAvKiBjbGVhciBzZXJpYWwgaW50ZXJydXB0cyAqLwotCXN5bmNocm9uaXplX2lycShzLT5pcnEpOwotCWZyZWVfaXJxKHMtPmlycSwgcyk7Ci0JZXMxMzcxX3VucmVnaXN0ZXJfZ2FtZXBvcnQocyk7Ci0JcmVsZWFzZV9yZWdpb24ocy0+aW8sIEVTMTM3MV9FWFRFTlQpOwotCXVucmVnaXN0ZXJfc291bmRfZHNwKHMtPmRldl9hdWRpbyk7Ci0JdW5yZWdpc3Rlcl9zb3VuZF9taXhlcihzLT5jb2RlYy0+ZGV2X21peGVyKTsKLQl1bnJlZ2lzdGVyX3NvdW5kX2RzcChzLT5kZXZfZGFjKTsKLQl1bnJlZ2lzdGVyX3NvdW5kX21pZGkocy0+ZGV2X21pZGkpOwotCWFjOTdfcmVsZWFzZV9jb2RlYyhzLT5jb2RlYyk7Ci0Ja2ZyZWUocyk7Ci0JcGNpX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgUENJX1ZFTkRPUl9JRF9FTlNPTklRLCBQQ0lfREVWSUNFX0lEX0VOU09OSVFfRVMxMzcxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwIH0sCi0JeyBQQ0lfVkVORE9SX0lEX0VOU09OSVEsIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9DVDU4ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAgfSwKLQl7IFBDSV9WRU5ET1JfSURfRUNUSVZBLCBQQ0lfREVWSUNFX0lEX0VDVElWQV9FVjE5MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAgfSwKLQl7IDAsIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpZF90YWJsZSk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlczEzNzFfZHJpdmVyID0gewotCS5uYW1lCQk9ICJlczEzNzEiLAotCS5pZF90YWJsZQk9IGlkX3RhYmxlLAotCS5wcm9iZQkJPSBlczEzNzFfcHJvYmUsCi0JLnJlbW92ZQkJPSBfX2RldmV4aXRfcChlczEzNzFfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGluaXRfZXMxMzcxKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggInZlcnNpb24gdjAuMzIgdGltZSAiIF9fVElNRV9fICIgIiBfX0RBVEVfXyAiXG4iKTsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZXMxMzcxX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2VzMTM3MSh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gUEZYICJ1bmxvYWRpbmdcbiIpOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZXMxMzcxX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KGluaXRfZXMxMzcxKTsKLW1vZHVsZV9leGl0KGNsZWFudXBfZXMxMzcxKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZm5kZWYgTU9EVUxFCi0KLS8qIGZvcm1hdCBpczogZXMxMzcxPVtzcGRpZixbbm9taXgsW2FtcGxpZmllcl1dXSAqLwotCi1zdGF0aWMgaW50IF9faW5pdCBlczEzNzFfc2V0dXAoY2hhciAqc3RyKQotewotCXN0YXRpYyB1bnNpZ25lZCBfX2luaXRkYXRhIG5yX2RldiA9IDA7Ci0KLQlpZiAobnJfZGV2ID49IE5SX0RFVklDRSkKLQkJcmV0dXJuIDA7Ci0KLQkodm9pZCkKLSAgICAgICAgKChnZXRfb3B0aW9uKCZzdHIsICZzcGRpZltucl9kZXZdKSA9PSAyKQotICAgICAgICAgJiYgKGdldF9vcHRpb24oJnN0ciwgJm5vbWl4W25yX2Rldl0pID09IDIpCi0gICAgICAgICAmJiAoZ2V0X29wdGlvbigmc3RyLCAmYW1wbGlmaWVyW25yX2Rldl0pKSk7Ci0KLQlucl9kZXYrKzsKLQlyZXR1cm4gMTsKLX0KLQotX19zZXR1cCgiZXMxMzcxPSIsIGVzMTM3MV9zZXR1cCk7Ci0KLSNlbmRpZiAvKiBNT0RVTEUgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMgYi9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MC5jCmluZGV4IGY3MDI4NmEuLjI2ODE5ZTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwLmMKKysrIGIvc291bmQvcGNpL2F1ODh4MC9hdTg4eDAuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAKIAkvKiBJbml0IGF1ZGlvIGNvcmUuCiAJICogVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHdlIGRvIHJlcXVlc3RfaXJxIG90aGVyd2lzZSB3ZSBjYW4gZ2V0IHNwdXJpb3VzCi0JICogaW50ZXJ1cHRzIHRoYXQgd2UgZG8gbm90IGhhbmRsZSBwcm9wZXJseSBhbmQgbWFrZSBhIG1lc3Mgb2YgdGhpbmdzICovCisJICogaW50ZXJydXB0cyB0aGF0IHdlIGRvIG5vdCBoYW5kbGUgcHJvcGVybHkgYW5kIG1ha2UgYSBtZXNzIG9mIHRoaW5ncyAqLwogCWlmICgoZXJyID0gdm9ydGV4X2NvcmVfaW5pdChjaGlwKSkgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgImh3IGNvcmUgaW5pdCBmYWlsZWRcbiIpOwogCQlnb3RvIGNvcmVfb3V0OwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2JlZXAuYyBiL3NvdW5kL3BwYy9iZWVwLmMKaW5kZXggYTFhYTg5Zi4uNTY2YjVhYiAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2JlZXAuYworKysgYi9zb3VuZC9wcGMvYmVlcC5jCkBAIC0yMzYsOCArMjM2LDggQEAKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOwogCi0JaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVChFVl9TTkQpOwotCWlucHV0X2Rldi0+c25kYml0WzBdID0gQklUKFNORF9CRUxMKSB8IEJJVChTTkRfVE9ORSk7CisJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX1NORCk7CisJaW5wdXRfZGV2LT5zbmRiaXRbMF0gPSBCSVRfTUFTSyhTTkRfQkVMTCkgfCBCSVRfTUFTSyhTTkRfVE9ORSk7CiAJaW5wdXRfZGV2LT5ldmVudCA9IHNuZF9wbWFjX2JlZXBfZXZlbnQ7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmNoaXAtPnBkZXYtPmRldjsKIAlpbnB1dF9zZXRfZHJ2ZGF0YShpbnB1dF9kZXYsIGNoaXApOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1jb3JlLmMgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwppbmRleCA5MTY1MWJkLi5lNmE2N2I1IDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWNvcmUuYworKysgYi9zb3VuZC9zb2Mvc29jLWNvcmUuYwpAQCAtMjY0LDcgKzI2NCw3IEBACiB9CiAKIC8qCi0gKiBQb3dlciBkb3duIHRoZSBhdWRpbyBzdWJzeXRlbSBwbWRvd25fdGltZSBtc2VjcyBhZnRlciBjbG9zZSBpcyBjYWxsZWQuCisgKiBQb3dlciBkb3duIHRoZSBhdWRpbyBzdWJzeXN0ZW0gcG1kb3duX3RpbWUgbXNlY3MgYWZ0ZXIgY2xvc2UgaXMgY2FsbGVkLgogICogVGhpcyBpcyB0byBlbnN1cmUgdGhlcmUgYXJlIG5vIHBvcHMgb3IgY2xpY2tzIGluIGJldHdlZW4gYW55IG11c2ljIHRyYWNrcwogICogZHVlIHRvIERBUE0gcG93ZXIgY3ljbGluZy4KICAqLwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NvYy1kYXBtLmMgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwppbmRleCBiMzE5M2U2Li4yOWE1NDZmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2Mvc29jLWRhcG0uYworKysgYi9zb3VuZC9zb2Mvc29jLWRhcG0uYwpAQCAtMjQsNyArMjQsNyBAQAogICogICAgbyBBdXRvbWF0aWMgTWljIEJpYXMgc3VwcG9ydAogICogICAgbyBKYWNrIGluc2VydGlvbiBwb3dlciBldmVudCBpbml0aWF0aW9uIC0gZS5nLiBocCBpbnNlcnRpb24gd2lsbCBlbmFibGUKICAqICAgICAgc2lua3MsIGRhY3MsIGV0YwotICogICAgbyBEZWxheWVkIHBvd2VyZG93biBvZiBhdWRpbyBzdXNic3l0ZW0gdG8gcmVkdWNlIHBvcHMgYmV0d2VlbiBhIHF1aWNrCisgKiAgICBvIERlbGF5ZWQgcG93ZXJkb3duIG9mIGF1ZGlvIHN1c2JzeXN0ZW0gdG8gcmVkdWNlIHBvcHMgYmV0d2VlbiBhIHF1aWNrCiAgKiAgICAgIGRldmljZSByZW9wZW4uCiAgKgogICogIFRvZG86CmRpZmYgLS1naXQgYS9zb3VuZC9zeW50aC9lbXV4L2VtdXhfc3ludGguYyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCmluZGV4IDM3MzMxMTguLjQ3ODM2OWIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCisrKyBiL3NvdW5kL3N5bnRoL2VtdXgvZW11eF9zeW50aC5jCkBAIC0zMTcsNyArMzE3LDcgQEAKIAogCiAvKgotICogRGVhbCB3aXRoIGEgY29udHJvbGVyIHR5cGUgZXZlbnQuICBUaGlzIGluY2x1ZGVzIGFsbCB0eXBlcyBvZgorICogRGVhbCB3aXRoIGEgY29udHJvbGxlciB0eXBlIGV2ZW50LiAgVGhpcyBpbmNsdWRlcyBhbGwgdHlwZXMgb2YKICAqIGNvbnRyb2wgZXZlbnRzLCBub3QganVzdCB0aGUgbWlkaSBjb250cm9sbGVycwogICovCiB2b2lkCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvY2FpYXEtaW5wdXQuYyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1pbnB1dC5jCmluZGV4IGExZGUwYzYuLmNkNTM2Y2EgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1pbnB1dC5jCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9jYWlhcS1pbnB1dC5jCkBAIC0yMDAsOCArMjAwLDkgQEAKIAogICAgICAgICBzd2l0Y2ggKGRldi0+Y2hpcC51c2JfaWQpIHsKIAljYXNlIFVTQl9JRChVU0JfVklEX05BVElWRUlOU1RSVU1FTlRTLCBVU0JfUElEX1JJR0tPTlRST0wyKToKLQkJaW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQkJaW5wdXQtPmFic2JpdFswXSA9IEJJVChBQlNfWCkgfCBCSVQoQUJTX1kpIHwgQklUKEFCU19aKTsKKwkJaW5wdXQtPmV2Yml0WzBdID0gQklUX01BU0soRVZfS0VZKSB8IEJJVF9NQVNLKEVWX0FCUyk7CisJCWlucHV0LT5hYnNiaXRbMF0gPSBCSVRfTUFTSyhBQlNfWCkgfCBCSVRfTUFTSyhBQlNfWSkgfAorCQkJQklUX01BU0soQUJTX1opOwogCQlpbnB1dC0+a2V5Y29kZSA9IGtleWNvZGVfcmsyOwogCQlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2YoY2hhcik7CiAJCWlucHV0LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrZXljb2RlX3JrMik7CkBAIC0yMjgsOCArMjI5LDggQEAKIAkJc25kX3VzYl9jYWlhcV9zZXRfYXV0b19tc2coZGV2LCAxLCAxMCwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVVNCX0lEKFVTQl9WSURfTkFUSVZFSU5TVFJVTUVOVFMsIFVTQl9QSURfQUsxKToKLQkJaW5wdXQtPmV2Yml0WzBdID0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQkJaW5wdXQtPmFic2JpdFswXSA9IEJJVChBQlNfWCk7CisJCWlucHV0LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9BQlMpOworCQlpbnB1dC0+YWJzYml0WzBdID0gQklUX01BU0soQUJTX1gpOwogCQlpbnB1dC0+a2V5Y29kZSA9IGtleWNvZGVfYWsxOwogCQlpbnB1dC0+a2V5Y29kZXNpemUgPSBzaXplb2YoY2hhcik7CiAJCWlucHV0LT5rZXljb2RlbWF4ID0gQVJSQVlfU0laRShrZXljb2RlX2FrMSk7Cg==